<?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>135255</bug_id>
          
          <creation_ts>2014-07-24 14:10:43 -0700</creation_ts>
          <short_desc>Merge CheckingContexts from SelectorCompiler and SelectorChecker</short_desc>
          <delta_ts>2014-09-13 00:53:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>135733</dependson>
          <blocked>135242</blocked>
    
    <blocked>135293</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1024596</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-07-24 14:10:43 -0700</bug_when>
    <thetext>Eventually SelectorCompiler::CheckingContext and SelectorChecker::SelectorCheckingContext should be made the same class.  

m_mode should be moved from SelectorChecker to SelectorChecker::SelectorCheckingContext because the compiled selectors need it, too.  
m_element should probably be moved from SelectorChecker::SelectorCheckingContext to SelectorChecker because the compiled selectors probably don&apos;t need it.
There might be some other things that need to move around as we compile all selectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025005</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-07-26 04:02:25 -0700</bug_when>
    <thetext>This looks really nice!
I think we can remove SelectorChecker::CheckingContext third parameter, visitedMatchType. Only when the mode is QueryingRules, we pass VisitedMatchDisabled value to this constructor.
When mode is moved to this CheckingContext, we can determine this value by `mode == QueryingRules ? VisitedMatchDisabled : VisitedMatchEnabled`!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032358</commentid>
    <comment_count>2</comment_count>
      <attachid>237413</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-30 11:44:41 -0700</bug_when>
    <thetext>Created attachment 237413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032359</commentid>
    <comment_count>3</comment_count>
      <attachid>237414</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-30 11:48:02 -0700</bug_when>
    <thetext>Created attachment 237414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032360</commentid>
    <comment_count>4</comment_count>
      <attachid>237415</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-30 12:01:51 -0700</bug_when>
    <thetext>Created attachment 237415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032361</commentid>
    <comment_count>5</comment_count>
      <attachid>237416</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-30 12:13:33 -0700</bug_when>
    <thetext>Created attachment 237416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032364</commentid>
    <comment_count>6</comment_count>
      <attachid>237416</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-30 12:19:12 -0700</bug_when>
    <thetext>Comment on attachment 237416
Patch

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

Added comments.

&gt; Source/WebCore/css/ElementRuleCollector.cpp:312
&gt; +    context.scrollbarPart = m_pseudoStyleRequest.scrollbarPart;

Merged. So we simply use SelectorChecker::CheckingContext for slow path and CSS JIT.

&gt; Source/WebCore/css/SelectorChecker.cpp:63
&gt; +};

Moved into SelectorChecker.cpp!

&gt; Source/WebCore/css/SelectorChecker.cpp:85
&gt; +};

Defined SelectorChecker::CheckingContextWithStatus. It is extended CheckingContext with SelectorChecker specific fields.

&gt; Source/WebCore/css/SelectorChecker.cpp:163
&gt; +bool SelectorChecker::match(const CSSSelector* selector, Element* element, const CheckingContext&amp; providedContext) const

Take selector and element. It is similar to CSS JIT checker interface.

&gt; Source/WebCore/css/SelectorChecker.cpp:165
&gt; +    CheckingContextWithStatus context(providedContext, selector, element);

Then update provided SelectorChecker::CheckingContext to SelectorChecker::CheckingContextWithStatus.

&gt; Source/WebCore/css/SelectorChecker.h:-49
&gt; -    enum VisitedMatchType { VisitedMatchDisabled, VisitedMatchEnabled };

Hidden!

&gt; Source/WebCore/css/SelectorChecker.h:55
&gt; +    struct CheckingContext {

Moved from SelectorCompiler::CheckingContext to here.

&gt; Source/WebCore/css/SelectorChecker.h:89
&gt; +    bool checkScrollbarPseudoClass(const CheckingContextWithStatus&amp;, const CSSSelector*) const;

Internally, use CheckingContextWithStatus.

&gt; Source/WebCore/css/SelectorCheckerTestFunctions.h:171
&gt; +

ContextType is now unnecessary since CheckingContexts are merged.

&gt; Source/WebCore/css/SelectorQueryFastPath.h:42
&gt; +    bool matchesRightmostSelector() const;

Now don&apos;t take visitedMatchType parameter since visited match type is always disabled under the SelectorQuery context.

&gt; Source/WebCore/css/SelectorQueryFastPath.h:47
&gt; +    bool commonPseudoClassSelectorMatches() const;

matchesRightmostAttributeSelector is dropped since it is no longer used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033126</commentid>
    <comment_count>7</comment_count>
      <attachid>237416</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-03 20:49:29 -0700</bug_when>
    <thetext>Comment on attachment 237416
Patch

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

Sorry for the delay, I was finishing on some style invalidation bug.

The patch is a good improvement of the code base.

You can remove SelectorQueryFastPath instead of cleaning it up. SelectorQueryFastPath was invented by Antti to solve the performance problems before we had the CSS JIT. Nowadays it is no longer useful, the JIT is a lot faster.

&gt; Source/WebCore/ChangeLog:4
&gt; +        Merge CheckingContexts from SelectorCompiler and SelectorChecker
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=135255

You have 2 changeslog entries.

&gt; Source/WebCore/CMakeLists.txt:1306
&gt; -    css/SelectorCheckerFastPath.cpp
&gt;      css/SelectorFilter.cpp
&gt; +    css/SelectorQueryFastPath.cpp

You don&apos;t need to bother with SelectorCheckerFastPath. We should remove it, I just haven&apos;t had time to clean up SelectorQuery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033127</commentid>
    <comment_count>8</comment_count>
      <attachid>237416</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-03 20:54:00 -0700</bug_when>
    <thetext>Comment on attachment 237416
Patch

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

Thank you for your review! OK, so I&apos;ll drop fast path implementation and upload the revised patch :)

&gt;&gt; Source/WebCore/ChangeLog:4
&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=135255
&gt; 
&gt; You have 2 changeslog entries.

Oops! Thank you for pointing it :D

&gt;&gt; Source/WebCore/CMakeLists.txt:1306
&gt;&gt; +    css/SelectorQueryFastPath.cpp
&gt; 
&gt; You don&apos;t need to bother with SelectorCheckerFastPath. We should remove it, I just haven&apos;t had time to clean up SelectorQuery.

Make sense. So I&apos;ll remove it and clean up SelectorQuery implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034153</commentid>
    <comment_count>9</comment_count>
      <attachid>237852</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-09 13:46:58 -0700</bug_when>
    <thetext>Created attachment 237852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034158</commentid>
    <comment_count>10</comment_count>
      <attachid>237852</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-09 14:00:01 -0700</bug_when>
    <thetext>Comment on attachment 237852
Patch

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

Sorry for my further late reply.

&gt; Source/WebCore/dom/SelectorQuery.cpp:-117
&gt; -    if (selectorData.isFastCheckable &amp;&amp; !element.isSVGElement()) {

SelectorCheckerFastPath is dropped.

&gt; Source/WebCore/dom/SelectorQuery.cpp:421
&gt;          }

In the old and new implementations, when `RightMostWithIdMatch` is used, basically `selectorMatches` is called and CSS Selector JIT is not used.

In the SelectorQuery implementation, in the some cases, CSS JIT is not used. Such as `RightMostWithIdMatch` case, and multiple selector case (`document.querySelector(&apos;a, b&apos;)`).
In the `RightMostWithIdMatch` case, the searched node basically becomes one (matched by id). So compiling CSS Selector may affect the performance.
In the multiple selector case, it also incurs larger CSS JIT compiling overhead compared to the typical one.

But, since the fast path is dropped, it sometimes raises the perf regression on `RightMostWithIdMatch`(But since the target node is typically only one, so it may not have any perf regression.).

My questions are,
1. Is the old behavior intended? (not performing CSS JIT in the case of `RightMostWithIdMatch`, multiple selectors and `Element.matches`)
2. Is it acceptable dropping the fast path from selectorMatches? It may raise perf regression on non CSS JIT cases (such as (1))

Do you think about this?

In this patch, I&apos;ve simply dropped the fast path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034216</commentid>
    <comment_count>11</comment_count>
      <attachid>237852</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-09 17:56:11 -0700</bug_when>
    <thetext>Comment on attachment 237852
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        always VisitedMatchDisabled. In this patch, we rename SelectorCheckerFastPath to SelectorQueryFastPath, and
&gt; +        drop VisitedMatchType parameter.

The part regarding SelectorCheckerFastPath needs to be updated.

&gt; Source/WebCore/css/SelectorChecker.cpp:66
&gt; +    // Initial selector constructor

No need for the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034269</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-10 05:37:36 -0700</bug_when>
    <thetext>Oops. I&apos;ve Ctrl-C on `webkit-patch land`. So closing this manually.
http://trac.webkit.org/changeset/173457</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034790</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-11 19:14:11 -0700</bug_when>
    <thetext>It looks like the regression for comma separated selectors is bigger than anticipated: https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Dromaeo%2Fcssquery-jquery%3ARuns%22%5D%5D&amp;days=6&amp;zoom=%5B1410108072682.0085%2C1410415670537.5554%5D

I&apos;ll look into it tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034827</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 00:24:00 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; It looks like the regression for comma separated selectors is bigger than anticipated: https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Dromaeo%2Fcssquery-jquery%3ARuns%22%5D%5D&amp;days=6&amp;zoom=%5B1410108072682.0085%2C1410415670537.5554%5D
&gt; 
&gt; I&apos;ll look into it tomorrow.

Oops! Thank you for your catch!
Do you think about implementing CSS JIT for multiple selectors?
It will be refactored and reused for :matches implementation, and compared to :matches, it seems more stable.
If it&apos;s OK, I&apos;ll start to implement it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034837</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-12 02:46:43 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; It looks like the regression for comma separated selectors is bigger than anticipated: https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Dromaeo%2Fcssquery-jquery%3ARuns%22%5D%5D&amp;days=6&amp;zoom=%5B1410108072682.0085%2C1410415670537.5554%5D
&gt; &gt; 
&gt; &gt; I&apos;ll look into it tomorrow.
&gt; 
&gt; Oops! Thank you for your catch!
&gt; Do you think about implementing CSS JIT for multiple selectors?
&gt; It will be refactored and reused for :matches implementation, and compared to :matches, it seems more stable.
&gt; If it&apos;s OK, I&apos;ll start to implement it.

Long term we should use :matches() but it will take a while before we have it complete. The complete :matches() is pretty tricky: multilevel backtracking, multiple pseudo element matching and :visited/:link. With all the tests this will require, it is gonna be a lot of work.

Short term for this regression we should:
1) Profile this benchmark to confirm the regression is caused by SelectorChecker.
2) If (2) is right, just compile everything that can be compiled and run a loop mixing CSS JIT and slow Selector checker.

For (2), I am thinking something like:
    // ... try to compile every selector.
    if (allSelectorsCompiled) {
        // Traversal checking each compiled selector for every element.
    } else {
        // Slow case like we do today.
    }

Once :matches() is ready and release quality, we&apos;ll remove the hack.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034855</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 07:36:46 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; It looks like the regression for comma separated selectors is bigger than anticipated: https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Dromaeo%2Fcssquery-jquery%3ARuns%22%5D%5D&amp;days=6&amp;zoom=%5B1410108072682.0085%2C1410415670537.5554%5D
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;ll look into it tomorrow.
&gt; &gt; 
&gt; &gt; Oops! Thank you for your catch!
&gt; &gt; Do you think about implementing CSS JIT for multiple selectors?
&gt; &gt; It will be refactored and reused for :matches implementation, and compared to :matches, it seems more stable.
&gt; &gt; If it&apos;s OK, I&apos;ll start to implement it.
&gt; 
&gt; Long term we should use :matches() but it will take a while before we have it complete. The complete :matches() is pretty tricky: multilevel backtracking, multiple pseudo element matching and :visited/:link. With all the tests this will require, it is gonna be a lot of work.
&gt; 
&gt; Short term for this regression we should:
&gt; 1) Profile this benchmark to confirm the regression is caused by SelectorChecker.
&gt; 2) If (2) is right, just compile everything that can be compiled and run a loop mixing CSS JIT and slow Selector checker.
&gt; 
&gt; For (2), I am thinking something like:
&gt;     // ... try to compile every selector.
&gt;     if (allSelectorsCompiled) {
&gt;         // Traversal checking each compiled selector for every element.
&gt;     } else {
&gt;         // Slow case like we do today.
&gt;     }
&gt; 
&gt; Once :matches() is ready and release quality, we&apos;ll remove the hack.
&gt; 
&gt; What do you think?

It sounds reasonable.
I&apos;ll take a profile too. Now running `Tools/Scripts/run-perf-tests --release Dromaeo/cssquery-jquery.html`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034866</commentid>
    <comment_count>17</comment_count>
      <attachid>238029</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 08:56:14 -0700</bug_when>
    <thetext>Created attachment 238029
Trunk Perf Results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034867</commentid>
    <comment_count>18</comment_count>
      <attachid>238030</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 08:56:52 -0700</bug_when>
    <thetext>Created attachment 238030
Perf Results with reverting this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034870</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 09:01:42 -0700</bug_when>
    <thetext>I&apos;ve measured the performance with `Tools/Scripts/run-perf-tests --release Dromaeo/cssquery-jquery.html`, and I&apos;ve found that actually performance regressions occur in the multiple selectors cases.

Attached perf test results. In this results, 

`div, a, span`: 6999.94/s =&gt; 3623.90/s
`div, div, div`: 8511.85/s =&gt; 3895.40/s
`div.character, div.dialog`: 11.53k/s =&gt; 5343.20/s

results significantly become worse. In the other results, there&apos;s no observable performance regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034894</commentid>
    <comment_count>20</comment_count>
      <attachid>238039</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 11:27:42 -0700</bug_when>
    <thetext>Created attachment 238039
JIT Compiled version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034896</commentid>
    <comment_count>21</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-12 11:31:31 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=238039) [details]
&gt; JIT Compiled version

Wow, that&apos;s awesome</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034899</commentid>
    <comment_count>22</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 11:32:47 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034900</commentid>
    <comment_count>23</comment_count>
      <attachid>238040</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 11:32:53 -0700</bug_when>
    <thetext>Created attachment 238040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034901</commentid>
    <comment_count>24</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-12 11:38:42 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; Created an attachment (id=238039) [details] [details]
&gt; &gt; JIT Compiled version
&gt; 
&gt; Wow, that&apos;s awesome

Yeah, I&apos;m surprised at such a great performance gain by applying JIT to multiple selectors!
Benchmarks are very very helpful for optimizing the existing software stacks.
Thank you for your great catch and https://perf.webkit.org/!

I need to monitor https://perf.webkit.org/ :)
And need to run run-perf-tests, it&apos;s great!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034906</commentid>
    <comment_count>25</comment_count>
      <attachid>238040</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-12 11:49:30 -0700</bug_when>
    <thetext>Comment on attachment 238040
Patch

Quick review because I am on the go, but everything looks right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034962</commentid>
    <comment_count>26</comment_count>
      <attachid>238060</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-12 14:48:41 -0700</bug_when>
    <thetext>Created attachment 238060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035014</commentid>
    <comment_count>27</comment_count>
      <attachid>238060</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-12 17:03:42 -0700</bug_when>
    <thetext>Comment on attachment 238060
Patch

Clearing flags on attachment: 238060

Committed r173590: &lt;http://trac.webkit.org/changeset/173590&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035015</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-12 17:03:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035041</commentid>
    <comment_count>29</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-12 20:40:31 -0700</bug_when>
    <thetext>The problem is over, you got all the performance back...and then some: https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Dromaeo%2Fcssquery-jquery%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Dromaeo%2Fcssquery-dojo%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22CSS%2FQuerySelector%3ATime%22%5D%5D&amp;days=25</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035055</commentid>
    <comment_count>30</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-09-13 00:53:07 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; The problem is over, you got all the performance back...and then some: https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Dromaeo%2Fcssquery-jquery%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Dromaeo%2Fcssquery-dojo%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22CSS%2FQuerySelector%3ATime%22%5D%5D&amp;days=25

Oh! very nice performance :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237413</attachid>
            <date>2014-08-30 11:44:41 -0700</date>
            <delta_ts>2014-08-30 11:47:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135255-20140831034530.patch</filename>
            <type>text/plain</type>
            <size>65625</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzAxNWJhNDQ5NmZkNGMx
ZGYyOGIzMTJjMTBlOTMwN2JhYmI5ZWVmNC4uMDZmOGMyNDJjNTBlMDViYjYxZTlmMThmNjg3M2Ew
ODc0ZjA0OTAxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcyIEBACiAyMDE0LTA4LTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCisgICAgICAgIE1lcmdlIENoZWNr
aW5nQ29udGV4dHMgZnJvbSBTZWxlY3RvckNvbXBpbGVyIGFuZCBTZWxlY3RvckNoZWNrZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI1NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIG1lcmdlIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgYW5k
IFNlbGVjdG9yQ29tcGlsZXI6OkNoZWNraW5nQ29udGV4dC4KKyAgICAgICAgV2UgZXhwb3NlIG9u
bHkgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQuIFRoYXQgaXMgdGhlIHNhbWUgdG8g
dGhlIG9sZCBTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQuCisgICAgICAgIEluIFNl
bGVjdG9yQ2hlY2tlci5jcHAsIHdlIGRlZmluZSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0IGFuZCB1c2UgaXQgaW50ZXJuYWxseS4KKyAgICAgICAgQW5kIHdlIG1vdmUg
VmlzaXRlZE1hdGNoVHlwZSBmcm9tIFNlbGVjdG9yQ2hlY2tlci5oIHRvIFNlbGVjdG9yQ2hlY2tl
ci5jcHAuCisgICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgaXMgYWxzbyBleHBsaWNpdGx5IHVzZWQg
YnkgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguIEhvd2V2ZXIsIFNlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoIGlzIG5vdworICAgICAgICB1c2VkIG9ubHkgZnJvbSBTZWxlY3RvclF1ZXJ5IChTdHlsZSBy
ZXNvbHV0aW9uIGFsZ29yaXRobSBubyBsb25nZXIgdXNlIGl0OiByMTcxMDU5KS4gU28gdmlzaXRl
ZE1hdGNoVHlwZSBpcworICAgICAgICBhbHdheXMgVmlzaXRlZE1hdGNoRGlzYWJsZWQuIEluIHRo
aXMgcGF0Y2gsIHdlIHJlbmFtZSBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aCB0byBTZWxlY3RvclF1
ZXJ5RmFzdFBhdGgsIGFuZAorICAgICAgICBkcm9wIFZpc2l0ZWRNYXRjaFR5cGUgcGFyYW1ldGVy
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAg
ICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyk6CisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNraW5n
Q29udGV4dEZvclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1h
dGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ6OkNoZWNraW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL1NlbGVj
dG9yUXVlcnlGYXN0UGF0aC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVzOjpm
YXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmNo
ZWNrQ2xhc3NWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrSURWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrVGFnVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpTZWxlY3RvclF1ZXJ5RmFzdFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjptYXRjaGVzUmlnaHRt
b3N0U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpt
YXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzRmFzdENoZWNrYWJsZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yUXVlcnlGYXN0UGF0aDo6Y2FuVXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
UXVlcnlGYXN0UGF0aDo6Y29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMpOgorICAgICAg
ICAqIGNzcy9TZWxlY3RvclF1ZXJ5RmFzdFBhdGguaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oLgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAg
ICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjpTZWxlY3RvckZyYWdtZW50OjphcHBlbmRVbm9wdGltaXplZFBzZXVkb0Ns
YXNzV2l0aENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6YWRk
U2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21D
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6YnJhbmNoT25SZXNvbHZpbmdNb2RlV2l0aENoZWNraW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjplbGVtZW50SXNBY3RpdmVGb3JTdHls
ZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6c2V0RWxl
bWVudFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVkQnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6ZWxlbWVu
dElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFj
ZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6Om1ha2VF
bGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZVJlcXVlc3RlZFBzZXVkb0VsZW1lbnRFcXVhbHNUb1NlbGVjdG9yUHNldWRvRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzU2NvcGVSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJrUHNl
dWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21w
aWxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdDb250
ZXh0OjpDaGVja2luZ0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1
ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OlNlbGVjdG9yRGF0
YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxl
ZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOgorCisyMDE0LTA4LTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCiAgICAgICAgIENTUzogUmVmYWN0
b3IgOnZpc2l0ZWQgaGFuZGxpbmcgaW4gU2VsZWN0b3JDaGVja2VyCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU2MzkKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCBkMjVmODZmN2Y3YTk3ZTVlYmIwZGNmNzRkY2U0YjRkOGU0YmZhODVkLi44OGM0ZTY3
YjU5YTdhMzJiNDJlZmNhMDRiODIzMmZjN2VkYmZlNDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMTMwMiw4ICsxMzAyLDggQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9TVkdDU1NQ
YXJzZXIuY3BwCiAgICAgY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCiAgICAgY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAKLSAgICBjc3MvU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwCiAgICAg
Y3NzL1NlbGVjdG9yRmlsdGVyLmNwcAorICAgIGNzcy9TZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3Bw
CiAgICAgY3NzL1NvdXJjZVNpemVMaXN0LmNwcAogICAgIGNzcy9TdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzLmNwcAogICAgIGNzcy9TdHlsZU1lZGlhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhkZjRlMjE4N2RlYmMxMDI5
ZTA5MzE4NzYzMzA3NWRhOWQyN2UwNGQuLjQxOWJiZjFlNWI3OGZjYTVjZDIzZDJjNzZkZGRhM2Iw
ODNkMTFkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE0MTgsOCArMTQxOCw4IEBACiAJCTQxOUJDMkRGMTY4NTMyOTkwMEQ2
NEQ2RCAvKiBWaXNpdGVkTGlua1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTlCQzJERDE2ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExpbmtT
dGF0ZS5oICovOyB9OwogCQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29y
a2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxQTNENThDMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3Bw
ICovOyB9OwogCQk0MUEzRDU4RjEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhy
ZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUEz
RDU4RDEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmggKi87IH07Ci0J
CTQxQjhDRDQ1MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUI4Q0Q0MzE2
RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwICovOyB9OwotCQk0
MUI4Q0Q0NjE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjhDRDQ0MTZEMDQ1
OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oICovOyB9OworCQk0MUI4Q0Q0
NTE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjhDRDQzMTZEMDQ1OTEwMDBF
OENDMCAvKiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwICovOyB9OworCQk0MUI4Q0Q0NjE2RDA0
NTkxMDAwRThDQzAgLyogU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUI4Q0Q0NDE2RDA0NTkxMDAwRThDQzAgLyog
U2VsZWN0b3JRdWVyeUZhc3RQYXRoLmggKi87IH07CiAJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERF
QyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBBMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENo
YW5uZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0MUJGNzAwRjBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRjcw
MEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCAqLzsg
fTsKIAkJNDFCRjcwMTAwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFu
bmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUJG
NzAwRTBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCAqLzsg
fTsKQEAgLTg0MjgsOCArODQyOCw4IEBACiAJCTQxOUJDMkREMTY4NTMyOTkwMEQ2NEQ2RCAvKiBW
aXNpdGVkTGlua1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0
ZWRMaW5rU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBM0Q1OEMxMDFD
MTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwOyBwYXRoID0g
d29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MUEzRDU4RDEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERlZGljYXRlZFdvcmtlclRocmVh
ZC5oOyBwYXRoID0gd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDFCOENENDMxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hl
Y2tlckZhc3RQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNl
bGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDFCOENENDQxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQjhDRDQzMTZEMDQ1OTEwMDBFOENDMCAv
KiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDFCOENENDQxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3RvclF1ZXJ5RmFzdFBh
dGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCRjcwMEEwRkU4NkY0OTAwNUU4
REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZXNzYWdlUG9ydENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDFCRjcwMEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsLmNwcDsgcGF0aCA9IGRlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUJGNzAwRTBGRTg2RjYxMDA1RThE
RUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaDsgcGF0aCA9IGRlZmF1bHQv
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMTExLDggKzIyMTExLDggQEAKIAkJCQlBNzlCQURBMDE2MUU3RjNGMDBDMkU2NTIgLyog
UnVsZVNldC5oICovLAogCQkJCUU0NEI0QkIxMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuY3BwICovLAogCQkJCUU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLywKLQkJCQk0MUI4Q0Q0MzE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVj
a2VyRmFzdFBhdGguY3BwICovLAotCQkJCTQxQjhDRDQ0MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxl
Y3RvckNoZWNrZXJGYXN0UGF0aC5oICovLAorCQkJCTQxQjhDRDQzMTZEMDQ1OTEwMDBFOENDMCAv
KiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwICovLAorCQkJCTQxQjhDRDQ0MTZEMDQ1OTEwMDBF
OENDMCAvKiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCAqLywKIAkJCQk0MzJEM0ZFNzE4QTg2NTg0
MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oICovLAogCQkJCTQxNTA3
MTU1MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAgKi8sCiAJCQkJNDE1MDcx
NTYxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmggKi8sCkBAIC0yNTg0NCw3ICsy
NTg0NCw3IEBACiAJCQkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVj
dGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAv
KiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxQjhDRDQ2MTZEMDQ1OTEw
MDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDFCOENENDYxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDMyRDNGRTgxOEE4NjU4NDAwRDdEQzAzIC8qIFNlbGVjdG9yQ2hlY2tl
clRlc3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2Qjk5OTk3MTgwNEQ1NDIwMEQw
MTEyMSAvKiBTZWxlY3RvckNvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTUwNzE1ODE2
ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjky
ODAsNyArMjkyODAsNyBAQAogCQkJCUIyQzNEQTJFMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50
ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkVBODA3QzgwRjcxNEEwMzAwNTI0MTk5
IC8qIFNlbGVjdGlvblJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0QjRCQjMxNDE2NTBE
NzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0MUI4
Q0Q0NTE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNDFCOENENDUxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlG
YXN0UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkI5OTk5NjE4MDRENTQyMDBEMDExMjEg
LyogU2VsZWN0b3JDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTUwNzE1NzE2ODUw
NjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1
MzIyQUIxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcAppbmRleCBlYzA4NTM2MzkzNTAzMjgwNTY4NjY5
YjQxZWZlODFmNGUyMDZiMWVmLi5mZDU2YmM4YzU4N2EzNWJjZGFiZmEzYmI2ODg3Yjk0M2Y3N2Q1
MzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKQEAgLTgxLDggKzgxLDggQEAKICNp
bmNsdWRlICJQYWdlUnVsZUNvbGxlY3Rvci5jcHAiCiAjaW5jbHVkZSAiUnVsZUZlYXR1cmUuY3Bw
IgogI2luY2x1ZGUgIlJ1bGVTZXQuY3BwIgotI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoLmNwcCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5jcHAiCisjaW5jbHVkZSAiU2VsZWN0
b3JRdWVyeUZhc3RQYXRoLmNwcCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuY3BwIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKaW5k
ZXggZGFkNGEyMjYzMTFhMjI5ZDM4NjIxZGFkNDI1NzBkYjUxYTBlMTIwYS4uYWExOGZhNGFhMDAz
YjNkOTIwNDNmNjQ5ZTJiZmJlZTI0OTRlM2MyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuY3BwCkBAIC0yOTUsMjMgKzI5NSwyNiBAQCBpbmxpbmUgYm9vbCBF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRh
KQogICAgICAgICBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciA9IHJ1bGVEYXRhLmNvbXBpbGVkU2Vs
ZWN0b3JDb2RlUmVmKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAg
aWYgKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyKSB7Ci0gICAgICAgIGlmIChydWxlRGF0YS5jb21w
aWxhdGlvblN0YXR1cygpID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcikgewotICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6U2ltcGxlU2VsZWN0
b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnNpbXBsZVNlbGVj
dG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBydWxlRGF0YS5jb21w
aWxhdGlvblN0YXR1cygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXNlbGVj
dG9yQ2hlY2tlcigmbV9lbGVtZW50KSB8fCBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCA9
PSBOT1BTRVVETywgIldoZW4gbWF0Y2hpbmcgcHNldWRvIGVsZW1lbnRzLCB3ZSBzaG91bGQgbmV2
ZXIgY29tcGlsZSBhIHNlbGVjdG9yIGNoZWNrZXIgd2l0aG91dCBjb250ZXh0IHVubGVzcyBpdCBj
YW5ub3QgbWF0Y2ggYW55dGhpbmcuIik7CisgICAgaWYgKGNvbXBpbGVkU2VsZWN0b3JDaGVja2Vy
ICYmIHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKCkgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKSB7CisgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVy
OjpzaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwg
cnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIXNlbGVjdG9yQ2hlY2tlcigmbV9lbGVtZW50KSB8fCBtX3BzZXVkb1N0eWxlUmVxdWVzdC5w
c2V1ZG9JZCA9PSBOT1BTRVVETywgIldoZW4gbWF0Y2hpbmcgcHNldWRvIGVsZW1lbnRzLCB3ZSBz
aG91bGQgbmV2ZXIgY29tcGlsZSBhIHNlbGVjdG9yIGNoZWNrZXIgd2l0aG91dCBjb250ZXh0IHVu
bGVzcyBpdCBjYW5ub3QgbWF0Y2ggYW55dGhpbmcuIik7CiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9Q
Uk9GSUxJTkcKLSAgICAgICAgICAgIHJ1bGVEYXRhLmNvbXBpbGVkU2VsZWN0b3JVc2VkKCk7Cisg
ICAgICAgIHJ1bGVEYXRhLmNvbXBpbGVkU2VsZWN0b3JVc2VkKCk7CiAjZW5kaWYKLSAgICAgICAg
ICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlcigmbV9lbGVtZW50KTsKKyAgICB9CisKKyAgICBTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBjb250ZXh0KG1fbW9kZSk7CisgICAgY29udGV4
dC5lbGVtZW50U3R5bGUgPSBtX3N0eWxlOworICAgIGNvbnRleHQucHNldWRvSWQgPSBtX3BzZXVk
b1N0eWxlUmVxdWVzdC5wc2V1ZG9JZDsKKyAgICBjb250ZXh0LnNjcm9sbGJhciA9IG1fcHNldWRv
U3R5bGVSZXF1ZXN0LnNjcm9sbGJhcjsKKyAgICBjb250ZXh0LnNjcm9sbGJhclBhcnQgPSBtX3Bz
ZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXJQYXJ0OworCisgICAgaWYgKGNvbXBpbGVkU2VsZWN0
b3JDaGVja2VyKSB7CiAgICAgICAgIEFTU0VSVChydWxlRGF0YS5jb21waWxhdGlvblN0YXR1cygp
ID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2lu
Z0NvbnRleHQpOwogCiAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6c2Vs
ZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVkU2VsZWN0b3JD
aGVja2VyLCBydWxlRGF0YS5jb21waWxhdGlvblN0YXR1cygpKTsKLSAgICAgICAgU2VsZWN0b3JD
b21waWxlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQobV9tb2RlKTsKLSAgICAgICAgY29udGV4
dC5lbGVtZW50U3R5bGUgPSBtX3N0eWxlOwotICAgICAgICBjb250ZXh0LnBzZXVkb0lkID0gbV9w
c2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7Ci0gICAgICAgIGNvbnRleHQuc2Nyb2xsYmFyID0g
bV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyOwotICAgICAgICBjb250ZXh0LnNjcm9sbGJh
clBhcnQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXJQYXJ0OworCiAjaWYgQ1NTX1NF
TEVDVE9SX0pJVF9QUk9GSUxJTkcKICAgICAgICAgcnVsZURhdGEuY29tcGlsZWRTZWxlY3RvclVz
ZWQoKTsKICNlbmRpZgpAQCAtMzIxLDEyICszMjQsNyBAQCBpbmxpbmUgYm9vbCBFbGVtZW50UnVs
ZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQogCiAgICAg
Ly8gU2xvdyBwYXRoLgogICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIobV9lbGVt
ZW50LmRvY3VtZW50KCkpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCAmbV9lbGVtZW50LCBtX21vZGUpOwot
ICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gbV9zdHlsZTsKLSAgICBjb250ZXh0LnBzZXVkb0lk
ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7Ci0gICAgY29udGV4dC5zY3JvbGxiYXIg
PSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7Ci0gICAgY29udGV4dC5zY3JvbGxiYXJQ
YXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyUGFydDsKLSAgICByZXR1cm4gc2Vs
ZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQpOworICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIu
bWF0Y2gocnVsZURhdGEuc2VsZWN0b3IoKSwgJm1fZWxlbWVudCwgY29udGV4dCk7CiB9CiAKIHZv
aWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVl
c3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAzZmM5ZGM5NmY4NWVkNzZlZmU2YWU2MTU2ZTQ4ODQ4
ZDVkOGE2ZGJjLi4yZjE0YjM5M2IwMGMzZjNiYzNmMTg1MDZiMjRlNTE0NzYzOGNmYTcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNTcsNyArNTcsMzMgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLSAgICAKKwor
ZW51bSBjbGFzcyBWaXNpdGVkTWF0Y2hUeXBlIDogdW5zaWduZWQgY2hhciB7CisgICAgRGlzYWJs
ZWQsIEVuYWJsZWQKK307CisKK3N0cnVjdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0IDogcHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IHsKKyAg
ICAvLyBJbml0aWFsIHNlbGVjdG9yIGNvbnN0cnVjdG9yCisgICAgU2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29u
dGV4dCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50KQorICAg
ICAgICA6IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KGNoZWNraW5nQ29udGV4dCkK
KyAgICAgICAgLCBzZWxlY3RvcihzZWxlY3RvcikKKyAgICAgICAgLCBlbGVtZW50KGVsZW1lbnQp
CisgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZShyZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hl
Y2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkIDog
VmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCkKKyAgICAgICAgLCBmaXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudChzZWxlY3RvcikKKyAgICAgICAgLCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyhmYWxz
ZSkKKyAgICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCisgICAgICAgICwgaGFzU2Vs
ZWN0aW9uUHNldWRvKGZhbHNlKQorICAgIHsgfQorCisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yOworICAgIEVsZW1lbnQqIGVsZW1lbnQ7CisgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNp
dGVkTWF0Y2hUeXBlOworICAgIGNvbnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudDsKKyAgICBib29sIGluRnVuY3Rpb25hbFBzZXVkb0NsYXNzOworICAgIGJvb2wgaGFz
U2Nyb2xsYmFyUHNldWRvOworICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvOworfTsKKwogc3Rh
dGljIGlubGluZSBib29sIGlzRmlyc3RDaGlsZEVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICByZXR1cm4gIUVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhlbGVt
ZW50KTsKQEAgLTEzNCw4ICsxNjAsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRz
T2ZUeXBlQWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQogewogfQog
Ci1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRl
eHQmIHByb3ZpZGVkQ29udGV4dCkgY29uc3QKIHsKKyAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCBjb250ZXh0KHByb3ZpZGVkQ29udGV4dCwgc2VsZWN0b3IsIGVsZW1lbnQpOwogICAgIFBzZXVk
b0lkIHBzZXVkb0lkID0gTk9QU0VVRE87CiAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoY29udGV4
dCwgcHNldWRvSWQpICE9IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTc0LDcgKzIwMSw3IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTCiAgICAgU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCB1cGRhdGVkQ29udGV4dChjb250ZXh0KTsK
ICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2Ugc2VlIHRoZSBmaXJzdCBs
aW5rLgogICAgIGlmIChjb250ZXh0LmVsZW1lbnQtPmlzTGluaygpKQotICAgICAgICB1cGRhdGVk
Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hE
aXNhYmxlZDsKKyAgICAgICAgdXBkYXRlZENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0
ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogICAgIHVwZGF0ZWRDb250ZXh0LmVsZW1lbnQgPSBjb250
ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAgICByZXR1cm4gdXBkYXRlZENvbnRleHQ7
CiB9CkBAIC0yMzUsNyArMjYyLDcgQEAgc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVja2luZ0NvbnRleHQgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0IFMKIAogICAgICAg
ICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRvIG1hdGNoIGFueXRo
aW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmIChyZWxhdGlvbiAhPSBDU1NT
ZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQpCi0g
ICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlz
YWJsZWQ7CisgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRl
ZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQgPSBO
T1BTRVVETzsKICAgICB9CkBAIC00OTgsNyArNTI1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZl
ciBvY2N1cnMKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1YkNvbnRleHQuc2VsZWN0b3It
PnBzZXVkb0NsYXNzVHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdCk7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3
aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBrbm93IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3QpIHll
dC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0Ns
YXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQgfHwgKHN1YkNvbnRl
eHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0xpbmsgJiYgc3ViQ29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJs
ZWQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRv
Q2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCB8fCAoc3ViQ29u
dGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzTGluayAmJiBzdWJDb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoVHlw
ZTo6RW5hYmxlZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZShzdWJDb250ZXh0KSkK
QEAgLTcwNSw3ICs3MzIsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3Qg
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAvLyBJ
bnNpZGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgZXhjZXB0IGZvciA6bm90LCA6dmlzaXRlZCBu
ZXZlciBtYXRjaGVzLgogICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnQtPmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVk
TWF0Y2hFbmFibGVkOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpICYmIGNv
bnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6CiAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oCmluZGV4IGY0MzkzZjMyMjYzYzEyNDA3ZDU0ODllYTVhOWUxYzA5ZjBiNjRlYmMu
LmVhMGY0YzM0YWFjYWQyMjU0YjA1ZTkxNGRmZWY5OTNhMTgwMzE0YjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTQ2LDQ3ICs0NiwzMyBAQCBjbGFzcyBTZWxlY3RvckNo
ZWNrZXIgewogICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNM
b2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
IH07CiAKIHB1YmxpYzoKLSAgICBlbnVtIFZpc2l0ZWRNYXRjaFR5cGUgeyBWaXNpdGVkTWF0Y2hE
aXNhYmxlZCwgVmlzaXRlZE1hdGNoRW5hYmxlZCB9OwogICAgIGVudW0gY2xhc3MgTW9kZSA6IHVu
c2lnbmVkIGNoYXIgewogICAgICAgICBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxl
cywgQ29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMsIFF1ZXJ5aW5n
UnVsZXMKICAgICB9OwogCiAgICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50Jik7CiAKLSAgICBz
dHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgewotICAgICAgICAvLyBJbml0aWFsIHNlbGVj
dG9yIGNvbnN0cnVjdG9yCi0gICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgTW9kZSByZXNvbHZpbmdNb2Rl
KQotICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikKLSAgICAgICAgICAgICwgcmVzb2x2
aW5nTW9kZShyZXNvbHZpbmdNb2RlKQotICAgICAgICAgICAgLCBlbGVtZW50KGVsZW1lbnQpCi0g
ICAgICAgICAgICAsIHNjb3BlKG51bGxwdHIpCi0gICAgICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5
cGUocmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRlZE1hdGNoRGlz
YWJsZWQgOiBWaXNpdGVkTWF0Y2hFbmFibGVkKQotICAgICAgICAgICAgLCBwc2V1ZG9JZChOT1BT
RVVETykKKyAgICBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0IHsKKyAgICAgICAgQ2hlY2tpbmdDb250
ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlKQorICAgICAgICAgICAgOiBy
ZXNvbHZpbmdNb2RlKHJlc29sdmluZ01vZGUpCiAgICAgICAgICAgICAsIGVsZW1lbnRTdHlsZShu
dWxscHRyKQorICAgICAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVETykKICAgICAgICAgICAgICwg
c2Nyb2xsYmFyKG51bGxwdHIpCi0gICAgICAgICAgICAsIGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdt
ZW50KHNlbGVjdG9yKQogICAgICAgICAgICAgLCBzY3JvbGxiYXJQYXJ0KE5vUGFydCkKLSAgICAg
ICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MoZmFsc2UpCi0gICAgICAgICAgICAsIGhh
c1Njcm9sbGJhclBzZXVkbyhmYWxzZSkKLSAgICAgICAgICAgICwgaGFzU2VsZWN0aW9uUHNldWRv
KGZhbHNlKQorICAgICAgICAgICAgLCBzY29wZShudWxscHRyKQogICAgICAgICB7IH0KIAotICAg
ICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIE1vZGUgcmVzb2x2aW5n
TW9kZTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAgY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGU7Ci0gICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZTsK
LSAgICAgICAgUHNldWRvSWQgcHNldWRvSWQ7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9k
ZSByZXNvbHZpbmdNb2RlOwogICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOworICAg
ICAgICBQc2V1ZG9JZCBwc2V1ZG9JZDsKICAgICAgICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxi
YXI7Ci0gICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dDsKICAgICAgICAgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0OwotICAgICAgICBib29sIGlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzOwotICAgICAgICBib29sIGhhc1Njcm9sbGJhclBzZXVkbzsK
LSAgICAgICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlOwogICAgIH07CiAKLSAgICBib29sIG1hdGNoKGNvbnN0IFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0JikgY29uc3Q7CisgICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
OworCisgICAgYm9vbCBtYXRjaChjb25zdCBDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBjb25zdCBD
aGVja2luZ0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIHRhZ01hdGNoZXMoY29u
c3QgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICBzdGF0aWMgYm9vbCBpc0Nv
bW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ZjYwNWQ0ZDRlMDgyZjlkZDI5OTM0ZjQyYjYwOTFmNDM2NDE4MzNjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
IChrZGVAY2FyZXdvbGYuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFz
IFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKLSAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgiCi0KLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotbmFt
ZXNwYWNlIHsKLQotdGVtcGxhdGUgPGJvb2wgY2hlY2tWYWx1ZShjb25zdCBFbGVtZW50KiwgY29u
c3QgQ1NTU2VsZWN0b3IqKT4KLWlubGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiBlbGVtZW50LCBjb25z
dCBDU1NTZWxlY3RvciomIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgY29uc3QgRWxlbWVudComIHRv
cENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkKLXsKLSAgICBmb3IgKDsgZWxlbWVudDsg
ZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICBpZiAoY2hlY2tW
YWx1ZShlbGVtZW50LCBzZWxlY3RvcikpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVs
YXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCkKLSAgICAgICAgICAgICAgICB0b3BD
aGlsZE9yU3Vic2VsZWN0b3IgPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAoIXRvcENoaWxkT3JT
dWJzZWxlY3RvcikgewotICAgICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rvci0+cmVsYXRpb24o
KSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0
b3IgPSBzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRj
aEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNlbGVj
dG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAgICAgICAgICAg
ICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgc2Vs
ZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRvcENoaWxkT3JTdWJzZWxlY3RvcikgewotICAgICAg
ICAgICAgLy8gQ2hpbGQgb3Igc3Vic2VsZWN0b3IgY2hlY2sgZmFpbGVkLgotICAgICAgICAgICAg
Ly8gSWYgdGhlIG1hdGNoIGVsZW1lbnQgaXMgbnVsbCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yIHdh
cyBhbHNvIHRoZSB2ZXJ5IHRvcG1vc3Qgc2VsZWN0b3IgYW5kIGhhZCB0byBtYXRjaAotICAgICAg
ICAgICAgLy8gdGhlIG9yaWdpbmFsIGVsZW1lbnQgd2Ugd2VyZSBjaGVja2luZy4KLSAgICAgICAg
ICAgIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIC8vIFRoZXJlIG1heSBiZSBvdGhlciBtYXRj
aGVzIGRvd24gdGhlIGFuY2VzdG9yIGNoYWluLgotICAgICAgICAgICAgLy8gUmV3aW5kIHRvIHRo
ZSB0b3Btb3N0IGNoaWxkIG9yIHN1YnNlbGVjdG9yIGFuZCB0aGUgZWxlbWVudCBpdCBtYXRjaGVk
LCBjb250aW51ZSBjaGVja2luZyBhbmNlc3RvcnMuCi0gICAgICAgICAgICBzZWxlY3RvciA9IHRv
cENoaWxkT3JTdWJzZWxlY3RvcjsKLSAgICAgICAgICAgIGVsZW1lbnQgPSB0b3BDaGlsZE9yU3Vi
c2VsZWN0b3JNYXRjaEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHRvcENo
aWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlubGluZSBib29sIGNoZWNrQ2xhc3NW
YWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ip
Ci17Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+Y2xhc3NOYW1l
cygpLmNvbnRhaW5zKHNlbGVjdG9yLT52YWx1ZSgpKTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tJ
RFZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSA9PSBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCk7Ci19Ci0KLWlu
bGluZSBib29sIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgcmV0dXJuIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tFeGFjdEF0dHJpYnV0ZShlbGVtZW50LCBzZWxlY3Rvciwgc2VsZWN0b3ItPmF0
dHJpYnV0ZSgpLCBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotfQotCi1pbmxpbmUgYm9vbCBj
aGVja1RhZ1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvcikKLXsKLSAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGVsZW1l
bnQsIHNlbGVjdG9yLT50YWdRTmFtZSgpKTsKLX0KLQotfQotCi1TZWxlY3RvckNoZWNrZXJGYXN0
UGF0aDo6U2VsZWN0b3JDaGVja2VyRmFzdFBhdGgoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9zZWxlY3RvcihzZWxlY3RvcikKLSAg
ICAsIG1fZWxlbWVudChlbGVtZW50KQotewotfQotCi1ib29sIFNlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoOjptYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0
Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKFNlbGVjdG9yQ2hl
Y2tlckZhc3RQYXRoOjpjYW5Vc2UobV9zZWxlY3RvcikpOwotCi0gICAgc3dpdGNoIChtX3NlbGVj
dG9yLT5tX21hdGNoKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6VGFnOgotICAgICAgICByZXR1
cm4gY2hlY2tUYWdWYWx1ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3IpOwotICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OkNsYXNzOgotICAgICAgICByZXR1cm4gY2hlY2tDbGFzc1ZhbHVlKG1fZWxlbWVudCwg
bV9zZWxlY3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6Ci0gICAgICAgIHJldHVybiBj
aGVja0lEVmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9yKTsKLSAgICBjYXNlIENTU1NlbGVjdG9y
OjpFeGFjdDoKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6Ci0gICAgICAgIHJldHVybiBjaGVj
a0V4YWN0QXR0cmlidXRlVmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9yKTsKLSAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoKLSAgICAgICAgcmV0dXJuIGNvbW1vblBzZXVkb0NsYXNz
U2VsZWN0b3JNYXRjaGVzKHZpc2l0ZWRNYXRjaFR5cGUpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6Om1hdGNoZXMoKSBjb25zdAotewotICAgIEFTU0VS
VChtYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hF
bmFibGVkKSk7Ci0gICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gbV9zZWxlY3RvcjsK
LSAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gbV9lbGVtZW50OwotCi0gICAgY29uc3QgQ1NT
U2VsZWN0b3IqIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgY29uc3QgRWxlbWVudCog
dG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gMDsKLSAgICBpZiAoc2VsZWN0b3It
PnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigp
ID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVj
dG9yID0gc2VsZWN0b3I7Ci0KLSAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpOwotCi0gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwotCi0gICAg
Ly8gV2Uga25vdyB0aGlzIGNvbXBvdW5kIHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50LCBjaGlsZCBh
bmQgc3Vic2VsZWN0b3IgY29tYmluYXRvcnMgb25seSBhbmQgYWxsIGNvbXBvbmVudHMgYXJlIHNp
bXBsZS4KLSAgICB3aGlsZSAoc2VsZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+
bV9tYXRjaCkgewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAgICAgICAgICAg
IGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlPihzZWxlY3Rvciwg
ZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRj
aEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJZDoKLSAgICAgICAgICAgIGlmICghZmFz
dENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tJRFZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9w
Q2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpUYWc6Ci0gICAgICAgICAgICBpZiAoIWZhc3RDaGVja1Npbmds
ZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vi
c2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlNldDoKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6Ci0gICAgICAg
ICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1
ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJl
bGF0aW9uIHJlbGF0aW9uKQotewotICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6
RGVzY2VuZGFudCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgcmVsYXRpb24g
PT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNG
YXN0Q2hlY2thYmxlTWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlm
IChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KSB7Ci0gICAgICAgIC8vIFN0
eWxlIGF0dHJpYnV0ZSBpcyBnZW5lcmF0ZWQgbGF6aWx5IGJ1dCB0aGUgZmFzdCBwYXRoIGRvZXNu
J3QgdHJpZ2dlciBpdC4KLSAgICAgICAgLy8gRGlzYWxsb3cgdGhlbSBoZXJlIHJhdGhlciB0aGFu
IG1ha2luZyB0aGUgZmFzdCBwYXRoIG1vcmUgYnJhbmNoeS4KLSAgICAgICAgcmV0dXJuIHNlbGVj
dG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHI7Ci0gICAgfQotICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QpCi0gICAgICAgIHJldHVybiBzZWxlY3Rvci0+
YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyICYmIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZl
QXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKLX0K
LQotc3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJl
bGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2Vy
Ojppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpOwotfQotCi1ib29sIFNlbGVj
dG9yQ2hlY2tlckZhc3RQYXRoOjpjYW5Vc2UoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQot
ewotICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0b3IpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsK
LSAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRpb24o
KSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNGYXN0Q2hlY2th
YmxlTWF0Y2goc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aDo6Y29tbW9u
UHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMoU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hU
eXBlIHZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKFNlbGVjdG9yQ2hlY2tl
cjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKG1fc2VsZWN0b3IpKTsKLSAgICBzd2l0Y2gg
KG1fc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NMaW5rOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW55TGlu
azoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+aXNMaW5rKCk7Ci0gICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkOgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5pc0xp
bmsoKSAmJiB2aXNpdGVkTWF0Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNo
RW5hYmxlZDsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZvY3VzOgotICAgICAg
ICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1l
bnQpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXJGYXN0UGF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWQxMDQ1
NTVmMTZkMGMzYjIxZDM3MTdlMzdjZjlhZjU3ODEyYjc3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXJGYXN0UGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChD
KSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFu
a3MuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqIENvcHlyaWdodCAo
YykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aF9oCi0jZGVmaW5lIFNlbGVjdG9y
Q2hlY2tlckZhc3RQYXRoX2gKLQotI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCi0jaW5jbHVkZSAi
U2VsZWN0b3JDaGVja2VyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2VsZWN0
b3JDaGVja2VyRmFzdFBhdGggewotcHVibGljOgotICAgIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRo
KGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopOwotCi0gICAgYm9vbCBtYXRjaGVz
KCkgY29uc3Q7Ci0gICAgYm9vbCBtYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoU2VsZWN0b3JDaGVj
a2VyOjpWaXNpdGVkTWF0Y2hUeXBlKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXNSaWdodG1vc3RB
dHRyaWJ1dGVTZWxlY3RvcigpIGNvbnN0OwotCi0gICAgc3RhdGljIGJvb2wgY2FuVXNlKGNvbnN0
IENTU1NlbGVjdG9yKik7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjb21tb25Qc2V1ZG9DbGFzc1Nl
bGVjdG9yTWF0Y2hlcyhTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0Owot
Ci0gICAgY29uc3QgQ1NTU2VsZWN0b3IqIG1fc2VsZWN0b3I7Ci0gICAgY29uc3QgRWxlbWVudCog
bV9lbGVtZW50OwotfTsKLQotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6Om1h
dGNoZXNSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2Vs
ZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0IHx8IG1fc2VsZWN0b3ItPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OlNldCkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tFeGFjdEF0dHJpYnV0ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3IsIG1fc2VsZWN0b3ItPmF0
dHJpYnV0ZSgpLCBtX3NlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci0gICAgQVNTRVJUKCFtX3Nl
bGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yUXVlcnlG
YXN0UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMGE0NGU5MjE0ZDE2NzlmMDViY2M5NmMxYzg3ZDdlMTk0NDMyNDMyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0
aC5jcHAKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNh
bmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3Jh
IEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCIKKworI2luY2x1ZGUgIkhU
TUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlN0eWxlZEVs
ZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVlKGNvbnN0IEVs
ZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopPgoraW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xl
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVs
ZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBF
bGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQoreworICAgIGZvciAo
OyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAg
IGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKSkgeworICAgICAgICAgICAgaWYgKHNl
bGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50KQorICAgICAgICAg
ICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7CisgICAgICAgICAgICBlbHNlIGlmICgh
dG9wQ2hpbGRPclN1YnNlbGVjdG9yKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNlbGVjdG9y
LT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCBzZWxlY3Rvci0+cmVsYXRpb24o
KSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOworICAgICAgICAgICAgICAgIHRvcENoaWxk
T3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJz
ZWxlY3Rvck1hdGNoRWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQor
ICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAg
ICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9wQ2hpbGRPclN1YnNlbGVjdG9y
KSB7CisgICAgICAgICAgICAvLyBDaGlsZCBvciBzdWJzZWxlY3RvciBjaGVjayBmYWlsZWQuCisg
ICAgICAgICAgICAvLyBJZiB0aGUgbWF0Y2ggZWxlbWVudCBpcyBudWxsLCB0b3BDaGlsZE9yU3Vi
c2VsZWN0b3Igd2FzIGFsc28gdGhlIHZlcnkgdG9wbW9zdCBzZWxlY3RvciBhbmQgaGFkIHRvIG1h
dGNoCisgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3ZXJlIGNoZWNraW5n
LgorICAgICAgICAgICAgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJl
IG90aGVyIG1hdGNoZXMgZG93biB0aGUgYW5jZXN0b3IgY2hhaW4uCisgICAgICAgICAgICAvLyBS
ZXdpbmQgdG8gdGhlIHRvcG1vc3QgY2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5kIHRoZSBlbGVtZW50
IGl0IG1hdGNoZWQsIGNvbnRpbnVlIGNoZWNraW5nIGFuY2VzdG9ycy4KKyAgICAgICAgICAgIHNl
bGVjdG9yID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yOworICAgICAgICAgICAgZWxlbWVudCA9IHRv
cENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAg
ICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wg
Y2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvcikKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50
LT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkpOworfQorCitpbmxpbmUg
Ym9vbCBjaGVja0lEVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQt
PmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpID09IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwo
KTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICByZXR1cm4g
U2VsZWN0b3JDaGVja2VyOjpjaGVja0V4YWN0QXR0cmlidXRlKGVsZW1lbnQsIHNlbGVjdG9yLCBz
ZWxlY3Rvci0+YXR0cmlidXRlKCksIHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Cit9CisKK2lu
bGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OnRhZ01h
dGNoZXMoZWxlbWVudCwgc2VsZWN0b3ItPnRhZ1FOYW1lKCkpOworfQorCit9CisKK1NlbGVjdG9y
UXVlcnlGYXN0UGF0aDo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoKGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKKyAgICA6IG1fc2VsZWN0b3Ioc2VsZWN0
b3IpCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKK3sKK30KKworYm9vbCBTZWxlY3RvclF1ZXJ5
RmFzdFBhdGg6Om1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcigpIGNvbnN0Cit7CisgICAgQVNTRVJU
KFNlbGVjdG9yUXVlcnlGYXN0UGF0aDo6Y2FuVXNlKG1fc2VsZWN0b3IpKTsKKworICAgIHN3aXRj
aCAobV9zZWxlY3Rvci0+bV9tYXRjaCkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlRhZzoKKyAg
ICAgICAgcmV0dXJuIGNoZWNrVGFnVmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9yKTsKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpDbGFzczoKKyAgICAgICAgcmV0dXJuIGNoZWNrQ2xhc3NWYWx1ZSht
X2VsZW1lbnQsIG1fc2VsZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgorICAgICAg
ICByZXR1cm4gY2hlY2tJRFZhbHVlKG1fZWxlbWVudCwgbV9zZWxlY3Rvcik7CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6RXhhY3Q6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgorICAgICAgICBy
ZXR1cm4gY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVudCwgbV9zZWxlY3Rvcik7Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6CisgICAgICAgIHJldHVybiBjb21tb25Q
c2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcygpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2Vs
ZWN0b3JRdWVyeUZhc3RQYXRoOjptYXRjaGVzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobWF0Y2hl
c1JpZ2h0bW9zdFNlbGVjdG9yKCkpOworICAgIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9
IG1fc2VsZWN0b3I7CisgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IG1fZWxlbWVudDsKKwor
ICAgIGNvbnN0IENTU1NlbGVjdG9yKiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOworICAgIGNv
bnN0IEVsZW1lbnQqIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9IDA7CisgICAg
aWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCBzZWxlY3Rv
ci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgICAgIHRvcENo
aWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOworCisgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlv
bigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgZWxlbWVudCA9IGVsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKTsKKworICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rv
cnkoKTsKKworICAgIC8vIFdlIGtub3cgdGhpcyBjb21wb3VuZCBzZWxlY3RvciBoYXMgZGVzY2Vu
ZGFudCwgY2hpbGQgYW5kIHN1YnNlbGVjdG9yIGNvbWJpbmF0b3JzIG9ubHkgYW5kIGFsbCBjb21w
b25lbnRzIGFyZSBzaW1wbGUuCisgICAgd2hpbGUgKHNlbGVjdG9yKSB7CisgICAgICAgIHN3aXRj
aCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xhc3M6
CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrQ2xhc3NWYWx1
ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6CisgICAgICAg
ICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrSURWYWx1ZT4oc2VsZWN0b3Is
IGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0
Y2hFbGVtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6VGFnOgorICAgICAgICAgICAgaWYgKCFm
YXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja1RhZ1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwg
dG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4
YWN0OgorICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0V4YWN0
QXR0cmlidXRlVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3Is
IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKENT
U1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbikKK3sKKyAgICByZXR1cm4gcmVsYXRpb24gPT0g
Q1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgfHwgcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OkNoaWxk
IHx8IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGlzRmFzdENoZWNrYWJsZU1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKK3sKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlNldCkgewor
ICAgICAgICAvLyBTdHlsZSBhdHRyaWJ1dGUgaXMgZ2VuZXJhdGVkIGxhemlseSBidXQgdGhlIGZh
c3QgcGF0aCBkb2Vzbid0IHRyaWdnZXIgaXQuCisgICAgICAgIC8vIERpc2FsbG93IHRoZW0gaGVy
ZSByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGZhc3QgcGF0aCBtb3JlIGJyYW5jaHkuCisgICAgICAg
IHJldHVybiBzZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyOworICAgIH0KKyAgICBp
ZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQorICAgICAgICByZXR1
cm4gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0ciAmJiBIVE1MRG9jdW1lbnQ6Omlz
Q2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpOworICAgIHJldHVy
biBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnIHx8IHNlbGVjdG9yLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6Q2xhc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVSaWdodG1v
c3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKCFpc0Zh
c3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRpb24oKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gaXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3IpIHx8IFNl
bGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKTsKK30K
KworYm9vbCBTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6OmNhblVzZShjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IpCit7CisgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSaWdodG1vc3RTZWxlY3Rvcihz
ZWxlY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHNlbGVjdG9yID0gc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hp
c3RvcnkoKSkgeworICAgICAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKHNlbGVjdG9y
LT5yZWxhdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFp
c0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNlbGVjdG9yUXVlcnlGYXN0UGF0
aDo6Y29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMoKSBjb25zdAoreworICAgIEFTU0VS
VChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihtX3NlbGVjdG9y
KSk7CisgICAgc3dpdGNoIChtX3NlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSkgeworICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluazoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0FueUxpbms6CisgICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmlzTGluaygpOwor
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRm9jdXM6CisgICAgICAg
IHJldHVybiBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKG1fZWxlbWVu
dCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvclF1
ZXJ5RmFzdFBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTMzYTIzMmY2ZDIwODA4Mzc1MThiYjc4OTBlM2Ri
YTViMzdmNjQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
UXVlcnlGYXN0UGF0aC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1
IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENv
ZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgU2VsZWN0b3JRdWVyeUZhc3RQYXRoX2gKKyNkZWZpbmUgU2VsZWN0b3JRdWVyeUZhc3RQYXRo
X2gKKworI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2Vy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VsZWN0b3JRdWVyeUZhc3RQYXRo
IHsKK3B1YmxpYzoKKyAgICBTZWxlY3RvclF1ZXJ5RmFzdFBhdGgoY29uc3QgQ1NTU2VsZWN0b3Iq
LCBjb25zdCBFbGVtZW50Kik7CisKKyAgICBib29sIG1hdGNoZXMoKSBjb25zdDsKKyAgICBib29s
IG1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcigpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgY2Fu
VXNlKGNvbnN0IENTU1NlbGVjdG9yKik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBjb21tb25Qc2V1
ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcygpIGNvbnN0OworCisgICAgY29uc3QgQ1NTU2VsZWN0b3Iq
IG1fc2VsZWN0b3I7CisgICAgY29uc3QgRWxlbWVudCogbV9lbGVtZW50OworfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDZlYTY3MDY4MGU2ODdkMjMz
MDBmOTI0ZjE4YTBiYmFhODA1MDkyZWMuLmYzMjE2MjEwOTU0ODFhMjQwOGMyOGJjNzI2MjQ4MWQ2
NTY5MDNmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtNTc0LDggKzU3NCw4
IEBAIGlubGluZSBib29sIGNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJl
Z2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpCiAKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0
b3JDaGVja2VyKHJlZ2lvbkVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIGZvciAoY29uc3QgQ1NT
U2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4
dChzKSkgewotICAgICAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHMsIHJlZ2lvbkVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tl
cjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7Ci0gICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIubWF0
Y2goc2VsZWN0b3JDaGVja2luZ0NvbnRleHQpKQorICAgICAgICBTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1v
ZGU6OlF1ZXJ5aW5nUnVsZXMpOworICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLm1hdGNoKHMs
IHJlZ2lvbkVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggOWI5YWFlNDQ4Y2ViOTVkNTg4MjMwNGZiZGYw
MWQ3NmIyOGEzNzEyMC4uMzk1OWNmNDRmZjM3OTQ5ZDJkMjI2YmNlYWFkOThhYWUyM2FhOTlmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApAQCAtMTU3LDcg
KzE1Nyw3IEBAIHN0cnVjdCBTZWxlY3RvckZyYWdtZW50IHsKICAgICB1bnNpZ25lZCB0YWdOYW1l
Tm90TWF0Y2hlZEJhY2t0cmFja2luZ1N0YXJ0V2lkdGhGcm9tSW5kaXJlY3RBZGphY2VudDsKICAg
ICB1bnNpZ25lZCB3aWR0aEZyb21JbmRpcmVjdEFkamFjZW50OwogCi0gICAgRnVuY3Rpb25UeXBl
IGFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChib29sICgqbWF0Y2hlciko
Y29uc3QgQ2hlY2tpbmdDb250ZXh0JikpOworICAgIEZ1bmN0aW9uVHlwZSBhcHBlbmRVbm9wdGlt
aXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoYm9vbCAoKm1hdGNoZXIpKGNvbnN0IFNlbGVjdG9y
Q2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JikpOwogICAgIAogICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUqIHRhZ05hbWU7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBpZDsKQEAgLTM2NCw3ICszNjQs
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZnJhZ21lbnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVu
dChTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDbwogICAgIHJldHVybiBmcmFnbWVudC5yZWxhdGlv
blRvUmlnaHRGcmFnbWVudCA9PSBGcmFnbWVudFJlbGF0aW9uOjpSaWdodG1vc3QgJiYgZnJhZ21l
bnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPT0gRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdt
ZW50czo6UmlnaHRtb3N0OwogfQogCi1GdW5jdGlvblR5cGUgU2VsZWN0b3JGcmFnbWVudDo6YXBw
ZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KGJvb2wgKCptYXRjaGVyKShjb25z
dCBDaGVja2luZ0NvbnRleHQmKSkKK0Z1bmN0aW9uVHlwZSBTZWxlY3RvckZyYWdtZW50OjphcHBl
bmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoYm9vbCAoKm1hdGNoZXIpKGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JikpCiB7CiAgICAgdW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzV2l0aENvbnRleHQuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIobWF0Y2hlcikp
OwogICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0Nv
bnRleHQ7CkBAIC0zNzcsMzMgKzM3NywzMyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBh
ZGRTY3JvbGxiYXJQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdAogICAg
ICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpTQzo6RnVuY3Rp
b25QdHIoaXNXaW5kb3dJbmFjdGl2ZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NE
aXNhYmxlZDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRv
Q2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFzczxDaGVj
a2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVk
UHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRGlzYWJsZWRQc2V1ZG9DbGFz
czxTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzRW5hYmxlZDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVu
b3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRW5hYmxlZFBz
ZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBw
ZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNFbmFi
bGVkUHNldWRvQ2xhc3M8U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvcml6b250YWw6Ci0gICAgICAgIHJldHVybiBm
cmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFy
TWF0Y2hlc0hvcml6b250YWxQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAg
cmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChz
Y3JvbGxiYXJNYXRjaGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hl
Y2tpbmdDb250ZXh0Pik7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWZXJ0aWNh
bDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NX
aXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzVmVydGljYWxQc2V1ZG9DbGFzczxDaGVja2luZ0Nv
bnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRv
Q2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzVmVydGljYWxQc2V1ZG9DbGFzczxTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzRGVjcmVtZW50OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNEZWNyZW1lbnRQc2V1
ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVu
ZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRGVjcmVt
ZW50UHNldWRvQ2xhc3M8U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0luY3JlbWVudDoKLSAgICAgICAgcmV0dXJuIGZy
YWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJN
YXRjaGVzSW5jcmVtZW50UHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJl
dHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Ny
b2xsYmFyTWF0Y2hlc0luY3JlbWVudFBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tp
bmdDb250ZXh0Pik7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTdGFydDoKLSAg
ICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29u
dGV4dChzY3JvbGxiYXJNYXRjaGVzU3RhcnRQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsK
KyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRo
Q29udGV4dChzY3JvbGxiYXJNYXRjaGVzU3RhcnRQc2V1ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRW5k
OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dp
dGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNFbmRQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+
KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NX
aXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3M8U2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Rv
dWJsZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNl
dWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRG91YmxlQnV0dG9uUHNldWRvQ2xh
c3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9w
dGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRv
blBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Pik7CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTaW5nbGVCdXR0b246Ci0gICAgICAgIHJldHVybiBm
cmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFy
TWF0Y2hlc1NpbmdsZUJ1dHRvblBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAg
ICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0
KHNjcm9sbGJhck1hdGNoZXNTaW5nbGVCdXR0b25Qc2V1ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTm9C
dXR0b246Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0Ns
YXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNldWRvQ2xhc3M8Q2hlY2tp
bmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBz
ZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNldWRvQ2xhc3M8
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc0Nvcm5lclByZXNlbnQ6Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBl
bmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0Nvcm5l
clByZXNlbnRQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZy
YWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJN
YXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0Pik7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6Ci0gICAg
ICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRl
eHQoc2Nyb2xsYmFyTWF0Y2hlc0FjdGl2ZVBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOwor
ICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhD
b250ZXh0KHNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92
ZXI6Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNz
V2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250
ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0Ns
YXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3M8U2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
RnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwogICAgIH0KQEAgLTE2MDEsNyArMTYw
MSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjphZGRGbGFnc1RvRWxlbWVudFN0eWxl
RnJvbUNvbnRleHQoQXNzZW1ibGVyOjpSZWdpc3RlCiAgICAgQVNTRVJUKG1fc2VsZWN0b3JDb250
ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rvcik7CiAKICAgICBMb2NhbFJlZ2lz
dGVyIGNoaWxkU3R5bGUobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgbV9hc3NlbWJsZXIubG9h
ZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0Yo
Q2hlY2tpbmdDb250ZXh0LCBlbGVtZW50U3R5bGUpKSwgY2hpbGRTdHlsZSk7CisgICAgbV9hc3Nl
bWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQsIGVsZW1lbnRTdHlsZSkp
LCBjaGlsZFN0eWxlKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayBpbnRvIGRvaW5n
IHNvbWV0aGluZyBzbWFydCBpbiBNYWNyb0Fzc2VtYmxlciBpbnN0ZWFkLgogICAgIEFzc2VtYmxl
cjo6QWRkcmVzcyBmbGFnQWRkcmVzcyhjaGlsZFN0eWxlLCBSZW5kZXJTdHlsZTo6bm9uaW5oZXJp
dGVkRmxhZ3NNZW1vcnlPZmZzZXQoKSArIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6
ZmxhZ3NNZW1vcnlPZmZzZXQoKSk7CkBAIC0xNjU3LDcgKzE2NTcsNyBAQCB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6bG9hZENoZWNraW5nQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y2hlY2tpbmdDbwogewogICAgIC8vIERlcGVuZCBvbiB0aGUgc3BlY2lmaWVkIHJlc29sdmluZyBt
b2RlIGFuZCBvdXIgY3VycmVudCBtb2RlLCBicmFuY2guCiAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoU2VsZWN0b3JDaGVja2VyOjpNb2RlKSA9PSAxLCAiV2UgZ2VuZXJhdGUgYSBieXRlIGxvYWQv
dGVzdCBmb3IgdGhlIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZS4iKTsKLSAgICByZXR1cm4gbV9hc3Nl
bWJsZXIuYnJhbmNoOChjb25kaXRpb24sIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRl
eHQsIE9CSkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHJlc29sdmluZ01vZGUpKSwgQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8U2Vs
ZWN0b3JDaGVja2VyOjpNb2RlPjo6dHlwZT4obW9kZSkpKTsKKyAgICByZXR1cm4gbV9hc3NlbWJs
ZXIuYnJhbmNoOChjb25kaXRpb24sIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQs
IE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgcmVzb2x2
aW5nTW9kZSkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxzdGQ6OnVuZGVy
bHlpbmdfdHlwZTxTZWxlY3RvckNoZWNrZXI6Ok1vZGU+Ojp0eXBlPihtb2RlKSkpOwogCiB9CiAK
QEAgLTI0MzQsNyArMjQzNCw3IEBAIHN0YXRpYyBib29sIGVsZW1lbnRJc0FjdGl2ZShFbGVtZW50
KiBlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzQWN0aXZlKTsKIH0KIAotc3RhdGljIGJvb2wgZWxlbWVudElzQWN0aXZlRm9yU3R5bGVS
ZXNvbHV0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENoZWNraW5nQ29udGV4dCogY2hlY2tp
bmdDb250ZXh0KQorc3RhdGljIGJvb2wgZWxlbWVudElzQWN0aXZlRm9yU3R5bGVSZXNvbHV0aW9u
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0
KiBjaGVja2luZ0NvbnRleHQpCiB7CiAgICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVzb2x2aW5n
TW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICBl
bGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlBY3RpdmUoKTsKQEAgLTI1MDUsNyArMjUwNSw3
IEBAIHN0YXRpYyB2b2lkIHNldEVsZW1lbnRTdHlsZUlzQWZmZWN0ZWRCeUVtcHR5KEVsZW1lbnQq
IGVsZW1lbnQpCiAgICAgZWxlbWVudC0+c2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsKIH0KIAot
c3RhdGljIHZvaWQgc2V0RWxlbWVudFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVkQnlFbXB0eUFu
ZFVwZGF0ZVJlbmRlclN0eWxlSWZOZWNlc3NhcnkoQ2hlY2tpbmdDb250ZXh0KiBjb250ZXh0LCBi
b29sIGlzRW1wdHkpCitzdGF0aWMgdm9pZCBzZXRFbGVtZW50U3R5bGVGcm9tQ29udGV4dElzQWZm
ZWN0ZWRCeUVtcHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeShTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29udGV4dCogY29udGV4dCwgYm9vbCBpc0VtcHR5KQogewogICAgIEFTU0VS
VChjb250ZXh0LT5lbGVtZW50U3R5bGUpOwogICAgIGNvbnRleHQtPmVsZW1lbnRTdHlsZS0+c2V0
RW1wdHlTdGF0ZShpc0VtcHR5KTsKQEAgLTI2MTMsNyArMjYxMyw3IEBAIHN0YXRpYyBib29sIGVs
ZW1lbnRJc0hvdmVyZWQoRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudC0+aG92
ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVt
ZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3Zlcik7CiB9CiAKLXN0YXRpYyBib29sIGVs
ZW1lbnRJc0hvdmVyZWRGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCitzdGF0aWMgYm9vbCBlbGVtZW50SXNI
b3ZlcmVkRm9yU3R5bGVSZXNvbHV0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9y
Q2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCiB7CiAgICAgaWYgKGNo
ZWNraW5nQ29udGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJl
c29sdmluZ1N0eWxlKQogICAgICAgICBlbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlIb3Zl
cigpOwpAQCAtMjgwNCw3ICsyODA0LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbWVudElzT25seUNoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWwKIH0KIAog
I2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKLXN0YXRpYyBib29sIG1ha2VDb250ZXh0
U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCitzdGF0aWMg
Ym9vbCBtYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRl
clNob3duKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0KiBjaGVja2luZ0NvbnRleHQpCiB7CiAgICAgaWYgKGlzSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQoKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChjaGVja2luZ0NvbnRleHQtPnJlc29s
dmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKQEAgLTI4
MTQsNyArMjgxNCw3IEBAIHN0YXRpYyBib29sIG1ha2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vz
c2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCoKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBib29sIG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRl
c3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ2hlY2tpbmdDb250
ZXh0KiBjaGVja2luZ0NvbnRleHQpCitzdGF0aWMgYm9vbCBtYWtlRWxlbWVudFN0eWxlVW5pcXVl
SWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCiB7
CiAgICAgaWYgKGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKmVsZW1lbnQpKSB7CiAgICAg
ICAgIGlmIChjaGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewpAQCAtMzEwOCwxMCArMzEwOCwxMCBAQCB2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxz
VG9TZWxlY3RvclBzZXVkbwogICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIHJlcXVlc3RlZCBwc2V1
ZG9JZCBpcyBub3QgTk9QU0VVRE8sIHRoZSByZXF1ZXN0ZWQgcHNldWRvSWQgbmVlZCB0byBlcXVh
bCB0byB0aGUgcHNldWRvIGVsZW1lbnQgb2YgdGhlIHJpZ2h0bW9zdCBmcmFnbWVudC4KICAgICBp
ZiAoZnJhZ21lbnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9yQ29udGV4dCwg
ZnJhZ21lbnQpKSB7CiAgICAgICAgIGlmICghZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9y
KQotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4KEFz
c2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9C
SkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKE5PUFNFVURPKSkpOworICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZCht
X2Fzc2VtYmxlci5icmFuY2g4KEFzc2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVz
cyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dCwgcHNldWRvSWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTk9QU0VVRE8p
KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQXNzZW1ibGVyOjpKdW1wIHNraXAgPSBt
X2Fzc2VtYmxlci5icmFuY2g4KEFzc2VtYmxlcjo6RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhj
aGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHBzZXVkb0lk
KSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5PUFNFVURPKSk7Ci0gICAgICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwg
QXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNr
aW5nQ29udGV4dCwgcHNldWRvSWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoQ1NTU2VsZWN0
b3I6OnBzZXVkb0lkKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVu
dFR5cGUoKSkpKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXAgc2tpcCA9IG1fYXNzZW1i
bGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5n
Q29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0
LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOT1BTRVVETykpOworICAgICAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4KEFzc2VtYmxlcjo6
Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZT
RVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgcHNldWRvSWQpKSwgQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGZyYWdtZW50LnBzZXVkb0Vs
ZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkpKSk7CiAgICAgICAgICAgICBza2lw
LmxpbmsoJm1fYXNzZW1ibGVyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMzAsNyArMzEzMCw3
IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1Njb3BlUm9v
dChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsCiAKICAgICBMb2NhbFJlZ2lzdGVyIHNjb3BlKG1f
cmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgIGxvYWRDaGVja2luZ0NvbnRleHQoc2NvcGUpOwotICAg
IG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKHNjb3BlLCBPQkpFQ1RfT0ZG
U0VUT0YoQ2hlY2tpbmdDb250ZXh0LCBzY29wZSkpLCBzY29wZSk7CisgICAgbV9hc3NlbWJsZXIu
bG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3Moc2NvcGUsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgc2NvcGUpKSwgc2NvcGUpOwogCiAgICAgQXNzZW1i
bGVyOjpKdW1wIHNjb3BlSXNOb3ROdWxsID0gbV9hc3NlbWJsZXIuYnJhbmNoVGVzdFB0cihBc3Nl
bWJsZXI6Ok5vblplcm8sIHNjb3BlKTsKIApAQCAtMzE2Miw3ICszMTYyLDcgQEAgdm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlTWFya1BzZXVkb1N0eWxlRm9yUHNldWRvRWxlbWVu
dChBc3NlbWJsZXI6OkoKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IHN1Y2Nlc3NDYXNlczsKIAog
ICAgIC8vIFdoZW4gdGhlIHJlcXVlc3RlZCBwc2V1ZG9JZCBpc24ndCBOT1BTRVVETywgdGhlcmUn
cyBubyBuZWVkIHRvIG1hcmsgdGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlLgotICAgIHN1Y2Nlc3ND
YXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoOChBc3NlbWJsZXI6Ok5vdEVxdWFsLCBBc3Nl
bWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoQ2hlY2tpbmdD
b250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOT1BTRVVETykpKTsK
KyAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpO
b3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNF
VE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihOT1BTRVVETykpKTsKIAogICAgIC8vIFdoZW4gcmVzb2x2aW5nIG1v
ZGUgaXMgQ29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMsIHRoZXJl
J3Mgbm8gbmVlZCB0byBtYXJrIHRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZS4KICAgICBzdWNjZXNz
Q2FzZXMuYXBwZW5kKGJyYW5jaE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2luZ0NvbnRleHQoQXNz
ZW1ibGVyOjpFcXVhbCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25v
cmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cywgY2hlY2tpbmdDb250ZXh0KSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oIGIvU291cmNlL1dlYkNv
cmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaAppbmRleCBjMGNhNTMyZDUwMzMzMTFmZmY2N2Qx
NjEwNDFjZjQ1NGUxNGJmMjEwLi5iMTA3YzQzNDI3ZmQ0OTdmMjA5OTE0YjYyYmRjMmQ4N2JkNDM4
ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgKQEAgLTY5LDI0
ICs2OSw2IEBAIGNsYXNzIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgewogCiBuYW1lc3BhY2Ug
U2VsZWN0b3JDb21waWxlciB7CiAKLXN0cnVjdCBDaGVja2luZ0NvbnRleHQgewotICAgIENoZWNr
aW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGUgcmVzb2x2aW5nTW9kZSkKLSAgICAgICAg
OiByZXNvbHZpbmdNb2RlKHJlc29sdmluZ01vZGUpCi0gICAgICAgICwgZWxlbWVudFN0eWxlKG51
bGxwdHIpCi0gICAgICAgICwgcHNldWRvSWQoTk9QU0VVRE8pCi0gICAgICAgICwgc2Nyb2xsYmFy
KG51bGxwdHIpCi0gICAgICAgICwgc2Nyb2xsYmFyUGFydChOb1BhcnQpCi0gICAgICAgICwgc2Nv
cGUobnVsbHB0cikKLSAgICB7IH0KLQotICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZp
bmdNb2RlOwotICAgIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGU7Ci0gICAgUHNldWRvSWQgcHNl
dWRvSWQ7Ci0gICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXI7Ci0gICAgU2Nyb2xsYmFyUGFy
dCBzY3JvbGxiYXJQYXJ0OwotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwotfTsKLQog
ZW51bSBjbGFzcyBTZWxlY3RvckNvbnRleHQgewogICAgIC8vIFJ1bGUgQ29sbGVjdG9yIG5lZWRz
IGEgcmVzb2x2aW5nTW9kZSBhbmQgY2FuIG1vZGlmeSB0aGUgdHJlZSBhcyBpdCBtYXRjaGVzLgog
ICAgIFJ1bGVDb2xsZWN0b3IsCkBAIC05Niw3ICs3OCw3IEBAIGVudW0gY2xhc3MgU2VsZWN0b3JD
b250ZXh0IHsKIH07CiAKIHR5cGVkZWYgdW5zaWduZWQgKCpTaW1wbGVTZWxlY3RvckNoZWNrZXIp
KEVsZW1lbnQqKTsKLXR5cGVkZWYgdW5zaWduZWQgKCpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tp
bmdDb250ZXh0KShFbGVtZW50KiwgY29uc3QgQ2hlY2tpbmdDb250ZXh0Kik7Cit0eXBlZGVmIHVu
c2lnbmVkICgqU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCkoRWxlbWVudCosIGNv
bnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Kik7CiBTZWxlY3RvckNvbXBpbGF0
aW9uU3RhdHVzIGNvbXBpbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIEpTQzo6Vk0qLCBT
ZWxlY3RvckNvbnRleHQsIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvdXRwdXRDb2RlUmVm
KTsKIAogaW5saW5lIFNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzaW1wbGVTZWxlY3RvckNoZWNrZXJG
dW5jdGlvbih2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1
cyBjb21waWxhdGlvblN0YXR1cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxl
Y3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRl
eCA1YzNmOWJjYTE3MWFkYzk1OTViOGQxOWVkYzBkOTU5ZDg2OGFjZTY0Li42ZDM4Nzk5NzE1ZGU3
YzQwZWNlNTMwZDE5NmUwNjBjYWQzODk3MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVl
cnkuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVk
ZSAiRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tl
ci5oIgotI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgiCisjaW5jbHVkZSAiU2Vs
ZWN0b3JRdWVyeUZhc3RQYXRoLmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJTdHlsZWRFbGVtZW50LmgiCiAKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIElkTWF0Y2hp
bmdUeXBlIGZpbmRJZE1hdGNoaW5nVHlwZShjb25zdCBDU1NTZWxlY3RvciYgZmlyc3RTZWxlY3Rv
cikKIAogICAgIG1fc2VsZWN0b3JzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VsZWN0b3JDb3Vu
dCk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3Qu
Zmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVj
dG9yKSkKLSAgICAgICAgbV9zZWxlY3RvcnMudW5jaGVja2VkQXBwZW5kKFNlbGVjdG9yRGF0YShz
ZWxlY3RvciwgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6OmNhblVzZShzZWxlY3RvcikpKTsKKyAg
ICAgICAgbV9zZWxlY3RvcnMudW5jaGVja2VkQXBwZW5kKFNlbGVjdG9yRGF0YShzZWxlY3Rvciwg
U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpjYW5Vc2Uoc2VsZWN0b3IpKSk7CiAKICAgICBpZiAoc2Vs
ZWN0b3JDb3VudCA9PSAxKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciA9
ICptX3NlbGVjdG9ycy5maXJzdCgpLnNlbGVjdG9yOwpAQCAtMTE1LDE2ICsxMTUsMTYgQEAgc3Rh
dGljIElkTWF0Y2hpbmdUeXBlIGZpbmRJZE1hdGNoaW5nVHlwZShjb25zdCBDU1NTZWxlY3RvciYg
Zmlyc3RTZWxlY3RvcikKIGlubGluZSBib29sIFNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yTWF0
Y2hlcyhjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSwgRWxlbWVudCYgZWxlbWVudCwg
Y29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKHNlbGVjdG9y
RGF0YS5pc0Zhc3RDaGVja2FibGUgJiYgIWVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKLSAgICAg
ICAgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGggc2VsZWN0b3JDaGVja2VyRmFzdFBhdGgoc2VsZWN0
b3JEYXRhLnNlbGVjdG9yLCAmZWxlbWVudCk7Ci0gICAgICAgIGlmICghc2VsZWN0b3JDaGVja2Vy
RmFzdFBhdGgubWF0Y2hlc1JpZ2h0bW9zdFNlbGVjdG9yKFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRl
ZE1hdGNoRGlzYWJsZWQpKQorICAgICAgICBTZWxlY3RvclF1ZXJ5RmFzdFBhdGggc2VsZWN0b3JR
dWVyeUZhc3RQYXRoKHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJmVsZW1lbnQpOworICAgICAgICBp
ZiAoIXNlbGVjdG9yUXVlcnlGYXN0UGF0aC5tYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlckZh
c3RQYXRoLm1hdGNoZXMoKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yUXVlcnlGYXN0UGF0aC5t
YXRjaGVzKCk7CiAgICAgfQogCiAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihl
bGVtZW50LmRvY3VtZW50KCkpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQoc2VsZWN0b3JEYXRhLnNlbGVjdG9yLCAm
ZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKKyAgICBTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChTZWxl
Y3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIHNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1bWVudE5vZGUoKSA/IG51bGxwdHIgOiAmcm9v
dE5vZGU7Ci0gICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckNoZWNraW5n
Q29udGV4dCk7CisgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckRhdGEu
c2VsZWN0b3IsICZlbGVtZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCk7CiB9CiAKIGJvb2wg
U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyhFbGVtZW50JiB0YXJnZXRFbGVtZW50KSBjb25zdApA
QCAtMzgwLDcgKzM4MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0Ojpl
eGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3QKIHRlbXBsYXRlIDx0eXBl
bmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRh
TGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dChj
b25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNo
Um9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0Nv
bnRleHQgc2VsZWN0b3JDaGVja2VyLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1
dFR5cGUmIG91dHB1dCwgY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEpIGNvbnN0CiB7
Ci0gICAgU2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChT
ZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOworICAgIFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6
OlF1ZXJ5aW5nUnVsZXMpOwogICAgIGNoZWNraW5nQ29udGV4dC5zY29wZSA9IHJvb3ROb2RlLmlz
RG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2RlOwogCiAgICAgZm9yIChhdXRvJiBl
bGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHNl
YXJjaFJvb3ROb2RlKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237414</attachid>
            <date>2014-08-30 11:48:02 -0700</date>
            <delta_ts>2014-08-30 12:01:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135255-20140831034850.patch</filename>
            <type>text/plain</type>
            <size>65691</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzAxNWJhNDQ5NmZkNGMx
ZGYyOGIzMTJjMTBlOTMwN2JhYmI5ZWVmNC4uMDZmOGMyNDJjNTBlMDViYjYxZTlmMThmNjg3M2Ew
ODc0ZjA0OTAxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcyIEBACiAyMDE0LTA4LTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCisgICAgICAgIE1lcmdlIENoZWNr
aW5nQ29udGV4dHMgZnJvbSBTZWxlY3RvckNvbXBpbGVyIGFuZCBTZWxlY3RvckNoZWNrZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI1NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIG1lcmdlIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgYW5k
IFNlbGVjdG9yQ29tcGlsZXI6OkNoZWNraW5nQ29udGV4dC4KKyAgICAgICAgV2UgZXhwb3NlIG9u
bHkgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQuIFRoYXQgaXMgdGhlIHNhbWUgdG8g
dGhlIG9sZCBTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQuCisgICAgICAgIEluIFNl
bGVjdG9yQ2hlY2tlci5jcHAsIHdlIGRlZmluZSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0IGFuZCB1c2UgaXQgaW50ZXJuYWxseS4KKyAgICAgICAgQW5kIHdlIG1vdmUg
VmlzaXRlZE1hdGNoVHlwZSBmcm9tIFNlbGVjdG9yQ2hlY2tlci5oIHRvIFNlbGVjdG9yQ2hlY2tl
ci5jcHAuCisgICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgaXMgYWxzbyBleHBsaWNpdGx5IHVzZWQg
YnkgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguIEhvd2V2ZXIsIFNlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoIGlzIG5vdworICAgICAgICB1c2VkIG9ubHkgZnJvbSBTZWxlY3RvclF1ZXJ5IChTdHlsZSBy
ZXNvbHV0aW9uIGFsZ29yaXRobSBubyBsb25nZXIgdXNlIGl0OiByMTcxMDU5KS4gU28gdmlzaXRl
ZE1hdGNoVHlwZSBpcworICAgICAgICBhbHdheXMgVmlzaXRlZE1hdGNoRGlzYWJsZWQuIEluIHRo
aXMgcGF0Y2gsIHdlIHJlbmFtZSBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aCB0byBTZWxlY3RvclF1
ZXJ5RmFzdFBhdGgsIGFuZAorICAgICAgICBkcm9wIFZpc2l0ZWRNYXRjaFR5cGUgcGFyYW1ldGVy
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAg
ICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyk6CisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNraW5n
Q29udGV4dEZvclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1h
dGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ6OkNoZWNraW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL1NlbGVj
dG9yUXVlcnlGYXN0UGF0aC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVzOjpm
YXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmNo
ZWNrQ2xhc3NWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrSURWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrVGFnVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpTZWxlY3RvclF1ZXJ5RmFzdFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjptYXRjaGVzUmlnaHRt
b3N0U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpt
YXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzRmFzdENoZWNrYWJsZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yUXVlcnlGYXN0UGF0aDo6Y2FuVXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
UXVlcnlGYXN0UGF0aDo6Y29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMpOgorICAgICAg
ICAqIGNzcy9TZWxlY3RvclF1ZXJ5RmFzdFBhdGguaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oLgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAg
ICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjpTZWxlY3RvckZyYWdtZW50OjphcHBlbmRVbm9wdGltaXplZFBzZXVkb0Ns
YXNzV2l0aENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6YWRk
U2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21D
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6YnJhbmNoT25SZXNvbHZpbmdNb2RlV2l0aENoZWNraW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjplbGVtZW50SXNBY3RpdmVGb3JTdHls
ZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6c2V0RWxl
bWVudFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVkQnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6ZWxlbWVu
dElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFj
ZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6Om1ha2VF
bGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZVJlcXVlc3RlZFBzZXVkb0VsZW1lbnRFcXVhbHNUb1NlbGVjdG9yUHNldWRvRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzU2NvcGVSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJrUHNl
dWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21w
aWxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdDb250
ZXh0OjpDaGVja2luZ0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1
ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OlNlbGVjdG9yRGF0
YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxl
ZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOgorCisyMDE0LTA4LTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCiAgICAgICAgIENTUzogUmVmYWN0
b3IgOnZpc2l0ZWQgaGFuZGxpbmcgaW4gU2VsZWN0b3JDaGVja2VyCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU2MzkKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCBkMjVmODZmN2Y3YTk3ZTVlYmIwZGNmNzRkY2U0YjRkOGU0YmZhODVkLi44OGM0ZTY3
YjU5YTdhMzJiNDJlZmNhMDRiODIzMmZjN2VkYmZlNDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMTMwMiw4ICsxMzAyLDggQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9TVkdDU1NQ
YXJzZXIuY3BwCiAgICAgY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCiAgICAgY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAKLSAgICBjc3MvU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwCiAgICAg
Y3NzL1NlbGVjdG9yRmlsdGVyLmNwcAorICAgIGNzcy9TZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3Bw
CiAgICAgY3NzL1NvdXJjZVNpemVMaXN0LmNwcAogICAgIGNzcy9TdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzLmNwcAogICAgIGNzcy9TdHlsZU1lZGlhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhkZjRlMjE4N2RlYmMxMDI5
ZTA5MzE4NzYzMzA3NWRhOWQyN2UwNGQuLjQxOWJiZjFlNWI3OGZjYTVjZDIzZDJjNzZkZGRhM2Iw
ODNkMTFkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE0MTgsOCArMTQxOCw4IEBACiAJCTQxOUJDMkRGMTY4NTMyOTkwMEQ2
NEQ2RCAvKiBWaXNpdGVkTGlua1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTlCQzJERDE2ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExpbmtT
dGF0ZS5oICovOyB9OwogCQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29y
a2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxQTNENThDMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3Bw
ICovOyB9OwogCQk0MUEzRDU4RjEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhy
ZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUEz
RDU4RDEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmggKi87IH07Ci0J
CTQxQjhDRDQ1MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUI4Q0Q0MzE2
RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwICovOyB9OwotCQk0
MUI4Q0Q0NjE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjhDRDQ0MTZEMDQ1
OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oICovOyB9OworCQk0MUI4Q0Q0
NTE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjhDRDQzMTZEMDQ1OTEwMDBF
OENDMCAvKiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwICovOyB9OworCQk0MUI4Q0Q0NjE2RDA0
NTkxMDAwRThDQzAgLyogU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUI4Q0Q0NDE2RDA0NTkxMDAwRThDQzAgLyog
U2VsZWN0b3JRdWVyeUZhc3RQYXRoLmggKi87IH07CiAJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERF
QyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBBMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENo
YW5uZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0MUJGNzAwRjBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRjcw
MEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCAqLzsg
fTsKIAkJNDFCRjcwMTAwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFu
bmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUJG
NzAwRTBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCAqLzsg
fTsKQEAgLTg0MjgsOCArODQyOCw4IEBACiAJCTQxOUJDMkREMTY4NTMyOTkwMEQ2NEQ2RCAvKiBW
aXNpdGVkTGlua1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0
ZWRMaW5rU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBM0Q1OEMxMDFD
MTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwOyBwYXRoID0g
d29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MUEzRDU4RDEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERlZGljYXRlZFdvcmtlclRocmVh
ZC5oOyBwYXRoID0gd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDFCOENENDMxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hl
Y2tlckZhc3RQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNl
bGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDFCOENENDQxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQjhDRDQzMTZEMDQ1OTEwMDBFOENDMCAv
KiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDFCOENENDQxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3RvclF1ZXJ5RmFzdFBh
dGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCRjcwMEEwRkU4NkY0OTAwNUU4
REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZXNzYWdlUG9ydENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDFCRjcwMEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsLmNwcDsgcGF0aCA9IGRlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUJGNzAwRTBGRTg2RjYxMDA1RThE
RUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaDsgcGF0aCA9IGRlZmF1bHQv
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMTExLDggKzIyMTExLDggQEAKIAkJCQlBNzlCQURBMDE2MUU3RjNGMDBDMkU2NTIgLyog
UnVsZVNldC5oICovLAogCQkJCUU0NEI0QkIxMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuY3BwICovLAogCQkJCUU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLywKLQkJCQk0MUI4Q0Q0MzE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVj
a2VyRmFzdFBhdGguY3BwICovLAotCQkJCTQxQjhDRDQ0MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxl
Y3RvckNoZWNrZXJGYXN0UGF0aC5oICovLAorCQkJCTQxQjhDRDQzMTZEMDQ1OTEwMDBFOENDMCAv
KiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwICovLAorCQkJCTQxQjhDRDQ0MTZEMDQ1OTEwMDBF
OENDMCAvKiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCAqLywKIAkJCQk0MzJEM0ZFNzE4QTg2NTg0
MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oICovLAogCQkJCTQxNTA3
MTU1MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAgKi8sCiAJCQkJNDE1MDcx
NTYxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmggKi8sCkBAIC0yNTg0NCw3ICsy
NTg0NCw3IEBACiAJCQkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVj
dGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAv
KiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxQjhDRDQ2MTZEMDQ1OTEw
MDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDFCOENENDYxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDMyRDNGRTgxOEE4NjU4NDAwRDdEQzAzIC8qIFNlbGVjdG9yQ2hlY2tl
clRlc3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2Qjk5OTk3MTgwNEQ1NDIwMEQw
MTEyMSAvKiBTZWxlY3RvckNvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTUwNzE1ODE2
ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjky
ODAsNyArMjkyODAsNyBAQAogCQkJCUIyQzNEQTJFMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50
ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkVBODA3QzgwRjcxNEEwMzAwNTI0MTk5
IC8qIFNlbGVjdGlvblJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0QjRCQjMxNDE2NTBE
NzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0MUI4
Q0Q0NTE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNDFCOENENDUxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlG
YXN0UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkI5OTk5NjE4MDRENTQyMDBEMDExMjEg
LyogU2VsZWN0b3JDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTUwNzE1NzE2ODUw
NjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1
MzIyQUIxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcAppbmRleCBlYzA4NTM2MzkzNTAzMjgwNTY4NjY5
YjQxZWZlODFmNGUyMDZiMWVmLi5mZDU2YmM4YzU4N2EzNWJjZGFiZmEzYmI2ODg3Yjk0M2Y3N2Q1
MzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKQEAgLTgxLDggKzgxLDggQEAKICNp
bmNsdWRlICJQYWdlUnVsZUNvbGxlY3Rvci5jcHAiCiAjaW5jbHVkZSAiUnVsZUZlYXR1cmUuY3Bw
IgogI2luY2x1ZGUgIlJ1bGVTZXQuY3BwIgotI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoLmNwcCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5jcHAiCisjaW5jbHVkZSAiU2VsZWN0
b3JRdWVyeUZhc3RQYXRoLmNwcCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuY3BwIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKaW5k
ZXggZGFkNGEyMjYzMTFhMjI5ZDM4NjIxZGFkNDI1NzBkYjUxYTBlMTIwYS4uZTg4MjM0ZDE1NzQ4
YzE5NjZhNzMwYThkMGVhMGYwNjYzNWViMDk1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuY3BwCkBAIC0yOTUsMjMgKzI5NSwyOCBAQCBpbmxpbmUgYm9vbCBF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRh
KQogICAgICAgICBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciA9IHJ1bGVEYXRhLmNvbXBpbGVkU2Vs
ZWN0b3JDb2RlUmVmKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAg
aWYgKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyKSB7Ci0gICAgICAgIGlmIChydWxlRGF0YS5jb21w
aWxhdGlvblN0YXR1cygpID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlcikgewotICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6U2ltcGxlU2VsZWN0
b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnNpbXBsZVNlbGVj
dG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBydWxlRGF0YS5jb21w
aWxhdGlvblN0YXR1cygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXNlbGVj
dG9yQ2hlY2tlcigmbV9lbGVtZW50KSB8fCBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCA9
PSBOT1BTRVVETywgIldoZW4gbWF0Y2hpbmcgcHNldWRvIGVsZW1lbnRzLCB3ZSBzaG91bGQgbmV2
ZXIgY29tcGlsZSBhIHNlbGVjdG9yIGNoZWNrZXIgd2l0aG91dCBjb250ZXh0IHVubGVzcyBpdCBj
YW5ub3QgbWF0Y2ggYW55dGhpbmcuIik7CisgICAgaWYgKGNvbXBpbGVkU2VsZWN0b3JDaGVja2Vy
ICYmIHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKCkgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKSB7CisgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVy
OjpzaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwg
cnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIXNlbGVjdG9yQ2hlY2tlcigmbV9lbGVtZW50KSB8fCBtX3BzZXVkb1N0eWxlUmVxdWVzdC5w
c2V1ZG9JZCA9PSBOT1BTRVVETywgIldoZW4gbWF0Y2hpbmcgcHNldWRvIGVsZW1lbnRzLCB3ZSBz
aG91bGQgbmV2ZXIgY29tcGlsZSBhIHNlbGVjdG9yIGNoZWNrZXIgd2l0aG91dCBjb250ZXh0IHVu
bGVzcyBpdCBjYW5ub3QgbWF0Y2ggYW55dGhpbmcuIik7CiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9Q
Uk9GSUxJTkcKLSAgICAgICAgICAgIHJ1bGVEYXRhLmNvbXBpbGVkU2VsZWN0b3JVc2VkKCk7Cisg
ICAgICAgIHJ1bGVEYXRhLmNvbXBpbGVkU2VsZWN0b3JVc2VkKCk7CiAjZW5kaWYKLSAgICAgICAg
ICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlcigmbV9lbGVtZW50KTsKKyAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCisKKyAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCBjb250ZXh0KG1fbW9kZSk7CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBtX3N0
eWxlOworICAgIGNvbnRleHQucHNldWRvSWQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9J
ZDsKKyAgICBjb250ZXh0LnNjcm9sbGJhciA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJh
cjsKKyAgICBjb250ZXh0LnNjcm9sbGJhclBhcnQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3Jv
bGxiYXJQYXJ0OworCisjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCisgICAgaWYgKGNvbXBp
bGVkU2VsZWN0b3JDaGVja2VyKSB7CiAgICAgICAgIEFTU0VSVChydWxlRGF0YS5jb21waWxhdGlv
blN0YXR1cygpID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQpOwogCiAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9y
Q2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21w
aWxlcjo6c2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVk
U2VsZWN0b3JDaGVja2VyLCBydWxlRGF0YS5jb21waWxhdGlvblN0YXR1cygpKTsKLSAgICAgICAg
U2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQobV9tb2RlKTsKLSAgICAg
ICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBtX3N0eWxlOwotICAgICAgICBjb250ZXh0LnBzZXVk
b0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7Ci0gICAgICAgIGNvbnRleHQuc2Ny
b2xsYmFyID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyOwotICAgICAgICBjb250ZXh0
LnNjcm9sbGJhclBhcnQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXJQYXJ0OworCiAj
aWYgQ1NTX1NFTEVDVE9SX0pJVF9QUk9GSUxJTkcKICAgICAgICAgcnVsZURhdGEuY29tcGlsZWRT
ZWxlY3RvclVzZWQoKTsKICNlbmRpZgpAQCAtMzIxLDEyICszMjYsNyBAQCBpbmxpbmUgYm9vbCBF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRh
KQogCiAgICAgLy8gU2xvdyBwYXRoLgogICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNr
ZXIobV9lbGVtZW50LmRvY3VtZW50KCkpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCAmbV9lbGVtZW50LCBt
X21vZGUpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gbV9zdHlsZTsKLSAgICBjb250ZXh0
LnBzZXVkb0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7Ci0gICAgY29udGV4dC5z
Y3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7Ci0gICAgY29udGV4dC5z
Y3JvbGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyUGFydDsKLSAgICBy
ZXR1cm4gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQpOworICAgIHJldHVybiBzZWxlY3Rv
ckNoZWNrZXIubWF0Y2gocnVsZURhdGEuc2VsZWN0b3IoKSwgJm1fZWxlbWVudCwgY29udGV4dCk7
CiB9CiAKIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgY29uc3QgTWF0Y2hSZXF1ZXN0JiBt
YXRjaFJlcXVlc3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVsZVJhbmdlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAzZmM5ZGM5NmY4NWVkNzZlZmU2YWU2
MTU2ZTQ4ODQ4ZDVkOGE2ZGJjLi4yZjE0YjM5M2IwMGMzZjNiYzNmMTg1MDZiMjRlNTE0NzYzOGNm
YTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNTcsNyArNTcs
MzMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
LSAgICAKKworZW51bSBjbGFzcyBWaXNpdGVkTWF0Y2hUeXBlIDogdW5zaWduZWQgY2hhciB7Cisg
ICAgRGlzYWJsZWQsIEVuYWJsZWQKK307CisKK3N0cnVjdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0IDogcHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250
ZXh0IHsKKyAgICAvLyBJbml0aWFsIHNlbGVjdG9yIGNvbnN0cnVjdG9yCisgICAgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNo
ZWNraW5nQ29udGV4dCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVt
ZW50KQorICAgICAgICA6IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KGNoZWNraW5n
Q29udGV4dCkKKyAgICAgICAgLCBzZWxlY3RvcihzZWxlY3RvcikKKyAgICAgICAgLCBlbGVtZW50
KGVsZW1lbnQpCisgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZShyZXNvbHZpbmdNb2RlID09IFNl
bGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6OkRp
c2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCkKKyAgICAgICAgLCBmaXJzdFNlbGVj
dG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikKKyAgICAgICAgLCBpbkZ1bmN0aW9uYWxQc2V1ZG9D
bGFzcyhmYWxzZSkKKyAgICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCisgICAgICAg
ICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQorICAgIHsgfQorCisgICAgY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yOworICAgIEVsZW1lbnQqIGVsZW1lbnQ7CisgICAgVmlzaXRlZE1hdGNo
VHlwZSB2aXNpdGVkTWF0Y2hUeXBlOworICAgIGNvbnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVj
dG9yT2ZUaGVGcmFnbWVudDsKKyAgICBib29sIGluRnVuY3Rpb25hbFBzZXVkb0NsYXNzOworICAg
IGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOworICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvOwor
fTsKKwogc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RDaGlsZEVsZW1lbnQoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gIUVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2li
bGluZyhlbGVtZW50KTsKQEAgLTEzNCw4ICsxNjAsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjb3Vu
dEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlm
aQogewogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2go
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVj
a2luZ0NvbnRleHQmIHByb3ZpZGVkQ29udGV4dCkgY29uc3QKIHsKKyAgICBTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCBjb250ZXh0KHByb3ZpZGVkQ29udGV4dCwgc2VsZWN0b3IsIGVsZW1lbnQpOwog
ICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gTk9QU0VVRE87CiAgICAgaWYgKG1hdGNoUmVjdXJzaXZl
bHkoY29udGV4dCwgcHNldWRvSWQpICE9IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTc0LDcgKzIwMSw3IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTCiAgICAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCB1cGRhdGVkQ29udGV4dChj
b250ZXh0KTsKICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2Ugc2VlIHRo
ZSBmaXJzdCBsaW5rLgogICAgIGlmIChjb250ZXh0LmVsZW1lbnQtPmlzTGluaygpKQotICAgICAg
ICB1cGRhdGVkQ29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpWaXNp
dGVkTWF0Y2hEaXNhYmxlZDsKKyAgICAgICAgdXBkYXRlZENvbnRleHQudmlzaXRlZE1hdGNoVHlw
ZSA9IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogICAgIHVwZGF0ZWRDb250ZXh0LmVsZW1l
bnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAgICByZXR1cm4gdXBkYXRl
ZENvbnRleHQ7CiB9CkBAIC0yMzUsNyArMjYyLDcgQEAgc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0IFMK
IAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRvIG1h
dGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmIChyZWxhdGlv
biAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6
Q2hpbGQpCi0gICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRl
ZE1hdGNoRGlzYWJsZWQ7CisgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBl
ID0gVmlzaXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNl
dWRvSWQgPSBOT1BTRVVETzsKICAgICB9CkBAIC00OTgsNyArNTI1LDcgQEAgYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQg
dGhpcyBuZXZlciBvY2N1cnMKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1YkNvbnRleHQu
c2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05v
dCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFu
ZCA6bGluayB3aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBrbm93IHdoaWNoIG9uZSBhcHBsaWVkIChv
ciBub3QpIHlldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkNvbnRleHQuc2VsZWN0b3It
PnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQgfHwg
KHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0xpbmsgJiYgc3ViQ29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRN
YXRjaEVuYWJsZWQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rv
ci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCB8
fCAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzTGluayAmJiBzdWJDb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRl
ZE1hdGNoVHlwZTo6RW5hYmxlZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZShzdWJD
b250ZXh0KSkKQEAgLTcwNSw3ICs3MzIsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICAvLyBJbnNpZGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgZXhjZXB0IGZvciA6bm90LCA6
dmlzaXRlZCBuZXZlciBtYXRjaGVzLgogICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5GdW5jdGlv
bmFsUHNldWRvQ2xhc3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9
PSBWaXNpdGVkTWF0Y2hFbmFibGVkOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGlu
aygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFi
bGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6CiAgICAgICAg
ICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IGY0MzkzZjMyMjYzYzEyNDA3ZDU0ODllYTVhOWUxYzA5
ZjBiNjRlYmMuLmVhMGY0YzM0YWFjYWQyMjU0YjA1ZTkxNGRmZWY5OTNhMTgwMzE0YjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTQ2LDQ3ICs0NiwzMyBAQCBjbGFzcyBT
ZWxlY3RvckNoZWNrZXIgewogICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVj
dG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5IH07CiAKIHB1YmxpYzoKLSAgICBlbnVtIFZpc2l0ZWRNYXRjaFR5cGUgeyBWaXNp
dGVkTWF0Y2hEaXNhYmxlZCwgVmlzaXRlZE1hdGNoRW5hYmxlZCB9OwogICAgIGVudW0gY2xhc3Mg
TW9kZSA6IHVuc2lnbmVkIGNoYXIgewogICAgICAgICBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxl
Y3RpbmdSdWxlcywgQ29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMs
IFF1ZXJ5aW5nUnVsZXMKICAgICB9OwogCiAgICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50Jik7
CiAKLSAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgewotICAgICAgICAvLyBJbml0
aWFsIHNlbGVjdG9yIGNvbnN0cnVjdG9yCi0gICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgTW9kZSByZXNv
bHZpbmdNb2RlKQotICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikKLSAgICAgICAgICAg
ICwgcmVzb2x2aW5nTW9kZShyZXNvbHZpbmdNb2RlKQotICAgICAgICAgICAgLCBlbGVtZW50KGVs
ZW1lbnQpCi0gICAgICAgICAgICAsIHNjb3BlKG51bGxwdHIpCi0gICAgICAgICAgICAsIHZpc2l0
ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRl
ZE1hdGNoRGlzYWJsZWQgOiBWaXNpdGVkTWF0Y2hFbmFibGVkKQotICAgICAgICAgICAgLCBwc2V1
ZG9JZChOT1BTRVVETykKKyAgICBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0IHsKKyAgICAgICAgQ2hl
Y2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlKQorICAgICAg
ICAgICAgOiByZXNvbHZpbmdNb2RlKHJlc29sdmluZ01vZGUpCiAgICAgICAgICAgICAsIGVsZW1l
bnRTdHlsZShudWxscHRyKQorICAgICAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVETykKICAgICAg
ICAgICAgICwgc2Nyb2xsYmFyKG51bGxwdHIpCi0gICAgICAgICAgICAsIGZpcnN0U2VsZWN0b3JP
ZlRoZUZyYWdtZW50KHNlbGVjdG9yKQogICAgICAgICAgICAgLCBzY3JvbGxiYXJQYXJ0KE5vUGFy
dCkKLSAgICAgICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MoZmFsc2UpCi0gICAgICAg
ICAgICAsIGhhc1Njcm9sbGJhclBzZXVkbyhmYWxzZSkKLSAgICAgICAgICAgICwgaGFzU2VsZWN0
aW9uUHNldWRvKGZhbHNlKQorICAgICAgICAgICAgLCBzY29wZShudWxscHRyKQogICAgICAgICB7
IH0KIAotICAgICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIE1vZGUg
cmVzb2x2aW5nTW9kZTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGU7Ci0gICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1h
dGNoVHlwZTsKLSAgICAgICAgUHNldWRvSWQgcHNldWRvSWQ7CisgICAgICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlOwogICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0
eWxlOworICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZDsKICAgICAgICAgUmVuZGVyU2Nyb2xsYmFy
KiBzY3JvbGxiYXI7Ci0gICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudDsKICAgICAgICAgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0OwotICAgICAg
ICBib29sIGluRnVuY3Rpb25hbFBzZXVkb0NsYXNzOwotICAgICAgICBib29sIGhhc1Njcm9sbGJh
clBzZXVkbzsKLSAgICAgICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlOwogICAgIH07CiAKLSAgICBib29sIG1hdGNoKGNvbnN0IFNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JikgY29uc3Q7CisgICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0OworCisgICAgYm9vbCBtYXRjaChjb25zdCBDU1NTZWxlY3RvciosIEVsZW1lbnQq
LCBjb25zdCBDaGVja2luZ0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIHRhZ01h
dGNoZXMoY29uc3QgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICBzdGF0aWMg
Ym9vbCBpc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjYwNWQ0ZDRlMDgyZjlkZDI5OTM0ZjQyYjYwOTFmNDM2
NDE4MzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZl
bGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQotICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKLSAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9y
dW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgiCi0KLSNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGUgPGJvb2wgY2hlY2tWYWx1ZShjb25zdCBFbGVt
ZW50KiwgY29uc3QgQ1NTU2VsZWN0b3IqKT4KLWlubGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiBlbGVt
ZW50LCBjb25zdCBDU1NTZWxlY3RvciomIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgY29uc3QgRWxl
bWVudComIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkKLXsKLSAgICBmb3IgKDsg
ZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICBp
ZiAoY2hlY2tWYWx1ZShlbGVtZW50LCBzZWxlY3RvcikpIHsKLSAgICAgICAgICAgIGlmIChzZWxl
Y3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCkKLSAgICAgICAgICAg
ICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAoIXRv
cENoaWxkT3JTdWJzZWxlY3RvcikgewotICAgICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rvci0+
cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2VsZWN0b3ItPnJlbGF0aW9uKCkg
PT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAgICAgICB0b3BDaGlsZE9y
U3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3JNYXRjaEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAg
ICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgICAg
ICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRvcENoaWxkT3JTdWJzZWxlY3Rvcikg
ewotICAgICAgICAgICAgLy8gQ2hpbGQgb3Igc3Vic2VsZWN0b3IgY2hlY2sgZmFpbGVkLgotICAg
ICAgICAgICAgLy8gSWYgdGhlIG1hdGNoIGVsZW1lbnQgaXMgbnVsbCwgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yIHdhcyBhbHNvIHRoZSB2ZXJ5IHRvcG1vc3Qgc2VsZWN0b3IgYW5kIGhhZCB0byBtYXRj
aAotICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGVsZW1lbnQgd2Ugd2VyZSBjaGVja2luZy4K
LSAgICAgICAgICAgIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIC8vIFRoZXJlIG1heSBiZSBv
dGhlciBtYXRjaGVzIGRvd24gdGhlIGFuY2VzdG9yIGNoYWluLgotICAgICAgICAgICAgLy8gUmV3
aW5kIHRvIHRoZSB0b3Btb3N0IGNoaWxkIG9yIHN1YnNlbGVjdG9yIGFuZCB0aGUgZWxlbWVudCBp
dCBtYXRjaGVkLCBjb250aW51ZSBjaGVja2luZyBhbmNlc3RvcnMuCi0gICAgICAgICAgICBzZWxl
Y3RvciA9IHRvcENoaWxkT3JTdWJzZWxlY3RvcjsKLSAgICAgICAgICAgIGVsZW1lbnQgPSB0b3BD
aGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAg
ICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlubGluZSBib29sIGNo
ZWNrQ2xhc3NWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IpCi17Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+
Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbGVjdG9yLT52YWx1ZSgpKTsKLX0KLQotaW5saW5lIGJv
b2wgY2hlY2tJRFZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSA9PSBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCk7
Ci19Ci0KLWlubGluZSBib29sIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShjb25zdCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgcmV0dXJuIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tFeGFjdEF0dHJpYnV0ZShlbGVtZW50LCBzZWxlY3Rvciwgc2Vs
ZWN0b3ItPmF0dHJpYnV0ZSgpLCBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotfQotCi1pbmxp
bmUgYm9vbCBjaGVja1RhZ1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRj
aGVzKGVsZW1lbnQsIHNlbGVjdG9yLT50YWdRTmFtZSgpKTsKLX0KLQotfQotCi1TZWxlY3RvckNo
ZWNrZXJGYXN0UGF0aDo6U2VsZWN0b3JDaGVja2VyRmFzdFBhdGgoY29uc3QgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9zZWxlY3RvcihzZWxl
Y3RvcikKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotewotfQotCi1ib29sIFNlbGVjdG9yQ2hl
Y2tlckZhc3RQYXRoOjptYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoU2VsZWN0b3JDaGVja2VyOjpW
aXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKFNl
bGVjdG9yQ2hlY2tlckZhc3RQYXRoOjpjYW5Vc2UobV9zZWxlY3RvcikpOwotCi0gICAgc3dpdGNo
IChtX3NlbGVjdG9yLT5tX21hdGNoKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6VGFnOgotICAg
ICAgICByZXR1cm4gY2hlY2tUYWdWYWx1ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3IpOwotICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgotICAgICAgICByZXR1cm4gY2hlY2tDbGFzc1ZhbHVlKG1f
ZWxlbWVudCwgbV9zZWxlY3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6Ci0gICAgICAg
IHJldHVybiBjaGVja0lEVmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9yKTsKLSAgICBjYXNlIENT
U1NlbGVjdG9yOjpFeGFjdDoKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6Ci0gICAgICAgIHJl
dHVybiBjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9yKTsKLSAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoKLSAgICAgICAgcmV0dXJuIGNvbW1vblBz
ZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKHZpc2l0ZWRNYXRjaFR5cGUpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6Om1hdGNoZXMoKSBjb25zdAotewot
ICAgIEFTU0VSVChtYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoU2VsZWN0b3JDaGVja2VyOjpWaXNp
dGVkTWF0Y2hFbmFibGVkKSk7Ci0gICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gbV9z
ZWxlY3RvcjsKLSAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gbV9lbGVtZW50OwotCi0gICAg
Y29uc3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgY29uc3Qg
RWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gMDsKLSAgICBpZiAo
c2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5y
ZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAgICAgICAgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yID0gc2VsZWN0b3I7Ci0KLSAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkg
IT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpOwotCi0gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgp
OwotCi0gICAgLy8gV2Uga25vdyB0aGlzIGNvbXBvdW5kIHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50
LCBjaGlsZCBhbmQgc3Vic2VsZWN0b3IgY29tYmluYXRvcnMgb25seSBhbmQgYWxsIGNvbXBvbmVu
dHMgYXJlIHNpbXBsZS4KLSAgICB3aGlsZSAoc2VsZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoIChz
ZWxlY3Rvci0+bV9tYXRjaCkgewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAg
ICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlPihz
ZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3JNYXRjaEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJZDoKLSAgICAgICAgICAg
IGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tJRFZhbHVlPihzZWxlY3RvciwgZWxl
bWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVs
ZW1lbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpUYWc6Ci0gICAgICAgICAgICBpZiAoIWZhc3RD
aGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BD
aGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6
Ci0gICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrRXhhY3RBdHRy
aWJ1dGVWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9w
Q2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2Vs
ZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uKQotewotICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NT
ZWxlY3Rvcjo6RGVzY2VuZGFudCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwg
cmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNGYXN0Q2hlY2thYmxlTWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQot
ewotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KSB7Ci0gICAg
ICAgIC8vIFN0eWxlIGF0dHJpYnV0ZSBpcyBnZW5lcmF0ZWQgbGF6aWx5IGJ1dCB0aGUgZmFzdCBw
YXRoIGRvZXNuJ3QgdHJpZ2dlciBpdC4KLSAgICAgICAgLy8gRGlzYWxsb3cgdGhlbSBoZXJlIHJh
dGhlciB0aGFuIG1ha2luZyB0aGUgZmFzdCBwYXRoIG1vcmUgYnJhbmNoeS4KLSAgICAgICAgcmV0
dXJuIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHI7Ci0gICAgfQotICAgIGlmIChz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QpCi0gICAgICAgIHJldHVybiBz
ZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyICYmIEhUTUxEb2N1bWVudDo6aXNDYXNl
U2Vuc2l0aXZlQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHNl
bGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgfHwgc2VsZWN0b3ItPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpD
bGFzczsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoIWlzRmFzdENo
ZWNrYWJsZVJlbGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0
b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpOwotfQotCi1i
b29sIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoOjpjYW5Vc2UoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQotewotICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ioc2Vs
ZWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0
b3J5KCkpIHsKLSAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+
cmVsYXRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNG
YXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTZWxlY3RvckNoZWNrZXJGYXN0UGF0
aDo6Y29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMoU2VsZWN0b3JDaGVja2VyOjpWaXNp
dGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKFNlbGVj
dG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKG1fc2VsZWN0b3IpKTsKLSAg
ICBzd2l0Y2ggKG1fc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzQW55TGluazoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+aXNMaW5rKCk7Ci0gICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkOgotICAgICAgICByZXR1cm4gbV9lbGVt
ZW50LT5pc0xpbmsoKSAmJiB2aXNpdGVkTWF0Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6Vmlz
aXRlZE1hdGNoRW5hYmxlZDsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZvY3Vz
OgotICAgICAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFz
cyhtX2VsZW1lbnQpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmMWQxMDQ1NTVmMTZkMGMzYjIxZDM3MTdlMzdjZjlhZjU3ODEyYjc3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXJGYXN0UGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAg
ICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYu
Y29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0
QG5pY2tzaGFua3MuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJr
aXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqIENv
cHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aF9oCi0jZGVmaW5l
IFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoX2gKLQotI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCi0j
aW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGggewotcHVibGljOgotICAgIFNlbGVjdG9yQ2hlY2tl
ckZhc3RQYXRoKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopOwotCi0gICAgYm9v
bCBtYXRjaGVzKCkgY29uc3Q7Ci0gICAgYm9vbCBtYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoU2Vs
ZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hUeXBlKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXNS
aWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcigpIGNvbnN0OwotCi0gICAgc3RhdGljIGJvb2wgY2Fu
VXNlKGNvbnN0IENTU1NlbGVjdG9yKik7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjb21tb25Qc2V1
ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUp
IGNvbnN0OwotCi0gICAgY29uc3QgQ1NTU2VsZWN0b3IqIG1fc2VsZWN0b3I7Ci0gICAgY29uc3Qg
RWxlbWVudCogbV9lbGVtZW50OwotfTsKLQotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyRmFz
dFBhdGg6Om1hdGNoZXNSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAg
aWYgKG1fc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0IHx8IG1fc2VsZWN0
b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlNldCkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tFeGFjdEF0dHJpYnV0ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3IsIG1fc2Vs
ZWN0b3ItPmF0dHJpYnV0ZSgpLCBtX3NlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci0gICAgQVNT
RVJUKCFtX3NlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yUXVlcnlGYXN0UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JRdWVyeUZh
c3RQYXRoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMGE0NGU5MjE0ZDE2NzlmMDViY2M5NmMxYzg3ZDdlMTk0
NDMyNDMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yUXVl
cnlGYXN0UGF0aC5jcHAKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1
IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENv
ZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCIKKworI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IlN0eWxlZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVl
KGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopPgoraW5saW5lIGJvb2wgZmFzdENo
ZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxl
bWVudComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9y
LCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQorewor
ICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7
CisgICAgICAgIGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKSkgeworICAgICAgICAg
ICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50KQor
ICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7CisgICAgICAgICAgICBl
bHNlIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCBzZWxlY3Rvci0+
cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOworICAgICAgICAgICAgICAg
IHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgIHRvcENo
aWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNl
bGVjdG9yKQorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50
KCk7CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9wQ2hpbGRPclN1
YnNlbGVjdG9yKSB7CisgICAgICAgICAgICAvLyBDaGlsZCBvciBzdWJzZWxlY3RvciBjaGVjayBm
YWlsZWQuCisgICAgICAgICAgICAvLyBJZiB0aGUgbWF0Y2ggZWxlbWVudCBpcyBudWxsLCB0b3BD
aGlsZE9yU3Vic2VsZWN0b3Igd2FzIGFsc28gdGhlIHZlcnkgdG9wbW9zdCBzZWxlY3RvciBhbmQg
aGFkIHRvIG1hdGNoCisgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3ZXJl
IGNoZWNraW5nLgorICAgICAgICAgICAgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVs
ZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gVGhl
cmUgbWF5IGJlIG90aGVyIG1hdGNoZXMgZG93biB0aGUgYW5jZXN0b3IgY2hhaW4uCisgICAgICAg
ICAgICAvLyBSZXdpbmQgdG8gdGhlIHRvcG1vc3QgY2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5kIHRo
ZSBlbGVtZW50IGl0IG1hdGNoZWQsIGNvbnRpbnVlIGNoZWNraW5nIGFuY2VzdG9ycy4KKyAgICAg
ICAgICAgIHNlbGVjdG9yID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yOworICAgICAgICAgICAgZWxl
bWVudCA9IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudC0+cGFyZW50RWxlbWVudCgp
OworICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5s
aW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAm
JiBlbGVtZW50LT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkpOworfQor
CitpbmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYm
IGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpID09IHNlbGVjdG9yLT52YWx1
ZSgpLmltcGwoKTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAg
ICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVja0V4YWN0QXR0cmlidXRlKGVsZW1lbnQsIHNl
bGVjdG9yLCBzZWxlY3Rvci0+YXR0cmlidXRlKCksIHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7
Cit9CisKK2lubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBTZWxlY3RvckNoZWNr
ZXI6OnRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3ItPnRhZ1FOYW1lKCkpOworfQorCit9CisK
K1NlbGVjdG9yUXVlcnlGYXN0UGF0aDo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoKGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKKyAgICA6IG1fc2VsZWN0
b3Ioc2VsZWN0b3IpCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKK3sKK30KKworYm9vbCBTZWxl
Y3RvclF1ZXJ5RmFzdFBhdGg6Om1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcigpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKFNlbGVjdG9yUXVlcnlGYXN0UGF0aDo6Y2FuVXNlKG1fc2VsZWN0b3IpKTsKKwor
ICAgIHN3aXRjaCAobV9zZWxlY3Rvci0+bV9tYXRjaCkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlRhZzoKKyAgICAgICAgcmV0dXJuIGNoZWNrVGFnVmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9y
KTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKKyAgICAgICAgcmV0dXJuIGNoZWNrQ2xh
c3NWYWx1ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6Oklk
OgorICAgICAgICByZXR1cm4gY2hlY2tJRFZhbHVlKG1fZWxlbWVudCwgbV9zZWxlY3Rvcik7Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0Ogor
ICAgICAgICByZXR1cm4gY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVudCwgbV9zZWxl
Y3Rvcik7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6CisgICAgICAgIHJldHVy
biBjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcygpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgU2VsZWN0b3JRdWVyeUZhc3RQYXRoOjptYXRjaGVzKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobWF0Y2hlc1JpZ2h0bW9zdFNlbGVjdG9yKCkpOworICAgIGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciA9IG1fc2VsZWN0b3I7CisgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IG1fZWxl
bWVudDsKKworICAgIGNvbnN0IENTU1NlbGVjdG9yKiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAw
OworICAgIGNvbnN0IEVsZW1lbnQqIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9
IDA7CisgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8
fCBzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAg
ICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOworCisgICAgaWYgKHNlbGVjdG9y
LT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgZWxlbWVu
dCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKworICAgIHNlbGVjdG9yID0gc2VsZWN0b3It
PnRhZ0hpc3RvcnkoKTsKKworICAgIC8vIFdlIGtub3cgdGhpcyBjb21wb3VuZCBzZWxlY3RvciBo
YXMgZGVzY2VuZGFudCwgY2hpbGQgYW5kIHN1YnNlbGVjdG9yIGNvbWJpbmF0b3JzIG9ubHkgYW5k
IGFsbCBjb21wb25lbnRzIGFyZSBzaW1wbGUuCisgICAgd2hpbGUgKHNlbGVjdG9yKSB7CisgICAg
ICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6Q2xhc3M6CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNr
Q2xhc3NWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9w
Q2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6
CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrSURWYWx1ZT4o
c2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6VGFnOgorICAgICAgICAg
ICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja1RhZ1ZhbHVlPihzZWxlY3Rvciwg
ZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRj
aEVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6CisgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OkV4YWN0OgorICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcjxj
aGVja0V4YWN0QXR0cmlidXRlVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vi
c2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJl
bGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbikKK3sKKyAgICByZXR1cm4gcmVs
YXRpb24gPT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgfHwgcmVsYXRpb24gPT0gQ1NTU2VsZWN0
b3I6OkNoaWxkIHx8IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjsKK30KKwor
c3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZU1hdGNoKGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvcikKK3sKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OlNldCkgeworICAgICAgICAvLyBTdHlsZSBhdHRyaWJ1dGUgaXMgZ2VuZXJhdGVkIGxhemlseSBi
dXQgdGhlIGZhc3QgcGF0aCBkb2Vzbid0IHRyaWdnZXIgaXQuCisgICAgICAgIC8vIERpc2FsbG93
IHRoZW0gaGVyZSByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGZhc3QgcGF0aCBtb3JlIGJyYW5jaHku
CisgICAgICAgIHJldHVybiBzZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyOworICAg
IH0KKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQorICAg
ICAgICByZXR1cm4gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0ciAmJiBIVE1MRG9j
dW1lbnQ6OmlzQ2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpOwor
ICAgIHJldHVybiBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnIHx8IHNlbGVj
dG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6Q2xhc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2Fi
bGVSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAg
aWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRpb24oKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0
b3IpIHx8IFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVj
dG9yKTsKK30KKworYm9vbCBTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6OmNhblVzZShjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSaWdodG1vc3RT
ZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHNlbGVj
dG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0
b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9u
KHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNlbGVjdG9yUXVl
cnlGYXN0UGF0aDo6Y29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMoKSBjb25zdAorewor
ICAgIEFTU0VSVChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvciht
X3NlbGVjdG9yKSk7CisgICAgc3dpdGNoIChtX3NlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSkg
eworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluazoKKyAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0FueUxpbms6CisgICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmlz
TGluaygpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRm9jdXM6
CisgICAgICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNz
KG1fZWxlbWVudCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvclF1ZXJ5RmFzdFBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTMzYTIzMmY2ZDIwODA4Mzc1MThi
Yjc4OTBlM2RiYTViMzdmNjQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykg
MjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtz
LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgU2VsZWN0b3JRdWVyeUZhc3RQYXRoX2gKKyNkZWZpbmUgU2VsZWN0b3JRdWVy
eUZhc3RQYXRoX2gKKworI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiU2VsZWN0
b3JDaGVja2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VsZWN0b3JRdWVy
eUZhc3RQYXRoIHsKK3B1YmxpYzoKKyAgICBTZWxlY3RvclF1ZXJ5RmFzdFBhdGgoY29uc3QgQ1NT
U2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7CisKKyAgICBib29sIG1hdGNoZXMoKSBjb25zdDsK
KyAgICBib29sIG1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcigpIGNvbnN0OworCisgICAgc3RhdGlj
IGJvb2wgY2FuVXNlKGNvbnN0IENTU1NlbGVjdG9yKik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBj
b21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcygpIGNvbnN0OworCisgICAgY29uc3QgQ1NT
U2VsZWN0b3IqIG1fc2VsZWN0b3I7CisgICAgY29uc3QgRWxlbWVudCogbV9lbGVtZW50OworfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDZlYTY3MDY4
MGU2ODdkMjMzMDBmOTI0ZjE4YTBiYmFhODA1MDkyZWMuLmYzMjE2MjEwOTU0ODFhMjQwOGMyOGJj
NzI2MjQ4MWQ2NTY5MDNmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtNTc0
LDggKzU3NCw4IEBAIGlubGluZSBib29sIGNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpCiAKICAgICBTZWxlY3RvckNoZWNr
ZXIgc2VsZWN0b3JDaGVja2VyKHJlZ2lvbkVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIGZvciAo
Y29uc3QgQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9y
TGlzdDo6bmV4dChzKSkgewotICAgICAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHMsIHJlZ2lvbkVsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7Ci0gICAgICAgIGlmIChzZWxlY3RvckNo
ZWNrZXIubWF0Y2goc2VsZWN0b3JDaGVja2luZ0NvbnRleHQpKQorICAgICAgICBTZWxlY3RvckNo
ZWNrZXI6OkNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChTZWxlY3RvckNo
ZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOworICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2Vy
Lm1hdGNoKHMsIHJlZ2lvbkVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggOWI5YWFlNDQ4Y2ViOTVkNTg4
MjMwNGZiZGYwMWQ3NmIyOGEzNzEyMC4uMzk1OWNmNDRmZjM3OTQ5ZDJkMjI2YmNlYWFkOThhYWUy
M2FhOTlmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApA
QCAtMTU3LDcgKzE1Nyw3IEBAIHN0cnVjdCBTZWxlY3RvckZyYWdtZW50IHsKICAgICB1bnNpZ25l
ZCB0YWdOYW1lTm90TWF0Y2hlZEJhY2t0cmFja2luZ1N0YXJ0V2lkdGhGcm9tSW5kaXJlY3RBZGph
Y2VudDsKICAgICB1bnNpZ25lZCB3aWR0aEZyb21JbmRpcmVjdEFkamFjZW50OwogCi0gICAgRnVu
Y3Rpb25UeXBlIGFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChib29sICgq
bWF0Y2hlcikoY29uc3QgQ2hlY2tpbmdDb250ZXh0JikpOworICAgIEZ1bmN0aW9uVHlwZSBhcHBl
bmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoYm9vbCAoKm1hdGNoZXIpKGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JikpOwogICAgIAogICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUqIHRhZ05hbWU7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBpZDsKQEAgLTM2
NCw3ICszNjQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZnJhZ21lbnRNYXRjaGVzVGhlUmlnaHRt
b3N0RWxlbWVudChTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDbwogICAgIHJldHVybiBmcmFnbWVu
dC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCA9PSBGcmFnbWVudFJlbGF0aW9uOjpSaWdodG1vc3Qg
JiYgZnJhZ21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPT0gRnJhZ21lbnRQb3NpdGlvbklu
Um9vdEZyYWdtZW50czo6UmlnaHRtb3N0OwogfQogCi1GdW5jdGlvblR5cGUgU2VsZWN0b3JGcmFn
bWVudDo6YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KGJvb2wgKCptYXRj
aGVyKShjb25zdCBDaGVja2luZ0NvbnRleHQmKSkKK0Z1bmN0aW9uVHlwZSBTZWxlY3RvckZyYWdt
ZW50OjphcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoYm9vbCAoKm1hdGNo
ZXIpKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JikpCiB7CiAgICAgdW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc2VzV2l0aENvbnRleHQuYXBwZW5kKEpTQzo6RnVuY3Rpb25QdHIo
bWF0Y2hlcikpOwogICAgIHJldHVybiBGdW5jdGlvblR5cGU6OlNlbGVjdG9yQ2hlY2tlcldpdGhD
aGVja2luZ0NvbnRleHQ7CkBAIC0zNzcsMzMgKzM3NywzMyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0
aW9uVHlwZSBhZGRTY3JvbGxiYXJQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNl
bGVjdAogICAgICAgICBmcmFnbWVudC51bm9wdGltaXplZFBzZXVkb0NsYXNzZXMuYXBwZW5kKEpT
Qzo6RnVuY3Rpb25QdHIoaXNXaW5kb3dJbmFjdGl2ZSkpOwogICAgICAgICByZXR1cm4gRnVuY3Rp
b25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NEaXNhYmxlZDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1p
emVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRGlzYWJsZWRQc2V1ZG9D
bGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVu
b3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRGlzYWJsZWRQ
c2V1ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRW5hYmxlZDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50
LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVz
RW5hYmxlZFBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJh
Z21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1h
dGNoZXNFbmFibGVkUHNldWRvQ2xhc3M8U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+
KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvcml6b250YWw6Ci0gICAgICAg
IHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQo
c2Nyb2xsYmFyTWF0Y2hlc0hvcml6b250YWxQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsK
KyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRo
Q29udGV4dChzY3JvbGxiYXJNYXRjaGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0Pik7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NWZXJ0aWNhbDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNl
dWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzVmVydGljYWxQc2V1ZG9DbGFzczxD
aGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1p
emVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzVmVydGljYWxQc2V1ZG9D
bGFzczxTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzRGVjcmVtZW50OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBw
ZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNEZWNy
ZW1lbnRQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdt
ZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRj
aGVzRGVjcmVtZW50UHNldWRvQ2xhc3M8U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+
KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0luY3JlbWVudDoKLSAgICAgICAg
cmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChz
Y3JvbGxiYXJNYXRjaGVzSW5jcmVtZW50UHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7Cisg
ICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENv
bnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0luY3JlbWVudFBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0Pik7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NT
dGFydDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xh
c3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzU3RhcnRQc2V1ZG9DbGFzczxDaGVja2luZ0Nv
bnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRv
Q2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzU3RhcnRQc2V1ZG9DbGFzczxTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzRW5kOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNFbmRQc2V1ZG9DbGFzczxDaGVja2lu
Z0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNl
dWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3M8U2VsZWN0
b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc0RvdWJsZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0
aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRG91YmxlQnV0dG9u
UHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5h
cHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0Rv
dWJsZUJ1dHRvblBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Pik7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTaW5nbGVCdXR0b246Ci0gICAgICAg
IHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQo
c2Nyb2xsYmFyTWF0Y2hlc1NpbmdsZUJ1dHRvblBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4p
OworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dp
dGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNTaW5nbGVCdXR0b25Qc2V1ZG9DbGFzczxTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzTm9CdXR0b246Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXpl
ZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNldWRvQ2xh
c3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9w
dGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNl
dWRvQ2xhc3M8U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Nvcm5lclByZXNlbnQ6Ci0gICAgICAgIHJldHVybiBmcmFn
bWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0
Y2hlc0Nvcm5lclByZXNlbnRQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAg
cmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChz
Y3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0Pik7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3Rp
dmU6Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNz
V2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0FjdGl2ZVBzZXVkb0NsYXNzPENoZWNraW5nQ29u
dGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9D
bGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1ZG9DbGFzczxTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzSG92ZXI6Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBz
ZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3M8Q2hl
Y2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXpl
ZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3M8
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwogICAgIH0KQEAgLTE2
MDEsNyArMTYwMSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjphZGRGbGFnc1RvRWxl
bWVudFN0eWxlRnJvbUNvbnRleHQoQXNzZW1ibGVyOjpSZWdpc3RlCiAgICAgQVNTRVJUKG1fc2Vs
ZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rvcik7CiAKICAgICBM
b2NhbFJlZ2lzdGVyIGNoaWxkU3R5bGUobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgbV9hc3Nl
bWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQ2hlY2tpbmdDb250ZXh0LCBlbGVtZW50U3R5bGUpKSwgY2hpbGRTdHlsZSk7Cisg
ICAgbV9hc3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQsIGVsZW1l
bnRTdHlsZSkpLCBjaGlsZFN0eWxlKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayBp
bnRvIGRvaW5nIHNvbWV0aGluZyBzbWFydCBpbiBNYWNyb0Fzc2VtYmxlciBpbnN0ZWFkLgogICAg
IEFzc2VtYmxlcjo6QWRkcmVzcyBmbGFnQWRkcmVzcyhjaGlsZFN0eWxlLCBSZW5kZXJTdHlsZTo6
bm9uaW5oZXJpdGVkRmxhZ3NNZW1vcnlPZmZzZXQoKSArIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0
ZWRGbGFnczo6ZmxhZ3NNZW1vcnlPZmZzZXQoKSk7CkBAIC0xNjU3LDcgKzE2NTcsNyBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bG9hZENoZWNraW5nQ29udGV4dChBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgY2hlY2tpbmdDbwogewogICAgIC8vIERlcGVuZCBvbiB0aGUgc3BlY2lmaWVkIHJl
c29sdmluZyBtb2RlIGFuZCBvdXIgY3VycmVudCBtb2RlLCBicmFuY2guCiAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoU2VsZWN0b3JDaGVja2VyOjpNb2RlKSA9PSAxLCAiV2UgZ2VuZXJhdGUgYSBi
eXRlIGxvYWQvdGVzdCBmb3IgdGhlIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZS4iKTsKLSAgICByZXR1
cm4gbV9hc3NlbWJsZXIuYnJhbmNoOChjb25kaXRpb24sIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVj
a2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHJlc29sdmluZ01v
ZGUpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5n
X3R5cGU8U2VsZWN0b3JDaGVja2VyOjpNb2RlPjo6dHlwZT4obW9kZSkpKTsKKyAgICByZXR1cm4g
bV9hc3NlbWJsZXIuYnJhbmNoOChjb25kaXRpb24sIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2lu
Z0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCwgcmVzb2x2aW5nTW9kZSkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxz
dGQ6OnVuZGVybHlpbmdfdHlwZTxTZWxlY3RvckNoZWNrZXI6Ok1vZGU+Ojp0eXBlPihtb2RlKSkp
OwogCiB9CiAKQEAgLTI0MzQsNyArMjQzNCw3IEBAIHN0YXRpYyBib29sIGVsZW1lbnRJc0FjdGl2
ZShFbGVtZW50KiBlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50LT5hY3RpdmUoKSB8fCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzQWN0aXZlKTsKIH0KIAotc3RhdGljIGJvb2wgZWxlbWVudElzQWN0aXZl
Rm9yU3R5bGVSZXNvbHV0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENoZWNraW5nQ29udGV4
dCogY2hlY2tpbmdDb250ZXh0KQorc3RhdGljIGJvb2wgZWxlbWVudElzQWN0aXZlRm9yU3R5bGVS
ZXNvbHV0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tp
bmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCiB7CiAgICAgaWYgKGNoZWNraW5nQ29udGV4dC0+
cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlKQog
ICAgICAgICBlbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlBY3RpdmUoKTsKQEAgLTI1MDUs
NyArMjUwNSw3IEBAIHN0YXRpYyB2b2lkIHNldEVsZW1lbnRTdHlsZUlzQWZmZWN0ZWRCeUVtcHR5
KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgZWxlbWVudC0+c2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHko
KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0RWxlbWVudFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVk
QnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxlSWZOZWNlc3NhcnkoQ2hlY2tpbmdDb250ZXh0KiBj
b250ZXh0LCBib29sIGlzRW1wdHkpCitzdGF0aWMgdm9pZCBzZXRFbGVtZW50U3R5bGVGcm9tQ29u
dGV4dElzQWZmZWN0ZWRCeUVtcHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeShTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY29udGV4dCwgYm9vbCBpc0VtcHR5KQogewog
ICAgIEFTU0VSVChjb250ZXh0LT5lbGVtZW50U3R5bGUpOwogICAgIGNvbnRleHQtPmVsZW1lbnRT
dHlsZS0+c2V0RW1wdHlTdGF0ZShpc0VtcHR5KTsKQEAgLTI2MTMsNyArMjYxMyw3IEBAIHN0YXRp
YyBib29sIGVsZW1lbnRJc0hvdmVyZWQoRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxl
bWVudC0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9T
dGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3Zlcik7CiB9CiAKLXN0YXRp
YyBib29sIGVsZW1lbnRJc0hvdmVyZWRGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCitzdGF0aWMgYm9vbCBl
bGVtZW50SXNIb3ZlcmVkRm9yU3R5bGVSZXNvbHV0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCiB7CiAg
ICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6
Ok1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICBlbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlIb3ZlcigpOwpAQCAtMjgwNCw3ICsyODA0LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbWVudElzT25seUNoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWwKIH0KIAogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKLXN0YXRpYyBib29sIG1h
a2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24o
RWxlbWVudCogZWxlbWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQp
CitzdGF0aWMgYm9vbCBtYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQ
bGFjZWhvbGRlclNob3duKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCiB7CiAgICAgaWYgKGlzSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQoKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChjaGVja2luZ0NvbnRl
eHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHls
ZSkKQEAgLTI4MTQsNyArMjgxNCw3IEBAIHN0YXRpYyBib29sIG1ha2VDb250ZXh0U3R5bGVVbmlx
dWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCoKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vz
c2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ2hl
Y2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCitzdGF0aWMgYm9vbCBtYWtlRWxlbWVudFN0
eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0Nv
bnRleHQpCiB7CiAgICAgaWYgKGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKmVsZW1lbnQp
KSB7CiAgICAgICAgIGlmIChjaGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0
b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewpAQCAtMzEwOCwxMCArMzEwOCwxMCBA
QCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVt
ZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkbwogICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIHJlcXVl
c3RlZCBwc2V1ZG9JZCBpcyBub3QgTk9QU0VVRE8sIHRoZSByZXF1ZXN0ZWQgcHNldWRvSWQgbmVl
ZCB0byBlcXVhbCB0byB0aGUgcHNldWRvIGVsZW1lbnQgb2YgdGhlIHJpZ2h0bW9zdCBmcmFnbWVu
dC4KICAgICBpZiAoZnJhZ21lbnRNYXRjaGVzVGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9y
Q29udGV4dCwgZnJhZ21lbnQpKSB7CiAgICAgICAgIGlmICghZnJhZ21lbnQucHNldWRvRWxlbWVu
dFNlbGVjdG9yKQotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5i
cmFuY2g4KEFzc2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0Nv
bnRleHQsIE9CSkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHBzZXVkb0lkKSksIEFzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKE5PUFNFVURPKSkpOworICAgICAgICAgICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4KEFzc2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxl
cjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29udGV4dCwgcHNldWRvSWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
Tk9QU0VVRE8pKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQXNzZW1ibGVyOjpKdW1w
IHNraXAgPSBtX2Fzc2VtYmxlci5icmFuY2g4KEFzc2VtYmxlcjo6RXF1YWwsIEFzc2VtYmxlcjo6
QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQs
IHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5PUFNFVURPKSk7Ci0gICAgICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpO
b3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNF
VE9GKENoZWNraW5nQ29udGV4dCwgcHNldWRvSWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
Q1NTU2VsZWN0b3I6OnBzZXVkb0lkKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNl
dWRvRWxlbWVudFR5cGUoKSkpKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXAgc2tpcCA9
IG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNz
KGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tp
bmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOT1BTRVVETykp
OworICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4KEFz
c2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9C
SkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgcHNldWRvSWQp
KSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGZyYWdtZW50
LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkpKSk7CiAgICAgICAg
ICAgICBza2lwLmxpbmsoJm1fYXNzZW1ibGVyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMzAs
NyArMzEzMCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJ
c1Njb3BlUm9vdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsCiAKICAgICBMb2NhbFJlZ2lzdGVy
IHNjb3BlKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgIGxvYWRDaGVja2luZ0NvbnRleHQoc2Nv
cGUpOwotICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKHNjb3BlLCBP
QkpFQ1RfT0ZGU0VUT0YoQ2hlY2tpbmdDb250ZXh0LCBzY29wZSkpLCBzY29wZSk7CisgICAgbV9h
c3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3Moc2NvcGUsIE9CSkVDVF9PRkZTRVRP
RihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgc2NvcGUpKSwgc2NvcGUpOwogCiAg
ICAgQXNzZW1ibGVyOjpKdW1wIHNjb3BlSXNOb3ROdWxsID0gbV9hc3NlbWJsZXIuYnJhbmNoVGVz
dFB0cihBc3NlbWJsZXI6Ok5vblplcm8sIHNjb3BlKTsKIApAQCAtMzE2Miw3ICszMTYyLDcgQEAg
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlTWFya1BzZXVkb1N0eWxlRm9yUHNl
dWRvRWxlbWVudChBc3NlbWJsZXI6OkoKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IHN1Y2Nlc3ND
YXNlczsKIAogICAgIC8vIFdoZW4gdGhlIHJlcXVlc3RlZCBwc2V1ZG9JZCBpc24ndCBOT1BTRVVE
TywgdGhlcmUncyBubyBuZWVkIHRvIG1hcmsgdGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlLgotICAg
IHN1Y2Nlc3NDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoOChBc3NlbWJsZXI6Ok5vdEVx
dWFsLCBBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0Yo
Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOT1BT
RVVETykpKTsKKyAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JK
RUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkp
LCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOT1BTRVVETykpKTsKIAogICAgIC8vIFdoZW4gcmVz
b2x2aW5nIG1vZGUgaXMgQ29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVu
dHMsIHRoZXJlJ3Mgbm8gbmVlZCB0byBtYXJrIHRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZS4KICAg
ICBzdWNjZXNzQ2FzZXMuYXBwZW5kKGJyYW5jaE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2luZ0Nv
bnRleHQoQXNzZW1ibGVyOjpFcXVhbCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5n
UnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cywgY2hlY2tpbmdDb250ZXh0KSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oIGIvU291
cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaAppbmRleCBjMGNhNTMyZDUwMzMz
MTFmZmY2N2QxNjEwNDFjZjQ1NGUxNGJmMjEwLi5iMTA3YzQzNDI3ZmQ0OTdmMjA5OTE0YjYyYmRj
MmQ4N2JkNDM4ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JD
b21waWxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgK
QEAgLTY5LDI0ICs2OSw2IEBAIGNsYXNzIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgewogCiBu
YW1lc3BhY2UgU2VsZWN0b3JDb21waWxlciB7CiAKLXN0cnVjdCBDaGVja2luZ0NvbnRleHQgewot
ICAgIENoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGUgcmVzb2x2aW5nTW9kZSkK
LSAgICAgICAgOiByZXNvbHZpbmdNb2RlKHJlc29sdmluZ01vZGUpCi0gICAgICAgICwgZWxlbWVu
dFN0eWxlKG51bGxwdHIpCi0gICAgICAgICwgcHNldWRvSWQoTk9QU0VVRE8pCi0gICAgICAgICwg
c2Nyb2xsYmFyKG51bGxwdHIpCi0gICAgICAgICwgc2Nyb2xsYmFyUGFydChOb1BhcnQpCi0gICAg
ICAgICwgc2NvcGUobnVsbHB0cikKLSAgICB7IH0KLQotICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9k
ZSByZXNvbHZpbmdNb2RlOwotICAgIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGU7Ci0gICAgUHNl
dWRvSWQgcHNldWRvSWQ7Ci0gICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXI7Ci0gICAgU2Ny
b2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0OwotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
OwotfTsKLQogZW51bSBjbGFzcyBTZWxlY3RvckNvbnRleHQgewogICAgIC8vIFJ1bGUgQ29sbGVj
dG9yIG5lZWRzIGEgcmVzb2x2aW5nTW9kZSBhbmQgY2FuIG1vZGlmeSB0aGUgdHJlZSBhcyBpdCBt
YXRjaGVzLgogICAgIFJ1bGVDb2xsZWN0b3IsCkBAIC05Niw3ICs3OCw3IEBAIGVudW0gY2xhc3Mg
U2VsZWN0b3JDb250ZXh0IHsKIH07CiAKIHR5cGVkZWYgdW5zaWduZWQgKCpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXIpKEVsZW1lbnQqKTsKLXR5cGVkZWYgdW5zaWduZWQgKCpTZWxlY3RvckNoZWNrZXJX
aXRoQ2hlY2tpbmdDb250ZXh0KShFbGVtZW50KiwgY29uc3QgQ2hlY2tpbmdDb250ZXh0Kik7Cit0
eXBlZGVmIHVuc2lnbmVkICgqU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCkoRWxl
bWVudCosIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Kik7CiBTZWxlY3Rv
ckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIEpT
Qzo6Vk0qLCBTZWxlY3RvckNvbnRleHQsIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvdXRw
dXRDb2RlUmVmKTsKIAogaW5saW5lIFNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzaW1wbGVTZWxlY3Rv
ckNoZWNrZXJGdW5jdGlvbih2b2lkKiBleGVjdXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxh
dGlvblN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5
LmNwcAppbmRleCA1YzNmOWJjYTE3MWFkYzk1OTViOGQxOWVkYzBkOTU5ZDg2OGFjZTY0Li42ZDM4
Nzk5NzE1ZGU3YzQwZWNlNTMwZDE5NmUwNjBjYWQzODk3MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Nl
bGVjdG9yUXVlcnkuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgi
CiAjaW5jbHVkZSAiRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNlbGVj
dG9yQ2hlY2tlci5oIgotI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgiCisjaW5j
bHVkZSAiU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3Qu
aCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGlj
IElkTWF0Y2hpbmdUeXBlIGZpbmRJZE1hdGNoaW5nVHlwZShjb25zdCBDU1NTZWxlY3RvciYgZmly
c3RTZWxlY3RvcikKIAogICAgIG1fc2VsZWN0b3JzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2Vs
ZWN0b3JDb3VudCk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxl
Y3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHNlbGVjdG9yKSkKLSAgICAgICAgbV9zZWxlY3RvcnMudW5jaGVja2VkQXBwZW5kKFNlbGVj
dG9yRGF0YShzZWxlY3RvciwgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6OmNhblVzZShzZWxlY3Rv
cikpKTsKKyAgICAgICAgbV9zZWxlY3RvcnMudW5jaGVja2VkQXBwZW5kKFNlbGVjdG9yRGF0YShz
ZWxlY3RvciwgU2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpjYW5Vc2Uoc2VsZWN0b3IpKSk7CiAKICAg
ICBpZiAoc2VsZWN0b3JDb3VudCA9PSAxKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yJiBz
ZWxlY3RvciA9ICptX3NlbGVjdG9ycy5maXJzdCgpLnNlbGVjdG9yOwpAQCAtMTE1LDE2ICsxMTUs
MTYgQEAgc3RhdGljIElkTWF0Y2hpbmdUeXBlIGZpbmRJZE1hdGNoaW5nVHlwZShjb25zdCBDU1NT
ZWxlY3RvciYgZmlyc3RTZWxlY3RvcikKIGlubGluZSBib29sIFNlbGVjdG9yRGF0YUxpc3Q6OnNl
bGVjdG9yTWF0Y2hlcyhjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSwgRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUpIGNvbnN0CiB7CiAgICAgaWYg
KHNlbGVjdG9yRGF0YS5pc0Zhc3RDaGVja2FibGUgJiYgIWVsZW1lbnQuaXNTVkdFbGVtZW50KCkp
IHsKLSAgICAgICAgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGggc2VsZWN0b3JDaGVja2VyRmFzdFBh
dGgoc2VsZWN0b3JEYXRhLnNlbGVjdG9yLCAmZWxlbWVudCk7Ci0gICAgICAgIGlmICghc2VsZWN0
b3JDaGVja2VyRmFzdFBhdGgubWF0Y2hlc1JpZ2h0bW9zdFNlbGVjdG9yKFNlbGVjdG9yQ2hlY2tl
cjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpKQorICAgICAgICBTZWxlY3RvclF1ZXJ5RmFzdFBhdGgg
c2VsZWN0b3JRdWVyeUZhc3RQYXRoKHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJmVsZW1lbnQpOwor
ICAgICAgICBpZiAoIXNlbGVjdG9yUXVlcnlGYXN0UGF0aC5tYXRjaGVzUmlnaHRtb3N0U2VsZWN0
b3IoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9y
Q2hlY2tlckZhc3RQYXRoLm1hdGNoZXMoKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yUXVlcnlG
YXN0UGF0aC5tYXRjaGVzKCk7CiAgICAgfQogCiAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9y
Q2hlY2tlcihlbGVtZW50LmRvY3VtZW50KCkpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQoc2VsZWN0b3JEYXRhLnNl
bGVjdG9yLCAmZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsK
KyAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29u
dGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIHNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1bWVudE5vZGUoKSA/IG51bGxw
dHIgOiAmcm9vdE5vZGU7Ci0gICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCk7CisgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxl
Y3RvckRhdGEuc2VsZWN0b3IsICZlbGVtZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCk7CiB9
CiAKIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyhFbGVtZW50JiB0YXJnZXRFbGVtZW50
KSBjb25zdApAQCAtMzgwLDcgKzM4MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRh
dGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3QKIHRlbXBs
YXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2Vs
ZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5n
Q29udGV4dChjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQ29udGFpbmVyTm9k
ZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ2hlY2tlcldpdGhD
aGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2VyLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJh
aXQ6Ok91dHB1dFR5cGUmIG91dHB1dCwgY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEp
IGNvbnN0CiB7Ci0gICAgU2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5n
Q29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOworICAgIFNlbGVj
dG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNr
ZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIGNoZWNraW5nQ29udGV4dC5zY29wZSA9IHJv
b3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2RlOwogCiAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVy
Tm9kZSY+KHNlYXJjaFJvb3ROb2RlKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237415</attachid>
            <date>2014-08-30 12:01:51 -0700</date>
            <delta_ts>2014-08-30 12:13:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135255-20140831040240.patch</filename>
            <type>text/plain</type>
            <size>71462</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzAxNWJhNDQ5NmZkNGMx
ZGYyOGIzMTJjMTBlOTMwN2JhYmI5ZWVmNC4uNTNjZTkwNjJjYTlhOTNiNzU5YzhkMjRkNTAwZmQx
NzYzMWI1MzY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc1IEBACiAyMDE0LTA4LTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCisgICAgICAgIE1lcmdlIENoZWNr
aW5nQ29udGV4dHMgZnJvbSBTZWxlY3RvckNvbXBpbGVyIGFuZCBTZWxlY3RvckNoZWNrZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI1NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIG1lcmdlIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgYW5k
IFNlbGVjdG9yQ29tcGlsZXI6OkNoZWNraW5nQ29udGV4dC4KKyAgICAgICAgV2UgZXhwb3NlIG9u
bHkgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQuIFRoYXQgaXMgdGhlIHNhbWUgdG8g
dGhlIG9sZCBTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQuCisgICAgICAgIEluIFNl
bGVjdG9yQ2hlY2tlci5jcHAsIHdlIGRlZmluZSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0IGFuZCB1c2UgaXQgaW50ZXJuYWxseS4KKyAgICAgICAgQW5kIHdlIG1vdmUg
VmlzaXRlZE1hdGNoVHlwZSBmcm9tIFNlbGVjdG9yQ2hlY2tlci5oIHRvIFNlbGVjdG9yQ2hlY2tl
ci5jcHAuCisgICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgaXMgYWxzbyBleHBsaWNpdGx5IHVzZWQg
YnkgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguIEhvd2V2ZXIsIFNlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoIGlzIG5vdworICAgICAgICB1c2VkIG9ubHkgZnJvbSBTZWxlY3RvclF1ZXJ5IChTdHlsZSBy
ZXNvbHV0aW9uIGFsZ29yaXRobSBubyBsb25nZXIgdXNlIGl0OiByMTcxMDU5KS4gU28gdmlzaXRl
ZE1hdGNoVHlwZSBpcworICAgICAgICBhbHdheXMgVmlzaXRlZE1hdGNoRGlzYWJsZWQuIEluIHRo
aXMgcGF0Y2gsIHdlIHJlbmFtZSBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aCB0byBTZWxlY3RvclF1
ZXJ5RmFzdFBhdGgsIGFuZAorICAgICAgICBkcm9wIFZpc2l0ZWRNYXRjaFR5cGUgcGFyYW1ldGVy
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAg
ICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyk6CisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpoYXNT
Y3JvbGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNraW5nQ29udGV4
dEZvclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVj
dXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWly
a3NNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0Ns
YXNzKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dDo6Q2hlY2tpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ6
OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvU2VsZWN0
b3JRdWVyeUZhc3RQYXRoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXJGYXN0UGF0aC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmZh
c3RDaGVja1NpbmdsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hl
Y2tDbGFzc1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hlY2tJRFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hlY2tUYWdWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6OlNlbGVjdG9yUXVlcnlGYXN0UGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6Om1hdGNoZXNSaWdodG1v
c3RTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6Om1h
dGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6aXNGYXN0Q2hlY2thYmxlUmVsYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6aXNGYXN0Q2hlY2thYmxlTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6
aXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JRdWVyeUZhc3RQYXRoOjpjYW5Vc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JR
dWVyeUZhc3RQYXRoOjpjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyk6CisgICAgICAg
ICogY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmguCisgICAgICAgICogY3NzL1N0eWxlUmVz
b2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrUmVnaW9uU2VsZWN0b3IpOgorICAgICAg
ICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OlNlbGVjdG9yRnJhZ21lbnQ6OmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xh
c3NXaXRoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRT
Y3JvbGxiYXJQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21w
aWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjphZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmVsZW1lbnRJc0FjdGl2ZUZvclN0eWxl
UmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpzZXRFbGVt
ZW50U3R5bGVGcm9tQ29udGV4dElzQWZmZWN0ZWRCeUVtcHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjplbGVtZW50
SXNIb3ZlcmVkRm9yU3R5bGVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6Om1ha2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNl
aG9sZGVyU2hvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6bWFrZUVs
ZW1lbnRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlUmVxdWVzdGVkUHNldWRvRWxlbWVudEVxdWFsc1RvU2VsZWN0b3JQc2V1ZG9FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNTY29wZVJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZU1hcmtQc2V1
ZG9TdHlsZUZvclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRl
eHQ6OkNoZWNraW5nQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1NlbGVjdG9yUXVl
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6U2VsZWN0b3JEYXRh
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjpzZWxlY3Rvck1hdGNo
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVk
U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk6CisKKzIwMTQtMDgtMzAgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKICAgICAgICAgQ1NTOiBSZWZhY3Rv
ciA6dmlzaXRlZCBoYW5kbGluZyBpbiBTZWxlY3RvckNoZWNrZXIKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTYzOQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IGQyNWY4NmY3ZjdhOTdlNWViYjBkY2Y3NGRjZTRiNGQ4ZTRiZmE4NWQuLjg4YzRlNjdi
NTlhN2EzMmI0MmVmY2EwNGI4MjMyZmM3ZWRiZmU0ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0xMzAyLDggKzEzMDIsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1NWR0NTU1Bh
cnNlci5jcHAKICAgICBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKICAgICBjc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAotICAgIGNzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAKICAgICBj
c3MvU2VsZWN0b3JGaWx0ZXIuY3BwCisgICAgY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5jcHAK
ICAgICBjc3MvU291cmNlU2l6ZUxpc3QuY3BwCiAgICAgY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuY3BwCiAgICAgY3NzL1N0eWxlTWVkaWEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGRmNGUyMTg3ZGViYzEwMjll
MDkzMTg3NjMzMDc1ZGE5ZDI3ZTA0ZC4uNDE5YmJmMWU1Yjc4ZmNhNWNkMjNkMmM3NmRkZGEzYjA4
M2QxMWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTQxOCw4ICsxNDE4LDggQEAKIAkJNDE5QkMyREYxNjg1MzI5OTAwRDY0
RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxOUJDMkREMTY4NTMyOTkwMEQ2NEQ2RCAvKiBWaXNpdGVkTGlua1N0
YXRlLmggKi87IH07CiAJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3Jr
ZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFBM0Q1OEMxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAg
Ki87IH07CiAJCTQxQTNENThGMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJl
YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQTNE
NThEMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCAqLzsgfTsKLQkJ
NDFCOENENDUxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjhDRDQzMTZE
MDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAgKi87IH07Ci0JCTQx
QjhDRDQ2MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCOENENDQxNkQwNDU5
MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmggKi87IH07CisJCTQxQjhDRDQ1
MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCOENENDMxNkQwNDU5MTAwMEU4
Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5jcHAgKi87IH07CisJCTQxQjhDRDQ2MTZEMDQ1
OTEwMDBFOENDMCAvKiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjhDRDQ0MTZEMDQ1OTEwMDBFOENDMCAvKiBT
ZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCAqLzsgfTsKIAkJNDFCRjcwMEMwRkU4NkY0OTAwNUU4REVD
IC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDFCRjcwMEEwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hh
bm5lbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxQkY3MDBGMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUJGNzAw
RDBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwICovOyB9
OwogCQk0MUJGNzAxMDBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3
MDBFMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovOyB9
OwpAQCAtODQyOCw4ICs4NDI4LDggQEAKIAkJNDE5QkMyREQxNjg1MzI5OTAwRDY0RDZEIC8qIFZp
c2l0ZWRMaW5rU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRl
ZExpbmtTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUEzRDU4QzEwMUMx
NTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERlZGljYXRlZFdvcmtlclRocmVhZC5jcHA7IHBhdGggPSB3
b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxQTNENThEMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGVkaWNhdGVkV29ya2VyVGhyZWFk
Lmg7IHBhdGggPSB3b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0MUI4Q0Q0MzE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVj
a2VyRmFzdFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vs
ZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
MUI4Q0Q0NDE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCOENENDMxNkQwNDU5MTAwMEU4Q0MwIC8q
IFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MUI4Q0Q0NDE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JRdWVyeUZhc3RQYXRo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yUXVlcnlGYXN0UGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUJGNzAwQTBGRTg2RjQ5MDA1RThE
RUMgLyogTWVzc2FnZVBvcnRDaGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lc3NhZ2VQb3J0Q2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MUJGNzAwRDBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWwuY3BwOyBwYXRoID0gZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQkY3MDBFMEZFODZGNjEwMDVFOERF
QyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oOyBwYXRoID0gZGVmYXVsdC9Q
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjIxMTEsOCArMjIxMTEsOCBAQAogCQkJCUE3OUJBREEwMTYxRTdGM0YwMEMyRTY1MiAvKiBS
dWxlU2V0LmggKi8sCiAJCQkJRTQ0QjRCQjExNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hl
Y2tlci5jcHAgKi8sCiAJCQkJRTQ0QjRCQjIxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hl
Y2tlci5oICovLAotCQkJCTQxQjhDRDQzMTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNr
ZXJGYXN0UGF0aC5jcHAgKi8sCi0JCQkJNDFCOENENDQxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVj
dG9yQ2hlY2tlckZhc3RQYXRoLmggKi8sCisJCQkJNDFCOENENDMxNkQwNDU5MTAwMEU4Q0MwIC8q
IFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5jcHAgKi8sCisJCQkJNDFCOENENDQxNkQwNDU5MTAwMEU4
Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5oICovLAogCQkJCTQzMkQzRkU3MThBODY1ODQw
MEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmggKi8sCiAJCQkJNDE1MDcx
NTUxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmNwcCAqLywKIAkJCQk0MTUwNzE1
NjE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLywKQEAgLTI1ODQ0LDcgKzI1
ODQ0LDcgQEAKIAkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0
aW9uUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0QjRCQjQxNDE2NTBENzAwMkIxRDhCIC8q
IFNlbGVjdG9yQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFCOENENDYxNkQwNDU5MTAw
MEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmggaW4gSGVhZGVycyAqLywKKwkJCQk0
MUI4Q0Q0NjE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzJEM0ZFODE4QTg2NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2Vy
VGVzdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZCOTk5OTcxODA0RDU0MjAwRDAx
MTIxIC8qIFNlbGVjdG9yQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNTA3MTU4MTY4
NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTI4
MCw3ICsyOTI4MCw3IEBACiAJCQkJQjJDM0RBMkUwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRl
ZFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRUE4MDdDODBGNzE0QTAzMDA1MjQxOTkg
LyogU2VsZWN0aW9uUmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDRCNEJCMzE0MTY1MEQ3
MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxQjhD
RDQ1MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk0MUI4Q0Q0NTE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JRdWVyeUZh
c3RQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2Qjk5OTk2MTgwNEQ1NDIwMEQwMTEyMSAv
KiBTZWxlY3RvckNvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNTA3MTU3MTY4NTA2
NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDUz
MjJBQjE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IGVjMDg1MzYzOTM1MDMyODA1Njg2Njli
NDFlZmU4MWY0ZTIwNmIxZWYuLmZkNTZiYzhjNTg3YTM1YmNkYWJmYTNiYjY4ODdiOTQzZjc3ZDUz
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtODEsOCArODEsOCBAQAogI2lu
Y2x1ZGUgIlBhZ2VSdWxlQ29sbGVjdG9yLmNwcCIKICNpbmNsdWRlICJSdWxlRmVhdHVyZS5jcHAi
CiAjaW5jbHVkZSAiUnVsZVNldC5jcHAiCi0jaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyRmFzdFBh
dGguY3BwIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmNwcCIKKyNpbmNsdWRlICJTZWxlY3Rv
clF1ZXJ5RmFzdFBhdGguY3BwIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5jcHAiCiAjaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAppbmRl
eCBkYWQ0YTIyNjMxMWEyMjlkMzg2MjFkYWQ0MjU3MGRiNTFhMGUxMjBhLi5lODgyMzRkMTU3NDhj
MTk2NmE3MzBhOGQwZWEwZjA2NjM1ZWIwOTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVt
ZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTI5NSwyMyArMjk1LDI4IEBAIGlubGluZSBib29sIEVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEp
CiAgICAgICAgIGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyID0gcnVsZURhdGEuY29tcGlsZWRTZWxl
Y3RvckNvZGVSZWYoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBp
ZiAoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIpIHsKLSAgICAgICAgaWYgKHJ1bGVEYXRhLmNvbXBp
bGF0aW9uU3RhdHVzKCkgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0
b3JDaGVja2VyKSB7Ci0gICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6c2ltcGxlU2VsZWN0
b3JDaGVja2VyRnVuY3Rpb24oY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHJ1bGVEYXRhLmNvbXBp
bGF0aW9uU3RhdHVzKCkpOwotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc2VsZWN0
b3JDaGVja2VyKCZtX2VsZW1lbnQpIHx8IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkID09
IE5PUFNFVURPLCAiV2hlbiBtYXRjaGluZyBwc2V1ZG8gZWxlbWVudHMsIHdlIHNob3VsZCBuZXZl
ciBjb21waWxlIGEgc2VsZWN0b3IgY2hlY2tlciB3aXRob3V0IGNvbnRleHQgdW5sZXNzIGl0IGNh
bm5vdCBtYXRjaCBhbnl0aGluZy4iKTsKKyAgICBpZiAoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIg
JiYgcnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKKyAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6
U2ltcGxlU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6
OnNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBy
dWxlRGF0YS5jb21waWxhdGlvblN0YXR1cygpKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghc2VsZWN0b3JDaGVja2VyKCZtX2VsZW1lbnQpIHx8IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBz
ZXVkb0lkID09IE5PUFNFVURPLCAiV2hlbiBtYXRjaGluZyBwc2V1ZG8gZWxlbWVudHMsIHdlIHNo
b3VsZCBuZXZlciBjb21waWxlIGEgc2VsZWN0b3IgY2hlY2tlciB3aXRob3V0IGNvbnRleHQgdW5s
ZXNzIGl0IGNhbm5vdCBtYXRjaCBhbnl0aGluZy4iKTsKICNpZiBDU1NfU0VMRUNUT1JfSklUX1BS
T0ZJTElORwotICAgICAgICAgICAgcnVsZURhdGEuY29tcGlsZWRTZWxlY3RvclVzZWQoKTsKKyAg
ICAgICAgcnVsZURhdGEuY29tcGlsZWRTZWxlY3RvclVzZWQoKTsKICNlbmRpZgotICAgICAgICAg
ICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlcigmbV9lbGVtZW50KTsKLSAgICAgICAgfQorICAgICAg
ICByZXR1cm4gc2VsZWN0b3JDaGVja2VyKCZtX2VsZW1lbnQpOworICAgIH0KKyNlbmRpZiAvLyBF
TkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKKworICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0IGNvbnRleHQobV9tb2RlKTsKKyAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IG1fc3R5
bGU7CisgICAgY29udGV4dC5wc2V1ZG9JZCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lk
OworICAgIGNvbnRleHQuc2Nyb2xsYmFyID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFy
OworICAgIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9s
bGJhclBhcnQ7CisKKyNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKKyAgICBpZiAoY29tcGls
ZWRTZWxlY3RvckNoZWNrZXIpIHsKICAgICAgICAgQVNTRVJUKHJ1bGVEYXRhLmNvbXBpbGF0aW9u
U3RhdHVzKCkgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0
aENoZWNraW5nQ29udGV4dCk7CiAKICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBp
bGVyOjpzZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQoY29tcGlsZWRT
ZWxlY3RvckNoZWNrZXIsIHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKCkpOwotICAgICAgICBT
ZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQgY29udGV4dChtX21vZGUpOwotICAgICAg
ICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IG1fc3R5bGU7Ci0gICAgICAgIGNvbnRleHQucHNldWRv
SWQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZDsKLSAgICAgICAgY29udGV4dC5zY3Jv
bGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7Ci0gICAgICAgIGNvbnRleHQu
c2Nyb2xsYmFyUGFydCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhclBhcnQ7CisKICNp
ZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICBydWxlRGF0YS5jb21waWxlZFNl
bGVjdG9yVXNlZCgpOwogI2VuZGlmCkBAIC0zMjEsMTIgKzMyNiw3IEBAIGlubGluZSBib29sIEVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEp
CiAKICAgICAvLyBTbG93IHBhdGguCiAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tl
cihtX2VsZW1lbnQuZG9jdW1lbnQoKSk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksICZtX2VsZW1lbnQsIG1f
bW9kZSk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBtX3N0eWxlOwotICAgIGNvbnRleHQu
cHNldWRvSWQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZDsKLSAgICBjb250ZXh0LnNj
cm9sbGJhciA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhcjsKLSAgICBjb250ZXh0LnNj
cm9sbGJhclBhcnQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXJQYXJ0OwotICAgIHJl
dHVybiBzZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCk7CisgICAgcmV0dXJuIHNlbGVjdG9y
Q2hlY2tlci5tYXRjaChydWxlRGF0YS5zZWxlY3RvcigpLCAmbV9lbGVtZW50LCBjb250ZXh0KTsK
IH0KIAogdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1h
dGNoUmVxdWVzdCwgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJiBydWxlUmFuZ2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDNmYzlkYzk2Zjg1ZWQ3NmVmZTZhZTYx
NTZlNDg4NDhkNWQ4YTZkYmMuLmQ2ZmJiZmYzOWYzZWY5ZWQyNmQzOWM2ODA4ZWQ3ZTY3MzQwZGFm
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC01Nyw3ICs1Nywz
MyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwot
ICAgIAorCitlbnVtIGNsYXNzIFZpc2l0ZWRNYXRjaFR5cGUgOiB1bnNpZ25lZCBjaGFyIHsKKyAg
ICBEaXNhYmxlZCwgRW5hYmxlZAorfTsKKworc3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyA6IHB1YmxpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dCB7CisgICAgLy8gSW5pdGlhbCBzZWxlY3RvciBjb25zdHJ1Y3RvcgorICAgIENoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQm
IGNoZWNraW5nQ29udGV4dCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBl
bGVtZW50KQorICAgICAgICA6IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KGNoZWNr
aW5nQ29udGV4dCkKKyAgICAgICAgLCBzZWxlY3RvcihzZWxlY3RvcikKKyAgICAgICAgLCBlbGVt
ZW50KGVsZW1lbnQpCisgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZShyZXNvbHZpbmdNb2RlID09
IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6
OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCkKKyAgICAgICAgLCBmaXJzdFNl
bGVjdG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikKKyAgICAgICAgLCBpbkZ1bmN0aW9uYWxQc2V1
ZG9DbGFzcyhmYWxzZSkKKyAgICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCisgICAg
ICAgICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQorICAgIHsgfQorCisgICAgY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yOworICAgIEVsZW1lbnQqIGVsZW1lbnQ7CisgICAgVmlzaXRlZE1h
dGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOworICAgIGNvbnN0IENTU1NlbGVjdG9yKiBmaXJzdFNl
bGVjdG9yT2ZUaGVGcmFnbWVudDsKKyAgICBib29sIGluRnVuY3Rpb25hbFBzZXVkb0NsYXNzOwor
ICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOworICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRv
OworfTsKKwogc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RDaGlsZEVsZW1lbnQoY29uc3QgRWxl
bWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gIUVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3Vz
U2libGluZyhlbGVtZW50KTsKQEAgLTEzNCw4ICsxNjAsOSBAQCBzdGF0aWMgaW5saW5lIGludCBj
b3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVh
bGlmaQogewogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0
Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBD
aGVja2luZ0NvbnRleHQmIHByb3ZpZGVkQ29udGV4dCkgY29uc3QKIHsKKyAgICBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIGNvbnRleHQocHJvdmlkZWRDb250ZXh0LCBzZWxlY3RvciwgZWxlbWVu
dCk7CiAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBOT1BTRVVETzsKICAgICBpZiAobWF0Y2hSZWN1
cnNpdmVseShjb250ZXh0LCBwc2V1ZG9JZCkgIT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNTIsNyArMTc5LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1h
dGNoKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1pbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxl
bWVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250
ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykKK2lubGluZSBzdGF0aWMgYm9vbCBoYXNTY3Jv
bGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCiB7CiAgICAgaWYg
KGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSCiAgICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0g
U0NST0xMQkFSX1RIVU1CCkBAIC0xNjksMTIgKzE5NiwxMiBAQCBpbmxpbmUgc3RhdGljIGJvb2wg
aGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlYwogICAgIHJldHVybiBkeW5hbWljUHNldWRvID09IFJFU0laRVI7CiB9CiAKLXN0YXRpYyBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dEZv
clBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBj
b250ZXh0KQorc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KQogewotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgdXBkYXRlZENvbnRleHQoY29udGV4dCk7CisgICAgU2VsZWN0
b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHVwZGF0ZWRDb250ZXh0KGNvbnRl
eHQpOwogICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhlIGZp
cnN0IGxpbmsuCiAgICAgaWYgKGNvbnRleHQuZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIHVw
ZGF0ZWRDb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRN
YXRjaERpc2FibGVkOworICAgICAgICB1cGRhdGVkQ29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0g
VmlzaXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAgICAgdXBkYXRlZENvbnRleHQuZWxlbWVudCA9
IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgIHJldHVybiB1cGRhdGVkQ29u
dGV4dDsKIH0KQEAgLTE4NSw3ICsyMTIsNyBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3QgUwogLy8g
KiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBl
bGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZh
aWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0
b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVj
dXJzaXZlbHkoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvKSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNo
ZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYg
Y29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CiB7CiAgICAgLy8gVGhlIGZp
cnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaC4KICAgICBpZiAoIWNoZWNrT25lKGNvbnRleHQpKQpA
QCAtMjI0LDcgKzI1MSw3IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTCiAgICAgaWYgKCFoaXN0
b3J5U2VsZWN0b3IpCiAgICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CiAKLSAgICBTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKKyAgICBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIG5leHRDb250ZXh0KGNvbnRleHQpOwogICAgIG5leHRDb250ZXh0LnNl
bGVjdG9yID0gaGlzdG9yeVNlbGVjdG9yOwogCiAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwpAQCAtMjM1LDcgKzI2Miw3IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25z
dCBTCiAKICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHRyeSB0
byBtYXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0b3JzLgogICAgICAgICBpZiAocmVs
YXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0
b3I6OkNoaWxkKQotICAgICAgICAgICAgbmV4dENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFZp
c2l0ZWRNYXRjaERpc2FibGVkOworICAgICAgICAgICAgbmV4dENvbnRleHQudmlzaXRlZE1hdGNo
VHlwZSA9IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogCiAgICAgICAgIG5leHRDb250ZXh0
LnBzZXVkb0lkID0gTk9QU0VVRE87CiAgICAgfQpAQCAtMzk3LDcgKzQyNCw3IEBAIHN0YXRpYyBi
b29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yLCBjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBjYW5N
YXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkKK3N0YXRpYyBib29sIGNhbk1hdGNoSG92ZXJP
ckFjdGl2ZUluUXVpcmtzTW9kZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMmIGNvbnRleHQpCiB7CiAgICAgLy8gRm9yIHF1aXJrcyBtb2RlLCBmb2xsb3cg
dGhpczogaHR0cDovL3F1aXJrcy5zcGVjLndoYXR3Zy5vcmcvI3RoZS06YWN0aXZlLWFuZC06aG92
ZXItcXVpcmsKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgYSBjb21wb3VuZCBzZWxlY3RvciAnc2Vs
ZWN0b3InIHRoYXQgbWF0Y2hlcyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBub3QgbWF0
Y2ggZWxlbWVudHMgdGhhdCB3b3VsZCBub3QgYWxzbyBtYXRjaCB0aGUgJzphbnktbGluaycgc2Vs
ZWN0b3IuCkBAIC00NTIsNyArNDc5LDcgQEAgc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0
aXZlSW5RdWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGUKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBj
b25zdAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsK
ICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0
b3I7CkBAIC00ODgsNyArNTE1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNv
bnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAg
aWYgKCFzZWxlY3Rvckxpc3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRleHQpOworICAg
ICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwog
ICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAg
ICAgICAgICAgICBzdWJDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc2VsZWN0
b3JMaXN0LT5maXJzdCgpOwogICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0g
c2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNl
bGVjdG9yID0gc3ViQ29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CkBAIC00OTgsNyAr
NTI1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
cGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBvY2N1cnMKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpICE9IENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc05vdCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVj
dCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBrbm93
IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3QpIHlldC4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1Zpc2l0ZWQgfHwgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlw
ZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmsgJiYgc3ViQ29udGV4dC52aXNpdGVk
TWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzVmlzaXRlZCB8fCAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NU
eXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluayAmJiBzdWJDb250ZXh0LnZpc2l0
ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgaWYgKCFjaGVja09uZShzdWJDb250ZXh0KSkKQEAgLTY4NCw3ICs3MTEsNyBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NBbnk6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBD
aGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAg
ICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgICAg
ICAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxp
c3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9
IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewpAQCAtNzA1LDcg
KzczMiw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIC8vIEluc2lkZSBmdW5j
dGlvbmFsIHBzZXVkbyBjbGFzcyBleGNlcHQgZm9yIDpub3QsIDp2aXNpdGVkIG5ldmVyIG1hdGNo
ZXMuCiAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+
aXNMaW5rKCkgJiYgY29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJs
ZWQ7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgY29udGV4dC52aXNp
dGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQ7CiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRHJhZzoKICAgICAgICAgICAgIGlmIChjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICBp
ZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCkBAIC04MjksNyArODU2LDcgQEAgYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogICAgIH0KICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgZWxzZSBpZiAoc2Vs
ZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3It
PnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsK
LSAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKKyAg
ICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogCiAg
ICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAg
Y29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwpA
QCAtODQ2LDcgKzg3Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29u
c3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvcikgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVk
b0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikgY29uc3QKIHsKICAgICBBU1NFUlQoc2VsZWN0b3ItPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oCmluZGV4IGY0MzkzZjMyMjYzYzEyNDA3ZDU0ODllYTVhOWUxYzA5ZjBiNjRlYmMu
Ljg4NmYzNjNiOGFkOTNjMmViNjAzZmEzMWU5Mzk5YWMyMWRlMmE1NDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTQ2LDQ3ICs0NiwzMyBAQCBjbGFzcyBTZWxlY3RvckNo
ZWNrZXIgewogICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNM
b2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
IH07CiAKIHB1YmxpYzoKLSAgICBlbnVtIFZpc2l0ZWRNYXRjaFR5cGUgeyBWaXNpdGVkTWF0Y2hE
aXNhYmxlZCwgVmlzaXRlZE1hdGNoRW5hYmxlZCB9OwogICAgIGVudW0gY2xhc3MgTW9kZSA6IHVu
c2lnbmVkIGNoYXIgewogICAgICAgICBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxl
cywgQ29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMsIFF1ZXJ5aW5n
UnVsZXMKICAgICB9OwogCiAgICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50Jik7CiAKLSAgICBz
dHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgewotICAgICAgICAvLyBJbml0aWFsIHNlbGVj
dG9yIGNvbnN0cnVjdG9yCi0gICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgTW9kZSByZXNvbHZpbmdNb2Rl
KQotICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikKLSAgICAgICAgICAgICwgcmVzb2x2
aW5nTW9kZShyZXNvbHZpbmdNb2RlKQotICAgICAgICAgICAgLCBlbGVtZW50KGVsZW1lbnQpCi0g
ICAgICAgICAgICAsIHNjb3BlKG51bGxwdHIpCi0gICAgICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5
cGUocmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRlZE1hdGNoRGlz
YWJsZWQgOiBWaXNpdGVkTWF0Y2hFbmFibGVkKQotICAgICAgICAgICAgLCBwc2V1ZG9JZChOT1BT
RVVETykKKyAgICBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0IHsKKyAgICAgICAgQ2hlY2tpbmdDb250
ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlKQorICAgICAgICAgICAgOiBy
ZXNvbHZpbmdNb2RlKHJlc29sdmluZ01vZGUpCiAgICAgICAgICAgICAsIGVsZW1lbnRTdHlsZShu
dWxscHRyKQorICAgICAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVETykKICAgICAgICAgICAgICwg
c2Nyb2xsYmFyKG51bGxwdHIpCi0gICAgICAgICAgICAsIGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdt
ZW50KHNlbGVjdG9yKQogICAgICAgICAgICAgLCBzY3JvbGxiYXJQYXJ0KE5vUGFydCkKLSAgICAg
ICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MoZmFsc2UpCi0gICAgICAgICAgICAsIGhh
c1Njcm9sbGJhclBzZXVkbyhmYWxzZSkKLSAgICAgICAgICAgICwgaGFzU2VsZWN0aW9uUHNldWRv
KGZhbHNlKQorICAgICAgICAgICAgLCBzY29wZShudWxscHRyKQogICAgICAgICB7IH0KIAotICAg
ICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIE1vZGUgcmVzb2x2aW5n
TW9kZTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAgY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGU7Ci0gICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZTsK
LSAgICAgICAgUHNldWRvSWQgcHNldWRvSWQ7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9k
ZSByZXNvbHZpbmdNb2RlOwogICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOworICAg
ICAgICBQc2V1ZG9JZCBwc2V1ZG9JZDsKICAgICAgICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxi
YXI7Ci0gICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dDsKICAgICAgICAgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0OwotICAgICAgICBib29sIGlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzOwotICAgICAgICBib29sIGhhc1Njcm9sbGJhclBzZXVkbzsK
LSAgICAgICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlOwogICAgIH07CiAKLSAgICBib29sIG1hdGNoKGNvbnN0IFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0JikgY29uc3Q7CisgICAgc3RydWN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXM7CisKKyAgICBib29sIG1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGNvbnN0
IENoZWNraW5nQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgdGFnTWF0Y2hlcyhj
b25zdCBFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHN0YXRpYyBib29sIGlz
Q29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwpAQCAtOTcsMTAg
KzgzLDEwIEBAIGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGRl
dGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqKTsKIAogcHJpdmF0ZToKLSAg
ICBNYXRjaCBtYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Jiwg
UHNldWRvSWQmKSBjb25zdDsKLSAgICBib29sIGNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0JikgY29uc3Q7CisgICAgTWF0Y2ggbWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWQmKSBjb25zdDsKKyAgICBib29sIGNoZWNr
T25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmKSBjb25zdDsKIAotICAgIGJvb2wg
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYs
IGNvbnN0IENTU1NlbGVjdG9yKikgY29uc3Q7CisgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVk
b0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBDU1NTZWxlY3Rv
ciopIGNvbnN0OwogCiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAgICAgYm9vbCBtX2RvY3Vt
ZW50SXNIVE1MOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ckZhc3RQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0
aC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjA1ZDRkNGUwODJmOWRkMjk5
MzRmNDJiNjA5MWY0MzY0MTgzM2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDQtMjAw
NSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEs
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICogQ29weXJpZ2h0IChjKSAyMDExLCBD
b2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCIKLQot
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIlN0eWxlZEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZSA8Ym9vbCBjaGVja1Zh
bHVlKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopPgotaW5saW5lIGJvb2wgZmFz
dENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3Qg
RWxlbWVudComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVj
dG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQot
ewotICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
KSB7Ci0gICAgICAgIGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKSkgewotICAgICAg
ICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50
KQotICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgICAgICAg
ICBlbHNlIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCBzZWxlY3Rv
ci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOwotICAgICAgICAgICAg
ICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOwotICAgICAgICAgICAgICAgIHRv
cENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1
YlNlbGVjdG9yKQotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodG9wQ2hpbGRP
clN1YnNlbGVjdG9yKSB7Ci0gICAgICAgICAgICAvLyBDaGlsZCBvciBzdWJzZWxlY3RvciBjaGVj
ayBmYWlsZWQuCi0gICAgICAgICAgICAvLyBJZiB0aGUgbWF0Y2ggZWxlbWVudCBpcyBudWxsLCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3Igd2FzIGFsc28gdGhlIHZlcnkgdG9wbW9zdCBzZWxlY3RvciBh
bmQgaGFkIHRvIG1hdGNoCi0gICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3
ZXJlIGNoZWNraW5nLgotICAgICAgICAgICAgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRj
aEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgLy8g
VGhlcmUgbWF5IGJlIG90aGVyIG1hdGNoZXMgZG93biB0aGUgYW5jZXN0b3IgY2hhaW4uCi0gICAg
ICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHRvcG1vc3QgY2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5k
IHRoZSBlbGVtZW50IGl0IG1hdGNoZWQsIGNvbnRpbnVlIGNoZWNraW5nIGFuY2VzdG9ycy4KLSAg
ICAgICAgICAgIHNlbGVjdG9yID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yOwotICAgICAgICAgICAg
ZWxlbWVudCA9IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpOwotICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
aW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3Mo
KSAmJiBlbGVtZW50LT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkpOwot
fQotCi1pbmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgp
ICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpID09IHNlbGVjdG9yLT52
YWx1ZSgpLmltcGwoKTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVl
KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsK
LSAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVja0V4YWN0QXR0cmlidXRlKGVsZW1lbnQs
IHNlbGVjdG9yLCBzZWxlY3Rvci0+YXR0cmlidXRlKCksIHNlbGVjdG9yLT52YWx1ZSgpLmltcGwo
KSk7Ci19Ci0KLWlubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIHJldHVybiBTZWxlY3RvckNo
ZWNrZXI6OnRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3ItPnRhZ1FOYW1lKCkpOwotfQotCi19
Ci0KLVNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoOjpTZWxlY3RvckNoZWNrZXJGYXN0UGF0aChjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBt
X3NlbGVjdG9yKHNlbGVjdG9yKQotICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi17Ci19Ci0KLWJv
b2wgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6Om1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcihTZWxl
Y3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkgY29uc3QKLXsK
LSAgICBBU1NFUlQoU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6OmNhblVzZShtX3NlbGVjdG9yKSk7
Ci0KLSAgICBzd2l0Y2ggKG1fc2VsZWN0b3ItPm1fbWF0Y2gpIHsKLSAgICBjYXNlIENTU1NlbGVj
dG9yOjpUYWc6Ci0gICAgICAgIHJldHVybiBjaGVja1RhZ1ZhbHVlKG1fZWxlbWVudCwgbV9zZWxl
Y3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xhc3M6Ci0gICAgICAgIHJldHVybiBjaGVj
a0NsYXNzVmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9yKTsKLSAgICBjYXNlIENTU1NlbGVjdG9y
OjpJZDoKLSAgICAgICAgcmV0dXJuIGNoZWNrSURWYWx1ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3Ip
OwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNl
dDoKLSAgICAgICAgcmV0dXJuIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQsIG1f
c2VsZWN0b3IpOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOgotICAgICAgICBy
ZXR1cm4gY29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXModmlzaXRlZE1hdGNoVHlwZSk7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aDo6bWF0Y2hl
cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcihTZWxlY3Rv
ckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpKTsKLSAgICBjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IgPSBtX3NlbGVjdG9yOwotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSBtX2Vs
ZW1lbnQ7Ci0KLSAgICBjb25zdCBDU1NTZWxlY3RvciogdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0g
MDsKLSAgICBjb25zdCBFbGVtZW50KiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQg
PSAwOwotICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQg
fHwgc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQotICAg
ICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLQotICAgIGlmIChzZWxlY3Rv
ci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCi0gICAgICAgIGVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0KLSAgICBzZWxlY3RvciA9IHNlbGVjdG9y
LT50YWdIaXN0b3J5KCk7Ci0KLSAgICAvLyBXZSBrbm93IHRoaXMgY29tcG91bmQgc2VsZWN0b3Ig
aGFzIGRlc2NlbmRhbnQsIGNoaWxkIGFuZCBzdWJzZWxlY3RvciBjb21iaW5hdG9ycyBvbmx5IGFu
ZCBhbGwgY29tcG9uZW50cyBhcmUgc2ltcGxlLgotICAgIHdoaWxlIChzZWxlY3RvcikgewotICAg
ICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkNsYXNzOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVj
a0NsYXNzVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRv
cENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6Oklk
OgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0lEVmFsdWU+
KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJz
ZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlRhZzoKLSAgICAgICAg
ICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tUYWdWYWx1ZT4oc2VsZWN0b3Is
IGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0
Y2hFbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgotICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpFeGFjdDoKLSAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8
Y2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVS
ZWxhdGlvbihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24pCi17Ci0gICAgcmV0dXJuIHJl
bGF0aW9uID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50IHx8IHJlbGF0aW9uID09IENTU1NlbGVj
dG9yOjpDaGlsZCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVNYXRjaChjb25zdCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpTZXQpIHsKLSAgICAgICAgLy8gU3R5bGUgYXR0cmlidXRlIGlzIGdlbmVyYXRlZCBsYXppbHkg
YnV0IHRoZSBmYXN0IHBhdGggZG9lc24ndCB0cmlnZ2VyIGl0LgotICAgICAgICAvLyBEaXNhbGxv
dyB0aGVtIGhlcmUgcmF0aGVyIHRoYW4gbWFraW5nIHRoZSBmYXN0IHBhdGggbW9yZSBicmFuY2h5
LgotICAgICAgICByZXR1cm4gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0cjsKLSAg
ICB9Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKLSAg
ICAgICAgcmV0dXJuIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHIgJiYgSFRNTERv
Y3VtZW50Ojppc0Nhc2VTZW5zaXRpdmVBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKTsK
LSAgICByZXR1cm4gc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyB8fCBzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OkNsYXNzOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2th
YmxlUmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAg
IGlmICghaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oc2VsZWN0b3ItPnJlbGF0aW9uKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzRmFzdENoZWNrYWJsZU1hdGNoKHNlbGVj
dG9yKSB8fCBTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxl
Y3Rvcik7Ci19Ci0KLWJvb2wgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6OmNhblVzZShjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSaWdodG1v
c3RTZWxlY3RvcihzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHNl
bGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0
aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNlbGVjdG9y
Q2hlY2tlckZhc3RQYXRoOjpjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhTZWxlY3Rv
ckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkgY29uc3QKLXsKLSAg
ICBBU1NFUlQoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IobV9z
ZWxlY3RvcikpOwotICAgIHN3aXRjaCAobV9zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkpIHsK
LSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbms6Ci0gICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rOgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5pc0xp
bmsoKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6Ci0gICAgICAg
IHJldHVybiBtX2VsZW1lbnQtPmlzTGluaygpICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0gU2VsZWN0
b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzRm9jdXM6Ci0gICAgICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNG
b2N1c1BzZXVkb0NsYXNzKG1fZWxlbWVudCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGYxZDEwNDU1NWYxNmQwYzNiMjFkMzcxN2UzN2NmOWFmNTc4MTJiNzcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4g
KGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMg
U2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3Vy
eWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vKQotICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoX2gKLSNkZWZpbmUgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGhfaAotCi0jaW5jbHVkZSAiQ1NT
U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aCB7Ci1wdWJsaWM6Ci0gICAg
U2VsZWN0b3JDaGVja2VyRmFzdFBhdGgoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50
Kik7Ci0KLSAgICBib29sIG1hdGNoZXMoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXNSaWdodG1v
c3RTZWxlY3RvcihTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0OwotICAg
IGJvb2wgbWF0Y2hlc1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3Q7Ci0KLSAgICBz
dGF0aWMgYm9vbCBjYW5Vc2UoY29uc3QgQ1NTU2VsZWN0b3IqKTsKLQotcHJpdmF0ZToKLSAgICBi
b29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKFNlbGVjdG9yQ2hlY2tlcjo6Vmlz
aXRlZE1hdGNoVHlwZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBDU1NTZWxlY3RvciogbV9zZWxlY3Rv
cjsKLSAgICBjb25zdCBFbGVtZW50KiBtX2VsZW1lbnQ7Ci19OwotCi1pbmxpbmUgYm9vbCBTZWxl
Y3RvckNoZWNrZXJGYXN0UGF0aDo6bWF0Y2hlc1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKCkg
Y29uc3QKLXsKLSAgICBpZiAobV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhh
Y3QgfHwgbV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KQotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVja0V4YWN0QXR0cmlidXRlKG1fZWxlbWVudCwgbV9z
ZWxlY3RvciwgbV9zZWxlY3Rvci0+YXR0cmlidXRlKCksIG1fc2VsZWN0b3ItPnZhbHVlKCkuaW1w
bCgpKTsKLSAgICBBU1NFUlQoIW1fc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwYTQ0ZTkyMTRkMTY3OWYwNWJj
Yzk2YzFjODdkN2UxOTQ0MzI0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAg
IChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tz
aGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdo
dCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdG9yUXVlcnlGYXN0
UGF0aC5oIgorCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlIDxi
b29sIGNoZWNrVmFsdWUoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1NlbGVjdG9yKik+Citpbmxp
bmUgYm9vbCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVj
dG9yLCBjb25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqJiB0b3BDaGls
ZE9yU3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRj
aEVsZW1lbnQpCit7CisgICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGNoZWNrVmFsdWUoZWxlbWVudCwgc2VsZWN0b3Ip
KSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6
OkRlc2NlbmRhbnQpCisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsK
KyAgICAgICAgICAgIGVsc2UgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxk
IHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rvcik7Cisg
ICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgICAg
ICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gZWxlbWVudDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NT
ZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hp
c3RvcnkoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
ICh0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIENoaWxkIG9yIHN1YnNl
bGVjdG9yIGNoZWNrIGZhaWxlZC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBtYXRjaCBlbGVtZW50
IGlzIG51bGwsIHRvcENoaWxkT3JTdWJzZWxlY3RvciB3YXMgYWxzbyB0aGUgdmVyeSB0b3Btb3N0
IHNlbGVjdG9yIGFuZCBoYWQgdG8gbWF0Y2gKKyAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBl
bGVtZW50IHdlIHdlcmUgY2hlY2tpbmcuCisgICAgICAgICAgICBpZiAoIXRvcENoaWxkT3JTdWJz
ZWxlY3Rvck1hdGNoRWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAvLyBUaGVyZSBtYXkgYmUgb3RoZXIgbWF0Y2hlcyBkb3duIHRoZSBhbmNlc3RvciBj
aGFpbi4KKyAgICAgICAgICAgIC8vIFJld2luZCB0byB0aGUgdG9wbW9zdCBjaGlsZCBvciBzdWJz
ZWxlY3RvciBhbmQgdGhlIGVsZW1lbnQgaXQgbWF0Y2hlZCwgY29udGludWUgY2hlY2tpbmcgYW5j
ZXN0b3JzLgorICAgICAgICAgICAgc2VsZWN0b3IgPSB0b3BDaGlsZE9yU3Vic2VsZWN0b3I7Cisg
ICAgICAgICAgICBlbGVtZW50ID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50LT5w
YXJlbnRFbGVtZW50KCk7CisgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbmxpbmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBlbGVtZW50
LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWxlY3Rvci0+
dmFsdWUoKSk7Cit9CisKK2lubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgcmV0dXJuIGVsZW1l
bnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkgPT0g
c2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpOworfQorCitpbmxpbmUgYm9vbCBjaGVja0V4YWN0QXR0
cmlidXRlVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQoreworICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmNoZWNrRXhhY3RBdHRyaWJ1
dGUoZWxlbWVudCwgc2VsZWN0b3IsIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSwgc2VsZWN0b3ItPnZh
bHVlKCkuaW1wbCgpKTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tUYWdWYWx1ZShjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgcmV0dXJu
IFNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvci0+dGFnUU5hbWUo
KSk7Cit9CisKK30KKworU2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpTZWxlY3RvclF1ZXJ5RmFzdFBh
dGgoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQor
ICAgIDogbV9zZWxlY3RvcihzZWxlY3RvcikKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorewor
fQorCitib29sIFNlbGVjdG9yUXVlcnlGYXN0UGF0aDo6bWF0Y2hlc1JpZ2h0bW9zdFNlbGVjdG9y
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoU2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpjYW5Vc2UobV9z
ZWxlY3RvcikpOworCisgICAgc3dpdGNoIChtX3NlbGVjdG9yLT5tX21hdGNoKSB7CisgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6VGFnOgorICAgICAgICByZXR1cm4gY2hlY2tUYWdWYWx1ZShtX2VsZW1l
bnQsIG1fc2VsZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgorICAgICAgICBy
ZXR1cm4gY2hlY2tDbGFzc1ZhbHVlKG1fZWxlbWVudCwgbV9zZWxlY3Rvcik7CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6SWQ6CisgICAgICAgIHJldHVybiBjaGVja0lEVmFsdWUobV9lbGVtZW50LCBt
X3NlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKKyAgICBjYXNlIENTU1Nl
bGVjdG9yOjpTZXQ6CisgICAgICAgIHJldHVybiBjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUobV9l
bGVtZW50LCBtX3NlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoK
KyAgICAgICAgcmV0dXJuIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKCk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6Om1hdGNoZXMoKSBjb25z
dAoreworICAgIEFTU0VSVChtYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoKSk7CisgICAgY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gbV9zZWxlY3RvcjsKKyAgICBjb25zdCBFbGVtZW50KiBl
bGVtZW50ID0gbV9lbGVtZW50OworCisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JT
dWJzZWxlY3RvciA9IDA7CisgICAgY29uc3QgRWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9y
TWF0Y2hFbGVtZW50ID0gMDsKKyAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2Vs
ZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3RvcikKKyAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisKKyAg
ICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQor
ICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworCisgICAgc2VsZWN0
b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOworCisgICAgLy8gV2Uga25vdyB0aGlzIGNvbXBv
dW5kIHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50LCBjaGlsZCBhbmQgc3Vic2VsZWN0b3IgY29tYmlu
YXRvcnMgb25seSBhbmQgYWxsIGNvbXBvbmVudHMgYXJlIHNpbXBsZS4KKyAgICB3aGlsZSAoc2Vs
ZWN0b3IpIHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgeworICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpDbGFzczoKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xl
U2VsZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJZDoKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8
Y2hlY2tJRFZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpU
YWc6CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFs
dWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JT
dWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1Np
bmdsZVNlbGVjdG9yPGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQs
IHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNG
YXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uKQorewor
ICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCB8fCByZWxhdGlv
biA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OlN1YlNl
bGVjdG9yOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlTWF0Y2goY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6U2V0KSB7CisgICAgICAgIC8vIFN0eWxlIGF0dHJpYnV0ZSBpcyBnZW5l
cmF0ZWQgbGF6aWx5IGJ1dCB0aGUgZmFzdCBwYXRoIGRvZXNuJ3QgdHJpZ2dlciBpdC4KKyAgICAg
ICAgLy8gRGlzYWxsb3cgdGhlbSBoZXJlIHJhdGhlciB0aGFuIG1ha2luZyB0aGUgZmFzdCBwYXRo
IG1vcmUgYnJhbmNoeS4KKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSAhPSBz
dHlsZUF0dHI7CisgICAgfQorICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6RXhhY3QpCisgICAgICAgIHJldHVybiBzZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5bGVB
dHRyICYmIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKHNlbGVjdG9yLT5h
dHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpUYWcgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkIHx8IHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKK30KKworc3RhdGljIGlubGluZSBib29s
IGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKK3sKKyAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKHNlbGVjdG9yLT5yZWxh
dGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpc0Zhc3RDaGVja2Fi
bGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNz
U2VsZWN0b3Ioc2VsZWN0b3IpOworfQorCitib29sIFNlbGVjdG9yUXVlcnlGYXN0UGF0aDo6Y2Fu
VXNlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoIWlzRmFzdENoZWNr
YWJsZVJpZ2h0bW9zdFNlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGZvciAoc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOyBzZWxlY3Rvcjsgc2Vs
ZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGlmICghaXNGYXN0Q2hl
Y2thYmxlUmVsYXRpb24oc2VsZWN0b3ItPnJlbGF0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoIWlzRmFzdENoZWNrYWJsZU1hdGNoKHNlbGVjdG9yKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgU2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hl
cygpIGNvbnN0Cit7CisgICAgQVNTRVJUKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9D
bGFzc1NlbGVjdG9yKG1fc2VsZWN0b3IpKTsKKyAgICBzd2l0Y2ggKG1fc2VsZWN0b3ItPnBzZXVk
b0NsYXNzVHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rOgor
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW55TGluazoKKyAgICAgICAgcmV0dXJu
IG1fZWxlbWVudC0+aXNMaW5rKCk7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NW
aXNpdGVkOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NGb2N1czoKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0Zv
Y3VzUHNldWRvQ2xhc3MobV9lbGVtZW50KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhMzNhMjMy
ZjZkMjA4MDgzNzUxOGJiNzg5MGUzZGJhNWIzN2Y2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmgKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICog
ICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdv
bGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Vi
a2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAq
IENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGhfaAorI2RlZmlu
ZSBTZWxlY3RvclF1ZXJ5RmFzdFBhdGhfaAorCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTZWxlY3RvclF1ZXJ5RmFzdFBhdGggeworcHVibGljOgorICAgIFNlbGVjdG9yUXVlcnlGYXN0
UGF0aChjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKTsKKworICAgIGJvb2wgbWF0
Y2hlcygpIGNvbnN0OworICAgIGJvb2wgbWF0Y2hlc1JpZ2h0bW9zdFNlbGVjdG9yKCkgY29uc3Q7
CisKKyAgICBzdGF0aWMgYm9vbCBjYW5Vc2UoY29uc3QgQ1NTU2VsZWN0b3IqKTsKKworcHJpdmF0
ZToKKyAgICBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKCkgY29uc3Q7CisK
KyAgICBjb25zdCBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKKyAgICBjb25zdCBFbGVtZW50KiBt
X2VsZW1lbnQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
aW5kZXggNmVhNjcwNjgwZTY4N2QyMzMwMGY5MjRmMThhMGJiYWE4MDUwOTJlYy4uZjMyMTYyMTA5
NTQ4MWEyNDA4YzI4YmM3MjYyNDgxZDY1NjkwM2YxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCkBAIC01NzQsOCArNTc0LDggQEAgaW5saW5lIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rv
cihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2kKIAogICAg
IFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIocmVnaW9uRWxlbWVudC0+ZG9jdW1lbnQo
KSk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBz
ID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7Ci0gICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQocywgcmVnaW9u
RWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKLSAgICAgICAg
aWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckNoZWNraW5nQ29udGV4dCkpCisgICAg
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7CisgICAgICAgIGlmIChz
ZWxlY3RvckNoZWNrZXIubWF0Y2gocywgcmVnaW9uRWxlbWVudCwgc2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAppbmRleCA5Yjlh
YWU0NDhjZWI5NWQ1ODgyMzA0ZmJkZjAxZDc2YjI4YTM3MTIwLi4zOTU5Y2Y0NGZmMzc5NDlkMmQy
MjZiY2VhYWQ5OGFhZTIzYWE5OWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQv
U2VsZWN0b3JDb21waWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwCkBAIC0xNTcsNyArMTU3LDcgQEAgc3RydWN0IFNlbGVjdG9yRnJhZ21lbnQg
ewogICAgIHVuc2lnbmVkIHRhZ05hbWVOb3RNYXRjaGVkQmFja3RyYWNraW5nU3RhcnRXaWR0aEZy
b21JbmRpcmVjdEFkamFjZW50OwogICAgIHVuc2lnbmVkIHdpZHRoRnJvbUluZGlyZWN0QWRqYWNl
bnQ7CiAKLSAgICBGdW5jdGlvblR5cGUgYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhD
b250ZXh0KGJvb2wgKCptYXRjaGVyKShjb25zdCBDaGVja2luZ0NvbnRleHQmKSk7CisgICAgRnVu
Y3Rpb25UeXBlIGFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChib29sICgq
bWF0Y2hlcikoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmKSk7CiAgICAg
CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogdGFnTmFtZTsKICAgICBjb25zdCBBdG9taWNTdHJp
bmcqIGlkOwpAQCAtMzY0LDcgKzM2NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmcmFnbWVudE1h
dGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNvCiAgICAg
cmV0dXJuIGZyYWdtZW50LnJlbGF0aW9uVG9SaWdodEZyYWdtZW50ID09IEZyYWdtZW50UmVsYXRp
b246OlJpZ2h0bW9zdCAmJiBmcmFnbWVudC5wb3NpdGlvbkluUm9vdEZyYWdtZW50cyA9PSBGcmFn
bWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzOjpSaWdodG1vc3Q7CiB9CiAKLUZ1bmN0aW9uVHlw
ZSBTZWxlY3RvckZyYWdtZW50OjphcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRl
eHQoYm9vbCAoKm1hdGNoZXIpKGNvbnN0IENoZWNraW5nQ29udGV4dCYpKQorRnVuY3Rpb25UeXBl
IFNlbGVjdG9yRnJhZ21lbnQ6OmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4
dChib29sICgqbWF0Y2hlcikoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQm
KSkKIHsKICAgICB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXNXaXRoQ29udGV4dC5hcHBlbmQoSlND
OjpGdW5jdGlvblB0cihtYXRjaGVyKSk7CiAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2VsZWN0
b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dDsKQEAgLTM3NywzMyArMzc3LDMzIEBAIHN0YXRp
YyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFNjcm9sbGJhclBzZXVkb0NsYXNzVHlwZShjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0CiAgICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xh
c3Nlcy5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihpc1dpbmRvd0luYWN0aXZlKSk7CiAgICAgICAg
IHJldHVybiBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Rpc2FibGVkOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQu
YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNE
aXNhYmxlZFBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJh
Z21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1h
dGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0
Pik7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NFbmFibGVkOgotICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNj
cm9sbGJhck1hdGNoZXNFbmFibGVkUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAg
ICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRl
eHQoc2Nyb2xsYmFyTWF0Y2hlc0VuYWJsZWRQc2V1ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9yaXpv
bnRhbDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xh
c3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzPENoZWNr
aW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNIb3Jpem9udGFsUHNldWRvQ2xh
c3M8U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc1ZlcnRpY2FsOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5k
VW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNWZXJ0aWNh
bFBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQu
YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNW
ZXJ0aWNhbFBzZXVkb0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Pik7CiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEZWNyZW1lbnQ6Ci0gICAgICAgIHJldHVy
biBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xs
YmFyTWF0Y2hlc0RlY3JlbWVudFBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAg
ICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0
KHNjcm9sbGJhck1hdGNoZXNEZWNyZW1lbnRQc2V1ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5jcmVt
ZW50OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNJbmNyZW1lbnRQc2V1ZG9DbGFzczxDaGVja2lu
Z0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNl
dWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzSW5jcmVtZW50UHNldWRvQ2xhc3M8
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc1N0YXJ0OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNTdGFydFBzZXVkb0Ns
YXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNTdGFydFBzZXVk
b0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Pik7CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NFbmQ6Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRV
bm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0VuZFBzZXVk
b0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5k
VW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNFbmRQc2V1
ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzRG91YmxlQnV0dG9uOgotICAgICAgICByZXR1cm4gZnJhZ21l
bnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNo
ZXNEb3VibGVCdXR0b25Qc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0
dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3Jv
bGxiYXJNYXRjaGVzRG91YmxlQnV0dG9uUHNldWRvQ2xhc3M8U2VsZWN0b3JDaGVja2VyOjpDaGVj
a2luZ0NvbnRleHQ+KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1NpbmdsZUJ1
dHRvbjoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xh
c3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzU2luZ2xlQnV0dG9uUHNldWRvQ2xhc3M8Q2hl
Y2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXpl
ZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc1NpbmdsZUJ1dHRvblBzZXVk
b0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Pik7CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NOb0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFw
cGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzTm9C
dXR0b25Qc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdt
ZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRj
aGVzTm9CdXR0b25Qc2V1ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4p
OwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQ29ybmVyUHJlc2VudDoKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4
dChzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4
dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3M8U2Vs
ZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ+KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0FjdGl2ZToKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1p
emVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzQWN0aXZlUHNldWRvQ2xh
c3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9w
dGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0FjdGl2ZVBzZXVk
b0NsYXNzPFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0Pik7CiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3ZlcjoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVu
ZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzSG92ZXJQ
c2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFw
cGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzSG92
ZXJQc2V1ZG9DbGFzczxTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dD4pOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7
CiAgICAgfQpAQCAtMTYwMSw3ICsxNjAxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lzdGUKICAg
ICBBU1NFUlQobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVj
dG9yKTsKIAogICAgIExvY2FsUmVnaXN0ZXIgY2hpbGRTdHlsZShtX3JlZ2lzdGVyQWxsb2NhdG9y
KTsKLSAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0Nv
bnRleHQsIE9CSkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIGVsZW1lbnRTdHlsZSkpLCBj
aGlsZFN0eWxlKTsKKyAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhj
aGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCwgZWxlbWVudFN0eWxlKSksIGNoaWxkU3R5bGUpOwogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBsb29rIGludG8gZG9pbmcgc29tZXRoaW5nIHNtYXJ0IGluIE1hY3JvQXNzZW1ibGVy
IGluc3RlYWQuCiAgICAgQXNzZW1ibGVyOjpBZGRyZXNzIGZsYWdBZGRyZXNzKGNoaWxkU3R5bGUs
IFJlbmRlclN0eWxlOjpub25pbmhlcml0ZWRGbGFnc01lbW9yeU9mZnNldCgpICsgUmVuZGVyU3R5
bGU6Ok5vbkluaGVyaXRlZEZsYWdzOjpmbGFnc01lbW9yeU9mZnNldCgpKTsKQEAgLTE2NTcsNyAr
MTY1Nyw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpsb2FkQ2hlY2tpbmdDb250ZXh0
KEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvCiB7CiAgICAgLy8gRGVwZW5kIG9uIHRo
ZSBzcGVjaWZpZWQgcmVzb2x2aW5nIG1vZGUgYW5kIG91ciBjdXJyZW50IG1vZGUsIGJyYW5jaC4K
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihTZWxlY3RvckNoZWNrZXI6Ok1vZGUpID09IDEsICJX
ZSBnZW5lcmF0ZSBhIGJ5dGUgbG9hZC90ZXN0IGZvciB0aGUgU2VsZWN0b3JDaGVja2VyOjpNb2Rl
LiIpOwotICAgIHJldHVybiBtX2Fzc2VtYmxlci5icmFuY2g4KGNvbmRpdGlvbiwgQXNzZW1ibGVy
OjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5nQ29udGV4
dCwgcmVzb2x2aW5nTW9kZSkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxz
dGQ6OnVuZGVybHlpbmdfdHlwZTxTZWxlY3RvckNoZWNrZXI6Ok1vZGU+Ojp0eXBlPihtb2RlKSkp
OworICAgIHJldHVybiBtX2Fzc2VtYmxlci5icmFuY2g4KGNvbmRpdGlvbiwgQXNzZW1ibGVyOjpB
ZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0LCByZXNvbHZpbmdNb2RlKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPFNlbGVjdG9yQ2hlY2tlcjo6TW9kZT46
OnR5cGU+KG1vZGUpKSk7CiAKIH0KIApAQCAtMjQzNCw3ICsyNDM0LDcgQEAgc3RhdGljIGJvb2wg
ZWxlbWVudElzQWN0aXZlKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGVsZW1lbnQtPmFj
dGl2ZSgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVt
ZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmUpOwogfQogCi1zdGF0aWMgYm9vbCBl
bGVtZW50SXNBY3RpdmVGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCitzdGF0aWMgYm9vbCBlbGVtZW50SXNB
Y3RpdmVGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKIHsKICAgICBpZiAoY2hl
Y2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVz
b2x2aW5nU3R5bGUpCiAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2
ZSgpOwpAQCAtMjUwNSw3ICsyNTA1LDcgQEAgc3RhdGljIHZvaWQgc2V0RWxlbWVudFN0eWxlSXNB
ZmZlY3RlZEJ5RW1wdHkoRWxlbWVudCogZWxlbWVudCkKICAgICBlbGVtZW50LT5zZXRTdHlsZUFm
ZmVjdGVkQnlFbXB0eSgpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRFbGVtZW50U3R5bGVGcm9tQ29u
dGV4dElzQWZmZWN0ZWRCeUVtcHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeShDaGVj
a2luZ0NvbnRleHQqIGNvbnRleHQsIGJvb2wgaXNFbXB0eSkKK3N0YXRpYyB2b2lkIHNldEVsZW1l
bnRTdHlsZUZyb21Db250ZXh0SXNBZmZlY3RlZEJ5RW1wdHlBbmRVcGRhdGVSZW5kZXJTdHlsZUlm
TmVjZXNzYXJ5KFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjb250ZXh0LCBib29s
IGlzRW1wdHkpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQtPmVsZW1lbnRTdHlsZSk7CiAgICAgY29u
dGV4dC0+ZWxlbWVudFN0eWxlLT5zZXRFbXB0eVN0YXRlKGlzRW1wdHkpOwpAQCAtMjYxMyw3ICsy
NjEzLDcgQEAgc3RhdGljIGJvb2wgZWxlbWVudElzSG92ZXJlZChFbGVtZW50KiBlbGVtZW50KQog
ICAgIHJldHVybiBlbGVtZW50LT5ob3ZlcmVkKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVy
KTsKIH0KIAotc3RhdGljIGJvb2wgZWxlbWVudElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbihF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkK
K3N0YXRpYyBib29sIGVsZW1lbnRJc0hvdmVyZWRGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5n
Q29udGV4dCkKIHsKICAgICBpZiAoY2hlY2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNl
bGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgIGVsZW1lbnQtPnNl
dENoaWxkcmVuQWZmZWN0ZWRCeUhvdmVyKCk7CkBAIC0yODA0LDcgKzI4MDQsNyBAQCB2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNPbmx5Q2hpbGQoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbAogfQogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQot
c3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxh
Y2Vob2xkZXJTaG93bihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRleHQqIGNo
ZWNraW5nQ29udGV4dCkKK3N0YXRpYyBib29sIG1ha2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vz
c2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2Vs
ZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKIHsKICAgICBp
ZiAoaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkpIHsKICAgICAgICAgaWYg
KGNoZWNraW5nQ29udGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6
OlJlc29sdmluZ1N0eWxlKQpAQCAtMjgxNCw3ICsyODE0LDcgQEAgc3RhdGljIGJvb2wgbWFrZUNv
bnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVt
ZW50KgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgbWFrZUVsZW1lbnRTdHls
ZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKK3N0YXRpYyBib29s
IG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hv
d24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQqIGNoZWNraW5nQ29udGV4dCkKIHsKICAgICBpZiAoaXNIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudCgqZWxlbWVudCkpIHsKICAgICAgICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVzb2x2aW5n
TW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CkBAIC0zMTA4
LDEwICszMTA4LDEwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJlcXVl
c3RlZFBzZXVkb0VsZW1lbnRFcXVhbHNUb1NlbGVjdG9yUHNldWRvCiAgICAgLy8gT3RoZXJ3aXNl
LCBpZiB0aGUgcmVxdWVzdGVkIHBzZXVkb0lkIGlzIG5vdCBOT1BTRVVETywgdGhlIHJlcXVlc3Rl
ZCBwc2V1ZG9JZCBuZWVkIHRvIGVxdWFsIHRvIHRoZSBwc2V1ZG8gZWxlbWVudCBvZiB0aGUgcmln
aHRtb3N0IGZyYWdtZW50LgogICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVt
ZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKICAgICAgICAgaWYgKCFmcmFnbWVu
dC5wc2V1ZG9FbGVtZW50U2VsZWN0b3IpCi0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRy
ZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5nQ29udGV4dCwgcHNl
dWRvSWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTk9QU0VVRE8pKSk7CisgICAgICAgICAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpOb3RF
cXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9G
KFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihOT1BTRVVETykpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBB
c3NlbWJsZXI6Okp1bXAgc2tpcCA9IG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpFcXVh
bCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENo
ZWNraW5nQ29udGV4dCwgcHNldWRvSWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTk9QU0VV
RE8pKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNo
OChBc3NlbWJsZXI6Ok5vdEVxdWFsLCBBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0
LCBPQkpFQ1RfT0ZGU0VUT0YoQ2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihDU1NTZWxlY3Rvcjo6cHNldWRvSWQoZnJhZ21lbnQucHNldWRvRWxlbWVu
dFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSkpKTsKKyAgICAgICAgICAgIEFzc2VtYmxl
cjo6SnVtcCBza2lwID0gbV9hc3NlbWJsZXIuYnJhbmNoOChBc3NlbWJsZXI6OkVxdWFsLCBBc3Nl
bWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQsIHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKE5PUFNFVURPKSk7CisgICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1i
bGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNr
aW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250
ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihDU1NTZWxlY3Rvcjo6cHNl
dWRvSWQoZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgp
KSkpKTsKICAgICAgICAgICAgIHNraXAubGluaygmbV9hc3NlbWJsZXIpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzEzMCw3ICszMTMwLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbWVudElzU2NvcGVSb290KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWwKIAogICAg
IExvY2FsUmVnaXN0ZXIgc2NvcGUobV9yZWdpc3RlckFsbG9jYXRvcik7CiAgICAgbG9hZENoZWNr
aW5nQ29udGV4dChzY29wZSk7Ci0gICAgbV9hc3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFk
ZHJlc3Moc2NvcGUsIE9CSkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHNjb3BlKSksIHNj
b3BlKTsKKyAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhzY29wZSwg
T0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBzY29wZSkp
LCBzY29wZSk7CiAKICAgICBBc3NlbWJsZXI6Okp1bXAgc2NvcGVJc05vdE51bGwgPSBtX2Fzc2Vt
Ymxlci5icmFuY2hUZXN0UHRyKEFzc2VtYmxlcjo6Tm9uWmVybywgc2NvcGUpOwogCkBAIC0zMTYy
LDcgKzMxNjIsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJrUHNl
dWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SgogICAgIEFzc2VtYmxlcjo6SnVt
cExpc3Qgc3VjY2Vzc0Nhc2VzOwogCiAgICAgLy8gV2hlbiB0aGUgcmVxdWVzdGVkIHBzZXVkb0lk
IGlzbid0IE5PUFNFVURPLCB0aGVyZSdzIG5vIG5lZWQgdG8gbWFyayB0aGUgcHNldWRvIGVsZW1l
bnQgc3R5bGUuCi0gICAgc3VjY2Vzc0Nhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4KEFz
c2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9C
SkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKE5PUFNFVURPKSkpOworICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQobV9hc3NlbWJs
ZXIuYnJhbmNoOChBc3NlbWJsZXI6Ok5vdEVxdWFsLCBBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tp
bmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQsIHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5PUFNFVURPKSkpOwogCiAg
ICAgLy8gV2hlbiByZXNvbHZpbmcgbW9kZSBpcyBDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1
YWxQc2V1ZG9FbGVtZW50cywgdGhlcmUncyBubyBuZWVkIHRvIG1hcmsgdGhlIHBzZXVkbyBlbGVt
ZW50IHN0eWxlLgogICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoYnJhbmNoT25SZXNvbHZpbmdNb2Rl
V2l0aENoZWNraW5nQ29udGV4dChBc3NlbWJsZXI6OkVxdWFsLCBTZWxlY3RvckNoZWNrZXI6Ok1v
ZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzLCBjaGVja2lu
Z0NvbnRleHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNv
bXBpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCmluZGV4
IGMwY2E1MzJkNTAzMzMxMWZmZjY3ZDE2MTA0MWNmNDU0ZTE0YmYyMTAuLmIxMDdjNDM0MjdmZDQ5
N2YyMDk5MTRiNjJiZGMyZDg3YmQ0MzhmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
c2ppdC9TZWxlY3RvckNvbXBpbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuaApAQCAtNjksMjQgKzY5LDYgQEAgY2xhc3MgU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1cyB7CiAKIG5hbWVzcGFjZSBTZWxlY3RvckNvbXBpbGVyIHsKIAotc3RydWN0IENoZWNr
aW5nQ29udGV4dCB7Ci0gICAgQ2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBy
ZXNvbHZpbmdNb2RlKQotICAgICAgICA6IHJlc29sdmluZ01vZGUocmVzb2x2aW5nTW9kZSkKLSAg
ICAgICAgLCBlbGVtZW50U3R5bGUobnVsbHB0cikKLSAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVE
TykKLSAgICAgICAgLCBzY3JvbGxiYXIobnVsbHB0cikKLSAgICAgICAgLCBzY3JvbGxiYXJQYXJ0
KE5vUGFydCkKLSAgICAgICAgLCBzY29wZShudWxscHRyKQotICAgIHsgfQotCi0gICAgU2VsZWN0
b3JDaGVja2VyOjpNb2RlIHJlc29sdmluZ01vZGU7Ci0gICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRT
dHlsZTsKLSAgICBQc2V1ZG9JZCBwc2V1ZG9JZDsKLSAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9s
bGJhcjsKLSAgICBTY3JvbGxiYXJQYXJ0IHNjcm9sbGJhclBhcnQ7Ci0gICAgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGU7Ci19OwotCiBlbnVtIGNsYXNzIFNlbGVjdG9yQ29udGV4dCB7CiAgICAg
Ly8gUnVsZSBDb2xsZWN0b3IgbmVlZHMgYSByZXNvbHZpbmdNb2RlIGFuZCBjYW4gbW9kaWZ5IHRo
ZSB0cmVlIGFzIGl0IG1hdGNoZXMuCiAgICAgUnVsZUNvbGxlY3RvciwKQEAgLTk2LDcgKzc4LDcg
QEAgZW51bSBjbGFzcyBTZWxlY3RvckNvbnRleHQgewogfTsKIAogdHlwZWRlZiB1bnNpZ25lZCAo
KlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikoRWxlbWVudCopOwotdHlwZWRlZiB1bnNpZ25lZCAoKlNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpKEVsZW1lbnQqLCBjb25zdCBDaGVja2lu
Z0NvbnRleHQqKTsKK3R5cGVkZWYgdW5zaWduZWQgKCpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tp
bmdDb250ZXh0KShFbGVtZW50KiwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQqKTsKIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsZVNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiwgSlNDOjpWTSosIFNlbGVjdG9yQ29udGV4dCwgSlNDOjpNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYmIG91dHB1dENvZGVSZWYpOwogCiBpbmxpbmUgU2ltcGxlU2VsZWN0b3JDaGVja2Vy
IHNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBT
ZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NlbGVjdG9yUXVlcnkuY3BwCmluZGV4IDVjM2Y5YmNhMTcxYWRjOTU5NWI4ZDE5ZWRjMGQ5NTlk
ODY4YWNlNjQuLjZkMzg3OTk3MTVkZTdjNDBlY2U1MzBkMTk2ZTA2MGNhZDM4OTcyMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyRmFz
dFBhdGguaCIKKyNpbmNsdWRlICJTZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCIKICNpbmNsdWRlICJT
dGF0aWNOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKIApAQCAtNzYsNyAr
NzYsNyBAQCBzdGF0aWMgSWRNYXRjaGluZ1R5cGUgZmluZElkTWF0Y2hpbmdUeXBlKGNvbnN0IENT
U1NlbGVjdG9yJiBmaXJzdFNlbGVjdG9yKQogCiAgICAgbV9zZWxlY3RvcnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShzZWxlY3RvckNvdW50KTsKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NT
ZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKQotICAgICAgICBtX3NlbGVjdG9ycy51bmNoZWNr
ZWRBcHBlbmQoU2VsZWN0b3JEYXRhKHNlbGVjdG9yLCBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aDo6
Y2FuVXNlKHNlbGVjdG9yKSkpOworICAgICAgICBtX3NlbGVjdG9ycy51bmNoZWNrZWRBcHBlbmQo
U2VsZWN0b3JEYXRhKHNlbGVjdG9yLCBTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6OmNhblVzZShzZWxl
Y3RvcikpKTsKIAogICAgIGlmIChzZWxlY3RvckNvdW50ID09IDEpIHsKICAgICAgICAgY29uc3Qg
Q1NTU2VsZWN0b3ImIHNlbGVjdG9yID0gKm1fc2VsZWN0b3JzLmZpcnN0KCkuc2VsZWN0b3I7CkBA
IC0xMTUsMTYgKzExNSwxNiBAQCBzdGF0aWMgSWRNYXRjaGluZ1R5cGUgZmluZElkTWF0Y2hpbmdU
eXBlKGNvbnN0IENTU1NlbGVjdG9yJiBmaXJzdFNlbGVjdG9yKQogaW5saW5lIGJvb2wgU2VsZWN0
b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKGNvbnN0IFNlbGVjdG9yRGF0YSYgc2VsZWN0b3JE
YXRhLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSkgY29u
c3QKIHsKICAgICBpZiAoc2VsZWN0b3JEYXRhLmlzRmFzdENoZWNrYWJsZSAmJiAhZWxlbWVudC5p
c1NWR0VsZW1lbnQoKSkgewotICAgICAgICBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aCBzZWxlY3Rv
ckNoZWNrZXJGYXN0UGF0aChzZWxlY3RvckRhdGEuc2VsZWN0b3IsICZlbGVtZW50KTsKLSAgICAg
ICAgaWYgKCFzZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5tYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3Io
U2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCkpCisgICAgICAgIFNlbGVjdG9y
UXVlcnlGYXN0UGF0aCBzZWxlY3RvclF1ZXJ5RmFzdFBhdGgoc2VsZWN0b3JEYXRhLnNlbGVjdG9y
LCAmZWxlbWVudCk7CisgICAgICAgIGlmICghc2VsZWN0b3JRdWVyeUZhc3RQYXRoLm1hdGNoZXNS
aWdodG1vc3RTZWxlY3RvcigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXR1cm4gc2VsZWN0b3JDaGVja2VyRmFzdFBhdGgubWF0Y2hlcygpOworICAgICAgICByZXR1cm4g
c2VsZWN0b3JRdWVyeUZhc3RQYXRoLm1hdGNoZXMoKTsKICAgICB9CiAKICAgICBTZWxlY3RvckNo
ZWNrZXIgc2VsZWN0b3JDaGVja2VyKGVsZW1lbnQuZG9jdW1lbnQoKSk7Ci0gICAgU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChz
ZWxlY3RvckRhdGEuc2VsZWN0b3IsICZlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1
ZXJ5aW5nUnVsZXMpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IHNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7
CiAgICAgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQuc2NvcGUgPSByb290Tm9kZS5pc0RvY3VtZW50
Tm9kZSgpID8gbnVsbHB0ciA6ICZyb290Tm9kZTsKLSAgICByZXR1cm4gc2VsZWN0b3JDaGVja2Vy
Lm1hdGNoKHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KTsKKyAgICByZXR1cm4gc2VsZWN0b3JDaGVj
a2VyLm1hdGNoKHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJmVsZW1lbnQsIHNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0KTsKIH0KIAogYm9vbCBTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKEVsZW1lbnQm
IHRhcmdldEVsZW1lbnQpIGNvbnN0CkBAIC0zODAsNyArMzgwLDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbXBsZVNlbGVjdG9yQ2hlY2tl
cihjb25zdAogdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4KIEFMV0FZU19J
TkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNoZWNr
ZXJXaXRoQ2hlY2tpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25z
dCBDb250YWluZXJOb2RlJiBzZWFyY2hSb290Tm9kZSwgU2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNrZXIsIHR5cGVuYW1lIFNl
bGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0LCBjb25zdCBTZWxlY3RvckRhdGEm
IHNlbGVjdG9yRGF0YSkgY29uc3QKIHsKLSAgICBTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0Nv
bnRleHQgY2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxl
cyk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQgY2hlY2tpbmdDb250ZXh0
KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7CiAgICAgY2hlY2tpbmdDb250
ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1bWVudE5vZGUoKSA/IG51bGxwdHIgOiAmcm9vdE5v
ZGU7CiAKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3Rf
Y2FzdDxDb250YWluZXJOb2RlJj4oc2VhcmNoUm9vdE5vZGUpKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237416</attachid>
            <date>2014-08-30 12:13:33 -0700</date>
            <delta_ts>2014-09-09 13:46:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135255-20140831041422.patch</filename>
            <type>text/plain</type>
            <size>82593</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzAxNWJhNDQ5NmZkNGMx
ZGYyOGIzMTJjMTBlOTMwN2JhYmI5ZWVmNC4uZGQ4MDBiY2ZmM2M1ZDRhMjI3MjFkYWVlOWM0NDRk
MmM4OGZmM2RkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2NSBAQAogMjAxNC0wOC0zMCAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAorICAgICAgICBNZXJnZSBDaGVj
a2luZ0NvbnRleHRzIGZyb20gU2VsZWN0b3JDb21waWxlciBhbmQgU2VsZWN0b3JDaGVja2VyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiB0aGlzIHBh
dGNoLCB3ZSBtZXJnZSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGFu
ZCBTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQuCisgICAgICAgIFdlIGV4cG9zZSBv
bmx5IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LiBUaGF0IGlzIHRoZSBzYW1lIHRv
IHRoZSBvbGQgU2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdDb250ZXh0LgorCisgICAgICAgIElu
IFNlbGVjdG9yQ2hlY2tlci5jcHAsIHdlIGRlZmluZSBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMgYW5kIHVzZSBpdCBpbnRlcm5hbGx5LgorICAgICAgICBBbmQgd2Ug
bW92ZSBWaXNpdGVkTWF0Y2hUeXBlIGZyb20gU2VsZWN0b3JDaGVja2VyLmggdG8gU2VsZWN0b3JD
aGVja2VyLmNwcC4KKworICAgICAgICBWaXNpdGVkTWF0Y2hUeXBlIGlzIGFsc28gZXhwbGljaXRs
eSB1c2VkIGJ5IFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLiBIb3dldmVyLCBTZWxlY3RvckNoZWNr
ZXJGYXN0UGF0aCBpcyBub3cKKyAgICAgICAgdXNlZCBvbmx5IGZyb20gU2VsZWN0b3JRdWVyeSAo
U3R5bGUgcmVzb2x1dGlvbiBhbGdvcml0aG0gbm8gbG9uZ2VyIHVzZSBpdDogcjE3MTA1OSkuIFNv
IHZpc2l0ZWRNYXRjaFR5cGUgaXMKKyAgICAgICAgYWx3YXlzIFZpc2l0ZWRNYXRjaERpc2FibGVk
LiBJbiB0aGlzIHBhdGNoLCB3ZSByZW5hbWUgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGggdG8gU2Vs
ZWN0b3JRdWVyeUZhc3RQYXRoLCBhbmQKKyAgICAgICAgZHJvcCBWaXNpdGVkTWF0Y2hUeXBlIHBh
cmFtZXRlci4KKworICAgICAgICBBbmQgbm93IHNpbmNlIENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgaXMgdGhlIGRlcml2ZWQgY2xhc3Mgb2YgQ2hlY2tpbmdDb250ZXh0LCB3ZSBjYW4gdXNlCisg
ICAgICAgIHRoZSBzYW1lIHRlc3QgZnVuY3Rpb25zOyB0ZW1wbGF0ZSBwYXJhbWV0ZXIgaXMgbm90
IG5lY2Vzc2FyeS4gSXQgcmVkdWNlcyBjb2RlIHNpemUuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogY3NzL0NTU0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xs
ZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVN
YXRjaGVzKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1czo6Q2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
Om1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJD
b3JlOjpjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MpOgorICAgICAgICAqIGNzcy9TZWxl
Y3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tp
bmdDb250ZXh0OjpDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQp
OiBEZWxldGVkLgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6
CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNIb3ZlclBzZXVkb0NsYXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1ZG9DbGFzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNWZXJ0aWNhbFBzZXVkb0NsYXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNEZWNyZW1lbnRQc2V1ZG9DbGFzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzSW5jcmVtZW50UHNldWRvQ2xhc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc1N0YXJ0UHNldWRvQ2xhc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc0VuZFBzZXVkb0NsYXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNEb3VibGVCdXR0b25Qc2V1ZG9DbGFzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzU2luZ2xlQnV0dG9uUHNldWRvQ2xhc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNldWRvQ2xhc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc0Nvcm5lclByZXNlbnRQc2V1ZG9DbGFz
cyk6CisgICAgICAgICogY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE5hbWVzOjpmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrQ2xhc3NWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTmFtZXM6OmNoZWNrSURWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6
OmNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6
OmNoZWNrVGFnVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRo
OjpTZWxlY3RvclF1ZXJ5RmFzdFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVy
eUZhc3RQYXRoOjptYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmFz
dENoZWNrYWJsZVJlbGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmFzdENoZWNrYWJsZU1h
dGNoKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnlGYXN0UGF0aDo6Y2FuVXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnlGYXN0UGF0aDo6Y29tbW9uUHNldWRvQ2xhc3NT
ZWxlY3Rvck1hdGNoZXMpOgorICAgICAgICAqIGNzcy9TZWxlY3RvclF1ZXJ5RmFzdFBhdGguaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5o
LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpjaGVj
a1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckZyYWdtZW50Ojph
cHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6YWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRk
RmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YnJhbmNoT25SZXNvbHZpbmdNb2Rl
V2l0aENoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVy
OjplbGVtZW50SXNBY3RpdmVGb3JTdHlsZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6c2V0RWxlbWVudFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVkQnlF
bXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6ZWxlbWVudElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVl
SWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6Om1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRl
c3RJc1BsYWNlaG9sZGVyU2hvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJlcXVlc3RlZFBzZXVkb0VsZW1lbnRF
cXVhbHNUb1NlbGVjdG9yUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzU2NvcGVS
b290KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KToKKyAgICAg
ICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDb21waWxlcjo6Q2hlY2tpbmdDb250ZXh0OjpDaGVja2luZ0NvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yRGF0YUxpc3Q6OlNlbGVjdG9yRGF0YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
RGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRl
eHQpOgorCisyMDE0LTA4LTMwICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29t
PgorCisgICAgICAgIE1lcmdlIENoZWNraW5nQ29udGV4dHMgZnJvbSBTZWxlY3RvckNvbXBpbGVy
IGFuZCBTZWxlY3RvckNoZWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNTI1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlIG1lcmdlIFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgYW5kIFNlbGVjdG9yQ29tcGlsZXI6OkNoZWNraW5nQ29udGV4
dC4KKyAgICAgICAgV2UgZXhwb3NlIG9ubHkgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQuIFRoYXQgaXMgdGhlIHNhbWUgdG8gdGhlIG9sZCBTZWxlY3RvckNvbXBpbGVyOjpDaGVja2lu
Z0NvbnRleHQuCisgICAgICAgIEluIFNlbGVjdG9yQ2hlY2tlci5jcHAsIHdlIGRlZmluZSBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGFuZCB1c2UgaXQgaW50ZXJuYWxs
eS4KKyAgICAgICAgQW5kIHdlIG1vdmUgVmlzaXRlZE1hdGNoVHlwZSBmcm9tIFNlbGVjdG9yQ2hl
Y2tlci5oIHRvIFNlbGVjdG9yQ2hlY2tlci5jcHAuCisgICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUg
aXMgYWxzbyBleHBsaWNpdGx5IHVzZWQgYnkgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguIEhvd2V2
ZXIsIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoIGlzIG5vdworICAgICAgICB1c2VkIG9ubHkgZnJv
bSBTZWxlY3RvclF1ZXJ5IChTdHlsZSByZXNvbHV0aW9uIGFsZ29yaXRobSBubyBsb25nZXIgdXNl
IGl0OiByMTcxMDU5KS4gU28gdmlzaXRlZE1hdGNoVHlwZSBpcworICAgICAgICBhbHdheXMgVmlz
aXRlZE1hdGNoRGlzYWJsZWQuIEluIHRoaXMgcGF0Y2gsIHdlIHJlbmFtZSBTZWxlY3RvckNoZWNr
ZXJGYXN0UGF0aCB0byBTZWxlY3RvclF1ZXJ5RmFzdFBhdGgsIGFuZAorICAgICAgICBkcm9wIFZp
c2l0ZWRNYXRjaFR5cGUgcGFyYW1ldGVyLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNz
cy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyk6
CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OmNoZWNraW5nQ29udGV4dEZvclBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fu
TWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2Vy
OjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVj
a2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dDo6Q2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBjc3MvU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTmFtZXM6OmZhc3RDaGVja1NpbmdsZVNlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hlY2tDbGFzc1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y2hlY2tJRFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6
Y2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lczo6
Y2hlY2tUYWdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6
OlNlbGVjdG9yUXVlcnlGYXN0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclF1ZXJ5
RmFzdFBhdGg6Om1hdGNoZXNSaWdodG1vc3RTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvclF1ZXJ5RmFzdFBhdGg6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6aXNGYXN0
Q2hlY2thYmxlUmVsYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNGYXN0Q2hlY2thYmxlTWF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpjYW5Vc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpjb21tb25Qc2V1ZG9DbGFzc1Nl
bGVjdG9yTWF0Y2hlcyk6CisgICAgICAgICogY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgu
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNr
UmVnaW9uU2VsZWN0b3IpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yRnJhZ21lbnQ6OmFw
cGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjphZGRTY3JvbGxiYXJQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjphZGRG
bGFnc1RvRWxlbWVudFN0eWxlRnJvbUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpicmFuY2hPblJlc29sdmluZ01vZGVX
aXRoQ2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6
OmVsZW1lbnRJc0FjdGl2ZUZvclN0eWxlUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNvbXBpbGVyOjpzZXRFbGVtZW50U3R5bGVGcm9tQ29udGV4dElzQWZmZWN0ZWRCeUVt
cHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNvbXBpbGVyOjplbGVtZW50SXNIb3ZlcmVkRm9yU3R5bGVSZXNvbHV0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6Om1ha2VDb250ZXh0U3R5bGVVbmlxdWVJ
Zk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24pOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6bWFrZUVsZW1lbnRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVz
dElzUGxhY2Vob2xkZXJTaG93bik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVy
OjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUmVxdWVzdGVkUHNldWRvRWxlbWVudEVx
dWFsc1RvU2VsZWN0b3JQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNTY29wZVJv
b3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZU1hcmtQc2V1ZG9TdHlsZUZvclBzZXVkb0VsZW1lbnQpOgorICAgICAg
ICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQ6OkNoZWNraW5nQ29udGV4dCk6IERlbGV0ZWQuCisg
ICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JEYXRhTGlzdDo6U2VsZWN0b3JEYXRhTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckRhdGFMaXN0OjpzZWxlY3Rvck1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JE
YXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4
dCk6CisKKzIwMTQtMDgtMzAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CisKICAgICAgICAgQ1NTOiBSZWZhY3RvciA6dmlzaXRlZCBoYW5kbGluZyBpbiBTZWxlY3RvckNo
ZWNrZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTYzOQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGQyNWY4NmY3ZjdhOTdlNWViYjBkY2Y3NGRj
ZTRiNGQ4ZTRiZmE4NWQuLjg4YzRlNjdiNTlhN2EzMmI0MmVmY2EwNGI4MjMyZmM3ZWRiZmU0ODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMzAyLDggKzEzMDIsOCBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgY3NzL1NWR0NTU1BhcnNlci5jcHAKICAgICBjc3MvU1ZHQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcAotICAgIGNzcy9TZWxlY3RvckNo
ZWNrZXJGYXN0UGF0aC5jcHAKICAgICBjc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCisgICAgY3NzL1Nl
bGVjdG9yUXVlcnlGYXN0UGF0aC5jcHAKICAgICBjc3MvU291cmNlU2l6ZUxpc3QuY3BwCiAgICAg
Y3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCiAgICAgY3NzL1N0eWxlTWVkaWEuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggOGRmNGUyMTg3ZGViYzEwMjllMDkzMTg3NjMzMDc1ZGE5ZDI3ZTA0ZC4uNDE5YmJmMWU1
Yjc4ZmNhNWNkMjNkMmM3NmRkZGEzYjA4M2QxMWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQxOCw4ICsxNDE4LDggQEAK
IAkJNDE5QkMyREYxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxOUJDMkREMTY4NTMyOTkw
MEQ2NEQ2RCAvKiBWaXNpdGVkTGlua1N0YXRlLmggKi87IH07CiAJCTQxQTNENThFMTAxQzE1MkQw
MDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFBM0Q1OEMxMDFDMTUyRDAwMzE2RDA3IC8qIERl
ZGljYXRlZFdvcmtlclRocmVhZC5jcHAgKi87IH07CiAJCTQxQTNENThGMTAxQzE1MkQwMDMxNkQw
NyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxQTNENThEMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRX
b3JrZXJUaHJlYWQuaCAqLzsgfTsKLQkJNDFCOENENDUxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVj
dG9yQ2hlY2tlckZhc3RQYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxQjhDRDQzMTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJG
YXN0UGF0aC5jcHAgKi87IH07Ci0JCTQxQjhDRDQ2MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3Rv
ckNoZWNrZXJGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFCOENENDQxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoLmggKi87IH07CisJCTQxQjhDRDQ1MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvclF1ZXJ5
RmFzdFBhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFCOENENDMxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5jcHAg
Ki87IH07CisJCTQxQjhDRDQ2MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvclF1ZXJ5RmFzdFBh
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjhD
RDQ0MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguaCAqLzsgfTsKIAkJ
NDFCRjcwMEMwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRjcwMEEwRkU4NkY0OTAw
NUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxQkY3MDBGMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUJGNzAwRDBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWwuY3BwICovOyB9OwogCQk0MUJGNzAxMDBGRTg2RjYxMDA1RThERUMgLyog
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBFMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5oICovOyB9OwpAQCAtODQyOCw4ICs4NDI4LDggQEAKIAkJNDE5QkMy
REQxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRlZExpbmtTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MUEzRDU4QzEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhy
ZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERlZGljYXRlZFdv
cmtlclRocmVhZC5jcHA7IHBhdGggPSB3b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQTNENThEMTAxQzE1MkQwMDMxNkQwNyAv
KiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRGVkaWNhdGVkV29ya2VyVGhyZWFkLmg7IHBhdGggPSB3b3JrZXJzL0RlZGljYXRlZFdvcmtl
clRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MUI4Q0Q0MzE2RDA0NTkx
MDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0MUI4Q0Q0NDE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0
b3JDaGVja2VyRmFzdFBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vs
ZWN0b3JDaGVja2VyRmFzdFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFC
OENENDMxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUI4Q0Q0NDE2RDA0NTkxMDAwRThDQzAg
LyogU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MUJGNzAwQTBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBvcnRDaGFubmVsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lc3NhZ2VQb3J0Q2hhbm5lbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MUJGNzAwRDBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwOyBwYXRoID0gZGVmYXVsdC9QbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxQkY3MDBFMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbC5oOyBwYXRoID0gZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIxMTEsOCArMjIxMTEsOCBAQAogCQkJCUE3OUJB
REEwMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmggKi8sCiAJCQkJRTQ0QjRCQjExNDE2NTBE
NzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgKi8sCiAJCQkJRTQ0QjRCQjIxNDE2NTBE
NzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oICovLAotCQkJCTQxQjhDRDQzMTZEMDQ1OTEw
MDBFOENDMCAvKiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAgKi8sCi0JCQkJNDFCOENENDQx
NkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmggKi8sCisJCQkJNDFC
OENENDMxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5jcHAgKi8sCisJ
CQkJNDFCOENENDQxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yUXVlcnlGYXN0UGF0aC5oICov
LAogCQkJCTQzMkQzRkU3MThBODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVu
Y3Rpb25zLmggKi8sCiAJCQkJNDE1MDcxNTUxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmls
dGVyLmNwcCAqLywKIAkJCQk0MTUwNzE1NjE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0
ZXIuaCAqLywKQEAgLTI1ODQ0LDcgKzI1ODQ0LDcgQEAKIAkJCQlCMkMzREEyRjBEMDA2QzFEMDBF
RjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRUE4MDdDOTBG
NzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0
QjRCQjQxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNDFCOENENDYxNkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRo
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUI4Q0Q0NjE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0
b3JRdWVyeUZhc3RQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzJEM0ZFODE4QTg2NTg0MDBE
N0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjZCOTk5OTcxODA0RDU0MjAwRDAxMTIxIC8qIFNlbGVjdG9yQ29tcGlsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQxNTA3MTU4MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yOTI4MCw3ICsyOTI4MCw3IEBACiAJCQkJQjJDM0RBMkUwRDAw
NkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
RUE4MDdDODBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFNDRCNEJCMzE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTQxQjhDRDQ1MTZEMDQ1OTEwMDBFOENDMCAvKiBTZWxlY3RvckNo
ZWNrZXJGYXN0UGF0aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUI4Q0Q0NTE2RDA0NTkxMDAw
RThDQzAgLyogU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2
Qjk5OTk2MTgwNEQ1NDIwMEQwMTEyMSAvKiBTZWxlY3RvckNvbXBpbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQxNTA3MTU3MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxlY3RvckZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFNDUzMjJBQjE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JR
dWVyeS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4
IGVjMDg1MzYzOTM1MDMyODA1Njg2NjliNDFlZmU4MWY0ZTIwNmIxZWYuLmZkNTZiYzhjNTg3YTM1
YmNkYWJmYTNiYjY4ODdiOTQzZjc3ZDUzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNw
cApAQCAtODEsOCArODEsOCBAQAogI2luY2x1ZGUgIlBhZ2VSdWxlQ29sbGVjdG9yLmNwcCIKICNp
bmNsdWRlICJSdWxlRmVhdHVyZS5jcHAiCiAjaW5jbHVkZSAiUnVsZVNldC5jcHAiCi0jaW5jbHVk
ZSAiU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVy
LmNwcCIKKyNpbmNsdWRlICJTZWxlY3RvclF1ZXJ5RmFzdFBhdGguY3BwIgogI2luY2x1ZGUgIlN0
eWxlUHJvcGVydGllcy5jcHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAi
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmNwcAppbmRleCBkYWQ0YTIyNjMxMWEyMjlkMzg2MjFkYWQ0MjU3MGRi
NTFhMGUxMjBhLi5lODgyMzRkMTU3NDhjMTk2NmE3MzBhOGQwZWEwZjA2NjM1ZWIwOTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTI5NSwyMyAr
Mjk1LDI4IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyhj
b25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiAgICAgICAgIGNvbXBpbGVkU2VsZWN0b3JDaGVja2Vy
ID0gcnVsZURhdGEuY29tcGlsZWRTZWxlY3RvckNvZGVSZWYoKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICB9CiAKLSAgICBpZiAoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIpIHsKLSAg
ICAgICAgaWYgKHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKCkgPT0gU2VsZWN0b3JDb21waWxh
dGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKSB7Ci0gICAgICAgICAgICBTZWxlY3Rv
ckNvbXBpbGVyOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0
b3JDb21waWxlcjo6c2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oY29tcGlsZWRTZWxlY3Rv
ckNoZWNrZXIsIHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKCkpOwotICAgICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRSghc2VsZWN0b3JDaGVja2VyKCZtX2VsZW1lbnQpIHx8IG1fcHNldWRv
U3R5bGVSZXF1ZXN0LnBzZXVkb0lkID09IE5PUFNFVURPLCAiV2hlbiBtYXRjaGluZyBwc2V1ZG8g
ZWxlbWVudHMsIHdlIHNob3VsZCBuZXZlciBjb21waWxlIGEgc2VsZWN0b3IgY2hlY2tlciB3aXRo
b3V0IGNvbnRleHQgdW5sZXNzIGl0IGNhbm5vdCBtYXRjaCBhbnl0aGluZy4iKTsKKyAgICBpZiAo
Y29tcGlsZWRTZWxlY3RvckNoZWNrZXIgJiYgcnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSA9
PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKKyAg
ICAgICAgU2VsZWN0b3JDb21waWxlcjo6U2ltcGxlU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hl
Y2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNv
bXBpbGVkU2VsZWN0b3JDaGVja2VyLCBydWxlRGF0YS5jb21waWxhdGlvblN0YXR1cygpKTsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc2VsZWN0b3JDaGVja2VyKCZtX2VsZW1lbnQpIHx8
IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkID09IE5PUFNFVURPLCAiV2hlbiBtYXRjaGlu
ZyBwc2V1ZG8gZWxlbWVudHMsIHdlIHNob3VsZCBuZXZlciBjb21waWxlIGEgc2VsZWN0b3IgY2hl
Y2tlciB3aXRob3V0IGNvbnRleHQgdW5sZXNzIGl0IGNhbm5vdCBtYXRjaCBhbnl0aGluZy4iKTsK
ICNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwotICAgICAgICAgICAgcnVsZURhdGEuY29t
cGlsZWRTZWxlY3RvclVzZWQoKTsKKyAgICAgICAgcnVsZURhdGEuY29tcGlsZWRTZWxlY3RvclVz
ZWQoKTsKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlcigmbV9lbGVt
ZW50KTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gc2VsZWN0b3JDaGVja2VyKCZtX2VsZW1l
bnQpOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKKworICAgIFNl
bGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQobV9tb2RlKTsKKyAgICBjb250
ZXh0LmVsZW1lbnRTdHlsZSA9IG1fc3R5bGU7CisgICAgY29udGV4dC5wc2V1ZG9JZCA9IG1fcHNl
dWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkOworICAgIGNvbnRleHQuc2Nyb2xsYmFyID0gbV9wc2V1
ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyOworICAgIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9IG1f
cHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhclBhcnQ7CisKKyNpZiBFTkFCTEUoQ1NTX1NFTEVD
VE9SX0pJVCkKKyAgICBpZiAoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIpIHsKICAgICAgICAgQVNT
RVJUKHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKCkgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7CiAKICAgICAgICAgU2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3Rv
ckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhD
aGVja2luZ0NvbnRleHQoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHJ1bGVEYXRhLmNvbXBpbGF0
aW9uU3RhdHVzKCkpOwotICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQg
Y29udGV4dChtX21vZGUpOwotICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IG1fc3R5bGU7
Ci0gICAgICAgIGNvbnRleHQucHNldWRvSWQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9J
ZDsKLSAgICAgICAgY29udGV4dC5zY3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3Jv
bGxiYXI7Ci0gICAgICAgIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9IG1fcHNldWRvU3R5bGVSZXF1
ZXN0LnNjcm9sbGJhclBhcnQ7CisKICNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwogICAg
ICAgICBydWxlRGF0YS5jb21waWxlZFNlbGVjdG9yVXNlZCgpOwogI2VuZGlmCkBAIC0zMjEsMTIg
KzMyNiw3IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyhj
b25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiAKICAgICAvLyBTbG93IHBhdGguCiAgICAgU2VsZWN0
b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihtX2VsZW1lbnQuZG9jdW1lbnQoKSk7Ci0gICAgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNl
bGVjdG9yKCksICZtX2VsZW1lbnQsIG1fbW9kZSk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUg
PSBtX3N0eWxlOwotICAgIGNvbnRleHQucHNldWRvSWQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5w
c2V1ZG9JZDsKLSAgICBjb250ZXh0LnNjcm9sbGJhciA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNj
cm9sbGJhcjsKLSAgICBjb250ZXh0LnNjcm9sbGJhclBhcnQgPSBtX3BzZXVkb1N0eWxlUmVxdWVz
dC5zY3JvbGxiYXJQYXJ0OwotICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4
dCk7CisgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChydWxlRGF0YS5zZWxlY3Rvcigp
LCAmbV9lbGVtZW50LCBjb250ZXh0KTsKIH0KIAogdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVz
LCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgU3R5bGVSZXNvbHZlcjo6UnVsZVJh
bmdlJiBydWxlUmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4
IDNmYzlkYzk2Zjg1ZWQ3NmVmZTZhZTYxNTZlNDg4NDhkNWQ4YTZkYmMuLmQ2ZmJiZmYzOWYzZWY5
ZWQyNmQzOWM2ODA4ZWQ3ZTY3MzQwZGFmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuY3BwCkBAIC01Nyw3ICs1NywzMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotICAgIAorCitlbnVtIGNsYXNzIFZpc2l0ZWRNYXRjaFR5
cGUgOiB1bnNpZ25lZCBjaGFyIHsKKyAgICBEaXNhYmxlZCwgRW5hYmxlZAorfTsKKworc3RydWN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyA6IHB1YmxpYyBTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCB7CisgICAgLy8gSW5pdGlhbCBzZWxlY3RvciBj
b25zdHJ1Y3RvcgorICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMoY29uc3QgU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50KQorICAgICAgICA6IFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0KGNoZWNraW5nQ29udGV4dCkKKyAgICAgICAgLCBzZWxlY3Rvcihz
ZWxlY3RvcikKKyAgICAgICAgLCBlbGVtZW50KGVsZW1lbnQpCisgICAgICAgICwgdmlzaXRlZE1h
dGNoVHlwZShyZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdS
dWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5h
YmxlZCkKKyAgICAgICAgLCBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikKKyAg
ICAgICAgLCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyhmYWxzZSkKKyAgICAgICAgLCBoYXNTY3Jv
bGxiYXJQc2V1ZG8oZmFsc2UpCisgICAgICAgICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQor
ICAgIHsgfQorCisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOworICAgIEVsZW1lbnQq
IGVsZW1lbnQ7CisgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOworICAgIGNv
bnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKKyAgICBib29sIGlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzOworICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOworICAg
IGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvOworfTsKKwogc3RhdGljIGlubGluZSBib29sIGlzRmly
c3RDaGlsZEVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gIUVs
ZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhlbGVtZW50KTsKQEAgLTEzNCw4ICsxNjAs
OSBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29uc3QgRWxl
bWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQogewogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tl
cjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Citi
b29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRleHQmIHByb3ZpZGVkQ29udGV4dCkg
Y29uc3QKIHsKKyAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNvbnRleHQocHJvdmlkZWRD
b250ZXh0LCBzZWxlY3RvciwgZWxlbWVudCk7CiAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBOT1BT
RVVETzsKICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShjb250ZXh0LCBwc2V1ZG9JZCkgIT0gU2Vs
ZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTIsNyArMTc5LDcgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgc3RhdGljIGJv
b2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykKK2lu
bGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9y
Q2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWQmIGR5
bmFtaWNQc2V1ZG8pCiB7CiAgICAgaWYgKGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSCiAgICAg
ICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX1RIVU1CCkBAIC0xNjksMTIgKzE5Niwx
MiBAQCBpbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlYwogICAgIHJldHVybiBkeW5hbWljUHNldWRvID09
IFJFU0laRVI7CiB9CiAKLXN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQorc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3Qg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KQogewot
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgdXBkYXRlZENvbnRl
eHQoY29udGV4dCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3Rh
dHVzIHVwZGF0ZWRDb250ZXh0KGNvbnRleHQpOwogICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0
Y2hpbmcgd2hlbiB3ZSBzZWUgdGhlIGZpcnN0IGxpbmsuCiAgICAgaWYgKGNvbnRleHQuZWxlbWVu
dC0+aXNMaW5rKCkpCi0gICAgICAgIHVwZGF0ZWRDb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPSBT
ZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkOworICAgICAgICB1cGRhdGVkQ29u
dGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAgICAg
dXBkYXRlZENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
OwogICAgIHJldHVybiB1cGRhdGVkQ29udGV4dDsKIH0KQEAgLTE4NSw3ICsyMTIsNyBAQCBzdGF0
aWMgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjaGVja2luZ0NvbnRl
eHRGb3JQYXJlbnQoY29uc3QgUwogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUg
c2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNp
YmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAv
LyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBh
bmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBT
ZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgU2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQmIGNvbnRleHQsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdAorU2VsZWN0b3JD
aGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8p
IGNvbnN0CiB7CiAgICAgLy8gVGhlIGZpcnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaC4KICAgICBp
ZiAoIWNoZWNrT25lKGNvbnRleHQpKQpAQCAtMjI0LDcgKzI1MSw3IEBAIHN0YXRpYyBTZWxlY3Rv
ckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVu
dChjb25zdCBTCiAgICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCiAgICAgICAgIHJldHVybiBTZWxl
Y3Rvck1hdGNoZXM7CiAKLSAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBuZXh0Q29udGV4dChj
b250ZXh0KTsKKyAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIG5leHRDb250ZXh0KGNvbnRl
eHQpOwogICAgIG5leHRDb250ZXh0LnNlbGVjdG9yID0gaGlzdG9yeVNlbGVjdG9yOwogCiAgICAg
UHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwpAQCAtMjM1LDcgKzI2Miw3
IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNoZWNr
aW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTCiAKICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRl
ZCBtYXRjaGluZyB3aGVuIHdlIHRyeSB0byBtYXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5j
ZXN0b3JzLgogICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQg
JiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKQotICAgICAgICAgICAgbmV4dENvbnRl
eHQudmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaERpc2FibGVkOworICAgICAgICAgICAg
bmV4dENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVk
OwogCiAgICAgICAgIG5leHRDb250ZXh0LnBzZXVkb0lkID0gTk9QU0VVRE87CiAgICAgfQpAQCAt
Mzk3LDcgKzQyNCw3IEBAIHN0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgYm9vbCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29u
c3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkKK3N0
YXRpYyBib29sIGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb25zdCBTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpCiB7CiAgICAgLy8g
Rm9yIHF1aXJrcyBtb2RlLCBmb2xsb3cgdGhpczogaHR0cDovL3F1aXJrcy5zcGVjLndoYXR3Zy5v
cmcvI3RoZS06YWN0aXZlLWFuZC06aG92ZXItcXVpcmsKICAgICAvLyBJbiBxdWlya3MgbW9kZSwg
YSBjb21wb3VuZCBzZWxlY3RvciAnc2VsZWN0b3InIHRoYXQgbWF0Y2hlcyB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgbXVzdCBub3QgbWF0Y2ggZWxlbWVudHMgdGhhdCB3b3VsZCBub3QgYWxzbyBt
YXRjaCB0aGUgJzphbnktbGluaycgc2VsZWN0b3IuCkBAIC00NTIsNyArNDc5LDcgQEAgc3RhdGlj
IGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxl
bWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBz
ZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CkBAIC00ODgsNyArNTE1LDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvckxpc3QpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBz
dWJDb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyBzdWJDb250ZXh0KGNvbnRleHQpOwogICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9u
YWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAgICAgICAgICAgICBzdWJDb250ZXh0LmZpcnN0U2VsZWN0
b3JPZlRoZUZyYWdtZW50ID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOwogICAgICAgICAgICAgZm9y
IChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJDb250ZXh0
LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gc3ViQ29udGV4dC5zZWxlY3Rvci0+dGFn
SGlzdG9yeSgpKSB7CkBAIC00OTgsNyArNTI1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBv
Y2N1cnMKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBz
ZXVkb0NsYXNzVHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdCk7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIHNlbGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3aGVu
IGFwcGx5aW5nLiBXZSBkb24ndCBrbm93IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3QpIHlldC4K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNz
VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQgfHwgKHN1YkNvbnRleHQu
c2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xp
bmsgJiYgc3ViQ29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQp
KQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xh
c3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCB8fCAoc3ViQ29udGV4
dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
TGluayAmJiBzdWJDb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoVHlwZTo6
RW5hYmxlZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZShzdWJDb250ZXh0KSkKQEAg
LTY4NCw3ICs3MTEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6CiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YkNvbnRl
eHQoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1
ZG9DbGFzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwogICAgICAgICAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3Rv
ciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rv
cjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0
LnNlbGVjdG9yKSkgewpAQCAtNzA1LDcgKzczMiw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAg
ICAgICAgICAgIC8vIEluc2lkZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzcyBleGNlcHQgZm9yIDpu
b3QsIDp2aXNpdGVkIG5ldmVyIG1hdGNoZXMuCiAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkZ1
bmN0aW9uYWxQc2V1ZG9DbGFzcykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgY29udGV4dC52aXNpdGVkTWF0Y2hU
eXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQ7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+
aXNMaW5rKCkgJiYgY29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaFR5cGU6
OkVuYWJsZWQ7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRHJhZzoKICAg
ICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5
bGUpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCkBAIC04Mjks
NyArODU2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIH0KICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCiAgICAgZWxzZSBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKLSAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQg
c3ViQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBz
dWJDb250ZXh0KGNvbnRleHQpOwogCiAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1
ZG8gPSBOT1BTRVVETzsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0
b3IgPSBjb250ZXh0LnNlbGVjdG9yOwpAQCAtODQ2LDcgKzg3Myw3IEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMmIGNvbnRleHQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikgY29uc3QKIHsKICAg
ICBBU1NFUlQoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IGY0MzkzZjMyMjYzYzEyNDA3
ZDU0ODllYTVhOWUxYzA5ZjBiNjRlYmMuLjg4NmYzNjNiOGFkOTNjMmViNjAzZmEzMWU5Mzk5YWMy
MWRlMmE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTQ2LDQ3ICs0
NiwzMyBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rv
ck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3Ms
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CiAKIHB1YmxpYzoKLSAgICBlbnVtIFZpc2l0ZWRN
YXRjaFR5cGUgeyBWaXNpdGVkTWF0Y2hEaXNhYmxlZCwgVmlzaXRlZE1hdGNoRW5hYmxlZCB9Owog
ICAgIGVudW0gY2xhc3MgTW9kZSA6IHVuc2lnbmVkIGNoYXIgewogICAgICAgICBSZXNvbHZpbmdT
dHlsZSA9IDAsIENvbGxlY3RpbmdSdWxlcywgQ29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFs
UHNldWRvRWxlbWVudHMsIFF1ZXJ5aW5nUnVsZXMKICAgICB9OwogCiAgICAgU2VsZWN0b3JDaGVj
a2VyKERvY3VtZW50Jik7CiAKLSAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgewot
ICAgICAgICAvLyBJbml0aWFsIHNlbGVjdG9yIGNvbnN0cnVjdG9yCi0gICAgICAgIFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxl
bWVudCwgTW9kZSByZXNvbHZpbmdNb2RlKQotICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3Rv
cikKLSAgICAgICAgICAgICwgcmVzb2x2aW5nTW9kZShyZXNvbHZpbmdNb2RlKQotICAgICAgICAg
ICAgLCBlbGVtZW50KGVsZW1lbnQpCi0gICAgICAgICAgICAsIHNjb3BlKG51bGxwdHIpCi0gICAg
ICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWlu
Z1J1bGVzID8gVmlzaXRlZE1hdGNoRGlzYWJsZWQgOiBWaXNpdGVkTWF0Y2hFbmFibGVkKQotICAg
ICAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVETykKKyAgICBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0
IHsKKyAgICAgICAgQ2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZp
bmdNb2RlKQorICAgICAgICAgICAgOiByZXNvbHZpbmdNb2RlKHJlc29sdmluZ01vZGUpCiAgICAg
ICAgICAgICAsIGVsZW1lbnRTdHlsZShudWxscHRyKQorICAgICAgICAgICAgLCBwc2V1ZG9JZChO
T1BTRVVETykKICAgICAgICAgICAgICwgc2Nyb2xsYmFyKG51bGxwdHIpCi0gICAgICAgICAgICAs
IGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50KHNlbGVjdG9yKQogICAgICAgICAgICAgLCBzY3Jv
bGxiYXJQYXJ0KE5vUGFydCkKLSAgICAgICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3Mo
ZmFsc2UpCi0gICAgICAgICAgICAsIGhhc1Njcm9sbGJhclBzZXVkbyhmYWxzZSkKLSAgICAgICAg
ICAgICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQorICAgICAgICAgICAgLCBzY29wZShudWxs
cHRyKQogICAgICAgICB7IH0KIAotICAgICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7
Ci0gICAgICAgIE1vZGUgcmVzb2x2aW5nTW9kZTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudDsK
LSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGU7Ci0gICAgICAgIFZpc2l0ZWRNYXRj
aFR5cGUgdmlzaXRlZE1hdGNoVHlwZTsKLSAgICAgICAgUHNldWRvSWQgcHNldWRvSWQ7CisgICAg
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlOwogICAgICAgICBSZW5kZXJT
dHlsZSogZWxlbWVudFN0eWxlOworICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZDsKICAgICAgICAg
UmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXI7Ci0gICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBm
aXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKICAgICAgICAgU2Nyb2xsYmFyUGFydCBzY3JvbGxi
YXJQYXJ0OwotICAgICAgICBib29sIGluRnVuY3Rpb25hbFBzZXVkb0NsYXNzOwotICAgICAgICBi
b29sIGhhc1Njcm9sbGJhclBzZXVkbzsKLSAgICAgICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87
CisgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwogICAgIH07CiAKLSAgICBib29s
IG1hdGNoKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JikgY29uc3Q7CisgICAgc3RydWN0
IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXM7CisKKyAgICBib29sIG1hdGNoKGNvbnN0IENTU1Nl
bGVjdG9yKiwgRWxlbWVudCosIGNvbnN0IENoZWNraW5nQ29udGV4dCYpIGNvbnN0OwogCiAgICAg
c3RhdGljIGJvb2wgdGFnTWF0Y2hlcyhjb25zdCBFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogICAgIHN0YXRpYyBib29sIGlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3RvciopOwpAQCAtOTcsMTAgKzgzLDEwIEBAIGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7
CiAgICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2Vs
ZWN0b3IqKTsKIAogcHJpdmF0ZToKLSAgICBNYXRjaCBtYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IFNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmKSBjb25zdDsKLSAgICBib29sIGNoZWNr
T25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JikgY29uc3Q7CisgICAgTWF0Y2ggbWF0
Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWQm
KSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMmKSBjb25zdDsKIAotICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IENTU1NlbGVjdG9yKikgY29uc3Q7CisgICAg
Ym9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMmLCBjb25zdCBDU1NTZWxlY3RvciopIGNvbnN0OwogCiAgICAgYm9vbCBtX3N0cmljdFBh
cnNpbmc7CiAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDVmNjA1ZDRkNGUwODJmOWRkMjk5MzRmNDJiNjA5MWY0MzY0MTgzM2MuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0g
KiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJl
d29sZi5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3
ZWJraXRAbmlja3NoYW5rcy5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFw
QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQot
ICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2VsZWN0
b3JDaGVja2VyRmFzdFBhdGguaCIKLQotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1uYW1lc3BhY2Ugewot
Ci10ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxl
Y3RvciopPgotaW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVj
dG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQotewotICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChjaGVja1ZhbHVlKGVsZW1l
bnQsIHNlbGVjdG9yKSkgewotICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09
IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50KQotICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJz
ZWxlY3RvciA9IDA7Ci0gICAgICAgICAgICBlbHNlIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9y
KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1Nl
bGVjdG9yOjpDaGlsZCB8fCBzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3Vi
U2VsZWN0b3IpOwotICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVj
dG9yOwotICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9
IGVsZW1lbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0
aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICAgICAgICAgIGVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RvciA9IHNl
bGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAodG9wQ2hpbGRPclN1YnNlbGVjdG9yKSB7Ci0gICAgICAgICAgICAvLyBD
aGlsZCBvciBzdWJzZWxlY3RvciBjaGVjayBmYWlsZWQuCi0gICAgICAgICAgICAvLyBJZiB0aGUg
bWF0Y2ggZWxlbWVudCBpcyBudWxsLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3Igd2FzIGFsc28gdGhl
IHZlcnkgdG9wbW9zdCBzZWxlY3RvciBhbmQgaGFkIHRvIG1hdGNoCi0gICAgICAgICAgICAvLyB0
aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3ZXJlIGNoZWNraW5nLgotICAgICAgICAgICAgaWYgKCF0
b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIG90aGVyIG1hdGNoZXMgZG93biB0
aGUgYW5jZXN0b3IgY2hhaW4uCi0gICAgICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHRvcG1vc3Qg
Y2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5kIHRoZSBlbGVtZW50IGl0IG1hdGNoZWQsIGNvbnRpbnVl
IGNoZWNraW5nIGFuY2VzdG9ycy4KLSAgICAgICAgICAgIHNlbGVjdG9yID0gdG9wQ2hpbGRPclN1
YnNlbGVjdG9yOwotICAgICAgICAgICAgZWxlbWVudCA9IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1h
dGNoRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yID0gMDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBy
ZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5jbGFzc05hbWVzKCkuY29udGFp
bnMoc2VsZWN0b3ItPnZhbHVlKCkpOwotfQotCi1pbmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29u
c3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAg
IHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9u
KCkuaW1wbCgpID09IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKTsKLX0KLQotaW5saW5lIGJvb2wg
Y2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVj
a0V4YWN0QXR0cmlidXRlKGVsZW1lbnQsIHNlbGVjdG9yLCBzZWxlY3Rvci0+YXR0cmlidXRlKCks
IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci19Ci0KLWlubGluZSBib29sIGNoZWNrVGFnVmFs
dWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQot
ewotICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0
b3ItPnRhZ1FOYW1lKCkpOwotfQotCi19Ci0KLVNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoOjpTZWxl
Y3RvckNoZWNrZXJGYXN0UGF0aChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBtX3NlbGVjdG9yKHNlbGVjdG9yKQotICAgICwgbV9lbGVt
ZW50KGVsZW1lbnQpCi17Ci19Ci0KLWJvb2wgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6Om1hdGNo
ZXNSaWdodG1vc3RTZWxlY3RvcihTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlz
aXRlZE1hdGNoVHlwZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoU2VsZWN0b3JDaGVja2VyRmFzdFBh
dGg6OmNhblVzZShtX3NlbGVjdG9yKSk7Ci0KLSAgICBzd2l0Y2ggKG1fc2VsZWN0b3ItPm1fbWF0
Y2gpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpUYWc6Ci0gICAgICAgIHJldHVybiBjaGVja1Rh
Z1ZhbHVlKG1fZWxlbWVudCwgbV9zZWxlY3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xh
c3M6Ci0gICAgICAgIHJldHVybiBjaGVja0NsYXNzVmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9y
KTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpJZDoKLSAgICAgICAgcmV0dXJuIGNoZWNrSURWYWx1
ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3IpOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0Ogot
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoKLSAgICAgICAgcmV0dXJuIGNoZWNrRXhhY3RBdHRy
aWJ1dGVWYWx1ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3IpOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzOgotICAgICAgICByZXR1cm4gY29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1h
dGNoZXModmlzaXRlZE1hdGNoVHlwZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTZWxlY3Rv
ckNoZWNrZXJGYXN0UGF0aDo6bWF0Y2hlcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1hdGNoZXNS
aWdodG1vc3RTZWxlY3RvcihTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpKTsK
LSAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBtX3NlbGVjdG9yOwotICAgIGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQgPSBtX2VsZW1lbnQ7Ci0KLSAgICBjb25zdCBDU1NTZWxlY3Rvciog
dG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKLSAgICBjb25zdCBFbGVtZW50KiB0b3BDaGlsZE9y
U3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQgPSAwOwotICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24o
KSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSBzZWxl
Y3RvcjsKLQotICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3Vi
U2VsZWN0b3IpCi0gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0K
LSAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0KLSAgICAvLyBXZSBrbm93
IHRoaXMgY29tcG91bmQgc2VsZWN0b3IgaGFzIGRlc2NlbmRhbnQsIGNoaWxkIGFuZCBzdWJzZWxl
Y3RvciBjb21iaW5hdG9ycyBvbmx5IGFuZCBhbGwgY29tcG9uZW50cyBhcmUgc2ltcGxlLgotICAg
IHdoaWxlIChzZWxlY3RvcikgewotICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7
Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgotICAgICAgICAgICAgaWYgKCFmYXN0
Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0NsYXNzVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5n
bGVTZWxlY3RvcjxjaGVja0lEVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vi
c2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlRhZzoKLSAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8
Y2hlY2tUYWdWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3Rvciwg
dG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
U2V0OgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKLSAgICAgICAgICAgIGlmICgh
ZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlPihzZWxlY3Rv
ciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JN
YXRjaEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVs
YXRpb24pCi17Ci0gICAgcmV0dXJuIHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50
IHx8IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCByZWxhdGlvbiA9PSBDU1NTZWxl
Y3Rvcjo6U3ViU2VsZWN0b3I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2Fi
bGVNYXRjaChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpTZXQpIHsKLSAgICAgICAgLy8gU3R5bGUgYXR0cmli
dXRlIGlzIGdlbmVyYXRlZCBsYXppbHkgYnV0IHRoZSBmYXN0IHBhdGggZG9lc24ndCB0cmlnZ2Vy
IGl0LgotICAgICAgICAvLyBEaXNhbGxvdyB0aGVtIGhlcmUgcmF0aGVyIHRoYW4gbWFraW5nIHRo
ZSBmYXN0IHBhdGggbW9yZSBicmFuY2h5LgotICAgICAgICByZXR1cm4gc2VsZWN0b3ItPmF0dHJp
YnV0ZSgpICE9IHN0eWxlQXR0cjsKLSAgICB9Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpFeGFjdCkKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5hdHRyaWJ1dGUo
KSAhPSBzdHlsZUF0dHIgJiYgSFRNTERvY3VtZW50Ojppc0Nhc2VTZW5zaXRpdmVBdHRyaWJ1dGUo
c2VsZWN0b3ItPmF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gc2VsZWN0b3ItPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlRhZyB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQg
fHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oc2Vs
ZWN0b3ItPnJlbGF0aW9uKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlz
RmFzdENoZWNrYWJsZU1hdGNoKHNlbGVjdG9yKSB8fCBTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9u
UHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3Rvcik7Ci19Ci0KLWJvb2wgU2VsZWN0b3JDaGVja2Vy
RmFzdFBhdGg6OmNhblVzZShjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYg
KCFpc0Zhc3RDaGVja2FibGVSaWdodG1vc3RTZWxlY3RvcihzZWxlY3RvcikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBmb3IgKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsg
c2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBp
ZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVNYXRjaChz
ZWxlY3RvcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoOjpjb21tb25Qc2V1ZG9DbGFz
c1NlbGVjdG9yTWF0Y2hlcyhTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRl
ZE1hdGNoVHlwZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1v
blBzZXVkb0NsYXNzU2VsZWN0b3IobV9zZWxlY3RvcikpOwotICAgIHN3aXRjaCAobV9zZWxlY3Rv
ci0+cHNldWRvQ2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0xpbms6Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rOgotICAgICAg
ICByZXR1cm4gbV9lbGVtZW50LT5pc0xpbmsoKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1Zpc2l0ZWQ6Ci0gICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmlzTGluaygpICYmIHZp
c2l0ZWRNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkOwot
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRm9jdXM6Ci0gICAgICAgIHJldHVybiBT
ZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKG1fZWxlbWVudCk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXJGYXN0UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZh
c3RQYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZDEwNDU1NWYxNmQwYzNi
MjFkMzcxN2UzN2NmOWFmNTc4MTJiNzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRo
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDQtMjAw
NSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEs
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICogQ29weXJpZ2h0IChjKSAyMDExLCBD
b2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZu
ZGVmIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoX2gKLSNkZWZpbmUgU2VsZWN0b3JDaGVja2VyRmFz
dFBhdGhfaAotCi0jaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNo
ZWNrZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTZWxlY3RvckNoZWNrZXJG
YXN0UGF0aCB7Ci1wdWJsaWM6Ci0gICAgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGgoY29uc3QgQ1NT
U2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7Ci0KLSAgICBib29sIG1hdGNoZXMoKSBjb25zdDsK
LSAgICBib29sIG1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcihTZWxlY3RvckNoZWNrZXI6OlZpc2l0
ZWRNYXRjaFR5cGUpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlc1JpZ2h0bW9zdEF0dHJpYnV0ZVNl
bGVjdG9yKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgYm9vbCBjYW5Vc2UoY29uc3QgQ1NTU2VsZWN0
b3IqKTsKLQotcHJpdmF0ZToKLSAgICBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRj
aGVzKFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoVHlwZSkgY29uc3Q7Ci0KLSAgICBjb25z
dCBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKLSAgICBjb25zdCBFbGVtZW50KiBtX2VsZW1lbnQ7
Ci19OwotCi1pbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aDo6bWF0Y2hlc1JpZ2h0
bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICBpZiAobV9zZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QgfHwgbV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6U2V0KQotICAgICAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVja0V4YWN0
QXR0cmlidXRlKG1fZWxlbWVudCwgbV9zZWxlY3RvciwgbV9zZWxlY3Rvci0+YXR0cmlidXRlKCks
IG1fc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKLSAgICBBU1NFUlQoIW1fc2VsZWN0b3ItPmlz
QXR0cmlidXRlU2VsZWN0b3IoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0
aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMu
aAppbmRleCA5OGZmYTE5NmY2NjI3MGI1MTQ1YzA0NGU5YTUzZjVmMjI4YWIwNmQwLi4zYTQ1OThk
OTM0ODg2YzMwY2NhNjEyMGQ3YzI0ZjkzOThlOGUwMWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKQEAgLTE2OCwyMSArMTY4LDE4
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRBcHBlYXJJbmRldGVybWluYXRlKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0
ZXJtaW5hdGUoKTsKIH0KLSAgICAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFM
V0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNzKGNvbnN0
IENvbnRleHRUeXBlJiBjb250ZXh0KQorCitBTFdBWVNfSU5MSU5FIGJvb2wgc2Nyb2xsYmFyTWF0
Y2hlc0VuYWJsZWRQc2V1ZG9DbGFzcyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1cm4gY29udGV4dC5zY3JvbGxiYXIgJiYgY29udGV4
dC5zY3JvbGxiYXItPmVuYWJsZWQoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRleHRU
eXBlPgotQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNEaXNhYmxlZFBzZXVkb0Ns
YXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250ZXh0KQorQUxXQVlTX0lOTElORSBib29sIHNjcm9s
bGJhck1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hl
Y2tpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBjb250ZXh0LnNjcm9sbGJhciAm
JiAhY29udGV4dC5zY3JvbGxiYXItPmVuYWJsZWQoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IENvbnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNIb3ZlclBz
ZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250ZXh0KQorQUxXQVlTX0lOTElORSBib29s
IHNjcm9sbGJhck1hdGNoZXNIb3ZlclBzZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dC5zY3JvbGxiYXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5NCw4ICsxOTEsNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3MoY29uc3QgQ29udGV4dFR5cGUm
IGNvbnRleHQpCiAgICAgcmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9PSBob3ZlcmVkUGFy
dDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBi
b29sIHNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlwZSYg
Y29udGV4dCkKK0FMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzQWN0aXZlUHNldWRv
Q2xhc3MoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7
CiAgICAgaWYgKCFjb250ZXh0LnNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MjA2LDQ1ICsyMDIsMzggQEAgQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNBY3Rp
dmVQc2V1ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlwZSYgY29udGV4dCkKICAgICAgICAgcmV0dXJu
IHByZXNzZWRQYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRy
YWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQ7CiAgICAgcmV0dXJuIGNvbnRleHQu
c2Nyb2xsYmFyUGFydCA9PSBwcmVzc2VkUGFydDsKIH0KLSAgICAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDb250ZXh0VHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzSG9yaXpv
bnRhbFBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250ZXh0KQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0hvcml6b250YWxQc2V1ZG9DbGFzcyhjb25zdCBTZWxl
Y3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1cm4gY29u
dGV4dC5zY3JvbGxiYXIgJiYgY29udGV4dC5zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9y
aXpvbnRhbFNjcm9sbGJhcjsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRleHRUeXBlPgot
QUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNWZXJ0aWNhbFBzZXVkb0NsYXNzKGNv
bnN0IENvbnRleHRUeXBlJiBjb250ZXh0KQorQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1h
dGNoZXNWZXJ0aWNhbFBzZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBjb250ZXh0LnNjcm9sbGJhciAmJiBjb250
ZXh0LnNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcjsKIH0KLSAg
ICAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBz
Y3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNldWRvQ2xhc3MoY29uc3QgQ29udGV4dFR5cGUmIGNv
bnRleHQpCisKK0FMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNl
dWRvQ2xhc3MoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQp
CiB7CiAgICAgcmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQ
YXJ0IHx8IGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBjb250
ZXh0LnNjcm9sbGJhclBhcnQgPT0gQmFja1RyYWNrUGFydDsKIH0KLSAgICAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVz
SW5jcmVtZW50UHNldWRvQ2xhc3MoY29uc3QgQ29udGV4dFR5cGUmIGNvbnRleHQpCisKK0FMV0FZ
U19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzSW5jcmVtZW50UHNldWRvQ2xhc3MoY29uc3Qg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJu
IGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IGNvbnRl
eHQuc2Nyb2xsYmFyUGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBjb250ZXh0LnNjcm9s
bGJhclBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydDsKIH0KLSAgICAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDb250ZXh0VHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzU3RhcnRQ
c2V1ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlwZSYgY29udGV4dCkKKworQUxXQVlTX0lOTElORSBi
b29sIHNjcm9sbGJhck1hdGNoZXNTdGFydFBzZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBjb250ZXh0LnNjcm9s
bGJhclBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBjb250ZXh0LnNjcm9sbGJhclBhcnQg
PT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBjb250ZXh0LnNjcm9sbGJhclBhcnQgPT0gQmFj
a1RyYWNrUGFydDsKIH0KLSAgICAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFM
V0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3MoY29uc3QgQ29u
dGV4dFR5cGUmIGNvbnRleHQpCisKK0FMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVz
RW5kUHNldWRvQ2xhc3MoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNv
bnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9PSBCYWNrQnV0dG9u
RW5kUGFydCB8fCBjb250ZXh0LnNjcm9sbGJhclBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQg
fHwgY29udGV4dC5zY3JvbGxiYXJQYXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7CiB9Ci0gICAgCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGV4dFR5cGU+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgc2Nyb2xs
YmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250
ZXh0KQorCitBTFdBWVNfSU5MSU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBz
ZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0
KQogewogICAgIGlmICghY29udGV4dC5zY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTI1NSw5ICsyNDQsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0Rv
dWJsZUJ1dHRvblBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBjbwogICAgICAgICByZXR1
cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kIHx8IGJ1dHRv
bnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGg7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQotICAgIAotdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRleHRUeXBlPgotQUxXQVlTX0lO
TElORSBib29sIHNjcm9sbGJhck1hdGNoZXNTaW5nbGVCdXR0b25Qc2V1ZG9DbGFzcyhjb25zdCBD
b250ZXh0VHlwZSYgY29udGV4dCkKKworQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNo
ZXNTaW5nbGVCdXR0b25Qc2V1ZG9DbGFzcyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoIWNvbnRleHQuc2Nyb2xsYmFyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yNjYsOSArMjU0LDggQEAgQUxXQVlTX0lOTElORSBib29sIHNj
cm9sbGJhck1hdGNoZXNTaW5nbGVCdXR0b25Qc2V1ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlwZSYg
Y28KICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc1Np
bmdsZTsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0gICAgCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29u
dGV4dFR5cGU+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNl
dWRvQ2xhc3MoY29uc3QgQ29udGV4dFR5cGUmIGNvbnRleHQpCisKK0FMV0FZU19JTkxJTkUgYm9v
bCBzY3JvbGxiYXJNYXRjaGVzTm9CdXR0b25Qc2V1ZG9DbGFzcyhjb25zdCBTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoIWNvbnRleHQuc2Nyb2xs
YmFyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzksOSArMjY2LDggQEAgQUxXQVlTX0lO
TElORSBib29sIHNjcm9sbGJhck1hdGNoZXNOb0J1dHRvblBzZXVkb0NsYXNzKGNvbnN0IENvbnRl
eHRUeXBlJiBjb250ZXgKICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xs
YmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91
YmxlU3RhcnQ7CiAgICAgcmV0dXJuIGZhbHNlOwogfQotICAgIAotdGVtcGxhdGUgPHR5cGVuYW1l
IENvbnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQ
cmVzZW50UHNldWRvQ2xhc3MoY29uc3QgQ29udGV4dFR5cGUmIGNvbnRleHQpCisKK0FMV0FZU19J
TkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNzKGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVy
biBjb250ZXh0LnNjcm9sbGJhciAmJiBjb250ZXh0LnNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS0+aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvclF1ZXJ5RmFzdFBhdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwYTQ0ZTkyMTRkMTY3OWYwNWJjYzk2
YzFjODdkN2UxOTQ0MzI0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JRdWVyeUZhc3RQYXRoLmNwcApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFu
a3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAo
YykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdG9yUXVlcnlGYXN0UGF0
aC5oIgorCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlIDxib29s
IGNoZWNrVmFsdWUoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1NlbGVjdG9yKik+CitpbmxpbmUg
Ym9vbCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9y
LCBjb25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqJiB0b3BDaGlsZE9y
U3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVs
ZW1lbnQpCit7CisgICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGNoZWNrVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpKSB7
CisgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkRl
c2NlbmRhbnQpCisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8
IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rvcik7CisgICAg
ICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgICAgICAg
ICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gZWxlbWVudDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxl
Y3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rv
cnkoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0
b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIENoaWxkIG9yIHN1YnNlbGVj
dG9yIGNoZWNrIGZhaWxlZC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBtYXRjaCBlbGVtZW50IGlz
IG51bGwsIHRvcENoaWxkT3JTdWJzZWxlY3RvciB3YXMgYWxzbyB0aGUgdmVyeSB0b3Btb3N0IHNl
bGVjdG9yIGFuZCBoYWQgdG8gbWF0Y2gKKyAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBlbGVt
ZW50IHdlIHdlcmUgY2hlY2tpbmcuCisgICAgICAgICAgICBpZiAoIXRvcENoaWxkT3JTdWJzZWxl
Y3Rvck1hdGNoRWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAvLyBUaGVyZSBtYXkgYmUgb3RoZXIgbWF0Y2hlcyBkb3duIHRoZSBhbmNlc3RvciBjaGFp
bi4KKyAgICAgICAgICAgIC8vIFJld2luZCB0byB0aGUgdG9wbW9zdCBjaGlsZCBvciBzdWJzZWxl
Y3RvciBhbmQgdGhlIGVsZW1lbnQgaXQgbWF0Y2hlZCwgY29udGludWUgY2hlY2tpbmcgYW5jZXN0
b3JzLgorICAgICAgICAgICAgc2VsZWN0b3IgPSB0b3BDaGlsZE9yU3Vic2VsZWN0b3I7CisgICAg
ICAgICAgICBlbGVtZW50ID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50LT5wYXJl
bnRFbGVtZW50KCk7CisgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitpbmxpbmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBlbGVtZW50LT5o
YXNDbGFzcygpICYmIGVsZW1lbnQtPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWxlY3Rvci0+dmFs
dWUoKSk7Cit9CisKK2lubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgcmV0dXJuIGVsZW1lbnQt
Pmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkgPT0gc2Vs
ZWN0b3ItPnZhbHVlKCkuaW1wbCgpOworfQorCitpbmxpbmUgYm9vbCBjaGVja0V4YWN0QXR0cmli
dXRlVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQoreworICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmNoZWNrRXhhY3RBdHRyaWJ1dGUo
ZWxlbWVudCwgc2VsZWN0b3IsIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSwgc2VsZWN0b3ItPnZhbHVl
KCkuaW1wbCgpKTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tUYWdWYWx1ZShjb25zdCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgcmV0dXJuIFNl
bGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvci0+dGFnUU5hbWUoKSk7
Cit9CisKK30KKworU2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpTZWxlY3RvclF1ZXJ5RmFzdFBhdGgo
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQorICAg
IDogbV9zZWxlY3RvcihzZWxlY3RvcikKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQoreworfQor
Citib29sIFNlbGVjdG9yUXVlcnlGYXN0UGF0aDo6bWF0Y2hlc1JpZ2h0bW9zdFNlbGVjdG9yKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoU2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpjYW5Vc2UobV9zZWxl
Y3RvcikpOworCisgICAgc3dpdGNoIChtX3NlbGVjdG9yLT5tX21hdGNoKSB7CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6VGFnOgorICAgICAgICByZXR1cm4gY2hlY2tUYWdWYWx1ZShtX2VsZW1lbnQs
IG1fc2VsZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgorICAgICAgICByZXR1
cm4gY2hlY2tDbGFzc1ZhbHVlKG1fZWxlbWVudCwgbV9zZWxlY3Rvcik7CisgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6SWQ6CisgICAgICAgIHJldHVybiBjaGVja0lEVmFsdWUobV9lbGVtZW50LCBtX3Nl
bGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKKyAgICBjYXNlIENTU1NlbGVj
dG9yOjpTZXQ6CisgICAgICAgIHJldHVybiBjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUobV9lbGVt
ZW50LCBtX3NlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoKKyAg
ICAgICAgcmV0dXJuIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKCk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBTZWxlY3RvclF1ZXJ5RmFzdFBhdGg6Om1hdGNoZXMoKSBjb25zdAor
eworICAgIEFTU0VSVChtYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoKSk7CisgICAgY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yID0gbV9zZWxlY3RvcjsKKyAgICBjb25zdCBFbGVtZW50KiBlbGVt
ZW50ID0gbV9lbGVtZW50OworCisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JTdWJz
ZWxlY3RvciA9IDA7CisgICAgY29uc3QgRWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0
Y2hFbGVtZW50ID0gMDsKKyAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0
b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxl
Y3RvcikKKyAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisKKyAgICBp
ZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQorICAg
ICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworCisgICAgc2VsZWN0b3Ig
PSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOworCisgICAgLy8gV2Uga25vdyB0aGlzIGNvbXBvdW5k
IHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50LCBjaGlsZCBhbmQgc3Vic2VsZWN0b3IgY29tYmluYXRv
cnMgb25seSBhbmQgYWxsIGNvbXBvbmVudHMgYXJlIHNpbXBsZS4KKyAgICB3aGlsZSAoc2VsZWN0
b3IpIHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgeworICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpDbGFzczoKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2Vs
ZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpJZDoKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hl
Y2tJRFZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BD
aGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpUYWc6
CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+
KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJz
ZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoKKyAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1Npbmds
ZVNlbGVjdG9yPGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRv
cENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0
Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uKQoreworICAg
IHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCB8fCByZWxhdGlvbiA9
PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVj
dG9yOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlTWF0Y2goY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6U2V0KSB7CisgICAgICAgIC8vIFN0eWxlIGF0dHJpYnV0ZSBpcyBnZW5lcmF0
ZWQgbGF6aWx5IGJ1dCB0aGUgZmFzdCBwYXRoIGRvZXNuJ3QgdHJpZ2dlciBpdC4KKyAgICAgICAg
Ly8gRGlzYWxsb3cgdGhlbSBoZXJlIHJhdGhlciB0aGFuIG1ha2luZyB0aGUgZmFzdCBwYXRoIG1v
cmUgYnJhbmNoeS4KKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHls
ZUF0dHI7CisgICAgfQorICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
RXhhY3QpCisgICAgICAgIHJldHVybiBzZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRy
ICYmIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRy
aWJ1dGUoKSk7CisgICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpU
YWcgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKK30KKworc3RhdGljIGlubGluZSBib29sIGlz
RmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKK3sKKyAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlv
bigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpc0Zhc3RDaGVja2FibGVN
YXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2Vs
ZWN0b3Ioc2VsZWN0b3IpOworfQorCitib29sIFNlbGVjdG9yUXVlcnlGYXN0UGF0aDo6Y2FuVXNl
KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoIWlzRmFzdENoZWNrYWJs
ZVJpZ2h0bW9zdFNlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZvciAoc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOyBzZWxlY3Rvcjsgc2VsZWN0
b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGlmICghaXNGYXN0Q2hlY2th
YmxlUmVsYXRpb24oc2VsZWN0b3ItPnJlbGF0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIWlzRmFzdENoZWNrYWJsZU1hdGNoKHNlbGVjdG9yKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U2VsZWN0b3JRdWVyeUZhc3RQYXRoOjpjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcygp
IGNvbnN0Cit7CisgICAgQVNTRVJUKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFz
c1NlbGVjdG9yKG1fc2VsZWN0b3IpKTsKKyAgICBzd2l0Y2ggKG1fc2VsZWN0b3ItPnBzZXVkb0Ns
YXNzVHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rOgorICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW55TGluazoKKyAgICAgICAgcmV0dXJuIG1f
ZWxlbWVudC0+aXNMaW5rKCk7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNp
dGVkOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NGb2N1czoKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3Vz
UHNldWRvQ2xhc3MobV9lbGVtZW50KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yUXVlcnlGYXN0UGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhMzNhMjMyZjZk
MjA4MDgzNzUxOGJiNzg5MGUzZGJhNWIzN2Y2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JRdWVyeUZhc3RQYXRoLmgKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAg
ICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYu
Y29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0
QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENv
cHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBTZWxlY3RvclF1ZXJ5RmFzdFBhdGhfaAorI2RlZmluZSBT
ZWxlY3RvclF1ZXJ5RmFzdFBhdGhfaAorCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJTZWxlY3RvckNoZWNrZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
ZWxlY3RvclF1ZXJ5RmFzdFBhdGggeworcHVibGljOgorICAgIFNlbGVjdG9yUXVlcnlGYXN0UGF0
aChjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKTsKKworICAgIGJvb2wgbWF0Y2hl
cygpIGNvbnN0OworICAgIGJvb2wgbWF0Y2hlc1JpZ2h0bW9zdFNlbGVjdG9yKCkgY29uc3Q7CisK
KyAgICBzdGF0aWMgYm9vbCBjYW5Vc2UoY29uc3QgQ1NTU2VsZWN0b3IqKTsKKworcHJpdmF0ZToK
KyAgICBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKCkgY29uc3Q7CisKKyAg
ICBjb25zdCBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKKyAgICBjb25zdCBFbGVtZW50KiBtX2Vs
ZW1lbnQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5k
ZXggNmVhNjcwNjgwZTY4N2QyMzMwMGY5MjRmMThhMGJiYWE4MDUwOTJlYy4uZjMyMTYyMTA5NTQ4
MWEyNDA4YzI4YmM3MjYyNDgxZDY1NjkwM2YxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCkBAIC01NzQsOCArNTc0LDggQEAgaW5saW5lIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihj
b25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2kKIAogICAgIFNl
bGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIocmVnaW9uRWxlbWVudC0+ZG9jdW1lbnQoKSk7
CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0g
Q1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7Ci0gICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQocywgcmVnaW9uRWxl
bWVudCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKLSAgICAgICAgaWYg
KHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckNoZWNraW5nQ29udGV4dCkpCisgICAgICAg
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7CisgICAgICAgIGlmIChzZWxl
Y3RvckNoZWNrZXIubWF0Y2gocywgcmVnaW9uRWxlbWVudCwgc2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAppbmRleCA5YjlhYWU0
NDhjZWI5NWQ1ODgyMzA0ZmJkZjAxZDc2YjI4YTM3MTIwLi5iZmMzYTg1ZTBlNTliNjkxMTRkNGVh
NjgzYWE3MmRiMDhhYTQxN2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2Vs
ZWN0b3JDb21waWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29t
cGlsZXIuY3BwCkBAIC0xNTcsOCArMTU3LDggQEAgc3RydWN0IFNlbGVjdG9yRnJhZ21lbnQgewog
ICAgIHVuc2lnbmVkIHRhZ05hbWVOb3RNYXRjaGVkQmFja3RyYWNraW5nU3RhcnRXaWR0aEZyb21J
bmRpcmVjdEFkamFjZW50OwogICAgIHVuc2lnbmVkIHdpZHRoRnJvbUluZGlyZWN0QWRqYWNlbnQ7
CiAKLSAgICBGdW5jdGlvblR5cGUgYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250
ZXh0KGJvb2wgKCptYXRjaGVyKShjb25zdCBDaGVja2luZ0NvbnRleHQmKSk7Ci0gICAgCisgICAg
RnVuY3Rpb25UeXBlIGFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChib29s
ICgqbWF0Y2hlcikoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmKSk7CisK
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiB0YWdOYW1lOwogICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyogaWQ7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBsYW5nRmlsdGVyOwpAQCAtMzY0LDcgKzM2
NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVt
ZW50KFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNvCiAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGF0
aW9uVG9SaWdodEZyYWdtZW50ID09IEZyYWdtZW50UmVsYXRpb246OlJpZ2h0bW9zdCAmJiBmcmFn
bWVudC5wb3NpdGlvbkluUm9vdEZyYWdtZW50cyA9PSBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJh
Z21lbnRzOjpSaWdodG1vc3Q7CiB9CiAKLUZ1bmN0aW9uVHlwZSBTZWxlY3RvckZyYWdtZW50Ojph
cHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoYm9vbCAoKm1hdGNoZXIpKGNv
bnN0IENoZWNraW5nQ29udGV4dCYpKQorRnVuY3Rpb25UeXBlIFNlbGVjdG9yRnJhZ21lbnQ6OmFw
cGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChib29sICgqbWF0Y2hlcikoY29u
c3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQmKSkKIHsKICAgICB1bm9wdGltaXpl
ZFBzZXVkb0NsYXNzZXNXaXRoQ29udGV4dC5hcHBlbmQoSlNDOjpGdW5jdGlvblB0cihtYXRjaGVy
KSk7CiAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5n
Q29udGV4dDsKQEAgLTM3NywzMyArMzc3LDMzIEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBl
IGFkZFNjcm9sbGJhclBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0CiAg
ICAgICAgIGZyYWdtZW50LnVub3B0aW1pemVkUHNldWRvQ2xhc3Nlcy5hcHBlbmQoSlNDOjpGdW5j
dGlvblB0cihpc1dpbmRvd0luYWN0aXZlKSk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0Rpc2FibGVkOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzPENo
ZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNEaXNhYmxlZFBzZXVkb0Ns
YXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuYWJsZWQ6Ci0gICAgICAg
IHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQo
c2Nyb2xsYmFyTWF0Y2hlc0VuYWJsZWRQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAg
ICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29u
dGV4dChzY3JvbGxiYXJNYXRjaGVzRW5hYmxlZFBzZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0hvcml6b250YWw6Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5h
cHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0hv
cml6b250YWxQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZy
YWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJN
YXRjaGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1ZlcnRpY2FsOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNWZXJ0aWNhbFBzZXVkb0Ns
YXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNWZXJ0aWNhbFBz
ZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RlY3JlbWVudDoK
LSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRo
Q29udGV4dChzY3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250
ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0Ns
YXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0RlY3JlbWVudFBzZXVkb0NsYXNzKTsKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0luY3JlbWVudDoKLSAgICAgICAgcmV0dXJu
IGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxi
YXJNYXRjaGVzSW5jcmVtZW50UHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAg
IHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQo
c2Nyb2xsYmFyTWF0Y2hlc0luY3JlbWVudFBzZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc1N0YXJ0OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNTdGFydFBzZXVk
b0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5k
VW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNTdGFydFBz
ZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuZDoKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4
dChzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAg
ICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRl
eHQoc2Nyb2xsYmFyTWF0Y2hlc0VuZFBzZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc0RvdWJsZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVu
ZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRG91Ymxl
QnV0dG9uUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFn
bWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0
Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1NpbmdsZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0
aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzU2luZ2xlQnV0dG9u
UHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAgIHJldHVybiBmcmFnbWVudC5h
cHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc1Np
bmdsZUJ1dHRvblBzZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c05vQnV0dG9uOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNOb0J1dHRvblBzZXVkb0NsYXNzPENo
ZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNOb0J1dHRvblBzZXVkb0Ns
YXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Nvcm5lclByZXNlbnQ6Ci0g
ICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENv
bnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0Nvcm5lclByZXNlbnRQc2V1ZG9DbGFzczxDaGVja2luZ0Nv
bnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRv
Q2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KTsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZToKLSAgICAgICAgcmV0
dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3Jv
bGxiYXJNYXRjaGVzQWN0aXZlUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAg
IHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQo
c2Nyb2xsYmFyTWF0Y2hlc0FjdGl2ZVBzZXVkb0NsYXNzKTsKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc0hvdmVyOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNIb3ZlclBzZXVkb0Ns
YXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5v
cHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNIb3ZlclBzZXVk
b0NsYXNzKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5u
b3RNYXRjaEFueXRoaW5nOwogICAgIH0KQEAgLTE2MDEsNyArMTYwMSw3IEBAIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjphZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNvbnRleHQoQXNzZW1i
bGVyOjpSZWdpc3RlCiAgICAgQVNTRVJUKG1fc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29u
dGV4dDo6UXVlcnlTZWxlY3Rvcik7CiAKICAgICBMb2NhbFJlZ2lzdGVyIGNoaWxkU3R5bGUobV9y
ZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgbV9hc3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFk
ZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoQ2hlY2tpbmdDb250ZXh0LCBl
bGVtZW50U3R5bGUpKSwgY2hpbGRTdHlsZSk7CisgICAgbV9hc3NlbWJsZXIubG9hZFB0cihBc3Nl
bWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQsIGVsZW1lbnRTdHlsZSkpLCBjaGlsZFN0eWxlKTsKIAog
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayBpbnRvIGRvaW5nIHNvbWV0aGluZyBzbWFydCBp
biBNYWNyb0Fzc2VtYmxlciBpbnN0ZWFkLgogICAgIEFzc2VtYmxlcjo6QWRkcmVzcyBmbGFnQWRk
cmVzcyhjaGlsZFN0eWxlLCBSZW5kZXJTdHlsZTo6bm9uaW5oZXJpdGVkRmxhZ3NNZW1vcnlPZmZz
ZXQoKSArIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6ZmxhZ3NNZW1vcnlPZmZzZXQo
KSk7CkBAIC0xNjU3LDcgKzE2NTcsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bG9h
ZENoZWNraW5nQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDbwogewogICAg
IC8vIERlcGVuZCBvbiB0aGUgc3BlY2lmaWVkIHJlc29sdmluZyBtb2RlIGFuZCBvdXIgY3VycmVu
dCBtb2RlLCBicmFuY2guCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoU2VsZWN0b3JDaGVja2Vy
OjpNb2RlKSA9PSAxLCAiV2UgZ2VuZXJhdGUgYSBieXRlIGxvYWQvdGVzdCBmb3IgdGhlIFNlbGVj
dG9yQ2hlY2tlcjo6TW9kZS4iKTsKLSAgICByZXR1cm4gbV9hc3NlbWJsZXIuYnJhbmNoOChjb25k
aXRpb24sIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRP
RihDaGVja2luZ0NvbnRleHQsIHJlc29sdmluZ01vZGUpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8U2VsZWN0b3JDaGVja2VyOjpNb2Rl
Pjo6dHlwZT4obW9kZSkpKTsKKyAgICByZXR1cm4gbV9hc3NlbWJsZXIuYnJhbmNoOChjb25kaXRp
b24sIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihT
ZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgcmVzb2x2aW5nTW9kZSkpLCBBc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxTZWxlY3Rv
ckNoZWNrZXI6Ok1vZGU+Ojp0eXBlPihtb2RlKSkpOwogCiB9CiAKQEAgLTI0MzQsNyArMjQzNCw3
IEBAIHN0YXRpYyBib29sIGVsZW1lbnRJc0FjdGl2ZShFbGVtZW50KiBlbGVtZW50KQogICAgIHJl
dHVybiBlbGVtZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNl
UHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQWN0aXZlKTsKIH0K
IAotc3RhdGljIGJvb2wgZWxlbWVudElzQWN0aXZlRm9yU3R5bGVSZXNvbHV0aW9uKEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IENoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250ZXh0KQorc3RhdGlj
IGJvb2wgZWxlbWVudElzQWN0aXZlRm9yU3R5bGVSZXNvbHV0aW9uKEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQp
CiB7CiAgICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNo
ZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICBlbGVtZW50LT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlBY3RpdmUoKTsKQEAgLTI1MDUsNyArMjUwNSw3IEBAIHN0YXRpYyB2b2lkIHNl
dEVsZW1lbnRTdHlsZUlzQWZmZWN0ZWRCeUVtcHR5KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgZWxl
bWVudC0+c2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0RWxl
bWVudFN0eWxlRnJvbUNvbnRleHRJc0FmZmVjdGVkQnlFbXB0eUFuZFVwZGF0ZVJlbmRlclN0eWxl
SWZOZWNlc3NhcnkoQ2hlY2tpbmdDb250ZXh0KiBjb250ZXh0LCBib29sIGlzRW1wdHkpCitzdGF0
aWMgdm9pZCBzZXRFbGVtZW50U3R5bGVGcm9tQ29udGV4dElzQWZmZWN0ZWRCeUVtcHR5QW5kVXBk
YXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeShTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCogY29udGV4dCwgYm9vbCBpc0VtcHR5KQogewogICAgIEFTU0VSVChjb250ZXh0LT5lbGVtZW50
U3R5bGUpOwogICAgIGNvbnRleHQtPmVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShpc0VtcHR5
KTsKQEAgLTI2MTMsNyArMjYxMyw3IEBAIHN0YXRpYyBib29sIGVsZW1lbnRJc0hvdmVyZWQoRWxl
bWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudC0+aG92ZXJlZCgpIHx8IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NIb3Zlcik7CiB9CiAKLXN0YXRpYyBib29sIGVsZW1lbnRJc0hvdmVyZWRGb3JT
dHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0KiBj
aGVja2luZ0NvbnRleHQpCitzdGF0aWMgYm9vbCBlbGVtZW50SXNIb3ZlcmVkRm9yU3R5bGVSZXNv
bHV0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0KiBjaGVja2luZ0NvbnRleHQpCiB7CiAgICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVz
b2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAg
ICAgICBlbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlIb3ZlcigpOwpAQCAtMjgwNCw3ICsy
ODA0LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzT25s
eUNoaWxkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWwKIH0KIAogI2lmIEVOQUJMRShDU1NfU0VM
RUNUT1JTX0xFVkVMNCkKLXN0YXRpYyBib29sIG1ha2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vz
c2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ2hl
Y2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCitzdGF0aWMgYm9vbCBtYWtlQ29udGV4dFN0
eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0Nv
bnRleHQpCiB7CiAgICAgaWYgKGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKmVsZW1lbnQp
KSB7CiAgICAgICAgIGlmIChjaGVja2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0
b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKQEAgLTI4MTQsNyArMjgxNCw3IEBAIHN0
YXRpYyBib29sIG1ha2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNl
aG9sZGVyU2hvd24oRWxlbWVudCoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29s
IG1ha2VFbGVtZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hv
d24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRl
eHQpCitzdGF0aWMgYm9vbCBtYWtlRWxlbWVudFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRUZXN0
SXNQbGFjZWhvbGRlclNob3duKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQpCiB7CiAgICAgaWYgKGlzSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQoKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChjaGVja2luZ0Nv
bnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdT
dHlsZSkgewpAQCAtMzEwOCwxMCArMzEwOCwxMCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkbwog
ICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIHJlcXVlc3RlZCBwc2V1ZG9JZCBpcyBub3QgTk9QU0VV
RE8sIHRoZSByZXF1ZXN0ZWQgcHNldWRvSWQgbmVlZCB0byBlcXVhbCB0byB0aGUgcHNldWRvIGVs
ZW1lbnQgb2YgdGhlIHJpZ2h0bW9zdCBmcmFnbWVudC4KICAgICBpZiAoZnJhZ21lbnRNYXRjaGVz
VGhlUmlnaHRtb3N0RWxlbWVudChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKSB7CiAgICAg
ICAgIGlmICghZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yKQotICAgICAgICAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4KEFzc2VtYmxlcjo6Tm90RXF1YWws
IEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihDaGVj
a2luZ0NvbnRleHQsIHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5PUFNFVURP
KSkpOworICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4
KEFzc2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQs
IE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwgcHNldWRv
SWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTk9QU0VVRE8pKSk7CiAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgQXNzZW1ibGVyOjpKdW1wIHNraXAgPSBtX2Fzc2VtYmxlci5icmFuY2g4
KEFzc2VtYmxlcjo6RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9C
SkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKE5PUFNFVURPKSk7Ci0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1f
YXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNz
KGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5nQ29udGV4dCwgcHNldWRv
SWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGZyYWdt
ZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkpKSk7CisgICAg
ICAgICAgICBBc3NlbWJsZXI6Okp1bXAgc2tpcCA9IG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1i
bGVyOjpFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09G
RlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihOT1BTRVVETykpOworICAgICAgICAgICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4KEFzc2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxl
cjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29udGV4dCwgcHNldWRvSWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
Q1NTU2VsZWN0b3I6OnBzZXVkb0lkKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNl
dWRvRWxlbWVudFR5cGUoKSkpKSk7CiAgICAgICAgICAgICBza2lwLmxpbmsoJm1fYXNzZW1ibGVy
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMzAsNyArMzEzMCw3IEBAIHZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1Njb3BlUm9vdChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsCiAKICAgICBMb2NhbFJlZ2lzdGVyIHNjb3BlKG1fcmVnaXN0ZXJBbGxvY2F0b3Ip
OwogICAgIGxvYWRDaGVja2luZ0NvbnRleHQoc2NvcGUpOwotICAgIG1fYXNzZW1ibGVyLmxvYWRQ
dHIoQXNzZW1ibGVyOjpBZGRyZXNzKHNjb3BlLCBPQkpFQ1RfT0ZGU0VUT0YoQ2hlY2tpbmdDb250
ZXh0LCBzY29wZSkpLCBzY29wZSk7CisgICAgbV9hc3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6
OkFkZHJlc3Moc2NvcGUsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCwgc2NvcGUpKSwgc2NvcGUpOwogCiAgICAgQXNzZW1ibGVyOjpKdW1wIHNjb3BlSXNO
b3ROdWxsID0gbV9hc3NlbWJsZXIuYnJhbmNoVGVzdFB0cihBc3NlbWJsZXI6Ok5vblplcm8sIHNj
b3BlKTsKIApAQCAtMzE2Miw3ICszMTYyLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlTWFya1BzZXVkb1N0eWxlRm9yUHNldWRvRWxlbWVudChBc3NlbWJsZXI6OkoKICAg
ICBBc3NlbWJsZXI6Okp1bXBMaXN0IHN1Y2Nlc3NDYXNlczsKIAogICAgIC8vIFdoZW4gdGhlIHJl
cXVlc3RlZCBwc2V1ZG9JZCBpc24ndCBOT1BTRVVETywgdGhlcmUncyBubyBuZWVkIHRvIG1hcmsg
dGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlLgotICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQobV9hc3Nl
bWJsZXIuYnJhbmNoOChBc3NlbWJsZXI6Ok5vdEVxdWFsLCBBc3NlbWJsZXI6OkFkZHJlc3MoY2hl
Y2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoQ2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkp
LCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihOT1BTRVVETykpKTsKKyAgICBzdWNjZXNzQ2FzZXMu
YXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVy
OjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihO
T1BTRVVETykpKTsKIAogICAgIC8vIFdoZW4gcmVzb2x2aW5nIG1vZGUgaXMgQ29sbGVjdGluZ1J1
bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMsIHRoZXJlJ3Mgbm8gbmVlZCB0byBtYXJr
IHRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZS4KICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKGJyYW5j
aE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2luZ0NvbnRleHQoQXNzZW1ibGVyOjpFcXVhbCwgU2Vs
ZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9F
bGVtZW50cywgY2hlY2tpbmdDb250ZXh0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3NqaXQvU2VsZWN0b3JDb21waWxlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuaAppbmRleCBjMGNhNTMyZDUwMzMzMTFmZmY2N2QxNjEwNDFjZjQ1NGUxNGJmMjEw
Li5iMTA3YzQzNDI3ZmQ0OTdmMjA5OTE0YjYyYmRjMmQ4N2JkNDM4ZmU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgKQEAgLTY5LDI0ICs2OSw2IEBAIGNsYXNzIFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgewogCiBuYW1lc3BhY2UgU2VsZWN0b3JDb21waWxlciB7
CiAKLXN0cnVjdCBDaGVja2luZ0NvbnRleHQgewotICAgIENoZWNraW5nQ29udGV4dChTZWxlY3Rv
ckNoZWNrZXI6Ok1vZGUgcmVzb2x2aW5nTW9kZSkKLSAgICAgICAgOiByZXNvbHZpbmdNb2RlKHJl
c29sdmluZ01vZGUpCi0gICAgICAgICwgZWxlbWVudFN0eWxlKG51bGxwdHIpCi0gICAgICAgICwg
cHNldWRvSWQoTk9QU0VVRE8pCi0gICAgICAgICwgc2Nyb2xsYmFyKG51bGxwdHIpCi0gICAgICAg
ICwgc2Nyb2xsYmFyUGFydChOb1BhcnQpCi0gICAgICAgICwgc2NvcGUobnVsbHB0cikKLSAgICB7
IH0KLQotICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlOwotICAgIFJlbmRl
clN0eWxlKiBlbGVtZW50U3R5bGU7Ci0gICAgUHNldWRvSWQgcHNldWRvSWQ7Ci0gICAgUmVuZGVy
U2Nyb2xsYmFyKiBzY3JvbGxiYXI7Ci0gICAgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0Owot
ICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwotfTsKLQogZW51bSBjbGFzcyBTZWxlY3Rv
ckNvbnRleHQgewogICAgIC8vIFJ1bGUgQ29sbGVjdG9yIG5lZWRzIGEgcmVzb2x2aW5nTW9kZSBh
bmQgY2FuIG1vZGlmeSB0aGUgdHJlZSBhcyBpdCBtYXRjaGVzLgogICAgIFJ1bGVDb2xsZWN0b3Is
CkBAIC05Niw3ICs3OCw3IEBAIGVudW0gY2xhc3MgU2VsZWN0b3JDb250ZXh0IHsKIH07CiAKIHR5
cGVkZWYgdW5zaWduZWQgKCpTaW1wbGVTZWxlY3RvckNoZWNrZXIpKEVsZW1lbnQqKTsKLXR5cGVk
ZWYgdW5zaWduZWQgKCpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KShFbGVtZW50
KiwgY29uc3QgQ2hlY2tpbmdDb250ZXh0Kik7Cit0eXBlZGVmIHVuc2lnbmVkICgqU2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dCkoRWxlbWVudCosIGNvbnN0IFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0Kik7CiBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGVT
ZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIEpTQzo6Vk0qLCBTZWxlY3RvckNvbnRleHQsIEpT
Qzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvdXRwdXRDb2RlUmVmKTsKIAogaW5saW5lIFNpbXBs
ZVNlbGVjdG9yQ2hlY2tlciBzaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbih2b2lkKiBleGVj
dXRhYmxlQWRkcmVzcywgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxhdGlvblN0YXR1
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRleCA1YzNmOWJjYTE3MWFkYzk1
OTViOGQxOWVkYzBkOTU5ZDg2OGFjZTY0Li42ZDM4Nzk5NzE1ZGU3YzQwZWNlNTMwZDE5NmUwNjBj
YWQzODk3MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCkBAIC0yOSw3ICsy
OSw3IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgotI2luY2x1ZGUgIlNl
bGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JRdWVyeUZhc3RQYXRo
LmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50
LmgiCiAKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIElkTWF0Y2hpbmdUeXBlIGZpbmRJZE1hdGNo
aW5nVHlwZShjb25zdCBDU1NTZWxlY3RvciYgZmlyc3RTZWxlY3RvcikKIAogICAgIG1fc2VsZWN0
b3JzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VsZWN0b3JDb3VudCk7CiAgICAgZm9yIChjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7
IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkKLSAgICAgICAgbV9z
ZWxlY3RvcnMudW5jaGVja2VkQXBwZW5kKFNlbGVjdG9yRGF0YShzZWxlY3RvciwgU2VsZWN0b3JD
aGVja2VyRmFzdFBhdGg6OmNhblVzZShzZWxlY3RvcikpKTsKKyAgICAgICAgbV9zZWxlY3RvcnMu
dW5jaGVja2VkQXBwZW5kKFNlbGVjdG9yRGF0YShzZWxlY3RvciwgU2VsZWN0b3JRdWVyeUZhc3RQ
YXRoOjpjYW5Vc2Uoc2VsZWN0b3IpKSk7CiAKICAgICBpZiAoc2VsZWN0b3JDb3VudCA9PSAxKSB7
CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciA9ICptX3NlbGVjdG9ycy5maXJz
dCgpLnNlbGVjdG9yOwpAQCAtMTE1LDE2ICsxMTUsMTYgQEAgc3RhdGljIElkTWF0Y2hpbmdUeXBl
IGZpbmRJZE1hdGNoaW5nVHlwZShjb25zdCBDU1NTZWxlY3RvciYgZmlyc3RTZWxlY3RvcikKIGlu
bGluZSBib29sIFNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yTWF0Y2hlcyhjb25zdCBTZWxlY3Rv
ckRhdGEmIHNlbGVjdG9yRGF0YSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQ29udGFpbmVyTm9k
ZSYgcm9vdE5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKHNlbGVjdG9yRGF0YS5pc0Zhc3RDaGVja2Fi
bGUgJiYgIWVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgU2VsZWN0b3JDaGVja2Vy
RmFzdFBhdGggc2VsZWN0b3JDaGVja2VyRmFzdFBhdGgoc2VsZWN0b3JEYXRhLnNlbGVjdG9yLCAm
ZWxlbWVudCk7Ci0gICAgICAgIGlmICghc2VsZWN0b3JDaGVja2VyRmFzdFBhdGgubWF0Y2hlc1Jp
Z2h0bW9zdFNlbGVjdG9yKFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpKQor
ICAgICAgICBTZWxlY3RvclF1ZXJ5RmFzdFBhdGggc2VsZWN0b3JRdWVyeUZhc3RQYXRoKHNlbGVj
dG9yRGF0YS5zZWxlY3RvciwgJmVsZW1lbnQpOworICAgICAgICBpZiAoIXNlbGVjdG9yUXVlcnlG
YXN0UGF0aC5tYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLm1hdGNoZXMoKTsK
KyAgICAgICAgcmV0dXJuIHNlbGVjdG9yUXVlcnlGYXN0UGF0aC5tYXRjaGVzKCk7CiAgICAgfQog
CiAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihlbGVtZW50LmRvY3VtZW50KCkp
OwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JD
aGVja2luZ0NvbnRleHQoc2VsZWN0b3JEYXRhLnNlbGVjdG9yLCAmZWxlbWVudCwgU2VsZWN0b3JD
aGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6
OlF1ZXJ5aW5nUnVsZXMpOwogICAgIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LnNjb3BlID0gcm9v
dE5vZGUuaXNEb2N1bWVudE5vZGUoKSA/IG51bGxwdHIgOiAmcm9vdE5vZGU7Ci0gICAgcmV0dXJu
IHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckNoZWNraW5nQ29udGV4dCk7CisgICAgcmV0
dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckRhdGEuc2VsZWN0b3IsICZlbGVtZW50
LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCk7CiB9CiAKIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6
bWF0Y2hlcyhFbGVtZW50JiB0YXJnZXRFbGVtZW50KSBjb25zdApAQCAtMzgwLDcgKzM4MCw3IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1w
bGVTZWxlY3RvckNoZWNrZXIoY29uc3QKIHRlbXBsYXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5
VHJhaXQ+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBp
bGVkU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dChjb25zdCBDb250YWluZXJOb2Rl
JiByb290Tm9kZSwgY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVj
a2VyLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUmIG91dHB1dCwgY29u
c3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEpIGNvbnN0CiB7Ci0gICAgU2VsZWN0b3JDb21w
aWxlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1v
ZGU6OlF1ZXJ5aW5nUnVsZXMpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0
IGNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwog
ICAgIGNoZWNraW5nQ29udGV4dC5zY29wZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBu
dWxscHRyIDogJnJvb3ROb2RlOwogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudERl
c2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHNlYXJjaFJvb3ROb2RlKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237852</attachid>
            <date>2014-09-09 13:46:58 -0700</date>
            <delta_ts>2014-09-12 11:32:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135255-20140910054654.patch</filename>
            <type>text/plain</type>
            <size>69283</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk1MTU0MzhkNWU2ZTE1
ZGZmNWIyMWJmZjczOTQ0ZjhhZmIwNzQ0OC4uNjNhNzA0ZmUwY2M5OGI0MGIyZjdkMmYwOWVjNWY5
OGE2OGUyOTU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDE0LTA5LTA5ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIE1lcmdlIENoZWNr
aW5nQ29udGV4dHMgZnJvbSBTZWxlY3RvckNvbXBpbGVyIGFuZCBTZWxlY3RvckNoZWNrZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI1NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIG1lcmdlIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgYW5k
IFNlbGVjdG9yQ29tcGlsZXI6OkNoZWNraW5nQ29udGV4dC4KKyAgICAgICAgV2UgZXhwb3NlIG9u
bHkgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQuIFRoYXQgaXMgdGhlIHNhbWUgdG8g
dGhlIG9sZCBTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQuCisKKyAgICAgICAgSW4g
U2VsZWN0b3JDaGVja2VyLmNwcCwgd2UgZGVmaW5lIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0V2l0aFN0YXR1cyBhbmQgdXNlIGl0IGludGVybmFsbHkuCisgICAgICAgIEFuZCB3ZSBt
b3ZlIFZpc2l0ZWRNYXRjaFR5cGUgZnJvbSBTZWxlY3RvckNoZWNrZXIuaCB0byBTZWxlY3RvckNo
ZWNrZXIuY3BwLgorCisgICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgaXMgYWxzbyBleHBsaWNpdGx5
IHVzZWQgYnkgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguIEhvd2V2ZXIsIFNlbGVjdG9yQ2hlY2tl
ckZhc3RQYXRoIGlzIG5vdworICAgICAgICB1c2VkIG9ubHkgZnJvbSBTZWxlY3RvclF1ZXJ5IChT
dHlsZSByZXNvbHV0aW9uIGFsZ29yaXRobSBubyBsb25nZXIgdXNlIGl0OiByMTcxMDU5KS4gU28g
dmlzaXRlZE1hdGNoVHlwZSBpcworICAgICAgICBhbHdheXMgVmlzaXRlZE1hdGNoRGlzYWJsZWQu
IEluIHRoaXMgcGF0Y2gsIHdlIHJlbmFtZSBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aCB0byBTZWxl
Y3RvclF1ZXJ5RmFzdFBhdGgsIGFuZAorICAgICAgICBkcm9wIFZpc2l0ZWRNYXRjaFR5cGUgcGFy
YW1ldGVyLgorCisgICAgICAgIEFuZCBub3cgc2luY2UgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyBpcyB0aGUgZGVyaXZlZCBjbGFzcyBvZiBDaGVja2luZ0NvbnRleHQsIHdlIGNhbiB1c2UKKyAg
ICAgICAgdGhlIHNhbWUgdGVzdCBmdW5jdGlvbnM7IHRlbXBsYXRlIHBhcmFtZXRlciBpcyBub3Qg
bmVjZXNzYXJ5LiBJdCByZWR1Y2VzIGNvZGUgc2l6ZS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBjc3MvQ1NTQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1h
dGNoZXMpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzOjpDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
bWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseSk6CisgICAg
ICAgIChXZWJDb3JlOjpjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MpOgorICAgICAgICAq
IGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0OjpDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dDo6U2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0
aC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmg6
IFJlbW92ZWQuCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaDoK
KyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNFbmFibGVkUHNldWRvQ2xhc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc0Rpc2FibGVkUHNldWRvQ2xhc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc0FjdGl2ZVBzZXVkb0NsYXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNIb3Jpem9udGFsUHNldWRvQ2xhc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc1ZlcnRpY2FsUHNldWRvQ2xhc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc0RlY3JlbWVudFBzZXVkb0NsYXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNJbmNyZW1lbnRQc2V1ZG9DbGFzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzU3RhcnRQc2V1ZG9DbGFzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3MpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0NsYXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcm9sbGJhck1hdGNoZXNTaW5nbGVCdXR0b25Qc2V1ZG9DbGFzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzTm9CdXR0b25Qc2V1ZG9DbGFzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJNYXRjaGVzQ29ybmVyUHJlc2VudFBzZXVkb0NsYXNz
KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Y2hl
Y2tSZWdpb25TZWxlY3Rvcik6CisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JGcmFnbWVudDo6
YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OmFkZFNjcm9sbGJhclBzZXVkb0NsYXNzVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmFk
ZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmJyYW5jaE9uUmVzb2x2aW5nTW9k
ZVdpdGhDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6ZWxlbWVudElzQWN0aXZlRm9yU3R5bGVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OnNldEVsZW1lbnRTdHlsZUZyb21Db250ZXh0SXNBZmZlY3RlZEJ5
RW1wdHlBbmRVcGRhdGVSZW5kZXJTdHlsZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OmVsZW1lbnRJc0hvdmVyZWRGb3JTdHlsZVJlc29sdXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6bWFrZUNvbnRleHRTdHlsZVVuaXF1
ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjptYWtlRWxlbWVudFN0eWxlVW5pcXVlSWZOZWNlc3NhcnlBbmRU
ZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50
RXF1YWxzVG9TZWxlY3RvclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1Njb3Bl
Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlTWFya1BzZXVkb1N0eWxlRm9yUHNldWRvRWxlbWVudCk6CisgICAg
ICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OkNoZWNraW5nQ29udGV4dDo6Q2hlY2tpbmdDb250ZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckRhdGFMaXN0OjpTZWxlY3RvckRhdGFMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yRGF0YUxpc3Q6OnNlbGVjdG9yTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ29tcGlsZWRTZWxlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0Ojpjb21waWxlU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZSk6CisgICAgICAgICogZG9tL1NlbGVjdG9y
UXVlcnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OlNlbGVjdG9yRGF0
YTo6U2VsZWN0b3JEYXRhKToKKwogMjAxNC0wOS0wOSAgVGFrZXNoaSBLdXJvc2F3YSAgPHRha2Vu
LnNwY0BnbWFpbC5jb20+CiAKICAgICAgICAgQVg6IEhUTUw1IGxhbmRtYXJrIChhbmQgcmVsYXRl
ZCkgZWxlbWVudHMgc2hvdWxkIG5vdCBiZSBpZ25vcmVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRl
eCBiMjRmMjBhYjJhMmJmMTNjYmNkMGYxZmE5YWVmMjY0NTE2YjQ2ZmNhLi5iNDZjZWMzM2YwODE0
MThhMjc1NjExOGYzYTFjNjVjMjhhNjVjNzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTMw
Miw3ICsxMzAyLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9TVkdDU1NQYXJzZXIu
Y3BwCiAgICAgY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCiAgICAgY3NzL1NlbGVjdG9yQ2hl
Y2tlci5jcHAKLSAgICBjc3MvU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwCiAgICAgY3NzL1Nl
bGVjdG9yRmlsdGVyLmNwcAogICAgIGNzcy9Tb3VyY2VTaXplTGlzdC5jcHAKICAgICBjc3MvU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1YmUzZDM3NGNjNmVjNzA0ZDg2ZjlhNzRj
MDc4NWRlZmMwOTU1OGRkLi40ZmRlNzBkZjJlMGQxNWQ3Y2E1OTE5Y2UwZGJkOWRlYjFiNzIxMzkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xNDEwLDggKzE0MTAsNiBAQAogCQk0MTlCQzJERjE2ODUzMjk5MDBENjRENkQgLyog
VmlzaXRlZExpbmtTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDE5QkMyREQxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCAq
LzsgfTsKIAkJNDFBM0Q1OEUxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUEz
RDU4QzEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCAqLzsgfTsK
IAkJNDFBM0Q1OEYxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFBM0Q1OEQxMDFD
MTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5oICovOyB9OwotCQk0MUI4Q0Q0
NTE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCOENENDMxNkQwNDU5MTAw
MEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcCAqLzsgfTsKLQkJNDFCOENENDYx
NkQwNDU5MTAwMEU4Q0MwIC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUI4Q0Q0NDE2RDA0NTkxMDAwRThD
QzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCAqLzsgfTsKIAkJNDFCRjcwMEMwRkU4NkY0
OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRjcwMEEwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxQkY3MDBGMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUJGNzAwRDBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwICovOyB9OwogCQk0MUJGNzAxMDBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxQkY3MDBFMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bC5oICovOyB9OwpAQCAtODQxMyw4ICs4NDExLDYgQEAKIAkJNDE5QkMyREQxNjg1MzI5OTAwRDY0
RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlzaXRlZExpbmtTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUEz
RDU4QzEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERlZGljYXRlZFdvcmtlclRocmVhZC5jcHA7
IHBhdGggPSB3b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxQTNENThEMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3Jr
ZXJUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGVkaWNhdGVkV29y
a2VyVGhyZWFkLmg7IHBhdGggPSB3b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MUI4Q0Q0MzE2RDA0NTkxMDAwRThDQzAgLyogU2Vs
ZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0MUI4Q0Q0NDE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JDaGVja2VyRmFzdFBh
dGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JDaGVja2VyRmFz
dFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCRjcwMEEwRkU4NkY0OTAw
NUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZXNzYWdlUG9ydENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDFCRjcwMEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmNwcDsgcGF0aCA9IGRlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUJGNzAwRTBGRTg2RjYxMDA1
RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaDsgcGF0aCA9IGRlZmF1
bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIyMDY2LDggKzIyMDYyLDYgQEAKIAkJCQlBNzlCQURBMDE2MUU3RjNGMDBDMkU2NTIg
LyogUnVsZVNldC5oICovLAogCQkJCUU0NEI0QkIxMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3Rv
ckNoZWNrZXIuY3BwICovLAogCQkJCUU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3Rv
ckNoZWNrZXIuaCAqLywKLQkJCQk0MUI4Q0Q0MzE2RDA0NTkxMDAwRThDQzAgLyogU2VsZWN0b3JD
aGVja2VyRmFzdFBhdGguY3BwICovLAotCQkJCTQxQjhDRDQ0MTZEMDQ1OTEwMDBFOENDMCAvKiBT
ZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oICovLAogCQkJCTQzMkQzRkU3MThBODY1ODQwMEQ3REMw
MyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmggKi8sCiAJCQkJNDE1MDcxNTUxNjg1
MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmNwcCAqLywKIAkJCQk0MTUwNzE1NjE2ODUw
NjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuaCAqLywKQEAgLTI1Nzk5LDcgKzI1NzkzLDYg
QEAKIAkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0QjRCQjQxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVj
dG9yQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFCOENENDYxNkQwNDU5MTAwMEU4Q0Mw
IC8qIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzJEM0ZF
ODE4QTg2NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjZCOTk5OTcxODA0RDU0MjAwRDAxMTIxIC8qIFNlbGVjdG9yQ29tcGls
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNTA3MTU4MTY4NTA2NzMwMEMzQzdCMyAvKiBTZWxl
Y3RvckZpbHRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTIyOCw3ICsyOTIyMSw2IEBACiAJCQkJ
QjJDM0RBMkUwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCRUE4MDdDODBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFNDRCNEJCMzE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JD
aGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxQjhDRDQ1MTZEMDQ1OTEwMDBFOENDMCAv
KiBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkI5OTk5
NjE4MDRENTQyMDBEMDExMjEgLyogU2VsZWN0b3JDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MTUwNzE1NzE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTQ1MzIyQUIxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnku
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxs
SW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcAppbmRleCBlYzA4
NTM2MzkzNTAzMjgwNTY4NjY5YjQxZWZlODFmNGUyMDZiMWVmLi5kNTM3MmU2MzY4OGM2NjEyYjBl
YzNmNDk5MjBhN2Q1Mjg0YWIwNTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
QWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKQEAg
LTgxLDcgKzgxLDYgQEAKICNpbmNsdWRlICJQYWdlUnVsZUNvbGxlY3Rvci5jcHAiCiAjaW5jbHVk
ZSAiUnVsZUZlYXR1cmUuY3BwIgogI2luY2x1ZGUgIlJ1bGVTZXQuY3BwIgotI2luY2x1ZGUgIlNl
bGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5jcHAi
CiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmNwcCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5
U2hvcnRoYW5kLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVs
ZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3Iu
Y3BwCmluZGV4IGRhZDRhMjI2MzExYTIyOWQzODYyMWRhZDQyNTcwZGI1MWEwZTEyMGEuLmU4ODIz
NGQxNTc0OGMxOTY2YTczMGE4ZDBlYTBmMDY2MzVlYjA5NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcApAQCAtMjk1LDIzICsyOTUsMjggQEAgaW5saW5l
IGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBy
dWxlRGF0YSkKICAgICAgICAgY29tcGlsZWRTZWxlY3RvckNoZWNrZXIgPSBydWxlRGF0YS5jb21w
aWxlZFNlbGVjdG9yQ29kZVJlZigpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0K
IAotICAgIGlmIChjb21waWxlZFNlbGVjdG9yQ2hlY2tlcikgewotICAgICAgICBpZiAocnVsZURh
dGEuY29tcGlsYXRpb25TdGF0dXMoKSA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1w
bGVTZWxlY3RvckNoZWNrZXIpIHsKLSAgICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzaW1w
bGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgcnVsZURh
dGEuY29tcGlsYXRpb25TdGF0dXMoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KCFzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCkgfHwgbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNl
dWRvSWQgPT0gTk9QU0VVRE8sICJXaGVuIG1hdGNoaW5nIHBzZXVkbyBlbGVtZW50cywgd2Ugc2hv
dWxkIG5ldmVyIGNvbXBpbGUgYSBzZWxlY3RvciBjaGVja2VyIHdpdGhvdXQgY29udGV4dCB1bmxl
c3MgaXQgY2Fubm90IG1hdGNoIGFueXRoaW5nLiIpOworICAgIGlmIChjb21waWxlZFNlbGVjdG9y
Q2hlY2tlciAmJiBydWxlRGF0YS5jb21waWxhdGlvblN0YXR1cygpID09IFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgeworICAgICAgICBTZWxlY3RvckNv
bXBpbGVyOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JD
b21waWxlcjo6c2ltcGxlU2VsZWN0b3JDaGVja2VyRnVuY3Rpb24oY29tcGlsZWRTZWxlY3RvckNo
ZWNrZXIsIHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKCkpOworICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKCFzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCkgfHwgbV9wc2V1ZG9TdHlsZVJl
cXVlc3QucHNldWRvSWQgPT0gTk9QU0VVRE8sICJXaGVuIG1hdGNoaW5nIHBzZXVkbyBlbGVtZW50
cywgd2Ugc2hvdWxkIG5ldmVyIGNvbXBpbGUgYSBzZWxlY3RvciBjaGVja2VyIHdpdGhvdXQgY29u
dGV4dCB1bmxlc3MgaXQgY2Fubm90IG1hdGNoIGFueXRoaW5nLiIpOwogI2lmIENTU19TRUxFQ1RP
Ul9KSVRfUFJPRklMSU5HCi0gICAgICAgICAgICBydWxlRGF0YS5jb21waWxlZFNlbGVjdG9yVXNl
ZCgpOworICAgICAgICBydWxlRGF0YS5jb21waWxlZFNlbGVjdG9yVXNlZCgpOwogI2VuZGlmCi0g
ICAgICAgICAgICByZXR1cm4gc2VsZWN0b3JDaGVja2VyKCZtX2VsZW1lbnQpOwotICAgICAgICB9
CisgICAgICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCk7CisgICAgfQorI2Vu
ZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQorCisgICAgU2VsZWN0b3JDaGVja2VyOjpD
aGVja2luZ0NvbnRleHQgY29udGV4dChtX21vZGUpOworICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
ID0gbV9zdHlsZTsKKyAgICBjb250ZXh0LnBzZXVkb0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Qu
cHNldWRvSWQ7CisgICAgY29udGV4dC5zY3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5z
Y3JvbGxiYXI7CisgICAgY29udGV4dC5zY3JvbGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVl
c3Quc2Nyb2xsYmFyUGFydDsKKworI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQorICAgIGlm
IChjb21waWxlZFNlbGVjdG9yQ2hlY2tlcikgewogICAgICAgICBBU1NFUlQocnVsZURhdGEuY29t
cGlsYXRpb25TdGF0dXMoKSA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKIAogICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVj
dG9yQ29tcGlsZXI6OnNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChj
b21waWxlZFNlbGVjdG9yQ2hlY2tlciwgcnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSk7Ci0g
ICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OkNoZWNraW5nQ29udGV4dCBjb250ZXh0KG1fbW9kZSk7
Ci0gICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gbV9zdHlsZTsKLSAgICAgICAgY29udGV4
dC5wc2V1ZG9JZCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkOwotICAgICAgICBjb250
ZXh0LnNjcm9sbGJhciA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhcjsKLSAgICAgICAg
Y29udGV4dC5zY3JvbGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyUGFy
dDsKKwogI2lmIENTU19TRUxFQ1RPUl9KSVRfUFJPRklMSU5HCiAgICAgICAgIHJ1bGVEYXRhLmNv
bXBpbGVkU2VsZWN0b3JVc2VkKCk7CiAjZW5kaWYKQEAgLTMyMSwxMiArMzI2LDcgQEAgaW5saW5l
IGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBy
dWxlRGF0YSkKIAogICAgIC8vIFNsb3cgcGF0aC4KICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0
b3JDaGVja2VyKG1fZWxlbWVudC5kb2N1bWVudCgpKTsKLSAgICBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwgJm1fZWxl
bWVudCwgbV9tb2RlKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IG1fc3R5bGU7Ci0gICAg
Y29udGV4dC5wc2V1ZG9JZCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkOwotICAgIGNv
bnRleHQuc2Nyb2xsYmFyID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyOwotICAgIGNv
bnRleHQuc2Nyb2xsYmFyUGFydCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhclBhcnQ7
Ci0gICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChjb250ZXh0KTsKKyAgICByZXR1cm4g
c2VsZWN0b3JDaGVja2VyLm1hdGNoKHJ1bGVEYXRhLnNlbGVjdG9yKCksICZtX2VsZW1lbnQsIGNv
bnRleHQpOwogfQogCiB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGNvbnN0IE1hdGNoUmVx
dWVzdCYgbWF0Y2hSZXF1ZXN0LCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggODJhM2FmNmI1MWYzOGFk
ZDk1ODFmZDc0MjNmNzE1YmRhOWVkN2FiMi4uZjNjNjMxM2I0YjY3NzNkMzViYWM2YTdlOTYyN2Vh
MzUxYWYyZTU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTU3
LDcgKzU3LDMzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Ci0gICAgCisKK2VudW0gY2xhc3MgVmlzaXRlZE1hdGNoVHlwZSA6IHVuc2lnbmVkIGNo
YXIgeworICAgIERpc2FibGVkLCBFbmFibGVkCit9OworCitzdHJ1Y3QgU2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIDogcHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hl
Y2tpbmdDb250ZXh0IHsKKyAgICAvLyBJbml0aWFsIHNlbGVjdG9yIGNvbnN0cnVjdG9yCisgICAg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVs
ZW1lbnQqIGVsZW1lbnQpCisgICAgICAgIDogU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQoY2hlY2tpbmdDb250ZXh0KQorICAgICAgICAsIHNlbGVjdG9yKHNlbGVjdG9yKQorICAgICAg
ICAsIGVsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHJlc29sdmlu
Z01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRlZE1h
dGNoVHlwZTo6RGlzYWJsZWQgOiBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkKQorICAgICAgICAs
IGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50KHNlbGVjdG9yKQorICAgICAgICAsIGluRnVuY3Rp
b25hbFBzZXVkb0NsYXNzKGZhbHNlKQorICAgICAgICAsIGhhc1Njcm9sbGJhclBzZXVkbyhmYWxz
ZSkKKyAgICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCisgICAgeyB9CisKKyAgICBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CisgICAgRWxlbWVudCogZWxlbWVudDsKKyAgICBW
aXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CisgICAgY29uc3QgQ1NTU2VsZWN0b3Iq
IGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50OworICAgIGJvb2wgaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3M7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG87CisgICAgYm9vbCBoYXNTZWxlY3Rp
b25Qc2V1ZG87Cit9OworCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdENoaWxkRWxlbWVudChj
b25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVybiAhRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOwpAQCAtMTQyLDggKzE2OCw5IEBAIHN0YXRpYyBpbmxp
bmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBRdWFsaWZpCiB7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVj
a2VyOjptYXRjaChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IENoZWNraW5nQ29udGV4dCYgcHJvdmlkZWRDb250ZXh0KSBjb25zdAogeworICAgIENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgY29udGV4dChwcm92aWRlZENvbnRleHQsIHNlbGVjdG9y
LCBlbGVtZW50KTsKICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IE5PUFNFVURPOwogICAgIGlmICht
YXRjaFJlY3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkKSAhPSBTZWxlY3Rvck1hdGNoZXMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NiwxMiArMjAzLDEyIEBAIGlubGluZSBzdGF0aWMg
Ym9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKQog
ICAgIHJldHVybiBkeW5hbWljUHNldWRvID09IFJFU0laRVI7CiB9CiAKLXN0YXRpYyBTZWxlY3Rv
ckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVu
dChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0
KQorc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjaGVj
a2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzJiBjb250ZXh0KQogewotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVja2luZ0NvbnRleHQgdXBkYXRlZENvbnRleHQoY29udGV4dCk7CisgICAgU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHVwZGF0ZWRDb250ZXh0KGNvbnRleHQpOwog
ICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhlIGZpcnN0IGxp
bmsuCiAgICAgaWYgKGNvbnRleHQuZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIHVwZGF0ZWRD
b250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERp
c2FibGVkOworICAgICAgICB1cGRhdGVkQ29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRl
ZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAgICAgdXBkYXRlZENvbnRleHQuZWxlbWVudCA9IGNvbnRl
eHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgIHJldHVybiB1cGRhdGVkQ29udGV4dDsK
IH0KQEAgLTE5Miw3ICsyMTksNyBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3QgUwogLy8gKiBTZWxl
Y3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50
IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZv
ciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAt
IHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2Yg
ZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZl
bHkoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lkJiBkeW5h
bWljUHNldWRvKSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6
Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4
dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CiB7CiAgICAgLy8gVGhlIGZpcnN0IHNl
bGVjdG9yIGhhcyB0byBtYXRjaC4KICAgICBpZiAoIWNoZWNrT25lKGNvbnRleHQpKQpAQCAtMjMx
LDcgKzI1OCw3IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTCiAgICAgaWYgKCFoaXN0b3J5U2Vs
ZWN0b3IpCiAgICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CiAKLSAgICBTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKKyAgICBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzIG5leHRDb250ZXh0KGNvbnRleHQpOwogICAgIG5leHRDb250ZXh0LnNlbGVjdG9y
ID0gaGlzdG9yeVNlbGVjdG9yOwogCiAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9
IE5PUFNFVURPOwpAQCAtMjQyLDcgKzI2OSw3IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTCiAK
ICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHRyeSB0byBtYXRj
aCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0b3JzLgogICAgICAgICBpZiAocmVsYXRpb24g
IT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNo
aWxkKQotICAgICAgICAgICAgbmV4dENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRN
YXRjaERpc2FibGVkOworICAgICAgICAgICAgbmV4dENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9
IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogCiAgICAgICAgIG5leHRDb250ZXh0LnBzZXVk
b0lkID0gTk9QU0VVRE87CiAgICAgfQpAQCAtNDA4LDcgKzQzNSw3IEBAIHN0YXRpYyBib29sIGFu
eUF0dHJpYnV0ZU1hdGNoZXMoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBjYW5NYXRjaEhv
dmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCYgY29udGV4dCkKK3N0YXRpYyBib29sIGNhbk1hdGNoSG92ZXJPckFjdGl2
ZUluUXVpcmtzTW9kZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMmIGNvbnRleHQpCiB7CiAgICAgLy8gRm9yIHF1aXJrcyBtb2RlLCBmb2xsb3cgdGhpczog
aHR0cDovL3F1aXJrcy5zcGVjLndoYXR3Zy5vcmcvI3RoZS06YWN0aXZlLWFuZC06aG92ZXItcXVp
cmsKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgYSBjb21wb3VuZCBzZWxlY3RvciAnc2VsZWN0b3In
IHRoYXQgbWF0Y2hlcyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBub3QgbWF0Y2ggZWxl
bWVudHMgdGhhdCB3b3VsZCBub3QgYWxzbyBtYXRjaCB0aGUgJzphbnktbGluaycgc2VsZWN0b3Iu
CkBAIC00NjMsNyArNDkwLDcgQEAgc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5R
dWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGUKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAog
ewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAgICBj
b25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CkBA
IC00OTksNyArNTI2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgaWYgKCFz
ZWxlY3Rvckxpc3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRleHQpOworICAgICAgICAg
ICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogICAgICAg
ICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAgICAgICAg
ICAgICBzdWJDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc2VsZWN0b3JMaXN0
LT5maXJzdCgpOwogICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0
b3JMaXN0LT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9y
ID0gc3ViQ29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CkBAIC01MDksNyArNTM2LDcg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGFyc2Vy
IGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBvY2N1cnMKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpICE9IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc05vdCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdCBiZXR3
ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBrbm93IHdoaWNo
IG9uZSBhcHBsaWVkIChvciBub3QpIHlldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkNv
bnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1Zpc2l0ZWQgfHwgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmsgJiYgc3ViQ29udGV4dC52aXNpdGVkTWF0Y2hU
eXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3Vi
Q29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzVmlzaXRlZCB8fCAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluayAmJiBzdWJDb250ZXh0LnZpc2l0ZWRNYXRj
aFR5cGUgPT0gVmlzaXRlZE1hdGNoVHlwZTo6RW5hYmxlZCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYg
KCFjaGVja09uZShzdWJDb250ZXh0KSkKQEAgLTY5OCw3ICs3MjUsNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NBbnk6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICAgICAg
c3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgICAgICAgICAg
ICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+
Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1Nl
bGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewpAQCAtNzE5LDcgKzc0Niw3
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5n
Q29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIC8vIEluc2lkZSBmdW5jdGlvbmFs
IHBzZXVkbyBjbGFzcyBleGNlcHQgZm9yIDpub3QsIDp2aXNpdGVkIG5ldmVyIG1hdGNoZXMuCiAg
ICAgICAgICAgICBpZiAoY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5r
KCkgJiYgY29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQ7Cisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgY29udGV4dC52aXNpdGVkTWF0
Y2hUeXBlID09IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQ7CiAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzRHJhZzoKICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmlu
Z01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC5lbGVtZW50U3R5bGUpCkBAIC04NDMsNyArODcwLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogICAgIH0KICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgZWxzZSBpZiAoc2VsZWN0b3It
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBzZXVk
b0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKLSAgICAg
ICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogCiAgICAgICAg
IFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAgY29uc3Qg
Q1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwpAQCAtODYw
LDcgKzg4Nyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29uc3QgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvcikgY29uc3QKIHsKICAgICBBU1NFUlQoc2VsZWN0b3ItPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oCmluZGV4IGY0MzkzZjMyMjYzYzEyNDA3ZDU0ODllYTVhOWUxYzA5ZjBiNjRlYmMuLjg4NmYz
NjNiOGFkOTNjMmViNjAzZmEzMWU5Mzk5YWMyMWRlMmE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmgKQEAgLTQ2LDQ3ICs0NiwzMyBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIg
ewogICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5
LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CiAK
IHB1YmxpYzoKLSAgICBlbnVtIFZpc2l0ZWRNYXRjaFR5cGUgeyBWaXNpdGVkTWF0Y2hEaXNhYmxl
ZCwgVmlzaXRlZE1hdGNoRW5hYmxlZCB9OwogICAgIGVudW0gY2xhc3MgTW9kZSA6IHVuc2lnbmVk
IGNoYXIgewogICAgICAgICBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxlcywgQ29s
bGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMsIFF1ZXJ5aW5nUnVsZXMK
ICAgICB9OwogCiAgICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50Jik7CiAKLSAgICBzdHJ1Y3Qg
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgewotICAgICAgICAvLyBJbml0aWFsIHNlbGVjdG9yIGNv
bnN0cnVjdG9yCi0gICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgTW9kZSByZXNvbHZpbmdNb2RlKQotICAg
ICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikKLSAgICAgICAgICAgICwgcmVzb2x2aW5nTW9k
ZShyZXNvbHZpbmdNb2RlKQotICAgICAgICAgICAgLCBlbGVtZW50KGVsZW1lbnQpCi0gICAgICAg
ICAgICAsIHNjb3BlKG51bGxwdHIpCi0gICAgICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVz
b2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRlZE1hdGNoRGlzYWJsZWQg
OiBWaXNpdGVkTWF0Y2hFbmFibGVkKQotICAgICAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVETykK
KyAgICBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0IHsKKyAgICAgICAgQ2hlY2tpbmdDb250ZXh0KFNl
bGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdNb2RlKQorICAgICAgICAgICAgOiByZXNvbHZp
bmdNb2RlKHJlc29sdmluZ01vZGUpCiAgICAgICAgICAgICAsIGVsZW1lbnRTdHlsZShudWxscHRy
KQorICAgICAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVETykKICAgICAgICAgICAgICwgc2Nyb2xs
YmFyKG51bGxwdHIpCi0gICAgICAgICAgICAsIGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50KHNl
bGVjdG9yKQogICAgICAgICAgICAgLCBzY3JvbGxiYXJQYXJ0KE5vUGFydCkKLSAgICAgICAgICAg
ICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MoZmFsc2UpCi0gICAgICAgICAgICAsIGhhc1Njcm9s
bGJhclBzZXVkbyhmYWxzZSkKLSAgICAgICAgICAgICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNl
KQorICAgICAgICAgICAgLCBzY29wZShudWxscHRyKQogICAgICAgICB7IH0KIAotICAgICAgICBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIE1vZGUgcmVzb2x2aW5nTW9kZTsK
LSAgICAgICAgRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGU7Ci0gICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZTsKLSAgICAg
ICAgUHNldWRvSWQgcHNldWRvSWQ7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNv
bHZpbmdNb2RlOwogICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOworICAgICAgICBQ
c2V1ZG9JZCBwc2V1ZG9JZDsKICAgICAgICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXI7Ci0g
ICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKICAg
ICAgICAgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0OwotICAgICAgICBib29sIGluRnVuY3Rp
b25hbFBzZXVkb0NsYXNzOwotICAgICAgICBib29sIGhhc1Njcm9sbGJhclBzZXVkbzsKLSAgICAg
ICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlOwogICAgIH07CiAKLSAgICBib29sIG1hdGNoKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0JikgY29uc3Q7CisgICAgc3RydWN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXM7CisK
KyAgICBib29sIG1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGNvbnN0IENoZWNr
aW5nQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgdGFnTWF0Y2hlcyhjb25zdCBF
bGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHN0YXRpYyBib29sIGlzQ29tbW9u
UHNldWRvQ2xhc3NTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwpAQCAtOTcsMTAgKzgzLDEw
IEBAIGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWlu
ZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqKTsKIAogcHJpdmF0ZToKLSAgICBNYXRj
aCBtYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRv
SWQmKSBjb25zdDsKLSAgICBib29sIGNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0JikgY29uc3Q7CisgICAgTWF0Y2ggbWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWQmKSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lKGNv
bnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmKSBjb25zdDsKIAotICAgIGJvb2wgY2hlY2tT
Y3JvbGxiYXJQc2V1ZG9DbGFzcyhjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0
IENTU1NlbGVjdG9yKikgY29uc3Q7CisgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBDU1NTZWxlY3RvciopIGNv
bnN0OwogCiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAgICAgYm9vbCBtX2RvY3VtZW50SXNI
VE1MOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQ
YXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjA1ZDRkNGUwODJmOWRkMjk5MzRmNDJi
NjA5MWY0MzY0MTgzM2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1
cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCIKLQotI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlN0
eWxlZEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVlKGNv
bnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopPgotaW5saW5lIGJvb2wgZmFzdENoZWNr
U2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVu
dComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBj
b25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQotewotICAg
IGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0g
ICAgICAgIGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKSkgewotICAgICAgICAgICAg
aWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50KQotICAg
ICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgICAgICAgICBlbHNl
IGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNl
bGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCBzZWxlY3Rvci0+cmVs
YXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOwotICAgICAgICAgICAgICAgIHRv
cENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOwotICAgICAgICAgICAgICAgIHRvcENoaWxk
T3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVj
dG9yKQotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7
Ci0gICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodG9wQ2hpbGRPclN1YnNl
bGVjdG9yKSB7Ci0gICAgICAgICAgICAvLyBDaGlsZCBvciBzdWJzZWxlY3RvciBjaGVjayBmYWls
ZWQuCi0gICAgICAgICAgICAvLyBJZiB0aGUgbWF0Y2ggZWxlbWVudCBpcyBudWxsLCB0b3BDaGls
ZE9yU3Vic2VsZWN0b3Igd2FzIGFsc28gdGhlIHZlcnkgdG9wbW9zdCBzZWxlY3RvciBhbmQgaGFk
IHRvIG1hdGNoCi0gICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3ZXJlIGNo
ZWNraW5nLgotICAgICAgICAgICAgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1l
bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgLy8gVGhlcmUg
bWF5IGJlIG90aGVyIG1hdGNoZXMgZG93biB0aGUgYW5jZXN0b3IgY2hhaW4uCi0gICAgICAgICAg
ICAvLyBSZXdpbmQgdG8gdGhlIHRvcG1vc3QgY2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5kIHRoZSBl
bGVtZW50IGl0IG1hdGNoZWQsIGNvbnRpbnVlIGNoZWNraW5nIGFuY2VzdG9ycy4KLSAgICAgICAg
ICAgIHNlbGVjdG9yID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yOwotICAgICAgICAgICAgZWxlbWVu
dCA9IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwot
ICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW5saW5l
IGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBl
bGVtZW50LT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkpOwotfQotCi1p
bmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVs
ZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpID09IHNlbGVjdG9yLT52YWx1ZSgp
LmltcGwoKTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBy
ZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVja0V4YWN0QXR0cmlidXRlKGVsZW1lbnQsIHNlbGVj
dG9yLCBzZWxlY3Rvci0+YXR0cmlidXRlKCksIHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci19
Ci0KLWlubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6
OnRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3ItPnRhZ1FOYW1lKCkpOwotfQotCi19Ci0KLVNl
bGVjdG9yQ2hlY2tlckZhc3RQYXRoOjpTZWxlY3RvckNoZWNrZXJGYXN0UGF0aChjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBtX3NlbGVj
dG9yKHNlbGVjdG9yKQotICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi17Ci19Ci0KLWJvb2wgU2Vs
ZWN0b3JDaGVja2VyRmFzdFBhdGg6Om1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcihTZWxlY3RvckNo
ZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkgY29uc3QKLXsKLSAgICBB
U1NFUlQoU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6OmNhblVzZShtX3NlbGVjdG9yKSk7Ci0KLSAg
ICBzd2l0Y2ggKG1fc2VsZWN0b3ItPm1fbWF0Y2gpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpU
YWc6Ci0gICAgICAgIHJldHVybiBjaGVja1RhZ1ZhbHVlKG1fZWxlbWVudCwgbV9zZWxlY3Rvcik7
Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xhc3M6Ci0gICAgICAgIHJldHVybiBjaGVja0NsYXNz
VmFsdWUobV9lbGVtZW50LCBtX3NlbGVjdG9yKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpJZDoK
LSAgICAgICAgcmV0dXJuIGNoZWNrSURWYWx1ZShtX2VsZW1lbnQsIG1fc2VsZWN0b3IpOwotICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoKLSAg
ICAgICAgcmV0dXJuIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQsIG1fc2VsZWN0
b3IpOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOgotICAgICAgICByZXR1cm4g
Y29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXModmlzaXRlZE1hdGNoVHlwZSk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aDo6bWF0Y2hlcygpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1hdGNoZXNSaWdodG1vc3RTZWxlY3RvcihTZWxlY3RvckNoZWNr
ZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpKTsKLSAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IgPSBtX3NlbGVjdG9yOwotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSBtX2VsZW1lbnQ7
Ci0KLSAgICBjb25zdCBDU1NTZWxlY3RvciogdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKLSAg
ICBjb25zdCBFbGVtZW50KiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQgPSAwOwot
ICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2Vs
ZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICB0
b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLQotICAgIGlmIChzZWxlY3Rvci0+cmVs
YXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCi0gICAgICAgIGVsZW1lbnQgPSBl
bGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0KLSAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCk7Ci0KLSAgICAvLyBXZSBrbm93IHRoaXMgY29tcG91bmQgc2VsZWN0b3IgaGFzIGRl
c2NlbmRhbnQsIGNoaWxkIGFuZCBzdWJzZWxlY3RvciBjb21iaW5hdG9ycyBvbmx5IGFuZCBhbGwg
Y29tcG9uZW50cyBhcmUgc2ltcGxlLgotICAgIHdoaWxlIChzZWxlY3RvcikgewotICAgICAgICBz
d2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNs
YXNzOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0NsYXNz
VmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxk
T3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAg
ICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0lEVmFsdWU+KHNlbGVj
dG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rv
ck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlRhZzoKLSAgICAgICAgICAgIGlm
ICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tUYWdWYWx1ZT4oc2VsZWN0b3IsIGVsZW1l
bnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVt
ZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpFeGFjdDoKLSAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tF
eGFjdEF0dHJpYnV0ZVZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVj
dG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVSZWxhdGlv
bihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24pCi17Ci0gICAgcmV0dXJuIHJlbGF0aW9u
ID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50IHx8IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpD
aGlsZCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVNYXRjaChjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IpCi17Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpTZXQp
IHsKLSAgICAgICAgLy8gU3R5bGUgYXR0cmlidXRlIGlzIGdlbmVyYXRlZCBsYXppbHkgYnV0IHRo
ZSBmYXN0IHBhdGggZG9lc24ndCB0cmlnZ2VyIGl0LgotICAgICAgICAvLyBEaXNhbGxvdyB0aGVt
IGhlcmUgcmF0aGVyIHRoYW4gbWFraW5nIHRoZSBmYXN0IHBhdGggbW9yZSBicmFuY2h5LgotICAg
ICAgICByZXR1cm4gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0cjsKLSAgICB9Ci0g
ICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKLSAgICAgICAg
cmV0dXJuIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHIgJiYgSFRNTERvY3VtZW50
Ojppc0Nhc2VTZW5zaXRpdmVBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKTsKLSAgICBy
ZXR1cm4gc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyB8fCBzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OkNsYXNzOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmln
aHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmICgh
aXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oc2VsZWN0b3ItPnJlbGF0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzRmFzdENoZWNrYWJsZU1hdGNoKHNlbGVjdG9yKSB8
fCBTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3Rvcik7
Ci19Ci0KLWJvb2wgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGg6OmNhblVzZShjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSaWdodG1vc3RTZWxl
Y3RvcihzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHNlbGVjdG9y
ID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3It
PnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKHNl
bGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNlbGVjdG9yQ2hlY2tl
ckZhc3RQYXRoOjpjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhTZWxlY3RvckNoZWNr
ZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkgY29uc3QKLXsKLSAgICBBU1NF
UlQoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IobV9zZWxlY3Rv
cikpOwotICAgIHN3aXRjaCAobV9zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkpIHsKLSAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbms6Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NBbnlMaW5rOgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5pc0xpbmsoKTsK
LSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6Ci0gICAgICAgIHJldHVy
biBtX2VsZW1lbnQtPmlzTGluaygpICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVj
a2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzRm9jdXM6Ci0gICAgICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1Bz
ZXVkb0NsYXNzKG1fZWxlbWVudCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGYxZDEwNDU1NWYxNmQwYzNiMjFkMzcxN2UzN2NmOWFmNTc4MTJiNzcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
Ci0gKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBj
YXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtz
ICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3Yg
PGFwQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQotICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoX2gK
LSNkZWZpbmUgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGhfaAotCi0jaW5jbHVkZSAiQ1NTU2VsZWN0
b3IuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aCB7Ci1wdWJsaWM6Ci0gICAgU2VsZWN0
b3JDaGVja2VyRmFzdFBhdGgoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7Ci0K
LSAgICBib29sIG1hdGNoZXMoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXNSaWdodG1vc3RTZWxl
Y3RvcihTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0OwotICAgIGJvb2wg
bWF0Y2hlc1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMg
Ym9vbCBjYW5Vc2UoY29uc3QgQ1NTU2VsZWN0b3IqKTsKLQotcHJpdmF0ZToKLSAgICBib29sIGNv
bW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1h
dGNoVHlwZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKLSAg
ICBjb25zdCBFbGVtZW50KiBtX2VsZW1lbnQ7Ci19OwotCi1pbmxpbmUgYm9vbCBTZWxlY3RvckNo
ZWNrZXJGYXN0UGF0aDo6bWF0Y2hlc1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QK
LXsKLSAgICBpZiAobV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QgfHwg
bV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KQotICAgICAgICByZXR1cm4g
U2VsZWN0b3JDaGVja2VyOjpjaGVja0V4YWN0QXR0cmlidXRlKG1fZWxlbWVudCwgbV9zZWxlY3Rv
ciwgbV9zZWxlY3Rvci0+YXR0cmlidXRlKCksIG1fc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsK
LSAgICBBU1NFUlQoIW1fc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAppbmRleCBjZDcwYmJmYjM3NTRkODUxZWI0NzA4
NzcwMGNjMmEyMDEzZDU5M2E0Li4xZGIxOWVjZDYxYTJmZDZjNDMyZTg5NDZlOGM1YjM2NGU3MjEw
NjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1
bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVu
Y3Rpb25zLmgKQEAgLTE2OCwyMSArMTY4LDE4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRB
cHBlYXJJbmRldGVybWluYXRlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJu
IGVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKTsKIH0KLSAgICAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRj
aGVzRW5hYmxlZFBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250ZXh0KQorCitBTFdB
WVNfSU5MSU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0VuYWJsZWRQc2V1ZG9DbGFzcyhjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1cm4g
Y29udGV4dC5zY3JvbGxiYXIgJiYgY29udGV4dC5zY3JvbGxiYXItPmVuYWJsZWQoKTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIENvbnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBib29sIHNjcm9s
bGJhck1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250ZXh0
KQorQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNEaXNhYmxlZFBzZXVkb0NsYXNz
KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAg
IHJldHVybiBjb250ZXh0LnNjcm9sbGJhciAmJiAhY29udGV4dC5zY3JvbGxiYXItPmVuYWJsZWQo
KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBi
b29sIHNjcm9sbGJhck1hdGNoZXNIb3ZlclBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBj
b250ZXh0KQorQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNIb3ZlclBzZXVkb0Ns
YXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIGlmICghY29udGV4dC5zY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5
NCw4ICsxOTEsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNl
dWRvQ2xhc3MoY29uc3QgQ29udGV4dFR5cGUmIGNvbnRleHQpCiAgICAgcmV0dXJuIGNvbnRleHQu
c2Nyb2xsYmFyUGFydCA9PSBob3ZlcmVkUGFydDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENv
bnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1
ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlwZSYgY29udGV4dCkKK0FMV0FZU19JTkxJTkUgYm9vbCBz
Y3JvbGxiYXJNYXRjaGVzQWN0aXZlUHNldWRvQ2xhc3MoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpD
aGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0LnNjcm9sbGJhcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA2LDQ1ICsyMDIsMzggQEAgQUxXQVlTX0lOTElO
RSBib29sIHNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlw
ZSYgY29udGV4dCkKICAgICAgICAgcmV0dXJuIHByZXNzZWRQYXJ0ID09IEJhY2tUcmFja1BhcnQg
fHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBUaHVt
YlBhcnQ7CiAgICAgcmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9PSBwcmVzc2VkUGFydDsK
IH0KLSAgICAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFMV0FZU19JTkxJTkUg
Ym9vbCBzY3JvbGxiYXJNYXRjaGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRU
eXBlJiBjb250ZXh0KQorCitBTFdBWVNfSU5MSU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0hvcml6
b250YWxQc2V1ZG9DbGFzcyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYg
Y29udGV4dCkKIHsKICAgICByZXR1cm4gY29udGV4dC5zY3JvbGxiYXIgJiYgY29udGV4dC5zY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIENvbnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1h
dGNoZXNWZXJ0aWNhbFBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250ZXh0KQorQUxX
QVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNWZXJ0aWNhbFBzZXVkb0NsYXNzKGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVy
biBjb250ZXh0LnNjcm9sbGJhciAmJiBjb250ZXh0LnNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbFNjcm9sbGJhcjsKIH0KLSAgICAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0
VHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNldWRv
Q2xhc3MoY29uc3QgQ29udGV4dFR5cGUmIGNvbnRleHQpCisKK0FMV0FZU19JTkxJTkUgYm9vbCBz
Y3JvbGxiYXJNYXRjaGVzRGVjcmVtZW50UHNldWRvQ2xhc3MoY29uc3QgU2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQuc2Nyb2xs
YmFyUGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9
PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBjb250ZXh0LnNjcm9sbGJhclBhcnQgPT0gQmFja1RyYWNr
UGFydDsKIH0KLSAgICAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFMV0FZU19J
TkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzSW5jcmVtZW50UHNldWRvQ2xhc3MoY29uc3QgQ29u
dGV4dFR5cGUmIGNvbnRleHQpCisKK0FMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVz
SW5jcmVtZW50UHNldWRvQ2xhc3MoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9PSBGb3J3
YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9PSBGb3J3YXJkQnV0
dG9uRW5kUGFydCB8fCBjb250ZXh0LnNjcm9sbGJhclBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydDsK
IH0KLSAgICAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFMV0FZU19JTkxJTkUg
Ym9vbCBzY3JvbGxiYXJNYXRjaGVzU3RhcnRQc2V1ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlwZSYg
Y29udGV4dCkKKworQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNTdGFydFBzZXVk
b0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQog
ewogICAgIHJldHVybiBjb250ZXh0LnNjcm9sbGJhclBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFy
dCB8fCBjb250ZXh0LnNjcm9sbGJhclBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBj
b250ZXh0LnNjcm9sbGJhclBhcnQgPT0gQmFja1RyYWNrUGFydDsKIH0KLSAgICAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBDb250ZXh0VHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRj
aGVzRW5kUHNldWRvQ2xhc3MoY29uc3QgQ29udGV4dFR5cGUmIGNvbnRleHQpCisKK0FMV0FZU19J
TkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzRW5kUHNldWRvQ2xhc3MoY29uc3QgU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQu
c2Nyb2xsYmFyUGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBjb250ZXh0LnNjcm9sbGJhclBh
cnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgY29udGV4dC5zY3JvbGxiYXJQYXJ0ID09IEZv
cndhcmRUcmFja1BhcnQ7CiB9Ci0gICAgCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGV4dFR5cGU+
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0Ns
YXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250ZXh0KQorCitBTFdBWVNfSU5MSU5FIGJvb2wgc2Ny
b2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tl
cjo6Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dC5zY3JvbGxi
YXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NSw5ICsyNDQsOCBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgc2Nyb2xsYmFyTWF0Y2hlc0RvdWJsZUJ1dHRvblBzZXVkb0NsYXNzKGNvbnN0IENv
bnRleHRUeXBlJiBjbwogICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxi
YXJCdXR0b25zRG91YmxlRW5kIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9u
c0RvdWJsZUJvdGg7CiAgICAgcmV0dXJuIGZhbHNlOwogfQotICAgIAotdGVtcGxhdGUgPHR5cGVu
YW1lIENvbnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNTaW5n
bGVCdXR0b25Qc2V1ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlwZSYgY29udGV4dCkKKworQUxXQVlT
X0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNTaW5nbGVCdXR0b25Qc2V1ZG9DbGFzcyhjb25z
dCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAo
IWNvbnRleHQuc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjYsOSArMjU0
LDggQEAgQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNTaW5nbGVCdXR0b25Qc2V1
ZG9DbGFzcyhjb25zdCBDb250ZXh0VHlwZSYgY28KICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFj
ZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc1NpbmdsZTsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0g
ICAgCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGV4dFR5cGU+Ci1BTFdBWVNfSU5MSU5FIGJvb2wg
c2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNldWRvQ2xhc3MoY29uc3QgQ29udGV4dFR5cGUmIGNv
bnRleHQpCisKK0FMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzTm9CdXR0b25Qc2V1
ZG9DbGFzcyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY29udGV4dCkK
IHsKICAgICBpZiAoIWNvbnRleHQuc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yNzksOSArMjY2LDggQEAgQUxXQVlTX0lOTElORSBib29sIHNjcm9sbGJhck1hdGNoZXNOb0J1
dHRvblBzZXVkb0NsYXNzKGNvbnN0IENvbnRleHRUeXBlJiBjb250ZXgKICAgICAgICAgcmV0dXJu
IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNl
bWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQ7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQotICAgIAotdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRleHRUeXBlPgotQUxXQVlTX0lOTElORSBi
b29sIHNjcm9sbGJhck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3MoY29uc3QgQ29udGV4
dFR5cGUmIGNvbnRleHQpCisKK0FMV0FZU19JTkxJTkUgYm9vbCBzY3JvbGxiYXJNYXRjaGVzQ29y
bmVyUHJlc2VudFBzZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250
ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBjb250ZXh0LnNjcm9sbGJhciAmJiBjb250ZXh0
LnNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBjN2VlN2FiNGJkYjhhZmQyNDFhY2Iz
YjkxNDU5ZjA4MjFiZWVhMjJhLi5jNTM4NzQxY2RlZjZkNjVlMGEzZWQ3ZDNlNDRmMzRmY2IxZGY5
Mjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTU3MSw4ICs1NzEsOCBAQCBp
bmxpbmUgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25T
ZWxlY3RvciwgRWxlbWVudCogcmVnaQogCiAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hl
Y2tlcihyZWdpb25FbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICBmb3IgKGNvbnN0IENTU1NlbGVj
dG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykp
IHsKLSAgICAgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzZWxl
Y3RvckNoZWNraW5nQ29udGV4dChzLCByZWdpb25FbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6Ok1v
ZGU6OlF1ZXJ5aW5nUnVsZXMpOwotICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLm1hdGNoKHNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0KSkKKyAgICAgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpR
dWVyeWluZ1J1bGVzKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzLCByZWdp
b25FbGVtZW50LCBzZWxlY3RvckNoZWNraW5nQ29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1Nl
bGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IDZhNmU2ZWY5ZGU0ZjdhN2U2YzIwY2RiNzZlYTY5NDNi
MjBhYjYzNzIuLjk5YTUwMzdmNDU2MDU2Nzk5ZjZjMTJhMTViZjJlN2Y1MWU1YzI3ZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTE1Nyw4ICsxNTcs
OCBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7CiAgICAgdW5zaWduZWQgdGFnTmFtZU5vdE1h
dGNoZWRCYWNrdHJhY2tpbmdTdGFydFdpZHRoRnJvbUluZGlyZWN0QWRqYWNlbnQ7CiAgICAgdW5z
aWduZWQgd2lkdGhGcm9tSW5kaXJlY3RBZGphY2VudDsKIAotICAgIEZ1bmN0aW9uVHlwZSBhcHBl
bmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoYm9vbCAoKm1hdGNoZXIpKGNvbnN0
IENoZWNraW5nQ29udGV4dCYpKTsKLSAgICAKKyAgICBGdW5jdGlvblR5cGUgYXBwZW5kVW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KGJvb2wgKCptYXRjaGVyKShjb25zdCBTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYpKTsKKwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUq
IHRhZ05hbWU7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBpZDsKICAgICBjb25zdCBBdG9taWNT
dHJpbmcqIGxhbmdGaWx0ZXI7CkBAIC0zNjMsNyArMzYzLDcgQEAgc3RhdGljIGlubGluZSBib29s
IGZyYWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9zdEVsZW1lbnQoU2VsZWN0b3JDb250ZXh0IHNlbGVj
dG9yQ28KICAgICByZXR1cm4gZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQgPT0gRnJh
Z21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0ICYmIGZyYWdtZW50LnBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzID09IEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHM6OlJpZ2h0bW9zdDsKIH0KIAot
RnVuY3Rpb25UeXBlIFNlbGVjdG9yRnJhZ21lbnQ6OmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xh
c3NXaXRoQ29udGV4dChib29sICgqbWF0Y2hlcikoY29uc3QgQ2hlY2tpbmdDb250ZXh0JikpCitG
dW5jdGlvblR5cGUgU2VsZWN0b3JGcmFnbWVudDo6YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFz
c1dpdGhDb250ZXh0KGJvb2wgKCptYXRjaGVyKShjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dCYpKQogewogICAgIHVub3B0aW1pemVkUHNldWRvQ2xhc3Nlc1dpdGhDb250ZXh0
LmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKG1hdGNoZXIpKTsKICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0OwpAQCAtMzc2LDMzICszNzYs
MzMgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NU
eXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3QKICAgICAgICAgZnJhZ21lbnQudW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc2VzLmFwcGVuZChKU0M6OkZ1bmN0aW9uUHRyKGlzV2luZG93SW5hY3RpdmUp
KTsKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRGlzYWJsZWQ6Ci0gICAgICAgIHJldHVy
biBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xs
YmFyTWF0Y2hlc0Rpc2FibGVkUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAg
IHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQo
c2Nyb2xsYmFyTWF0Y2hlc0Rpc2FibGVkUHNldWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzRW5hYmxlZDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVu
b3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRW5hYmxlZFBz
ZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBw
ZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNFbmFi
bGVkUHNldWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9yaXpv
bnRhbDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xh
c3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzSG9yaXpvbnRhbFBzZXVkb0NsYXNzPENoZWNr
aW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNIb3Jpem9udGFsUHNldWRvQ2xh
c3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmVydGljYWw6Ci0gICAgICAg
IHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQo
c2Nyb2xsYmFyTWF0Y2hlc1ZlcnRpY2FsUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7Cisg
ICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENv
bnRleHQoc2Nyb2xsYmFyTWF0Y2hlc1ZlcnRpY2FsUHNldWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzRGVjcmVtZW50OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQu
YXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNE
ZWNyZW1lbnRQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZy
YWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJN
YXRjaGVzRGVjcmVtZW50UHNldWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzSW5jcmVtZW50OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6
ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNJbmNyZW1lbnRQc2V1ZG9D
bGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVu
b3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzSW5jcmVtZW50
UHNldWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU3RhcnQ6Ci0g
ICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENv
bnRleHQoc2Nyb2xsYmFyTWF0Y2hlc1N0YXJ0UHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7
CisgICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0
aENvbnRleHQoc2Nyb2xsYmFyTWF0Y2hlc1N0YXJ0UHNldWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzRW5kOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5k
VW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNFbmRQc2V1
ZG9DbGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVu
ZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRW5kUHNl
dWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRG91YmxlQnV0dG9u
OgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dp
dGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNEb3VibGVCdXR0b25Qc2V1ZG9DbGFzczxDaGVja2lu
Z0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNl
dWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzRG91YmxlQnV0dG9uUHNldWRvQ2xh
c3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU2luZ2xlQnV0dG9uOgotICAg
ICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250
ZXh0KHNjcm9sbGJhck1hdGNoZXNTaW5nbGVCdXR0b25Qc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRl
eHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVub3B0aW1pemVkUHNldWRvQ2xh
c3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzU2luZ2xlQnV0dG9uUHNldWRvQ2xhc3MpOwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTm9CdXR0b246Ci0gICAgICAgIHJldHVy
biBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQoc2Nyb2xs
YmFyTWF0Y2hlc05vQnV0dG9uUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7CisgICAgICAg
IHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRleHQo
c2Nyb2xsYmFyTWF0Y2hlc05vQnV0dG9uUHNldWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzQ29ybmVyUHJlc2VudDoKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFw
cGVuZFVub3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzQ29y
bmVyUHJlc2VudFBzZXVkb0NsYXNzPENoZWNraW5nQ29udGV4dD4pOworICAgICAgICByZXR1cm4g
ZnJhZ21lbnQuYXBwZW5kVW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJh
ck1hdGNoZXNDb3JuZXJQcmVzZW50UHNldWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzQWN0aXZlOgotICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kVW5vcHRp
bWl6ZWRQc2V1ZG9DbGFzc1dpdGhDb250ZXh0KHNjcm9sbGJhck1hdGNoZXNBY3RpdmVQc2V1ZG9D
bGFzczxDaGVja2luZ0NvbnRleHQ+KTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LmFwcGVuZFVu
b3B0aW1pemVkUHNldWRvQ2xhc3NXaXRoQ29udGV4dChzY3JvbGxiYXJNYXRjaGVzQWN0aXZlUHNl
dWRvQ2xhc3MpOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXI6Ci0gICAg
ICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENvbnRl
eHQoc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3M8Q2hlY2tpbmdDb250ZXh0Pik7Cisg
ICAgICAgIHJldHVybiBmcmFnbWVudC5hcHBlbmRVbm9wdGltaXplZFBzZXVkb0NsYXNzV2l0aENv
bnRleHQoc2Nyb2xsYmFyTWF0Y2hlc0hvdmVyUHNldWRvQ2xhc3MpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CiAgICAgfQpA
QCAtMTYxMCw3ICsxNjEwLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmFkZEZsYWdz
VG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lzdGUKICAgICBBU1NFUlQo
bV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKTsKIAog
ICAgIExvY2FsUmVnaXN0ZXIgY2hpbGRTdHlsZShtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICBt
X2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9C
SkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIGVsZW1lbnRTdHlsZSkpLCBjaGlsZFN0eWxl
KTsKKyAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0Nv
bnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCwg
ZWxlbWVudFN0eWxlKSksIGNoaWxkU3R5bGUpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBs
b29rIGludG8gZG9pbmcgc29tZXRoaW5nIHNtYXJ0IGluIE1hY3JvQXNzZW1ibGVyIGluc3RlYWQu
CiAgICAgQXNzZW1ibGVyOjpBZGRyZXNzIGZsYWdBZGRyZXNzKGNoaWxkU3R5bGUsIFJlbmRlclN0
eWxlOjpub25pbmhlcml0ZWRGbGFnc01lbW9yeU9mZnNldCgpICsgUmVuZGVyU3R5bGU6Ok5vbklu
aGVyaXRlZEZsYWdzOjpmbGFnc01lbW9yeU9mZnNldCgpKTsKQEAgLTE2NjYsNyArMTY2Niw3IEBA
IHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpsb2FkQ2hlY2tpbmdDb250ZXh0KEFzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvCiB7CiAgICAgLy8gRGVwZW5kIG9uIHRoZSBzcGVjaWZp
ZWQgcmVzb2x2aW5nIG1vZGUgYW5kIG91ciBjdXJyZW50IG1vZGUsIGJyYW5jaC4KICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihTZWxlY3RvckNoZWNrZXI6Ok1vZGUpID09IDEsICJXZSBnZW5lcmF0
ZSBhIGJ5dGUgbG9hZC90ZXN0IGZvciB0aGUgU2VsZWN0b3JDaGVja2VyOjpNb2RlLiIpOwotICAg
IHJldHVybiBtX2Fzc2VtYmxlci5icmFuY2g4KGNvbmRpdGlvbiwgQXNzZW1ibGVyOjpBZGRyZXNz
KGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5nQ29udGV4dCwgcmVzb2x2
aW5nTW9kZSkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxzdGQ6OnVuZGVy
bHlpbmdfdHlwZTxTZWxlY3RvckNoZWNrZXI6Ok1vZGU+Ojp0eXBlPihtb2RlKSkpOworICAgIHJl
dHVybiBtX2Fzc2VtYmxlci5icmFuY2g4KGNvbmRpdGlvbiwgQXNzZW1ibGVyOjpBZGRyZXNzKGNo
ZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b250ZXh0LCByZXNvbHZpbmdNb2RlKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPFNlbGVjdG9yQ2hlY2tlcjo6TW9kZT46OnR5cGU+KG1v
ZGUpKSk7CiAKIH0KIApAQCAtMjQwNiw3ICsyNDA2LDcgQEAgc3RhdGljIGJvb2wgZWxlbWVudElz
QWN0aXZlKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGVsZW1lbnQtPmFjdGl2ZSgpIHx8
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmUpOwogfQogCi1zdGF0aWMgYm9vbCBlbGVtZW50SXNB
Y3RpdmVGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ2hlY2tpbmdD
b250ZXh0KiBjaGVja2luZ0NvbnRleHQpCitzdGF0aWMgYm9vbCBlbGVtZW50SXNBY3RpdmVGb3JT
dHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpD
aGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKIHsKICAgICBpZiAoY2hlY2tpbmdDb250
ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2aW5nU3R5
bGUpCiAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZSgpOwpAQCAt
MjQ3Nyw3ICsyNDc3LDcgQEAgc3RhdGljIHZvaWQgc2V0RWxlbWVudFN0eWxlSXNBZmZlY3RlZEJ5
RW1wdHkoRWxlbWVudCogZWxlbWVudCkKICAgICBlbGVtZW50LT5zZXRTdHlsZUFmZmVjdGVkQnlF
bXB0eSgpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRFbGVtZW50U3R5bGVGcm9tQ29udGV4dElzQWZm
ZWN0ZWRCeUVtcHR5QW5kVXBkYXRlUmVuZGVyU3R5bGVJZk5lY2Vzc2FyeShDaGVja2luZ0NvbnRl
eHQqIGNvbnRleHQsIGJvb2wgaXNFbXB0eSkKK3N0YXRpYyB2b2lkIHNldEVsZW1lbnRTdHlsZUZy
b21Db250ZXh0SXNBZmZlY3RlZEJ5RW1wdHlBbmRVcGRhdGVSZW5kZXJTdHlsZUlmTmVjZXNzYXJ5
KFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjb250ZXh0LCBib29sIGlzRW1wdHkp
CiB7CiAgICAgQVNTRVJUKGNvbnRleHQtPmVsZW1lbnRTdHlsZSk7CiAgICAgY29udGV4dC0+ZWxl
bWVudFN0eWxlLT5zZXRFbXB0eVN0YXRlKGlzRW1wdHkpOwpAQCAtMjU4NSw3ICsyNTg1LDcgQEAg
c3RhdGljIGJvb2wgZWxlbWVudElzSG92ZXJlZChFbGVtZW50KiBlbGVtZW50KQogICAgIHJldHVy
biBlbGVtZW50LT5ob3ZlcmVkKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBz
ZXVkb1N0YXRlKGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyKTsKIH0KIAot
c3RhdGljIGJvb2wgZWxlbWVudElzSG92ZXJlZEZvclN0eWxlUmVzb2x1dGlvbihFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKK3N0YXRpYyBi
b29sIGVsZW1lbnRJc0hvdmVyZWRGb3JTdHlsZVJlc29sdXRpb24oRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkK
IHsKICAgICBpZiAoY2hlY2tpbmdDb250ZXh0LT5yZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hl
Y2tlcjo6TW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVu
QWZmZWN0ZWRCeUhvdmVyKCk7CkBAIC0yNzc2LDcgKzI3NzYsNyBAQCB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNPbmx5Q2hpbGQoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbAogfQogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotc3RhdGljIGJv
b2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJT
aG93bihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29u
dGV4dCkKK3N0YXRpYyBib29sIG1ha2VDb250ZXh0U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRl
c3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKIHsKICAgICBpZiAoaXNIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkpIHsKICAgICAgICAgaWYgKGNoZWNraW5n
Q29udGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmlu
Z1N0eWxlKQpAQCAtMjc4Niw3ICsyNzg2LDcgQEAgc3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHls
ZVVuaXF1ZUlmTmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgbWFrZUVsZW1lbnRTdHlsZVVuaXF1ZUlm
TmVjZXNzYXJ5QW5kVGVzdElzUGxhY2Vob2xkZXJTaG93bihFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBDaGVja2luZ0NvbnRleHQqIGNoZWNraW5nQ29udGV4dCkKK3N0YXRpYyBib29sIG1ha2VFbGVt
ZW50U3R5bGVVbmlxdWVJZk5lY2Vzc2FyeUFuZFRlc3RJc1BsYWNlaG9sZGVyU2hvd24oRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqIGNoZWNr
aW5nQ29udGV4dCkKIHsKICAgICBpZiAoaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxl
bWVudCkpIHsKICAgICAgICAgaWYgKGNoZWNraW5nQ29udGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBT
ZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CkBAIC0zMDc3LDEwICszMDc3
LDEwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJlcXVlc3RlZFBzZXVk
b0VsZW1lbnRFcXVhbHNUb1NlbGVjdG9yUHNldWRvCiAgICAgLy8gT3RoZXJ3aXNlLCBpZiB0aGUg
cmVxdWVzdGVkIHBzZXVkb0lkIGlzIG5vdCBOT1BTRVVETywgdGhlIHJlcXVlc3RlZCBwc2V1ZG9J
ZCBuZWVkIHRvIGVxdWFsIHRvIHRoZSBwc2V1ZG8gZWxlbWVudCBvZiB0aGUgcmlnaHRtb3N0IGZy
YWdtZW50LgogICAgIGlmIChmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2Vs
ZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKICAgICAgICAgaWYgKCFmcmFnbWVudC5wc2V1ZG9F
bGVtZW50U2VsZWN0b3IpCi0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1i
bGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNr
aW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5nQ29udGV4dCwgcHNldWRvSWQpKSwg
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTk9QU0VVRE8pKSk7CisgICAgICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNz
ZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9y
Q2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihOT1BTRVVETykpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBc3NlbWJsZXI6
Okp1bXAgc2tpcCA9IG1fYXNzZW1ibGVyLmJyYW5jaDgoQXNzZW1ibGVyOjpFcXVhbCwgQXNzZW1i
bGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5nQ29u
dGV4dCwgcHNldWRvSWQpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTk9QU0VVRE8pKTsKLSAg
ICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoOChBc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQ2hlY2tpbmdDb250ZXh0LCBwc2V1ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihDU1NTZWxlY3Rvcjo6cHNldWRvSWQoZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9y
LT5wc2V1ZG9FbGVtZW50VHlwZSgpKSkpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6SnVtcCBz
a2lwID0gbV9hc3NlbWJsZXIuYnJhbmNoOChBc3NlbWJsZXI6OkVxdWFsLCBBc3NlbWJsZXI6OkFk
ZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpD
aGVja2luZ0NvbnRleHQsIHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5PUFNF
VURPKSk7CisgICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5j
aDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4
dCwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBwc2V1
ZG9JZCkpLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihDU1NTZWxlY3Rvcjo6cHNldWRvSWQoZnJh
Z21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSkpKTsKICAg
ICAgICAgICAgIHNraXAubGluaygmbV9hc3NlbWJsZXIpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MzA5OSw3ICszMDk5LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxl
bWVudElzU2NvcGVSb290KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWwKIAogICAgIExvY2FsUmVn
aXN0ZXIgc2NvcGUobV9yZWdpc3RlckFsbG9jYXRvcik7CiAgICAgbG9hZENoZWNraW5nQ29udGV4
dChzY29wZSk7Ci0gICAgbV9hc3NlbWJsZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3Moc2Nv
cGUsIE9CSkVDVF9PRkZTRVRPRihDaGVja2luZ0NvbnRleHQsIHNjb3BlKSksIHNjb3BlKTsKKyAg
ICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhzY29wZSwgT0JKRUNUX09G
RlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0LCBzY29wZSkpLCBzY29wZSk7
CiAKICAgICBBc3NlbWJsZXI6Okp1bXAgc2NvcGVJc05vdE51bGwgPSBtX2Fzc2VtYmxlci5icmFu
Y2hUZXN0UHRyKEFzc2VtYmxlcjo6Tm9uWmVybywgc2NvcGUpOwogCkBAIC0zMTMxLDcgKzMxMzEs
NyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJrUHNldWRvU3R5bGVG
b3JQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SgogICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qgc3Vj
Y2Vzc0Nhc2VzOwogCiAgICAgLy8gV2hlbiB0aGUgcmVxdWVzdGVkIHBzZXVkb0lkIGlzbid0IE5P
UFNFVURPLCB0aGVyZSdzIG5vIG5lZWQgdG8gbWFyayB0aGUgcHNldWRvIGVsZW1lbnQgc3R5bGUu
Ci0gICAgc3VjY2Vzc0Nhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2g4KEFzc2VtYmxlcjo6
Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhjaGVja2luZ0NvbnRleHQsIE9CSkVDVF9PRkZT
RVRPRihDaGVja2luZ0NvbnRleHQsIHBzZXVkb0lkKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KE5PUFNFVURPKSkpOworICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNo
OChBc3NlbWJsZXI6Ok5vdEVxdWFsLCBBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQsIHBzZXVk
b0lkKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5PUFNFVURPKSkpOwogCiAgICAgLy8gV2hl
biByZXNvbHZpbmcgbW9kZSBpcyBDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9F
bGVtZW50cywgdGhlcmUncyBubyBuZWVkIHRvIG1hcmsgdGhlIHBzZXVkbyBlbGVtZW50IHN0eWxl
LgogICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoYnJhbmNoT25SZXNvbHZpbmdNb2RlV2l0aENoZWNr
aW5nQ29udGV4dChBc3NlbWJsZXI6OkVxdWFsLCBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OkNvbGxl
Y3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzLCBjaGVja2luZ0NvbnRleHQp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCmluZGV4IGMwY2E1MzJk
NTAzMzMxMWZmZjY3ZDE2MTA0MWNmNDU0ZTE0YmYyMTAuLmIxMDdjNDM0MjdmZDQ5N2YyMDk5MTRi
NjJiZGMyZDg3YmQ0MzhmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxl
Y3RvckNvbXBpbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuaApAQCAtNjksMjQgKzY5LDYgQEAgY2xhc3MgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyB7
CiAKIG5hbWVzcGFjZSBTZWxlY3RvckNvbXBpbGVyIHsKIAotc3RydWN0IENoZWNraW5nQ29udGV4
dCB7Ci0gICAgQ2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSByZXNvbHZpbmdN
b2RlKQotICAgICAgICA6IHJlc29sdmluZ01vZGUocmVzb2x2aW5nTW9kZSkKLSAgICAgICAgLCBl
bGVtZW50U3R5bGUobnVsbHB0cikKLSAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVETykKLSAgICAg
ICAgLCBzY3JvbGxiYXIobnVsbHB0cikKLSAgICAgICAgLCBzY3JvbGxiYXJQYXJ0KE5vUGFydCkK
LSAgICAgICAgLCBzY29wZShudWxscHRyKQotICAgIHsgfQotCi0gICAgU2VsZWN0b3JDaGVja2Vy
OjpNb2RlIHJlc29sdmluZ01vZGU7Ci0gICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZTsKLSAg
ICBQc2V1ZG9JZCBwc2V1ZG9JZDsKLSAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhcjsKLSAg
ICBTY3JvbGxiYXJQYXJ0IHNjcm9sbGJhclBhcnQ7Ci0gICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGU7Ci19OwotCiBlbnVtIGNsYXNzIFNlbGVjdG9yQ29udGV4dCB7CiAgICAgLy8gUnVsZSBD
b2xsZWN0b3IgbmVlZHMgYSByZXNvbHZpbmdNb2RlIGFuZCBjYW4gbW9kaWZ5IHRoZSB0cmVlIGFz
IGl0IG1hdGNoZXMuCiAgICAgUnVsZUNvbGxlY3RvciwKQEAgLTk2LDcgKzc4LDcgQEAgZW51bSBj
bGFzcyBTZWxlY3RvckNvbnRleHQgewogfTsKIAogdHlwZWRlZiB1bnNpZ25lZCAoKlNpbXBsZVNl
bGVjdG9yQ2hlY2tlcikoRWxlbWVudCopOwotdHlwZWRlZiB1bnNpZ25lZCAoKlNlbGVjdG9yQ2hl
Y2tlcldpdGhDaGVja2luZ0NvbnRleHQpKEVsZW1lbnQqLCBjb25zdCBDaGVja2luZ0NvbnRleHQq
KTsKK3R5cGVkZWYgdW5zaWduZWQgKCpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0
KShFbGVtZW50KiwgY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQqKTsKIFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiwgSlNDOjpWTSosIFNlbGVjdG9yQ29udGV4dCwgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYm
IG91dHB1dENvZGVSZWYpOwogCiBpbmxpbmUgU2ltcGxlU2VsZWN0b3JDaGVja2VyIHNpbXBsZVNl
bGVjdG9yQ2hlY2tlckZ1bmN0aW9uKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBTZWxlY3RvckNv
bXBpbGF0aW9uU3RhdHVzIGNvbXBpbGF0aW9uU3RhdHVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9y
UXVlcnkuY3BwCmluZGV4IDVjM2Y5YmNhMTcxYWRjOTU5NWI4ZDE5ZWRjMGQ5NTlkODY4YWNlNjQu
LmM5ZGQ2MGU4ZjZjZmJhZDdiMzU2NGZlZGRhYjU1NGM5ZWU5YWE4YTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDU1NQYXJz
ZXIuaCIKICNpbmNsdWRlICJFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
U2VsZWN0b3JDaGVja2VyLmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCIK
ICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIK
IApAQCAtNzYsNyArNzUsNyBAQCBzdGF0aWMgSWRNYXRjaGluZ1R5cGUgZmluZElkTWF0Y2hpbmdU
eXBlKGNvbnN0IENTU1NlbGVjdG9yJiBmaXJzdFNlbGVjdG9yKQogCiAgICAgbV9zZWxlY3RvcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWxlY3RvckNvdW50KTsKICAgICBmb3IgKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2Vs
ZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKQotICAgICAgICBtX3NlbGVj
dG9ycy51bmNoZWNrZWRBcHBlbmQoU2VsZWN0b3JEYXRhKHNlbGVjdG9yLCBTZWxlY3RvckNoZWNr
ZXJGYXN0UGF0aDo6Y2FuVXNlKHNlbGVjdG9yKSkpOworICAgICAgICBtX3NlbGVjdG9ycy51bmNo
ZWNrZWRBcHBlbmQoU2VsZWN0b3JEYXRhKHNlbGVjdG9yKSk7CiAKICAgICBpZiAoc2VsZWN0b3JD
b3VudCA9PSAxKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciA9ICptX3Nl
bGVjdG9ycy5maXJzdCgpLnNlbGVjdG9yOwpAQCAtMTE0LDE3ICsxMTMsMTAgQEAgc3RhdGljIElk
TWF0Y2hpbmdUeXBlIGZpbmRJZE1hdGNoaW5nVHlwZShjb25zdCBDU1NTZWxlY3RvciYgZmlyc3RT
ZWxlY3RvcikKIAogaW5saW5lIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVz
KGNvbnN0IFNlbGVjdG9yRGF0YSYgc2VsZWN0b3JEYXRhLCBFbGVtZW50JiBlbGVtZW50LCBjb25z
dCBDb250YWluZXJOb2RlJiByb290Tm9kZSkgY29uc3QKIHsKLSAgICBpZiAoc2VsZWN0b3JEYXRh
LmlzRmFzdENoZWNrYWJsZSAmJiAhZWxlbWVudC5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICBT
ZWxlY3RvckNoZWNrZXJGYXN0UGF0aCBzZWxlY3RvckNoZWNrZXJGYXN0UGF0aChzZWxlY3RvckRh
dGEuc2VsZWN0b3IsICZlbGVtZW50KTsKLSAgICAgICAgaWYgKCFzZWxlY3RvckNoZWNrZXJGYXN0
UGF0aC5tYXRjaGVzUmlnaHRtb3N0U2VsZWN0b3IoU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0
Y2hEaXNhYmxlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBz
ZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5tYXRjaGVzKCk7Ci0gICAgfQotCiAgICAgU2VsZWN0b3JD
aGVja2VyIHNlbGVjdG9yQ2hlY2tlcihlbGVtZW50LmRvY3VtZW50KCkpOwotICAgIFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQo
c2VsZWN0b3JEYXRhLnNlbGVjdG9yLCAmZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpR
dWVyeWluZ1J1bGVzKTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBzZWxl
Y3RvckNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMp
OwogICAgIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1bWVu
dE5vZGUoKSA/IG51bGxwdHIgOiAmcm9vdE5vZGU7Ci0gICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tl
ci5tYXRjaChzZWxlY3RvckNoZWNraW5nQ29udGV4dCk7CisgICAgcmV0dXJuIHNlbGVjdG9yQ2hl
Y2tlci5tYXRjaChzZWxlY3RvckRhdGEuc2VsZWN0b3IsICZlbGVtZW50LCBzZWxlY3RvckNoZWNr
aW5nQ29udGV4dCk7CiB9CiAKIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyhFbGVtZW50
JiB0YXJnZXRFbGVtZW50KSBjb25zdApAQCAtMzgwLDcgKzM3Miw3IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNr
ZXIoY29uc3QKIHRlbXBsYXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ+CiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2VsZWN0b3JDaGVj
a2VyV2l0aENoZWNraW5nQ29udGV4dChjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29u
c3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNlbGVj
dG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2VyLCB0eXBlbmFtZSBT
ZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUmIG91dHB1dCwgY29uc3QgU2VsZWN0b3JEYXRh
JiBzZWxlY3RvckRhdGEpIGNvbnN0CiB7Ci0gICAgU2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdD
b250ZXh0IGNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVs
ZXMpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4
dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIGNoZWNraW5nQ29u
dGV4dC5zY29wZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3RO
b2RlOwogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0
X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHNlYXJjaFJvb3ROb2RlKSkpIHsKQEAgLTM5Niw2ICszODgs
MjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxl
ZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0MKICAgICAgICAgfQogICAgIH0KIH0KKworc3Rh
dGljIGJvb2wgaXNDb21waWxlZFNlbGVjdG9yKFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29t
cGlsYXRpb25TdGF0dXMpCit7CisgICAgcmV0dXJuIGNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVj
dG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciB8fCBjb21waWxhdGlv
blN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRo
Q2hlY2tpbmdDb250ZXh0OworfQorCitib29sIFNlbGVjdG9yRGF0YUxpc3Q6OmNvbXBpbGVTZWxl
Y3Rvcihjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSwgY29uc3QgQ29udGFpbmVyTm9k
ZSYgcm9vdE5vZGUpCit7CisgICAgaWYgKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyAh
PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpOb3RDb21waWxlZCkKKyAgICAgICAgcmV0dXJu
IGlzQ29tcGlsZWRTZWxlY3RvcihzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMpOworCisg
ICAgSlNDOjpWTSYgdm0gPSByb290Tm9kZS5kb2N1bWVudCgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+dm0oKTsKKyAgICBzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMgPSBTZWxlY3Rv
ckNvbXBpbGVyOjpjb21waWxlU2VsZWN0b3Ioc2VsZWN0b3JEYXRhLnNlbGVjdG9yLCAmdm0sIFNl
bGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rvciwgc2VsZWN0b3JE
YXRhLmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmKTsKKyAgICByZXR1cm4gaXNDb21waWxlZFNlbGVj
dG9yKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyk7Cit9CisKKwogI2VuZGlmIC8vIEVO
QUJMRShDU1NfU0VMRUNUT1JfSklUKQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JRdWVy
eVRyYWl0PgpAQCAtNDExLDM3ICs0MjAsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9y
RGF0YUxpc3Q6OmV4ZWN1dGUoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIHR5cGVuYW1lIFMKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQp
Ci0gICAgICAgIGlmIChzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JD
b21waWxhdGlvblN0YXR1czo6U2ltcGxlU2VsZWN0b3JDaGVja2VyIHx8IHNlbGVjdG9yRGF0YS5j
b21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KQorICAgICAgICBpZiAoY29tcGlsZVNlbGVjdG9yKHNl
bGVjdG9yRGF0YSwgKnNlYXJjaFJvb3ROb2RlKSkKICAgICAgICAgICAgIGdvdG8gQ29tcGlsZWRT
aW5nbGVDYXNlOwotI2VuZGlmCi0gICAgICAgIH0KKyAgICAgICAgZ290byBTaW5nbGVTZWxlY3Rv
ckNhc2U7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vsc2UKICAgICAgICAgRkFM
TFRIUk9VR0g7CisjZW5kaWYgLy8gRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCisgICAgICAgIH0K
ICAgICBjYXNlIENvbXBpbGFibGVTaW5nbGVXaXRoUm9vdEZpbHRlcjoKICAgICBjYXNlIENvbXBp
bGFibGVTaW5nbGU6CiAgICAgICAgIHsKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKICAg
ICAgICAgY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEgPSBtX3NlbGVjdG9ycy5maXJz
dCgpOwotICAgICAgICBBU1NFUlQobV9tYXRjaFR5cGUgPT0gUmlnaHRNb3N0V2l0aElkTWF0Y2gg
fHwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25T
dGF0dXM6Ok5vdENvbXBpbGVkKTsKLQotICAgICAgICBKU0M6OlZNJiB2bSA9IHNlYXJjaFJvb3RO
b2RlLT5kb2N1bWVudCgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0oKTsKLSAgICAgICAg
c2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID0gU2VsZWN0b3JDb21waWxlcjo6Y29tcGls
ZVNlbGVjdG9yKHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJnZtLCBTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IsIHNlbGVjdG9yRGF0YS5jb21waWxlZFNlbGVj
dG9yQ29kZVJlZik7Ci0KLSAgICAgICAgaWYgKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1
cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIgfHwg
c2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0
dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpIHsKKyAgICAgICAgQVNTRVJU
KHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzOjpOb3RDb21waWxlZCk7CisgICAgICAgIEFTU0VSVChtX21hdGNoVHlwZSA9PSBDb21waWxh
YmxlU2luZ2xlIHx8IG1fbWF0Y2hUeXBlID09IENvbXBpbGFibGVTaW5nbGVXaXRoUm9vdEZpbHRl
cik7CisgICAgICAgIGlmIChjb21waWxlU2VsZWN0b3Ioc2VsZWN0b3JEYXRhLCAqc2VhcmNoUm9v
dE5vZGUpKSB7CiAgICAgICAgICAgICBpZiAobV9tYXRjaFR5cGUgPT0gQ29tcGlsYWJsZVNpbmds
ZSkgewogICAgICAgICAgICAgICAgIG1fbWF0Y2hUeXBlID0gQ29tcGlsZWRTaW5nbGU7CiAgICAg
ICAgICAgICAgICAgZ290byBDb21waWxlZFNpbmdsZUNhc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAobV9tYXRjaFR5cGUgPT0gQ29tcGlsYWJsZVNpbmdsZVdpdGhSb290RmlsdGVy
KSB7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX21hdGNo
VHlwZSA9PSBDb21waWxhYmxlU2luZ2xlV2l0aFJvb3RGaWx0ZXIpOwogICAgICAgICAgICAgICAg
IG1fbWF0Y2hUeXBlID0gQ29tcGlsZWRTaW5nbGVXaXRoUm9vdEZpbHRlcjsKICAgICAgICAgICAg
ICAgICBnb3RvIENvbXBpbGVkU2luZ2xlV2l0aFJvb3RGaWx0ZXJDYXNlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZ290byBDb21waWxlZFNpbmdsZUNhc2U7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKG1fbWF0Y2hUeXBlICE9IFJpZ2h0TW9zdFdpdGhJZE1hdGNoKQotICAgICAgICAgICAg
bV9tYXRjaFR5cGUgPSBTaW5nbGVTZWxlY3RvcjsKKyAgICAgICAgbV9tYXRjaFR5cGUgPSBTaW5n
bGVTZWxlY3RvcjsKICAgICAgICAgZ290byBTaW5nbGVTZWxlY3RvckNhc2U7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIEZBTExU
SFJPVUdIOwogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
ZWxlY3RvclF1ZXJ5LmgKaW5kZXggZDg5NmE3NjViNjg1MTJlZWU5Mjc5Y2UyZGE2ZWM1MDdlN2Rh
MzhmMy4uYzA3NWJlMzA5Njk1ZTkxMDg2NmI0MWUyNjIyOWEwMjQ2ZTU4ZGM0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2VsZWN0b3JRdWVyeS5oCkBAIC01NCwxMiArNTQsMTEgQEAgY2xhc3MgU2VsZWN0b3JE
YXRhTGlzdCB7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFNlbGVjdG9yRGF0YSB7Ci0gICAgICAg
IFNlbGVjdG9yRGF0YShjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGJvb2wgaXNGYXN0Q2hl
Y2thYmxlKQorICAgICAgICBTZWxlY3RvckRhdGEoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
KQogICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikKICNpZiBFTkFCTEUoQ1NTX1NFTEVD
VE9SX0pJVCkgJiYgQ1NTX1NFTEVDVE9SX0pJVF9QUk9GSUxJTkcKICAgICAgICAgICAgICwgbV9j
b21waWxlZFNlbGVjdG9yVXNlQ291bnQoMCkKICNlbmRpZgotICAgICAgICAgICAgLCBpc0Zhc3RD
aGVja2FibGUoaXNGYXN0Q2hlY2thYmxlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNzcs
NyArNzYsNiBAQCBjbGFzcyBTZWxlY3RvckRhdGFMaXN0IHsKICAgICAgICAgdm9pZCBjb21waWxl
ZFNlbGVjdG9yVXNlZCgpIGNvbnN0IHsgbV9jb21waWxlZFNlbGVjdG9yVXNlQ291bnQrKzsgfQog
I2VuZGlmCiAjZW5kaWYgLy8gRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCi0gICAgICAgIGJvb2wg
aXNGYXN0Q2hlY2thYmxlOwogICAgIH07CiAKICAgICBib29sIHNlbGVjdG9yTWF0Y2hlcyhjb25z
dCBTZWxlY3RvckRhdGEmLCBFbGVtZW50JiwgY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUp
IGNvbnN0OwpAQCAtOTEsNiArODksNyBAQCBjbGFzcyBTZWxlY3RvckRhdGFMaXN0IHsKICNpZiBF
TkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JR
dWVyeVRyYWl0PiB2b2lkIGV4ZWN1dGVDb21waWxlZFNpbXBsZVNlbGVjdG9yQ2hlY2tlcihjb25z
dCBDb250YWluZXJOb2RlJiBzZWFyY2hSb290Tm9kZSwgU2VsZWN0b3JDb21waWxlcjo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUm
LCBjb25zdCBTZWxlY3RvckRhdGEmKSBjb25zdDsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2Vs
ZWN0b3JRdWVyeVRyYWl0PiB2b2lkIGV4ZWN1dGVDb21waWxlZFNlbGVjdG9yQ2hlY2tlcldpdGhD
aGVja2luZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNvbnN0IENvbnRh
aW5lck5vZGUmIHNlYXJjaFJvb3ROb2RlLCBTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNoZWNr
ZXJXaXRoQ2hlY2tpbmdDb250ZXh0LCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1
dFR5cGUmLCBjb25zdCBTZWxlY3RvckRhdGEmKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBjb21w
aWxlU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSYgcm9v
dE5vZGUpOwogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCiAgICAgVmVjdG9y
PFNlbGVjdG9yRGF0YT4gbV9zZWxlY3RvcnM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>238029</attachid>
            <date>2014-09-12 08:56:14 -0700</date>
            <delta_ts>2014-09-12 08:56:14 -0700</delta_ts>
            <desc>Trunk Perf Results</desc>
            <filename>trunk.webarchive</filename>
            <type>application/x-webarchive</type>
            <size>494302</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">YnBsaXN0MDDSAQIDHF8QD1dlYlN1YnJlc291cmNlc18QD1dlYk1haW5SZXNvdXJjZaQEDRIX1AUG
BwgJCgsMXldlYlJlc291cmNlVVJMXxATV2ViUmVzb3VyY2VSZXNwb25zZV8QD1dlYlJlc291cmNl
RGF0YV8QE1dlYlJlc291cmNlTUlNRVR5cGVfEGJmaWxlOi8vL1VzZXJzL3l1c3VrZS9kZXYvV2Vi
S2l0L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2px
dWVyeS0xLjYuNC5qc08RAl5icGxpc3QwMNQBAgMEBQY1NlgkdmVyc2lvblgkb2JqZWN0c1kkYXJj
aGl2ZXJUJHRvcBIAAYagqwcIHyUmLRcuLzAxVSRudWxs2wkKCwwNDg8QERITFBUWFxgZGhscHR5S
JDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0UiQ3UiQyUiQ1UiQwUiQ4gAKACoAHEACACYAFgAAQB4AGEAiA
CNMgCiEaIyRXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QYmZpbGU6Ly8vVXNlcnMveXVzdWtl
L2Rldi9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dl
Yi9saWIvanF1ZXJ5LTEuNi40Lmpz0icoKSpaJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIrLFVO
U1VSTFhOU09iamVjdCNBucM/Of3NYF8QD3RleHQvamF2YXNjcmlwdBIABck/I3/v////////0ico
MjNdTlNVUkxSZXNwb25zZaI0LF1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0Tc4XxAT
V2ViUmVzb3VyY2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAQwBJAGAAYwBqAG0AcABzAHYAeQB8
AH8AggCFAIcAiQCLAI0AjwCRAJMAlQCXAJkAmwCiAKoAtgC4ALoAvAEhASYBMQE6AUABQwFJAVIB
WwFtAXIBewGAAY4BkQGfAbEBtAHKAAAAAAAAAgEAAAAAAAAAOQAAAAAAAAAAAAAAAAAAAcxPEgAF
yT8vKiEKICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS42LjQKICogaHR0cDovL2pxdWVy
eS5jb20vCiAqCiAqIENvcHlyaWdodCAyMDExLCBKb2huIFJlc2lnCiAqIER1YWwgbGljZW5zZWQg
dW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgogKiBodHRwOi8vanF1ZXJ5
Lm9yZy9saWNlbnNlCiAqCiAqIEluY2x1ZGVzIFNpenpsZS5qcwogKiBodHRwOi8vc2l6emxlanMu
Y29tLwogKiBDb3B5cmlnaHQgMjAxMSwgVGhlIERvam8gRm91bmRhdGlvbgogKiBSZWxlYXNlZCB1
bmRlciB0aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCiAqCiAqIERhdGU6IE1vbiBTZXAg
MTIgMTg6NTQ6NDggMjAxMSAtMDQwMAogKi8KKGZ1bmN0aW9uKCB3aW5kb3csIHVuZGVmaW5lZCAp
IHsKCi8vIFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBhY2NvcmRpbmdseSB3aXRoIHdpbmRvdyBh
cmd1bWVudCAoc2FuZGJveCkKdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LAogICAgICAg
IG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0b3IsCiAgICAgICAgbG9jYXRpb24gPSB3aW5kb3cu
bG9jYXRpb247CnZhciBqUXVlcnkgPSAoZnVuY3Rpb24oKSB7CgovLyBEZWZpbmUgYSBsb2NhbCBj
b3B5IG9mIGpRdWVyeQp2YXIgalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkg
ewogICAgICAgICAgICAgICAgLy8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0
aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSApOwogICAgICAg
IH0sCgogICAgICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQogICAg
ICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAoKICAgICAgICAvLyBNYXAgb3ZlciB0aGUgJCBp
biBjYXNlIG9mIG92ZXJ3cml0ZQogICAgICAgIF8kID0gd2luZG93LiQsCgogICAgICAgIC8vIEEg
Y2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KQogICAgICAgIHJv
b3RqUXVlcnksCgogICAgICAgIC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJp
bmdzIG9yIElEIHN0cmluZ3MKICAgICAgICAvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRv
IGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCiAgICAgICAgcXVpY2tFeHByID0g
L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLAoKICAgICAgICAvLyBD
aGVjayBpZiBhIHN0cmluZyBoYXMgYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gaXQKICAg
ICAgICBybm90d2hpdGUgPSAvXFMvLAoKICAgICAgICAvLyBVc2VkIGZvciB0cmltbWluZyB3aGl0
ZXNwYWNlCiAgICAgICAgdHJpbUxlZnQgPSAvXlxzKy8sCiAgICAgICAgdHJpbVJpZ2h0ID0gL1xz
KyQvLAoKICAgICAgICAvLyBDaGVjayBmb3IgZGlnaXRzCiAgICAgICAgcmRpZ2l0ID0gL1xkLywK
CiAgICAgICAgLy8gTWF0Y2ggYSBzdGFuZGFsb25lIHRhZwogICAgICAgIHJzaW5nbGVUYWcgPSAv
XjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLAoKICAgICAgICAvLyBKU09OIFJlZ0V4cAogICAg
ICAgIHJ2YWxpZGNoYXJzID0gL15bXF0sOnt9XHNdKiQvLAogICAgICAgIHJ2YWxpZGVzY2FwZSA9
IC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csCiAgICAgICAgcnZhbGlkdG9r
ZW5zID0gLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/Oltl
RV1bK1wtXT9cZCspPy9nLAogICAgICAgIHJ2YWxpZGJyYWNlcyA9IC8oPzpefDp8LCkoPzpccypc
WykrL2csCgogICAgICAgIC8vIFVzZXJhZ2VudCBSZWdFeHAKICAgICAgICByd2Via2l0ID0gLyh3
ZWJraXQpWyBcL10oW1x3Ll0rKS8sCiAgICAgICAgcm9wZXJhID0gLyhvcGVyYSkoPzouKnZlcnNp
b24pP1sgXC9dKFtcdy5dKykvLAogICAgICAgIHJtc2llID0gLyhtc2llKSAoW1x3Ll0rKS8sCiAg
ICAgICAgcm1vemlsbGEgPSAvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLAoKICAgICAg
ICAvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKICAgICAgICByZGFzaEFs
cGhhID0gLy0oW2Etel18WzAtOV0pL2lnLAogICAgICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCgog
ICAgICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNl
KCkKICAgICAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuICggbGV0dGVyICsgIiIgKS50b1VwcGVyQ2FzZSgpOwogICAgICAgIH0s
CgogICAgICAgIC8vIEtlZXAgYSBVc2VyQWdlbnQgc3RyaW5nIGZvciB1c2Ugd2l0aCBqUXVlcnku
YnJvd3NlcgogICAgICAgIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQsCgogICAgICAg
IC8vIEZvciBtYXRjaGluZyB0aGUgZW5naW5lIGFuZCB2ZXJzaW9uIG9mIHRoZSBicm93c2VyCiAg
ICAgICAgYnJvd3Nlck1hdGNoLAoKICAgICAgICAvLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00g
cmVhZHkKICAgICAgICByZWFkeUxpc3QsCgogICAgICAgIC8vIFRoZSByZWFkeSBldmVudCBoYW5k
bGVyCiAgICAgICAgRE9NQ29udGVudExvYWRlZCwKCiAgICAgICAgLy8gU2F2ZSBhIHJlZmVyZW5j
ZSB0byBzb21lIGNvcmUgbWV0aG9kcwogICAgICAgIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZywKICAgICAgICBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LAogICAgICAgIHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaCwKICAgICAgICBzbGljZSA9
IEFycmF5LnByb3RvdHlwZS5zbGljZSwKICAgICAgICB0cmltID0gU3RyaW5nLnByb3RvdHlwZS50
cmltLAogICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiwKCiAgICAgICAg
Ly8gW1tDbGFzc11dIC0+IHR5cGUgcGFpcnMKICAgICAgICBjbGFzczJ0eXBlID0ge307CgpqUXVl
cnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewogICAgICAgIGNvbnN0cnVjdG9yOiBqUXVlcnks
CiAgICAgICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkg
ewogICAgICAgICAgICAgICAgdmFyIG1hdGNoLCBlbGVtLCByZXQsIGRvYzsKCiAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgJCgiIiksICQobnVsbCksIG9yICQodW5kZWZpbmVkKQogICAgICAgICAg
ICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSAkKERPTUVs
ZW1lbnQpCiAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gVGhl
IGJvZHkgZWxlbWVudCBvbmx5IGV4aXN0cyBvbmNlLCBvcHRpbWl6ZSBmaW5kaW5nIGl0CiAgICAg
ICAgICAgICAgICBpZiAoIHNlbGVjdG9yID09PSAiYm9keSIgJiYgIWNvbnRleHQgJiYgZG9jdW1l
bnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gZG9jdW1l
bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbMF0gPSBkb2N1bWVudC5ib2R5OwogICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlIEhU
TUwgc3RyaW5ncwogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJp
bmciICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgZGVhbGluZyB3aXRoIEhU
TUwgc3RyaW5nIG9yIGFuIElEPwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9y
LmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3IubGVuZ3RoIC0g
MSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQg
d2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSBxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmVyaWZ5IGEgbWF0Y2gsIGFuZCB0
aGF0IG5vIGNvbnRleHQgd2FzIHNwZWNpZmllZCBmb3IgI2lkCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2Yg
alF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb2MgPSAoY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBj
b250ZXh0IDogZG9jdW1lbnQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGEgc2luZ2xlIHN0cmluZyBpcyBwYXNzZWQgaW4gYW5kIGl0J3MgYSBzaW5nbGUg
dGFnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGRvIGEg
Y3JlYXRlRWxlbWVudCBhbmQgc2tpcCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gcnNpbmdsZVRhZy5leGVjKCBzZWxlY3RvciApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1BsYWlu
T2JqZWN0KCBjb250ZXh0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBbIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
IHJldFsxXSApIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmZuLmF0dHIuY2FsbCggc2VsZWN0b3IsIGNvbnRleHQsIHRydWUg
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0b3IgPSBbIGRvYy5jcmVhdGVFbGVtZW50KCByZXRbMV0gKSBdOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgbWF0
Y2hbMV0gXSwgWyBkb2MgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RvciA9IChyZXQuY2FjaGVhYmxlID8galF1ZXJ5LmNsb25lKHJldC5m
cmFnbWVudCkgOiByZXQuZnJhZ21lbnQpLmNoaWxkTm9kZXM7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKCIjaWQiKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0
byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9j
dW1lbnQgIzY5NjMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEg
cmV0dXJuIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgIT09IG1hdGNoWzJdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
b290alF1ZXJ5LmZpbmQoIHNlbGVjdG9yICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgaW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5
IGludG8gdGhlIGpRdWVyeSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzWzBdID0gZWxlbTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHBy
LCAkKC4uLikpCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFjb250ZXh0IHx8
IGNvbnRleHQuanF1ZXJ5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoY29udGV4dCB8fCByb290alF1ZXJ5KS5maW5kKCBzZWxlY3RvciApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChl
eHByKQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2Vs
ZWN0b3IgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEhB
TkRMRTogJChmdW5jdGlvbikKICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0IGZvciBkb2N1bWVu
dCByZWFkeQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNl
bGVjdG9yICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290alF1ZXJ5LnJl
YWR5KCBzZWxlY3RvciApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChz
ZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuc2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3RvcjsKICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTsK
ICAgICAgICB9LAoKICAgICAgICAvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yCiAgICAg
ICAgc2VsZWN0b3I6ICIiLAoKICAgICAgICAvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVy
eSBiZWluZyB1c2VkCiAgICAgICAganF1ZXJ5OiAiMS42LjQiLAoKICAgICAgICAvLyBUaGUgZGVm
YXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKICAgICAgICBsZW5ndGg6IDAsCgog
ICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVk
IGVsZW1lbnQgc2V0CiAgICAgICAgc2l6ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5sZW5ndGg7CiAgICAgICAgfSwKCiAgICAgICAgdG9BcnJheTogZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2xpY2UuY2FsbCggdGhpcywgMCApOwogICAgICAg
IH0sCgogICAgICAgIC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVu
dCBzZXQgT1IKICAgICAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMg
YSBjbGVhbiBhcnJheQogICAgICAgIGdldDogZnVuY3Rpb24oIG51bSApIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBudW0gPT0gbnVsbCA/CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1
cm4gYSAnY2xlYW4nIGFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9BcnJheSgp
IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBqdXN0IHRoZSBvYmplY3QKICAg
ICAgICAgICAgICAgICAgICAgICAgKCBudW0gPCAwID8gdGhpc1sgdGhpcy5sZW5ndGggKyBudW0g
XSA6IHRoaXNbIG51bSBdICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gVGFrZSBhbiBhcnJheSBv
ZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjawogICAgICAgIC8vIChyZXR1cm5p
bmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQogICAgICAgIHB1c2hTdGFjazogZnVuY3Rp
b24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEg
bmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0g
dGhpcy5jb25zdHJ1Y3RvcigpOwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXko
IGVsZW1zICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJldCwgZWxl
bXMgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkubWVyZ2UoIHJldCwgZWxlbXMgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNl
KQogICAgICAgICAgICAgICAgcmV0LnByZXZPYmplY3QgPSB0aGlzOwoKICAgICAgICAgICAgICAg
IHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0OwoKICAgICAgICAgICAgICAgIGlmICggbmFtZSA9
PT0gImZpbmQiICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQuc2VsZWN0b3IgPSB0aGlz
LnNlbGVjdG9yICsgKHRoaXMuc2VsZWN0b3IgPyAiICIgOiAiIikgKyBzZWxlY3RvcjsKICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAiLiIgKyBuYW1lICsgIigiICsgc2VsZWN0b3Ig
KyAiKSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBu
ZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAg
ICAgfSwKCiAgICAgICAgLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGlu
IHRoZSBtYXRjaGVkIHNldC4KICAgICAgICAvLyAoWW91IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMg
d2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBpcwogICAgICAgIC8vIG9ubHkgdXNlZCBp
bnRlcm5hbGx5LikKICAgICAgICBlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2ssIGFyZ3MgKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7
CiAgICAgICAgfSwKCiAgICAgICAgcmVhZHk6IGZ1bmN0aW9uKCBmbiApIHsKICAgICAgICAgICAg
ICAgIC8vIEF0dGFjaCB0aGUgbGlzdGVuZXJzCiAgICAgICAgICAgICAgICBqUXVlcnkuYmluZFJl
YWR5KCk7CgogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjYWxsYmFjawogICAgICAgICAgICAg
ICAgcmVhZHlMaXN0LmRvbmUoIGZuICk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgfSwKCiAgICAgICAgZXE6IGZ1bmN0aW9uKCBpICkgewogICAgICAgICAgICAgICAgcmV0
dXJuIGkgPT09IC0xID8KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGljZSggaSApIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGljZSggaSwgK2kgKyAxICk7CiAgICAgICAg
fSwKCiAgICAgICAgZmlyc3Q6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZXEoIDAgKTsKICAgICAgICB9LAoKICAgICAgICBsYXN0OiBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVxKCAtMSApOwogICAgICAgIH0sCgogICAgICAgIHNsaWNl
OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xp
Y2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLAogICAgICAgICAgICAgICAgICAgICAgICAic2xp
Y2UiLCBzbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpICk7CiAgICAgICAgfSwKCiAgICAg
ICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7
CiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgfSwKCiAgICAgICAgZW5kOiBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1
Y3RvcihudWxsKTsKICAgICAgICB9LAoKICAgICAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHku
CiAgICAgICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpR
dWVyeSBtZXRob2QuCiAgICAgICAgcHVzaDogcHVzaCwKICAgICAgICBzb3J0OiBbXS5zb3J0LAog
ICAgICAgIHNwbGljZTogW10uc3BsaWNlCn07CgovLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRo
ZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCmpRdWVyeS5mbi5pbml0
LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKCmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5k
ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29w
eUlzQXJyYXksIGNsb25lLAogICAgICAgICAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8
IHt9LAogICAgICAgICAgICAgICAgaSA9IDEsCiAgICAgICAgICAgICAgICBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoLAogICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwoKICAgICAgICAvLyBI
YW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCiAgICAgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ID09
PSAiYm9vbGVhbiIgKSB7CiAgICAgICAgICAgICAgICBkZWVwID0gdGFyZ2V0OwogICAgICAgICAg
ICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OwogICAgICAgICAgICAgICAgLy8gc2tp
cCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldAogICAgICAgICAgICAgICAgaSA9IDI7CiAgICAg
ICAgfQoKICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBz
b21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKICAgICAgICBpZiAoIHR5cGVvZiB0YXJn
ZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5jdGlvbih0YXJnZXQpICkgewogICAgICAg
ICAgICAgICAgdGFyZ2V0ID0ge307CiAgICAgICAgfQoKICAgICAgICAvLyBleHRlbmQgalF1ZXJ5
IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKICAgICAgICBpZiAoIGxlbmd0
aCA9PT0gaSApIHsKICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXM7CiAgICAgICAgICAgICAg
ICAtLWk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAg
ICAgICAgICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMK
ICAgICAgICAgICAgICAgIGlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkgIT0gbnVsbCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdAogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0WyBuYW1lIF07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWN1
cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWlu
T2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KGNvcHkpKSApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3B5SXNBcnJh
eSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29w
eUlzQXJyYXkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpR
dWVyeS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4
dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiB0aGUgbW9kaWZp
ZWQgb2JqZWN0CiAgICAgICAgcmV0dXJuIHRhcmdldDsKfTsKCmpRdWVyeS5leHRlbmQoewogICAg
ICAgIG5vQ29uZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkgewogICAgICAgICAgICAgICAgaWYgKCB3
aW5kb3cuJCA9PT0galF1ZXJ5ICkgewogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuJCA9
IF8kOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGVlcCAmJiB3aW5k
b3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5q
UXVlcnkgPSBfalF1ZXJ5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1
c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4KICAgICAgICBpc1JlYWR5OiBmYWxzZSwK
CiAgICAgICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9y
IGJlZm9yZQogICAgICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCiAgICAg
ICAgcmVhZHlXYWl0OiAxLAoKICAgICAgICAvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkg
ZXZlbnQKICAgICAgICBob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkgewogICAgICAgICAgICAg
ICAgaWYgKCBob2xkICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHlXYWl0
Kys7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkucmVhZHkoIHRydWUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAv
LyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5CiAgICAgICAgcmVhZHk6IGZ1bmN0aW9uKCB3
YWl0ICkgewogICAgICAgICAgICAgICAgLy8gRWl0aGVyIGEgcmVsZWFzZWQgaG9sZCBvciBhbiBE
T01yZWFkeS9sb2FkIGV2ZW50IGFuZCBub3QgeWV0IHJlYWR5CiAgICAgICAgICAgICAgICBpZiAo
ICh3YWl0ID09PSB0cnVlICYmICEtLWpRdWVyeS5yZWFkeVdhaXQpIHx8ICh3YWl0ICE9PSB0cnVl
ICYmICFqUXVlcnkuaXNSZWFkeSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSBib2R5IGV4aXN0cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVy
emVhbG91cyAodGlja2V0ICM1NDQzKS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZG9j
dW1lbnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0
VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeQog
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3Jl
bWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHdh
aXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4
ZWN1dGUKICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1
bWVudCwgWyBqUXVlcnkgXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBh
bnkgYm91bmQgcmVhZHkgZXZlbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5
LmZuLnRyaWdnZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBk
b2N1bWVudCApLnRyaWdnZXIoICJyZWFkeSIgKS51bmJpbmQoICJyZWFkeSIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGJp
bmRSZWFkeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIHJlYWR5TGlzdCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5fRGVmZXJyZWQoKTsKCiAgICAgICAgICAgICAg
ICAvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRl
ciB0aGUKICAgICAgICAgICAgICAgIC8vIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJy
ZWQuCiAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0
ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNs
eSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeQogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTW96aWxsYSwgT3BlcmEgYW5kIHdl
YmtpdCBuaWdodGxpZXMgY3VycmVudGx5IHN1cHBvcnQgdGhpcyBldmVudAogICAgICAgICAgICAg
ICAgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29u
dGVudExvYWRlZCwgZmFsc2UgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgZmFsbGJh
Y2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCiAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAibG9hZCIsIGpRdWVyeS5yZWFkeSwg
ZmFsc2UgKTsKCiAgICAgICAgICAgICAgICAvLyBJZiBJRSBldmVudCBtb2RlbCBpcyB1c2VkCiAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLAogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBtYXliZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMK
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoICJvbnJlYWR5c3Rh
dGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVkICk7CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawogICAg
ICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYXR0YWNoRXZlbnQoICJvbmxvYWQiLCBqUXVlcnku
cmVhZHkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIElFIGFuZCBub3QgYSBmcmFt
ZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51YWxseSBjaGVjayB0byBzZWUgaWYg
dGhlIGRvY3VtZW50IGlzIHJlYWR5CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3BsZXZl
bCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHdpbmRvdy5mcmFtZUVsZW1lbnQgPT0gbnVsbDsK
ICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQoKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgJiYgdG9wbGV2ZWwg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9TY3JvbGxDaGVjaygpOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gU2VlIHRlc3QvdW5pdC9jb3JlLmpzIGZvciBkZXRhaWxzIGNvbmNlcm5pbmcgaXNGdW5j
dGlvbi4KICAgICAgICAvLyBTaW5jZSB2ZXJzaW9uIDEuMywgRE9NIG1ldGhvZHMgYW5kIGZ1bmN0
aW9ucyBsaWtlIGFsZXJ0CiAgICAgICAgLy8gYXJlbid0IHN1cHBvcnRlZC4gVGhleSByZXR1cm4g
ZmFsc2Ugb24gSUUgKCMyOTY4KS4KICAgICAgICBpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09ICJmdW5jdGlvbiI7
CiAgICAgICAgfSwKCiAgICAgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbigg
b2JqICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09ICJhcnJh
eSI7CiAgICAgICAgfSwKCiAgICAgICAgLy8gQSBjcnVkZSB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYg
YW4gb2JqZWN0IGlzIGEgd2luZG93CiAgICAgICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICJvYmplY3QiICYm
ICJzZXRJbnRlcnZhbCIgaW4gb2JqOwogICAgICAgIH0sCgogICAgICAgIGlzTmFOOiBmdW5jdGlv
biggb2JqICkgewogICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA9PSBudWxsIHx8ICFyZGlnaXQu
dGVzdCggb2JqICkgfHwgaXNOYU4oIG9iaiApOwogICAgICAgIH0sCgogICAgICAgIHR5cGU6IGZ1
bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqID09IG51bGwgPwogICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcoIG9iaiApIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbChvYmopIF0gfHwgIm9iamVjdCI7CiAgICAgICAg
fSwKCiAgICAgICAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAg
ICAgIC8vIE11c3QgYmUgYW4gT2JqZWN0LgogICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvZiBJ
RSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiB0aGUgY29uc3RydWN0b3Ig
cHJvcGVydHkuCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBET00gbm9kZXMgYW5k
IHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3VnaCwgYXMgd2VsbAogICAgICAgICAgICAg
ICAgaWYgKCAhb2JqIHx8IGpRdWVyeS50eXBlKG9iaikgIT09ICJvYmplY3QiIHx8IG9iai5ub2Rl
VHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJ5IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBt
dXN0IGJlIE9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9iai5jb25zdHJ1Y3Rv
ciAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoYXNPd24uY2FsbChvYmosICJj
b25zdHJ1Y3RvciIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWhhc093bi5j
YWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICJpc1Byb3RvdHlwZU9mIikgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSUU4LDkgV2lsbCB0aHJvdyBleGNlcHRpb25zIG9uIGNlcnRhaW4gaG9zdCBv
YmplY3RzICM5ODk3CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVy
YXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCwKICAgICAgICAgICAgICAgIC8vIGlmIGxhc3Qg
b25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duLgoKICAgICAgICAgICAgICAg
IHZhciBrZXk7CiAgICAgICAgICAgICAgICBmb3IgKCBrZXkgaW4gb2JqICkge30KCiAgICAgICAg
ICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwoIG9iaiwga2V5
ICk7CiAgICAgICAgfSwKCiAgICAgICAgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsK
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBuYW1lIGluIG9iaiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgfSwKCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7
CiAgICAgICAgICAgICAgICB0aHJvdyBtc2c7CiAgICAgICAgfSwKCiAgICAgICAgcGFyc2VKU09O
OiBmdW5jdGlvbiggZGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGRhdGEgIT09
ICJzdHJpbmciIHx8ICFkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbGVhZGlu
Zy90cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgKElFIGNhbid0IGhhbmRsZSBpdCkKICAg
ICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkudHJpbSggZGF0YSApOwoKICAgICAgICAgICAgICAg
IC8vIEF0dGVtcHQgdG8gcGFyc2UgdXNpbmcgdGhlIG5hdGl2ZSBKU09OIHBhcnNlciBmaXJzdAog
ICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAmJiB3aW5kb3cuSlNPTi5wYXJzZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5KU09OLnBhcnNlKCBkYXRhICk7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNv
bWluZyBkYXRhIGlzIGFjdHVhbCBKU09OCiAgICAgICAgICAgICAgICAvLyBMb2dpYyBib3Jyb3dl
ZCBmcm9tIGh0dHA6Ly9qc29uLm9yZy9qc29uMi5qcwogICAgICAgICAgICAgICAgaWYgKCBydmFs
aWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxpZGVzY2FwZSwgIkAiICkKICAgICAgICAg
ICAgICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZHRva2VucywgIl0iICkKICAgICAgICAgICAg
ICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAobmV3IEZ1bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkpKCk7
CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxp
ZCBKU09OOiAiICsgZGF0YSApOwogICAgICAgIH0sCgogICAgICAgIC8vIENyb3NzLWJyb3dzZXIg
eG1sIHBhcnNpbmcKICAgICAgICBwYXJzZVhNTDogZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAgICAg
ICAgICAgICB2YXIgeG1sLCB0bXA7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHdpbmRvdy5ET01QYXJzZXIgKSB7IC8vIFN0YW5kYXJkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3IERPTVBhcnNlcigpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEgLCAi
dGV4dC94bWwiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIElFCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoICJNaWNy
b3NvZnQuWE1MRE9NIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbC5hc3lu
YyA9ICJmYWxzZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sLmxvYWRYTUwo
IGRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRj
aCggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0gdW5kZWZpbmVkOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVt
ZW50IHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBYTUw6ICIg
KyBkYXRhICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4geG1sOwog
ICAgICAgIH0sCgogICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge30sCgogICAgICAgIC8vIEV2YWx1
YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CiAgICAgICAgLy8gV29ya2Fyb3VuZHMg
YmFzZWQgb24gZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCiAgICAgICAgLy8gaHR0cDovL3dlYmxv
Z3MuamF2YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2Ny
aXB0LWdsb2JhbC1jb250ZXh0CiAgICAgICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7
CiAgICAgICAgICAgICAgICBpZiAoIGRhdGEgJiYgcm5vdHdoaXRlLnRlc3QoIGRhdGEgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGV4ZWNTY3JpcHQgb24gSW50ZXJuZXQg
RXhwbG9yZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGFuIGFub255bW91cyBm
dW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJhdGhlciB0aGFuIGpRdWVyeSBpbiBGaXJlZm94CiAgICAgICAgICAgICAgICAgICAgICAg
ICggd2luZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93WyAiZXZhbCIgXS5jYWxsKCB3aW5kb3csIGRhdGEgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfSApKCBkYXRhICk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfSwKCiAgICAgICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5
IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwogICAgICAgIC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8g
aHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKICAgICAgICBjYW1lbENhc2U6IGZ1bmN0
aW9uKCBzdHJpbmcgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJt
c1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7CiAgICAg
ICAgfSwKCiAgICAgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b1VwcGVyQ2Fz
ZSgpID09PSBuYW1lLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gYXJncyBp
cyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQogICAgICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmplY3Qs
IGNhbGxiYWNrLCBhcmdzICkgewogICAgICAgICAgICAgICAgdmFyIG5hbWUsIGkgPSAwLAogICAg
ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBvYmplY3QubGVuZ3RoLAogICAgICAgICAgICAg
ICAgICAgICAgICBpc09iaiA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0Z1bmN0
aW9uKCBvYmplY3QgKTsKCiAgICAgICAgICAgICAgICBpZiAoIGFyZ3MgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaXNPYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggbmFtZSBpbiBvYmplY3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmplY3RbIG5hbWUgXSwgYXJncyApID09
PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNr
LmFwcGx5KCBvYmplY3RbIGkrKyBdLCBhcmdzICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBIHNwZWNp
YWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAogICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc09iaiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9iamVjdCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCgg
b2JqZWN0WyBuYW1lIF0sIG5hbWUsIG9iamVjdFsgbmFtZSBdICkgPT09IGZhbHNlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqZWN0WyBp
IF0sIGksIG9iamVjdFsgaSsrIF0gKSA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CiAgICAgICAgfSwKCiAgICAgICAgLy8gVXNlIG5hdGl2ZSBTdHJpbmcu
dHJpbSBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZQogICAgICAgIHRyaW06IHRyaW0gPwogICAg
ICAgICAgICAgICAgZnVuY3Rpb24oIHRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0ZXh0ID09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltLmNhbGwoIHRleHQgKTsKICAgICAg
ICAgICAgICAgIH0gOgoKICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2Ugb3VyIG93biB0
cmltbWluZyBmdW5jdGlvbmFsaXR5CiAgICAgICAgICAgICAgICBmdW5jdGlvbiggdGV4dCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiIgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKCB0cmltTGVmdCwgIiIgKS5yZXBsYWNlKCB0cmltUmln
aHQsICIiICk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAvLyByZXN1bHRzIGlzIGZvciBp
bnRlcm5hbCB1c2FnZSBvbmx5CiAgICAgICAgbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyYXksIHJl
c3VsdHMgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTsKCiAgICAg
ICAgICAgICAgICBpZiAoIGFycmF5ICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoZSB3aW5kb3csIHN0cmluZ3MgKGFuZCBmdW5jdGlvbnMpIGFsc28gaGF2ZSAnbGVuZ3Ro
JwogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZXh0cmEgdHlwZW9mIGZ1bmN0aW9uIGNo
ZWNrIGlzIHRvIHByZXZlbnQgY3Jhc2hlcwogICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBT
YWZhcmkgMiAoU2VlOiAjMzAzOSkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHdlYWtlZCBs
b2dpYyBzbGlnaHRseSB0byBoYW5kbGUgQmxhY2tiZXJyeSA0LjcgUmVnRXhwIGlzc3VlcyAjNjkz
MAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBhcnJheSAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcnJheS5sZW5ndGggPT0gbnVsbCB8fCB0
eXBlID09PSAic3RyaW5nIiB8fCB0eXBlID09PSAiZnVuY3Rpb24iIHx8IHR5cGUgPT09ICJyZWdl
eHAiIHx8IGpRdWVyeS5pc1dpbmRvdyggYXJyYXkgKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoLmNhbGwoIHJldCwgYXJyYXkgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2Uo
IHJldCwgYXJyYXkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfSwKCiAgICAgICAgaW5BcnJh
eTogZnVuY3Rpb24oIGVsZW0sIGFycmF5ICkgewogICAgICAgICAgICAgICAgaWYgKCAhYXJyYXkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoIGluZGV4T2YgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleE9mLmNhbGwoIGFycmF5LCBlbGVtICk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcnJheVsgaSBd
ID09PSBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOwogICAgICAgIH0sCgogICAgICAgIG1lcmdlOiBmdW5jdGlvbiggZmlyc3Qs
IHNlY29uZCApIHsKICAgICAgICAgICAgICAgIHZhciBpID0gZmlyc3QubGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgICAgICBqID0gMDsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWNv
bmQubGVuZ3RoID09PSAibnVtYmVyIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGwgPSBzZWNvbmQubGVuZ3RoOyBqIDwgbDsgaisrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCBzZWNvbmRbal0gIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGorKyBdOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZmlyc3QubGVu
Z3RoID0gaTsKCiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3Q7CiAgICAgICAgfSwKCiAgICAg
ICAgZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ICkgewogICAgICAgICAgICAg
ICAgdmFyIHJldCA9IFtdLCByZXRWYWw7CiAgICAgICAgICAgICAgICBpbnYgPSAhIWludjsKCiAg
ICAgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0
ZW1zCiAgICAgICAgICAgICAgICAvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgog
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gISFjYWxs
YmFjayggZWxlbXNbIGkgXSwgaSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGludiAh
PT0gcmV0VmFsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBl
bGVtc1sgaSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIC8vIGFyZyBp
cyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQogICAgICAgIG1hcDogZnVuY3Rpb24oIGVsZW1zLCBj
YWxsYmFjaywgYXJnICkgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBrZXksIHJldCA9IFtd
LAogICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoID0gZWxlbXMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBqcXVlcnkg
b2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKICAgICAgICAgICAgICAgICAgICAgICAgaXNB
cnJheSA9IGVsZW1zIGluc3RhbmNlb2YgalF1ZXJ5IHx8IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYm
IHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYmICggKCBsZW5ndGggPiAwICYmIGVsZW1zWyAw
IF0gJiYgZWxlbXNbIGxlbmd0aCAtMSBdICkgfHwgbGVuZ3RoID09PSAwIHx8IGpRdWVyeS5pc0Fy
cmF5KCBlbGVtcyApICkgOwoKICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGFycmF5
LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpcgogICAgICAgICAgICAgICAg
aWYgKCBpc0FycmF5ICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5n
dGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxi
YWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LAogICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgga2V5IGluIGVsZW1zICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBrZXkg
XSwga2V5LCBhcmcgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCiAgICAgICAgICAgICAgICByZXR1cm4g
cmV0LmNvbmNhdC5hcHBseSggW10sIHJldCApOwogICAgICAgIH0sCgogICAgICAgIC8vIEEgZ2xv
YmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0cwogICAgICAgIGd1aWQ6IDEsCgogICAgICAgIC8v
IEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5
aW5nIGFueQogICAgICAgIC8vIGFyZ3VtZW50cy4KICAgICAgICBwcm94eTogZnVuY3Rpb24oIGZu
LCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gInN0
cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSBmblsgY29udGV4dCBd
OwogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gZm47CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZuID0gdG1wOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFF1
aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVj
CiAgICAgICAgICAgICAgICAvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwg
anVzdCByZXR1cm4gdW5kZWZpbmVkLgogICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVu
Y3Rpb24oIGZuICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2ltdWxhdGVkIGJpbmQKICAg
ICAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICksCiAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0LCBhcmdzLmNvbmNhdCggc2xp
Y2UuY2FsbCggYXJndW1lbnRzICkgKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAg
ICAgICAgICAgICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2Ft
ZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAogICAgICAgICAgICAg
ICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IHByb3h5Lmd1aWQgfHwgalF1ZXJ5
Lmd1aWQrKzsKCiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gTXV0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyB0byBhIGNv
bGxlY3Rpb24KICAgICAgICAvLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRl
ZCBpZiBpdCdzIGEgZnVuY3Rpb24KICAgICAgICBhY2Nlc3M6IGZ1bmN0aW9uKCBlbGVtcywga2V5
LCB2YWx1ZSwgZXhlYywgZm4sIHBhc3MgKSB7CiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0g
ZWxlbXMubGVuZ3RoOwoKICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgbWFueSBhdHRyaWJ1dGVz
CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgayBpbiBrZXkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmFjY2VzcyggZWxlbXMsIGssIGtleVtrXSwgZXhlYywgZm4s
IHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNl
dHRpbmcgb25lIGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZp
bmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBmdW5jdGlvbiB2
YWx1ZXMgZ2V0IGV4ZWN1dGVkIGlmIGV4ZWMgaXMgdHJ1ZQogICAgICAgICAgICAgICAgICAgICAg
ICBleGVjID0gIXBhc3MgJiYgZXhlYyAmJiBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSk7CgogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiggZWxlbXNbaV0sIGtleSwgZXhlYyA/
IHZhbHVlLmNhbGwoIGVsZW1zW2ldLCBpLCBmbiggZWxlbXNbaV0sIGtleSApICkgOiB2YWx1ZSwg
cGFzcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gR2V0
dGluZyBhbiBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgIHJldHVybiBsZW5ndGggPyBmbiggZWxl
bXNbMF0sIGtleSApIDogdW5kZWZpbmVkOwogICAgICAgIH0sCgogICAgICAgIG5vdzogZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKICAg
ICAgICB9LAoKICAgICAgICAvLyBVc2Ugb2YgalF1ZXJ5LmJyb3dzZXIgaXMgZnJvd25lZCB1cG9u
LgogICAgICAgIC8vIE1vcmUgZGV0YWlsczogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VdGlsaXRp
ZXMvalF1ZXJ5LmJyb3dzZXIKICAgICAgICB1YU1hdGNoOiBmdW5jdGlvbiggdWEgKSB7CiAgICAg
ICAgICAgICAgICB1YSA9IHVhLnRvTG93ZXJDYXNlKCk7CgogICAgICAgICAgICAgICAgdmFyIG1h
dGNoID0gcndlYmtpdC5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIHJvcGVy
YS5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIHJtc2llLmV4ZWMoIHVhICkg
fHwKICAgICAgICAgICAgICAgICAgICAgICAgdWEuaW5kZXhPZigiY29tcGF0aWJsZSIpIDwgMCAm
JiBybW96aWxsYS5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIFtdOwoKICAg
ICAgICAgICAgICAgIHJldHVybiB7IGJyb3dzZXI6IG1hdGNoWzFdIHx8ICIiLCB2ZXJzaW9uOiBt
YXRjaFsyXSB8fCAiMCIgfTsKICAgICAgICB9LAoKICAgICAgICBzdWI6IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgZnVuY3Rpb24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnlTdWIuZm4uaW5pdCggc2Vs
ZWN0b3IsIGNvbnRleHQgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGpRdWVy
eS5leHRlbmQoIHRydWUsIGpRdWVyeVN1YiwgdGhpcyApOwogICAgICAgICAgICAgICAgalF1ZXJ5
U3ViLnN1cGVyY2xhc3MgPSB0aGlzOwogICAgICAgICAgICAgICAgalF1ZXJ5U3ViLmZuID0galF1
ZXJ5U3ViLnByb3RvdHlwZSA9IHRoaXMoKTsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5mbi5j
b25zdHJ1Y3RvciA9IGpRdWVyeVN1YjsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5zdWIgPSB0
aGlzLnN1YjsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5mbi5pbml0ID0gZnVuY3Rpb24gaW5p
dCggc2VsZWN0b3IsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29u
dGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICYmICEoY29udGV4dCBpbnN0YW5jZW9m
IGpRdWVyeVN1YikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9
IGpRdWVyeVN1YiggY29udGV4dCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmZuLmluaXQuY2FsbCggdGhpcywgc2VsZWN0
b3IsIGNvbnRleHQsIHJvb3RqUXVlcnlTdWIgKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICBqUXVlcnlTdWIuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnlTdWIuZm47CiAgICAg
ICAgICAgICAgICB2YXIgcm9vdGpRdWVyeVN1YiA9IGpRdWVyeVN1Yihkb2N1bWVudCk7CiAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5U3ViOwogICAgICAgIH0sCgogICAgICAgIGJyb3dzZXI6
IHt9Cn0pOwoKLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwCmpRdWVyeS5lYWNoKCJCb29s
ZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxp
dCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7CiAgICAgICAgY2xhc3MydHlwZVsgIltvYmplY3Qg
IiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKfSk7Cgpicm93c2VyTWF0Y2gg
PSBqUXVlcnkudWFNYXRjaCggdXNlckFnZW50ICk7CmlmICggYnJvd3Nlck1hdGNoLmJyb3dzZXIg
KSB7CiAgICAgICAgalF1ZXJ5LmJyb3dzZXJbIGJyb3dzZXJNYXRjaC5icm93c2VyIF0gPSB0cnVl
OwogICAgICAgIGpRdWVyeS5icm93c2VyLnZlcnNpb24gPSBicm93c2VyTWF0Y2gudmVyc2lvbjsK
fQoKLy8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5icm93c2VyLndlYmtpdCBpbnN0ZWFkCmlmICgg
alF1ZXJ5LmJyb3dzZXIud2Via2l0ICkgewogICAgICAgIGpRdWVyeS5icm93c2VyLnNhZmFyaSA9
IHRydWU7Cn0KCi8vIElFIGRvZXNuJ3QgbWF0Y2ggbm9uLWJyZWFraW5nIHNwYWNlcyB3aXRoIFxz
CmlmICggcm5vdHdoaXRlLnRlc3QoICJceEEwIiApICkgewogICAgICAgIHRyaW1MZWZ0ID0gL15b
XHNceEEwXSsvOwogICAgICAgIHRyaW1SaWdodCA9IC9bXHNceEEwXSskLzsKfQoKLy8gQWxsIGpR
dWVyeSBvYmplY3RzIHNob3VsZCBwb2ludCBiYWNrIHRvIHRoZXNlCnJvb3RqUXVlcnkgPSBqUXVl
cnkoZG9jdW1lbnQpOwoKLy8gQ2xlYW51cCBmdW5jdGlvbnMgZm9yIHRoZSBkb2N1bWVudCByZWFk
eSBtZXRob2QKaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgewogICAgICAgIERPTUNv
bnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFs
c2UgKTsKICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOwogICAgICAgIH07Cgp9IGVsc2Ug
aWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHsKICAgICAgICBET01Db250ZW50TG9hZGVkID0g
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYm9keSBleGlzdHMsIGF0
IGxlYXN0LCBpbiBjYXNlIElFIGdldHMgYSBsaXR0bGUgb3ZlcnplYWxvdXMgKHRpY2tldCAjNTQ0
MykuCiAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0
ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCAib25y
ZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwogICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkucmVhZHkoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9CgovLyBU
aGUgRE9NIHJlYWR5IGNoZWNrIGZvciBJbnRlcm5ldCBFeHBsb3JlcgpmdW5jdGlvbiBkb1Njcm9s
bENoZWNrKCkgewogICAgICAgIGlmICggalF1ZXJ5LmlzUmVhZHkgKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy8gSWYg
SUUgaXMgdXNlZCwgdXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKICAgICAgICAgICAgICAg
IC8vIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCiAgICAgICAg
ICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKTsKICAgICAg
ICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ss
IDEgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIGFuZCBl
eGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucwogICAgICAgIGpRdWVyeS5yZWFkeSgpOwp9Cgpy
ZXR1cm4galF1ZXJ5OwoKfSkoKTsKCgp2YXIgLy8gUHJvbWlzZSBtZXRob2RzCiAgICAgICAgcHJv
bWlzZU1ldGhvZHMgPSAiZG9uZSBmYWlsIGlzUmVzb2x2ZWQgaXNSZWplY3RlZCBwcm9taXNlIHRo
ZW4gYWx3YXlzIHBpcGUiLnNwbGl0KCAiICIgKSwKICAgICAgICAvLyBTdGF0aWMgcmVmZXJlbmNl
IHRvIHNsaWNlCiAgICAgICAgc2xpY2VEZWZlcnJlZCA9IFtdLnNsaWNlOwoKalF1ZXJ5LmV4dGVu
ZCh7CiAgICAgICAgLy8gQ3JlYXRlIGEgc2ltcGxlIGRlZmVycmVkIChvbmUgY2FsbGJhY2tzIGxp
c3QpCiAgICAgICAgX0RlZmVycmVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciAv
LyBjYWxsYmFja3MgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBbXSwK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVkIFsgY29udGV4dCAsIGFyZ3MgXQogICAg
ICAgICAgICAgICAgICAgICAgICBmaXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8g
YXZvaWQgZmlyaW5nIHdoZW4gYWxyZWFkeSBkb2luZyBzbwogICAgICAgICAgICAgICAgICAgICAg
ICBmaXJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsYWcgdG8ga25vdyBpZiB0aGUg
ZGVmZXJyZWQgaGFzIGJlZW4gY2FuY2VsbGVkCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNl
bGxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGRlZmVycmVkIGl0c2VsZgogICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZCAgPSB7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGRvbmUoIGYxLCBmMiwgLi4uKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvbmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhY2FuY2VsbGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2ZpcmVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGZpcmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9maXJlZCA9IGZpcmVkOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVkID0gMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbGVuZ3RoID0gYXJncy5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gYXJnc1sgaSBdOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBqUXVlcnkudHlw
ZSggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdHlwZSA9PT0gImFycmF5IiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLmRvbmUu
YXBwbHkoIGRlZmVycmVkLCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggX2ZpcmVkICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBf
ZmlyZWRbIDAgXSwgX2ZpcmVkWyAxIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aXRoIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3MKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQs
IGFyZ3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFj
YW5jZWxsZWQgJiYgIWZpcmVkICYmICFmaXJpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBhcmdzIGFyZSBhdmFpbGFibGUg
KCM4NDIxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmdzID0gYXJncyB8fCBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyaW5nID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSggY2FsbGJhY2tzWyAwIF0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
a3Muc2hpZnQoKS5hcHBseSggY29udGV4dCwgYXJncyApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJlZCA9IFsgY29udGV4dCwgYXJncyBdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
cmluZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJl
c29sdmUgd2l0aCB0aGlzIGFzIGNvbnRleHQgYW5kIGdpdmVuIGFyZ3VtZW50cwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHRoaXMsIGFy
Z3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSGFzIHRoaXMgZGVmZXJyZWQgYmVlbiByZXNvbHZlZD8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhISggZmlyaW5nIHx8
IGZpcmVkICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuY2VsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmNlbGxlZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja3MgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7
CiAgICAgICAgfSwKCiAgICAgICAgLy8gRnVsbCBmbGVkZ2VkIGRlZmVycmVkICh0d28gY2FsbGJh
Y2tzIGxpc3QpCiAgICAgICAgRGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkgewogICAgICAgICAg
ICAgICAgdmFyIGRlZmVycmVkID0galF1ZXJ5Ll9EZWZlcnJlZCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICBmYWlsRGVmZXJyZWQgPSBqUXVlcnkuX0RlZmVycmVkKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgIHByb21pc2U7CiAgICAgICAgICAgICAgICAvLyBBZGQgZXJyb3JEZWZlcnJlZCBt
ZXRob2RzLCB0aGVuIGFuZCBwcm9taXNlCiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCBk
ZWZlcnJlZCwgewogICAgICAgICAgICAgICAgICAgICAgICB0aGVuOiBmdW5jdGlvbiggZG9uZUNh
bGxiYWNrcywgZmFpbENhbGxiYWNrcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5kb25lKCBkb25lQ2FsbGJhY2tzICkuZmFpbCggZmFpbENhbGxiYWNrcyApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBhbHdheXM6IGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5kb25lLmFw
cGx5KCBkZWZlcnJlZCwgYXJndW1lbnRzICkuZmFpbC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6
IGZhaWxEZWZlcnJlZC5kb25lLAogICAgICAgICAgICAgICAgICAgICAgICByZWplY3RXaXRoOiBm
YWlsRGVmZXJyZWQucmVzb2x2ZVdpdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdDog
ZmFpbERlZmVycmVkLnJlc29sdmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6
IGZhaWxEZWZlcnJlZC5pc1Jlc29sdmVkLAogICAgICAgICAgICAgICAgICAgICAgICBwaXBlOiBm
dW5jdGlvbiggZm5Eb25lLCBmbkZhaWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5jdGlvbiggbmV3RGVmZXIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBbIGZuRG9uZSwgInJl
c29sdmUiIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZhaWw6IFsgZm5GYWlsLCAicmVqZWN0IiBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LCBmdW5jdGlvbiggaGFuZGxlciwgZGF0YSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gZGF0YVsgMCBdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlv
biA9IGRhdGFbIDEgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm5lZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsg
aGFuZGxlciBdKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgPSBmbi5hcHBseSggdGhpcywg
YXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBy
ZXR1cm5lZC5wcm9taXNlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLnByb21pc2UoKS50
aGVuKCBuZXdEZWZlci5yZXNvbHZlLCBuZXdEZWZlci5yZWplY3QgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0RlZmVyWyBhY3Rpb24gKyAiV2l0aCIgXSggdGhpcyA9PT0gZGVm
ZXJyZWQgPyBuZXdEZWZlciA6IHRoaXMsIFsgcmV0dXJuZWQgXSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkWyBoYW5kbGVyIF0oIG5ld0RlZmVyWyBhY3Rpb24gXSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5wcm9t
aXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8g
dGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlOiBmdW5jdGlvbiggb2Jq
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2JqID09IG51bGwgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHByb21pc2UgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
cm9taXNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IG9iaiA9IHt9OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgaSA9IHByb21pc2VNZXRob2RzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSggaS0tICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqWyBwcm9taXNlTWV0aG9kc1tpXSBdID0gZGVmZXJyZWRbIHByb21pc2VNZXRo
b2RzW2ldIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG9ubHkgb25l
IGNhbGxiYWNrIGxpc3Qgd2lsbCBiZSB1c2VkCiAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25l
KCBmYWlsRGVmZXJyZWQuY2FuY2VsICkuZmFpbCggZGVmZXJyZWQuY2FuY2VsICk7CiAgICAgICAg
ICAgICAgICAvLyBVbmV4cG9zZSBjYW5jZWwKICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWZlcnJl
ZC5jYW5jZWw7CiAgICAgICAgICAgICAgICAvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55CiAgICAg
ICAgICAgICAgICBpZiAoIGZ1bmMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuY2Fs
bCggZGVmZXJyZWQsIGRlZmVycmVkICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICByZXR1cm4gZGVmZXJyZWQ7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRGVmZXJyZWQgaGVscGVy
CiAgICAgICAgd2hlbjogZnVuY3Rpb24oIGZpcnN0UGFyYW0gKSB7CiAgICAgICAgICAgICAgICB2
YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudCA9IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQg
PSBsZW5ndGggPD0gMSAmJiBmaXJzdFBhcmFtICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBmaXJzdFBh
cmFtLnByb21pc2UgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RQYXJh
bSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LkRlZmVycmVkKCk7CiAg
ICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRnVuYyggaSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmdzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlRGVmZXJy
ZWQuY2FsbCggYXJndW1lbnRzLCAwICkgOiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFN0cmFuZ2UgYnVnIGluIEZGNDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFZhbHVlcyBjaGFuZ2VkIG9udG8gdGhlIGFyZ3VtZW50cyBv
YmplY3Qgc29tZXRpbWVzIGVuZCB1cCBhcyB1bmRlZmluZWQgdmFsdWVzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRzaWRlIHRoZSAkLndoZW4gbWV0aG9kLiBD
bG9uaW5nIHRoZSBvYmplY3QgaW50byBhIGZyZXNoIGFycmF5IHNvbHZlcyB0aGUgaXNzdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRo
KCBkZWZlcnJlZCwgc2xpY2VEZWZlcnJlZC5jYWxsKCBhcmdzLCAwICkgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCA+IDEgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBhcmdzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZ3Nb
IGkgXS5wcm9taXNlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWyBpIF0ucHJvbWlzZSgpLnRoZW4oIHJlc29sdmVGdW5jKGkpLCBkZWZlcnJlZC5yZWpl
Y3QgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1jb3VudDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhY291bnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGRlZmVycmVkLCBhcmdzICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGRlZmVycmVkICE9PSBmaXJzdFBh
cmFtICkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVm
ZXJyZWQsIGxlbmd0aCA/IFsgZmlyc3RQYXJhbSBdIDogW10gKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CiAgICAgICAgfQp9KTsK
CgoKalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7CgogICAgICAgIHZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLAogICAgICAgICAgICAgICAgZG9jdW1lbnRFbGVt
ZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgICAgICAgICAgYWxsLAogICAg
ICAgICAgICAgICAgYSwKICAgICAgICAgICAgICAgIHNlbGVjdCwKICAgICAgICAgICAgICAgIG9w
dCwKICAgICAgICAgICAgICAgIGlucHV0LAogICAgICAgICAgICAgICAgbWFyZ2luRGl2LAogICAg
ICAgICAgICAgICAgc3VwcG9ydCwKICAgICAgICAgICAgICAgIGZyYWdtZW50LAogICAgICAgICAg
ICAgICAgYm9keSwKICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50UGFyZW50LAogICAgICAgICAg
ICAgICAgdGVzdEVsZW1lbnQsCiAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudFN0eWxlLAogICAg
ICAgICAgICAgICAgdGRzLAogICAgICAgICAgICAgICAgZXZlbnRzLAogICAgICAgICAgICAgICAg
ZXZlbnROYW1lLAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVk
OwoKICAgICAgICAvLyBQcmVsaW1pbmFyeSB0ZXN0cwogICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUo
ImNsYXNzTmFtZSIsICJ0Iik7CiAgICAgICAgZGl2LmlubmVySFRNTCA9ICIgICA8bGluay8+PHRh
YmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0
eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7CgoKICAgICAgICBhbGwgPSBk
aXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICIqIiApOwogICAgICAgIGEgPSBkaXYuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoICJhIiApWyAwIF07CgogICAgICAgIC8vIENhbid0IGdldCBiYXNpYyB0ZXN0
IHN1cHBvcnQKICAgICAgICBpZiAoICFhbGwgfHwgIWFsbC5sZW5ndGggfHwgIWEgKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4ge307CiAgICAgICAgfQoKICAgICAgICAvLyBGaXJzdCBiYXRjaCBv
ZiBzdXBwb3J0cyB0ZXN0cwogICAgICAgIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ICJzZWxlY3QiICk7CiAgICAgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwogICAgICAgIGlucHV0ID0gZGl2LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCAiaW5wdXQiIClbIDAgXTsKCiAgICAgICAgc3VwcG9ydCA9IHsKICAgICAgICAg
ICAgICAgIC8vIElFIHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlz
IHVzZWQKICAgICAgICAgICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlOiAoIGRpdi5maXJzdENoaWxk
Lm5vZGVUeXBlID09PSAzICksCgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGJv
ZHkgZWxlbWVudHMgYXJlbid0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQKICAgICAgICAgICAgICAg
IC8vIElFIHdpbGwgaW5zZXJ0IHRoZW0gaW50byBlbXB0eSB0YWJsZXMKICAgICAgICAgICAgICAg
IHRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGJvZHkiICkubGVuZ3RoLAoKICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6
ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTAogICAgICAgICAgICAgICAgLy8gVGhpcyByZXF1aXJl
cyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQogICAgICAgICAgICAgICAgaHRtbFNlcmlhbGl6ZTog
ISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJsaW5rIiApLmxlbmd0aCwKCiAgICAgICAgICAg
ICAgICAvLyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCiAgICAg
ICAgICAgICAgICAvLyAoSUUgdXNlcyAuY3NzVGV4dCBpbnN0ZWFkKQogICAgICAgICAgICAgICAg
c3R5bGU6IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpICksCgogICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgVVJMcyBhcmVuJ3QgbWFuaXB1bGF0ZWQKICAgICAgICAg
ICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRlZmF1bHQpCiAgICAgICAgICAgICAgICBo
cmVmTm9ybWFsaXplZDogKCBhLmdldEF0dHJpYnV0ZSggImhyZWYiICkgPT09ICIvYSIgKSwKCiAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhpc3RzCiAg
ICAgICAgICAgICAgICAvLyAoSUUgdXNlcyBmaWx0ZXIgaW5zdGVhZCkKICAgICAgICAgICAgICAg
IC8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgV2ViS2l0IGlzc3VlLiBTZWUgIzUxNDUK
ICAgICAgICAgICAgICAgIG9wYWNpdHk6IC9eMC41NSQvLnRlc3QoIGEuc3R5bGUub3BhY2l0eSAp
LAoKICAgICAgICAgICAgICAgIC8vIFZlcmlmeSBzdHlsZSBmbG9hdCBleGlzdGVuY2UKICAgICAg
ICAgICAgICAgIC8vIChJRSB1c2VzIHN0eWxlRmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKICAg
ICAgICAgICAgICAgIGNzc0Zsb2F0OiAhIWEuc3R5bGUuY3NzRmxvYXQsCgogICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvciBhIGNoZWNr
Ym94CiAgICAgICAgICAgICAgICAvLyB0aGF0IGl0IGRlZmF1bHRzIHRvICJvbiIuCiAgICAgICAg
ICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvICIiIGluc3RlYWQpCiAgICAgICAgICAgICAg
ICBjaGVja09uOiAoIGlucHV0LnZhbHVlID09PSAib24iICksCgogICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBoYXMgYSB3b3JraW5n
IHNlbGVjdGVkIHByb3BlcnR5LgogICAgICAgICAgICAgICAgLy8gKFdlYktpdCBkZWZhdWx0cyB0
byBmYWxzZSBpbnN0ZWFkIG9mIHRydWUsIElFIHRvbywgaWYgaXQncyBpbiBhbiBvcHRncm91cCkK
ICAgICAgICAgICAgICAgIG9wdFNlbGVjdGVkOiBvcHQuc2VsZWN0ZWQsCgogICAgICAgICAgICAg
ICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxDYXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywg
d2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQvc2V0QXR0cmlidXRlIChpZTYvNykKICAg
ICAgICAgICAgICAgIGdldFNldEF0dHJpYnV0ZTogZGl2LmNsYXNzTmFtZSAhPT0gInQiLAoKICAg
ICAgICAgICAgICAgIC8vIFdpbGwgYmUgZGVmaW5lZCBsYXRlcgogICAgICAgICAgICAgICAgc3Vi
bWl0QnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAgIGNoYW5nZUJ1YmJsZXM6IHRydWUsCiAg
ICAgICAgICAgICAgICBmb2N1c2luQnViYmxlczogZmFsc2UsCiAgICAgICAgICAgICAgICBkZWxl
dGVFeHBhbmRvOiB0cnVlLAogICAgICAgICAgICAgICAgbm9DbG9uZUV2ZW50OiB0cnVlLAogICAg
ICAgICAgICAgICAgaW5saW5lQmxvY2tOZWVkc0xheW91dDogZmFsc2UsCiAgICAgICAgICAgICAg
ICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKICAgICAgICAgICAgICAgIHJlbGlhYmxlTWFyZ2lu
UmlnaHQ6IHRydWUKICAgICAgICB9OwoKICAgICAgICAvLyBNYWtlIHN1cmUgY2hlY2tlZCBzdGF0
dXMgaXMgcHJvcGVybHkgY2xvbmVkCiAgICAgICAgaW5wdXQuY2hlY2tlZCA9IHRydWU7CiAgICAg
ICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0LmNsb25lTm9kZSggdHJ1ZSApLmNoZWNr
ZWQ7CgogICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxl
ZCBzZWxlY3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJsZWQKICAgICAgICAvLyAoV2ViS2l0IG1h
cmtzIHRoZW0gYXMgZGlzYWJsZWQpCiAgICAgICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKICAg
ICAgICBzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDsKCiAgICAgICAgLy8gVGVz
dCB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkZWxldGUgYW4gZXhwYW5kbyBmcm9tIGFuIGVs
ZW1lbnQKICAgICAgICAvLyBGYWlscyBpbiBJbnRlcm5ldCBFeHBsb3JlcgogICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICBkZWxldGUgZGl2LnRlc3Q7CiAgICAgICAgfSBjYXRjaCggZSApIHsK
ICAgICAgICAgICAgICAgIHN1cHBvcnQuZGVsZXRlRXhwYW5kbyA9IGZhbHNlOwogICAgICAgIH0K
CiAgICAgICAgaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVuZXIgJiYgZGl2LmF0dGFjaEV2ZW50ICYm
IGRpdi5maXJlRXZlbnQgKSB7CiAgICAgICAgICAgICAgICBkaXYuYXR0YWNoRXZlbnQoICJvbmNs
aWNrIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb25pbmcgYSBu
b2RlIHNob3VsZG4ndCBjb3B5IG92ZXIgYW55CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJv
dW5kIGV2ZW50IGhhbmRsZXJzIChJRSBkb2VzIHRoaXMpCiAgICAgICAgICAgICAgICAgICAgICAg
IHN1cHBvcnQubm9DbG9uZUV2ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgIGRpdi5jbG9uZU5vZGUoIHRydWUgKS5maXJlRXZlbnQoICJvbmNsaWNrIiApOwog
ICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgYSByYWRpbyBtYWludGFpbnMgaXQncyB2YWx1
ZQogICAgICAgIC8vIGFmdGVyIGJlaW5nIGFwcGVuZGVkIHRvIHRoZSBET00KICAgICAgICBpbnB1
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICAgICAgaW5wdXQudmFsdWUg
PSAidCI7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInJhZGlvIik7CiAgICAg
ICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsKCiAgICAgICAgaW5w
dXQuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwgImNoZWNrZWQiKTsKICAgICAgICBkaXYuYXBwZW5k
Q2hpbGQoIGlucHV0ICk7CiAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCk7CiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5maXJzdENoaWxk
ICk7CgogICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVj
dGx5IGluIGZyYWdtZW50cwogICAgICAgIHN1cHBvcnQuY2hlY2tDbG9uZSA9IGZyYWdtZW50LmNs
b25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkOwoKICAg
ICAgICBkaXYuaW5uZXJIVE1MID0gIiI7CgogICAgICAgIC8vIEZpZ3VyZSBvdXQgaWYgdGhlIFcz
QyBib3ggbW9kZWwgd29ya3MgYXMgZXhwZWN0ZWQKICAgICAgICBkaXYuc3R5bGUud2lkdGggPSBk
aXYuc3R5bGUucGFkZGluZ0xlZnQgPSAiMXB4IjsKCiAgICAgICAgYm9keSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCAiYm9keSIgKVsgMCBdOwogICAgICAgIC8vIFdlIHVzZSBvdXIg
b3duLCBpbnZpc2libGUsIGJvZHkgdW5sZXNzIHRoZSBib2R5IGlzIGFscmVhZHkgcHJlc2VudAog
ICAgICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgdXNlIGEgZGl2ICgjOTIzOSkKICAgICAgICB0ZXN0
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIGJvZHkgPyAiZGl2IiA6ICJib2R5IiAp
OwogICAgICAgIHRlc3RFbGVtZW50U3R5bGUgPSB7CiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5
OiAiaGlkZGVuIiwKICAgICAgICAgICAgICAgIHdpZHRoOiAwLAogICAgICAgICAgICAgICAgaGVp
Z2h0OiAwLAogICAgICAgICAgICAgICAgYm9yZGVyOiAwLAogICAgICAgICAgICAgICAgbWFyZ2lu
OiAwLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIm5vbmUiCiAgICAgICAgfTsKICAgICAg
ICBpZiAoIGJvZHkgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0ZXN0RWxlbWVu
dFN0eWxlLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAog
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAiLTEwMDBweCIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHRvcDogIi0xMDAwcHgiCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAg
ICAgZm9yICggaSBpbiB0ZXN0RWxlbWVudFN0eWxlICkgewogICAgICAgICAgICAgICAgdGVzdEVs
ZW1lbnQuc3R5bGVbIGkgXSA9IHRlc3RFbGVtZW50U3R5bGVbIGkgXTsKICAgICAgICB9CiAgICAg
ICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGRpdiApOwogICAgICAgIHRlc3RFbGVtZW50UGFy
ZW50ID0gYm9keSB8fCBkb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQu
aW5zZXJ0QmVmb3JlKCB0ZXN0RWxlbWVudCwgdGVzdEVsZW1lbnRQYXJlbnQuZmlyc3RDaGlsZCAp
OwoKICAgICAgICAvLyBDaGVjayBpZiBhIGRpc2Nvbm5lY3RlZCBjaGVja2JveCB3aWxsIHJldGFp
biBpdHMgY2hlY2tlZAogICAgICAgIC8vIHZhbHVlIG9mIHRydWUgYWZ0ZXIgYXBwZW5kZWQgdG8g
dGhlIERPTSAoSUU2LzcpCiAgICAgICAgc3VwcG9ydC5hcHBlbmRDaGVja2VkID0gaW5wdXQuY2hl
Y2tlZDsKCiAgICAgICAgc3VwcG9ydC5ib3hNb2RlbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0gMjsK
CiAgICAgICAgaWYgKCAiem9vbSIgaW4gZGl2LnN0eWxlICkgewogICAgICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5lLWJs
b2NrCiAgICAgICAgICAgICAgICAvLyBlbGVtZW50cyB3aGVuIHNldHRpbmcgdGhlaXIgZGlzcGxh
eSB0byAnaW5saW5lJyBhbmQgZ2l2aW5nCiAgICAgICAgICAgICAgICAvLyB0aGVtIGxheW91dAog
ICAgICAgICAgICAgICAgLy8gKElFIDwgOCBkb2VzIHRoaXMpCiAgICAgICAgICAgICAgICBkaXYu
c3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOwogICAgICAgICAgICAgICAgZGl2LnN0eWxlLnpvb20g
PSAxOwogICAgICAgICAgICAgICAgc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gKCBk
aXYub2Zmc2V0V2lkdGggPT09IDIgKTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBlbGVt
ZW50cyB3aXRoIGxheW91dCBzaHJpbmstd3JhcCB0aGVpciBjaGlsZHJlbgogICAgICAgICAgICAg
ICAgLy8gKElFIDYgZG9lcyB0aGlzKQogICAgICAgICAgICAgICAgZGl2LnN0eWxlLmRpc3BsYXkg
PSAiIjsKICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdiBzdHlsZT0nd2lkdGg6
NHB4Oyc+PC9kaXY+IjsKICAgICAgICAgICAgICAgIHN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9
ICggZGl2Lm9mZnNldFdpZHRoICE9PSAyICk7CiAgICAgICAgfQoKICAgICAgICBkaXYuaW5uZXJI
VE1MID0gIjx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRkaW5nOjA7Ym9yZGVyOjA7ZGlzcGxheTpu
b25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IjsKICAgICAgICB0ZHMgPSBkaXYuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoICJ0ZCIgKTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgY2Vs
bHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWlnaHQgd2hlbiB0aGV5IGFyZSBzZXQKICAgICAg
ICAvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBvdGhlciB2aXNpYmxlIHRh
YmxlIGNlbGxzIGluIGEKICAgICAgICAvLyB0YWJsZSByb3c7IGlmIHNvLCBvZmZzZXRXaWR0aC9I
ZWlnaHQgYXJlIG5vdCByZWxpYWJsZSBmb3IgdXNlIHdoZW4KICAgICAgICAvLyBkZXRlcm1pbmlu
ZyBpZiBhbiBlbGVtZW50IGhhcyBiZWVuIGhpZGRlbiBkaXJlY3RseSB1c2luZwogICAgICAgIC8v
IGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1c2Ugb2Zmc2V0cyBpZiBhIHBhcmVu
dCBlbGVtZW50IGlzCiAgICAgICAgLy8gaGlkZGVuOyBkb24gc2FmZXR5IGdvZ2dsZXMgYW5kIHNl
ZSBidWcgIzQ1MTIgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgogICAgICAgIC8vIChvbmx5IElFIDgg
ZmFpbHMgdGhpcyB0ZXN0KQogICAgICAgIGlzU3VwcG9ydGVkID0gKCB0ZHNbIDAgXS5vZmZzZXRI
ZWlnaHQgPT09IDAgKTsKCiAgICAgICAgdGRzWyAwIF0uc3R5bGUuZGlzcGxheSA9ICIiOwogICAg
ICAgIHRkc1sgMSBdLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CgogICAgICAgIC8vIENoZWNrIGlm
IGVtcHR5IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0CiAgICAgICAg
Ly8gKElFIDwgOCBmYWlsIHRoaXMgdGVzdCkKICAgICAgICBzdXBwb3J0LnJlbGlhYmxlSGlkZGVu
T2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7
CiAgICAgICAgZGl2LmlubmVySFRNTCA9ICIiOwoKICAgICAgICAvLyBDaGVjayBpZiBkaXYgd2l0
aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5CiAgICAgICAg
Ly8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVy
LiBGb3IgbW9yZQogICAgICAgIC8vIGluZm8gc2VlIGJ1ZyAjMzMzMwogICAgICAgIC8vIEZhaWxz
IGluIFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRsaWVzCiAgICAgICAgLy8gV2ViS2l0IEJ1
ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2lu
LXJpZ2h0CiAgICAgICAgaWYgKCBkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZh
dWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewogICAgICAgICAgICAgICAgbWFyZ2luRGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKICAgICAgICAgICAgICAgIG1hcmdpbkRp
di5zdHlsZS53aWR0aCA9ICIwIjsKICAgICAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS5tYXJn
aW5SaWdodCA9ICIwIjsKICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZCggbWFyZ2luRGl2
ICk7CiAgICAgICAgICAgICAgICBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgPQogICAgICAg
ICAgICAgICAgICAgICAgICAoIHBhcnNlSW50KCAoIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUoIG1hcmdpbkRpdiwgbnVsbCApIHx8IHsgbWFyZ2luUmlnaHQ6IDAgfSApLm1h
cmdpblJpZ2h0LCAxMCApIHx8IDAgKSA9PT0gMDsKICAgICAgICB9CgogICAgICAgIC8vIFJlbW92
ZSB0aGUgYm9keSBlbGVtZW50IHdlIGFkZGVkCiAgICAgICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1M
ID0gIiI7CiAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQucmVtb3ZlQ2hpbGQoIHRlc3RFbGVtZW50
ICk7CgogICAgICAgIC8vIFRlY2huaXF1ZSBmcm9tIEp1cml5IFpheXRzZXYKICAgICAgICAvLyBo
dHRwOi8vdGhpbmt3ZWIyLmNvbS9wcm9qZWN0cy9wcm90b3R5cGUvZGV0ZWN0aW5nLWV2ZW50LXN1
cHBvcnQtd2l0aG91dC1icm93c2VyLXNuaWZmaW5nLwogICAgICAgIC8vIFdlIG9ubHkgY2FyZSBh
Ym91dCB0aGUgY2FzZSB3aGVyZSBub24tc3RhbmRhcmQgZXZlbnQgc3lzdGVtcwogICAgICAgIC8v
IGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUuIFNob3J0LWNpcmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0
bwogICAgICAgIC8vIGF2b2lkIGFuIGV2YWwgY2FsbCAoaW4gc2V0QXR0cmlidXRlKSB3aGljaCBj
YW4gY2F1c2UgQ1NQCiAgICAgICAgLy8gdG8gZ28gaGF5d2lyZS4gU2VlOiBodHRwczovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1AKICAgICAgICBpZiAoIGRpdi5hdHRhY2hF
dmVudCApIHsKICAgICAgICAgICAgICAgIGZvciggaSBpbiB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHN1Ym1pdDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiAxLAogICAgICAg
ICAgICAgICAgICAgICAgICBmb2N1c2luOiAxCiAgICAgICAgICAgICAgICB9ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAib24iICsgaTsKICAgICAgICAgICAgICAgICAg
ICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBkaXYgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaXNTdXBwb3J0ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGl2LnNldEF0dHJpYnV0ZSggZXZlbnROYW1lLCAicmV0dXJuOyIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggdHlwZW9mIGRpdlsgZXZlbnRO
YW1lIF0gPT09ICJmdW5jdGlvbiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICBzdXBwb3J0WyBpICsgIkJ1YmJsZXMiIF0gPSBpc1N1cHBvcnRlZDsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIE51bGwgY29ubmVjdGVkIGVs
ZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCiAgICAgICAgdGVzdEVsZW1lbnQgPSBmcmFnbWVu
dCA9IHNlbGVjdCA9IG9wdCA9IGJvZHkgPSBtYXJnaW5EaXYgPSBkaXYgPSBpbnB1dCA9IG51bGw7
CgogICAgICAgIHJldHVybiBzdXBwb3J0Owp9KSgpOwoKLy8gS2VlcCB0cmFjayBvZiBib3hNb2Rl
bApqUXVlcnkuYm94TW9kZWwgPSBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbDsKCgoKCnZhciByYnJh
Y2UgPSAvXig/Olx7LipcfXxcWy4qXF0pJC8sCiAgICAgICAgcm11bHRpRGFzaCA9IC8oW0EtWl0p
L2c7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBjYWNoZToge30sCgogICAgICAgIC8vIFBsZWFz
ZSB1c2Ugd2l0aCBjYXV0aW9uCiAgICAgICAgdXVpZDogMCwKCiAgICAgICAgLy8gVW5pcXVlIGZv
ciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlCiAgICAgICAgLy8gTm9uLWRpZ2l0cyBy
ZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVqUXVlcnkKICAgICAgICBleHBhbmRvOiAialF1ZXJ5IiAr
ICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXEQvZywgIiIg
KSwKCiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBlbGVtZW50cyB0aHJvdyB1bmNhdGNoYWJsZSBl
eGNlcHRpb25zIGlmIHlvdQogICAgICAgIC8vIGF0dGVtcHQgdG8gYWRkIGV4cGFuZG8gcHJvcGVy
dGllcyB0byB0aGVtLgogICAgICAgIG5vRGF0YTogewogICAgICAgICAgICAgICAgImVtYmVkIjog
dHJ1ZSwKICAgICAgICAgICAgICAgIC8vIEJhbiBhbGwgb2JqZWN0cyBleGNlcHQgZm9yIEZsYXNo
ICh3aGljaCBoYW5kbGUgZXhwYW5kb3MpCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImNsc2lk
OkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsCiAgICAgICAgICAgICAgICAi
YXBwbGV0IjogdHJ1ZQogICAgICAgIH0sCgogICAgICAgIGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVt
ICkgewogICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVb
IGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwoKICAgICAg
ICAgICAgICAgIHJldHVybiAhIWVsZW0gJiYgIWlzRW1wdHlEYXRhT2JqZWN0KCBlbGVtICk7CiAg
ICAgICAgfSwKCiAgICAgICAgZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEsIHB2dCAv
KiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5h
Y2NlcHREYXRhKCBlbGVtICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdGhpc0NhY2hlLCByZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCiAgICAgICAg
ICAgICAgICAgICAgICAgIGdldEJ5TmFtZSA9IHR5cGVvZiBuYW1lID09PSAic3RyaW5nIiwKCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaGFuZGxlIERPTSBub2RlcyBhbmQg
SlMgb2JqZWN0cyBkaWZmZXJlbnRseSBiZWNhdXNlIElFNi03CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUgRE9N
LUpTIGJvdW5kYXJ5CiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5
cGUsCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBn
bG9iYWwgalF1ZXJ5IGNhY2hlOyBKUyBvYmplY3QgZGF0YSBpcwogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgb2JqZWN0IHNvIEdDIGNhbiBvY2N1ciBh
dXRvbWF0aWNhbGx5CiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gaXNOb2RlID8galF1
ZXJ5LmNhY2hlIDogZWxlbSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZGVmaW5p
bmcgYW4gSUQgZm9yIEpTIG9iamVjdHMgaWYgaXRzIGNhY2hlIGFscmVhZHkgZXhpc3RzIGFsbG93
cwogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY29kZSB0byBzaG9ydGN1dCBvbiB0aGUg
c2FtZSBwYXRoIGFzIGEgRE9NIG5vZGUgd2l0aCBubyBjYWNoZQogICAgICAgICAgICAgICAgICAg
ICAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBlbGVtWyBqUXVlcnku
ZXhwYW5kbyBdICYmIGpRdWVyeS5leHBhbmRvOwoKICAgICAgICAgICAgICAgIC8vIEF2b2lkIGRv
aW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRvIHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRh
IG9uIGFuCiAgICAgICAgICAgICAgICAvLyBvYmplY3QgdGhhdCBoYXMgbm8gZGF0YSBhdCBhbGwK
ICAgICAgICAgICAgICAgIGlmICggKCFpZCB8fCAocHZ0ICYmIGlkICYmIChjYWNoZVsgaWQgXSAm
JiAhY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0pKSkgJiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09
IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIWlkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3IHVuaXF1ZSBJRCBmb3IgZWFjaCBlbGVt
ZW50IHNpbmNlIHRoZWlyIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyB1cCBp
biB0aGUgZ2xvYmFsIGNhY2hlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNOb2RlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIGpRdWVyeS5leHBhbmRvIF0g
PSBpZCA9ICsralF1ZXJ5LnV1aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqUXVlcnkuZXhwYW5kbzsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm
ICggIWNhY2hlWyBpZCBdICkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9
IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9y
IDEuNSBPTkxZLiBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0IGlzIHNlcmlh
bGl6ZWQgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSlNPTi5zdHJpbmdpZnkKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNOb2RlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQW4g
b2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8galF1ZXJ5LmRhdGEgaW5zdGVhZCBvZiBhIGtleS92YWx1
ZSBwYWlyOyB0aGlzIGdldHMKICAgICAgICAgICAgICAgIC8vIHNoYWxsb3cgY29waWVkIG92ZXIg
b250byB0aGUgZXhpc3RpbmcgY2FjaGUKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIG5hbWUg
PT09ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHB2dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSA9IGpRdWVyeS5leHRlbmQoY2FjaGVbIGlkIF1b
IGludGVybmFsS2V5IF0sIG5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdID0galF1ZXJ5LmV4dGVu
ZChjYWNoZVsgaWQgXSwgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzQ2FjaGUgPSBjYWNoZVsgaWQgXTsKCiAgICAg
ICAgICAgICAgICAvLyBJbnRlcm5hbCBqUXVlcnkgZGF0YSBpcyBzdG9yZWQgaW4gYSBzZXBhcmF0
ZSBvYmplY3QgaW5zaWRlIHRoZSBvYmplY3QncyBkYXRhCiAgICAgICAgICAgICAgICAvLyBjYWNo
ZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9ucyBiZXR3ZWVuIGludGVybmFsIGRhdGEg
YW5kIHVzZXItZGVmaW5lZAogICAgICAgICAgICAgICAgLy8gZGF0YQogICAgICAgICAgICAgICAg
aWYgKCBwdnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXRoaXNDYWNoZVsgaW50
ZXJuYWxLZXkgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2FjaGVb
IGludGVybmFsS2V5IF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc0NhY2hlID0gdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIG5h
bWUgKSBdID0gZGF0YTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBUT0RP
OiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiAxLjYu
IFVzZXJzIHNob3VsZAogICAgICAgICAgICAgICAgLy8gbm90IGF0dGVtcHQgdG8gaW5zcGVjdCB0
aGUgaW50ZXJuYWwgZXZlbnRzIG9iamVjdCB1c2luZyBqUXVlcnkuZGF0YSwgYXMgdGhpcwogICAg
ICAgICAgICAgICAgLy8gaW50ZXJuYWwgZGF0YSBvYmplY3QgaXMgdW5kb2N1bWVudGVkIGFuZCBz
dWJqZWN0IHRvIGNoYW5nZS4KICAgICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gImV2ZW50cyIg
JiYgIXRoaXNDYWNoZVtuYW1lXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXNDYWNoZVsgaW50ZXJuYWxLZXkgXSAmJiB0aGlzQ2FjaGVbIGludGVybmFsS2V5IF0uZXZlbnRz
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBib3RoIGNv
bnZlcnRlZC10by1jYW1lbCBhbmQgbm9uLWNvbnZlcnRlZCBkYXRhIHByb3BlcnR5IG5hbWVzCiAg
ICAgICAgICAgICAgICAvLyBJZiBhIGRhdGEgcHJvcGVydHkgd2FzIHNwZWNpZmllZAogICAgICAg
ICAgICAgICAgaWYgKCBnZXRCeU5hbWUgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBG
aXJzdCBUcnkgdG8gZmluZCBhcy1pcyBwcm9wZXJ0eSBkYXRhCiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldCA9IHRoaXNDYWNoZVsgbmFtZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGVzdCBmb3IgbnVsbHx1bmRlZmluZWQgcHJvcGVydHkgZGF0YQogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHJldCA9PSBudWxsICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSAp
IF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIHJlbW92ZURh
dGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7
CiAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgdmFyIHRoaXNDYWNoZSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5j
ZSB0byBpbnRlcm5hbCBkYXRhIGNhY2hlIGtleQogICAgICAgICAgICAgICAgICAgICAgICBpbnRl
cm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAoKICAgICAgICAgICAgICAgICAgICAgICAgaXNOb2Rl
ID0gZWxlbS5ub2RlVHlwZSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBqUXVlcnku
ZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9
IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICAgICAgICAgICAg
ICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdIDogalF1ZXJ5LmV4cGFu
ZG87CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBubyBjYWNoZSBlbnRy
eSBmb3IgdGhpcyBvYmplY3QsIHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAgICAvLyBwdXJwb3Nl
IGluIGNvbnRpbnVpbmcKICAgICAgICAgICAgICAgIGlmICggIWNhY2hlWyBpZCBdICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgaWYgKCBuYW1lICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hlID0g
cHZ0ID8gY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0gOiBjYWNoZVsgaWQgXTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdGhpc0NhY2hlICkgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0IGludGVyb3BlcmFibGUgcmVtb3ZhbCBvZiBoeXBoZW5hdGVk
IG9yIGNhbWVsY2FzZWQga2V5cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IXRoaXNDYWNoZVsgbmFtZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0
aGlzQ2FjaGVbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlcmUgaXMgbm8gZGF0YSBsZWZ0IGluIHRoZSBjYWNoZSwgd2Ugd2FudCB0byBjb250aW51ZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVj
dCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWlzRW1wdHlEYXRhT2JqZWN0KHRoaXNDYWNoZSkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAg
ICAgICAgICBpZiAoIHB2dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hl
WyBpZCBdWyBpbnRlcm5hbEtleSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
ZGVzdHJveSB0aGUgcGFyZW50IGNhY2hlIHVubGVzcyB0aGUgaW50ZXJuYWwgZGF0YSBvYmplY3QK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFkIGJlZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBp
biBpdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdChjYWNo
ZVsgaWQgXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
dmFyIGludGVybmFsQ2FjaGUgPSBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXTsKCiAgICAgICAg
ICAgICAgICAvLyBCcm93c2VycyB0aGF0IGZhaWwgZXhwYW5kbyBkZWxldGlvbiBhbHNvIHJlZnVz
ZSB0byBkZWxldGUgZXhwYW5kb3Mgb24KICAgICAgICAgICAgICAgIC8vIHRoZSB3aW5kb3csIGJ1
dCBpdCB3aWxsIGFsbG93IGl0IG9uIGFsbCBvdGhlciBKUyBvYmplY3RzOyBvdGhlciBicm93c2Vy
cwogICAgICAgICAgICAgICAgLy8gZG9uJ3QgY2FyZQogICAgICAgICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgYGNhY2hlYCBpcyBub3QgYSB3aW5kb3cgb2JqZWN0ICMxMDA4MAogICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvIHx8ICFjYWNoZS5zZXRJbnRlcnZh
bCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOwogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSBu
dWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFdlIGRlc3Ryb3llZCB0
aGUgZW50aXJlIHVzZXIgY2FjaGUgYXQgb25jZSBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4KICAg
ICAgICAgICAgICAgIC8vIGl0ZXJhdGluZyB0aHJvdWdoIGVhY2gga2V5LCBidXQgd2UgbmVlZCB0
byBjb250aW51ZSB0byBwZXJzaXN0IGludGVybmFsCiAgICAgICAgICAgICAgICAvLyBkYXRhIGlm
IGl0IGV4aXN0ZWQKICAgICAgICAgICAgICAgIGlmICggaW50ZXJuYWxDYWNoZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEuNSBPTkxZLiBBdm9pZHMgZXhwb3Npbmcg
alF1ZXJ5CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGFkYXRhIG9uIHBsYWluIEpTIG9i
amVjdHMgd2hlbiB0aGUgb2JqZWN0IGlzIHNlcmlhbGl6ZWQgdXNpbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSlNPTi5zdHJpbmdpZnkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
aXNOb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdLnRv
SlNPTiA9IGpRdWVyeS5ub29wOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSA9IGludGVybmFsQ2FjaGU7
CgogICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGVsaW1pbmF0ZSB0aGUg
ZXhwYW5kbyBvbiB0aGUgbm9kZSB0byBhdm9pZAogICAgICAgICAgICAgICAgLy8gZmFsc2UgbG9v
a3VwcyBpbiB0aGUgY2FjaGUgZm9yIGVudHJpZXMgdGhhdCBubyBsb25nZXIgZXhpc3QKICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGlzTm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgZG9lcyBub3QgYWxsb3cgdXMgdG8gZGVsZXRlIGV4cGFuZG8gcHJvcGVydGllcyBmcm9t
IG5vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBub3IgZG9lcyBpdCBoYXZlIGEgcmVt
b3ZlQXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5vZGVzOwogICAgICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlc2UgY2FzZXMKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwog
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVtLnJlbW92ZUF0dHJpYnV0ZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgg
alF1ZXJ5LmV4cGFuZG8gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdID0gbnVsbDsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgog
ICAgICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KICAgICAgICBfZGF0YTogZnVuY3Rpb24o
IGVsZW0sIG5hbWUsIGRhdGEgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRhdGEo
IGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBBIG1ldGhv
ZCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBET00gbm9kZSBjYW4gaGFuZGxlIHRoZSBkYXRhIGV4cGFu
ZG8KICAgICAgICBhY2NlcHREYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAg
IGlmICggZWxlbS5ub2RlTmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNo
ID0galF1ZXJ5Lm5vRGF0YVsgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhKG1hdGNoID09PSB0cnVlIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFz
c2lkIikgIT09IG1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KfSk7CgpqUXVlcnku
Zm4uZXh0ZW5kKHsKICAgICAgICBkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKICAgICAg
ICAgICAgICAgIHZhciBkYXRhID0gbnVsbDsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBr
ZXkgPT09ICJ1bmRlZmluZWQiICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMu
bGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnku
ZGF0YSggdGhpc1swXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRo
aXNbMF0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
YXR0ciA9IHRoaXNbMF0uYXR0cmlidXRlcywgbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsg
aSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0gYXR0cltpXS5uYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBuYW1lLmluZGV4T2YoICJkYXRhLSIgKSA9PT0gMCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0g
alF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zdWJzdHJpbmcoNSkgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUF0dHIoIHRoaXNbMF0s
IG5hbWUsIGRhdGFbIG5hbWUgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKCiAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCB0eXBlb2Yga2V5ID09PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5ICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9
IGtleS5zcGxpdCgiLiIpOwogICAgICAgICAgICAgICAgcGFydHNbMV0gPSBwYXJ0c1sxXSA/ICIu
IiArIHBhcnRzWzFdIDogIiI7CgogICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdW5kZWZp
bmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy50cmlnZ2VySGFuZGxl
cigiZ2V0RGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgW3BhcnRzWzBdXSk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGludGVybmFsbHkgc3RvcmVkIGRhdGEgZmly
c3QKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgdGhp
cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVy
eS5kYXRhKCB0aGlzWzBdLCBrZXkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhID0gZGF0YUF0dHIoIHRoaXNbMF0sIGtleSwgZGF0YSApOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVk
ICYmIHBhcnRzWzFdID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEo
IHBhcnRzWzBdICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE7CgogICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHRo
aXMgPSBqUXVlcnkoIHRoaXMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3MgPSBbIHBhcnRzWzBdLCB2YWx1ZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkdGhpcy50cmlnZ2VySGFuZGxlciggInNldERhdGEiICsgcGFydHNbMV0gKyAiISIs
IGFyZ3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhp
cywga2V5LCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRy
aWdnZXJIYW5kbGVyKCAiY2hhbmdlRGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgYXJncyApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAg
ICAgICByZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJl
bW92ZURhdGEoIHRoaXMsIGtleSApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQp9KTsK
CmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7CiAgICAgICAgLy8gSWYgbm90
aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueQogICAgICAgIC8vIGRh
dGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQogICAgICAgIGlmICggZGF0YSA9PT0g
dW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CgogICAgICAgICAgICAgICAgdmFy
IG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJDEiICkudG9Mb3dl
ckNhc2UoKTsKCiAgICAgICAgICAgICAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUg
KTsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhID0gZGF0YSA9PT0gInRydWUiID8gdHJ1ZSA6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhID09PSAibnVsbCIgPyBudWxsIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAhalF1ZXJ5LmlzTmFOKCBkYXRhICkgPyBwYXJzZUZsb2F0KCBkYXRhICkgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmJyYWNlLnRlc3QoIGRhdGEg
KSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBlICkg
e30KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEg
c28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZGF0YSggZWxlbSwga2V5LCBkYXRhICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9CgogICAgICAgIHJldHVybiBkYXRhOwp9CgovLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBm
b3IgMS41IE9OTFkgdG8gYWxsb3cgb2JqZWN0cyB3aXRoIGEgc2luZ2xlIHRvSlNPTgovLyBwcm9w
ZXJ0eSB0byBiZSBjb25zaWRlcmVkIGVtcHR5IG9iamVjdHM7IHRoaXMgcHJvcGVydHkgYWx3YXlz
IGV4aXN0cyBpbgovLyBvcmRlciB0byBtYWtlIHN1cmUgSlNPTi5zdHJpbmdpZnkgZG9lcyBub3Qg
ZXhwb3NlIGludGVybmFsIG1ldGFkYXRhCmZ1bmN0aW9uIGlzRW1wdHlEYXRhT2JqZWN0KCBvYmog
KSB7CiAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gb2JqICkgewogICAgICAgICAgICAgICAgaWYg
KCBuYW1lICE9PSAidG9KU09OIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7Cn0K
CgoKCmZ1bmN0aW9uIGhhbmRsZVF1ZXVlTWFya0RlZmVyKCBlbGVtLCB0eXBlLCBzcmMgKSB7CiAg
ICAgICAgdmFyIGRlZmVyRGF0YUtleSA9IHR5cGUgKyAiZGVmZXIiLAogICAgICAgICAgICAgICAg
cXVldWVEYXRhS2V5ID0gdHlwZSArICJxdWV1ZSIsCiAgICAgICAgICAgICAgICBtYXJrRGF0YUtl
eSA9IHR5cGUgKyAibWFyayIsCiAgICAgICAgICAgICAgICBkZWZlciA9IGpRdWVyeS5kYXRhKCBl
bGVtLCBkZWZlckRhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApOwogICAgICAgIGlmICggZGVmZXIg
JiYKICAgICAgICAgICAgICAgICggc3JjID09PSAicXVldWUiIHx8ICFqUXVlcnkuZGF0YSggZWxl
bSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSApICYmCiAgICAgICAgICAgICAgICAo
IHNyYyA9PT0gIm1hcmsiIHx8ICFqUXVlcnkuZGF0YSggZWxlbSwgbWFya0RhdGFLZXksIHVuZGVm
aW5lZCwgdHJ1ZSApICkgKSB7CiAgICAgICAgICAgICAgICAvLyBHaXZlIHJvb20gZm9yIGhhcmQt
Y29kZWQgY2FsbGJhY2tzIHRvIGZpcmUgZmlyc3QKICAgICAgICAgICAgICAgIC8vIGFuZCBldmVu
dHVhbGx5IG1hcmsvcXVldWUgc29tZXRoaW5nIGVsc2Ugb24gdGhlIGVsZW1lbnQKICAgICAgICAg
ICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFqUXVlcnkuZGF0YSggZWxlbSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSAm
JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFqUXVlcnkuZGF0YSggZWxlbSwgbWFy
a0RhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBkZWZlckRhdGFLZXksIHRydWUgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlci5yZXNvbHZlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIDAgKTsKICAgICAgICB9Cn0KCmpRdWVy
eS5leHRlbmQoewoKICAgICAgICBfbWFyazogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CiAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAo
dHlwZSB8fCAiZngiKSArICJtYXJrIjsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRh
dGEoIGVsZW0sIHR5cGUsIChqUXVlcnkuZGF0YShlbGVtLHR5cGUsdW5kZWZpbmVkLHRydWUpIHx8
IDApICsgMSwgdHJ1ZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIF91
bm1hcms6IGZ1bmN0aW9uKCBmb3JjZSwgZWxlbSwgdHlwZSApIHsKICAgICAgICAgICAgICAgIGlm
ICggZm9yY2UgIT09IHRydWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBlbGVt
OwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZm9yY2U7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcmNlID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSB0eXBlICsgIm1hcmsiLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gZm9yY2UgPyAwIDogKCAoalF1ZXJ5LmRh
dGEoIGVsZW0sIGtleSwgdW5kZWZpbmVkLCB0cnVlKSB8fCAxICkgLSAxICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY291bnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgY291bnQsIHRydWUgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
cmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlUXVldWVNYXJrRGVmZXIoIGVsZW0sIHR5cGUsICJtYXJrIiApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAg
cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgewogICAgICAgICAgICAgICAgaWYg
KCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gKHR5cGUgfHwgImZ4Iikg
KyAicXVldWUiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IGpRdWVyeS5kYXRhKCBl
bGVtLCB0eXBlLCB1bmRlZmluZWQsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBh
IGxvb2t1cAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcSB8fCBqUXVlcnkuaXNBcnJheShkYXRhKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBqUXVlcnkuZGF0YSgg
ZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheShkYXRhKSwgdHJ1ZSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBxLnB1c2goIGRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHEgfHwgW107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZGVxdWV1
ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CiAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8
fCAiZngiOwoKICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwg
dHlwZSApLAogICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVyOwoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmeCBx
dWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWwKICAg
ICAgICAgICAgICAgIGlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIGlmICggZm4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIHByb2dy
ZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcXVldWUudW5zaGlmdCgiaW5wcm9ncmVzcyIpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKGVsZW0sIGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKGVsZW0sIHR5cGUp
OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoICFxdWV1ZS5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlIiwgdHJ1ZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVRdWV1ZU1hcmtEZWZlciggZWxlbSwgdHlwZSwgInF1ZXVlIiAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAg
ICAgICBxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CiAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiZngiOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBqUXVlcnkucXVldWUo
IHRoaXMsIHR5cGUsIGRhdGEgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9
PT0gImZ4IiAmJiBxdWV1ZVswXSAhPT0gImlucHJvZ3Jlc3MiICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgZGVx
dWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhp
cywgdHlwZSApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICAvLyBCYXNl
ZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uCiAg
ICAgICAgLy8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5
LWRlbGF5LwogICAgICAgIGRlbGF5OiBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsKICAgICAgICAg
ICAgICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzW3RpbWVdIHx8IHRpbWUg
OiB0aW1lOwogICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKCiAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBlbGVtID0gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZGVxdWV1ZSggZWxlbSwgdHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9LCB0aW1lICk7
CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGNsZWFyUXVldWU6IGZ1bmN0
aW9uKCB0eXBlICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwg
ImZ4IiwgW10gKTsKICAgICAgICB9LAogICAgICAgIC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQg
d2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKICAgICAgICAvLyBhcmUgZW1wdGllZCAoZngg
aXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKICAgICAgICBwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwg
b2JqZWN0ICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IHR5cGU7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwogICAgICAgICAgICAgICAgdmFyIGRlZmVyID0galF1
ZXJ5LkRlZmVycmVkKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gdGhpcywK
ICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVsZW1lbnRzLmxlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZlckRhdGFL
ZXkgPSB0eXBlICsgImRlZmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVEYXRhS2V5
ID0gdHlwZSArICJxdWV1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtEYXRhS2V5ID0g
dHlwZSArICJtYXJrIiwKICAgICAgICAgICAgICAgICAgICAgICAgdG1wOwogICAgICAgICAgICAg
ICAgZnVuY3Rpb24gcmVzb2x2ZSgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCAt
LWNvdW50ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2
ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUoIGktLSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCggdG1wID0galF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0s
IGRlZmVyRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgfHwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICggalF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIHF1ZXVlRGF0
YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIG1hcmtEYXRhS2V5
LCB1bmRlZmluZWQsIHRydWUgKSApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZGF0YSggZWxlbWVudHNbIGkgXSwgZGVmZXJEYXRhS2V5LCBqUXVlcnku
X0RlZmVycmVkKCksIHRydWUgKSApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAuZG9uZSggcmVzb2x2
ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXIucHJvbWlzZSgp
OwogICAgICAgIH0KfSk7CgoKCgp2YXIgcmNsYXNzID0gL1tcblx0XHJdL2csCiAgICAgICAgcnNw
YWNlID0gL1xzKy8sCiAgICAgICAgcnJldHVybiA9IC9cci9nLAogICAgICAgIHJ0eXBlID0gL14o
PzpidXR0b258aW5wdXQpJC9pLAogICAgICAgIHJmb2N1c2FibGUgPSAvXig/OmJ1dHRvbnxpbnB1
dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKICAgICAgICByY2xpY2thYmxlID0gL15hKD86
cmVhKT8kL2ksCiAgICAgICAgcmJvb2xlYW4gPSAvXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3lu
Y3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9w
ZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSwKICAgICAgICBub2RlSG9v
aywgYm9vbEhvb2s7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBhdHRyOiBmdW5jdGlvbigg
bmFtZSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhp
cywgbmFtZSwgdmFsdWUsIHRydWUsIGpRdWVyeS5hdHRyICk7CiAgICAgICAgfSwKCiAgICAgICAg
cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3Zl
QXR0ciggdGhpcywgbmFtZSApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAg
ICAKICAgICAgICBwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgbmFtZSwgdmFsdWUsIHRydWUsIGpRdWVyeS5w
cm9wICk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICByZW1vdmVQcm9wOiBmdW5jdGlvbigg
bmFtZSApIHsKICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8
IG5hbWU7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0cnkvY2F0Y2ggaGFuZGxlcyBjYXNlcyB3aGVyZSBJRSBi
YWxrcyAoc3VjaCBhcyByZW1vdmluZyBhIHByb3BlcnR5IG9uIHdpbmRvdykKICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBu
YW1lIF0gPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXNbIG5hbWUgXTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHt9CiAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBhZGRDbGFzczogZnVuY3Rpb24o
IHZhbHVlICkgewogICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZXMsIGksIGwsIGVsZW0sCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNldENsYXNzLCBjLCBjbDsKCiAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRo
aXMuY2xhc3NOYW1lKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0
cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxp
dCggcnNwYWNlICk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0gPSB0aGlzWyBpIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIWVsZW0uY2xhc3NOYW1lICYmIGNsYXNzTmFtZXMubGVuZ3RoID09PSAxICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNs
YXNzTmFtZSA9IHZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldENsYXNzID0gIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICI7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBjbGFzc05h
bWVzLmxlbmd0aDsgYyA8IGNsOyBjKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhfnNldENsYXNzLmluZGV4T2YoICIgIiAr
IGNsYXNzTmFtZXNbIGMgXSArICIgIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1l
c1sgYyBdICsgIiAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLmNsYXNzTmFtZSA9IGpRdWVyeS50cmltKCBzZXRDbGFzcyApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHJlbW92ZUNsYXNzOiBmdW5j
dGlvbiggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lcywgaSwgbCwgZWxl
bSwgY2xhc3NOYW1lLCBjLCBjbDsKCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCBqICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgg
dGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lKSAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB8fCB2YWx1
ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0g
KHZhbHVlIHx8ICIiKS5zcGxpdCggcnNwYWNlICk7CgogICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVtLmNsYXNzTmFtZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZSA9ICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSggcmNsYXNzLCAiICIgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggYyA9
IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNs
YXNzTmFtZS5yZXBsYWNlKCIgIiArIGNsYXNzTmFtZXNbIGMgXSArICIgIiwgIiAiKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGpRdWVy
eS50cmltKCBjbGFzc05hbWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLmNsYXNzTmFtZSA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgIH0sCgogICAgICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0
YXRlVmFsICkgewogICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlzQm9vbCA9IHR5cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4i
OwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3Mo
IHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5jbGFzc05hbWUsIHN0YXRlVmFsKSwgc3RhdGVWYWwg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gc3RhdGVWYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIHJzcGFjZSApOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBp
KysgXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVj
ayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwZXJhdGVkIGxpc3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2Vs
Zi5oYXNDbGFzcyggY2xhc3NOYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmWyBzdGF0ZSA/ICJhZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiIF0oIGNsYXNz
TmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09ICJi
b29sZWFuIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY2xh
c3NOYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Rv
cmUgY2xhc3NOYW1lIGlmIHNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMuY2xhc3NOYW1lICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0b2dnbGUgd2hvbGUgY2xhc3NOYW1lCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0g
ZmFsc2UgPyAiIiA6IGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiI7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0s
CgogICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAg
ICB2YXIgY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICI7CiAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYmICgiICIgKyB0aGlz
W2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5kZXhPZiggY2xhc3NO
YW1lICkgPiAtMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9LAoKICAgICAgICB2YWw6IGZ1bmN0aW9uKCB2
YWx1ZSApIHsKICAgICAgICAgICAgICAgIHZhciBob29rcywgcmV0LAogICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtID0gdGhpc1swXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZh
bEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBqUXVlcnkudmFsSG9va3Nb
IGVsZW0udHlwZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tz
ICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSkg
IT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBlbGVtLnZhbHVlOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldCA9PT0gInN0cmluZyIgPyAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBtb3N0IGNvbW1vbiBz
dHJpbmcgY2FzZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5y
ZXBsYWNlKHJyZXR1cm4sICIiKSA6IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVy
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPT0gbnVsbCA/ICIi
IDogcmV0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZh
ciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CgogICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHNlbGYgPSBqUXVlcnkodGhpcyksIHZhbDsKCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaXNGdW5jdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBzZWxmLnZhbCgpICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0g
dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5n
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsID09IG51bGwgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbCArPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCA9IGpRdWVyeS5tYXAodmFsLCBmdW5jdGlvbiAoIHZhbHVlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6
IHZhbHVlICsgIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5
LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBqUXVlcnkudmFsSG9v
a3NbIHRoaXMudHlwZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2V0IHJldHVy
bnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgaG9va3Muc2V0KCB0
aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KfSk7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAg
ICB2YWxIb29rczogewogICAgICAgICAgICAgICAgb3B0aW9uOiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXR0cmlidXRlcy52YWx1ZSBpcyB1bmRlZmluZWQgaW4gQmxhY2tiZXJyeSA0Ljcg
YnV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlcyAudmFsdWUuIFNlZSAj
NjkzMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLmF0dHJp
YnV0ZXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF2YWwg
fHwgdmFsLnNwZWNpZmllZCA/IGVsZW0udmFsdWUgOiBlbGVtLnRleHQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzZWxlY3Q6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGVsZW0ub3B0aW9ucywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVj
dC1vbmUiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHdhcyBz
ZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPCAwICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSBvbmUgPyBpbmRleCA6IDAsIG1h
eCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoOyBpIDwgbWF4OyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9u
c1sgaSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0
IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3Jv
dXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9uLnNl
bGVjdGVkICYmIChqUXVlcnkuc3VwcG9ydC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQg
OiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09PSBudWxsKSAmJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9uLnBh
cmVudE5vZGUuZGlzYWJsZWQgfHwgIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUs
ICJvcHRncm91cCIgKSkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5
KCBvcHRpb24gKS52YWwoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25lICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZhbHVlICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyBCdWcgIzI1NTEg
LS0gc2VsZWN0LnZhbCgpIGJyb2tlbiBpbiBJRSBhZnRlciBmb3JtLnJlc2V0KCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSAmJiAhdmFsdWVzLmxlbmd0aCAmJiBvcHRp
b25zLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBqUXVlcnkoIG9wdGlvbnNbIGluZGV4IF0gKS52YWwoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAg
ICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIpLmVhY2go
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnNlbGVjdGVkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSh0aGlzKS52YWwoKSwgdmFsdWVzICkg
Pj0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWVzOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKCiAgICAgICAgYXR0ckZuOiB7CiAgICAgICAgICAgICAgICB2YWw6IHRy
dWUsCiAgICAgICAgICAgICAgICBjc3M6IHRydWUsCiAgICAgICAgICAgICAgICBodG1sOiB0cnVl
LAogICAgICAgICAgICAgICAgdGV4dDogdHJ1ZSwKICAgICAgICAgICAgICAgIGRhdGE6IHRydWUs
CiAgICAgICAgICAgICAgICB3aWR0aDogdHJ1ZSwKICAgICAgICAgICAgICAgIGhlaWdodDogdHJ1
ZSwKICAgICAgICAgICAgICAgIG9mZnNldDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgCiAgICAg
ICAgYXR0ckZpeDogewogICAgICAgICAgICAgICAgLy8gQWx3YXlzIG5vcm1hbGl6ZSB0byBlbnN1
cmUgaG9vayB1c2FnZQogICAgICAgICAgICAgICAgdGFiaW5kZXg6ICJ0YWJJbmRleCIKICAgICAg
ICB9LAogICAgICAgIAogICAgICAgIGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwg
cGFzcyApIHsKICAgICAgICAgICAgICAgIHZhciBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CiAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIGRvbid0IGdldC9zZXQgYXR0cmlidXRlcyBv
biB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKICAgICAgICAgICAgICAgIGlmICgg
IWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgaWYgKCBwYXNzICYmIG5hbWUgaW4galF1ZXJ5LmF0dHJGbiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggZWxlbSApWyBuYW1lIF0oIHZh
bHVlICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8g
cHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKICAgICAgICAgICAgICAgIGlm
ICggISgiZ2V0QXR0cmlidXRlIiBpbiBlbGVtKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tzLAogICAgICAgICAgICAgICAgICAgICAg
ICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7CgogICAg
ICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBuYW1lIGlmIG5lZWRlZAogICAgICAgICAgICAg
ICAgaWYgKCBub3R4bWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnku
YXR0ckZpeFsgbmFtZSBdIHx8IG5hbWU7CgogICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9
IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWhvb2tzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBib29sSG9v
ayBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBob29rcyA9IGJvb2xIb29rOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBVc2Ugbm9kZUhvb2sgaWYgYXZhaWxhYmxlKCBJRTYvNyApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbm9kZUhvb2sgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IG5vZGVIb29rOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYg
bm90eG1sICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRl
ZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICIiICsgdmFsdWUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAm
JiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAgICB9IGVs
c2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5h
bWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVz
IHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuZGVmaW5lZCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBl
bGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lOwogICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0galF1ZXJ5LmF0dHJGaXhbIG5hbWUgXSB8fCBuYW1lOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUsICIiICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7CgogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgYm9vbGVhbiBhdHRy
aWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmJvb2xlYW4udGVzdCggbmFtZSAp
ICYmIChwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSkgaW4gZWxlbSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBwcm9wTmFtZSBdID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9
LAoKICAgICAgICBhdHRySG9va3M6IHsKICAgICAgICAgICAgICAgIHR5cGU6IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYWxsb3cgdGhlIHR5cGUgcHJvcGVydHkg
dG8gYmUgY2hhbmdlZCAoc2luY2UgaXQgY2F1c2VzIHByb2JsZW1zIGluIElFKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcnR5cGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYm
IGVsZW0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5lcnJvciggInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
cmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJiBqUXVlcnkubm9kZU5hbWUoZWxlbSwg
ImlucHV0IikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
ZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1ZSByZXNldHMg
dGhlIHZhbHVlIGluIElFNi05CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZXNldCB2YWx1ZSB0byBpdCdzIGRlZmF1bHQgaW4gY2FzZSB0eXBlIGlzIHNldCBhZnRl
ciB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBp
cyBmb3IgZWxlbWVudCBjcmVhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWwgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWw7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBmb3IgYmFjayBjb21wYXQK
ICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgbm9kZUhvb2sgZm9yIGJ1dHRvbiBlbGVtZW50cyBp
biBJRTYvNyAoIzE5NTQpCiAgICAgICAgICAgICAgICB2YWx1ZTogewogICAgICAgICAgICAgICAg
ICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0
dG9uIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGVIb29rLmdldCggZWxlbSwgbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSBpbiBlbGVt
ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUsIG5hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBu
b2RlSG9vayAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUhvb2suc2V0KCBlbGVt
LCB2YWx1ZSwgbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2VzIG5vdCByZXR1cm4gc28gdGhhdCBzZXRB
dHRyaWJ1dGUgaXMgYWxzbyB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKCiAgICAgICAgcHJvcEZpeDogewogICAgICAgICAgICAgICAgdGFiaW5k
ZXg6ICJ0YWJJbmRleCIsCiAgICAgICAgICAgICAgICByZWFkb25seTogInJlYWRPbmx5IiwKICAg
ICAgICAgICAgICAgICJmb3IiOiAiaHRtbEZvciIsCiAgICAgICAgICAgICAgICAiY2xhc3MiOiAi
Y2xhc3NOYW1lIiwKICAgICAgICAgICAgICAgIG1heGxlbmd0aDogIm1heExlbmd0aCIsCiAgICAg
ICAgICAgICAgICBjZWxsc3BhY2luZzogImNlbGxTcGFjaW5nIiwKICAgICAgICAgICAgICAgIGNl
bGxwYWRkaW5nOiAiY2VsbFBhZGRpbmciLAogICAgICAgICAgICAgICAgcm93c3BhbjogInJvd1Nw
YW4iLAogICAgICAgICAgICAgICAgY29sc3BhbjogImNvbFNwYW4iLAogICAgICAgICAgICAgICAg
dXNlbWFwOiAidXNlTWFwIiwKICAgICAgICAgICAgICAgIGZyYW1lYm9yZGVyOiAiZnJhbWVCb3Jk
ZXIiLAogICAgICAgICAgICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgog
ICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZh
bHVlICkgewogICAgICAgICAgICAgICAgdmFyIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKCiAgICAg
ICAgICAgICAgICAvLyBkb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBh
bmQgYXR0cmlidXRlIG5vZGVzCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09
PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHZhciByZXQsIGhvb2tzLAogICAgICAgICAgICAgICAgICAgICAgICBub3R4bWwgPSBuVHlwZSAh
PT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7CgogICAgICAgICAgICAgICAgaWYgKCBu
b3R4bWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeCBuYW1lIGFuZCBhdHRhY2gg
aG9va3MKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1l
IF0gfHwgbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkucHJvcEhv
b2tzWyBuYW1lIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYm
ICJzZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkp
ICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJldDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtWyBuYW1lIF0gPSB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQo
IGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1bIG5hbWUgXTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAg
ICAgcHJvcEhvb2tzOiB7CiAgICAgICAgICAgICAgICB0YWJJbmRleDogewogICAgICAgICAgICAg
ICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZSBjb3Jy
ZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgv
MDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1q
YXZhc2NyaXB0LwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVO
b2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNw
ZWNpZmllZCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUlu
dCggYXR0cmlidXRlTm9kZS52YWx1ZSwgMTAgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCByY2xpY2th
YmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLmhyZWYgPwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9KTsKCi8vIEFkZCB0aGUgdGFiaW5k
ZXggcHJvcEhvb2sgdG8gYXR0ckhvb2tzIGZvciBiYWNrLWNvbXBhdApqUXVlcnkuYXR0ckhvb2tz
LnRhYkluZGV4ID0galF1ZXJ5LnByb3BIb29rcy50YWJJbmRleDsKCi8vIEhvb2sgZm9yIGJvb2xl
YW4gYXR0cmlidXRlcwpib29sSG9vayA9IHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBu
YW1lICkgewogICAgICAgICAgICAgICAgLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGgg
Y29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8g
YXR0cmlidXRlIHByZXNlbmNlIHdoZXJlIHNvbWUgYm9vbGVhbnMgYXJlIG5vdCBzdXBwb3J0ZWQK
ICAgICAgICAgICAgICAgIHZhciBhdHRyTm9kZTsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkucHJvcCggZWxlbSwgbmFtZSApID09PSB0cnVlIHx8ICggYXR0ck5vZGUgPSBlbGVtLmdldEF0
dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIGF0dHJOb2RlLm5vZGVWYWx1ZSAhPT0gZmFsc2UgPwog
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkgOgogICAgICAgICAgICAg
ICAgICAgICAgICB1bmRlZmluZWQ7CiAgICAgICAgfSwKICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZTsKICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBpcyB0cnVl
IHNpbmNlIHdlIGtub3cgYXQgdGhpcyBwb2ludCBpdCdzIHR5cGUgYm9vbGVhbiBhbmQgbm90IGZh
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBib29sZWFuIGF0dHJpYnV0ZXMgdG8g
dGhlIHNhbWUgbmFtZSBhbmQgc2V0IHRoZSBET00gcHJvcGVydHkKICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggcHJvcE5hbWUgaW4gZWxlbSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBPbmx5IHNldCB0aGUgSURMIHNwZWNpZmljYWxseSBpZiBpdCBh
bHJlYWR5IGV4aXN0cyBvbiB0aGUgZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1bIHByb3BOYW1lIF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xv
d2VyQ2FzZSgpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbmFt
ZTsKICAgICAgICB9Cn07CgovLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcg
c29tZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQppZiAoICFqUXVlcnkuc3VwcG9y
dC5nZXRTZXRBdHRyaWJ1dGUgKSB7CiAgICAgICAgCiAgICAgICAgLy8gVXNlIHRoaXMgZm9yIGFu
eSBhdHRyaWJ1dGUgaW4gSUU2LzcKICAgICAgICAvLyBUaGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJ
RTYvNyBpc3N1ZQogICAgICAgIG5vZGVIb29rID0galF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsK
ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVsZW0u
Z2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1
cm4gdW5kZWZpbmVkIGlmIG5vZGVWYWx1ZSBpcyBlbXB0eSBzdHJpbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJldCAmJiByZXQubm9kZVZhbHVlICE9PSAiIiA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0Lm5vZGVWYWx1ZSA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAg
IHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgdGhlIGV4aXN0aW5nIG9yIGNyZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgbm9kZQog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBu
YW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJldCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoIG5hbWUg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZU5vZGUo
IHJldCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAocmV0Lm5vZGVWYWx1ZSA9IHZhbHVlICsgIiIpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgIH07CgogICAgICAgIC8vIFNldCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGF1dG8gaW5zdGVh
ZCBvZiAwIG9uIGVtcHR5IHN0cmluZyggQnVnICM4MTUwICkKICAgICAgICAvLyBUaGlzIGlzIGZv
ciByZW1vdmFscwogICAgICAgIGpRdWVyeS5lYWNoKFsgIndpZHRoIiwgImhlaWdodCIgXSwgZnVu
Y3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1l
IF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0sIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gIiIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgImF1dG8i
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9KTsKfQoKCi8vIFNvbWUgYXR0cmlidXRl
cyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElFCmlmICggIWpRdWVyeS5zdXBwb3J0LmhyZWZO
b3JtYWxpemVkICkgewogICAgICAgIGpRdWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiwgIndpZHRo
IiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgICAgICAgICBqUXVl
cnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBu
YW1lIF0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1
dGUoIG5hbWUsIDIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICB9KTsKfQoKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3R5
bGUgKSB7CiAgICAgICAgalF1ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKICAgICAgICAgICAgICAg
IGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVy
biB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2YgZW1wdHkgc3RyaW5nCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE5vcm1hbGl6ZSB0byBsb3dlcmNhc2Ugc2luY2UgSUUgdXBwZXJjYXNlcyBjc3Mg
cHJvcGVydHkgbmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc3R5bGUu
Y3NzVGV4dC50b0xvd2VyQ2FzZSgpIHx8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChlbGVtLnN0eWxlLmNzc1RleHQgPSAiIiArIHZhbHVlKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9Owp9CgovLyBTYWZhcmkgbWlzLXJlcG9ydHMgdGhlIGRl
ZmF1bHQgc2VsZWN0ZWQgcHJvcGVydHkgb2YgYW4gb3B0aW9uCi8vIEFjY2Vzc2luZyB0aGUgcGFy
ZW50J3Mgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eSBmaXhlcyBpdAppZiAoICFqUXVlcnkuc3VwcG9y
dC5vcHRTZWxlY3RlZCApIHsKICAgICAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0galF1
ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCwgewogICAgICAgICAgICAgICAg
Z2V0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVu
dCA9IGVsZW0ucGFyZW50Tm9kZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZWxlY3RlZEluZGV4
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpdCBh
bHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3MDEKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfSk7Cn0KCi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyCmlmICgg
IWpRdWVyeS5zdXBwb3J0LmNoZWNrT24gKSB7CiAgICAgICAgalF1ZXJ5LmVhY2goWyAicmFkaW8i
LCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgalF1ZXJ5LnZhbEhv
b2tzWyB0aGlzIF0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNl
IHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYgYSB2YWx1
ZSBpc24ndCBzcGVjaWZpZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS5nZXRBdHRyaWJ1dGUoInZhbHVlIikgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICB9KTsK
fQpqUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CiAgICAg
ICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkudmFsSG9v
a3NbIHRoaXMgXSwgewogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtLmNoZWNrZWQg
PSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7Cn0pOwoK
CgoKdmFyIHJuYW1lc3BhY2VzID0gL1wuKC4qKSQvLAogICAgICAgIHJmb3JtRWxlbXMgPSAvXig/
OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksCiAgICAgICAgcnBlcmlvZCA9IC9cLi9nLAogICAg
ICAgIHJzcGFjZXMgPSAvIC9nLAogICAgICAgIHJlc2NhcGUgPSAvW15cd1xzLnxgXS9nLAogICAg
ICAgIGZjbGVhbnVwID0gZnVuY3Rpb24oIG5tICkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5t
LnJlcGxhY2UocmVzY2FwZSwgIlxcJCYiKTsKICAgICAgICB9OwoKLyoKICogQSBudW1iZXIgb2Yg
aGVscGVyIGZ1bmN0aW9ucyB1c2VkIGZvciBtYW5hZ2luZyBldmVudHMuCiAqIE1hbnkgb2YgdGhl
IGlkZWFzIGJlaGluZCB0aGlzIGNvZGUgb3JpZ2luYXRlZCBmcm9tCiAqIERlYW4gRWR3YXJkcycg
YWRkRXZlbnQgbGlicmFyeS4KICovCmpRdWVyeS5ldmVudCA9IHsKCiAgICAgICAgLy8gQmluZCBh
biBldmVudCB0byBhbiBlbGVtZW50CiAgICAgICAgLy8gT3JpZ2luYWwgYnkgRGVhbiBFZHdhcmRz
CiAgICAgICAgYWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEgKSB7CiAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9
PT0gOCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggaGFuZGxlciA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIgPSByZXR1cm5GYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoICFoYW5kbGVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcg
IzcyMjkuIEZpeCByZWNvbW1lbmRlZCBieSBqZGFsdG9uCiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlT2Jq
SW4sIGhhbmRsZU9iajsKCiAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqSW4gPSBoYW5kbGVyOwogICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gYmVp
bmcgZXhlY3V0ZWQgaGFzIGEgdW5pcXVlIElECiAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVy
Lmd1aWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5n
dWlkKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSW5pdCB0aGUgZWxl
bWVudCdzIGV2ZW50IHN0cnVjdHVyZQogICAgICAgICAgICAgICAgdmFyIGVsZW1EYXRhID0galF1
ZXJ5Ll9kYXRhKCBlbGVtICk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm8gZWxlbURhdGEgaXMg
Zm91bmQgdGhlbiB3ZSBtdXN0IGJlIHRyeWluZyB0byBiaW5kIHRvIG9uZSBvZiB0aGUKICAgICAg
ICAgICAgICAgIC8vIGJhbm5lZCBub0RhdGEgZWxlbWVudHMKICAgICAgICAgICAgICAgIGlmICgg
IWVsZW1EYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cywKICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGU7CgogICAg
ICAgICAgICAgICAgaWYgKCAhZXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVt
RGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBpZiAoICFldmVudEhhbmRsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURh
dGEuaGFuZGxlID0gZXZlbnRIYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnku
ZXZlbnQudHJpZ2dlcigpIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdo
ZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5l
ZCIgJiYgKCFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSkgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBs
eSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1lbnRzICkgOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCBlbGVtIGFzIGEgcHJvcGVy
dHkgb2YgdGhlIGhhbmRsZSBmdW5jdGlvbgogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBw
cmV2ZW50IGEgbWVtb3J5IGxlYWsgd2l0aCBub24tbmF0aXZlIGV2ZW50cyBpbiBJRS4KICAgICAg
ICAgICAgICAgIGV2ZW50SGFuZGxlLmVsZW0gPSBlbGVtOwoKICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKICAgICAgICAgICAgICAg
IC8vIGpRdWVyeSguLi4pLmJpbmQoIm1vdXNlb3ZlciBtb3VzZW91dCIsIGZuKTsKICAgICAgICAg
ICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoIiAiKTsKCiAgICAgICAgICAgICAgICB2YXIgdHlw
ZSwgaSA9IDAsIG5hbWVzcGFjZXM7CgogICAgICAgICAgICAgICAgd2hpbGUgKCAodHlwZSA9IHR5
cGVzWyBpKysgXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGhhbmRs
ZU9iakluID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKHt9
LCBoYW5kbGVPYmpJbikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaGFuZGxl
cjogaGFuZGxlciwgZGF0YTogZGF0YSB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmFt
ZXNwYWNlZCBldmVudCBoYW5kbGVycwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUu
aW5kZXhPZigiLiIpID4gLTEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLnNsaWNlKDApLnNvcnQoKS5qb2lu
KCIuIik7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai50eXBlID0gdHlwZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlT2JqLmd1aWQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmd1aWQgPSBoYW5kbGVyLmd1aWQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY3Vy
cmVudCBsaXN0IG9mIGZ1bmN0aW9ucyBib3VuZCB0byB0aGlzIGV2ZW50CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8
IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBx
dWV1ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVycyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBhIHNwZWNpYWwgZXZl
bnQgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlIGFk
ZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZlbnQgaWYgdGhlIHNwZWNpYWwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNl
dHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmluZCB0aGUg
Z2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlz
dGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlLCBmYWxzZSApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0uYXR0YWNoRXZlbnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYXR0YWNoRXZl
bnQoICJvbiIgKyB0eXBlLCBldmVudEhhbmRsZSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFs
LmFkZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLmFkZC5jYWxs
KCBlbGVtLCBoYW5kbGVPYmogKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHRvIHRoZSBlbGVtZW50
J3MgaGFuZGxlciBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnB1c2goIGhh
bmRsZU9iaiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGlj
aCBldmVudHMgaGF2ZSBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBOdWxsaWZ5IGVsZW0gdG8gcHJldmVudCBt
ZW1vcnkgbGVha3MgaW4gSUUKICAgICAgICAgICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgIH0s
CgogICAgICAgIGdsb2JhbDoge30sCgogICAgICAgIC8vIERldGFjaCBhbiBldmVudCBvciBzZXQg
b2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAogICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIGVsZW0s
IHR5cGVzLCBoYW5kbGVyLCBwb3MgKSB7CiAgICAgICAgICAgICAgICAvLyBkb24ndCBkbyBldmVu
dHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwogICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGhh
bmRsZXIgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gcmV0
dXJuRmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHJldCwgdHlw
ZSwgZm4sIGosIGkgPSAwLCBhbGwsIG5hbWVzcGFjZXMsIG5hbWVzcGFjZSwgc3BlY2lhbCwgZXZl
bnRUeXBlLCBoYW5kbGVPYmosIG9yaWdUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBlbGVt
RGF0YSA9IGpRdWVyeS5oYXNEYXRhKCBlbGVtICkgJiYgalF1ZXJ5Ll9kYXRhKCBlbGVtICksCiAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyA9IGVsZW1EYXRhICYmIGVsZW1EYXRhLmV2ZW50
czsKCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtRGF0YSB8fCAhZXZlbnRzICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gdHlwZXMgaXMgYWN0dWFsbHkgYW4gZXZlbnQgb2JqZWN0IGhlcmUKICAgICAgICAgICAg
ICAgIGlmICggdHlwZXMgJiYgdHlwZXMudHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlciA9IHR5cGVzLmhhbmRsZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzID0g
dHlwZXMudHlwZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBVbmJpbmQg
YWxsIGV2ZW50cyBmb3IgdGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgIGlmICggIXR5cGVzIHx8
IHR5cGVvZiB0eXBlcyA9PT0gInN0cmluZyIgJiYgdHlwZXMuY2hhckF0KDApID09PSAiLiIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzID0gdHlwZXMgfHwgIiI7CgogICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXMgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBl
dmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKICAgICAgICAgICAgICAgIC8vIGpRdWVyeSguLi4p
LnVuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOwogICAgICAgICAgICAgICAgdHlwZXMg
PSB0eXBlcy5zcGxpdCgiICIpOwoKICAgICAgICAgICAgICAgIHdoaWxlICggKHR5cGUgPSB0eXBl
c1sgaSsrIF0pICkgewogICAgICAgICAgICAgICAgICAgICAgICBvcmlnVHlwZSA9IHR5cGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IG51bGw7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbCA9IHR5cGUuaW5kZXhPZigiLiIpIDwgMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZXNwYWNlcyA9IFtdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhYWxsICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgZXZlbnQgaGFu
ZGxlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gdHlwZS5z
cGxpdCgiLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBuYW1lc3Bh
Y2VzLnNoaWZ0KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9
IG5ldyBSZWdFeHAoIihefFxcLikiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5tYXAoIG5hbWVzcGFjZXMuc2xpY2UoMCkuc29ydCgpLCBmY2xlYW51cCAp
LmpvaW4oIlxcLig/Oi4qXFwuKT8iKSArICIoXFwufCQpIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBd
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZXZlbnRUeXBlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVyICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgZXZlbnRUeXBlLmxlbmd0aDsgaisr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0g
ZXZlbnRUeXBlWyBqIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBhbGwgfHwgbmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LnJlbW92ZSggZWxlbSwgb3JpZ1R5cGUsIGhhbmRsZU9iai5oYW5kbGVyLCBqICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZS5zcGxpY2Uo
IGotLSwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwoK
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IHBvcyB8fCAwOyBqIDwgZXZlbnRUeXBl
Lmxlbmd0aDsgaisrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9i
aiA9IGV2ZW50VHlwZVsgaiBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGdpdmVuIGhhbmRsZXIgZm9yIHRoZSBn
aXZlbiB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFs
bCB8fCBuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBvcyA9PSBudWxsICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3ZlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwo
IGVsZW0sIGhhbmRsZU9iaiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3MgIT0gbnVsbCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyByZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIG5vIG1vcmUg
aGFuZGxlcnMgZXhpc3QKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudFR5cGUubGVu
Z3RoID09PSAwIHx8IHBvcyAhPSBudWxsICYmIGV2ZW50VHlwZS5sZW5ndGggPT09IDEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fCBz
cGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMgKSA9PT0gZmFsc2UgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQo
IGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbnVsbDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRzWyB0eXBlIF07CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAogICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBoYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGU7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZS5lbGVtID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzRW1wdHlPYmplY3QoIGVsZW1EYXRhICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIHVuZGVmaW5lZCwgdHJ1ZSApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAg
ICAgICAKICAgICAgICAvLyBFdmVudHMgdGhhdCBhcmUgc2FmZSB0byBzaG9ydC1jaXJjdWl0IGlm
IG5vIGhhbmRsZXJzIGFyZSBhdHRhY2hlZC4KICAgICAgICAvLyBOYXRpdmUgRE9NIGV2ZW50cyBz
aG91bGQgbm90IGJlIGFkZGVkLCB0aGV5IG1heSBoYXZlIGlubGluZSBoYW5kbGVycy4KICAgICAg
ICBjdXN0b21FdmVudDogewogICAgICAgICAgICAgICAgImdldERhdGEiOiB0cnVlLAogICAgICAg
ICAgICAgICAgInNldERhdGEiOiB0cnVlLAogICAgICAgICAgICAgICAgImNoYW5nZURhdGEiOiB0
cnVlCiAgICAgICAgfSwKCiAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBl
bGVtLCBvbmx5SGFuZGxlcnMgKSB7CiAgICAgICAgICAgICAgICAvLyBFdmVudCBvYmplY3Qgb3Ig
ZXZlbnQgdHlwZQogICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8IGV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gW10sCiAgICAgICAgICAgICAg
ICAgICAgICAgIGV4Y2x1c2l2ZTsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZigi
ISIpID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZSBldmVudHMg
dHJpZ2dlciBvbmx5IGZvciB0aGUgZXhhY3QgZXZlbnQgKG5vIG5hbWVzcGFjZXMpCiAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjbHVzaXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGUuaW5kZXhPZigiLiIpID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50
IHR5cGUgaW4gaGFuZGxlKCkKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHR5
cGUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG5hbWVzcGFjZXMu
c2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAoIWVsZW0gfHwgalF1ZXJ5LmV2ZW50
LmN1c3RvbUV2ZW50WyB0eXBlIF0pICYmICFqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGpRdWVyeSBoYW5kbGVycyBmb3IgdGhpcyBl
dmVudCB0eXBlLCBhbmQgaXQgY2FuJ3QgaGF2ZSBpbmxpbmUgaGFuZGxlcnMKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8v
IENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5
cGUgc3RyaW5nCiAgICAgICAgICAgICAgICBldmVudCA9IHR5cGVvZiBldmVudCA9PT0gIm9iamVj
dCIgPwogICAgICAgICAgICAgICAgICAgICAgICAvLyBqUXVlcnkuRXZlbnQgb2JqZWN0CiAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID8gZXZlbnQgOgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3QgbGl0ZXJhbAogICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSnVzdCB0aGUgZXZlbnQgdHlwZSAoc3RyaW5nKQogICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlICk7CgogICAgICAgICAgICAgICAgZXZlbnQudHlw
ZSA9IHR5cGU7CiAgICAgICAgICAgICAgICBldmVudC5leGNsdXNpdmUgPSBleGNsdXNpdmU7CiAg
ICAgICAgICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIi4iKTsKICAg
ICAgICAgICAgICAgIGV2ZW50Lm5hbWVzcGFjZV9yZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsg
bmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLik/IikgKyAiKFxcLnwkKSIpOwogICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VySGFuZGxlcigpIGFuZCBnbG9iYWwgZXZl
bnRzIGRvbid0IGJ1YmJsZSBvciBydW4gdGhlIGRlZmF1bHQgYWN0aW9uCiAgICAgICAgICAgICAg
ICBpZiAoIG9ubHlIYW5kbGVycyB8fCAhZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSGFu
ZGxlIGEgZ2xvYmFsIHRyaWdnZXIKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFN0b3AgdGF1bnRpbmcgdGhlIGRhdGEgY2FjaGU7
IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0YWNoIHRvIGRvY3VtZW50CiAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBqUXVlcnkuY2FjaGUsIGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVybmFsS2V5IHZhcmlhYmxl
IGlzIGp1c3QgdXNlZCB0byBtYWtlIGl0IGVhc2llciB0byBmaW5kCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYW5kIHBvdGVudGlhbGx5IGNoYW5nZSB0aGlzIHN0dWZmIGxhdGVy
OyBjdXJyZW50bHkgaXQganVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBv
aW50cyB0byBqUXVlcnkuZXhwYW5kbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJuYWxDYWNoZSA9IHRoaXNbIGludGVybmFsS2V5IF07CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnRlcm5hbENhY2hlICYmIGludGVybmFs
Q2FjaGUuZXZlbnRzICYmIGludGVybmFsQ2FjaGUuZXZlbnRzWyB0eXBlIF0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZXZl
bnQsIGRhdGEsIGludGVybmFsQ2FjaGUuaGFuZGxlLmVsZW0gKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8g
RG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKICAgICAgICAgICAgICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgLy8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCiAg
ICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBl
dmVudC50YXJnZXQgPSBlbGVtOwoKICAgICAgICAgICAgICAgIC8vIENsb25lIGFueSBpbmNvbWlu
ZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxp
c3QKICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBqUXVlcnkubWFrZUFycmF5
KCBkYXRhICkgOiBbXTsKICAgICAgICAgICAgICAgIGRhdGEudW5zaGlmdCggZXZlbnQgKTsKCiAg
ICAgICAgICAgICAgICB2YXIgY3VyID0gZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SUUgZG9lc24ndCBsaWtlIG1ldGhvZCBuYW1lcyB3aXRoIGEgY29sb24gKCMzNTMzLCAjODI3MikK
ICAgICAgICAgICAgICAgICAgICAgICAgb250eXBlID0gdHlwZS5pbmRleE9mKCI6IikgPCAwID8g
Im9uIiArIHR5cGUgOiAiIjsKCiAgICAgICAgICAgICAgICAvLyBGaXJlIGV2ZW50IG9uIHRoZSBj
dXJyZW50IGVsZW1lbnQsIHRoZW4gYnViYmxlIHVwIHRoZSBET00gdHJlZQogICAgICAgICAgICAg
ICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlID0galF1ZXJ5Ll9kYXRh
KCBjdXIsICJoYW5kbGUiICk7CgogICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50
VGFyZ2V0ID0gY3VyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmln
Z2VyIGFuIGlubGluZSBib3VuZCBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBv
bnR5cGUgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGN1ciApICYmIGN1clsgb250eXBlIF0gJiYgY3Vy
WyBvbnR5cGUgXS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVu
dCwgdGhlbiB0byB3aW5kb3cKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVu
dE5vZGUgfHwgY3VyLm93bmVyRG9jdW1lbnQgfHwgY3VyID09PSBldmVudC50YXJnZXQub3duZXJE
b2N1bWVudCAmJiB3aW5kb3c7CiAgICAgICAgICAgICAgICB9IHdoaWxlICggY3VyICYmICFldmVu
dC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm9ib2R5
IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdwogICAgICAgICAgICAgICAg
aWYgKCAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpR
dWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmNhbGwoIGVsZW0u
b3duZXJEb2N1bWVudCwgZXZlbnQgKSA9PT0gZmFsc2UpICYmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgISh0eXBlID09PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwg
ImEiICkpICYmIGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0
IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgYW4gLmlzRnVuY3Rpb24pKCkgY2hlY2sgaGVyZSBi
ZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJRTw5IGRpZXMgb24gZm9jdXMgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KSwgbWF5
IHdhbnQgdG8gcmV2aXNpdCBhIHRyeS9jYXRjaC4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBv
bnR5cGUgJiYgZWxlbVsgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4g
d2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9sZCA9IGVsZW1bIG9udHlwZSBdOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0g
PSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQudHJpZ2dlcmVkID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbVsgdHlwZSBdKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAo
IGllRXJyb3IgKSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9sZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBd
ID0gb2xkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OwogICAgICAgIH0sCgogICAgICAg
IGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewogICAgICAgICAgICAgICAgZXZlbnQgPSBqUXVl
cnkuZXZlbnQuZml4KCBldmVudCB8fCB3aW5kb3cuZXZlbnQgKTsKICAgICAgICAgICAgICAgIC8v
IFNuYXBzaG90IHRoZSBoYW5kbGVycyBsaXN0IHNpbmNlIGEgY2FsbGVkIGhhbmRsZXIgbWF5IGFk
ZC9yZW1vdmUgZXZlbnRzLgogICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gKChqUXVlcnku
X2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30pWyBldmVudC50eXBlIF0gfHwgW10pLnNsaWNl
KDApLAogICAgICAgICAgICAgICAgICAgICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAm
JiAhZXZlbnQubmFtZXNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMCApOwoKICAgICAgICAgICAgICAgIC8v
IFVzZSB0aGUgZml4LWVkIEV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUg
ZXZlbnQKICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBldmVudDsKICAgICAgICAgICAgICAgIGV2
ZW50LmN1cnJlbnRUYXJnZXQgPSB0aGlzOwoKICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0g
MCwgbCA9IGhhbmRsZXJzLmxlbmd0aDsgaiA8IGw7IGorKyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCAxKSBiZSBub24tZXhjbHVzaXZlIGFuZCBoYXZl
IG5vIG5hbWVzcGFjZSwgb3IKICAgICAgICAgICAgICAgICAgICAgICAgLy8gMikgaGF2ZSBuYW1l
c3BhY2UocykgYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50Lgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJ1bl9hbGwgfHwgZXZlbnQubmFtZXNwYWNlX3Jl
LnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBQYXNzIGluIGEgcmVmZXJlbmNlIHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGl0
c2VsZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvIHRoYXQgd2UgY2FuIGxh
dGVyIHJlbW92ZSBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRs
ZXIgPSBoYW5kbGVPYmouaGFuZGxlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
dmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3MgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgIT09IHVuZGVmaW5lZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9
IHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09
PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LmlzSW1tZWRp
YXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJl
dHVybiBldmVudC5yZXN1bHQ7CiAgICAgICAgfSwKCiAgICAgICAgcHJvcHM6ICJhbHRLZXkgYXR0
ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBjYW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVu
dFggY2xpZW50WSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBm
cm9tRWxlbWVudCBoYW5kbGVyIGtleUNvZGUgbGF5ZXJYIGxheWVyWSBtZXRhS2V5IG5ld1ZhbHVl
IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRl
ZFRhcmdldCBzY3JlZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdG9FbGVt
ZW50IHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAiKSwKCiAgICAgICAgZml4OiBmdW5j
dGlvbiggZXZlbnQgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5k
byBdICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgLy8gc3RvcmUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBl
dmVudCBvYmplY3QKICAgICAgICAgICAgICAgIC8vIGFuZCAiY2xvbmUiIHRvIHNldCByZWFkLW9u
bHkgcHJvcGVydGllcwogICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudDsK
ICAgICAgICAgICAgICAgIGV2ZW50ID0galF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7Cgog
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSB0aGlzLnByb3BzLmxlbmd0aCwgcHJvcDsgaTsg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSB0aGlzLnByb3BzWyAtLWkgXTsKICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3Ag
XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBGaXggdGFyZ2V0IHByb3Bl
cnR5LCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnRhcmdldCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZXMgIzE5MjUgd2hlcmUgc3JjRWxlbWVudCBt
aWdodCBub3QgYmUgZGVmaW5lZCBlaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
dGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudCB8fCBkb2N1bWVudDsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0YXJnZXQgaXMgYSB0ZXh0bm9kZSAoc2FmYXJp
KQogICAgICAgICAgICAgICAgaWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnRO
b2RlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCByZWxhdGVkVGFy
Z2V0LCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnJlbGF0ZWRUYXJn
ZXQgJiYgZXZlbnQuZnJvbUVsZW1lbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50
LnJlbGF0ZWRUYXJnZXQgPSBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0ID8gZXZl
bnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9Z
IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgaWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIGV2
ZW50LmNsaWVudFggIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50
RG9jdW1lbnQgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBldmVudERvY3VtZW50LmRvY3VtZW50RWxl
bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZXZlbnREb2N1bWVu
dC5ib2R5OwoKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucGFnZVggPSBldmVudC5jbGll
bnRYICsgKGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8
fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQg
fHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VZID0gZXZlbnQuY2xpZW50
WSArIChkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwg
MCkgLSAoZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8
IDApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3Ig
a2V5IGV2ZW50cwogICAgICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIChl
dmVudC5jaGFyQ29kZSAhPSBudWxsIHx8IGV2ZW50LmtleUNvZGUgIT0gbnVsbCkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/
IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAvLyBBZGQgbWV0YUtleSB0byBub24tTWFjIGJyb3dzZXJzICh1c2UgY3RybCBm
b3IgUEMncyBhbmQgTWV0YSBmb3IgTWFjcykKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50Lm1l
dGFLZXkgJiYgZXZlbnQuY3RybEtleSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
bWV0YUtleSA9IGV2ZW50LmN0cmxLZXk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09
PSByaWdodAogICAgICAgICAgICAgICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVk
LCBzbyBkb24ndCB1c2UgaXQKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGV2
ZW50LmJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBldmVu
dC53aGljaCA9IChldmVudC5idXR0b24gJiAxID8gMSA6ICggZXZlbnQuYnV0dG9uICYgMiA/IDMg
OiAoIGV2ZW50LmJ1dHRvbiAmIDQgPyAyIDogMCApICkpOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHJldHVybiBldmVudDsKICAgICAgICB9LAoKICAgICAgICAvLyBEZXByZWNh
dGVkLCB1c2UgalF1ZXJ5Lmd1aWQgaW5zdGVhZAogICAgICAgIGd1aWQ6IDFFOCwKCiAgICAgICAg
Ly8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5wcm94eSBpbnN0ZWFkCiAgICAgICAgcHJveHk6IGpR
dWVyeS5wcm94eSwKCiAgICAgICAgc3BlY2lhbDogewogICAgICAgICAgICAgICAgcmVhZHk6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZWFkeSBldmVudCBpcyBz
ZXR1cAogICAgICAgICAgICAgICAgICAgICAgICBzZXR1cDogalF1ZXJ5LmJpbmRSZWFkeSwKICAg
ICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGpRdWVyeS5ub29wCiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIGxpdmU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRk
OiBmdW5jdGlvbiggaGFuZGxlT2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaXZlQ29udmVydCggaGFuZGxlT2JqLm9yaWdUeXBlLCBoYW5kbGVPYmouc2VsZWN0
b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5leHRl
bmQoe30sIGhhbmRsZU9iaiwge2hhbmRsZXI6IGxpdmVIYW5kbGVyLCBndWlkOiBoYW5kbGVPYmou
aGFuZGxlci5ndWlkfSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIGhhbmRsZU9iaiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCBsaXZlQ29udmVy
dCggaGFuZGxlT2JqLm9yaWdUeXBlLCBoYW5kbGVPYmouc2VsZWN0b3IgKSwgaGFuZGxlT2JqICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAg
ICAgICAgYmVmb3JldW5sb2FkOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwOiBmdW5j
dGlvbiggZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9u
IHdpbmRvd3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1dp
bmRvdyggdGhpcyApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5vbmJlZm9yZXVubG9hZCA9IGV2ZW50SGFuZGxlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAg
ICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbiggbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm9uYmVmb3JldW5sb2FkID09
PSBldmVudEhhbmRsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMub25iZWZvcmV1bmxvYWQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg
IH0KfTsKCmpRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIg
PwogICAgICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CiAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfSA6CiAgICAgICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhh
bmRsZSApIHsKICAgICAgICAgICAgICAgIGlmICggZWxlbS5kZXRhY2hFdmVudCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5kZXRhY2hFdmVudCggIm9uIiArIHR5cGUsIGhhbmRsZSAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CgpqUXVlcnkuRXZlbnQgPSBmdW5jdGlvbigg
c3JjLCBwcm9wcyApIHsKICAgICAgICAvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhl
ICduZXcnIGtleXdvcmQKICAgICAgICBpZiAoICF0aGlzLnByZXZlbnREZWZhdWx0ICkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsKICAgICAg
ICB9CgogICAgICAgIC8vIEV2ZW50IG9iamVjdAogICAgICAgIGlmICggc3JjICYmIHNyYy50eXBl
ICkgewogICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjOwogICAgICAgICAg
ICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7CgogICAgICAgICAgICAgICAgLy8gRXZlbnRzIGJ1
YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQK
ICAgICAgICAgICAgICAgIC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZs
ZWN0IHRoZSBjb3JyZWN0IHZhbHVlLgogICAgICAgICAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2
ZW50ZWQgPSAoc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwgc3JjLnJldHVyblZhbHVlID09PSBmYWxz
ZSB8fAogICAgICAgICAgICAgICAgICAgICAgICBzcmMuZ2V0UHJldmVudERlZmF1bHQgJiYgc3Jj
LmdldFByZXZlbnREZWZhdWx0KCkpID8gcmV0dXJuVHJ1ZSA6IHJldHVybkZhbHNlOwoKICAgICAg
ICAvLyBFdmVudCB0eXBlCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMudHlw
ZSA9IHNyYzsKICAgICAgICB9CgogICAgICAgIC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHBy
b3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0CiAgICAgICAgaWYgKCBwcm9wcyApIHsKICAg
ICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7CiAgICAgICAgfQoKICAg
ICAgICAvLyB0aW1lU3RhbXAgaXMgYnVnZ3kgZm9yIHNvbWUgZXZlbnRzIG9uIEZpcmVmb3goIzM4
NDMpCiAgICAgICAgLy8gU28gd2Ugd29uJ3QgcmVseSBvbiB0aGUgbmF0aXZlIHZhbHVlCiAgICAg
ICAgdGhpcy50aW1lU3RhbXAgPSBqUXVlcnkubm93KCk7CgogICAgICAgIC8vIE1hcmsgaXQgYXMg
Zml4ZWQKICAgICAgICB0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTsKfTsKCmZ1bmN0aW9u
IHJldHVybkZhbHNlKCkgewogICAgICAgIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiByZXR1cm5U
cnVlKCkgewogICAgICAgIHJldHVybiB0cnVlOwp9CgovLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQg
b24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJp
bmRpbmcKLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMt
MjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCmpRdWVyeS5FdmVudC5wcm90b3R5cGUg
PSB7CiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwoKICAgICAgICAgICAgICAgIHZh
ciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwogICAgICAgICAgICAgICAgaWYgKCAhZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIGlmIHByZXZlbnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFs
IGV2ZW50CiAgICAgICAgICAgICAgICBpZiAoIGUucHJldmVudERlZmF1bHQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgICAgICAvLyBv
dGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZl
bnQgdG8gZmFsc2UgKElFKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAg
IH0sCiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
IHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwoKICAgICAgICAgICAgICAg
IHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwogICAgICAgICAgICAgICAgaWYgKCAhZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdp
bmFsIGV2ZW50CiAgICAgICAgICAgICAgICBpZiAoIGUuc3RvcFByb3BhZ2F0aW9uICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCB0aGUgY2FuY2VsQnViYmxlIHByb3Bl
cnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVlIChJRSkKICAgICAgICAgICAgICAgIGUu
Y2FuY2VsQnViYmxlID0gdHJ1ZTsKICAgICAgICB9LAogICAgICAgIHN0b3BJbW1lZGlhdGVQcm9w
YWdhdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlzSW1tZWRpYXRlUHJv
cGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBy
b3BhZ2F0aW9uKCk7CiAgICAgICAgfSwKICAgICAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVy
bkZhbHNlLAogICAgICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKICAgICAg
ICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKfTsKCi8vIENoZWNr
cyBpZiBhbiBldmVudCBoYXBwZW5lZCBvbiBhbiBlbGVtZW50IHdpdGhpbiBhbm90aGVyIGVsZW1l
bnQKLy8gVXNlZCBpbiBqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWVudGVyIGFuZCBtb3VzZWxl
YXZlIGhhbmRsZXJzCnZhciB3aXRoaW5FbGVtZW50ID0gZnVuY3Rpb24oIGV2ZW50ICkgewoKICAg
ICAgICAvLyBDaGVjayBpZiBtb3VzZShvdmVyfG91dCkgYXJlIHN0aWxsIHdpdGhpbiB0aGUgc2Ft
ZSBwYXJlbnQgZWxlbWVudAogICAgICAgIHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdl
dCwKICAgICAgICAgICAgICAgIGluc2lkZSA9IGZhbHNlLAogICAgICAgICAgICAgICAgZXZlbnRU
eXBlID0gZXZlbnQudHlwZTsKCiAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50LmRhdGE7CgogICAg
ICAgIGlmICggcmVsYXRlZCAhPT0gdGhpcyApIHsKCiAgICAgICAgICAgICAgICBpZiAoIHJlbGF0
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSA9IGpRdWVyeS5jb250YWlucygg
dGhpcywgcmVsYXRlZCApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
IWluc2lkZSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5oYW5kbGUu
YXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
dHlwZSA9IGV2ZW50VHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0sCgovLyBJbiBj
YXNlIG9mIGV2ZW50IGRlbGVnYXRpb24sIHdlIG9ubHkgbmVlZCB0byByZW5hbWUgdGhlIGV2ZW50
LnR5cGUsCi8vIGxpdmVIYW5kbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0LgpkZWxlZ2F0
ZSA9IGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAgICBldmVudC50eXBlID0gZXZlbnQuZGF0YTsK
ICAgICAgICBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKfTsK
Ci8vIENyZWF0ZSBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGV2ZW50cwpqUXVlcnkuZWFjaCh7
CiAgICAgICAgbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCiAgICAgICAgbW91c2VsZWF2ZTogIm1v
dXNlb3V0Igp9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewogICAgICAgIGpRdWVyeS5ldmVudC5z
cGVjaWFsWyBvcmlnIF0gPSB7CiAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIGZpeCwg
ZGF0YSAmJiBkYXRhLnNlbGVjdG9yID8gZGVsZWdhdGUgOiB3aXRoaW5FbGVtZW50LCBvcmlnICk7
CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBk
YXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlz
LCBmaXgsIGRhdGEgJiYgZGF0YS5zZWxlY3RvciA/IGRlbGVnYXRlIDogd2l0aGluRWxlbWVudCAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cn0pOwoKLy8gc3VibWl0IGRlbGVnYXRpb24K
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3VibWl0QnViYmxlcyApIHsKCiAgICAgICAgalF1ZXJ5LmV2
ZW50LnNwZWNpYWwuc3VibWl0ID0gewogICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBk
YXRhLCBuYW1lc3BhY2VzICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnku
bm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5hZGQodGhpcywgImNsaWNrLnNwZWNpYWxTdWJtaXQiLCBmdW5jdGlv
biggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lk
IHRyaWdnZXJpbmcgZXJyb3Igb24gbm9uLWV4aXN0ZW50IHR5cGUgYXR0cmlidXRlIGluIElFIFZN
TCAoIzcwNzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxl
bSA9IGUudGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5v
ZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS50eXBlIDogIiI7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAodHlwZSA9PT0gInN1Ym1pdCIgfHwgdHlw
ZSA9PT0gImltYWdlIikgJiYgalF1ZXJ5KCBlbGVtICkuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dl
ciggInN1Ym1pdCIsIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKHRoaXMsICJrZXlw
cmVzcy5zcGVjaWFsU3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBl
bGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxl
bS50eXBlIDogIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAodHlwZSA9PT0gInRleHQiIHx8IHR5cGUgPT09ICJwYXNzd29yZCIpICYmIGpRdWVyeSggZWxl
bSApLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGggJiYgZS5rZXlDb2RlID09PSAxMyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciggInN1Ym1p
dCIsIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCgog
ICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLnNwZWNpYWxTdWJt
aXQiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCn0KCi8vIGNoYW5nZSBkZWxlZ2F0
aW9uLCBoYXBwZW5zIGhlcmUgc28gd2UgaGF2ZSBiaW5kLgppZiAoICFqUXVlcnkuc3VwcG9ydC5j
aGFuZ2VCdWJibGVzICkgewoKICAgICAgICB2YXIgY2hhbmdlRmlsdGVycywKCiAgICAgICAgZ2V0
VmFsID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApID8gZWxlbS50eXBlIDogIiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbCA9IGVsZW0udmFsdWU7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBl
ID09PSAicmFkaW8iIHx8IHR5cGUgPT09ICJjaGVja2JveCIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbCA9IGVsZW0uY2hlY2tlZDsKCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0
eXBlID09PSAic2VsZWN0LW11bHRpcGxlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFs
ID0gZWxlbS5zZWxlY3RlZEluZGV4ID4gLTEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5tYXAoIGVsZW0ub3B0aW9ucywgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3RlZDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCItIikgOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIiOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dmFsID0gZWxlbS5zZWxlY3RlZEluZGV4OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHJldHVybiB2YWw7CiAgICAgICAgfSwKCiAgICAgICAgdGVzdENoYW5nZSA9IGZ1bmN0aW9u
IHRlc3RDaGFuZ2UoIGUgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LCBk
YXRhLCB2YWw7CgogICAgICAgICAgICAgICAgaWYgKCAhcmZvcm1FbGVtcy50ZXN0KCBlbGVtLm5v
ZGVOYW1lICkgfHwgZWxlbS5yZWFkT25seSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkuX2Rh
dGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiICk7CiAgICAgICAgICAgICAgICB2YWwgPSBnZXRWYWwo
ZWxlbSk7CgogICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgZGF0YSB3aWxsIGJlIGFsc28g
cmV0cmlldmVkIGJ5IGJlZm9yZWFjdGl2YXRlCiAgICAgICAgICAgICAgICBpZiAoIGUudHlwZSAh
PT0gImZvY3Vzb3V0IiB8fCBlbGVtLnR5cGUgIT09ICJyYWRpbyIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfZGF0YSIsIHZhbCApOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkIHx8
IHZhbCA9PT0gZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPSBudWxsIHx8IHZhbCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZS50eXBlID0gImNoYW5nZSI7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGUubGl2ZUZpcmVkID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgYXJndW1lbnRzWzFdLCBlbGVtICk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdl
ID0gewogICAgICAgICAgICAgICAgZmlsdGVyczogewogICAgICAgICAgICAgICAgICAgICAgICBm
b2N1c291dDogdGVzdENoYW5nZSwKCiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZWRlYWN0
aXZhdGU6IHRlc3RDaGFuZ2UsCgogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rp
b24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRh
cmdldCwgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApID8gZWxlbS50eXBl
IDogIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInJh
ZGlvIiB8fCB0eXBlID09PSAiY2hlY2tib3giIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNl
bGVjdCIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RD
aGFuZ2UuY2FsbCggdGhpcywgZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENo
YW5nZSBoYXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBzdWJtaXQKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gS2V5ZG93biB3aWxsIGJlIGNhbGxlZCBiZWZvcmUga2V5cHJlc3MsIHdoaWNoIGlzIHVz
ZWQgaW4gc3VibWl0LWV2ZW50IGRlbGVnYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAga2V5
ZG93bjogZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGVsZW0gPSBlLnRhcmdldCwgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiAp
ID8gZWxlbS50eXBlIDogIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
KGUua2V5Q29kZSA9PT0gMTMgJiYgIWpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInRleHRhcmVhIiAp
ICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmtleUNvZGUg
PT09IDMyICYmICh0eXBlID09PSAiY2hlY2tib3giIHx8IHR5cGUgPT09ICJyYWRpbyIpKSB8fAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gInNlbGVjdC1t
dWx0aXBsZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
Q2hhbmdlLmNhbGwoIHRoaXMsIGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBC
ZWZvcmVhY3RpdmF0ZSBoYXBwZW5zIGFsc28gYmVmb3JlIHRoZSBwcmV2aW91cyBlbGVtZW50IGlz
IGJsdXJyZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGlzIGV2ZW50IHlvdSBj
YW4ndCB0cmlnZ2VyIGEgY2hhbmdlIGV2ZW50LCBidXQgeW91IGNhbiBzdG9yZQogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBiZWZv
cmVhY3RpdmF0ZTogZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGVsZW0gPSBlLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiLCBnZXRWYWwoZWxlbSkgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBz
ZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdGhpcy50eXBlID09PSAiZmlsZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBjaGFuZ2VGaWx0ZXJzICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGUg
KyAiLnNwZWNpYWxDaGFuZ2UiLCBjaGFuZ2VGaWx0ZXJzW3R5cGVdICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZm9ybUVsZW1zLnRl
c3QoIHRoaXMubm9kZU5hbWUgKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAg
dGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLnNwZWNpYWxDaGFuZ2UiICk7CgogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY2hhbmdlRmlsdGVycyA9IGpR
dWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzOwoKICAgICAgICAvLyBIYW5kbGUgd2hl
biB0aGUgaW5wdXQgaXMgLmZvY3VzKCknZAogICAgICAgIGNoYW5nZUZpbHRlcnMuZm9jdXMgPSBj
aGFuZ2VGaWx0ZXJzLmJlZm9yZWFjdGl2YXRlOwp9CgpmdW5jdGlvbiB0cmlnZ2VyKCB0eXBlLCBl
bGVtLCBhcmdzICkgewogICAgICAgIC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNp
bXVsYXRlIGEgZGlmZmVyZW50IG9uZS4KICAgICAgICAvLyBGYWtlIG9yaWdpbmFsRXZlbnQgdG8g
YXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBpZiB0aGUKICAgICAgICAvLyBzaW11
bGF0ZWQgZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVuIHdlIGRvIHRoZSBzYW1lIG9uIHRoZSBk
b25vci4KICAgICAgICAvLyBEb24ndCBwYXNzIGFyZ3Mgb3IgcmVtZW1iZXIgbGl2ZUZpcmVkOyB0
aGV5IGFwcGx5IHRvIHRoZSBkb25vciBldmVudC4KICAgICAgICB2YXIgZXZlbnQgPSBqUXVlcnku
ZXh0ZW5kKCB7fSwgYXJnc1sgMCBdICk7CiAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CiAgICAg
ICAgZXZlbnQub3JpZ2luYWxFdmVudCA9IHt9OwogICAgICAgIGV2ZW50LmxpdmVGaXJlZCA9IHVu
ZGVmaW5lZDsKICAgICAgICBqUXVlcnkuZXZlbnQuaGFuZGxlLmNhbGwoIGVsZW0sIGV2ZW50ICk7
CiAgICAgICAgaWYgKCBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKICAgICAgICAgICAg
ICAgIGFyZ3NbIDAgXS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KfQoKLy8gQ3JlYXRlICJi
dWJibGluZyIgZm9jdXMgYW5kIGJsdXIgZXZlbnRzCmlmICggIWpRdWVyeS5zdXBwb3J0LmZvY3Vz
aW5CdWJibGVzICkgewogICAgICAgIGpRdWVyeS5lYWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1
cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewoKICAgICAgICAgICAgICAg
IC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciB3aGlsZSBzb21lb25lIHdhbnRz
IGZvY3VzaW4vZm9jdXNvdXQKICAgICAgICAgICAgICAgIHZhciBhdHRhY2hlcyA9IDA7CgogICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0gewogICAgICAgICAgICAg
ICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBhdHRhY2hlcysrID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwg
dHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggLS1hdHRhY2hlcyA9PT0gMCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH07CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlciggZG9ub3IgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERvbm9yIGV2ZW50IGlzIGFsd2F5cyBhIG5hdGl2ZSBvbmU7IGZp
eCBpdCBhbmQgc3dpdGNoIGl0cyB0eXBlLgogICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQg
Zm9jdXNpbi9vdXQgaGFuZGxlciBjYW5jZWwgdGhlIGRvbm9yIGZvY3VzL2JsdXIgZXZlbnQuCiAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0galF1ZXJ5LmV2ZW50LmZpeCggZG9ub3IgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgZS50eXBlID0gZml4OwogICAgICAgICAgICAgICAgICAg
ICAgICBlLm9yaWdpbmFsRXZlbnQgPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGUudGFyZ2V0ICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb25vci5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7Cn0KCmpRdWVyeS5lYWNoKFsiYmluZCIs
ICJvbmUiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0g
PSBmdW5jdGlvbiggdHlwZSwgZGF0YSwgZm4gKSB7CiAgICAgICAgICAgICAgICB2YXIgaGFuZGxl
cjsKCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgb2JqZWN0IGxpdGVyYWxzCiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiB0eXBlID09PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGtleSBpbiB0eXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXNbIG5hbWUgXShrZXksIGRhdGEsIHR5cGVba2V5XSwgZm4pOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0g
MiB8fCBkYXRhID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBkYXRh
OwogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gIm9uZSIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudW5iaW5kKCBldmVudCwgaGFuZGxlciAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSggdGhpcywg
YXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXIuZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBmbjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJ1bmxvYWQiICYm
IG5hbWUgIT09ICJvbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uZSggdHlw
ZSwgZGF0YSwgZm4gKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzW2ld
LCB0eXBlLCBoYW5kbGVyLCBkYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9Owp9KTsK
CmpRdWVyeS5mbi5leHRlbmQoewogICAgICAgIHVuYmluZDogZnVuY3Rpb24oIHR5cGUsIGZuICkg
ewogICAgICAgICAgICAgICAgLy8gSGFuZGxlIG9iamVjdCBsaXRlcmFscwogICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2YgdHlwZSA9PT0gIm9iamVjdCIgJiYgIXR5cGUucHJldmVudERlZmF1bHQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gdHlwZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuYmluZChrZXksIHR5cGVba2V5XSk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
cmVtb3ZlKCB0aGlzW2ldLCB0eXBlLCBmbiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwK
CiAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGl2ZSggdHlwZXMsIGRhdGEsIGZuLCBzZWxl
Y3RvciApOwogICAgICAgIH0sCgogICAgICAgIHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3Rv
ciwgdHlwZXMsIGZuICkgewogICAgICAgICAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoID09
PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51bmJpbmQoICJsaXZl
IiApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmRpZSggdHlwZXMsIG51bGwsIGZuLCBzZWxlY3RvciApOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0sCgogICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsK
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIHRyaWdnZXJIYW5kbGVyOiBm
dW5jdGlvbiggdHlwZSwgZGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBl
LCBkYXRhLCB0aGlzWzBdLCB0cnVlICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAg
ICAgICAgdG9nZ2xlOiBmdW5jdGlvbiggZm4gKSB7CiAgICAgICAgICAgICAgICAvLyBTYXZlIHJl
ZmVyZW5jZSB0byBhcmd1bWVudHMgZm9yIGFjY2VzcyBpbiBjbG9zdXJlCiAgICAgICAgICAgICAg
ICB2YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZCA9IGZu
Lmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKywKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiB0
byBleGVjdXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RUb2dnbGUg
PSAoIGpRdWVyeS5kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlkICkgfHwgMCApICUg
aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywgImxh
c3RUb2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgY2xpY2tzIHN0b3AKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZXhlY3V0ZSB0aGUgZnVuY3Rpb24KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1sgbGFzdFRvZ2dsZSBdLmFwcGx5KCB0
aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAg
ICAgICAgICAgICAgICAvLyBsaW5rIGFsbCB0aGUgZnVuY3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBj
YW4gdW5iaW5kIHRoaXMgY2xpY2sgaGFuZGxlcgogICAgICAgICAgICAgICAgdG9nZ2xlci5ndWlk
ID0gZ3VpZDsKICAgICAgICAgICAgICAgIHdoaWxlICggaSA8IGFyZ3MubGVuZ3RoICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzWyBpKysgXS5ndWlkID0gZ3VpZDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGljayggdG9nZ2xlciApOwogICAg
ICAgIH0sCgogICAgICAgIGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHsKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZu
T3V0IHx8IGZuT3ZlciApOwogICAgICAgIH0KfSk7Cgp2YXIgbGl2ZU1hcCA9IHsKICAgICAgICBm
b2N1czogImZvY3VzaW4iLAogICAgICAgIGJsdXI6ICJmb2N1c291dCIsCiAgICAgICAgbW91c2Vl
bnRlcjogIm1vdXNlb3ZlciIsCiAgICAgICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0Igp9OwoKalF1
ZXJ5LmVhY2goWyJsaXZlIiwgImRpZSJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKICAgICAgICBq
UXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4sIG9yaWdTZWxlY3Rv
ciAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKICAgICAgICAgICAgICAgIHZhciB0eXBlLCBp
ID0gMCwgbWF0Y2gsIG5hbWVzcGFjZXMsIHByZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGVjdG9yID0gb3JpZ1NlbGVjdG9yIHx8IHRoaXMuc2VsZWN0b3IsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQgPSBvcmlnU2VsZWN0b3IgPyB0aGlzIDogalF1ZXJ5KCB0aGlzLmNv
bnRleHQgKTsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIg
JiYgIXR5cGVzLnByZXZlbnREZWZhdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIga2V5IGluIHR5cGVzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHRbIG5hbWUgXSgga2V5LCBkYXRhLCB0eXBlc1trZXldLCBzZWxlY3RvciApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09ICJkaWUiICYm
ICF0eXBlcyAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ1Nl
bGVjdG9yICYmIG9yaWdTZWxlY3Rvci5jaGFyQXQoMCkgPT09ICIuIiApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQudW5iaW5kKCBvcmlnU2VsZWN0b3IgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIGlmICggZGF0YSA9PT0gZmFsc2UgfHwgalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBkYXRhIHx8IHJldHVybkZhbHNlOwogICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHR5cGVzID0gKHR5cGVzIHx8ICIiKS5zcGxpdCgiICIpOwoKICAgICAgICAg
ICAgICAgIHdoaWxlICggKHR5cGUgPSB0eXBlc1sgaSsrIF0pICE9IG51bGwgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoID0gcm5hbWVzcGFjZXMuZXhlYyggdHlwZSApOwogICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gIiI7CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hdGNoICkgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2VzID0gbWF0Y2hbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5
cGUucmVwbGFjZSggcm5hbWVzcGFjZXMsICIiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImhvdmVyIiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKCAibW91c2VlbnRlciIgKyBuYW1l
c3BhY2VzLCAibW91c2VsZWF2ZSIgKyBuYW1lc3BhY2VzICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIHByZVR5cGUgPSB0eXBlOwoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBsaXZlTWFwWyB0eXBlIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZXMucHVzaCggbGl2ZU1hcFsgdHlwZSBdICsgbmFtZXNwYWNlcyApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlICsgbmFtZXNwYWNlczsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IChsaXZlTWFwWyB0eXBlIF0gfHwgdHlwZSkgKyBuYW1lc3BhY2VzOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09ICJsaXZl
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaW5kIGxpdmUgaGFuZGxl
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgbCA9IGNv
bnRleHQubGVuZ3RoOyBqIDwgbDsgaisrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggY29udGV4dFtqXSwgImxpdmUuIiArIGxpdmVD
b252ZXJ0KCB0eXBlLCBzZWxlY3RvciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7IGRhdGE6IGRhdGEsIHNlbGVjdG9yOiBzZWxlY3RvciwgaGFuZGxl
cjogZm4sIG9yaWdUeXBlOiB0eXBlLCBvcmlnSGFuZGxlcjogZm4sIHByZVR5cGU6IHByZVR5cGUg
fSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5iaW5k
IGxpdmUgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQudW5i
aW5kKCAibGl2ZS4iICsgbGl2ZUNvbnZlcnQoIHR5cGUsIHNlbGVjdG9yICksIGZuICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAgICB9Owp9KTsKCmZ1bmN0aW9uIGxpdmVIYW5kbGVyKCBldmVudCAp
IHsKICAgICAgICB2YXIgc3RvcCwgbWF4TGV2ZWwsIHJlbGF0ZWQsIG1hdGNoLCBoYW5kbGVPYmos
IGVsZW0sIGosIGksIGwsIGRhdGEsIGNsb3NlLCBuYW1lc3BhY2UsIHJldCwKICAgICAgICAgICAg
ICAgIGVsZW1zID0gW10sCiAgICAgICAgICAgICAgICBzZWxlY3RvcnMgPSBbXSwKICAgICAgICAg
ICAgICAgIGV2ZW50cyA9IGpRdWVyeS5fZGF0YSggdGhpcywgImV2ZW50cyIgKTsKCiAgICAgICAg
Ly8gTWFrZSBzdXJlIHdlIGF2b2lkIG5vbi1sZWZ0LWNsaWNrIGJ1YmJsaW5nIGluIEZpcmVmb3gg
KCMzODYxKSBhbmQgZGlzYWJsZWQgZWxlbWVudHMgaW4gSUUgKCM2OTExKQogICAgICAgIGlmICgg
ZXZlbnQubGl2ZUZpcmVkID09PSB0aGlzIHx8ICFldmVudHMgfHwgIWV2ZW50cy5saXZlIHx8IGV2
ZW50LnRhcmdldC5kaXNhYmxlZCB8fCBldmVudC5idXR0b24gJiYgZXZlbnQudHlwZSA9PT0gImNs
aWNrIiApIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgg
ZXZlbnQubmFtZXNwYWNlICkgewogICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbmV3IFJlZ0V4
cCgiKF58XFwuKSIgKyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIi4iKS5qb2luKCJcXC4oPzouKlxc
Lik/IikgKyAiKFxcLnwkKSIpOwogICAgICAgIH0KCiAgICAgICAgZXZlbnQubGl2ZUZpcmVkID0g
dGhpczsKCiAgICAgICAgdmFyIGxpdmUgPSBldmVudHMubGl2ZS5zbGljZSgwKTsKCiAgICAgICAg
Zm9yICggaiA9IDA7IGogPCBsaXZlLmxlbmd0aDsgaisrICkgewogICAgICAgICAgICAgICAgaGFu
ZGxlT2JqID0gbGl2ZVtqXTsKCiAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZU9iai5vcmlnVHlw
ZS5yZXBsYWNlKCBybmFtZXNwYWNlcywgIiIgKSA9PT0gZXZlbnQudHlwZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2goIGhhbmRsZU9iai5zZWxlY3RvciApOwoKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUuc3BsaWNl
KCBqLS0sIDEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG1hdGNoID0g
alF1ZXJ5KCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBzZWxlY3RvcnMsIGV2ZW50LmN1cnJlbnRU
YXJnZXQgKTsKCiAgICAgICAgZm9yICggaSA9IDAsIGwgPSBtYXRjaC5sZW5ndGg7IGkgPCBsOyBp
KysgKSB7CiAgICAgICAgICAgICAgICBjbG9zZSA9IG1hdGNoW2ldOwoKICAgICAgICAgICAgICAg
IGZvciAoIGogPSAwOyBqIDwgbGl2ZS5sZW5ndGg7IGorKyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlT2JqID0gbGl2ZVtqXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y2xvc2Uuc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciAmJiAoIW5hbWVzcGFjZSB8fCBu
YW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApKSAmJiAhY2xvc2UuZWxlbS5kaXNh
YmxlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gY2xvc2UuZWxl
bTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkID0gbnVsbDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhvc2UgdHdvIGV2ZW50cyByZXF1aXJlIGFk
ZGl0aW9uYWwgY2hlY2tpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhh
bmRsZU9iai5wcmVUeXBlID09PSAibW91c2VlbnRlciIgfHwgaGFuZGxlT2JqLnByZVR5cGUgPT09
ICJtb3VzZWxlYXZlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoucHJlVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSBqUXVlcnkoIGV2ZW50LnJlbGF0ZWRUYXJnZXQgKS5j
bG9zZXN0KCBoYW5kbGVPYmouc2VsZWN0b3IgKVswXTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbm90IHRvIGFjY2lkZW50YWxseSBtYXRjaCBh
IGNoaWxkIGVsZW1lbnQgd2l0aCB0aGUgc2FtZSBzZWxlY3RvcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCByZWxhdGVkICYmIGpRdWVyeS5jb250YWlucyggZWxl
bSwgcmVsYXRlZCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWxhdGVkID0gZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIXJlbGF0ZWQgfHwgcmVsYXRlZCAhPT0gZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zLnB1c2goeyBlbGVt
OiBlbGVtLCBoYW5kbGVPYmo6IGhhbmRsZU9iaiwgbGV2ZWw6IGNsb3NlLmxldmVsIH0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yICggaSA9IDAsIGwgPSBlbGVt
cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICBtYXRjaCA9IGVsZW1zW2ld
OwoKICAgICAgICAgICAgICAgIGlmICggbWF4TGV2ZWwgJiYgbWF0Y2gubGV2ZWwgPiBtYXhMZXZl
bCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoLmVsZW07CiAgICAgICAg
ICAgICAgICBldmVudC5kYXRhID0gbWF0Y2guaGFuZGxlT2JqLmRhdGE7CiAgICAgICAgICAgICAg
ICBldmVudC5oYW5kbGVPYmogPSBtYXRjaC5oYW5kbGVPYmo7CgogICAgICAgICAgICAgICAgcmV0
ID0gbWF0Y2guaGFuZGxlT2JqLm9yaWdIYW5kbGVyLmFwcGx5KCBtYXRjaC5lbGVtLCBhcmd1bWVu
dHMgKTsKCiAgICAgICAgICAgICAgICBpZiAoIHJldCA9PT0gZmFsc2UgfHwgZXZlbnQuaXNQcm9w
YWdhdGlvblN0b3BwZWQoKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBt
YXRjaC5sZXZlbDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5pc0lt
bWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RvcDsKfQoKZnVuY3Rpb24gbGl2ZUNvbnZlcnQo
IHR5cGUsIHNlbGVjdG9yICkgewogICAgICAgIHJldHVybiAodHlwZSAmJiB0eXBlICE9PSAiKiIg
PyB0eXBlICsgIi4iIDogIiIpICsgc2VsZWN0b3IucmVwbGFjZShycGVyaW9kLCAiYCIpLnJlcGxh
Y2UocnNwYWNlcywgIiYiKTsKfQoKalF1ZXJ5LmVhY2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZv
Y3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCiAgICAg
ICAgIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2Vl
bnRlciBtb3VzZWxlYXZlICIgKwogICAgICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3du
IGtleXByZXNzIGtleXVwIGVycm9yIikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7
CgogICAgICAgIC8vIEhhbmRsZSBldmVudCBiaW5kaW5nCiAgICAgICAgalF1ZXJ5LmZuWyBuYW1l
IF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7CiAgICAgICAgICAgICAgICBpZiAoIGZuID09IG51
bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZGF0YTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8KICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5iaW5kKCBuYW1lLCBkYXRhLCBmbiApIDoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
cmlnZ2VyKCBuYW1lICk7CiAgICAgICAgfTsKCiAgICAgICAgaWYgKCBqUXVlcnkuYXR0ckZuICkg
ewogICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHJGblsgbmFtZSBdID0gdHJ1ZTsKICAgICAgICB9
Cn0pOwoKCgovKiEKICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUKICogIENvcHlyaWdodCAy
MDExLCBUaGUgRG9qbyBGb3VuZGF0aW9uCiAqICBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBCU0Qs
IGFuZCBHUEwgTGljZW5zZXMuCiAqICBNb3JlIGluZm9ybWF0aW9uOiBodHRwOi8vc2l6emxlanMu
Y29tLwogKi8KKGZ1bmN0aW9uKCl7Cgp2YXIgY2h1bmtlciA9IC8oKD86XCgoPzpcKFteKCldK1wp
fFteKCldKykrXCl8XFsoPzpcW1teXFtcXV0qXF18WyciXVteJyJdKlsnIl18W15cW1xdJyJdKykr
XF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2cs
CiAgICAgICAgZG9uZSA9IDAsCiAgICAgICAgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRv
U3RyaW5nLAogICAgICAgIGhhc0R1cGxpY2F0ZSA9IGZhbHNlLAogICAgICAgIGJhc2VIYXNEdXBs
aWNhdGUgPSB0cnVlLAogICAgICAgIHJCYWNrc2xhc2ggPSAvXFwvZywKICAgICAgICByTm9uV29y
ZCA9IC9cVy87CgovLyBIZXJlIHdlIGNoZWNrIGlmIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSBpcyB1
c2luZyBzb21lIHNvcnQgb2YKLy8gb3B0aW1pemF0aW9uIHdoZXJlIGl0IGRvZXMgbm90IGFsd2F5
cyBjYWxsIG91ciBjb21wYXJpc2lvbgovLyBmdW5jdGlvbi4gSWYgdGhhdCBpcyB0aGUgY2FzZSwg
ZGlzY2FyZCB0aGUgaGFzRHVwbGljYXRlIHZhbHVlLgovLyAgIFRodXMgZmFyIHRoYXQgaW5jbHVk
ZXMgR29vZ2xlIENocm9tZS4KWzAsIDBdLnNvcnQoZnVuY3Rpb24oKSB7CiAgICAgICAgYmFzZUhh
c0R1cGxpY2F0ZSA9IGZhbHNlOwogICAgICAgIHJldHVybiAwOwp9KTsKCnZhciBTaXp6bGUgPSBm
dW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7CiAgICAgICAgcmVz
dWx0cyA9IHJlc3VsdHMgfHwgW107CiAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1l
bnQ7CgogICAgICAgIHZhciBvcmlnQ29udGV4dCA9IGNvbnRleHQ7CgogICAgICAgIGlmICggY29u
dGV4dC5ub2RlVHlwZSAhPT0gMSAmJiBjb250ZXh0Lm5vZGVUeXBlICE9PSA5ICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoICFzZWxl
Y3RvciB8fCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7CiAgICAgICAgfQoKICAgICAgICB2YXIgbSwgc2V0LCBjaGVja1NldCwg
ZXh0cmEsIHJldCwgY3VyLCBwb3AsIGksCiAgICAgICAgICAgICAgICBwcnVuZSA9IHRydWUsCiAg
ICAgICAgICAgICAgICBjb250ZXh0WE1MID0gU2l6emxlLmlzWE1MKCBjb250ZXh0ICksCiAgICAg
ICAgICAgICAgICBwYXJ0cyA9IFtdLAogICAgICAgICAgICAgICAgc29GYXIgPSBzZWxlY3RvcjsK
ICAgICAgICAKICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGNodW5rZXIgcmVn
ZXhwIChzdGFydCBmcm9tIGhlYWQpCiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgY2h1bmtl
ci5leGVjKCAiIiApOwogICAgICAgICAgICAgICAgbSA9IGNodW5rZXIuZXhlYyggc29GYXIgKTsK
CiAgICAgICAgICAgICAgICBpZiAoIG0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvRmFy
ID0gbVszXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5w
dXNoKCBtWzFdICk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBtWzJdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gbVszXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKCBtICk7CgogICAgICAg
IGlmICggcGFydHMubGVuZ3RoID4gMSAmJiBvcmlnUE9TLmV4ZWMoIHNlbGVjdG9yICkgKSB7Cgog
ICAgICAgICAgICAgICAgaWYgKCBwYXJ0cy5sZW5ndGggPT09IDIgJiYgRXhwci5yZWxhdGl2ZVsg
cGFydHNbMF0gXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gcG9zUHJvY2Vzcygg
cGFydHNbMF0gKyBwYXJ0c1sxXSwgY29udGV4dCApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IEV4cHIucmVsYXRpdmVbIHBhcnRzWzBdIF0g
PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgY29udGV4dCBdIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUoIHBhcnRzLnNoaWZ0KCksIGNvbnRleHQgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggcGFydHMubGVuZ3RoICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gcGFydHMuc2hpZnQoKTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyBzZWxlY3RvciBd
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgKz0g
cGFydHMuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0ID0gcG9zUHJvY2Vzcyggc2VsZWN0b3IsIHNldCApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAv
LyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29udGV4dCBpZiB0aGUgcm9vdCBzZWxlY3Rv
ciBpcyBhbiBJRAogICAgICAgICAgICAgICAgLy8gKGJ1dCBub3QgaWYgaXQnbGwgYmUgZmFzdGVy
IGlmIHRoZSBpbm5lciBzZWxlY3RvciBpcyBhbiBJRCkKICAgICAgICAgICAgICAgIGlmICggIXNl
ZWQgJiYgcGFydHMubGVuZ3RoID4gMSAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmICFjb250
ZXh0WE1MICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwci5tYXRjaC5JRC50
ZXN0KHBhcnRzWzBdKSAmJiAhRXhwci5tYXRjaC5JRC50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAt
IDFdKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNpenpsZS5maW5kKCBwYXJ0
cy5zaGlmdCgpLCBjb250ZXh0LCBjb250ZXh0WE1MICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQgPSByZXQuZXhwciA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6
emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQgKVswXSA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnNldFswXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBpZiAoIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNlZWQgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZXhwcjogcGFydHMucG9wKCksIHNldDog
bWFrZUFycmF5KHNlZWQpIH0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenps
ZS5maW5kKCBwYXJ0cy5wb3AoKSwgcGFydHMubGVuZ3RoID09PSAxICYmIChwYXJ0c1swXSA9PT0g
In4iIHx8IHBhcnRzWzBdID09PSAiKyIpICYmIGNvbnRleHQucGFyZW50Tm9kZSA/IGNvbnRleHQu
cGFyZW50Tm9kZSA6IGNvbnRleHQsIGNvbnRleHRYTUwgKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNldCA9IHJldC5leHByID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6
bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0LnNldCApIDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXQuc2V0OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJ0cy5sZW5n
dGggPiAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0ID0gbWFr
ZUFycmF5KCBzZXQgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBwYXJ0cy5sZW5ndGggKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gcGFydHMucG9wKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gY3VyOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFFeHByLnJlbGF0aXZlWyBjdXIgXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9ICIiOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwb3AgPSBwYXJ0cy5wb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcG9wID09IG51bGwgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3AgPSBjb250ZXh0OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRXhwci5yZWxhdGl2ZVsgY3VyIF0oIGNoZWNrU2V0LCBwb3AsIGNvbnRleHRYTUwgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0ID0gcGFydHMgPSBbXTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgIGlmICggIWNoZWNrU2V0ICkgewogICAgICAgICAgICAgICAg
Y2hlY2tTZXQgPSBzZXQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoICFjaGVja1NldCApIHsKICAg
ICAgICAgICAgICAgIFNpenpsZS5lcnJvciggY3VyIHx8IHNlbGVjdG9yICk7CiAgICAgICAgfQoK
ICAgICAgICBpZiAoIHRvU3RyaW5nLmNhbGwoY2hlY2tTZXQpID09PSAiW29iamVjdCBBcnJheV0i
ICkgewogICAgICAgICAgICAgICAgaWYgKCAhcHJ1bmUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdHMucHVzaC5hcHBseSggcmVzdWx0cywgY2hlY2tTZXQgKTsKCiAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBjaGVja1NldFtpXSAhPSBudWxsOyBp
KysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjaGVja1NldFtpXSAm
JiAoY2hlY2tTZXRbaV0gPT09IHRydWUgfHwgY2hlY2tTZXRbaV0ubm9kZVR5cGUgPT09IDEgJiYg
U2l6emxlLmNvbnRhaW5zKGNvbnRleHQsIGNoZWNrU2V0W2ldKSkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIHNldFtpXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
OyBjaGVja1NldFtpXSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjaGVja1NldFtpXSAmJiBjaGVja1NldFtpXS5ub2RlVHlwZSA9PT0gMSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggc2V0
W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICBtYWtlQXJyYXkoIGNoZWNrU2V0LCByZXN1bHRzICk7CiAgICAgICAgfQoKICAgICAgICBp
ZiAoIGV4dHJhICkgewogICAgICAgICAgICAgICAgU2l6emxlKCBleHRyYSwgb3JpZ0NvbnRleHQs
IHJlc3VsdHMsIHNlZWQgKTsKICAgICAgICAgICAgICAgIFNpenpsZS51bmlxdWVTb3J0KCByZXN1
bHRzICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0czsKfTsKClNpenpsZS51bmlx
dWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7CiAgICAgICAgaWYgKCBzb3J0T3JkZXIgKSB7
CiAgICAgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSBiYXNlSGFzRHVwbGljYXRlOwogICAgICAg
ICAgICAgICAgcmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKCiAgICAgICAgICAgICAgICBpZiAo
IGhhc0R1cGxpY2F0ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAx
OyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHJlc3VsdHNbaV0gPT09IHJlc3VsdHNbIGkgLSAxIF0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnNwbGljZSggaS0tLCAxICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0czsKfTsK
ClNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIHNldCApIHsKICAgICAgICByZXR1cm4g
U2l6emxlKCBleHByLCBudWxsLCBudWxsLCBzZXQgKTsKfTsKClNpenpsZS5tYXRjaGVzU2VsZWN0
b3IgPSBmdW5jdGlvbiggbm9kZSwgZXhwciApIHsKICAgICAgICByZXR1cm4gU2l6emxlKCBleHBy
LCBudWxsLCBudWxsLCBbbm9kZV0gKS5sZW5ndGggPiAwOwp9OwoKU2l6emxlLmZpbmQgPSBmdW5j
dGlvbiggZXhwciwgY29udGV4dCwgaXNYTUwgKSB7CiAgICAgICAgdmFyIHNldDsKCiAgICAgICAg
aWYgKCAhZXhwciApIHsKICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CgogICAg
ICAgIGZvciAoIHZhciBpID0gMCwgbCA9IEV4cHIub3JkZXIubGVuZ3RoOyBpIDwgbDsgaSsrICkg
ewogICAgICAgICAgICAgICAgdmFyIG1hdGNoLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gRXhwci5vcmRlcltpXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCAo
bWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gbWF0Y2hbMV07CiAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoLnNwbGljZSggMSwgMSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBs
ZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgIT09ICJcXCIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSAobWF0Y2hbMV0gfHwgIiIpLnJlcGxhY2UoIHJC
YWNrc2xhc2gsICIiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gRXhw
ci5maW5kWyB0eXBlIF0oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHNldCAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlw
ZSBdLCAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICFzZXQgKSB7CiAg
ICAgICAgICAgICAgICBzZXQgPSB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAh
PT0gInVuZGVmaW5lZCIgPwogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCAiKiIgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIFtdOwogICAgICAg
IH0KCiAgICAgICAgcmV0dXJuIHsgc2V0OiBzZXQsIGV4cHI6IGV4cHIgfTsKfTsKClNpenpsZS5m
aWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgc2V0LCBpbnBsYWNlLCBub3QgKSB7CiAgICAgICAgdmFy
IG1hdGNoLCBhbnlGb3VuZCwKICAgICAgICAgICAgICAgIG9sZCA9IGV4cHIsCiAgICAgICAgICAg
ICAgICByZXN1bHQgPSBbXSwKICAgICAgICAgICAgICAgIGN1ckxvb3AgPSBzZXQsCiAgICAgICAg
ICAgICAgICBpc1hNTEZpbHRlciA9IHNldCAmJiBzZXRbMF0gJiYgU2l6emxlLmlzWE1MKCBzZXRb
MF0gKTsKCiAgICAgICAgd2hpbGUgKCBleHByICYmIHNldC5sZW5ndGggKSB7CiAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgdHlwZSBpbiBFeHByLmZpbHRlciApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkg
IT0gbnVsbCAmJiBtYXRjaFsyXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZm91bmQsIGl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWx0ZXIgPSBFeHByLmZpbHRlclsgdHlwZSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdCA9IG1hdGNoWzFdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhbnlGb3VuZCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaC5zcGxpY2UoMSwxKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBs
ZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgPT09ICJcXCIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyTG9v
cCA9PT0gcmVzdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEV4cHIucHJlRmlsdGVyWyB0eXBlIF0gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEV4cHIucHJlRmls
dGVyWyB0eXBlIF0oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCwgaXNYTUxG
aWx0ZXIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFt
YXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YW55Rm91bmQgPSBmb3VuZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2ggPT09IHRydWUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgKGl0ZW0g
PSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaXRlbSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGZpbHRlciggaXRlbSwg
bWF0Y2gsIGksIGN1ckxvb3AgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcGFzcyA9IG5vdCBeICEhZm91bmQ7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5wbGFj
ZSAmJiBmb3VuZCAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXNzICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbnlGb3VuZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTG9v
cFtpXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBwYXNzICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnB1c2goIGl0ZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFueUZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZm91bmQgIT09IHVuZGVmaW5lZCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3Ag
PSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgg
RXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIWFueUZvdW5kICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSW1wcm9wZXIg
ZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgaWYgKCBleHByID09PSBvbGQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggYW55Rm91bmQgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIGV4cHIgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBvbGQgPSBleHByOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGN1ckxvb3A7Cn07CgpTaXp6
bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgewogICAgICAgIHRocm93ICJTeW50YXggZXJyb3Is
IHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgbXNnOwp9OwoKdmFyIEV4cHIgPSBTaXp6bGUu
c2VsZWN0b3JzID0gewogICAgICAgIG9yZGVyOiBbICJJRCIsICJOQU1FIiwgIlRBRyIgXSwKCiAg
ICAgICAgbWF0Y2g6IHsKICAgICAgICAgICAgICAgIElEOiAvIygoPzpbXHdcdTAwYzAtXHVGRkZG
XC1dfFxcLikrKS8sCiAgICAgICAgICAgICAgICBDTEFTUzogL1wuKCg/Oltcd1x1MDBjMC1cdUZG
RkZcLV18XFwuKSspLywKICAgICAgICAgICAgICAgIE5BTUU6IC9cW25hbWU9WyciXSooKD86W1x3
XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLywKICAgICAgICAgICAgICAgIEFUVFI6IC9c
W1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKig/OihbJyJd
KSguKj8pXDN8KCM/KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKil8KXwpXHMqXF0vLAogICAg
ICAgICAgICAgICAgVEFHOiAvXigoPzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLywKICAg
ICAgICAgICAgICAgIENISUxEOiAvOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlwoXHMq
KGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9cZCopP25ccyooPzpbK1wtXVxzKlxkKyk/
KSlccypcKSk/LywKICAgICAgICAgICAgICAgIFBPUzogLzoobnRofGVxfGd0fGx0fGZpcnN0fGxh
c3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sCiAgICAgICAgICAgICAgICBQ
U0VVRE86IC86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/Olwo
W15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vCiAgICAgICAgfSwKCiAgICAgICAgbGVmdE1hdGNo
OiB7fSwKCiAgICAgICAgYXR0ck1hcDogewogICAgICAgICAgICAgICAgImNsYXNzIjogImNsYXNz
TmFtZSIsCiAgICAgICAgICAgICAgICAiZm9yIjogImh0bWxGb3IiCiAgICAgICAgfSwKCiAgICAg
ICAgYXR0ckhhbmRsZTogewogICAgICAgICAgICAgICAgaHJlZjogZnVuY3Rpb24oIGVsZW0gKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYi
ICk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdHlwZTogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgg
InR5cGUiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgcmVsYXRpdmU6
IHsKICAgICAgICAgICAgICAgICIrIjogZnVuY3Rpb24oY2hlY2tTZXQsIHBhcnQpewogICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJpbmci
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFnID0gaXNQYXJ0U3RyICYmICFy
Tm9uV29yZC50ZXN0KCBwYXJ0ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQ
YXJ0U3RyTm90VGFnID0gaXNQYXJ0U3RyICYmICFpc1RhZzsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggaXNUYWcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9
IHBhcnQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoLCBlbGVt
OyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGVs
ZW0gPSBjaGVja1NldFtpXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoIChlbGVtID0gZWxlbS5wcmV2aW91c1NpYmxpbmcpICYmIGVsZW0ubm9kZVR5
cGUgIT09IDEgKSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrU2V0W2ldID0gaXNQYXJ0U3RyTm90VGFnIHx8IGVsZW0gJiYgZWxlbS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09PSBwYXJ0ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbSB8fCBmYWxzZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0gPT09IHBhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGlzUGFydFN0ck5vdFRhZyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaXp6bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1NldCwgdHJ1ZSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICI+IjogZnVu
Y3Rpb24oIGNoZWNrU2V0LCBwYXJ0ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxl
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BhcnRTdHIgPSB0eXBlb2YgcGFy
dCA9PT0gInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGNoZWNrU2V0Lmxlbmd0aDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaXNQYXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0
ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQudG9Mb3dl
ckNhc2UoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbDsg
aSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNo
ZWNrU2V0W2ldOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBwYXJlbnQubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSA9PT0gcGFydCA/IHBhcmVudCA6IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbSA9IGNoZWNrU2V0W2ldOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBpc1BhcnRTdHIgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50
Tm9kZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5wYXJlbnROb2RlID09PSBwYXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1BhcnRTdHIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1Nl
dCwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAiIjogZnVu
Y3Rpb24oY2hlY2tTZXQsIHBhcnQsIGlzWE1MKXsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG5vZGVDaGVjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lTmFtZSA9IGRv
bmUrKywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGlyQ2hlY2s7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBwYXJ0ID09PSAic3RyaW5nIiAm
JiAhck5vbldvcmQudGVzdCggcGFydCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUNoZWNrID0gcGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGVja0ZuID0gZGlyTm9kZUNoZWNrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICBjaGVja0ZuKCAicGFyZW50Tm9kZSIsIHBhcnQsIGRvbmVOYW1lLCBj
aGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAg
ICAgICAgICAifiI6IGZ1bmN0aW9uKCBjaGVja1NldCwgcGFydCwgaXNYTUwgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBub2RlQ2hlY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9uZU5hbWUgPSBkb25lKyssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hlY2tGbiA9IGRpckNoZWNrOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yg
cGFydCA9PT0gInN0cmluZyIgJiYgIXJOb25Xb3JkLnRlc3QoIHBhcnQgKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVDaGVjayA9IHBhcnQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hlY2tGbiA9IGRpck5vZGVDaGVjazsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbiggInByZXZpb3VzU2li
bGluZyIsIHBhcnQsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApOwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGZpbmQ6IHsKICAgICAgICAgICAgICAg
IElEOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5kZWZpbmVk
IiAmJiAhaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBj
b250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYg
cmV0dXJucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQgYXJl
IG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbSAmJiBtLnBhcmVudE5vZGUgPyBbbV0gOiBbXTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBOQU1FOiBm
dW5jdGlvbiggbWF0Y2gsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUgIT09ICJ1bmRlZmluZWQiICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlO
YW1lKCBtYXRjaFsxXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGwgPSByZXN1bHRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0c1tpXS5nZXRBdHRyaWJ1dGUo
Im5hbWUiKSA9PT0gbWF0Y2hbMV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldC5wdXNoKCByZXN1bHRzW2ldICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Lmxlbmd0aCA9PT0g
MCA/IG51bGwgOiByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUgIT09ICJ1bmRlZmluZWQiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBw
cmVGaWx0ZXI6IHsKICAgICAgICAgICAgICAgIENMQVNTOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxv
b3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSAiICIgKyBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApICsgIiAi
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1hNTCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSBj
dXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBub3QgXiAoZWxlbS5jbGFzc05hbWUgJiYgKCIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAi
KS5yZXBsYWNlKC9bXHRcblxyXS9nLCAiICIpLmluZGV4T2YobWF0Y2gpID49IDApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpbnBsYWNl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5wdXNoKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBpbnBsYWNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJMb29wW2ldID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIElEOiBmdW5jdGlvbigg
bWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXS5yZXBsYWNl
KCByQmFja3NsYXNoLCAiIiApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBU
QUc6IGZ1bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICkudG9Mb3dlckNhc2UoKTsK
ICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgQ0hJTEQ6IGZ1bmN0aW9uKCBtYXRj
aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hbMl0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBd
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzJdLnJlcGxhY2UoL15cK3xccyovZywgJycp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBlcXVhdGlvbnMgbGlr
ZSAnZXZlbicsICdvZGQnLCAnNScsICcybicsICczbisyJywgJzRuLTEnLCAnLW4rNicKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IC8oLT8pKFxkKikoPzpuKFsrXC1d
P1xkKikpPy8uZXhlYygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoWzJdID09PSAiZXZlbiIgJiYgIjJuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIgJiYgIjJuKzEi
IHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhL1xELy50ZXN0KCBt
YXRjaFsyXSApICYmICIwbisiICsgbWF0Y2hbMl0gfHwgbWF0Y2hbMl0pOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlcnMgKGZpcnN0KW4rKGxh
c3QpIGluY2x1ZGluZyBpZiB0aGV5IGFyZSBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoWzJdID0gKHRlc3RbMV0gKyAodGVzdFsyXSB8fCAxKSkgLSAwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzNdID0gdGVzdFszXSAtIDA7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIG1h
dGNoWzJdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvcigg
bWF0Y2hbMF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVE9ETzogTW92ZSB0byBub3JtYWwgY2FjaGluZyBzeXN0ZW0KICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hbMF0gPSBkb25lKys7CgogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIEFUVFI6IGZ1
bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVw
bGFjZSggckJhY2tzbGFzaCwgIiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWlzWE1MICYmIEV4cHIuYXR0ck1hcFtuYW1lXSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IEV4cHIuYXR0ck1hcFtuYW1l
XTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SGFuZGxlIGlmIGFuIHVuLXF1b3RlZCB2YWx1ZSB3YXMgdXNlZAogICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaFs0XSA9ICggbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgIiIgKS5yZXBsYWNlKCBy
QmFja3NsYXNoLCAiIiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsyXSA9
PT0gIn49IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFs0XSA9ICIg
IiArIG1hdGNoWzRdICsgIiAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAg
ICAgICAgIFBTRVVETzogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQs
IG5vdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gIm5vdCIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgZGVhbGluZyB3
aXRoIGEgY29tcGxleCBleHByZXNzaW9uLCBvciBhIHNpbXBsZSBvbmUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICggY2h1bmtlci5leGVjKG1hdGNoWzNdKSB8fCAiIiApLmxl
bmd0aCA+IDEgfHwgL15cdy8udGVzdChtYXRjaFszXSkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSA9IFNpenpsZShtYXRjaFszXSwgbnVsbCwgbnVs
bCwgY3VyTG9vcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gU2l6emxlLmZp
bHRlcihtYXRjaFszXSwgY3VyTG9vcCwgaW5wbGFjZSwgdHJ1ZSBeIG5vdCk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaW5wbGFjZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2guYXBwbHko
IHJlc3VsdCwgcmV0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIEV4cHIubWF0Y2guUE9TLnRlc3QoIG1hdGNoWzBdICkgfHwgRXhwci5tYXRj
aC5DSElMRC50ZXN0KCBtYXRjaFswXSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFBPUzogZnVuY3Rpb24oIG1hdGNoICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaC51bnNoaWZ0KCB0cnVlICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAg
ICAgICAKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBmdW5jdGlv
biggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQg
PT09IGZhbHNlICYmIGVsZW0udHlwZSAhPT0gImhpZGRlbiI7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5jaGVja2VkID09PSB0cnVlOwogICAgICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZ1bmN0
aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3NpbmcgdGhpcyBw
cm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gISFlbGVtLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgIGVtcHR5OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICFlbGVtLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAg
IGhhczogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gISFTaXp6bGUoIG1hdGNoWzNdLCBlbGVtICkubGVuZ3RoOwogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBoZWFkZXI6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKC9oXGQvaSkudGVzdCggZWxlbS5ub2RlTmFtZSApOwog
ICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiggZWxlbSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgg
InR5cGUiICksIHR5cGUgPSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElF
NiBhbmQgNyB3aWxsIG1hcCBlbGVtLnR5cGUgdG8gJ3RleHQnIGZvciBuZXcgSFRNTDUgdHlwZXMg
KHNlYXJjaCwgZXRjKSAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGdldEF0dHJpYnV0
ZSBpbnN0ZWFkIHRvIHRlc3QgdGhpcyBjYXNlCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInRleHQiID09PSB0
eXBlICYmICggYXR0ciA9PT0gdHlwZSB8fCBhdHRyID09PSBudWxsICk7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIHJhZGlvOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlu
cHV0IiAmJiAicmFkaW8iID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAg
ICAgICAgICAgIGNoZWNrYm94OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAi
Y2hlY2tib3giID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgIGZpbGU6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJmaWxlIiA9PT0g
ZWxlbS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBwYXNzd29yZDog
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInBhc3N3b3JkIiA9PT0gZWxlbS50
eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBzdWJtaXQ6IGZ1bmN0aW9u
KCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5h
bWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuYW1lID09
PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAmJiAic3VibWl0IiA9PT0gZWxlbS50eXBl
OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBpbWFnZTogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgImltYWdlIiA9PT0gZWxlbS50eXBlOwogICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICByZXNldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFt
ZSA9PT0gImJ1dHRvbiIpICYmICJyZXNldCIgPT09IGVsZW0udHlwZTsKICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgYnV0dG9uOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmICJidXR0b24i
ID09PSBlbGVtLnR5cGUgfHwgbmFtZSA9PT0gImJ1dHRvbiI7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICgvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pKS50ZXN0KCBl
bGVtLm5vZGVOYW1lICk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGZvY3Vz
OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0g
PT09IGVsZW0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50OwogICAgICAgICAgICAgICAgfQog
ICAgICAgIH0sCiAgICAgICAgc2V0RmlsdGVyczogewogICAgICAgICAgICAgICAgZmlyc3Q6IGZ1
bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0g
MDsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgbGFzdDogZnVuY3Rpb24oIGVs
ZW0sIGksIG1hdGNoLCBhcnJheSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkg
PT09IGFycmF5Lmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAg
IGV2ZW46IGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaSAlIDIgPT09IDA7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIG9kZDog
ZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpICUg
MiA9PT0gMTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgbHQ6IGZ1bmN0aW9u
KCBlbGVtLCBpLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
YXRjaFszXSAtIDA7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGd0OiBmdW5j
dGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBp
ID4gbWF0Y2hbM10gLSAwOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBudGg6
IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoWzNdIC0gMCA9PT0gaTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAg
ICAgZXE6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoWzNdIC0gMCA9PT0gaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
LAogICAgICAgIGZpbHRlcjogewogICAgICAgICAgICAgICAgUFNFVURPOiBmdW5jdGlvbiggZWxl
bSwgbWF0Y2gsIGksIGFycmF5ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9
IG1hdGNoWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IEV4cHIu
ZmlsdGVyc1sgbmFtZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaWx0ZXIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlciggZWxlbSwgaSwg
bWF0Y2gsIGFycmF5ICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBuYW1l
ID09PSAiY29udGFpbnMiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBTaXp6bGUuZ2V0VGV4dChb
IGVsZW0gXSkgfHwgIiIpLmluZGV4T2YobWF0Y2hbM10pID49IDA7CgogICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBuYW1lID09PSAibm90IiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbm90ID0gbWF0Y2hbM107CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgbCA9IG5vdC5sZW5ndGg7IGogPCBsOyBqKysgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdFtqXSA9PT0g
ZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbmFtZSApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAg
IENISUxEOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0eXBlID0gbWF0Y2hbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IGVsZW07CgogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCB0eXBlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIm9ubHkiOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgImZpcnN0IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykgKSAgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUu
bm9kZVR5cGUgPT09IDEgKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHR5cGUgPT09ICJmaXJzdCIgKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IGVsZW07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImxhc3QiOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9IG5v
ZGUubmV4dFNpYmxpbmcpICkgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICJudGgiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGZpcnN0ID0gbWF0Y2hbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtYXRjaFszXTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZG9uZU5hbWUgPSBtYXRjaFswXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwogICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQg
JiYgKHBhcmVudC5zaXpjYWNoZSAhPT0gZG9uZU5hbWUgfHwgIWVsZW0ubm9kZUluZGV4KSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50
ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5vZGUg
PSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBub2RlLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSArK2NvdW50
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zaXpj
YWNoZSA9IGRvbmVOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IGVsZW0ubm9kZUluZGV4IC0gbGFz
dDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ID09
PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZGlmZiA9PT0gMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBJRDogZnVuY3Rpb24o
IGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2Rl
VHlwZSA9PT0gMSAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gbWF0Y2g7CiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFRBRzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1hdGNoID09PSAiKiIgJiYgZWxlbS5u
b2RlVHlwZSA9PT0gMSkgfHwgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBtYXRjaDsK
ICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIENMQVNT
OiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoIiAiICsgKGVsZW0uY2xhc3NOYW1lIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSAr
ICIgIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZiggbWF0Y2ggKSA+
IC0xOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBBVFRSOiBmdW5jdGlvbigg
ZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWF0Y2hb
MV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRXhwci5hdHRySGFu
ZGxlWyBuYW1lIF0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhw
ci5hdHRySGFuZGxlWyBuYW1lIF0oIGVsZW0gKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0gIT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG5hbWUgXSA6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1l
ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZXN1bHQgKyAiIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gbWF0Y2hbMl0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSBtYXRjaFs0XTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9PT0gIiE9IiA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9PT0gIj0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9PT0g
Y2hlY2sgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICIqPSIgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmluZGV4T2YoY2hlY2spID49IDAg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICJ+PSIgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgiICIgKyB2YWx1ZSArICIgIikuaW5kZXhPZihjaGVj
aykgPj0gMCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAmJiByZXN1bHQgIT09IGZhbHNlIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAiIT0iID8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gY2hlY2sgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPT09ICJePSIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlLmluZGV4T2YoY2hlY2spID09PSAwIDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID09PSAiJD0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZS5zdWJzdHIodmFsdWUubGVuZ3RoIC0gY2hlY2subGVuZ3RoKSA9PT0gY2hlY2sgOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICJ8PSIgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID09PSBjaGVjayB8fCB2YWx1ZS5zdWJzdHIoMCwgY2hl
Y2subGVuZ3RoICsgMSkgPT09IGNoZWNrICsgIi0iIDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgUE9TOiBm
dW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbmFtZSA9IG1hdGNoWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bHRlciA9IEV4cHIuc2V0RmlsdGVyc1sgbmFtZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBmaWx0ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZp
bHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn07Cgp2YXIgb3JpZ1BPUyA9IEV4cHIubWF0Y2gu
UE9TLAogICAgICAgIGZlc2NhcGUgPSBmdW5jdGlvbihhbGwsIG51bSl7CiAgICAgICAgICAgICAg
ICByZXR1cm4gIlxcIiArIChudW0gLSAwICsgMSk7CiAgICAgICAgfTsKCmZvciAoIHZhciB0eXBl
IGluIEV4cHIubWF0Y2ggKSB7CiAgICAgICAgRXhwci5tYXRjaFsgdHlwZSBdID0gbmV3IFJlZ0V4
cCggRXhwci5tYXRjaFsgdHlwZSBdLnNvdXJjZSArICgvKD8hW15cW10qXF0pKD8hW15cKF0qXCkp
Ly5zb3VyY2UpICk7CiAgICAgICAgRXhwci5sZWZ0TWF0Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAo
IC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2UgKyBFeHByLm1hdGNoWyB0eXBlIF0uc291cmNlLnJl
cGxhY2UoL1xcKFxkKykvZywgZmVzY2FwZSkgKTsKfQoKdmFyIG1ha2VBcnJheSA9IGZ1bmN0aW9u
KCBhcnJheSwgcmVzdWx0cyApIHsKICAgICAgICBhcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKCBhcnJheSwgMCApOwoKICAgICAgICBpZiAoIHJlc3VsdHMgKSB7CiAgICAgICAgICAg
ICAgICByZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMsIGFycmF5ICk7CiAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0czsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGFycmF5
Owp9OwoKLy8gUGVyZm9ybSBhIHNpbXBsZSBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGhlIGJyb3dz
ZXIgaXMgY2FwYWJsZSBvZgovLyBjb252ZXJ0aW5nIGEgTm9kZUxpc3QgdG8gYW4gYXJyYXkgdXNp
bmcgYnVpbHRpbiBtZXRob2RzLgovLyBBbHNvIHZlcmlmaWVzIHRoYXQgdGhlIHJldHVybmVkIGFy
cmF5IGhvbGRzIERPTSBub2RlcwovLyAod2hpY2ggaXMgbm90IHRoZSBjYXNlIGluIHRoZSBCbGFj
a2JlcnJ5IGJyb3dzZXIpCnRyeSB7CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLCAwIClbMF0ubm9kZVR5cGU7Cgov
LyBQcm92aWRlIGEgZmFsbGJhY2sgbWV0aG9kIGlmIGl0IGRvZXMgbm90IHdvcmsKfSBjYXRjaCgg
ZSApIHsKICAgICAgICBtYWtlQXJyYXkgPSBmdW5jdGlvbiggYXJyYXksIHJlc3VsdHMgKSB7CiAg
ICAgICAgICAgICAgICB2YXIgaSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJl
c3VsdHMgfHwgW107CgogICAgICAgICAgICAgICAgaWYgKCB0b1N0cmluZy5jYWxsKGFycmF5KSA9
PT0gIltvYmplY3QgQXJyYXldIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJv
dG90eXBlLnB1c2guYXBwbHkoIHJldCwgYXJyYXkgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBhcnJheS5sZW5ndGggPT09ICJu
dW1iZXIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBsID0g
YXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnB1c2goIGFycmF5W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGFycmF5W2ldOyBpKysgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggYXJyYXlbaV0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07Cn0K
CnZhciBzb3J0T3JkZXIsIHNpYmxpbmdDaGVjazsKCmlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkgewogICAgICAgIHNvcnRPcmRlciA9IGZ1bmN0
aW9uKCBhLCBiICkgewogICAgICAgICAgICAgICAgaWYgKCBhID09PSBiICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/
IC0xIDogMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gYS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IDE7CiAgICAgICAgfTsKCn0gZWxzZSB7
CiAgICAgICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CiAgICAgICAgICAgICAgICAv
LyBUaGUgbm9kZXMgYXJlIGlkZW50aWNhbCwgd2UgY2FuIGV4aXQgZWFybHkKICAgICAgICAgICAg
ICAgIGlmICggYSA9PT0gYiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRl
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgICAgICAg
ICAgLy8gRmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5kZXggKGluIElFKSBpZiBpdCdzIGF2YWls
YWJsZSBvbiBib3RoIG5vZGVzCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhLnNvdXJjZUlu
ZGV4ICYmIGIuc291cmNlSW5kZXggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
LnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICB2YXIgYWwsIGJsLAogICAgICAgICAgICAgICAgICAgICAgICBhcCA9IFtdLAogICAg
ICAgICAgICAgICAgICAgICAgICBicCA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBhdXAg
PSBhLnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1cCA9IGIucGFyZW50Tm9k
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gYXVwOwoKICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MgKG9yIGlkZW50aWNhbCkgd2UgY2FuIGRvIGEgcXVp
Y2sgY2hlY2sKICAgICAgICAgICAgICAgIGlmICggYXVwID09PSBidXAgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsKCiAgICAgICAgICAgICAg
ICAvLyBJZiBubyBwYXJlbnRzIHdlcmUgZm91bmQgdGhlbiB0aGUgbm9kZXMgYXJlIGRpc2Nvbm5l
Y3RlZAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIWF1cCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFidXAgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5J3JlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSB0
cmVlIHNvIHdlIG5lZWQKICAgICAgICAgICAgICAgIC8vIHRvIGJ1aWxkIHVwIGEgZnVsbCBsaXN0
IG9mIHRoZSBwYXJlbnROb2RlcyBmb3IgY29tcGFyaXNvbgogICAgICAgICAgICAgICAgd2hpbGUg
KCBjdXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOwogICAg
ICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICBjdXIgPSBidXA7CgogICAgICAgICAgICAgICAgd2hpbGUgKCBj
dXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJwLnVuc2hpZnQoIGN1ciApOwogICAgICAg
ICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBhbCA9IGFwLmxlbmd0aDsKICAgICAgICAgICAgICAgIGJsID0gYnAu
bGVuZ3RoOwoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHdhbGtpbmcgZG93biB0aGUgdHJlZSBs
b29raW5nIGZvciBhIGRpc2NyZXBhbmN5CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7
IGkgPCBhbCAmJiBpIDwgYmw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBh
cFtpXSAhPT0gYnBbaV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBXZSBlbmRlZCBzb21lcGxhY2Ug
dXAgdGhlIHRyZWUgc28gZG8gYSBzaWJsaW5nIGNoZWNrCiAgICAgICAgICAgICAgICByZXR1cm4g
aSA9PT0gYWwgPwogICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5nQ2hlY2soIGEsIGJwW2ld
LCAtMSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZ0NoZWNrKCBhcFtpXSwgYiwg
MSApOwogICAgICAgIH07CgogICAgICAgIHNpYmxpbmdDaGVjayA9IGZ1bmN0aW9uKCBhLCBiLCBy
ZXQgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGEgPT09IGIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFy
IGN1ciA9IGEubmV4dFNpYmxpbmc7CgogICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyID09PSBiICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLm5leHRTaWJsaW5nOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH07Cn0KCi8vIFV0aWxpdHkg
ZnVuY3Rpb24gZm9yIHJldHJlaXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9N
IG5vZGVzClNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW1zICkgewogICAgICAgIHZhciBy
ZXQgPSAiIiwgZWxlbTsKCiAgICAgICAgZm9yICggdmFyIGkgPSAwOyBlbGVtc1tpXTsgaSsrICkg
ewogICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1zW2ldOwoKICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgdGV4dCBmcm9tIHRleHQgbm9kZXMgYW5kIENEQVRBIG5vZGVzCiAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gNCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGVsZW0ubm9kZVZhbHVlOwoKICAgICAgICAgICAg
ICAgIC8vIFRyYXZlcnNlIGV2ZXJ5dGhpbmcgZWxzZSwgZXhjZXB0IGNvbW1lbnQgbm9kZXMKICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgIT09IDggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCArPSBTaXp6bGUuZ2V0VGV4dCggZWxlbS5jaGlsZE5vZGVzICk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmV0Owp9OwoKLy8g
Q2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZSB3aGVu
Ci8vIHF1ZXJ5aW5nIGJ5IGdldEVsZW1lbnRCeUlkIChhbmQgcHJvdmlkZSBhIHdvcmthcm91bmQp
CihmdW5jdGlvbigpewogICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGluamVjdCBhIGZha2UgaW5w
dXQgZWxlbWVudCB3aXRoIGEgc3BlY2lmaWVkIG5hbWUKICAgICAgICB2YXIgZm9ybSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLAogICAgICAgICAgICAgICAgaWQgPSAic2NyaXB0IiAr
IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgICAgICAgICAgICByb290ID0gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50OwoKICAgICAgICBmb3JtLmlubmVySFRNTCA9ICI8YSBuYW1lPSciICsg
aWQgKyAiJy8+IjsKCiAgICAgICAgLy8gSW5qZWN0IGl0IGludG8gdGhlIHJvb3QgZWxlbWVudCwg
Y2hlY2sgaXRzIHN0YXR1cywgYW5kIHJlbW92ZSBpdCBxdWlja2x5CiAgICAgICAgcm9vdC5pbnNl
cnRCZWZvcmUoIGZvcm0sIHJvb3QuZmlyc3RDaGlsZCApOwoKICAgICAgICAvLyBUaGUgd29ya2Fy
b3VuZCBoYXMgdG8gZG8gYWRkaXRpb25hbCBjaGVja3MgYWZ0ZXIgYSBnZXRFbGVtZW50QnlJZAog
ICAgICAgIC8vIFdoaWNoIHNsb3dzIHRoaW5ncyBkb3duIGZvciBvdGhlciBicm93c2VycyAoaGVu
Y2UgdGhlIGJyYW5jaGluZykKICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBp
ZCApICkgewogICAgICAgICAgICAgICAgRXhwci5maW5kLklEID0gZnVuY3Rpb24oIG1hdGNoLCBj
b250ZXh0LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29u
dGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCht
YXRjaFsxXSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtID8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQgPT09IG1hdGNoWzFdIHx8
IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIG0uZ2V0QXR0cmli
dXRlTm9kZSgiaWQiKS5ub2RlVmFsdWUgPT09IG1hdGNoWzFdID8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21dIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIEV4cHIuZmlsdGVyLklEID0gZnVuY3Rpb24o
IGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHR5cGVv
ZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIGVsZW0uZ2V0QXR0cmli
dXRlTm9kZSgiaWQiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVU
eXBlID09PSAxICYmIG5vZGUgJiYgbm9kZS5ub2RlVmFsdWUgPT09IG1hdGNoOwogICAgICAgICAg
ICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQoIGZvcm0gKTsKCiAg
ICAgICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICByb290ID0gZm9ybSA9IG51bGw7
Cn0pKCk7CgooZnVuY3Rpb24oKXsKICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGJyb3dz
ZXIgcmV0dXJucyBvbmx5IGVsZW1lbnRzCiAgICAgICAgLy8gd2hlbiBkb2luZyBnZXRFbGVtZW50
c0J5VGFnTmFtZSgiKiIpCgogICAgICAgIC8vIENyZWF0ZSBhIGZha2UgZWxlbWVudAogICAgICAg
IHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBkaXYuYXBw
ZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7CgogICAgICAgIC8vIE1ha2Ug
c3VyZSBubyBjb21tZW50cyBhcmUgZm91bmQKICAgICAgICBpZiAoIGRpdi5nZXRFbGVtZW50c0J5
VGFnTmFtZSgiKiIpLmxlbmd0aCA+IDAgKSB7CiAgICAgICAgICAgICAgICBFeHByLmZpbmQuVEFH
ID0gZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIG1hdGNoWzFdICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gPT09ICIqIiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gW107CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgcmVzdWx0c1tpXTsgaSsrICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRzW2ldLm5vZGVUeXBl
ID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0bXAucHVzaCggcmVzdWx0c1tpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgICAgICAg
ICAgICB9OwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFuIGF0dHJpYnV0
ZSByZXR1cm5zIG5vcm1hbGl6ZWQgaHJlZiBhdHRyaWJ1dGVzCiAgICAgICAgZGl2LmlubmVySFRN
TCA9ICI8YSBocmVmPScjJz48L2E+IjsKCiAgICAgICAgaWYgKCBkaXYuZmlyc3RDaGlsZCAmJiB0
eXBlb2YgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJgogICAg
ICAgICAgICAgICAgICAgICAgICBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSAh
PT0gIiMiICkgewoKICAgICAgICAgICAgICAgIEV4cHIuYXR0ckhhbmRsZS5ocmVmID0gZnVuY3Rp
b24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSggImhyZWYiLCAyICk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAg
Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICBkaXYgPSBudWxsOwp9KSgpOwoKaWYgKCBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgewogICAgICAgIChmdW5jdGlvbigpewogICAgICAg
ICAgICAgICAgdmFyIG9sZFNpenpsZSA9IFNpenpsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlkID0gIl9fc2l6emxlX18iOwoKICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAi
PHAgY2xhc3M9J1RFU1QnPjwvcD4iOwoKICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBjYW4ndCBo
YW5kbGUgdXBwZXJjYXNlIG9yIHVuaWNvZGUgY2hhcmFjdGVycyB3aGVuCiAgICAgICAgICAgICAg
ICAvLyBpbiBxdWlya3MgbW9kZS4KICAgICAgICAgICAgICAgIGlmICggZGl2LnF1ZXJ5U2VsZWN0
b3JBbGwgJiYgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIi5URVNUIikubGVuZ3RoID09PSAwICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
CiAgICAgICAgICAgICAgICBTaXp6bGUgPSBmdW5jdGlvbiggcXVlcnksIGNvbnRleHQsIGV4dHJh
LCBzZWVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBk
b2N1bWVudDsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlIHF1ZXJ5U2VsZWN0
b3JBbGwgb24gbm9uLVhNTCBkb2N1bWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gKElE
IHNlbGVjdG9ycyBkb24ndCB3b3JrIGluIG5vbi1IVE1MIGRvY3VtZW50cykKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhc2VlZCAmJiAhU2l6emxlLmlzWE1MKGNvbnRleHQpICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBmaW5kIGEgc2VsZWN0b3Ig
dG8gc3BlZWQgdXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSAv
XihcdyskKXxeXC4oW1x3XC1dKyQpfF4jKFtcd1wtXSskKS8uZXhlYyggcXVlcnkgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hdGNoICYmIChjb250ZXh0Lm5vZGVUeXBlID09PSAxIHx8IGNvbnRleHQubm9kZVR5
cGUgPT09IDkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3BlZWQtdXA6IFNpenpsZSgiVEFHIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbWF0Y2hbMV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoIHF1ZXJ5ICksIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVk
LXVwOiBTaXp6bGUoIi5DTEFTUyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSAmJiBFeHByLmZpbmQuQ0xBU1MgJiYgY29udGV4dC5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUoIG1hdGNoWzJdICksIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gOSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoImJvZHkiKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJvZHkgZWxlbWVudCBvbmx5IGV4aXN0
cyBvbmNlLCBvcHRpbWl6ZSBmaW5kaW5nIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHF1ZXJ5ID09PSAiYm9keSIgJiYgY29udGV4dC5ib2R5ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFy
cmF5KCBbIGNvbnRleHQuYm9keSBdLCBleHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIiNJRCIpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaCAmJiBtYXRjaFszXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBjb250
ZXh0LmdldEVsZW1lbnRCeUlkKCBtYXRjaFszXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVu
IEJsYWNrYmVycnkgNC42IHJldHVybnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVu
dCAjNjk2MwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJ
RSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVt
LmlkID09PSBtYXRjaFszXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoIFsgZWxlbSBdLCBl
eHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBbXSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBj
b250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLCBleHRyYSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChxc2FFcnJvcikge30KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcVNBIHdvcmtzIHN0cmFuZ2VseSBvbiBFbGVtZW50LXJv
b3RlZCBxdWVyaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHdv
cmsgYXJvdW5kIHRoaXMgYnkgc3BlY2lmeWluZyBhbiBleHRyYSBJRCBvbiB0aGUgcm9vdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3b3JraW5nIHVwIGZyb20gdGhlcmUg
KFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUgdGVjaG5pcXVlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVjdCBlbGVtZW50
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnRleHQubm9k
ZVR5cGUgPT09IDEgJiYgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGRDb250
ZXh0ID0gY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoICJpZCIgKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gb2xkIHx8IGlkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXJlbnQgPSBjb250
ZXh0LnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgPSAvXlxzKlsrfl0vLnRlc3QoIHF1ZXJ5
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb2xkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnNldEF0dHJpYnV0ZSggImlkIiwgbmlkICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuaWQgPSBuaWQucmVwbGFjZSggLycvZywgIlxcJCYiICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJlbGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgJiYgaGFzUGFyZW50
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJl
bGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgfHwgaGFzUGFyZW50ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXko
IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggIltpZD0nIiArIG5pZCArICInXSAiICsgcXVlcnkg
KSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gocHNl
dWRvRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmlu
YWxseSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIW9sZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbGRDb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggImlkIiApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG9sZFNpenpsZShxdWVyeSwgY29udGV4dCwgZXh0cmEsIHNlZWQp
OwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgcHJvcCBpbiBv
bGRTaXp6bGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZVsgcHJvcCBdID0gb2xk
U2l6emxlWyBwcm9wIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gcmVs
ZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICAgICAgICAgIGRpdiA9IG51bGw7CiAgICAgICAgfSko
KTsKfQoKKGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQsCiAgICAgICAgICAgICAgICBtYXRjaGVzID0gaHRtbC5tYXRjaGVzU2VsZWN0b3IgfHwg
aHRtbC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgaHRtbC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwg
aHRtbC5tc01hdGNoZXNTZWxlY3RvcjsKCiAgICAgICAgaWYgKCBtYXRjaGVzICkgewogICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1Nl
bGVjdG9yCiAgICAgICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5IGZh
aWxzIHRoaXMpCiAgICAgICAgICAgICAgICB2YXIgZGlzY29ubmVjdGVkTWF0Y2ggPSAhbWF0Y2hl
cy5jYWxsKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLCAiZGl2IiApLAogICAgICAg
ICAgICAgICAgICAgICAgICBwc2V1ZG9Xb3JrcyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIHRy
eSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBl
eGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Vja28gZG9lcyBub3QgZXJyb3Is
IHJldHVybnMgZmFsc2UgaW5zdGVhZAogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmNh
bGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgIlt0ZXN0IT0nJ106c2l6emxlIiApOwogICAg
ICAgIAogICAgICAgICAgICAgICAgfSBjYXRjaCggcHNldWRvRXJyb3IgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHBzZXVkb1dvcmtzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICBTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIG5vZGUsIGV4cHIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBz
ZWxlY3RvcnMgYXJlIHF1b3RlZAogICAgICAgICAgICAgICAgICAgICAgICBleHByID0gZXhwci5y
ZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCAiPSckMSddIik7CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFTaXp6bGUuaXNYTUwoIG5vZGUgKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcHNldWRvV29ya3MgfHwgIUV4cHIubWF0Y2guUFNFVURPLnRlc3QoIGV4cHIg
KSAmJiAhLyE9Ly50ZXN0KCBleHByICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIG5vZGUsIGV4cHIgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIDkn
cyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgfHwg
IWRpc2Nvbm5lY3RlZE1hdGNoIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9k
ZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUg
OSwgc28gY2hlY2sgZm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZG9jdW1lbnQgJiYgbm9kZS5kb2N1bWVu
dC5ub2RlVHlwZSAhPT0gMTEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30K
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFNpenpsZShleHByLCBudWxsLCBudWxsLCBbbm9kZV0pLmxlbmd0aCA+IDA7CiAgICAgICAgICAg
ICAgICB9OwogICAgICAgIH0KfSkoKTsKCihmdW5jdGlvbigpewogICAgICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCiAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8
ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7CgogICAg
ICAgIC8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xhc3NuYW1lIChpbiA5LjYpCiAgICAg
ICAgLy8gQWxzbywgbWFrZSBzdXJlIHRoYXQgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBhY3R1YWxs
eSBleGlzdHMKICAgICAgICBpZiAoICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBkaXYu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMCApIHsKICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIFNhZmFyaSBjYWNoZXMgY2xhc3MgYXR0
cmlidXRlcywgZG9lc24ndCBjYXRjaCBjaGFuZ2VzIChpbiAzLjIpCiAgICAgICAgZGl2Lmxhc3RD
aGlsZC5jbGFzc05hbWUgPSAiZSI7CgogICAgICAgIGlmICggZGl2LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoImUiKS5sZW5ndGggPT09IDEgKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgfQogICAgICAgIAogICAgICAgIEV4cHIub3JkZXIuc3BsaWNlKDEsIDAsICJDTEFTUyIpOwog
ICAgICAgIEV4cHIuZmluZC5DTEFTUyA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCwgaXNYTUwg
KSB7CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUgIT09ICJ1bmRlZmluZWQiICYmICFpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShtYXRjaFsxXSk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUK
ICAgICAgICBkaXYgPSBudWxsOwp9KSgpOwoKZnVuY3Rpb24gZGlyTm9kZUNoZWNrKCBkaXIsIGN1
ciwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICkgewogICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgIHZhciBlbGVtID0gY2hlY2tTZXRbaV07CgogICAgICAgICAgICAgICAgaWYgKCBlbGVt
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBmYWxzZTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtW2Rpcl07CgogICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtLnNpemNhY2hlID09PSBkb25lTmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZVR5cGUgPT09IDEgJiYgIWlzWE1MICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gY3VyICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2ggPSBlbGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVtkaXJdOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IG1h
dGNoOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKZnVuY3Rpb24gZGlyQ2hlY2soIGRp
ciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKSB7CiAgICAgICAg
Zm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAg
ICAgICAgICAgICAgdmFyIGVsZW0gPSBjaGVja1NldFtpXTsKCiAgICAgICAgICAgICAgICBpZiAo
IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1b
ZGlyXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc2l6Y2FjaGUgPT09IGRvbmVOYW1lICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjaGVja1Nl
dFtlbGVtLnNpenNldF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzWE1MICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpemNhY2hlID0gZG9uZU5h
bWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0u
c2l6c2V0ID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjdXIgIT09
ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0gPT09IGN1ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBTaXp6bGUuZmlsdGVyKCBjdXIsIFtl
bGVtXSApLmxlbmd0aCA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoID0gZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVtkaXJdOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IG1hdGNoOwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0KfQoKaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
Y29udGFpbnMgKSB7CiAgICAgICAgU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gYSAhPT0gYiAmJiAoYS5jb250YWlucyA/IGEuY29udGFp
bnMoYikgOiB0cnVlKTsKICAgICAgICB9OwoKfSBlbHNlIGlmICggZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkgewogICAgICAgIFNpenpsZS5jb250YWlu
cyA9IGZ1bmN0aW9uKCBhLCBiICkgewogICAgICAgICAgICAgICAgcmV0dXJuICEhKGEuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24oYikgJiAxNik7CiAgICAgICAgfTsKCn0gZWxzZSB7CiAgICAgICAg
U2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgfTsKfQoKU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAg
ICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vz
bid0IHlldCBleGlzdAogICAgICAgIC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAt
ICM0ODMzKSAKICAgICAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gKGVsZW0gPyBlbGVtLm93bmVy
RG9jdW1lbnQgfHwgZWxlbSA6IDApLmRvY3VtZW50RWxlbWVudDsKCiAgICAgICAgcmV0dXJuIGRv
Y3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gIkhUTUwiIDogZmFs
c2U7Cn07Cgp2YXIgcG9zUHJvY2VzcyA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsK
ICAgICAgICB2YXIgbWF0Y2gsCiAgICAgICAgICAgICAgICB0bXBTZXQgPSBbXSwKICAgICAgICAg
ICAgICAgIGxhdGVyID0gIiIsCiAgICAgICAgICAgICAgICByb290ID0gY29udGV4dC5ub2RlVHlw
ZSA/IFtjb250ZXh0XSA6IGNvbnRleHQ7CgogICAgICAgIC8vIFBvc2l0aW9uIHNlbGVjdG9ycyBt
dXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpbHRlcgogICAgICAgIC8vIEFuZCBzbyBtdXN0IDpub3Qo
cG9zaXRpb25hbCkgc28gd2UgbW92ZSBhbGwgUFNFVURPcyB0byB0aGUgZW5kCiAgICAgICAgd2hp
bGUgKCAobWF0Y2ggPSBFeHByLm1hdGNoLlBTRVVETy5leGVjKCBzZWxlY3RvciApKSApIHsKICAg
ICAgICAgICAgICAgIGxhdGVyICs9IG1hdGNoWzBdOwogICAgICAgICAgICAgICAgc2VsZWN0b3Ig
PSBzZWxlY3Rvci5yZXBsYWNlKCBFeHByLm1hdGNoLlBTRVVETywgIiIgKTsKICAgICAgICB9Cgog
ICAgICAgIHNlbGVjdG9yID0gRXhwci5yZWxhdGl2ZVtzZWxlY3Rvcl0gPyBzZWxlY3RvciArICIq
IiA6IHNlbGVjdG9yOwoKICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSByb290Lmxlbmd0aDsg
aSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgIFNpenpsZSggc2VsZWN0b3IsIHJvb3RbaV0s
IHRtcFNldCApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFNpenpsZS5maWx0ZXIoIGxhdGVy
LCB0bXBTZXQgKTsKfTsKCi8vIEVYUE9TRQpqUXVlcnkuZmluZCA9IFNpenpsZTsKalF1ZXJ5LmV4
cHIgPSBTaXp6bGUuc2VsZWN0b3JzOwpqUXVlcnkuZXhwclsiOiJdID0galF1ZXJ5LmV4cHIuZmls
dGVyczsKalF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0OwpqUXVlcnkudGV4dCA9IFNp
enpsZS5nZXRUZXh0OwpqUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7CmpRdWVyeS5jb250
YWlucyA9IFNpenpsZS5jb250YWluczsKCgp9KSgpOwoKCnZhciBydW50aWwgPSAvVW50aWwkLywK
ICAgICAgICBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldlVudGlsfHByZXZBbGwpLywK
ICAgICAgICAvLyBOb3RlOiBUaGlzIFJlZ0V4cCBzaG91bGQgYmUgaW1wcm92ZWQsIG9yIGxpa2Vs
eSBwdWxsZWQgZnJvbSBTaXp6bGUKICAgICAgICBybXVsdGlzZWxlY3RvciA9IC8sLywKICAgICAg
ICBpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC8sCiAgICAgICAgc2xpY2UgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UsCiAgICAgICAgUE9TID0galF1ZXJ5LmV4cHIubWF0Y2guUE9TLAogICAgICAg
IC8vIG1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0
aW5nIGZyb20gYSB1bmlxdWUgc2V0CiAgICAgICAgZ3VhcmFudGVlZFVuaXF1ZSA9IHsKICAgICAg
ICAgICAgICAgIGNoaWxkcmVuOiB0cnVlLAogICAgICAgICAgICAgICAgY29udGVudHM6IHRydWUs
CiAgICAgICAgICAgICAgICBuZXh0OiB0cnVlLAogICAgICAgICAgICAgICAgcHJldjogdHJ1ZQog
ICAgICAgIH07CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBmaW5kOiBmdW5jdGlvbiggc2Vs
ZWN0b3IgKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGksIGw7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09
ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBzZWxl
Y3RvciApLmZpbHRlcihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBpID0gMCwgbCA9IHNlbGYubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZb
IGkgXSwgdGhpcyApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciByZXQgPSB0
aGlzLnB1c2hTdGFjayggIiIsICJmaW5kIiwgc2VsZWN0b3IgKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoLCBuLCByOwoKICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9
IHJldC5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWxlY3Rv
ciwgdGhpc1tpXSwgcmV0ICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGkgPiAwICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBy
ZXN1bHRzIGFyZSB1bmlxdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBu
ID0gbGVuZ3RoOyBuIDwgcmV0Lmxlbmd0aDsgbisrICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggciA9IDA7IHIgPCBsZW5ndGg7IHIrKyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXRbcl0gPT09
IHJldFtuXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXQuc3BsaWNlKG4tLSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKICAg
ICAgICAgICAgICAgIHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQgKTsKICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGFyZ2V0cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMs
IHRhcmdldHNbaV0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAg
bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5w
dXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciwgZmFsc2UpLCAibm90Iiwgc2VsZWN0b3Ip
OwogICAgICAgIH0sCgogICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3Is
IHRydWUpLCAiZmlsdGVyIiwgc2VsZWN0b3IgKTsKICAgICAgICB9LAoKICAgICAgICBpczogZnVu
Y3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAgICAgICAgcmV0dXJuICEhc2VsZWN0b3IgJiYg
KCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5sZW5ndGggPiAwIDoKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5maWx0ZXIoIHNlbGVjdG9yICkubGVuZ3RoID4gMCApOwogICAgICAg
IH0sCgogICAgICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7CiAg
ICAgICAgICAgICAgICB2YXIgcmV0ID0gW10sIGksIGwsIGN1ciA9IHRoaXNbMF07CiAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgIC8vIEFycmF5CiAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5pc0FycmF5KCBzZWxlY3RvcnMgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG1hdGNoLCBzZWxlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVz
ID0ge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAxOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBjdXIgJiYgc2VsZWN0b3JzLmxlbmd0aCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNlbGVjdG9ycy5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFtYXRjaGVzWyBzZWxlY3RvciBdICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzWyBzZWxlY3RvciBdID0gUE9T
LnRlc3QoIHNlbGVjdG9yICkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgfHwgdGhpcy5jb250
ZXh0ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdG9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBj
b250ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
c2VsZWN0b3IgaW4gbWF0Y2hlcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaGVzWyBzZWxlY3RvciBdOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaC5qcXVlcnkgPyBt
YXRjaC5pbmRleCggY3VyICkgPiAtMSA6IGpRdWVyeSggY3VyICkuaXMoIG1hdGNoICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
LnB1c2goeyBzZWxlY3Rvcjogc2VsZWN0b3IsIGVsZW06IGN1ciwgbGV2ZWw6IGxldmVsIH0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCsrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTdHJp
bmcKICAgICAgICAgICAgICAgIHZhciBwb3MgPSBQT1MudGVzdCggc2VsZWN0b3JzICkgfHwgdHlw
ZW9mIHNlbGVjdG9ycyAhPT0gInN0cmluZyIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwOwoKICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
LCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGN1ciA9IHRoaXNbaV07CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBvcyA/IHBvcy5pbmRleChjdXIp
ID4gLTEgOiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3RvcnMpICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGN1ciApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWN1ciB8fCAhY3VyLm93bmVyRG9jdW1lbnQgfHwgY3Vy
ID09PSBjb250ZXh0IHx8IGN1ci5ub2RlVHlwZSA9PT0gMTEgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHJldCA9IHJldC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQ7Cgog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsICJjbG9zZXN0Iiwgc2Vs
ZWN0b3JzICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBv
ZiBhbiBlbGVtZW50IHdpdGhpbgogICAgICAgIC8vIHRoZSBtYXRjaGVkIHNldCBvZiBlbGVtZW50
cwogICAgICAgIGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHsKCiAgICAgICAgICAgICAgICAvLyBO
byBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudAogICAgICAgICAgICAgICAgaWYgKCAh
ZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggdGhpc1swXSAmJiB0aGlz
WzBdLnBhcmVudE5vZGUgKSA/IHRoaXMucHJldkFsbCgpLmxlbmd0aCA6IC0xOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIGluZGV4IGluIHNlbGVjdG9yCiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWzBdLCBqUXVlcnkoIGVsZW0gKSApOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24g
b2YgdGhlIGRlc2lyZWQgZWxlbWVudAogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFy
cmF5KAogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBv
YmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5qcXVlcnkgPyBlbGVtWzBdIDogZWxlbSwgdGhpcyApOwogICAgICAgIH0sCgogICAgICAg
IGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgdmFy
IHNldCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSA6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgJiYgc2VsZWN0b3Iu
bm9kZVR5cGUgPyBbIHNlbGVjdG9yIF0gOiBzZWxlY3RvciApLAogICAgICAgICAgICAgICAgICAg
ICAgICBhbGwgPSBqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIHNldCApOwoKICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggaXNEaXNjb25uZWN0ZWQoIHNldFswXSApIHx8IGlz
RGlzY29ubmVjdGVkKCBhbGxbMF0gKSA/CiAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA6CiAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS51bmlxdWUoIGFsbCApICk7CiAgICAgICAgfSwK
CiAgICAgICAgYW5kU2VsZjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5hZGQoIHRoaXMucHJldk9iamVjdCApOwogICAgICAgIH0KfSk7CgovLyBBIHBhaW5mdWxseSBz
aW1wbGUgY2hlY2sgdG8gc2VlIGlmIGFuIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkCi8vIGZyb20g
YSBkb2N1bWVudCAoc2hvdWxkIGJlIGltcHJvdmVkLCB3aGVyZSBmZWFzaWJsZSkuCmZ1bmN0aW9u
IGlzRGlzY29ubmVjdGVkKCBub2RlICkgewogICAgICAgIHJldHVybiAhbm9kZSB8fCAhbm9kZS5w
YXJlbnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMTE7Cn0KCmpRdWVyeS5l
YWNoKHsKICAgICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAg
dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJl
bnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7CiAgICAgICAgfSwK
ICAgICAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIgKTsKICAgICAgICB9LAogICAgICAgIHBh
cmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewogICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50aWwgKTsKICAgICAgICB9
LAogICAgICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IGpRdWVyeS5udGgoIGVsZW0sIDIsICJuZXh0U2libGluZyIgKTsKICAgICAgICB9LAogICAgICAg
IHByZXY6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5u
dGgoIGVsZW0sIDIsICJwcmV2aW91c1NpYmxpbmciICk7CiAgICAgICAgfSwKICAgICAgICBuZXh0
QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGly
KCBlbGVtLCAibmV4dFNpYmxpbmciICk7CiAgICAgICAgfSwKICAgICAgICBwcmV2QWxsOiBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAi
cHJldmlvdXNTaWJsaW5nIiApOwogICAgICAgIH0sCiAgICAgICAgbmV4dFVudGlsOiBmdW5jdGlv
biggZWxlbSwgaSwgdW50aWwgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpcigg
ZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwgKTsKICAgICAgICB9LAogICAgICAgIHByZXZVbnRp
bDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS5kaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOwogICAgICAgIH0sCiAg
ICAgICAgc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IGpRdWVyeS5zaWJsaW5nKCBlbGVtLnBhcmVudE5vZGUuZmlyc3RDaGlsZCwgZWxlbSApOwogICAg
ICAgIH0sCiAgICAgICAgY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLmZpcnN0Q2hpbGQgKTsKICAgICAgICB9LAog
ICAgICAgIGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpZnJhbWUiICkgPwogICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQg
OgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFrZUFycmF5KCBlbGVtLmNoaWxkTm9k
ZXMgKTsKICAgICAgICB9Cn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKICAgICAgICBqUXVlcnku
Zm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAg
ICB2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICksCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSB2YXJpYWJsZSAnYXJncycgd2FzIGludHJvZHVjZWQgaW4KICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvY29t
bWl0LzUyYTAyMzgKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gd29yayBhcm91bmQgYSBi
dWcgaW4gQ2hyb21lIDEwIChEZXYpIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRoZSBidWcg
aXMgZml4ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEwNTAKICAgICAgICAgICAgICAgICAgICAgICAgYXJn
cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTsKCiAgICAgICAgICAgICAgICBpZiAoICFydW50aWwu
dGVzdCggbmFtZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHVudGls
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggc2VsZWN0b3IgJiYgdHlw
ZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHJldCApOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHJldCA9IHRoaXMubGVuZ3RoID4gMSAmJiAhZ3VhcmFudGVlZFVuaXF1ZVsg
bmFtZSBdID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQ7CgogICAgICAgICAgICAgICAgaWYg
KCAodGhpcy5sZW5ndGggPiAxIHx8IHJtdWx0aXNlbGVjdG9yLnRlc3QoIHNlbGVjdG9yICkpICYm
IHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCA9IHJldC5yZXZlcnNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5hbWUsIGFyZ3Muam9pbigiLCIpICk7CiAgICAgICAg
fTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBleHByLCBl
bGVtcywgbm90ICkgewogICAgICAgICAgICAgICAgaWYgKCBub3QgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxID8KICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGVsZW1zWzBdLCBleHByKSA/
IFsgZWxlbXNbMF0gXSA6IFtdIDoKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQu
bWF0Y2hlcyhleHByLCBlbGVtcyk7CiAgICAgICAgfSwKCiAgICAgICAgZGlyOiBmdW5jdGlvbigg
ZWxlbSwgZGlyLCB1bnRpbCApIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaGVkID0gW10sCiAg
ICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGVsZW1bIGRpciBdOwoKICAgICAgICAgICAgICAg
IHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gOSAmJiAodW50aWwgPT09IHVuZGVmaW5l
ZCB8fCBjdXIubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeSggY3VyICkuaXMoIHVudGlsICkpICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2goIGN1ciApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1cltkaXJd
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQ7CiAgICAg
ICAgfSwKCiAgICAgICAgbnRoOiBmdW5jdGlvbiggY3VyLCByZXN1bHQsIGRpciwgZWxlbSApIHsK
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCAxOwogICAgICAgICAgICAgICAgdmFy
IG51bSA9IDA7CgogICAgICAgICAgICAgICAgZm9yICggOyBjdXI7IGN1ciA9IGN1cltkaXJdICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiArK251
bSA9PT0gcmVzdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cjsKICAgICAgICB9LAoKICAgICAgICBzaWJsaW5nOiBmdW5jdGlvbiggbiwg
ZWxlbSApIHsKICAgICAgICAgICAgICAgIHZhciByID0gW107CgogICAgICAgICAgICAgICAgZm9y
ICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgci5wdXNoKCBuICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcjsKICAgICAgICB9Cn0pOwoKLy8g
SW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3QK
ZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgewoKICAgICAgICAv
LyBDYW4ndCBwYXNzIG51bGwgb3IgdW5kZWZpbmVkIHRvIGluZGV4T2YgaW4gRmlyZWZveCA0CiAg
ICAgICAgLy8gU2V0IHRvIDAgdG8gc2tpcCBzdHJpbmcgY2hlY2sKICAgICAgICBxdWFsaWZpZXIg
PSBxdWFsaWZpZXIgfHwgMDsKCiAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlm
aWVyICkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1
bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0VmFsID0g
ISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0VmFsID09PSBrZWVwOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgIH0g
ZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoZWxlbSA9PT0gcXVhbGlmaWVyKSA9PT0ga2VlcDsKICAgICAgICAg
ICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSAic3Ry
aW5nIiApIHsKICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGpRdWVyeS5ncmVwKGVsZW1l
bnRzLCBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW0ubm9kZVR5cGUgPT09IDE7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBp
ZiAoIGlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIsIGZpbHRlcmVkLCAha2VlcCk7CiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZXIgPSBq
UXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGZpbHRlcmVkICk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfQoKICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBl
bGVtLCBpICkgewogICAgICAgICAgICAgICAgcmV0dXJuIChqUXVlcnkuaW5BcnJheSggZWxlbSwg
cXVhbGlmaWVyICkgPj0gMCkgPT09IGtlZXA7CiAgICAgICAgfSk7Cn0KCgoKCnZhciByaW5saW5l
alF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywKICAgICAgICBybGVhZGluZ1do
aXRlc3BhY2UgPSAvXlxzKy8sCiAgICAgICAgcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxl
bWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZywK
ICAgICAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAogICAgICAgIHJ0Ym9keSA9IC88dGJvZHkv
aSwKICAgICAgICByaHRtbCA9IC88fCYjP1x3KzsvLAogICAgICAgIHJub2NhY2hlID0gLzwoPzpz
Y3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSwKICAgICAgICAvLyBjaGVja2VkPSJj
aGVja2VkIiBvciBjaGVja2VkCiAgICAgICAgcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18
PVxzKi5jaGVja2VkLikvaSwKICAgICAgICByc2NyaXB0VHlwZSA9IC9cLyhqYXZhfGVjbWEpc2Ny
aXB0L2ksCiAgICAgICAgcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8s
CiAgICAgICAgd3JhcE1hcCA9IHsKICAgICAgICAgICAgICAgIG9wdGlvbjogWyAxLCAiPHNlbGVj
dCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iIF0sCiAgICAgICAgICAgICAgICBs
ZWdlbmQ6IFsgMSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCiAgICAgICAgICAgICAg
ICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKICAgICAgICAgICAgICAgIHRy
OiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAogICAgICAgICAg
ICAgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJs
ZT4iIF0sCiAgICAgICAgICAgICAgICBjb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48
Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCiAgICAgICAgICAgICAgICBhcmVh
OiBbIDEsICI8bWFwPiIsICI8L21hcD4iIF0sCiAgICAgICAgICAgICAgICBfZGVmYXVsdDogWyAw
LCAiIiwgIiIgXQogICAgICAgIH07Cgp3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247
CndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBN
YXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7CndyYXBNYXAudGggPSB3cmFwTWFwLnRkOwoKLy8g
SUUgY2FuJ3Qgc2VyaWFsaXplIDxsaW5rPiBhbmQgPHNjcmlwdD4gdGFncyBub3JtYWxseQppZiAo
ICFqUXVlcnkuc3VwcG9ydC5odG1sU2VyaWFsaXplICkgewogICAgICAgIHdyYXBNYXAuX2RlZmF1
bHQgPSBbIDEsICJkaXY8ZGl2PiIsICI8L2Rpdj4iIF07Cn0KCmpRdWVyeS5mbi5leHRlbmQoewog
ICAgICAgIHRleHQ6IGZ1bmN0aW9uKCB0ZXh0ICkgewogICAgICAgICAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbih0ZXh0KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi50ZXh0KCB0ZXh0LmNhbGwodGhpcywgaSwgc2VsZi50ZXh0KCkpICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIHRleHQgIT09ICJvYmplY3QiICYmIHRleHQgIT09IHVuZGVmaW5lZCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHkoKS5hcHBlbmQoICh0aGlzWzBdICYm
IHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoIHRleHQg
KSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkudGV4
dCggdGhpcyApOwogICAgICAgIH0sCgogICAgICAgIHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkg
ewogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykud3JhcEFsbCggaHRtbC5jYWxs
KHRoaXMsIGkpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbMF0ub3duZXJEb2N1bWVu
dCApLmVxKDApLmNsb25lKHRydWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlz
WzBdLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcC5p
bnNlcnRCZWZvcmUoIHRoaXNbMF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcC5tYXAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCAmJiBlbGVtLmZpcnN0Q2hpbGQubm9kZVR5
cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ID0gZWxlbS5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0pLmFwcGVuZCggdGhpcyApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHdyYXBJbm5lcjogZnVuY3Rp
b24oIGh0bWwgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1s
ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
aSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS53cmFwSW5u
ZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZW50cy5sZW5ndGggKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMud3JhcEFsbCggaHRtbCApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmFwcGVuZCggaHRtbCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICB3cmFwOiBmdW5jdGlvbiggaHRtbCAp
IHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWwgKTsKICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIHVud3JhcDogZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJib2R5IiApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlcGxhY2VX
aXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSkuZW5kKCk7CiAgICAgICAgfSwKCiAgICAgICAgYXBwZW5kOiBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwg
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ub2Rl
VHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVu
ZENoaWxkKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0pOwogICAgICAgIH0sCgogICAgICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxl
bSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVt
LCB0aGlzLmZpcnN0Q2hpbGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgYmVmb3JlOiBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFy
ZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2V0ID0galF1ZXJ5KGFyZ3VtZW50c1swXSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHNldC5wdXNoLmFwcGx5KCBzZXQsIHRoaXMudG9BcnJheSgp
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggc2V0LCAi
YmVmb3JlIiwgYXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAg
ICAgYWZ0ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICYmIHRo
aXNbMF0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwg
dGhpcy5uZXh0U2libGluZyApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBzZXQgPSB0aGlzLnB1c2hTdGFjayggdGhpcywgImFmdGVyIiwgYXJndW1lbnRz
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wdXNoLmFwcGx5KCBzZXQsIGpRdWVyeShh
cmd1bWVudHNbMF0pLnRvQXJyYXkoKSApOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2V0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIGtlZXBEYXRhIGlz
IGZvciBpbnRlcm5hbCB1c2Ugb25seS0tZG8gbm90IGRvY3VtZW50CiAgICAgICAgcmVtb3ZlOiBm
dW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhICkgewogICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBlbGVtOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3Is
IFsgZWxlbSBdICkubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCIqIikgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50
Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGVtcHR5OiBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSB0aGlz
W2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBl
bGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIp
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggZWxlbS5maXJzdENoaWxkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgfSwKCiAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFu
ZEV2ZW50cyApIHsKICAgICAgICAgICAgICAgIGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRz
ID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7CiAgICAgICAgICAgICAgICBkZWVwRGF0
YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDog
ZGVlcERhdGFBbmRFdmVudHM7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRo
aXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CiAgICAgICAgICAgICAgICB9
KTsKICAgICAgICB9LAoKICAgICAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7CiAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzWzBdICYmIHRoaXNbMF0ubm9kZVR5cGUgPT09IDEgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXNbMF0uaW5uZXJIVE1MLnJlcGxhY2UocmlubGluZWpR
dWVyeSwgIiIpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsOwoKICAgICAg
ICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBp
bm5lckhUTUwKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0
cmluZyIgJiYgIXJub2NhY2hlLnRlc3QoIHZhbHVlICkgJiYKICAgICAgICAgICAgICAgICAgICAg
ICAgKGpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlIHx8ICFybGVhZGluZ1doaXRlc3Bh
Y2UudGVzdCggdmFsdWUgKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIXdyYXBNYXBbIChy
dGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7
CgogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocnhodG1sVGFn
LCAiPCQxPjwvJDI+Iik7CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBp
IDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbaV0ubm9kZVR5cGUgPT09IDEg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5jbGVhbkRhdGEoIHRoaXNbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLmlubmVySFRN
TCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNr
IG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHZhbHVlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWFjaChm
dW5jdGlvbihpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpR
dWVyeSggdGhpcyApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmh0bWwo
IHZhbHVlLmNhbGwodGhpcywgaSwgc2VsZi5odG1sKCkpICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgcmVwbGFjZVdpdGg6IGZ1
bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBd
LnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHRoZSBlbGVtZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBET00gYmVmb3JlIHRoZXkgYXJlIGlu
c2VydGVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhlbHAgZml4IHJlcGxh
Y2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwgb2xkID0g
c2VsZi5odG1sKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnJlcGxhY2VXaXRoKCB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBvbGQgKSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSAhPT0gInN0cmluZyIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkoIHZhbHVlICkuZGV0YWNo
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmUoKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBuZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5KG5leHQpLmJlZm9yZSggdmFsdWUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5KHBhcmVudCkuYXBwZW5kKCB2YWx1ZSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5n
dGggPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaFN0YWNrKCBqUXVl
cnkoalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKSwgInJlcGxhY2VX
aXRoIiwgdmFsdWUgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpczsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBkZXRhY2g6IGZ1bmN0aW9uKCBzZWxl
Y3RvciApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRy
dWUgKTsKICAgICAgICB9LAoKICAgICAgICBkb21NYW5pcDogZnVuY3Rpb24oIGFyZ3MsIHRhYmxl
LCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHZhciByZXN1bHRzLCBmaXJzdCwgZnJhZ21l
bnQsIHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdLAogICAg
ICAgICAgICAgICAgICAgICAgICBzY3JpcHRzID0gW107CgogICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0
CiAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lICYmIGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiByY2hlY2tl
ZC50ZXN0KCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0
aGlzKS5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxiYWNrLCB0cnVlICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWzBdID0gdmFsdWUuY2FsbCh0aGlzLCBpLCB0YWJsZSA/IHNlbGYuaHRtbCgpIDogdW5k
ZWZpbmVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRvbU1hbmlwKCBh
cmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnQgPSB2YWx1ZSAmJiB2YWx1ZS5wYXJlbnROb2RlOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gYSBmcmFnbWVudCwganVzdCB1c2UgdGhh
dCBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGEgbmV3IG9uZQogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5zdXBwb3J0LnBhcmVudE5vZGUgJiYgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlw
ZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSB0aGlzLmxlbmd0aCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0geyBmcmFnbWVudDogcGFy
ZW50IH07CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggYXJncywgdGhp
cywgc2NyaXB0cyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICBmcmFnbWVudCA9IHJlc3VsdHMuZnJhZ21lbnQ7CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZnJhZ21lbnQgPSBmcmFnbWVudC5maXJzdENo
aWxkOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IHRhYmxlICYmIGpRdWVyeS5ub2RlTmFt
ZSggZmlyc3QsICJ0ciIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGgsIGxhc3RJbmRleCA9IGwgLSAxOyBpIDwgbDsgaSsr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2Fs
bCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUg
PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJvb3QodGhpc1tpXSwgZmlyc3QpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgbGVhayBt
ZW1vcnkgYnkgaW5hZHZlcnRlbnRseSBkaXNjYXJkaW5nCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBmcmFnbWVudCAod2hpY2gg
bWlnaHQgaGF2ZSBhdHRhY2hlZCBkYXRhKSBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIGl0OyBpbiBhZGRpdGlvbiwgdXNl
IHRoZSBvcmlnaW5hbCBmcmFnbWVudCBvYmplY3QgZm9yIHRoZSBsYXN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0ZW0gaW5zdGVhZCBvZiBmaXJz
dCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAgYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjZXJ0YWluIHNp
dHVhdGlvbnMgKEJ1ZyAjODA3MCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZyYWdtZW50cyBmcm9tIHRoZSBmcmFnbWVudCBjYWNoZSBtdXN0IGFs
d2F5cyBiZSBjbG9uZWQgYW5kIG5ldmVyIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaW4gcGxhY2UuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2FjaGVhYmxlIHx8IChsID4gMSAmJiBp
IDwgbGFzdEluZGV4KSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmNsb25lKCBmcmFnbWVudCwgdHJ1ZSwgdHJ1ZSApIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFn
bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggc2NyaXB0cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHNjcmlwdHMsIGV2YWxTY3JpcHQgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgIH0KfSk7CgpmdW5jdGlvbiByb290KCBlbGVtLCBjdXIgKSB7
CiAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAidGFibGUiKSA/CiAgICAgICAg
ICAgICAgICAoZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXSB8fAogICAgICAg
ICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgidGJvZHkiKSkpIDoKICAgICAgICAgICAgICAgIGVsZW07Cn0KCmZ1bmN0aW9uIGNsb25lQ29w
eUV2ZW50KCBzcmMsIGRlc3QgKSB7CgogICAgICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSB8
fCAhalF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgIH0KCiAgICAgICAgdmFyIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCiAgICAgICAg
ICAgICAgICBvbGREYXRhID0galF1ZXJ5LmRhdGEoIHNyYyApLAogICAgICAgICAgICAgICAgY3Vy
RGF0YSA9IGpRdWVyeS5kYXRhKCBkZXN0LCBvbGREYXRhICk7CgogICAgICAgIC8vIFN3aXRjaCB0
byB1c2UgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0LCBpZiBpdCBleGlzdHMsIGZvciB0aGUgbmV4
dAogICAgICAgIC8vIHN0YWdlIG9mIGRhdGEgY29weWluZwogICAgICAgIGlmICggKG9sZERhdGEg
PSBvbGREYXRhWyBpbnRlcm5hbEtleSBdKSApIHsKICAgICAgICAgICAgICAgIHZhciBldmVudHMg
PSBvbGREYXRhLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJEYXRh
ID0gY3VyRGF0YVsgaW50ZXJuYWxLZXkgXSA9IGpRdWVyeS5leHRlbmQoe30sIG9sZERhdGEpOwoK
ICAgICAgICAgICAgICAgIGlmICggZXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgY3VyRGF0YS5oYW5kbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckRhdGEuZXZl
bnRzID0ge307CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBldmVu
dHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSArICgg
ZXZlbnRzWyB0eXBlIF1bIGkgXS5uYW1lc3BhY2UgPyAiLiIgOiAiIiApICsgZXZlbnRzWyB0eXBl
IF1bIGkgXS5uYW1lc3BhY2UsIGV2ZW50c1sgdHlwZSBdWyBpIF0sIGV2ZW50c1sgdHlwZSBdWyBp
IF0uZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKZnVuY3Rpb24gY2xv
bmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3QgKSB7CiAgICAgICAgdmFyIG5vZGVOYW1lOwoKICAg
ICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Igbm9uLUVsZW1lbnRzCiAg
ICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgewogICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgIH0KCiAgICAgICAgLy8gY2xlYXJBdHRyaWJ1dGVzIHJlbW92ZXMgdGhlIGF0dHJp
YnV0ZXMsIHdoaWNoIHdlIGRvbid0IHdhbnQsCiAgICAgICAgLy8gYnV0IGFsc28gcmVtb3ZlcyB0
aGUgYXR0YWNoRXZlbnQgZXZlbnRzLCB3aGljaCB3ZSAqZG8qIHdhbnQKICAgICAgICBpZiAoIGRl
c3QuY2xlYXJBdHRyaWJ1dGVzICkgewogICAgICAgICAgICAgICAgZGVzdC5jbGVhckF0dHJpYnV0
ZXMoKTsKICAgICAgICB9CgogICAgICAgIC8vIG1lcmdlQXR0cmlidXRlcywgaW4gY29udHJhc3Qs
IG9ubHkgbWVyZ2VzIGJhY2sgb24gdGhlCiAgICAgICAgLy8gb3JpZ2luYWwgYXR0cmlidXRlcywg
bm90IHRoZSBldmVudHMKICAgICAgICBpZiAoIGRlc3QubWVyZ2VBdHRyaWJ1dGVzICkgewogICAg
ICAgICAgICAgICAgZGVzdC5tZXJnZUF0dHJpYnV0ZXMoIHNyYyApOwogICAgICAgIH0KCiAgICAg
ICAgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CgogICAgICAgIC8vIElF
Ni04IGZhaWwgdG8gY2xvbmUgY2hpbGRyZW4gaW5zaWRlIG9iamVjdCBlbGVtZW50cyB0aGF0IHVz
ZQogICAgICAgIC8vIHRoZSBwcm9wcmlldGFyeSBjbGFzc2lkIGF0dHJpYnV0ZSB2YWx1ZSAocmF0
aGVyIHRoYW4gdGhlIHR5cGUKICAgICAgICAvLyBhdHRyaWJ1dGUpIHRvIGlkZW50aWZ5IHRoZSB0
eXBlIG9mIGNvbnRlbnQgdG8gZGlzcGxheQogICAgICAgIGlmICggbm9kZU5hbWUgPT09ICJvYmpl
Y3QiICkgewogICAgICAgICAgICAgICAgZGVzdC5vdXRlckhUTUwgPSBzcmMub3V0ZXJIVE1MOwoK
ICAgICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiAmJiAoc3JjLnR5cGUgPT09
ICJjaGVja2JveCIgfHwgc3JjLnR5cGUgPT09ICJyYWRpbyIpICkgewogICAgICAgICAgICAgICAg
Ly8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBj
aGVja2JveAogICAgICAgICAgICAgICAgLy8gb3IgcmFkaW8gYnV0dG9uLiBXb3JzZSwgSUU2LTcg
ZmFpbCB0byBnaXZlIHRoZSBjbG9uZWQgZWxlbWVudAogICAgICAgICAgICAgICAgLy8gYSBjaGVj
a2VkIGFwcGVhcmFuY2UgaWYgdGhlIGRlZmF1bHRDaGVja2VkIHZhbHVlIGlzbid0IGFsc28gc2V0
CiAgICAgICAgICAgICAgICBpZiAoIHNyYy5jaGVja2VkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0LmRlZmF1bHRDaGVja2VkID0gZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSUU2LTcgZ2V0IGNvbmZ1c2VkIGFu
ZCBlbmQgdXAgc2V0dGluZyB0aGUgdmFsdWUgb2YgYSBjbG9uZWQKICAgICAgICAgICAgICAgIC8v
IGNoZWNrYm94L3JhZGlvIGJ1dHRvbiB0byBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiAib24i
CiAgICAgICAgICAgICAgICBpZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdC52YWx1ZSA9IHNyYy52YWx1ZTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24g
dG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQKICAgICAgICAvLyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0
aW9ucwogICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAib3B0aW9uIiApIHsKICAgICAg
ICAgICAgICAgIGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOwoKICAgICAgICAv
LyBJRTYtOCBmYWlscyB0byBzZXQgdGhlIGRlZmF1bHRWYWx1ZSB0byB0aGUgY29ycmVjdCB2YWx1
ZSB3aGVuCiAgICAgICAgLy8gY2xvbmluZyBvdGhlciB0eXBlcyBvZiBpbnB1dCBmaWVsZHMKICAg
ICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRl
eHRhcmVhIiApIHsKICAgICAgICAgICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1
bHRWYWx1ZTsKICAgICAgICB9CgogICAgICAgIC8vIEV2ZW50IGRhdGEgZ2V0cyByZWZlcmVuY2Vk
IGluc3RlYWQgb2YgY29waWVkIGlmIHRoZSBleHBhbmRvCiAgICAgICAgLy8gZ2V0cyBjb3BpZWQg
dG9vCiAgICAgICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7Cn0KCmpR
dWVyeS5idWlsZEZyYWdtZW50ID0gZnVuY3Rpb24oIGFyZ3MsIG5vZGVzLCBzY3JpcHRzICkgewog
ICAgICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNoZXJlc3VsdHMsIGRvYzsKCiAgLy8g
bm9kZXMgbWF5IGNvbnRhaW4gZWl0aGVyIGFuIGV4cGxpY2l0IGRvY3VtZW50IG9iamVjdCwKICAv
LyBhIGpRdWVyeSBjb2xsZWN0aW9uIG9yIGNvbnRleHQgb2JqZWN0LgogIC8vIElmIG5vZGVzWzBd
IGNvbnRhaW5zIGEgdmFsaWQgb2JqZWN0IHRvIGFzc2lnbiB0byBkb2MKICBpZiAoIG5vZGVzICYm
IG5vZGVzWzBdICkgewogICAgZG9jID0gbm9kZXNbMF0ub3duZXJEb2N1bWVudCB8fCBub2Rlc1sw
XTsKICB9CgogIC8vIEVuc3VyZSB0aGF0IGFuIGF0dHIgb2JqZWN0IGRvZXNuJ3QgaW5jb3JyZWN0
bHkgc3RhbmQgaW4gYXMgYSBkb2N1bWVudCBvYmplY3QKICAgICAgICAvLyBDaHJvbWUgYW5kIEZp
cmVmb3ggc2VlbSB0byBhbGxvdyB0aGlzIHRvIG9jY3VyIGFuZCB3aWxsIHRocm93IGV4Y2VwdGlv
bgogICAgICAgIC8vIEZpeGVzICM4OTUwCiAgICAgICAgaWYgKCAhZG9jLmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQgKSB7CiAgICAgICAgICAgICAgICBkb2MgPSBkb2N1bWVudDsKICAgICAgICB9Cgog
ICAgICAgIC8vIE9ubHkgY2FjaGUgInNtYWxsIiAoMS8yIEtCKSBIVE1MIHN0cmluZ3MgdGhhdCBh
cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGRvY3VtZW50CiAgICAgICAgLy8gQ2xvbmluZyBv
cHRpb25zIGxvc2VzIHRoZSBzZWxlY3RlZCBzdGF0ZSwgc28gZG9uJ3QgY2FjaGUgdGhlbQogICAg
ICAgIC8vIElFIDYgZG9lc24ndCBsaWtlIGl0IHdoZW4geW91IHB1dCA8b2JqZWN0PiBvciA8ZW1i
ZWQ+IGVsZW1lbnRzIGluIGEgZnJhZ21lbnQKICAgICAgICAvLyBBbHNvLCBXZWJLaXQgZG9lcyBu
b3QgY2xvbmUgJ2NoZWNrZWQnIGF0dHJpYnV0ZXMgb24gY2xvbmVOb2RlLCBzbyBkb24ndCBjYWNo
ZQogICAgICAgIGlmICggYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICJz
dHJpbmciICYmIGFyZ3NbMF0ubGVuZ3RoIDwgNTEyICYmIGRvYyA9PT0gZG9jdW1lbnQgJiYKICAg
ICAgICAgICAgICAgIGFyZ3NbMF0uY2hhckF0KDApID09PSAiPCIgJiYgIXJub2NhY2hlLnRlc3Qo
IGFyZ3NbMF0gKSAmJiAoalF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9uZSB8fCAhcmNoZWNrZWQudGVz
dCggYXJnc1swXSApKSApIHsKCiAgICAgICAgICAgICAgICBjYWNoZWFibGUgPSB0cnVlOwoKICAg
ICAgICAgICAgICAgIGNhY2hlcmVzdWx0cyA9IGpRdWVyeS5mcmFnbWVudHNbIGFyZ3NbMF0gXTsK
ICAgICAgICAgICAgICAgIGlmICggY2FjaGVyZXN1bHRzICYmIGNhY2hlcmVzdWx0cyAhPT0gMSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBjYWNoZXJlc3VsdHM7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICFmcmFnbWVudCApIHsKICAgICAg
ICAgICAgICAgIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAg
ICAgICAgICAgIGpRdWVyeS5jbGVhbiggYXJncywgZG9jLCBmcmFnbWVudCwgc2NyaXB0cyApOwog
ICAgICAgIH0KCiAgICAgICAgaWYgKCBjYWNoZWFibGUgKSB7CiAgICAgICAgICAgICAgICBqUXVl
cnkuZnJhZ21lbnRzWyBhcmdzWzBdIF0gPSBjYWNoZXJlc3VsdHMgPyBmcmFnbWVudCA6IDE7CiAg
ICAgICAgfQoKICAgICAgICByZXR1cm4geyBmcmFnbWVudDogZnJhZ21lbnQsIGNhY2hlYWJsZTog
Y2FjaGVhYmxlIH07Cn07CgpqUXVlcnkuZnJhZ21lbnRzID0ge307CgpqUXVlcnkuZWFjaCh7CiAg
ICAgICAgYXBwZW5kVG86ICJhcHBlbmQiLAogICAgICAgIHByZXBlbmRUbzogInByZXBlbmQiLAog
ICAgICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCiAgICAgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRl
ciIsCiAgICAgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgp9LCBmdW5jdGlvbiggbmFtZSwg
b3JpZ2luYWwgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0
b3IgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gW10sCiAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50ID0gdGhpcy5sZW5ndGggPT09IDEgJiYgdGhpc1swXS5wYXJlbnROb2RlOwoKICAgICAg
ICAgICAgICAgIGlmICggcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMTEgJiYgcGFyZW50
LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGluc2VydC5sZW5ndGggPT09IDEgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydFsgb3JpZ2luYWwgXSggdGhpc1swXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKCiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbnNlcnQubGVuZ3Ro
OyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVt
cyA9IChpID4gMCA/IHRoaXMuY2xvbmUodHJ1ZSkgOiB0aGlzKS5nZXQoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGluc2VydFtpXSApWyBvcmlnaW5hbCBdKCBlbGVt
cyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldC5jb25jYXQoIGVs
ZW1zICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBpbnNlcnQuc2VsZWN0b3IgKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9Owp9KTsKCmZ1bmN0aW9uIGdldEFsbCggZWxlbSApIHsK
ICAgICAgICBpZiAoICJnZXRFbGVtZW50c0J5VGFnTmFtZSIgaW4gZWxlbSApIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKCiAgICAgICAg
fSBlbHNlIGlmICggInF1ZXJ5U2VsZWN0b3JBbGwiIGluIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsKCiAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9Cn0KCi8vIFVzZWQgaW4gY2xlYW4s
IGZpeGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wZXJ0eQpmdW5jdGlvbiBmaXhEZWZhdWx0Q2hl
Y2tlZCggZWxlbSApIHsKICAgICAgICBpZiAoIGVsZW0udHlwZSA9PT0gImNoZWNrYm94IiB8fCBl
bGVtLnR5cGUgPT09ICJyYWRpbyIgKSB7CiAgICAgICAgICAgICAgICBlbGVtLmRlZmF1bHRDaGVj
a2VkID0gZWxlbS5jaGVja2VkOwogICAgICAgIH0KfQovLyBGaW5kcyBhbGwgaW5wdXRzIGFuZCBw
YXNzZXMgdGhlbSB0byBmaXhEZWZhdWx0Q2hlY2tlZApmdW5jdGlvbiBmaW5kSW5wdXRzKCBlbGVt
ICkgewogICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7CiAg
ICAgICAgICAgICAgICBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApOwogICAgICAgIH0gZWxzZSBp
ZiAoICJnZXRFbGVtZW50c0J5VGFnTmFtZSIgaW4gZWxlbSApIHsKICAgICAgICAgICAgICAgIGpR
dWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLCBmaXhEZWZhdWx0
Q2hlY2tlZCApOwogICAgICAgIH0KfQoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgY2xvbmU6IGZ1
bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKICAgICAg
ICAgICAgICAgIHZhciBjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKHRydWUpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RFbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOwoK
ICAgICAgICAgICAgICAgIGlmICggKCFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lRXZlbnQgfHwgIWpR
dWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExKSAmJiAh
alF1ZXJ5LmlzWE1MRG9jKGVsZW0pICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBj
b3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVzaW5nIGNsb25lTm9kZS4K
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGluZyBkZXRhY2hFdmVudCBvbiB0aGUgY2xv
bmUgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZyb20gdGhlIG9yaWdpbmFsLiBJbiBvcmRlciB0byBnZXQgYXJvdW5kIHRoaXMsIHdlIHVzZSBz
b21lCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3ByaWV0YXJ5IG1ldGhvZHMgdG8gY2xl
YXIgdGhlIGV2ZW50cy4gVGhhbmtzIHRvIE1vb1Rvb2xzCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGd1eXMgZm9yIHRoaXMgaG90bmVzcy4KCiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25l
Rml4QXR0cmlidXRlcyggZWxlbSwgY2xvbmUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFVzaW5nIFNpenpsZSBoZXJlIGlzIGNyYXp5IHNsb3csIHNvIHdlIHVzZSBnZXRFbGVtZW50c0J5
VGFnTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlvbiBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0aGUgbGVu
Z3RoIHByb3BlcnR5CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYW4gZWxlbWVudCBp
ZiB5b3UgYXJlIGNsb25pbmcgdGhlIGJvZHkgYW5kIG9uZSBvZiB0aGUKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZWxlbWVudHMgb24gdGhlIHBhZ2UgaGFzIGEgbmFtZSBvciBpZCBvZiAibGVu
Z3RoIgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07
ICsraSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0
aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsgRml4ZXMgIzk1ODcKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRlc3RFbGVtZW50c1tpXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggc3JjRWxlbWVu
dHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUK
ICAgICAgICAgICAgICAgIGlmICggZGF0YUFuZEV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBz
cmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBkZXN0RWxlbWVudHMgPSBudWxsOwoKICAgICAg
ICAgICAgICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAogICAgICAgICAgICAgICAgcmV0dXJu
IGNsb25lOwogICAgICAgIH0sCgogICAgICAgIGNsZWFuOiBmdW5jdGlvbiggZWxlbXMsIGNvbnRl
eHQsIGZyYWdtZW50LCBzY3JpcHRzICkgewogICAgICAgICAgICAgICAgdmFyIGNoZWNrU2NyaXB0
VHlwZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKCiAg
ICAgICAgICAgICAgICAvLyAhY29udGV4dC5jcmVhdGVFbGVtZW50IGZhaWxzIGluIElFIHdpdGgg
YW4gZXJyb3IgYnV0IHJldHVybnMgdHlwZW9mICdvYmplY3QnCiAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiBjb250ZXh0LmNyZWF0ZUVsZW1lbnQgPT09ICJ1bmRlZmluZWQiICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRl
eHRbMF0gJiYgY29udGV4dFswXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXSwgajsKCiAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gIm51bWJlciIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSArPSAiIjsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCBodG1sIHN0cmlu
ZyBpbnRvIERPTSBub2RlcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVt
ID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFy
aHRtbC50ZXN0KCBlbGVtICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtID0gY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGaXggIlhIVE1MIi1zdHlsZSB0YWdzIGluIGFsbCBicm93c2VycwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ucmVwbGFjZShy
eGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUcmltIHdoaXRlc3BhY2UsIG90aGVyd2lzZSBpbmRleE9mIHdvbid0IHdvcmsg
YXMgZXhwZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0
YWcgPSAocnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwID0g
d3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB3cmFwWzBdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBjb250ZXh0LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEdvIHRvIGh0bWwgYW5kIGJhY2ssIHRoZW4gcGVlbCBvZmYgZXh0cmEgd3JhcHBlcnMKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB3cmFwWzFd
ICsgZWxlbSArIHdyYXBbMl07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTW92ZSB0byB0aGUgcmlnaHQgZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggZGVwdGgtLSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gZGl2Lmxhc3RDaGlsZDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZW1vdmUgSUUncyBhdXRvaW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRh
YmxlIGZyYWdtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhalF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgd2FzIGEgPHRhYmxlPiwgKm1heSogaGF2ZSBz
cHVyaW91cyA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBoYXNCb2R5ID0gcnRib2R5LnRlc3QoZWxlbSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHkgPSB0YWcgPT09ICJ0
YWJsZSIgJiYgIWhhc0JvZHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hp
bGQuY2hpbGROb2RlcyA6CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhIGJhcmUgPHRoZWFkPiBvciA8
dGZvb3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIWhhc0JvZHkgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaXYuY2hpbGROb2RlcyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IHRib2R5Lmxlbmd0
aCAtIDE7IGogPj0gMCA7IC0taiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGJvZHlbIGogXSwg
InRib2R5IiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9kZXMubGVuZ3RoICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJv
ZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0Ym9keVsgaiBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSUUgY29tcGxldGVseSBraWxscyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBp
bm5lckhUTUwgaXMgdXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgJiYgcmxlYWRpbmdXaGl0ZXNw
YWNlLnRlc3QoIGVsZW0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggcmxl
YWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0Q2hpbGQgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtID0gZGl2LmNoaWxkTm9kZXM7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZXNldHMgZGVmYXVsdENoZWNrZWQgZm9yIGFueSByYWRpb3MgYW5k
IGNoZWNrYm94ZXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdG8gYmUgYXBwZW5k
ZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbGVuOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5hcHBl
bmRDaGVja2VkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbVsw
XSAmJiB0eXBlb2YgKGxlbiA9IGVsZW0ubGVuZ3RoKSA9PT0gIm51bWJlciIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGxlbjsgaisr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5k
SW5wdXRzKCBlbGVtW2pdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRJbnB1dHMoIGVsZW0gKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXQucHVzaCggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGpRdWVyeS5t
ZXJnZSggcmV0LCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGZyYWdtZW50ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1NjcmlwdFR5cGUgPSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWVsZW0udHlwZSB8fCByc2NyaXB0VHlwZS50ZXN0
KCBlbGVtLnR5cGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDA7IHJldFtpXTsgaSsrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc2NyaXB0cyAmJiBqUXVlcnkubm9kZU5hbWUoIHJldFtpXSwgInNj
cmlwdCIgKSAmJiAoIXJldFtpXS50eXBlIHx8IHJldFtpXS50eXBlLnRvTG93ZXJDYXNlKCkgPT09
ICJ0ZXh0L2phdmFzY3JpcHQiKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmlwdHMucHVzaCggcmV0W2ldLnBhcmVudE5vZGUgPyByZXRbaV0ucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZCggcmV0W2ldICkgOiByZXRbaV0gKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcmV0W2ldLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNUYWdzID0galF1ZXJ5LmdyZXAoIHJldFtp
XS5nZXRFbGVtZW50c0J5VGFnTmFtZSggInNjcmlwdCIgKSwgY2hlY2tTY3JpcHRUeXBlICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuc3BsaWNl
LmFwcGx5KCByZXQsIFtpICsgMSwgMF0uY29uY2F0KCBqc1RhZ3MgKSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIHJldFtpXSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfSwKCiAgICAgICAg
Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSwg
aWQsIGNhY2hlID0galF1ZXJ5LmNhY2hlLCBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLCBz
cGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsCiAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvOwoKICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5hbWUgJiYgalF1ZXJ5
Lm5vRGF0YVtlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICBpZCA9IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGlkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEgPSBjYWNoZVsgaWQgXSAmJiBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhICYmIGRhdGEuZXZlbnRzICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHR5cGUg
aW4gZGF0YS5ldmVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVs
ZW0sIHR5cGUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mg
b3ZlcmhlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBOdWxsIHRoZSBET00gcmVmZXJlbmNlIHRvIGF2b2lkIElFNi83
LzggbGVhayAoIzcwNTQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEuaGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLmhhbmRsZS5lbGVtID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVsZXRlRXhwYW5kbyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBqUXVlcnku
ZXhwYW5kbyBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBl
bGVtLnJlbW92ZUF0dHJpYnV0ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGNhY2hlWyBpZCBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfQp9KTsKCmZ1bmN0aW9uIGV2YWxTY3JpcHQoIGksIGVsZW0gKSB7CiAg
ICAgICAgaWYgKCBlbGVtLnNyYyApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNyYywKICAgICAgICAgICAgICAgICAgICAg
ICAgYXN5bmM6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogInNjcmlw
dCIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBq
UXVlcnkuZ2xvYmFsRXZhbCggKCBlbGVtLnRleHQgfHwgZWxlbS50ZXh0Q29udGVudCB8fCBlbGVt
LmlubmVySFRNTCB8fCAiIiApLnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgIi8qJDAqLyIgKSApOwog
ICAgICAgIH0KCiAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAg
ICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKICAgICAgICB9Cn0KCgoKCnZh
ciByYWxwaGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKICAgICAgICByb3BhY2l0eSA9IC9vcGFjaXR5
PShbXildKikvLAogICAgICAgIC8vIGZpeGVkIGZvciBJRTksIHNlZSAjODM0NgogICAgICAgIHJ1
cHBlciA9IC8oW0EtWl18Xm1zKS9nLAogICAgICAgIHJudW1weCA9IC9eLT9cZCsoPzpweCk/JC9p
LAogICAgICAgIHJudW0gPSAvXi0/XGQvLAogICAgICAgIHJyZWxOdW0gPSAvXihbXC0rXSk9KFtc
LSsuXGRlXSspLywKCiAgICAgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZp
c2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCiAgICAgICAgY3NzV2lkdGgg
PSBbICJMZWZ0IiwgIlJpZ2h0IiBdLAogICAgICAgIGNzc0hlaWdodCA9IFsgIlRvcCIsICJCb3R0
b20iIF0sCiAgICAgICAgY3VyQ1NTLAoKICAgICAgICBnZXRDb21wdXRlZFN0eWxlLAogICAgICAg
IGN1cnJlbnRTdHlsZTsKCmpRdWVyeS5mbi5jc3MgPSBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7
CiAgICAgICAgLy8gU2V0dGluZyAndW5kZWZpbmVkJyBpcyBhIG5vLW9wCiAgICAgICAgaWYgKCBh
cmd1bWVudHMubGVuZ3RoID09PSAyICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBqUXVlcnkuYWNj
ZXNzKCB0aGlzLCBuYW1lLCB2YWx1ZSwgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVl
ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPwogICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOgogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7CiAgICAgICAgfSk7
Cn07CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICAvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9v
a3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKICAgICAgICAvLyBiZWhhdmlvciBvZiBnZXR0
aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKICAgICAgICBjc3NIb29rczogewogICAg
ICAgICAgICAgICAgb3BhY2l0eTogewogICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGNvbXB1dGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0s
ICJvcGFjaXR5IiwgIm9wYWNpdHkiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLnN0eWxlLm9wYWNpdHk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfSwKCiAgICAgICAgLy8gRXhjbHVkZSB0aGUgZm9sbG93aW5nIGNzcyBwcm9wZXJ0aWVz
IHRvIGFkZCBweAogICAgICAgIGNzc051bWJlcjogewogICAgICAgICAgICAgICAgImZpbGxPcGFj
aXR5IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJmb250V2VpZ2h0IjogdHJ1ZSwKICAgICAgICAg
ICAgICAgICJsaW5lSGVpZ2h0IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJvcGFjaXR5IjogdHJ1
ZSwKICAgICAgICAgICAgICAgICJvcnBoYW5zIjogdHJ1ZSwKICAgICAgICAgICAgICAgICJ3aWRv
d3MiOiB0cnVlLAogICAgICAgICAgICAgICAgInpJbmRleCI6IHRydWUsCiAgICAgICAgICAgICAg
ICAiem9vbSI6IHRydWUKICAgICAgICB9LAoKICAgICAgICAvLyBBZGQgaW4gcHJvcGVydGllcyB3
aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCiAgICAgICAgLy8gc2V0dGluZyBvciBn
ZXR0aW5nIHRoZSB2YWx1ZQogICAgICAgIGNzc1Byb3BzOiB7CiAgICAgICAgICAgICAgICAvLyBu
b3JtYWxpemUgZmxvYXQgY3NzIHByb3BlcnR5CiAgICAgICAgICAgICAgICAiZmxvYXQiOiBqUXVl
cnkuc3VwcG9ydC5jc3NGbG9hdCA/ICJjc3NGbG9hdCIgOiAic3R5bGVGbG9hdCIKICAgICAgICB9
LAoKICAgICAgICAvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9k
ZQogICAgICAgIHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgewog
ICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5v
ZGVzCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwg
ZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQogICAgICAgICAgICAg
ICAgdmFyIHJldCwgdHlwZSwgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksCiAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZSwgaG9va3MgPSBqUXVlcnku
Y3NzSG9va3NbIG9yaWdOYW1lIF07CgogICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQ
cm9wc1sgb3JpZ05hbWUgXSB8fCBvcmlnTmFtZTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVu
ZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmlu
Z3MgKCs9IG9yIC09KSB0byByZWxhdGl2ZSBudW1iZXJzLiAjNzM0NQogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmIChyZXQgPSBycmVsTnVtLmV4ZWMoIHZh
bHVlICkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCArKCBy
ZXRbMV0gKyAxKSAqICtyZXRbMl0gKSArIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIG5h
bWUgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAjOTIz
NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAibnVtYmVyIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgTmFOIGFuZCBudWxsIHZhbHVlcyBhcmVuJ3Qgc2V0LiBTZWU6ICM3MTE2CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB0eXBlID09PSAibnVtYmVyIiAm
JiBpc05hTiggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZvciBj
ZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUg
PT09ICJudW1iZXIiICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICJweCI7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlk
ZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1
ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tz
KSB8fCAodmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlICkpICE9PSB1bmRlZmluZWQgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JhcHBlZCB0byBwcmV2ZW50IElF
IGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFsaWQnIHZhbHVlcyBhcmUgcHJvdmlkZWQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcgIzU1MDkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGVbIG5hbWUgXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgaG9v
ayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQg
PSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGdldCB0
aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdHlsZVsgbmFtZSBdOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAg
IGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhICkgewogICAgICAgICAgICAgICAgdmFy
IHJldCwgaG9va3M7CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29y
a2luZyB3aXRoIHRoZSByaWdodCBuYW1lCiAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNh
bWVsQ2FzZSggbmFtZSApOwogICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3Nb
IG5hbWUgXTsKICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8
fCBuYW1lOwoKICAgICAgICAgICAgICAgIC8vIGNzc0Zsb2F0IG5lZWRzIGEgc3BlY2lhbCB0cmVh
dG1lbnQKICAgICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gImNzc0Zsb2F0IiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9ICJmbG9hdCI7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZh
bHVlIGZyb20gdGhlcmUKICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9v
a3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5l
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAg
ICAvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3Rz
LCB1c2UgdGhhdAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY3VyQ1NTICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3VyQ1NTKCBlbGVtLCBuYW1lICk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gQSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBp
bmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRvIGdldCBjb3JyZWN0IGNhbGN1bGF0aW9ucwogICAg
ICAgIHN3YXA6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHsKICAgICAgICAg
ICAgICAgIHZhciBvbGQgPSB7fTsKCiAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb2xk
IHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBuYW1lIGluIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFsgbmFtZSBd
ID0gZWxlbS5zdHlsZVsgbmFtZSBdOwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxl
WyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgY2FsbGJhY2suY2FsbCggZWxlbSApOwoKICAgICAgICAgICAgICAgIC8vIFJldmVydCB0
aGUgb2xkIHZhbHVlcwogICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoKLy8gREVQUkVDQVRFRCwgVXNlIGpRdWVy
eS5jc3MoKSBpbnN0ZWFkCmpRdWVyeS5jdXJDU1MgPSBqUXVlcnkuY3NzOwoKalF1ZXJ5LmVhY2go
WyJoZWlnaHQiLCAid2lkdGgiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgalF1ZXJ5
LmNzc0hvb2tzWyBuYW1lIF0gPSB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVt
LCBjb21wdXRlZCwgZXh0cmEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWw7Cgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5vZmZzZXRXaWR0aCAhPT0gMCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXSCggZWxlbSwgbmFtZSwg
ZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN3YXAoIGVsZW0sIGNzc1No
b3csIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWwgPSBnZXRXSCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBybnVtcHgudGVzdCggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpZ25vcmUgbmVnYXRpdmUgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgIzE1OTkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQoIHZhbHVlICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPj0gMCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICJweCI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9KTsK
CmlmICggIWpRdWVyeS5zdXBwb3J0Lm9wYWNpdHkgKSB7CiAgICAgICAgalF1ZXJ5LmNzc0hvb2tz
Lm9wYWNpdHkgPSB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRl
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgdXNlcyBmaWx0ZXJzIGZvciBvcGFj
aXR5CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3BhY2l0eS50ZXN0KCAoY29tcHV0
ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0ZXIgOiBlbGVt
LnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCBwYXJzZUZsb2F0KCBSZWdFeHAuJDEgKSAvIDEwMCApICsgIiIgOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXB1dGVkID8gIjEiIDogIiI7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBlbGVtLnN0eWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9IGVsZW0uY3VycmVudFN0eWxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgPSBqUXVlcnkuaXNOYU4oIHZhbHVlICkgPyAi
IiA6ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIpIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLmZp
bHRlciB8fCBzdHlsZS5maWx0ZXIgfHwgIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
RSBoYXMgdHJvdWJsZSB3aXRoIG9wYWNpdHkgaWYgaXQgZG9lcyBub3QgaGF2ZSBsYXlvdXQKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgaXQgYnkgc2V0dGluZyB0aGUgem9vbSBsZXZl
bAogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS56b29tID0gMTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGlmIHNldHRpbmcgb3BhY2l0eSB0byAxLCBhbmQgbm8gb3RoZXIgZmlsdGVy
cyBleGlzdCAtIGF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBhdHRyaWJ1dGUgIzY2NTIKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA+PSAxICYmIGpRdWVyeS50cmltKCBmaWx0ZXIu
cmVwbGFjZSggcmFscGhhLCAiIiApICkgPT09ICIiICkgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTZXR0aW5nIHN0eWxlLmZpbHRlciB0byBudWxsLCAiIiAmICIgIiBzdGls
bCBsZWF2ZSAiZmlsdGVyOiIgaW4gdGhlIGNzc1RleHQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpZiAiZmlsdGVyOiIgaXMgcHJlc2VudCBhdCBhbGwsIGNsZWFyVHlwZSBpcyBk
aXNhYmxlZCwgd2Ugd2FudCB0byBhdm9pZCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlzIElFIE9ubHksIGJ1dCBzbyBhcHBhcmVu
dGx5IGlzIHRoaXMgY29kZSBwYXRoLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGUucmVtb3ZlQXR0cmlidXRlKCAiZmlsdGVyIiApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBpZiB0aGVyZSB0aGVyZSBpcyBubyBmaWx0ZXIgc3R5bGUgYXBwbGllZCBp
biBhIGNzcyBydWxlLCB3ZSBhcmUgZG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZpbHRlciB2YWx1ZXMKICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUuZmlsdGVyID0gcmFscGhhLnRlc3QoIGZpbHRlciApID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCBvcGFjaXR5
ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciArICIgIiArIG9wYWNp
dHk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKfQoKalF1ZXJ5KGZ1bmN0aW9uKCkgewog
ICAgICAgIC8vIFRoaXMgaG9vayBjYW5ub3QgYmUgYWRkZWQgdW50aWwgRE9NIHJlYWR5IGJlY2F1
c2UgdGhlIHN1cHBvcnQgdGVzdAogICAgICAgIC8vIGZvciBpdCBpcyBub3QgcnVuIHVudGlsIGFm
dGVyIERPTSByZWFkeQogICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlTWFyZ2lu
UmlnaHQgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBn
ZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kIGJ5IHRlbXBvcmFyaWx5
IHNldHRpbmcgZWxlbWVudCBkaXNwbGF5IHRvIGlubGluZS1ibG9jawogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAiaW5saW5lLWJsb2NrIiB9LCBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCA9IGN1ckNTUyggZWxlbSwgIm1hcmdpbi1yaWdodCIsICJtYXJnaW5SaWdodCIgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVsZW0uc3R5bGUubWFyZ2lu
UmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fTsKICAgICAgICB9Cn0pOwoKaWYgKCBkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5k
ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewogICAgICAgIGdldENvbXB1dGVkU3R5bGUg
PSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIHZhciByZXQsIGRlZmF1
bHRWaWV3LCBjb21wdXRlZFN0eWxlOwoKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxh
Y2UoIHJ1cHBlciwgIi0kMSIgKS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgICAgIGlmICgg
IShkZWZhdWx0VmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCAoY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUoIGVsZW0sIG51bGwgKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApOwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCwgZWxlbSApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJl
dDsKICAgICAgICB9Owp9CgppZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5
bGUgKSB7CiAgICAgICAgY3VycmVudFN0eWxlID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CiAg
ICAgICAgICAgICAgICB2YXIgbGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZWxl
bS5jdXJyZW50U3R5bGUgJiYgZWxlbS5jdXJyZW50U3R5bGVbIG5hbWUgXSwKICAgICAgICAgICAg
ICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYgZWxlbS5ydW50aW1lU3R5
bGVbIG5hbWUgXSwKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOwoK
ICAgICAgICAgICAgICAgIC8vIEZyb20gdGhlIGF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMK
ICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8y
Ny8xOC41NC4xNS8jY29tbWVudC0xMDIyOTEKCiAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBu
b3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBwaXhlbCBudW1iZXIKICAgICAgICAgICAgICAgIC8v
IGJ1dCBhIG51bWJlciB0aGF0IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0
IGl0IHRvIHBpeGVscwogICAgICAgICAgICAgICAgaWYgKCAhcm51bXB4LnRlc3QoIHJldCApICYm
IHJudW0udGVzdCggcmV0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVy
IHRoZSBvcmlnaW5hbCB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0eWxl
LmxlZnQ7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMg
dG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cnNMZWZ0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucnVudGltZVN0
eWxlLmxlZnQgPSBlbGVtLmN1cnJlbnRTdHlsZS5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBuYW1lID09PSAiZm9udFNp
emUiID8gIjFlbSIgOiAocmV0IHx8IDApOwogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBz
dHlsZS5waXhlbExlZnQgKyAicHgiOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJ0
IHRoZSBjaGFuZ2VkIHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5sZWZ0ID0g
bGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByc0xlZnQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IHJzTGVmdDsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiByZXQgPT09ICIiID8gImF1dG8iIDogcmV0OwogICAgICAgIH07Cn0KCmN1ckNTUyA9
IGdldENvbXB1dGVkU3R5bGUgfHwgY3VycmVudFN0eWxlOwoKZnVuY3Rpb24gZ2V0V0goIGVsZW0s
IG5hbWUsIGV4dHJhICkgewoKICAgICAgICAvLyBTdGFydCB3aXRoIG9mZnNldCBwcm9wZXJ0eQog
ICAgICAgIHZhciB2YWwgPSBuYW1lID09PSAid2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVs
ZW0ub2Zmc2V0SGVpZ2h0LAogICAgICAgICAgICAgICAgd2hpY2ggPSBuYW1lID09PSAid2lkdGgi
ID8gY3NzV2lkdGggOiBjc3NIZWlnaHQ7CgogICAgICAgIGlmICggdmFsID4gMCApIHsKICAgICAg
ICAgICAgICAgIGlmICggZXh0cmEgIT09ICJib3JkZXIiICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZWFjaCggd2hpY2gsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWV4dHJhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5n
IiArIHRoaXMgKSApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQo
IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgdGhpcyApICkgfHwgMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsg
dGhpcyArICJXaWR0aCIgKSApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsICsgInB4IjsKICAgICAgICB9CgogICAgICAgIC8vIEZhbGwgYmFj
ayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeQogICAgICAgIHZh
bCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgbmFtZSApOwogICAgICAgIGlmICggdmFsIDwgMCB8fCB2
YWwgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgIHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXSB8
fCAwOwogICAgICAgIH0KICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJl
IGZvciBleHRyYQogICAgICAgIHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7CgogICAgICAg
IC8vIEFkZCBwYWRkaW5nLCBib3JkZXIsIG1hcmdpbgogICAgICAgIGlmICggZXh0cmEgKSB7CiAg
ICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggd2hpY2gsIGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgInBhZGRp
bmciICsgdGhpcyApICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBleHRyYSAh
PT0gInBhZGRpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSBw
YXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIHRoaXMgKyAiV2lkdGgiICkg
KSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIHRoaXMgKSAp
IHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgIH0KCiAgICAgICAgcmV0dXJuIHZhbCArICJweCI7Cn0KCmlmICggalF1ZXJ5LmV4cHIgJiYg
alF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKICAgICAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRl
biA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZWxlbS5v
ZmZzZXRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gZWxlbS5vZmZzZXRI
ZWlnaHQ7CgogICAgICAgICAgICAgICAgcmV0dXJuICh3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09
IDApIHx8ICghalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzICYmIChlbGVtLnN0
eWxlLmRpc3BsYXkgfHwgalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkpID09PSAibm9uZSIp
OwogICAgICAgIH07CgogICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0
aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJz
LmhpZGRlbiggZWxlbSApOwogICAgICAgIH07Cn0KCgoKCnZhciByMjAgPSAvJTIwL2csCiAgICAg
ICAgcmJyYWNrZXQgPSAvXFtcXSQvLAogICAgICAgIHJDUkxGID0gL1xyP1xuL2csCiAgICAgICAg
cmhhc2ggPSAvIy4qJC8sCiAgICAgICAgcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5d
Kilccj8kL21nLCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hhcmFjdGVyIGF0IEVPTAogICAgICAgIHJp
bnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRk
ZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3
ZWVrKSQvaSwKICAgICAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBk
ZXRlY3Rpb24KICAgICAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcFwtc3Rv
cmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCiAgICAgICAgcm5vQ29udGVu
dCA9IC9eKD86R0VUfEhFQUQpJC8sCiAgICAgICAgcnByb3RvY29sID0gL15cL1wvLywKICAgICAg
ICBycXVlcnkgPSAvXD8vLAogICAgICAgIHJzY3JpcHQgPSAvPHNjcmlwdFxiW148XSooPzooPyE8
XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKICAgICAgICByc2VsZWN0VGV4dGFyZWEg
PSAvXig/OnNlbGVjdHx0ZXh0YXJlYSkvaSwKICAgICAgICByc3BhY2VzQWpheCA9IC9ccysvLAog
ICAgICAgIHJ0cyA9IC8oWz8mXSlfPVteJl0qLywKICAgICAgICBydXJsID0gL14oW1x3XCtcLlwt
XSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKSk/KT8vLAoKICAgICAgICAvLyBLZWVwIGEg
Y29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kCiAgICAgICAgX2xvYWQgPSBqUXVlcnkuZm4ubG9h
ZCwKCiAgICAgICAgLyogUHJlZmlsdGVycwogICAgICAgICAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0
byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4
YW1wbGUpCiAgICAgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKICAgICAgICAgKiAgICAtIEJF
Rk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CiAgICAgICAgICogICAgLSBBRlRFUiBwYXJhbSBz
ZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVl
KQogICAgICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKICAgICAgICAgKiA0KSB0aGUgY2F0
Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAogICAgICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxs
IHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8g
IioiIGlmIG5lZWRlZAogICAgICAgICAqLwogICAgICAgIHByZWZpbHRlcnMgPSB7fSwKCiAgICAg
ICAgLyogVHJhbnNwb3J0cyBiaW5kaW5ncwogICAgICAgICAqIDEpIGtleSBpcyB0aGUgZGF0YVR5
cGUKICAgICAgICAgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAogICAg
ICAgICAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFu
ZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKICAgICAgICAgKi8KICAgICAgICB0cmFuc3BvcnRz
ID0ge30sCgogICAgICAgIC8vIERvY3VtZW50IGxvY2F0aW9uCiAgICAgICAgYWpheExvY2F0aW9u
LAoKICAgICAgICAvLyBEb2N1bWVudCBsb2NhdGlvbiBzZWdtZW50cwogICAgICAgIGFqYXhMb2NQ
YXJ0cywKICAgICAgICAKICAgICAgICAvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVl
bmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KICAg
ICAgICBhbGxUeXBlcyA9IFsiKi8iXSArIFsiKiJdOwoKLy8gIzgxMzgsIElFIG1heSB0aHJvdyBh
biBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKLy8gYSBmaWVsZCBmcm9tIHdpbmRvdy5sb2NhdGlv
biBpZiBkb2N1bWVudC5kb21haW4gaGFzIGJlZW4gc2V0CnRyeSB7CiAgICAgICAgYWpheExvY2F0
aW9uID0gbG9jYXRpb24uaHJlZjsKfSBjYXRjaCggZSApIHsKICAgICAgICAvLyBVc2UgdGhlIGhy
ZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAogICAgICAgIC8vIHNpbmNlIElFIHdpbGwgbW9k
aWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCiAgICAgICAgYWpheExvY2F0aW9uID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CiAgICAgICAgYWpheExvY2F0aW9uLmhyZWYgPSAi
IjsKICAgICAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24uaHJlZjsKfQoKLy8gU2VnbWVu
dCBsb2NhdGlvbiBpbnRvIHBhcnRzCmFqYXhMb2NQYXJ0cyA9IHJ1cmwuZXhlYyggYWpheExvY2F0
aW9uLnRvTG93ZXJDYXNlKCkgKSB8fCBbXTsKCi8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3IgalF1
ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CmZ1bmN0aW9uIGFkZFRv
UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkgewoKICAgICAgICAvLyBkYXRhVHlw
ZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvICIqIgogICAgICAgIHJldHVy
biBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkgewoKICAgICAgICAgICAgICAg
IGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gInN0cmluZyIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247CiAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dl
ckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBkYXRh
VHlwZXMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGxhY2VCZWZvcmU7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Ig
ZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcig7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSBdOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNvbnRyb2wgaWYgd2UncmUgYXNrZWQgdG8gYWRkIGJlZm9yZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSBleGlzdGluZyBlbGVtZW50CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VCZWZvcmUgPSAvXlwrLy50ZXN0KCBkYXRh
VHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGxhY2VCZWZvcmUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRh
dGFUeXBlLnN1YnN0ciggMSApIHx8ICIqIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHN0cnVjdHVyZVsgZGF0
YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0byB0aGUgc3RydWN0dXJlIGFjY29yZGluZ2x5
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFsgcGxhY2VCZWZvcmUgPyAidW5z
aGlmdCIgOiAicHVzaCIgXSggZnVuYyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfTsKfQoKLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZv
ciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsCiAg
ICAgICAgICAgICAgICBkYXRhVHlwZSAvKiBpbnRlcm5hbCAqLywgaW5zcGVjdGVkIC8qIGludGVy
bmFsICovICkgewoKICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlIHx8IG9wdGlvbnMuZGF0YVR5
cGVzWyAwIF07CiAgICAgICAgaW5zcGVjdGVkID0gaW5zcGVjdGVkIHx8IHt9OwoKICAgICAgICBp
bnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlOwoKICAgICAgICB2YXIgbGlzdCA9IHN0cnVjdHVy
ZVsgZGF0YVR5cGUgXSwKICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgbGVu
Z3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKICAgICAgICAgICAgICAgIGV4ZWN1dGVPbmx5
ID0gKCBzdHJ1Y3R1cmUgPT09IHByZWZpbHRlcnMgKSwKICAgICAgICAgICAgICAgIHNlbGVjdGlv
bjsKCiAgICAgICAgZm9yKDsgaSA8IGxlbmd0aCAmJiAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rp
b24gKTsgaSsrICkgewogICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gbGlzdFsgaSBdKCBvcHRp
b25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7CiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBn
b3QgcmVkaXJlY3RlZCB0byBhbm90aGVyIGRhdGFUeXBlCiAgICAgICAgICAgICAgICAvLyB3ZSB0
cnkgdGhlcmUgaWYgZXhlY3V0aW5nIG9ubHkgYW5kIG5vdCBkb25lIGFscmVhZHkKICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIHNlbGVjdGlvbiA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWV4ZWN1dGVPbmx5IHx8IGluc3BlY3RlZFsgc2VsZWN0aW9uIF0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gdW5kZWZpbmVk
OwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIHNlbGVjdGlvbiApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsIHNlbGVjdGlvbiwg
aW5zcGVjdGVkICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgICAgLy8gSWYgd2UncmUgb25seSBleGVjdXRpbmcgb3Igbm90aGluZyB3
YXMgc2VsZWN0ZWQKICAgICAgICAvLyB3ZSB0cnkgdGhlIGNhdGNoYWxsIGRhdGFUeXBlIGlmIG5v
dCBkb25lIGFscmVhZHkKICAgICAgICBpZiAoICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiAp
ICYmICFpbnNwZWN0ZWRbICIqIiBdICkgewogICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCAiKiIsIGluc3Bl
Y3RlZCApOwogICAgICAgIH0KICAgICAgICAvLyB1bm5lY2Vzc2FyeSB3aGVuIG9ubHkgZXhlY3V0
aW5nIChwcmVmaWx0ZXJzKQogICAgICAgIC8vIGJ1dCBpdCdsbCBiZSBpZ25vcmVkIGJ5IHRoZSBj
YWxsZXIgaW4gdGhhdCBjYXNlCiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjsKfQoKLy8gQSBzcGVj
aWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCi8vIHRoYXQgdGFrZXMgImZsYXQiIG9wdGlvbnMg
KG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQovLyBGaXhlcyAjOTg4NwpmdW5jdGlvbiBhamF4RXh0
ZW5kKCB0YXJnZXQsIHNyYyApIHsKICAgICAgICB2YXIga2V5LCBkZWVwLAogICAgICAgICAgICAg
ICAgZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9Owog
ICAgICAgIGZvcigga2V5IGluIHNyYyApIHsKICAgICAgICAgICAgICAgIGlmICggc3JjWyBrZXkg
XSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAoIGZsYXRPcHRpb25z
WyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBz
cmNbIGtleSBdOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIGRlZXAg
KSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTsK
ICAgICAgICB9Cn0KCmpRdWVyeS5mbi5leHRlbmQoewogICAgICAgIGxvYWQ6IGZ1bmN0aW9uKCB1
cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB1cmwg
IT09ICJzdHJpbmciICYmIF9sb2FkICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
X2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoKICAgICAgICAgICAgICAgIC8vIERvbid0
IGRvIGEgcmVxdWVzdCBpZiBubyBlbGVtZW50cyBhcmUgYmVpbmcgcmVxdWVzdGVkCiAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCAhdGhpcy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBv
ZmYgPSB1cmwuaW5kZXhPZiggIiAiICk7CiAgICAgICAgICAgICAgICBpZiAoIG9mZiA+PSAwICkg
ewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSB1cmwuc2xpY2UoIG9mZiwg
dXJsLmxlbmd0aCApOwogICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc2xpY2UoIDAs
IG9mZiApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgdG8g
YSBHRVQgcmVxdWVzdAogICAgICAgICAgICAgICAgdmFyIHR5cGUgPSAiR0VUIjsKCiAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQKICAgICAgICAg
ICAgICAgIGlmICggcGFyYW1zICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdz
IGEgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggcGFyYW1zICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXNz
dW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjayA9IHBhcmFtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXMgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGJ1
aWxkIGEgcGFyYW0gc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5
cGVvZiBwYXJhbXMgPT09ICJvYmplY3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtcyA9IGpRdWVyeS5wYXJhbSggcGFyYW1zLCBqUXVlcnkuYWpheFNldHRpbmdzLnRy
YWRpdGlvbmFsICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJQT1NU
IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHRoZSBy
ZW1vdGUgZG9jdW1lbnQKICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKICAgICAgICAgICAg
ICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAiaHRtbCIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGE6IHBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGxl
dGUgY2FsbGJhY2sgKHJlc3BvbnNlVGV4dCBpcyB1c2VkIGludGVybmFsbHkpCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cywgcmVzcG9uc2VU
ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSByZXNw
b25zZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGpxWEhSIG9iamVjdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCA9IGpxWEhSLnJlc3BvbnNlVGV4dDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzdWNjZXNzZnVsLCBpbmplY3QgdGhlIEhUTUwg
aW50byBhbGwgdGhlIG1hdGNoZWQgZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpxWEhSLmlzUmVzb2x2ZWQoKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICM0ODI1OiBHZXQgdGhlIGFjdHVhbCByZXNwb25zZSBpbiBjYXNl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGRhdGFGaWx0ZXIg
aXMgcHJlc2VudCBpbiBhamF4U2V0dGluZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpxWEhSLmRvbmUoZnVuY3Rpb24oIHIgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCA9IHI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNlZSBpZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUg
YSBkdW1teSBkaXYgdG8gaG9sZCB0aGUgcmVzdWx0cwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIjxkaXY+IikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGhlIGNvbnRl
bnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3ZpbmcgdGhlIHNjcmlwdHMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBh
bnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4gSUUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKHJlc3BvbnNlVGV4dC5y
ZXBsYWNlKHJzY3JpcHQsICIiKSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlu
ZChzZWxlY3RvcikgOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0ICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgWyByZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIg
XSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgICAgfSwKCiAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOwogICAgICAg
IH0sCgogICAgICAgIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5lbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIHRoaXMuZWxlbWVudHMgKSA6IHRo
aXM7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbigp
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2Fi
bGVkICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB0aGlzLmNoZWNrZWQgfHwg
cnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUgKSB8fAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmlucHV0LnRlc3QoIHRoaXMudHlwZSApICk7CiAgICAg
ICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiggaSwgZWxlbSApewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09IG51bGwgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bGwgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwsIGkgKXsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogZWxlbS5u
YW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNS
TEYsICJcclxuIiApIH07CiAgICAgICAgICAgICAgICB9KS5nZXQoKTsKICAgICAgICB9Cn0pOwoK
Ly8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBl
dmVudHMKalF1ZXJ5LmVhY2goICJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhF
cnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoICIgIiApLCBmdW5jdGlvbiggaSwgbyAp
ewogICAgICAgIGpRdWVyeS5mblsgbyBdID0gZnVuY3Rpb24oIGYgKXsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmJpbmQoIG8sIGYgKTsKICAgICAgICB9Owp9KTsKCmpRdWVyeS5lYWNoKCBb
ICJnZXQiLCAicG9zdCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHsKICAgICAgICBqUXVlcnlb
IG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CiAgICAg
ICAgICAgICAgICAvLyBzaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRl
ZAogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCBjYWxsYmFjazsKICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sgPSBkYXRhOwogICAgICAgICAgICAgICAgICAgICAgICBkYXRh
ID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IG1ldGhvZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6
IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrLAogICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhVHlwZTogdHlwZQogICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgfTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKCiAgICAgICAgZ2V0U2NyaXB0OiBmdW5jdGlvbigg
dXJsLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmws
IHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CiAgICAgICAgfSwKCiAgICAgICAgZ2V0
SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7CiAgICAgICAg
fSwKCiAgICAgICAgLy8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50
byB0YXJnZXQKICAgICAgICAvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBm
aWVsZHMuCiAgICAgICAgLy8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhT
ZXR0aW5ncy4KICAgICAgICBhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkg
ewogICAgICAgICAgICAgICAgaWYgKCBzZXR0aW5ncyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAg
YWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICk7CiAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmRpbmcgYWpheFNldHRp
bmdzCiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzID0gdGFyZ2V0OwogICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBqUXVlcnkuYWpheFNldHRpbmdzOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgYWpheEV4dGVuZCggdGFyZ2V0LCBzZXR0aW5ncyApOwogICAg
ICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgICAgICB9LAoKICAgICAgICBhamF4U2V0dGlu
Z3M6IHsKICAgICAgICAgICAgICAgIHVybDogYWpheExvY2F0aW9uLAogICAgICAgICAgICAgICAg
aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKICAgICAg
ICAgICAgICAgIGdsb2JhbDogdHJ1ZSwKICAgICAgICAgICAgICAgIHR5cGU6ICJHRVQiLAogICAg
ICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29k
ZWQiLAogICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IHRydWUsCiAgICAgICAgICAgICAgICBh
c3luYzogdHJ1ZSwKICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICB0aW1lb3V0OiAw
LAogICAgICAgICAgICAgICAgZGF0YTogbnVsbCwKICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBu
dWxsLAogICAgICAgICAgICAgICAgdXNlcm5hbWU6IG51bGwsCiAgICAgICAgICAgICAgICBwYXNz
d29yZDogbnVsbCwKICAgICAgICAgICAgICAgIGNhY2hlOiBudWxsLAogICAgICAgICAgICAgICAg
dHJhZGl0aW9uYWw6IGZhbHNlLAogICAgICAgICAgICAgICAgaGVhZGVyczoge30sCiAgICAgICAg
ICAgICAgICAqLwoKICAgICAgICAgICAgICAgIGFjY2VwdHM6IHsKICAgICAgICAgICAgICAgICAg
ICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAi
dGV4dC9wbGFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9q
c29uLCB0ZXh0L2phdmFzY3JpcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAiKiI6IGFsbFR5
cGVzCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHhtbDogL3htbC8sCiAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWw6IC9odG1sLywKICAgICAgICAgICAgICAgICAgICAgICAganNvbjogL2pzb24vCiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHJlc3BvbnNlRmllbGRzOiB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHhtbDogInJlc3BvbnNlWE1MIiwKICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dDogInJlc3BvbnNlVGV4dCIKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAg
Ly8gTGlzdCBvZiBkYXRhIGNvbnZlcnRlcnMKICAgICAgICAgICAgICAgIC8vIDEpIGtleSBmb3Jt
YXQgaXMgInNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1i
ZXR3ZWVuKQogICAgICAgICAgICAgICAgLy8gMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2Fu
IGJlIHVzZWQgZm9yIHNvdXJjZV90eXBlCiAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzOiB7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHQKICAgICAg
ICAgICAgICAgICAgICAgICAgIiogdGV4dCI6IHdpbmRvdy5TdHJpbmcsCgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikKICAg
ICAgICAgICAgICAgICAgICAgICAgInRleHQgaHRtbCI6IHRydWUsCgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXh0IGpzb24iOiBqUXVlcnkucGFyc2VKU09OLAoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwKICAgICAgICAgICAgICAgICAgICAgICAg
InRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAg
ICAgICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6CiAg
ICAgICAgICAgICAgICAvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJl
IGlmCiAgICAgICAgICAgICAgICAvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3Vs
ZG4ndCBiZQogICAgICAgICAgICAgICAgLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQp
CiAgICAgICAgICAgICAgICBmbGF0T3B0aW9uczogewogICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0OiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHRydWUKICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRl
cnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKICAgICAgICBhamF4VHJhbnNwb3J0OiBhZGRU
b1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKCiAgICAgICAgLy8gTWFpbiBt
ZXRob2QKICAgICAgICBhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgewoKICAgICAgICAg
ICAgICAgIC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJl
CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zID0gdXJsOwogICAgICAgICAgICAgICAgICAgICAgICB1
cmwgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRm9y
Y2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3QKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRp
b25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIHZhciAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlv
bnMgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBqUXVlcnkuYWpheFNldHVwKCB7
fSwgb3B0aW9ucyApLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsYmFja3MgY29udGV4
dAogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwg
cywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cwog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHRoZSBjYWxsYmFja0NvbnRleHQgaWYgb25l
IHdhcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAvLyBh
bmQgaWYgaXQncyBhIERPTSBub2RlIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24KICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0gY2FsbGJhY2tDb250ZXh0ICE9PSBzICYm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBjYWxsYmFja0NvbnRleHQubm9kZVR5
cGUgfHwgY2FsbGJhY2tDb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICkgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGNhbGxiYWNrQ29udGV4
dCApIDogalF1ZXJ5LmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlcnJlZHMK
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MK
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSwK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZNb2RpZmllZCBrZXkKICAgICAgICAgICAgICAg
ICAgICAgICAgaWZNb2RpZmllZEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGVhZGVy
cyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdEhlYWRlcnMgPSB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNO
YW1lcyA9IHt9LAogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFkZXJzCiAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAvLyB0
cmFuc3BvcnQKICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LAogICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aW1lb3V0IGhhbmRsZQogICAgICAgICAgICAgICAgICAgICAgICB0aW1l
b3V0VGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyb3NzLWRvbWFpbiBkZXRlY3Rp
b24gdmFycwogICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cywKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlIGpxWEhSIHN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFy
ZSB0byBiZSBkaXNwYXRjaGVkCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVHbG9iYWxzLAog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHZhcmlhYmxlCiAgICAgICAgICAgICAgICAg
ICAgICAgIGksCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZha2UgeGhyCiAgICAgICAgICAg
ICAgICAgICAgICAgIGpxWEhSID0gewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkeVN0YXRlOiAwLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZXMg
dGhlIGhlYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFk
ZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIXN0YXRlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXF1ZXN0
SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBu
YW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBSYXcgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNl
SGVhZGVyc1N0cmluZyA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRh
YmxlIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlc3BvbnNl
SGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG1hdGNoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9
IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5n
ICkgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBd
ID0gbWF0Y2hbIDIgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0
eXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3Rh
dGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMu
bWltZVR5cGUgPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQgfHwgImFib3J0IjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHJhbnNwb3J0ICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3Bv
cnQuYWJvcnQoIHN0YXR1c1RleHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoIDAs
IHN0YXR1c1RleHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVy
eXRoaW5nIGlzIGRvbmUKICAgICAgICAgICAgICAgIC8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNh
dXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKICAgICAgICAgICAgICAgIC8v
IGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uICh3aGljaCB3b3VsZCBiZSBtb3JlIGxvZ2ljYWwg
YW5kIHJlYWRhYmxlKQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRp
dmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDYWxsZWQgb25jZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXRlID09
PSAyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgaXMgImRv
bmUiIG5vdwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9y
IGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAvLyAobm8g
bWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQogICAgICAgICAg
ICAgICAgICAgICAgICB0cmFuc3BvcnQgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgcmVhZHlTdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5yZWFk
eVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGlzU3VjY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2VzID8gYWpheEhhbmRsZVJlc3BvbnNl
cyggcywganFYSFIsIHJlc3BvbnNlcyApIDogdW5kZWZpbmVkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RNb2RpZmllZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBldGFnOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxl
IHR5cGUgY2hhaW5pbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPj0gMjAw
ICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNCApIHsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9u
ZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICggbGFzdE1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9u
c2VIZWFkZXIoICJMYXN0LU1vZGlmaWVkIiApICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRL
ZXkgXSA9IGxhc3RNb2RpZmllZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBldGFn
ID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJFdGFnIiApICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVk
S2V5IF0gPSBldGFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgbm90IG1vZGlmaWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZGF0YQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gInN1Y2Nlc3MiOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhh
dmUgYSBwYXJzZXJlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXNUZXh0ID0gInBhcnNlcmVycm9yIjsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5kIHN0YXR1
cyBmb3Igbm9uLWFib3J0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0g
c3RhdHVzVGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXN0YXR1c1Rl
eHQgfHwgc3RhdHVzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdHVzVGV4dCA9ICJlcnJvciI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHN0YXR1cyA8IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZGF0YSBmb3Ig
dGhlIGZha2UgeGhyIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXMg
PSBzdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnN0YXR1c1RleHQgPSAiIiAr
ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzL0Vycm9yCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNTdWNj
ZXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVX
aXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3Rh
dHVzVGV4dCwgZXJyb3IgXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwogICAgICAgICAgICAg
ICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGZpcmVHbG9iYWxzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
b2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNz
IiA6ICJFcnJvciIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGxldGUK
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZC5yZXNvbHZlV2l0aCggY2Fs
bGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4Q29tcGxldGUiLCBbIGpxWEhSLCBz
IF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGdsb2Jh
bCBBSkFYIGNvdW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIC0t
alF1ZXJ5LmFjdGl2ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggZGVmZXJyZWRzCiAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApOwogICAgICAgICAgICAgICAganFYSFIuc3VjY2VzcyA9
IGpxWEhSLmRvbmU7CiAgICAgICAgICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7CiAg
ICAgICAgICAgICAgICBqcVhIUi5jb21wbGV0ZSA9IGNvbXBsZXRlRGVmZXJyZWQuZG9uZTsKCiAg
ICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwogICAgICAgICAgICAg
ICAganFYSFIuc3RhdHVzQ29kZSA9IGZ1bmN0aW9uKCBtYXAgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbWFwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0
bXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIHRtcCBpbiBtYXAgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0Nv
ZGVbIHRtcCBdID0gWyBzdGF0dXNDb2RlW3RtcF0sIG1hcFt0bXBdIF07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IG1hcFsganFYSFIuc3RhdHVzIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqcVhIUi50aGVuKCB0bXAsIHRtcCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gUmVtb3Zl
IGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCiAgICAgICAgICAg
ICAgICAvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkICgjNTg2NjogSUU3IGlzc3VlIHdp
dGggcHJvdG9jb2wtbGVzcyB1cmxzKQogICAgICAgICAgICAgICAgLy8gV2UgYWxzbyB1c2UgdGhl
IHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICBzLnVybCA9ICggKCB1
cmwgfHwgcy51cmwgKSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3Rv
Y29sLCBhamF4TG9jUGFydHNbIDEgXSArICIvLyIgKTsKCiAgICAgICAgICAgICAgICAvLyBFeHRy
YWN0IGRhdGFUeXBlcyBsaXN0CiAgICAgICAgICAgICAgICBzLmRhdGFUeXBlcyA9IGpRdWVyeS50
cmltKCBzLmRhdGFUeXBlIHx8ICIqIiApLnRvTG93ZXJDYXNlKCkuc3BsaXQoIHJzcGFjZXNBamF4
ICk7CgogICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGEgY3Jvc3MtZG9tYWluIHJlcXVl
c3QgaXMgaW4gb3JkZXIKICAgICAgICAgICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxs
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJ1cmwuZXhlYyggcy51cmwudG9M
b3dlckNhc2UoKSApOwogICAgICAgICAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gISEo
IHBhcnRzICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwYXJ0c1sgMSBdICE9
IGFqYXhMb2NQYXJ0c1sgMSBdIHx8IHBhcnRzWyAyIF0gIT0gYWpheExvY1BhcnRzWyAyIF0gfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcGFydHNbIDMgXSB8fCAo
IHBhcnRzWyAxIF0gPT09ICJodHRwOiIgPyA4MCA6IDQ0MyApICkgIT0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBhamF4TG9jUGFydHNbIDMgXSB8fCAo
IGFqYXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICkKICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBD
b252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcKICAgICAgICAgICAgICAgIGlmICgg
cy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBz
LnRyYWRpdGlvbmFsICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQXBw
bHkgcHJlZmlsdGVycwogICAgICAgICAgICAgICAgaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9y
dHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CgogICAgICAgICAgICAgICAgLy8g
SWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWxlciwgc3RvcCB0aGVyZQogICAg
ICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFdlIGNh
biBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCiAgICAgICAgICAgICAg
ICBmaXJlR2xvYmFscyA9IHMuZ2xvYmFsOwoKICAgICAgICAgICAgICAgIC8vIFVwcGVyY2FzZSB0
aGUgdHlwZQogICAgICAgICAgICAgICAgcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7Cgog
ICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnQKICAgICAg
ICAgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApOwoKICAg
ICAgICAgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKICAgICAgICAg
ICAgICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNb3JlIG9wdGlvbnMgaGFuZGxp
bmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAogICAgICAgICAgICAgICAgaWYgKCAhcy5o
YXNDb250ZW50ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZGF0YSBpcyBhdmFp
bGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMu
ZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnVybCArPSAoIHJxdWVy
eS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyBzLmRhdGE7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNl
ZCBpbiBhbiBldmVudHVhbCByZXRyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBzLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEdldCBpZk1vZGlmaWVkS2V5IGJlZm9yZSBhZGRpbmcgdGhlIGFudGktY2FjaGUg
cGFyYW1ldGVyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmTW9kaWZpZWRLZXkgPSBzLnVybDsK
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBpZiBuZWVk
ZWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRzID0galF1ZXJ5Lm5vdygpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHJlcGxhY2luZyBfPSBp
ZiBpdCBpcyB0aGVyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0gcy51cmwucmVwbGFjZSggcnRzLCAiJDFfPSIgKyB0cyApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiBub3RoaW5nIHdhcyByZXBsYWNlZCwgYWRkIHRpbWVzdGFtcCB0
byB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy51cmwgPSByZXQgKyAo
IChyZXQgPT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkg
KyAiXz0iICsgdHMgOiAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0
YSBpcyBiZWluZyBzZW50CiAgICAgICAgICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRl
bnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIkNvbnRlbnQt
VHlwZSIsIHMuY29udGVudFR5cGUgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRl
ciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgogICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZp
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmTW9kaWZpZWRLZXkgPSBpZk1vZGlmaWVk
S2V5IHx8IHMudXJsOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5sYXN0TW9k
aWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFz
dE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRl
ciggIklmLU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhl
IGRhdGFUeXBlCiAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKAogICAgICAg
ICAgICAgICAgICAgICAgICAiQWNjZXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRh
VHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSArICggcy5kYXRh
VHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsgIjsgcT0wLjAxIiA6ICIiICkg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0KICAgICAg
ICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9u
CiAgICAgICAgICAgICAgICBmb3IgKCBpIGluIHMuaGVhZGVycyApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9t
aW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0CiAgICAgICAgICAgICAgICBpZiAoIHMuYmVmb3JlU2Vu
ZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09
IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpxWEhSLmFib3J0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJbnN0YWxs
IGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKICAgICAgICAgICAgICAgIGZvciAoIGkgaW4geyBzdWNj
ZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAganFYSFJbIGkgXSggc1sgaSBdICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gR2V0IHRyYW5zcG9ydAogICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gaW5zcGVjdFBy
ZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7Cgog
ICAgICAgICAgICAgICAgLy8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CiAgICAgICAg
ICAgICAgICBpZiAoICF0cmFuc3BvcnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUo
IC0xLCAiTm8gVHJhbnNwb3J0IiApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFNlbmQgZ2xvYmFsIGV2ZW50CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmly
ZUdsb2JhbHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRD
b250ZXh0LnRyaWdnZXIoICJhamF4U2VuZCIsIFsganFYSFIsIHMgXSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVvdXQKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rp
b24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLmFib3J0
KCAidGltZW91dCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzLnRpbWVv
dXQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
dHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDE7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBk
b25lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5v
dCBkb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKCAtMSwgZSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXBseSByZXRocm93IG90aGVyd2lz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIGUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKICAg
ICAgICAvLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKICAgICAgICBwYXJhbTogZnVu
Y3Rpb24oIGEsIHRyYWRpdGlvbmFsICkgewogICAgICAgICAgICAgICAgdmFyIHMgPSBbXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52
b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiB2YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJ
Q29tcG9uZW50KCBrZXkgKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBTZXQgdHJhZGl0aW9u
YWwgdG8gdHJ1ZSBmb3IgalF1ZXJ5IDw9IDEuMy4yIGJlaGF2aW9yLgogICAgICAgICAgICAgICAg
aWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwg
YXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy4KICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQ
bGFpbk9iamVjdCggYSApICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6
ZSB0aGUgZm9ybSBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCgg
YSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKCB0aGlz
Lm5hbWUsIHRoaXMudmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdHJhZGl0aW9u
YWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vy
c2l2ZWx5LgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgcHJlZml4IGluIGEgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsg
cHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5n
IHNlcmlhbGl6YXRpb24KICAgICAgICAgICAgICAgIHJldHVybiBzLmpvaW4oICImIiApLnJlcGxh
Y2UoIHIyMCwgIisiICk7CiAgICAgICAgfQp9KTsKCmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVm
aXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5
KCBvYmogKSApIHsKICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLgogICAg
ICAgICAgICAgICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4
ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgZWFjaCBhcnJh
eSBpdGVtIGFzIGEgc2NhbGFyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCgg
cHJlZml4LCB2ICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJy
YXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlz
c3Vlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgcmFjayAo
YXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBhcnJheXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5n
IHRvIGRvIHNvIG1heSBjYXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEg
c2VydmVyIGVycm9yLiBQb3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2VyaWFsaXphdGlvbiBhbGdvcml0aG0gb3Ig
dG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hhbGxvdy4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0
eXBlb2YgdiA9PT0gIm9iamVjdCIgfHwgalF1ZXJ5LmlzQXJyYXkodikgPyBpIDogIiIgKSArICJd
IiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIG9iaiAh
PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICJvYmplY3QiICkgewogICAgICAgICAgICAgICAgLy8g
U2VyaWFsaXplIG9iamVjdCBpdGVtLgogICAgICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4g
b2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsi
ICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBz
Y2FsYXIgaXRlbS4KICAgICAgICAgICAgICAgIGFkZCggcHJlZml4LCBvYmogKTsKICAgICAgICB9
Cn0KCi8vIFRoaXMgaXMgc3RpbGwgb24gdGhlIGpRdWVyeSBvYmplY3QuLi4gZm9yIG5vdwovLyBX
YW50IHRvIG1vdmUgdGhpcyB0byBqUXVlcnkuYWpheCBzb21lIGRheQpqUXVlcnkuZXh0ZW5kKHsK
CiAgICAgICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVy
aWVzCiAgICAgICAgYWN0aXZlOiAwLAoKICAgICAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBj
YWNoZSBmb3IgbmV4dCByZXF1ZXN0CiAgICAgICAgbGFzdE1vZGlmaWVkOiB7fSwKICAgICAgICBl
dGFnOiB7fQoKfSk7CgovKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6CiAq
IC0gc2V0cyBhbGwgcmVzcG9uc2VYWFggZmllbGRzIGFjY29yZGluZ2x5CiAqIC0gZmluZHMgdGhl
IHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0
ZWQgZGF0YVR5cGUpCiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQogKi8K
ZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKCiAg
ICAgICAgdmFyIGNvbnRlbnRzID0gcy5jb250ZW50cywKICAgICAgICAgICAgICAgIGRhdGFUeXBl
cyA9IHMuZGF0YVR5cGVzLAogICAgICAgICAgICAgICAgcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3Bv
bnNlRmllbGRzLAogICAgICAgICAgICAgICAgY3QsCiAgICAgICAgICAgICAgICB0eXBlLAogICAg
ICAgICAgICAgICAgZmluYWxEYXRhVHlwZSwKICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGU7
CgogICAgICAgIC8vIEZpbGwgcmVzcG9uc2VYWFggZmllbGRzCiAgICAgICAgZm9yKCB0eXBlIGlu
IHJlc3BvbnNlRmllbGRzICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlIGluIHJlc3BvbnNl
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAganFYSFJbIHJlc3BvbnNlRmllbGRzW3R5cGVd
IF0gPSByZXNwb25zZXNbIHR5cGUgXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAg
ICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBw
cm9jZXNzCiAgICAgICAgd2hpbGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7CiAgICAgICAg
ICAgICAgICBkYXRhVHlwZXMuc2hpZnQoKTsKICAgICAgICAgICAgICAgIGlmICggY3QgPT09IHVu
ZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3QgPSBzLm1pbWVUeXBlIHx8IGpx
WEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiY29udGVudC10eXBlIiApOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25v
d24gY29udGVudC10eXBlCiAgICAgICAgaWYgKCBjdCApIHsKICAgICAgICAgICAgICAgIGZvciAo
IHR5cGUgaW4gY29udGVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udGVu
dHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdl
IGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCiAgICAgICAgaWYgKCBk
YXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7CiAgICAgICAgICAgICAgICBmaW5hbERhdGFU
eXBlID0gZGF0YVR5cGVzWyAwIF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8v
IFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4g
cmVzcG9uc2VzICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFkYXRhVHlwZXNbIDAg
XSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBkYXRhVHlwZXNbMF0gXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gdHlwZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFmaXJzdERhdGFUeXBlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0eXBlOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBPciBqdXN0
IHVzZSBmaXJzdCBvbmUKICAgICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFU
eXBlIHx8IGZpcnN0RGF0YVR5cGU7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB3ZSBmb3VuZCBh
IGRhdGFUeXBlCiAgICAgICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBu
ZWVkZWQKICAgICAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCiAg
ICAgICAgaWYgKCBmaW5hbERhdGFUeXBlICkgewogICAgICAgICAgICAgICAgaWYgKCBmaW5hbERh
dGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKICAgICAgICB9Cn0K
Ci8vIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwg
cmVzcG9uc2UKZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlICkgewoKICAgICAgICAv
LyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAogICAgICAgIGlmICggcy5kYXRhRmls
dGVyICkgewogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNl
LCBzLmRhdGFUeXBlICk7CiAgICAgICAgfQoKICAgICAgICB2YXIgZGF0YVR5cGVzID0gcy5kYXRh
VHlwZXMsCiAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzID0ge30sCiAgICAgICAgICAgICAgICBp
LAogICAgICAgICAgICAgICAga2V5LAogICAgICAgICAgICAgICAgbGVuZ3RoID0gZGF0YVR5cGVz
Lmxlbmd0aCwKICAgICAgICAgICAgICAgIHRtcCwKICAgICAgICAgICAgICAgIC8vIEN1cnJlbnQg
YW5kIHByZXZpb3VzIGRhdGFUeXBlcwogICAgICAgICAgICAgICAgY3VycmVudCA9IGRhdGFUeXBl
c1sgMCBdLAogICAgICAgICAgICAgICAgcHJldiwKICAgICAgICAgICAgICAgIC8vIENvbnZlcnNp
b24gZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgY29udmVyc2lvbiwKICAgICAgICAgICAgICAg
IC8vIENvbnZlcnNpb24gZnVuY3Rpb24KICAgICAgICAgICAgICAgIGNvbnYsCiAgICAgICAgICAg
ICAgICAvLyBDb252ZXJzaW9uIGZ1bmN0aW9ucyAodHJhbnNpdGl2ZSBjb252ZXJzaW9uKQogICAg
ICAgICAgICAgICAgY29udjEsCiAgICAgICAgICAgICAgICBjb252MjsKCiAgICAgICAgLy8gRm9y
IGVhY2ggZGF0YVR5cGUgaW4gdGhlIGNoYWluCiAgICAgICAgZm9yKCBpID0gMTsgaSA8IGxlbmd0
aDsgaSsrICkgewoKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcAogICAg
ICAgICAgICAgICAgLy8gd2l0aCBsb3dlcmNhc2VkIGtleXMKICAgICAgICAgICAgICAgIGlmICgg
aSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBrZXkgaW4gcy5jb252ZXJ0
ZXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB0eXBlb2Yga2V5ID09
PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnZlcnRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGtleSBdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZGF0YVR5cGVzCiAg
ICAgICAgICAgICAgICBwcmV2ID0gY3VycmVudDsKICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBk
YXRhVHlwZXNbIGkgXTsKCiAgICAgICAgICAgICAgICAvLyBJZiBjdXJyZW50IGlzIGF1dG8gZGF0
YVR5cGUsIHVwZGF0ZSBpdCB0byBwcmV2CiAgICAgICAgICAgICAgICBpZiggY3VycmVudCA9PT0g
IioiICkgewogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcHJldjsKICAgICAgICAg
ICAgICAgIC8vIElmIG5vIGF1dG8gYW5kIGRhdGFUeXBlcyBhcmUgYWN0dWFsbHkgZGlmZmVyZW50
CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBwcmV2ICE9PSAiKiIgJiYgcHJldiAhPT0gY3Vy
cmVudCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY29udmVydGVyCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb24gPSBwcmV2ICsgIiAiICsgY3VycmVudDsK
ICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnZlcnNpb24gXSB8
fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gZGlyZWN0IGNvbnZlcnRlciwgc2VhcmNoIHRyYW5zaXRpdmVseQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb252ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnYyID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciggY29udjEgaW4gY29udmVydGVycyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRtcCA9IGNvbnYxLnNwbGl0KCAiICIgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG1wWyAwIF0gPT09IHByZXYgfHwgdG1w
WyAwIF0gPT09ICIqIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udjIgPSBjb252ZXJ0ZXJzWyB0bXBbMV0gKyAiICIgKyBjdXJyZW50IF07CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udjIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udjEgPSBjb252ZXJ0ZXJzWyBjb252MSBdOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udjEgPT09IHRydWUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb252ID0gY29udjI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29udjIgPT09IHRydWUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b252ID0gY29udjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGZvdW5kIG5vIGNvbnZlcnRlciwgZGlz
cGF0Y2ggYW4gZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCBjb252IHx8IGNv
bnYyICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAi
Tm8gY29udmVyc2lvbiBmcm9tICIgKyBjb252ZXJzaW9uLnJlcGxhY2UoIiAiLCIgdG8gIikgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBm
b3VuZCBjb252ZXJ0ZXIgaXMgbm90IGFuIGVxdWl2YWxlbmNlCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDb252ZXJ0IHdpdGggMSBvciAyIGNvbnZlcnRlcnMgYWNjb3JkaW5nbHkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYgPyBjb252KCByZXNwb25zZSAp
IDogY29udjIoIGNvbnYxKHJlc3BvbnNlKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXNwb25zZTsKfQoKCgoK
dmFyIGpzYyA9IGpRdWVyeS5ub3coKSwKICAgICAgICBqc3JlID0gLyhcPSlcPygmfCQpfFw/XD8v
aTsKCi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKalF1ZXJ5LmFqYXhTZXR1cCh7CiAgICAgICAg
anNvbnA6ICJjYWxsYmFjayIsCiAgICAgICAganNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIGpzYysrICk7CiAg
ICAgICAgfQp9KTsKCi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2Fs
bGJhY2tzIGZvciBqc29ucCByZXF1ZXN0cwpqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNv
bnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7CgogICAgICAgIHZh
ciBpbnNwZWN0RGF0YSA9IHMuY29udGVudFR5cGUgPT09ICJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQiICYmCiAgICAgICAgICAgICAgICAoIHR5cGVvZiBzLmRhdGEgPT09ICJzdHJp
bmciICk7CgogICAgICAgIGlmICggcy5kYXRhVHlwZXNbIDAgXSA9PT0gImpzb25wIiB8fAogICAg
ICAgICAgICAgICAgcy5qc29ucCAhPT0gZmFsc2UgJiYgKCBqc3JlLnRlc3QoIHMudXJsICkgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0RGF0YSAmJiBqc3JlLnRlc3Qo
IHMuZGF0YSApICkgKSB7CgogICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlQ29udGFpbmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICBqc29ucENhbGxiYWNrID0gcy5qc29ucENhbGxiYWNrID0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29u
cENhbGxiYWNrICkgPyBzLmpzb25wQ2FsbGJhY2soKSA6IHMuanNvbnBDYWxsYmFjaywKICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSB3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsID0gcy51cmwsCiAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEgPSBzLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgPSAiJDEiICsg
anNvbnBDYWxsYmFjayArICIkMiI7CgogICAgICAgICAgICAgICAgaWYgKCBzLmpzb25wICE9PSBm
YWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoIGpzcmUs
IHJlcGxhY2UgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnVybCA9PT0gdXJsICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5zcGVjdERhdGEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNl
KCBqc3JlLCByZXBsYWNlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5kYXRhID09PSBkYXRhICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGNhbGxiYWNrIG1hbnVh
bGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gKC9cPy8u
dGVzdCggdXJsICkgPyAiJiIgOiAiPyIpICsgcy5qc29ucCArICI9IiArIGpzb25wQ2FsbGJhY2s7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcy51cmwgPSB1cmw7CiAgICAg
ICAgICAgICAgICBzLmRhdGEgPSBkYXRhOwoKICAgICAgICAgICAgICAgIC8vIEluc3RhbGwgY2Fs
bGJhY2sKICAgICAgICAgICAgICAgIHdpbmRvd1sganNvbnBDYWxsYmFjayBdID0gZnVuY3Rpb24o
IHJlc3BvbnNlICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUNvbnRhaW5lciA9
IFsgcmVzcG9uc2UgXTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gQ2xl
YW4tdXAgZnVuY3Rpb24KICAgICAgICAgICAgICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNhbGxiYWNrIGJhY2sgdG8gcHJldmlvdXMg
dmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WyBqc29ucENhbGxiYWNrIF0gPSBw
cmV2aW91czsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5j
dGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHByZXZpb3VzICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WyBqc29ucENhbGxiYWNrIF0oIHJl
c3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJl
dHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvbgogICAgICAgICAgICAgICAgcy5jb252
ZXJ0ZXJzWyJzY3JpcHQganNvbiJdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5lcnJvcigganNvbnBDYWxsYmFjayArICIgd2FzIG5vdCBjYWxsZWQiICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3BvbnNlQ29udGFpbmVyWyAwIF07CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg
ICAgIC8vIGZvcmNlIGpzb24gZGF0YVR5cGUKICAgICAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAw
IF0gPSAianNvbiI7CgogICAgICAgICAgICAgICAgLy8gRGVsZWdhdGUgdG8gc2NyaXB0CiAgICAg
ICAgICAgICAgICByZXR1cm4gInNjcmlwdCI7CiAgICAgICAgfQp9KTsKCgoKCi8vIEluc3RhbGwg
c2NyaXB0IGRhdGFUeXBlCmpRdWVyeS5hamF4U2V0dXAoewogICAgICAgIGFjY2VwdHM6IHsKICAg
ICAgICAgICAgICAgIHNjcmlwdDogInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNj
cmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0Igog
ICAgICAgIH0sCiAgICAgICAgY29udGVudHM6IHsKICAgICAgICAgICAgICAgIHNjcmlwdDogL2ph
dmFzY3JpcHR8ZWNtYXNjcmlwdC8KICAgICAgICB9LAogICAgICAgIGNvbnZlcnRlcnM6IHsKICAg
ICAgICAgICAgICAgICJ0ZXh0IHNjcmlwdCI6IGZ1bmN0aW9uKCB0ZXh0ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOwogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoKLy8g
SGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKalF1ZXJ5LmFqYXhQcmVmaWx0
ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKICAgICAgICBpZiAoIHMuY2FjaGUgPT09IHVu
ZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgIHMuY2FjaGUgPSBmYWxzZTsKICAgICAgICB9CiAg
ICAgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgewogICAgICAgICAgICAgICAgcy50eXBlID0gIkdF
VCI7CiAgICAgICAgICAgICAgICBzLmdsb2JhbCA9IGZhbHNlOwogICAgICAgIH0KfSk7CgovLyBC
aW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnQKalF1ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3Jp
cHQiLCBmdW5jdGlvbihzKSB7CgogICAgICAgIC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMg
d2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7
CgogICAgICAgICAgICAgICAgdmFyIHNjcmlwdCwKICAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJoZWFk
IiApWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCiAgICAgICAgICAgICAgICByZXR1
cm4gewoKICAgICAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNr
ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCAic2NyaXB0IiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JpcHQuYXN5bmMgPSAiYXN5bmMiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmlwdC5jaGFyc2V0ID0gcy5zY3JpcHRDaGFyc2V0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
aXB0LnNyYyA9IHMudXJsOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRh
Y2ggaGFuZGxlcnMgZm9yIGFsbCBicm93c2VycwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24o
IF8sIGlzQWJvcnQgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBpc0Fib3J0IHx8ICFzY3JpcHQucmVhZHlTdGF0ZSB8fCAvbG9hZGVkfGNvbXBsZXRlLy50
ZXN0KCBzY3JpcHQucmVhZHlTdGF0ZSApICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBz
Y3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2NyaXB0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGVhZCAmJiBzY3JpcHQu
cGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWFkLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdGhlIHNjcmlwdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB1bmRl
ZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDYWxsYmFjayBpZiBub3QgYWJvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhaXNBYm9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayggMjAwLCAic3VjY2VzcyIg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGlu
c2VydEJlZm9yZSBpbnN0ZWFkIG9mIGFwcGVuZENoaWxkICB0byBjaXJjdW12ZW50IGFuIElFNiBi
dWcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhcmlzZXMgd2hlbiBh
IGJhc2Ugbm9kZSBpcyB1c2VkICgjMjcwOSBhbmQgIzQzNzgpLgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIGhlYWQuZmlyc3RDaGlsZCAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgYWJv
cnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2Ny
aXB0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9u
bG9hZCggMCwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICB9Cn0pOwoKCgoKdmFy
IC8vICM1MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUg
aWYgd2UgZG9uJ3QgYWJvcnQgb24gdW5sb2FkCiAgICAgICAgeGhyT25VbmxvYWRBYm9ydCA9IHdp
bmRvdy5BY3RpdmVYT2JqZWN0ID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBBYm9y
dCBhbGwgcGVuZGluZyByZXF1ZXN0cwogICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiB4
aHJDYWxsYmFja3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrc1sga2V5
IF0oIDAsIDEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9IDogZmFsc2UsCiAgICAgICAg
eGhySWQgPSAwLAogICAgICAgIHhockNhbGxiYWNrczsKCi8vIEZ1bmN0aW9ucyB0byBjcmVhdGUg
eGhycwpmdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHsKICAgICAgICB0cnkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICB9IGNh
dGNoKCBlICkge30KfQoKZnVuY3Rpb24gY3JlYXRlQWN0aXZlWEhSKCkgewogICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCAiTWljcm9z
b2Z0LlhNTEhUVFAiICk7CiAgICAgICAgfSBjYXRjaCggZSApIHt9Cn0KCi8vIENyZWF0ZSB0aGUg
cmVxdWVzdCBvYmplY3QKLy8gKFRoaXMgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYWpheFNldHRpbmdz
IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQpqUXVlcnkuYWpheFNldHRpbmdzLnhociA9IHdp
bmRvdy5BY3RpdmVYT2JqZWN0ID8KICAgICAgICAvKiBNaWNyb3NvZnQgZmFpbGVkIHRvIHByb3Bl
cmx5CiAgICAgICAgICogaW1wbGVtZW50IHRoZSBYTUxIdHRwUmVxdWVzdCBpbiBJRTcgKGNhbid0
IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAogICAgICAgICAqIHNvIHdlIHVzZSB0aGUgQWN0aXZlWE9i
amVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQogICAgICAgICAqIEFkZGl0aW9uYWxseSBYTUxIdHRw
UmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbwogICAgICAgICAqIHdlIG5lZWQg
YSBmYWxsYmFjay4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiAhdGhpcy5pc0xvY2FsICYmIGNyZWF0ZVN0YW5kYXJkWEhSKCkgfHwgY3JlYXRl
QWN0aXZlWEhSKCk7CiAgICAgICAgfSA6CiAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBicm93c2Vy
cywgdXNlIHRoZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVzdCBvYmplY3QKICAgICAgICBjcmVhdGVT
dGFuZGFyZFhIUjsKCi8vIERldGVybWluZSBzdXBwb3J0IHByb3BlcnRpZXMKKGZ1bmN0aW9uKCB4
aHIgKSB7CiAgICAgICAgalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnN1cHBvcnQsIHsKICAgICAgICAg
ICAgICAgIGFqYXg6ICEheGhyLAogICAgICAgICAgICAgICAgY29yczogISF4aHIgJiYgKCAid2l0
aENyZWRlbnRpYWxzIiBpbiB4aHIgKQogICAgICAgIH0pOwp9KSggalF1ZXJ5LmFqYXhTZXR0aW5n
cy54aHIoKSApOwoKLy8gQ3JlYXRlIHRyYW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlk
ZSBhbiB4aHIKaWYgKCBqUXVlcnkuc3VwcG9ydC5hamF4ICkgewoKICAgICAgICBqUXVlcnkuYWph
eFRyYW5zcG9ydChmdW5jdGlvbiggcyApIHsKICAgICAgICAgICAgICAgIC8vIENyb3NzIGRvbWFp
biBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3QKICAgICAg
ICAgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1ZXJ5LnN1cHBvcnQuY29ycyApIHsK
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjazsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVu
Y3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEdldCBhIG5ldyB4aHIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB4aHIgPSBzLnhocigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT3BlbiB0aGUgc29ja2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUsIGdlbmVyYXRlcyBhIGxvZ2luIHBv
cHVwIG9uIE9wZXJhICgjMjg2NSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcy51c2VybmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5bmMsIHMudXNlcm5h
bWUsIHMucGFzc3dvcmQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnhockZpZWxkcyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBzLnhockZpZWxk
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4aHJbIGkgXSA9IHMueGhyRmllbGRzWyBpIF07CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBP
dmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vdmVycmlk
ZU1pbWVUeXBlKCBzLm1pbWVUeXBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWC1S
ZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZv
ciBhIHByZWZsaWdodCBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJl
IHN1cmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoaXQgY2Fu
IGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhT
ZXR1cCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBzYW1l
LWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVk
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcy5jcm9zc0Rv
bWFpbiAmJiAhaGVhZGVyc1siWC1SZXF1ZXN0ZWQtV2l0aCJdICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0
aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVl
ZCBhbiBleHRyYSB0cnkvY2F0Y2ggZm9yIGNyb3NzIGRvbWFpbiByZXF1ZXN0cyBpbiBGaXJlZm94
IDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gaGVhZGVy
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIF8gKSB7fQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgdGhlIHJlcXVlc3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlv
biB3aGljaCBpcyBhY3R1YWxseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaGFuZGxlZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCggKCBzLmhhc0NvbnRl
bnQgJiYgcy5kYXRhICkgfHwgbnVsbCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIExpc3RlbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlSGVhZGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeG1sOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIGFj
Y2Vzc2luZyBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG9mIGFuIHhociB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cmVkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9oZWxw
ZnVsLmtub2JzLWRpYWxzLmNvbS9pbmRleC5waHAvQ29tcG9uZW50X3JldHVybmVkX2ZhaWx1cmVf
Y29kZTpfMHg4MDA0MDExMV8oTlNfRVJST1JfTk9UX0FWQUlMQUJMRSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FzIG5ldmVyIGNhbGxl
ZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8
IHhoci5yZWFkeVN0YXRlID09PSA0ICkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjYWxsZWQgb25jZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGtlZXAgYXMgYWN0
aXZlIGFueW1vcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub25y
ZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyT25V
bmxvYWRBYm9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgeGhyQ2FsbGJhY2tz
WyBoYW5kbGUgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3Mg
YW4gYWJvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWJvcnQg
aXQgbWFudWFsbHkgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyLnJlYWR5U3RhdGUg
IT09IDQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRl
cnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzID0ge307CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9
IHhoci5yZXNwb25zZVhNTDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCByZXNwb25zZSBs
aXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggeG1sICYmIHhtbC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5
NTggKi8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLnhtbCA9IHhtbDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMudGV4dCA9IHhoci5yZXNwb25z
ZVRleHQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRpb24gd2hl
biBhY2Nlc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdHVzVGV4dCBmb3IgZmF1bHR5IGNyb3Nz
LWRvbWFpbiByZXF1ZXN0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCgg
ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQg
Z2l2aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNU
ZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBzdGF0
dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBy
ZXF1ZXN0IGlzIGxvY2FsIGFuZCB3ZSBoYXZlIGRhdGE6IGFzc3VtZSBhIHN1Y2Nlc3MKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhh
dCdzIHRoZSBiZXN0IHdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBkbyBnaXZlbiBjdXJyZW50IGlt
cGxlbWVudGF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdHVzICYmIHMuaXNMb2NhbCAm
JiAhcy5jcm9zc0RvbWFpbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSByZXNw
b25zZXMudGV4dCA/IDIwMCA6IDQwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgLSAjMTQ1MDogc29t
ZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggc3RhdHVzID09PSAxMjIzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXR1cyA9IDIwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZmlyZWZveEFjY2Vzc0V4Y2Vw
dGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFpc0Fib3J0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoIC0xLCBmaXJlZm94QWNj
ZXNzRXhjZXB0aW9uICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDYWxsIGNvbXBsZXRlIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlcyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggc3RhdHVzLCBz
dGF0dXNUZXh0LCByZXNwb25zZXMsIHJlc3BvbnNlSGVhZGVycyApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGlmIHdlJ3JlIGluIHN5bmMgbW9kZSBvciBpdCdzIGluIGNhY2hlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaGFzIGJlZW4gcmV0cmlldmVkIGRp
cmVjdGx5IChJRTYgJiBJRTcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGZpcmUgdGhlIGNhbGxiYWNrCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmFzeW5jIHx8IHhoci5yZWFkeVN0YXRl
ID09PSA0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlID0gKyt4aHJJZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMg
Y2FsbGJhY2tzIGxpc3QgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGF0dGFjaCB0aGUgdW5sb2FkIGhhbmRsZXIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICF4aHJDYWxsYmFja3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3MgPSB7fTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeSggd2luZG93ICkudW5sb2FkKCB4aHJPblVubG9hZEFib3J0ICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0byBsaXN0
IG9mIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrc1sgaGFuZGxlIF0gPSBjYWxsYmFj
azsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0
YXRlY2hhbmdlID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soMCwxKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgfSk7Cn0KCgoKCnZhciBlbGVtZGlzcGxheSA9IHt9LAogICAgICAgIGlmcmFtZSwgaWZyYW1l
RG9jLAogICAgICAgIHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLAogICAgICAg
IHJmeG51bSA9IC9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksCiAgICAgICAgdGlt
ZXJJZCwKICAgICAgICBmeEF0dHJzID0gWwogICAgICAgICAgICAgICAgLy8gaGVpZ2h0IGFuaW1h
dGlvbnMKICAgICAgICAgICAgICAgIFsgImhlaWdodCIsICJtYXJnaW5Ub3AiLCAibWFyZ2luQm90
dG9tIiwgInBhZGRpbmdUb3AiLCAicGFkZGluZ0JvdHRvbSIgXSwKICAgICAgICAgICAgICAgIC8v
IHdpZHRoIGFuaW1hdGlvbnMKICAgICAgICAgICAgICAgIFsgIndpZHRoIiwgIm1hcmdpbkxlZnQi
LCAibWFyZ2luUmlnaHQiLCAicGFkZGluZ0xlZnQiLCAicGFkZGluZ1JpZ2h0IiBdLAogICAgICAg
ICAgICAgICAgLy8gb3BhY2l0eSBhbmltYXRpb25zCiAgICAgICAgICAgICAgICBbICJvcGFjaXR5
IiBdCiAgICAgICAgXSwKICAgICAgICBmeE5vdzsKCmpRdWVyeS5mbi5leHRlbmQoewogICAgICAg
IHNob3c6IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAgICAgICAg
ICAgIHZhciBlbGVtLCBkaXNwbGF5OwoKICAgICAgICAgICAgICAgIGlmICggc3BlZWQgfHwgc3Bl
ZWQgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUo
IGdlbkZ4KCJzaG93IiwgMyksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKCiAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGog
PSB0aGlzLmxlbmd0aDsgaSA8IGo7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtID0gdGhpc1tpXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBlbGVtLnN0eWxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50
IHRvIGxlYXJuIGlmIGl0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVsZXMgb3Igbm90CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRp
c3BsYXkiKSAmJiBkaXNwbGF5ID09PSAibm9uZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgPSAi
IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZWxlbWVudHMgd2hpY2ggaGF2ZSBi
ZWVuIG92ZXJyaWRkZW4gd2l0aCBkaXNwbGF5OiBub25lCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1
bHQgYnJvd3NlciBzdHlsZSBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAiIiAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxh
eSIgKSA9PT0gIm5vbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRpc3BsYXkiLCBkZWZhdWx0RGlzcGxh
eShlbGVtLm5vZGVOYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9z
dCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAogICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CiAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0gPSB0aGlzW2ldOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGVsZW0uc3R5bGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gIiIgfHwgZGlzcGxheSA9PT0gIm5vbmUiICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0
eWxlLmRpc3BsYXkgPSBqUXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRpc3BsYXkiKSB8fCAiIjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAg
ICAgIGhpZGU6IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAgICAg
ICAgICAgIGlmICggc3BlZWQgfHwgc3BlZWQgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIGdlbkZ4KCJoaWRlIiwgMyksIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIGogPSB0aGlzLmxlbmd0aDsgaSA8IGo7IGkrKyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbaV0uc3R5bGUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzcGxheSA9IGpRdWVyeS5j
c3MoIHRoaXNbaV0sICJkaXNwbGF5IiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZGlzcGxheSAhPT0gIm5vbmUiICYmICFqUXVlcnkuX2RhdGEoIHRoaXNb
aV0sICJvbGRkaXNwbGF5IiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIHRoaXNbaV0sICJvbGRkaXNwbGF5IiwgZGlzcGxh
eSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBh
IHNlY29uZCBsb29wCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIHRoZSBjb25z
dGFudCByZWZsb3cKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBqOyBp
KysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzW2ldLnN0eWxl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tpXS5zdHls
ZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gU2F2ZSB0aGUgb2xk
IHRvZ2dsZSBmdW5jdGlvbgogICAgICAgIF90b2dnbGU6IGpRdWVyeS5mbi50b2dnbGUsCgogICAg
ICAgIHRvZ2dsZTogZnVuY3Rpb24oIGZuLCBmbjIsIGNhbGxiYWNrICkgewogICAgICAgICAgICAg
ICAgdmFyIGJvb2wgPSB0eXBlb2YgZm4gPT09ICJib29sZWFuIjsKCiAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKGZuKSAmJiBqUXVlcnkuaXNGdW5jdGlvbihmbjIpICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50
cyApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGZuID09IG51bGwgfHwgYm9vbCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IGJvb2wgPyBmbiA6IGpRdWVyeSh0aGlz
KS5pcygiOmhpZGRlbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0
aGlzKVsgc3RhdGUgPyAic2hvdyIgOiAiaGlkZSIgXSgpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmFuaW1hdGUoZ2VuRngoInRvZ2dsZSIsIDMpLCBmbiwgZm4yLCBjYWxsYmFjayk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAg
ICAgICAgZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKCI6aGlkZGVuIikuY3NzKCJvcGFjaXR5
IiwgMCkuc2hvdygpLmVuZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuYW5pbWF0ZSh7b3BhY2l0eTogdG99LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7CiAgICAg
ICAgfSwKCiAgICAgICAgYW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICkgewogICAgICAgICAgICAgICAgdmFyIG9wdGFsbCA9IGpRdWVyeS5zcGVlZChzcGVl
ZCwgZWFzaW5nLCBjYWxsYmFjayk7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0
eU9iamVjdCggcHJvcCApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKCBvcHRhbGwuY29tcGxldGUsIFsgZmFsc2UgXSApOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIC8vIERvIG5vdCBjaGFuZ2UgcmVmZXJlbmNlZCBwcm9wZXJ0aWVzIGFzIHBl
ci1wcm9wZXJ0eSBlYXNpbmcgd2lsbCBiZSBsb3N0CiAgICAgICAgICAgICAgICBwcm9wID0galF1
ZXJ5LmV4dGVuZCgge30sIHByb3AgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1sgb3B0
YWxsLnF1ZXVlID09PSBmYWxzZSA/ICJlYWNoIiA6ICJxdWV1ZSIgXShmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gWFhYICd0aGlzJyBkb2VzIG5vdCBhbHdheXMgaGF2ZSBh
IG5vZGVOYW1lIHdoZW4gcnVubmluZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVz
dCBzdWl0ZQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRhbGwucXVldWUgPT09IGZh
bHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fbWFyayggdGhp
cyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgb3B0ID0galF1ZXJ5LmV4dGVuZCgge30sIG9wdGFsbCApLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzRWxlbWVudCA9IHRoaXMubm9kZVR5cGUgPT09IDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGlkZGVuID0gaXNFbGVtZW50ICYmIGpRdWVyeSh0aGlzKS5p
cygiOmhpZGRlbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHZhbCwg
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LCBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLCBzdGFydCwgZW5kLCB1bml0OwoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2lsbCBzdG9yZSBwZXIgcHJvcGVydHkgZWFzaW5nIGFuZCBiZSB1
c2VkIHRvIGRldGVybWluZSB3aGVuIGFuIGFuaW1hdGlvbiBpcyBjb21wbGV0ZQogICAgICAgICAg
ICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9wZXJ0aWVzID0ge307CgogICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBwIGluIHByb3AgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHByb3BlcnR5IG5hbWUgbm9ybWFsaXphdGlvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBwICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBwICE9PSBuYW1lICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvcFsgbmFtZSBdID0gcHJvcFsgcCBdOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHByb3BbIHAgXTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbCA9IHByb3BbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZWFzaW5nIHJlc29sdXRpb246IHBlciBwcm9wZXJ0eSA+IG9wdC5zcGVjaWFsRWFzaW5nID4gb3B0
LmVhc2luZyA+ICdzd2luZycgKGRlZmF1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9wZXJ0aWVzWyBuYW1lIF0gPSB2YWxbIDEg
XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHByb3BbIG5h
bWUgXSA9IHZhbFsgMCBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9w
ZXJ0aWVzWyBuYW1lIF0gPSBvcHQuc3BlY2lhbEVhc2luZyAmJiBvcHQuc3BlY2lhbEVhc2luZ1sg
bmFtZSBdIHx8IG9wdC5lYXNpbmcgfHwgJ3N3aW5nJzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsID09PSAi
aGlkZSIgJiYgaGlkZGVuIHx8IHZhbCA9PT0gInNob3ciICYmICFoaWRkZW4gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0LmNvbXBsZXRlLmNhbGwo
IHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaXNFbGVtZW50ICYmICggbmFtZSA9PT0gImhlaWdodCIg
fHwgbmFtZSA9PT0gIndpZHRoIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0
cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93
WCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93
WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHQub3ZlcmZsb3cgPSBbIHRoaXMuc3R5bGUub3ZlcmZsb3csIHRoaXMuc3R5
bGUub3ZlcmZsb3dYLCB0aGlzLnN0eWxlLm92ZXJmbG93WSBdOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1i
bG9jayBmb3IgaGVpZ2h0L3dpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lk
dGgvaGVpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmlt
YXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
Y3NzKCB0aGlzLCAiZGlzcGxheSIgKSA9PT0gImlubGluZSIgJiYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCB0aGlzLCAi
ZmxvYXQiICkgPT09ICJub25lIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91
dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGRlZmF1
bHREaXNwbGF5KCB0aGlzLm5vZGVOYW1lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlubGluZS1sZXZlbCBlbGVtZW50cyBhY2Nl
cHQgaW5saW5lLWJsb2NrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGJsb2NrLWxldmVsIGVsZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5l
IHdpdGggbGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAiaW5saW5lIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5
bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5k
aXNwbGF5ID0gImlubGluZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLnpvb20gPSAxOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBvcHQub3ZlcmZsb3cgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHAgaW4gcHJvcCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IGpRdWVyeS5meCggdGhpcywgb3B0LCBwICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcHJvcFsgcCBdOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJmeHR5cGVzLnRlc3QodmFsKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbIHZhbCA9PT0gInRvZ2dsZSIg
PyBoaWRkZW4gPyAic2hvdyIgOiAiaGlkZSIgOiB2YWwgXSgpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydHMgPSByZnhudW0uZXhlYyggdmFsICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydCA9IGUuY3VyKCk7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBwYXJ0cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcGFyc2VGbG9hdCggcGFydHNbMl0gKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCA9IHBhcnRz
WzNdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcCBdID8gIiIgOiAicHgiICk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbXB1
dGUgc3RhcnRpbmcgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB1bml0ICE9PSAicHgiICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggdGhpcywgcCwgKGVu
ZCB8fCAxKSArIHVuaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gKChlbmQgfHwgMSkgLyBlLmN1cigpKSAqIHN0YXJ0Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5zdHlsZSggdGhpcywgcCwgc3RhcnQgKyB1bml0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSArPS8tPSB0b2tlbiB3YXMgcHJvdmlkZWQsIHdl
J3JlIGRvaW5nIGEgcmVsYXRpdmUgYW5pbWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFydHNbMV0gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gKCAocGFydHNbIDEg
XSA9PT0gIi09IiA/IC0xIDogMSkgKiBlbmQgKSArIHN0YXJ0OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlLmN1c3RvbSggc3RhcnQsIGVuZCwgdW5pdCApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VzdG9tKCBzdGFydCwgdmFs
LCAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIEpTIHN0cmljdCBjb21wbGlhbmNlCiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
fSwKCiAgICAgICAgc3RvcDogZnVuY3Rpb24oIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CiAgICAg
ICAgICAgICAgICBpZiAoIGNsZWFyUXVldWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMucXVldWUoW10pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZWFj
aChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVycyA9IGpRdWVy
eS50aW1lcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHRpbWVycy5sZW5n
dGg7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIG1hcmtlciBjb3VudGVycyBpZiB3
ZSBrbm93IHRoZXkgd29uJ3QgYmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZ290b0Vu
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX3VubWFyayggdHJ1
ZSwgdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggaS0tICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dGltZXJzW2ldLmVsZW0gPT09IHRoaXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZ290b0VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmb3JjZSB0aGUgbmV4dCBzdGVwIHRvIGJlIHRoZSBsYXN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyc1tpXSh0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKGksIDEpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gc3RhcnQgdGhlIG5leHQgaW4g
dGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAogICAgICAgICAgICAgICAg
aWYgKCAhZ290b0VuZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXF1ZXVlKCk7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
fQoKfSk7CgovLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5j
aHJvbm91c2x5CmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgewogICAgICAgIHNldFRpbWVvdXQoIGNs
ZWFyRnhOb3csIDAgKTsKICAgICAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5ub3coKSApOwp9
CgpmdW5jdGlvbiBjbGVhckZ4Tm93KCkgewogICAgICAgIGZ4Tm93ID0gdW5kZWZpbmVkOwp9Cgov
LyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvbgpmdW5j
dGlvbiBnZW5GeCggdHlwZSwgbnVtICkgewogICAgICAgIHZhciBvYmogPSB7fTsKCiAgICAgICAg
alF1ZXJ5LmVhY2goIGZ4QXR0cnMuY29uY2F0LmFwcGx5KFtdLCBmeEF0dHJzLnNsaWNlKDAsbnVt
KSksIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgb2JqWyB0aGlzIF0gPSB0eXBlOwogICAg
ICAgIH0pOwoKICAgICAgICByZXR1cm4gb2JqOwp9CgovLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9y
IGN1c3RvbSBhbmltYXRpb25zCmpRdWVyeS5lYWNoKHsKICAgICAgICBzbGlkZURvd246IGdlbkZ4
KCJzaG93IiwgMSksCiAgICAgICAgc2xpZGVVcDogZ2VuRngoImhpZGUiLCAxKSwKICAgICAgICBz
bGlkZVRvZ2dsZTogZ2VuRngoInRvZ2dsZSIsIDEpLAogICAgICAgIGZhZGVJbjogeyBvcGFjaXR5
OiAic2hvdyIgfSwKICAgICAgICBmYWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LAogICAgICAg
IGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfQp9LCBmdW5jdGlvbiggbmFtZSwgcHJv
cHMgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2lu
ZywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9w
cywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKICAgICAgICB9Owp9KTsKCmpRdWVyeS5leHRl
bmQoewogICAgICAgIHNwZWVkOiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7CiAgICAg
ICAgICAgICAgICB2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/
IGpRdWVyeS5leHRlbmQoe30sIHNwZWVkKSA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29t
cGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgZHVyYXRpb246IHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICBlYXNpbmc6
IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKGVhc2luZykgJiYg
ZWFzaW5nCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIG9wdC5kdXJhdGlvbiA9
IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gIm51bWJlciIgPyBv
cHQuZHVyYXRpb24gOgogICAgICAgICAgICAgICAgICAgICAgICBvcHQuZHVyYXRpb24gaW4galF1
ZXJ5LmZ4LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNbb3B0LmR1cmF0aW9uXSA6IGpRdWVyeS5m
eC5zcGVlZHMuX2RlZmF1bHQ7CgogICAgICAgICAgICAgICAgLy8gUXVldWVpbmcKICAgICAgICAg
ICAgICAgIG9wdC5vbGQgPSBvcHQuY29tcGxldGU7CiAgICAgICAgICAgICAgICBvcHQuY29tcGxl
dGUgPSBmdW5jdGlvbiggbm9Vbm1hcmsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHQucXVldWUgIT09IGZhbHNlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5vVW5tYXJrICE9PSBmYWxzZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX3VubWFyayggdGhpcyApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAg
IHJldHVybiBvcHQ7CiAgICAgICAgfSwKCiAgICAgICAgZWFzaW5nOiB7CiAgICAgICAgICAgICAg
ICBsaW5lYXI6IGZ1bmN0aW9uKCBwLCBuLCBmaXJzdE51bSwgZGlmZiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZpcnN0TnVtICsgZGlmZiAqIHA7CiAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgc3dpbmc6IGZ1bmN0aW9uKCBwLCBuLCBmaXJzdE51bSwgZGlmZiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoLU1hdGguY29zKHAqTWF0aC5QSSkv
MikgKyAwLjUpICogZGlmZiArIGZpcnN0TnVtOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0s
CgogICAgICAgIHRpbWVyczogW10sCgogICAgICAgIGZ4OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9u
cywgcHJvcCApIHsKICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICAg
ICAgICAgICAgICB0aGlzLmVsZW0gPSBlbGVtOwogICAgICAgICAgICAgICAgdGhpcy5wcm9wID0g
cHJvcDsKCiAgICAgICAgICAgICAgICBvcHRpb25zLm9yaWcgPSBvcHRpb25zLm9yaWcgfHwge307
CiAgICAgICAgfQoKfSk7CgpqUXVlcnkuZngucHJvdG90eXBlID0gewogICAgICAgIC8vIFNpbXBs
ZSBmdW5jdGlvbiBmb3Igc2V0dGluZyBhIHN0eWxlIHZhbHVlCiAgICAgICAgdXBkYXRlOiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhp
cy5ub3csIHRoaXMgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAoalF1ZXJ5
LmZ4LnN0ZXBbdGhpcy5wcm9wXSB8fCBqUXVlcnkuZnguc3RlcC5fZGVmYXVsdCkoIHRoaXMgKTsK
ICAgICAgICB9LAoKICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc2l6ZQogICAgICAgIGN1cjog
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuZWxlbVt0aGlzLnByb3BdICE9
IG51bGwgJiYgKCF0aGlzLmVsZW0uc3R5bGUgfHwgdGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF0g
PT0gbnVsbCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1bIHRo
aXMucHJvcCBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBwYXJzZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBqUXVlcnkuY3NzKCB0aGlzLmVsZW0sIHRoaXMu
cHJvcCApOwogICAgICAgICAgICAgICAgLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVk
IGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLAogICAgICAgICAgICAgICAgLy8gY29tcGxl
eCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFyYWQpIiBhcmUgcmV0dXJuZWQgYXMgaXMsCiAgICAg
ICAgICAgICAgICAvLyBzaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8g
RmxvYXQuCiAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4oIHBhcnNlZCA9IHBhcnNlRmxvYXQo
IHIgKSApID8gIXIgfHwgciA9PT0gImF1dG8iID8gMCA6IHIgOiBwYXJzZWQ7CiAgICAgICAgfSwK
CiAgICAgICAgLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyb20gb25lIG51bWJlciB0byBhbm90aGVy
CiAgICAgICAgY3VzdG9tOiBmdW5jdGlvbiggZnJvbSwgdG8sIHVuaXQgKSB7CiAgICAgICAgICAg
ICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGZ4ID0galF1ZXJ5
LmZ4OwoKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhO
b3coKTsKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBmcm9tOwogICAgICAgICAgICAgICAg
dGhpcy5lbmQgPSB0bzsKICAgICAgICAgICAgICAgIHRoaXMudW5pdCA9IHVuaXQgfHwgdGhpcy51
bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgdGhpcy5wcm9wIF0gPyAiIiA6ICJweCIgKTsKICAg
ICAgICAgICAgICAgIHRoaXMubm93ID0gdGhpcy5zdGFydDsKICAgICAgICAgICAgICAgIHRoaXMu
cG9zID0gdGhpcy5zdGF0ZSA9IDA7CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gdCggZ290b0Vu
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RlcChnb3RvRW5kKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0LmVsZW0gPSB0aGlzLmVsZW07Cgog
ICAgICAgICAgICAgICAgaWYgKCB0KCkgJiYgalF1ZXJ5LnRpbWVycy5wdXNoKHQpICYmICF0aW1l
cklkICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aW1lcklkID0gc2V0SW50ZXJ2YWwoIGZ4
LnRpY2ssIGZ4LmludGVydmFsICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gU2ltcGxlICdzaG93JyBmdW5jdGlvbgogICAgICAgIHNob3c6IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZCwgc28gdGhhdCB3ZSBj
YW4gZ28gYmFjayB0byBpdCBsYXRlcgogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9yaWdb
dGhpcy5wcm9wXSA9IGpRdWVyeS5zdHlsZSggdGhpcy5lbGVtLCB0aGlzLnByb3AgKTsKICAgICAg
ICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvLyBC
ZWdpbiB0aGUgYW5pbWF0aW9uCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBz
dGFydCBhdCBhIHNtYWxsIHdpZHRoL2hlaWdodCB0byBhdm9pZCBhbnkKICAgICAgICAgICAgICAg
IC8vIGZsYXNoIG9mIGNvbnRlbnQKICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tKHRoaXMucHJv
cCA9PT0gIndpZHRoIiB8fCB0aGlzLnByb3AgPT09ICJoZWlnaHQiID8gMSA6IDAsIHRoaXMuY3Vy
KCkpOwoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGJ5IHNob3dpbmcgdGhlIGVsZW1lbnQKICAg
ICAgICAgICAgICAgIGpRdWVyeSggdGhpcy5lbGVtICkuc2hvdygpOwogICAgICAgIH0sCgogICAg
ICAgIC8vIFNpbXBsZSAnaGlkZScgZnVuY3Rpb24KICAgICAgICBoaWRlOiBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0ZWQsIHNvIHRoYXQgd2Ug
Y2FuIGdvIGJhY2sgdG8gaXQgbGF0ZXIKICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vcmln
W3RoaXMucHJvcF0gPSBqUXVlcnkuc3R5bGUoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7CiAgICAg
ICAgICAgICAgICB0aGlzLm9wdGlvbnMuaGlkZSA9IHRydWU7CgogICAgICAgICAgICAgICAgLy8g
QmVnaW4gdGhlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAgdGhpcy5jdXN0b20odGhpcy5jdXIo
KSwgMCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRWFjaCBzdGVwIG9mIGFuIGFuaW1hdGlvbgog
ICAgICAgIHN0ZXA6IGZ1bmN0aW9uKCBnb3RvRW5kICkgewogICAgICAgICAgICAgICAgdmFyIHQg
PSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAogICAgICAgICAgICAgICAgICAgICAgICBkb25lID0g
dHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXMuZWxlbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywKICAgICAgICAgICAgICAgICAg
ICAgICAgaSwgbjsKCiAgICAgICAgICAgICAgICBpZiAoIGdvdG9FbmQgfHwgdCA+PSBvcHRpb25z
LmR1cmF0aW9uICsgdGhpcy5zdGFydFRpbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMubm93ID0gdGhpcy5lbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gdGhp
cy5zdGF0ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7CgogICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllc1sgdGhpcy5wcm9w
IF0gPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBvcHRpb25zLmFu
aW1hdGVkUHJvcGVydGllcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzW2ldICE9PSB0cnVlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkb25lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFJlc2V0IHRoZSBvdmVyZmxvdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggb3B0aW9ucy5vdmVyZmxvdyAhPSBudWxsICYmICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFw
QmxvY2tzICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5lYWNoKCBbICIiLCAiWCIsICJZIiBdLCBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGVbICJv
dmVyZmxvdyIgKyB2YWx1ZSBdID0gb3B0aW9ucy5vdmVyZmxvd1tpbmRleF07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZGUgdGhlIGVs
ZW1lbnQgaWYgdGhlICJoaWRlIiBvcGVyYXRpb24gd2FzIGRvbmUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMuaGlkZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeShlbGVtKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNl
dCB0aGUgcHJvcGVydGllcywgaWYgdGhlIGl0ZW0gaGFzIGJlZW4gaGlkZGVuIG9yIHNob3duCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLmhpZGUgfHwgb3B0aW9u
cy5zaG93ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIHAgaW4gb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXMgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcCwgb3B0
aW9ucy5vcmlnW3BdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb21wbGV0ZSBmdW5jdGlvbgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcGxldGUuY2FsbCggZWxlbSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xh
c3NpY2FsIGVhc2luZyBjYW5ub3QgYmUgdXNlZCB3aXRoIGFuIEluZmluaXR5IGR1cmF0aW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5kdXJhdGlvbiA9PSBJbmZpbml0eSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IHQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
biA9IHQgLSB0aGlzLnN0YXJ0VGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnN0YXRlID0gbiAvIG9wdGlvbnMuZHVyYXRpb247CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFBlcmZvcm0gdGhlIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVsdHMgdG8gc3dp
bmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IGpRdWVyeS5lYXNp
bmdbIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzWyB0aGlzLnByb3AgXSBdKCB0aGlzLnN0YXRl
LCBuLCAwLCAxLCBvcHRpb25zLmR1cmF0aW9uICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5ub3cgPSB0aGlzLnN0YXJ0ICsgKCh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpICog
dGhpcy5wb3MpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFBlcmZvcm0gdGhlIG5leHQgc3RlcCBvZiB0aGUgYW5pbWF0aW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQp9OwoKalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmZ4
LCB7CiAgICAgICAgdGljazogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
dGltZXJzID0galF1ZXJ5LnRpbWVycywgaSA9IDAgOyBpIDwgdGltZXJzLmxlbmd0aCA7ICsraSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGltZXJzW2ldKCkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZShpLS0sIDEpOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAh
dGltZXJzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0b3Ao
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBpbnRlcnZhbDogMTMsCgog
ICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCgg
dGltZXJJZCApOwogICAgICAgICAgICAgICAgdGltZXJJZCA9IG51bGw7CiAgICAgICAgfSwKCiAg
ICAgICAgc3BlZWRzOiB7CiAgICAgICAgICAgICAgICBzbG93OiA2MDAsCiAgICAgICAgICAgICAg
ICBmYXN0OiAyMDAsCiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHNwZWVkCiAgICAgICAgICAg
ICAgICBfZGVmYXVsdDogNDAwCiAgICAgICAgfSwKCiAgICAgICAgc3RlcDogewogICAgICAgICAg
ICAgICAgb3BhY2l0eTogZnVuY3Rpb24oIGZ4ICkgewogICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuc3R5bGUoIGZ4LmVsZW0sICJvcGFjaXR5IiwgZngubm93ICk7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIF9kZWZhdWx0OiBmdW5jdGlvbiggZnggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZnguZWxlbS5zdHlsZSAmJiBmeC5lbGVtLnN0eWxlWyBmeC5w
cm9wIF0gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeC5lbGVt
LnN0eWxlWyBmeC5wcm9wIF0gPSAoZngucHJvcCA9PT0gIndpZHRoIiB8fCBmeC5wcm9wID09PSAi
aGVpZ2h0IiA/IE1hdGgubWF4KDAsIGZ4Lm5vdykgOiBmeC5ub3cpICsgZngudW5pdDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmeC5lbGVtWyBmeC5wcm9wIF0gPSBmeC5ub3c7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoKaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVl
cnkuZXhwci5maWx0ZXJzICkgewogICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQg
PSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChq
UXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtID09PSBmbi5lbGVtOwogICAgICAgICAgICAgICAgfSkubGVuZ3RoOwogICAgICAg
IH07Cn0KCi8vIFRyeSB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGRpc3BsYXkgdmFsdWUgb2YgYW4g
ZWxlbWVudApmdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CgogICAgICAgIGlm
ICggIWVsZW1kaXNwbGF5WyBub2RlTmFtZSBdICkgewoKICAgICAgICAgICAgICAgIHZhciBib2R5
ID0gZG9jdW1lbnQuYm9keSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGpRdWVyeSgg
IjwiICsgbm9kZU5hbWUgKyAiPiIgKS5hcHBlbmRUbyggYm9keSApLAogICAgICAgICAgICAgICAg
ICAgICAgICBkaXNwbGF5ID0gZWxlbS5jc3MoICJkaXNwbGF5IiApOwoKICAgICAgICAgICAgICAg
IGVsZW0ucmVtb3ZlKCk7CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHNpbXBsZSB3YXkgZmFp
bHMsCiAgICAgICAgICAgICAgICAvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5
IGJ5IGF0dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCiAgICAgICAgICAgICAgICBpZiAoIGRp
c3BsYXkgPT09ICJub25lIiB8fCBkaXNwbGF5ID09PSAiIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTm8gaWZyYW1lIHRvIHVzZSB5ZXQsIHNvIGNyZWF0ZSBpdAogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFpZnJhbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlmcmFtZSIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUuZnJhbWVCb3JkZXIgPSBpZnJhbWUud2lkdGgg
PSBpZnJhbWUuaGVpZ2h0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZCggaWZyYW1lICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDcmVhdGUgYSBjYWNoZWFibGUgY29weSBvZiB0aGUgaWZyYW1lIGRvY3Vt
ZW50IG9uIGZpcnN0IGNhbGwuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGFuZCBPcGVy
YSB3aWxsIGFsbG93IHVzIHRvIHJldXNlIHRoZSBpZnJhbWVEb2Mgd2l0aG91dCByZS13cml0aW5n
IHRoZSBmYWtlIEhUTUwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9jdW1lbnQgdG8gaXQ7
IFdlYktpdCAmIEZpcmVmb3ggd29uJ3QgYWxsb3cgcmV1c2luZyB0aGUgaWZyYW1lIGRvY3VtZW50
LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpZnJhbWVEb2MgfHwgIWlmcmFtZS5jcmVh
dGVFbGVtZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZURvYyA9
ICggaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVudCApLmRvY3Vt
ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZURvYy53cml0ZSggKCBk
b2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIgPyAiPCFkb2N0eXBlIGh0bWw+IiA6
ICIiICkgKyAiPGh0bWw+PGJvZHk+IiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmcmFtZURvYy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtID0gaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICk7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2MuYm9keS5hcHBlbmRDaGlsZCggZWxl
bSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0s
ICJkaXNwbGF5IiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgYm9keS5yZW1vdmVDaGlsZCgg
aWZyYW1lICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhl
IGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5CiAgICAgICAgICAgICAgICBlbGVtZGlzcGxheVsgbm9k
ZU5hbWUgXSA9IGRpc3BsYXk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZWxlbWRpc3BsYXlb
IG5vZGVOYW1lIF07Cn0KCgoKCnZhciBydGFibGUgPSAvXnQoPzphYmxlfGR8aCkkL2ksCiAgICAg
ICAgcnJvb3QgPSAvXig/OmJvZHl8aHRtbCkkL2k7CgppZiAoICJnZXRCb3VuZGluZ0NsaWVudFJl
Y3QiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCApIHsKICAgICAgICBqUXVlcnkuZm4ub2Zm
c2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRo
aXNbMF0sIGJveDsKCiAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlv
bnMsIGkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCAhZWxlbS5vd25lckRvY3VtZW50ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5ib2R5ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm9mZnNldC5ib2R5T2Zmc2V0KCBlbGVt
ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZSkge30KCiAgICAgICAgICAgICAgICB2YXIgZG9jID0gZWxlbS5vd25l
ckRvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50
RWxlbWVudDsKCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UncmUgbm90IGRlYWxpbmcg
d2l0aCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZQogICAgICAgICAgICAgICAgaWYgKCAhYm94IHx8
ICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGJveCA/IHsgdG9wOiBib3gudG9wLCBsZWZ0OiBib3gubGVmdCB9IDogeyB0
b3A6IDAsIGxlZnQ6IDAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIg
Ym9keSA9IGRvYy5ib2R5LAogICAgICAgICAgICAgICAgICAgICAgICB3aW4gPSBnZXRXaW5kb3co
ZG9jKSwKICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50VG9wICA9IGRvY0VsZW0uY2xpZW50
VG9wICB8fCBib2R5LmNsaWVudFRvcCAgfHwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgY2xp
ZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wICA9IHdpbi5wYWdlWU9mZnNldCB8fCBqUXVl
cnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBkb2NFbGVtLnNjcm9sbFRvcCAgfHwgYm9keS5zY3JvbGxU
b3AsCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQg
fHwgalF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgZG9jRWxlbS5zY3JvbGxMZWZ0IHx8IGJvZHku
c2Nyb2xsTGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgdG9wICA9IGJveC50b3AgICsgc2Ny
b2xsVG9wICAtIGNsaWVudFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGJveC5s
ZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIHsg
dG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKICAgICAgICB9OwoKfSBlbHNlIHsKICAgICAgICBqUXVl
cnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICB2YXIg
ZWxlbSA9IHRoaXNbMF07CgogICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBv
cHRpb25zLCBpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gfHwgIWVsZW0ub3duZXJEb2N1bWVudCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQuYm9keSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCgg
ZWxlbSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQu
aW5pdGlhbGl6ZSgpOwoKICAgICAgICAgICAgICAgIHZhciBjb21wdXRlZFN0eWxlLAogICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldk9mZnNldFBhcmVudCA9IGVsZW0sCiAgICAgICAgICAgICAg
ICAgICAgICAgIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
IGJvZHkgPSBkb2MuYm9keSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZpZXcgPSBk
b2MuZGVmYXVsdFZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDb21wdXRlZFN0eWxl
ID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxs
ICkgOiBlbGVtLmN1cnJlbnRTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gZWxl
bS5vZmZzZXRUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBlbGVtLm9mZnNldExl
ZnQ7CgogICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYg
ZWxlbSAhPT0gYm9keSAmJiBlbGVtICE9PSBkb2NFbGVtICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuc3VwcG9ydHNGaXhlZFBvc2l0aW9uICYmIHByZXZDb21w
dXRlZFN0eWxlLnBvc2l0aW9uID09PSAiZml4ZWQiICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRD
b21wdXRlZFN0eWxlKGVsZW0sIG51bGwpIDogZWxlbS5jdXJyZW50U3R5bGU7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHRvcCAgLT0gZWxlbS5zY3JvbGxUb3A7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQgLT0gZWxlbS5zY3JvbGxMZWZ0OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBlbGVtID09PSBvZmZzZXRQYXJlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9wICArPSBlbGVtLm9mZnNldFRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0ICs9IGVsZW0ub2Zmc2V0TGVmdDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkub2Zmc2V0LmRvZXNOb3RBZGRCb3JkZXIgJiYgIShqUXVlcnkub2Zmc2V0
LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzICYmIHJ0YWJsZS50ZXN0KGVsZW0ubm9kZU5h
bWUpKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgKz0g
cGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCAgKSB8fCAwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBwYXJzZUZsb2F0KCBjb21w
dXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2T2Zmc2V0UGFy
ZW50ID0gb2Zmc2V0UGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuc3VidHJhY3RzQm9yZGVy
Rm9yT3ZlcmZsb3dOb3RWaXNpYmxlICYmIGNvbXB1dGVkU3R5bGUub3ZlcmZsb3cgIT09ICJ2aXNp
YmxlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxv
YXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGggICkgfHwgMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVy
TGVmdFdpZHRoICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldkNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24g
PT09ICJyZWxhdGl2ZSIgfHwgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICJzdGF0aWMi
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IGJvZHkub2Zmc2V0VG9wOwogICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IGJvZHkub2Zmc2V0TGVmdDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuc3VwcG9ydHNGaXhlZFBv
c2l0aW9uICYmIHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAiZml4ZWQiICkgewogICAg
ICAgICAgICAgICAgICAgICAgICB0b3AgICs9IE1hdGgubWF4KCBkb2NFbGVtLnNjcm9sbFRvcCwg
Ym9keS5zY3JvbGxUb3AgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBNYXRoLm1h
eCggZG9jRWxlbS5zY3JvbGxMZWZ0LCBib2R5LnNjcm9sbExlZnQgKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwogICAg
ICAgIH07Cn0KCmpRdWVyeS5vZmZzZXQgPSB7CiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHksIGNvbnRhaW5lciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBpbm5lckRpdiwgY2hlY2tEaXYsIHRhYmxl
LCB0ZCwgYm9keU1hcmdpblRvcCA9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdp
blRvcCIpICkgfHwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9ICI8ZGl2IHN0eWxl
PSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xp
ZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsnPjxkaXY+PC9kaXY+PC9kaXY+
PHRhYmxlIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9y
ZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsnIGNlbGxw
YWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+PHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iOwoK
ICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIGNvbnRhaW5lci5zdHlsZSwgeyBwb3NpdGlv
bjogImFic29sdXRlIiwgdG9wOiAwLCBsZWZ0OiAwLCBtYXJnaW46IDAsIGJvcmRlcjogMCwgd2lk
dGg6ICIxcHgiLCBoZWlnaHQ6ICIxcHgiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiB9ICk7CgogICAg
ICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgICAgICAgICBi
b2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKICAgICAgICAg
ICAgICAgIGlubmVyRGl2ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICBj
aGVja0RpdiA9IGlubmVyRGl2LmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICB0ZCA9IGlubmVy
RGl2Lm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDsKCiAgICAgICAgICAgICAgICB0
aGlzLmRvZXNOb3RBZGRCb3JkZXIgPSAoY2hlY2tEaXYub2Zmc2V0VG9wICE9PSA1KTsKICAgICAg
ICAgICAgICAgIHRoaXMuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHMgPSAodGQub2Zmc2V0
VG9wID09PSA1KTsKCiAgICAgICAgICAgICAgICBjaGVja0Rpdi5zdHlsZS5wb3NpdGlvbiA9ICJm
aXhlZCI7CiAgICAgICAgICAgICAgICBjaGVja0Rpdi5zdHlsZS50b3AgPSAiMjBweCI7CgogICAg
ICAgICAgICAgICAgLy8gc2FmYXJpIHN1YnRyYWN0cyBwYXJlbnQgYm9yZGVyIHdpZHRoIGhlcmUg
d2hpY2ggaXMgNXB4CiAgICAgICAgICAgICAgICB0aGlzLnN1cHBvcnRzRml4ZWRQb3NpdGlvbiA9
IChjaGVja0Rpdi5vZmZzZXRUb3AgPT09IDIwIHx8IGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0gMTUp
OwogICAgICAgICAgICAgICAgY2hlY2tEaXYuc3R5bGUucG9zaXRpb24gPSBjaGVja0Rpdi5zdHls
ZS50b3AgPSAiIjsKCiAgICAgICAgICAgICAgICBpbm5lckRpdi5zdHlsZS5vdmVyZmxvdyA9ICJo
aWRkZW4iOwogICAgICAgICAgICAgICAgaW5uZXJEaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRp
dmUiOwoKICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RW
aXNpYmxlID0gKGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0gLTUpOwoKICAgICAgICAgICAgICAgIHRo
aXMuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgPSAoYm9keS5vZmZzZXRUb3AgIT09
IGJvZHlNYXJnaW5Ub3ApOwoKICAgICAgICAgICAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRh
aW5lciApOwogICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5pbml0aWFsaXplID0galF1ZXJ5
Lm5vb3A7CiAgICAgICAgfSwKCiAgICAgICAgYm9keU9mZnNldDogZnVuY3Rpb24oIGJvZHkgKSB7
CiAgICAgICAgICAgICAgICB2YXIgdG9wID0gYm9keS5vZmZzZXRUb3AsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnQgPSBib2R5Lm9mZnNldExlZnQ7CgogICAgICAgICAgICAgICAgalF1ZXJ5
Lm9mZnNldC5pbml0aWFsaXplKCk7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0
LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpblRvcCIpICkg
fHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBwYXJzZUZsb2F0KCBqUXVlcnku
Y3NzKGJvZHksICJtYXJnaW5MZWZ0IikgKSB8fCAwOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH07CiAgICAgICAgfSwKCiAg
ICAgICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHsKICAgICAgICAg
ICAgICAgIHZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIgKTsKCiAg
ICAgICAgICAgICAgICAvLyBzZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJl
IHNldCBldmVuIG9uIHN0YXRpYyBlbGVtCiAgICAgICAgICAgICAgICBpZiAoIHBvc2l0aW9uID09
PSAic3RhdGljIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5wb3NpdGlv
biA9ICJyZWxhdGl2ZSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGN1
ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyT2Zmc2V0
ID0gY3VyRWxlbS5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ1NTVG9wID0g
alF1ZXJ5LmNzcyggZWxlbSwgInRvcCIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ1NT
TGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAogICAgICAgICAgICAgICAgICAgICAg
ICBjYWxjdWxhdGVQb3NpdGlvbiA9IChwb3NpdGlvbiA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlv
biA9PT0gImZpeGVkIikgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBbY3VyQ1NTVG9wLCBjdXJD
U1NMZWZ0XSkgPiAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSB7fSwgY3VyUG9z
aXRpb24gPSB7fSwgY3VyVG9wLCBjdXJMZWZ0OwoKICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8g
YmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyIHRvcCBvciBsZWZ0IGlzIGF1
dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZAogICAgICAgICAgICAg
ICAgaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
UG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1
clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGVmdCA9
IGN1clBvc2l0aW9uLmxlZnQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOwogICAgICAg
ICAgICAgICAgICAgICAgICBjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggb3B0aW9ucyApICkgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9u
cy5jYWxsKCBlbGVtLCBpLCBjdXJPZmZzZXQgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAob3B0aW9ucy50b3AgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wcy50b3AgPSAob3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wKSArIGN1clRvcDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxlZnQgIT0gbnVsbCkg
ewogICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5sZWZ0ID0gKG9wdGlvbnMubGVmdCAtIGN1
ck9mZnNldC5sZWZ0KSArIGN1ckxlZnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgaWYgKCAidXNpbmciIGluIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckVsZW0uY3NzKCBwcm9wcyApOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0KfTsKCgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBwb3NpdGlv
bjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoICF0aGlzWzBdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF0sCgogICAgICAgICAgICAgICAgLy8gR2V0ICpyZWFs
KiBvZmZzZXRQYXJlbnQKICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0
UGFyZW50KCksCgogICAgICAgICAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cwogICAgICAg
ICAgICAgICAgb2Zmc2V0ICAgICAgID0gdGhpcy5vZmZzZXQoKSwKICAgICAgICAgICAgICAgIHBh
cmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFyZW50WzBdLm5vZGVOYW1lKSA/IHsgdG9w
OiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7CgogICAgICAgICAgICAgICAg
Ly8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCiAgICAgICAgICAgICAgICAvLyBub3RlOiB3aGVu
IGFuIGVsZW1lbnQgaGFzIG1hcmdpbjogYXV0byB0aGUgb2Zmc2V0TGVmdCBhbmQgbWFyZ2luTGVm
dAogICAgICAgICAgICAgICAgLy8gYXJlIHRoZSBzYW1lIGluIFNhZmFyaSBjYXVzaW5nIG9mZnNl
dC5sZWZ0IHRvIGluY29ycmVjdGx5IGJlIDAKICAgICAgICAgICAgICAgIG9mZnNldC50b3AgIC09
IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdpblRvcCIpICkgfHwgMDsKICAgICAg
ICAgICAgICAgIG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1h
cmdpbkxlZnQiKSApIHx8IDA7CgogICAgICAgICAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBi
b3JkZXJzCiAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQudG9wICArPSBwYXJzZUZsb2F0KCBq
UXVlcnkuY3NzKG9mZnNldFBhcmVudFswXSwgImJvcmRlclRvcFdpZHRoIikgKSB8fCAwOwogICAg
ICAgICAgICAgICAgcGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhv
ZmZzZXRQYXJlbnRbMF0sICJib3JkZXJMZWZ0V2lkdGgiKSApIHx8IDA7CgogICAgICAgICAgICAg
ICAgLy8gU3VidHJhY3QgdGhlIHR3byBvZmZzZXRzCiAgICAgICAgICAgICAgICByZXR1cm4gewog
ICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50
b3AsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zm
c2V0LmxlZnQKICAgICAgICAgICAgICAgIH07CiAgICAgICAgfSwKCiAgICAgICAgb2Zmc2V0UGFy
ZW50OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zm
c2V0UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJlbnQubm9kZU5hbWUpICYm
IGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0YXRpYyIpICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVu
dC5vZmZzZXRQYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudDsKICAgICAgICAgICAgICAgIH0pOwogICAgICAg
IH0KfSk7CgoKLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCmpRdWVy
eS5lYWNoKCBbIkxlZnQiLCAiVG9wIl0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewogICAgICAgIHZh
ciBtZXRob2QgPSAic2Nyb2xsIiArIG5hbWU7CgogICAgICAgIGpRdWVyeS5mblsgbWV0aG9kIF0g
PSBmdW5jdGlvbiggdmFsICkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0sIHdpbjsKCiAgICAg
ICAgICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtID0gdGhpc1sgMCBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxl
bSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgd2luID0gZ2V0V2lu
ZG93KCBlbGVtICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHNjcm9s
bCBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbiA/ICgicGFnZVhPZmZz
ZXQiIGluIHdpbikgPyB3aW5bIGkgPyAicGFnZVlPZmZzZXQiIDogInBhZ2VYT2Zmc2V0IiBdIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAm
JiB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBtZXRob2QgXSB8fAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luLmRvY3VtZW50LmJvZHlbIG1ldGhvZCBdIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHNjcm9sbCBvZmZzZXQKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHdpbiA9IGdldFdpbmRvdyggdGhpcyApOwoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB3aW4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luLnNjcm9sbFRv
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWkgPyB2YWwgOiBqUXVl
cnkoIHdpbiApLnNjcm9sbExlZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbIG1ldGhvZCBdID0gdmFsOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9Owp9KTsK
CmZ1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHsKICAgICAgICByZXR1cm4galF1ZXJ5LmlzV2lu
ZG93KCBlbGVtICkgPwogICAgICAgICAgICAgICAgZWxlbSA6CiAgICAgICAgICAgICAgICBlbGVt
Lm5vZGVUeXBlID09PSA5ID8KICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5kZWZhdWx0Vmll
dyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOwp9
CgoKCgovLyBDcmVhdGUgd2lkdGgsIGhlaWdodCwgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIG91
dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKalF1ZXJ5LmVhY2goWyAiSGVpZ2h0Iiwg
IldpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCiAgICAgICAgdmFyIHR5cGUgPSBuYW1l
LnRvTG93ZXJDYXNlKCk7CgogICAgICAgIC8vIGlubmVySGVpZ2h0IGFuZCBpbm5lcldpZHRoCiAg
ICAgICAgalF1ZXJ5LmZuWyAiaW5uZXIiICsgbmFtZSBdID0gZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSAm
JiBlbGVtLnN0eWxlID8KICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCggalF1ZXJ5
LmNzcyggZWxlbSwgdHlwZSwgInBhZGRpbmciICkgKSA6CiAgICAgICAgICAgICAgICAgICAgICAg
IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgLy8gb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGgK
ICAgICAgICBqUXVlcnkuZm5bICJvdXRlciIgKyBuYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luICkg
ewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdOwogICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW0gJiYgZWxlbS5zdHlsZSA/CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmxv
YXQoIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIG1hcmdpbiA/ICJtYXJnaW4iIDogImJvcmRlciIg
KSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKICAgICAgICB9OwoKICAgICAgICBq
UXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBzaXplICkgewogICAgICAgICAgICAgICAgLy8g
R2V0IHdpbmRvdyB3aWR0aCBvciBoZWlnaHQKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhp
c1swXTsKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzaXplID09IG51bGwgPyBudWxsIDogdGhpczsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzaXplICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmWyB0eXBlIF0oIHNpemUuY2FsbCggdGhp
cywgaSwgc2VsZlsgdHlwZSBdKCkgKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxl
bSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmVyeW9uZSBlbHNlIHVzZSBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQgb3IgZG9jdW1lbnQuYm9keSBkZXBlbmRpbmcgb24gUXVpcmtz
IHZzIFN0YW5kYXJkcyBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDNyZCBjb25kaXRp
b24gYWxsb3dzIE5va2lhIHN1cHBvcnQsIGFzIGl0IHN1cHBvcnRzIHRoZSBkb2NFbGVtIHByb3Ag
YnV0IG5vdCBDU1MxQ29tcGF0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb2NFbGVtUHJv
cCA9IGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZWxlbS5kb2N1bWVudC5ib2R5Owog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5kb2N1bWVudC5jb21wYXRNb2RlID09
PSAiQ1NTMUNvbXBhdCIgJiYgZG9jRWxlbVByb3AgfHwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib2R5ICYmIGJvZHlbICJjbGllbnQiICsgbmFtZSBdIHx8IGRvY0VsZW1Qcm9wOwoK
ICAgICAgICAgICAgICAgIC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHQKICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgv
SGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE1hdGgubWF4KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZG9jdW1l
bnRFbGVtZW50WyJjbGllbnQiICsgbmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5ib2R5WyJzY3JvbGwiICsgbmFtZV0sIGVsZW0uZG9jdW1lbnRFbGVtZW50WyJzY3Jv
bGwiICsgbmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ib2R5WyJv
ZmZzZXQiICsgbmFtZV0sIGVsZW0uZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiICsgbmFtZV0KICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAvLyBHZXQgb3Igc2V0IHdp
ZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
c2l6ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3JpZyA9
IGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSBwYXJzZUZsb2F0KCBvcmlnICk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LmlzTmFOKCByZXQgKSA/IG9yaWcgOiByZXQ7CgogICAgICAgICAgICAgICAgLy8g
U2V0IHRoZSB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQgKGRlZmF1bHQgdG8gcGl4ZWxz
IGlmIHZhbHVlIGlzIHVuaXRsZXNzKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzKCB0eXBlLCB0eXBlb2Ygc2l6ZSA9PT0gInN0
cmluZyIgPyBzaXplIDogc2l6ZSArICJweCIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
OwoKfSk7CgoKLy8gRXhwb3NlIGpRdWVyeSB0byB0aGUgZ2xvYmFsIG9iamVjdAp3aW5kb3cualF1
ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Cn0pKHdpbmRvdyk7Cl8QD3RleHQvamF2YXNjcmlwdNQF
BgcIDg8QEV8QTWZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0
cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzTxECR2JwbGlzdDAw1AECAwQFBjU2WCR2ZXJz
aW9uWCRvYmplY3RzWSRhcmNoaXZlclQkdG9wEgABhqCrBwgfJSYtFy4vMDFVJG51bGzbCQoLDA0O
DxAREhMUFRYXGBkaGxwdHlIkM1YkY2xhc3NSJDZSJDFSJDlSJDRSJDdSJDJSJDVSJDBSJDiAAoAK
gAcQAIAJgAWAABAHgAYQCIAI0yAKIRojJFdOUy5iYXNlW05TLnJlbGF0aXZlgACABIADXxBNZmls
ZTovLy9Vc2Vycy95dXN1a2UvZGV2L1dlYktpdC9QZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9q
cXVlcnkuZmxvdC5taW4uanPSJygpKlokY2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoissVU5TVVJM
WE5TT2JqZWN0I0G5wz85/doGXxAPdGV4dC9qYXZhc2NyaXB0EZKzI3/v////////0icoMjNdTlNV
UkxSZXNwb25zZaI0LF1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0Tc4XxATV2ViUmVz
b3VyY2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAQwBJAGAAYwBqAG0AcABzAHYAeQB8AH8AggCF
AIcAiQCLAI0AjwCRAJMAlQCXAJkAmwCiAKoAtgC4ALoAvAEMAREBHAElASsBLgE0AT0BRgFYAVsB
ZAFpAXcBegGIAZoBnQGzAAAAAAAAAgEAAAAAAAAAOQAAAAAAAAAAAAAAAAAAAbVPEZKzLyogSmF2
YXNjcmlwdCBwbG90dGluZyBsaWJyYXJ5IGZvciBqUXVlcnksIHYuIDAuNy4KICoKICogUmVsZWFz
ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGJ5IElPTEEsIERlY2VtYmVyIDIwMDcuCiAqCiAqLwoo
ZnVuY3Rpb24oYil7Yi5jb2xvcj17fTtiLmNvbG9yLm1ha2U9ZnVuY3Rpb24oZCxlLGcsZil7dmFy
IGM9e307Yy5yPWR8fDA7Yy5nPWV8fDA7Yy5iPWd8fDA7Yy5hPWYhPW51bGw/ZjoxO2MuYWRkPWZ1
bmN0aW9uKGgsail7Zm9yKHZhciBrPTA7azxoLmxlbmd0aDsrK2spe2NbaC5jaGFyQXQoayldKz1q
fXJldHVybiBjLm5vcm1hbGl6ZSgpfTtjLnNjYWxlPWZ1bmN0aW9uKGgsail7Zm9yKHZhciBrPTA7
azxoLmxlbmd0aDsrK2spe2NbaC5jaGFyQXQoayldKj1qfXJldHVybiBjLm5vcm1hbGl6ZSgpfTtj
LnRvU3RyaW5nPWZ1bmN0aW9uKCl7aWYoYy5hPj0xKXtyZXR1cm4icmdiKCIrW2MucixjLmcsYy5i
XS5qb2luKCIsIikrIikifWVsc2V7cmV0dXJuInJnYmEoIitbYy5yLGMuZyxjLmIsYy5hXS5qb2lu
KCIsIikrIikifX07Yy5ub3JtYWxpemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGssaixsKXtyZXR1
cm4gajxrP2s6KGo+bD9sOmopfWMucj1oKDAscGFyc2VJbnQoYy5yKSwyNTUpO2MuZz1oKDAscGFy
c2VJbnQoYy5nKSwyNTUpO2MuYj1oKDAscGFyc2VJbnQoYy5iKSwyNTUpO2MuYT1oKDAsYy5hLDEp
O3JldHVybiBjfTtjLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGIuY29sb3IubWFrZShjLnIsYy5i
LGMuZyxjLmEpfTtyZXR1cm4gYy5ub3JtYWxpemUoKX07Yi5jb2xvci5leHRyYWN0PWZ1bmN0aW9u
KGQsZSl7dmFyIGM7ZG97Yz1kLmNzcyhlKS50b0xvd2VyQ2FzZSgpO2lmKGMhPSIiJiZjIT0idHJh
bnNwYXJlbnQiKXticmVha31kPWQucGFyZW50KCl9d2hpbGUoIWIubm9kZU5hbWUoZC5nZXQoMCks
ImJvZHkiKSk7aWYoYz09InJnYmEoMCwgMCwgMCwgMCkiKXtjPSJ0cmFuc3BhcmVudCJ9cmV0dXJu
IGIuY29sb3IucGFyc2UoYyl9O2IuY29sb3IucGFyc2U9ZnVuY3Rpb24oYyl7dmFyIGQsZj1iLmNv
bG9yLm1ha2U7aWYoZD0vcmdiXChccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMq
LFxzKihbMC05XXsxLDN9KVxzKlwpLy5leGVjKGMpKXtyZXR1cm4gZihwYXJzZUludChkWzFdLDEw
KSxwYXJzZUludChkWzJdLDEwKSxwYXJzZUludChkWzNdLDEwKSl9aWYoZD0vcmdiYVwoXHMqKFsw
LTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFsw
LTldKyg/OlwuWzAtOV0rKT8pXHMqXCkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlSW50KGRbMV0s
MTApLHBhcnNlSW50KGRbMl0sMTApLHBhcnNlSW50KGRbM10sMTApLHBhcnNlRmxvYXQoZFs0XSkp
fWlmKGQ9L3JnYlwoXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/Olwu
WzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccypcKS8uZXhlYyhjKSl7
cmV0dXJuIGYocGFyc2VGbG9hdChkWzFdKSoyLjU1LHBhcnNlRmxvYXQoZFsyXSkqMi41NSxwYXJz
ZUZsb2F0KGRbM10pKjIuNTUpfWlmKGQ9L3JnYmFcKFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwl
XHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/
KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVxzKlwpLy5leGVjKGMpKXtyZXR1cm4gZihw
YXJzZUZsb2F0KGRbMV0pKjIuNTUscGFyc2VGbG9hdChkWzJdKSoyLjU1LHBhcnNlRmxvYXQoZFsz
XSkqMi41NSxwYXJzZUZsb2F0KGRbNF0pKX1pZihkPS8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1G
MC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pLy5leGVjKGMpKXtyZXR1cm4gZihwYXJzZUludChkWzFd
LDE2KSxwYXJzZUludChkWzJdLDE2KSxwYXJzZUludChkWzNdLDE2KSl9aWYoZD0vIyhbYS1mQS1G
MC05XSkoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKS8uZXhlYyhjKSl7cmV0dXJuIGYocGFyc2VJ
bnQoZFsxXStkWzFdLDE2KSxwYXJzZUludChkWzJdK2RbMl0sMTYpLHBhcnNlSW50KGRbM10rZFsz
XSwxNikpfXZhciBlPWIudHJpbShjKS50b0xvd2VyQ2FzZSgpO2lmKGU9PSJ0cmFuc3BhcmVudCIp
e3JldHVybiBmKDI1NSwyNTUsMjU1LDApfWVsc2V7ZD1hW2VdfHxbMCwwLDBdO3JldHVybiBmKGRb
MF0sZFsxXSxkWzJdKX19O3ZhciBhPXthcXVhOlswLDI1NSwyNTVdLGF6dXJlOlsyNDAsMjU1LDI1
NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxibGFjazpbMCwwLDBdLGJsdWU6WzAsMCwyNTVdLGJyb3du
OlsxNjUsNDIsNDJdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFu
OlswLDEzOSwxMzldLGRhcmtncmV5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxk
YXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVn
cmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1
MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrdmlv
bGV0OlsxNDgsMCwyMTFdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxncmVl
bjpbMCwxMjgsMF0saW5kaWdvOls3NSwwLDEzMF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsaWdodGJs
dWU6WzE3MywyMTYsMjMwXSxsaWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdyZWVuOlsxNDQs
MjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10s
bGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxtYWdlbnRhOlsyNTUsMCwy
NTVdLG1hcm9vbjpbMTI4LDAsMF0sbmF2eTpbMCwwLDEyOF0sb2xpdmU6WzEyOCwxMjgsMF0sb3Jh
bmdlOlsyNTUsMTY1LDBdLHBpbms6WzI1NSwxOTIsMjAzXSxwdXJwbGU6WzEyOCwwLDEyOF0sdmlv
bGV0OlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sd2hpdGU6
WzI1NSwyNTUsMjU1XSx5ZWxsb3c6WzI1NSwyNTUsMF19fSkoalF1ZXJ5KTsoZnVuY3Rpb24oYyl7
ZnVuY3Rpb24gYihhdixhaSxKLGFmKXt2YXIgUT1bXSxPPXtjb2xvcnM6WyIjZWRjMjQwIiwiI2Fm
ZDhmOCIsIiNjYjRiNGIiLCIjNGRhNzRkIiwiIzk0NDBlZCJdLGxlZ2VuZDp7c2hvdzp0cnVlLG5v
Q29sdW1uczoxLGxhYmVsRm9ybWF0dGVyOm51bGwsbGFiZWxCb3hCb3JkZXJDb2xvcjoiI2NjYyIs
Y29udGFpbmVyOm51bGwscG9zaXRpb246Im5lIixtYXJnaW46NSxiYWNrZ3JvdW5kQ29sb3I6bnVs
bCxiYWNrZ3JvdW5kT3BhY2l0eTowLjg1fSx4YXhpczp7c2hvdzpudWxsLHBvc2l0aW9uOiJib3R0
b20iLG1vZGU6bnVsbCxjb2xvcjpudWxsLHRpY2tDb2xvcjpudWxsLHRyYW5zZm9ybTpudWxsLGlu
dmVyc2VUcmFuc2Zvcm06bnVsbCxtaW46bnVsbCxtYXg6bnVsbCxhdXRvc2NhbGVNYXJnaW46bnVs
bCx0aWNrczpudWxsLHRpY2tGb3JtYXR0ZXI6bnVsbCxsYWJlbFdpZHRoOm51bGwsbGFiZWxIZWln
aHQ6bnVsbCxyZXNlcnZlU3BhY2U6bnVsbCx0aWNrTGVuZ3RoOm51bGwsYWxpZ25UaWNrc1dpdGhB
eGlzOm51bGwsdGlja0RlY2ltYWxzOm51bGwsdGlja1NpemU6bnVsbCxtaW5UaWNrU2l6ZTpudWxs
LG1vbnRoTmFtZXM6bnVsbCx0aW1lZm9ybWF0Om51bGwsdHdlbHZlSG91ckNsb2NrOmZhbHNlfSx5
YXhpczp7YXV0b3NjYWxlTWFyZ2luOjAuMDIscG9zaXRpb246ImxlZnQifSx4YXhlczpbXSx5YXhl
czpbXSxzZXJpZXM6e3BvaW50czp7c2hvdzpmYWxzZSxyYWRpdXM6MyxsaW5lV2lkdGg6MixmaWxs
OnRydWUsZmlsbENvbG9yOiIjZmZmZmZmIixzeW1ib2w6ImNpcmNsZSJ9LGxpbmVzOntsaW5lV2lk
dGg6MixmaWxsOmZhbHNlLGZpbGxDb2xvcjpudWxsLHN0ZXBzOmZhbHNlfSxiYXJzOntzaG93OmZh
bHNlLGxpbmVXaWR0aDoyLGJhcldpZHRoOjEsZmlsbDp0cnVlLGZpbGxDb2xvcjpudWxsLGFsaWdu
OiJsZWZ0Iixob3Jpem9udGFsOmZhbHNlfSxzaGFkb3dTaXplOjN9LGdyaWQ6e3Nob3c6dHJ1ZSxh
Ym92ZURhdGE6ZmFsc2UsY29sb3I6IiM1NDU0NTQiLGJhY2tncm91bmRDb2xvcjpudWxsLGJvcmRl
ckNvbG9yOm51bGwsdGlja0NvbG9yOm51bGwsbGFiZWxNYXJnaW46NSxheGlzTWFyZ2luOjgsYm9y
ZGVyV2lkdGg6MixtaW5Cb3JkZXJNYXJnaW46bnVsbCxtYXJraW5nczpudWxsLG1hcmtpbmdzQ29s
b3I6IiNmNGY0ZjQiLG1hcmtpbmdzTGluZVdpZHRoOjIsY2xpY2thYmxlOmZhbHNlLGhvdmVyYWJs
ZTpmYWxzZSxhdXRvSGlnaGxpZ2h0OnRydWUsbW91c2VBY3RpdmVSYWRpdXM6MTB9LGhvb2tzOnt9
fSxhej1udWxsLGFkPW51bGwseT1udWxsLEg9bnVsbCxBPW51bGwscD1bXSxhdz1bXSxxPXtsZWZ0
OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MH0sRz0wLEk9MCxoPTAsdz0wLGFrPXtwcm9jZXNzT3B0
aW9uczpbXSxwcm9jZXNzUmF3RGF0YTpbXSxwcm9jZXNzRGF0YXBvaW50czpbXSxkcmF3U2VyaWVz
OltdLGRyYXc6W10sYmluZEV2ZW50czpbXSxkcmF3T3ZlcmxheTpbXSxzaHV0ZG93bjpbXX0sYXE9
dGhpczthcS5zZXREYXRhPWFqO2FxLnNldHVwR3JpZD10O2FxLmRyYXc9VzthcS5nZXRQbGFjZWhv
bGRlcj1mdW5jdGlvbigpe3JldHVybiBhdn07YXEuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJu
IGF6fTthcS5nZXRQbG90T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHF9O2FxLndpZHRoPWZ1bmN0
aW9uKCl7cmV0dXJuIGh9O2FxLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB3fTthcS5vZmZzZXQ9
ZnVuY3Rpb24oKXt2YXIgYUI9eS5vZmZzZXQoKTthQi5sZWZ0Kz1xLmxlZnQ7YUIudG9wKz1xLnRv
cDtyZXR1cm4gYUJ9O2FxLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gUX07YXEuZ2V0QXhlcz1m
dW5jdGlvbigpe3ZhciBhQz17fSxhQjtjLmVhY2gocC5jb25jYXQoYXcpLGZ1bmN0aW9uKGFELGFF
KXtpZihhRSl7YUNbYUUuZGlyZWN0aW9uKyhhRS5uIT0xP2FFLm46IiIpKyJheGlzIl09YUV9fSk7
cmV0dXJuIGFDfTthcS5nZXRYQXhlcz1mdW5jdGlvbigpe3JldHVybiBwfTthcS5nZXRZQXhlcz1m
dW5jdGlvbigpe3JldHVybiBhd307YXEuYzJwPUM7YXEucDJjPWFyO2FxLmdldE9wdGlvbnM9ZnVu
Y3Rpb24oKXtyZXR1cm4gT307YXEuaGlnaGxpZ2h0PXg7YXEudW5oaWdobGlnaHQ9VDthcS50cmln
Z2VyUmVkcmF3T3ZlcmxheT1mO2FxLnBvaW50T2Zmc2V0PWZ1bmN0aW9uKGFCKXtyZXR1cm57bGVm
dDpwYXJzZUludChwW2FBKGFCLCJ4IiktMV0ucDJjKCthQi54KStxLmxlZnQpLHRvcDpwYXJzZUlu
dChhd1thQShhQiwieSIpLTFdLnAyYygrYUIueSkrcS50b3ApfX07YXEuc2h1dGRvd249YWc7YXEu
cmVzaXplPWZ1bmN0aW9uKCl7QigpO2coYXopO2coYWQpfTthcS5ob29rcz1haztGKGFxKTtaKEop
O1goKTthaihhaSk7dCgpO1coKTthaCgpO2Z1bmN0aW9uIGFuKGFELGFCKXthQj1bYXFdLmNvbmNh
dChhQik7Zm9yKHZhciBhQz0wO2FDPGFELmxlbmd0aDsrK2FDKXthRFthQ10uYXBwbHkodGhpcyxh
Qil9fWZ1bmN0aW9uIEYoKXtmb3IodmFyIGFCPTA7YUI8YWYubGVuZ3RoOysrYUIpe3ZhciBhQz1h
ZlthQl07YUMuaW5pdChhcSk7aWYoYUMub3B0aW9ucyl7Yy5leHRlbmQodHJ1ZSxPLGFDLm9wdGlv
bnMpfX19ZnVuY3Rpb24gWihhQyl7dmFyIGFCO2MuZXh0ZW5kKHRydWUsTyxhQyk7aWYoTy54YXhp
cy5jb2xvcj09bnVsbCl7Ty54YXhpcy5jb2xvcj1PLmdyaWQuY29sb3J9aWYoTy55YXhpcy5jb2xv
cj09bnVsbCl7Ty55YXhpcy5jb2xvcj1PLmdyaWQuY29sb3J9aWYoTy54YXhpcy50aWNrQ29sb3I9
PW51bGwpe08ueGF4aXMudGlja0NvbG9yPU8uZ3JpZC50aWNrQ29sb3J9aWYoTy55YXhpcy50aWNr
Q29sb3I9PW51bGwpe08ueWF4aXMudGlja0NvbG9yPU8uZ3JpZC50aWNrQ29sb3J9aWYoTy5ncmlk
LmJvcmRlckNvbG9yPT1udWxsKXtPLmdyaWQuYm9yZGVyQ29sb3I9Ty5ncmlkLmNvbG9yfWlmKE8u
Z3JpZC50aWNrQ29sb3I9PW51bGwpe08uZ3JpZC50aWNrQ29sb3I9Yy5jb2xvci5wYXJzZShPLmdy
aWQuY29sb3IpLnNjYWxlKCJhIiwwLjIyKS50b1N0cmluZygpfWZvcihhQj0wO2FCPE1hdGgubWF4
KDEsTy54YXhlcy5sZW5ndGgpOysrYUIpe08ueGF4ZXNbYUJdPWMuZXh0ZW5kKHRydWUse30sTy54
YXhpcyxPLnhheGVzW2FCXSl9Zm9yKGFCPTA7YUI8TWF0aC5tYXgoMSxPLnlheGVzLmxlbmd0aCk7
KythQil7Ty55YXhlc1thQl09Yy5leHRlbmQodHJ1ZSx7fSxPLnlheGlzLE8ueWF4ZXNbYUJdKX1p
ZihPLnhheGlzLm5vVGlja3MmJk8ueGF4aXMudGlja3M9PW51bGwpe08ueGF4aXMudGlja3M9Ty54
YXhpcy5ub1RpY2tzfWlmKE8ueWF4aXMubm9UaWNrcyYmTy55YXhpcy50aWNrcz09bnVsbCl7Ty55
YXhpcy50aWNrcz1PLnlheGlzLm5vVGlja3N9aWYoTy54MmF4aXMpe08ueGF4ZXNbMV09Yy5leHRl
bmQodHJ1ZSx7fSxPLnhheGlzLE8ueDJheGlzKTtPLnhheGVzWzFdLnBvc2l0aW9uPSJ0b3AifWlm
KE8ueTJheGlzKXtPLnlheGVzWzFdPWMuZXh0ZW5kKHRydWUse30sTy55YXhpcyxPLnkyYXhpcyk7
Ty55YXhlc1sxXS5wb3NpdGlvbj0icmlnaHQifWlmKE8uZ3JpZC5jb2xvcmVkQXJlYXMpe08uZ3Jp
ZC5tYXJraW5ncz1PLmdyaWQuY29sb3JlZEFyZWFzfWlmKE8uZ3JpZC5jb2xvcmVkQXJlYXNDb2xv
cil7Ty5ncmlkLm1hcmtpbmdzQ29sb3I9Ty5ncmlkLmNvbG9yZWRBcmVhc0NvbG9yfWlmKE8ubGlu
ZXMpe2MuZXh0ZW5kKHRydWUsTy5zZXJpZXMubGluZXMsTy5saW5lcyl9aWYoTy5wb2ludHMpe2Mu
ZXh0ZW5kKHRydWUsTy5zZXJpZXMucG9pbnRzLE8ucG9pbnRzKX1pZihPLmJhcnMpe2MuZXh0ZW5k
KHRydWUsTy5zZXJpZXMuYmFycyxPLmJhcnMpfWlmKE8uc2hhZG93U2l6ZSE9bnVsbCl7Ty5zZXJp
ZXMuc2hhZG93U2l6ZT1PLnNoYWRvd1NpemV9Zm9yKGFCPTA7YUI8Ty54YXhlcy5sZW5ndGg7Kyth
Qil7VihwLGFCKzEpLm9wdGlvbnM9Ty54YXhlc1thQl19Zm9yKGFCPTA7YUI8Ty55YXhlcy5sZW5n
dGg7KythQil7VihhdyxhQisxKS5vcHRpb25zPU8ueWF4ZXNbYUJdfWZvcih2YXIgYUQgaW4gYWsp
e2lmKE8uaG9va3NbYURdJiZPLmhvb2tzW2FEXS5sZW5ndGgpe2FrW2FEXT1ha1thRF0uY29uY2F0
KE8uaG9va3NbYURdKX19YW4oYWsucHJvY2Vzc09wdGlvbnMsW09dKX1mdW5jdGlvbiBhaihhQil7
UT1ZKGFCKTtheCgpO3ooKX1mdW5jdGlvbiBZKGFFKXt2YXIgYUM9W107Zm9yKHZhciBhQj0wO2FC
PGFFLmxlbmd0aDsrK2FCKXt2YXIgYUQ9Yy5leHRlbmQodHJ1ZSx7fSxPLnNlcmllcyk7aWYoYUVb
YUJdLmRhdGEhPW51bGwpe2FELmRhdGE9YUVbYUJdLmRhdGE7ZGVsZXRlIGFFW2FCXS5kYXRhO2Mu
ZXh0ZW5kKHRydWUsYUQsYUVbYUJdKTthRVthQl0uZGF0YT1hRC5kYXRhfWVsc2V7YUQuZGF0YT1h
RVthQl19YUMucHVzaChhRCl9cmV0dXJuIGFDfWZ1bmN0aW9uIGFBKGFDLGFEKXt2YXIgYUI9YUNb
YUQrImF4aXMiXTtpZih0eXBlb2YgYUI9PSJvYmplY3QiKXthQj1hQi5ufWlmKHR5cGVvZiBhQiE9
Im51bWJlciIpe2FCPTF9cmV0dXJuIGFCfWZ1bmN0aW9uIG0oKXtyZXR1cm4gYy5ncmVwKHAuY29u
Y2F0KGF3KSxmdW5jdGlvbihhQil7cmV0dXJuIGFCfSl9ZnVuY3Rpb24gQyhhRSl7dmFyIGFDPXt9
LGFCLGFEO2ZvcihhQj0wO2FCPHAubGVuZ3RoOysrYUIpe2FEPXBbYUJdO2lmKGFEJiZhRC51c2Vk
KXthQ1sieCIrYUQubl09YUQuYzJwKGFFLmxlZnQpfX1mb3IoYUI9MDthQjxhdy5sZW5ndGg7Kyth
Qil7YUQ9YXdbYUJdO2lmKGFEJiZhRC51c2VkKXthQ1sieSIrYUQubl09YUQuYzJwKGFFLnRvcCl9
fWlmKGFDLngxIT09dW5kZWZpbmVkKXthQy54PWFDLngxfWlmKGFDLnkxIT09dW5kZWZpbmVkKXth
Qy55PWFDLnkxfXJldHVybiBhQ31mdW5jdGlvbiBhcihhRil7dmFyIGFEPXt9LGFDLGFFLGFCO2Zv
cihhQz0wO2FDPHAubGVuZ3RoOysrYUMpe2FFPXBbYUNdO2lmKGFFJiZhRS51c2VkKXthQj0ieCIr
YUUubjtpZihhRlthQl09PW51bGwmJmFFLm49PTEpe2FCPSJ4In1pZihhRlthQl0hPW51bGwpe2FE
LmxlZnQ9YUUucDJjKGFGW2FCXSk7YnJlYWt9fX1mb3IoYUM9MDthQzxhdy5sZW5ndGg7KythQyl7
YUU9YXdbYUNdO2lmKGFFJiZhRS51c2VkKXthQj0ieSIrYUUubjtpZihhRlthQl09PW51bGwmJmFF
Lm49PTEpe2FCPSJ5In1pZihhRlthQl0hPW51bGwpe2FELnRvcD1hRS5wMmMoYUZbYUJdKTticmVh
a319fXJldHVybiBhRH1mdW5jdGlvbiBWKGFDLGFCKXtpZighYUNbYUItMV0pe2FDW2FCLTFdPXtu
OmFCLGRpcmVjdGlvbjphQz09cD8ieCI6InkiLG9wdGlvbnM6Yy5leHRlbmQodHJ1ZSx7fSxhQz09
cD9PLnhheGlzOk8ueWF4aXMpfX1yZXR1cm4gYUNbYUItMV19ZnVuY3Rpb24gYXgoKXt2YXIgYUc7
dmFyIGFNPVEubGVuZ3RoLGFCPVtdLGFFPVtdO2ZvcihhRz0wO2FHPFEubGVuZ3RoOysrYUcpe3Zh
ciBhSj1RW2FHXS5jb2xvcjtpZihhSiE9bnVsbCl7LS1hTTtpZih0eXBlb2YgYUo9PSJudW1iZXIi
KXthRS5wdXNoKGFKKX1lbHNle2FCLnB1c2goYy5jb2xvci5wYXJzZShRW2FHXS5jb2xvcikpfX19
Zm9yKGFHPTA7YUc8YUUubGVuZ3RoOysrYUcpe2FNPU1hdGgubWF4KGFNLGFFW2FHXSsxKX12YXIg
YUM9W10sYUY9MDthRz0wO3doaWxlKGFDLmxlbmd0aDxhTSl7dmFyIGFJO2lmKE8uY29sb3JzLmxl
bmd0aD09YUcpe2FJPWMuY29sb3IubWFrZSgxMDAsMTAwLDEwMCl9ZWxzZXthST1jLmNvbG9yLnBh
cnNlKE8uY29sb3JzW2FHXSl9dmFyIGFEPWFGJTI9PTE/LTE6MTthSS5zY2FsZSgicmdiIiwxK2FE
Kk1hdGguY2VpbChhRi8yKSowLjIpO2FDLnB1c2goYUkpOysrYUc7aWYoYUc+PU8uY29sb3JzLmxl
bmd0aCl7YUc9MDsrK2FGfX12YXIgYUg9MCxhTjtmb3IoYUc9MDthRzxRLmxlbmd0aDsrK2FHKXth
Tj1RW2FHXTtpZihhTi5jb2xvcj09bnVsbCl7YU4uY29sb3I9YUNbYUhdLnRvU3RyaW5nKCk7Kyth
SH1lbHNle2lmKHR5cGVvZiBhTi5jb2xvcj09Im51bWJlciIpe2FOLmNvbG9yPWFDW2FOLmNvbG9y
XS50b1N0cmluZygpfX1pZihhTi5saW5lcy5zaG93PT1udWxsKXt2YXIgYUwsYUs9dHJ1ZTtmb3Io
YUwgaW4gYU4pe2lmKGFOW2FMXSYmYU5bYUxdLnNob3cpe2FLPWZhbHNlO2JyZWFrfX1pZihhSyl7
YU4ubGluZXMuc2hvdz10cnVlfX1hTi54YXhpcz1WKHAsYUEoYU4sIngiKSk7YU4ueWF4aXM9Vihh
dyxhQShhTiwieSIpKX19ZnVuY3Rpb24geigpe3ZhciBhTz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5J
VFksYUk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGFCPU51bWJlci5NQVhfVkFMVUUsYVUsYVMs
YVIsYU4sYUQsYUosYVQsYVAsYUgsYUcsYUMsYTAsYVgsYUw7ZnVuY3Rpb24gYUYoYTMsYTIsYTEp
e2lmKGEyPGEzLmRhdGFtaW4mJmEyIT0tYUIpe2EzLmRhdGFtaW49YTJ9aWYoYTE+YTMuZGF0YW1h
eCYmYTEhPWFCKXthMy5kYXRhbWF4PWExfX1jLmVhY2gobSgpLGZ1bmN0aW9uKGExLGEyKXthMi5k
YXRhbWluPWFPO2EyLmRhdGFtYXg9YUk7YTIudXNlZD1mYWxzZX0pO2ZvcihhVT0wO2FVPFEubGVu
Z3RoOysrYVUpe2FKPVFbYVVdO2FKLmRhdGFwb2ludHM9e3BvaW50czpbXX07YW4oYWsucHJvY2Vz
c1Jhd0RhdGEsW2FKLGFKLmRhdGEsYUouZGF0YXBvaW50c10pfWZvcihhVT0wO2FVPFEubGVuZ3Ro
OysrYVUpe2FKPVFbYVVdO3ZhciBhWj1hSi5kYXRhLGFXPWFKLmRhdGFwb2ludHMuZm9ybWF0O2lm
KCFhVyl7YVc9W107YVcucHVzaCh7eDp0cnVlLG51bWJlcjp0cnVlLHJlcXVpcmVkOnRydWV9KTth
Vy5wdXNoKHt5OnRydWUsbnVtYmVyOnRydWUscmVxdWlyZWQ6dHJ1ZX0pO2lmKGFKLmJhcnMuc2hv
d3x8KGFKLmxpbmVzLnNob3cmJmFKLmxpbmVzLmZpbGwpKXthVy5wdXNoKHt5OnRydWUsbnVtYmVy
OnRydWUscmVxdWlyZWQ6ZmFsc2UsZGVmYXVsdFZhbHVlOjB9KTtpZihhSi5iYXJzLmhvcml6b250
YWwpe2RlbGV0ZSBhV1thVy5sZW5ndGgtMV0ueTthV1thVy5sZW5ndGgtMV0ueD10cnVlfX1hSi5k
YXRhcG9pbnRzLmZvcm1hdD1hV31pZihhSi5kYXRhcG9pbnRzLnBvaW50c2l6ZSE9bnVsbCl7Y29u
dGludWV9YUouZGF0YXBvaW50cy5wb2ludHNpemU9YVcubGVuZ3RoO2FQPWFKLmRhdGFwb2ludHMu
cG9pbnRzaXplO2FUPWFKLmRhdGFwb2ludHMucG9pbnRzO2luc2VydFN0ZXBzPWFKLmxpbmVzLnNo
b3cmJmFKLmxpbmVzLnN0ZXBzO2FKLnhheGlzLnVzZWQ9YUoueWF4aXMudXNlZD10cnVlO2Zvcihh
Uz1hUj0wO2FTPGFaLmxlbmd0aDsrK2FTLGFSKz1hUCl7YUw9YVpbYVNdO3ZhciBhRT1hTD09bnVs
bDtpZighYUUpe2ZvcihhTj0wO2FOPGFQOysrYU4pe2EwPWFMW2FOXTthWD1hV1thTl07aWYoYVgp
e2lmKGFYLm51bWJlciYmYTAhPW51bGwpe2EwPSthMDtpZihpc05hTihhMCkpe2EwPW51bGx9ZWxz
ZXtpZihhMD09SW5maW5pdHkpe2EwPWFCfWVsc2V7aWYoYTA9PS1JbmZpbml0eSl7YTA9LWFCfX19
fWlmKGEwPT1udWxsKXtpZihhWC5yZXF1aXJlZCl7YUU9dHJ1ZX1pZihhWC5kZWZhdWx0VmFsdWUh
PW51bGwpe2EwPWFYLmRlZmF1bHRWYWx1ZX19fWFUW2FSK2FOXT1hMH19aWYoYUUpe2ZvcihhTj0w
O2FOPGFQOysrYU4pe2EwPWFUW2FSK2FOXTtpZihhMCE9bnVsbCl7YVg9YVdbYU5dO2lmKGFYLngp
e2FGKGFKLnhheGlzLGEwLGEwKX1pZihhWC55KXthRihhSi55YXhpcyxhMCxhMCl9fWFUW2FSK2FO
XT1udWxsfX1lbHNle2lmKGluc2VydFN0ZXBzJiZhUj4wJiZhVFthUi1hUF0hPW51bGwmJmFUW2FS
LWFQXSE9YVRbYVJdJiZhVFthUi1hUCsxXSE9YVRbYVIrMV0pe2ZvcihhTj0wO2FOPGFQOysrYU4p
e2FUW2FSK2FQK2FOXT1hVFthUithTl19YVRbYVIrMV09YVRbYVItYVArMV07YVIrPWFQfX19fWZv
cihhVT0wO2FVPFEubGVuZ3RoOysrYVUpe2FKPVFbYVVdO2FuKGFrLnByb2Nlc3NEYXRhcG9pbnRz
LFthSixhSi5kYXRhcG9pbnRzXSl9Zm9yKGFVPTA7YVU8US5sZW5ndGg7KythVSl7YUo9UVthVV07
YVQ9YUouZGF0YXBvaW50cy5wb2ludHMsYVA9YUouZGF0YXBvaW50cy5wb2ludHNpemU7dmFyIGFL
PWFPLGFRPWFPLGFNPWFJLGFWPWFJO2ZvcihhUz0wO2FTPGFULmxlbmd0aDthUys9YVApe2lmKGFU
W2FTXT09bnVsbCl7Y29udGludWV9Zm9yKGFOPTA7YU48YVA7KythTil7YTA9YVRbYVMrYU5dO2FY
PWFXW2FOXTtpZighYVh8fGEwPT1hQnx8YTA9PS1hQil7Y29udGludWV9aWYoYVgueCl7aWYoYTA8
YUspe2FLPWEwfWlmKGEwPmFNKXthTT1hMH19aWYoYVgueSl7aWYoYTA8YVEpe2FRPWEwfWlmKGEw
PmFWKXthVj1hMH19fX1pZihhSi5iYXJzLnNob3cpe3ZhciBhWT1hSi5iYXJzLmFsaWduPT0ibGVm
dCI/MDotYUouYmFycy5iYXJXaWR0aC8yO2lmKGFKLmJhcnMuaG9yaXpvbnRhbCl7YVErPWFZO2FW
Kz1hWSthSi5iYXJzLmJhcldpZHRofWVsc2V7YUsrPWFZO2FNKz1hWSthSi5iYXJzLmJhcldpZHRo
fX1hRihhSi54YXhpcyxhSyxhTSk7YUYoYUoueWF4aXMsYVEsYVYpfWMuZWFjaChtKCksZnVuY3Rp
b24oYTEsYTIpe2lmKGEyLmRhdGFtaW49PWFPKXthMi5kYXRhbWluPW51bGx9aWYoYTIuZGF0YW1h
eD09YUkpe2EyLmRhdGFtYXg9bnVsbH19KX1mdW5jdGlvbiBqKGFCLGFDKXt2YXIgYUQ9ZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7YUQuY2xhc3NOYW1lPWFDO2FELndpZHRoPUc7YUQu
aGVpZ2h0PUk7aWYoIWFCKXtjKGFEKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRv
cDowfSl9YyhhRCkuYXBwZW5kVG8oYXYpO2lmKCFhRC5nZXRDb250ZXh0KXthRD13aW5kb3cuR192
bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZW50KGFEKX1hRC5nZXRDb250ZXh0KCIyZCIpLnNhdmUo
KTtyZXR1cm4gYUR9ZnVuY3Rpb24gQigpe0c9YXYud2lkdGgoKTtJPWF2LmhlaWdodCgpO2lmKEc8
PTB8fEk8PTApe3Rocm93IkludmFsaWQgZGltZW5zaW9ucyBmb3IgcGxvdCwgd2lkdGggPSAiK0cr
IiwgaGVpZ2h0ID0gIitJfX1mdW5jdGlvbiBnKGFDKXtpZihhQy53aWR0aCE9Ryl7YUMud2lkdGg9
R31pZihhQy5oZWlnaHQhPUkpe2FDLmhlaWdodD1JfXZhciBhQj1hQy5nZXRDb250ZXh0KCIyZCIp
O2FCLnJlc3RvcmUoKTthQi5zYXZlKCl9ZnVuY3Rpb24gWCgpe3ZhciBhQyxhQj1hdi5jaGlsZHJl
bigiY2FudmFzLmJhc2UiKSxhRD1hdi5jaGlsZHJlbigiY2FudmFzLm92ZXJsYXkiKTtpZihhQi5s
ZW5ndGg9PTB8fGFEPT0wKXthdi5odG1sKCIiKTthdi5jc3Moe3BhZGRpbmc6MH0pO2lmKGF2LmNz
cygicG9zaXRpb24iKT09InN0YXRpYyIpe2F2LmNzcygicG9zaXRpb24iLCJyZWxhdGl2ZSIpfUIo
KTthej1qKHRydWUsImJhc2UiKTthZD1qKGZhbHNlLCJvdmVybGF5Iik7YUM9ZmFsc2V9ZWxzZXth
ej1hQi5nZXQoMCk7YWQ9YUQuZ2V0KDApO2FDPXRydWV9SD1hei5nZXRDb250ZXh0KCIyZCIpO0E9
YWQuZ2V0Q29udGV4dCgiMmQiKTt5PWMoW2FkLGF6XSk7aWYoYUMpe2F2LmRhdGEoInBsb3QiKS5z
aHV0ZG93bigpO2FxLnJlc2l6ZSgpO0EuY2xlYXJSZWN0KDAsMCxHLEkpO3kudW5iaW5kKCk7YXYu
Y2hpbGRyZW4oKS5ub3QoW2F6LGFkXSkucmVtb3ZlKCl9YXYuZGF0YSgicGxvdCIsYXEpfWZ1bmN0
aW9uIGFoKCl7aWYoTy5ncmlkLmhvdmVyYWJsZSl7eS5tb3VzZW1vdmUoYWEpO3kubW91c2VsZWF2
ZShsKX1pZihPLmdyaWQuY2xpY2thYmxlKXt5LmNsaWNrKFIpfWFuKGFrLmJpbmRFdmVudHMsW3ld
KX1mdW5jdGlvbiBhZygpe2lmKE0pe2NsZWFyVGltZW91dChNKX15LnVuYmluZCgibW91c2Vtb3Zl
IixhYSk7eS51bmJpbmQoIm1vdXNlbGVhdmUiLGwpO3kudW5iaW5kKCJjbGljayIsUik7YW4oYWsu
c2h1dGRvd24sW3ldKX1mdW5jdGlvbiByKGFHKXtmdW5jdGlvbiBhQyhhSCl7cmV0dXJuIGFIfXZh
ciBhRixhQixhRD1hRy5vcHRpb25zLnRyYW5zZm9ybXx8YUMsYUU9YUcub3B0aW9ucy5pbnZlcnNl
VHJhbnNmb3JtO2lmKGFHLmRpcmVjdGlvbj09IngiKXthRj1hRy5zY2FsZT1oL01hdGguYWJzKGFE
KGFHLm1heCktYUQoYUcubWluKSk7YUI9TWF0aC5taW4oYUQoYUcubWF4KSxhRChhRy5taW4pKX1l
bHNle2FGPWFHLnNjYWxlPXcvTWF0aC5hYnMoYUQoYUcubWF4KS1hRChhRy5taW4pKTthRj0tYUY7
YUI9TWF0aC5tYXgoYUQoYUcubWF4KSxhRChhRy5taW4pKX1pZihhRD09YUMpe2FHLnAyYz1mdW5j
dGlvbihhSCl7cmV0dXJuKGFILWFCKSphRn19ZWxzZXthRy5wMmM9ZnVuY3Rpb24oYUgpe3JldHVy
bihhRChhSCktYUIpKmFGfX1pZighYUUpe2FHLmMycD1mdW5jdGlvbihhSCl7cmV0dXJuIGFCK2FI
L2FGfX1lbHNle2FHLmMycD1mdW5jdGlvbihhSCl7cmV0dXJuIGFFKGFCK2FIL2FGKX19fWZ1bmN0
aW9uIEwoYUQpe3ZhciBhQj1hRC5vcHRpb25zLGFGLGFKPWFELnRpY2tzfHxbXSxhST1bXSxhRSxh
Sz1hQi5sYWJlbFdpZHRoLGFHPWFCLmxhYmVsSGVpZ2h0LGFDO2Z1bmN0aW9uIGFIKGFNLGFMKXty
ZXR1cm4gYygnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDAwMHB4OycrYUwr
J2ZvbnQtc2l6ZTpzbWFsbGVyIj48ZGl2IGNsYXNzPSInK2FELmRpcmVjdGlvbisiQXhpcyAiK2FE
LmRpcmVjdGlvbithRC5uKydBeGlzIj4nK2FNLmpvaW4oIiIpKyI8L2Rpdj48L2Rpdj4iKS5hcHBl
bmRUbyhhdil9aWYoYUQuZGlyZWN0aW9uPT0ieCIpe2lmKGFLPT1udWxsKXthSz1NYXRoLmZsb29y
KEcvKGFKLmxlbmd0aD4wP2FKLmxlbmd0aDoxKSl9aWYoYUc9PW51bGwpe2FJPVtdO2ZvcihhRj0w
O2FGPGFKLmxlbmd0aDsrK2FGKXthRT1hSlthRl0ubGFiZWw7aWYoYUUpe2FJLnB1c2goJzxkaXYg
Y2xhc3M9InRpY2tMYWJlbCIgc3R5bGU9ImZsb2F0OmxlZnQ7d2lkdGg6JythSysncHgiPicrYUUr
IjwvZGl2PiIpfX1pZihhSS5sZW5ndGg+MCl7YUkucHVzaCgnPGRpdiBzdHlsZT0iY2xlYXI6bGVm
dCI+PC9kaXY+Jyk7YUM9YUgoYUksIndpZHRoOjEwMDAwcHg7Iik7YUc9YUMuaGVpZ2h0KCk7YUMu
cmVtb3ZlKCl9fX1lbHNle2lmKGFLPT1udWxsfHxhRz09bnVsbCl7Zm9yKGFGPTA7YUY8YUoubGVu
Z3RoOysrYUYpe2FFPWFKW2FGXS5sYWJlbDtpZihhRSl7YUkucHVzaCgnPGRpdiBjbGFzcz0idGlj
a0xhYmVsIj4nK2FFKyI8L2Rpdj4iKX19aWYoYUkubGVuZ3RoPjApe2FDPWFIKGFJLCIiKTtpZihh
Sz09bnVsbCl7YUs9YUMuY2hpbGRyZW4oKS53aWR0aCgpfWlmKGFHPT1udWxsKXthRz1hQy5maW5k
KCJkaXYudGlja0xhYmVsIikuaGVpZ2h0KCl9YUMucmVtb3ZlKCl9fX1pZihhSz09bnVsbCl7YUs9
MH1pZihhRz09bnVsbCl7YUc9MH1hRC5sYWJlbFdpZHRoPWFLO2FELmxhYmVsSGVpZ2h0PWFHfWZ1
bmN0aW9uIGF1KGFEKXt2YXIgYUM9YUQubGFiZWxXaWR0aCxhTD1hRC5sYWJlbEhlaWdodCxhSD1h
RC5vcHRpb25zLnBvc2l0aW9uLGFGPWFELm9wdGlvbnMudGlja0xlbmd0aCxhRz1PLmdyaWQuYXhp
c01hcmdpbixhSj1PLmdyaWQubGFiZWxNYXJnaW4sYUs9YUQuZGlyZWN0aW9uPT0ieCI/cDphdyxh
RTt2YXIgYUI9Yy5ncmVwKGFLLGZ1bmN0aW9uKGFOKXtyZXR1cm4gYU4mJmFOLm9wdGlvbnMucG9z
aXRpb249PWFIJiZhTi5yZXNlcnZlU3BhY2V9KTtpZihjLmluQXJyYXkoYUQsYUIpPT1hQi5sZW5n
dGgtMSl7YUc9MH1pZihhRj09bnVsbCl7YUY9ImZ1bGwifXZhciBhST1jLmdyZXAoYUssZnVuY3Rp
b24oYU4pe3JldHVybiBhTiYmYU4ucmVzZXJ2ZVNwYWNlfSk7dmFyIGFNPWMuaW5BcnJheShhRCxh
SSk9PTA7aWYoIWFNJiZhRj09ImZ1bGwiKXthRj01fWlmKCFpc05hTigrYUYpKXthSis9K2FGfWlm
KGFELmRpcmVjdGlvbj09IngiKXthTCs9YUo7aWYoYUg9PSJib3R0b20iKXtxLmJvdHRvbSs9YUwr
YUc7YUQuYm94PXt0b3A6SS1xLmJvdHRvbSxoZWlnaHQ6YUx9fWVsc2V7YUQuYm94PXt0b3A6cS50
b3ArYUcsaGVpZ2h0OmFMfTtxLnRvcCs9YUwrYUd9fWVsc2V7YUMrPWFKO2lmKGFIPT0ibGVmdCIp
e2FELmJveD17bGVmdDpxLmxlZnQrYUcsd2lkdGg6YUN9O3EubGVmdCs9YUMrYUd9ZWxzZXtxLnJp
Z2h0Kz1hQythRzthRC5ib3g9e2xlZnQ6Ry1xLnJpZ2h0LHdpZHRoOmFDfX19YUQucG9zaXRpb249
YUg7YUQudGlja0xlbmd0aD1hRjthRC5ib3gucGFkZGluZz1hSjthRC5pbm5lcm1vc3Q9YU19ZnVu
Y3Rpb24gVShhQil7aWYoYUIuZGlyZWN0aW9uPT0ieCIpe2FCLmJveC5sZWZ0PXEubGVmdDthQi5i
b3gud2lkdGg9aH1lbHNle2FCLmJveC50b3A9cS50b3A7YUIuYm94LmhlaWdodD13fX1mdW5jdGlv
biB0KCl7dmFyIGFDLGFFPW0oKTtjLmVhY2goYUUsZnVuY3Rpb24oYUYsYUcpe2FHLnNob3c9YUcu
b3B0aW9ucy5zaG93O2lmKGFHLnNob3c9PW51bGwpe2FHLnNob3c9YUcudXNlZH1hRy5yZXNlcnZl
U3BhY2U9YUcuc2hvd3x8YUcub3B0aW9ucy5yZXNlcnZlU3BhY2U7bihhRyl9KTthbGxvY2F0ZWRB
eGVzPWMuZ3JlcChhRSxmdW5jdGlvbihhRil7cmV0dXJuIGFGLnJlc2VydmVTcGFjZX0pO3EubGVm
dD1xLnJpZ2h0PXEudG9wPXEuYm90dG9tPTA7aWYoTy5ncmlkLnNob3cpe2MuZWFjaChhbGxvY2F0
ZWRBeGVzLGZ1bmN0aW9uKGFGLGFHKXtTKGFHKTtQKGFHKTthcChhRyxhRy50aWNrcyk7TChhRyl9
KTtmb3IoYUM9YWxsb2NhdGVkQXhlcy5sZW5ndGgtMTthQz49MDstLWFDKXthdShhbGxvY2F0ZWRB
eGVzW2FDXSl9dmFyIGFEPU8uZ3JpZC5taW5Cb3JkZXJNYXJnaW47aWYoYUQ9PW51bGwpe2FEPTA7
Zm9yKGFDPTA7YUM8US5sZW5ndGg7KythQyl7YUQ9TWF0aC5tYXgoYUQsUVthQ10ucG9pbnRzLnJh
ZGl1cytRW2FDXS5wb2ludHMubGluZVdpZHRoLzIpfX1mb3IodmFyIGFCIGluIHEpe3FbYUJdKz1P
LmdyaWQuYm9yZGVyV2lkdGg7cVthQl09TWF0aC5tYXgoYUQscVthQl0pfX1oPUctcS5sZWZ0LXEu
cmlnaHQ7dz1JLXEuYm90dG9tLXEudG9wO2MuZWFjaChhRSxmdW5jdGlvbihhRixhRyl7cihhRyl9
KTtpZihPLmdyaWQuc2hvdyl7Yy5lYWNoKGFsbG9jYXRlZEF4ZXMsZnVuY3Rpb24oYUYsYUcpe1Uo
YUcpfSk7aygpfW8oKX1mdW5jdGlvbiBuKGFFKXt2YXIgYUY9YUUub3B0aW9ucyxhRD0rKGFGLm1p
biE9bnVsbD9hRi5taW46YUUuZGF0YW1pbiksYUI9KyhhRi5tYXghPW51bGw/YUYubWF4OmFFLmRh
dGFtYXgpLGFIPWFCLWFEO2lmKGFIPT0wKXt2YXIgYUM9YUI9PTA/MTowLjAxO2lmKGFGLm1pbj09
bnVsbCl7YUQtPWFDfWlmKGFGLm1heD09bnVsbHx8YUYubWluIT1udWxsKXthQis9YUN9fWVsc2V7
dmFyIGFHPWFGLmF1dG9zY2FsZU1hcmdpbjtpZihhRyE9bnVsbCl7aWYoYUYubWluPT1udWxsKXth
RC09YUgqYUc7aWYoYUQ8MCYmYUUuZGF0YW1pbiE9bnVsbCYmYUUuZGF0YW1pbj49MCl7YUQ9MH19
aWYoYUYubWF4PT1udWxsKXthQis9YUgqYUc7aWYoYUI+MCYmYUUuZGF0YW1heCE9bnVsbCYmYUUu
ZGF0YW1heDw9MCl7YUI9MH19fX1hRS5taW49YUQ7YUUubWF4PWFCfWZ1bmN0aW9uIFMoYUcpe3Zh
ciBhTT1hRy5vcHRpb25zO3ZhciBhSDtpZih0eXBlb2YgYU0udGlja3M9PSJudW1iZXIiJiZhTS50
aWNrcz4wKXthSD1hTS50aWNrc31lbHNle2FIPTAuMypNYXRoLnNxcnQoYUcuZGlyZWN0aW9uPT0i
eCI/RzpJKX12YXIgYVQ9KGFHLm1heC1hRy5taW4pL2FILGFPLGFCLGFOLGFSLGFTLGFRLGFJO2lm
KGFNLm1vZGU9PSJ0aW1lIil7dmFyIGFKPXtzZWNvbmQ6MTAwMCxtaW51dGU6NjAqMTAwMCxob3Vy
OjYwKjYwKjEwMDAsZGF5OjI0KjYwKjYwKjEwMDAsbW9udGg6MzAqMjQqNjAqNjAqMTAwMCx5ZWFy
OjM2NS4yNDI1KjI0KjYwKjYwKjEwMDB9O3ZhciBhSz1bWzEsInNlY29uZCJdLFsyLCJzZWNvbmQi
XSxbNSwic2Vjb25kIl0sWzEwLCJzZWNvbmQiXSxbMzAsInNlY29uZCJdLFsxLCJtaW51dGUiXSxb
MiwibWludXRlIl0sWzUsIm1pbnV0ZSJdLFsxMCwibWludXRlIl0sWzMwLCJtaW51dGUiXSxbMSwi
aG91ciJdLFsyLCJob3VyIl0sWzQsImhvdXIiXSxbOCwiaG91ciJdLFsxMiwiaG91ciJdLFsxLCJk
YXkiXSxbMiwiZGF5Il0sWzMsImRheSJdLFswLjI1LCJtb250aCJdLFswLjUsIm1vbnRoIl0sWzEs
Im1vbnRoIl0sWzIsIm1vbnRoIl0sWzMsIm1vbnRoIl0sWzYsIm1vbnRoIl0sWzEsInllYXIiXV07
dmFyIGFDPTA7aWYoYU0ubWluVGlja1NpemUhPW51bGwpe2lmKHR5cGVvZiBhTS50aWNrU2l6ZT09
Im51bWJlciIpe2FDPWFNLnRpY2tTaXplfWVsc2V7YUM9YU0ubWluVGlja1NpemVbMF0qYUpbYU0u
bWluVGlja1NpemVbMV1dfX1mb3IodmFyIGFTPTA7YVM8YUsubGVuZ3RoLTE7KythUyl7aWYoYVQ8
KGFLW2FTXVswXSphSlthS1thU11bMV1dK2FLW2FTKzFdWzBdKmFKW2FLW2FTKzFdWzFdXSkvMiYm
YUtbYVNdWzBdKmFKW2FLW2FTXVsxXV0+PWFDKXticmVha319YU89YUtbYVNdWzBdO2FOPWFLW2FT
XVsxXTtpZihhTj09InllYXIiKXthUT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGFU
L2FKLnllYXIpL01hdGguTE4xMCkpO2FJPShhVC9hSi55ZWFyKS9hUTtpZihhSTwxLjUpe2FPPTF9
ZWxzZXtpZihhSTwzKXthTz0yfWVsc2V7aWYoYUk8Ny41KXthTz01fWVsc2V7YU89MTB9fX1hTyo9
YVF9YUcudGlja1NpemU9YU0udGlja1NpemV8fFthTyxhTl07YUI9ZnVuY3Rpb24oYVgpe3ZhciBh
Mj1bXSxhMD1hWC50aWNrU2l6ZVswXSxhMz1hWC50aWNrU2l6ZVsxXSxhMT1uZXcgRGF0ZShhWC5t
aW4pO3ZhciBhVz1hMCphSlthM107aWYoYTM9PSJzZWNvbmQiKXthMS5zZXRVVENTZWNvbmRzKGEo
YTEuZ2V0VVRDU2Vjb25kcygpLGEwKSl9aWYoYTM9PSJtaW51dGUiKXthMS5zZXRVVENNaW51dGVz
KGEoYTEuZ2V0VVRDTWludXRlcygpLGEwKSl9aWYoYTM9PSJob3VyIil7YTEuc2V0VVRDSG91cnMo
YShhMS5nZXRVVENIb3VycygpLGEwKSl9aWYoYTM9PSJtb250aCIpe2ExLnNldFVUQ01vbnRoKGEo
YTEuZ2V0VVRDTW9udGgoKSxhMCkpfWlmKGEzPT0ieWVhciIpe2ExLnNldFVUQ0Z1bGxZZWFyKGEo
YTEuZ2V0VVRDRnVsbFllYXIoKSxhMCkpfWExLnNldFVUQ01pbGxpc2Vjb25kcygwKTtpZihhVz49
YUoubWludXRlKXthMS5zZXRVVENTZWNvbmRzKDApfWlmKGFXPj1hSi5ob3VyKXthMS5zZXRVVENN
aW51dGVzKDApfWlmKGFXPj1hSi5kYXkpe2ExLnNldFVUQ0hvdXJzKDApfWlmKGFXPj1hSi5kYXkq
NCl7YTEuc2V0VVRDRGF0ZSgxKX1pZihhVz49YUoueWVhcil7YTEuc2V0VVRDTW9udGgoMCl9dmFy
IGE1PTAsYTQ9TnVtYmVyLk5hTixhWTtkb3thWT1hNDthND1hMS5nZXRUaW1lKCk7YTIucHVzaChh
NCk7aWYoYTM9PSJtb250aCIpe2lmKGEwPDEpe2ExLnNldFVUQ0RhdGUoMSk7dmFyIGFWPWExLmdl
dFRpbWUoKTthMS5zZXRVVENNb250aChhMS5nZXRVVENNb250aCgpKzEpO3ZhciBhWj1hMS5nZXRU
aW1lKCk7YTEuc2V0VGltZShhNCthNSphSi5ob3VyKyhhWi1hVikqYTApO2E1PWExLmdldFVUQ0hv
dXJzKCk7YTEuc2V0VVRDSG91cnMoMCl9ZWxzZXthMS5zZXRVVENNb250aChhMS5nZXRVVENNb250
aCgpK2EwKX19ZWxzZXtpZihhMz09InllYXIiKXthMS5zZXRVVENGdWxsWWVhcihhMS5nZXRVVENG
dWxsWWVhcigpK2EwKX1lbHNle2ExLnNldFRpbWUoYTQrYVcpfX19d2hpbGUoYTQ8YVgubWF4JiZh
NCE9YVkpO3JldHVybiBhMn07YVI9ZnVuY3Rpb24oYVYsYVkpe3ZhciBhMD1uZXcgRGF0ZShhVik7
aWYoYU0udGltZWZvcm1hdCE9bnVsbCl7cmV0dXJuIGMucGxvdC5mb3JtYXREYXRlKGEwLGFNLnRp
bWVmb3JtYXQsYU0ubW9udGhOYW1lcyl9dmFyIGFXPWFZLnRpY2tTaXplWzBdKmFKW2FZLnRpY2tT
aXplWzFdXTt2YXIgYVg9YVkubWF4LWFZLm1pbjt2YXIgYVo9KGFNLnR3ZWx2ZUhvdXJDbG9jayk/
IiAlcCI6IiI7aWYoYVc8YUoubWludXRlKXtmbXQ9IiVoOiVNOiVTIithWn1lbHNle2lmKGFXPGFK
LmRheSl7aWYoYVg8MiphSi5kYXkpe2ZtdD0iJWg6JU0iK2FafWVsc2V7Zm10PSIlYiAlZCAlaDol
TSIrYVp9fWVsc2V7aWYoYVc8YUoubW9udGgpe2ZtdD0iJWIgJWQifWVsc2V7aWYoYVc8YUoueWVh
cil7aWYoYVg8YUoueWVhcil7Zm10PSIlYiJ9ZWxzZXtmbXQ9IiViICV5In19ZWxzZXtmbXQ9IiV5
In19fX1yZXR1cm4gYy5wbG90LmZvcm1hdERhdGUoYTAsZm10LGFNLm1vbnRoTmFtZXMpfX1lbHNl
e3ZhciBhVT1hTS50aWNrRGVjaW1hbHM7dmFyIGFQPS1NYXRoLmZsb29yKE1hdGgubG9nKGFUKS9N
YXRoLkxOMTApO2lmKGFVIT1udWxsJiZhUD5hVSl7YVA9YVV9YVE9TWF0aC5wb3coMTAsLWFQKTth
ST1hVC9hUTtpZihhSTwxLjUpe2FPPTF9ZWxzZXtpZihhSTwzKXthTz0yO2lmKGFJPjIuMjUmJihh
VT09bnVsbHx8YVArMTw9YVUpKXthTz0yLjU7KythUH19ZWxzZXtpZihhSTw3LjUpe2FPPTV9ZWxz
ZXthTz0xMH19fWFPKj1hUTtpZihhTS5taW5UaWNrU2l6ZSE9bnVsbCYmYU88YU0ubWluVGlja1Np
emUpe2FPPWFNLm1pblRpY2tTaXplfWFHLnRpY2tEZWNpbWFscz1NYXRoLm1heCgwLGFVIT1udWxs
P2FVOmFQKTthRy50aWNrU2l6ZT1hTS50aWNrU2l6ZXx8YU87YUI9ZnVuY3Rpb24oYVgpe3ZhciBh
Wj1bXTt2YXIgYTA9YShhWC5taW4sYVgudGlja1NpemUpLGFXPTAsYVY9TnVtYmVyLk5hTixhWTtk
b3thWT1hVjthVj1hMCthVyphWC50aWNrU2l6ZTthWi5wdXNoKGFWKTsrK2FXfXdoaWxlKGFWPGFY
Lm1heCYmYVYhPWFZKTtyZXR1cm4gYVp9O2FSPWZ1bmN0aW9uKGFWLGFXKXtyZXR1cm4gYVYudG9G
aXhlZChhVy50aWNrRGVjaW1hbHMpfX1pZihhTS5hbGlnblRpY2tzV2l0aEF4aXMhPW51bGwpe3Zh
ciBhRj0oYUcuZGlyZWN0aW9uPT0ieCI/cDphdylbYU0uYWxpZ25UaWNrc1dpdGhBeGlzLTFdO2lm
KGFGJiZhRi51c2VkJiZhRiE9YUcpe3ZhciBhTD1hQihhRyk7aWYoYUwubGVuZ3RoPjApe2lmKGFN
Lm1pbj09bnVsbCl7YUcubWluPU1hdGgubWluKGFHLm1pbixhTFswXSl9aWYoYU0ubWF4PT1udWxs
JiZhTC5sZW5ndGg+MSl7YUcubWF4PU1hdGgubWF4KGFHLm1heCxhTFthTC5sZW5ndGgtMV0pfX1h
Qj1mdW5jdGlvbihhWCl7dmFyIGFZPVtdLGFWLGFXO2ZvcihhVz0wO2FXPGFGLnRpY2tzLmxlbmd0
aDsrK2FXKXthVj0oYUYudGlja3NbYVddLnYtYUYubWluKS8oYUYubWF4LWFGLm1pbik7YVY9YVgu
bWluK2FWKihhWC5tYXgtYVgubWluKTthWS5wdXNoKGFWKX1yZXR1cm4gYVl9O2lmKGFHLm1vZGUh
PSJ0aW1lIiYmYU0udGlja0RlY2ltYWxzPT1udWxsKXt2YXIgYUU9TWF0aC5tYXgoMCwtTWF0aC5m
bG9vcihNYXRoLmxvZyhhVCkvTWF0aC5MTjEwKSsxKSxhRD1hQihhRyk7aWYoIShhRC5sZW5ndGg+
MSYmL1wuLiowJC8udGVzdCgoYURbMV0tYURbMF0pLnRvRml4ZWQoYUUpKSkpe2FHLnRpY2tEZWNp
bWFscz1hRX19fX1hRy50aWNrR2VuZXJhdG9yPWFCO2lmKGMuaXNGdW5jdGlvbihhTS50aWNrRm9y
bWF0dGVyKSl7YUcudGlja0Zvcm1hdHRlcj1mdW5jdGlvbihhVixhVyl7cmV0dXJuIiIrYU0udGlj
a0Zvcm1hdHRlcihhVixhVyl9fWVsc2V7YUcudGlja0Zvcm1hdHRlcj1hUn19ZnVuY3Rpb24gUChh
Ril7dmFyIGFIPWFGLm9wdGlvbnMudGlja3MsYUc9W107aWYoYUg9PW51bGx8fCh0eXBlb2YgYUg9
PSJudW1iZXIiJiZhSD4wKSl7YUc9YUYudGlja0dlbmVyYXRvcihhRil9ZWxzZXtpZihhSCl7aWYo
Yy5pc0Z1bmN0aW9uKGFIKSl7YUc9YUgoe21pbjphRi5taW4sbWF4OmFGLm1heH0pfWVsc2V7YUc9
YUh9fX12YXIgYUUsYUI7YUYudGlja3M9W107Zm9yKGFFPTA7YUU8YUcubGVuZ3RoOysrYUUpe3Zh
ciBhQz1udWxsO3ZhciBhRD1hR1thRV07aWYodHlwZW9mIGFEPT0ib2JqZWN0Iil7YUI9K2FEWzBd
O2lmKGFELmxlbmd0aD4xKXthQz1hRFsxXX19ZWxzZXthQj0rYUR9aWYoYUM9PW51bGwpe2FDPWFG
LnRpY2tGb3JtYXR0ZXIoYUIsYUYpfWlmKCFpc05hTihhQikpe2FGLnRpY2tzLnB1c2goe3Y6YUIs
bGFiZWw6YUN9KX19fWZ1bmN0aW9uIGFwKGFCLGFDKXtpZihhQi5vcHRpb25zLmF1dG9zY2FsZU1h
cmdpbiYmYUMubGVuZ3RoPjApe2lmKGFCLm9wdGlvbnMubWluPT1udWxsKXthQi5taW49TWF0aC5t
aW4oYUIubWluLGFDWzBdLnYpfWlmKGFCLm9wdGlvbnMubWF4PT1udWxsJiZhQy5sZW5ndGg+MSl7
YUIubWF4PU1hdGgubWF4KGFCLm1heCxhQ1thQy5sZW5ndGgtMV0udil9fX1mdW5jdGlvbiBXKCl7
SC5jbGVhclJlY3QoMCwwLEcsSSk7dmFyIGFDPU8uZ3JpZDtpZihhQy5zaG93JiZhQy5iYWNrZ3Jv
dW5kQ29sb3Ipe04oKX1pZihhQy5zaG93JiYhYUMuYWJvdmVEYXRhKXthYygpfWZvcih2YXIgYUI9
MDthQjxRLmxlbmd0aDsrK2FCKXthbihhay5kcmF3U2VyaWVzLFtILFFbYUJdXSk7ZChRW2FCXSl9
YW4oYWsuZHJhdyxbSF0pO2lmKGFDLnNob3cmJmFDLmFib3ZlRGF0YSl7YWMoKX19ZnVuY3Rpb24g
RChhQixhSSl7dmFyIGFFLGFILGFHLGFELGFGPW0oKTtmb3IoaT0wO2k8YUYubGVuZ3RoOysraSl7
YUU9YUZbaV07aWYoYUUuZGlyZWN0aW9uPT1hSSl7YUQ9YUkrYUUubisiYXhpcyI7aWYoIWFCW2FE
XSYmYUUubj09MSl7YUQ9YUkrImF4aXMifWlmKGFCW2FEXSl7YUg9YUJbYURdLmZyb207YUc9YUJb
YURdLnRvO2JyZWFrfX19aWYoIWFCW2FEXSl7YUU9YUk9PSJ4Ij9wWzBdOmF3WzBdO2FIPWFCW2FJ
KyIxIl07YUc9YUJbYUkrIjIiXX1pZihhSCE9bnVsbCYmYUchPW51bGwmJmFIPmFHKXt2YXIgYUM9
YUg7YUg9YUc7YUc9YUN9cmV0dXJue2Zyb206YUgsdG86YUcsYXhpczphRX19ZnVuY3Rpb24gTigp
e0guc2F2ZSgpO0gudHJhbnNsYXRlKHEubGVmdCxxLnRvcCk7SC5maWxsU3R5bGU9YW0oTy5ncmlk
LmJhY2tncm91bmRDb2xvcix3LDAsInJnYmEoMjU1LCAyNTUsIDI1NSwgMCkiKTtILmZpbGxSZWN0
KDAsMCxoLHcpO0gucmVzdG9yZSgpfWZ1bmN0aW9uIGFjKCl7dmFyIGFGO0guc2F2ZSgpO0gudHJh
bnNsYXRlKHEubGVmdCxxLnRvcCk7dmFyIGFIPU8uZ3JpZC5tYXJraW5ncztpZihhSCl7aWYoYy5p
c0Z1bmN0aW9uKGFIKSl7dmFyIGFLPWFxLmdldEF4ZXMoKTthSy54bWluPWFLLnhheGlzLm1pbjth
Sy54bWF4PWFLLnhheGlzLm1heDthSy55bWluPWFLLnlheGlzLm1pbjthSy55bWF4PWFLLnlheGlz
Lm1heDthSD1hSChhSyl9Zm9yKGFGPTA7YUY8YUgubGVuZ3RoOysrYUYpe3ZhciBhRD1hSFthRl0s
YUM9RChhRCwieCIpLGFJPUQoYUQsInkiKTtpZihhQy5mcm9tPT1udWxsKXthQy5mcm9tPWFDLmF4
aXMubWlufWlmKGFDLnRvPT1udWxsKXthQy50bz1hQy5heGlzLm1heH1pZihhSS5mcm9tPT1udWxs
KXthSS5mcm9tPWFJLmF4aXMubWlufWlmKGFJLnRvPT1udWxsKXthSS50bz1hSS5heGlzLm1heH1p
ZihhQy50bzxhQy5heGlzLm1pbnx8YUMuZnJvbT5hQy5heGlzLm1heHx8YUkudG88YUkuYXhpcy5t
aW58fGFJLmZyb20+YUkuYXhpcy5tYXgpe2NvbnRpbnVlfWFDLmZyb209TWF0aC5tYXgoYUMuZnJv
bSxhQy5heGlzLm1pbik7YUMudG89TWF0aC5taW4oYUMudG8sYUMuYXhpcy5tYXgpO2FJLmZyb209
TWF0aC5tYXgoYUkuZnJvbSxhSS5heGlzLm1pbik7YUkudG89TWF0aC5taW4oYUkudG8sYUkuYXhp
cy5tYXgpO2lmKGFDLmZyb209PWFDLnRvJiZhSS5mcm9tPT1hSS50byl7Y29udGludWV9YUMuZnJv
bT1hQy5heGlzLnAyYyhhQy5mcm9tKTthQy50bz1hQy5heGlzLnAyYyhhQy50byk7YUkuZnJvbT1h
SS5heGlzLnAyYyhhSS5mcm9tKTthSS50bz1hSS5heGlzLnAyYyhhSS50byk7aWYoYUMuZnJvbT09
YUMudG98fGFJLmZyb209PWFJLnRvKXtILmJlZ2luUGF0aCgpO0guc3Ryb2tlU3R5bGU9YUQuY29s
b3J8fE8uZ3JpZC5tYXJraW5nc0NvbG9yO0gubGluZVdpZHRoPWFELmxpbmVXaWR0aHx8Ty5ncmlk
Lm1hcmtpbmdzTGluZVdpZHRoO0gubW92ZVRvKGFDLmZyb20sYUkuZnJvbSk7SC5saW5lVG8oYUMu
dG8sYUkudG8pO0guc3Ryb2tlKCl9ZWxzZXtILmZpbGxTdHlsZT1hRC5jb2xvcnx8Ty5ncmlkLm1h
cmtpbmdzQ29sb3I7SC5maWxsUmVjdChhQy5mcm9tLGFJLnRvLGFDLnRvLWFDLmZyb20sYUkuZnJv
bS1hSS50byl9fX12YXIgYUs9bSgpLGFNPU8uZ3JpZC5ib3JkZXJXaWR0aDtmb3IodmFyIGFFPTA7
YUU8YUsubGVuZ3RoOysrYUUpe3ZhciBhQj1hS1thRV0sYUc9YUIuYm94LGFRPWFCLnRpY2tMZW5n
dGgsYU4sYUwsYVAsYUo7aWYoIWFCLnNob3d8fGFCLnRpY2tzLmxlbmd0aD09MCl7Y29udGludWV9
SC5zdHJva2VTdHlsZT1hQi5vcHRpb25zLnRpY2tDb2xvcnx8Yy5jb2xvci5wYXJzZShhQi5vcHRp
b25zLmNvbG9yKS5zY2FsZSgiYSIsMC4yMikudG9TdHJpbmcoKTtILmxpbmVXaWR0aD0xO2lmKGFC
LmRpcmVjdGlvbj09IngiKXthTj0wO2lmKGFRPT0iZnVsbCIpe2FMPShhQi5wb3NpdGlvbj09InRv
cCI/MDp3KX1lbHNle2FMPWFHLnRvcC1xLnRvcCsoYUIucG9zaXRpb249PSJ0b3AiP2FHLmhlaWdo
dDowKX19ZWxzZXthTD0wO2lmKGFRPT0iZnVsbCIpe2FOPShhQi5wb3NpdGlvbj09ImxlZnQiPzA6
aCl9ZWxzZXthTj1hRy5sZWZ0LXEubGVmdCsoYUIucG9zaXRpb249PSJsZWZ0Ij9hRy53aWR0aDow
KX19aWYoIWFCLmlubmVybW9zdCl7SC5iZWdpblBhdGgoKTthUD1hSj0wO2lmKGFCLmRpcmVjdGlv
bj09IngiKXthUD1ofWVsc2V7YUo9d31pZihILmxpbmVXaWR0aD09MSl7YU49TWF0aC5mbG9vcihh
TikrMC41O2FMPU1hdGguZmxvb3IoYUwpKzAuNX1ILm1vdmVUbyhhTixhTCk7SC5saW5lVG8oYU4r
YVAsYUwrYUopO0guc3Ryb2tlKCl9SC5iZWdpblBhdGgoKTtmb3IoYUY9MDthRjxhQi50aWNrcy5s
ZW5ndGg7KythRil7dmFyIGFPPWFCLnRpY2tzW2FGXS52O2FQPWFKPTA7aWYoYU88YUIubWlufHxh
Tz5hQi5tYXh8fChhUT09ImZ1bGwiJiZhTT4wJiYoYU89PWFCLm1pbnx8YU89PWFCLm1heCkpKXtj
b250aW51ZX1pZihhQi5kaXJlY3Rpb249PSJ4Iil7YU49YUIucDJjKGFPKTthSj1hUT09ImZ1bGwi
Py13OmFRO2lmKGFCLnBvc2l0aW9uPT0idG9wIil7YUo9LWFKfX1lbHNle2FMPWFCLnAyYyhhTyk7
YVA9YVE9PSJmdWxsIj8taDphUTtpZihhQi5wb3NpdGlvbj09ImxlZnQiKXthUD0tYVB9fWlmKEgu
bGluZVdpZHRoPT0xKXtpZihhQi5kaXJlY3Rpb249PSJ4Iil7YU49TWF0aC5mbG9vcihhTikrMC41
fWVsc2V7YUw9TWF0aC5mbG9vcihhTCkrMC41fX1ILm1vdmVUbyhhTixhTCk7SC5saW5lVG8oYU4r
YVAsYUwrYUopfUguc3Ryb2tlKCl9aWYoYU0pe0gubGluZVdpZHRoPWFNO0guc3Ryb2tlU3R5bGU9
Ty5ncmlkLmJvcmRlckNvbG9yO0guc3Ryb2tlUmVjdCgtYU0vMiwtYU0vMixoK2FNLHcrYU0pfUgu
cmVzdG9yZSgpfWZ1bmN0aW9uIGsoKXthdi5maW5kKCIudGlja0xhYmVscyIpLnJlbW92ZSgpO3Zh
ciBhRz1bJzxkaXYgY2xhc3M9InRpY2tMYWJlbHMiIHN0eWxlPSJmb250LXNpemU6c21hbGxlciI+
J107dmFyIGFKPW0oKTtmb3IodmFyIGFEPTA7YUQ8YUoubGVuZ3RoOysrYUQpe3ZhciBhQz1hSlth
RF0sYUY9YUMuYm94O2lmKCFhQy5zaG93KXtjb250aW51ZX1hRy5wdXNoKCc8ZGl2IGNsYXNzPSIn
K2FDLmRpcmVjdGlvbisiQXhpcyAiK2FDLmRpcmVjdGlvbithQy5uKydBeGlzIiBzdHlsZT0iY29s
b3I6JythQy5vcHRpb25zLmNvbG9yKyciPicpO2Zvcih2YXIgYUU9MDthRTxhQy50aWNrcy5sZW5n
dGg7KythRSl7dmFyIGFIPWFDLnRpY2tzW2FFXTtpZighYUgubGFiZWx8fGFILnY8YUMubWlufHxh
SC52PmFDLm1heCl7Y29udGludWV9dmFyIGFLPXt9LGFJO2lmKGFDLmRpcmVjdGlvbj09IngiKXth
ST0iY2VudGVyIjthSy5sZWZ0PU1hdGgucm91bmQocS5sZWZ0K2FDLnAyYyhhSC52KS1hQy5sYWJl
bFdpZHRoLzIpO2lmKGFDLnBvc2l0aW9uPT0iYm90dG9tIil7YUsudG9wPWFGLnRvcCthRi5wYWRk
aW5nfWVsc2V7YUsuYm90dG9tPUktKGFGLnRvcCthRi5oZWlnaHQtYUYucGFkZGluZyl9fWVsc2V7
YUsudG9wPU1hdGgucm91bmQocS50b3ArYUMucDJjKGFILnYpLWFDLmxhYmVsSGVpZ2h0LzIpO2lm
KGFDLnBvc2l0aW9uPT0ibGVmdCIpe2FLLnJpZ2h0PUctKGFGLmxlZnQrYUYud2lkdGgtYUYucGFk
ZGluZyk7YUk9InJpZ2h0In1lbHNle2FLLmxlZnQ9YUYubGVmdCthRi5wYWRkaW5nO2FJPSJsZWZ0
In19YUsud2lkdGg9YUMubGFiZWxXaWR0aDt2YXIgYUI9WyJwb3NpdGlvbjphYnNvbHV0ZSIsInRl
eHQtYWxpZ246IithSV07Zm9yKHZhciBhTCBpbiBhSyl7YUIucHVzaChhTCsiOiIrYUtbYUxdKyJw
eCIpfWFHLnB1c2goJzxkaXYgY2xhc3M9InRpY2tMYWJlbCIgc3R5bGU9IicrYUIuam9pbigiOyIp
KyciPicrYUgubGFiZWwrIjwvZGl2PiIpfWFHLnB1c2goIjwvZGl2PiIpfWFHLnB1c2goIjwvZGl2
PiIpO2F2LmFwcGVuZChhRy5qb2luKCIiKSl9ZnVuY3Rpb24gZChhQil7aWYoYUIubGluZXMuc2hv
dyl7YXQoYUIpfWlmKGFCLmJhcnMuc2hvdyl7ZShhQil9aWYoYUIucG9pbnRzLnNob3cpe2FvKGFC
KX19ZnVuY3Rpb24gYXQoYUUpe2Z1bmN0aW9uIGFEKGFQLGFRLGFJLGFVLGFUKXt2YXIgYVY9YVAu
cG9pbnRzLGFKPWFQLnBvaW50c2l6ZSxhTj1udWxsLGFNPW51bGw7SC5iZWdpblBhdGgoKTtmb3Io
dmFyIGFPPWFKO2FPPGFWLmxlbmd0aDthTys9YUope3ZhciBhTD1hVlthTy1hSl0sYVM9YVZbYU8t
YUorMV0sYUs9YVZbYU9dLGFSPWFWW2FPKzFdO2lmKGFMPT1udWxsfHxhSz09bnVsbCl7Y29udGlu
dWV9aWYoYVM8PWFSJiZhUzxhVC5taW4pe2lmKGFSPGFULm1pbil7Y29udGludWV9YUw9KGFULm1p
bi1hUykvKGFSLWFTKSooYUstYUwpK2FMO2FTPWFULm1pbn1lbHNle2lmKGFSPD1hUyYmYVI8YVQu
bWluKXtpZihhUzxhVC5taW4pe2NvbnRpbnVlfWFLPShhVC5taW4tYVMpLyhhUi1hUykqKGFLLWFM
KSthTDthUj1hVC5taW59fWlmKGFTPj1hUiYmYVM+YVQubWF4KXtpZihhUj5hVC5tYXgpe2NvbnRp
bnVlfWFMPShhVC5tYXgtYVMpLyhhUi1hUykqKGFLLWFMKSthTDthUz1hVC5tYXh9ZWxzZXtpZihh
Uj49YVMmJmFSPmFULm1heCl7aWYoYVM+YVQubWF4KXtjb250aW51ZX1hSz0oYVQubWF4LWFTKS8o
YVItYVMpKihhSy1hTCkrYUw7YVI9YVQubWF4fX1pZihhTDw9YUsmJmFMPGFVLm1pbil7aWYoYUs8
YVUubWluKXtjb250aW51ZX1hUz0oYVUubWluLWFMKS8oYUstYUwpKihhUi1hUykrYVM7YUw9YVUu
bWlufWVsc2V7aWYoYUs8PWFMJiZhSzxhVS5taW4pe2lmKGFMPGFVLm1pbil7Y29udGludWV9YVI9
KGFVLm1pbi1hTCkvKGFLLWFMKSooYVItYVMpK2FTO2FLPWFVLm1pbn19aWYoYUw+PWFLJiZhTD5h
VS5tYXgpe2lmKGFLPmFVLm1heCl7Y29udGludWV9YVM9KGFVLm1heC1hTCkvKGFLLWFMKSooYVIt
YVMpK2FTO2FMPWFVLm1heH1lbHNle2lmKGFLPj1hTCYmYUs+YVUubWF4KXtpZihhTD5hVS5tYXgp
e2NvbnRpbnVlfWFSPShhVS5tYXgtYUwpLyhhSy1hTCkqKGFSLWFTKSthUzthSz1hVS5tYXh9fWlm
KGFMIT1hTnx8YVMhPWFNKXtILm1vdmVUbyhhVS5wMmMoYUwpK2FRLGFULnAyYyhhUykrYUkpfWFO
PWFLO2FNPWFSO0gubGluZVRvKGFVLnAyYyhhSykrYVEsYVQucDJjKGFSKSthSSl9SC5zdHJva2Uo
KX1mdW5jdGlvbiBhRihhSSxhUSxhUCl7dmFyIGFXPWFJLnBvaW50cyxhVj1hSS5wb2ludHNpemUs
YU49TWF0aC5taW4oTWF0aC5tYXgoMCxhUC5taW4pLGFQLm1heCksYVg9MCxhVSxhVD1mYWxzZSxh
TT0xLGFMPTAsYVI9MDt3aGlsZSh0cnVlKXtpZihhVj4wJiZhWD5hVy5sZW5ndGgrYVYpe2JyZWFr
fWFYKz1hVjt2YXIgYVo9YVdbYVgtYVZdLGFLPWFXW2FYLWFWK2FNXSxhWT1hV1thWF0sYUo9YVdb
YVgrYU1dO2lmKGFUKXtpZihhVj4wJiZhWiE9bnVsbCYmYVk9PW51bGwpe2FSPWFYO2FWPS1hVjth
TT0yO2NvbnRpbnVlfWlmKGFWPDAmJmFYPT1hTCthVil7SC5maWxsKCk7YVQ9ZmFsc2U7YVY9LWFW
O2FNPTE7YVg9YUw9YVIrYVY7Y29udGludWV9fWlmKGFaPT1udWxsfHxhWT09bnVsbCl7Y29udGlu
dWV9aWYoYVo8PWFZJiZhWjxhUS5taW4pe2lmKGFZPGFRLm1pbil7Y29udGludWV9YUs9KGFRLm1p
bi1hWikvKGFZLWFaKSooYUotYUspK2FLO2FaPWFRLm1pbn1lbHNle2lmKGFZPD1hWiYmYVk8YVEu
bWluKXtpZihhWjxhUS5taW4pe2NvbnRpbnVlfWFKPShhUS5taW4tYVopLyhhWS1hWikqKGFKLWFL
KSthSzthWT1hUS5taW59fWlmKGFaPj1hWSYmYVo+YVEubWF4KXtpZihhWT5hUS5tYXgpe2NvbnRp
bnVlfWFLPShhUS5tYXgtYVopLyhhWS1hWikqKGFKLWFLKSthSzthWj1hUS5tYXh9ZWxzZXtpZihh
WT49YVomJmFZPmFRLm1heCl7aWYoYVo+YVEubWF4KXtjb250aW51ZX1hSj0oYVEubWF4LWFaKS8o
YVktYVopKihhSi1hSykrYUs7YVk9YVEubWF4fX1pZighYVQpe0guYmVnaW5QYXRoKCk7SC5tb3Zl
VG8oYVEucDJjKGFaKSxhUC5wMmMoYU4pKTthVD10cnVlfWlmKGFLPj1hUC5tYXgmJmFKPj1hUC5t
YXgpe0gubGluZVRvKGFRLnAyYyhhWiksYVAucDJjKGFQLm1heCkpO0gubGluZVRvKGFRLnAyYyhh
WSksYVAucDJjKGFQLm1heCkpO2NvbnRpbnVlfWVsc2V7aWYoYUs8PWFQLm1pbiYmYUo8PWFQLm1p
bil7SC5saW5lVG8oYVEucDJjKGFaKSxhUC5wMmMoYVAubWluKSk7SC5saW5lVG8oYVEucDJjKGFZ
KSxhUC5wMmMoYVAubWluKSk7Y29udGludWV9fXZhciBhTz1hWixhUz1hWTtpZihhSzw9YUomJmFL
PGFQLm1pbiYmYUo+PWFQLm1pbil7YVo9KGFQLm1pbi1hSykvKGFKLWFLKSooYVktYVopK2FaO2FL
PWFQLm1pbn1lbHNle2lmKGFKPD1hSyYmYUo8YVAubWluJiZhSz49YVAubWluKXthWT0oYVAubWlu
LWFLKS8oYUotYUspKihhWS1hWikrYVo7YUo9YVAubWlufX1pZihhSz49YUomJmFLPmFQLm1heCYm
YUo8PWFQLm1heCl7YVo9KGFQLm1heC1hSykvKGFKLWFLKSooYVktYVopK2FaO2FLPWFQLm1heH1l
bHNle2lmKGFKPj1hSyYmYUo+YVAubWF4JiZhSzw9YVAubWF4KXthWT0oYVAubWF4LWFLKS8oYUot
YUspKihhWS1hWikrYVo7YUo9YVAubWF4fX1pZihhWiE9YU8pe0gubGluZVRvKGFRLnAyYyhhTyks
YVAucDJjKGFLKSl9SC5saW5lVG8oYVEucDJjKGFaKSxhUC5wMmMoYUspKTtILmxpbmVUbyhhUS5w
MmMoYVkpLGFQLnAyYyhhSikpO2lmKGFZIT1hUyl7SC5saW5lVG8oYVEucDJjKGFZKSxhUC5wMmMo
YUopKTtILmxpbmVUbyhhUS5wMmMoYVMpLGFQLnAyYyhhSikpfX19SC5zYXZlKCk7SC50cmFuc2xh
dGUocS5sZWZ0LHEudG9wKTtILmxpbmVKb2luPSJyb3VuZCI7dmFyIGFHPWFFLmxpbmVzLmxpbmVX
aWR0aCxhQj1hRS5zaGFkb3dTaXplO2lmKGFHPjAmJmFCPjApe0gubGluZVdpZHRoPWFCO0guc3Ry
b2tlU3R5bGU9InJnYmEoMCwwLDAsMC4xKSI7dmFyIGFIPU1hdGguUEkvMTg7YUQoYUUuZGF0YXBv
aW50cyxNYXRoLnNpbihhSCkqKGFHLzIrYUIvMiksTWF0aC5jb3MoYUgpKihhRy8yK2FCLzIpLGFF
LnhheGlzLGFFLnlheGlzKTtILmxpbmVXaWR0aD1hQi8yO2FEKGFFLmRhdGFwb2ludHMsTWF0aC5z
aW4oYUgpKihhRy8yK2FCLzQpLE1hdGguY29zKGFIKSooYUcvMithQi80KSxhRS54YXhpcyxhRS55
YXhpcyl9SC5saW5lV2lkdGg9YUc7SC5zdHJva2VTdHlsZT1hRS5jb2xvcjt2YXIgYUM9YWUoYUUu
bGluZXMsYUUuY29sb3IsMCx3KTtpZihhQyl7SC5maWxsU3R5bGU9YUM7YUYoYUUuZGF0YXBvaW50
cyxhRS54YXhpcyxhRS55YXhpcyl9aWYoYUc+MCl7YUQoYUUuZGF0YXBvaW50cywwLDAsYUUueGF4
aXMsYUUueWF4aXMpfUgucmVzdG9yZSgpfWZ1bmN0aW9uIGFvKGFFKXtmdW5jdGlvbiBhSChhTixh
TSxhVSxhSyxhUyxhVCxhUSxhSil7dmFyIGFSPWFOLnBvaW50cyxhST1hTi5wb2ludHNpemU7Zm9y
KHZhciBhTD0wO2FMPGFSLmxlbmd0aDthTCs9YUkpe3ZhciBhUD1hUlthTF0sYU89YVJbYUwrMV07
aWYoYVA9PW51bGx8fGFQPGFULm1pbnx8YVA+YVQubWF4fHxhTzxhUS5taW58fGFPPmFRLm1heCl7
Y29udGludWV9SC5iZWdpblBhdGgoKTthUD1hVC5wMmMoYVApO2FPPWFRLnAyYyhhTykrYUs7aWYo
YUo9PSJjaXJjbGUiKXtILmFyYyhhUCxhTyxhTSwwLGFTP01hdGguUEk6TWF0aC5QSSoyLGZhbHNl
KX1lbHNle2FKKEgsYVAsYU8sYU0sYVMpfUguY2xvc2VQYXRoKCk7aWYoYVUpe0guZmlsbFN0eWxl
PWFVO0guZmlsbCgpfUguc3Ryb2tlKCl9fUguc2F2ZSgpO0gudHJhbnNsYXRlKHEubGVmdCxxLnRv
cCk7dmFyIGFHPWFFLnBvaW50cy5saW5lV2lkdGgsYUM9YUUuc2hhZG93U2l6ZSxhQj1hRS5wb2lu
dHMucmFkaXVzLGFGPWFFLnBvaW50cy5zeW1ib2w7aWYoYUc+MCYmYUM+MCl7dmFyIGFEPWFDLzI7
SC5saW5lV2lkdGg9YUQ7SC5zdHJva2VTdHlsZT0icmdiYSgwLDAsMCwwLjEpIjthSChhRS5kYXRh
cG9pbnRzLGFCLG51bGwsYUQrYUQvMix0cnVlLGFFLnhheGlzLGFFLnlheGlzLGFGKTtILnN0cm9r
ZVN0eWxlPSJyZ2JhKDAsMCwwLDAuMikiO2FIKGFFLmRhdGFwb2ludHMsYUIsbnVsbCxhRC8yLHRy
dWUsYUUueGF4aXMsYUUueWF4aXMsYUYpfUgubGluZVdpZHRoPWFHO0guc3Ryb2tlU3R5bGU9YUUu
Y29sb3I7YUgoYUUuZGF0YXBvaW50cyxhQixhZShhRS5wb2ludHMsYUUuY29sb3IpLDAsZmFsc2Us
YUUueGF4aXMsYUUueWF4aXMsYUYpO0gucmVzdG9yZSgpfWZ1bmN0aW9uIEUoYU4sYU0sYVYsYUks
YVEsYUYsYUQsYUwsYUssYVUsYVIsYUMpe3ZhciBhRSxhVCxhSixhUCxhRyxhQixhTyxhSCxhUztp
ZihhUil7YUg9YUI9YU89dHJ1ZTthRz1mYWxzZTthRT1hVjthVD1hTjthUD1hTSthSTthSj1hTSth
UTtpZihhVDxhRSl7YVM9YVQ7YVQ9YUU7YUU9YVM7YUc9dHJ1ZTthQj1mYWxzZX19ZWxzZXthRz1h
Qj1hTz10cnVlO2FIPWZhbHNlO2FFPWFOK2FJO2FUPWFOK2FRO2FKPWFWO2FQPWFNO2lmKGFQPGFK
KXthUz1hUDthUD1hSjthSj1hUzthSD10cnVlO2FPPWZhbHNlfX1pZihhVDxhTC5taW58fGFFPmFM
Lm1heHx8YVA8YUsubWlufHxhSj5hSy5tYXgpe3JldHVybn1pZihhRTxhTC5taW4pe2FFPWFMLm1p
bjthRz1mYWxzZX1pZihhVD5hTC5tYXgpe2FUPWFMLm1heDthQj1mYWxzZX1pZihhSjxhSy5taW4p
e2FKPWFLLm1pbjthSD1mYWxzZX1pZihhUD5hSy5tYXgpe2FQPWFLLm1heDthTz1mYWxzZX1hRT1h
TC5wMmMoYUUpO2FKPWFLLnAyYyhhSik7YVQ9YUwucDJjKGFUKTthUD1hSy5wMmMoYVApO2lmKGFE
KXthVS5iZWdpblBhdGgoKTthVS5tb3ZlVG8oYUUsYUopO2FVLmxpbmVUbyhhRSxhUCk7YVUubGlu
ZVRvKGFULGFQKTthVS5saW5lVG8oYVQsYUopO2FVLmZpbGxTdHlsZT1hRChhSixhUCk7YVUuZmls
bCgpfWlmKGFDPjAmJihhR3x8YUJ8fGFPfHxhSCkpe2FVLmJlZ2luUGF0aCgpO2FVLm1vdmVUbyhh
RSxhSithRik7aWYoYUcpe2FVLmxpbmVUbyhhRSxhUCthRil9ZWxzZXthVS5tb3ZlVG8oYUUsYVAr
YUYpfWlmKGFPKXthVS5saW5lVG8oYVQsYVArYUYpfWVsc2V7YVUubW92ZVRvKGFULGFQK2FGKX1p
ZihhQil7YVUubGluZVRvKGFULGFKK2FGKX1lbHNle2FVLm1vdmVUbyhhVCxhSithRil9aWYoYUgp
e2FVLmxpbmVUbyhhRSxhSithRil9ZWxzZXthVS5tb3ZlVG8oYUUsYUorYUYpfWFVLnN0cm9rZSgp
fX1mdW5jdGlvbiBlKGFEKXtmdW5jdGlvbiBhQyhhSixhSSxhTCxhRyxhSyxhTixhTSl7dmFyIGFP
PWFKLnBvaW50cyxhRj1hSi5wb2ludHNpemU7Zm9yKHZhciBhSD0wO2FIPGFPLmxlbmd0aDthSCs9
YUYpe2lmKGFPW2FIXT09bnVsbCl7Y29udGludWV9RShhT1thSF0sYU9bYUgrMV0sYU9bYUgrMl0s
YUksYUwsYUcsYUssYU4sYU0sSCxhRC5iYXJzLmhvcml6b250YWwsYUQuYmFycy5saW5lV2lkdGgp
fX1ILnNhdmUoKTtILnRyYW5zbGF0ZShxLmxlZnQscS50b3ApO0gubGluZVdpZHRoPWFELmJhcnMu
bGluZVdpZHRoO0guc3Ryb2tlU3R5bGU9YUQuY29sb3I7dmFyIGFCPWFELmJhcnMuYWxpZ249PSJs
ZWZ0Ij8wOi1hRC5iYXJzLmJhcldpZHRoLzI7dmFyIGFFPWFELmJhcnMuZmlsbD9mdW5jdGlvbihh
RixhRyl7cmV0dXJuIGFlKGFELmJhcnMsYUQuY29sb3IsYUYsYUcpfTpudWxsO2FDKGFELmRhdGFw
b2ludHMsYUIsYUIrYUQuYmFycy5iYXJXaWR0aCwwLGFFLGFELnhheGlzLGFELnlheGlzKTtILnJl
c3RvcmUoKX1mdW5jdGlvbiBhZShhRCxhQixhQyxhRil7dmFyIGFFPWFELmZpbGw7aWYoIWFFKXty
ZXR1cm4gbnVsbH1pZihhRC5maWxsQ29sb3Ipe3JldHVybiBhbShhRC5maWxsQ29sb3IsYUMsYUYs
YUIpfXZhciBhRz1jLmNvbG9yLnBhcnNlKGFCKTthRy5hPXR5cGVvZiBhRT09Im51bWJlciI/YUU6
MC40O2FHLm5vcm1hbGl6ZSgpO3JldHVybiBhRy50b1N0cmluZygpfWZ1bmN0aW9uIG8oKXthdi5m
aW5kKCIubGVnZW5kIikucmVtb3ZlKCk7aWYoIU8ubGVnZW5kLnNob3cpe3JldHVybn12YXIgYUg9
W10sYUY9ZmFsc2UsYU49Ty5sZWdlbmQubGFiZWxGb3JtYXR0ZXIsYU0sYUo7Zm9yKHZhciBhRT0w
O2FFPFEubGVuZ3RoOysrYUUpe2FNPVFbYUVdO2FKPWFNLmxhYmVsO2lmKCFhSil7Y29udGludWV9
aWYoYUUlTy5sZWdlbmQubm9Db2x1bW5zPT0wKXtpZihhRil7YUgucHVzaCgiPC90cj4iKX1hSC5w
dXNoKCI8dHI+Iik7YUY9dHJ1ZX1pZihhTil7YUo9YU4oYUosYU0pfWFILnB1c2goJzx0ZCBjbGFz
cz0ibGVnZW5kQ29sb3JCb3giPjxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgJytPLmxlZ2Vu
ZC5sYWJlbEJveEJvcmRlckNvbG9yKyc7cGFkZGluZzoxcHgiPjxkaXYgc3R5bGU9IndpZHRoOjRw
eDtoZWlnaHQ6MDtib3JkZXI6NXB4IHNvbGlkICcrYU0uY29sb3IrJztvdmVyZmxvdzpoaWRkZW4i
PjwvZGl2PjwvZGl2PjwvdGQ+PHRkIGNsYXNzPSJsZWdlbmRMYWJlbCI+JythSisiPC90ZD4iKX1p
ZihhRil7YUgucHVzaCgiPC90cj4iKX1pZihhSC5sZW5ndGg9PTApe3JldHVybn12YXIgYUw9Jzx0
YWJsZSBzdHlsZT0iZm9udC1zaXplOnNtYWxsZXI7Y29sb3I6JytPLmdyaWQuY29sb3IrJyI+Jyth
SC5qb2luKCIiKSsiPC90YWJsZT4iO2lmKE8ubGVnZW5kLmNvbnRhaW5lciE9bnVsbCl7YyhPLmxl
Z2VuZC5jb250YWluZXIpLmh0bWwoYUwpfWVsc2V7dmFyIGFJPSIiLGFDPU8ubGVnZW5kLnBvc2l0
aW9uLGFEPU8ubGVnZW5kLm1hcmdpbjtpZihhRFswXT09bnVsbCl7YUQ9W2FELGFEXX1pZihhQy5j
aGFyQXQoMCk9PSJuIil7YUkrPSJ0b3A6IisoYURbMV0rcS50b3ApKyJweDsifWVsc2V7aWYoYUMu
Y2hhckF0KDApPT0icyIpe2FJKz0iYm90dG9tOiIrKGFEWzFdK3EuYm90dG9tKSsicHg7In19aWYo
YUMuY2hhckF0KDEpPT0iZSIpe2FJKz0icmlnaHQ6IisoYURbMF0rcS5yaWdodCkrInB4OyJ9ZWxz
ZXtpZihhQy5jaGFyQXQoMSk9PSJ3Iil7YUkrPSJsZWZ0OiIrKGFEWzBdK3EubGVmdCkrInB4OyJ9
fXZhciBhSz1jKCc8ZGl2IGNsYXNzPSJsZWdlbmQiPicrYUwucmVwbGFjZSgnc3R5bGU9IicsJ3N0
eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsnK2FJKyI7IikrIjwvZGl2PiIpLmFwcGVuZFRvKGF2KTtp
ZihPLmxlZ2VuZC5iYWNrZ3JvdW5kT3BhY2l0eSE9MCl7dmFyIGFHPU8ubGVnZW5kLmJhY2tncm91
bmRDb2xvcjtpZihhRz09bnVsbCl7YUc9Ty5ncmlkLmJhY2tncm91bmRDb2xvcjtpZihhRyYmdHlw
ZW9mIGFHPT0ic3RyaW5nIil7YUc9Yy5jb2xvci5wYXJzZShhRyl9ZWxzZXthRz1jLmNvbG9yLmV4
dHJhY3QoYUssImJhY2tncm91bmQtY29sb3IiKX1hRy5hPTE7YUc9YUcudG9TdHJpbmcoKX12YXIg
YUI9YUsuY2hpbGRyZW4oKTtjKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDon
K2FCLndpZHRoKCkrInB4O2hlaWdodDoiK2FCLmhlaWdodCgpKyJweDsiK2FJKyJiYWNrZ3JvdW5k
LWNvbG9yOiIrYUcrJzsiPiA8L2Rpdj4nKS5wcmVwZW5kVG8oYUspLmNzcygib3BhY2l0eSIsTy5s
ZWdlbmQuYmFja2dyb3VuZE9wYWNpdHkpfX19dmFyIGFiPVtdLE09bnVsbDtmdW5jdGlvbiBLKGFJ
LGFHLGFEKXt2YXIgYU89Ty5ncmlkLm1vdXNlQWN0aXZlUmFkaXVzLGEwPWFPKmFPKzEsYVk9bnVs
bCxhUj1mYWxzZSxhVyxhVTtmb3IoYVc9US5sZW5ndGgtMTthVz49MDstLWFXKXtpZighYUQoUVth
V10pKXtjb250aW51ZX12YXIgYVA9UVthV10sYUg9YVAueGF4aXMsYUY9YVAueWF4aXMsYVY9YVAu
ZGF0YXBvaW50cy5wb2ludHMsYVQ9YVAuZGF0YXBvaW50cy5wb2ludHNpemUsYVE9YUguYzJwKGFJ
KSxhTj1hRi5jMnAoYUcpLGFDPWFPL2FILnNjYWxlLGFCPWFPL2FGLnNjYWxlO2lmKGFILm9wdGlv
bnMuaW52ZXJzZVRyYW5zZm9ybSl7YUM9TnVtYmVyLk1BWF9WQUxVRX1pZihhRi5vcHRpb25zLmlu
dmVyc2VUcmFuc2Zvcm0pe2FCPU51bWJlci5NQVhfVkFMVUV9aWYoYVAubGluZXMuc2hvd3x8YVAu
cG9pbnRzLnNob3cpe2ZvcihhVT0wO2FVPGFWLmxlbmd0aDthVSs9YVQpe3ZhciBhSz1hVlthVV0s
YUo9YVZbYVUrMV07aWYoYUs9PW51bGwpe2NvbnRpbnVlfWlmKGFLLWFRPmFDfHxhSy1hUTwtYUN8
fGFKLWFOPmFCfHxhSi1hTjwtYUIpe2NvbnRpbnVlfXZhciBhTT1NYXRoLmFicyhhSC5wMmMoYUsp
LWFJKSxhTD1NYXRoLmFicyhhRi5wMmMoYUopLWFHKSxhUz1hTSphTSthTCphTDtpZihhUzxhMCl7
YTA9YVM7YVk9W2FXLGFVL2FUXX19fWlmKGFQLmJhcnMuc2hvdyYmIWFZKXt2YXIgYUU9YVAuYmFy
cy5hbGlnbj09ImxlZnQiPzA6LWFQLmJhcnMuYmFyV2lkdGgvMixhWD1hRSthUC5iYXJzLmJhcldp
ZHRoO2ZvcihhVT0wO2FVPGFWLmxlbmd0aDthVSs9YVQpe3ZhciBhSz1hVlthVV0sYUo9YVZbYVUr
MV0sYVo9YVZbYVUrMl07aWYoYUs9PW51bGwpe2NvbnRpbnVlfWlmKFFbYVddLmJhcnMuaG9yaXpv
bnRhbD8oYVE8PU1hdGgubWF4KGFaLGFLKSYmYVE+PU1hdGgubWluKGFaLGFLKSYmYU4+PWFKK2FF
JiZhTjw9YUorYVgpOihhUT49YUsrYUUmJmFRPD1hSythWCYmYU4+PU1hdGgubWluKGFaLGFKKSYm
YU48PU1hdGgubWF4KGFaLGFKKSkpe2FZPVthVyxhVS9hVF19fX19aWYoYVkpe2FXPWFZWzBdO2FV
PWFZWzFdO2FUPVFbYVddLmRhdGFwb2ludHMucG9pbnRzaXplO3JldHVybntkYXRhcG9pbnQ6UVth
V10uZGF0YXBvaW50cy5wb2ludHMuc2xpY2UoYVUqYVQsKGFVKzEpKmFUKSxkYXRhSW5kZXg6YVUs
c2VyaWVzOlFbYVddLHNlcmllc0luZGV4OmFXfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBhYShhQil7
aWYoTy5ncmlkLmhvdmVyYWJsZSl7dSgicGxvdGhvdmVyIixhQixmdW5jdGlvbihhQyl7cmV0dXJu
IGFDLmhvdmVyYWJsZSE9ZmFsc2V9KX19ZnVuY3Rpb24gbChhQil7aWYoTy5ncmlkLmhvdmVyYWJs
ZSl7dSgicGxvdGhvdmVyIixhQixmdW5jdGlvbihhQyl7cmV0dXJuIGZhbHNlfSl9fWZ1bmN0aW9u
IFIoYUIpe3UoInBsb3RjbGljayIsYUIsZnVuY3Rpb24oYUMpe3JldHVybiBhQy5jbGlja2FibGUh
PWZhbHNlfSl9ZnVuY3Rpb24gdShhQyxhQixhRCl7dmFyIGFFPXkub2Zmc2V0KCksYUg9YUIucGFn
ZVgtYUUubGVmdC1xLmxlZnQsYUY9YUIucGFnZVktYUUudG9wLXEudG9wLGFKPUMoe2xlZnQ6YUgs
dG9wOmFGfSk7YUoucGFnZVg9YUIucGFnZVg7YUoucGFnZVk9YUIucGFnZVk7dmFyIGFLPUsoYUgs
YUYsYUQpO2lmKGFLKXthSy5wYWdlWD1wYXJzZUludChhSy5zZXJpZXMueGF4aXMucDJjKGFLLmRh
dGFwb2ludFswXSkrYUUubGVmdCtxLmxlZnQpO2FLLnBhZ2VZPXBhcnNlSW50KGFLLnNlcmllcy55
YXhpcy5wMmMoYUsuZGF0YXBvaW50WzFdKSthRS50b3ArcS50b3ApfWlmKE8uZ3JpZC5hdXRvSGln
aGxpZ2h0KXtmb3IodmFyIGFHPTA7YUc8YWIubGVuZ3RoOysrYUcpe3ZhciBhST1hYlthR107aWYo
YUkuYXV0bz09YUMmJiEoYUsmJmFJLnNlcmllcz09YUsuc2VyaWVzJiZhSS5wb2ludFswXT09YUsu
ZGF0YXBvaW50WzBdJiZhSS5wb2ludFsxXT09YUsuZGF0YXBvaW50WzFdKSl7VChhSS5zZXJpZXMs
YUkucG9pbnQpfX1pZihhSyl7eChhSy5zZXJpZXMsYUsuZGF0YXBvaW50LGFDKX19YXYudHJpZ2dl
cihhQyxbYUosYUtdKX1mdW5jdGlvbiBmKCl7aWYoIU0pe009c2V0VGltZW91dChzLDMwKX19ZnVu
Y3Rpb24gcygpe009bnVsbDtBLnNhdmUoKTtBLmNsZWFyUmVjdCgwLDAsRyxJKTtBLnRyYW5zbGF0
ZShxLmxlZnQscS50b3ApO3ZhciBhQyxhQjtmb3IoYUM9MDthQzxhYi5sZW5ndGg7KythQyl7YUI9
YWJbYUNdO2lmKGFCLnNlcmllcy5iYXJzLnNob3cpe3YoYUIuc2VyaWVzLGFCLnBvaW50KX1lbHNl
e2F5KGFCLnNlcmllcyxhQi5wb2ludCl9fUEucmVzdG9yZSgpO2FuKGFrLmRyYXdPdmVybGF5LFtB
XSl9ZnVuY3Rpb24geChhRCxhQixhRil7aWYodHlwZW9mIGFEPT0ibnVtYmVyIil7YUQ9UVthRF19
aWYodHlwZW9mIGFCPT0ibnVtYmVyIil7dmFyIGFFPWFELmRhdGFwb2ludHMucG9pbnRzaXplO2FC
PWFELmRhdGFwb2ludHMucG9pbnRzLnNsaWNlKGFFKmFCLGFFKihhQisxKSl9dmFyIGFDPWFsKGFE
LGFCKTtpZihhQz09LTEpe2FiLnB1c2goe3NlcmllczphRCxwb2ludDphQixhdXRvOmFGfSk7Zigp
fWVsc2V7aWYoIWFGKXthYlthQ10uYXV0bz1mYWxzZX19fWZ1bmN0aW9uIFQoYUQsYUIpe2lmKGFE
PT1udWxsJiZhQj09bnVsbCl7YWI9W107ZigpfWlmKHR5cGVvZiBhRD09Im51bWJlciIpe2FEPVFb
YURdfWlmKHR5cGVvZiBhQj09Im51bWJlciIpe2FCPWFELmRhdGFbYUJdfXZhciBhQz1hbChhRCxh
Qik7aWYoYUMhPS0xKXthYi5zcGxpY2UoYUMsMSk7ZigpfX1mdW5jdGlvbiBhbChhRCxhRSl7Zm9y
KHZhciBhQj0wO2FCPGFiLmxlbmd0aDsrK2FCKXt2YXIgYUM9YWJbYUJdO2lmKGFDLnNlcmllcz09
YUQmJmFDLnBvaW50WzBdPT1hRVswXSYmYUMucG9pbnRbMV09PWFFWzFdKXtyZXR1cm4gYUJ9fXJl
dHVybiAtMX1mdW5jdGlvbiBheShhRSxhRCl7dmFyIGFDPWFEWzBdLGFJPWFEWzFdLGFIPWFFLnhh
eGlzLGFHPWFFLnlheGlzO2lmKGFDPGFILm1pbnx8YUM+YUgubWF4fHxhSTxhRy5taW58fGFJPmFH
Lm1heCl7cmV0dXJufXZhciBhRj1hRS5wb2ludHMucmFkaXVzK2FFLnBvaW50cy5saW5lV2lkdGgv
MjtBLmxpbmVXaWR0aD1hRjtBLnN0cm9rZVN0eWxlPWMuY29sb3IucGFyc2UoYUUuY29sb3IpLnNj
YWxlKCJhIiwwLjUpLnRvU3RyaW5nKCk7dmFyIGFCPTEuNSphRixhQz1hSC5wMmMoYUMpLGFJPWFH
LnAyYyhhSSk7QS5iZWdpblBhdGgoKTtpZihhRS5wb2ludHMuc3ltYm9sPT0iY2lyY2xlIil7QS5h
cmMoYUMsYUksYUIsMCwyKk1hdGguUEksZmFsc2UpfWVsc2V7YUUucG9pbnRzLnN5bWJvbChBLGFD
LGFJLGFCLGZhbHNlKX1BLmNsb3NlUGF0aCgpO0Euc3Ryb2tlKCl9ZnVuY3Rpb24gdihhRSxhQil7
QS5saW5lV2lkdGg9YUUuYmFycy5saW5lV2lkdGg7QS5zdHJva2VTdHlsZT1jLmNvbG9yLnBhcnNl
KGFFLmNvbG9yKS5zY2FsZSgiYSIsMC41KS50b1N0cmluZygpO3ZhciBhRD1jLmNvbG9yLnBhcnNl
KGFFLmNvbG9yKS5zY2FsZSgiYSIsMC41KS50b1N0cmluZygpO3ZhciBhQz1hRS5iYXJzLmFsaWdu
PT0ibGVmdCI/MDotYUUuYmFycy5iYXJXaWR0aC8yO0UoYUJbMF0sYUJbMV0sYUJbMl18fDAsYUMs
YUMrYUUuYmFycy5iYXJXaWR0aCwwLGZ1bmN0aW9uKCl7cmV0dXJuIGFEfSxhRS54YXhpcyxhRS55
YXhpcyxBLGFFLmJhcnMuaG9yaXpvbnRhbCxhRS5iYXJzLmxpbmVXaWR0aCl9ZnVuY3Rpb24gYW0o
YUosYUIsYUgsYUMpe2lmKHR5cGVvZiBhSj09InN0cmluZyIpe3JldHVybiBhSn1lbHNle3ZhciBh
ST1ILmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsYUgsMCxhQik7Zm9yKHZhciBhRT0wLGFEPWFKLmNv
bG9ycy5sZW5ndGg7YUU8YUQ7KythRSl7dmFyIGFGPWFKLmNvbG9yc1thRV07aWYodHlwZW9mIGFG
IT0ic3RyaW5nIil7dmFyIGFHPWMuY29sb3IucGFyc2UoYUMpO2lmKGFGLmJyaWdodG5lc3MhPW51
bGwpe2FHPWFHLnNjYWxlKCJyZ2IiLGFGLmJyaWdodG5lc3MpfWlmKGFGLm9wYWNpdHkhPW51bGwp
e2FHLmEqPWFGLm9wYWNpdHl9YUY9YUcudG9TdHJpbmcoKX1hSS5hZGRDb2xvclN0b3AoYUUvKGFE
LTEpLGFGKX1yZXR1cm4gYUl9fX1jLnBsb3Q9ZnVuY3Rpb24oZyxlLGQpe3ZhciBmPW5ldyBiKGMo
ZyksZSxkLGMucGxvdC5wbHVnaW5zKTtyZXR1cm4gZn07Yy5wbG90LnZlcnNpb249IjAuNyI7Yy5w
bG90LnBsdWdpbnM9W107Yy5wbG90LmZvcm1hdERhdGU9ZnVuY3Rpb24obCxmLGgpe3ZhciBvPWZ1
bmN0aW9uKGQpe2Q9IiIrZDtyZXR1cm4gZC5sZW5ndGg9PTE/IjAiK2Q6ZH07dmFyIGU9W107dmFy
IHA9ZmFsc2Usaj1mYWxzZTt2YXIgbj1sLmdldFVUQ0hvdXJzKCk7dmFyIGs9bjwxMjtpZihoPT1u
dWxsKXtoPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwi
U2VwIiwiT2N0IiwiTm92IiwiRGVjIl19aWYoZi5zZWFyY2goLyVwfCVQLykhPS0xKXtpZihuPjEy
KXtuPW4tMTJ9ZWxzZXtpZihuPT0wKXtuPTEyfX19Zm9yKHZhciBnPTA7ZzxmLmxlbmd0aDsrK2cp
e3ZhciBtPWYuY2hhckF0KGcpO2lmKHApe3N3aXRjaChtKXtjYXNlImgiOm09IiIrbjticmVhaztj
YXNlIkgiOm09byhuKTticmVhaztjYXNlIk0iOm09byhsLmdldFVUQ01pbnV0ZXMoKSk7YnJlYWs7
Y2FzZSJTIjptPW8obC5nZXRVVENTZWNvbmRzKCkpO2JyZWFrO2Nhc2UiZCI6bT0iIitsLmdldFVU
Q0RhdGUoKTticmVhaztjYXNlIm0iOm09IiIrKGwuZ2V0VVRDTW9udGgoKSsxKTticmVhaztjYXNl
InkiOm09IiIrbC5nZXRVVENGdWxsWWVhcigpO2JyZWFrO2Nhc2UiYiI6bT0iIitoW2wuZ2V0VVRD
TW9udGgoKV07YnJlYWs7Y2FzZSJwIjptPShrKT8oImFtIik6KCJwbSIpO2JyZWFrO2Nhc2UiUCI6
bT0oayk/KCJBTSIpOigiUE0iKTticmVhaztjYXNlIjAiOm09IiI7aj10cnVlO2JyZWFrfWlmKG0m
Jmope209byhtKTtqPWZhbHNlfWUucHVzaChtKTtpZighail7cD1mYWxzZX19ZWxzZXtpZihtPT0i
JSIpe3A9dHJ1ZX1lbHNle2UucHVzaChtKX19fXJldHVybiBlLmpvaW4oIiIpfTtmdW5jdGlvbiBh
KGUsZCl7cmV0dXJuIGQqTWF0aC5mbG9vcihlL2QpfX0pKGpRdWVyeSk7Cl8QD3RleHQvamF2YXNj
cmlwdNQFBgcIExQVFl8QVGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFu
Y2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LnRhYmxlc29ydGVyLm1pbi5qc08RAk5icGxpc3QwMNQB
AgMEBQY1NlgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagqwcIHyUmLRcuLzAx
VSRudWxs2wkKCwwNDg8QERITFBUWFxgZGhscHR5SJDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0UiQ3UiQy
UiQ1UiQwUiQ4gAKACoAHEACACYAFgAAQB4AGEAiACNMgCiEaIyRXTlMuYmFzZVtOUy5yZWxhdGl2
ZYAAgASAA18QVGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0
cy9yZXNvdXJjZXMvanF1ZXJ5LnRhYmxlc29ydGVyLm1pbi5qc9InKCkqWiRjbGFzc25hbWVYJGNs
YXNzZXNVTlNVUkyiKyxVTlNVUkxYTlNPYmplY3QjQbnDPzn94PhfEA90ZXh0L2phdmFzY3JpcHQR
QIgjf+/////////SJygyM11OU1VSTFJlc3BvbnNlojQsXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVk
QXJjaGl2ZXLRNzhfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBDAEkAYABj
AGoAbQBwAHMAdgB5AHwAfwCCAIUAhwCJAIsAjQCPAJEAkwCVAJcAmQCbAKIAqgC2ALgAugC8ARMB
GAEjASwBMgE1ATsBRAFNAV8BYgFrAXABfgGBAY8BoQGkAboAAAAAAAACAQAAAAAAAAA5AAAAAAAA
AAAAAAAAAAABvE8RQIgKKGZ1bmN0aW9uKCQpeyQuZXh0ZW5kKHt0YWJsZXNvcnRlcjpuZXcKZnVu
Y3Rpb24oKXt2YXIgcGFyc2Vycz1bXSx3aWRnZXRzPVtdO3RoaXMuZGVmYXVsdHM9e2Nzc0hlYWRl
cjoiaGVhZGVyIixjc3NBc2M6ImhlYWRlclNvcnRVcCIsY3NzRGVzYzoiaGVhZGVyU29ydERvd24i
LGNzc0NoaWxkUm93OiJleHBhbmQtY2hpbGQiLHNvcnRJbml0aWFsT3JkZXI6ImFzYyIsc29ydE11
bHRpU29ydEtleToic2hpZnRLZXkiLHNvcnRGb3JjZTpudWxsLHNvcnRBcHBlbmQ6bnVsbCxzb3J0
TG9jYWxlQ29tcGFyZTp0cnVlLHRleHRFeHRyYWN0aW9uOiJzaW1wbGUiLHBhcnNlcnM6e30sd2lk
Z2V0czpbXSx3aWRnZXRaZWJyYTp7Y3NzOlsiZXZlbiIsIm9kZCJdfSxoZWFkZXJzOnt9LHdpZHRo
Rml4ZWQ6ZmFsc2UsY2FuY2VsU2VsZWN0aW9uOnRydWUsc29ydExpc3Q6W10saGVhZGVyTGlzdDpb
XSxkYXRlRm9ybWF0OiJ1cyIsZGVjaW1hbDonL1wufFwsL2cnLG9uUmVuZGVySGVhZGVyOm51bGws
c2VsZWN0b3JIZWFkZXJzOid0aGVhZCB0aCcsZGVidWc6ZmFsc2V9O2Z1bmN0aW9uIGJlbmNobWFy
ayhzLGQpe2xvZyhzKyIsIisobmV3IERhdGUoKS5nZXRUaW1lKCktZC5nZXRUaW1lKCkpKyJtcyIp
O310aGlzLmJlbmNobWFyaz1iZW5jaG1hcms7ZnVuY3Rpb24gbG9nKHMpe2lmKHR5cGVvZiBjb25z
b2xlIT0idW5kZWZpbmVkIiYmdHlwZW9mIGNvbnNvbGUuZGVidWchPSJ1bmRlZmluZWQiKXtjb25z
b2xlLmxvZyhzKTt9ZWxzZXthbGVydChzKTt9fWZ1bmN0aW9uIGJ1aWxkUGFyc2VyQ2FjaGUodGFi
bGUsJGhlYWRlcnMpe2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7dmFyIHBhcnNlcnNEZWJ1Zz0iIjt9
aWYodGFibGUudEJvZGllcy5sZW5ndGg9PTApcmV0dXJuO3ZhciByb3dzPXRhYmxlLnRCb2RpZXNb
MF0ucm93cztpZihyb3dzWzBdKXt2YXIgbGlzdD1bXSxjZWxscz1yb3dzWzBdLmNlbGxzLGw9Y2Vs
bHMubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKyspe3ZhciBwPWZhbHNlO2lmKCQubWV0YWRhdGEm
JigkKCRoZWFkZXJzW2ldKS5tZXRhZGF0YSgpJiYkKCRoZWFkZXJzW2ldKS5tZXRhZGF0YSgpLnNv
cnRlcikpe3A9Z2V0UGFyc2VyQnlJZCgkKCRoZWFkZXJzW2ldKS5tZXRhZGF0YSgpLnNvcnRlcik7
fWVsc2UgaWYoKHRhYmxlLmNvbmZpZy5oZWFkZXJzW2ldJiZ0YWJsZS5jb25maWcuaGVhZGVyc1tp
XS5zb3J0ZXIpKXtwPWdldFBhcnNlckJ5SWQodGFibGUuY29uZmlnLmhlYWRlcnNbaV0uc29ydGVy
KTt9aWYoIXApe3A9ZGV0ZWN0UGFyc2VyRm9yQ29sdW1uKHRhYmxlLHJvd3MsLTEsaSk7fWlmKHRh
YmxlLmNvbmZpZy5kZWJ1Zyl7cGFyc2Vyc0RlYnVnKz0iY29sdW1uOiIraSsiIHBhcnNlcjoiK3Au
aWQrIlxuIjt9bGlzdC5wdXNoKHApO319aWYodGFibGUuY29uZmlnLmRlYnVnKXtsb2cocGFyc2Vy
c0RlYnVnKTt9cmV0dXJuIGxpc3Q7fTtmdW5jdGlvbiBkZXRlY3RQYXJzZXJGb3JDb2x1bW4odGFi
bGUscm93cyxyb3dJbmRleCxjZWxsSW5kZXgpe3ZhciBsPXBhcnNlcnMubGVuZ3RoLG5vZGU9ZmFs
c2Usbm9kZVZhbHVlPWZhbHNlLGtlZXBMb29raW5nPXRydWU7d2hpbGUobm9kZVZhbHVlPT0nJyYm
a2VlcExvb2tpbmcpe3Jvd0luZGV4Kys7aWYocm93c1tyb3dJbmRleF0pe25vZGU9Z2V0Tm9kZUZy
b21Sb3dBbmRDZWxsSW5kZXgocm93cyxyb3dJbmRleCxjZWxsSW5kZXgpO25vZGVWYWx1ZT10cmlt
QW5kR2V0Tm9kZVRleHQodGFibGUuY29uZmlnLG5vZGUpO2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7
bG9nKCdDaGVja2luZyBpZiB2YWx1ZSB3YXMgZW1wdHkgb24gcm93Oicrcm93SW5kZXgpO319ZWxz
ZXtrZWVwTG9va2luZz1mYWxzZTt9fWZvcih2YXIgaT0xO2k8bDtpKyspe2lmKHBhcnNlcnNbaV0u
aXMobm9kZVZhbHVlLHRhYmxlLG5vZGUpKXtyZXR1cm4gcGFyc2Vyc1tpXTt9fXJldHVybiBwYXJz
ZXJzWzBdO31mdW5jdGlvbiBnZXROb2RlRnJvbVJvd0FuZENlbGxJbmRleChyb3dzLHJvd0luZGV4
LGNlbGxJbmRleCl7cmV0dXJuIHJvd3Nbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF07fWZ1bmN0
aW9uIHRyaW1BbmRHZXROb2RlVGV4dChjb25maWcsbm9kZSl7cmV0dXJuICQudHJpbShnZXRFbGVt
ZW50VGV4dChjb25maWcsbm9kZSkpO31mdW5jdGlvbiBnZXRQYXJzZXJCeUlkKG5hbWUpe3ZhciBs
PXBhcnNlcnMubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKyspe2lmKHBhcnNlcnNbaV0uaWQudG9M
b3dlckNhc2UoKT09bmFtZS50b0xvd2VyQ2FzZSgpKXtyZXR1cm4gcGFyc2Vyc1tpXTt9fXJldHVy
biBmYWxzZTt9ZnVuY3Rpb24gYnVpbGRDYWNoZSh0YWJsZSl7aWYodGFibGUuY29uZmlnLmRlYnVn
KXt2YXIgY2FjaGVUaW1lPW5ldyBEYXRlKCk7fXZhciB0b3RhbFJvd3M9KHRhYmxlLnRCb2RpZXNb
MF0mJnRhYmxlLnRCb2RpZXNbMF0ucm93cy5sZW5ndGgpfHwwLHRvdGFsQ2VsbHM9KHRhYmxlLnRC
b2RpZXNbMF0ucm93c1swXSYmdGFibGUudEJvZGllc1swXS5yb3dzWzBdLmNlbGxzLmxlbmd0aCl8
fDAscGFyc2Vycz10YWJsZS5jb25maWcucGFyc2VycyxjYWNoZT17cm93OltdLG5vcm1hbGl6ZWQ6
W119O2Zvcih2YXIgaT0wO2k8dG90YWxSb3dzOysraSl7dmFyIGM9JCh0YWJsZS50Qm9kaWVzWzBd
LnJvd3NbaV0pLGNvbHM9W107aWYoYy5oYXNDbGFzcyh0YWJsZS5jb25maWcuY3NzQ2hpbGRSb3cp
KXtjYWNoZS5yb3dbY2FjaGUucm93Lmxlbmd0aC0xXT1jYWNoZS5yb3dbY2FjaGUucm93Lmxlbmd0
aC0xXS5hZGQoYyk7Y29udGludWU7fWNhY2hlLnJvdy5wdXNoKGMpO2Zvcih2YXIgaj0wO2o8dG90
YWxDZWxsczsrK2ope2NvbHMucHVzaChwYXJzZXJzW2pdLmZvcm1hdChnZXRFbGVtZW50VGV4dCh0
YWJsZS5jb25maWcsY1swXS5jZWxsc1tqXSksdGFibGUsY1swXS5jZWxsc1tqXSkpO31jb2xzLnB1
c2goY2FjaGUubm9ybWFsaXplZC5sZW5ndGgpO2NhY2hlLm5vcm1hbGl6ZWQucHVzaChjb2xzKTtj
b2xzPW51bGw7fTtpZih0YWJsZS5jb25maWcuZGVidWcpe2JlbmNobWFyaygiQnVpbGRpbmcgY2Fj
aGUgZm9yICIrdG90YWxSb3dzKyIgcm93czoiLGNhY2hlVGltZSk7fXJldHVybiBjYWNoZTt9O2Z1
bmN0aW9uIGdldEVsZW1lbnRUZXh0KGNvbmZpZyxub2RlKXt2YXIgdGV4dD0iIjtpZighbm9kZSly
ZXR1cm4iIjtpZighY29uZmlnLnN1cHBvcnRzVGV4dENvbnRlbnQpY29uZmlnLnN1cHBvcnRzVGV4
dENvbnRlbnQ9bm9kZS50ZXh0Q29udGVudHx8ZmFsc2U7aWYoY29uZmlnLnRleHRFeHRyYWN0aW9u
PT0ic2ltcGxlIil7aWYoY29uZmlnLnN1cHBvcnRzVGV4dENvbnRlbnQpe3RleHQ9bm9kZS50ZXh0
Q29udGVudDt9ZWxzZXtpZihub2RlLmNoaWxkTm9kZXNbMF0mJm5vZGUuY2hpbGROb2Rlc1swXS5o
YXNDaGlsZE5vZGVzKCkpe3RleHQ9bm9kZS5jaGlsZE5vZGVzWzBdLmlubmVySFRNTDt9ZWxzZXt0
ZXh0PW5vZGUuaW5uZXJIVE1MO319fWVsc2V7aWYodHlwZW9mKGNvbmZpZy50ZXh0RXh0cmFjdGlv
bik9PSJmdW5jdGlvbiIpe3RleHQ9Y29uZmlnLnRleHRFeHRyYWN0aW9uKG5vZGUpO31lbHNle3Rl
eHQ9JChub2RlKS50ZXh0KCk7fX1yZXR1cm4gdGV4dDt9ZnVuY3Rpb24gYXBwZW5kVG9UYWJsZSh0
YWJsZSxjYWNoZSl7aWYodGFibGUuY29uZmlnLmRlYnVnKXt2YXIgYXBwZW5kVGltZT1uZXcgRGF0
ZSgpfXZhciBjPWNhY2hlLHI9Yy5yb3csbj1jLm5vcm1hbGl6ZWQsdG90YWxSb3dzPW4ubGVuZ3Ro
LGNoZWNrQ2VsbD0oblswXS5sZW5ndGgtMSksdGFibGVCb2R5PSQodGFibGUudEJvZGllc1swXSks
cm93cz1bXTtmb3IodmFyIGk9MDtpPHRvdGFsUm93cztpKyspe3ZhciBwb3M9bltpXVtjaGVja0Nl
bGxdO3Jvd3MucHVzaChyW3Bvc10pO2lmKCF0YWJsZS5jb25maWcuYXBwZW5kZXIpe3ZhciBsPXJb
cG9zXS5sZW5ndGg7Zm9yKHZhciBqPTA7ajxsO2orKyl7dGFibGVCb2R5WzBdLmFwcGVuZENoaWxk
KHJbcG9zXVtqXSk7fX19aWYodGFibGUuY29uZmlnLmFwcGVuZGVyKXt0YWJsZS5jb25maWcuYXBw
ZW5kZXIodGFibGUscm93cyk7fXJvd3M9bnVsbDtpZih0YWJsZS5jb25maWcuZGVidWcpe2JlbmNo
bWFyaygiUmVidWlsdCB0YWJsZToiLGFwcGVuZFRpbWUpO31hcHBseVdpZGdldCh0YWJsZSk7c2V0
VGltZW91dChmdW5jdGlvbigpeyQodGFibGUpLnRyaWdnZXIoInNvcnRFbmQiKTt9LDApO307ZnVu
Y3Rpb24gYnVpbGRIZWFkZXJzKHRhYmxlKXtpZih0YWJsZS5jb25maWcuZGVidWcpe3ZhciB0aW1l
PW5ldyBEYXRlKCk7fXZhciBtZXRhPSgkLm1ldGFkYXRhKT90cnVlOmZhbHNlO3ZhciBoZWFkZXJf
aW5kZXg9Y29tcHV0ZVRhYmxlSGVhZGVyQ2VsbEluZGV4ZXModGFibGUpOyR0YWJsZUhlYWRlcnM9
JCh0YWJsZS5jb25maWcuc2VsZWN0b3JIZWFkZXJzLHRhYmxlKS5lYWNoKGZ1bmN0aW9uKGluZGV4
KXt0aGlzLmNvbHVtbj1oZWFkZXJfaW5kZXhbdGhpcy5wYXJlbnROb2RlLnJvd0luZGV4KyItIit0
aGlzLmNlbGxJbmRleF07dGhpcy5vcmRlcj1mb3JtYXRTb3J0aW5nT3JkZXIodGFibGUuY29uZmln
LnNvcnRJbml0aWFsT3JkZXIpO3RoaXMuY291bnQ9dGhpcy5vcmRlcjtpZihjaGVja0hlYWRlck1l
dGFkYXRhKHRoaXMpfHxjaGVja0hlYWRlck9wdGlvbnModGFibGUsaW5kZXgpKXRoaXMuc29ydERp
c2FibGVkPXRydWU7aWYoY2hlY2tIZWFkZXJPcHRpb25zU29ydGluZ0xvY2tlZCh0YWJsZSxpbmRl
eCkpdGhpcy5vcmRlcj10aGlzLmxvY2tlZE9yZGVyPWNoZWNrSGVhZGVyT3B0aW9uc1NvcnRpbmdM
b2NrZWQodGFibGUsaW5kZXgpO2lmKCF0aGlzLnNvcnREaXNhYmxlZCl7dmFyICR0aD0kKHRoaXMp
LmFkZENsYXNzKHRhYmxlLmNvbmZpZy5jc3NIZWFkZXIpO2lmKHRhYmxlLmNvbmZpZy5vblJlbmRl
ckhlYWRlcil0YWJsZS5jb25maWcub25SZW5kZXJIZWFkZXIuYXBwbHkoJHRoKTt9dGFibGUuY29u
ZmlnLmhlYWRlckxpc3RbaW5kZXhdPXRoaXM7fSk7aWYodGFibGUuY29uZmlnLmRlYnVnKXtiZW5j
aG1hcmsoIkJ1aWx0IGhlYWRlcnM6Iix0aW1lKTtsb2coJHRhYmxlSGVhZGVycyk7fXJldHVybiAk
dGFibGVIZWFkZXJzO307ZnVuY3Rpb24gY29tcHV0ZVRhYmxlSGVhZGVyQ2VsbEluZGV4ZXModCl7
dmFyIG1hdHJpeD1bXTt2YXIgbG9va3VwPXt9O3ZhciB0aGVhZD10LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdUSEVBRCcpWzBdO3ZhciB0cnM9dGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1RSJyk7
Zm9yKHZhciBpPTA7aTx0cnMubGVuZ3RoO2krKyl7dmFyIGNlbGxzPXRyc1tpXS5jZWxscztmb3Io
dmFyIGo9MDtqPGNlbGxzLmxlbmd0aDtqKyspe3ZhciBjPWNlbGxzW2pdO3ZhciByb3dJbmRleD1j
LnBhcmVudE5vZGUucm93SW5kZXg7dmFyIGNlbGxJZD1yb3dJbmRleCsiLSIrYy5jZWxsSW5kZXg7
dmFyIHJvd1NwYW49Yy5yb3dTcGFufHwxO3ZhciBjb2xTcGFuPWMuY29sU3Bhbnx8MQp2YXIgZmly
c3RBdmFpbENvbDtpZih0eXBlb2YobWF0cml4W3Jvd0luZGV4XSk9PSJ1bmRlZmluZWQiKXttYXRy
aXhbcm93SW5kZXhdPVtdO31mb3IodmFyIGs9MDtrPG1hdHJpeFtyb3dJbmRleF0ubGVuZ3RoKzE7
aysrKXtpZih0eXBlb2YobWF0cml4W3Jvd0luZGV4XVtrXSk9PSJ1bmRlZmluZWQiKXtmaXJzdEF2
YWlsQ29sPWs7YnJlYWs7fX1sb29rdXBbY2VsbElkXT1maXJzdEF2YWlsQ29sO2Zvcih2YXIgaz1y
b3dJbmRleDtrPHJvd0luZGV4K3Jvd1NwYW47aysrKXtpZih0eXBlb2YobWF0cml4W2tdKT09InVu
ZGVmaW5lZCIpe21hdHJpeFtrXT1bXTt9dmFyIG1hdHJpeHJvdz1tYXRyaXhba107Zm9yKHZhciBs
PWZpcnN0QXZhaWxDb2w7bDxmaXJzdEF2YWlsQ29sK2NvbFNwYW47bCsrKXttYXRyaXhyb3dbbF09
IngiO319fX1yZXR1cm4gbG9va3VwO31mdW5jdGlvbiBjaGVja0NlbGxDb2xTcGFuKHRhYmxlLHJv
d3Mscm93KXt2YXIgYXJyPVtdLHI9dGFibGUudEhlYWQucm93cyxjPXJbcm93XS5jZWxscztmb3Io
dmFyIGk9MDtpPGMubGVuZ3RoO2krKyl7dmFyIGNlbGw9Y1tpXTtpZihjZWxsLmNvbFNwYW4+MSl7
YXJyPWFyci5jb25jYXQoY2hlY2tDZWxsQ29sU3Bhbih0YWJsZSxoZWFkZXJBcnIscm93KyspKTt9
ZWxzZXtpZih0YWJsZS50SGVhZC5sZW5ndGg9PTF8fChjZWxsLnJvd1NwYW4+MXx8IXJbcm93KzFd
KSl7YXJyLnB1c2goY2VsbCk7fX19cmV0dXJuIGFycjt9O2Z1bmN0aW9uIGNoZWNrSGVhZGVyTWV0
YWRhdGEoY2VsbCl7aWYoKCQubWV0YWRhdGEpJiYoJChjZWxsKS5tZXRhZGF0YSgpLnNvcnRlcj09
PWZhbHNlKSl7cmV0dXJuIHRydWU7fTtyZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIGNoZWNrSGVhZGVy
T3B0aW9ucyh0YWJsZSxpKXtpZigodGFibGUuY29uZmlnLmhlYWRlcnNbaV0pJiYodGFibGUuY29u
ZmlnLmhlYWRlcnNbaV0uc29ydGVyPT09ZmFsc2UpKXtyZXR1cm4gdHJ1ZTt9O3JldHVybiBmYWxz
ZTt9ZnVuY3Rpb24gY2hlY2tIZWFkZXJPcHRpb25zU29ydGluZ0xvY2tlZCh0YWJsZSxpKXtpZigo
dGFibGUuY29uZmlnLmhlYWRlcnNbaV0pJiYodGFibGUuY29uZmlnLmhlYWRlcnNbaV0ubG9ja2Vk
T3JkZXIpKXJldHVybiB0YWJsZS5jb25maWcuaGVhZGVyc1tpXS5sb2NrZWRPcmRlcjtyZXR1cm4g
ZmFsc2U7fWZ1bmN0aW9uIGFwcGx5V2lkZ2V0KHRhYmxlKXt2YXIgYz10YWJsZS5jb25maWcud2lk
Z2V0czt2YXIgbD1jLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXtnZXRXaWRnZXRCeUlkKGNb
aV0pLmZvcm1hdCh0YWJsZSk7fX1mdW5jdGlvbiBnZXRXaWRnZXRCeUlkKG5hbWUpe3ZhciBsPXdp
ZGdldHMubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKyspe2lmKHdpZGdldHNbaV0uaWQudG9Mb3dl
ckNhc2UoKT09bmFtZS50b0xvd2VyQ2FzZSgpKXtyZXR1cm4gd2lkZ2V0c1tpXTt9fX07ZnVuY3Rp
b24gZm9ybWF0U29ydGluZ09yZGVyKHYpe2lmKHR5cGVvZih2KSE9Ik51bWJlciIpe3JldHVybih2
LnRvTG93ZXJDYXNlKCk9PSJkZXNjIik/MTowO31lbHNle3JldHVybih2PT0xKT8xOjA7fX1mdW5j
dGlvbiBpc1ZhbHVlSW5BcnJheSh2LGEpe3ZhciBsPWEubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtp
Kyspe2lmKGFbaV1bMF09PXYpe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO31mdW5jdGlvbiBz
ZXRIZWFkZXJzQ3NzKHRhYmxlLCRoZWFkZXJzLGxpc3QsY3NzKXskaGVhZGVycy5yZW1vdmVDbGFz
cyhjc3NbMF0pLnJlbW92ZUNsYXNzKGNzc1sxXSk7dmFyIGg9W107JGhlYWRlcnMuZWFjaChmdW5j
dGlvbihvZmZzZXQpe2lmKCF0aGlzLnNvcnREaXNhYmxlZCl7aFt0aGlzLmNvbHVtbl09JCh0aGlz
KTt9fSk7dmFyIGw9bGlzdC5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2krKyl7aFtsaXN0W2ldWzBd
XS5hZGRDbGFzcyhjc3NbbGlzdFtpXVsxXV0pO319ZnVuY3Rpb24gZml4Q29sdW1uV2lkdGgodGFi
bGUsJGhlYWRlcnMpe3ZhciBjPXRhYmxlLmNvbmZpZztpZihjLndpZHRoRml4ZWQpe3ZhciBjb2xn
cm91cD0kKCc8Y29sZ3JvdXA+Jyk7JCgidHI6Zmlyc3QgdGQiLHRhYmxlLnRCb2RpZXNbMF0pLmVh
Y2goZnVuY3Rpb24oKXtjb2xncm91cC5hcHBlbmQoJCgnPGNvbD4nKS5jc3MoJ3dpZHRoJywkKHRo
aXMpLndpZHRoKCkpKTt9KTskKHRhYmxlKS5wcmVwZW5kKGNvbGdyb3VwKTt9O31mdW5jdGlvbiB1
cGRhdGVIZWFkZXJTb3J0Q291bnQodGFibGUsc29ydExpc3Qpe3ZhciBjPXRhYmxlLmNvbmZpZyxs
PXNvcnRMaXN0Lmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXt2YXIgcz1zb3J0TGlzdFtpXSxv
PWMuaGVhZGVyTGlzdFtzWzBdXTtvLmNvdW50PXNbMV07by5jb3VudCsrO319ZnVuY3Rpb24gbXVs
dGlzb3J0KHRhYmxlLHNvcnRMaXN0LGNhY2hlKXtpZih0YWJsZS5jb25maWcuZGVidWcpe3ZhciBz
b3J0VGltZT1uZXcgRGF0ZSgpO312YXIgZHluYW1pY0V4cD0idmFyIHNvcnRXcmFwcGVyID0gZnVu
Y3Rpb24oYSxiKSB7IixsPXNvcnRMaXN0Lmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXt2YXIg
Yz1zb3J0TGlzdFtpXVswXTt2YXIgb3JkZXI9c29ydExpc3RbaV1bMV07dmFyIHM9KHRhYmxlLmNv
bmZpZy5wYXJzZXJzW2NdLnR5cGU9PSJ0ZXh0Iik/KChvcmRlcj09MCk/bWFrZVNvcnRGdW5jdGlv
bigidGV4dCIsImFzYyIsYyk6bWFrZVNvcnRGdW5jdGlvbigidGV4dCIsImRlc2MiLGMpKTooKG9y
ZGVyPT0wKT9tYWtlU29ydEZ1bmN0aW9uKCJudW1lcmljIiwiYXNjIixjKTptYWtlU29ydEZ1bmN0
aW9uKCJudW1lcmljIiwiZGVzYyIsYykpO3ZhciBlPSJlIitpO2R5bmFtaWNFeHArPSJ2YXIgIitl
KyIgPSAiK3M7ZHluYW1pY0V4cCs9ImlmKCIrZSsiKSB7IHJldHVybiAiK2UrIjsgfSAiO2R5bmFt
aWNFeHArPSJlbHNlIHsgIjt9dmFyIG9yZ09yZGVyQ29sPWNhY2hlLm5vcm1hbGl6ZWRbMF0ubGVu
Z3RoLTE7ZHluYW1pY0V4cCs9InJldHVybiBhWyIrb3JnT3JkZXJDb2wrIl0tYlsiK29yZ09yZGVy
Q29sKyJdOyI7Zm9yKHZhciBpPTA7aTxsO2krKyl7ZHluYW1pY0V4cCs9In07ICI7fWR5bmFtaWNF
eHArPSJyZXR1cm4gMDsgIjtkeW5hbWljRXhwKz0ifTsgIjtpZih0YWJsZS5jb25maWcuZGVidWcp
e2JlbmNobWFyaygiRXZhbGluZyBleHByZXNzaW9uOiIrZHluYW1pY0V4cCxuZXcgRGF0ZSgpKTt9
ZXZhbChkeW5hbWljRXhwKTtjYWNoZS5ub3JtYWxpemVkLnNvcnQoc29ydFdyYXBwZXIpO2lmKHRh
YmxlLmNvbmZpZy5kZWJ1Zyl7YmVuY2htYXJrKCJTb3J0aW5nIG9uICIrc29ydExpc3QudG9TdHJp
bmcoKSsiIGFuZCBkaXIgIitvcmRlcisiIHRpbWU6Iixzb3J0VGltZSk7fXJldHVybiBjYWNoZTt9
O2Z1bmN0aW9uIG1ha2VTb3J0RnVuY3Rpb24odHlwZSxkaXJlY3Rpb24saW5kZXgpe3ZhciBhPSJh
WyIraW5kZXgrIl0iLGI9ImJbIitpbmRleCsiXSI7aWYodHlwZT09J3RleHQnJiZkaXJlY3Rpb249
PSdhc2MnKXtyZXR1cm4iKCIrYSsiID09ICIrYisiID8gMCA6ICgiK2ErIiA9PT0gbnVsbCA/IE51
bWJlci5QT1NJVElWRV9JTkZJTklUWSA6ICgiK2IrIiA9PT0gbnVsbCA/IE51bWJlci5ORUdBVElW
RV9JTkZJTklUWSA6ICgiK2ErIiA8ICIrYisiKSA/IC0xIDogMSApKSk7Ijt9ZWxzZSBpZih0eXBl
PT0ndGV4dCcmJmRpcmVjdGlvbj09J2Rlc2MnKXtyZXR1cm4iKCIrYSsiID09ICIrYisiID8gMCA6
ICgiK2ErIiA9PT0gbnVsbCA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6ICgiK2IrIiA9PT0g
bnVsbCA/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA6ICgiK2IrIiA8ICIrYSsiKSA/IC0xIDog
MSApKSk7Ijt9ZWxzZSBpZih0eXBlPT0nbnVtZXJpYycmJmRpcmVjdGlvbj09J2FzYycpe3JldHVy
biIoIithKyIgPT09IG51bGwgJiYgIitiKyIgPT09IG51bGwpID8gMCA6KCIrYSsiID09PSBudWxs
ID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogKCIrYisiID09PSBudWxsID8gTnVtYmVyLk5F
R0FUSVZFX0lORklOSVRZIDogIithKyIgLSAiK2IrIikpOyI7fWVsc2UgaWYodHlwZT09J251bWVy
aWMnJiZkaXJlY3Rpb249PSdkZXNjJyl7cmV0dXJuIigiK2ErIiA9PT0gbnVsbCAmJiAiK2IrIiA9
PT0gbnVsbCkgPyAwIDooIithKyIgPT09IG51bGwgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkg
OiAoIitiKyIgPT09IG51bGwgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgOiAiK2IrIiAtICIr
YSsiKSk7Ijt9fTtmdW5jdGlvbiBtYWtlU29ydFRleHQoaSl7cmV0dXJuIigoYVsiK2krIl0gPCBi
WyIraSsiXSkgPyAtMSA6ICgoYVsiK2krIl0gPiBiWyIraSsiXSkgPyAxIDogMCkpOyI7fTtmdW5j
dGlvbiBtYWtlU29ydFRleHREZXNjKGkpe3JldHVybiIoKGJbIitpKyJdIDwgYVsiK2krIl0pID8g
LTEgOiAoKGJbIitpKyJdID4gYVsiK2krIl0pID8gMSA6IDApKTsiO307ZnVuY3Rpb24gbWFrZVNv
cnROdW1lcmljKGkpe3JldHVybiJhWyIraSsiXS1iWyIraSsiXTsiO307ZnVuY3Rpb24gbWFrZVNv
cnROdW1lcmljRGVzYyhpKXtyZXR1cm4iYlsiK2krIl0tYVsiK2krIl07Ijt9O2Z1bmN0aW9uIHNv
cnRUZXh0KGEsYil7aWYodGFibGUuY29uZmlnLnNvcnRMb2NhbGVDb21wYXJlKXJldHVybiBhLmxv
Y2FsZUNvbXBhcmUoYik7cmV0dXJuKChhPGIpPy0xOigoYT5iKT8xOjApKTt9O2Z1bmN0aW9uIHNv
cnRUZXh0RGVzYyhhLGIpe2lmKHRhYmxlLmNvbmZpZy5zb3J0TG9jYWxlQ29tcGFyZSlyZXR1cm4g
Yi5sb2NhbGVDb21wYXJlKGEpO3JldHVybigoYjxhKT8tMTooKGI+YSk/MTowKSk7fTtmdW5jdGlv
biBzb3J0TnVtZXJpYyhhLGIpe3JldHVybiBhLWI7fTtmdW5jdGlvbiBzb3J0TnVtZXJpY0Rlc2Mo
YSxiKXtyZXR1cm4gYi1hO307ZnVuY3Rpb24gZ2V0Q2FjaGVkU29ydFR5cGUocGFyc2VycyxpKXty
ZXR1cm4gcGFyc2Vyc1tpXS50eXBlO307dGhpcy5jb25zdHJ1Y3Q9ZnVuY3Rpb24oc2V0dGluZ3Mp
e3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZighdGhpcy50SGVhZHx8IXRoaXMudEJvZGll
cylyZXR1cm47dmFyICR0aGlzLCRkb2N1bWVudCwkaGVhZGVycyxjYWNoZSxjb25maWcsc2hpZnRE
b3duPTAsc29ydE9yZGVyO3RoaXMuY29uZmlnPXt9O2NvbmZpZz0kLmV4dGVuZCh0aGlzLmNvbmZp
ZywkLnRhYmxlc29ydGVyLmRlZmF1bHRzLHNldHRpbmdzKTskdGhpcz0kKHRoaXMpOyQuZGF0YSh0
aGlzLCJ0YWJsZXNvcnRlciIsY29uZmlnKTskaGVhZGVycz1idWlsZEhlYWRlcnModGhpcyk7dGhp
cy5jb25maWcucGFyc2Vycz1idWlsZFBhcnNlckNhY2hlKHRoaXMsJGhlYWRlcnMpO2NhY2hlPWJ1
aWxkQ2FjaGUodGhpcyk7dmFyIHNvcnRDU1M9W2NvbmZpZy5jc3NEZXNjLGNvbmZpZy5jc3NBc2Nd
O2ZpeENvbHVtbldpZHRoKHRoaXMpOyRoZWFkZXJzLmNsaWNrKGZ1bmN0aW9uKGUpe3ZhciB0b3Rh
bFJvd3M9KCR0aGlzWzBdLnRCb2RpZXNbMF0mJiR0aGlzWzBdLnRCb2RpZXNbMF0ucm93cy5sZW5n
dGgpfHwwO2lmKCF0aGlzLnNvcnREaXNhYmxlZCYmdG90YWxSb3dzPjApeyR0aGlzLnRyaWdnZXIo
InNvcnRTdGFydCIpO3ZhciAkY2VsbD0kKHRoaXMpO3ZhciBpPXRoaXMuY29sdW1uO3RoaXMub3Jk
ZXI9dGhpcy5jb3VudCsrJTI7aWYodGhpcy5sb2NrZWRPcmRlcil0aGlzLm9yZGVyPXRoaXMubG9j
a2VkT3JkZXI7aWYoIWVbY29uZmlnLnNvcnRNdWx0aVNvcnRLZXldKXtjb25maWcuc29ydExpc3Q9
W107aWYoY29uZmlnLnNvcnRGb3JjZSE9bnVsbCl7dmFyIGE9Y29uZmlnLnNvcnRGb3JjZTtmb3Io
dmFyIGo9MDtqPGEubGVuZ3RoO2orKyl7aWYoYVtqXVswXSE9aSl7Y29uZmlnLnNvcnRMaXN0LnB1
c2goYVtqXSk7fX19Y29uZmlnLnNvcnRMaXN0LnB1c2goW2ksdGhpcy5vcmRlcl0pO31lbHNle2lm
KGlzVmFsdWVJbkFycmF5KGksY29uZmlnLnNvcnRMaXN0KSl7Zm9yKHZhciBqPTA7ajxjb25maWcu
c29ydExpc3QubGVuZ3RoO2orKyl7dmFyIHM9Y29uZmlnLnNvcnRMaXN0W2pdLG89Y29uZmlnLmhl
YWRlckxpc3Rbc1swXV07aWYoc1swXT09aSl7by5jb3VudD1zWzFdO28uY291bnQrKztzWzFdPW8u
Y291bnQlMjt9fX1lbHNle2NvbmZpZy5zb3J0TGlzdC5wdXNoKFtpLHRoaXMub3JkZXJdKTt9fTtz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0SGVhZGVyc0NzcygkdGhpc1swXSwkaGVhZGVycyxjb25m
aWcuc29ydExpc3Qsc29ydENTUyk7YXBwZW5kVG9UYWJsZSgkdGhpc1swXSxtdWx0aXNvcnQoJHRo
aXNbMF0sY29uZmlnLnNvcnRMaXN0LGNhY2hlKSk7fSwxKTtyZXR1cm4gZmFsc2U7fX0pLm1vdXNl
ZG93bihmdW5jdGlvbigpe2lmKGNvbmZpZy5jYW5jZWxTZWxlY3Rpb24pe3RoaXMub25zZWxlY3Rz
dGFydD1mdW5jdGlvbigpe3JldHVybiBmYWxzZX07cmV0dXJuIGZhbHNlO319KTskdGhpcy5iaW5k
KCJ1cGRhdGUiLGZ1bmN0aW9uKCl7dmFyIG1lPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe21l
LmNvbmZpZy5wYXJzZXJzPWJ1aWxkUGFyc2VyQ2FjaGUobWUsJGhlYWRlcnMpO2NhY2hlPWJ1aWxk
Q2FjaGUobWUpO30sMSk7fSkuYmluZCgidXBkYXRlQ2VsbCIsZnVuY3Rpb24oZSxjZWxsKXt2YXIg
Y29uZmlnPXRoaXMuY29uZmlnO3ZhciBwb3M9WyhjZWxsLnBhcmVudE5vZGUucm93SW5kZXgtMSks
Y2VsbC5jZWxsSW5kZXhdO2NhY2hlLm5vcm1hbGl6ZWRbcG9zWzBdXVtwb3NbMV1dPWNvbmZpZy5w
YXJzZXJzW3Bvc1sxXV0uZm9ybWF0KGdldEVsZW1lbnRUZXh0KGNvbmZpZyxjZWxsKSxjZWxsKTt9
KS5iaW5kKCJzb3J0b24iLGZ1bmN0aW9uKGUsbGlzdCl7JCh0aGlzKS50cmlnZ2VyKCJzb3J0U3Rh
cnQiKTtjb25maWcuc29ydExpc3Q9bGlzdDt2YXIgc29ydExpc3Q9Y29uZmlnLnNvcnRMaXN0O3Vw
ZGF0ZUhlYWRlclNvcnRDb3VudCh0aGlzLHNvcnRMaXN0KTtzZXRIZWFkZXJzQ3NzKHRoaXMsJGhl
YWRlcnMsc29ydExpc3Qsc29ydENTUyk7YXBwZW5kVG9UYWJsZSh0aGlzLG11bHRpc29ydCh0aGlz
LHNvcnRMaXN0LGNhY2hlKSk7fSkuYmluZCgiYXBwZW5kQ2FjaGUiLGZ1bmN0aW9uKCl7YXBwZW5k
VG9UYWJsZSh0aGlzLGNhY2hlKTt9KS5iaW5kKCJhcHBseVdpZGdldElkIixmdW5jdGlvbihlLGlk
KXtnZXRXaWRnZXRCeUlkKGlkKS5mb3JtYXQodGhpcyk7fSkuYmluZCgiYXBwbHlXaWRnZXRzIixm
dW5jdGlvbigpe2FwcGx5V2lkZ2V0KHRoaXMpO30pO2lmKCQubWV0YWRhdGEmJigkKHRoaXMpLm1l
dGFkYXRhKCkmJiQodGhpcykubWV0YWRhdGEoKS5zb3J0bGlzdCkpe2NvbmZpZy5zb3J0TGlzdD0k
KHRoaXMpLm1ldGFkYXRhKCkuc29ydGxpc3Q7fWlmKGNvbmZpZy5zb3J0TGlzdC5sZW5ndGg+MCl7
JHRoaXMudHJpZ2dlcigic29ydG9uIixbY29uZmlnLnNvcnRMaXN0XSk7fWFwcGx5V2lkZ2V0KHRo
aXMpO30pO307dGhpcy5hZGRQYXJzZXI9ZnVuY3Rpb24ocGFyc2VyKXt2YXIgbD1wYXJzZXJzLmxl
bmd0aCxhPXRydWU7Zm9yKHZhciBpPTA7aTxsO2krKyl7aWYocGFyc2Vyc1tpXS5pZC50b0xvd2Vy
Q2FzZSgpPT1wYXJzZXIuaWQudG9Mb3dlckNhc2UoKSl7YT1mYWxzZTt9fWlmKGEpe3BhcnNlcnMu
cHVzaChwYXJzZXIpO307fTt0aGlzLmFkZFdpZGdldD1mdW5jdGlvbih3aWRnZXQpe3dpZGdldHMu
cHVzaCh3aWRnZXQpO307dGhpcy5mb3JtYXRGbG9hdD1mdW5jdGlvbihzKXt2YXIgaT1wYXJzZUZs
b2F0KHMpO3JldHVybihpc05hTihpKSk/MDppO307dGhpcy5mb3JtYXRJbnQ9ZnVuY3Rpb24ocyl7
dmFyIGk9cGFyc2VJbnQocyk7cmV0dXJuKGlzTmFOKGkpKT8wOmk7fTt0aGlzLmlzRGlnaXQ9ZnVu
Y3Rpb24ocyxjb25maWcpe3JldHVybi9eWy0rXT9cZCokLy50ZXN0KCQudHJpbShzLnJlcGxhY2Uo
L1ssLiddL2csJycpKSk7fTt0aGlzLmNsZWFyVGFibGVCb2R5PWZ1bmN0aW9uKHRhYmxlKXtpZigk
LmJyb3dzZXIubXNpZSl7ZnVuY3Rpb24gZW1wdHkoKXt3aGlsZSh0aGlzLmZpcnN0Q2hpbGQpdGhp
cy5yZW1vdmVDaGlsZCh0aGlzLmZpcnN0Q2hpbGQpO31lbXB0eS5hcHBseSh0YWJsZS50Qm9kaWVz
WzBdKTt9ZWxzZXt0YWJsZS50Qm9kaWVzWzBdLmlubmVySFRNTD0iIjt9fTt9fSk7JC5mbi5leHRl
bmQoe3RhYmxlc29ydGVyOiQudGFibGVzb3J0ZXIuY29uc3RydWN0fSk7dmFyIHRzPSQudGFibGVz
b3J0ZXI7dHMuYWRkUGFyc2VyKHtpZDoidGV4dCIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRydWU7
fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7cmV0dXJuICQudHJpbShzLnRvTG9jYWxlTG93ZXJDYXNlKCkp
O30sdHlwZToidGV4dCJ9KTt0cy5hZGRQYXJzZXIoe2lkOiJkaWdpdCIsaXM6ZnVuY3Rpb24ocyx0
YWJsZSl7dmFyIGM9dGFibGUuY29uZmlnO3JldHVybiAkLnRhYmxlc29ydGVyLmlzRGlnaXQocyxj
KTt9LGZvcm1hdDpmdW5jdGlvbihzKXtyZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChz
KTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoiY3VycmVuY3kiLGlzOmZ1bmN0
aW9uKHMpe3JldHVybi9eW8KjJOKCrD8uXS8udGVzdChzKTt9LGZvcm1hdDpmdW5jdGlvbihzKXty
ZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChzLnJlcGxhY2UobmV3IFJlZ0V4cCgvW8Kj
JOKCrF0vZyksIiIpKTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoiaXBBZGRy
ZXNzIixpczpmdW5jdGlvbihzKXtyZXR1cm4vXlxkezIsM31bXC5dXGR7MiwzfVtcLl1cZHsyLDN9
W1wuXVxkezIsM30kLy50ZXN0KHMpO30sZm9ybWF0OmZ1bmN0aW9uKHMpe3ZhciBhPXMuc3BsaXQo
Ii4iKSxyPSIiLGw9YS5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGl0ZW09YVtpXTtp
ZihpdGVtLmxlbmd0aD09Mil7cis9IjAiK2l0ZW07fWVsc2V7cis9aXRlbTt9fXJldHVybiAkLnRh
Ymxlc29ydGVyLmZvcm1hdEZsb2F0KHIpO30sdHlwZToibnVtZXJpYyJ9KTt0cy5hZGRQYXJzZXIo
e2lkOiJ1cmwiLGlzOmZ1bmN0aW9uKHMpe3JldHVybi9eKGh0dHBzP3xmdHB8ZmlsZSk6XC9cLyQv
LnRlc3Qocyk7fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGpRdWVyeS50cmltKHMucmVwbGFj
ZShuZXcgUmVnRXhwKC8oaHR0cHM/fGZ0cHxmaWxlKTpcL1wvLyksJycpKTt9LHR5cGU6InRleHQi
fSk7dHMuYWRkUGFyc2VyKHtpZDoiaXNvRGF0ZSIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL15cZHs0
fVtcLy1dXGR7MSwyfVtcLy1dXGR7MSwyfSQvLnRlc3Qocyk7fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7
cmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQoKHMhPSIiKT9uZXcgRGF0ZShzLnJlcGxh
Y2UobmV3IFJlZ0V4cCgvLS9nKSwiLyIpKS5nZXRUaW1lKCk6IjAiKTt9LHR5cGU6Im51bWVyaWMi
fSk7dHMuYWRkUGFyc2VyKHtpZDoicGVyY2VudCIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL1wlJC8u
dGVzdCgkLnRyaW0ocykpO30sZm9ybWF0OmZ1bmN0aW9uKHMpe3JldHVybiAkLnRhYmxlc29ydGVy
LmZvcm1hdEZsb2F0KHMucmVwbGFjZShuZXcgUmVnRXhwKC8lL2cpLCIiKSk7fSx0eXBlOiJudW1l
cmljIn0pO3RzLmFkZFBhcnNlcih7aWQ6InVzTG9uZ0RhdGUiLGlzOmZ1bmN0aW9uKHMpe3JldHVy
biBzLm1hdGNoKG5ldyBSZWdFeHAoL15bQS1aYS16XXszLDEwfVwuPyBbMC05XXsxLDJ9LCAoWzAt
OV17NH18Jz9bMC05XXsyfSkgKChbMC0yXT9bMC05XTpbMC01XVswLTldKXwoWzAtMV0/WzAtOV06
WzAtNV1bMC05XVxzKEFNfFBNKSkpJC8pKTt9LGZvcm1hdDpmdW5jdGlvbihzKXtyZXR1cm4gJC50
YWJsZXNvcnRlci5mb3JtYXRGbG9hdChuZXcgRGF0ZShzKS5nZXRUaW1lKCkpO30sdHlwZToibnVt
ZXJpYyJ9KTt0cy5hZGRQYXJzZXIoe2lkOiJzaG9ydERhdGUiLGlzOmZ1bmN0aW9uKHMpe3JldHVy
bi9cZHsxLDJ9W1wvXC1dXGR7MSwyfVtcL1wtXVxkezIsNH0vLnRlc3Qocyk7fSxmb3JtYXQ6ZnVu
Y3Rpb24ocyx0YWJsZSl7dmFyIGM9dGFibGUuY29uZmlnO3M9cy5yZXBsYWNlKC9cLS9nLCIvIik7
aWYoYy5kYXRlRm9ybWF0PT0idXMiKXtzPXMucmVwbGFjZSgvKFxkezEsMn0pW1wvXC1dKFxkezEs
Mn0pW1wvXC1dKFxkezR9KS8sIiQzLyQxLyQyIik7fWVsc2UgaWYoYy5kYXRlRm9ybWF0PT0idWsi
KXtzPXMucmVwbGFjZSgvKFxkezEsMn0pW1wvXC1dKFxkezEsMn0pW1wvXC1dKFxkezR9KS8sIiQz
LyQyLyQxIik7fWVsc2UgaWYoYy5kYXRlRm9ybWF0PT0iZGQvbW0veXkifHxjLmRhdGVGb3JtYXQ9
PSJkZC1tbS15eSIpe3M9cy5yZXBsYWNlKC8oXGR7MSwyfSlbXC9cLV0oXGR7MSwyfSlbXC9cLV0o
XGR7Mn0pLywiJDEvJDIvJDMiKTt9cmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQobmV3
IERhdGUocykuZ2V0VGltZSgpKTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoi
dGltZSIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL14oKFswLTJdP1swLTldOlswLTVdWzAtOV0pfChb
MC0xXT9bMC05XTpbMC01XVswLTldXHMoYW18cG0pKSkkLy50ZXN0KHMpO30sZm9ybWF0OmZ1bmN0
aW9uKHMpe3JldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KG5ldyBEYXRlKCIyMDAwLzAx
LzAxICIrcykuZ2V0VGltZSgpKTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoi
bWV0YWRhdGEiLGlzOmZ1bmN0aW9uKHMpe3JldHVybiBmYWxzZTt9LGZvcm1hdDpmdW5jdGlvbihz
LHRhYmxlLGNlbGwpe3ZhciBjPXRhYmxlLmNvbmZpZyxwPSghYy5wYXJzZXJNZXRhZGF0YU5hbWUp
Pydzb3J0VmFsdWUnOmMucGFyc2VyTWV0YWRhdGFOYW1lO3JldHVybiAkKGNlbGwpLm1ldGFkYXRh
KClbcF07fSx0eXBlOiJudW1lcmljIn0pO3RzLmFkZFdpZGdldCh7aWQ6InplYnJhIixmb3JtYXQ6
ZnVuY3Rpb24odGFibGUpe2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7dmFyIHRpbWU9bmV3IERhdGUo
KTt9dmFyICR0cixyb3c9LTEsb2RkOyQoInRyOnZpc2libGUiLHRhYmxlLnRCb2RpZXNbMF0pLmVh
Y2goZnVuY3Rpb24oaSl7JHRyPSQodGhpcyk7aWYoISR0ci5oYXNDbGFzcyh0YWJsZS5jb25maWcu
Y3NzQ2hpbGRSb3cpKXJvdysrO29kZD0ocm93JTI9PTApOyR0ci5yZW1vdmVDbGFzcyh0YWJsZS5j
b25maWcud2lkZ2V0WmVicmEuY3NzW29kZD8wOjFdKS5hZGRDbGFzcyh0YWJsZS5jb25maWcud2lk
Z2V0WmVicmEuY3NzW29kZD8xOjBdKX0pO2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7JC50YWJsZXNv
cnRlci5iZW5jaG1hcmsoIkFwcGx5aW5nIFplYnJhIHdpZGdldCIsdGltZSk7fX19KTt9KShqUXVl
cnkpO18QD3RleHQvamF2YXNjcmlwdNQFBgcIGBkaG18QSGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rl
di9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGljcy5qc08RAkJicGxp
c3QwMNQBAgMEBQY1NlgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagqwcIHyUm
LRcuLzAxVSRudWxs2wkKCwwNDg8QERITFBUWFxgZGhscHR5SJDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0
UiQ3UiQyUiQ1UiQwUiQ4gAKACoAHEACACYAFgAAQB4AGEAiACNMgCiEaIyRXTlMuYmFzZVtOUy5y
ZWxhdGl2ZYAAgASAA18QSGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFu
Y2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGljcy5qc9InKCkqWiRjbGFzc25hbWVYJGNsYXNzZXNV
TlNVUkyiKyxVTlNVUkxYTlNPYmplY3QjQbnDPzn95ptfEA90ZXh0L2phdmFzY3JpcHQRIvkjf+//
///////SJygyM11OU1VSTFJlc3BvbnNlojQsXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVkQXJjaGl2
ZXLRNzhfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBDAEkAYABjAGoAbQBw
AHMAdgB5AHwAfwCCAIUAhwCJAIsAjQCPAJEAkwCVAJcAmQCbAKIAqgC2ALgAugC8AQcBDAEXASAB
JgEpAS8BOAFBAVMBVgFfAWQBcgF1AYMBlQGYAa4AAAAAAAACAQAAAAAAAAA5AAAAAAAAAAAAAAAA
AAABsE8RIvkvKgogKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCiAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwogKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCiAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCiAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwogKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgogKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQogKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCiAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICov
Cgp2YXIgU3RhdGlzdGljcyA9IG5ldyAoZnVuY3Rpb24gKCkgewoKICAgIHRoaXMubWF4ID0gZnVu
Y3Rpb24gKHZhbHVlcykgewogICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCB2YWx1
ZXMpOwogICAgfQoKICAgIHRoaXMubWluID0gZnVuY3Rpb24gKHZhbHVlcykgewogICAgICAgIHJl
dHVybiBNYXRoLm1pbi5hcHBseShNYXRoLCB2YWx1ZXMpOwogICAgfQoKICAgIHRoaXMuc3VtID0g
ZnVuY3Rpb24gKHZhbHVlcykgewogICAgICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9u
IChhLCBiKSB7IHJldHVybiBhICsgYjsgfSwgMCk7CiAgICB9CgogICAgdGhpcy5zcXVhcmVTdW0g
PSBmdW5jdGlvbiAodmFsdWVzKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoZnVuY3Rp
b24gKHN1bSwgdmFsdWUpIHsgcmV0dXJuIHN1bSArIHZhbHVlICogdmFsdWU7fSwgMCk7CiAgICB9
CgogICAgLy8gV2l0aCBzdW0gYW5kIHN1bSBvZiBzcXVhcmVzLCB3ZSBjYW4gY29tcHV0ZSB0aGUg
c2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBPKDEpLgogICAgLy8gU2VlIGh0dHBzOi8vcm5p
d2EuY29tLzIwMTItMTEtMTAvc2FtcGxlLXN0YW5kYXJkLWRldmlhdGlvbi1pbi10ZXJtcy1vZi1z
dW0tYW5kLXNxdWFyZS1zdW0tb2Ytc2FtcGxlcy8KICAgIHRoaXMuc2FtcGxlU3RhbmRhcmREZXZp
YXRpb24gPSBmdW5jdGlvbiAobnVtYmVyT2ZTYW1wbGVzLCBzdW0sIHNxdWFyZVN1bSkgewogICAg
ICAgIGlmIChudW1iZXJPZlNhbXBsZXMgPCAyKQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICByZXR1cm4gTWF0aC5zcXJ0KHNxdWFyZVN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKQogICAg
ICAgICAgICAtIHN1bSAqIHN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKSAvIG51bWJlck9mU2Ft
cGxlcyk7CiAgICB9CgogICAgdGhpcy5zdXBwb3J0ZWRDb25maWRlbmNlTGV2ZWxzID0gZnVuY3Rp
b24gKCkgewogICAgICAgIHZhciBzdXBwb3J0ZWRMZXZlbHMgPSBbXTsKICAgICAgICBmb3IgKHZh
ciBxdWFudGlsZSBpbiB0RGlzdHJpYnV0aW9uSW52ZXJzZUNERikKICAgICAgICAgICAgc3VwcG9y
dGVkTGV2ZWxzLnB1c2goKDEgLSAoMSAtIHF1YW50aWxlKSAqIDIpLnRvRml4ZWQoMikpOwogICAg
ICAgIHJldHVybiBzdXBwb3J0ZWRMZXZlbHM7CiAgICB9CgogICAgLy8gQ29tcHV0ZXMgdGhlIGRl
bHRhIGQgcy50LiAobWVhbiAtIGQsIG1lYW4gKyBkKSBpcyB0aGUgY29uZmlkZW5jZSBpbnRlcnZh
bCB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlkZW5jZSBsZXZlbCBpbiBPKDEpLgogICAgdGhpcy5j
b25maWRlbmNlSW50ZXJ2YWxEZWx0YSA9IGZ1bmN0aW9uIChjb25maWRlbmNlTGV2ZWwsIG51bWJl
ck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pIHsKICAgICAgICB2YXIgcHJvYmFiaWxpdHkgPSAo
MSAtICgxIC0gY29uZmlkZW5jZUxldmVsKSAvIDIpOwogICAgICAgIGlmICghKHByb2JhYmlsaXR5
IGluIHREaXN0cmlidXRpb25JbnZlcnNlQ0RGKSkgewogICAgICAgICAgICB0aHJvdyAnV2Ugb25s
eSBzdXBwb3J0ICcgKyB0aGlzLnN1cHBvcnRlZENvbmZpZGVuY2VMZXZlbHMoKS5tYXAoCiAgICAg
ICAgICAgICAgICBmdW5jdGlvbiAobGV2ZWwpIHsgcmV0dXJuIGxldmVsICogMTAwICsgJyUnOyB9
ICkuam9pbignLCAnKSArICcgY29uZmlkZW5jZSBpbnRlcnZhbHMuJzsKICAgICAgICB9CiAgICAg
ICAgaWYgKG51bWJlck9mU2FtcGxlcyAtIDIgPCAwKQogICAgICAgICAgICByZXR1cm4gTmFOOwoK
ICAgICAgICB2YXIgY2RmRm9yUHJvYmFiaWxpdHkgPSB0RGlzdHJpYnV0aW9uSW52ZXJzZUNERltw
cm9iYWJpbGl0eV07CiAgICAgICAgdmFyIGRlZ3JlZXNPZkZyZWVkb20gPSBudW1iZXJPZlNhbXBs
ZXMgLSAxOwogICAgICAgIGlmIChkZWdyZWVzT2ZGcmVlZG9tID4gY2RmRm9yUHJvYmFiaWxpdHku
bGVuZ3RoKQogICAgICAgICAgICB0aHJvdyAnV2Ugb25seSBzdXBwb3J0IHVwIHRvICcgKyBkZWx0
YXMubGVuZ3RoICsgJyBkZWdyZWVzIG9mIGZyZWVkb20nOwoKICAgICAgICAvLyB0RGlzdHJpYnV0
aW9uUXVhbnRpbGUoZGVncmVlc09mRnJlZWRvbSwgY29uZmlkZW5jZUxldmVsKSAqIHNhbXBsZVN0
YW5kYXJkRGV2aWF0aW9uIC8gc3FydChudW1iZXJPZlNhbXBsZXMpICogUy9zcXJ0KG51bWJlck9m
U2FtcGxlcykKICAgICAgICB2YXIgcXVhbnRpbGUgPSBjZGZGb3JQcm9iYWJpbGl0eVtkZWdyZWVz
T2ZGcmVlZG9tIC0gMV07IC8vIFRoZSBmaXJzdCBlbnRyeSBpcyBmb3IgdGhlIG9uZSBkZWdyZWUg
b2YgZnJlZWRvbS4KICAgICAgICByZXR1cm4gcXVhbnRpbGUgKiB0aGlzLnNhbXBsZVN0YW5kYXJk
RGV2aWF0aW9uKG51bWJlck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pIC8gTWF0aC5zcXJ0KG51
bWJlck9mU2FtcGxlcyk7CiAgICB9CgogICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWwgPSBmdW5j
dGlvbiAodmFsdWVzLCBwcm9iYWJpbGl0eSkgewogICAgICAgIHZhciBzdW0gPSB0aGlzLnN1bSh2
YWx1ZXMpOwogICAgICAgIHZhciBtZWFuID0gc3VtIC8gdmFsdWVzLmxlbmd0aDsKICAgICAgICB2
YXIgZGVsdGEgPSB0aGlzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKHByb2JhYmlsaXR5IHx8IDAu
OTUsIHZhbHVlcy5sZW5ndGgsIHN1bSwgdGhpcy5zcXVhcmVTdW0odmFsdWVzKSk7CiAgICAgICAg
cmV0dXJuIFttZWFuIC0gZGVsdGEsIG1lYW4gKyBkZWx0YV07CiAgICB9CgogICAgLy8gU2VlIGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3R1ZGVudCdzX3QtZGlzdHJpYnV0aW9uI1RhYmxl
X29mX3NlbGVjdGVkX3ZhbHVlcwogICAgLy8gVGhpcyB0YWJsZSBjb250YWlucyBvbmUgc2lkZWQg
KGEuay5hLiB0YWlsKSB2YWx1ZXMuCiAgICB2YXIgdERpc3RyaWJ1dGlvbkludmVyc2VDREYgPSB7
CiAgICAgICAgMC45OiBbCiAgICAgICAgICAgIDMuMDc3Njg0LCAxLjg4NTYxOCwgMS42Mzc3NDQs
IDEuNTMzMjA2LCAxLjQ3NTg4NCwgMS40Mzk3NTYsIDEuNDE0OTI0LCAxLjM5NjgxNSwgMS4zODMw
MjksIDEuMzcyMTg0LAogICAgICAgICAgICAxLjM2MzQzMCwgMS4zNTYyMTcsIDEuMzUwMTcxLCAx
LjM0NTAzMCwgMS4zNDA2MDYsIDEuMzM2NzU3LCAxLjMzMzM3OSwgMS4zMzAzOTEsIDEuMzI3NzI4
LCAxLjMyNTM0MSwKICAgICAgICAgICAgMS4zMjMxODgsIDEuMzIxMjM3LCAxLjMxOTQ2MCwgMS4z
MTc4MzYsIDEuMzE2MzQ1LCAxLjMxNDk3MiwgMS4zMTM3MDMsIDEuMzEyNTI3LCAxLjMxMTQzNCwg
MS4zMTA0MTUsCiAgICAgICAgICAgIDEuMzA5NDY0LCAxLjMwODU3MywgMS4zMDc3MzcsIDEuMzA2
OTUyLCAxLjMwNjIxMiwgMS4zMDU1MTQsIDEuMzA0ODU0LCAxLjMwNDIzMCwgMS4zMDM2MzksIDEu
MzAzMDc3LAogICAgICAgICAgICAxLjMwMjU0MywgMS4zMDIwMzUsIDEuMzAxNTUyLCAxLjMwMTA5
MCwgMS4zMDA2NDksIDEuMzAwMjI4LCAxLjI5OTgyNSwgMS4yOTk0MzksIDEuMjk5MDY5LCAxLjI5
ODcxNCwKCiAgICAgICAgICAgIDEuMjk4MzczLCAxLjI5ODA0NSwgMS4yOTc3MzAsIDEuMjk3NDI2
LCAxLjI5NzEzNCwgMS4yOTY4NTMsIDEuMjk2NTgxLCAxLjI5NjMxOSwgMS4yOTYwNjYsIDEuMjk1
ODIxLAogICAgICAgICAgICAxLjI5NTU4NSwgMS4yOTUzNTYsIDEuMjk1MTM0LCAxLjI5NDkyMCwg
MS4yOTQ3MTIsIDEuMjk0NTExLCAxLjI5NDMxNSwgMS4yOTQxMjYsIDEuMjkzOTQyLCAxLjI5Mzc2
MywKICAgICAgICAgICAgMS4yOTM1ODksIDEuMjkzNDIxLCAxLjI5MzI1NiwgMS4yOTMwOTcsIDEu
MjkyOTQxLCAxLjI5Mjc5MCwgMS4yOTI2NDMsIDEuMjkyNTAwLCAxLjI5MjM2MCwgMS4yOTIyMjQs
CiAgICAgICAgICAgIDEuMjkyMDkxLCAxLjI5MTk2MSwgMS4yOTE4MzUsIDEuMjkxNzExLCAxLjI5
MTU5MSwgMS4yOTE0NzMsIDEuMjkxMzU4LCAxLjI5MTI0NiwgMS4yOTExMzYsIDEuMjkxMDI5LAog
ICAgICAgICAgICAxLjI5MDkyNCwgMS4yOTA4MjEsIDEuMjkwNzIxLCAxLjI5MDYyMywgMS4yOTA1
MjcsIDEuMjkwNDMyLCAxLjI5MDM0MCwgMS4yOTAyNTAsIDEuMjkwMTYxLCAxLjI5MDA3NV0sCiAg
ICAgICAgMC45NTogWwogICAgICAgICAgICA2LjMxMzc1MiwgMi45MTk5ODYsIDIuMzUzMzYzLCAy
LjEzMTg0NywgMi4wMTUwNDgsIDEuOTQzMTgwLCAxLjg5NDU3OSwgMS44NTk1NDgsIDEuODMzMTEz
LCAxLjgxMjQ2MSwKICAgICAgICAgICAgMS43OTU4ODUsIDEuNzgyMjg4LCAxLjc3MDkzMywgMS43
NjEzMTAsIDEuNzUzMDUwLCAxLjc0NTg4NCwgMS43Mzk2MDcsIDEuNzM0MDY0LCAxLjcyOTEzMywg
MS43MjQ3MTgsCiAgICAgICAgICAgIDEuNzIwNzQzLCAxLjcxNzE0NCwgMS43MTM4NzIsIDEuNzEw
ODgyLCAxLjcwODE0MSwgMS43MDU2MTgsIDEuNzAzMjg4LCAxLjcwMTEzMSwgMS42OTkxMjcsIDEu
Njk3MjYxLAogICAgICAgICAgICAxLjY5NTUxOSwgMS42OTM4ODksIDEuNjkyMzYwLCAxLjY5MDky
NCwgMS42ODk1NzIsIDEuNjg4Mjk4LCAxLjY4NzA5NCwgMS42ODU5NTQsIDEuNjg0ODc1LCAxLjY4
Mzg1MSwKICAgICAgICAgICAgMS42ODI4NzgsIDEuNjgxOTUyLCAxLjY4MTA3MSwgMS42ODAyMzAs
IDEuNjc5NDI3LCAxLjY3ODY2MCwgMS42Nzc5MjcsIDEuNjc3MjI0LCAxLjY3NjU1MSwgMS42NzU5
MDUsCgogICAgICAgICAgICAxLjY3NTI4NSwgMS42NzQ2ODksIDEuNjc0MTE2LCAxLjY3MzU2NSwg
MS42NzMwMzQsIDEuNjcyNTIyLCAxLjY3MjAyOSwgMS42NzE1NTMsIDEuNjcxMDkzLCAxLjY3MDY0
OSwKICAgICAgICAgICAgMS42NzAyMTksIDEuNjY5ODA0LCAxLjY2OTQwMiwgMS42NjkwMTMsIDEu
NjY4NjM2LCAxLjY2ODI3MSwgMS42Njc5MTYsIDEuNjY3NTcyLCAxLjY2NzIzOSwgMS42NjY5MTQs
CiAgICAgICAgICAgIDEuNjY2NjAwLCAxLjY2NjI5NCwgMS42NjU5OTYsIDEuNjY1NzA3LCAxLjY2
NTQyNSwgMS42NjUxNTEsIDEuNjY0ODg1LCAxLjY2NDYyNSwgMS42NjQzNzEsIDEuNjY0MTI1LAog
ICAgICAgICAgICAxLjY2Mzg4NCwgMS42NjM2NDksIDEuNjYzNDIwLCAxLjY2MzE5NywgMS42NjI5
NzgsIDEuNjYyNzY1LCAxLjY2MjU1NywgMS42NjIzNTQsIDEuNjYyMTU1LCAxLjY2MTk2MSwKICAg
ICAgICAgICAgMS42NjE3NzEsIDEuNjYxNTg1LCAxLjY2MTQwNCwgMS42NjEyMjYsIDEuNjYxMDUy
LCAxLjY2MDg4MSwgMS42NjA3MTUsIDEuNjYwNTUxLCAxLjY2MDM5MSwgMS42NjAyMzRdLAogICAg
ICAgIDAuOTc1OiBbCiAgICAgICAgICAgIDEyLjcwNjIwNSwgNC4zMDI2NTMsIDMuMTgyNDQ2LCAy
Ljc3NjQ0NSwgMi41NzA1ODIsIDIuNDQ2OTEyLCAyLjM2NDYyNCwgMi4zMDYwMDQsIDIuMjYyMTU3
LCAyLjIyODEzOSwKICAgICAgICAgICAgMi4yMDA5ODUsIDIuMTc4ODEzLCAyLjE2MDM2OSwgMi4x
NDQ3ODcsIDIuMTMxNDUwLCAyLjExOTkwNSwgMi4xMDk4MTYsIDIuMTAwOTIyLCAyLjA5MzAyNCwg
Mi4wODU5NjMsCiAgICAgICAgICAgIDIuMDc5NjE0LCAyLjA3Mzg3MywgMi4wNjg2NTgsIDIuMDYz
ODk5LCAyLjA1OTUzOSwgMi4wNTU1MjksIDIuMDUxODMxLCAyLjA0ODQwNywgMi4wNDUyMzAsIDIu
MDQyMjcyLAogICAgICAgICAgICAyLjAzOTUxMywgMi4wMzY5MzMsIDIuMDM0NTE1LCAyLjAzMjI0
NSwgMi4wMzAxMDgsIDIuMDI4MDk0LCAyLjAyNjE5MiwgMi4wMjQzOTQsIDIuMDIyNjkxLCAyLjAy
MTA3NSwKICAgICAgICAgICAgMi4wMTk1NDEsIDIuMDE4MDgyLCAyLjAxNjY5MiwgMi4wMTUzNjgs
IDIuMDE0MTAzLCAyLjAxMjg5NiwgMi4wMTE3NDEsIDIuMDEwNjM1LCAyLjAwOTU3NSwgMi4wMDg1
NTksCgogICAgICAgICAgICAyLjAwNzU4NCwgMi4wMDY2NDcsIDIuMDA1NzQ2LCAyLjAwNDg3OSwg
Mi4wMDQwNDUsIDIuMDAzMjQxLCAyLjAwMjQ2NSwgMi4wMDE3MTcsIDIuMDAwOTk1LCAyLjAwMDI5
OCwKICAgICAgICAgICAgMS45OTk2MjQsIDEuOTk4OTcyLCAxLjk5ODM0MSwgMS45OTc3MzAsIDEu
OTk3MTM4LCAxLjk5NjU2NCwgMS45OTYwMDgsIDEuOTk1NDY5LCAxLjk5NDk0NSwgMS45OTQ0Mzcs
CiAgICAgICAgICAgIDEuOTkzOTQzLCAxLjk5MzQ2NCwgMS45OTI5OTcsIDEuOTkyNTQzLCAxLjk5
MjEwMiwgMS45OTE2NzMsIDEuOTkxMjU0LCAxLjk5MDg0NywgMS45OTA0NTAsIDEuOTkwMDYzLAog
ICAgICAgICAgICAxLjk4OTY4NiwgMS45ODkzMTksIDEuOTg4OTYwLCAxLjk4ODYxMCwgMS45ODgy
NjgsIDEuOTg3OTM0LCAxLjk4NzYwOCwgMS45ODcyOTAsIDEuOTg2OTc5LCAxLjk4NjY3NSwKICAg
ICAgICAgICAgMS45ODYzNzcsIDEuOTg2MDg2LCAxLjk4NTgwMiwgMS45ODU1MjMsIDEuOTg1MjUx
LCAxLjk4NDk4NCwgMS45ODQ3MjMsIDEuOTg0NDY3LCAxLjk4NDIxNywgMS45ODM5NzJdLAogICAg
ICAgIDAuOTk6IFsKICAgICAgICAgICAgMzEuODIwNTE2LCA2Ljk2NDU1NywgNC41NDA3MDMsIDMu
NzQ2OTQ3LCAzLjM2NDkzMCwgMy4xNDI2NjgsIDIuOTk3OTUyLCAyLjg5NjQ1OSwgMi44MjE0Mzgs
IDIuNzYzNzY5LAogICAgICAgICAgICAyLjcxODA3OSwgMi42ODA5OTgsIDIuNjUwMzA5LCAyLjYy
NDQ5NCwgMi42MDI0ODAsIDIuNTgzNDg3LCAyLjU2NjkzNCwgMi41NTIzODAsIDIuNTM5NDgzLCAy
LjUyNzk3NywKICAgICAgICAgICAgMi41MTc2NDgsIDIuNTA4MzI1LCAyLjQ5OTg2NywgMi40OTIx
NTksIDIuNDg1MTA3LCAyLjQ3ODYzMCwgMi40NzI2NjAsIDIuNDY3MTQwLCAyLjQ2MjAyMSwgMi40
NTcyNjIsCiAgICAgICAgICAgIDIuNDUyODI0LCAyLjQ0ODY3OCwgMi40NDQ3OTQsIDIuNDQxMTUw
LCAyLjQzNzcyMywgMi40MzQ0OTQsIDIuNDMxNDQ3LCAyLjQyODU2OCwgMi40MjU4NDEsIDIuNDIz
MjU3LAogICAgICAgICAgICAyLjQyMDgwMywgMi40MTg0NzAsIDIuNDE2MjUwLCAyLjQxNDEzNCwg
Mi40MTIxMTYsIDIuNDEwMTg4LCAyLjQwODM0NSwgMi40MDY1ODEsIDIuNDA0ODkyLCAyLjQwMzI3
MiwKCiAgICAgICAgICAgIDIuNDAxNzE4LCAyLjQwMDIyNSwgMi4zOTg3OTAsIDIuMzk3NDEwLCAy
LjM5NjA4MSwgMi4zOTQ4MDEsIDIuMzkzNTY4LCAyLjM5MjM3NywgMi4zOTEyMjksIDIuMzkwMTE5
LAogICAgICAgICAgICAyLjM4OTA0NywgMi4zODgwMTEsIDIuMzg3MDA4LCAyLjM4NjAzNywgMi4z
ODUwOTcsIDIuMzg0MTg2LCAyLjM4MzMwMiwgMi4zODI0NDYsIDIuMzgxNjE1LCAyLjM4MDgwNywK
ICAgICAgICAgICAgMi4zODAwMjQsIDIuMzc5MjYyLCAyLjM3ODUyMiwgMi4zNzc4MDIsIDIuMzc3
MTAyLCAyLjM3NjQyMCwgMi4zNzU3NTcsIDIuMzc1MTExLCAyLjM3NDQ4MiwgMi4zNzM4NjgsCiAg
ICAgICAgICAgIDIuMzczMjcwLCAyLjM3MjY4NywgMi4zNzIxMTksIDIuMzcxNTY0LCAyLjM3MTAy
MiwgMi4zNzA0OTMsIDIuMzY5OTc3LCAyLjM2OTQ3MiwgMi4zNjg5NzksIDIuMzY4NDk3LAogICAg
ICAgICAgICAyLjM2ODAyNiwgMi4zNjc1NjYsIDIuMzY3MTE1LCAyLjM2NjY3NCwgMi4zNjYyNDMs
IDIuMzY1ODIxLCAyLjM2NTQwNywgMi4zNjUwMDIsIDIuMzY0NjA2LCAyLjM2NDIxN10KICAgIH07
Cgp9KSgpOwoKaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpIHsKICAgIGZvciAodmFy
IGtleSBpbiBTdGF0aXN0aWNzKQogICAgICAgIG1vZHVsZS5leHBvcnRzW2tleV0gPSBTdGF0aXN0
aWNzW2tleV07Cn0KXxAPdGV4dC9qYXZhc2NyaXB01QUHCB0eHyAhIiNfEBtXZWJSZXNvdXJjZVRl
eHRFbmNvZGluZ05hbWVfEBRXZWJSZXNvdXJjZUZyYW1lTmFtZV8QUGZpbGU6Ly8vVXNlcnMveXVz
dWtlL2Rldi9XZWJLaXQvV2ViS2l0QnVpbGQvUmVsZWFzZS9QZXJmb3JtYW5jZVRlc3RzUmVzdWx0
cy5odG1sTxG+djwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPgo8dGl0bGU+V2ViS2l0IFBlcmZv
cm1hbmNlIFRlc3QgUmVzdWx0czwvdGl0bGU+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgpzZWN0
aW9uIHsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgcGFkZGluZzogMTBweDsKICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKfQoKLnRpbWUtcGxvdHMgewogICAgcGFkZGluZy1sZWZ0OiAyNXB4Owp9
CgoudGltZS1wbG90cyA+IGRpdiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0
aDogOTBweDsKICAgIGhlaWdodDogNDBweDsKICAgIG1hcmdpbi1yaWdodDogMTBweDsKfQoKc2Vj
dGlvbiBoMSB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXNpemU6IDFlbTsKfQoK
c2VjdGlvbiAudG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiAjZmZjYzY2OwogICAgYm9yZGVyLXJhZGl1czogNXB4
OwogICAgcGFkZGluZzogMHB4IDVweDsKfQoKYm9keSB7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBt
YXJnaW46IDBweDsKICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwp9Cgp0YWJsZSB7CiAgICBi
YWNrZ3JvdW5kOiB3aGl0ZTsKICAgIHdpZHRoOiAxMDAlOwp9Cgp0YWJsZSwgdGQsIHRoIHsKICAg
IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICBwYWRkaW5nOiA1cHg7Cn0KCnRyLmV2ZW4g
ewogICAgYmFja2dyb3VuZDogI2Y2ZjZmNjsKfQoKdGFibGUgdGQgewogICAgcG9zaXRpb246IHJl
bGF0aXZlOwogICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQoKdGgsIHRkIHsKICAgIGN1cnNv
cjogcG9pbnRlcjsKICAgIGN1cnNvcjogaGFuZDsKfQoKdGggewogICAgYmFja2dyb3VuZDogI2U2
ZWVlZTsKICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwg
bGVmdCBib3R0b20sIGZyb20ocmdiKDI0NCwgMjQ0LCAyNDQpKSwgdG8ocmdiKDIxNywgMjE3LCAy
MTcpKSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwp9Cgp0aDphZnRlciB7CiAgICBjb250
ZW50OiAnIFwyNUI4JzsKfQoKdGguaGVhZGVyU29ydFVwOmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcg
XDI1QkUnOwp9Cgp0aC5oZWFkZXJTb3J0RG93bjphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUI0
JzsKfQoKdGQuY29tcGFyaXNvbiwgdGQucmVzdWx0IHsKICAgIHRleHQtYWxpZ246IHJpZ2h0Owp9
Cgp0ZC5iZXR0ZXIgewogICAgY29sb3I6ICM2YzY7Cn0KCnRkLndvcnNlIHsKICAgIGNvbG9yOiAj
YzY2Owp9Cgp0ZC5taXNzaW5nIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmNoZWNrYm94
IHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGJhY2tncm91bmQ6ICNlZWU7CiAgICBi
YWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9w
LCBmcm9tKHJnYigyMjAsIDIyMCwgMjIwKSksIHRvKHJnYigyMDAsIDIwMCwgMjAwKSkpOwogICAg
Ym9yZGVyOiBpbnNldCAxcHggI2RkZDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIG1hcmdp
bjogMTBweDsKICAgIGZvbnQtc2l6ZTogc21hbGw7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBj
dXJzb3I6IGhhbmQ7CiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgZm9udC13ZWln
aHQ6IGJvbGQ7Cn0KCi5jaGVja2JveCBzcGFuIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsK
ICAgIGxpbmUtaGVpZ2h0OiAxMDAlOwogICAgcGFkZGluZzogNXB4IDhweDsKICAgIGJvcmRlcjog
b3V0c2V0IDFweCB0cmFuc3BhcmVudDsKfQoKLmNoZWNrYm94IC5jaGVja2VkIHsKICAgIGJhY2tn
cm91bmQ6ICNlNmVlZWU7CiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwg
bGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYigyNTUsIDI1NSwgMjU1KSksIHRvKHJnYigy
MzUsIDIzNSwgMjM1KSkpOwogICAgYm9yZGVyOiBvdXRzZXQgMXB4ICNlZWU7CiAgICBib3JkZXIt
cmFkaXVzOiA1cHg7Cn0KCjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgc3R5bGU9InBhZGRp
bmc6IDAgMTBweDsiPgpSZXN1bHQgPHNwYW4gaWQ9InRpbWUtbWVtb3J5IiBjbGFzcz0iY2hlY2ti
b3giPjxzcGFuIGNsYXNzPSJjaGVja2VkIj5UaW1lPC9zcGFuPjxzcGFuPk1lbW9yeTwvc3Bhbj48
L3NwYW4+ClJlZmVyZW5jZSA8c3BhbiBpZD0icmVmZXJlbmNlIiBjbGFzcz0iY2hlY2tib3giPjxz
cGFuIHZhbHVlPSIwIiBjbGFzcz0iY2hlY2tlZCI+cjE3MzU1Nzwvc3Bhbj48L3NwYW4+CjxzcGFu
IHRpdGxlPSJDb25maWRlbmNlIEludGVydmFsIERlbHRhIj5DSc6UPC9zcGFuPiA8c3BhbiBpZD0i
Y29uZmlkZW5jZUludGVydmFsRGVsdGEiIGNsYXNzPSJjaGVja2JveCI+PHNwYW4gY2xhc3M9ImNo
ZWNrZWQiPlNob3c8L3NwYW4+PHNwYW4+SGlkZTwvc3Bhbj48L3NwYW4+CjwvZGl2Pgo8dGFibGUg
aWQ9ImNvbnRhaW5lciI+PHRoZWFkPjx0cj48dGggY2xhc3M9ImhlYWRlciI+VGVzdDwvdGg+PHRo
IGNsYXNzPSJoZWFkZXIiPlVuaXQ8L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0ie3NvcnRlcjog
J2NvbXBhcmlzb24nfSBoZWFkZXIiPnIxNzM1NTc8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRy
IGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pR
dWVyeSAtICNzY2VuZTEgI3NwZWVjaDE6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMv
czwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjEyLCBtaW49MjEuMjksIG1heD0y
Mi4xNApzbG9wZT0wLjAyLCBSXjI9MC4yNCI+MjEuNzc8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5j
ZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjEyLCBtaW49MjEuMjksIG1heD0yMi4xNApzbG9w
ZT0wLjAyLCBSXjI9MC4yNCI+wrEgMC41NSU8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQg
Y2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSAjc3BlZWNoNTpS
dW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIg
dGl0bGU9Is+DPTU2LjA5LCBtaW49ODczLjc5LCBtYXg9MTIyNC40NwpzbG9wZT01LjMxLCBSXjI9
MC4wNyI+MTA3MC44MDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0
bGU9Is+DPTU2LjA5LCBtaW49ODczLjc5LCBtYXg9MTIyNC40NwpzbG9wZT01LjMxLCBSXjI9MC4w
NyI+wrEgNS4yNCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ry
b21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtICo6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0
Ij5ydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MTguMjAsIG1pbj0zMDIz
LjAwLCBtYXg9MzE1NS4wMApzbG9wZT0zLjQ1LCBSXjI9MC4yOCI+MzA5My44NTwvdGQ+PHRkIGNs
YXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTE4LjIwLCBtaW49MzAyMy4w
MCwgbWF4PTMxNTUuMDAKc2xvcGU9My40NSwgUl4yPTAuMjgiPsKxIDAuNTklPC90ZD48L3RyPjx0
ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkv
alF1ZXJ5IC0gLmRpYWxvZzpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48
dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTYuODEsIG1pbj0zMDUuNjIsIG1heD0zNTEuMjgK
c2xvcGU9MC4zMiwgUl4yPTAuMDIiPjMzMi40MTwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50
ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTYuODEsIG1pbj0zMDUuNjIsIG1heD0zNTEuMjgKc2xvcGU9
MC4zMiwgUl4yPTAuMDIiPsKxIDIuMDUlPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xh
c3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBib2R5IGRpdjpSdW5z
PC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0
bGU9Is+DPTAuMDYsIG1pbj0xOC43NSwgbWF4PTE5LjIxCnNsb3BlPTAuMDEsIFJeMj0wLjIyIj4x
OS4wMzwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAu
MDYsIG1pbj0xOC43NSwgbWF4PTE5LjIxCnNsb3BlPTAuMDEsIFJeMj0wLjIyIj7CsSAwLjMzJTwv
dGQ+PC90cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVl
cnktanF1ZXJ5L2pRdWVyeSAtIGJvZHk6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMv
czwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz03LjE3LCBtaW49MzM1LjkzLCBtYXg9
MzgzLjE5CnNsb3BlPS0xLjIyLCBSXjI9MC4yMiI+MzY0Ljc3PC90ZD48dGQgY2xhc3M9ImNvbmZp
ZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9Ny4xNywgbWluPTMzNS45MywgbWF4PTM4My4x
OQpzbG9wZT0tMS4yMiwgUl4yPTAuMjIiPsKxIDEuOTclPC90ZD48L3RyPjx0ciBjbGFzcz0ib2Rk
Ij48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYg
I3NwZWVjaDU6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNz
PSJyZXN1bHQiIHRpdGxlPSLPgz0wLjE4LCBtaW49MjEuMjMsIG1heD0yMi41MApzbG9wZT0tMC4w
NSwgUl4yPTAuNTQiPjIxLjcyPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
IiB0aXRsZT0iz4M9MC4xOCwgbWluPTIxLjIzLCBtYXg9MjIuNTAKc2xvcGU9LTAuMDUsIFJeMj0w
LjU0Ij7CsSAwLjgyJTwvdGQ+PC90cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+
L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdiArIGRpdjpSdW5zPC90ZD48dGQg
Y2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAu
MTIsIG1pbj0yMS4xNiwgbWF4PTIyLjE0CnNsb3BlPTAuMDEsIFJeMj0wLjA3Ij4yMS43NjwvdGQ+
PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTIsIG1pbj0y
MS4xNiwgbWF4PTIyLjE0CnNsb3BlPTAuMDEsIFJeMj0wLjA3Ij7CsSAwLjUzJTwvdGQ+PC90cj48
dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkv
alF1ZXJ5IC0gZGl2IC5kaWFsb2c6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwv
dGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjEzLCBtaW49MjEuNDAsIG1heD0yMi40
NgpzbG9wZT0wLjAzLCBSXjI9MC40NyI+MjEuOTM8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUlu
dGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjEzLCBtaW49MjEuNDAsIG1heD0yMi40NgpzbG9wZT0w
LjAzLCBSXjI9MC40NyI+wrEgMC41OSU8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xh
c3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYgJmd0OyBkaXY6
UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQi
IHRpdGxlPSLPgz0wLjA5LCBtaW49MTkuNTQsIG1heD0yMC4yOQpzbG9wZT0tMC4wMSwgUl4yPTAu
MTciPjIwLjA0PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0i
z4M9MC4wOSwgbWluPTE5LjU0LCBtYXg9MjAuMjkKc2xvcGU9LTAuMDEsIFJeMj0wLjE3Ij7CsSAw
LjQ2JTwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9j
c3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2IGRpdiBkaXY6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1
bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjE4LCBtaW49
MjAuNjcsIG1heD0yMi4wMApzbG9wZT0tMC4wNSwgUl4yPTAuNTYiPjIxLjQzPC90ZD48dGQgY2xh
c3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xOCwgbWluPTIwLjY3LCBt
YXg9MjIuMDAKc2xvcGU9LTAuMDUsIFJeMj0wLjU2Ij7CsSAwLjgyJTwvdGQ+PC90cj48dHIgY2xh
c3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVy
eSAtIGRpdiBkaXY6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNs
YXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjEzLCBtaW49MTkuNDksIG1heD0yMC40MgpzbG9wZT0w
LjAwLCBSXjI9MC4wMSI+MTkuOTk8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVs
dGEiIHRpdGxlPSLPgz0wLjEzLCBtaW49MTkuNDksIG1heD0yMC40MgpzbG9wZT0wLjAwLCBSXjI9
MC4wMSI+wrEgMC42NCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+
L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdiB+IGRpdjpSdW5zPC90ZD48dGQg
Y2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAu
MTcsIG1pbj0xOC4wMiwgbWF4PTE5LjIwCnNsb3BlPS0wLjAxLCBSXjI9MC4wMiI+MTguNTk8L3Rk
Pjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE3LCBtaW49
MTguMDIsIG1heD0xOS4yMApzbG9wZT0tMC4wMSwgUl4yPTAuMDIiPsKxIDAuOTAlPC90ZD48L3Ry
Pjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVl
cnkvalF1ZXJ5IC0gZGl2I3NjZW5lMSBkaXYuZGlhbG9nIGRpdjpSdW5zPC90ZD48dGQgY2xhc3M9
InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMTUsIG1p
bj0yMS4xNiwgbWF4PTIyLjI1CnNsb3BlPS0wLjAzLCBSXjI9MC40NCI+MjEuNzY8L3RkPjx0ZCBj
bGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE1LCBtaW49MjEuMTYs
IG1heD0yMi4yNQpzbG9wZT0tMC4wMywgUl4yPTAuNDQiPsKxIDAuNjclPC90ZD48L3RyPjx0ciBj
bGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVl
cnkgLSBkaXYjc3BlZWNoNTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48
dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMTEsIG1pbj0yMS40OSwgbWF4PTIyLjI4CnNs
b3BlPS0wLjAzLCBSXjI9MC41OSI+MjEuODk8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVy
dmFsRGVsdGEiIHRpdGxlPSLPgz0wLjExLCBtaW49MjEuNDksIG1heD0yMi4yOApzbG9wZT0tMC4w
MywgUl4yPTAuNTkiPsKxIDAuNTElPC90ZD48L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNz
PSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2LCBhLCBzcGFuOlJ1
bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+cnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0
bGU9Is+DPTQwLjc3LCBtaW49MzUwOS4wMCwgbWF4PTM3MjYuMDAKc2xvcGU9NS4zMiwgUl4yPTAu
MTMiPjM2MjMuOTA8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxl
PSLPgz00MC43NywgbWluPTM1MDkuMDAsIG1heD0zNzI2LjAwCnNsb3BlPTUuMzIsIFJeMj0wLjEz
Ij7CsSAxLjEzJTwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJv
bWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2LCBkaXYsIGRpdjpSdW5zPC90ZD48dGQg
Y2xhc3M9InVuaXQiPnJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz00My4z
MywgbWluPTM3NzIuMDAsIG1heD00MDExLjAwCnNsb3BlPTMuODEsIFJeMj0wLjA2Ij4zODk1LjQw
PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9NDMuMzMs
IG1pbj0zNzcyLjAwLCBtYXg9NDAxMS4wMApzbG9wZT0zLjgxLCBSXjI9MC4wNiI+wrEgMS4xMSU8
L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1
ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYuY2hhcmFjdGVyLCBkaXYuZGlhbG9nOlJ1bnM8L3RkPjx0
ZCBjbGFzcz0idW5pdCI+cnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTU5
LjQ5LCBtaW49NTEzNS4wMCwgbWF4PTU0ODUuMDAKc2xvcGU9My40NSwgUl4yPTAuMDMiPjUzNDMu
MjA8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz01OS40
OSwgbWluPTUxMzUuMDAsIG1heD01NDg1LjAwCnNsb3BlPTMuNDUsIFJeMj0wLjAzIj7CsSAxLjEx
JTwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3Nx
dWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2LmRpYWxvZzpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQi
PksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMTUsIG1pbj0yMS40
MSwgbWF4PTIyLjYxCnNsb3BlPS0wLjAyLCBSXjI9MC4wNyI+MjIuMDA8L3RkPjx0ZCBjbGFzcz0i
Y29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE1LCBtaW49MjEuNDEsIG1heD0y
Mi42MQpzbG9wZT0tMC4wMiwgUl4yPTAuMDciPsKxIDAuNzAlPC90ZD48L3RyPjx0ciBjbGFzcz0i
ZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0g
ZGl2LnNjZW5lIGRpdi5kaWFsb2c6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwv
dGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjA4LCBtaW49MjEuODEsIG1heD0yMi40
NwpzbG9wZT0wLjAxLCBSXjI9MC4xNiI+MjIuMTk8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUlu
dGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjA4LCBtaW49MjEuODEsIG1heD0yMi40NwpzbG9wZT0w
LjAxLCBSXjI9MC4xNiI+wrEgMC4zOCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFz
cz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdjpSdW5zPC90ZD48
dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+D
PTEuNzQsIG1pbj0xMjYuODcsIG1heD0xMzkuNTcKc2xvcGU9LTAuMzEsIFJeMj0wLjI0Ij4xMzIu
MjM8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0xLjc0
LCBtaW49MTI2Ljg3LCBtYXg9MTM5LjU3CnNsb3BlPS0wLjMxLCBSXjI9MC4yNCI+wrEgMS4zMiU8
L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1
ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXY6Zmlyc3QtY2hpbGQ6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1
bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjE4LCBtaW49
MjEuMDIsIG1heD0yMi4zNgpzbG9wZT0wLjA1LCBSXjI9MC41NyI+MjEuODk8L3RkPjx0ZCBjbGFz
cz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE4LCBtaW49MjEuMDIsIG1h
eD0yMi4zNgpzbG9wZT0wLjA1LCBSXjI9MC41NyI+wrEgMC44NCU8L3RkPjwvdHI+PHRyIGNsYXNz
PSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAt
IGRpdjpsYXN0LWNoaWxkOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0
ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xMCwgbWluPTIxLjM5LCBtYXg9MjIuMTgKc2xv
cGU9LTAuMDAsIFJeMj0wLjAyIj4yMS44MDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTAsIG1pbj0yMS4zOSwgbWF4PTIyLjE4CnNsb3BlPS0wLjAw
LCBSXjI9MC4wMiI+wrEgMC40NyU8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9
InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXY6bnRoLWNoaWxkKDJu
KTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPnJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQi
IHRpdGxlPSLPgz0yMy44NiwgbWluPTU4MDIuMDAsIG1heD01OTgzLjAwCnNsb3BlPTUuNjAsIFJe
Mj0wLjQyIj41OTA1LjAwPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0
aXRsZT0iz4M9MjMuODYsIG1pbj01ODAyLjAwLCBtYXg9NTk4My4wMApzbG9wZT01LjYwLCBSXjI9
MC40MiI+wrEgMC40MCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+
L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdjpudGgtY2hpbGQoMm4rMSk6UnVu
czwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5ydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRs
ZT0iz4M9MTMuNzcsIG1pbj01ODY3LjAwLCBtYXg9NTk2OC4wMApzbG9wZT0xLjYzLCBSXjI9MC4x
MSI+NTkyMC4zMDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9
Is+DPTEzLjc3LCBtaW49NTg2Ny4wMCwgbWF4PTU5NjguMDAKc2xvcGU9MS42MywgUl4yPTAuMTEi
PsKxIDAuMjMlPC90ZD48L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJv
bWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2Om50aC1jaGlsZChldmVuKTpSdW5zPC90
ZD48dGQgY2xhc3M9InVuaXQiPnJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLP
gz0zMy45NSwgbWluPTU2NzUuMDAsIG1heD01OTY1LjAwCnNsb3BlPTcuOTYsIFJeMj0wLjQyIj41
ODg0LjM1PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9
MzMuOTUsIG1pbj01Njc1LjAwLCBtYXg9NTk2NS4wMApzbG9wZT03Ljk2LCBSXjI9MC40MiI+wrEg
MC41OCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8v
Y3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdjpudGgtY2hpbGQobik6UnVuczwvdGQ+PHRkIGNs
YXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjEx
LCBtaW49MTkuMDYsIG1heD0xOS44OQpzbG9wZT0tMC4wMCwgUl4yPTAuMDEiPjE5LjU1PC90ZD48
dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xMSwgbWluPTE5
LjA2LCBtYXg9MTkuODkKc2xvcGU9LTAuMDAsIFJeMj0wLjAxIj7CsSAwLjU3JTwvdGQ+PC90cj48
dHIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
L2pRdWVyeSAtIGRpdjpudGgtY2hpbGQob2RkKTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPnJ1
bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz00Ny4yMCwgbWluPTU1MTcuMDAs
IG1heD01OTc1LjAwCnNsb3BlPTMuNjUsIFJeMj0wLjA1Ij41ODg0Ljk1PC90ZD48dGQgY2xhc3M9
ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9NDcuMjAsIG1pbj01NTE3LjAwLCBt
YXg9NTk3NS4wMApzbG9wZT0zLjY1LCBSXjI9MC4wNSI+wrEgMC44MCU8L3RkPjwvdHI+PHRyIGNs
YXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVy
eSAtIGRpdjpvbmx5LWNoaWxkOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3Rk
Pjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4yMSwgbWluPTIwLjk1LCBtYXg9MjIuNzEK
c2xvcGU9MC4wNiwgUl4yPTAuNjciPjIyLjAzPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhIiB0aXRsZT0iz4M9MC4yMSwgbWluPTIwLjk1LCBtYXg9MjIuNzEKc2xvcGU9MC4w
NiwgUl4yPTAuNjciPsKxIDAuOTQlIDxzcGFuIGNsYXNzPSJyZWdyZXNzaW9uLXdhcm5pbmciIHRp
dGxlPSJEZXRlY3RlZCBhIHRpbWUgZGVwZW5kZW5jeSB3aXRoIHNsb3BlPTAuMDYsIFJeMj0wLjY3
Ij48c3ZnIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBzdHlsZT0id2lkdGg6IDE4cHg7IGhlaWdodDog
MThweDsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsiIHZlcnNpb249IjEuMSI+PHBvbHlnb24gZmls
bD0icmVkIiBwb2ludHM9IjUwLDEwIDkwLDgwIDEwLDgwIDUwLDEwIiBzdHJva2U9InJlZCIgc3Ry
b2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PC9wb2x5Z29uPjxwb2x5Z29u
IGZpbGw9IndoaXRlIiBwb2ludHM9IjQ3LDMwIDQ4LDI5LCA1MCwgMjguNywgNTIsMjkgNTMsMzAg
NTAsNjAiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9pbj0i
cm91bmQiPjwvcG9seWdvbj48Y2lyY2xlIGN4PSI1MCIgY3k9IjczIiByPSI2IiBmaWxsPSJ3aGl0
ZSI+PC9jaXJjbGU+PC9zdmc+IDwvc3Bhbj48L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQg
Y2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXZbY2xhc3Mk
PWxvZ106UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJy
ZXN1bHQiIHRpdGxlPSLPgz0wLjEzLCBtaW49MjAuODYsIG1heD0yMS44NgpzbG9wZT0tMC4wMywg
Ul4yPTAuNDgiPjIxLjMyPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0
aXRsZT0iz4M9MC4xMywgbWluPTIwLjg2LCBtYXg9MjEuODYKc2xvcGU9LTAuMDMsIFJeMj0wLjQ4
Ij7CsSAwLjYxJTwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJv
bWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2W2NsYXNzKj1zY2VdOlJ1bnM8L3RkPjx0
ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9
MC4wOCwgbWluPTIwLjkyLCBtYXg9MjEuNDQKc2xvcGU9MC4wMSwgUl4yPTAuMjYiPjIxLjE2PC90
ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wOCwgbWlu
PTIwLjkyLCBtYXg9MjEuNDQKc2xvcGU9MC4wMSwgUl4yPTAuMjYiPsKxIDAuMzYlPC90ZD48L3Ry
Pjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVl
cnkvalF1ZXJ5IC0gZGl2W2NsYXNzPWRpYWxvZ106UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5L
IHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjEzLCBtaW49MjEuNTEs
IG1heD0yMi40OApzbG9wZT0wLjAxLCBSXjI9MC4wOSI+MjEuODU8L3RkPjx0ZCBjbGFzcz0iY29u
ZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjEzLCBtaW49MjEuNTEsIG1heD0yMi40
OApzbG9wZT0wLjAxLCBSXjI9MC4wOSI+wrEgMC41OSU8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQi
Pjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdltj
bGFzc106UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJy
ZXN1bHQiIHRpdGxlPSLPgz0wLjA2LCBtaW49MTkuMjUsIG1heD0xOS42NwpzbG9wZT0tMC4wMCwg
Ul4yPTAuMDEiPjE5LjM5PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0
aXRsZT0iz4M9MC4wNiwgbWluPTE5LjI1LCBtYXg9MTkuNjcKc2xvcGU9LTAuMDAsIFJeMj0wLjAx
Ij7CsSAwLjMyJTwvdGQ+PC90cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ry
b21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdltjbGFzc149ZGlhXTpSdW5zPC90ZD48
dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+D
PTAuMDksIG1pbj0yMS41MSwgbWF4PTIyLjE3CnNsb3BlPTAuMDMsIFJeMj0wLjY3Ij4yMS45MTwv
dGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMDksIG1p
bj0yMS41MSwgbWF4PTIyLjE3CnNsb3BlPTAuMDMsIFJeMj0wLjY3Ij7CsSAwLjQyJSA8c3BhbiBj
bGFzcz0icmVncmVzc2lvbi13YXJuaW5nIiB0aXRsZT0iRGV0ZWN0ZWQgYSB0aW1lIGRlcGVuZGVu
Y3kgd2l0aCBzbG9wZT0wLjAzLCBSXjI9MC42NyI+PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIg
c3R5bGU9IndpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7IHZlcnRpY2FsLWFsaWduOiBib3R0b207
IiB2ZXJzaW9uPSIxLjEiPjxwb2x5Z29uIGZpbGw9InJlZCIgcG9pbnRzPSI1MCwxMCA5MCw4MCAx
MCw4MCA1MCwxMCIgc3Ryb2tlPSJyZWQiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9p
bj0icm91bmQiPjwvcG9seWdvbj48cG9seWdvbiBmaWxsPSJ3aGl0ZSIgcG9pbnRzPSI0NywzMCA0
OCwyOSwgNTAsIDI4LjcsIDUyLDI5IDUzLDMwIDUwLDYwIiBzdHJva2U9IndoaXRlIiBzdHJva2Ut
d2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48L3BvbHlnb24+PGNpcmNsZSBjeD0i
NTAiIGN5PSI3MyIgcj0iNiIgZmlsbD0id2hpdGUiPjwvY2lyY2xlPjwvc3ZnPiA8L3NwYW4+PC90
ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5
LWpxdWVyeS9qUXVlcnkgLSBkaXZbY2xhc3N8PWRpYWxvZ106UnVuczwvdGQ+PHRkIGNsYXNzPSJ1
bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjA3LCBtaW49
MjEuNjUsIG1heD0yMi4xNgpzbG9wZT0tMC4wMSwgUl4yPTAuMTgiPjIxLjg4PC90ZD48dGQgY2xh
c3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wNywgbWluPTIxLjY1LCBt
YXg9MjIuMTYKc2xvcGU9LTAuMDEsIFJeMj0wLjE4Ij7CsSAwLjMyJTwvdGQ+PC90cj48dHIgY2xh
c3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVy
eSAtIGRpdltjbGFzc349ZGlhbG9nXTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9z
PC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMDcsIG1pbj0yMS4xNCwgbWF4PTIx
LjYzCnNsb3BlPTAuMDAsIFJeMj0wLjAxIj4yMS4zNTwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNl
SW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMDcsIG1pbj0yMS4xNCwgbWF4PTIxLjYzCnNsb3Bl
PTAuMDAsIFJeMj0wLjAxIj7CsSAwLjMxJTwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNs
YXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnk6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1
bml0Ij5ydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MS42NiwgbWluPTM0
Mi40NSwgbWF4PTM1My4zMwpzbG9wZT0wLjIwLCBSXjI9MC4xMSI+MzQ4LjE2PC90ZD48dGQgY2xh
c3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MS42NiwgbWluPTM0Mi40NSwg
bWF4PTM1My4zMwpzbG9wZT0wLjIwLCBSXjI9MC4xMSI+wrEgMC40OCU8L3RkPjwvdHI+PC90Ym9k
eT48L3RhYmxlPgo8c2NyaXB0PgoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBqUXVlcnkgPSAnUGVy
Zm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi9saWIvanF1ZXJ5LTEu
Ni40LmpzJzsKICAgIHZhciBwbHVnaW5zID0gWydQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9q
cXVlcnkuZmxvdC5taW4uanMnLCAnUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LnRh
Ymxlc29ydGVyLm1pbi5qcycsCiAgICAgICAgJ1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3N0
YXRpc3RpY3MuanMnXTsKICAgIHZhciBsb2NhbFBhdGggPSAnL1VzZXJzL3l1c3VrZS9kZXYvV2Vi
S2l0JzsKICAgIHZhciByZW1vdGVQYXRoID0gJ2h0dHBzOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3Np
dG9yeS93ZWJraXQvdHJ1bmsnOwogICAgdmFyIG51bWJlck9mRmFpbHVyZXMgPSAwOwogICAgdmFy
IHN0YXJ0ZWRMb2FkaW5nUGx1Z2lucyA9IGZhbHNlOwogICAgdmFyIG51bWJlck9mTG9hZGVkUGx1
Z2lucyA9IDA7CgogICAgZnVuY3Rpb24gbG9hZFNjcmlwdChzcmMsIGxvYWRlZCwgZmFpbGVkKSB7
CiAgICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwog
ICAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7CiAgICAgICAgc2NyaXB0LnNyYyA9IHNyYzsKICAg
ICAgICBzY3JpcHQub25sb2FkID0gbG9hZGVkOwogICAgICAgIGlmIChmYWlsZWQpCiAgICAgICAg
ICAgIHNjcmlwdC5vbmVycm9yID0gZmFpbGVkOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoc2NyaXB0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkUGx1Z2lucyh0cnVua1BhdGgp
IHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspCiAgICAg
ICAgICAgIGxvYWRTY3JpcHQodHJ1bmtQYXRoICsgJy8nICsgcGx1Z2luc1tpXSwgbG9hZGVkUGx1
Z2luLCBjcmVhdGVGYWlsZWRUb0xvYWRQbHVnaW4ocGx1Z2luc1tpXSkpOwogICAgfQoKICAgIGZ1
bmN0aW9uIGxvYWRlZFBsdWdpbigpIHsKICAgICAgICBudW1iZXJPZkxvYWRlZFBsdWdpbnMrKzsK
ICAgICAgICBpZiAobnVtYmVyT2ZMb2FkZWRQbHVnaW5zID09IHBsdWdpbnMubGVuZ3RoKQogICAg
ICAgICAgICBzZXRUaW1lb3V0KGluaXQsIDApOyAgICAgICAgICAgIAogICAgfQoKICAgIGZ1bmN0
aW9uIGNyZWF0ZUZhaWxlZFRvTG9hZFBsdWdpbihwbHVnaW4pIHsKICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gKCkgeyBhbGVydCgiRmFpbGVkIHRvIGxvYWQgIiArIHBsdWdpbik7IH0KICAgIH0KCiAg
ICBmdW5jdGlvbiBjcmVhdGVMb2FkZWRKUXVlcnkodHJ1bmtQYXRoKSB7CiAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uICgpIHsgbG9hZFBsdWdpbnModHJ1bmtQYXRoKTsgfQogICAgfQoKICAgIGxvYWRT
Y3JpcHQobG9jYWxQYXRoICsgJy8nICsgalF1ZXJ5LAogICAgICAgIGNyZWF0ZUxvYWRlZEpRdWVy
eShsb2NhbFBhdGgpLAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgbG9hZFNjcmlw
dChyZW1vdGVQYXRoICsgJy8nICsgalF1ZXJ5LAogICAgICAgICAgICAgICAgY3JlYXRlTG9hZGVk
SlF1ZXJ5KHJlbW90ZVBhdGgpLAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyBhbGVydCgi
RmFpbGVkIHRvIGxvYWQgalF1ZXJ5LiIpOyB9KTsKICAgICAgICB9KTsKfSkoKTsKCmZ1bmN0aW9u
IFRlc3RSZXN1bHQobWV0cmljLCB2YWx1ZXMsIGFzc29jaWF0ZWRSdW4pIHsKICAgIGlmICh2YWx1
ZXNbMF0gaW5zdGFuY2VvZiBBcnJheSkgewogICAgICAgIHZhciBmbGF0dGVuZWRWYWx1ZXMgPSBb
XTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykKICAgICAg
ICAgICAgZmxhdHRlbmVkVmFsdWVzID0gZmxhdHRlbmVkVmFsdWVzLmNvbmNhdCh2YWx1ZXNbaV0p
OwogICAgICAgIHZhbHVlcyA9IGZsYXR0ZW5lZFZhbHVlczsKICAgIH0KCiAgICB0aGlzLnRlc3Qg
PSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWM7IH0KICAgIHRoaXMudmFsdWVzID0gZnVuY3Rp
b24gKCkgeyByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIG1ldHJp
Yy5zY2FsaW5nRmFjdG9yKCkgKiB2YWx1ZTsgfSk7IH0KICAgIHRoaXMudW5zY2FsZWRNZWFuID0g
ZnVuY3Rpb24gKCkgeyByZXR1cm4gU3RhdGlzdGljcy5zdW0odmFsdWVzKSAvIHZhbHVlcy5sZW5n
dGg7IH0KICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5n
RmFjdG9yKCkgKiB0aGlzLnVuc2NhbGVkTWVhbigpOyB9CiAgICB0aGlzLm1pbiA9IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkgKiBTdGF0aXN0aWNzLm1pbih2YWx1
ZXMpOyB9CiAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5n
RmFjdG9yKCkgKiBTdGF0aXN0aWNzLm1heCh2YWx1ZXMpOyB9CiAgICB0aGlzLmNvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBtZXRyaWMuc2NhbGlu
Z0ZhY3RvcigpICogU3RhdGlzdGljcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgwLjk1LCB2YWx1
ZXMubGVuZ3RoLAogICAgICAgICAgICBTdGF0aXN0aWNzLnN1bSh2YWx1ZXMpLCBTdGF0aXN0aWNz
LnNxdWFyZVN1bSh2YWx1ZXMpKTsKICAgIH0KICAgIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVs
dGFSYXRpbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVs
dGEoKSAvIHRoaXMubWVhbigpOyB9CiAgICB0aGlzLnBlcmNlbnREaWZmZXJlbmNlID0gZnVuY3Rp
b24ob3RoZXIpIHsgcmV0dXJuIChvdGhlci51bnNjYWxlZE1lYW4oKSAtIHRoaXMudW5zY2FsZWRN
ZWFuKCkpIC8gdGhpcy51bnNjYWxlZE1lYW4oKTsgfQogICAgdGhpcy5pc1N0YXRpc3RpY2FsbHlT
aWduaWZpY2FudCA9IGZ1bmN0aW9uIChvdGhlcikgewogICAgICAgIHZhciBkaWZmID0gTWF0aC5h
YnMob3RoZXIubWVhbigpIC0gdGhpcy5tZWFuKCkpOwogICAgICAgIHJldHVybiBkaWZmID4gdGhp
cy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgpICYmIGRpZmYgPiBvdGhlci5jb25maWRlbmNlSW50
ZXJ2YWxEZWx0YSgpOwogICAgfQogICAgdGhpcy5ydW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBh
c3NvY2lhdGVkUnVuOyB9Cn0KCmZ1bmN0aW9uIFRlc3RSdW4oZW50cnkpIHsKICAgIHRoaXMuZGVz
Y3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnRyeVsnZGVzY3JpcHRpb24nXTsgfQog
ICAgdGhpcy53ZWJraXRSZXZpc2lvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudHJ5WydyZXZp
c2lvbnMnXVsnV2ViS2l0J11bJ3JldmlzaW9uJ107IH0KICAgIHRoaXMubGFiZWwgPSBmdW5jdGlv
biAoKSB7CiAgICAgICAgdmFyIGxhYmVsID0gJ3InICsgdGhpcy53ZWJraXRSZXZpc2lvbigpOwog
ICAgICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKCkpCiAgICAgICAgICAgIGxhYmVsICs9ICcgJmRh
c2g7ICcgKyB0aGlzLmRlc2NyaXB0aW9uKCk7CiAgICAgICAgcmV0dXJuIGxhYmVsOwogICAgfQp9
CgpmdW5jdGlvbiBQZXJmVGVzdE1ldHJpYyhuYW1lLCBtZXRyaWMpIHsKICAgIHZhciB0ZXN0UmVz
dWx0cyA9IFtdOwogICAgdmFyIGNhY2hlZFVuaXQgPSBudWxsOwogICAgdmFyIGNhY2hlZFNjYWxp
bmdGYWN0b3IgPSBudWxsOwogICAgdmFyIHVuaXQgPSB7J0ZyYW1lUmF0ZSc6ICdmcHMnLCAnUnVu
cyc6ICdydW5zL3MnLCAnVGltZSc6ICdtcycsICdNYWxsb2MnOiAnYnl0ZXMnLCAnSlNIZWFwJzog
J2J5dGVzJ31bbWV0cmljXTsKCiAgICAvLyBXZSBjYW4ndCBkbyB0aGlzIGluIFRlc3RSZXN1bHQg
YmVjYXVzZSBhbGwgcmVzdWx0cyBmb3IgZWFjaCB0ZXN0IG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUg
dW5pdCBhbmQgdGhlIHNhbWUgc2NhbGluZyBmYWN0b3IuCiAgICBmdW5jdGlvbiBjb21wdXRlU2Nh
bGluZ0ZhY3RvcklmTmVlZGVkKCkgewogICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUg
YWRqdXN0aW5nIHVuaXRzIG9uIGV2ZXJ5IHRlc3QgcmVzdWx0LgogICAgICAgIC8vIFdlIGNhbiBv
bmx5IGRvIHRoaXMgb24gdGhlIGZpcnN0IHRlc3QuCiAgICAgICAgaWYgKCF0ZXN0UmVzdWx0cy5s
ZW5ndGggfHwgY2FjaGVkVW5pdCkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWVh
biA9IHRlc3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ugc2hvdWxkIGxv
b2sgYXQgYWxsIHZhbHVlcy4KICAgICAgICB2YXIga2lsbyA9IHVuaXQgPT0gJ2J5dGVzJyA/IDEw
MjQgOiAxMDAwOwogICAgICAgIGlmIChtZWFuID4gMTAgKiBraWxvICoga2lsbyAmJiB1bml0ICE9
ICdtcycpIHsKICAgICAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IDEgLyBraWxvIC8ga2ls
bzsKICAgICAgICAgICAgY2FjaGVkVW5pdCA9ICdNICcgKyB1bml0OwogICAgICAgIH0gZWxzZSBp
ZiAobWVhbiA+IDEwICoga2lsbykgewogICAgICAgICAgICBjYWNoZWRTY2FsaW5nRmFjdG9yID0g
MSAvIGtpbG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSB1bml0ID09ICdtcycgPyAncycgOiAo
J0sgJyArIHVuaXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNhY2hlZFNjYWxpbmdG
YWN0b3IgPSAxOwogICAgICAgICAgICBjYWNoZWRVbml0ID0gdW5pdDsKICAgICAgICB9CiAgICB9
CgogICAgdGhpcy5uYW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZSArICc6JyArIG1ldHJp
YzsgfQogICAgdGhpcy5pc01lbW9yeVRlc3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMg
PT0gJ0pTSGVhcCcgfHwgbWV0cmljID09ICdNYWxsb2MnOyB9CiAgICB0aGlzLmFkZFJlc3VsdCA9
IGZ1bmN0aW9uIChuZXdSZXN1bHQpIHsKICAgICAgICB0ZXN0UmVzdWx0cy5wdXNoKG5ld1Jlc3Vs
dCk7CiAgICAgICAgY2FjaGVkVW5pdCA9IG51bGw7CiAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3Rv
ciA9IG51bGw7CiAgICB9CiAgICB0aGlzLnJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0
ZXN0UmVzdWx0czsgfQogICAgdGhpcy5zY2FsaW5nRmFjdG9yID0gZnVuY3Rpb24oKSB7CiAgICAg
ICAgY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpOwogICAgICAgIHJldHVybiBjYWNoZWRT
Y2FsaW5nRmFjdG9yOwogICAgfQogICAgdGhpcy51bml0ID0gZnVuY3Rpb24gKCkgewogICAgICAg
IGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsKICAgICAgICByZXR1cm4gY2FjaGVkVW5p
dDsKICAgIH0KICAgIHRoaXMuc21hbGxlcklzQmV0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4g
dW5pdCA9PSAnbXMnIHx8IHVuaXQgPT0gJ2J5dGVzJzsgfQp9Cgp2YXIgcGxvdENvbG9yID0gJ3Jn
YigyMzAsNTAsNTApJzsKdmFyIHN1YnBvaW50c1Bsb3RPcHRpb25zID0gewogICAgbGluZXM6IHtz
aG93OnRydWUsIGxpbmVXaWR0aDogMH0sCiAgICBjb2xvcjogcGxvdENvbG9yLAogICAgcG9pbnRz
OiB7c2hvdzogdHJ1ZSwgcmFkaXVzOiAxfSwKICAgIGJhcnM6IHtzaG93OiBmYWxzZX19OwoKdmFy
IG1haW5QbG90T3B0aW9ucyA9IHsKICAgIHhheGlzOiB7CiAgICAgICAgbWluOiAtMC41LAogICAg
ICAgIHRpY2tTaXplOiAxLAogICAgfSwKICAgIGNyb3NzaGFpcjogeyBtb2RlOiAneScgfSwKICAg
IHNlcmllczogeyBzaGFkb3dTaXplOiAwIH0sCiAgICBiYXJzOiB7c2hvdzogdHJ1ZSwgYWxpZ246
ICdjZW50ZXInLCBiYXJXaWR0aDogMC41fSwKICAgIGxpbmVzOiB7IHNob3c6IGZhbHNlIH0sCiAg
ICBwb2ludHM6IHsgc2hvdzogdHJ1ZSB9LAogICAgZ3JpZDogewogICAgICAgIGJvcmRlcldpZHRo
OiAxLAogICAgICAgIGJvcmRlckNvbG9yOiAnI2NjYycsCiAgICAgICAgYmFja2dyb3VuZENvbG9y
OiAnI2ZmZicsCiAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAogICAgICAgIGF1dG9IaWdobGlnaHQ6
IGZhbHNlLAogICAgfQp9OwoKdmFyIHRpbWVQbG90T3B0aW9ucyA9IHsKICAgIHlheGlzOiB7IHNo
b3c6IGZhbHNlIH0sCiAgICB4YXhpczogeyBzaG93OiBmYWxzZSB9LAogICAgbGluZXM6IHsgc2hv
dzogdHJ1ZSB9LAogICAgZ3JpZDogeyBib3JkZXJXaWR0aDogMSwgYm9yZGVyQ29sb3I6ICcjY2Nj
JyB9LAogICAgY29sb3JzOiBbIHBsb3RDb2xvciBdCn07CgpmdW5jdGlvbiBjcmVhdGVQbG90KGNv
bnRhaW5lciwgdGVzdCkgewogICAgdmFyIHNlY3Rpb24gPSAkKCc8c2VjdGlvbj48ZGl2IGNsYXNz
PSJwbG90Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0aW1lLXBsb3RzIj48L2Rpdj4nCiAgICAgICAgKyAn
PHNwYW4gY2xhc3M9InRvb2x0aXAiPjwvc3Bhbj48L3NlY3Rpb24+Jyk7CiAgICBzZWN0aW9uLmNo
aWxkcmVuKCcucGxvdCcpLmNzcyh7J3dpZHRoJzogKDEwMCAqIHRlc3QucmVzdWx0cygpLmxlbmd0
aCArIDI1KSArICdweCcsICdoZWlnaHQnOiAnMzAwcHgnfSk7CiAgICAkKGNvbnRhaW5lcikuYXBw
ZW5kKHNlY3Rpb24pOwoKICAgIHZhciBwbG90Q29udGFpbmVyID0gc2VjdGlvbi5jaGlsZHJlbign
LnBsb3QnKTsKICAgIHZhciBtaW5Jc1plcm8gPSB0cnVlOwogICAgYXR0YWNoUGxvdCh0ZXN0LCBw
bG90Q29udGFpbmVyLCBtaW5Jc1plcm8pOwoKICAgIGF0dGFjaFRpbWVQbG90cyh0ZXN0LCBzZWN0
aW9uLmNoaWxkcmVuKCcudGltZS1wbG90cycpKTsKCiAgICB2YXIgdG9vbHRpcCA9IHNlY3Rpb24u
Y2hpbGRyZW4oJy50b29sdGlwJyk7CiAgICBwbG90Q29udGFpbmVyLmJpbmQoJ3Bsb3Rob3Zlcics
IGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIGl0ZW0pIHsKICAgICAgICBpZiAoaXRlbSkgewog
ICAgICAgICAgICB2YXIgcG9zdGZpeCA9IGl0ZW0uc2VyaWVzLmlkID8gJyAoJyArIGl0ZW0uc2Vy
aWVzLmlkICsgJyknIDogJyc7CiAgICAgICAgICAgIHRvb2x0aXAuaHRtbChpdGVtLmRhdGFwb2lu
dFsxXS50b1ByZWNpc2lvbig0KSArIHBvc3RmaXgpOwogICAgICAgICAgICB2YXIgc2VjdGlvbk9m
ZnNldCA9ICQoc2VjdGlvbikub2Zmc2V0KCk7CiAgICAgICAgICAgIHRvb2x0aXAuY3NzKHtsZWZ0
OiBpdGVtLnBhZ2VYIC0gc2VjdGlvbk9mZnNldC5sZWZ0IC0gdG9vbHRpcC5vdXRlcldpZHRoKCkg
LyAyLCB0b3A6IGl0ZW0ucGFnZVkgLSBzZWN0aW9uT2Zmc2V0LnRvcCArIDEwfSk7CiAgICAgICAg
ICAgIHRvb2x0aXAuZmFkZUluKDIwMCk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHRvb2x0
aXAuaGlkZSgpOwogICAgfSk7CiAgICBwbG90Q29udGFpbmVyLm1vdXNlb3V0KGZ1bmN0aW9uICgp
IHsKICAgICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwogICAgcGxvdENvbnRhaW5lci5jbGlj
ayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAg
ICAgIG1pbklzWmVybyA9ICFtaW5Jc1plcm87CiAgICAgICAgYXR0YWNoUGxvdCh0ZXN0LCBwbG90
Q29udGFpbmVyLCBtaW5Jc1plcm8pOwogICAgfSk7CgogICAgcmV0dXJuIHNlY3Rpb247Cn0KCmZ1
bmN0aW9uIGF0dGFjaFRpbWVQbG90cyh0ZXN0LCBjb250YWluZXIpIHsKICAgIHZhciByZXN1bHRz
ID0gdGVzdC5yZXN1bHRzKCk7CiAgICB2YXIgYXR0YWNoZWRQbG90ID0gZmFsc2U7CiAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb250YWluZXIu
YXBwZW5kKCc8ZGl2PjwvZGl2PicpOwogICAgICAgIHZhciB2YWx1ZXMgPSByZXN1bHRzW2ldLnZh
bHVlcygpOwogICAgICAgIGlmICghdmFsdWVzKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICBhdHRhY2hlZFBsb3QgPSB0cnVlOwoKICAgICAgICAkLnBsb3QoY29udGFpbmVyLmNoaWxkcmVu
KCkubGFzdCgpLCBbdmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7IHJldHVybiBb
aW5kZXgsIHZhbHVlXTsgfSldLAogICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB7fSwgdGltZVBs
b3RPcHRpb25zLCB7eWF4aXM6IHttaW46IE1hdGgubWluLmFwcGx5KE1hdGgsIHZhbHVlcykgKiAw
LjksIG1heDogTWF0aC5tYXguYXBwbHkoTWF0aCwgdmFsdWVzKSAqIDEuMX0sCiAgICAgICAgICAg
ICAgICB4YXhpczoge21pbjogLTAuNSwgbWF4OiB2YWx1ZXMubGVuZ3RoIC0gMC41fX0pKTsKICAg
IH0KICAgIGlmICghYXR0YWNoZWRQbG90KQogICAgICAgIGNvbnRhaW5lci5jaGlsZHJlbigpLnJl
bW92ZSgpOwp9CgpmdW5jdGlvbiBhdHRhY2hQbG90KHRlc3QsIHBsb3RDb250YWluZXIsIG1pbklz
WmVybykgewogICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3VsdHMoKTsKCiAgICB2YXIgdmFsdWVz
ID0gcmVzdWx0cy5yZWR1Y2UoZnVuY3Rpb24gKHZhbHVlcywgcmVzdWx0LCBpbmRleCkgewogICAg
ICAgIHZhciBuZXdWYWx1ZXMgPSByZXN1bHQudmFsdWVzKCk7CiAgICAgICAgcmV0dXJuIG5ld1Zh
bHVlcyA/IHZhbHVlcy5jb25jYXQobmV3VmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0
dXJuIFtpbmRleCwgdmFsdWVdOyB9KSkgOiB2YWx1ZXM7CiAgICB9LCBbXSk7CgogICAgdmFyIHBs
b3REYXRhID0gWyQuZXh0ZW5kKHRydWUsIHt9LCBzdWJwb2ludHNQbG90T3B0aW9ucywge2RhdGE6
IHZhbHVlc30pXTsKICAgIHBsb3REYXRhLnB1c2goe2lkOiAnJm11OycsIGRhdGE6IHJlc3VsdHMu
bWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5tZWFu
KCldOyB9KSwgY29sb3I6IHBsb3RDb2xvcn0pOwoKICAgIHZhciBvdmVyYWxsTWF4ID0gU3RhdGlz
dGljcy5tYXgocmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIHJl
c3VsdC5tYXgoKTsgfSkpOwogICAgdmFyIG92ZXJhbGxNaW4gPSBTdGF0aXN0aWNzLm1pbihyZXN1
bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9
KSk7CiAgICB2YXIgbWFyZ2luID0gKG92ZXJhbGxNYXggLSBvdmVyYWxsTWluKSAqIDAuMTsKICAg
IHZhciBjdXJyZW50UGxvdE9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgbWFpblBsb3RPcHRp
b25zLCB7eWF4aXM6IHsKICAgICAgICBtaW46IG1pbklzWmVybyA/IDAgOiBvdmVyYWxsTWluIC0g
bWFyZ2luLAogICAgICAgIG1heDogbWluSXNaZXJvID8gb3ZlcmFsbE1heCAqIDEuMSA6IG92ZXJh
bGxNYXggKyBtYXJnaW59fSk7CgogICAgY3VycmVudFBsb3RPcHRpb25zLnhheGlzLm1heCA9IHJl
c3VsdHMubGVuZ3RoIC0gMC41OwogICAgY3VycmVudFBsb3RPcHRpb25zLnhheGlzLnRpY2tzID0g
cmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVz
dWx0LnJ1bigpLmxhYmVsKCldOyB9KTsKCiAgICAkLnBsb3QocGxvdENvbnRhaW5lciwgcGxvdERh
dGEsIGN1cnJlbnRQbG90T3B0aW9ucyk7Cn0KCmZ1bmN0aW9uIHRvRml4ZWRXaWR0aFByZWNpc2lv
bih2YWx1ZSkgewogICAgdmFyIGRlY2ltYWwgPSB2YWx1ZS50b0ZpeGVkKDIpOwogICAgcmV0dXJu
IGRlY2ltYWw7Cn0KCmZ1bmN0aW9uIGZvcm1hdFBlcmNlbnRhZ2UoZnJhY3Rpb24pIHsKICAgIHZh
ciBwZXJjZW50YWdlID0gZnJhY3Rpb24gKiAxMDA7CiAgICByZXR1cm4gKGZyYWN0aW9uICogMTAw
KS50b0ZpeGVkKDIpICsgJyUnOwp9CgpmdW5jdGlvbiBjcmVhdGVUYWJsZSh0ZXN0cywgcnVucywg
c2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCwgaGlkZUNvbmZpZGVuY2VJbnRlcnZh
bERlbHRhKSB7CiAgICAkKCcjY29udGFpbmVyJykuaHRtbCgnPHRoZWFkPjx0cj48dGg+VGVzdDwv
dGg+PHRoPlVuaXQ8L3RoPicgKyBydW5zLm1hcChmdW5jdGlvbiAocnVuLCBpbmRleCkgewogICAg
ICAgIHZhciBjb2xzcGFuID0gMjsKICAgICAgICBpZiAoaW5kZXggIT0gcmVmZXJlbmNlSW5kZXgp
CiAgICAgICAgICAgIGNvbHNwYW4gPSAzOwogICAgICAgIGlmIChoaWRlQ29uZmlkZW5jZUludGVy
dmFsRGVsdGEpCiAgICAgICAgICAgIGNvbHNwYW4tLTsKICAgICAgICByZXR1cm4gJzx0aCBjb2xz
cGFuPSInICsgY29sc3BhbiArICciIGNsYXNzPSJ7c29ydGVyOiBcJ2NvbXBhcmlzb25cJ30iPicg
KyBydW4ubGFiZWwoKSArICc8L3RoPic7CiAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKG1hcmt1cCwg
Y2VsbCkgeyByZXR1cm4gbWFya3VwICsgY2VsbDsgfSwgJycpICsgJzwvdHI+PC9oZWFkPjx0Ym9k
eT48L3Rib2R5PicpOwoKICAgIHZhciB0ZXN0TmFtZXMgPSBbXTsKICAgIGZvciAodGVzdE5hbWUg
aW4gdGVzdHMpCiAgICAgICAgdGVzdE5hbWVzLnB1c2godGVzdE5hbWUpOwoKICAgIHRlc3ROYW1l
cy5zb3J0KCkubWFwKGZ1bmN0aW9uICh0ZXN0TmFtZSkgewogICAgICAgIHZhciB0ZXN0ID0gdGVz
dHNbdGVzdE5hbWVdOwogICAgICAgIGlmICh0ZXN0LmlzTWVtb3J5VGVzdCgpICE9IHNob3VsZEln
bm9yZU1lbW9yeSkKICAgICAgICAgICAgY3JlYXRlVGFibGVSb3cocnVucywgdGVzdCwgcmVmZXJl
bmNlSW5kZXgsIGhpZGVDb25maWRlbmNlSW50ZXJ2YWxEZWx0YSk7CiAgICB9KTsKCiAgICAkKCcj
Y29udGFpbmVyJykudGFibGVzb3J0ZXIoe3dpZGdldHM6IFsnemVicmEnXX0pOwp9CgpmdW5jdGlv
biBsaW5lYXJSZWdyZXNzaW9uKHBvaW50cykgewogICAgLy8gSW1wbGVtZW50IGh0dHA6Ly93d3cu
ZWFzeWNhbGN1bGF0aW9uLmNvbS9zdGF0aXN0aWNzL2xlYXJuLWNvcnJlbGF0aW9uLnBocC4KICAg
IC8vIHggPSBtYWduaXR1ZGUKICAgIC8vIHkgPSBpdGVyYXRpb25zCiAgICB2YXIgc3VtWCA9IDA7
CiAgICB2YXIgc3VtWSA9IDA7CiAgICB2YXIgc3VtWFNxdWFyZWQgPSAwOwogICAgdmFyIHN1bVlT
cXVhcmVkID0gMDsKICAgIHZhciBzdW1YVGltZXNZID0gMDsKCiAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHBvaW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciB4ID0gaTsKICAgICAgICB2YXIg
eSA9IHBvaW50c1tpXTsKICAgICAgICBzdW1YICs9IHg7CiAgICAgICAgc3VtWSArPSB5OwogICAg
ICAgIHN1bVhTcXVhcmVkICs9IHggKiB4OwogICAgICAgIHN1bVlTcXVhcmVkICs9IHkgKiB5Owog
ICAgICAgIHN1bVhUaW1lc1kgKz0geCAqIHk7CiAgICB9CgogICAgdmFyIHIgPSAocG9pbnRzLmxl
bmd0aCAqIHN1bVhUaW1lc1kgLSBzdW1YICogc3VtWSkgLwogICAgICAgIE1hdGguc3FydCgocG9p
bnRzLmxlbmd0aCAqIHN1bVhTcXVhcmVkIC0gc3VtWCAqIHN1bVgpICoKICAgICAgICAgICAgICAg
ICAgKHBvaW50cy5sZW5ndGggKiBzdW1ZU3F1YXJlZCAtIHN1bVkgKiBzdW1ZKSk7CgogICAgaWYg
KGlzTmFOKHIpIHx8IHIgPT0gTWF0aC5JbmZpbml0eSkKICAgICAgICByID0gMDsKCiAgICB2YXIg
c2xvcGUgPSAocG9pbnRzLmxlbmd0aCAqIHN1bVhUaW1lc1kgLSBzdW1YICogc3VtWSkgLyAocG9p
bnRzLmxlbmd0aCAqIHN1bVhTcXVhcmVkIC0gc3VtWCAqIHN1bVgpOwogICAgdmFyIGludGVyY2Vw
dCA9IHN1bVkgLyBwb2ludHMubGVuZ3RoIC0gc2xvcGUgKiBzdW1YIC8gcG9pbnRzLmxlbmd0aDsK
ICAgIHJldHVybiB7c2xvcGU6IHNsb3BlLCBpbnRlcmNlcHQ6IGludGVyY2VwdCwgclNxdWFyZWQ6
IHIgKiByfTsKfQoKdmFyIHdhcm5pbmdTaWduID0gJzxzdmcgdmlld0JveD0iMCAwIDEwMCAxMDAi
IHN0eWxlPSJ3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9t
OyIgdmVyc2lvbj0iMS4xIj4nCiAgICArICc8cG9seWdvbiBmaWxsPSJyZWQiIHBvaW50cz0iNTAs
MTAgOTAsODAgMTAsODAgNTAsMTAiIHN0cm9rZT0icmVkIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJv
a2UtbGluZWpvaW49InJvdW5kIiAvPicKICAgICsgJzxwb2x5Z29uIGZpbGw9IndoaXRlIiBwb2lu
dHM9IjQ3LDMwIDQ4LDI5LCA1MCwgMjguNywgNTIsMjkgNTMsMzAgNTAsNjAiIHN0cm9rZT0id2hp
dGUiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+JwogICAgKyAn
PGNpcmNsZSBjeD0iNTAiIGN5PSI3MyIgcj0iNiIgZmlsbD0id2hpdGUiIC8+JwogICAgKyAnPC9z
dmc+JzsKCmZ1bmN0aW9uIGNyZWF0ZVRhYmxlUm93KHJ1bnMsIHRlc3QsIHJlZmVyZW5jZUluZGV4
LCBoaWRlQ29uZmlkZW5jZUludGVydmFsRGVsdGEpIHsKICAgIHZhciB0YWJsZVJvdyA9ICQoJzx0
cj48dGQgY2xhc3M9InRlc3QiPicgKyB0ZXN0Lm5hbWUoKSArICc8L3RkPjx0ZCBjbGFzcz0idW5p
dCI+JyArIHRlc3QudW5pdCgpICsgJzwvdGQ+PC90cj4nKTsKCiAgICBmdW5jdGlvbiBtYXJrdXBG
b3JSdW4ocmVzdWx0LCByZWZlcmVuY2VSZXN1bHQpIHsKICAgICAgICB2YXIgY29tcGFyaXNvbkNl
bGwgPSAnJzsKICAgICAgICB2YXIgaGlkZGVuVmFsdWUgPSAnJzsKICAgICAgICB2YXIgc2hvdWxk
Q29tcGFyZSA9IHJlc3VsdCAhPT0gcmVmZXJlbmNlUmVzdWx0OwogICAgICAgIGlmIChzaG91bGRD
b21wYXJlICYmIHJlZmVyZW5jZVJlc3VsdCkgewogICAgICAgICAgICB2YXIgcGVyY2VudERpZmZl
cmVuY2UgPSByZWZlcmVuY2VSZXN1bHQucGVyY2VudERpZmZlcmVuY2UocmVzdWx0KTsKICAgICAg
ICAgICAgdmFyIGJldHRlciA9IHRlc3Quc21hbGxlcklzQmV0dGVyKCkgPyBwZXJjZW50RGlmZmVy
ZW5jZSA8IDAgOiBwZXJjZW50RGlmZmVyZW5jZSA+IDA7CiAgICAgICAgICAgIHZhciBjb21wYXJp
c29uID0gJyc7CiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSAnY29tcGFyaXNvbic7CiAgICAg
ICAgICAgIGlmIChyZWZlcmVuY2VSZXN1bHQuaXNTdGF0aXN0aWNhbGx5U2lnbmlmaWNhbnQocmVz
dWx0KSkgewogICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9IGZvcm1hdFBlcmNlbnRhZ2UoTWF0
aC5hYnMocGVyY2VudERpZmZlcmVuY2UpKSArIChiZXR0ZXIgPyAnIEJldHRlcicgOiAnIFdvcnNl
Jm5ic3A7Jyk7CiAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gYmV0dGVyID8gJyBiZXR0ZXIn
IDogJyB3b3JzZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGlkZGVuVmFsdWUgPSAnPHNw
YW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPnwnICsgY29tcGFyaXNvbiArICc8L3NwYW4+JzsKICAg
ICAgICAgICAgY29tcGFyaXNvbkNlbGwgPSAnPHRkIGNsYXNzPSInICsgY2xhc3NOYW1lICsgJyI+
JyArIGNvbXBhcmlzb24gKyAnPC90ZD4nOwogICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkQ29tcGFy
ZSkKICAgICAgICAgICAgY29tcGFyaXNvbkNlbGwgPSAnPHRkIGNsYXNzPSJjb21wYXJpc29uIj48
L3RkPic7CgogICAgICAgIHZhciB2YWx1ZXMgPSByZXN1bHQudmFsdWVzKCk7CiAgICAgICAgdmFy
IHdhcm5pbmcgPSAnJzsKICAgICAgICB2YXIgcmVncmVzc2lvbkFuYWx5c2lzID0gJyc7CiAgICAg
ICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMykgewogICAgICAgICAgICByZWdyZXNz
aW9uUmVzdWx0ID0gbGluZWFyUmVncmVzc2lvbih2YWx1ZXMpOwogICAgICAgICAgICByZWdyZXNz
aW9uQW5hbHlzaXMgPSAnc2xvcGU9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZWdyZXNzaW9u
UmVzdWx0LnNsb3BlKQogICAgICAgICAgICAgICAgKyAnLCBSXjI9JyArIHRvRml4ZWRXaWR0aFBy
ZWNpc2lvbihyZWdyZXNzaW9uUmVzdWx0LnJTcXVhcmVkKTsKICAgICAgICAgICAgaWYgKHJlZ3Jl
c3Npb25SZXN1bHQuclNxdWFyZWQgPiAwLjYgJiYgTWF0aC5hYnMocmVncmVzc2lvblJlc3VsdC5z
bG9wZSkgPiAwLjAxKSB7CiAgICAgICAgICAgICAgICB3YXJuaW5nID0gJyA8c3BhbiBjbGFzcz0i
cmVncmVzc2lvbi13YXJuaW5nIiB0aXRsZT0iRGV0ZWN0ZWQgYSB0aW1lIGRlcGVuZGVuY3kgd2l0
aCAnICsgcmVncmVzc2lvbkFuYWx5c2lzICsgJyI+JyArIHdhcm5pbmdTaWduICsgJyA8L3NwYW4+
JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXRpc3RpY3MgPSAnJnNp
Z21hOz0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5jb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YSgpKSArICcsIG1pbj0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5taW4oKSkK
ICAgICAgICAgICAgKyAnLCBtYXg9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWF4
KCkpICsgJ1xuJyArIHJlZ3Jlc3Npb25BbmFseXNpczsKCiAgICAgICAgdmFyIGNvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhQ2VsbCA9ICcnOwogICAgICAgIGlmICghaGlkZUNvbmZpZGVuY2VJbnRlcnZh
bERlbHRhKSB7CiAgICAgICAgICAgIGNvbmZpZGVuY2VJbnRlcnZhbERlbHRhQ2VsbCA9ICc8dGQg
Y2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAn
Ij4mcGx1c21uOyAnCiAgICAgICAgICAgICAgICArIGZvcm1hdFBlcmNlbnRhZ2UocmVzdWx0LmNv
bmZpZGVuY2VJbnRlcnZhbERlbHRhUmF0aW8oKSkgKyB3YXJuaW5nICsgJzwvdGQ+JzsKICAgICAg
ICB9CgogICAgICAgIC8vIFRhYmxlc29ydGVyIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgc2Vjb25k
IGNlbGwgc28gcHV0IHRoZSBjb21wYXJpc29uIGluIHRoZSBpbnZpc2libGUgZWxlbWVudC4KICAg
ICAgICByZXR1cm4gJzx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAn
Ij4nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5tZWFuKCkpICsgaGlkZGVuVmFsdWUK
ICAgICAgICAgICAgKyAnPC90ZD4nICsgY29uZmlkZW5jZUludGVydmFsRGVsdGFDZWxsICsgY29t
cGFyaXNvbkNlbGw7CiAgICB9CgogICAgZnVuY3Rpb24gbWFya3VwRm9yTWlzc2luZ1J1bihpc1Jl
ZmVyZW5jZSkgewogICAgICAgIHJldHVybiAnPHRkIGNvbHNwYW49IicgKyAoaXNSZWZlcmVuY2Ug
PyAyIDogMykgKyAnIiBjbGFzcz0ibWlzc2luZyI+TWlzc2luZzwvdGQ+JzsKICAgIH0KCiAgICB2
YXIgcnVuSW5kZXggPSAwOwogICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3VsdHMoKTsKICAgIHZh
ciByZWZlcmVuY2VSZXN1bHQgPSB1bmRlZmluZWQ7CiAgICB2YXIgcmVzdWx0SW5kZXhNYXAgPSB7
fTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAg
IHdoaWxlIChydW5zW3J1bkluZGV4XSAhPT0gcmVzdWx0c1tpXS5ydW4oKSkKICAgICAgICAgICAg
cnVuSW5kZXgrKzsKICAgICAgICBpZiAocnVuSW5kZXggPT0gcmVmZXJlbmNlSW5kZXgpCiAgICAg
ICAgICAgIHJlZmVyZW5jZVJlc3VsdCA9IHJlc3VsdHNbaV07CiAgICAgICAgcmVzdWx0SW5kZXhN
YXBbcnVuSW5kZXhdID0gaTsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVucy5sZW5n
dGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHRJbmRleCA9IHJlc3VsdEluZGV4TWFwW2ldOwog
ICAgICAgIGlmIChyZXN1bHRJbmRleCA9PSB1bmRlZmluZWQpCiAgICAgICAgICAgIHRhYmxlUm93
LmFwcGVuZChtYXJrdXBGb3JNaXNzaW5nUnVuKGkgPT0gcmVmZXJlbmNlSW5kZXgpKTsKICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHRhYmxlUm93LmFwcGVuZChtYXJrdXBGb3JSdW4ocmVzdWx0c1ty
ZXN1bHRJbmRleF0sIHJlZmVyZW5jZVJlc3VsdCkpOwogICAgfQoKICAgICQoJyNjb250YWluZXIn
KS5jaGlsZHJlbigndGJvZHknKS5sYXN0KCkuYXBwZW5kKHRhYmxlUm93KTsKCiAgICB0YWJsZVJv
dy5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9IHRh
YmxlUm93WzBdICYmIGV2ZW50LnRhcmdldC5wYXJlbnROb2RlICE9IHRhYmxlUm93WzBdKQogICAg
ICAgICAgICByZXR1cm47CgogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgogICAgICAg
IHZhciBmaXJzdENlbGwgPSB0YWJsZVJvdy5jaGlsZHJlbigndGQnKS5maXJzdCgpOwogICAgICAg
IGlmIChmaXJzdENlbGwuY2hpbGRyZW4oJ3NlY3Rpb24nKS5sZW5ndGgpIHsKICAgICAgICAgICAg
Zmlyc3RDZWxsLmNoaWxkcmVuKCdzZWN0aW9uJykucmVtb3ZlKCk7CiAgICAgICAgICAgIHRhYmxl
Um93LmNoaWxkcmVuKCd0ZCcpLmNzcyh7J3BhZGRpbmctYm90dG9tJzogJyd9KTsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICB2YXIgcGxvdCA9IGNyZWF0ZVBsb3QoZmlyc3RDZWxsLCB0ZXN0
KTsKICAgICAgICAgICAgcGxvdC5jc3Moeydwb3NpdGlvbic6ICdhYnNvbHV0ZScsICd6LWluZGV4
JzogMn0pOwogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGFibGVSb3cub2Zmc2V0KCk7CiAgICAg
ICAgICAgIG9mZnNldC5sZWZ0ICs9IDE7CiAgICAgICAgICAgIG9mZnNldC50b3AgKz0gdGFibGVS
b3cub3V0ZXJIZWlnaHQoKTsKICAgICAgICAgICAgcGxvdC5vZmZzZXQob2Zmc2V0KTsKICAgICAg
ICAgICAgdGFibGVSb3cuY2hpbGRyZW4oJ3RkJykuY3NzKHsncGFkZGluZy1ib3R0b20nOiBwbG90
Lm91dGVySGVpZ2h0KCkgKyA1fSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9KTsKfQoKZnVuY3Rpb24gaW5pdCgpIHsKICAgICQudGFibGVzb3J0ZXIuYWRkUGFyc2VyKHsK
ICAgICAgICBpZDogJ2NvbXBhcmlzb24nLAogICAgICAgIGlzOiBmdW5jdGlvbihzKSB7CiAgICAg
ICAgICAgIHJldHVybiBzLmluZGV4T2YoJ3wnKSA+PSAwOwogICAgICAgIH0sCiAgICAgICAgZm9y
bWF0OiBmdW5jdGlvbihzKSB7CiAgICAgICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZUZsb2F0KHMu
c3Vic3RyaW5nKHMuaW5kZXhPZignfCcpICsgMSkpOwogICAgICAgICAgICByZXR1cm4gaXNOYU4o
cGFyc2VkKSA/IDAgOiBwYXJzZWQ7CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAnbnVtZXJpYycs
CiAgICB9KTsKCiAgICB2YXIgcnVucyA9IFtdOwogICAgdmFyIG1ldHJpY3MgPSB7fTsKICAgICQu
ZWFjaChKU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqc29uJykudGV4dENvbnRl
bnQpLCBmdW5jdGlvbiAoaW5kZXgsIGVudHJ5KSB7CiAgICAgICAgdmFyIHJ1biA9IG5ldyBUZXN0
UnVuKGVudHJ5KTsKICAgICAgICBydW5zLnB1c2gocnVuKTsKCiAgICAgICAgZnVuY3Rpb24gYWRk
VGVzdHModGVzdHMsIHBhcmVudEZ1bGxOYW1lKSB7CiAgICAgICAgICAgIGZvciAodmFyIHRlc3RO
YW1lIGluIHRlc3RzKSB7CiAgICAgICAgICAgICAgICB2YXIgZnVsbFRlc3ROYW1lID0gcGFyZW50
RnVsbE5hbWUgKyAnLycgKyB0ZXN0TmFtZTsKICAgICAgICAgICAgICAgIHZhciByYXdNZXRyaWNz
ID0gdGVzdHNbdGVzdE5hbWVdLm1ldHJpY3M7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgbWV0
cmljTmFtZSBpbiByYXdNZXRyaWNzKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxNZXRy
aWNOYW1lID0gZnVsbFRlc3ROYW1lICsgJzonICsgbWV0cmljTmFtZTsKICAgICAgICAgICAgICAg
ICAgICB2YXIgbWV0cmljID0gbWV0cmljc1tmdWxsTWV0cmljTmFtZV07CiAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtZXRyaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljID0gbmV3
IFBlcmZUZXN0TWV0cmljKGZ1bGxUZXN0TmFtZSwgbWV0cmljTmFtZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIG1ldHJpY3NbZnVsbE1ldHJpY05hbWVdID0gbWV0cmljOwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBtZXRyaWMuYWRkUmVzdWx0KG5ldyBUZXN0UmVz
dWx0KG1ldHJpYywgcmF3TWV0cmljc1ttZXRyaWNOYW1lXS5jdXJyZW50LCBydW4pKTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGVzdHNbdGVzdE5hbWVdLnRlc3RzKQog
ICAgICAgICAgICAgICAgICAgIGFkZFRlc3RzKHRlc3RzW3Rlc3ROYW1lXS50ZXN0cywgZnVsbFRl
c3ROYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgYWRkVGVzdHMoZW50cnku
dGVzdHMsICcnKTsKICAgIH0pOwoKICAgIHZhciBzaG91bGRJZ25vcmVNZW1vcnk9IHRydWU7CiAg
ICB2YXIgcmVmZXJlbmNlSW5kZXggPSAwOwogICAgdmFyIGhpZGVDb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YSA9IGZhbHNlOwoKICAgIGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1bnMsIHNob3VsZElnbm9y
ZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOwoKICAgICQoJyN0aW1lLW1lbW9yeScpLmJpbmQoJ2No
YW5nZScsIGZ1bmN0aW9uIChldmVudCwgY2hlY2tlZEVsZW1lbnQpIHsKICAgICAgICBzaG91bGRJ
Z25vcmVNZW1vcnkgPSBjaGVja2VkRWxlbWVudC50ZXh0Q29udGVudCA9PSAnVGltZSc7CiAgICAg
ICAgY3JlYXRlVGFibGUobWV0cmljcywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVu
Y2VJbmRleCwgaGlkZUNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKTsKICAgIH0pOwoKICAgIHJ1bnMu
bWFwKGZ1bmN0aW9uIChydW4sIGluZGV4KSB7CiAgICAgICAgJCgnI3JlZmVyZW5jZScpLmFwcGVu
ZCgnPHNwYW4gdmFsdWU9IicgKyBpbmRleCArICciJyArIChpbmRleCA9PSByZWZlcmVuY2VJbmRl
eCA/ICcgY2xhc3M9ImNoZWNrZWQiJyA6ICcnKSArICc+JyArIHJ1bi5sYWJlbCgpICsgJzwvc3Bh
bj4nKTsKICAgIH0pCgogICAgJCgnI3JlZmVyZW5jZScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9u
IChldmVudCwgY2hlY2tlZEVsZW1lbnQpIHsKICAgICAgICByZWZlcmVuY2VJbmRleCA9IHBhcnNl
SW50KGNoZWNrZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgndmFsdWUnKSk7CiAgICAgICAgY3JlYXRl
VGFibGUobWV0cmljcywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCwg
aGlkZUNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKTsKICAgIH0pOwoKICAgICQoJyNjb25maWRlbmNl
SW50ZXJ2YWxEZWx0YScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCwgY2hlY2tlZEVs
ZW1lbnQpIHsKICAgICAgICBoaWRlQ29uZmlkZW5jZUludGVydmFsRGVsdGEgPSBjaGVja2VkRWxl
bWVudC50ZXh0Q29udGVudCA9PSAnSGlkZSc7CiAgICAgICAgY3JlYXRlVGFibGUobWV0cmljcywg
cnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCwgaGlkZUNvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhKTsKICAgIH0pOwoKICAgICQoJy5jaGVja2JveCcpLmVhY2goZnVuY3Rpb24g
KGluZGV4LCBjaGVja2JveCkgewogICAgICAgICQoY2hlY2tib3gpLmNoaWxkcmVuKCdzcGFuJyku
Y2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNz
KCdjaGVja2VkJykpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICQoY2hlY2ti
b3gpLmNoaWxkcmVuKCdzcGFuJykucmVtb3ZlQ2xhc3MoJ2NoZWNrZWQnKTsKICAgICAgICAgICAg
JCh0aGlzKS5hZGRDbGFzcygnY2hlY2tlZCcpOwogICAgICAgICAgICAkKGNoZWNrYm94KS50cmln
Z2VyKCdjaGFuZ2UnLCAkKHRoaXMpKTsKICAgICAgICB9KTsKICAgIH0pOwp9Cgo8L3NjcmlwdD48
c2NyaXB0IGFzeW5jPSIiIHNyYz0iL1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNl
VGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qcyI+
PC9zY3JpcHQ+CjxzY3JpcHQgaWQ9Impzb24iIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iPlt7InRl
c3RzIjogeyJEcm9tYWVvIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2Vy
L3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlbyIsICJ0ZXN0cyI6IHsiY3NzcXVlcnktanF1
ZXJ5IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJS
dW5zIjogeyJjdXJyZW50IjogW1szNDIuNDUwNTcyODM2NDM0NzMsIDM0NC41OTk1Mzg4Mzc5OTA0
NSwgMzQ4LjAxMzk4OTI1OTY1ODU2LCAzNTEuOTEzMDI0NTg4NDI3MzMsIDM1My4yNTQyMTY2MDc1
NDIyXSwgWzM0My4xNTMwNDE2OTczNDk3NSwgMzQ0LjQ3NDI3NzQ1Njk1MzYsIDM0Ni44MzAwNjk0
NjExNDIsIDM1MC41MDg5NTMwMzkzNjYyNSwgMzUxLjkwNDM2NzcwNjg5NjJdLCBbMzQ1LjAwMDAy
NjEyNzY4NjM0LCAzNDcuMjc3NDI5NjYyODczMywgMzQ4Ljc4NTc3MzE4NzM1MTksIDM0OS44MzQz
ODI0MDMxNzU2LCAzNTEuMjYzNTk5ODE5MTQwNV0sIFszNDMuNDQxODg0NTY3MjMyMjUsIDM0Ni4z
MDUzNzU0Mzg2NjE2LCAzNDguNTYwOTI4MzkzNDM0OSwgMzUyLjI0MTA2MjA0NzkxMzk0LCAzNTMu
MzMxODEwMzM1MzIxNV1dfX0sICJ0ZXN0cyI6IHsialF1ZXJ5IC0gZGl2W2NsYXNzfD1kaWFsb2dd
IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5z
IjogeyJjdXJyZW50IjogW1syMTkyMy4wLCAyMTk0My4wLCAyMTk3NC4wLCAyMjA5MC4wLCAyMjE1
OC4wXSwgWzIxODAzLjAsIDIxOTQ1LjAsIDIyMDA0LjAsIDIyMDE5LjAsIDIyMDIxLjBdLCBbMjE2
NDcuMCwgMjE2NzMuMCwgMjE2ODMuMCwgMjE3MzIuMCwgMjE3NTIuMF0sIFsyMTcwOC4wLCAyMTc3
OC4wLCAyMTg1OC4wLCAyMTg4OC4wLCAyMjAyOC4wXV19fX0sICJqUXVlcnkgLSBkaXYjc2NlbmUx
IGRpdi5kaWFsb2cgZGl2IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2Vy
L3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJt
ZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTc5Ni4wLCAyMTkwMC4wLCAyMTk5Ny4w
LCAyMjExOS4wLCAyMjI1Mi4wXSwgWzIxNjkwLjAsIDIxODIzLjAsIDIxODQ3LjAsIDIxOTk3LjAs
IDIyMTE1LjBdLCBbMjE2NTYuMCwgMjE3NjQuMCwgMjE4MDIuMCwgMjE5MTYuMCwgMjE5NzUuMF0s
IFsyMTE2MC4wLCAyMTI0MC4wLCAyMTI3NS4wLCAyMTMxMS4wLCAyMTU4OC4wXV19fX0sICJqUXVl
cnkgLSBib2R5IGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0
cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTg3NTAuMCwgMTg4NTAuMCwgMTg5NjEuMCwg
MTkwMzAuMCwgMTkwODkuMF0sIFsxODc2MS4wLCAxOTA1Ny4wLCAxOTExNi4wLCAxOTE0Ny4wLCAx
OTE1NC4wXSwgWzE5MDE4LjAsIDE5MDc5LjAsIDE5MDg3LjAsIDE5MjA4LjAsIDE5MjEzLjBdLCBb
MTg4OTkuMCwgMTg5NzkuMCwgMTkwMTIuMCwgMTkwMTguMCwgMTkyMDkuMF1dfX19LCAialF1ZXJ5
IC0gZGl2Om50aC1jaGlsZCgybisxKSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
YnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0
bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbNTg4MC4wLCA1ODk2LjAsIDU5
MDUuMCwgNTk0MC4wLCA1OTY4LjBdLCBbNTkxNy4wLCA1OTIzLjAsIDU5MjMuMCwgNTkzMC4wLCA1
OTQzLjBdLCBbNTg2Ny4wLCA1ODY5LjAsIDU4ODQuMCwgNTkxNy4wLCA1OTIzLjBdLCBbNTkzMC4w
LCA1OTMxLjAsIDU5MzcuMCwgNTk1OS4wLCA1OTY0LjBdXX19fSwgImpRdWVyeSAtIGRpdjpudGgt
Y2hpbGQoMm4pIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5r
L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNz
IjogeyJSdW5zIjogeyJjdXJyZW50IjogW1s1ODAyLjAsIDU4OTAuMCwgNTkxMC4wLCA1OTE0LjAs
IDU5MjguMF0sIFs1ODU1LjAsIDU4NjkuMCwgNTg4MC4wLCA1OTAxLjAsIDU5MTYuMF0sIFs1ODM5
LjAsIDU4NDIuMCwgNTg4MC4wLCA1ODg5LjAsIDU5MTQuMF0sIFs1OTY5LjAsIDU5NzAuMCwgNTk3
My4wLCA1OTc2LjAsIDU5ODMuMF1dfX19LCAialF1ZXJ5IC0gKiI6IHsidXJsIjogImh0dHA6Ly90
cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3Nz
cXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMzAy
My4wLCAzMDY3LjAsIDMwOTYuMCwgMzExMC4wLCAzMTI0LjBdLCBbMzA0OC4wLCAzMDUxLjAsIDMw
NjAuMCwgMzA4Ny4wLCAzMTE0LjBdLCBbMzA2NS4wLCAzMTAxLjAsIDMxMTAuMCwgMzEyMS4wLCAz
MTU1LjBdLCBbMzAyNS4wLCAzMTE3LjAsIDMxMjAuMCwgMzEzMy4wLCAzMTUwLjBdXX19fSwgImpR
dWVyeSAtIGRpdiAjc3BlZWNoNSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJv
d3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwi
LCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjE5MzQuMCwgMjIxNDguMCwgMjIz
MzQuMCwgMjI0NjguMCwgMjI0OTUuMF0sIFsyMTU0OC4wLCAyMTY0My4wLCAyMTczOC4wLCAyMTc2
Ni4wLCAyMTc4MS4wXSwgWzIxMzYyLjAsIDIxMzg5LjAsIDIxNDE1LjAsIDIxNjE5LjAsIDIxNjMy
LjBdLCBbMjEyMzEuMCwgMjEyMzYuMCwgMjE0NDcuMCwgMjE1NTMuMCwgMjE1ODQuMF1dfX19LCAi
alF1ZXJ5IC0gYm9keSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0
cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMzcyODk3LjAsIDM3Njg1Mi4wLCAzNzg4NzUu
MCwgMzgyMTE0LjAsIDM4MzE4OS4wXSwgWzM2ODEzOS4wLCAzNjkxNDQuMCwgMzc0OTgwLjAsIDM3
NTc5MC4wLCAzODExNDAuMF0sIFszMzU5MjkuMCwgMzQxNzIyLjAsIDM0MTc1MS4wLCAzNDI4Njcu
MCwgMzQ1NDA0LjBdLCBbMzU3MDM2LjAsIDM2MzE3OS4wLCAzNjQxMDEuMCwgMzY2OTk0LjAsIDM3
MzI3Ny4wXV19fX0sICJqUXVlcnkgLSBkaXYgKyBkaXYiOiB7InVybCI6ICJodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5
LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxODI2LjAs
IDIxOTAxLjAsIDIxOTI3LjAsIDIxOTY0LjAsIDIyMDA3LjBdLCBbMjExNTUuMCwgMjEzNTYuMCwg
MjE0NzkuMCwgMjE0ODQuMCwgMjE3NDIuMF0sIFsyMTU5MC4wLCAyMTYyMC4wLCAyMTY3Ny4wLCAy
MTczMC4wLCAyMTkzNC4wXSwgWzIxNzg0LjAsIDIxOTI1LjAsIDIxOTQzLjAsIDIxOTQ5LjAsIDIy
MTQyLjBdXX19fSwgImpRdWVyeSAtIGRpdiA+IGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnkt
anF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTk4OTkuMCwg
MTk5MjUuMCwgMjAwNjMuMCwgMjAxMDUuMCwgMjAxNDYuMF0sIFsyMDE2OC4wLCAyMDIzMi4wLCAy
MDI0NC4wLCAyMDI4Ny4wLCAyMDI5NC4wXSwgWzIwMDYzLjAsIDIwMDY2LjAsIDIwMDY4LjAsIDIw
MDkzLjAsIDIwMjIyLjBdLCBbMTk1MzkuMCwgMTk3NjcuMCwgMTk4MDcuMCwgMTk4NTAuMCwgMTk5
MTMuMF1dfX19LCAialF1ZXJ5IC0gZGl2IC5kaWFsb2ciOiB7InVybCI6ICJodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5
LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxMzk4LjAs
IDIxNDEwLjAsIDIxNzM3LjAsIDIxNzUzLjAsIDIxOTI2LjBdLCBbMjE4NjMuMCwgMjE5OTYuMCwg
MjIxMjYuMCwgMjIxMzUuMCwgMjIyMjQuMF0sIFsyMTU4My4wLCAyMTc4My4wLCAyMTc5Ni4wLCAy
MjAyNS4wLCAyMjA1Mi4wXSwgWzIxOTI5LjAsIDIxOTcwLjAsIDIyMTYzLjAsIDIyMjYyLjAsIDIy
NDYwLjBdXX19fSwgImpRdWVyeSAtIGRpdiBkaXYgZGl2IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVy
eS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTgzOS4w
LCAyMTkwNS4wLCAyMTk1Ny4wLCAyMTk2Ni4wLCAyMjAwMS4wXSwgWzIxMTcxLjAsIDIxMTkyLjAs
IDIxMzM0LjAsIDIxNDIyLjAsIDIxNDc0LjBdLCBbMjEzNTguMCwgMjE0NzcuMCwgMjE1NDIuMCwg
MjE1NDYuMCwgMjE1NTYuMF0sIFsyMDY2Ny4wLCAyMTAwMi4wLCAyMTAwMy4wLCAyMTA1Ni4wLCAy
MTA4MS4wXV19fX0sICJqUXVlcnkgLSBkaXZbY2xhc3MkPWxvZ10iOiB7InVybCI6ICJodHRwOi8v
dHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nz
c3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIx
MzUyLjAsIDIxNTIzLjAsIDIxNjI0LjAsIDIxODAwLjAsIDIxODU3LjBdLCBbMjEzMDQuMCwgMjEz
MTQuMCwgMjEzMTQuMCwgMjEzNjkuMCwgMjE1MjAuMF0sIFsyMTE2OC4wLCAyMTIwOC4wLCAyMTI5
OC4wLCAyMTQxNS4wLCAyMTU4Ny4wXSwgWzIwODYzLjAsIDIwODk3LjAsIDIwOTUxLjAsIDIwOTU5
LjAsIDIxMTcyLjBdXX19fSwgImpRdWVyeSAtICNzY2VuZTEgI3NwZWVjaDEiOiB7InVybCI6ICJo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9t
YWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQi
OiBbWzIxNjgzLjAsIDIxNzkzLjAsIDIxODExLjAsIDIxOTAxLjAsIDIxOTA2LjBdLCBbMjEyOTIu
MCwgMjEzMTEuMCwgMjE0MzYuMCwgMjE0NjQuMCwgMjE2MjAuMF0sIFsyMTY5OS4wLCAyMTc3Ny4w
LCAyMTg2Ni4wLCAyMTk4MS4wLCAyMjExOC4wXSwgWzIxNjA1LjAsIDIxODkzLjAsIDIxODk2LjAs
IDIyMTM1LjAsIDIyMTQyLjBdXX19fSwgImpRdWVyeSAtIGRpdltjbGFzcz1kaWFsb2ddIjogeyJ1
cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJj
dXJyZW50IjogW1syMTUyNS4wLCAyMTcyMy4wLCAyMTgxMi4wLCAyMTkzMC4wLCAyMTk2My4wXSwg
WzIxNTEyLjAsIDIxNjQ3LjAsIDIxNjU4LjAsIDIxNjYzLjAsIDIxNjY2LjBdLCBbMjIxMTkuMCwg
MjIxNTAuMCwgMjIxOTIuMCwgMjIzMjIuMCwgMjI0ODEuMF0sIFsyMTYwMC4wLCAyMTYzMi4wLCAy
MTcwNC4wLCAyMTg1My4wLCAyMTkxNS4wXV19fX0sICJqUXVlcnkgLSAuZGlhbG9nIjogeyJ1cmwi
OiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMv
RHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJy
ZW50IjogW1szMzY3NzAuMCwgMzM3NTg0LjAsIDMzODkxNS4wLCAzMzg5NjYuMCwgMzM5MjIxLjBd
LCBbMzI3NDgwLjAsIDMyNzg4MC4wLCAzMzE0MzYuMCwgMzMzNjMzLjAsIDMzNjU0NS4wXSwgWzMw
NTYxNy4wLCAzMDgwNDEuMCwgMzA5MzU0LjAsIDMxNTY0Mi4wLCAzMTYxMTIuMF0sIFszNDc0MjMu
MCwgMzQ3ODIyLjAsIDM0ODA2OS4wLCAzNTA0ODUuMCwgMzUxMjgwLjBdXX19fSwgImpRdWVyeSAt
IGRpdltjbGFzcyo9c2NlXSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nl
ci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAi
bWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjA5ODcuMCwgMjEwODEuMCwgMjExNDgu
MCwgMjEyMjMuMCwgMjE0MzguMF0sIFsyMDkyMS4wLCAyMDk0Mi4wLCAyMTA3Ni4wLCAyMTEyOC4w
LCAyMTE5MS4wXSwgWzIxMDEyLjAsIDIxMDM3LjAsIDIxMDQzLjAsIDIxMDkyLjAsIDIxMTQzLjBd
LCBbMjEyMDEuMCwgMjEzMzkuMCwgMjEzODguMCwgMjE0MTEuMCwgMjE0MjEuMF1dfX19LCAialF1
ZXJ5IC0gZGl2LmRpYWxvZyI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nl
ci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAi
bWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjIyNDkuMCwgMjIzODguMCwgMjI1MDEu
MCwgMjI1MDUuMCwgMjI2MTAuMF0sIFsyMTQwNy4wLCAyMTUxNy4wLCAyMTY3Ny4wLCAyMTc1OS4w
LCAyMTgyOS4wXSwgWzIxODA3LjAsIDIxODM3LjAsIDIxOTAyLjAsIDIxOTY2LjAsIDIyMDEwLjBd
LCBbMjE3ODYuMCwgMjE4NTQuMCwgMjIwOTAuMCwgMjIxMjIuMCwgMjIxNDguMF1dfX19LCAialF1
ZXJ5IC0gZGl2W2NsYXNzfj1kaWFsb2ddIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnku
aHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTI5NC4wLCAyMTMwMS4w
LCAyMTM5OC4wLCAyMTQyMy4wLCAyMTUxMy4wXSwgWzIxMTM1LjAsIDIxMjYzLjAsIDIxMzM2LjAs
IDIxMzkxLjAsIDIxNjMyLjBdLCBbMjExMzUuMCwgMjExOTcuMCwgMjEyNTkuMCwgMjEzNTkuMCwg
MjE1OTUuMF0sIFsyMTE5MS4wLCAyMTI3MC4wLCAyMTM3NC4wLCAyMTM5Ny4wLCAyMTUzMi4wXV19
fX0sICJqUXVlcnkgLSBkaXY6bnRoLWNoaWxkKG9kZCkiOiB7InVybCI6ICJodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5
LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzU4MzUuMCwg
NTgzNi4wLCA1ODgyLjAsIDU5MTcuMCwgNTkyNy4wXSwgWzU5MDYuMCwgNTkxNy4wLCA1OTI1LjAs
IDU5MjUuMCwgNTk0NS4wXSwgWzU1MTcuMCwgNTc3OC4wLCA1ODM1LjAsIDU4NjUuMCwgNTkwMy4w
XSwgWzU5MzEuMCwgNTk1Ni4wLCA1OTU2LjAsIDU5NjguMCwgNTk3NS4wXV19fX0sICJqUXVlcnkg
LSBkaXY6b25seS1jaGlsZCI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nl
ci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAi
bWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjA5NTIuMCwgMjEwOTguMCwgMjE2NjIu
MCwgMjE2NjUuMCwgMjE3OTMuMF0sIFsyMTgxNS4wLCAyMTk4OS4wLCAyMjAzMy4wLCAyMjA2OC4w
LCAyMjI4Ni4wXSwgWzIyMTYwLjAsIDIyMjczLjAsIDIyNDEzLjAsIDIyNDUwLjAsIDIyNzEwLjBd
LCBbMjE5ODUuMCwgMjIxMzIuMCwgMjIzMjMuMCwgMjIzNTcuMCwgMjI0MTYuMF1dfX19LCAialF1
ZXJ5IC0gZGl2LCBhLCBzcGFuIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93
c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIs
ICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1szNTE3LjAsIDM1MjYuMCwgMzUzOS4w
LCAzNzExLjAsIDM3MjYuMF0sIFszNTA5LjAsIDM1MjQuMCwgMzUyOC4wLCAzNzEyLjAsIDM3MjEu
MF0sIFszNjI4LjAsIDM2NDkuMCwgMzY4My4wLCAzNjkwLjAsIDM3MDYuMF0sIFszNTM1LjAsIDM1
NTEuMCwgMzU4NC4wLCAzNzE0LjAsIDM3MjUuMF1dfX19LCAialF1ZXJ5IC0gZGl2IGRpdiI6IHsi
dXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRl
c3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsi
Y3VycmVudCI6IFtbMTk4ODEuMCwgMjAwMjQuMCwgMjAwNDQuMCwgMjAwNDcuMCwgMjA0MjMuMF0s
IFsxOTk0MS4wLCAyMDAxOS4wLCAyMDAyNy4wLCAyMDEzMi4wLCAyMDIwNy4wXSwgWzE5NDkzLjAs
IDE5NTE0LjAsIDE5NjExLjAsIDE5NjM4LjAsIDE5Njk4LjBdLCBbMjAxMzguMCwgMjAyMDYuMCwg
MjAyNTUuMCwgMjAyOTIuMCwgMjAzMDguMF1dfX19LCAialF1ZXJ5IC0gZGl2LCBkaXYsIGRpdiI6
IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5j
ZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6
IHsiY3VycmVudCI6IFtbMzc4OS4wLCAzNzkwLjAsIDM4NjcuMCwgMzk4NS4wLCAzOTkzLjBdLCBb
Mzc3Ni4wLCAzNzc5LjAsIDM4NDkuMCwgMzk4My4wLCAzOTk3LjBdLCBbMzkzMC4wLCAzOTM3LjAs
IDM5NDcuMCwgMzk1MS4wLCAzOTU1LjBdLCBbMzc3Mi4wLCAzNzcyLjAsIDM4MTkuMCwgNDAwNi4w
LCA0MDExLjBdXX19fSwgImpRdWVyeSAtIGRpdltjbGFzc149ZGlhXSI6IHsidXJsIjogImh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8v
Y3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtb
MjE1MTAuMCwgMjE1NDUuMCwgMjE1NzMuMCwgMjE4NjQuMCwgMjE4ODguMF0sIFsyMTgxNS4wLCAy
MTg2MC4wLCAyMTkwNC4wLCAyMTk2MC4wLCAyMjAzMi4wXSwgWzIxODIzLjAsIDIxODc4LjAsIDIy
MDcyLjAsIDIyMTI2LjAsIDIyMTcwLjBdLCBbMjE4MjAuMCwgMjIwNDEuMCwgMjIwNzYuMCwgMjIx
MTMuMCwgMjIxMjguMF1dfX19LCAialF1ZXJ5IC0gI3NwZWVjaDUiOiB7InVybCI6ICJodHRwOi8v
dHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nz
c3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzEw
NDQyMDkuMCwgMTA1MjMwNy4wLCAxMDU3NzU1LjAsIDEwNjAyODguMCwgMTA2Mzk4Ni4wXSwgWzEw
ODcwMDMuMCwgMTExMjc0Ny4wLCAxMTE1MDk0LjAsIDExMzE5OTMuMCwgMTEzNTIzMS4wXSwgWzg3
Mzc4OS4wLCA4OTA5NDAuMCwgOTAwNzA5LjAsIDkwNTYzMC4wLCA5MDYxNTIuMF0sIFsxMjAyNTk1
LjAsIDEyMTI5MTkuMCwgMTIxNDk5MC4wLCAxMjIzMTUyLjAsIDEyMjQ0NzQuMF1dfX19LCAialF1
ZXJ5IC0gZGl2Omxhc3QtY2hpbGQiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jy
b3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1s
IiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxODY2LjAsIDIxODgxLjAsIDIy
MDEwLjAsIDIyMDk3LjAsIDIyMTc5LjBdLCBbMjEzODguMCwgMjE1MjMuMCwgMjE1NjAuMCwgMjE1
ODAuMCwgMjE1OTMuMF0sIFsyMTcyMC4wLCAyMTkzNi4wLCAyMjAwMC4wLCAyMjAwNy4wLCAyMjA0
NC4wXSwgWzIxNjU3LjAsIDIxNjgyLjAsIDIxNzMyLjAsIDIxNzM3LjAsIDIxNzkxLjBdXX19fSwg
ImpRdWVyeSAtIGRpdiB+IGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJv
d3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwi
LCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTg4NjkuMCwgMTg5NTQuMCwgMTkw
NTMuMCwgMTkwNzcuMCwgMTkxOTUuMF0sIFsxODAxOS4wLCAxODI2NC4wLCAxODI5MS4wLCAxODM1
MC4wLCAxODM1MC4wXSwgWzE4MTM2LjAsIDE4MjEyLjAsIDE4MzUzLjAsIDE4MzYxLjAsIDE4Mzc5
LjBdLCBbMTg0OTIuMCwgMTg3NTYuMCwgMTg4MTYuMCwgMTg4NjcuMCwgMTg5MTAuMF1dfX19LCAi
alF1ZXJ5IC0gZGl2W2NsYXNzXSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJv
d3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwi
LCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTkyNDcuMCwgMTkyNDguMCwgMTk0
ODguMCwgMTk1MTEuMCwgMTk2NTAuMF0sIFsxOTMyMy4wLCAxOTMzNi4wLCAxOTQxMS4wLCAxOTUz
Ny4wLCAxOTY3My4wXSwgWzE5MjQ5LjAsIDE5MjU5LjAsIDE5MjY3LjAsIDE5MzkyLjAsIDE5NTE0
LjBdLCBbMTkyODMuMCwgMTkyOTkuMCwgMTkzMDEuMCwgMTkzNjIuMCwgMTk0NjAuMF1dfX19LCAi
alF1ZXJ5IC0gZGl2Om50aC1jaGlsZChldmVuKSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1
ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbNTY3NS4wLCA1NzY4
LjAsIDU4MTkuMCwgNTkyMi4wLCA1OTMzLjBdLCBbNTg0Ni4wLCA1ODg0LjAsIDU4ODguMCwgNTg5
Ni4wLCA1OTE4LjBdLCBbNTg4MC4wLCA1ODkxLjAsIDU5MDMuMCwgNTkxOS4wLCA1OTI3LjBdLCBb
NTc5Ny4wLCA1OTM0LjAsIDU5NTcuMCwgNTk2NS4wLCA1OTY1LjBdXX19fSwgImpRdWVyeSAtIGRp
djpmaXJzdC1jaGlsZCI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0
cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjEwMjIuMCwgMjExOTMuMCwgMjEyMjMuMCwg
MjEzOTMuMCwgMjE1ODYuMF0sIFsyMTg3NC4wLCAyMjA0Ni4wLCAyMjE3Mi4wLCAyMjI4Ny4wLCAy
MjM1NS4wXSwgWzIxOTU4LjAsIDIxOTcxLjAsIDIxOTk5LjAsIDIyMDY5LjAsIDIyMDgwLjBdLCBb
MjE5NDkuMCwgMjE5NzQuMCwgMjIwODEuMCwgMjIyNzcuMCwgMjIzMDguMF1dfX19LCAialF1ZXJ5
IC0gZGl2I3NwZWVjaDUiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIv
dHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1l
dHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxODg1LjAsIDIyMTM4LjAsIDIyMjE0LjAs
IDIyMjY1LjAsIDIyMjgwLjBdLCBbMjE5MTcuMCwgMjE5MTkuMCwgMjE5NjAuMCwgMjIwNjQuMCwg
MjIxMDQuMF0sIFsyMTY2MS4wLCAyMTgyNy4wLCAyMTgyOC4wLCAyMTg2NS4wLCAyMTkxMC4wXSwg
WzIxNDg3LjAsIDIxNDk4LjAsIDIxNjA3LjAsIDIxNzAzLjAsIDIxNzAzLjBdXX19fSwgImpRdWVy
eSAtIGRpdi5zY2VuZSBkaXYuZGlhbG9nIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnku
aHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTgwNy4wLCAyMjAwNi4w
LCAyMjAxMS4wLCAyMjAzNS4wLCAyMjI1NS4wXSwgWzIyMDgyLjAsIDIyMjU5LjAsIDIyMzMyLjAs
IDIyNDE1LjAsIDIyNDcyLjBdLCBbMjE5NjAuMCwgMjIyNTEuMCwgMjIzNTYuMCwgMjIzNzIuMCwg
MjIzNzIuMF0sIFsyMjAzMy4wLCAyMjEyMC4wLCAyMjEzOC4wLCAyMjIwNS4wLCAyMjMxMi4wXV19
fX0sICJqUXVlcnkgLSBkaXYuY2hhcmFjdGVyLCBkaXYuZGlhbG9nIjogeyJ1cmwiOiAiaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9j
c3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1s1
MTc5LjAsIDUyMDUuMCwgNTQ3Mi4wLCA1NDgwLjAsIDU0ODQuMF0sIFs1MTQ4LjAsIDUxNzIuMCwg
NTQyMS4wLCA1NDM1LjAsIDU0NTQuMF0sIFs1MzA3LjAsIDUzMTAuMCwgNTM1Ny4wLCA1MzYxLjAs
IDUzNjQuMF0sIFs1MTM1LjAsIDUxOTkuMCwgNTQxNi4wLCA1NDgwLjAsIDU0ODUuMF1dfX19LCAi
alF1ZXJ5IC0gZGl2Om50aC1jaGlsZChuKSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTk0MDQuMCwgMTk1NzEu
MCwgMTk1ODcuMCwgMTk3ODAuMCwgMTk4OTIuMF0sIFsxOTQ4My4wLCAxOTYyNS4wLCAxOTc2Ny4w
LCAxOTc2OS4wLCAxOTgyMi4wXSwgWzE5MDY0LjAsIDE5MjAzLjAsIDE5MjI5LjAsIDE5MjQ4LjAs
IDE5MzM5LjBdLCBbMTk1NzMuMCwgMTk1ODkuMCwgMTk2MDYuMCwgMTk2MTcuMCwgMTk4OTEuMF1d
fX19LCAialF1ZXJ5IC0gZGl2IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93
c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIs
ICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sxMzI4MTMuMCwgMTMzNzUzLjAsIDEz
NDMzMy4wLCAxMzUyMjMuMCwgMTM5NTc0LjBdLCBbMTMxMTExLjAsIDEzNTA0Ny4wLCAxMzYxNjku
MCwgMTM2NzA3LjAsIDEzNjc4My4wXSwgWzEyNjg2NS4wLCAxMjcxNzYuMCwgMTI3MjU1LjAsIDEy
NzI1OS4wLCAxMjkyNjEuMF0sIFsxMjg5NzYuMCwgMTMwMzA1LjAsIDEzMTI4NS4wLCAxMzIwMDIu
MCwgMTMyNjY4LjBdXX19fX19fX19LCAiYnVpbGRUaW1lIjogIjIwMTQtMDktMTJUMTQ6MzU6MTgu
NzE4MDMzIiwgInJldmlzaW9ucyI6IHsiV2ViS2l0IjogeyJ0aW1lc3RhbXAiOiAiMjAxNC0wOS0x
MlQxMzowNjoxM1oiLCAicmV2aXNpb24iOiAiMTczNTU3In19fV08L3NjcmlwdD4KCgo8c2NyaXB0
IGFzeW5jPSIiIHNyYz0iL1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMv
cmVzb3VyY2VzL2pxdWVyeS5mbG90Lm1pbi5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBhc3luYz0iIiBz
cmM9Ii9Vc2Vycy95dXN1a2UvZGV2L1dlYktpdC9QZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9q
cXVlcnkudGFibGVzb3J0ZXIubWluLmpzIj48L3NjcmlwdD48c2NyaXB0IGFzeW5jPSIiIHNyYz0i
L1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3N0YXRp
c3RpY3MuanMiPjwvc2NyaXB0PjwvYm9keT48L2h0bWw+WXRleHQvaHRtbFVVVEYtOFAAAAAIAAAA
DQAAAB8AAAAxAAAANgAAAD8AAABOAAAAZAAAAHYAAACMAAAA8QAAA1MABcyYAAXMqgAFzLMABc0D
AAXPTgAGYgUABmIXAAZiIAAGYncABmTJAAalVQAGpWcABqVwAAaluwAGqAEABsr+AAbLEAAGyxsA
Bss5AAbLUAAGy6MAB4odAAeKJwAHii0AAAAAAAAEAQAAAAAAAAAkAAAAAAAAAAAAAAAAAAeKLg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>238030</attachid>
            <date>2014-09-12 08:56:52 -0700</date>
            <delta_ts>2014-09-12 08:56:52 -0700</delta_ts>
            <desc>Perf Results with reverting this patch</desc>
            <filename>reverted.webarchive</filename>
            <type>application/x-webarchive</type>
            <size>494357</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">YnBsaXN0MDDSAQIDHF8QD1dlYlN1YnJlc291cmNlc18QD1dlYk1haW5SZXNvdXJjZaQEDRIX1AUG
BwgJCgsMXldlYlJlc291cmNlVVJMXxATV2ViUmVzb3VyY2VSZXNwb25zZV8QD1dlYlJlc291cmNl
RGF0YV8QE1dlYlJlc291cmNlTUlNRVR5cGVfEGJmaWxlOi8vL1VzZXJzL3l1c3VrZS9kZXYvV2Vi
S2l0L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2px
dWVyeS0xLjYuNC5qc08RAl5icGxpc3QwMNQBAgMEBQY1NlgkdmVyc2lvblgkb2JqZWN0c1kkYXJj
aGl2ZXJUJHRvcBIAAYagqwcIHyUmLRcuLzAxVSRudWxs2wkKCwwNDg8QERITFBUWFxgZGhscHR5S
JDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0UiQ3UiQyUiQ1UiQwUiQ4gAKACoAHEACACYAFgAAQB4AGEAiA
CNMgCiEaIyRXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QYmZpbGU6Ly8vVXNlcnMveXVzdWtl
L2Rldi9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dl
Yi9saWIvanF1ZXJ5LTEuNi40Lmpz0icoKSpaJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIrLFVO
U1VSTFhOU09iamVjdCNBucNNgkcr7V8QD3RleHQvamF2YXNjcmlwdBIABck/I3/v////////0ico
MjNdTlNVUkxSZXNwb25zZaI0LF1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0Tc4XxAT
V2ViUmVzb3VyY2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAQwBJAGAAYwBqAG0AcABzAHYAeQB8
AH8AggCFAIcAiQCLAI0AjwCRAJMAlQCXAJkAmwCiAKoAtgC4ALoAvAEhASYBMQE6AUABQwFJAVIB
WwFtAXIBewGAAY4BkQGfAbEBtAHKAAAAAAAAAgEAAAAAAAAAOQAAAAAAAAAAAAAAAAAAAcxPEgAF
yT8vKiEKICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS42LjQKICogaHR0cDovL2pxdWVy
eS5jb20vCiAqCiAqIENvcHlyaWdodCAyMDExLCBKb2huIFJlc2lnCiAqIER1YWwgbGljZW5zZWQg
dW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgogKiBodHRwOi8vanF1ZXJ5
Lm9yZy9saWNlbnNlCiAqCiAqIEluY2x1ZGVzIFNpenpsZS5qcwogKiBodHRwOi8vc2l6emxlanMu
Y29tLwogKiBDb3B5cmlnaHQgMjAxMSwgVGhlIERvam8gRm91bmRhdGlvbgogKiBSZWxlYXNlZCB1
bmRlciB0aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCiAqCiAqIERhdGU6IE1vbiBTZXAg
MTIgMTg6NTQ6NDggMjAxMSAtMDQwMAogKi8KKGZ1bmN0aW9uKCB3aW5kb3csIHVuZGVmaW5lZCAp
IHsKCi8vIFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBhY2NvcmRpbmdseSB3aXRoIHdpbmRvdyBh
cmd1bWVudCAoc2FuZGJveCkKdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LAogICAgICAg
IG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0b3IsCiAgICAgICAgbG9jYXRpb24gPSB3aW5kb3cu
bG9jYXRpb247CnZhciBqUXVlcnkgPSAoZnVuY3Rpb24oKSB7CgovLyBEZWZpbmUgYSBsb2NhbCBj
b3B5IG9mIGpRdWVyeQp2YXIgalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkg
ewogICAgICAgICAgICAgICAgLy8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0
aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSApOwogICAgICAg
IH0sCgogICAgICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQogICAg
ICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAoKICAgICAgICAvLyBNYXAgb3ZlciB0aGUgJCBp
biBjYXNlIG9mIG92ZXJ3cml0ZQogICAgICAgIF8kID0gd2luZG93LiQsCgogICAgICAgIC8vIEEg
Y2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KQogICAgICAgIHJv
b3RqUXVlcnksCgogICAgICAgIC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJp
bmdzIG9yIElEIHN0cmluZ3MKICAgICAgICAvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRv
IGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCiAgICAgICAgcXVpY2tFeHByID0g
L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLAoKICAgICAgICAvLyBD
aGVjayBpZiBhIHN0cmluZyBoYXMgYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gaXQKICAg
ICAgICBybm90d2hpdGUgPSAvXFMvLAoKICAgICAgICAvLyBVc2VkIGZvciB0cmltbWluZyB3aGl0
ZXNwYWNlCiAgICAgICAgdHJpbUxlZnQgPSAvXlxzKy8sCiAgICAgICAgdHJpbVJpZ2h0ID0gL1xz
KyQvLAoKICAgICAgICAvLyBDaGVjayBmb3IgZGlnaXRzCiAgICAgICAgcmRpZ2l0ID0gL1xkLywK
CiAgICAgICAgLy8gTWF0Y2ggYSBzdGFuZGFsb25lIHRhZwogICAgICAgIHJzaW5nbGVUYWcgPSAv
XjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLAoKICAgICAgICAvLyBKU09OIFJlZ0V4cAogICAg
ICAgIHJ2YWxpZGNoYXJzID0gL15bXF0sOnt9XHNdKiQvLAogICAgICAgIHJ2YWxpZGVzY2FwZSA9
IC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csCiAgICAgICAgcnZhbGlkdG9r
ZW5zID0gLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/Oltl
RV1bK1wtXT9cZCspPy9nLAogICAgICAgIHJ2YWxpZGJyYWNlcyA9IC8oPzpefDp8LCkoPzpccypc
WykrL2csCgogICAgICAgIC8vIFVzZXJhZ2VudCBSZWdFeHAKICAgICAgICByd2Via2l0ID0gLyh3
ZWJraXQpWyBcL10oW1x3Ll0rKS8sCiAgICAgICAgcm9wZXJhID0gLyhvcGVyYSkoPzouKnZlcnNp
b24pP1sgXC9dKFtcdy5dKykvLAogICAgICAgIHJtc2llID0gLyhtc2llKSAoW1x3Ll0rKS8sCiAg
ICAgICAgcm1vemlsbGEgPSAvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLAoKICAgICAg
ICAvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKICAgICAgICByZGFzaEFs
cGhhID0gLy0oW2Etel18WzAtOV0pL2lnLAogICAgICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCgog
ICAgICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNl
KCkKICAgICAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuICggbGV0dGVyICsgIiIgKS50b1VwcGVyQ2FzZSgpOwogICAgICAgIH0s
CgogICAgICAgIC8vIEtlZXAgYSBVc2VyQWdlbnQgc3RyaW5nIGZvciB1c2Ugd2l0aCBqUXVlcnku
YnJvd3NlcgogICAgICAgIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQsCgogICAgICAg
IC8vIEZvciBtYXRjaGluZyB0aGUgZW5naW5lIGFuZCB2ZXJzaW9uIG9mIHRoZSBicm93c2VyCiAg
ICAgICAgYnJvd3Nlck1hdGNoLAoKICAgICAgICAvLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00g
cmVhZHkKICAgICAgICByZWFkeUxpc3QsCgogICAgICAgIC8vIFRoZSByZWFkeSBldmVudCBoYW5k
bGVyCiAgICAgICAgRE9NQ29udGVudExvYWRlZCwKCiAgICAgICAgLy8gU2F2ZSBhIHJlZmVyZW5j
ZSB0byBzb21lIGNvcmUgbWV0aG9kcwogICAgICAgIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZywKICAgICAgICBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LAogICAgICAgIHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaCwKICAgICAgICBzbGljZSA9
IEFycmF5LnByb3RvdHlwZS5zbGljZSwKICAgICAgICB0cmltID0gU3RyaW5nLnByb3RvdHlwZS50
cmltLAogICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiwKCiAgICAgICAg
Ly8gW1tDbGFzc11dIC0+IHR5cGUgcGFpcnMKICAgICAgICBjbGFzczJ0eXBlID0ge307CgpqUXVl
cnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewogICAgICAgIGNvbnN0cnVjdG9yOiBqUXVlcnks
CiAgICAgICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkg
ewogICAgICAgICAgICAgICAgdmFyIG1hdGNoLCBlbGVtLCByZXQsIGRvYzsKCiAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgJCgiIiksICQobnVsbCksIG9yICQodW5kZWZpbmVkKQogICAgICAgICAg
ICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSAkKERPTUVs
ZW1lbnQpCiAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gVGhl
IGJvZHkgZWxlbWVudCBvbmx5IGV4aXN0cyBvbmNlLCBvcHRpbWl6ZSBmaW5kaW5nIGl0CiAgICAg
ICAgICAgICAgICBpZiAoIHNlbGVjdG9yID09PSAiYm9keSIgJiYgIWNvbnRleHQgJiYgZG9jdW1l
bnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gZG9jdW1l
bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbMF0gPSBkb2N1bWVudC5ib2R5OwogICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlIEhU
TUwgc3RyaW5ncwogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJp
bmciICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgZGVhbGluZyB3aXRoIEhU
TUwgc3RyaW5nIG9yIGFuIElEPwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9y
LmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3IubGVuZ3RoIC0g
MSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQg
d2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSBxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmVyaWZ5IGEgbWF0Y2gsIGFuZCB0
aGF0IG5vIGNvbnRleHQgd2FzIHNwZWNpZmllZCBmb3IgI2lkCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2Yg
alF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb2MgPSAoY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBj
b250ZXh0IDogZG9jdW1lbnQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGEgc2luZ2xlIHN0cmluZyBpcyBwYXNzZWQgaW4gYW5kIGl0J3MgYSBzaW5nbGUg
dGFnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGRvIGEg
Y3JlYXRlRWxlbWVudCBhbmQgc2tpcCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gcnNpbmdsZVRhZy5leGVjKCBzZWxlY3RvciApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1BsYWlu
T2JqZWN0KCBjb250ZXh0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBbIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
IHJldFsxXSApIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmZuLmF0dHIuY2FsbCggc2VsZWN0b3IsIGNvbnRleHQsIHRydWUg
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0b3IgPSBbIGRvYy5jcmVhdGVFbGVtZW50KCByZXRbMV0gKSBdOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgbWF0
Y2hbMV0gXSwgWyBkb2MgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RvciA9IChyZXQuY2FjaGVhYmxlID8galF1ZXJ5LmNsb25lKHJldC5m
cmFnbWVudCkgOiByZXQuZnJhZ21lbnQpLmNoaWxkTm9kZXM7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKCIjaWQiKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0
byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9j
dW1lbnQgIzY5NjMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEg
cmV0dXJuIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgIT09IG1hdGNoWzJdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
b290alF1ZXJ5LmZpbmQoIHNlbGVjdG9yICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgaW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5
IGludG8gdGhlIGpRdWVyeSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzWzBdID0gZWxlbTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHBy
LCAkKC4uLikpCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFjb250ZXh0IHx8
IGNvbnRleHQuanF1ZXJ5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoY29udGV4dCB8fCByb290alF1ZXJ5KS5maW5kKCBzZWxlY3RvciApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChl
eHByKQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2Vs
ZWN0b3IgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEhB
TkRMRTogJChmdW5jdGlvbikKICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0IGZvciBkb2N1bWVu
dCByZWFkeQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNl
bGVjdG9yICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290alF1ZXJ5LnJl
YWR5KCBzZWxlY3RvciApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChz
ZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuc2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3RvcjsKICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTsK
ICAgICAgICB9LAoKICAgICAgICAvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yCiAgICAg
ICAgc2VsZWN0b3I6ICIiLAoKICAgICAgICAvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVy
eSBiZWluZyB1c2VkCiAgICAgICAganF1ZXJ5OiAiMS42LjQiLAoKICAgICAgICAvLyBUaGUgZGVm
YXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKICAgICAgICBsZW5ndGg6IDAsCgog
ICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVk
IGVsZW1lbnQgc2V0CiAgICAgICAgc2l6ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5sZW5ndGg7CiAgICAgICAgfSwKCiAgICAgICAgdG9BcnJheTogZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2xpY2UuY2FsbCggdGhpcywgMCApOwogICAgICAg
IH0sCgogICAgICAgIC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVu
dCBzZXQgT1IKICAgICAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMg
YSBjbGVhbiBhcnJheQogICAgICAgIGdldDogZnVuY3Rpb24oIG51bSApIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBudW0gPT0gbnVsbCA/CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1
cm4gYSAnY2xlYW4nIGFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9BcnJheSgp
IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBqdXN0IHRoZSBvYmplY3QKICAg
ICAgICAgICAgICAgICAgICAgICAgKCBudW0gPCAwID8gdGhpc1sgdGhpcy5sZW5ndGggKyBudW0g
XSA6IHRoaXNbIG51bSBdICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gVGFrZSBhbiBhcnJheSBv
ZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjawogICAgICAgIC8vIChyZXR1cm5p
bmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQogICAgICAgIHB1c2hTdGFjazogZnVuY3Rp
b24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEg
bmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0g
dGhpcy5jb25zdHJ1Y3RvcigpOwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXko
IGVsZW1zICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJldCwgZWxl
bXMgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkubWVyZ2UoIHJldCwgZWxlbXMgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNl
KQogICAgICAgICAgICAgICAgcmV0LnByZXZPYmplY3QgPSB0aGlzOwoKICAgICAgICAgICAgICAg
IHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0OwoKICAgICAgICAgICAgICAgIGlmICggbmFtZSA9
PT0gImZpbmQiICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQuc2VsZWN0b3IgPSB0aGlz
LnNlbGVjdG9yICsgKHRoaXMuc2VsZWN0b3IgPyAiICIgOiAiIikgKyBzZWxlY3RvcjsKICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAiLiIgKyBuYW1lICsgIigiICsgc2VsZWN0b3Ig
KyAiKSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBu
ZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAg
ICAgfSwKCiAgICAgICAgLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGlu
IHRoZSBtYXRjaGVkIHNldC4KICAgICAgICAvLyAoWW91IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMg
d2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBpcwogICAgICAgIC8vIG9ubHkgdXNlZCBp
bnRlcm5hbGx5LikKICAgICAgICBlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2ssIGFyZ3MgKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7
CiAgICAgICAgfSwKCiAgICAgICAgcmVhZHk6IGZ1bmN0aW9uKCBmbiApIHsKICAgICAgICAgICAg
ICAgIC8vIEF0dGFjaCB0aGUgbGlzdGVuZXJzCiAgICAgICAgICAgICAgICBqUXVlcnkuYmluZFJl
YWR5KCk7CgogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjYWxsYmFjawogICAgICAgICAgICAg
ICAgcmVhZHlMaXN0LmRvbmUoIGZuICk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgfSwKCiAgICAgICAgZXE6IGZ1bmN0aW9uKCBpICkgewogICAgICAgICAgICAgICAgcmV0
dXJuIGkgPT09IC0xID8KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGljZSggaSApIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGljZSggaSwgK2kgKyAxICk7CiAgICAgICAg
fSwKCiAgICAgICAgZmlyc3Q6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZXEoIDAgKTsKICAgICAgICB9LAoKICAgICAgICBsYXN0OiBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVxKCAtMSApOwogICAgICAgIH0sCgogICAgICAgIHNsaWNl
OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xp
Y2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLAogICAgICAgICAgICAgICAgICAgICAgICAic2xp
Y2UiLCBzbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpICk7CiAgICAgICAgfSwKCiAgICAg
ICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7
CiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgfSwKCiAgICAgICAgZW5kOiBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1
Y3RvcihudWxsKTsKICAgICAgICB9LAoKICAgICAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHku
CiAgICAgICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpR
dWVyeSBtZXRob2QuCiAgICAgICAgcHVzaDogcHVzaCwKICAgICAgICBzb3J0OiBbXS5zb3J0LAog
ICAgICAgIHNwbGljZTogW10uc3BsaWNlCn07CgovLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRo
ZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCmpRdWVyeS5mbi5pbml0
LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKCmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5k
ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29w
eUlzQXJyYXksIGNsb25lLAogICAgICAgICAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8
IHt9LAogICAgICAgICAgICAgICAgaSA9IDEsCiAgICAgICAgICAgICAgICBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoLAogICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwoKICAgICAgICAvLyBI
YW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCiAgICAgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ID09
PSAiYm9vbGVhbiIgKSB7CiAgICAgICAgICAgICAgICBkZWVwID0gdGFyZ2V0OwogICAgICAgICAg
ICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OwogICAgICAgICAgICAgICAgLy8gc2tp
cCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldAogICAgICAgICAgICAgICAgaSA9IDI7CiAgICAg
ICAgfQoKICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBz
b21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKICAgICAgICBpZiAoIHR5cGVvZiB0YXJn
ZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5jdGlvbih0YXJnZXQpICkgewogICAgICAg
ICAgICAgICAgdGFyZ2V0ID0ge307CiAgICAgICAgfQoKICAgICAgICAvLyBleHRlbmQgalF1ZXJ5
IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKICAgICAgICBpZiAoIGxlbmd0
aCA9PT0gaSApIHsKICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXM7CiAgICAgICAgICAgICAg
ICAtLWk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAg
ICAgICAgICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMK
ICAgICAgICAgICAgICAgIGlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkgIT0gbnVsbCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdAogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0WyBuYW1lIF07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWN1
cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWlu
T2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KGNvcHkpKSApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3B5SXNBcnJh
eSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29w
eUlzQXJyYXkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpR
dWVyeS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4
dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiB0aGUgbW9kaWZp
ZWQgb2JqZWN0CiAgICAgICAgcmV0dXJuIHRhcmdldDsKfTsKCmpRdWVyeS5leHRlbmQoewogICAg
ICAgIG5vQ29uZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkgewogICAgICAgICAgICAgICAgaWYgKCB3
aW5kb3cuJCA9PT0galF1ZXJ5ICkgewogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuJCA9
IF8kOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGVlcCAmJiB3aW5k
b3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5q
UXVlcnkgPSBfalF1ZXJ5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1
c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4KICAgICAgICBpc1JlYWR5OiBmYWxzZSwK
CiAgICAgICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9y
IGJlZm9yZQogICAgICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCiAgICAg
ICAgcmVhZHlXYWl0OiAxLAoKICAgICAgICAvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkg
ZXZlbnQKICAgICAgICBob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkgewogICAgICAgICAgICAg
ICAgaWYgKCBob2xkICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHlXYWl0
Kys7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkucmVhZHkoIHRydWUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAv
LyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5CiAgICAgICAgcmVhZHk6IGZ1bmN0aW9uKCB3
YWl0ICkgewogICAgICAgICAgICAgICAgLy8gRWl0aGVyIGEgcmVsZWFzZWQgaG9sZCBvciBhbiBE
T01yZWFkeS9sb2FkIGV2ZW50IGFuZCBub3QgeWV0IHJlYWR5CiAgICAgICAgICAgICAgICBpZiAo
ICh3YWl0ID09PSB0cnVlICYmICEtLWpRdWVyeS5yZWFkeVdhaXQpIHx8ICh3YWl0ICE9PSB0cnVl
ICYmICFqUXVlcnkuaXNSZWFkeSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSBib2R5IGV4aXN0cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVy
emVhbG91cyAodGlja2V0ICM1NDQzKS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZG9j
dW1lbnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0
VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeQog
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3Jl
bWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHdh
aXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4
ZWN1dGUKICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1
bWVudCwgWyBqUXVlcnkgXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBh
bnkgYm91bmQgcmVhZHkgZXZlbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5
LmZuLnRyaWdnZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBk
b2N1bWVudCApLnRyaWdnZXIoICJyZWFkeSIgKS51bmJpbmQoICJyZWFkeSIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGJp
bmRSZWFkeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIHJlYWR5TGlzdCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5fRGVmZXJyZWQoKTsKCiAgICAgICAgICAgICAg
ICAvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRl
ciB0aGUKICAgICAgICAgICAgICAgIC8vIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJy
ZWQuCiAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0
ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNs
eSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeQogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTW96aWxsYSwgT3BlcmEgYW5kIHdl
YmtpdCBuaWdodGxpZXMgY3VycmVudGx5IHN1cHBvcnQgdGhpcyBldmVudAogICAgICAgICAgICAg
ICAgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29u
dGVudExvYWRlZCwgZmFsc2UgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgZmFsbGJh
Y2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCiAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAibG9hZCIsIGpRdWVyeS5yZWFkeSwg
ZmFsc2UgKTsKCiAgICAgICAgICAgICAgICAvLyBJZiBJRSBldmVudCBtb2RlbCBpcyB1c2VkCiAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLAogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBtYXliZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMK
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoICJvbnJlYWR5c3Rh
dGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVkICk7CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawogICAg
ICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYXR0YWNoRXZlbnQoICJvbmxvYWQiLCBqUXVlcnku
cmVhZHkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIElFIGFuZCBub3QgYSBmcmFt
ZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51YWxseSBjaGVjayB0byBzZWUgaWYg
dGhlIGRvY3VtZW50IGlzIHJlYWR5CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3BsZXZl
bCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHdpbmRvdy5mcmFtZUVsZW1lbnQgPT0gbnVsbDsK
ICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQoKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgJiYgdG9wbGV2ZWwg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9TY3JvbGxDaGVjaygpOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gU2VlIHRlc3QvdW5pdC9jb3JlLmpzIGZvciBkZXRhaWxzIGNvbmNlcm5pbmcgaXNGdW5j
dGlvbi4KICAgICAgICAvLyBTaW5jZSB2ZXJzaW9uIDEuMywgRE9NIG1ldGhvZHMgYW5kIGZ1bmN0
aW9ucyBsaWtlIGFsZXJ0CiAgICAgICAgLy8gYXJlbid0IHN1cHBvcnRlZC4gVGhleSByZXR1cm4g
ZmFsc2Ugb24gSUUgKCMyOTY4KS4KICAgICAgICBpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09ICJmdW5jdGlvbiI7
CiAgICAgICAgfSwKCiAgICAgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbigg
b2JqICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09ICJhcnJh
eSI7CiAgICAgICAgfSwKCiAgICAgICAgLy8gQSBjcnVkZSB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYg
YW4gb2JqZWN0IGlzIGEgd2luZG93CiAgICAgICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICJvYmplY3QiICYm
ICJzZXRJbnRlcnZhbCIgaW4gb2JqOwogICAgICAgIH0sCgogICAgICAgIGlzTmFOOiBmdW5jdGlv
biggb2JqICkgewogICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA9PSBudWxsIHx8ICFyZGlnaXQu
dGVzdCggb2JqICkgfHwgaXNOYU4oIG9iaiApOwogICAgICAgIH0sCgogICAgICAgIHR5cGU6IGZ1
bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqID09IG51bGwgPwogICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcoIG9iaiApIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbChvYmopIF0gfHwgIm9iamVjdCI7CiAgICAgICAg
fSwKCiAgICAgICAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAg
ICAgIC8vIE11c3QgYmUgYW4gT2JqZWN0LgogICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvZiBJ
RSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiB0aGUgY29uc3RydWN0b3Ig
cHJvcGVydHkuCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBET00gbm9kZXMgYW5k
IHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3VnaCwgYXMgd2VsbAogICAgICAgICAgICAg
ICAgaWYgKCAhb2JqIHx8IGpRdWVyeS50eXBlKG9iaikgIT09ICJvYmplY3QiIHx8IG9iai5ub2Rl
VHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJ5IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBt
dXN0IGJlIE9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9iai5jb25zdHJ1Y3Rv
ciAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoYXNPd24uY2FsbChvYmosICJj
b25zdHJ1Y3RvciIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWhhc093bi5j
YWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICJpc1Byb3RvdHlwZU9mIikgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSUU4LDkgV2lsbCB0aHJvdyBleGNlcHRpb25zIG9uIGNlcnRhaW4gaG9zdCBv
YmplY3RzICM5ODk3CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVy
YXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCwKICAgICAgICAgICAgICAgIC8vIGlmIGxhc3Qg
b25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duLgoKICAgICAgICAgICAgICAg
IHZhciBrZXk7CiAgICAgICAgICAgICAgICBmb3IgKCBrZXkgaW4gb2JqICkge30KCiAgICAgICAg
ICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwoIG9iaiwga2V5
ICk7CiAgICAgICAgfSwKCiAgICAgICAgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsK
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBuYW1lIGluIG9iaiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgfSwKCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7
CiAgICAgICAgICAgICAgICB0aHJvdyBtc2c7CiAgICAgICAgfSwKCiAgICAgICAgcGFyc2VKU09O
OiBmdW5jdGlvbiggZGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGRhdGEgIT09
ICJzdHJpbmciIHx8ICFkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbGVhZGlu
Zy90cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgKElFIGNhbid0IGhhbmRsZSBpdCkKICAg
ICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkudHJpbSggZGF0YSApOwoKICAgICAgICAgICAgICAg
IC8vIEF0dGVtcHQgdG8gcGFyc2UgdXNpbmcgdGhlIG5hdGl2ZSBKU09OIHBhcnNlciBmaXJzdAog
ICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAmJiB3aW5kb3cuSlNPTi5wYXJzZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5KU09OLnBhcnNlKCBkYXRhICk7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNv
bWluZyBkYXRhIGlzIGFjdHVhbCBKU09OCiAgICAgICAgICAgICAgICAvLyBMb2dpYyBib3Jyb3dl
ZCBmcm9tIGh0dHA6Ly9qc29uLm9yZy9qc29uMi5qcwogICAgICAgICAgICAgICAgaWYgKCBydmFs
aWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxpZGVzY2FwZSwgIkAiICkKICAgICAgICAg
ICAgICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZHRva2VucywgIl0iICkKICAgICAgICAgICAg
ICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAobmV3IEZ1bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkpKCk7
CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxp
ZCBKU09OOiAiICsgZGF0YSApOwogICAgICAgIH0sCgogICAgICAgIC8vIENyb3NzLWJyb3dzZXIg
eG1sIHBhcnNpbmcKICAgICAgICBwYXJzZVhNTDogZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAgICAg
ICAgICAgICB2YXIgeG1sLCB0bXA7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHdpbmRvdy5ET01QYXJzZXIgKSB7IC8vIFN0YW5kYXJkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3IERPTVBhcnNlcigpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEgLCAi
dGV4dC94bWwiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIElFCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoICJNaWNy
b3NvZnQuWE1MRE9NIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbC5hc3lu
YyA9ICJmYWxzZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sLmxvYWRYTUwo
IGRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRj
aCggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0gdW5kZWZpbmVkOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVt
ZW50IHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBYTUw6ICIg
KyBkYXRhICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4geG1sOwog
ICAgICAgIH0sCgogICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge30sCgogICAgICAgIC8vIEV2YWx1
YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CiAgICAgICAgLy8gV29ya2Fyb3VuZHMg
YmFzZWQgb24gZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCiAgICAgICAgLy8gaHR0cDovL3dlYmxv
Z3MuamF2YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2Ny
aXB0LWdsb2JhbC1jb250ZXh0CiAgICAgICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7
CiAgICAgICAgICAgICAgICBpZiAoIGRhdGEgJiYgcm5vdHdoaXRlLnRlc3QoIGRhdGEgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGV4ZWNTY3JpcHQgb24gSW50ZXJuZXQg
RXhwbG9yZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGFuIGFub255bW91cyBm
dW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJhdGhlciB0aGFuIGpRdWVyeSBpbiBGaXJlZm94CiAgICAgICAgICAgICAgICAgICAgICAg
ICggd2luZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93WyAiZXZhbCIgXS5jYWxsKCB3aW5kb3csIGRhdGEgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfSApKCBkYXRhICk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfSwKCiAgICAgICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5
IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwogICAgICAgIC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8g
aHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKICAgICAgICBjYW1lbENhc2U6IGZ1bmN0
aW9uKCBzdHJpbmcgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJt
c1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7CiAgICAg
ICAgfSwKCiAgICAgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b1VwcGVyQ2Fz
ZSgpID09PSBuYW1lLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gYXJncyBp
cyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQogICAgICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmplY3Qs
IGNhbGxiYWNrLCBhcmdzICkgewogICAgICAgICAgICAgICAgdmFyIG5hbWUsIGkgPSAwLAogICAg
ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBvYmplY3QubGVuZ3RoLAogICAgICAgICAgICAg
ICAgICAgICAgICBpc09iaiA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0Z1bmN0
aW9uKCBvYmplY3QgKTsKCiAgICAgICAgICAgICAgICBpZiAoIGFyZ3MgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaXNPYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggbmFtZSBpbiBvYmplY3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmplY3RbIG5hbWUgXSwgYXJncyApID09
PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNr
LmFwcGx5KCBvYmplY3RbIGkrKyBdLCBhcmdzICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBIHNwZWNp
YWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAogICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc09iaiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9iamVjdCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCgg
b2JqZWN0WyBuYW1lIF0sIG5hbWUsIG9iamVjdFsgbmFtZSBdICkgPT09IGZhbHNlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqZWN0WyBp
IF0sIGksIG9iamVjdFsgaSsrIF0gKSA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CiAgICAgICAgfSwKCiAgICAgICAgLy8gVXNlIG5hdGl2ZSBTdHJpbmcu
dHJpbSBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZQogICAgICAgIHRyaW06IHRyaW0gPwogICAg
ICAgICAgICAgICAgZnVuY3Rpb24oIHRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0ZXh0ID09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltLmNhbGwoIHRleHQgKTsKICAgICAg
ICAgICAgICAgIH0gOgoKICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2Ugb3VyIG93biB0
cmltbWluZyBmdW5jdGlvbmFsaXR5CiAgICAgICAgICAgICAgICBmdW5jdGlvbiggdGV4dCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiIgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKCB0cmltTGVmdCwgIiIgKS5yZXBsYWNlKCB0cmltUmln
aHQsICIiICk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAvLyByZXN1bHRzIGlzIGZvciBp
bnRlcm5hbCB1c2FnZSBvbmx5CiAgICAgICAgbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyYXksIHJl
c3VsdHMgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTsKCiAgICAg
ICAgICAgICAgICBpZiAoIGFycmF5ICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoZSB3aW5kb3csIHN0cmluZ3MgKGFuZCBmdW5jdGlvbnMpIGFsc28gaGF2ZSAnbGVuZ3Ro
JwogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZXh0cmEgdHlwZW9mIGZ1bmN0aW9uIGNo
ZWNrIGlzIHRvIHByZXZlbnQgY3Jhc2hlcwogICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBT
YWZhcmkgMiAoU2VlOiAjMzAzOSkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHdlYWtlZCBs
b2dpYyBzbGlnaHRseSB0byBoYW5kbGUgQmxhY2tiZXJyeSA0LjcgUmVnRXhwIGlzc3VlcyAjNjkz
MAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBhcnJheSAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcnJheS5sZW5ndGggPT0gbnVsbCB8fCB0
eXBlID09PSAic3RyaW5nIiB8fCB0eXBlID09PSAiZnVuY3Rpb24iIHx8IHR5cGUgPT09ICJyZWdl
eHAiIHx8IGpRdWVyeS5pc1dpbmRvdyggYXJyYXkgKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoLmNhbGwoIHJldCwgYXJyYXkgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2Uo
IHJldCwgYXJyYXkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfSwKCiAgICAgICAgaW5BcnJh
eTogZnVuY3Rpb24oIGVsZW0sIGFycmF5ICkgewogICAgICAgICAgICAgICAgaWYgKCAhYXJyYXkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoIGluZGV4T2YgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleE9mLmNhbGwoIGFycmF5LCBlbGVtICk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcnJheVsgaSBd
ID09PSBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOwogICAgICAgIH0sCgogICAgICAgIG1lcmdlOiBmdW5jdGlvbiggZmlyc3Qs
IHNlY29uZCApIHsKICAgICAgICAgICAgICAgIHZhciBpID0gZmlyc3QubGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgICAgICBqID0gMDsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWNv
bmQubGVuZ3RoID09PSAibnVtYmVyIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGwgPSBzZWNvbmQubGVuZ3RoOyBqIDwgbDsgaisrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCBzZWNvbmRbal0gIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGorKyBdOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZmlyc3QubGVu
Z3RoID0gaTsKCiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3Q7CiAgICAgICAgfSwKCiAgICAg
ICAgZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ICkgewogICAgICAgICAgICAg
ICAgdmFyIHJldCA9IFtdLCByZXRWYWw7CiAgICAgICAgICAgICAgICBpbnYgPSAhIWludjsKCiAg
ICAgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0
ZW1zCiAgICAgICAgICAgICAgICAvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgog
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gISFjYWxs
YmFjayggZWxlbXNbIGkgXSwgaSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGludiAh
PT0gcmV0VmFsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBl
bGVtc1sgaSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIC8vIGFyZyBp
cyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQogICAgICAgIG1hcDogZnVuY3Rpb24oIGVsZW1zLCBj
YWxsYmFjaywgYXJnICkgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBrZXksIHJldCA9IFtd
LAogICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoID0gZWxlbXMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBqcXVlcnkg
b2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKICAgICAgICAgICAgICAgICAgICAgICAgaXNB
cnJheSA9IGVsZW1zIGluc3RhbmNlb2YgalF1ZXJ5IHx8IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYm
IHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYmICggKCBsZW5ndGggPiAwICYmIGVsZW1zWyAw
IF0gJiYgZWxlbXNbIGxlbmd0aCAtMSBdICkgfHwgbGVuZ3RoID09PSAwIHx8IGpRdWVyeS5pc0Fy
cmF5KCBlbGVtcyApICkgOwoKICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGFycmF5
LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpcgogICAgICAgICAgICAgICAg
aWYgKCBpc0FycmF5ICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5n
dGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxi
YWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LAogICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgga2V5IGluIGVsZW1zICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBrZXkg
XSwga2V5LCBhcmcgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCiAgICAgICAgICAgICAgICByZXR1cm4g
cmV0LmNvbmNhdC5hcHBseSggW10sIHJldCApOwogICAgICAgIH0sCgogICAgICAgIC8vIEEgZ2xv
YmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0cwogICAgICAgIGd1aWQ6IDEsCgogICAgICAgIC8v
IEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5
aW5nIGFueQogICAgICAgIC8vIGFyZ3VtZW50cy4KICAgICAgICBwcm94eTogZnVuY3Rpb24oIGZu
LCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gInN0
cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSBmblsgY29udGV4dCBd
OwogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gZm47CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZuID0gdG1wOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFF1
aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVj
CiAgICAgICAgICAgICAgICAvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwg
anVzdCByZXR1cm4gdW5kZWZpbmVkLgogICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVu
Y3Rpb24oIGZuICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2ltdWxhdGVkIGJpbmQKICAg
ICAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICksCiAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0LCBhcmdzLmNvbmNhdCggc2xp
Y2UuY2FsbCggYXJndW1lbnRzICkgKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAg
ICAgICAgICAgICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2Ft
ZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAogICAgICAgICAgICAg
ICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IHByb3h5Lmd1aWQgfHwgalF1ZXJ5
Lmd1aWQrKzsKCiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gTXV0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyB0byBhIGNv
bGxlY3Rpb24KICAgICAgICAvLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRl
ZCBpZiBpdCdzIGEgZnVuY3Rpb24KICAgICAgICBhY2Nlc3M6IGZ1bmN0aW9uKCBlbGVtcywga2V5
LCB2YWx1ZSwgZXhlYywgZm4sIHBhc3MgKSB7CiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0g
ZWxlbXMubGVuZ3RoOwoKICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgbWFueSBhdHRyaWJ1dGVz
CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgayBpbiBrZXkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmFjY2VzcyggZWxlbXMsIGssIGtleVtrXSwgZXhlYywgZm4s
IHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNl
dHRpbmcgb25lIGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZp
bmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBmdW5jdGlvbiB2
YWx1ZXMgZ2V0IGV4ZWN1dGVkIGlmIGV4ZWMgaXMgdHJ1ZQogICAgICAgICAgICAgICAgICAgICAg
ICBleGVjID0gIXBhc3MgJiYgZXhlYyAmJiBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSk7CgogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiggZWxlbXNbaV0sIGtleSwgZXhlYyA/
IHZhbHVlLmNhbGwoIGVsZW1zW2ldLCBpLCBmbiggZWxlbXNbaV0sIGtleSApICkgOiB2YWx1ZSwg
cGFzcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gR2V0
dGluZyBhbiBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgIHJldHVybiBsZW5ndGggPyBmbiggZWxl
bXNbMF0sIGtleSApIDogdW5kZWZpbmVkOwogICAgICAgIH0sCgogICAgICAgIG5vdzogZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKICAg
ICAgICB9LAoKICAgICAgICAvLyBVc2Ugb2YgalF1ZXJ5LmJyb3dzZXIgaXMgZnJvd25lZCB1cG9u
LgogICAgICAgIC8vIE1vcmUgZGV0YWlsczogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VdGlsaXRp
ZXMvalF1ZXJ5LmJyb3dzZXIKICAgICAgICB1YU1hdGNoOiBmdW5jdGlvbiggdWEgKSB7CiAgICAg
ICAgICAgICAgICB1YSA9IHVhLnRvTG93ZXJDYXNlKCk7CgogICAgICAgICAgICAgICAgdmFyIG1h
dGNoID0gcndlYmtpdC5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIHJvcGVy
YS5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIHJtc2llLmV4ZWMoIHVhICkg
fHwKICAgICAgICAgICAgICAgICAgICAgICAgdWEuaW5kZXhPZigiY29tcGF0aWJsZSIpIDwgMCAm
JiBybW96aWxsYS5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIFtdOwoKICAg
ICAgICAgICAgICAgIHJldHVybiB7IGJyb3dzZXI6IG1hdGNoWzFdIHx8ICIiLCB2ZXJzaW9uOiBt
YXRjaFsyXSB8fCAiMCIgfTsKICAgICAgICB9LAoKICAgICAgICBzdWI6IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgZnVuY3Rpb24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnlTdWIuZm4uaW5pdCggc2Vs
ZWN0b3IsIGNvbnRleHQgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGpRdWVy
eS5leHRlbmQoIHRydWUsIGpRdWVyeVN1YiwgdGhpcyApOwogICAgICAgICAgICAgICAgalF1ZXJ5
U3ViLnN1cGVyY2xhc3MgPSB0aGlzOwogICAgICAgICAgICAgICAgalF1ZXJ5U3ViLmZuID0galF1
ZXJ5U3ViLnByb3RvdHlwZSA9IHRoaXMoKTsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5mbi5j
b25zdHJ1Y3RvciA9IGpRdWVyeVN1YjsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5zdWIgPSB0
aGlzLnN1YjsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5mbi5pbml0ID0gZnVuY3Rpb24gaW5p
dCggc2VsZWN0b3IsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29u
dGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICYmICEoY29udGV4dCBpbnN0YW5jZW9m
IGpRdWVyeVN1YikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9
IGpRdWVyeVN1YiggY29udGV4dCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmZuLmluaXQuY2FsbCggdGhpcywgc2VsZWN0
b3IsIGNvbnRleHQsIHJvb3RqUXVlcnlTdWIgKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICBqUXVlcnlTdWIuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnlTdWIuZm47CiAgICAg
ICAgICAgICAgICB2YXIgcm9vdGpRdWVyeVN1YiA9IGpRdWVyeVN1Yihkb2N1bWVudCk7CiAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5U3ViOwogICAgICAgIH0sCgogICAgICAgIGJyb3dzZXI6
IHt9Cn0pOwoKLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwCmpRdWVyeS5lYWNoKCJCb29s
ZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxp
dCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7CiAgICAgICAgY2xhc3MydHlwZVsgIltvYmplY3Qg
IiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKfSk7Cgpicm93c2VyTWF0Y2gg
PSBqUXVlcnkudWFNYXRjaCggdXNlckFnZW50ICk7CmlmICggYnJvd3Nlck1hdGNoLmJyb3dzZXIg
KSB7CiAgICAgICAgalF1ZXJ5LmJyb3dzZXJbIGJyb3dzZXJNYXRjaC5icm93c2VyIF0gPSB0cnVl
OwogICAgICAgIGpRdWVyeS5icm93c2VyLnZlcnNpb24gPSBicm93c2VyTWF0Y2gudmVyc2lvbjsK
fQoKLy8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5icm93c2VyLndlYmtpdCBpbnN0ZWFkCmlmICgg
alF1ZXJ5LmJyb3dzZXIud2Via2l0ICkgewogICAgICAgIGpRdWVyeS5icm93c2VyLnNhZmFyaSA9
IHRydWU7Cn0KCi8vIElFIGRvZXNuJ3QgbWF0Y2ggbm9uLWJyZWFraW5nIHNwYWNlcyB3aXRoIFxz
CmlmICggcm5vdHdoaXRlLnRlc3QoICJceEEwIiApICkgewogICAgICAgIHRyaW1MZWZ0ID0gL15b
XHNceEEwXSsvOwogICAgICAgIHRyaW1SaWdodCA9IC9bXHNceEEwXSskLzsKfQoKLy8gQWxsIGpR
dWVyeSBvYmplY3RzIHNob3VsZCBwb2ludCBiYWNrIHRvIHRoZXNlCnJvb3RqUXVlcnkgPSBqUXVl
cnkoZG9jdW1lbnQpOwoKLy8gQ2xlYW51cCBmdW5jdGlvbnMgZm9yIHRoZSBkb2N1bWVudCByZWFk
eSBtZXRob2QKaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgewogICAgICAgIERPTUNv
bnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFs
c2UgKTsKICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOwogICAgICAgIH07Cgp9IGVsc2Ug
aWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHsKICAgICAgICBET01Db250ZW50TG9hZGVkID0g
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYm9keSBleGlzdHMsIGF0
IGxlYXN0LCBpbiBjYXNlIElFIGdldHMgYSBsaXR0bGUgb3ZlcnplYWxvdXMgKHRpY2tldCAjNTQ0
MykuCiAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0
ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCAib25y
ZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwogICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkucmVhZHkoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9CgovLyBU
aGUgRE9NIHJlYWR5IGNoZWNrIGZvciBJbnRlcm5ldCBFeHBsb3JlcgpmdW5jdGlvbiBkb1Njcm9s
bENoZWNrKCkgewogICAgICAgIGlmICggalF1ZXJ5LmlzUmVhZHkgKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy8gSWYg
SUUgaXMgdXNlZCwgdXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKICAgICAgICAgICAgICAg
IC8vIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCiAgICAgICAg
ICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKTsKICAgICAg
ICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ss
IDEgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIGFuZCBl
eGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucwogICAgICAgIGpRdWVyeS5yZWFkeSgpOwp9Cgpy
ZXR1cm4galF1ZXJ5OwoKfSkoKTsKCgp2YXIgLy8gUHJvbWlzZSBtZXRob2RzCiAgICAgICAgcHJv
bWlzZU1ldGhvZHMgPSAiZG9uZSBmYWlsIGlzUmVzb2x2ZWQgaXNSZWplY3RlZCBwcm9taXNlIHRo
ZW4gYWx3YXlzIHBpcGUiLnNwbGl0KCAiICIgKSwKICAgICAgICAvLyBTdGF0aWMgcmVmZXJlbmNl
IHRvIHNsaWNlCiAgICAgICAgc2xpY2VEZWZlcnJlZCA9IFtdLnNsaWNlOwoKalF1ZXJ5LmV4dGVu
ZCh7CiAgICAgICAgLy8gQ3JlYXRlIGEgc2ltcGxlIGRlZmVycmVkIChvbmUgY2FsbGJhY2tzIGxp
c3QpCiAgICAgICAgX0RlZmVycmVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciAv
LyBjYWxsYmFja3MgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBbXSwK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVkIFsgY29udGV4dCAsIGFyZ3MgXQogICAg
ICAgICAgICAgICAgICAgICAgICBmaXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8g
YXZvaWQgZmlyaW5nIHdoZW4gYWxyZWFkeSBkb2luZyBzbwogICAgICAgICAgICAgICAgICAgICAg
ICBmaXJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsYWcgdG8ga25vdyBpZiB0aGUg
ZGVmZXJyZWQgaGFzIGJlZW4gY2FuY2VsbGVkCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNl
bGxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGRlZmVycmVkIGl0c2VsZgogICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZCAgPSB7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGRvbmUoIGYxLCBmMiwgLi4uKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvbmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhY2FuY2VsbGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2ZpcmVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGZpcmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9maXJlZCA9IGZpcmVkOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVkID0gMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbGVuZ3RoID0gYXJncy5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gYXJnc1sgaSBdOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBqUXVlcnkudHlw
ZSggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdHlwZSA9PT0gImFycmF5IiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLmRvbmUu
YXBwbHkoIGRlZmVycmVkLCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggX2ZpcmVkICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBf
ZmlyZWRbIDAgXSwgX2ZpcmVkWyAxIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aXRoIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3MKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQs
IGFyZ3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFj
YW5jZWxsZWQgJiYgIWZpcmVkICYmICFmaXJpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBhcmdzIGFyZSBhdmFpbGFibGUg
KCM4NDIxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmdzID0gYXJncyB8fCBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyaW5nID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSggY2FsbGJhY2tzWyAwIF0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
a3Muc2hpZnQoKS5hcHBseSggY29udGV4dCwgYXJncyApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJlZCA9IFsgY29udGV4dCwgYXJncyBdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
cmluZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJl
c29sdmUgd2l0aCB0aGlzIGFzIGNvbnRleHQgYW5kIGdpdmVuIGFyZ3VtZW50cwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHRoaXMsIGFy
Z3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSGFzIHRoaXMgZGVmZXJyZWQgYmVlbiByZXNvbHZlZD8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhISggZmlyaW5nIHx8
IGZpcmVkICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuY2VsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmNlbGxlZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja3MgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7
CiAgICAgICAgfSwKCiAgICAgICAgLy8gRnVsbCBmbGVkZ2VkIGRlZmVycmVkICh0d28gY2FsbGJh
Y2tzIGxpc3QpCiAgICAgICAgRGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkgewogICAgICAgICAg
ICAgICAgdmFyIGRlZmVycmVkID0galF1ZXJ5Ll9EZWZlcnJlZCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICBmYWlsRGVmZXJyZWQgPSBqUXVlcnkuX0RlZmVycmVkKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgIHByb21pc2U7CiAgICAgICAgICAgICAgICAvLyBBZGQgZXJyb3JEZWZlcnJlZCBt
ZXRob2RzLCB0aGVuIGFuZCBwcm9taXNlCiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCBk
ZWZlcnJlZCwgewogICAgICAgICAgICAgICAgICAgICAgICB0aGVuOiBmdW5jdGlvbiggZG9uZUNh
bGxiYWNrcywgZmFpbENhbGxiYWNrcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5kb25lKCBkb25lQ2FsbGJhY2tzICkuZmFpbCggZmFpbENhbGxiYWNrcyApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBhbHdheXM6IGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5kb25lLmFw
cGx5KCBkZWZlcnJlZCwgYXJndW1lbnRzICkuZmFpbC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6
IGZhaWxEZWZlcnJlZC5kb25lLAogICAgICAgICAgICAgICAgICAgICAgICByZWplY3RXaXRoOiBm
YWlsRGVmZXJyZWQucmVzb2x2ZVdpdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdDog
ZmFpbERlZmVycmVkLnJlc29sdmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6
IGZhaWxEZWZlcnJlZC5pc1Jlc29sdmVkLAogICAgICAgICAgICAgICAgICAgICAgICBwaXBlOiBm
dW5jdGlvbiggZm5Eb25lLCBmbkZhaWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5jdGlvbiggbmV3RGVmZXIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBbIGZuRG9uZSwgInJl
c29sdmUiIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZhaWw6IFsgZm5GYWlsLCAicmVqZWN0IiBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LCBmdW5jdGlvbiggaGFuZGxlciwgZGF0YSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gZGF0YVsgMCBdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlv
biA9IGRhdGFbIDEgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm5lZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsg
aGFuZGxlciBdKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgPSBmbi5hcHBseSggdGhpcywg
YXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBy
ZXR1cm5lZC5wcm9taXNlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLnByb21pc2UoKS50
aGVuKCBuZXdEZWZlci5yZXNvbHZlLCBuZXdEZWZlci5yZWplY3QgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0RlZmVyWyBhY3Rpb24gKyAiV2l0aCIgXSggdGhpcyA9PT0gZGVm
ZXJyZWQgPyBuZXdEZWZlciA6IHRoaXMsIFsgcmV0dXJuZWQgXSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkWyBoYW5kbGVyIF0oIG5ld0RlZmVyWyBhY3Rpb24gXSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5wcm9t
aXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8g
dGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlOiBmdW5jdGlvbiggb2Jq
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2JqID09IG51bGwgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHByb21pc2UgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
cm9taXNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IG9iaiA9IHt9OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgaSA9IHByb21pc2VNZXRob2RzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSggaS0tICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqWyBwcm9taXNlTWV0aG9kc1tpXSBdID0gZGVmZXJyZWRbIHByb21pc2VNZXRo
b2RzW2ldIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG9ubHkgb25l
IGNhbGxiYWNrIGxpc3Qgd2lsbCBiZSB1c2VkCiAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25l
KCBmYWlsRGVmZXJyZWQuY2FuY2VsICkuZmFpbCggZGVmZXJyZWQuY2FuY2VsICk7CiAgICAgICAg
ICAgICAgICAvLyBVbmV4cG9zZSBjYW5jZWwKICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWZlcnJl
ZC5jYW5jZWw7CiAgICAgICAgICAgICAgICAvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55CiAgICAg
ICAgICAgICAgICBpZiAoIGZ1bmMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuY2Fs
bCggZGVmZXJyZWQsIGRlZmVycmVkICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICByZXR1cm4gZGVmZXJyZWQ7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRGVmZXJyZWQgaGVscGVy
CiAgICAgICAgd2hlbjogZnVuY3Rpb24oIGZpcnN0UGFyYW0gKSB7CiAgICAgICAgICAgICAgICB2
YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudCA9IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQg
PSBsZW5ndGggPD0gMSAmJiBmaXJzdFBhcmFtICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBmaXJzdFBh
cmFtLnByb21pc2UgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RQYXJh
bSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LkRlZmVycmVkKCk7CiAg
ICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRnVuYyggaSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmdzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlRGVmZXJy
ZWQuY2FsbCggYXJndW1lbnRzLCAwICkgOiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFN0cmFuZ2UgYnVnIGluIEZGNDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFZhbHVlcyBjaGFuZ2VkIG9udG8gdGhlIGFyZ3VtZW50cyBv
YmplY3Qgc29tZXRpbWVzIGVuZCB1cCBhcyB1bmRlZmluZWQgdmFsdWVzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRzaWRlIHRoZSAkLndoZW4gbWV0aG9kLiBD
bG9uaW5nIHRoZSBvYmplY3QgaW50byBhIGZyZXNoIGFycmF5IHNvbHZlcyB0aGUgaXNzdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRo
KCBkZWZlcnJlZCwgc2xpY2VEZWZlcnJlZC5jYWxsKCBhcmdzLCAwICkgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCA+IDEgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBhcmdzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZ3Nb
IGkgXS5wcm9taXNlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWyBpIF0ucHJvbWlzZSgpLnRoZW4oIHJlc29sdmVGdW5jKGkpLCBkZWZlcnJlZC5yZWpl
Y3QgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1jb3VudDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhY291bnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGRlZmVycmVkLCBhcmdzICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGRlZmVycmVkICE9PSBmaXJzdFBh
cmFtICkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVm
ZXJyZWQsIGxlbmd0aCA/IFsgZmlyc3RQYXJhbSBdIDogW10gKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CiAgICAgICAgfQp9KTsK
CgoKalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7CgogICAgICAgIHZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLAogICAgICAgICAgICAgICAgZG9jdW1lbnRFbGVt
ZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgICAgICAgICAgYWxsLAogICAg
ICAgICAgICAgICAgYSwKICAgICAgICAgICAgICAgIHNlbGVjdCwKICAgICAgICAgICAgICAgIG9w
dCwKICAgICAgICAgICAgICAgIGlucHV0LAogICAgICAgICAgICAgICAgbWFyZ2luRGl2LAogICAg
ICAgICAgICAgICAgc3VwcG9ydCwKICAgICAgICAgICAgICAgIGZyYWdtZW50LAogICAgICAgICAg
ICAgICAgYm9keSwKICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50UGFyZW50LAogICAgICAgICAg
ICAgICAgdGVzdEVsZW1lbnQsCiAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudFN0eWxlLAogICAg
ICAgICAgICAgICAgdGRzLAogICAgICAgICAgICAgICAgZXZlbnRzLAogICAgICAgICAgICAgICAg
ZXZlbnROYW1lLAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVk
OwoKICAgICAgICAvLyBQcmVsaW1pbmFyeSB0ZXN0cwogICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUo
ImNsYXNzTmFtZSIsICJ0Iik7CiAgICAgICAgZGl2LmlubmVySFRNTCA9ICIgICA8bGluay8+PHRh
YmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0
eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7CgoKICAgICAgICBhbGwgPSBk
aXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICIqIiApOwogICAgICAgIGEgPSBkaXYuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoICJhIiApWyAwIF07CgogICAgICAgIC8vIENhbid0IGdldCBiYXNpYyB0ZXN0
IHN1cHBvcnQKICAgICAgICBpZiAoICFhbGwgfHwgIWFsbC5sZW5ndGggfHwgIWEgKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4ge307CiAgICAgICAgfQoKICAgICAgICAvLyBGaXJzdCBiYXRjaCBv
ZiBzdXBwb3J0cyB0ZXN0cwogICAgICAgIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ICJzZWxlY3QiICk7CiAgICAgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwogICAgICAgIGlucHV0ID0gZGl2LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCAiaW5wdXQiIClbIDAgXTsKCiAgICAgICAgc3VwcG9ydCA9IHsKICAgICAgICAg
ICAgICAgIC8vIElFIHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlz
IHVzZWQKICAgICAgICAgICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlOiAoIGRpdi5maXJzdENoaWxk
Lm5vZGVUeXBlID09PSAzICksCgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGJv
ZHkgZWxlbWVudHMgYXJlbid0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQKICAgICAgICAgICAgICAg
IC8vIElFIHdpbGwgaW5zZXJ0IHRoZW0gaW50byBlbXB0eSB0YWJsZXMKICAgICAgICAgICAgICAg
IHRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGJvZHkiICkubGVuZ3RoLAoKICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6
ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTAogICAgICAgICAgICAgICAgLy8gVGhpcyByZXF1aXJl
cyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQogICAgICAgICAgICAgICAgaHRtbFNlcmlhbGl6ZTog
ISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJsaW5rIiApLmxlbmd0aCwKCiAgICAgICAgICAg
ICAgICAvLyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCiAgICAg
ICAgICAgICAgICAvLyAoSUUgdXNlcyAuY3NzVGV4dCBpbnN0ZWFkKQogICAgICAgICAgICAgICAg
c3R5bGU6IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpICksCgogICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgVVJMcyBhcmVuJ3QgbWFuaXB1bGF0ZWQKICAgICAgICAg
ICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRlZmF1bHQpCiAgICAgICAgICAgICAgICBo
cmVmTm9ybWFsaXplZDogKCBhLmdldEF0dHJpYnV0ZSggImhyZWYiICkgPT09ICIvYSIgKSwKCiAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhpc3RzCiAg
ICAgICAgICAgICAgICAvLyAoSUUgdXNlcyBmaWx0ZXIgaW5zdGVhZCkKICAgICAgICAgICAgICAg
IC8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgV2ViS2l0IGlzc3VlLiBTZWUgIzUxNDUK
ICAgICAgICAgICAgICAgIG9wYWNpdHk6IC9eMC41NSQvLnRlc3QoIGEuc3R5bGUub3BhY2l0eSAp
LAoKICAgICAgICAgICAgICAgIC8vIFZlcmlmeSBzdHlsZSBmbG9hdCBleGlzdGVuY2UKICAgICAg
ICAgICAgICAgIC8vIChJRSB1c2VzIHN0eWxlRmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKICAg
ICAgICAgICAgICAgIGNzc0Zsb2F0OiAhIWEuc3R5bGUuY3NzRmxvYXQsCgogICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvciBhIGNoZWNr
Ym94CiAgICAgICAgICAgICAgICAvLyB0aGF0IGl0IGRlZmF1bHRzIHRvICJvbiIuCiAgICAgICAg
ICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvICIiIGluc3RlYWQpCiAgICAgICAgICAgICAg
ICBjaGVja09uOiAoIGlucHV0LnZhbHVlID09PSAib24iICksCgogICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBoYXMgYSB3b3JraW5n
IHNlbGVjdGVkIHByb3BlcnR5LgogICAgICAgICAgICAgICAgLy8gKFdlYktpdCBkZWZhdWx0cyB0
byBmYWxzZSBpbnN0ZWFkIG9mIHRydWUsIElFIHRvbywgaWYgaXQncyBpbiBhbiBvcHRncm91cCkK
ICAgICAgICAgICAgICAgIG9wdFNlbGVjdGVkOiBvcHQuc2VsZWN0ZWQsCgogICAgICAgICAgICAg
ICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxDYXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywg
d2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQvc2V0QXR0cmlidXRlIChpZTYvNykKICAg
ICAgICAgICAgICAgIGdldFNldEF0dHJpYnV0ZTogZGl2LmNsYXNzTmFtZSAhPT0gInQiLAoKICAg
ICAgICAgICAgICAgIC8vIFdpbGwgYmUgZGVmaW5lZCBsYXRlcgogICAgICAgICAgICAgICAgc3Vi
bWl0QnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAgIGNoYW5nZUJ1YmJsZXM6IHRydWUsCiAg
ICAgICAgICAgICAgICBmb2N1c2luQnViYmxlczogZmFsc2UsCiAgICAgICAgICAgICAgICBkZWxl
dGVFeHBhbmRvOiB0cnVlLAogICAgICAgICAgICAgICAgbm9DbG9uZUV2ZW50OiB0cnVlLAogICAg
ICAgICAgICAgICAgaW5saW5lQmxvY2tOZWVkc0xheW91dDogZmFsc2UsCiAgICAgICAgICAgICAg
ICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKICAgICAgICAgICAgICAgIHJlbGlhYmxlTWFyZ2lu
UmlnaHQ6IHRydWUKICAgICAgICB9OwoKICAgICAgICAvLyBNYWtlIHN1cmUgY2hlY2tlZCBzdGF0
dXMgaXMgcHJvcGVybHkgY2xvbmVkCiAgICAgICAgaW5wdXQuY2hlY2tlZCA9IHRydWU7CiAgICAg
ICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0LmNsb25lTm9kZSggdHJ1ZSApLmNoZWNr
ZWQ7CgogICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxl
ZCBzZWxlY3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJsZWQKICAgICAgICAvLyAoV2ViS2l0IG1h
cmtzIHRoZW0gYXMgZGlzYWJsZWQpCiAgICAgICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKICAg
ICAgICBzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDsKCiAgICAgICAgLy8gVGVz
dCB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkZWxldGUgYW4gZXhwYW5kbyBmcm9tIGFuIGVs
ZW1lbnQKICAgICAgICAvLyBGYWlscyBpbiBJbnRlcm5ldCBFeHBsb3JlcgogICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICBkZWxldGUgZGl2LnRlc3Q7CiAgICAgICAgfSBjYXRjaCggZSApIHsK
ICAgICAgICAgICAgICAgIHN1cHBvcnQuZGVsZXRlRXhwYW5kbyA9IGZhbHNlOwogICAgICAgIH0K
CiAgICAgICAgaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVuZXIgJiYgZGl2LmF0dGFjaEV2ZW50ICYm
IGRpdi5maXJlRXZlbnQgKSB7CiAgICAgICAgICAgICAgICBkaXYuYXR0YWNoRXZlbnQoICJvbmNs
aWNrIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb25pbmcgYSBu
b2RlIHNob3VsZG4ndCBjb3B5IG92ZXIgYW55CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJv
dW5kIGV2ZW50IGhhbmRsZXJzIChJRSBkb2VzIHRoaXMpCiAgICAgICAgICAgICAgICAgICAgICAg
IHN1cHBvcnQubm9DbG9uZUV2ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgIGRpdi5jbG9uZU5vZGUoIHRydWUgKS5maXJlRXZlbnQoICJvbmNsaWNrIiApOwog
ICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgYSByYWRpbyBtYWludGFpbnMgaXQncyB2YWx1
ZQogICAgICAgIC8vIGFmdGVyIGJlaW5nIGFwcGVuZGVkIHRvIHRoZSBET00KICAgICAgICBpbnB1
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICAgICAgaW5wdXQudmFsdWUg
PSAidCI7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInJhZGlvIik7CiAgICAg
ICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsKCiAgICAgICAgaW5w
dXQuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwgImNoZWNrZWQiKTsKICAgICAgICBkaXYuYXBwZW5k
Q2hpbGQoIGlucHV0ICk7CiAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCk7CiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5maXJzdENoaWxk
ICk7CgogICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVj
dGx5IGluIGZyYWdtZW50cwogICAgICAgIHN1cHBvcnQuY2hlY2tDbG9uZSA9IGZyYWdtZW50LmNs
b25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkOwoKICAg
ICAgICBkaXYuaW5uZXJIVE1MID0gIiI7CgogICAgICAgIC8vIEZpZ3VyZSBvdXQgaWYgdGhlIFcz
QyBib3ggbW9kZWwgd29ya3MgYXMgZXhwZWN0ZWQKICAgICAgICBkaXYuc3R5bGUud2lkdGggPSBk
aXYuc3R5bGUucGFkZGluZ0xlZnQgPSAiMXB4IjsKCiAgICAgICAgYm9keSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCAiYm9keSIgKVsgMCBdOwogICAgICAgIC8vIFdlIHVzZSBvdXIg
b3duLCBpbnZpc2libGUsIGJvZHkgdW5sZXNzIHRoZSBib2R5IGlzIGFscmVhZHkgcHJlc2VudAog
ICAgICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgdXNlIGEgZGl2ICgjOTIzOSkKICAgICAgICB0ZXN0
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIGJvZHkgPyAiZGl2IiA6ICJib2R5IiAp
OwogICAgICAgIHRlc3RFbGVtZW50U3R5bGUgPSB7CiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5
OiAiaGlkZGVuIiwKICAgICAgICAgICAgICAgIHdpZHRoOiAwLAogICAgICAgICAgICAgICAgaGVp
Z2h0OiAwLAogICAgICAgICAgICAgICAgYm9yZGVyOiAwLAogICAgICAgICAgICAgICAgbWFyZ2lu
OiAwLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIm5vbmUiCiAgICAgICAgfTsKICAgICAg
ICBpZiAoIGJvZHkgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0ZXN0RWxlbWVu
dFN0eWxlLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAog
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAiLTEwMDBweCIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHRvcDogIi0xMDAwcHgiCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAg
ICAgZm9yICggaSBpbiB0ZXN0RWxlbWVudFN0eWxlICkgewogICAgICAgICAgICAgICAgdGVzdEVs
ZW1lbnQuc3R5bGVbIGkgXSA9IHRlc3RFbGVtZW50U3R5bGVbIGkgXTsKICAgICAgICB9CiAgICAg
ICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGRpdiApOwogICAgICAgIHRlc3RFbGVtZW50UGFy
ZW50ID0gYm9keSB8fCBkb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQu
aW5zZXJ0QmVmb3JlKCB0ZXN0RWxlbWVudCwgdGVzdEVsZW1lbnRQYXJlbnQuZmlyc3RDaGlsZCAp
OwoKICAgICAgICAvLyBDaGVjayBpZiBhIGRpc2Nvbm5lY3RlZCBjaGVja2JveCB3aWxsIHJldGFp
biBpdHMgY2hlY2tlZAogICAgICAgIC8vIHZhbHVlIG9mIHRydWUgYWZ0ZXIgYXBwZW5kZWQgdG8g
dGhlIERPTSAoSUU2LzcpCiAgICAgICAgc3VwcG9ydC5hcHBlbmRDaGVja2VkID0gaW5wdXQuY2hl
Y2tlZDsKCiAgICAgICAgc3VwcG9ydC5ib3hNb2RlbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0gMjsK
CiAgICAgICAgaWYgKCAiem9vbSIgaW4gZGl2LnN0eWxlICkgewogICAgICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5lLWJs
b2NrCiAgICAgICAgICAgICAgICAvLyBlbGVtZW50cyB3aGVuIHNldHRpbmcgdGhlaXIgZGlzcGxh
eSB0byAnaW5saW5lJyBhbmQgZ2l2aW5nCiAgICAgICAgICAgICAgICAvLyB0aGVtIGxheW91dAog
ICAgICAgICAgICAgICAgLy8gKElFIDwgOCBkb2VzIHRoaXMpCiAgICAgICAgICAgICAgICBkaXYu
c3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOwogICAgICAgICAgICAgICAgZGl2LnN0eWxlLnpvb20g
PSAxOwogICAgICAgICAgICAgICAgc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gKCBk
aXYub2Zmc2V0V2lkdGggPT09IDIgKTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBlbGVt
ZW50cyB3aXRoIGxheW91dCBzaHJpbmstd3JhcCB0aGVpciBjaGlsZHJlbgogICAgICAgICAgICAg
ICAgLy8gKElFIDYgZG9lcyB0aGlzKQogICAgICAgICAgICAgICAgZGl2LnN0eWxlLmRpc3BsYXkg
PSAiIjsKICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdiBzdHlsZT0nd2lkdGg6
NHB4Oyc+PC9kaXY+IjsKICAgICAgICAgICAgICAgIHN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9
ICggZGl2Lm9mZnNldFdpZHRoICE9PSAyICk7CiAgICAgICAgfQoKICAgICAgICBkaXYuaW5uZXJI
VE1MID0gIjx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRkaW5nOjA7Ym9yZGVyOjA7ZGlzcGxheTpu
b25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IjsKICAgICAgICB0ZHMgPSBkaXYuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoICJ0ZCIgKTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgY2Vs
bHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWlnaHQgd2hlbiB0aGV5IGFyZSBzZXQKICAgICAg
ICAvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBvdGhlciB2aXNpYmxlIHRh
YmxlIGNlbGxzIGluIGEKICAgICAgICAvLyB0YWJsZSByb3c7IGlmIHNvLCBvZmZzZXRXaWR0aC9I
ZWlnaHQgYXJlIG5vdCByZWxpYWJsZSBmb3IgdXNlIHdoZW4KICAgICAgICAvLyBkZXRlcm1pbmlu
ZyBpZiBhbiBlbGVtZW50IGhhcyBiZWVuIGhpZGRlbiBkaXJlY3RseSB1c2luZwogICAgICAgIC8v
IGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1c2Ugb2Zmc2V0cyBpZiBhIHBhcmVu
dCBlbGVtZW50IGlzCiAgICAgICAgLy8gaGlkZGVuOyBkb24gc2FmZXR5IGdvZ2dsZXMgYW5kIHNl
ZSBidWcgIzQ1MTIgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgogICAgICAgIC8vIChvbmx5IElFIDgg
ZmFpbHMgdGhpcyB0ZXN0KQogICAgICAgIGlzU3VwcG9ydGVkID0gKCB0ZHNbIDAgXS5vZmZzZXRI
ZWlnaHQgPT09IDAgKTsKCiAgICAgICAgdGRzWyAwIF0uc3R5bGUuZGlzcGxheSA9ICIiOwogICAg
ICAgIHRkc1sgMSBdLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CgogICAgICAgIC8vIENoZWNrIGlm
IGVtcHR5IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0CiAgICAgICAg
Ly8gKElFIDwgOCBmYWlsIHRoaXMgdGVzdCkKICAgICAgICBzdXBwb3J0LnJlbGlhYmxlSGlkZGVu
T2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7
CiAgICAgICAgZGl2LmlubmVySFRNTCA9ICIiOwoKICAgICAgICAvLyBDaGVjayBpZiBkaXYgd2l0
aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5CiAgICAgICAg
Ly8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVy
LiBGb3IgbW9yZQogICAgICAgIC8vIGluZm8gc2VlIGJ1ZyAjMzMzMwogICAgICAgIC8vIEZhaWxz
IGluIFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRsaWVzCiAgICAgICAgLy8gV2ViS2l0IEJ1
ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2lu
LXJpZ2h0CiAgICAgICAgaWYgKCBkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZh
dWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewogICAgICAgICAgICAgICAgbWFyZ2luRGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKICAgICAgICAgICAgICAgIG1hcmdpbkRp
di5zdHlsZS53aWR0aCA9ICIwIjsKICAgICAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS5tYXJn
aW5SaWdodCA9ICIwIjsKICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZCggbWFyZ2luRGl2
ICk7CiAgICAgICAgICAgICAgICBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgPQogICAgICAg
ICAgICAgICAgICAgICAgICAoIHBhcnNlSW50KCAoIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUoIG1hcmdpbkRpdiwgbnVsbCApIHx8IHsgbWFyZ2luUmlnaHQ6IDAgfSApLm1h
cmdpblJpZ2h0LCAxMCApIHx8IDAgKSA9PT0gMDsKICAgICAgICB9CgogICAgICAgIC8vIFJlbW92
ZSB0aGUgYm9keSBlbGVtZW50IHdlIGFkZGVkCiAgICAgICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1M
ID0gIiI7CiAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQucmVtb3ZlQ2hpbGQoIHRlc3RFbGVtZW50
ICk7CgogICAgICAgIC8vIFRlY2huaXF1ZSBmcm9tIEp1cml5IFpheXRzZXYKICAgICAgICAvLyBo
dHRwOi8vdGhpbmt3ZWIyLmNvbS9wcm9qZWN0cy9wcm90b3R5cGUvZGV0ZWN0aW5nLWV2ZW50LXN1
cHBvcnQtd2l0aG91dC1icm93c2VyLXNuaWZmaW5nLwogICAgICAgIC8vIFdlIG9ubHkgY2FyZSBh
Ym91dCB0aGUgY2FzZSB3aGVyZSBub24tc3RhbmRhcmQgZXZlbnQgc3lzdGVtcwogICAgICAgIC8v
IGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUuIFNob3J0LWNpcmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0
bwogICAgICAgIC8vIGF2b2lkIGFuIGV2YWwgY2FsbCAoaW4gc2V0QXR0cmlidXRlKSB3aGljaCBj
YW4gY2F1c2UgQ1NQCiAgICAgICAgLy8gdG8gZ28gaGF5d2lyZS4gU2VlOiBodHRwczovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1AKICAgICAgICBpZiAoIGRpdi5hdHRhY2hF
dmVudCApIHsKICAgICAgICAgICAgICAgIGZvciggaSBpbiB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHN1Ym1pdDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiAxLAogICAgICAg
ICAgICAgICAgICAgICAgICBmb2N1c2luOiAxCiAgICAgICAgICAgICAgICB9ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAib24iICsgaTsKICAgICAgICAgICAgICAgICAg
ICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBkaXYgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaXNTdXBwb3J0ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGl2LnNldEF0dHJpYnV0ZSggZXZlbnROYW1lLCAicmV0dXJuOyIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggdHlwZW9mIGRpdlsgZXZlbnRO
YW1lIF0gPT09ICJmdW5jdGlvbiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICBzdXBwb3J0WyBpICsgIkJ1YmJsZXMiIF0gPSBpc1N1cHBvcnRlZDsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIE51bGwgY29ubmVjdGVkIGVs
ZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCiAgICAgICAgdGVzdEVsZW1lbnQgPSBmcmFnbWVu
dCA9IHNlbGVjdCA9IG9wdCA9IGJvZHkgPSBtYXJnaW5EaXYgPSBkaXYgPSBpbnB1dCA9IG51bGw7
CgogICAgICAgIHJldHVybiBzdXBwb3J0Owp9KSgpOwoKLy8gS2VlcCB0cmFjayBvZiBib3hNb2Rl
bApqUXVlcnkuYm94TW9kZWwgPSBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbDsKCgoKCnZhciByYnJh
Y2UgPSAvXig/Olx7LipcfXxcWy4qXF0pJC8sCiAgICAgICAgcm11bHRpRGFzaCA9IC8oW0EtWl0p
L2c7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBjYWNoZToge30sCgogICAgICAgIC8vIFBsZWFz
ZSB1c2Ugd2l0aCBjYXV0aW9uCiAgICAgICAgdXVpZDogMCwKCiAgICAgICAgLy8gVW5pcXVlIGZv
ciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlCiAgICAgICAgLy8gTm9uLWRpZ2l0cyBy
ZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVqUXVlcnkKICAgICAgICBleHBhbmRvOiAialF1ZXJ5IiAr
ICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXEQvZywgIiIg
KSwKCiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBlbGVtZW50cyB0aHJvdyB1bmNhdGNoYWJsZSBl
eGNlcHRpb25zIGlmIHlvdQogICAgICAgIC8vIGF0dGVtcHQgdG8gYWRkIGV4cGFuZG8gcHJvcGVy
dGllcyB0byB0aGVtLgogICAgICAgIG5vRGF0YTogewogICAgICAgICAgICAgICAgImVtYmVkIjog
dHJ1ZSwKICAgICAgICAgICAgICAgIC8vIEJhbiBhbGwgb2JqZWN0cyBleGNlcHQgZm9yIEZsYXNo
ICh3aGljaCBoYW5kbGUgZXhwYW5kb3MpCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImNsc2lk
OkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsCiAgICAgICAgICAgICAgICAi
YXBwbGV0IjogdHJ1ZQogICAgICAgIH0sCgogICAgICAgIGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVt
ICkgewogICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVb
IGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwoKICAgICAg
ICAgICAgICAgIHJldHVybiAhIWVsZW0gJiYgIWlzRW1wdHlEYXRhT2JqZWN0KCBlbGVtICk7CiAg
ICAgICAgfSwKCiAgICAgICAgZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEsIHB2dCAv
KiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5h
Y2NlcHREYXRhKCBlbGVtICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdGhpc0NhY2hlLCByZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCiAgICAgICAg
ICAgICAgICAgICAgICAgIGdldEJ5TmFtZSA9IHR5cGVvZiBuYW1lID09PSAic3RyaW5nIiwKCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaGFuZGxlIERPTSBub2RlcyBhbmQg
SlMgb2JqZWN0cyBkaWZmZXJlbnRseSBiZWNhdXNlIElFNi03CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUgRE9N
LUpTIGJvdW5kYXJ5CiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5
cGUsCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBn
bG9iYWwgalF1ZXJ5IGNhY2hlOyBKUyBvYmplY3QgZGF0YSBpcwogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgb2JqZWN0IHNvIEdDIGNhbiBvY2N1ciBh
dXRvbWF0aWNhbGx5CiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gaXNOb2RlID8galF1
ZXJ5LmNhY2hlIDogZWxlbSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZGVmaW5p
bmcgYW4gSUQgZm9yIEpTIG9iamVjdHMgaWYgaXRzIGNhY2hlIGFscmVhZHkgZXhpc3RzIGFsbG93
cwogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY29kZSB0byBzaG9ydGN1dCBvbiB0aGUg
c2FtZSBwYXRoIGFzIGEgRE9NIG5vZGUgd2l0aCBubyBjYWNoZQogICAgICAgICAgICAgICAgICAg
ICAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBlbGVtWyBqUXVlcnku
ZXhwYW5kbyBdICYmIGpRdWVyeS5leHBhbmRvOwoKICAgICAgICAgICAgICAgIC8vIEF2b2lkIGRv
aW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRvIHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRh
IG9uIGFuCiAgICAgICAgICAgICAgICAvLyBvYmplY3QgdGhhdCBoYXMgbm8gZGF0YSBhdCBhbGwK
ICAgICAgICAgICAgICAgIGlmICggKCFpZCB8fCAocHZ0ICYmIGlkICYmIChjYWNoZVsgaWQgXSAm
JiAhY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0pKSkgJiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09
IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIWlkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3IHVuaXF1ZSBJRCBmb3IgZWFjaCBlbGVt
ZW50IHNpbmNlIHRoZWlyIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyB1cCBp
biB0aGUgZ2xvYmFsIGNhY2hlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNOb2RlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIGpRdWVyeS5leHBhbmRvIF0g
PSBpZCA9ICsralF1ZXJ5LnV1aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqUXVlcnkuZXhwYW5kbzsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm
ICggIWNhY2hlWyBpZCBdICkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9
IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9y
IDEuNSBPTkxZLiBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0IGlzIHNlcmlh
bGl6ZWQgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSlNPTi5zdHJpbmdpZnkKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNOb2RlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQW4g
b2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8galF1ZXJ5LmRhdGEgaW5zdGVhZCBvZiBhIGtleS92YWx1
ZSBwYWlyOyB0aGlzIGdldHMKICAgICAgICAgICAgICAgIC8vIHNoYWxsb3cgY29waWVkIG92ZXIg
b250byB0aGUgZXhpc3RpbmcgY2FjaGUKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIG5hbWUg
PT09ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHB2dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSA9IGpRdWVyeS5leHRlbmQoY2FjaGVbIGlkIF1b
IGludGVybmFsS2V5IF0sIG5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdID0galF1ZXJ5LmV4dGVu
ZChjYWNoZVsgaWQgXSwgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzQ2FjaGUgPSBjYWNoZVsgaWQgXTsKCiAgICAg
ICAgICAgICAgICAvLyBJbnRlcm5hbCBqUXVlcnkgZGF0YSBpcyBzdG9yZWQgaW4gYSBzZXBhcmF0
ZSBvYmplY3QgaW5zaWRlIHRoZSBvYmplY3QncyBkYXRhCiAgICAgICAgICAgICAgICAvLyBjYWNo
ZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9ucyBiZXR3ZWVuIGludGVybmFsIGRhdGEg
YW5kIHVzZXItZGVmaW5lZAogICAgICAgICAgICAgICAgLy8gZGF0YQogICAgICAgICAgICAgICAg
aWYgKCBwdnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXRoaXNDYWNoZVsgaW50
ZXJuYWxLZXkgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2FjaGVb
IGludGVybmFsS2V5IF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc0NhY2hlID0gdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIG5h
bWUgKSBdID0gZGF0YTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBUT0RP
OiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiAxLjYu
IFVzZXJzIHNob3VsZAogICAgICAgICAgICAgICAgLy8gbm90IGF0dGVtcHQgdG8gaW5zcGVjdCB0
aGUgaW50ZXJuYWwgZXZlbnRzIG9iamVjdCB1c2luZyBqUXVlcnkuZGF0YSwgYXMgdGhpcwogICAg
ICAgICAgICAgICAgLy8gaW50ZXJuYWwgZGF0YSBvYmplY3QgaXMgdW5kb2N1bWVudGVkIGFuZCBz
dWJqZWN0IHRvIGNoYW5nZS4KICAgICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gImV2ZW50cyIg
JiYgIXRoaXNDYWNoZVtuYW1lXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXNDYWNoZVsgaW50ZXJuYWxLZXkgXSAmJiB0aGlzQ2FjaGVbIGludGVybmFsS2V5IF0uZXZlbnRz
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBib3RoIGNv
bnZlcnRlZC10by1jYW1lbCBhbmQgbm9uLWNvbnZlcnRlZCBkYXRhIHByb3BlcnR5IG5hbWVzCiAg
ICAgICAgICAgICAgICAvLyBJZiBhIGRhdGEgcHJvcGVydHkgd2FzIHNwZWNpZmllZAogICAgICAg
ICAgICAgICAgaWYgKCBnZXRCeU5hbWUgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBG
aXJzdCBUcnkgdG8gZmluZCBhcy1pcyBwcm9wZXJ0eSBkYXRhCiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldCA9IHRoaXNDYWNoZVsgbmFtZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGVzdCBmb3IgbnVsbHx1bmRlZmluZWQgcHJvcGVydHkgZGF0YQogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHJldCA9PSBudWxsICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSAp
IF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIHJlbW92ZURh
dGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7
CiAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgdmFyIHRoaXNDYWNoZSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5j
ZSB0byBpbnRlcm5hbCBkYXRhIGNhY2hlIGtleQogICAgICAgICAgICAgICAgICAgICAgICBpbnRl
cm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAoKICAgICAgICAgICAgICAgICAgICAgICAgaXNOb2Rl
ID0gZWxlbS5ub2RlVHlwZSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBqUXVlcnku
ZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9
IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICAgICAgICAgICAg
ICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdIDogalF1ZXJ5LmV4cGFu
ZG87CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBubyBjYWNoZSBlbnRy
eSBmb3IgdGhpcyBvYmplY3QsIHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAgICAvLyBwdXJwb3Nl
IGluIGNvbnRpbnVpbmcKICAgICAgICAgICAgICAgIGlmICggIWNhY2hlWyBpZCBdICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgaWYgKCBuYW1lICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hlID0g
cHZ0ID8gY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0gOiBjYWNoZVsgaWQgXTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdGhpc0NhY2hlICkgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0IGludGVyb3BlcmFibGUgcmVtb3ZhbCBvZiBoeXBoZW5hdGVk
IG9yIGNhbWVsY2FzZWQga2V5cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IXRoaXNDYWNoZVsgbmFtZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0
aGlzQ2FjaGVbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlcmUgaXMgbm8gZGF0YSBsZWZ0IGluIHRoZSBjYWNoZSwgd2Ugd2FudCB0byBjb250aW51ZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVj
dCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWlzRW1wdHlEYXRhT2JqZWN0KHRoaXNDYWNoZSkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAg
ICAgICAgICBpZiAoIHB2dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hl
WyBpZCBdWyBpbnRlcm5hbEtleSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
ZGVzdHJveSB0aGUgcGFyZW50IGNhY2hlIHVubGVzcyB0aGUgaW50ZXJuYWwgZGF0YSBvYmplY3QK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFkIGJlZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBp
biBpdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdChjYWNo
ZVsgaWQgXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
dmFyIGludGVybmFsQ2FjaGUgPSBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXTsKCiAgICAgICAg
ICAgICAgICAvLyBCcm93c2VycyB0aGF0IGZhaWwgZXhwYW5kbyBkZWxldGlvbiBhbHNvIHJlZnVz
ZSB0byBkZWxldGUgZXhwYW5kb3Mgb24KICAgICAgICAgICAgICAgIC8vIHRoZSB3aW5kb3csIGJ1
dCBpdCB3aWxsIGFsbG93IGl0IG9uIGFsbCBvdGhlciBKUyBvYmplY3RzOyBvdGhlciBicm93c2Vy
cwogICAgICAgICAgICAgICAgLy8gZG9uJ3QgY2FyZQogICAgICAgICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgYGNhY2hlYCBpcyBub3QgYSB3aW5kb3cgb2JqZWN0ICMxMDA4MAogICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvIHx8ICFjYWNoZS5zZXRJbnRlcnZh
bCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOwogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSBu
dWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFdlIGRlc3Ryb3llZCB0
aGUgZW50aXJlIHVzZXIgY2FjaGUgYXQgb25jZSBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4KICAg
ICAgICAgICAgICAgIC8vIGl0ZXJhdGluZyB0aHJvdWdoIGVhY2gga2V5LCBidXQgd2UgbmVlZCB0
byBjb250aW51ZSB0byBwZXJzaXN0IGludGVybmFsCiAgICAgICAgICAgICAgICAvLyBkYXRhIGlm
IGl0IGV4aXN0ZWQKICAgICAgICAgICAgICAgIGlmICggaW50ZXJuYWxDYWNoZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEuNSBPTkxZLiBBdm9pZHMgZXhwb3Npbmcg
alF1ZXJ5CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGFkYXRhIG9uIHBsYWluIEpTIG9i
amVjdHMgd2hlbiB0aGUgb2JqZWN0IGlzIHNlcmlhbGl6ZWQgdXNpbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSlNPTi5zdHJpbmdpZnkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
aXNOb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdLnRv
SlNPTiA9IGpRdWVyeS5ub29wOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSA9IGludGVybmFsQ2FjaGU7
CgogICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGVsaW1pbmF0ZSB0aGUg
ZXhwYW5kbyBvbiB0aGUgbm9kZSB0byBhdm9pZAogICAgICAgICAgICAgICAgLy8gZmFsc2UgbG9v
a3VwcyBpbiB0aGUgY2FjaGUgZm9yIGVudHJpZXMgdGhhdCBubyBsb25nZXIgZXhpc3QKICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGlzTm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgZG9lcyBub3QgYWxsb3cgdXMgdG8gZGVsZXRlIGV4cGFuZG8gcHJvcGVydGllcyBmcm9t
IG5vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBub3IgZG9lcyBpdCBoYXZlIGEgcmVt
b3ZlQXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5vZGVzOwogICAgICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlc2UgY2FzZXMKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwog
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVtLnJlbW92ZUF0dHJpYnV0ZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgg
alF1ZXJ5LmV4cGFuZG8gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdID0gbnVsbDsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgog
ICAgICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KICAgICAgICBfZGF0YTogZnVuY3Rpb24o
IGVsZW0sIG5hbWUsIGRhdGEgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRhdGEo
IGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBBIG1ldGhv
ZCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBET00gbm9kZSBjYW4gaGFuZGxlIHRoZSBkYXRhIGV4cGFu
ZG8KICAgICAgICBhY2NlcHREYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAg
IGlmICggZWxlbS5ub2RlTmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNo
ID0galF1ZXJ5Lm5vRGF0YVsgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhKG1hdGNoID09PSB0cnVlIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFz
c2lkIikgIT09IG1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KfSk7CgpqUXVlcnku
Zm4uZXh0ZW5kKHsKICAgICAgICBkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKICAgICAg
ICAgICAgICAgIHZhciBkYXRhID0gbnVsbDsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBr
ZXkgPT09ICJ1bmRlZmluZWQiICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMu
bGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnku
ZGF0YSggdGhpc1swXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRo
aXNbMF0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
YXR0ciA9IHRoaXNbMF0uYXR0cmlidXRlcywgbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsg
aSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0gYXR0cltpXS5uYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBuYW1lLmluZGV4T2YoICJkYXRhLSIgKSA9PT0gMCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0g
alF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zdWJzdHJpbmcoNSkgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUF0dHIoIHRoaXNbMF0s
IG5hbWUsIGRhdGFbIG5hbWUgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKCiAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCB0eXBlb2Yga2V5ID09PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5ICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9
IGtleS5zcGxpdCgiLiIpOwogICAgICAgICAgICAgICAgcGFydHNbMV0gPSBwYXJ0c1sxXSA/ICIu
IiArIHBhcnRzWzFdIDogIiI7CgogICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdW5kZWZp
bmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy50cmlnZ2VySGFuZGxl
cigiZ2V0RGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgW3BhcnRzWzBdXSk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGludGVybmFsbHkgc3RvcmVkIGRhdGEgZmly
c3QKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgdGhp
cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVy
eS5kYXRhKCB0aGlzWzBdLCBrZXkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhID0gZGF0YUF0dHIoIHRoaXNbMF0sIGtleSwgZGF0YSApOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVk
ICYmIHBhcnRzWzFdID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEo
IHBhcnRzWzBdICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE7CgogICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHRo
aXMgPSBqUXVlcnkoIHRoaXMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3MgPSBbIHBhcnRzWzBdLCB2YWx1ZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkdGhpcy50cmlnZ2VySGFuZGxlciggInNldERhdGEiICsgcGFydHNbMV0gKyAiISIs
IGFyZ3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhp
cywga2V5LCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRy
aWdnZXJIYW5kbGVyKCAiY2hhbmdlRGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgYXJncyApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAg
ICAgICByZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJl
bW92ZURhdGEoIHRoaXMsIGtleSApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQp9KTsK
CmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7CiAgICAgICAgLy8gSWYgbm90
aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueQogICAgICAgIC8vIGRh
dGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQogICAgICAgIGlmICggZGF0YSA9PT0g
dW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CgogICAgICAgICAgICAgICAgdmFy
IG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJDEiICkudG9Mb3dl
ckNhc2UoKTsKCiAgICAgICAgICAgICAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUg
KTsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhID0gZGF0YSA9PT0gInRydWUiID8gdHJ1ZSA6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhID09PSAibnVsbCIgPyBudWxsIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAhalF1ZXJ5LmlzTmFOKCBkYXRhICkgPyBwYXJzZUZsb2F0KCBkYXRhICkgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmJyYWNlLnRlc3QoIGRhdGEg
KSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBlICkg
e30KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEg
c28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZGF0YSggZWxlbSwga2V5LCBkYXRhICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9CgogICAgICAgIHJldHVybiBkYXRhOwp9CgovLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBm
b3IgMS41IE9OTFkgdG8gYWxsb3cgb2JqZWN0cyB3aXRoIGEgc2luZ2xlIHRvSlNPTgovLyBwcm9w
ZXJ0eSB0byBiZSBjb25zaWRlcmVkIGVtcHR5IG9iamVjdHM7IHRoaXMgcHJvcGVydHkgYWx3YXlz
IGV4aXN0cyBpbgovLyBvcmRlciB0byBtYWtlIHN1cmUgSlNPTi5zdHJpbmdpZnkgZG9lcyBub3Qg
ZXhwb3NlIGludGVybmFsIG1ldGFkYXRhCmZ1bmN0aW9uIGlzRW1wdHlEYXRhT2JqZWN0KCBvYmog
KSB7CiAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gb2JqICkgewogICAgICAgICAgICAgICAgaWYg
KCBuYW1lICE9PSAidG9KU09OIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7Cn0K
CgoKCmZ1bmN0aW9uIGhhbmRsZVF1ZXVlTWFya0RlZmVyKCBlbGVtLCB0eXBlLCBzcmMgKSB7CiAg
ICAgICAgdmFyIGRlZmVyRGF0YUtleSA9IHR5cGUgKyAiZGVmZXIiLAogICAgICAgICAgICAgICAg
cXVldWVEYXRhS2V5ID0gdHlwZSArICJxdWV1ZSIsCiAgICAgICAgICAgICAgICBtYXJrRGF0YUtl
eSA9IHR5cGUgKyAibWFyayIsCiAgICAgICAgICAgICAgICBkZWZlciA9IGpRdWVyeS5kYXRhKCBl
bGVtLCBkZWZlckRhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApOwogICAgICAgIGlmICggZGVmZXIg
JiYKICAgICAgICAgICAgICAgICggc3JjID09PSAicXVldWUiIHx8ICFqUXVlcnkuZGF0YSggZWxl
bSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSApICYmCiAgICAgICAgICAgICAgICAo
IHNyYyA9PT0gIm1hcmsiIHx8ICFqUXVlcnkuZGF0YSggZWxlbSwgbWFya0RhdGFLZXksIHVuZGVm
aW5lZCwgdHJ1ZSApICkgKSB7CiAgICAgICAgICAgICAgICAvLyBHaXZlIHJvb20gZm9yIGhhcmQt
Y29kZWQgY2FsbGJhY2tzIHRvIGZpcmUgZmlyc3QKICAgICAgICAgICAgICAgIC8vIGFuZCBldmVu
dHVhbGx5IG1hcmsvcXVldWUgc29tZXRoaW5nIGVsc2Ugb24gdGhlIGVsZW1lbnQKICAgICAgICAg
ICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFqUXVlcnkuZGF0YSggZWxlbSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSAm
JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFqUXVlcnkuZGF0YSggZWxlbSwgbWFy
a0RhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBkZWZlckRhdGFLZXksIHRydWUgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlci5yZXNvbHZlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIDAgKTsKICAgICAgICB9Cn0KCmpRdWVy
eS5leHRlbmQoewoKICAgICAgICBfbWFyazogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CiAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAo
dHlwZSB8fCAiZngiKSArICJtYXJrIjsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRh
dGEoIGVsZW0sIHR5cGUsIChqUXVlcnkuZGF0YShlbGVtLHR5cGUsdW5kZWZpbmVkLHRydWUpIHx8
IDApICsgMSwgdHJ1ZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIF91
bm1hcms6IGZ1bmN0aW9uKCBmb3JjZSwgZWxlbSwgdHlwZSApIHsKICAgICAgICAgICAgICAgIGlm
ICggZm9yY2UgIT09IHRydWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBlbGVt
OwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZm9yY2U7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcmNlID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSB0eXBlICsgIm1hcmsiLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gZm9yY2UgPyAwIDogKCAoalF1ZXJ5LmRh
dGEoIGVsZW0sIGtleSwgdW5kZWZpbmVkLCB0cnVlKSB8fCAxICkgLSAxICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY291bnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgY291bnQsIHRydWUgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
cmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlUXVldWVNYXJrRGVmZXIoIGVsZW0sIHR5cGUsICJtYXJrIiApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAg
cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgewogICAgICAgICAgICAgICAgaWYg
KCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gKHR5cGUgfHwgImZ4Iikg
KyAicXVldWUiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IGpRdWVyeS5kYXRhKCBl
bGVtLCB0eXBlLCB1bmRlZmluZWQsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBh
IGxvb2t1cAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcSB8fCBqUXVlcnkuaXNBcnJheShkYXRhKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBqUXVlcnkuZGF0YSgg
ZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheShkYXRhKSwgdHJ1ZSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBxLnB1c2goIGRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHEgfHwgW107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZGVxdWV1
ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CiAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8
fCAiZngiOwoKICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwg
dHlwZSApLAogICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVyOwoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmeCBx
dWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWwKICAg
ICAgICAgICAgICAgIGlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIGlmICggZm4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIHByb2dy
ZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcXVldWUudW5zaGlmdCgiaW5wcm9ncmVzcyIpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKGVsZW0sIGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKGVsZW0sIHR5cGUp
OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoICFxdWV1ZS5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlIiwgdHJ1ZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVRdWV1ZU1hcmtEZWZlciggZWxlbSwgdHlwZSwgInF1ZXVlIiAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAg
ICAgICBxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CiAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiZngiOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBqUXVlcnkucXVldWUo
IHRoaXMsIHR5cGUsIGRhdGEgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9
PT0gImZ4IiAmJiBxdWV1ZVswXSAhPT0gImlucHJvZ3Jlc3MiICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgZGVx
dWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhp
cywgdHlwZSApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICAvLyBCYXNl
ZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uCiAg
ICAgICAgLy8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5
LWRlbGF5LwogICAgICAgIGRlbGF5OiBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsKICAgICAgICAg
ICAgICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzW3RpbWVdIHx8IHRpbWUg
OiB0aW1lOwogICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKCiAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBlbGVtID0gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZGVxdWV1ZSggZWxlbSwgdHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9LCB0aW1lICk7
CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGNsZWFyUXVldWU6IGZ1bmN0
aW9uKCB0eXBlICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwg
ImZ4IiwgW10gKTsKICAgICAgICB9LAogICAgICAgIC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQg
d2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKICAgICAgICAvLyBhcmUgZW1wdGllZCAoZngg
aXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKICAgICAgICBwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwg
b2JqZWN0ICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IHR5cGU7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwogICAgICAgICAgICAgICAgdmFyIGRlZmVyID0galF1
ZXJ5LkRlZmVycmVkKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gdGhpcywK
ICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVsZW1lbnRzLmxlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZlckRhdGFL
ZXkgPSB0eXBlICsgImRlZmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVEYXRhS2V5
ID0gdHlwZSArICJxdWV1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtEYXRhS2V5ID0g
dHlwZSArICJtYXJrIiwKICAgICAgICAgICAgICAgICAgICAgICAgdG1wOwogICAgICAgICAgICAg
ICAgZnVuY3Rpb24gcmVzb2x2ZSgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCAt
LWNvdW50ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2
ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUoIGktLSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCggdG1wID0galF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0s
IGRlZmVyRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgfHwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICggalF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIHF1ZXVlRGF0
YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIG1hcmtEYXRhS2V5
LCB1bmRlZmluZWQsIHRydWUgKSApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZGF0YSggZWxlbWVudHNbIGkgXSwgZGVmZXJEYXRhS2V5LCBqUXVlcnku
X0RlZmVycmVkKCksIHRydWUgKSApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAuZG9uZSggcmVzb2x2
ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXIucHJvbWlzZSgp
OwogICAgICAgIH0KfSk7CgoKCgp2YXIgcmNsYXNzID0gL1tcblx0XHJdL2csCiAgICAgICAgcnNw
YWNlID0gL1xzKy8sCiAgICAgICAgcnJldHVybiA9IC9cci9nLAogICAgICAgIHJ0eXBlID0gL14o
PzpidXR0b258aW5wdXQpJC9pLAogICAgICAgIHJmb2N1c2FibGUgPSAvXig/OmJ1dHRvbnxpbnB1
dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKICAgICAgICByY2xpY2thYmxlID0gL15hKD86
cmVhKT8kL2ksCiAgICAgICAgcmJvb2xlYW4gPSAvXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3lu
Y3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9w
ZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSwKICAgICAgICBub2RlSG9v
aywgYm9vbEhvb2s7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBhdHRyOiBmdW5jdGlvbigg
bmFtZSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhp
cywgbmFtZSwgdmFsdWUsIHRydWUsIGpRdWVyeS5hdHRyICk7CiAgICAgICAgfSwKCiAgICAgICAg
cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3Zl
QXR0ciggdGhpcywgbmFtZSApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAg
ICAKICAgICAgICBwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgbmFtZSwgdmFsdWUsIHRydWUsIGpRdWVyeS5w
cm9wICk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICByZW1vdmVQcm9wOiBmdW5jdGlvbigg
bmFtZSApIHsKICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8
IG5hbWU7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0cnkvY2F0Y2ggaGFuZGxlcyBjYXNlcyB3aGVyZSBJRSBi
YWxrcyAoc3VjaCBhcyByZW1vdmluZyBhIHByb3BlcnR5IG9uIHdpbmRvdykKICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBu
YW1lIF0gPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXNbIG5hbWUgXTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHt9CiAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBhZGRDbGFzczogZnVuY3Rpb24o
IHZhbHVlICkgewogICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZXMsIGksIGwsIGVsZW0sCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNldENsYXNzLCBjLCBjbDsKCiAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRo
aXMuY2xhc3NOYW1lKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0
cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxp
dCggcnNwYWNlICk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0gPSB0aGlzWyBpIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIWVsZW0uY2xhc3NOYW1lICYmIGNsYXNzTmFtZXMubGVuZ3RoID09PSAxICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNs
YXNzTmFtZSA9IHZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldENsYXNzID0gIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICI7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBjbGFzc05h
bWVzLmxlbmd0aDsgYyA8IGNsOyBjKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhfnNldENsYXNzLmluZGV4T2YoICIgIiAr
IGNsYXNzTmFtZXNbIGMgXSArICIgIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1l
c1sgYyBdICsgIiAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLmNsYXNzTmFtZSA9IGpRdWVyeS50cmltKCBzZXRDbGFzcyApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHJlbW92ZUNsYXNzOiBmdW5j
dGlvbiggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lcywgaSwgbCwgZWxl
bSwgY2xhc3NOYW1lLCBjLCBjbDsKCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCBqICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgg
dGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lKSAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB8fCB2YWx1
ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0g
KHZhbHVlIHx8ICIiKS5zcGxpdCggcnNwYWNlICk7CgogICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVtLmNsYXNzTmFtZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZSA9ICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSggcmNsYXNzLCAiICIgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggYyA9
IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNs
YXNzTmFtZS5yZXBsYWNlKCIgIiArIGNsYXNzTmFtZXNbIGMgXSArICIgIiwgIiAiKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGpRdWVy
eS50cmltKCBjbGFzc05hbWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLmNsYXNzTmFtZSA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgIH0sCgogICAgICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0
YXRlVmFsICkgewogICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlzQm9vbCA9IHR5cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4i
OwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3Mo
IHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5jbGFzc05hbWUsIHN0YXRlVmFsKSwgc3RhdGVWYWwg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gc3RhdGVWYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIHJzcGFjZSApOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBp
KysgXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVj
ayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwZXJhdGVkIGxpc3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2Vs
Zi5oYXNDbGFzcyggY2xhc3NOYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmWyBzdGF0ZSA/ICJhZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiIF0oIGNsYXNz
TmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09ICJi
b29sZWFuIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY2xh
c3NOYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Rv
cmUgY2xhc3NOYW1lIGlmIHNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMuY2xhc3NOYW1lICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0b2dnbGUgd2hvbGUgY2xhc3NOYW1lCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0g
ZmFsc2UgPyAiIiA6IGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiI7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0s
CgogICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAg
ICB2YXIgY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICI7CiAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYmICgiICIgKyB0aGlz
W2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5kZXhPZiggY2xhc3NO
YW1lICkgPiAtMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9LAoKICAgICAgICB2YWw6IGZ1bmN0aW9uKCB2
YWx1ZSApIHsKICAgICAgICAgICAgICAgIHZhciBob29rcywgcmV0LAogICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtID0gdGhpc1swXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZh
bEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBqUXVlcnkudmFsSG9va3Nb
IGVsZW0udHlwZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tz
ICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSkg
IT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBlbGVtLnZhbHVlOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldCA9PT0gInN0cmluZyIgPyAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBtb3N0IGNvbW1vbiBz
dHJpbmcgY2FzZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5y
ZXBsYWNlKHJyZXR1cm4sICIiKSA6IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVy
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPT0gbnVsbCA/ICIi
IDogcmV0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZh
ciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CgogICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHNlbGYgPSBqUXVlcnkodGhpcyksIHZhbDsKCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaXNGdW5jdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBzZWxmLnZhbCgpICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0g
dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5n
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsID09IG51bGwgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbCArPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCA9IGpRdWVyeS5tYXAodmFsLCBmdW5jdGlvbiAoIHZhbHVlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6
IHZhbHVlICsgIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5
LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBqUXVlcnkudmFsSG9v
a3NbIHRoaXMudHlwZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2V0IHJldHVy
bnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgaG9va3Muc2V0KCB0
aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KfSk7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAg
ICB2YWxIb29rczogewogICAgICAgICAgICAgICAgb3B0aW9uOiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXR0cmlidXRlcy52YWx1ZSBpcyB1bmRlZmluZWQgaW4gQmxhY2tiZXJyeSA0Ljcg
YnV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlcyAudmFsdWUuIFNlZSAj
NjkzMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLmF0dHJp
YnV0ZXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF2YWwg
fHwgdmFsLnNwZWNpZmllZCA/IGVsZW0udmFsdWUgOiBlbGVtLnRleHQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzZWxlY3Q6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGVsZW0ub3B0aW9ucywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVj
dC1vbmUiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHdhcyBz
ZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPCAwICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSBvbmUgPyBpbmRleCA6IDAsIG1h
eCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoOyBpIDwgbWF4OyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9u
c1sgaSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0
IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3Jv
dXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9uLnNl
bGVjdGVkICYmIChqUXVlcnkuc3VwcG9ydC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQg
OiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09PSBudWxsKSAmJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9uLnBh
cmVudE5vZGUuZGlzYWJsZWQgfHwgIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUs
ICJvcHRncm91cCIgKSkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5
KCBvcHRpb24gKS52YWwoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25lICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZhbHVlICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyBCdWcgIzI1NTEg
LS0gc2VsZWN0LnZhbCgpIGJyb2tlbiBpbiBJRSBhZnRlciBmb3JtLnJlc2V0KCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSAmJiAhdmFsdWVzLmxlbmd0aCAmJiBvcHRp
b25zLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBqUXVlcnkoIG9wdGlvbnNbIGluZGV4IF0gKS52YWwoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAg
ICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIpLmVhY2go
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnNlbGVjdGVkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSh0aGlzKS52YWwoKSwgdmFsdWVzICkg
Pj0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWVzOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKCiAgICAgICAgYXR0ckZuOiB7CiAgICAgICAgICAgICAgICB2YWw6IHRy
dWUsCiAgICAgICAgICAgICAgICBjc3M6IHRydWUsCiAgICAgICAgICAgICAgICBodG1sOiB0cnVl
LAogICAgICAgICAgICAgICAgdGV4dDogdHJ1ZSwKICAgICAgICAgICAgICAgIGRhdGE6IHRydWUs
CiAgICAgICAgICAgICAgICB3aWR0aDogdHJ1ZSwKICAgICAgICAgICAgICAgIGhlaWdodDogdHJ1
ZSwKICAgICAgICAgICAgICAgIG9mZnNldDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgCiAgICAg
ICAgYXR0ckZpeDogewogICAgICAgICAgICAgICAgLy8gQWx3YXlzIG5vcm1hbGl6ZSB0byBlbnN1
cmUgaG9vayB1c2FnZQogICAgICAgICAgICAgICAgdGFiaW5kZXg6ICJ0YWJJbmRleCIKICAgICAg
ICB9LAogICAgICAgIAogICAgICAgIGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwg
cGFzcyApIHsKICAgICAgICAgICAgICAgIHZhciBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CiAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIGRvbid0IGdldC9zZXQgYXR0cmlidXRlcyBv
biB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKICAgICAgICAgICAgICAgIGlmICgg
IWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgaWYgKCBwYXNzICYmIG5hbWUgaW4galF1ZXJ5LmF0dHJGbiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggZWxlbSApWyBuYW1lIF0oIHZh
bHVlICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8g
cHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKICAgICAgICAgICAgICAgIGlm
ICggISgiZ2V0QXR0cmlidXRlIiBpbiBlbGVtKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tzLAogICAgICAgICAgICAgICAgICAgICAg
ICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7CgogICAg
ICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBuYW1lIGlmIG5lZWRlZAogICAgICAgICAgICAg
ICAgaWYgKCBub3R4bWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnku
YXR0ckZpeFsgbmFtZSBdIHx8IG5hbWU7CgogICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9
IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWhvb2tzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBib29sSG9v
ayBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBob29rcyA9IGJvb2xIb29rOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBVc2Ugbm9kZUhvb2sgaWYgYXZhaWxhYmxlKCBJRTYvNyApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbm9kZUhvb2sgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IG5vZGVIb29rOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYg
bm90eG1sICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRl
ZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICIiICsgdmFsdWUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAm
JiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAgICB9IGVs
c2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5h
bWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVz
IHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuZGVmaW5lZCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBl
bGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lOwogICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0galF1ZXJ5LmF0dHJGaXhbIG5hbWUgXSB8fCBuYW1lOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUsICIiICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7CgogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgYm9vbGVhbiBhdHRy
aWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmJvb2xlYW4udGVzdCggbmFtZSAp
ICYmIChwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSkgaW4gZWxlbSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBwcm9wTmFtZSBdID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9
LAoKICAgICAgICBhdHRySG9va3M6IHsKICAgICAgICAgICAgICAgIHR5cGU6IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYWxsb3cgdGhlIHR5cGUgcHJvcGVydHkg
dG8gYmUgY2hhbmdlZCAoc2luY2UgaXQgY2F1c2VzIHByb2JsZW1zIGluIElFKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcnR5cGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYm
IGVsZW0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5lcnJvciggInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
cmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJiBqUXVlcnkubm9kZU5hbWUoZWxlbSwg
ImlucHV0IikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
ZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1ZSByZXNldHMg
dGhlIHZhbHVlIGluIElFNi05CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZXNldCB2YWx1ZSB0byBpdCdzIGRlZmF1bHQgaW4gY2FzZSB0eXBlIGlzIHNldCBhZnRl
ciB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBp
cyBmb3IgZWxlbWVudCBjcmVhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWwgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWw7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBmb3IgYmFjayBjb21wYXQK
ICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgbm9kZUhvb2sgZm9yIGJ1dHRvbiBlbGVtZW50cyBp
biBJRTYvNyAoIzE5NTQpCiAgICAgICAgICAgICAgICB2YWx1ZTogewogICAgICAgICAgICAgICAg
ICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0
dG9uIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGVIb29rLmdldCggZWxlbSwgbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSBpbiBlbGVt
ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUsIG5hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBu
b2RlSG9vayAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUhvb2suc2V0KCBlbGVt
LCB2YWx1ZSwgbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2VzIG5vdCByZXR1cm4gc28gdGhhdCBzZXRB
dHRyaWJ1dGUgaXMgYWxzbyB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKCiAgICAgICAgcHJvcEZpeDogewogICAgICAgICAgICAgICAgdGFiaW5k
ZXg6ICJ0YWJJbmRleCIsCiAgICAgICAgICAgICAgICByZWFkb25seTogInJlYWRPbmx5IiwKICAg
ICAgICAgICAgICAgICJmb3IiOiAiaHRtbEZvciIsCiAgICAgICAgICAgICAgICAiY2xhc3MiOiAi
Y2xhc3NOYW1lIiwKICAgICAgICAgICAgICAgIG1heGxlbmd0aDogIm1heExlbmd0aCIsCiAgICAg
ICAgICAgICAgICBjZWxsc3BhY2luZzogImNlbGxTcGFjaW5nIiwKICAgICAgICAgICAgICAgIGNl
bGxwYWRkaW5nOiAiY2VsbFBhZGRpbmciLAogICAgICAgICAgICAgICAgcm93c3BhbjogInJvd1Nw
YW4iLAogICAgICAgICAgICAgICAgY29sc3BhbjogImNvbFNwYW4iLAogICAgICAgICAgICAgICAg
dXNlbWFwOiAidXNlTWFwIiwKICAgICAgICAgICAgICAgIGZyYW1lYm9yZGVyOiAiZnJhbWVCb3Jk
ZXIiLAogICAgICAgICAgICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgog
ICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZh
bHVlICkgewogICAgICAgICAgICAgICAgdmFyIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKCiAgICAg
ICAgICAgICAgICAvLyBkb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBh
bmQgYXR0cmlidXRlIG5vZGVzCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09
PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHZhciByZXQsIGhvb2tzLAogICAgICAgICAgICAgICAgICAgICAgICBub3R4bWwgPSBuVHlwZSAh
PT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7CgogICAgICAgICAgICAgICAgaWYgKCBu
b3R4bWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeCBuYW1lIGFuZCBhdHRhY2gg
aG9va3MKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1l
IF0gfHwgbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkucHJvcEhv
b2tzWyBuYW1lIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYm
ICJzZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkp
ICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJldDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtWyBuYW1lIF0gPSB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQo
IGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1bIG5hbWUgXTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAg
ICAgcHJvcEhvb2tzOiB7CiAgICAgICAgICAgICAgICB0YWJJbmRleDogewogICAgICAgICAgICAg
ICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZSBjb3Jy
ZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgv
MDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1q
YXZhc2NyaXB0LwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVO
b2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNw
ZWNpZmllZCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUlu
dCggYXR0cmlidXRlTm9kZS52YWx1ZSwgMTAgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCByY2xpY2th
YmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLmhyZWYgPwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9KTsKCi8vIEFkZCB0aGUgdGFiaW5k
ZXggcHJvcEhvb2sgdG8gYXR0ckhvb2tzIGZvciBiYWNrLWNvbXBhdApqUXVlcnkuYXR0ckhvb2tz
LnRhYkluZGV4ID0galF1ZXJ5LnByb3BIb29rcy50YWJJbmRleDsKCi8vIEhvb2sgZm9yIGJvb2xl
YW4gYXR0cmlidXRlcwpib29sSG9vayA9IHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBu
YW1lICkgewogICAgICAgICAgICAgICAgLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGgg
Y29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8g
YXR0cmlidXRlIHByZXNlbmNlIHdoZXJlIHNvbWUgYm9vbGVhbnMgYXJlIG5vdCBzdXBwb3J0ZWQK
ICAgICAgICAgICAgICAgIHZhciBhdHRyTm9kZTsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkucHJvcCggZWxlbSwgbmFtZSApID09PSB0cnVlIHx8ICggYXR0ck5vZGUgPSBlbGVtLmdldEF0
dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIGF0dHJOb2RlLm5vZGVWYWx1ZSAhPT0gZmFsc2UgPwog
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkgOgogICAgICAgICAgICAg
ICAgICAgICAgICB1bmRlZmluZWQ7CiAgICAgICAgfSwKICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZTsKICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBpcyB0cnVl
IHNpbmNlIHdlIGtub3cgYXQgdGhpcyBwb2ludCBpdCdzIHR5cGUgYm9vbGVhbiBhbmQgbm90IGZh
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBib29sZWFuIGF0dHJpYnV0ZXMgdG8g
dGhlIHNhbWUgbmFtZSBhbmQgc2V0IHRoZSBET00gcHJvcGVydHkKICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggcHJvcE5hbWUgaW4gZWxlbSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBPbmx5IHNldCB0aGUgSURMIHNwZWNpZmljYWxseSBpZiBpdCBh
bHJlYWR5IGV4aXN0cyBvbiB0aGUgZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1bIHByb3BOYW1lIF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xv
d2VyQ2FzZSgpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbmFt
ZTsKICAgICAgICB9Cn07CgovLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcg
c29tZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQppZiAoICFqUXVlcnkuc3VwcG9y
dC5nZXRTZXRBdHRyaWJ1dGUgKSB7CiAgICAgICAgCiAgICAgICAgLy8gVXNlIHRoaXMgZm9yIGFu
eSBhdHRyaWJ1dGUgaW4gSUU2LzcKICAgICAgICAvLyBUaGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJ
RTYvNyBpc3N1ZQogICAgICAgIG5vZGVIb29rID0galF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsK
ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVsZW0u
Z2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1
cm4gdW5kZWZpbmVkIGlmIG5vZGVWYWx1ZSBpcyBlbXB0eSBzdHJpbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJldCAmJiByZXQubm9kZVZhbHVlICE9PSAiIiA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0Lm5vZGVWYWx1ZSA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAg
IHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgdGhlIGV4aXN0aW5nIG9yIGNyZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgbm9kZQog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBu
YW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJldCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoIG5hbWUg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZU5vZGUo
IHJldCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAocmV0Lm5vZGVWYWx1ZSA9IHZhbHVlICsgIiIpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgIH07CgogICAgICAgIC8vIFNldCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGF1dG8gaW5zdGVh
ZCBvZiAwIG9uIGVtcHR5IHN0cmluZyggQnVnICM4MTUwICkKICAgICAgICAvLyBUaGlzIGlzIGZv
ciByZW1vdmFscwogICAgICAgIGpRdWVyeS5lYWNoKFsgIndpZHRoIiwgImhlaWdodCIgXSwgZnVu
Y3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1l
IF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0sIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gIiIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgImF1dG8i
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9KTsKfQoKCi8vIFNvbWUgYXR0cmlidXRl
cyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElFCmlmICggIWpRdWVyeS5zdXBwb3J0LmhyZWZO
b3JtYWxpemVkICkgewogICAgICAgIGpRdWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiwgIndpZHRo
IiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgICAgICAgICBqUXVl
cnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBu
YW1lIF0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1
dGUoIG5hbWUsIDIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICB9KTsKfQoKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3R5
bGUgKSB7CiAgICAgICAgalF1ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKICAgICAgICAgICAgICAg
IGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVy
biB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2YgZW1wdHkgc3RyaW5nCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE5vcm1hbGl6ZSB0byBsb3dlcmNhc2Ugc2luY2UgSUUgdXBwZXJjYXNlcyBjc3Mg
cHJvcGVydHkgbmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc3R5bGUu
Y3NzVGV4dC50b0xvd2VyQ2FzZSgpIHx8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChlbGVtLnN0eWxlLmNzc1RleHQgPSAiIiArIHZhbHVlKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9Owp9CgovLyBTYWZhcmkgbWlzLXJlcG9ydHMgdGhlIGRl
ZmF1bHQgc2VsZWN0ZWQgcHJvcGVydHkgb2YgYW4gb3B0aW9uCi8vIEFjY2Vzc2luZyB0aGUgcGFy
ZW50J3Mgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eSBmaXhlcyBpdAppZiAoICFqUXVlcnkuc3VwcG9y
dC5vcHRTZWxlY3RlZCApIHsKICAgICAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0galF1
ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCwgewogICAgICAgICAgICAgICAg
Z2V0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVu
dCA9IGVsZW0ucGFyZW50Tm9kZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZWxlY3RlZEluZGV4
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpdCBh
bHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3MDEKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfSk7Cn0KCi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyCmlmICgg
IWpRdWVyeS5zdXBwb3J0LmNoZWNrT24gKSB7CiAgICAgICAgalF1ZXJ5LmVhY2goWyAicmFkaW8i
LCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgalF1ZXJ5LnZhbEhv
b2tzWyB0aGlzIF0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNl
IHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYgYSB2YWx1
ZSBpc24ndCBzcGVjaWZpZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS5nZXRBdHRyaWJ1dGUoInZhbHVlIikgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICB9KTsK
fQpqUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CiAgICAg
ICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkudmFsSG9v
a3NbIHRoaXMgXSwgewogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtLmNoZWNrZWQg
PSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7Cn0pOwoK
CgoKdmFyIHJuYW1lc3BhY2VzID0gL1wuKC4qKSQvLAogICAgICAgIHJmb3JtRWxlbXMgPSAvXig/
OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksCiAgICAgICAgcnBlcmlvZCA9IC9cLi9nLAogICAg
ICAgIHJzcGFjZXMgPSAvIC9nLAogICAgICAgIHJlc2NhcGUgPSAvW15cd1xzLnxgXS9nLAogICAg
ICAgIGZjbGVhbnVwID0gZnVuY3Rpb24oIG5tICkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5t
LnJlcGxhY2UocmVzY2FwZSwgIlxcJCYiKTsKICAgICAgICB9OwoKLyoKICogQSBudW1iZXIgb2Yg
aGVscGVyIGZ1bmN0aW9ucyB1c2VkIGZvciBtYW5hZ2luZyBldmVudHMuCiAqIE1hbnkgb2YgdGhl
IGlkZWFzIGJlaGluZCB0aGlzIGNvZGUgb3JpZ2luYXRlZCBmcm9tCiAqIERlYW4gRWR3YXJkcycg
YWRkRXZlbnQgbGlicmFyeS4KICovCmpRdWVyeS5ldmVudCA9IHsKCiAgICAgICAgLy8gQmluZCBh
biBldmVudCB0byBhbiBlbGVtZW50CiAgICAgICAgLy8gT3JpZ2luYWwgYnkgRGVhbiBFZHdhcmRz
CiAgICAgICAgYWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEgKSB7CiAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9
PT0gOCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggaGFuZGxlciA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIgPSByZXR1cm5GYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoICFoYW5kbGVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcg
IzcyMjkuIEZpeCByZWNvbW1lbmRlZCBieSBqZGFsdG9uCiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlT2Jq
SW4sIGhhbmRsZU9iajsKCiAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqSW4gPSBoYW5kbGVyOwogICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gYmVp
bmcgZXhlY3V0ZWQgaGFzIGEgdW5pcXVlIElECiAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVy
Lmd1aWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5n
dWlkKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSW5pdCB0aGUgZWxl
bWVudCdzIGV2ZW50IHN0cnVjdHVyZQogICAgICAgICAgICAgICAgdmFyIGVsZW1EYXRhID0galF1
ZXJ5Ll9kYXRhKCBlbGVtICk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm8gZWxlbURhdGEgaXMg
Zm91bmQgdGhlbiB3ZSBtdXN0IGJlIHRyeWluZyB0byBiaW5kIHRvIG9uZSBvZiB0aGUKICAgICAg
ICAgICAgICAgIC8vIGJhbm5lZCBub0RhdGEgZWxlbWVudHMKICAgICAgICAgICAgICAgIGlmICgg
IWVsZW1EYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cywKICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGU7CgogICAg
ICAgICAgICAgICAgaWYgKCAhZXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVt
RGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBpZiAoICFldmVudEhhbmRsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURh
dGEuaGFuZGxlID0gZXZlbnRIYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnku
ZXZlbnQudHJpZ2dlcigpIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdo
ZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5l
ZCIgJiYgKCFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSkgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBs
eSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1lbnRzICkgOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCBlbGVtIGFzIGEgcHJvcGVy
dHkgb2YgdGhlIGhhbmRsZSBmdW5jdGlvbgogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBw
cmV2ZW50IGEgbWVtb3J5IGxlYWsgd2l0aCBub24tbmF0aXZlIGV2ZW50cyBpbiBJRS4KICAgICAg
ICAgICAgICAgIGV2ZW50SGFuZGxlLmVsZW0gPSBlbGVtOwoKICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKICAgICAgICAgICAgICAg
IC8vIGpRdWVyeSguLi4pLmJpbmQoIm1vdXNlb3ZlciBtb3VzZW91dCIsIGZuKTsKICAgICAgICAg
ICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoIiAiKTsKCiAgICAgICAgICAgICAgICB2YXIgdHlw
ZSwgaSA9IDAsIG5hbWVzcGFjZXM7CgogICAgICAgICAgICAgICAgd2hpbGUgKCAodHlwZSA9IHR5
cGVzWyBpKysgXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGhhbmRs
ZU9iakluID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKHt9
LCBoYW5kbGVPYmpJbikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaGFuZGxl
cjogaGFuZGxlciwgZGF0YTogZGF0YSB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmFt
ZXNwYWNlZCBldmVudCBoYW5kbGVycwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUu
aW5kZXhPZigiLiIpID4gLTEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLnNsaWNlKDApLnNvcnQoKS5qb2lu
KCIuIik7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai50eXBlID0gdHlwZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlT2JqLmd1aWQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmd1aWQgPSBoYW5kbGVyLmd1aWQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY3Vy
cmVudCBsaXN0IG9mIGZ1bmN0aW9ucyBib3VuZCB0byB0aGlzIGV2ZW50CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8
IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBx
dWV1ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVycyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBhIHNwZWNpYWwgZXZl
bnQgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlIGFk
ZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZlbnQgaWYgdGhlIHNwZWNpYWwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNl
dHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmluZCB0aGUg
Z2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlz
dGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlLCBmYWxzZSApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0uYXR0YWNoRXZlbnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYXR0YWNoRXZl
bnQoICJvbiIgKyB0eXBlLCBldmVudEhhbmRsZSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFs
LmFkZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLmFkZC5jYWxs
KCBlbGVtLCBoYW5kbGVPYmogKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHRvIHRoZSBlbGVtZW50
J3MgaGFuZGxlciBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnB1c2goIGhh
bmRsZU9iaiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGlj
aCBldmVudHMgaGF2ZSBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBOdWxsaWZ5IGVsZW0gdG8gcHJldmVudCBt
ZW1vcnkgbGVha3MgaW4gSUUKICAgICAgICAgICAgICAgIGVsZW0gPSBudWxsOwogICAgICAgIH0s
CgogICAgICAgIGdsb2JhbDoge30sCgogICAgICAgIC8vIERldGFjaCBhbiBldmVudCBvciBzZXQg
b2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAogICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIGVsZW0s
IHR5cGVzLCBoYW5kbGVyLCBwb3MgKSB7CiAgICAgICAgICAgICAgICAvLyBkb24ndCBkbyBldmVu
dHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwogICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGhh
bmRsZXIgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gcmV0
dXJuRmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHJldCwgdHlw
ZSwgZm4sIGosIGkgPSAwLCBhbGwsIG5hbWVzcGFjZXMsIG5hbWVzcGFjZSwgc3BlY2lhbCwgZXZl
bnRUeXBlLCBoYW5kbGVPYmosIG9yaWdUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBlbGVt
RGF0YSA9IGpRdWVyeS5oYXNEYXRhKCBlbGVtICkgJiYgalF1ZXJ5Ll9kYXRhKCBlbGVtICksCiAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyA9IGVsZW1EYXRhICYmIGVsZW1EYXRhLmV2ZW50
czsKCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtRGF0YSB8fCAhZXZlbnRzICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gdHlwZXMgaXMgYWN0dWFsbHkgYW4gZXZlbnQgb2JqZWN0IGhlcmUKICAgICAgICAgICAg
ICAgIGlmICggdHlwZXMgJiYgdHlwZXMudHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlciA9IHR5cGVzLmhhbmRsZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzID0g
dHlwZXMudHlwZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBVbmJpbmQg
YWxsIGV2ZW50cyBmb3IgdGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgIGlmICggIXR5cGVzIHx8
IHR5cGVvZiB0eXBlcyA9PT0gInN0cmluZyIgJiYgdHlwZXMuY2hhckF0KDApID09PSAiLiIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzID0gdHlwZXMgfHwgIiI7CgogICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXMgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBl
dmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKICAgICAgICAgICAgICAgIC8vIGpRdWVyeSguLi4p
LnVuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOwogICAgICAgICAgICAgICAgdHlwZXMg
PSB0eXBlcy5zcGxpdCgiICIpOwoKICAgICAgICAgICAgICAgIHdoaWxlICggKHR5cGUgPSB0eXBl
c1sgaSsrIF0pICkgewogICAgICAgICAgICAgICAgICAgICAgICBvcmlnVHlwZSA9IHR5cGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IG51bGw7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbCA9IHR5cGUuaW5kZXhPZigiLiIpIDwgMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZXNwYWNlcyA9IFtdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhYWxsICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgZXZlbnQgaGFu
ZGxlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gdHlwZS5z
cGxpdCgiLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBuYW1lc3Bh
Y2VzLnNoaWZ0KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9
IG5ldyBSZWdFeHAoIihefFxcLikiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5tYXAoIG5hbWVzcGFjZXMuc2xpY2UoMCkuc29ydCgpLCBmY2xlYW51cCAp
LmpvaW4oIlxcLig/Oi4qXFwuKT8iKSArICIoXFwufCQpIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBd
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZXZlbnRUeXBlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVyICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgZXZlbnRUeXBlLmxlbmd0aDsgaisr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0g
ZXZlbnRUeXBlWyBqIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBhbGwgfHwgbmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LnJlbW92ZSggZWxlbSwgb3JpZ1R5cGUsIGhhbmRsZU9iai5oYW5kbGVyLCBqICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZS5zcGxpY2Uo
IGotLSwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwoK
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IHBvcyB8fCAwOyBqIDwgZXZlbnRUeXBl
Lmxlbmd0aDsgaisrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9i
aiA9IGV2ZW50VHlwZVsgaiBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGdpdmVuIGhhbmRsZXIgZm9yIHRoZSBn
aXZlbiB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFs
bCB8fCBuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBvcyA9PSBudWxsICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3ZlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwo
IGVsZW0sIGhhbmRsZU9iaiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3MgIT0gbnVsbCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyByZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIG5vIG1vcmUg
aGFuZGxlcnMgZXhpc3QKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudFR5cGUubGVu
Z3RoID09PSAwIHx8IHBvcyAhPSBudWxsICYmIGV2ZW50VHlwZS5sZW5ndGggPT09IDEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fCBz
cGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMgKSA9PT0gZmFsc2UgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQo
IGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbnVsbDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRzWyB0eXBlIF07CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAogICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBoYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGU7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZS5lbGVtID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzRW1wdHlPYmplY3QoIGVsZW1EYXRhICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIHVuZGVmaW5lZCwgdHJ1ZSApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAg
ICAgICAKICAgICAgICAvLyBFdmVudHMgdGhhdCBhcmUgc2FmZSB0byBzaG9ydC1jaXJjdWl0IGlm
IG5vIGhhbmRsZXJzIGFyZSBhdHRhY2hlZC4KICAgICAgICAvLyBOYXRpdmUgRE9NIGV2ZW50cyBz
aG91bGQgbm90IGJlIGFkZGVkLCB0aGV5IG1heSBoYXZlIGlubGluZSBoYW5kbGVycy4KICAgICAg
ICBjdXN0b21FdmVudDogewogICAgICAgICAgICAgICAgImdldERhdGEiOiB0cnVlLAogICAgICAg
ICAgICAgICAgInNldERhdGEiOiB0cnVlLAogICAgICAgICAgICAgICAgImNoYW5nZURhdGEiOiB0
cnVlCiAgICAgICAgfSwKCiAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBl
bGVtLCBvbmx5SGFuZGxlcnMgKSB7CiAgICAgICAgICAgICAgICAvLyBFdmVudCBvYmplY3Qgb3Ig
ZXZlbnQgdHlwZQogICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8IGV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gW10sCiAgICAgICAgICAgICAg
ICAgICAgICAgIGV4Y2x1c2l2ZTsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZigi
ISIpID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZSBldmVudHMg
dHJpZ2dlciBvbmx5IGZvciB0aGUgZXhhY3QgZXZlbnQgKG5vIG5hbWVzcGFjZXMpCiAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjbHVzaXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGUuaW5kZXhPZigiLiIpID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50
IHR5cGUgaW4gaGFuZGxlKCkKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHR5
cGUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG5hbWVzcGFjZXMu
c2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAoIWVsZW0gfHwgalF1ZXJ5LmV2ZW50
LmN1c3RvbUV2ZW50WyB0eXBlIF0pICYmICFqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGpRdWVyeSBoYW5kbGVycyBmb3IgdGhpcyBl
dmVudCB0eXBlLCBhbmQgaXQgY2FuJ3QgaGF2ZSBpbmxpbmUgaGFuZGxlcnMKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8v
IENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5
cGUgc3RyaW5nCiAgICAgICAgICAgICAgICBldmVudCA9IHR5cGVvZiBldmVudCA9PT0gIm9iamVj
dCIgPwogICAgICAgICAgICAgICAgICAgICAgICAvLyBqUXVlcnkuRXZlbnQgb2JqZWN0CiAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID8gZXZlbnQgOgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3QgbGl0ZXJhbAogICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSnVzdCB0aGUgZXZlbnQgdHlwZSAoc3RyaW5nKQogICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlICk7CgogICAgICAgICAgICAgICAgZXZlbnQudHlw
ZSA9IHR5cGU7CiAgICAgICAgICAgICAgICBldmVudC5leGNsdXNpdmUgPSBleGNsdXNpdmU7CiAg
ICAgICAgICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIi4iKTsKICAg
ICAgICAgICAgICAgIGV2ZW50Lm5hbWVzcGFjZV9yZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsg
bmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLik/IikgKyAiKFxcLnwkKSIpOwogICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VySGFuZGxlcigpIGFuZCBnbG9iYWwgZXZl
bnRzIGRvbid0IGJ1YmJsZSBvciBydW4gdGhlIGRlZmF1bHQgYWN0aW9uCiAgICAgICAgICAgICAg
ICBpZiAoIG9ubHlIYW5kbGVycyB8fCAhZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSGFu
ZGxlIGEgZ2xvYmFsIHRyaWdnZXIKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFN0b3AgdGF1bnRpbmcgdGhlIGRhdGEgY2FjaGU7
IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0YWNoIHRvIGRvY3VtZW50CiAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBqUXVlcnkuY2FjaGUsIGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVybmFsS2V5IHZhcmlhYmxl
IGlzIGp1c3QgdXNlZCB0byBtYWtlIGl0IGVhc2llciB0byBmaW5kCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYW5kIHBvdGVudGlhbGx5IGNoYW5nZSB0aGlzIHN0dWZmIGxhdGVy
OyBjdXJyZW50bHkgaXQganVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBv
aW50cyB0byBqUXVlcnkuZXhwYW5kbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJuYWxDYWNoZSA9IHRoaXNbIGludGVybmFsS2V5IF07CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnRlcm5hbENhY2hlICYmIGludGVybmFs
Q2FjaGUuZXZlbnRzICYmIGludGVybmFsQ2FjaGUuZXZlbnRzWyB0eXBlIF0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZXZl
bnQsIGRhdGEsIGludGVybmFsQ2FjaGUuaGFuZGxlLmVsZW0gKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8g
RG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKICAgICAgICAgICAgICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgLy8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCiAg
ICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBl
dmVudC50YXJnZXQgPSBlbGVtOwoKICAgICAgICAgICAgICAgIC8vIENsb25lIGFueSBpbmNvbWlu
ZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxp
c3QKICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBqUXVlcnkubWFrZUFycmF5
KCBkYXRhICkgOiBbXTsKICAgICAgICAgICAgICAgIGRhdGEudW5zaGlmdCggZXZlbnQgKTsKCiAg
ICAgICAgICAgICAgICB2YXIgY3VyID0gZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SUUgZG9lc24ndCBsaWtlIG1ldGhvZCBuYW1lcyB3aXRoIGEgY29sb24gKCMzNTMzLCAjODI3MikK
ICAgICAgICAgICAgICAgICAgICAgICAgb250eXBlID0gdHlwZS5pbmRleE9mKCI6IikgPCAwID8g
Im9uIiArIHR5cGUgOiAiIjsKCiAgICAgICAgICAgICAgICAvLyBGaXJlIGV2ZW50IG9uIHRoZSBj
dXJyZW50IGVsZW1lbnQsIHRoZW4gYnViYmxlIHVwIHRoZSBET00gdHJlZQogICAgICAgICAgICAg
ICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlID0galF1ZXJ5Ll9kYXRh
KCBjdXIsICJoYW5kbGUiICk7CgogICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50
VGFyZ2V0ID0gY3VyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmln
Z2VyIGFuIGlubGluZSBib3VuZCBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBv
bnR5cGUgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGN1ciApICYmIGN1clsgb250eXBlIF0gJiYgY3Vy
WyBvbnR5cGUgXS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVu
dCwgdGhlbiB0byB3aW5kb3cKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVu
dE5vZGUgfHwgY3VyLm93bmVyRG9jdW1lbnQgfHwgY3VyID09PSBldmVudC50YXJnZXQub3duZXJE
b2N1bWVudCAmJiB3aW5kb3c7CiAgICAgICAgICAgICAgICB9IHdoaWxlICggY3VyICYmICFldmVu
dC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm9ib2R5
IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdwogICAgICAgICAgICAgICAg
aWYgKCAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpR
dWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmNhbGwoIGVsZW0u
b3duZXJEb2N1bWVudCwgZXZlbnQgKSA9PT0gZmFsc2UpICYmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgISh0eXBlID09PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwg
ImEiICkpICYmIGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0
IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgYW4gLmlzRnVuY3Rpb24pKCkgY2hlY2sgaGVyZSBi
ZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJRTw5IGRpZXMgb24gZm9jdXMgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KSwgbWF5
IHdhbnQgdG8gcmV2aXNpdCBhIHRyeS9jYXRjaC4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBv
bnR5cGUgJiYgZWxlbVsgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4g
d2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9sZCA9IGVsZW1bIG9udHlwZSBdOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0g
PSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQudHJpZ2dlcmVkID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbVsgdHlwZSBdKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAo
IGllRXJyb3IgKSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9sZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBd
ID0gb2xkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OwogICAgICAgIH0sCgogICAgICAg
IGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewogICAgICAgICAgICAgICAgZXZlbnQgPSBqUXVl
cnkuZXZlbnQuZml4KCBldmVudCB8fCB3aW5kb3cuZXZlbnQgKTsKICAgICAgICAgICAgICAgIC8v
IFNuYXBzaG90IHRoZSBoYW5kbGVycyBsaXN0IHNpbmNlIGEgY2FsbGVkIGhhbmRsZXIgbWF5IGFk
ZC9yZW1vdmUgZXZlbnRzLgogICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gKChqUXVlcnku
X2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30pWyBldmVudC50eXBlIF0gfHwgW10pLnNsaWNl
KDApLAogICAgICAgICAgICAgICAgICAgICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAm
JiAhZXZlbnQubmFtZXNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMCApOwoKICAgICAgICAgICAgICAgIC8v
IFVzZSB0aGUgZml4LWVkIEV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUg
ZXZlbnQKICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBldmVudDsKICAgICAgICAgICAgICAgIGV2
ZW50LmN1cnJlbnRUYXJnZXQgPSB0aGlzOwoKICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0g
MCwgbCA9IGhhbmRsZXJzLmxlbmd0aDsgaiA8IGw7IGorKyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCAxKSBiZSBub24tZXhjbHVzaXZlIGFuZCBoYXZl
IG5vIG5hbWVzcGFjZSwgb3IKICAgICAgICAgICAgICAgICAgICAgICAgLy8gMikgaGF2ZSBuYW1l
c3BhY2UocykgYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50Lgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJ1bl9hbGwgfHwgZXZlbnQubmFtZXNwYWNlX3Jl
LnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBQYXNzIGluIGEgcmVmZXJlbmNlIHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGl0
c2VsZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvIHRoYXQgd2UgY2FuIGxh
dGVyIHJlbW92ZSBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRs
ZXIgPSBoYW5kbGVPYmouaGFuZGxlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
dmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3MgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgIT09IHVuZGVmaW5lZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9
IHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09
PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LmlzSW1tZWRp
YXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJl
dHVybiBldmVudC5yZXN1bHQ7CiAgICAgICAgfSwKCiAgICAgICAgcHJvcHM6ICJhbHRLZXkgYXR0
ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBjYW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVu
dFggY2xpZW50WSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBm
cm9tRWxlbWVudCBoYW5kbGVyIGtleUNvZGUgbGF5ZXJYIGxheWVyWSBtZXRhS2V5IG5ld1ZhbHVl
IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRl
ZFRhcmdldCBzY3JlZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdG9FbGVt
ZW50IHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAiKSwKCiAgICAgICAgZml4OiBmdW5j
dGlvbiggZXZlbnQgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5k
byBdICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgLy8gc3RvcmUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBl
dmVudCBvYmplY3QKICAgICAgICAgICAgICAgIC8vIGFuZCAiY2xvbmUiIHRvIHNldCByZWFkLW9u
bHkgcHJvcGVydGllcwogICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudDsK
ICAgICAgICAgICAgICAgIGV2ZW50ID0galF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7Cgog
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSB0aGlzLnByb3BzLmxlbmd0aCwgcHJvcDsgaTsg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSB0aGlzLnByb3BzWyAtLWkgXTsKICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3Ag
XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBGaXggdGFyZ2V0IHByb3Bl
cnR5LCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnRhcmdldCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZXMgIzE5MjUgd2hlcmUgc3JjRWxlbWVudCBt
aWdodCBub3QgYmUgZGVmaW5lZCBlaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
dGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudCB8fCBkb2N1bWVudDsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0YXJnZXQgaXMgYSB0ZXh0bm9kZSAoc2FmYXJp
KQogICAgICAgICAgICAgICAgaWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnRO
b2RlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCByZWxhdGVkVGFy
Z2V0LCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnJlbGF0ZWRUYXJn
ZXQgJiYgZXZlbnQuZnJvbUVsZW1lbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50
LnJlbGF0ZWRUYXJnZXQgPSBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0ID8gZXZl
bnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9Z
IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgaWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIGV2
ZW50LmNsaWVudFggIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50
RG9jdW1lbnQgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBldmVudERvY3VtZW50LmRvY3VtZW50RWxl
bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZXZlbnREb2N1bWVu
dC5ib2R5OwoKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucGFnZVggPSBldmVudC5jbGll
bnRYICsgKGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8
fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQg
fHwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VZID0gZXZlbnQuY2xpZW50
WSArIChkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwg
MCkgLSAoZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8
IDApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3Ig
a2V5IGV2ZW50cwogICAgICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIChl
dmVudC5jaGFyQ29kZSAhPSBudWxsIHx8IGV2ZW50LmtleUNvZGUgIT0gbnVsbCkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/
IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAvLyBBZGQgbWV0YUtleSB0byBub24tTWFjIGJyb3dzZXJzICh1c2UgY3RybCBm
b3IgUEMncyBhbmQgTWV0YSBmb3IgTWFjcykKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50Lm1l
dGFLZXkgJiYgZXZlbnQuY3RybEtleSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
bWV0YUtleSA9IGV2ZW50LmN0cmxLZXk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09
PSByaWdodAogICAgICAgICAgICAgICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVk
LCBzbyBkb24ndCB1c2UgaXQKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGV2
ZW50LmJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBldmVu
dC53aGljaCA9IChldmVudC5idXR0b24gJiAxID8gMSA6ICggZXZlbnQuYnV0dG9uICYgMiA/IDMg
OiAoIGV2ZW50LmJ1dHRvbiAmIDQgPyAyIDogMCApICkpOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHJldHVybiBldmVudDsKICAgICAgICB9LAoKICAgICAgICAvLyBEZXByZWNh
dGVkLCB1c2UgalF1ZXJ5Lmd1aWQgaW5zdGVhZAogICAgICAgIGd1aWQ6IDFFOCwKCiAgICAgICAg
Ly8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5wcm94eSBpbnN0ZWFkCiAgICAgICAgcHJveHk6IGpR
dWVyeS5wcm94eSwKCiAgICAgICAgc3BlY2lhbDogewogICAgICAgICAgICAgICAgcmVhZHk6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZWFkeSBldmVudCBpcyBz
ZXR1cAogICAgICAgICAgICAgICAgICAgICAgICBzZXR1cDogalF1ZXJ5LmJpbmRSZWFkeSwKICAg
ICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGpRdWVyeS5ub29wCiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIGxpdmU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRk
OiBmdW5jdGlvbiggaGFuZGxlT2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaXZlQ29udmVydCggaGFuZGxlT2JqLm9yaWdUeXBlLCBoYW5kbGVPYmouc2VsZWN0
b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5leHRl
bmQoe30sIGhhbmRsZU9iaiwge2hhbmRsZXI6IGxpdmVIYW5kbGVyLCBndWlkOiBoYW5kbGVPYmou
aGFuZGxlci5ndWlkfSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIGhhbmRsZU9iaiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCBsaXZlQ29udmVy
dCggaGFuZGxlT2JqLm9yaWdUeXBlLCBoYW5kbGVPYmouc2VsZWN0b3IgKSwgaGFuZGxlT2JqICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAg
ICAgICAgYmVmb3JldW5sb2FkOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwOiBmdW5j
dGlvbiggZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9u
IHdpbmRvd3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1dp
bmRvdyggdGhpcyApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5vbmJlZm9yZXVubG9hZCA9IGV2ZW50SGFuZGxlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAg
ICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbiggbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm9uYmVmb3JldW5sb2FkID09
PSBldmVudEhhbmRsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMub25iZWZvcmV1bmxvYWQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg
IH0KfTsKCmpRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIg
PwogICAgICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CiAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfSA6CiAgICAgICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhh
bmRsZSApIHsKICAgICAgICAgICAgICAgIGlmICggZWxlbS5kZXRhY2hFdmVudCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5kZXRhY2hFdmVudCggIm9uIiArIHR5cGUsIGhhbmRsZSAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CgpqUXVlcnkuRXZlbnQgPSBmdW5jdGlvbigg
c3JjLCBwcm9wcyApIHsKICAgICAgICAvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhl
ICduZXcnIGtleXdvcmQKICAgICAgICBpZiAoICF0aGlzLnByZXZlbnREZWZhdWx0ICkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsKICAgICAg
ICB9CgogICAgICAgIC8vIEV2ZW50IG9iamVjdAogICAgICAgIGlmICggc3JjICYmIHNyYy50eXBl
ICkgewogICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjOwogICAgICAgICAg
ICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7CgogICAgICAgICAgICAgICAgLy8gRXZlbnRzIGJ1
YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQK
ICAgICAgICAgICAgICAgIC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZs
ZWN0IHRoZSBjb3JyZWN0IHZhbHVlLgogICAgICAgICAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2
ZW50ZWQgPSAoc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwgc3JjLnJldHVyblZhbHVlID09PSBmYWxz
ZSB8fAogICAgICAgICAgICAgICAgICAgICAgICBzcmMuZ2V0UHJldmVudERlZmF1bHQgJiYgc3Jj
LmdldFByZXZlbnREZWZhdWx0KCkpID8gcmV0dXJuVHJ1ZSA6IHJldHVybkZhbHNlOwoKICAgICAg
ICAvLyBFdmVudCB0eXBlCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMudHlw
ZSA9IHNyYzsKICAgICAgICB9CgogICAgICAgIC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHBy
b3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0CiAgICAgICAgaWYgKCBwcm9wcyApIHsKICAg
ICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7CiAgICAgICAgfQoKICAg
ICAgICAvLyB0aW1lU3RhbXAgaXMgYnVnZ3kgZm9yIHNvbWUgZXZlbnRzIG9uIEZpcmVmb3goIzM4
NDMpCiAgICAgICAgLy8gU28gd2Ugd29uJ3QgcmVseSBvbiB0aGUgbmF0aXZlIHZhbHVlCiAgICAg
ICAgdGhpcy50aW1lU3RhbXAgPSBqUXVlcnkubm93KCk7CgogICAgICAgIC8vIE1hcmsgaXQgYXMg
Zml4ZWQKICAgICAgICB0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTsKfTsKCmZ1bmN0aW9u
IHJldHVybkZhbHNlKCkgewogICAgICAgIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiByZXR1cm5U
cnVlKCkgewogICAgICAgIHJldHVybiB0cnVlOwp9CgovLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQg
b24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJp
bmRpbmcKLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMt
MjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCmpRdWVyeS5FdmVudC5wcm90b3R5cGUg
PSB7CiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwoKICAgICAgICAgICAgICAgIHZh
ciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwogICAgICAgICAgICAgICAgaWYgKCAhZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIGlmIHByZXZlbnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFs
IGV2ZW50CiAgICAgICAgICAgICAgICBpZiAoIGUucHJldmVudERlZmF1bHQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgICAgICAvLyBv
dGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZl
bnQgdG8gZmFsc2UgKElFKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAg
IH0sCiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
IHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwoKICAgICAgICAgICAgICAg
IHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwogICAgICAgICAgICAgICAgaWYgKCAhZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdp
bmFsIGV2ZW50CiAgICAgICAgICAgICAgICBpZiAoIGUuc3RvcFByb3BhZ2F0aW9uICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCB0aGUgY2FuY2VsQnViYmxlIHByb3Bl
cnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVlIChJRSkKICAgICAgICAgICAgICAgIGUu
Y2FuY2VsQnViYmxlID0gdHJ1ZTsKICAgICAgICB9LAogICAgICAgIHN0b3BJbW1lZGlhdGVQcm9w
YWdhdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlzSW1tZWRpYXRlUHJv
cGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBy
b3BhZ2F0aW9uKCk7CiAgICAgICAgfSwKICAgICAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVy
bkZhbHNlLAogICAgICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKICAgICAg
ICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKfTsKCi8vIENoZWNr
cyBpZiBhbiBldmVudCBoYXBwZW5lZCBvbiBhbiBlbGVtZW50IHdpdGhpbiBhbm90aGVyIGVsZW1l
bnQKLy8gVXNlZCBpbiBqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWVudGVyIGFuZCBtb3VzZWxl
YXZlIGhhbmRsZXJzCnZhciB3aXRoaW5FbGVtZW50ID0gZnVuY3Rpb24oIGV2ZW50ICkgewoKICAg
ICAgICAvLyBDaGVjayBpZiBtb3VzZShvdmVyfG91dCkgYXJlIHN0aWxsIHdpdGhpbiB0aGUgc2Ft
ZSBwYXJlbnQgZWxlbWVudAogICAgICAgIHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdl
dCwKICAgICAgICAgICAgICAgIGluc2lkZSA9IGZhbHNlLAogICAgICAgICAgICAgICAgZXZlbnRU
eXBlID0gZXZlbnQudHlwZTsKCiAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50LmRhdGE7CgogICAg
ICAgIGlmICggcmVsYXRlZCAhPT0gdGhpcyApIHsKCiAgICAgICAgICAgICAgICBpZiAoIHJlbGF0
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSA9IGpRdWVyeS5jb250YWlucygg
dGhpcywgcmVsYXRlZCApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
IWluc2lkZSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5oYW5kbGUu
YXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
dHlwZSA9IGV2ZW50VHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0sCgovLyBJbiBj
YXNlIG9mIGV2ZW50IGRlbGVnYXRpb24sIHdlIG9ubHkgbmVlZCB0byByZW5hbWUgdGhlIGV2ZW50
LnR5cGUsCi8vIGxpdmVIYW5kbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0LgpkZWxlZ2F0
ZSA9IGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAgICBldmVudC50eXBlID0gZXZlbnQuZGF0YTsK
ICAgICAgICBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKfTsK
Ci8vIENyZWF0ZSBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGV2ZW50cwpqUXVlcnkuZWFjaCh7
CiAgICAgICAgbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCiAgICAgICAgbW91c2VsZWF2ZTogIm1v
dXNlb3V0Igp9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewogICAgICAgIGpRdWVyeS5ldmVudC5z
cGVjaWFsWyBvcmlnIF0gPSB7CiAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIGZpeCwg
ZGF0YSAmJiBkYXRhLnNlbGVjdG9yID8gZGVsZWdhdGUgOiB3aXRoaW5FbGVtZW50LCBvcmlnICk7
CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBk
YXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlz
LCBmaXgsIGRhdGEgJiYgZGF0YS5zZWxlY3RvciA/IGRlbGVnYXRlIDogd2l0aGluRWxlbWVudCAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cn0pOwoKLy8gc3VibWl0IGRlbGVnYXRpb24K
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3VibWl0QnViYmxlcyApIHsKCiAgICAgICAgalF1ZXJ5LmV2
ZW50LnNwZWNpYWwuc3VibWl0ID0gewogICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBk
YXRhLCBuYW1lc3BhY2VzICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnku
bm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5hZGQodGhpcywgImNsaWNrLnNwZWNpYWxTdWJtaXQiLCBmdW5jdGlv
biggZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lk
IHRyaWdnZXJpbmcgZXJyb3Igb24gbm9uLWV4aXN0ZW50IHR5cGUgYXR0cmlidXRlIGluIElFIFZN
TCAoIzcwNzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxl
bSA9IGUudGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5v
ZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS50eXBlIDogIiI7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAodHlwZSA9PT0gInN1Ym1pdCIgfHwgdHlw
ZSA9PT0gImltYWdlIikgJiYgalF1ZXJ5KCBlbGVtICkuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dl
ciggInN1Ym1pdCIsIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKHRoaXMsICJrZXlw
cmVzcy5zcGVjaWFsU3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBl
bGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxl
bS50eXBlIDogIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAodHlwZSA9PT0gInRleHQiIHx8IHR5cGUgPT09ICJwYXNzd29yZCIpICYmIGpRdWVyeSggZWxl
bSApLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGggJiYgZS5rZXlDb2RlID09PSAxMyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciggInN1Ym1p
dCIsIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCgog
ICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLnNwZWNpYWxTdWJt
aXQiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCn0KCi8vIGNoYW5nZSBkZWxlZ2F0
aW9uLCBoYXBwZW5zIGhlcmUgc28gd2UgaGF2ZSBiaW5kLgppZiAoICFqUXVlcnkuc3VwcG9ydC5j
aGFuZ2VCdWJibGVzICkgewoKICAgICAgICB2YXIgY2hhbmdlRmlsdGVycywKCiAgICAgICAgZ2V0
VmFsID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApID8gZWxlbS50eXBlIDogIiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbCA9IGVsZW0udmFsdWU7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBl
ID09PSAicmFkaW8iIHx8IHR5cGUgPT09ICJjaGVja2JveCIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbCA9IGVsZW0uY2hlY2tlZDsKCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0
eXBlID09PSAic2VsZWN0LW11bHRpcGxlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFs
ID0gZWxlbS5zZWxlY3RlZEluZGV4ID4gLTEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5tYXAoIGVsZW0ub3B0aW9ucywgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3RlZDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCItIikgOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIiOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dmFsID0gZWxlbS5zZWxlY3RlZEluZGV4OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHJldHVybiB2YWw7CiAgICAgICAgfSwKCiAgICAgICAgdGVzdENoYW5nZSA9IGZ1bmN0aW9u
IHRlc3RDaGFuZ2UoIGUgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LCBk
YXRhLCB2YWw7CgogICAgICAgICAgICAgICAgaWYgKCAhcmZvcm1FbGVtcy50ZXN0KCBlbGVtLm5v
ZGVOYW1lICkgfHwgZWxlbS5yZWFkT25seSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkuX2Rh
dGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiICk7CiAgICAgICAgICAgICAgICB2YWwgPSBnZXRWYWwo
ZWxlbSk7CgogICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgZGF0YSB3aWxsIGJlIGFsc28g
cmV0cmlldmVkIGJ5IGJlZm9yZWFjdGl2YXRlCiAgICAgICAgICAgICAgICBpZiAoIGUudHlwZSAh
PT0gImZvY3Vzb3V0IiB8fCBlbGVtLnR5cGUgIT09ICJyYWRpbyIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfZGF0YSIsIHZhbCApOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkIHx8
IHZhbCA9PT0gZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPSBudWxsIHx8IHZhbCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZS50eXBlID0gImNoYW5nZSI7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGUubGl2ZUZpcmVkID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgYXJndW1lbnRzWzFdLCBlbGVtICk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdl
ID0gewogICAgICAgICAgICAgICAgZmlsdGVyczogewogICAgICAgICAgICAgICAgICAgICAgICBm
b2N1c291dDogdGVzdENoYW5nZSwKCiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZWRlYWN0
aXZhdGU6IHRlc3RDaGFuZ2UsCgogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rp
b24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRh
cmdldCwgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApID8gZWxlbS50eXBl
IDogIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInJh
ZGlvIiB8fCB0eXBlID09PSAiY2hlY2tib3giIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNl
bGVjdCIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RD
aGFuZ2UuY2FsbCggdGhpcywgZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENo
YW5nZSBoYXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBzdWJtaXQKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gS2V5ZG93biB3aWxsIGJlIGNhbGxlZCBiZWZvcmUga2V5cHJlc3MsIHdoaWNoIGlzIHVz
ZWQgaW4gc3VibWl0LWV2ZW50IGRlbGVnYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAga2V5
ZG93bjogZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGVsZW0gPSBlLnRhcmdldCwgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiAp
ID8gZWxlbS50eXBlIDogIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
KGUua2V5Q29kZSA9PT0gMTMgJiYgIWpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInRleHRhcmVhIiAp
ICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmtleUNvZGUg
PT09IDMyICYmICh0eXBlID09PSAiY2hlY2tib3giIHx8IHR5cGUgPT09ICJyYWRpbyIpKSB8fAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gInNlbGVjdC1t
dWx0aXBsZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
Q2hhbmdlLmNhbGwoIHRoaXMsIGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBC
ZWZvcmVhY3RpdmF0ZSBoYXBwZW5zIGFsc28gYmVmb3JlIHRoZSBwcmV2aW91cyBlbGVtZW50IGlz
IGJsdXJyZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGlzIGV2ZW50IHlvdSBj
YW4ndCB0cmlnZ2VyIGEgY2hhbmdlIGV2ZW50LCBidXQgeW91IGNhbiBzdG9yZQogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBiZWZv
cmVhY3RpdmF0ZTogZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGVsZW0gPSBlLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiLCBnZXRWYWwoZWxlbSkgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBz
ZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdGhpcy50eXBlID09PSAiZmlsZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBjaGFuZ2VGaWx0ZXJzICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGUg
KyAiLnNwZWNpYWxDaGFuZ2UiLCBjaGFuZ2VGaWx0ZXJzW3R5cGVdICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZm9ybUVsZW1zLnRl
c3QoIHRoaXMubm9kZU5hbWUgKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAg
dGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLnNwZWNpYWxDaGFuZ2UiICk7CgogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY2hhbmdlRmlsdGVycyA9IGpR
dWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzOwoKICAgICAgICAvLyBIYW5kbGUgd2hl
biB0aGUgaW5wdXQgaXMgLmZvY3VzKCknZAogICAgICAgIGNoYW5nZUZpbHRlcnMuZm9jdXMgPSBj
aGFuZ2VGaWx0ZXJzLmJlZm9yZWFjdGl2YXRlOwp9CgpmdW5jdGlvbiB0cmlnZ2VyKCB0eXBlLCBl
bGVtLCBhcmdzICkgewogICAgICAgIC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNp
bXVsYXRlIGEgZGlmZmVyZW50IG9uZS4KICAgICAgICAvLyBGYWtlIG9yaWdpbmFsRXZlbnQgdG8g
YXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBpZiB0aGUKICAgICAgICAvLyBzaW11
bGF0ZWQgZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVuIHdlIGRvIHRoZSBzYW1lIG9uIHRoZSBk
b25vci4KICAgICAgICAvLyBEb24ndCBwYXNzIGFyZ3Mgb3IgcmVtZW1iZXIgbGl2ZUZpcmVkOyB0
aGV5IGFwcGx5IHRvIHRoZSBkb25vciBldmVudC4KICAgICAgICB2YXIgZXZlbnQgPSBqUXVlcnku
ZXh0ZW5kKCB7fSwgYXJnc1sgMCBdICk7CiAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CiAgICAg
ICAgZXZlbnQub3JpZ2luYWxFdmVudCA9IHt9OwogICAgICAgIGV2ZW50LmxpdmVGaXJlZCA9IHVu
ZGVmaW5lZDsKICAgICAgICBqUXVlcnkuZXZlbnQuaGFuZGxlLmNhbGwoIGVsZW0sIGV2ZW50ICk7
CiAgICAgICAgaWYgKCBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKICAgICAgICAgICAg
ICAgIGFyZ3NbIDAgXS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KfQoKLy8gQ3JlYXRlICJi
dWJibGluZyIgZm9jdXMgYW5kIGJsdXIgZXZlbnRzCmlmICggIWpRdWVyeS5zdXBwb3J0LmZvY3Vz
aW5CdWJibGVzICkgewogICAgICAgIGpRdWVyeS5lYWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1
cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewoKICAgICAgICAgICAgICAg
IC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciB3aGlsZSBzb21lb25lIHdhbnRz
IGZvY3VzaW4vZm9jdXNvdXQKICAgICAgICAgICAgICAgIHZhciBhdHRhY2hlcyA9IDA7CgogICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0gewogICAgICAgICAgICAg
ICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBhdHRhY2hlcysrID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwg
dHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggLS1hdHRhY2hlcyA9PT0gMCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH07CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlciggZG9ub3IgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERvbm9yIGV2ZW50IGlzIGFsd2F5cyBhIG5hdGl2ZSBvbmU7IGZp
eCBpdCBhbmQgc3dpdGNoIGl0cyB0eXBlLgogICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQg
Zm9jdXNpbi9vdXQgaGFuZGxlciBjYW5jZWwgdGhlIGRvbm9yIGZvY3VzL2JsdXIgZXZlbnQuCiAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0galF1ZXJ5LmV2ZW50LmZpeCggZG9ub3IgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgZS50eXBlID0gZml4OwogICAgICAgICAgICAgICAgICAg
ICAgICBlLm9yaWdpbmFsRXZlbnQgPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGUudGFyZ2V0ICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb25vci5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7Cn0KCmpRdWVyeS5lYWNoKFsiYmluZCIs
ICJvbmUiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0g
PSBmdW5jdGlvbiggdHlwZSwgZGF0YSwgZm4gKSB7CiAgICAgICAgICAgICAgICB2YXIgaGFuZGxl
cjsKCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgb2JqZWN0IGxpdGVyYWxzCiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiB0eXBlID09PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGtleSBpbiB0eXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXNbIG5hbWUgXShrZXksIGRhdGEsIHR5cGVba2V5XSwgZm4pOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0g
MiB8fCBkYXRhID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBkYXRh
OwogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gIm9uZSIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudW5iaW5kKCBldmVudCwgaGFuZGxlciAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSggdGhpcywg
YXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXIuZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBmbjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJ1bmxvYWQiICYm
IG5hbWUgIT09ICJvbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uZSggdHlw
ZSwgZGF0YSwgZm4gKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzW2ld
LCB0eXBlLCBoYW5kbGVyLCBkYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9Owp9KTsK
CmpRdWVyeS5mbi5leHRlbmQoewogICAgICAgIHVuYmluZDogZnVuY3Rpb24oIHR5cGUsIGZuICkg
ewogICAgICAgICAgICAgICAgLy8gSGFuZGxlIG9iamVjdCBsaXRlcmFscwogICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2YgdHlwZSA9PT0gIm9iamVjdCIgJiYgIXR5cGUucHJldmVudERlZmF1bHQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gdHlwZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuYmluZChrZXksIHR5cGVba2V5XSk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
cmVtb3ZlKCB0aGlzW2ldLCB0eXBlLCBmbiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwK
CiAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGl2ZSggdHlwZXMsIGRhdGEsIGZuLCBzZWxl
Y3RvciApOwogICAgICAgIH0sCgogICAgICAgIHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3Rv
ciwgdHlwZXMsIGZuICkgewogICAgICAgICAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoID09
PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51bmJpbmQoICJsaXZl
IiApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmRpZSggdHlwZXMsIG51bGwsIGZuLCBzZWxlY3RvciApOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0sCgogICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsK
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIHRyaWdnZXJIYW5kbGVyOiBm
dW5jdGlvbiggdHlwZSwgZGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBl
LCBkYXRhLCB0aGlzWzBdLCB0cnVlICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAg
ICAgICAgdG9nZ2xlOiBmdW5jdGlvbiggZm4gKSB7CiAgICAgICAgICAgICAgICAvLyBTYXZlIHJl
ZmVyZW5jZSB0byBhcmd1bWVudHMgZm9yIGFjY2VzcyBpbiBjbG9zdXJlCiAgICAgICAgICAgICAg
ICB2YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZCA9IGZu
Lmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKywKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiB0
byBleGVjdXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RUb2dnbGUg
PSAoIGpRdWVyeS5kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlkICkgfHwgMCApICUg
aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywgImxh
c3RUb2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgY2xpY2tzIHN0b3AKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZXhlY3V0ZSB0aGUgZnVuY3Rpb24KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1sgbGFzdFRvZ2dsZSBdLmFwcGx5KCB0
aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAg
ICAgICAgICAgICAgICAvLyBsaW5rIGFsbCB0aGUgZnVuY3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBj
YW4gdW5iaW5kIHRoaXMgY2xpY2sgaGFuZGxlcgogICAgICAgICAgICAgICAgdG9nZ2xlci5ndWlk
ID0gZ3VpZDsKICAgICAgICAgICAgICAgIHdoaWxlICggaSA8IGFyZ3MubGVuZ3RoICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzWyBpKysgXS5ndWlkID0gZ3VpZDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGljayggdG9nZ2xlciApOwogICAg
ICAgIH0sCgogICAgICAgIGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHsKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZu
T3V0IHx8IGZuT3ZlciApOwogICAgICAgIH0KfSk7Cgp2YXIgbGl2ZU1hcCA9IHsKICAgICAgICBm
b2N1czogImZvY3VzaW4iLAogICAgICAgIGJsdXI6ICJmb2N1c291dCIsCiAgICAgICAgbW91c2Vl
bnRlcjogIm1vdXNlb3ZlciIsCiAgICAgICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0Igp9OwoKalF1
ZXJ5LmVhY2goWyJsaXZlIiwgImRpZSJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKICAgICAgICBq
UXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4sIG9yaWdTZWxlY3Rv
ciAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKICAgICAgICAgICAgICAgIHZhciB0eXBlLCBp
ID0gMCwgbWF0Y2gsIG5hbWVzcGFjZXMsIHByZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGVjdG9yID0gb3JpZ1NlbGVjdG9yIHx8IHRoaXMuc2VsZWN0b3IsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQgPSBvcmlnU2VsZWN0b3IgPyB0aGlzIDogalF1ZXJ5KCB0aGlzLmNv
bnRleHQgKTsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIg
JiYgIXR5cGVzLnByZXZlbnREZWZhdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIga2V5IGluIHR5cGVzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHRbIG5hbWUgXSgga2V5LCBkYXRhLCB0eXBlc1trZXldLCBzZWxlY3RvciApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09ICJkaWUiICYm
ICF0eXBlcyAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ1Nl
bGVjdG9yICYmIG9yaWdTZWxlY3Rvci5jaGFyQXQoMCkgPT09ICIuIiApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQudW5iaW5kKCBvcmlnU2VsZWN0b3IgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIGlmICggZGF0YSA9PT0gZmFsc2UgfHwgalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBkYXRhIHx8IHJldHVybkZhbHNlOwogICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHR5cGVzID0gKHR5cGVzIHx8ICIiKS5zcGxpdCgiICIpOwoKICAgICAgICAg
ICAgICAgIHdoaWxlICggKHR5cGUgPSB0eXBlc1sgaSsrIF0pICE9IG51bGwgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoID0gcm5hbWVzcGFjZXMuZXhlYyggdHlwZSApOwogICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gIiI7CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hdGNoICkgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2VzID0gbWF0Y2hbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5
cGUucmVwbGFjZSggcm5hbWVzcGFjZXMsICIiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImhvdmVyIiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKCAibW91c2VlbnRlciIgKyBuYW1l
c3BhY2VzLCAibW91c2VsZWF2ZSIgKyBuYW1lc3BhY2VzICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIHByZVR5cGUgPSB0eXBlOwoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBsaXZlTWFwWyB0eXBlIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZXMucHVzaCggbGl2ZU1hcFsgdHlwZSBdICsgbmFtZXNwYWNlcyApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlICsgbmFtZXNwYWNlczsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IChsaXZlTWFwWyB0eXBlIF0gfHwgdHlwZSkgKyBuYW1lc3BhY2VzOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09ICJsaXZl
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaW5kIGxpdmUgaGFuZGxl
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgbCA9IGNv
bnRleHQubGVuZ3RoOyBqIDwgbDsgaisrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggY29udGV4dFtqXSwgImxpdmUuIiArIGxpdmVD
b252ZXJ0KCB0eXBlLCBzZWxlY3RvciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7IGRhdGE6IGRhdGEsIHNlbGVjdG9yOiBzZWxlY3RvciwgaGFuZGxl
cjogZm4sIG9yaWdUeXBlOiB0eXBlLCBvcmlnSGFuZGxlcjogZm4sIHByZVR5cGU6IHByZVR5cGUg
fSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5iaW5k
IGxpdmUgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQudW5i
aW5kKCAibGl2ZS4iICsgbGl2ZUNvbnZlcnQoIHR5cGUsIHNlbGVjdG9yICksIGZuICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAgICB9Owp9KTsKCmZ1bmN0aW9uIGxpdmVIYW5kbGVyKCBldmVudCAp
IHsKICAgICAgICB2YXIgc3RvcCwgbWF4TGV2ZWwsIHJlbGF0ZWQsIG1hdGNoLCBoYW5kbGVPYmos
IGVsZW0sIGosIGksIGwsIGRhdGEsIGNsb3NlLCBuYW1lc3BhY2UsIHJldCwKICAgICAgICAgICAg
ICAgIGVsZW1zID0gW10sCiAgICAgICAgICAgICAgICBzZWxlY3RvcnMgPSBbXSwKICAgICAgICAg
ICAgICAgIGV2ZW50cyA9IGpRdWVyeS5fZGF0YSggdGhpcywgImV2ZW50cyIgKTsKCiAgICAgICAg
Ly8gTWFrZSBzdXJlIHdlIGF2b2lkIG5vbi1sZWZ0LWNsaWNrIGJ1YmJsaW5nIGluIEZpcmVmb3gg
KCMzODYxKSBhbmQgZGlzYWJsZWQgZWxlbWVudHMgaW4gSUUgKCM2OTExKQogICAgICAgIGlmICgg
ZXZlbnQubGl2ZUZpcmVkID09PSB0aGlzIHx8ICFldmVudHMgfHwgIWV2ZW50cy5saXZlIHx8IGV2
ZW50LnRhcmdldC5kaXNhYmxlZCB8fCBldmVudC5idXR0b24gJiYgZXZlbnQudHlwZSA9PT0gImNs
aWNrIiApIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgg
ZXZlbnQubmFtZXNwYWNlICkgewogICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbmV3IFJlZ0V4
cCgiKF58XFwuKSIgKyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIi4iKS5qb2luKCJcXC4oPzouKlxc
Lik/IikgKyAiKFxcLnwkKSIpOwogICAgICAgIH0KCiAgICAgICAgZXZlbnQubGl2ZUZpcmVkID0g
dGhpczsKCiAgICAgICAgdmFyIGxpdmUgPSBldmVudHMubGl2ZS5zbGljZSgwKTsKCiAgICAgICAg
Zm9yICggaiA9IDA7IGogPCBsaXZlLmxlbmd0aDsgaisrICkgewogICAgICAgICAgICAgICAgaGFu
ZGxlT2JqID0gbGl2ZVtqXTsKCiAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZU9iai5vcmlnVHlw
ZS5yZXBsYWNlKCBybmFtZXNwYWNlcywgIiIgKSA9PT0gZXZlbnQudHlwZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2goIGhhbmRsZU9iai5zZWxlY3RvciApOwoKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUuc3BsaWNl
KCBqLS0sIDEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG1hdGNoID0g
alF1ZXJ5KCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBzZWxlY3RvcnMsIGV2ZW50LmN1cnJlbnRU
YXJnZXQgKTsKCiAgICAgICAgZm9yICggaSA9IDAsIGwgPSBtYXRjaC5sZW5ndGg7IGkgPCBsOyBp
KysgKSB7CiAgICAgICAgICAgICAgICBjbG9zZSA9IG1hdGNoW2ldOwoKICAgICAgICAgICAgICAg
IGZvciAoIGogPSAwOyBqIDwgbGl2ZS5sZW5ndGg7IGorKyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlT2JqID0gbGl2ZVtqXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y2xvc2Uuc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciAmJiAoIW5hbWVzcGFjZSB8fCBu
YW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApKSAmJiAhY2xvc2UuZWxlbS5kaXNh
YmxlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gY2xvc2UuZWxl
bTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkID0gbnVsbDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhvc2UgdHdvIGV2ZW50cyByZXF1aXJlIGFk
ZGl0aW9uYWwgY2hlY2tpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhh
bmRsZU9iai5wcmVUeXBlID09PSAibW91c2VlbnRlciIgfHwgaGFuZGxlT2JqLnByZVR5cGUgPT09
ICJtb3VzZWxlYXZlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoucHJlVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSBqUXVlcnkoIGV2ZW50LnJlbGF0ZWRUYXJnZXQgKS5j
bG9zZXN0KCBoYW5kbGVPYmouc2VsZWN0b3IgKVswXTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbm90IHRvIGFjY2lkZW50YWxseSBtYXRjaCBh
IGNoaWxkIGVsZW1lbnQgd2l0aCB0aGUgc2FtZSBzZWxlY3RvcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCByZWxhdGVkICYmIGpRdWVyeS5jb250YWlucyggZWxl
bSwgcmVsYXRlZCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWxhdGVkID0gZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIXJlbGF0ZWQgfHwgcmVsYXRlZCAhPT0gZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zLnB1c2goeyBlbGVt
OiBlbGVtLCBoYW5kbGVPYmo6IGhhbmRsZU9iaiwgbGV2ZWw6IGNsb3NlLmxldmVsIH0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yICggaSA9IDAsIGwgPSBlbGVt
cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICBtYXRjaCA9IGVsZW1zW2ld
OwoKICAgICAgICAgICAgICAgIGlmICggbWF4TGV2ZWwgJiYgbWF0Y2gubGV2ZWwgPiBtYXhMZXZl
bCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoLmVsZW07CiAgICAgICAg
ICAgICAgICBldmVudC5kYXRhID0gbWF0Y2guaGFuZGxlT2JqLmRhdGE7CiAgICAgICAgICAgICAg
ICBldmVudC5oYW5kbGVPYmogPSBtYXRjaC5oYW5kbGVPYmo7CgogICAgICAgICAgICAgICAgcmV0
ID0gbWF0Y2guaGFuZGxlT2JqLm9yaWdIYW5kbGVyLmFwcGx5KCBtYXRjaC5lbGVtLCBhcmd1bWVu
dHMgKTsKCiAgICAgICAgICAgICAgICBpZiAoIHJldCA9PT0gZmFsc2UgfHwgZXZlbnQuaXNQcm9w
YWdhdGlvblN0b3BwZWQoKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBt
YXRjaC5sZXZlbDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5pc0lt
bWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RvcDsKfQoKZnVuY3Rpb24gbGl2ZUNvbnZlcnQo
IHR5cGUsIHNlbGVjdG9yICkgewogICAgICAgIHJldHVybiAodHlwZSAmJiB0eXBlICE9PSAiKiIg
PyB0eXBlICsgIi4iIDogIiIpICsgc2VsZWN0b3IucmVwbGFjZShycGVyaW9kLCAiYCIpLnJlcGxh
Y2UocnNwYWNlcywgIiYiKTsKfQoKalF1ZXJ5LmVhY2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZv
Y3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCiAgICAg
ICAgIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2Vl
bnRlciBtb3VzZWxlYXZlICIgKwogICAgICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3du
IGtleXByZXNzIGtleXVwIGVycm9yIikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7
CgogICAgICAgIC8vIEhhbmRsZSBldmVudCBiaW5kaW5nCiAgICAgICAgalF1ZXJ5LmZuWyBuYW1l
IF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7CiAgICAgICAgICAgICAgICBpZiAoIGZuID09IG51
bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZGF0YTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8KICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5iaW5kKCBuYW1lLCBkYXRhLCBmbiApIDoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
cmlnZ2VyKCBuYW1lICk7CiAgICAgICAgfTsKCiAgICAgICAgaWYgKCBqUXVlcnkuYXR0ckZuICkg
ewogICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHJGblsgbmFtZSBdID0gdHJ1ZTsKICAgICAgICB9
Cn0pOwoKCgovKiEKICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUKICogIENvcHlyaWdodCAy
MDExLCBUaGUgRG9qbyBGb3VuZGF0aW9uCiAqICBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBCU0Qs
IGFuZCBHUEwgTGljZW5zZXMuCiAqICBNb3JlIGluZm9ybWF0aW9uOiBodHRwOi8vc2l6emxlanMu
Y29tLwogKi8KKGZ1bmN0aW9uKCl7Cgp2YXIgY2h1bmtlciA9IC8oKD86XCgoPzpcKFteKCldK1wp
fFteKCldKykrXCl8XFsoPzpcW1teXFtcXV0qXF18WyciXVteJyJdKlsnIl18W15cW1xdJyJdKykr
XF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2cs
CiAgICAgICAgZG9uZSA9IDAsCiAgICAgICAgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRv
U3RyaW5nLAogICAgICAgIGhhc0R1cGxpY2F0ZSA9IGZhbHNlLAogICAgICAgIGJhc2VIYXNEdXBs
aWNhdGUgPSB0cnVlLAogICAgICAgIHJCYWNrc2xhc2ggPSAvXFwvZywKICAgICAgICByTm9uV29y
ZCA9IC9cVy87CgovLyBIZXJlIHdlIGNoZWNrIGlmIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSBpcyB1
c2luZyBzb21lIHNvcnQgb2YKLy8gb3B0aW1pemF0aW9uIHdoZXJlIGl0IGRvZXMgbm90IGFsd2F5
cyBjYWxsIG91ciBjb21wYXJpc2lvbgovLyBmdW5jdGlvbi4gSWYgdGhhdCBpcyB0aGUgY2FzZSwg
ZGlzY2FyZCB0aGUgaGFzRHVwbGljYXRlIHZhbHVlLgovLyAgIFRodXMgZmFyIHRoYXQgaW5jbHVk
ZXMgR29vZ2xlIENocm9tZS4KWzAsIDBdLnNvcnQoZnVuY3Rpb24oKSB7CiAgICAgICAgYmFzZUhh
c0R1cGxpY2F0ZSA9IGZhbHNlOwogICAgICAgIHJldHVybiAwOwp9KTsKCnZhciBTaXp6bGUgPSBm
dW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7CiAgICAgICAgcmVz
dWx0cyA9IHJlc3VsdHMgfHwgW107CiAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1l
bnQ7CgogICAgICAgIHZhciBvcmlnQ29udGV4dCA9IGNvbnRleHQ7CgogICAgICAgIGlmICggY29u
dGV4dC5ub2RlVHlwZSAhPT0gMSAmJiBjb250ZXh0Lm5vZGVUeXBlICE9PSA5ICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoICFzZWxl
Y3RvciB8fCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7CiAgICAgICAgfQoKICAgICAgICB2YXIgbSwgc2V0LCBjaGVja1NldCwg
ZXh0cmEsIHJldCwgY3VyLCBwb3AsIGksCiAgICAgICAgICAgICAgICBwcnVuZSA9IHRydWUsCiAg
ICAgICAgICAgICAgICBjb250ZXh0WE1MID0gU2l6emxlLmlzWE1MKCBjb250ZXh0ICksCiAgICAg
ICAgICAgICAgICBwYXJ0cyA9IFtdLAogICAgICAgICAgICAgICAgc29GYXIgPSBzZWxlY3RvcjsK
ICAgICAgICAKICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGNodW5rZXIgcmVn
ZXhwIChzdGFydCBmcm9tIGhlYWQpCiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgY2h1bmtl
ci5leGVjKCAiIiApOwogICAgICAgICAgICAgICAgbSA9IGNodW5rZXIuZXhlYyggc29GYXIgKTsK
CiAgICAgICAgICAgICAgICBpZiAoIG0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvRmFy
ID0gbVszXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5w
dXNoKCBtWzFdICk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBtWzJdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gbVszXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKCBtICk7CgogICAgICAg
IGlmICggcGFydHMubGVuZ3RoID4gMSAmJiBvcmlnUE9TLmV4ZWMoIHNlbGVjdG9yICkgKSB7Cgog
ICAgICAgICAgICAgICAgaWYgKCBwYXJ0cy5sZW5ndGggPT09IDIgJiYgRXhwci5yZWxhdGl2ZVsg
cGFydHNbMF0gXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gcG9zUHJvY2Vzcygg
cGFydHNbMF0gKyBwYXJ0c1sxXSwgY29udGV4dCApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IEV4cHIucmVsYXRpdmVbIHBhcnRzWzBdIF0g
PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgY29udGV4dCBdIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUoIHBhcnRzLnNoaWZ0KCksIGNvbnRleHQgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggcGFydHMubGVuZ3RoICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gcGFydHMuc2hpZnQoKTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyBzZWxlY3RvciBd
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgKz0g
cGFydHMuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0ID0gcG9zUHJvY2Vzcyggc2VsZWN0b3IsIHNldCApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAv
LyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29udGV4dCBpZiB0aGUgcm9vdCBzZWxlY3Rv
ciBpcyBhbiBJRAogICAgICAgICAgICAgICAgLy8gKGJ1dCBub3QgaWYgaXQnbGwgYmUgZmFzdGVy
IGlmIHRoZSBpbm5lciBzZWxlY3RvciBpcyBhbiBJRCkKICAgICAgICAgICAgICAgIGlmICggIXNl
ZWQgJiYgcGFydHMubGVuZ3RoID4gMSAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmICFjb250
ZXh0WE1MICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwci5tYXRjaC5JRC50
ZXN0KHBhcnRzWzBdKSAmJiAhRXhwci5tYXRjaC5JRC50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAt
IDFdKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNpenpsZS5maW5kKCBwYXJ0
cy5zaGlmdCgpLCBjb250ZXh0LCBjb250ZXh0WE1MICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQgPSByZXQuZXhwciA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6
emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQgKVswXSA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnNldFswXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBpZiAoIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNlZWQgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZXhwcjogcGFydHMucG9wKCksIHNldDog
bWFrZUFycmF5KHNlZWQpIH0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenps
ZS5maW5kKCBwYXJ0cy5wb3AoKSwgcGFydHMubGVuZ3RoID09PSAxICYmIChwYXJ0c1swXSA9PT0g
In4iIHx8IHBhcnRzWzBdID09PSAiKyIpICYmIGNvbnRleHQucGFyZW50Tm9kZSA/IGNvbnRleHQu
cGFyZW50Tm9kZSA6IGNvbnRleHQsIGNvbnRleHRYTUwgKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNldCA9IHJldC5leHByID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6
bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0LnNldCApIDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXQuc2V0OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJ0cy5sZW5n
dGggPiAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0ID0gbWFr
ZUFycmF5KCBzZXQgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBwYXJ0cy5sZW5ndGggKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gcGFydHMucG9wKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gY3VyOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFFeHByLnJlbGF0aXZlWyBjdXIgXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9ICIiOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwb3AgPSBwYXJ0cy5wb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcG9wID09IG51bGwgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3AgPSBjb250ZXh0OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRXhwci5yZWxhdGl2ZVsgY3VyIF0oIGNoZWNrU2V0LCBwb3AsIGNvbnRleHRYTUwgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0ID0gcGFydHMgPSBbXTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgIGlmICggIWNoZWNrU2V0ICkgewogICAgICAgICAgICAgICAg
Y2hlY2tTZXQgPSBzZXQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoICFjaGVja1NldCApIHsKICAg
ICAgICAgICAgICAgIFNpenpsZS5lcnJvciggY3VyIHx8IHNlbGVjdG9yICk7CiAgICAgICAgfQoK
ICAgICAgICBpZiAoIHRvU3RyaW5nLmNhbGwoY2hlY2tTZXQpID09PSAiW29iamVjdCBBcnJheV0i
ICkgewogICAgICAgICAgICAgICAgaWYgKCAhcHJ1bmUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdHMucHVzaC5hcHBseSggcmVzdWx0cywgY2hlY2tTZXQgKTsKCiAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBjaGVja1NldFtpXSAhPSBudWxsOyBp
KysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjaGVja1NldFtpXSAm
JiAoY2hlY2tTZXRbaV0gPT09IHRydWUgfHwgY2hlY2tTZXRbaV0ubm9kZVR5cGUgPT09IDEgJiYg
U2l6emxlLmNvbnRhaW5zKGNvbnRleHQsIGNoZWNrU2V0W2ldKSkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIHNldFtpXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
OyBjaGVja1NldFtpXSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjaGVja1NldFtpXSAmJiBjaGVja1NldFtpXS5ub2RlVHlwZSA9PT0gMSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggc2V0
W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICBtYWtlQXJyYXkoIGNoZWNrU2V0LCByZXN1bHRzICk7CiAgICAgICAgfQoKICAgICAgICBp
ZiAoIGV4dHJhICkgewogICAgICAgICAgICAgICAgU2l6emxlKCBleHRyYSwgb3JpZ0NvbnRleHQs
IHJlc3VsdHMsIHNlZWQgKTsKICAgICAgICAgICAgICAgIFNpenpsZS51bmlxdWVTb3J0KCByZXN1
bHRzICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0czsKfTsKClNpenpsZS51bmlx
dWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7CiAgICAgICAgaWYgKCBzb3J0T3JkZXIgKSB7
CiAgICAgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSBiYXNlSGFzRHVwbGljYXRlOwogICAgICAg
ICAgICAgICAgcmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKCiAgICAgICAgICAgICAgICBpZiAo
IGhhc0R1cGxpY2F0ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAx
OyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHJlc3VsdHNbaV0gPT09IHJlc3VsdHNbIGkgLSAxIF0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnNwbGljZSggaS0tLCAxICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0czsKfTsK
ClNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIHNldCApIHsKICAgICAgICByZXR1cm4g
U2l6emxlKCBleHByLCBudWxsLCBudWxsLCBzZXQgKTsKfTsKClNpenpsZS5tYXRjaGVzU2VsZWN0
b3IgPSBmdW5jdGlvbiggbm9kZSwgZXhwciApIHsKICAgICAgICByZXR1cm4gU2l6emxlKCBleHBy
LCBudWxsLCBudWxsLCBbbm9kZV0gKS5sZW5ndGggPiAwOwp9OwoKU2l6emxlLmZpbmQgPSBmdW5j
dGlvbiggZXhwciwgY29udGV4dCwgaXNYTUwgKSB7CiAgICAgICAgdmFyIHNldDsKCiAgICAgICAg
aWYgKCAhZXhwciApIHsKICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CgogICAg
ICAgIGZvciAoIHZhciBpID0gMCwgbCA9IEV4cHIub3JkZXIubGVuZ3RoOyBpIDwgbDsgaSsrICkg
ewogICAgICAgICAgICAgICAgdmFyIG1hdGNoLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gRXhwci5vcmRlcltpXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCAo
bWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gbWF0Y2hbMV07CiAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoLnNwbGljZSggMSwgMSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBs
ZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgIT09ICJcXCIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSAobWF0Y2hbMV0gfHwgIiIpLnJlcGxhY2UoIHJC
YWNrc2xhc2gsICIiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gRXhw
ci5maW5kWyB0eXBlIF0oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHNldCAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlw
ZSBdLCAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICFzZXQgKSB7CiAg
ICAgICAgICAgICAgICBzZXQgPSB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAh
PT0gInVuZGVmaW5lZCIgPwogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCAiKiIgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIFtdOwogICAgICAg
IH0KCiAgICAgICAgcmV0dXJuIHsgc2V0OiBzZXQsIGV4cHI6IGV4cHIgfTsKfTsKClNpenpsZS5m
aWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgc2V0LCBpbnBsYWNlLCBub3QgKSB7CiAgICAgICAgdmFy
IG1hdGNoLCBhbnlGb3VuZCwKICAgICAgICAgICAgICAgIG9sZCA9IGV4cHIsCiAgICAgICAgICAg
ICAgICByZXN1bHQgPSBbXSwKICAgICAgICAgICAgICAgIGN1ckxvb3AgPSBzZXQsCiAgICAgICAg
ICAgICAgICBpc1hNTEZpbHRlciA9IHNldCAmJiBzZXRbMF0gJiYgU2l6emxlLmlzWE1MKCBzZXRb
MF0gKTsKCiAgICAgICAgd2hpbGUgKCBleHByICYmIHNldC5sZW5ndGggKSB7CiAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgdHlwZSBpbiBFeHByLmZpbHRlciApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkg
IT0gbnVsbCAmJiBtYXRjaFsyXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZm91bmQsIGl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWx0ZXIgPSBFeHByLmZpbHRlclsgdHlwZSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdCA9IG1hdGNoWzFdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhbnlGb3VuZCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaC5zcGxpY2UoMSwxKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBs
ZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgPT09ICJcXCIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyTG9v
cCA9PT0gcmVzdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEV4cHIucHJlRmlsdGVyWyB0eXBlIF0gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEV4cHIucHJlRmls
dGVyWyB0eXBlIF0oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCwgaXNYTUxG
aWx0ZXIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFt
YXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YW55Rm91bmQgPSBmb3VuZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2ggPT09IHRydWUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgKGl0ZW0g
PSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaXRlbSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGZpbHRlciggaXRlbSwg
bWF0Y2gsIGksIGN1ckxvb3AgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcGFzcyA9IG5vdCBeICEhZm91bmQ7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5wbGFj
ZSAmJiBmb3VuZCAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXNzICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbnlGb3VuZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTG9v
cFtpXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBwYXNzICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnB1c2goIGl0ZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFueUZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZm91bmQgIT09IHVuZGVmaW5lZCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3Ag
PSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgg
RXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIWFueUZvdW5kICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSW1wcm9wZXIg
ZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgaWYgKCBleHByID09PSBvbGQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggYW55Rm91bmQgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIGV4cHIgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBvbGQgPSBleHByOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGN1ckxvb3A7Cn07CgpTaXp6
bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgewogICAgICAgIHRocm93ICJTeW50YXggZXJyb3Is
IHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgbXNnOwp9OwoKdmFyIEV4cHIgPSBTaXp6bGUu
c2VsZWN0b3JzID0gewogICAgICAgIG9yZGVyOiBbICJJRCIsICJOQU1FIiwgIlRBRyIgXSwKCiAg
ICAgICAgbWF0Y2g6IHsKICAgICAgICAgICAgICAgIElEOiAvIygoPzpbXHdcdTAwYzAtXHVGRkZG
XC1dfFxcLikrKS8sCiAgICAgICAgICAgICAgICBDTEFTUzogL1wuKCg/Oltcd1x1MDBjMC1cdUZG
RkZcLV18XFwuKSspLywKICAgICAgICAgICAgICAgIE5BTUU6IC9cW25hbWU9WyciXSooKD86W1x3
XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLywKICAgICAgICAgICAgICAgIEFUVFI6IC9c
W1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKig/OihbJyJd
KSguKj8pXDN8KCM/KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKil8KXwpXHMqXF0vLAogICAg
ICAgICAgICAgICAgVEFHOiAvXigoPzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLywKICAg
ICAgICAgICAgICAgIENISUxEOiAvOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlwoXHMq
KGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9cZCopP25ccyooPzpbK1wtXVxzKlxkKyk/
KSlccypcKSk/LywKICAgICAgICAgICAgICAgIFBPUzogLzoobnRofGVxfGd0fGx0fGZpcnN0fGxh
c3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sCiAgICAgICAgICAgICAgICBQ
U0VVRE86IC86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/Olwo
W15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vCiAgICAgICAgfSwKCiAgICAgICAgbGVmdE1hdGNo
OiB7fSwKCiAgICAgICAgYXR0ck1hcDogewogICAgICAgICAgICAgICAgImNsYXNzIjogImNsYXNz
TmFtZSIsCiAgICAgICAgICAgICAgICAiZm9yIjogImh0bWxGb3IiCiAgICAgICAgfSwKCiAgICAg
ICAgYXR0ckhhbmRsZTogewogICAgICAgICAgICAgICAgaHJlZjogZnVuY3Rpb24oIGVsZW0gKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYi
ICk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdHlwZTogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgg
InR5cGUiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgcmVsYXRpdmU6
IHsKICAgICAgICAgICAgICAgICIrIjogZnVuY3Rpb24oY2hlY2tTZXQsIHBhcnQpewogICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJpbmci
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFnID0gaXNQYXJ0U3RyICYmICFy
Tm9uV29yZC50ZXN0KCBwYXJ0ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQ
YXJ0U3RyTm90VGFnID0gaXNQYXJ0U3RyICYmICFpc1RhZzsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggaXNUYWcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9
IHBhcnQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoLCBlbGVt
OyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGVs
ZW0gPSBjaGVja1NldFtpXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoIChlbGVtID0gZWxlbS5wcmV2aW91c1NpYmxpbmcpICYmIGVsZW0ubm9kZVR5
cGUgIT09IDEgKSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrU2V0W2ldID0gaXNQYXJ0U3RyTm90VGFnIHx8IGVsZW0gJiYgZWxlbS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09PSBwYXJ0ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbSB8fCBmYWxzZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0gPT09IHBhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGlzUGFydFN0ck5vdFRhZyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaXp6bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1NldCwgdHJ1ZSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICI+IjogZnVu
Y3Rpb24oIGNoZWNrU2V0LCBwYXJ0ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxl
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BhcnRTdHIgPSB0eXBlb2YgcGFy
dCA9PT0gInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGNoZWNrU2V0Lmxlbmd0aDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaXNQYXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0
ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQudG9Mb3dl
ckNhc2UoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbDsg
aSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNo
ZWNrU2V0W2ldOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBwYXJlbnQubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSA9PT0gcGFydCA/IHBhcmVudCA6IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbSA9IGNoZWNrU2V0W2ldOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBpc1BhcnRTdHIgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50
Tm9kZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5wYXJlbnROb2RlID09PSBwYXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1BhcnRTdHIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1Nl
dCwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAiIjogZnVu
Y3Rpb24oY2hlY2tTZXQsIHBhcnQsIGlzWE1MKXsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG5vZGVDaGVjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lTmFtZSA9IGRv
bmUrKywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGlyQ2hlY2s7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBwYXJ0ID09PSAic3RyaW5nIiAm
JiAhck5vbldvcmQudGVzdCggcGFydCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUNoZWNrID0gcGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGVja0ZuID0gZGlyTm9kZUNoZWNrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICBjaGVja0ZuKCAicGFyZW50Tm9kZSIsIHBhcnQsIGRvbmVOYW1lLCBj
aGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAg
ICAgICAgICAifiI6IGZ1bmN0aW9uKCBjaGVja1NldCwgcGFydCwgaXNYTUwgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBub2RlQ2hlY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9uZU5hbWUgPSBkb25lKyssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hlY2tGbiA9IGRpckNoZWNrOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yg
cGFydCA9PT0gInN0cmluZyIgJiYgIXJOb25Xb3JkLnRlc3QoIHBhcnQgKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVDaGVjayA9IHBhcnQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hlY2tGbiA9IGRpck5vZGVDaGVjazsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbiggInByZXZpb3VzU2li
bGluZyIsIHBhcnQsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApOwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGZpbmQ6IHsKICAgICAgICAgICAgICAg
IElEOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5kZWZpbmVk
IiAmJiAhaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBj
b250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYg
cmV0dXJucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQgYXJl
IG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbSAmJiBtLnBhcmVudE5vZGUgPyBbbV0gOiBbXTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBOQU1FOiBm
dW5jdGlvbiggbWF0Y2gsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUgIT09ICJ1bmRlZmluZWQiICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlO
YW1lKCBtYXRjaFsxXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGwgPSByZXN1bHRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0c1tpXS5nZXRBdHRyaWJ1dGUo
Im5hbWUiKSA9PT0gbWF0Y2hbMV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldC5wdXNoKCByZXN1bHRzW2ldICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Lmxlbmd0aCA9PT0g
MCA/IG51bGwgOiByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUgIT09ICJ1bmRlZmluZWQiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBw
cmVGaWx0ZXI6IHsKICAgICAgICAgICAgICAgIENMQVNTOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxv
b3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSAiICIgKyBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApICsgIiAi
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1hNTCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSBj
dXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBub3QgXiAoZWxlbS5jbGFzc05hbWUgJiYgKCIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAi
KS5yZXBsYWNlKC9bXHRcblxyXS9nLCAiICIpLmluZGV4T2YobWF0Y2gpID49IDApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpbnBsYWNl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5wdXNoKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBpbnBsYWNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJMb29wW2ldID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIElEOiBmdW5jdGlvbigg
bWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXS5yZXBsYWNl
KCByQmFja3NsYXNoLCAiIiApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBU
QUc6IGZ1bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICkudG9Mb3dlckNhc2UoKTsK
ICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgQ0hJTEQ6IGZ1bmN0aW9uKCBtYXRj
aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hbMl0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBd
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzJdLnJlcGxhY2UoL15cK3xccyovZywgJycp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBlcXVhdGlvbnMgbGlr
ZSAnZXZlbicsICdvZGQnLCAnNScsICcybicsICczbisyJywgJzRuLTEnLCAnLW4rNicKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IC8oLT8pKFxkKikoPzpuKFsrXC1d
P1xkKikpPy8uZXhlYygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoWzJdID09PSAiZXZlbiIgJiYgIjJuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIgJiYgIjJuKzEi
IHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhL1xELy50ZXN0KCBt
YXRjaFsyXSApICYmICIwbisiICsgbWF0Y2hbMl0gfHwgbWF0Y2hbMl0pOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlcnMgKGZpcnN0KW4rKGxh
c3QpIGluY2x1ZGluZyBpZiB0aGV5IGFyZSBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoWzJdID0gKHRlc3RbMV0gKyAodGVzdFsyXSB8fCAxKSkgLSAwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzNdID0gdGVzdFszXSAtIDA7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIG1h
dGNoWzJdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvcigg
bWF0Y2hbMF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVE9ETzogTW92ZSB0byBub3JtYWwgY2FjaGluZyBzeXN0ZW0KICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hbMF0gPSBkb25lKys7CgogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIEFUVFI6IGZ1
bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVw
bGFjZSggckJhY2tzbGFzaCwgIiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWlzWE1MICYmIEV4cHIuYXR0ck1hcFtuYW1lXSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IEV4cHIuYXR0ck1hcFtuYW1l
XTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SGFuZGxlIGlmIGFuIHVuLXF1b3RlZCB2YWx1ZSB3YXMgdXNlZAogICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaFs0XSA9ICggbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgIiIgKS5yZXBsYWNlKCBy
QmFja3NsYXNoLCAiIiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsyXSA9
PT0gIn49IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFs0XSA9ICIg
IiArIG1hdGNoWzRdICsgIiAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAg
ICAgICAgIFBTRVVETzogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQs
IG5vdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gIm5vdCIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgZGVhbGluZyB3
aXRoIGEgY29tcGxleCBleHByZXNzaW9uLCBvciBhIHNpbXBsZSBvbmUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICggY2h1bmtlci5leGVjKG1hdGNoWzNdKSB8fCAiIiApLmxl
bmd0aCA+IDEgfHwgL15cdy8udGVzdChtYXRjaFszXSkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSA9IFNpenpsZShtYXRjaFszXSwgbnVsbCwgbnVs
bCwgY3VyTG9vcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gU2l6emxlLmZp
bHRlcihtYXRjaFszXSwgY3VyTG9vcCwgaW5wbGFjZSwgdHJ1ZSBeIG5vdCk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaW5wbGFjZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2guYXBwbHko
IHJlc3VsdCwgcmV0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIEV4cHIubWF0Y2guUE9TLnRlc3QoIG1hdGNoWzBdICkgfHwgRXhwci5tYXRj
aC5DSElMRC50ZXN0KCBtYXRjaFswXSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFBPUzogZnVuY3Rpb24oIG1hdGNoICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaC51bnNoaWZ0KCB0cnVlICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAg
ICAgICAKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBmdW5jdGlv
biggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQg
PT09IGZhbHNlICYmIGVsZW0udHlwZSAhPT0gImhpZGRlbiI7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5jaGVja2VkID09PSB0cnVlOwogICAgICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZ1bmN0
aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3NpbmcgdGhpcyBw
cm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gISFlbGVtLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgIGVtcHR5OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICFlbGVtLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAg
IGhhczogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gISFTaXp6bGUoIG1hdGNoWzNdLCBlbGVtICkubGVuZ3RoOwogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBoZWFkZXI6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKC9oXGQvaSkudGVzdCggZWxlbS5ub2RlTmFtZSApOwog
ICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiggZWxlbSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgg
InR5cGUiICksIHR5cGUgPSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElF
NiBhbmQgNyB3aWxsIG1hcCBlbGVtLnR5cGUgdG8gJ3RleHQnIGZvciBuZXcgSFRNTDUgdHlwZXMg
KHNlYXJjaCwgZXRjKSAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGdldEF0dHJpYnV0
ZSBpbnN0ZWFkIHRvIHRlc3QgdGhpcyBjYXNlCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInRleHQiID09PSB0
eXBlICYmICggYXR0ciA9PT0gdHlwZSB8fCBhdHRyID09PSBudWxsICk7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIHJhZGlvOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlu
cHV0IiAmJiAicmFkaW8iID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAg
ICAgICAgICAgIGNoZWNrYm94OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAi
Y2hlY2tib3giID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgIGZpbGU6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJmaWxlIiA9PT0g
ZWxlbS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBwYXNzd29yZDog
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInBhc3N3b3JkIiA9PT0gZWxlbS50
eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBzdWJtaXQ6IGZ1bmN0aW9u
KCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5h
bWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuYW1lID09
PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAmJiAic3VibWl0IiA9PT0gZWxlbS50eXBl
OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBpbWFnZTogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgImltYWdlIiA9PT0gZWxlbS50eXBlOwogICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICByZXNldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFt
ZSA9PT0gImJ1dHRvbiIpICYmICJyZXNldCIgPT09IGVsZW0udHlwZTsKICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgYnV0dG9uOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmICJidXR0b24i
ID09PSBlbGVtLnR5cGUgfHwgbmFtZSA9PT0gImJ1dHRvbiI7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICgvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pKS50ZXN0KCBl
bGVtLm5vZGVOYW1lICk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGZvY3Vz
OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0g
PT09IGVsZW0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50OwogICAgICAgICAgICAgICAgfQog
ICAgICAgIH0sCiAgICAgICAgc2V0RmlsdGVyczogewogICAgICAgICAgICAgICAgZmlyc3Q6IGZ1
bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0g
MDsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgbGFzdDogZnVuY3Rpb24oIGVs
ZW0sIGksIG1hdGNoLCBhcnJheSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkg
PT09IGFycmF5Lmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAg
IGV2ZW46IGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaSAlIDIgPT09IDA7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIG9kZDog
ZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpICUg
MiA9PT0gMTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgbHQ6IGZ1bmN0aW9u
KCBlbGVtLCBpLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
YXRjaFszXSAtIDA7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGd0OiBmdW5j
dGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBp
ID4gbWF0Y2hbM10gLSAwOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBudGg6
IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoWzNdIC0gMCA9PT0gaTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAg
ICAgZXE6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoWzNdIC0gMCA9PT0gaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
LAogICAgICAgIGZpbHRlcjogewogICAgICAgICAgICAgICAgUFNFVURPOiBmdW5jdGlvbiggZWxl
bSwgbWF0Y2gsIGksIGFycmF5ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9
IG1hdGNoWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IEV4cHIu
ZmlsdGVyc1sgbmFtZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaWx0ZXIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlciggZWxlbSwgaSwg
bWF0Y2gsIGFycmF5ICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBuYW1l
ID09PSAiY29udGFpbnMiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBTaXp6bGUuZ2V0VGV4dChb
IGVsZW0gXSkgfHwgIiIpLmluZGV4T2YobWF0Y2hbM10pID49IDA7CgogICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBuYW1lID09PSAibm90IiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbm90ID0gbWF0Y2hbM107CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgbCA9IG5vdC5sZW5ndGg7IGogPCBsOyBqKysgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdFtqXSA9PT0g
ZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbmFtZSApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAg
IENISUxEOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0eXBlID0gbWF0Y2hbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IGVsZW07CgogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCB0eXBlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIm9ubHkiOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgImZpcnN0IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykgKSAgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUu
bm9kZVR5cGUgPT09IDEgKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHR5cGUgPT09ICJmaXJzdCIgKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IGVsZW07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImxhc3QiOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9IG5v
ZGUubmV4dFNpYmxpbmcpICkgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICJudGgiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGZpcnN0ID0gbWF0Y2hbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtYXRjaFszXTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZG9uZU5hbWUgPSBtYXRjaFswXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwogICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQg
JiYgKHBhcmVudC5zaXpjYWNoZSAhPT0gZG9uZU5hbWUgfHwgIWVsZW0ubm9kZUluZGV4KSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50
ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5vZGUg
PSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBub2RlLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSArK2NvdW50
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zaXpj
YWNoZSA9IGRvbmVOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IGVsZW0ubm9kZUluZGV4IC0gbGFz
dDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ID09
PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZGlmZiA9PT0gMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBJRDogZnVuY3Rpb24o
IGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2Rl
VHlwZSA9PT0gMSAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gbWF0Y2g7CiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFRBRzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1hdGNoID09PSAiKiIgJiYgZWxlbS5u
b2RlVHlwZSA9PT0gMSkgfHwgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBtYXRjaDsK
ICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIENMQVNT
OiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoIiAiICsgKGVsZW0uY2xhc3NOYW1lIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSAr
ICIgIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZiggbWF0Y2ggKSA+
IC0xOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBBVFRSOiBmdW5jdGlvbigg
ZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWF0Y2hb
MV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRXhwci5hdHRySGFu
ZGxlWyBuYW1lIF0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhw
ci5hdHRySGFuZGxlWyBuYW1lIF0oIGVsZW0gKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0gIT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG5hbWUgXSA6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1l
ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZXN1bHQgKyAiIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gbWF0Y2hbMl0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSBtYXRjaFs0XTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9PT0gIiE9IiA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9PT0gIj0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9PT0g
Y2hlY2sgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICIqPSIgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmluZGV4T2YoY2hlY2spID49IDAg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICJ+PSIgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgiICIgKyB2YWx1ZSArICIgIikuaW5kZXhPZihjaGVj
aykgPj0gMCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAmJiByZXN1bHQgIT09IGZhbHNlIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAiIT0iID8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gY2hlY2sgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPT09ICJePSIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlLmluZGV4T2YoY2hlY2spID09PSAwIDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID09PSAiJD0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZS5zdWJzdHIodmFsdWUubGVuZ3RoIC0gY2hlY2subGVuZ3RoKSA9PT0gY2hlY2sgOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICJ8PSIgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID09PSBjaGVjayB8fCB2YWx1ZS5zdWJzdHIoMCwgY2hl
Y2subGVuZ3RoICsgMSkgPT09IGNoZWNrICsgIi0iIDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgUE9TOiBm
dW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbmFtZSA9IG1hdGNoWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bHRlciA9IEV4cHIuc2V0RmlsdGVyc1sgbmFtZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBmaWx0ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZp
bHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn07Cgp2YXIgb3JpZ1BPUyA9IEV4cHIubWF0Y2gu
UE9TLAogICAgICAgIGZlc2NhcGUgPSBmdW5jdGlvbihhbGwsIG51bSl7CiAgICAgICAgICAgICAg
ICByZXR1cm4gIlxcIiArIChudW0gLSAwICsgMSk7CiAgICAgICAgfTsKCmZvciAoIHZhciB0eXBl
IGluIEV4cHIubWF0Y2ggKSB7CiAgICAgICAgRXhwci5tYXRjaFsgdHlwZSBdID0gbmV3IFJlZ0V4
cCggRXhwci5tYXRjaFsgdHlwZSBdLnNvdXJjZSArICgvKD8hW15cW10qXF0pKD8hW15cKF0qXCkp
Ly5zb3VyY2UpICk7CiAgICAgICAgRXhwci5sZWZ0TWF0Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAo
IC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2UgKyBFeHByLm1hdGNoWyB0eXBlIF0uc291cmNlLnJl
cGxhY2UoL1xcKFxkKykvZywgZmVzY2FwZSkgKTsKfQoKdmFyIG1ha2VBcnJheSA9IGZ1bmN0aW9u
KCBhcnJheSwgcmVzdWx0cyApIHsKICAgICAgICBhcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKCBhcnJheSwgMCApOwoKICAgICAgICBpZiAoIHJlc3VsdHMgKSB7CiAgICAgICAgICAg
ICAgICByZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMsIGFycmF5ICk7CiAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0czsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGFycmF5
Owp9OwoKLy8gUGVyZm9ybSBhIHNpbXBsZSBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGhlIGJyb3dz
ZXIgaXMgY2FwYWJsZSBvZgovLyBjb252ZXJ0aW5nIGEgTm9kZUxpc3QgdG8gYW4gYXJyYXkgdXNp
bmcgYnVpbHRpbiBtZXRob2RzLgovLyBBbHNvIHZlcmlmaWVzIHRoYXQgdGhlIHJldHVybmVkIGFy
cmF5IGhvbGRzIERPTSBub2RlcwovLyAod2hpY2ggaXMgbm90IHRoZSBjYXNlIGluIHRoZSBCbGFj
a2JlcnJ5IGJyb3dzZXIpCnRyeSB7CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLCAwIClbMF0ubm9kZVR5cGU7Cgov
LyBQcm92aWRlIGEgZmFsbGJhY2sgbWV0aG9kIGlmIGl0IGRvZXMgbm90IHdvcmsKfSBjYXRjaCgg
ZSApIHsKICAgICAgICBtYWtlQXJyYXkgPSBmdW5jdGlvbiggYXJyYXksIHJlc3VsdHMgKSB7CiAg
ICAgICAgICAgICAgICB2YXIgaSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJl
c3VsdHMgfHwgW107CgogICAgICAgICAgICAgICAgaWYgKCB0b1N0cmluZy5jYWxsKGFycmF5KSA9
PT0gIltvYmplY3QgQXJyYXldIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJv
dG90eXBlLnB1c2guYXBwbHkoIHJldCwgYXJyYXkgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBhcnJheS5sZW5ndGggPT09ICJu
dW1iZXIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBsID0g
YXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnB1c2goIGFycmF5W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGFycmF5W2ldOyBpKysgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggYXJyYXlbaV0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07Cn0K
CnZhciBzb3J0T3JkZXIsIHNpYmxpbmdDaGVjazsKCmlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkgewogICAgICAgIHNvcnRPcmRlciA9IGZ1bmN0
aW9uKCBhLCBiICkgewogICAgICAgICAgICAgICAgaWYgKCBhID09PSBiICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/
IC0xIDogMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gYS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IDE7CiAgICAgICAgfTsKCn0gZWxzZSB7
CiAgICAgICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CiAgICAgICAgICAgICAgICAv
LyBUaGUgbm9kZXMgYXJlIGlkZW50aWNhbCwgd2UgY2FuIGV4aXQgZWFybHkKICAgICAgICAgICAg
ICAgIGlmICggYSA9PT0gYiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRl
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgICAgICAg
ICAgLy8gRmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5kZXggKGluIElFKSBpZiBpdCdzIGF2YWls
YWJsZSBvbiBib3RoIG5vZGVzCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhLnNvdXJjZUlu
ZGV4ICYmIGIuc291cmNlSW5kZXggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
LnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICB2YXIgYWwsIGJsLAogICAgICAgICAgICAgICAgICAgICAgICBhcCA9IFtdLAogICAg
ICAgICAgICAgICAgICAgICAgICBicCA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBhdXAg
PSBhLnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1cCA9IGIucGFyZW50Tm9k
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gYXVwOwoKICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MgKG9yIGlkZW50aWNhbCkgd2UgY2FuIGRvIGEgcXVp
Y2sgY2hlY2sKICAgICAgICAgICAgICAgIGlmICggYXVwID09PSBidXAgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsKCiAgICAgICAgICAgICAg
ICAvLyBJZiBubyBwYXJlbnRzIHdlcmUgZm91bmQgdGhlbiB0aGUgbm9kZXMgYXJlIGRpc2Nvbm5l
Y3RlZAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIWF1cCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFidXAgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5J3JlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSB0
cmVlIHNvIHdlIG5lZWQKICAgICAgICAgICAgICAgIC8vIHRvIGJ1aWxkIHVwIGEgZnVsbCBsaXN0
IG9mIHRoZSBwYXJlbnROb2RlcyBmb3IgY29tcGFyaXNvbgogICAgICAgICAgICAgICAgd2hpbGUg
KCBjdXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOwogICAg
ICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICBjdXIgPSBidXA7CgogICAgICAgICAgICAgICAgd2hpbGUgKCBj
dXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJwLnVuc2hpZnQoIGN1ciApOwogICAgICAg
ICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBhbCA9IGFwLmxlbmd0aDsKICAgICAgICAgICAgICAgIGJsID0gYnAu
bGVuZ3RoOwoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHdhbGtpbmcgZG93biB0aGUgdHJlZSBs
b29raW5nIGZvciBhIGRpc2NyZXBhbmN5CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7
IGkgPCBhbCAmJiBpIDwgYmw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBh
cFtpXSAhPT0gYnBbaV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBXZSBlbmRlZCBzb21lcGxhY2Ug
dXAgdGhlIHRyZWUgc28gZG8gYSBzaWJsaW5nIGNoZWNrCiAgICAgICAgICAgICAgICByZXR1cm4g
aSA9PT0gYWwgPwogICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5nQ2hlY2soIGEsIGJwW2ld
LCAtMSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZ0NoZWNrKCBhcFtpXSwgYiwg
MSApOwogICAgICAgIH07CgogICAgICAgIHNpYmxpbmdDaGVjayA9IGZ1bmN0aW9uKCBhLCBiLCBy
ZXQgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGEgPT09IGIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFy
IGN1ciA9IGEubmV4dFNpYmxpbmc7CgogICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyID09PSBiICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLm5leHRTaWJsaW5nOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH07Cn0KCi8vIFV0aWxpdHkg
ZnVuY3Rpb24gZm9yIHJldHJlaXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9N
IG5vZGVzClNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW1zICkgewogICAgICAgIHZhciBy
ZXQgPSAiIiwgZWxlbTsKCiAgICAgICAgZm9yICggdmFyIGkgPSAwOyBlbGVtc1tpXTsgaSsrICkg
ewogICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1zW2ldOwoKICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgdGV4dCBmcm9tIHRleHQgbm9kZXMgYW5kIENEQVRBIG5vZGVzCiAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gNCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGVsZW0ubm9kZVZhbHVlOwoKICAgICAgICAgICAg
ICAgIC8vIFRyYXZlcnNlIGV2ZXJ5dGhpbmcgZWxzZSwgZXhjZXB0IGNvbW1lbnQgbm9kZXMKICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgIT09IDggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCArPSBTaXp6bGUuZ2V0VGV4dCggZWxlbS5jaGlsZE5vZGVzICk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmV0Owp9OwoKLy8g
Q2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZSB3aGVu
Ci8vIHF1ZXJ5aW5nIGJ5IGdldEVsZW1lbnRCeUlkIChhbmQgcHJvdmlkZSBhIHdvcmthcm91bmQp
CihmdW5jdGlvbigpewogICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGluamVjdCBhIGZha2UgaW5w
dXQgZWxlbWVudCB3aXRoIGEgc3BlY2lmaWVkIG5hbWUKICAgICAgICB2YXIgZm9ybSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLAogICAgICAgICAgICAgICAgaWQgPSAic2NyaXB0IiAr
IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgICAgICAgICAgICByb290ID0gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50OwoKICAgICAgICBmb3JtLmlubmVySFRNTCA9ICI8YSBuYW1lPSciICsg
aWQgKyAiJy8+IjsKCiAgICAgICAgLy8gSW5qZWN0IGl0IGludG8gdGhlIHJvb3QgZWxlbWVudCwg
Y2hlY2sgaXRzIHN0YXR1cywgYW5kIHJlbW92ZSBpdCBxdWlja2x5CiAgICAgICAgcm9vdC5pbnNl
cnRCZWZvcmUoIGZvcm0sIHJvb3QuZmlyc3RDaGlsZCApOwoKICAgICAgICAvLyBUaGUgd29ya2Fy
b3VuZCBoYXMgdG8gZG8gYWRkaXRpb25hbCBjaGVja3MgYWZ0ZXIgYSBnZXRFbGVtZW50QnlJZAog
ICAgICAgIC8vIFdoaWNoIHNsb3dzIHRoaW5ncyBkb3duIGZvciBvdGhlciBicm93c2VycyAoaGVu
Y2UgdGhlIGJyYW5jaGluZykKICAgICAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBp
ZCApICkgewogICAgICAgICAgICAgICAgRXhwci5maW5kLklEID0gZnVuY3Rpb24oIG1hdGNoLCBj
b250ZXh0LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29u
dGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCht
YXRjaFsxXSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtID8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQgPT09IG1hdGNoWzFdIHx8
IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIG0uZ2V0QXR0cmli
dXRlTm9kZSgiaWQiKS5ub2RlVmFsdWUgPT09IG1hdGNoWzFdID8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21dIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIEV4cHIuZmlsdGVyLklEID0gZnVuY3Rpb24o
IGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHR5cGVv
ZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIGVsZW0uZ2V0QXR0cmli
dXRlTm9kZSgiaWQiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVU
eXBlID09PSAxICYmIG5vZGUgJiYgbm9kZS5ub2RlVmFsdWUgPT09IG1hdGNoOwogICAgICAgICAg
ICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQoIGZvcm0gKTsKCiAg
ICAgICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICByb290ID0gZm9ybSA9IG51bGw7
Cn0pKCk7CgooZnVuY3Rpb24oKXsKICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGJyb3dz
ZXIgcmV0dXJucyBvbmx5IGVsZW1lbnRzCiAgICAgICAgLy8gd2hlbiBkb2luZyBnZXRFbGVtZW50
c0J5VGFnTmFtZSgiKiIpCgogICAgICAgIC8vIENyZWF0ZSBhIGZha2UgZWxlbWVudAogICAgICAg
IHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBkaXYuYXBw
ZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7CgogICAgICAgIC8vIE1ha2Ug
c3VyZSBubyBjb21tZW50cyBhcmUgZm91bmQKICAgICAgICBpZiAoIGRpdi5nZXRFbGVtZW50c0J5
VGFnTmFtZSgiKiIpLmxlbmd0aCA+IDAgKSB7CiAgICAgICAgICAgICAgICBFeHByLmZpbmQuVEFH
ID0gZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIG1hdGNoWzFdICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gPT09ICIqIiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gW107CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgcmVzdWx0c1tpXTsgaSsrICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRzW2ldLm5vZGVUeXBl
ID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0bXAucHVzaCggcmVzdWx0c1tpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgICAgICAg
ICAgICB9OwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFuIGF0dHJpYnV0
ZSByZXR1cm5zIG5vcm1hbGl6ZWQgaHJlZiBhdHRyaWJ1dGVzCiAgICAgICAgZGl2LmlubmVySFRN
TCA9ICI8YSBocmVmPScjJz48L2E+IjsKCiAgICAgICAgaWYgKCBkaXYuZmlyc3RDaGlsZCAmJiB0
eXBlb2YgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJgogICAg
ICAgICAgICAgICAgICAgICAgICBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSAh
PT0gIiMiICkgewoKICAgICAgICAgICAgICAgIEV4cHIuYXR0ckhhbmRsZS5ocmVmID0gZnVuY3Rp
b24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSggImhyZWYiLCAyICk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAg
Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICBkaXYgPSBudWxsOwp9KSgpOwoKaWYgKCBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgewogICAgICAgIChmdW5jdGlvbigpewogICAgICAg
ICAgICAgICAgdmFyIG9sZFNpenpsZSA9IFNpenpsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlkID0gIl9fc2l6emxlX18iOwoKICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAi
PHAgY2xhc3M9J1RFU1QnPjwvcD4iOwoKICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBjYW4ndCBo
YW5kbGUgdXBwZXJjYXNlIG9yIHVuaWNvZGUgY2hhcmFjdGVycyB3aGVuCiAgICAgICAgICAgICAg
ICAvLyBpbiBxdWlya3MgbW9kZS4KICAgICAgICAgICAgICAgIGlmICggZGl2LnF1ZXJ5U2VsZWN0
b3JBbGwgJiYgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIi5URVNUIikubGVuZ3RoID09PSAwICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
CiAgICAgICAgICAgICAgICBTaXp6bGUgPSBmdW5jdGlvbiggcXVlcnksIGNvbnRleHQsIGV4dHJh
LCBzZWVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBk
b2N1bWVudDsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlIHF1ZXJ5U2VsZWN0
b3JBbGwgb24gbm9uLVhNTCBkb2N1bWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gKElE
IHNlbGVjdG9ycyBkb24ndCB3b3JrIGluIG5vbi1IVE1MIGRvY3VtZW50cykKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhc2VlZCAmJiAhU2l6emxlLmlzWE1MKGNvbnRleHQpICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBmaW5kIGEgc2VsZWN0b3Ig
dG8gc3BlZWQgdXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSAv
XihcdyskKXxeXC4oW1x3XC1dKyQpfF4jKFtcd1wtXSskKS8uZXhlYyggcXVlcnkgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hdGNoICYmIChjb250ZXh0Lm5vZGVUeXBlID09PSAxIHx8IGNvbnRleHQubm9kZVR5
cGUgPT09IDkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3BlZWQtdXA6IFNpenpsZSgiVEFHIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbWF0Y2hbMV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoIHF1ZXJ5ICksIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVk
LXVwOiBTaXp6bGUoIi5DTEFTUyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSAmJiBFeHByLmZpbmQuQ0xBU1MgJiYgY29udGV4dC5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUoIG1hdGNoWzJdICksIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gOSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoImJvZHkiKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJvZHkgZWxlbWVudCBvbmx5IGV4aXN0
cyBvbmNlLCBvcHRpbWl6ZSBmaW5kaW5nIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHF1ZXJ5ID09PSAiYm9keSIgJiYgY29udGV4dC5ib2R5ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFy
cmF5KCBbIGNvbnRleHQuYm9keSBdLCBleHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIiNJRCIpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaCAmJiBtYXRjaFszXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBjb250
ZXh0LmdldEVsZW1lbnRCeUlkKCBtYXRjaFszXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVu
IEJsYWNrYmVycnkgNC42IHJldHVybnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVu
dCAjNjk2MwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJ
RSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVt
LmlkID09PSBtYXRjaFszXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoIFsgZWxlbSBdLCBl
eHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBbXSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBj
b250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLCBleHRyYSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChxc2FFcnJvcikge30KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcVNBIHdvcmtzIHN0cmFuZ2VseSBvbiBFbGVtZW50LXJv
b3RlZCBxdWVyaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHdv
cmsgYXJvdW5kIHRoaXMgYnkgc3BlY2lmeWluZyBhbiBleHRyYSBJRCBvbiB0aGUgcm9vdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3b3JraW5nIHVwIGZyb20gdGhlcmUg
KFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUgdGVjaG5pcXVlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVjdCBlbGVtZW50
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnRleHQubm9k
ZVR5cGUgPT09IDEgJiYgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGRDb250
ZXh0ID0gY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoICJpZCIgKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gb2xkIHx8IGlkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXJlbnQgPSBjb250
ZXh0LnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgPSAvXlxzKlsrfl0vLnRlc3QoIHF1ZXJ5
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb2xkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnNldEF0dHJpYnV0ZSggImlkIiwgbmlkICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuaWQgPSBuaWQucmVwbGFjZSggLycvZywgIlxcJCYiICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJlbGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgJiYgaGFzUGFyZW50
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJl
bGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgfHwgaGFzUGFyZW50ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXko
IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggIltpZD0nIiArIG5pZCArICInXSAiICsgcXVlcnkg
KSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gocHNl
dWRvRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmlu
YWxseSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIW9sZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbGRDb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggImlkIiApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG9sZFNpenpsZShxdWVyeSwgY29udGV4dCwgZXh0cmEsIHNlZWQp
OwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgcHJvcCBpbiBv
bGRTaXp6bGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZVsgcHJvcCBdID0gb2xk
U2l6emxlWyBwcm9wIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gcmVs
ZWFzZSBtZW1vcnkgaW4gSUUKICAgICAgICAgICAgICAgIGRpdiA9IG51bGw7CiAgICAgICAgfSko
KTsKfQoKKGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQsCiAgICAgICAgICAgICAgICBtYXRjaGVzID0gaHRtbC5tYXRjaGVzU2VsZWN0b3IgfHwg
aHRtbC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgaHRtbC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwg
aHRtbC5tc01hdGNoZXNTZWxlY3RvcjsKCiAgICAgICAgaWYgKCBtYXRjaGVzICkgewogICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1Nl
bGVjdG9yCiAgICAgICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5IGZh
aWxzIHRoaXMpCiAgICAgICAgICAgICAgICB2YXIgZGlzY29ubmVjdGVkTWF0Y2ggPSAhbWF0Y2hl
cy5jYWxsKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLCAiZGl2IiApLAogICAgICAg
ICAgICAgICAgICAgICAgICBwc2V1ZG9Xb3JrcyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIHRy
eSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBl
eGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Vja28gZG9lcyBub3QgZXJyb3Is
IHJldHVybnMgZmFsc2UgaW5zdGVhZAogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmNh
bGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgIlt0ZXN0IT0nJ106c2l6emxlIiApOwogICAg
ICAgIAogICAgICAgICAgICAgICAgfSBjYXRjaCggcHNldWRvRXJyb3IgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHBzZXVkb1dvcmtzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICBTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIG5vZGUsIGV4cHIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBz
ZWxlY3RvcnMgYXJlIHF1b3RlZAogICAgICAgICAgICAgICAgICAgICAgICBleHByID0gZXhwci5y
ZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCAiPSckMSddIik7CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFTaXp6bGUuaXNYTUwoIG5vZGUgKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcHNldWRvV29ya3MgfHwgIUV4cHIubWF0Y2guUFNFVURPLnRlc3QoIGV4cHIg
KSAmJiAhLyE9Ly50ZXN0KCBleHByICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIG5vZGUsIGV4cHIgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIDkn
cyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgfHwg
IWRpc2Nvbm5lY3RlZE1hdGNoIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9k
ZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUg
OSwgc28gY2hlY2sgZm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZG9jdW1lbnQgJiYgbm9kZS5kb2N1bWVu
dC5ub2RlVHlwZSAhPT0gMTEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30K
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFNpenpsZShleHByLCBudWxsLCBudWxsLCBbbm9kZV0pLmxlbmd0aCA+IDA7CiAgICAgICAgICAg
ICAgICB9OwogICAgICAgIH0KfSkoKTsKCihmdW5jdGlvbigpewogICAgICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCiAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8
ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7CgogICAg
ICAgIC8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xhc3NuYW1lIChpbiA5LjYpCiAgICAg
ICAgLy8gQWxzbywgbWFrZSBzdXJlIHRoYXQgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBhY3R1YWxs
eSBleGlzdHMKICAgICAgICBpZiAoICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBkaXYu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMCApIHsKICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIFNhZmFyaSBjYWNoZXMgY2xhc3MgYXR0
cmlidXRlcywgZG9lc24ndCBjYXRjaCBjaGFuZ2VzIChpbiAzLjIpCiAgICAgICAgZGl2Lmxhc3RD
aGlsZC5jbGFzc05hbWUgPSAiZSI7CgogICAgICAgIGlmICggZGl2LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoImUiKS5sZW5ndGggPT09IDEgKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgfQogICAgICAgIAogICAgICAgIEV4cHIub3JkZXIuc3BsaWNlKDEsIDAsICJDTEFTUyIpOwog
ICAgICAgIEV4cHIuZmluZC5DTEFTUyA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCwgaXNYTUwg
KSB7CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUgIT09ICJ1bmRlZmluZWQiICYmICFpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShtYXRjaFsxXSk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUK
ICAgICAgICBkaXYgPSBudWxsOwp9KSgpOwoKZnVuY3Rpb24gZGlyTm9kZUNoZWNrKCBkaXIsIGN1
ciwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICkgewogICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgIHZhciBlbGVtID0gY2hlY2tTZXRbaV07CgogICAgICAgICAgICAgICAgaWYgKCBlbGVt
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBmYWxzZTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtW2Rpcl07CgogICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtLnNpemNhY2hlID09PSBkb25lTmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZVR5cGUgPT09IDEgJiYgIWlzWE1MICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gY3VyICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2ggPSBlbGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVtkaXJdOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IG1h
dGNoOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKZnVuY3Rpb24gZGlyQ2hlY2soIGRp
ciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKSB7CiAgICAgICAg
Zm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAg
ICAgICAgICAgICAgdmFyIGVsZW0gPSBjaGVja1NldFtpXTsKCiAgICAgICAgICAgICAgICBpZiAo
IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1b
ZGlyXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc2l6Y2FjaGUgPT09IGRvbmVOYW1lICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjaGVja1Nl
dFtlbGVtLnNpenNldF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzWE1MICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpemNhY2hlID0gZG9uZU5h
bWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0u
c2l6c2V0ID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjdXIgIT09
ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0gPT09IGN1ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBTaXp6bGUuZmlsdGVyKCBjdXIsIFtl
bGVtXSApLmxlbmd0aCA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoID0gZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVtkaXJdOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IG1hdGNoOwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0KfQoKaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
Y29udGFpbnMgKSB7CiAgICAgICAgU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gYSAhPT0gYiAmJiAoYS5jb250YWlucyA/IGEuY29udGFp
bnMoYikgOiB0cnVlKTsKICAgICAgICB9OwoKfSBlbHNlIGlmICggZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkgewogICAgICAgIFNpenpsZS5jb250YWlu
cyA9IGZ1bmN0aW9uKCBhLCBiICkgewogICAgICAgICAgICAgICAgcmV0dXJuICEhKGEuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24oYikgJiAxNik7CiAgICAgICAgfTsKCn0gZWxzZSB7CiAgICAgICAg
U2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgfTsKfQoKU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAg
ICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vz
bid0IHlldCBleGlzdAogICAgICAgIC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAt
ICM0ODMzKSAKICAgICAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gKGVsZW0gPyBlbGVtLm93bmVy
RG9jdW1lbnQgfHwgZWxlbSA6IDApLmRvY3VtZW50RWxlbWVudDsKCiAgICAgICAgcmV0dXJuIGRv
Y3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gIkhUTUwiIDogZmFs
c2U7Cn07Cgp2YXIgcG9zUHJvY2VzcyA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsK
ICAgICAgICB2YXIgbWF0Y2gsCiAgICAgICAgICAgICAgICB0bXBTZXQgPSBbXSwKICAgICAgICAg
ICAgICAgIGxhdGVyID0gIiIsCiAgICAgICAgICAgICAgICByb290ID0gY29udGV4dC5ub2RlVHlw
ZSA/IFtjb250ZXh0XSA6IGNvbnRleHQ7CgogICAgICAgIC8vIFBvc2l0aW9uIHNlbGVjdG9ycyBt
dXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpbHRlcgogICAgICAgIC8vIEFuZCBzbyBtdXN0IDpub3Qo
cG9zaXRpb25hbCkgc28gd2UgbW92ZSBhbGwgUFNFVURPcyB0byB0aGUgZW5kCiAgICAgICAgd2hp
bGUgKCAobWF0Y2ggPSBFeHByLm1hdGNoLlBTRVVETy5leGVjKCBzZWxlY3RvciApKSApIHsKICAg
ICAgICAgICAgICAgIGxhdGVyICs9IG1hdGNoWzBdOwogICAgICAgICAgICAgICAgc2VsZWN0b3Ig
PSBzZWxlY3Rvci5yZXBsYWNlKCBFeHByLm1hdGNoLlBTRVVETywgIiIgKTsKICAgICAgICB9Cgog
ICAgICAgIHNlbGVjdG9yID0gRXhwci5yZWxhdGl2ZVtzZWxlY3Rvcl0gPyBzZWxlY3RvciArICIq
IiA6IHNlbGVjdG9yOwoKICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSByb290Lmxlbmd0aDsg
aSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgIFNpenpsZSggc2VsZWN0b3IsIHJvb3RbaV0s
IHRtcFNldCApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFNpenpsZS5maWx0ZXIoIGxhdGVy
LCB0bXBTZXQgKTsKfTsKCi8vIEVYUE9TRQpqUXVlcnkuZmluZCA9IFNpenpsZTsKalF1ZXJ5LmV4
cHIgPSBTaXp6bGUuc2VsZWN0b3JzOwpqUXVlcnkuZXhwclsiOiJdID0galF1ZXJ5LmV4cHIuZmls
dGVyczsKalF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0OwpqUXVlcnkudGV4dCA9IFNp
enpsZS5nZXRUZXh0OwpqUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7CmpRdWVyeS5jb250
YWlucyA9IFNpenpsZS5jb250YWluczsKCgp9KSgpOwoKCnZhciBydW50aWwgPSAvVW50aWwkLywK
ICAgICAgICBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldlVudGlsfHByZXZBbGwpLywK
ICAgICAgICAvLyBOb3RlOiBUaGlzIFJlZ0V4cCBzaG91bGQgYmUgaW1wcm92ZWQsIG9yIGxpa2Vs
eSBwdWxsZWQgZnJvbSBTaXp6bGUKICAgICAgICBybXVsdGlzZWxlY3RvciA9IC8sLywKICAgICAg
ICBpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC8sCiAgICAgICAgc2xpY2UgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UsCiAgICAgICAgUE9TID0galF1ZXJ5LmV4cHIubWF0Y2guUE9TLAogICAgICAg
IC8vIG1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0
aW5nIGZyb20gYSB1bmlxdWUgc2V0CiAgICAgICAgZ3VhcmFudGVlZFVuaXF1ZSA9IHsKICAgICAg
ICAgICAgICAgIGNoaWxkcmVuOiB0cnVlLAogICAgICAgICAgICAgICAgY29udGVudHM6IHRydWUs
CiAgICAgICAgICAgICAgICBuZXh0OiB0cnVlLAogICAgICAgICAgICAgICAgcHJldjogdHJ1ZQog
ICAgICAgIH07CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBmaW5kOiBmdW5jdGlvbiggc2Vs
ZWN0b3IgKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGksIGw7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09
ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBzZWxl
Y3RvciApLmZpbHRlcihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBpID0gMCwgbCA9IHNlbGYubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZb
IGkgXSwgdGhpcyApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciByZXQgPSB0
aGlzLnB1c2hTdGFjayggIiIsICJmaW5kIiwgc2VsZWN0b3IgKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoLCBuLCByOwoKICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9
IHJldC5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWxlY3Rv
ciwgdGhpc1tpXSwgcmV0ICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGkgPiAwICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBy
ZXN1bHRzIGFyZSB1bmlxdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBu
ID0gbGVuZ3RoOyBuIDwgcmV0Lmxlbmd0aDsgbisrICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggciA9IDA7IHIgPCBsZW5ndGg7IHIrKyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXRbcl0gPT09
IHJldFtuXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXQuc3BsaWNlKG4tLSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKICAg
ICAgICAgICAgICAgIHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQgKTsKICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGFyZ2V0cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMs
IHRhcmdldHNbaV0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAg
bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5w
dXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciwgZmFsc2UpLCAibm90Iiwgc2VsZWN0b3Ip
OwogICAgICAgIH0sCgogICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3Is
IHRydWUpLCAiZmlsdGVyIiwgc2VsZWN0b3IgKTsKICAgICAgICB9LAoKICAgICAgICBpczogZnVu
Y3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAgICAgICAgcmV0dXJuICEhc2VsZWN0b3IgJiYg
KCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5sZW5ndGggPiAwIDoKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5maWx0ZXIoIHNlbGVjdG9yICkubGVuZ3RoID4gMCApOwogICAgICAg
IH0sCgogICAgICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7CiAg
ICAgICAgICAgICAgICB2YXIgcmV0ID0gW10sIGksIGwsIGN1ciA9IHRoaXNbMF07CiAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgIC8vIEFycmF5CiAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5pc0FycmF5KCBzZWxlY3RvcnMgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG1hdGNoLCBzZWxlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVz
ID0ge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAxOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBjdXIgJiYgc2VsZWN0b3JzLmxlbmd0aCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNlbGVjdG9ycy5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFtYXRjaGVzWyBzZWxlY3RvciBdICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzWyBzZWxlY3RvciBdID0gUE9T
LnRlc3QoIHNlbGVjdG9yICkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgfHwgdGhpcy5jb250
ZXh0ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdG9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBj
b250ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
c2VsZWN0b3IgaW4gbWF0Y2hlcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaGVzWyBzZWxlY3RvciBdOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaC5qcXVlcnkgPyBt
YXRjaC5pbmRleCggY3VyICkgPiAtMSA6IGpRdWVyeSggY3VyICkuaXMoIG1hdGNoICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
LnB1c2goeyBzZWxlY3Rvcjogc2VsZWN0b3IsIGVsZW06IGN1ciwgbGV2ZWw6IGxldmVsIH0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCsrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTdHJp
bmcKICAgICAgICAgICAgICAgIHZhciBwb3MgPSBQT1MudGVzdCggc2VsZWN0b3JzICkgfHwgdHlw
ZW9mIHNlbGVjdG9ycyAhPT0gInN0cmluZyIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwOwoKICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
LCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGN1ciA9IHRoaXNbaV07CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBvcyA/IHBvcy5pbmRleChjdXIp
ID4gLTEgOiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3RvcnMpICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGN1ciApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWN1ciB8fCAhY3VyLm93bmVyRG9jdW1lbnQgfHwgY3Vy
ID09PSBjb250ZXh0IHx8IGN1ci5ub2RlVHlwZSA9PT0gMTEgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHJldCA9IHJldC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQ7Cgog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsICJjbG9zZXN0Iiwgc2Vs
ZWN0b3JzICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBv
ZiBhbiBlbGVtZW50IHdpdGhpbgogICAgICAgIC8vIHRoZSBtYXRjaGVkIHNldCBvZiBlbGVtZW50
cwogICAgICAgIGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHsKCiAgICAgICAgICAgICAgICAvLyBO
byBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudAogICAgICAgICAgICAgICAgaWYgKCAh
ZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggdGhpc1swXSAmJiB0aGlz
WzBdLnBhcmVudE5vZGUgKSA/IHRoaXMucHJldkFsbCgpLmxlbmd0aCA6IC0xOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIGluZGV4IGluIHNlbGVjdG9yCiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWzBdLCBqUXVlcnkoIGVsZW0gKSApOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24g
b2YgdGhlIGRlc2lyZWQgZWxlbWVudAogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFy
cmF5KAogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBv
YmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5qcXVlcnkgPyBlbGVtWzBdIDogZWxlbSwgdGhpcyApOwogICAgICAgIH0sCgogICAgICAg
IGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgdmFy
IHNldCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSA6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgJiYgc2VsZWN0b3Iu
bm9kZVR5cGUgPyBbIHNlbGVjdG9yIF0gOiBzZWxlY3RvciApLAogICAgICAgICAgICAgICAgICAg
ICAgICBhbGwgPSBqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIHNldCApOwoKICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggaXNEaXNjb25uZWN0ZWQoIHNldFswXSApIHx8IGlz
RGlzY29ubmVjdGVkKCBhbGxbMF0gKSA/CiAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA6CiAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS51bmlxdWUoIGFsbCApICk7CiAgICAgICAgfSwK
CiAgICAgICAgYW5kU2VsZjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5hZGQoIHRoaXMucHJldk9iamVjdCApOwogICAgICAgIH0KfSk7CgovLyBBIHBhaW5mdWxseSBz
aW1wbGUgY2hlY2sgdG8gc2VlIGlmIGFuIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkCi8vIGZyb20g
YSBkb2N1bWVudCAoc2hvdWxkIGJlIGltcHJvdmVkLCB3aGVyZSBmZWFzaWJsZSkuCmZ1bmN0aW9u
IGlzRGlzY29ubmVjdGVkKCBub2RlICkgewogICAgICAgIHJldHVybiAhbm9kZSB8fCAhbm9kZS5w
YXJlbnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMTE7Cn0KCmpRdWVyeS5l
YWNoKHsKICAgICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAg
dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJl
bnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7CiAgICAgICAgfSwK
ICAgICAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIgKTsKICAgICAgICB9LAogICAgICAgIHBh
cmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewogICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50aWwgKTsKICAgICAgICB9
LAogICAgICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IGpRdWVyeS5udGgoIGVsZW0sIDIsICJuZXh0U2libGluZyIgKTsKICAgICAgICB9LAogICAgICAg
IHByZXY6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5u
dGgoIGVsZW0sIDIsICJwcmV2aW91c1NpYmxpbmciICk7CiAgICAgICAgfSwKICAgICAgICBuZXh0
QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGly
KCBlbGVtLCAibmV4dFNpYmxpbmciICk7CiAgICAgICAgfSwKICAgICAgICBwcmV2QWxsOiBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAi
cHJldmlvdXNTaWJsaW5nIiApOwogICAgICAgIH0sCiAgICAgICAgbmV4dFVudGlsOiBmdW5jdGlv
biggZWxlbSwgaSwgdW50aWwgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpcigg
ZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwgKTsKICAgICAgICB9LAogICAgICAgIHByZXZVbnRp
bDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS5kaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOwogICAgICAgIH0sCiAg
ICAgICAgc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IGpRdWVyeS5zaWJsaW5nKCBlbGVtLnBhcmVudE5vZGUuZmlyc3RDaGlsZCwgZWxlbSApOwogICAg
ICAgIH0sCiAgICAgICAgY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLmZpcnN0Q2hpbGQgKTsKICAgICAgICB9LAog
ICAgICAgIGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpZnJhbWUiICkgPwogICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQg
OgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFrZUFycmF5KCBlbGVtLmNoaWxkTm9k
ZXMgKTsKICAgICAgICB9Cn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKICAgICAgICBqUXVlcnku
Zm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAg
ICB2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICksCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSB2YXJpYWJsZSAnYXJncycgd2FzIGludHJvZHVjZWQgaW4KICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvY29t
bWl0LzUyYTAyMzgKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gd29yayBhcm91bmQgYSBi
dWcgaW4gQ2hyb21lIDEwIChEZXYpIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRoZSBidWcg
aXMgZml4ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEwNTAKICAgICAgICAgICAgICAgICAgICAgICAgYXJn
cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTsKCiAgICAgICAgICAgICAgICBpZiAoICFydW50aWwu
dGVzdCggbmFtZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHVudGls
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggc2VsZWN0b3IgJiYgdHlw
ZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHJldCApOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHJldCA9IHRoaXMubGVuZ3RoID4gMSAmJiAhZ3VhcmFudGVlZFVuaXF1ZVsg
bmFtZSBdID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQ7CgogICAgICAgICAgICAgICAgaWYg
KCAodGhpcy5sZW5ndGggPiAxIHx8IHJtdWx0aXNlbGVjdG9yLnRlc3QoIHNlbGVjdG9yICkpICYm
IHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCA9IHJldC5yZXZlcnNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5hbWUsIGFyZ3Muam9pbigiLCIpICk7CiAgICAgICAg
fTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBleHByLCBl
bGVtcywgbm90ICkgewogICAgICAgICAgICAgICAgaWYgKCBub3QgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxID8KICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGVsZW1zWzBdLCBleHByKSA/
IFsgZWxlbXNbMF0gXSA6IFtdIDoKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQu
bWF0Y2hlcyhleHByLCBlbGVtcyk7CiAgICAgICAgfSwKCiAgICAgICAgZGlyOiBmdW5jdGlvbigg
ZWxlbSwgZGlyLCB1bnRpbCApIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaGVkID0gW10sCiAg
ICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGVsZW1bIGRpciBdOwoKICAgICAgICAgICAgICAg
IHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gOSAmJiAodW50aWwgPT09IHVuZGVmaW5l
ZCB8fCBjdXIubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeSggY3VyICkuaXMoIHVudGlsICkpICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2goIGN1ciApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1cltkaXJd
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQ7CiAgICAg
ICAgfSwKCiAgICAgICAgbnRoOiBmdW5jdGlvbiggY3VyLCByZXN1bHQsIGRpciwgZWxlbSApIHsK
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCAxOwogICAgICAgICAgICAgICAgdmFy
IG51bSA9IDA7CgogICAgICAgICAgICAgICAgZm9yICggOyBjdXI7IGN1ciA9IGN1cltkaXJdICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiArK251
bSA9PT0gcmVzdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cjsKICAgICAgICB9LAoKICAgICAgICBzaWJsaW5nOiBmdW5jdGlvbiggbiwg
ZWxlbSApIHsKICAgICAgICAgICAgICAgIHZhciByID0gW107CgogICAgICAgICAgICAgICAgZm9y
ICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgci5wdXNoKCBuICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcjsKICAgICAgICB9Cn0pOwoKLy8g
SW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3QK
ZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgewoKICAgICAgICAv
LyBDYW4ndCBwYXNzIG51bGwgb3IgdW5kZWZpbmVkIHRvIGluZGV4T2YgaW4gRmlyZWZveCA0CiAg
ICAgICAgLy8gU2V0IHRvIDAgdG8gc2tpcCBzdHJpbmcgY2hlY2sKICAgICAgICBxdWFsaWZpZXIg
PSBxdWFsaWZpZXIgfHwgMDsKCiAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlm
aWVyICkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1
bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0VmFsID0g
ISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0VmFsID09PSBrZWVwOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgIH0g
ZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoZWxlbSA9PT0gcXVhbGlmaWVyKSA9PT0ga2VlcDsKICAgICAgICAg
ICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSAic3Ry
aW5nIiApIHsKICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGpRdWVyeS5ncmVwKGVsZW1l
bnRzLCBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW0ubm9kZVR5cGUgPT09IDE7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBp
ZiAoIGlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIsIGZpbHRlcmVkLCAha2VlcCk7CiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZXIgPSBq
UXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGZpbHRlcmVkICk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfQoKICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBl
bGVtLCBpICkgewogICAgICAgICAgICAgICAgcmV0dXJuIChqUXVlcnkuaW5BcnJheSggZWxlbSwg
cXVhbGlmaWVyICkgPj0gMCkgPT09IGtlZXA7CiAgICAgICAgfSk7Cn0KCgoKCnZhciByaW5saW5l
alF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywKICAgICAgICBybGVhZGluZ1do
aXRlc3BhY2UgPSAvXlxzKy8sCiAgICAgICAgcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxl
bWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZywK
ICAgICAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAogICAgICAgIHJ0Ym9keSA9IC88dGJvZHkv
aSwKICAgICAgICByaHRtbCA9IC88fCYjP1x3KzsvLAogICAgICAgIHJub2NhY2hlID0gLzwoPzpz
Y3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSwKICAgICAgICAvLyBjaGVja2VkPSJj
aGVja2VkIiBvciBjaGVja2VkCiAgICAgICAgcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18
PVxzKi5jaGVja2VkLikvaSwKICAgICAgICByc2NyaXB0VHlwZSA9IC9cLyhqYXZhfGVjbWEpc2Ny
aXB0L2ksCiAgICAgICAgcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8s
CiAgICAgICAgd3JhcE1hcCA9IHsKICAgICAgICAgICAgICAgIG9wdGlvbjogWyAxLCAiPHNlbGVj
dCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iIF0sCiAgICAgICAgICAgICAgICBs
ZWdlbmQ6IFsgMSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCiAgICAgICAgICAgICAg
ICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKICAgICAgICAgICAgICAgIHRy
OiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAogICAgICAgICAg
ICAgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJs
ZT4iIF0sCiAgICAgICAgICAgICAgICBjb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48
Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCiAgICAgICAgICAgICAgICBhcmVh
OiBbIDEsICI8bWFwPiIsICI8L21hcD4iIF0sCiAgICAgICAgICAgICAgICBfZGVmYXVsdDogWyAw
LCAiIiwgIiIgXQogICAgICAgIH07Cgp3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247
CndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBN
YXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7CndyYXBNYXAudGggPSB3cmFwTWFwLnRkOwoKLy8g
SUUgY2FuJ3Qgc2VyaWFsaXplIDxsaW5rPiBhbmQgPHNjcmlwdD4gdGFncyBub3JtYWxseQppZiAo
ICFqUXVlcnkuc3VwcG9ydC5odG1sU2VyaWFsaXplICkgewogICAgICAgIHdyYXBNYXAuX2RlZmF1
bHQgPSBbIDEsICJkaXY8ZGl2PiIsICI8L2Rpdj4iIF07Cn0KCmpRdWVyeS5mbi5leHRlbmQoewog
ICAgICAgIHRleHQ6IGZ1bmN0aW9uKCB0ZXh0ICkgewogICAgICAgICAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbih0ZXh0KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi50ZXh0KCB0ZXh0LmNhbGwodGhpcywgaSwgc2VsZi50ZXh0KCkpICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIHRleHQgIT09ICJvYmplY3QiICYmIHRleHQgIT09IHVuZGVmaW5lZCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHkoKS5hcHBlbmQoICh0aGlzWzBdICYm
IHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoIHRleHQg
KSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkudGV4
dCggdGhpcyApOwogICAgICAgIH0sCgogICAgICAgIHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkg
ewogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykud3JhcEFsbCggaHRtbC5jYWxs
KHRoaXMsIGkpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbMF0ub3duZXJEb2N1bWVu
dCApLmVxKDApLmNsb25lKHRydWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlz
WzBdLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcC5p
bnNlcnRCZWZvcmUoIHRoaXNbMF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcC5tYXAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCAmJiBlbGVtLmZpcnN0Q2hpbGQubm9kZVR5
cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ID0gZWxlbS5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0pLmFwcGVuZCggdGhpcyApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHdyYXBJbm5lcjogZnVuY3Rp
b24oIGh0bWwgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1s
ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
aSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS53cmFwSW5u
ZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZW50cy5sZW5ndGggKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMud3JhcEFsbCggaHRtbCApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmFwcGVuZCggaHRtbCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICB3cmFwOiBmdW5jdGlvbiggaHRtbCAp
IHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWwgKTsKICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIHVud3JhcDogZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJib2R5IiApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlcGxhY2VX
aXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSkuZW5kKCk7CiAgICAgICAgfSwKCiAgICAgICAgYXBwZW5kOiBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwg
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ub2Rl
VHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVu
ZENoaWxkKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0pOwogICAgICAgIH0sCgogICAgICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxl
bSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVt
LCB0aGlzLmZpcnN0Q2hpbGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgYmVmb3JlOiBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFy
ZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2V0ID0galF1ZXJ5KGFyZ3VtZW50c1swXSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHNldC5wdXNoLmFwcGx5KCBzZXQsIHRoaXMudG9BcnJheSgp
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggc2V0LCAi
YmVmb3JlIiwgYXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAg
ICAgYWZ0ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICYmIHRo
aXNbMF0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwg
dGhpcy5uZXh0U2libGluZyApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBzZXQgPSB0aGlzLnB1c2hTdGFjayggdGhpcywgImFmdGVyIiwgYXJndW1lbnRz
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wdXNoLmFwcGx5KCBzZXQsIGpRdWVyeShh
cmd1bWVudHNbMF0pLnRvQXJyYXkoKSApOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2V0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIGtlZXBEYXRhIGlz
IGZvciBpbnRlcm5hbCB1c2Ugb25seS0tZG8gbm90IGRvY3VtZW50CiAgICAgICAgcmVtb3ZlOiBm
dW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhICkgewogICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBlbGVtOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3Is
IFsgZWxlbSBdICkubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCIqIikgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50
Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGVtcHR5OiBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSB0aGlz
W2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBl
bGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIp
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggZWxlbS5maXJzdENoaWxkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgfSwKCiAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFu
ZEV2ZW50cyApIHsKICAgICAgICAgICAgICAgIGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRz
ID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7CiAgICAgICAgICAgICAgICBkZWVwRGF0
YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDog
ZGVlcERhdGFBbmRFdmVudHM7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRo
aXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CiAgICAgICAgICAgICAgICB9
KTsKICAgICAgICB9LAoKICAgICAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7CiAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzWzBdICYmIHRoaXNbMF0ubm9kZVR5cGUgPT09IDEgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXNbMF0uaW5uZXJIVE1MLnJlcGxhY2UocmlubGluZWpR
dWVyeSwgIiIpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsOwoKICAgICAg
ICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBp
bm5lckhUTUwKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0
cmluZyIgJiYgIXJub2NhY2hlLnRlc3QoIHZhbHVlICkgJiYKICAgICAgICAgICAgICAgICAgICAg
ICAgKGpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlIHx8ICFybGVhZGluZ1doaXRlc3Bh
Y2UudGVzdCggdmFsdWUgKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIXdyYXBNYXBbIChy
dGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7
CgogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocnhodG1sVGFn
LCAiPCQxPjwvJDI+Iik7CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBp
IDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbaV0ubm9kZVR5cGUgPT09IDEg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5jbGVhbkRhdGEoIHRoaXNbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLmlubmVySFRN
TCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNr
IG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHZhbHVlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWFjaChm
dW5jdGlvbihpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpR
dWVyeSggdGhpcyApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmh0bWwo
IHZhbHVlLmNhbGwodGhpcywgaSwgc2VsZi5odG1sKCkpICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgcmVwbGFjZVdpdGg6IGZ1
bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBd
LnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHRoZSBlbGVtZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBET00gYmVmb3JlIHRoZXkgYXJlIGlu
c2VydGVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhlbHAgZml4IHJlcGxh
Y2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwgb2xkID0g
c2VsZi5odG1sKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnJlcGxhY2VXaXRoKCB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBvbGQgKSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSAhPT0gInN0cmluZyIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkoIHZhbHVlICkuZGV0YWNo
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmUoKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBuZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5KG5leHQpLmJlZm9yZSggdmFsdWUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5KHBhcmVudCkuYXBwZW5kKCB2YWx1ZSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5n
dGggPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaFN0YWNrKCBqUXVl
cnkoalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKSwgInJlcGxhY2VX
aXRoIiwgdmFsdWUgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpczsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBkZXRhY2g6IGZ1bmN0aW9uKCBzZWxl
Y3RvciApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRy
dWUgKTsKICAgICAgICB9LAoKICAgICAgICBkb21NYW5pcDogZnVuY3Rpb24oIGFyZ3MsIHRhYmxl
LCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHZhciByZXN1bHRzLCBmaXJzdCwgZnJhZ21l
bnQsIHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdLAogICAg
ICAgICAgICAgICAgICAgICAgICBzY3JpcHRzID0gW107CgogICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0
CiAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lICYmIGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiByY2hlY2tl
ZC50ZXN0KCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0
aGlzKS5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxiYWNrLCB0cnVlICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWzBdID0gdmFsdWUuY2FsbCh0aGlzLCBpLCB0YWJsZSA/IHNlbGYuaHRtbCgpIDogdW5k
ZWZpbmVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRvbU1hbmlwKCBh
cmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnQgPSB2YWx1ZSAmJiB2YWx1ZS5wYXJlbnROb2RlOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gYSBmcmFnbWVudCwganVzdCB1c2UgdGhh
dCBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGEgbmV3IG9uZQogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5zdXBwb3J0LnBhcmVudE5vZGUgJiYgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlw
ZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSB0aGlzLmxlbmd0aCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0geyBmcmFnbWVudDogcGFy
ZW50IH07CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggYXJncywgdGhp
cywgc2NyaXB0cyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICBmcmFnbWVudCA9IHJlc3VsdHMuZnJhZ21lbnQ7CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZnJhZ21lbnQgPSBmcmFnbWVudC5maXJzdENo
aWxkOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IHRhYmxlICYmIGpRdWVyeS5ub2RlTmFt
ZSggZmlyc3QsICJ0ciIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGgsIGxhc3RJbmRleCA9IGwgLSAxOyBpIDwgbDsgaSsr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2Fs
bCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUg
PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJvb3QodGhpc1tpXSwgZmlyc3QpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgbGVhayBt
ZW1vcnkgYnkgaW5hZHZlcnRlbnRseSBkaXNjYXJkaW5nCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBmcmFnbWVudCAod2hpY2gg
bWlnaHQgaGF2ZSBhdHRhY2hlZCBkYXRhKSBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIGl0OyBpbiBhZGRpdGlvbiwgdXNl
IHRoZSBvcmlnaW5hbCBmcmFnbWVudCBvYmplY3QgZm9yIHRoZSBsYXN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0ZW0gaW5zdGVhZCBvZiBmaXJz
dCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAgYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjZXJ0YWluIHNp
dHVhdGlvbnMgKEJ1ZyAjODA3MCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZyYWdtZW50cyBmcm9tIHRoZSBmcmFnbWVudCBjYWNoZSBtdXN0IGFs
d2F5cyBiZSBjbG9uZWQgYW5kIG5ldmVyIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaW4gcGxhY2UuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2FjaGVhYmxlIHx8IChsID4gMSAmJiBp
IDwgbGFzdEluZGV4KSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmNsb25lKCBmcmFnbWVudCwgdHJ1ZSwgdHJ1ZSApIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFn
bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggc2NyaXB0cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHNjcmlwdHMsIGV2YWxTY3JpcHQgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgIH0KfSk7CgpmdW5jdGlvbiByb290KCBlbGVtLCBjdXIgKSB7
CiAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAidGFibGUiKSA/CiAgICAgICAg
ICAgICAgICAoZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXSB8fAogICAgICAg
ICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgidGJvZHkiKSkpIDoKICAgICAgICAgICAgICAgIGVsZW07Cn0KCmZ1bmN0aW9uIGNsb25lQ29w
eUV2ZW50KCBzcmMsIGRlc3QgKSB7CgogICAgICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSB8
fCAhalF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgIH0KCiAgICAgICAgdmFyIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCiAgICAgICAg
ICAgICAgICBvbGREYXRhID0galF1ZXJ5LmRhdGEoIHNyYyApLAogICAgICAgICAgICAgICAgY3Vy
RGF0YSA9IGpRdWVyeS5kYXRhKCBkZXN0LCBvbGREYXRhICk7CgogICAgICAgIC8vIFN3aXRjaCB0
byB1c2UgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0LCBpZiBpdCBleGlzdHMsIGZvciB0aGUgbmV4
dAogICAgICAgIC8vIHN0YWdlIG9mIGRhdGEgY29weWluZwogICAgICAgIGlmICggKG9sZERhdGEg
PSBvbGREYXRhWyBpbnRlcm5hbEtleSBdKSApIHsKICAgICAgICAgICAgICAgIHZhciBldmVudHMg
PSBvbGREYXRhLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJEYXRh
ID0gY3VyRGF0YVsgaW50ZXJuYWxLZXkgXSA9IGpRdWVyeS5leHRlbmQoe30sIG9sZERhdGEpOwoK
ICAgICAgICAgICAgICAgIGlmICggZXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgY3VyRGF0YS5oYW5kbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckRhdGEuZXZl
bnRzID0ge307CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBldmVu
dHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSArICgg
ZXZlbnRzWyB0eXBlIF1bIGkgXS5uYW1lc3BhY2UgPyAiLiIgOiAiIiApICsgZXZlbnRzWyB0eXBl
IF1bIGkgXS5uYW1lc3BhY2UsIGV2ZW50c1sgdHlwZSBdWyBpIF0sIGV2ZW50c1sgdHlwZSBdWyBp
IF0uZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKZnVuY3Rpb24gY2xv
bmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3QgKSB7CiAgICAgICAgdmFyIG5vZGVOYW1lOwoKICAg
ICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Igbm9uLUVsZW1lbnRzCiAg
ICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgewogICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgIH0KCiAgICAgICAgLy8gY2xlYXJBdHRyaWJ1dGVzIHJlbW92ZXMgdGhlIGF0dHJp
YnV0ZXMsIHdoaWNoIHdlIGRvbid0IHdhbnQsCiAgICAgICAgLy8gYnV0IGFsc28gcmVtb3ZlcyB0
aGUgYXR0YWNoRXZlbnQgZXZlbnRzLCB3aGljaCB3ZSAqZG8qIHdhbnQKICAgICAgICBpZiAoIGRl
c3QuY2xlYXJBdHRyaWJ1dGVzICkgewogICAgICAgICAgICAgICAgZGVzdC5jbGVhckF0dHJpYnV0
ZXMoKTsKICAgICAgICB9CgogICAgICAgIC8vIG1lcmdlQXR0cmlidXRlcywgaW4gY29udHJhc3Qs
IG9ubHkgbWVyZ2VzIGJhY2sgb24gdGhlCiAgICAgICAgLy8gb3JpZ2luYWwgYXR0cmlidXRlcywg
bm90IHRoZSBldmVudHMKICAgICAgICBpZiAoIGRlc3QubWVyZ2VBdHRyaWJ1dGVzICkgewogICAg
ICAgICAgICAgICAgZGVzdC5tZXJnZUF0dHJpYnV0ZXMoIHNyYyApOwogICAgICAgIH0KCiAgICAg
ICAgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CgogICAgICAgIC8vIElF
Ni04IGZhaWwgdG8gY2xvbmUgY2hpbGRyZW4gaW5zaWRlIG9iamVjdCBlbGVtZW50cyB0aGF0IHVz
ZQogICAgICAgIC8vIHRoZSBwcm9wcmlldGFyeSBjbGFzc2lkIGF0dHJpYnV0ZSB2YWx1ZSAocmF0
aGVyIHRoYW4gdGhlIHR5cGUKICAgICAgICAvLyBhdHRyaWJ1dGUpIHRvIGlkZW50aWZ5IHRoZSB0
eXBlIG9mIGNvbnRlbnQgdG8gZGlzcGxheQogICAgICAgIGlmICggbm9kZU5hbWUgPT09ICJvYmpl
Y3QiICkgewogICAgICAgICAgICAgICAgZGVzdC5vdXRlckhUTUwgPSBzcmMub3V0ZXJIVE1MOwoK
ICAgICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiAmJiAoc3JjLnR5cGUgPT09
ICJjaGVja2JveCIgfHwgc3JjLnR5cGUgPT09ICJyYWRpbyIpICkgewogICAgICAgICAgICAgICAg
Ly8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBj
aGVja2JveAogICAgICAgICAgICAgICAgLy8gb3IgcmFkaW8gYnV0dG9uLiBXb3JzZSwgSUU2LTcg
ZmFpbCB0byBnaXZlIHRoZSBjbG9uZWQgZWxlbWVudAogICAgICAgICAgICAgICAgLy8gYSBjaGVj
a2VkIGFwcGVhcmFuY2UgaWYgdGhlIGRlZmF1bHRDaGVja2VkIHZhbHVlIGlzbid0IGFsc28gc2V0
CiAgICAgICAgICAgICAgICBpZiAoIHNyYy5jaGVja2VkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0LmRlZmF1bHRDaGVja2VkID0gZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSUU2LTcgZ2V0IGNvbmZ1c2VkIGFu
ZCBlbmQgdXAgc2V0dGluZyB0aGUgdmFsdWUgb2YgYSBjbG9uZWQKICAgICAgICAgICAgICAgIC8v
IGNoZWNrYm94L3JhZGlvIGJ1dHRvbiB0byBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiAib24i
CiAgICAgICAgICAgICAgICBpZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdC52YWx1ZSA9IHNyYy52YWx1ZTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24g
dG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQKICAgICAgICAvLyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0
aW9ucwogICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAib3B0aW9uIiApIHsKICAgICAg
ICAgICAgICAgIGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOwoKICAgICAgICAv
LyBJRTYtOCBmYWlscyB0byBzZXQgdGhlIGRlZmF1bHRWYWx1ZSB0byB0aGUgY29ycmVjdCB2YWx1
ZSB3aGVuCiAgICAgICAgLy8gY2xvbmluZyBvdGhlciB0eXBlcyBvZiBpbnB1dCBmaWVsZHMKICAg
ICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRl
eHRhcmVhIiApIHsKICAgICAgICAgICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1
bHRWYWx1ZTsKICAgICAgICB9CgogICAgICAgIC8vIEV2ZW50IGRhdGEgZ2V0cyByZWZlcmVuY2Vk
IGluc3RlYWQgb2YgY29waWVkIGlmIHRoZSBleHBhbmRvCiAgICAgICAgLy8gZ2V0cyBjb3BpZWQg
dG9vCiAgICAgICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7Cn0KCmpR
dWVyeS5idWlsZEZyYWdtZW50ID0gZnVuY3Rpb24oIGFyZ3MsIG5vZGVzLCBzY3JpcHRzICkgewog
ICAgICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNoZXJlc3VsdHMsIGRvYzsKCiAgLy8g
bm9kZXMgbWF5IGNvbnRhaW4gZWl0aGVyIGFuIGV4cGxpY2l0IGRvY3VtZW50IG9iamVjdCwKICAv
LyBhIGpRdWVyeSBjb2xsZWN0aW9uIG9yIGNvbnRleHQgb2JqZWN0LgogIC8vIElmIG5vZGVzWzBd
IGNvbnRhaW5zIGEgdmFsaWQgb2JqZWN0IHRvIGFzc2lnbiB0byBkb2MKICBpZiAoIG5vZGVzICYm
IG5vZGVzWzBdICkgewogICAgZG9jID0gbm9kZXNbMF0ub3duZXJEb2N1bWVudCB8fCBub2Rlc1sw
XTsKICB9CgogIC8vIEVuc3VyZSB0aGF0IGFuIGF0dHIgb2JqZWN0IGRvZXNuJ3QgaW5jb3JyZWN0
bHkgc3RhbmQgaW4gYXMgYSBkb2N1bWVudCBvYmplY3QKICAgICAgICAvLyBDaHJvbWUgYW5kIEZp
cmVmb3ggc2VlbSB0byBhbGxvdyB0aGlzIHRvIG9jY3VyIGFuZCB3aWxsIHRocm93IGV4Y2VwdGlv
bgogICAgICAgIC8vIEZpeGVzICM4OTUwCiAgICAgICAgaWYgKCAhZG9jLmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQgKSB7CiAgICAgICAgICAgICAgICBkb2MgPSBkb2N1bWVudDsKICAgICAgICB9Cgog
ICAgICAgIC8vIE9ubHkgY2FjaGUgInNtYWxsIiAoMS8yIEtCKSBIVE1MIHN0cmluZ3MgdGhhdCBh
cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGRvY3VtZW50CiAgICAgICAgLy8gQ2xvbmluZyBv
cHRpb25zIGxvc2VzIHRoZSBzZWxlY3RlZCBzdGF0ZSwgc28gZG9uJ3QgY2FjaGUgdGhlbQogICAg
ICAgIC8vIElFIDYgZG9lc24ndCBsaWtlIGl0IHdoZW4geW91IHB1dCA8b2JqZWN0PiBvciA8ZW1i
ZWQ+IGVsZW1lbnRzIGluIGEgZnJhZ21lbnQKICAgICAgICAvLyBBbHNvLCBXZWJLaXQgZG9lcyBu
b3QgY2xvbmUgJ2NoZWNrZWQnIGF0dHJpYnV0ZXMgb24gY2xvbmVOb2RlLCBzbyBkb24ndCBjYWNo
ZQogICAgICAgIGlmICggYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICJz
dHJpbmciICYmIGFyZ3NbMF0ubGVuZ3RoIDwgNTEyICYmIGRvYyA9PT0gZG9jdW1lbnQgJiYKICAg
ICAgICAgICAgICAgIGFyZ3NbMF0uY2hhckF0KDApID09PSAiPCIgJiYgIXJub2NhY2hlLnRlc3Qo
IGFyZ3NbMF0gKSAmJiAoalF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9uZSB8fCAhcmNoZWNrZWQudGVz
dCggYXJnc1swXSApKSApIHsKCiAgICAgICAgICAgICAgICBjYWNoZWFibGUgPSB0cnVlOwoKICAg
ICAgICAgICAgICAgIGNhY2hlcmVzdWx0cyA9IGpRdWVyeS5mcmFnbWVudHNbIGFyZ3NbMF0gXTsK
ICAgICAgICAgICAgICAgIGlmICggY2FjaGVyZXN1bHRzICYmIGNhY2hlcmVzdWx0cyAhPT0gMSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBjYWNoZXJlc3VsdHM7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICFmcmFnbWVudCApIHsKICAgICAg
ICAgICAgICAgIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAg
ICAgICAgICAgIGpRdWVyeS5jbGVhbiggYXJncywgZG9jLCBmcmFnbWVudCwgc2NyaXB0cyApOwog
ICAgICAgIH0KCiAgICAgICAgaWYgKCBjYWNoZWFibGUgKSB7CiAgICAgICAgICAgICAgICBqUXVl
cnkuZnJhZ21lbnRzWyBhcmdzWzBdIF0gPSBjYWNoZXJlc3VsdHMgPyBmcmFnbWVudCA6IDE7CiAg
ICAgICAgfQoKICAgICAgICByZXR1cm4geyBmcmFnbWVudDogZnJhZ21lbnQsIGNhY2hlYWJsZTog
Y2FjaGVhYmxlIH07Cn07CgpqUXVlcnkuZnJhZ21lbnRzID0ge307CgpqUXVlcnkuZWFjaCh7CiAg
ICAgICAgYXBwZW5kVG86ICJhcHBlbmQiLAogICAgICAgIHByZXBlbmRUbzogInByZXBlbmQiLAog
ICAgICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCiAgICAgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRl
ciIsCiAgICAgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgp9LCBmdW5jdGlvbiggbmFtZSwg
b3JpZ2luYWwgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0
b3IgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gW10sCiAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50ID0gdGhpcy5sZW5ndGggPT09IDEgJiYgdGhpc1swXS5wYXJlbnROb2RlOwoKICAgICAg
ICAgICAgICAgIGlmICggcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMTEgJiYgcGFyZW50
LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGluc2VydC5sZW5ndGggPT09IDEgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydFsgb3JpZ2luYWwgXSggdGhpc1swXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKCiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbnNlcnQubGVuZ3Ro
OyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVt
cyA9IChpID4gMCA/IHRoaXMuY2xvbmUodHJ1ZSkgOiB0aGlzKS5nZXQoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGluc2VydFtpXSApWyBvcmlnaW5hbCBdKCBlbGVt
cyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldC5jb25jYXQoIGVs
ZW1zICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBpbnNlcnQuc2VsZWN0b3IgKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9Owp9KTsKCmZ1bmN0aW9uIGdldEFsbCggZWxlbSApIHsK
ICAgICAgICBpZiAoICJnZXRFbGVtZW50c0J5VGFnTmFtZSIgaW4gZWxlbSApIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKCiAgICAgICAg
fSBlbHNlIGlmICggInF1ZXJ5U2VsZWN0b3JBbGwiIGluIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsKCiAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9Cn0KCi8vIFVzZWQgaW4gY2xlYW4s
IGZpeGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wZXJ0eQpmdW5jdGlvbiBmaXhEZWZhdWx0Q2hl
Y2tlZCggZWxlbSApIHsKICAgICAgICBpZiAoIGVsZW0udHlwZSA9PT0gImNoZWNrYm94IiB8fCBl
bGVtLnR5cGUgPT09ICJyYWRpbyIgKSB7CiAgICAgICAgICAgICAgICBlbGVtLmRlZmF1bHRDaGVj
a2VkID0gZWxlbS5jaGVja2VkOwogICAgICAgIH0KfQovLyBGaW5kcyBhbGwgaW5wdXRzIGFuZCBw
YXNzZXMgdGhlbSB0byBmaXhEZWZhdWx0Q2hlY2tlZApmdW5jdGlvbiBmaW5kSW5wdXRzKCBlbGVt
ICkgewogICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7CiAg
ICAgICAgICAgICAgICBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApOwogICAgICAgIH0gZWxzZSBp
ZiAoICJnZXRFbGVtZW50c0J5VGFnTmFtZSIgaW4gZWxlbSApIHsKICAgICAgICAgICAgICAgIGpR
dWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLCBmaXhEZWZhdWx0
Q2hlY2tlZCApOwogICAgICAgIH0KfQoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgY2xvbmU6IGZ1
bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKICAgICAg
ICAgICAgICAgIHZhciBjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKHRydWUpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RFbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOwoK
ICAgICAgICAgICAgICAgIGlmICggKCFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lRXZlbnQgfHwgIWpR
dWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExKSAmJiAh
alF1ZXJ5LmlzWE1MRG9jKGVsZW0pICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBj
b3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVzaW5nIGNsb25lTm9kZS4K
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGluZyBkZXRhY2hFdmVudCBvbiB0aGUgY2xv
bmUgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZyb20gdGhlIG9yaWdpbmFsLiBJbiBvcmRlciB0byBnZXQgYXJvdW5kIHRoaXMsIHdlIHVzZSBz
b21lCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3ByaWV0YXJ5IG1ldGhvZHMgdG8gY2xl
YXIgdGhlIGV2ZW50cy4gVGhhbmtzIHRvIE1vb1Rvb2xzCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGd1eXMgZm9yIHRoaXMgaG90bmVzcy4KCiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25l
Rml4QXR0cmlidXRlcyggZWxlbSwgY2xvbmUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFVzaW5nIFNpenpsZSBoZXJlIGlzIGNyYXp5IHNsb3csIHNvIHdlIHVzZSBnZXRFbGVtZW50c0J5
VGFnTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlvbiBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0aGUgbGVu
Z3RoIHByb3BlcnR5CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYW4gZWxlbWVudCBp
ZiB5b3UgYXJlIGNsb25pbmcgdGhlIGJvZHkgYW5kIG9uZSBvZiB0aGUKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZWxlbWVudHMgb24gdGhlIHBhZ2UgaGFzIGEgbmFtZSBvciBpZCBvZiAibGVu
Z3RoIgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07
ICsraSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0
aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsgRml4ZXMgIzk1ODcKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRlc3RFbGVtZW50c1tpXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggc3JjRWxlbWVu
dHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUK
ICAgICAgICAgICAgICAgIGlmICggZGF0YUFuZEV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBz
cmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBkZXN0RWxlbWVudHMgPSBudWxsOwoKICAgICAg
ICAgICAgICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAogICAgICAgICAgICAgICAgcmV0dXJu
IGNsb25lOwogICAgICAgIH0sCgogICAgICAgIGNsZWFuOiBmdW5jdGlvbiggZWxlbXMsIGNvbnRl
eHQsIGZyYWdtZW50LCBzY3JpcHRzICkgewogICAgICAgICAgICAgICAgdmFyIGNoZWNrU2NyaXB0
VHlwZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKCiAg
ICAgICAgICAgICAgICAvLyAhY29udGV4dC5jcmVhdGVFbGVtZW50IGZhaWxzIGluIElFIHdpdGgg
YW4gZXJyb3IgYnV0IHJldHVybnMgdHlwZW9mICdvYmplY3QnCiAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiBjb250ZXh0LmNyZWF0ZUVsZW1lbnQgPT09ICJ1bmRlZmluZWQiICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRl
eHRbMF0gJiYgY29udGV4dFswXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXSwgajsKCiAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gIm51bWJlciIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSArPSAiIjsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCBodG1sIHN0cmlu
ZyBpbnRvIERPTSBub2RlcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVt
ID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFy
aHRtbC50ZXN0KCBlbGVtICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtID0gY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGaXggIlhIVE1MIi1zdHlsZSB0YWdzIGluIGFsbCBicm93c2VycwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ucmVwbGFjZShy
eGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUcmltIHdoaXRlc3BhY2UsIG90aGVyd2lzZSBpbmRleE9mIHdvbid0IHdvcmsg
YXMgZXhwZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0
YWcgPSAocnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwID0g
d3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB3cmFwWzBdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBjb250ZXh0LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEdvIHRvIGh0bWwgYW5kIGJhY2ssIHRoZW4gcGVlbCBvZmYgZXh0cmEgd3JhcHBlcnMKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB3cmFwWzFd
ICsgZWxlbSArIHdyYXBbMl07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTW92ZSB0byB0aGUgcmlnaHQgZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggZGVwdGgtLSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gZGl2Lmxhc3RDaGlsZDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZW1vdmUgSUUncyBhdXRvaW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRh
YmxlIGZyYWdtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhalF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgd2FzIGEgPHRhYmxlPiwgKm1heSogaGF2ZSBz
cHVyaW91cyA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBoYXNCb2R5ID0gcnRib2R5LnRlc3QoZWxlbSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHkgPSB0YWcgPT09ICJ0
YWJsZSIgJiYgIWhhc0JvZHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hp
bGQuY2hpbGROb2RlcyA6CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhIGJhcmUgPHRoZWFkPiBvciA8
dGZvb3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIWhhc0JvZHkgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaXYuY2hpbGROb2RlcyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IHRib2R5Lmxlbmd0
aCAtIDE7IGogPj0gMCA7IC0taiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGJvZHlbIGogXSwg
InRib2R5IiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9kZXMubGVuZ3RoICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJv
ZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0Ym9keVsgaiBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSUUgY29tcGxldGVseSBraWxscyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBp
bm5lckhUTUwgaXMgdXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgJiYgcmxlYWRpbmdXaGl0ZXNw
YWNlLnRlc3QoIGVsZW0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggcmxl
YWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0Q2hpbGQgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtID0gZGl2LmNoaWxkTm9kZXM7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZXNldHMgZGVmYXVsdENoZWNrZWQgZm9yIGFueSByYWRpb3MgYW5k
IGNoZWNrYm94ZXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdG8gYmUgYXBwZW5k
ZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbGVuOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5hcHBl
bmRDaGVja2VkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbVsw
XSAmJiB0eXBlb2YgKGxlbiA9IGVsZW0ubGVuZ3RoKSA9PT0gIm51bWJlciIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGxlbjsgaisr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5k
SW5wdXRzKCBlbGVtW2pdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRJbnB1dHMoIGVsZW0gKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXQucHVzaCggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGpRdWVyeS5t
ZXJnZSggcmV0LCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGZyYWdtZW50ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1NjcmlwdFR5cGUgPSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWVsZW0udHlwZSB8fCByc2NyaXB0VHlwZS50ZXN0
KCBlbGVtLnR5cGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDA7IHJldFtpXTsgaSsrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc2NyaXB0cyAmJiBqUXVlcnkubm9kZU5hbWUoIHJldFtpXSwgInNj
cmlwdCIgKSAmJiAoIXJldFtpXS50eXBlIHx8IHJldFtpXS50eXBlLnRvTG93ZXJDYXNlKCkgPT09
ICJ0ZXh0L2phdmFzY3JpcHQiKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmlwdHMucHVzaCggcmV0W2ldLnBhcmVudE5vZGUgPyByZXRbaV0ucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZCggcmV0W2ldICkgOiByZXRbaV0gKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcmV0W2ldLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNUYWdzID0galF1ZXJ5LmdyZXAoIHJldFtp
XS5nZXRFbGVtZW50c0J5VGFnTmFtZSggInNjcmlwdCIgKSwgY2hlY2tTY3JpcHRUeXBlICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuc3BsaWNl
LmFwcGx5KCByZXQsIFtpICsgMSwgMF0uY29uY2F0KCBqc1RhZ3MgKSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIHJldFtpXSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfSwKCiAgICAgICAg
Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSwg
aWQsIGNhY2hlID0galF1ZXJ5LmNhY2hlLCBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLCBz
cGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsCiAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvOwoKICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5hbWUgJiYgalF1ZXJ5
Lm5vRGF0YVtlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICBpZCA9IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGlkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEgPSBjYWNoZVsgaWQgXSAmJiBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhICYmIGRhdGEuZXZlbnRzICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHR5cGUg
aW4gZGF0YS5ldmVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVs
ZW0sIHR5cGUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mg
b3ZlcmhlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBOdWxsIHRoZSBET00gcmVmZXJlbmNlIHRvIGF2b2lkIElFNi83
LzggbGVhayAoIzcwNTQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEuaGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLmhhbmRsZS5lbGVtID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVsZXRlRXhwYW5kbyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBqUXVlcnku
ZXhwYW5kbyBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBl
bGVtLnJlbW92ZUF0dHJpYnV0ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGNhY2hlWyBpZCBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfQp9KTsKCmZ1bmN0aW9uIGV2YWxTY3JpcHQoIGksIGVsZW0gKSB7CiAg
ICAgICAgaWYgKCBlbGVtLnNyYyApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNyYywKICAgICAgICAgICAgICAgICAgICAg
ICAgYXN5bmM6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogInNjcmlw
dCIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBq
UXVlcnkuZ2xvYmFsRXZhbCggKCBlbGVtLnRleHQgfHwgZWxlbS50ZXh0Q29udGVudCB8fCBlbGVt
LmlubmVySFRNTCB8fCAiIiApLnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgIi8qJDAqLyIgKSApOwog
ICAgICAgIH0KCiAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAg
ICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKICAgICAgICB9Cn0KCgoKCnZh
ciByYWxwaGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKICAgICAgICByb3BhY2l0eSA9IC9vcGFjaXR5
PShbXildKikvLAogICAgICAgIC8vIGZpeGVkIGZvciBJRTksIHNlZSAjODM0NgogICAgICAgIHJ1
cHBlciA9IC8oW0EtWl18Xm1zKS9nLAogICAgICAgIHJudW1weCA9IC9eLT9cZCsoPzpweCk/JC9p
LAogICAgICAgIHJudW0gPSAvXi0/XGQvLAogICAgICAgIHJyZWxOdW0gPSAvXihbXC0rXSk9KFtc
LSsuXGRlXSspLywKCiAgICAgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZp
c2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCiAgICAgICAgY3NzV2lkdGgg
PSBbICJMZWZ0IiwgIlJpZ2h0IiBdLAogICAgICAgIGNzc0hlaWdodCA9IFsgIlRvcCIsICJCb3R0
b20iIF0sCiAgICAgICAgY3VyQ1NTLAoKICAgICAgICBnZXRDb21wdXRlZFN0eWxlLAogICAgICAg
IGN1cnJlbnRTdHlsZTsKCmpRdWVyeS5mbi5jc3MgPSBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7
CiAgICAgICAgLy8gU2V0dGluZyAndW5kZWZpbmVkJyBpcyBhIG5vLW9wCiAgICAgICAgaWYgKCBh
cmd1bWVudHMubGVuZ3RoID09PSAyICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBqUXVlcnkuYWNj
ZXNzKCB0aGlzLCBuYW1lLCB2YWx1ZSwgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVl
ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPwogICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOgogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7CiAgICAgICAgfSk7
Cn07CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICAvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9v
a3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKICAgICAgICAvLyBiZWhhdmlvciBvZiBnZXR0
aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKICAgICAgICBjc3NIb29rczogewogICAg
ICAgICAgICAgICAgb3BhY2l0eTogewogICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGNvbXB1dGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0s
ICJvcGFjaXR5IiwgIm9wYWNpdHkiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLnN0eWxlLm9wYWNpdHk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfSwKCiAgICAgICAgLy8gRXhjbHVkZSB0aGUgZm9sbG93aW5nIGNzcyBwcm9wZXJ0aWVz
IHRvIGFkZCBweAogICAgICAgIGNzc051bWJlcjogewogICAgICAgICAgICAgICAgImZpbGxPcGFj
aXR5IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJmb250V2VpZ2h0IjogdHJ1ZSwKICAgICAgICAg
ICAgICAgICJsaW5lSGVpZ2h0IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJvcGFjaXR5IjogdHJ1
ZSwKICAgICAgICAgICAgICAgICJvcnBoYW5zIjogdHJ1ZSwKICAgICAgICAgICAgICAgICJ3aWRv
d3MiOiB0cnVlLAogICAgICAgICAgICAgICAgInpJbmRleCI6IHRydWUsCiAgICAgICAgICAgICAg
ICAiem9vbSI6IHRydWUKICAgICAgICB9LAoKICAgICAgICAvLyBBZGQgaW4gcHJvcGVydGllcyB3
aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCiAgICAgICAgLy8gc2V0dGluZyBvciBn
ZXR0aW5nIHRoZSB2YWx1ZQogICAgICAgIGNzc1Byb3BzOiB7CiAgICAgICAgICAgICAgICAvLyBu
b3JtYWxpemUgZmxvYXQgY3NzIHByb3BlcnR5CiAgICAgICAgICAgICAgICAiZmxvYXQiOiBqUXVl
cnkuc3VwcG9ydC5jc3NGbG9hdCA/ICJjc3NGbG9hdCIgOiAic3R5bGVGbG9hdCIKICAgICAgICB9
LAoKICAgICAgICAvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9k
ZQogICAgICAgIHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgewog
ICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5v
ZGVzCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwg
ZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQogICAgICAgICAgICAg
ICAgdmFyIHJldCwgdHlwZSwgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksCiAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZSwgaG9va3MgPSBqUXVlcnku
Y3NzSG9va3NbIG9yaWdOYW1lIF07CgogICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQ
cm9wc1sgb3JpZ05hbWUgXSB8fCBvcmlnTmFtZTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVu
ZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmlu
Z3MgKCs9IG9yIC09KSB0byByZWxhdGl2ZSBudW1iZXJzLiAjNzM0NQogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmIChyZXQgPSBycmVsTnVtLmV4ZWMoIHZh
bHVlICkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCArKCBy
ZXRbMV0gKyAxKSAqICtyZXRbMl0gKSArIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIG5h
bWUgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAjOTIz
NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAibnVtYmVyIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgTmFOIGFuZCBudWxsIHZhbHVlcyBhcmVuJ3Qgc2V0LiBTZWU6ICM3MTE2CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB0eXBlID09PSAibnVtYmVyIiAm
JiBpc05hTiggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZvciBj
ZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUg
PT09ICJudW1iZXIiICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICJweCI7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlk
ZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1
ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tz
KSB8fCAodmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlICkpICE9PSB1bmRlZmluZWQgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JhcHBlZCB0byBwcmV2ZW50IElF
IGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFsaWQnIHZhbHVlcyBhcmUgcHJvdmlkZWQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcgIzU1MDkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGVbIG5hbWUgXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgaG9v
ayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQg
PSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGdldCB0
aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdHlsZVsgbmFtZSBdOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAg
IGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhICkgewogICAgICAgICAgICAgICAgdmFy
IHJldCwgaG9va3M7CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29y
a2luZyB3aXRoIHRoZSByaWdodCBuYW1lCiAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNh
bWVsQ2FzZSggbmFtZSApOwogICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3Nb
IG5hbWUgXTsKICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8
fCBuYW1lOwoKICAgICAgICAgICAgICAgIC8vIGNzc0Zsb2F0IG5lZWRzIGEgc3BlY2lhbCB0cmVh
dG1lbnQKICAgICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gImNzc0Zsb2F0IiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9ICJmbG9hdCI7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZh
bHVlIGZyb20gdGhlcmUKICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9v
a3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5l
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCiAgICAgICAgICAgICAg
ICAvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3Rz
LCB1c2UgdGhhdAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY3VyQ1NTICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3VyQ1NTKCBlbGVtLCBuYW1lICk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gQSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBp
bmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRvIGdldCBjb3JyZWN0IGNhbGN1bGF0aW9ucwogICAg
ICAgIHN3YXA6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHsKICAgICAgICAg
ICAgICAgIHZhciBvbGQgPSB7fTsKCiAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb2xk
IHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBuYW1lIGluIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFsgbmFtZSBd
ID0gZWxlbS5zdHlsZVsgbmFtZSBdOwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxl
WyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgY2FsbGJhY2suY2FsbCggZWxlbSApOwoKICAgICAgICAgICAgICAgIC8vIFJldmVydCB0
aGUgb2xkIHZhbHVlcwogICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoKLy8gREVQUkVDQVRFRCwgVXNlIGpRdWVy
eS5jc3MoKSBpbnN0ZWFkCmpRdWVyeS5jdXJDU1MgPSBqUXVlcnkuY3NzOwoKalF1ZXJ5LmVhY2go
WyJoZWlnaHQiLCAid2lkdGgiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CiAgICAgICAgalF1ZXJ5
LmNzc0hvb2tzWyBuYW1lIF0gPSB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVt
LCBjb21wdXRlZCwgZXh0cmEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWw7Cgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5vZmZzZXRXaWR0aCAhPT0gMCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXSCggZWxlbSwgbmFtZSwg
ZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN3YXAoIGVsZW0sIGNzc1No
b3csIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWwgPSBnZXRXSCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBybnVtcHgudGVzdCggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpZ25vcmUgbmVnYXRpdmUgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgIzE1OTkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQoIHZhbHVlICk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPj0gMCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICJweCI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9KTsK
CmlmICggIWpRdWVyeS5zdXBwb3J0Lm9wYWNpdHkgKSB7CiAgICAgICAgalF1ZXJ5LmNzc0hvb2tz
Lm9wYWNpdHkgPSB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRl
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgdXNlcyBmaWx0ZXJzIGZvciBvcGFj
aXR5CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3BhY2l0eS50ZXN0KCAoY29tcHV0
ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0ZXIgOiBlbGVt
LnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCBwYXJzZUZsb2F0KCBSZWdFeHAuJDEgKSAvIDEwMCApICsgIiIgOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXB1dGVkID8gIjEiIDogIiI7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBlbGVtLnN0eWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9IGVsZW0uY3VycmVudFN0eWxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgPSBqUXVlcnkuaXNOYU4oIHZhbHVlICkgPyAi
IiA6ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIpIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLmZp
bHRlciB8fCBzdHlsZS5maWx0ZXIgfHwgIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
RSBoYXMgdHJvdWJsZSB3aXRoIG9wYWNpdHkgaWYgaXQgZG9lcyBub3QgaGF2ZSBsYXlvdXQKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgaXQgYnkgc2V0dGluZyB0aGUgem9vbSBsZXZl
bAogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS56b29tID0gMTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGlmIHNldHRpbmcgb3BhY2l0eSB0byAxLCBhbmQgbm8gb3RoZXIgZmlsdGVy
cyBleGlzdCAtIGF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBhdHRyaWJ1dGUgIzY2NTIKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA+PSAxICYmIGpRdWVyeS50cmltKCBmaWx0ZXIu
cmVwbGFjZSggcmFscGhhLCAiIiApICkgPT09ICIiICkgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTZXR0aW5nIHN0eWxlLmZpbHRlciB0byBudWxsLCAiIiAmICIgIiBzdGls
bCBsZWF2ZSAiZmlsdGVyOiIgaW4gdGhlIGNzc1RleHQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpZiAiZmlsdGVyOiIgaXMgcHJlc2VudCBhdCBhbGwsIGNsZWFyVHlwZSBpcyBk
aXNhYmxlZCwgd2Ugd2FudCB0byBhdm9pZCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlzIElFIE9ubHksIGJ1dCBzbyBhcHBhcmVu
dGx5IGlzIHRoaXMgY29kZSBwYXRoLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGUucmVtb3ZlQXR0cmlidXRlKCAiZmlsdGVyIiApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBpZiB0aGVyZSB0aGVyZSBpcyBubyBmaWx0ZXIgc3R5bGUgYXBwbGllZCBp
biBhIGNzcyBydWxlLCB3ZSBhcmUgZG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZpbHRlciB2YWx1ZXMKICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUuZmlsdGVyID0gcmFscGhhLnRlc3QoIGZpbHRlciApID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCBvcGFjaXR5
ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciArICIgIiArIG9wYWNp
dHk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKfQoKalF1ZXJ5KGZ1bmN0aW9uKCkgewog
ICAgICAgIC8vIFRoaXMgaG9vayBjYW5ub3QgYmUgYWRkZWQgdW50aWwgRE9NIHJlYWR5IGJlY2F1
c2UgdGhlIHN1cHBvcnQgdGVzdAogICAgICAgIC8vIGZvciBpdCBpcyBub3QgcnVuIHVudGlsIGFm
dGVyIERPTSByZWFkeQogICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlTWFyZ2lu
UmlnaHQgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBn
ZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kIGJ5IHRlbXBvcmFyaWx5
IHNldHRpbmcgZWxlbWVudCBkaXNwbGF5IHRvIGlubGluZS1ibG9jawogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAiaW5saW5lLWJsb2NrIiB9LCBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCA9IGN1ckNTUyggZWxlbSwgIm1hcmdpbi1yaWdodCIsICJtYXJnaW5SaWdodCIgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVsZW0uc3R5bGUubWFyZ2lu
UmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fTsKICAgICAgICB9Cn0pOwoKaWYgKCBkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5k
ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewogICAgICAgIGdldENvbXB1dGVkU3R5bGUg
PSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIHZhciByZXQsIGRlZmF1
bHRWaWV3LCBjb21wdXRlZFN0eWxlOwoKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxh
Y2UoIHJ1cHBlciwgIi0kMSIgKS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgICAgIGlmICgg
IShkZWZhdWx0VmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCAoY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUoIGVsZW0sIG51bGwgKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApOwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCwgZWxlbSApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJl
dDsKICAgICAgICB9Owp9CgppZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5
bGUgKSB7CiAgICAgICAgY3VycmVudFN0eWxlID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CiAg
ICAgICAgICAgICAgICB2YXIgbGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZWxl
bS5jdXJyZW50U3R5bGUgJiYgZWxlbS5jdXJyZW50U3R5bGVbIG5hbWUgXSwKICAgICAgICAgICAg
ICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYgZWxlbS5ydW50aW1lU3R5
bGVbIG5hbWUgXSwKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOwoK
ICAgICAgICAgICAgICAgIC8vIEZyb20gdGhlIGF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMK
ICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8y
Ny8xOC41NC4xNS8jY29tbWVudC0xMDIyOTEKCiAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBu
b3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBwaXhlbCBudW1iZXIKICAgICAgICAgICAgICAgIC8v
IGJ1dCBhIG51bWJlciB0aGF0IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0
IGl0IHRvIHBpeGVscwogICAgICAgICAgICAgICAgaWYgKCAhcm51bXB4LnRlc3QoIHJldCApICYm
IHJudW0udGVzdCggcmV0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVy
IHRoZSBvcmlnaW5hbCB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0eWxl
LmxlZnQ7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMg
dG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cnNMZWZ0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucnVudGltZVN0
eWxlLmxlZnQgPSBlbGVtLmN1cnJlbnRTdHlsZS5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBuYW1lID09PSAiZm9udFNp
emUiID8gIjFlbSIgOiAocmV0IHx8IDApOwogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBz
dHlsZS5waXhlbExlZnQgKyAicHgiOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJ0
IHRoZSBjaGFuZ2VkIHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5sZWZ0ID0g
bGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByc0xlZnQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IHJzTGVmdDsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiByZXQgPT09ICIiID8gImF1dG8iIDogcmV0OwogICAgICAgIH07Cn0KCmN1ckNTUyA9
IGdldENvbXB1dGVkU3R5bGUgfHwgY3VycmVudFN0eWxlOwoKZnVuY3Rpb24gZ2V0V0goIGVsZW0s
IG5hbWUsIGV4dHJhICkgewoKICAgICAgICAvLyBTdGFydCB3aXRoIG9mZnNldCBwcm9wZXJ0eQog
ICAgICAgIHZhciB2YWwgPSBuYW1lID09PSAid2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVs
ZW0ub2Zmc2V0SGVpZ2h0LAogICAgICAgICAgICAgICAgd2hpY2ggPSBuYW1lID09PSAid2lkdGgi
ID8gY3NzV2lkdGggOiBjc3NIZWlnaHQ7CgogICAgICAgIGlmICggdmFsID4gMCApIHsKICAgICAg
ICAgICAgICAgIGlmICggZXh0cmEgIT09ICJib3JkZXIiICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZWFjaCggd2hpY2gsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWV4dHJhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5n
IiArIHRoaXMgKSApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQo
IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgdGhpcyApICkgfHwgMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsg
dGhpcyArICJXaWR0aCIgKSApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsICsgInB4IjsKICAgICAgICB9CgogICAgICAgIC8vIEZhbGwgYmFj
ayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeQogICAgICAgIHZh
bCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgbmFtZSApOwogICAgICAgIGlmICggdmFsIDwgMCB8fCB2
YWwgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgIHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXSB8
fCAwOwogICAgICAgIH0KICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJl
IGZvciBleHRyYQogICAgICAgIHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7CgogICAgICAg
IC8vIEFkZCBwYWRkaW5nLCBib3JkZXIsIG1hcmdpbgogICAgICAgIGlmICggZXh0cmEgKSB7CiAg
ICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggd2hpY2gsIGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgInBhZGRp
bmciICsgdGhpcyApICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBleHRyYSAh
PT0gInBhZGRpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSBw
YXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIHRoaXMgKyAiV2lkdGgiICkg
KSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIHRoaXMgKSAp
IHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgIH0KCiAgICAgICAgcmV0dXJuIHZhbCArICJweCI7Cn0KCmlmICggalF1ZXJ5LmV4cHIgJiYg
alF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKICAgICAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRl
biA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZWxlbS5v
ZmZzZXRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gZWxlbS5vZmZzZXRI
ZWlnaHQ7CgogICAgICAgICAgICAgICAgcmV0dXJuICh3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09
IDApIHx8ICghalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzICYmIChlbGVtLnN0
eWxlLmRpc3BsYXkgfHwgalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkpID09PSAibm9uZSIp
OwogICAgICAgIH07CgogICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0
aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJz
LmhpZGRlbiggZWxlbSApOwogICAgICAgIH07Cn0KCgoKCnZhciByMjAgPSAvJTIwL2csCiAgICAg
ICAgcmJyYWNrZXQgPSAvXFtcXSQvLAogICAgICAgIHJDUkxGID0gL1xyP1xuL2csCiAgICAgICAg
cmhhc2ggPSAvIy4qJC8sCiAgICAgICAgcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5d
Kilccj8kL21nLCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hhcmFjdGVyIGF0IEVPTAogICAgICAgIHJp
bnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRk
ZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3
ZWVrKSQvaSwKICAgICAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBk
ZXRlY3Rpb24KICAgICAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcFwtc3Rv
cmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCiAgICAgICAgcm5vQ29udGVu
dCA9IC9eKD86R0VUfEhFQUQpJC8sCiAgICAgICAgcnByb3RvY29sID0gL15cL1wvLywKICAgICAg
ICBycXVlcnkgPSAvXD8vLAogICAgICAgIHJzY3JpcHQgPSAvPHNjcmlwdFxiW148XSooPzooPyE8
XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKICAgICAgICByc2VsZWN0VGV4dGFyZWEg
PSAvXig/OnNlbGVjdHx0ZXh0YXJlYSkvaSwKICAgICAgICByc3BhY2VzQWpheCA9IC9ccysvLAog
ICAgICAgIHJ0cyA9IC8oWz8mXSlfPVteJl0qLywKICAgICAgICBydXJsID0gL14oW1x3XCtcLlwt
XSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKSk/KT8vLAoKICAgICAgICAvLyBLZWVwIGEg
Y29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kCiAgICAgICAgX2xvYWQgPSBqUXVlcnkuZm4ubG9h
ZCwKCiAgICAgICAgLyogUHJlZmlsdGVycwogICAgICAgICAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0
byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4
YW1wbGUpCiAgICAgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKICAgICAgICAgKiAgICAtIEJF
Rk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CiAgICAgICAgICogICAgLSBBRlRFUiBwYXJhbSBz
ZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVl
KQogICAgICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKICAgICAgICAgKiA0KSB0aGUgY2F0
Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAogICAgICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxs
IHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8g
IioiIGlmIG5lZWRlZAogICAgICAgICAqLwogICAgICAgIHByZWZpbHRlcnMgPSB7fSwKCiAgICAg
ICAgLyogVHJhbnNwb3J0cyBiaW5kaW5ncwogICAgICAgICAqIDEpIGtleSBpcyB0aGUgZGF0YVR5
cGUKICAgICAgICAgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAogICAg
ICAgICAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFu
ZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKICAgICAgICAgKi8KICAgICAgICB0cmFuc3BvcnRz
ID0ge30sCgogICAgICAgIC8vIERvY3VtZW50IGxvY2F0aW9uCiAgICAgICAgYWpheExvY2F0aW9u
LAoKICAgICAgICAvLyBEb2N1bWVudCBsb2NhdGlvbiBzZWdtZW50cwogICAgICAgIGFqYXhMb2NQ
YXJ0cywKICAgICAgICAKICAgICAgICAvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVl
bmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KICAg
ICAgICBhbGxUeXBlcyA9IFsiKi8iXSArIFsiKiJdOwoKLy8gIzgxMzgsIElFIG1heSB0aHJvdyBh
biBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKLy8gYSBmaWVsZCBmcm9tIHdpbmRvdy5sb2NhdGlv
biBpZiBkb2N1bWVudC5kb21haW4gaGFzIGJlZW4gc2V0CnRyeSB7CiAgICAgICAgYWpheExvY2F0
aW9uID0gbG9jYXRpb24uaHJlZjsKfSBjYXRjaCggZSApIHsKICAgICAgICAvLyBVc2UgdGhlIGhy
ZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAogICAgICAgIC8vIHNpbmNlIElFIHdpbGwgbW9k
aWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCiAgICAgICAgYWpheExvY2F0aW9uID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CiAgICAgICAgYWpheExvY2F0aW9uLmhyZWYgPSAi
IjsKICAgICAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24uaHJlZjsKfQoKLy8gU2VnbWVu
dCBsb2NhdGlvbiBpbnRvIHBhcnRzCmFqYXhMb2NQYXJ0cyA9IHJ1cmwuZXhlYyggYWpheExvY2F0
aW9uLnRvTG93ZXJDYXNlKCkgKSB8fCBbXTsKCi8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3IgalF1
ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CmZ1bmN0aW9uIGFkZFRv
UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkgewoKICAgICAgICAvLyBkYXRhVHlw
ZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvICIqIgogICAgICAgIHJldHVy
biBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkgewoKICAgICAgICAgICAgICAg
IGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gInN0cmluZyIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247CiAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dl
ckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBkYXRh
VHlwZXMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGxhY2VCZWZvcmU7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Ig
ZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcig7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSBdOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNvbnRyb2wgaWYgd2UncmUgYXNrZWQgdG8gYWRkIGJlZm9yZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSBleGlzdGluZyBlbGVtZW50CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VCZWZvcmUgPSAvXlwrLy50ZXN0KCBkYXRh
VHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGxhY2VCZWZvcmUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRh
dGFUeXBlLnN1YnN0ciggMSApIHx8ICIqIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHN0cnVjdHVyZVsgZGF0
YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0byB0aGUgc3RydWN0dXJlIGFjY29yZGluZ2x5
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFsgcGxhY2VCZWZvcmUgPyAidW5z
aGlmdCIgOiAicHVzaCIgXSggZnVuYyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfTsKfQoKLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZv
ciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsCiAg
ICAgICAgICAgICAgICBkYXRhVHlwZSAvKiBpbnRlcm5hbCAqLywgaW5zcGVjdGVkIC8qIGludGVy
bmFsICovICkgewoKICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlIHx8IG9wdGlvbnMuZGF0YVR5
cGVzWyAwIF07CiAgICAgICAgaW5zcGVjdGVkID0gaW5zcGVjdGVkIHx8IHt9OwoKICAgICAgICBp
bnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlOwoKICAgICAgICB2YXIgbGlzdCA9IHN0cnVjdHVy
ZVsgZGF0YVR5cGUgXSwKICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgbGVu
Z3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKICAgICAgICAgICAgICAgIGV4ZWN1dGVPbmx5
ID0gKCBzdHJ1Y3R1cmUgPT09IHByZWZpbHRlcnMgKSwKICAgICAgICAgICAgICAgIHNlbGVjdGlv
bjsKCiAgICAgICAgZm9yKDsgaSA8IGxlbmd0aCAmJiAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rp
b24gKTsgaSsrICkgewogICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gbGlzdFsgaSBdKCBvcHRp
b25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7CiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBn
b3QgcmVkaXJlY3RlZCB0byBhbm90aGVyIGRhdGFUeXBlCiAgICAgICAgICAgICAgICAvLyB3ZSB0
cnkgdGhlcmUgaWYgZXhlY3V0aW5nIG9ubHkgYW5kIG5vdCBkb25lIGFscmVhZHkKICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIHNlbGVjdGlvbiA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWV4ZWN1dGVPbmx5IHx8IGluc3BlY3RlZFsgc2VsZWN0aW9uIF0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gdW5kZWZpbmVk
OwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIHNlbGVjdGlvbiApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsIHNlbGVjdGlvbiwg
aW5zcGVjdGVkICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgICAgLy8gSWYgd2UncmUgb25seSBleGVjdXRpbmcgb3Igbm90aGluZyB3
YXMgc2VsZWN0ZWQKICAgICAgICAvLyB3ZSB0cnkgdGhlIGNhdGNoYWxsIGRhdGFUeXBlIGlmIG5v
dCBkb25lIGFscmVhZHkKICAgICAgICBpZiAoICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiAp
ICYmICFpbnNwZWN0ZWRbICIqIiBdICkgewogICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCAiKiIsIGluc3Bl
Y3RlZCApOwogICAgICAgIH0KICAgICAgICAvLyB1bm5lY2Vzc2FyeSB3aGVuIG9ubHkgZXhlY3V0
aW5nIChwcmVmaWx0ZXJzKQogICAgICAgIC8vIGJ1dCBpdCdsbCBiZSBpZ25vcmVkIGJ5IHRoZSBj
YWxsZXIgaW4gdGhhdCBjYXNlCiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjsKfQoKLy8gQSBzcGVj
aWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCi8vIHRoYXQgdGFrZXMgImZsYXQiIG9wdGlvbnMg
KG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQovLyBGaXhlcyAjOTg4NwpmdW5jdGlvbiBhamF4RXh0
ZW5kKCB0YXJnZXQsIHNyYyApIHsKICAgICAgICB2YXIga2V5LCBkZWVwLAogICAgICAgICAgICAg
ICAgZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9Owog
ICAgICAgIGZvcigga2V5IGluIHNyYyApIHsKICAgICAgICAgICAgICAgIGlmICggc3JjWyBrZXkg
XSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAoIGZsYXRPcHRpb25z
WyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBz
cmNbIGtleSBdOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIGRlZXAg
KSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTsK
ICAgICAgICB9Cn0KCmpRdWVyeS5mbi5leHRlbmQoewogICAgICAgIGxvYWQ6IGZ1bmN0aW9uKCB1
cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB1cmwg
IT09ICJzdHJpbmciICYmIF9sb2FkICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
X2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoKICAgICAgICAgICAgICAgIC8vIERvbid0
IGRvIGEgcmVxdWVzdCBpZiBubyBlbGVtZW50cyBhcmUgYmVpbmcgcmVxdWVzdGVkCiAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCAhdGhpcy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBv
ZmYgPSB1cmwuaW5kZXhPZiggIiAiICk7CiAgICAgICAgICAgICAgICBpZiAoIG9mZiA+PSAwICkg
ewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSB1cmwuc2xpY2UoIG9mZiwg
dXJsLmxlbmd0aCApOwogICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc2xpY2UoIDAs
IG9mZiApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgdG8g
YSBHRVQgcmVxdWVzdAogICAgICAgICAgICAgICAgdmFyIHR5cGUgPSAiR0VUIjsKCiAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQKICAgICAgICAg
ICAgICAgIGlmICggcGFyYW1zICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdz
IGEgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggcGFyYW1zICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXNz
dW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjayA9IHBhcmFtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXMgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGJ1
aWxkIGEgcGFyYW0gc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5
cGVvZiBwYXJhbXMgPT09ICJvYmplY3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtcyA9IGpRdWVyeS5wYXJhbSggcGFyYW1zLCBqUXVlcnkuYWpheFNldHRpbmdzLnRy
YWRpdGlvbmFsICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJQT1NU
IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHRoZSBy
ZW1vdGUgZG9jdW1lbnQKICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKICAgICAgICAgICAg
ICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAiaHRtbCIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGE6IHBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGxl
dGUgY2FsbGJhY2sgKHJlc3BvbnNlVGV4dCBpcyB1c2VkIGludGVybmFsbHkpCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cywgcmVzcG9uc2VU
ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSByZXNw
b25zZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGpxWEhSIG9iamVjdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCA9IGpxWEhSLnJlc3BvbnNlVGV4dDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzdWNjZXNzZnVsLCBpbmplY3QgdGhlIEhUTUwg
aW50byBhbGwgdGhlIG1hdGNoZWQgZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpxWEhSLmlzUmVzb2x2ZWQoKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICM0ODI1OiBHZXQgdGhlIGFjdHVhbCByZXNwb25zZSBpbiBjYXNl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGRhdGFGaWx0ZXIg
aXMgcHJlc2VudCBpbiBhamF4U2V0dGluZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpxWEhSLmRvbmUoZnVuY3Rpb24oIHIgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCA9IHI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNlZSBpZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUg
YSBkdW1teSBkaXYgdG8gaG9sZCB0aGUgcmVzdWx0cwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIjxkaXY+IikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGhlIGNvbnRl
bnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3ZpbmcgdGhlIHNjcmlwdHMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBh
bnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4gSUUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKHJlc3BvbnNlVGV4dC5y
ZXBsYWNlKHJzY3JpcHQsICIiKSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlu
ZChzZWxlY3RvcikgOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0ICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgWyByZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIg
XSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgICAgfSwKCiAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOwogICAgICAg
IH0sCgogICAgICAgIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5lbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIHRoaXMuZWxlbWVudHMgKSA6IHRo
aXM7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbigp
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2Fi
bGVkICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB0aGlzLmNoZWNrZWQgfHwg
cnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUgKSB8fAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmlucHV0LnRlc3QoIHRoaXMudHlwZSApICk7CiAgICAg
ICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiggaSwgZWxlbSApewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09IG51bGwgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bGwgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwsIGkgKXsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogZWxlbS5u
YW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNS
TEYsICJcclxuIiApIH07CiAgICAgICAgICAgICAgICB9KS5nZXQoKTsKICAgICAgICB9Cn0pOwoK
Ly8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBl
dmVudHMKalF1ZXJ5LmVhY2goICJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhF
cnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoICIgIiApLCBmdW5jdGlvbiggaSwgbyAp
ewogICAgICAgIGpRdWVyeS5mblsgbyBdID0gZnVuY3Rpb24oIGYgKXsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmJpbmQoIG8sIGYgKTsKICAgICAgICB9Owp9KTsKCmpRdWVyeS5lYWNoKCBb
ICJnZXQiLCAicG9zdCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHsKICAgICAgICBqUXVlcnlb
IG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CiAgICAg
ICAgICAgICAgICAvLyBzaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRl
ZAogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCBjYWxsYmFjazsKICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sgPSBkYXRhOwogICAgICAgICAgICAgICAgICAgICAgICBkYXRh
ID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IG1ldGhvZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6
IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrLAogICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhVHlwZTogdHlwZQogICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgfTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKCiAgICAgICAgZ2V0U2NyaXB0OiBmdW5jdGlvbigg
dXJsLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmws
IHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CiAgICAgICAgfSwKCiAgICAgICAgZ2V0
SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7CiAgICAgICAg
fSwKCiAgICAgICAgLy8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50
byB0YXJnZXQKICAgICAgICAvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBm
aWVsZHMuCiAgICAgICAgLy8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhT
ZXR0aW5ncy4KICAgICAgICBhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkg
ewogICAgICAgICAgICAgICAgaWYgKCBzZXR0aW5ncyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAg
YWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICk7CiAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmRpbmcgYWpheFNldHRp
bmdzCiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzID0gdGFyZ2V0OwogICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBqUXVlcnkuYWpheFNldHRpbmdzOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgYWpheEV4dGVuZCggdGFyZ2V0LCBzZXR0aW5ncyApOwogICAg
ICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgICAgICB9LAoKICAgICAgICBhamF4U2V0dGlu
Z3M6IHsKICAgICAgICAgICAgICAgIHVybDogYWpheExvY2F0aW9uLAogICAgICAgICAgICAgICAg
aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKICAgICAg
ICAgICAgICAgIGdsb2JhbDogdHJ1ZSwKICAgICAgICAgICAgICAgIHR5cGU6ICJHRVQiLAogICAg
ICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29k
ZWQiLAogICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IHRydWUsCiAgICAgICAgICAgICAgICBh
c3luYzogdHJ1ZSwKICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICB0aW1lb3V0OiAw
LAogICAgICAgICAgICAgICAgZGF0YTogbnVsbCwKICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBu
dWxsLAogICAgICAgICAgICAgICAgdXNlcm5hbWU6IG51bGwsCiAgICAgICAgICAgICAgICBwYXNz
d29yZDogbnVsbCwKICAgICAgICAgICAgICAgIGNhY2hlOiBudWxsLAogICAgICAgICAgICAgICAg
dHJhZGl0aW9uYWw6IGZhbHNlLAogICAgICAgICAgICAgICAgaGVhZGVyczoge30sCiAgICAgICAg
ICAgICAgICAqLwoKICAgICAgICAgICAgICAgIGFjY2VwdHM6IHsKICAgICAgICAgICAgICAgICAg
ICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAi
dGV4dC9wbGFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9q
c29uLCB0ZXh0L2phdmFzY3JpcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAiKiI6IGFsbFR5
cGVzCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHhtbDogL3htbC8sCiAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWw6IC9odG1sLywKICAgICAgICAgICAgICAgICAgICAgICAganNvbjogL2pzb24vCiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHJlc3BvbnNlRmllbGRzOiB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHhtbDogInJlc3BvbnNlWE1MIiwKICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dDogInJlc3BvbnNlVGV4dCIKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAg
Ly8gTGlzdCBvZiBkYXRhIGNvbnZlcnRlcnMKICAgICAgICAgICAgICAgIC8vIDEpIGtleSBmb3Jt
YXQgaXMgInNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1i
ZXR3ZWVuKQogICAgICAgICAgICAgICAgLy8gMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2Fu
IGJlIHVzZWQgZm9yIHNvdXJjZV90eXBlCiAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzOiB7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHQKICAgICAg
ICAgICAgICAgICAgICAgICAgIiogdGV4dCI6IHdpbmRvdy5TdHJpbmcsCgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikKICAg
ICAgICAgICAgICAgICAgICAgICAgInRleHQgaHRtbCI6IHRydWUsCgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXh0IGpzb24iOiBqUXVlcnkucGFyc2VKU09OLAoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwKICAgICAgICAgICAgICAgICAgICAgICAg
InRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAg
ICAgICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6CiAg
ICAgICAgICAgICAgICAvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJl
IGlmCiAgICAgICAgICAgICAgICAvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3Vs
ZG4ndCBiZQogICAgICAgICAgICAgICAgLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQp
CiAgICAgICAgICAgICAgICBmbGF0T3B0aW9uczogewogICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0OiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHRydWUKICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRl
cnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKICAgICAgICBhamF4VHJhbnNwb3J0OiBhZGRU
b1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKCiAgICAgICAgLy8gTWFpbiBt
ZXRob2QKICAgICAgICBhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgewoKICAgICAgICAg
ICAgICAgIC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJl
CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zID0gdXJsOwogICAgICAgICAgICAgICAgICAgICAgICB1
cmwgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRm9y
Y2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3QKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRp
b25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIHZhciAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlv
bnMgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBqUXVlcnkuYWpheFNldHVwKCB7
fSwgb3B0aW9ucyApLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsYmFja3MgY29udGV4
dAogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwg
cywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cwog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHRoZSBjYWxsYmFja0NvbnRleHQgaWYgb25l
IHdhcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAvLyBh
bmQgaWYgaXQncyBhIERPTSBub2RlIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24KICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0gY2FsbGJhY2tDb250ZXh0ICE9PSBzICYm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBjYWxsYmFja0NvbnRleHQubm9kZVR5
cGUgfHwgY2FsbGJhY2tDb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICkgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGNhbGxiYWNrQ29udGV4
dCApIDogalF1ZXJ5LmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlcnJlZHMK
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MK
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSwK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZNb2RpZmllZCBrZXkKICAgICAgICAgICAgICAg
ICAgICAgICAgaWZNb2RpZmllZEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGVhZGVy
cyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdEhlYWRlcnMgPSB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNO
YW1lcyA9IHt9LAogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFkZXJzCiAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAvLyB0
cmFuc3BvcnQKICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LAogICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aW1lb3V0IGhhbmRsZQogICAgICAgICAgICAgICAgICAgICAgICB0aW1l
b3V0VGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyb3NzLWRvbWFpbiBkZXRlY3Rp
b24gdmFycwogICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cywKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlIGpxWEhSIHN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFy
ZSB0byBiZSBkaXNwYXRjaGVkCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVHbG9iYWxzLAog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHZhcmlhYmxlCiAgICAgICAgICAgICAgICAg
ICAgICAgIGksCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZha2UgeGhyCiAgICAgICAgICAg
ICAgICAgICAgICAgIGpxWEhSID0gewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkeVN0YXRlOiAwLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZXMg
dGhlIGhlYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFk
ZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIXN0YXRlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXF1ZXN0
SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBu
YW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBSYXcgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNl
SGVhZGVyc1N0cmluZyA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRh
YmxlIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlc3BvbnNl
SGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG1hdGNoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9
IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5n
ICkgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBd
ID0gbWF0Y2hbIDIgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0
eXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3Rh
dGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMu
bWltZVR5cGUgPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQgfHwgImFib3J0IjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHJhbnNwb3J0ICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3Bv
cnQuYWJvcnQoIHN0YXR1c1RleHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoIDAs
IHN0YXR1c1RleHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVy
eXRoaW5nIGlzIGRvbmUKICAgICAgICAgICAgICAgIC8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNh
dXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKICAgICAgICAgICAgICAgIC8v
IGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uICh3aGljaCB3b3VsZCBiZSBtb3JlIGxvZ2ljYWwg
YW5kIHJlYWRhYmxlKQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRp
dmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDYWxsZWQgb25jZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXRlID09
PSAyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgaXMgImRv
bmUiIG5vdwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9y
IGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAvLyAobm8g
bWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQogICAgICAgICAg
ICAgICAgICAgICAgICB0cmFuc3BvcnQgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgcmVhZHlTdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5yZWFk
eVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGlzU3VjY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2VzID8gYWpheEhhbmRsZVJlc3BvbnNl
cyggcywganFYSFIsIHJlc3BvbnNlcyApIDogdW5kZWZpbmVkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RNb2RpZmllZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBldGFnOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxl
IHR5cGUgY2hhaW5pbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPj0gMjAw
ICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNCApIHsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9u
ZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICggbGFzdE1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9u
c2VIZWFkZXIoICJMYXN0LU1vZGlmaWVkIiApICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRL
ZXkgXSA9IGxhc3RNb2RpZmllZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBldGFn
ID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJFdGFnIiApICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVk
S2V5IF0gPSBldGFnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgbm90IG1vZGlmaWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZGF0YQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gInN1Y2Nlc3MiOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhh
dmUgYSBwYXJzZXJlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXNUZXh0ID0gInBhcnNlcmVycm9yIjsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5kIHN0YXR1
cyBmb3Igbm9uLWFib3J0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0g
c3RhdHVzVGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXN0YXR1c1Rl
eHQgfHwgc3RhdHVzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdHVzVGV4dCA9ICJlcnJvciI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHN0YXR1cyA8IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZGF0YSBmb3Ig
dGhlIGZha2UgeGhyIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXMg
PSBzdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnN0YXR1c1RleHQgPSAiIiAr
ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzL0Vycm9yCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNTdWNj
ZXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVX
aXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3Rh
dHVzVGV4dCwgZXJyb3IgXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwogICAgICAgICAgICAg
ICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGZpcmVHbG9iYWxzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
b2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNz
IiA6ICJFcnJvciIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGxldGUK
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZC5yZXNvbHZlV2l0aCggY2Fs
bGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4Q29tcGxldGUiLCBbIGpxWEhSLCBz
IF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGdsb2Jh
bCBBSkFYIGNvdW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIC0t
alF1ZXJ5LmFjdGl2ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggZGVmZXJyZWRzCiAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApOwogICAgICAgICAgICAgICAganFYSFIuc3VjY2VzcyA9
IGpxWEhSLmRvbmU7CiAgICAgICAgICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7CiAg
ICAgICAgICAgICAgICBqcVhIUi5jb21wbGV0ZSA9IGNvbXBsZXRlRGVmZXJyZWQuZG9uZTsKCiAg
ICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwogICAgICAgICAgICAg
ICAganFYSFIuc3RhdHVzQ29kZSA9IGZ1bmN0aW9uKCBtYXAgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbWFwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0
bXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIHRtcCBpbiBtYXAgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0Nv
ZGVbIHRtcCBdID0gWyBzdGF0dXNDb2RlW3RtcF0sIG1hcFt0bXBdIF07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IG1hcFsganFYSFIuc3RhdHVzIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqcVhIUi50aGVuKCB0bXAsIHRtcCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gUmVtb3Zl
IGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCiAgICAgICAgICAg
ICAgICAvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkICgjNTg2NjogSUU3IGlzc3VlIHdp
dGggcHJvdG9jb2wtbGVzcyB1cmxzKQogICAgICAgICAgICAgICAgLy8gV2UgYWxzbyB1c2UgdGhl
IHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICBzLnVybCA9ICggKCB1
cmwgfHwgcy51cmwgKSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3Rv
Y29sLCBhamF4TG9jUGFydHNbIDEgXSArICIvLyIgKTsKCiAgICAgICAgICAgICAgICAvLyBFeHRy
YWN0IGRhdGFUeXBlcyBsaXN0CiAgICAgICAgICAgICAgICBzLmRhdGFUeXBlcyA9IGpRdWVyeS50
cmltKCBzLmRhdGFUeXBlIHx8ICIqIiApLnRvTG93ZXJDYXNlKCkuc3BsaXQoIHJzcGFjZXNBamF4
ICk7CgogICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGEgY3Jvc3MtZG9tYWluIHJlcXVl
c3QgaXMgaW4gb3JkZXIKICAgICAgICAgICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxs
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJ1cmwuZXhlYyggcy51cmwudG9M
b3dlckNhc2UoKSApOwogICAgICAgICAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gISEo
IHBhcnRzICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwYXJ0c1sgMSBdICE9
IGFqYXhMb2NQYXJ0c1sgMSBdIHx8IHBhcnRzWyAyIF0gIT0gYWpheExvY1BhcnRzWyAyIF0gfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcGFydHNbIDMgXSB8fCAo
IHBhcnRzWyAxIF0gPT09ICJodHRwOiIgPyA4MCA6IDQ0MyApICkgIT0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBhamF4TG9jUGFydHNbIDMgXSB8fCAo
IGFqYXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICkKICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBD
b252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcKICAgICAgICAgICAgICAgIGlmICgg
cy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBz
LnRyYWRpdGlvbmFsICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQXBw
bHkgcHJlZmlsdGVycwogICAgICAgICAgICAgICAgaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9y
dHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CgogICAgICAgICAgICAgICAgLy8g
SWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWxlciwgc3RvcCB0aGVyZQogICAg
ICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFdlIGNh
biBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCiAgICAgICAgICAgICAg
ICBmaXJlR2xvYmFscyA9IHMuZ2xvYmFsOwoKICAgICAgICAgICAgICAgIC8vIFVwcGVyY2FzZSB0
aGUgdHlwZQogICAgICAgICAgICAgICAgcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7Cgog
ICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnQKICAgICAg
ICAgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApOwoKICAg
ICAgICAgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKICAgICAgICAg
ICAgICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNb3JlIG9wdGlvbnMgaGFuZGxp
bmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAogICAgICAgICAgICAgICAgaWYgKCAhcy5o
YXNDb250ZW50ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZGF0YSBpcyBhdmFp
bGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMu
ZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnVybCArPSAoIHJxdWVy
eS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyBzLmRhdGE7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNl
ZCBpbiBhbiBldmVudHVhbCByZXRyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBzLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEdldCBpZk1vZGlmaWVkS2V5IGJlZm9yZSBhZGRpbmcgdGhlIGFudGktY2FjaGUg
cGFyYW1ldGVyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmTW9kaWZpZWRLZXkgPSBzLnVybDsK
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBpZiBuZWVk
ZWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRzID0galF1ZXJ5Lm5vdygpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHJlcGxhY2luZyBfPSBp
ZiBpdCBpcyB0aGVyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0gcy51cmwucmVwbGFjZSggcnRzLCAiJDFfPSIgKyB0cyApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiBub3RoaW5nIHdhcyByZXBsYWNlZCwgYWRkIHRpbWVzdGFtcCB0
byB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy51cmwgPSByZXQgKyAo
IChyZXQgPT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkg
KyAiXz0iICsgdHMgOiAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0
YSBpcyBiZWluZyBzZW50CiAgICAgICAgICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRl
bnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIkNvbnRlbnQt
VHlwZSIsIHMuY29udGVudFR5cGUgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRl
ciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgogICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZp
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmTW9kaWZpZWRLZXkgPSBpZk1vZGlmaWVk
S2V5IHx8IHMudXJsOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5sYXN0TW9k
aWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFz
dE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRl
ciggIklmLU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhl
IGRhdGFUeXBlCiAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKAogICAgICAg
ICAgICAgICAgICAgICAgICAiQWNjZXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRh
VHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSArICggcy5kYXRh
VHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsgIjsgcT0wLjAxIiA6ICIiICkg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0KICAgICAg
ICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9u
CiAgICAgICAgICAgICAgICBmb3IgKCBpIGluIHMuaGVhZGVycyApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9t
aW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0CiAgICAgICAgICAgICAgICBpZiAoIHMuYmVmb3JlU2Vu
ZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09
IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpxWEhSLmFib3J0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJbnN0YWxs
IGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKICAgICAgICAgICAgICAgIGZvciAoIGkgaW4geyBzdWNj
ZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAganFYSFJbIGkgXSggc1sgaSBdICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gR2V0IHRyYW5zcG9ydAogICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gaW5zcGVjdFBy
ZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7Cgog
ICAgICAgICAgICAgICAgLy8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CiAgICAgICAg
ICAgICAgICBpZiAoICF0cmFuc3BvcnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUo
IC0xLCAiTm8gVHJhbnNwb3J0IiApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFNlbmQgZ2xvYmFsIGV2ZW50CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmly
ZUdsb2JhbHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRD
b250ZXh0LnRyaWdnZXIoICJhamF4U2VuZCIsIFsganFYSFIsIHMgXSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVvdXQKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rp
b24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLmFib3J0
KCAidGltZW91dCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzLnRpbWVv
dXQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
dHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDE7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBk
b25lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5v
dCBkb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKCAtMSwgZSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXBseSByZXRocm93IG90aGVyd2lz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIGUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKICAg
ICAgICAvLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKICAgICAgICBwYXJhbTogZnVu
Y3Rpb24oIGEsIHRyYWRpdGlvbmFsICkgewogICAgICAgICAgICAgICAgdmFyIHMgPSBbXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52
b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiB2YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJ
Q29tcG9uZW50KCBrZXkgKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBTZXQgdHJhZGl0aW9u
YWwgdG8gdHJ1ZSBmb3IgalF1ZXJ5IDw9IDEuMy4yIGJlaGF2aW9yLgogICAgICAgICAgICAgICAg
aWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwg
YXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy4KICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQ
bGFpbk9iamVjdCggYSApICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6
ZSB0aGUgZm9ybSBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCgg
YSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKCB0aGlz
Lm5hbWUsIHRoaXMudmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdHJhZGl0aW9u
YWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vy
c2l2ZWx5LgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgcHJlZml4IGluIGEgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsg
cHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5n
IHNlcmlhbGl6YXRpb24KICAgICAgICAgICAgICAgIHJldHVybiBzLmpvaW4oICImIiApLnJlcGxh
Y2UoIHIyMCwgIisiICk7CiAgICAgICAgfQp9KTsKCmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVm
aXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5
KCBvYmogKSApIHsKICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLgogICAg
ICAgICAgICAgICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4
ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgZWFjaCBhcnJh
eSBpdGVtIGFzIGEgc2NhbGFyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCgg
cHJlZml4LCB2ICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJy
YXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlz
c3Vlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgcmFjayAo
YXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBhcnJheXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5n
IHRvIGRvIHNvIG1heSBjYXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEg
c2VydmVyIGVycm9yLiBQb3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2VyaWFsaXphdGlvbiBhbGdvcml0aG0gb3Ig
dG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hhbGxvdy4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0
eXBlb2YgdiA9PT0gIm9iamVjdCIgfHwgalF1ZXJ5LmlzQXJyYXkodikgPyBpIDogIiIgKSArICJd
IiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIG9iaiAh
PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICJvYmplY3QiICkgewogICAgICAgICAgICAgICAgLy8g
U2VyaWFsaXplIG9iamVjdCBpdGVtLgogICAgICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4g
b2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsi
ICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBz
Y2FsYXIgaXRlbS4KICAgICAgICAgICAgICAgIGFkZCggcHJlZml4LCBvYmogKTsKICAgICAgICB9
Cn0KCi8vIFRoaXMgaXMgc3RpbGwgb24gdGhlIGpRdWVyeSBvYmplY3QuLi4gZm9yIG5vdwovLyBX
YW50IHRvIG1vdmUgdGhpcyB0byBqUXVlcnkuYWpheCBzb21lIGRheQpqUXVlcnkuZXh0ZW5kKHsK
CiAgICAgICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVy
aWVzCiAgICAgICAgYWN0aXZlOiAwLAoKICAgICAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBj
YWNoZSBmb3IgbmV4dCByZXF1ZXN0CiAgICAgICAgbGFzdE1vZGlmaWVkOiB7fSwKICAgICAgICBl
dGFnOiB7fQoKfSk7CgovKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6CiAq
IC0gc2V0cyBhbGwgcmVzcG9uc2VYWFggZmllbGRzIGFjY29yZGluZ2x5CiAqIC0gZmluZHMgdGhl
IHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0
ZWQgZGF0YVR5cGUpCiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQogKi8K
ZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKCiAg
ICAgICAgdmFyIGNvbnRlbnRzID0gcy5jb250ZW50cywKICAgICAgICAgICAgICAgIGRhdGFUeXBl
cyA9IHMuZGF0YVR5cGVzLAogICAgICAgICAgICAgICAgcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3Bv
bnNlRmllbGRzLAogICAgICAgICAgICAgICAgY3QsCiAgICAgICAgICAgICAgICB0eXBlLAogICAg
ICAgICAgICAgICAgZmluYWxEYXRhVHlwZSwKICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGU7
CgogICAgICAgIC8vIEZpbGwgcmVzcG9uc2VYWFggZmllbGRzCiAgICAgICAgZm9yKCB0eXBlIGlu
IHJlc3BvbnNlRmllbGRzICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlIGluIHJlc3BvbnNl
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAganFYSFJbIHJlc3BvbnNlRmllbGRzW3R5cGVd
IF0gPSByZXNwb25zZXNbIHR5cGUgXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAg
ICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBw
cm9jZXNzCiAgICAgICAgd2hpbGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7CiAgICAgICAg
ICAgICAgICBkYXRhVHlwZXMuc2hpZnQoKTsKICAgICAgICAgICAgICAgIGlmICggY3QgPT09IHVu
ZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3QgPSBzLm1pbWVUeXBlIHx8IGpx
WEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiY29udGVudC10eXBlIiApOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25v
d24gY29udGVudC10eXBlCiAgICAgICAgaWYgKCBjdCApIHsKICAgICAgICAgICAgICAgIGZvciAo
IHR5cGUgaW4gY29udGVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udGVu
dHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdl
IGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCiAgICAgICAgaWYgKCBk
YXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7CiAgICAgICAgICAgICAgICBmaW5hbERhdGFU
eXBlID0gZGF0YVR5cGVzWyAwIF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8v
IFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4g
cmVzcG9uc2VzICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFkYXRhVHlwZXNbIDAg
XSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBkYXRhVHlwZXNbMF0gXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gdHlwZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFmaXJzdERhdGFUeXBlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0eXBlOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBPciBqdXN0
IHVzZSBmaXJzdCBvbmUKICAgICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFU
eXBlIHx8IGZpcnN0RGF0YVR5cGU7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB3ZSBmb3VuZCBh
IGRhdGFUeXBlCiAgICAgICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBu
ZWVkZWQKICAgICAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCiAg
ICAgICAgaWYgKCBmaW5hbERhdGFUeXBlICkgewogICAgICAgICAgICAgICAgaWYgKCBmaW5hbERh
dGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKICAgICAgICB9Cn0K
Ci8vIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwg
cmVzcG9uc2UKZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlICkgewoKICAgICAgICAv
LyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAogICAgICAgIGlmICggcy5kYXRhRmls
dGVyICkgewogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNl
LCBzLmRhdGFUeXBlICk7CiAgICAgICAgfQoKICAgICAgICB2YXIgZGF0YVR5cGVzID0gcy5kYXRh
VHlwZXMsCiAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzID0ge30sCiAgICAgICAgICAgICAgICBp
LAogICAgICAgICAgICAgICAga2V5LAogICAgICAgICAgICAgICAgbGVuZ3RoID0gZGF0YVR5cGVz
Lmxlbmd0aCwKICAgICAgICAgICAgICAgIHRtcCwKICAgICAgICAgICAgICAgIC8vIEN1cnJlbnQg
YW5kIHByZXZpb3VzIGRhdGFUeXBlcwogICAgICAgICAgICAgICAgY3VycmVudCA9IGRhdGFUeXBl
c1sgMCBdLAogICAgICAgICAgICAgICAgcHJldiwKICAgICAgICAgICAgICAgIC8vIENvbnZlcnNp
b24gZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgY29udmVyc2lvbiwKICAgICAgICAgICAgICAg
IC8vIENvbnZlcnNpb24gZnVuY3Rpb24KICAgICAgICAgICAgICAgIGNvbnYsCiAgICAgICAgICAg
ICAgICAvLyBDb252ZXJzaW9uIGZ1bmN0aW9ucyAodHJhbnNpdGl2ZSBjb252ZXJzaW9uKQogICAg
ICAgICAgICAgICAgY29udjEsCiAgICAgICAgICAgICAgICBjb252MjsKCiAgICAgICAgLy8gRm9y
IGVhY2ggZGF0YVR5cGUgaW4gdGhlIGNoYWluCiAgICAgICAgZm9yKCBpID0gMTsgaSA8IGxlbmd0
aDsgaSsrICkgewoKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcAogICAg
ICAgICAgICAgICAgLy8gd2l0aCBsb3dlcmNhc2VkIGtleXMKICAgICAgICAgICAgICAgIGlmICgg
aSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBrZXkgaW4gcy5jb252ZXJ0
ZXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB0eXBlb2Yga2V5ID09
PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnZlcnRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGtleSBdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZGF0YVR5cGVzCiAg
ICAgICAgICAgICAgICBwcmV2ID0gY3VycmVudDsKICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBk
YXRhVHlwZXNbIGkgXTsKCiAgICAgICAgICAgICAgICAvLyBJZiBjdXJyZW50IGlzIGF1dG8gZGF0
YVR5cGUsIHVwZGF0ZSBpdCB0byBwcmV2CiAgICAgICAgICAgICAgICBpZiggY3VycmVudCA9PT0g
IioiICkgewogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcHJldjsKICAgICAgICAg
ICAgICAgIC8vIElmIG5vIGF1dG8gYW5kIGRhdGFUeXBlcyBhcmUgYWN0dWFsbHkgZGlmZmVyZW50
CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBwcmV2ICE9PSAiKiIgJiYgcHJldiAhPT0gY3Vy
cmVudCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY29udmVydGVyCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb24gPSBwcmV2ICsgIiAiICsgY3VycmVudDsK
ICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnZlcnNpb24gXSB8
fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gZGlyZWN0IGNvbnZlcnRlciwgc2VhcmNoIHRyYW5zaXRpdmVseQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb252ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnYyID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciggY29udjEgaW4gY29udmVydGVycyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRtcCA9IGNvbnYxLnNwbGl0KCAiICIgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG1wWyAwIF0gPT09IHByZXYgfHwgdG1w
WyAwIF0gPT09ICIqIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udjIgPSBjb252ZXJ0ZXJzWyB0bXBbMV0gKyAiICIgKyBjdXJyZW50IF07CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udjIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udjEgPSBjb252ZXJ0ZXJzWyBjb252MSBdOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udjEgPT09IHRydWUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb252ID0gY29udjI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29udjIgPT09IHRydWUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b252ID0gY29udjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGZvdW5kIG5vIGNvbnZlcnRlciwgZGlz
cGF0Y2ggYW4gZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCBjb252IHx8IGNv
bnYyICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAi
Tm8gY29udmVyc2lvbiBmcm9tICIgKyBjb252ZXJzaW9uLnJlcGxhY2UoIiAiLCIgdG8gIikgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBm
b3VuZCBjb252ZXJ0ZXIgaXMgbm90IGFuIGVxdWl2YWxlbmNlCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDb252ZXJ0IHdpdGggMSBvciAyIGNvbnZlcnRlcnMgYWNjb3JkaW5nbHkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYgPyBjb252KCByZXNwb25zZSAp
IDogY29udjIoIGNvbnYxKHJlc3BvbnNlKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXNwb25zZTsKfQoKCgoK
dmFyIGpzYyA9IGpRdWVyeS5ub3coKSwKICAgICAgICBqc3JlID0gLyhcPSlcPygmfCQpfFw/XD8v
aTsKCi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKalF1ZXJ5LmFqYXhTZXR1cCh7CiAgICAgICAg
anNvbnA6ICJjYWxsYmFjayIsCiAgICAgICAganNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIGpzYysrICk7CiAg
ICAgICAgfQp9KTsKCi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2Fs
bGJhY2tzIGZvciBqc29ucCByZXF1ZXN0cwpqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNv
bnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7CgogICAgICAgIHZh
ciBpbnNwZWN0RGF0YSA9IHMuY29udGVudFR5cGUgPT09ICJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQiICYmCiAgICAgICAgICAgICAgICAoIHR5cGVvZiBzLmRhdGEgPT09ICJzdHJp
bmciICk7CgogICAgICAgIGlmICggcy5kYXRhVHlwZXNbIDAgXSA9PT0gImpzb25wIiB8fAogICAg
ICAgICAgICAgICAgcy5qc29ucCAhPT0gZmFsc2UgJiYgKCBqc3JlLnRlc3QoIHMudXJsICkgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0RGF0YSAmJiBqc3JlLnRlc3Qo
IHMuZGF0YSApICkgKSB7CgogICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlQ29udGFpbmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICBqc29ucENhbGxiYWNrID0gcy5qc29ucENhbGxiYWNrID0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29u
cENhbGxiYWNrICkgPyBzLmpzb25wQ2FsbGJhY2soKSA6IHMuanNvbnBDYWxsYmFjaywKICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSB3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsID0gcy51cmwsCiAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEgPSBzLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgPSAiJDEiICsg
anNvbnBDYWxsYmFjayArICIkMiI7CgogICAgICAgICAgICAgICAgaWYgKCBzLmpzb25wICE9PSBm
YWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoIGpzcmUs
IHJlcGxhY2UgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnVybCA9PT0gdXJsICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5zcGVjdERhdGEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNl
KCBqc3JlLCByZXBsYWNlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5kYXRhID09PSBkYXRhICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGNhbGxiYWNrIG1hbnVh
bGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gKC9cPy8u
dGVzdCggdXJsICkgPyAiJiIgOiAiPyIpICsgcy5qc29ucCArICI9IiArIGpzb25wQ2FsbGJhY2s7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcy51cmwgPSB1cmw7CiAgICAg
ICAgICAgICAgICBzLmRhdGEgPSBkYXRhOwoKICAgICAgICAgICAgICAgIC8vIEluc3RhbGwgY2Fs
bGJhY2sKICAgICAgICAgICAgICAgIHdpbmRvd1sganNvbnBDYWxsYmFjayBdID0gZnVuY3Rpb24o
IHJlc3BvbnNlICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUNvbnRhaW5lciA9
IFsgcmVzcG9uc2UgXTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gQ2xl
YW4tdXAgZnVuY3Rpb24KICAgICAgICAgICAgICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNhbGxiYWNrIGJhY2sgdG8gcHJldmlvdXMg
dmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WyBqc29ucENhbGxiYWNrIF0gPSBw
cmV2aW91czsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5j
dGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHByZXZpb3VzICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WyBqc29ucENhbGxiYWNrIF0oIHJl
c3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJl
dHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvbgogICAgICAgICAgICAgICAgcy5jb252
ZXJ0ZXJzWyJzY3JpcHQganNvbiJdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5lcnJvcigganNvbnBDYWxsYmFjayArICIgd2FzIG5vdCBjYWxsZWQiICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3BvbnNlQ29udGFpbmVyWyAwIF07CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg
ICAgIC8vIGZvcmNlIGpzb24gZGF0YVR5cGUKICAgICAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAw
IF0gPSAianNvbiI7CgogICAgICAgICAgICAgICAgLy8gRGVsZWdhdGUgdG8gc2NyaXB0CiAgICAg
ICAgICAgICAgICByZXR1cm4gInNjcmlwdCI7CiAgICAgICAgfQp9KTsKCgoKCi8vIEluc3RhbGwg
c2NyaXB0IGRhdGFUeXBlCmpRdWVyeS5hamF4U2V0dXAoewogICAgICAgIGFjY2VwdHM6IHsKICAg
ICAgICAgICAgICAgIHNjcmlwdDogInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNj
cmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0Igog
ICAgICAgIH0sCiAgICAgICAgY29udGVudHM6IHsKICAgICAgICAgICAgICAgIHNjcmlwdDogL2ph
dmFzY3JpcHR8ZWNtYXNjcmlwdC8KICAgICAgICB9LAogICAgICAgIGNvbnZlcnRlcnM6IHsKICAg
ICAgICAgICAgICAgICJ0ZXh0IHNjcmlwdCI6IGZ1bmN0aW9uKCB0ZXh0ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOwogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoKLy8g
SGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKalF1ZXJ5LmFqYXhQcmVmaWx0
ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKICAgICAgICBpZiAoIHMuY2FjaGUgPT09IHVu
ZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgIHMuY2FjaGUgPSBmYWxzZTsKICAgICAgICB9CiAg
ICAgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgewogICAgICAgICAgICAgICAgcy50eXBlID0gIkdF
VCI7CiAgICAgICAgICAgICAgICBzLmdsb2JhbCA9IGZhbHNlOwogICAgICAgIH0KfSk7CgovLyBC
aW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnQKalF1ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3Jp
cHQiLCBmdW5jdGlvbihzKSB7CgogICAgICAgIC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMg
d2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7
CgogICAgICAgICAgICAgICAgdmFyIHNjcmlwdCwKICAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJoZWFk
IiApWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCiAgICAgICAgICAgICAgICByZXR1
cm4gewoKICAgICAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNr
ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCAic2NyaXB0IiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JpcHQuYXN5bmMgPSAiYXN5bmMiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmlwdC5jaGFyc2V0ID0gcy5zY3JpcHRDaGFyc2V0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
aXB0LnNyYyA9IHMudXJsOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRh
Y2ggaGFuZGxlcnMgZm9yIGFsbCBicm93c2VycwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24o
IF8sIGlzQWJvcnQgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBpc0Fib3J0IHx8ICFzY3JpcHQucmVhZHlTdGF0ZSB8fCAvbG9hZGVkfGNvbXBsZXRlLy50
ZXN0KCBzY3JpcHQucmVhZHlTdGF0ZSApICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBz
Y3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2NyaXB0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGVhZCAmJiBzY3JpcHQu
cGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWFkLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdGhlIHNjcmlwdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB1bmRl
ZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDYWxsYmFjayBpZiBub3QgYWJvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhaXNBYm9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayggMjAwLCAic3VjY2VzcyIg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGlu
c2VydEJlZm9yZSBpbnN0ZWFkIG9mIGFwcGVuZENoaWxkICB0byBjaXJjdW12ZW50IGFuIElFNiBi
dWcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhcmlzZXMgd2hlbiBh
IGJhc2Ugbm9kZSBpcyB1c2VkICgjMjcwOSBhbmQgIzQzNzgpLgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIGhlYWQuZmlyc3RDaGlsZCAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgYWJv
cnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2Ny
aXB0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9u
bG9hZCggMCwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICB9Cn0pOwoKCgoKdmFy
IC8vICM1MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUg
aWYgd2UgZG9uJ3QgYWJvcnQgb24gdW5sb2FkCiAgICAgICAgeGhyT25VbmxvYWRBYm9ydCA9IHdp
bmRvdy5BY3RpdmVYT2JqZWN0ID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBBYm9y
dCBhbGwgcGVuZGluZyByZXF1ZXN0cwogICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiB4
aHJDYWxsYmFja3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrc1sga2V5
IF0oIDAsIDEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9IDogZmFsc2UsCiAgICAgICAg
eGhySWQgPSAwLAogICAgICAgIHhockNhbGxiYWNrczsKCi8vIEZ1bmN0aW9ucyB0byBjcmVhdGUg
eGhycwpmdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHsKICAgICAgICB0cnkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICB9IGNh
dGNoKCBlICkge30KfQoKZnVuY3Rpb24gY3JlYXRlQWN0aXZlWEhSKCkgewogICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCAiTWljcm9z
b2Z0LlhNTEhUVFAiICk7CiAgICAgICAgfSBjYXRjaCggZSApIHt9Cn0KCi8vIENyZWF0ZSB0aGUg
cmVxdWVzdCBvYmplY3QKLy8gKFRoaXMgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYWpheFNldHRpbmdz
IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQpqUXVlcnkuYWpheFNldHRpbmdzLnhociA9IHdp
bmRvdy5BY3RpdmVYT2JqZWN0ID8KICAgICAgICAvKiBNaWNyb3NvZnQgZmFpbGVkIHRvIHByb3Bl
cmx5CiAgICAgICAgICogaW1wbGVtZW50IHRoZSBYTUxIdHRwUmVxdWVzdCBpbiBJRTcgKGNhbid0
IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAogICAgICAgICAqIHNvIHdlIHVzZSB0aGUgQWN0aXZlWE9i
amVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQogICAgICAgICAqIEFkZGl0aW9uYWxseSBYTUxIdHRw
UmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbwogICAgICAgICAqIHdlIG5lZWQg
YSBmYWxsYmFjay4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiAhdGhpcy5pc0xvY2FsICYmIGNyZWF0ZVN0YW5kYXJkWEhSKCkgfHwgY3JlYXRl
QWN0aXZlWEhSKCk7CiAgICAgICAgfSA6CiAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBicm93c2Vy
cywgdXNlIHRoZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVzdCBvYmplY3QKICAgICAgICBjcmVhdGVT
dGFuZGFyZFhIUjsKCi8vIERldGVybWluZSBzdXBwb3J0IHByb3BlcnRpZXMKKGZ1bmN0aW9uKCB4
aHIgKSB7CiAgICAgICAgalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnN1cHBvcnQsIHsKICAgICAgICAg
ICAgICAgIGFqYXg6ICEheGhyLAogICAgICAgICAgICAgICAgY29yczogISF4aHIgJiYgKCAid2l0
aENyZWRlbnRpYWxzIiBpbiB4aHIgKQogICAgICAgIH0pOwp9KSggalF1ZXJ5LmFqYXhTZXR0aW5n
cy54aHIoKSApOwoKLy8gQ3JlYXRlIHRyYW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlk
ZSBhbiB4aHIKaWYgKCBqUXVlcnkuc3VwcG9ydC5hamF4ICkgewoKICAgICAgICBqUXVlcnkuYWph
eFRyYW5zcG9ydChmdW5jdGlvbiggcyApIHsKICAgICAgICAgICAgICAgIC8vIENyb3NzIGRvbWFp
biBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3QKICAgICAg
ICAgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1ZXJ5LnN1cHBvcnQuY29ycyApIHsK
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjazsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVu
Y3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEdldCBhIG5ldyB4aHIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB4aHIgPSBzLnhocigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT3BlbiB0aGUgc29ja2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUsIGdlbmVyYXRlcyBhIGxvZ2luIHBv
cHVwIG9uIE9wZXJhICgjMjg2NSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcy51c2VybmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5bmMsIHMudXNlcm5h
bWUsIHMucGFzc3dvcmQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnhockZpZWxkcyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBzLnhockZpZWxk
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4aHJbIGkgXSA9IHMueGhyRmllbGRzWyBpIF07CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBP
dmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vdmVycmlk
ZU1pbWVUeXBlKCBzLm1pbWVUeXBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWC1S
ZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZv
ciBhIHByZWZsaWdodCBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJl
IHN1cmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoaXQgY2Fu
IGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhT
ZXR1cCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBzYW1l
LWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVk
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcy5jcm9zc0Rv
bWFpbiAmJiAhaGVhZGVyc1siWC1SZXF1ZXN0ZWQtV2l0aCJdICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0
aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVl
ZCBhbiBleHRyYSB0cnkvY2F0Y2ggZm9yIGNyb3NzIGRvbWFpbiByZXF1ZXN0cyBpbiBGaXJlZm94
IDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gaGVhZGVy
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIF8gKSB7fQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgdGhlIHJlcXVlc3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlv
biB3aGljaCBpcyBhY3R1YWxseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaGFuZGxlZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCggKCBzLmhhc0NvbnRl
bnQgJiYgcy5kYXRhICkgfHwgbnVsbCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIExpc3RlbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlSGVhZGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeG1sOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIGFj
Y2Vzc2luZyBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG9mIGFuIHhociB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cmVkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9oZWxw
ZnVsLmtub2JzLWRpYWxzLmNvbS9pbmRleC5waHAvQ29tcG9uZW50X3JldHVybmVkX2ZhaWx1cmVf
Y29kZTpfMHg4MDA0MDExMV8oTlNfRVJST1JfTk9UX0FWQUlMQUJMRSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FzIG5ldmVyIGNhbGxl
ZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8
IHhoci5yZWFkeVN0YXRlID09PSA0ICkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjYWxsZWQgb25jZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGtlZXAgYXMgYWN0
aXZlIGFueW1vcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub25y
ZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyT25V
bmxvYWRBYm9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgeGhyQ2FsbGJhY2tz
WyBoYW5kbGUgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3Mg
YW4gYWJvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWJvcnQg
aXQgbWFudWFsbHkgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyLnJlYWR5U3RhdGUg
IT09IDQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRl
cnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzID0ge307CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9
IHhoci5yZXNwb25zZVhNTDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCByZXNwb25zZSBs
aXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggeG1sICYmIHhtbC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5
NTggKi8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLnhtbCA9IHhtbDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMudGV4dCA9IHhoci5yZXNwb25z
ZVRleHQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRpb24gd2hl
biBhY2Nlc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdHVzVGV4dCBmb3IgZmF1bHR5IGNyb3Nz
LWRvbWFpbiByZXF1ZXN0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCgg
ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQg
Z2l2aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNU
ZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBzdGF0
dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBy
ZXF1ZXN0IGlzIGxvY2FsIGFuZCB3ZSBoYXZlIGRhdGE6IGFzc3VtZSBhIHN1Y2Nlc3MKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhh
dCdzIHRoZSBiZXN0IHdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBkbyBnaXZlbiBjdXJyZW50IGlt
cGxlbWVudGF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdHVzICYmIHMuaXNMb2NhbCAm
JiAhcy5jcm9zc0RvbWFpbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSByZXNw
b25zZXMudGV4dCA/IDIwMCA6IDQwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgLSAjMTQ1MDogc29t
ZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggc3RhdHVzID09PSAxMjIzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXR1cyA9IDIwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZmlyZWZveEFjY2Vzc0V4Y2Vw
dGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFpc0Fib3J0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoIC0xLCBmaXJlZm94QWNj
ZXNzRXhjZXB0aW9uICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDYWxsIGNvbXBsZXRlIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlcyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggc3RhdHVzLCBz
dGF0dXNUZXh0LCByZXNwb25zZXMsIHJlc3BvbnNlSGVhZGVycyApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGlmIHdlJ3JlIGluIHN5bmMgbW9kZSBvciBpdCdzIGluIGNhY2hlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaGFzIGJlZW4gcmV0cmlldmVkIGRp
cmVjdGx5IChJRTYgJiBJRTcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGZpcmUgdGhlIGNhbGxiYWNrCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmFzeW5jIHx8IHhoci5yZWFkeVN0YXRl
ID09PSA0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlID0gKyt4aHJJZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMg
Y2FsbGJhY2tzIGxpc3QgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGF0dGFjaCB0aGUgdW5sb2FkIGhhbmRsZXIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICF4aHJDYWxsYmFja3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3MgPSB7fTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeSggd2luZG93ICkudW5sb2FkKCB4aHJPblVubG9hZEFib3J0ICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0byBsaXN0
IG9mIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrc1sgaGFuZGxlIF0gPSBjYWxsYmFj
azsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0
YXRlY2hhbmdlID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soMCwxKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgfSk7Cn0KCgoKCnZhciBlbGVtZGlzcGxheSA9IHt9LAogICAgICAgIGlmcmFtZSwgaWZyYW1l
RG9jLAogICAgICAgIHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLAogICAgICAg
IHJmeG51bSA9IC9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksCiAgICAgICAgdGlt
ZXJJZCwKICAgICAgICBmeEF0dHJzID0gWwogICAgICAgICAgICAgICAgLy8gaGVpZ2h0IGFuaW1h
dGlvbnMKICAgICAgICAgICAgICAgIFsgImhlaWdodCIsICJtYXJnaW5Ub3AiLCAibWFyZ2luQm90
dG9tIiwgInBhZGRpbmdUb3AiLCAicGFkZGluZ0JvdHRvbSIgXSwKICAgICAgICAgICAgICAgIC8v
IHdpZHRoIGFuaW1hdGlvbnMKICAgICAgICAgICAgICAgIFsgIndpZHRoIiwgIm1hcmdpbkxlZnQi
LCAibWFyZ2luUmlnaHQiLCAicGFkZGluZ0xlZnQiLCAicGFkZGluZ1JpZ2h0IiBdLAogICAgICAg
ICAgICAgICAgLy8gb3BhY2l0eSBhbmltYXRpb25zCiAgICAgICAgICAgICAgICBbICJvcGFjaXR5
IiBdCiAgICAgICAgXSwKICAgICAgICBmeE5vdzsKCmpRdWVyeS5mbi5leHRlbmQoewogICAgICAg
IHNob3c6IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAgICAgICAg
ICAgIHZhciBlbGVtLCBkaXNwbGF5OwoKICAgICAgICAgICAgICAgIGlmICggc3BlZWQgfHwgc3Bl
ZWQgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUo
IGdlbkZ4KCJzaG93IiwgMyksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKCiAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGog
PSB0aGlzLmxlbmd0aDsgaSA8IGo7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtID0gdGhpc1tpXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBlbGVtLnN0eWxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50
IHRvIGxlYXJuIGlmIGl0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVsZXMgb3Igbm90CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRp
c3BsYXkiKSAmJiBkaXNwbGF5ID09PSAibm9uZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgPSAi
IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZWxlbWVudHMgd2hpY2ggaGF2ZSBi
ZWVuIG92ZXJyaWRkZW4gd2l0aCBkaXNwbGF5OiBub25lCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1
bHQgYnJvd3NlciBzdHlsZSBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAiIiAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxh
eSIgKSA9PT0gIm5vbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRpc3BsYXkiLCBkZWZhdWx0RGlzcGxh
eShlbGVtLm5vZGVOYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9z
dCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAogICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CiAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0gPSB0aGlzW2ldOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGVsZW0uc3R5bGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gIiIgfHwgZGlzcGxheSA9PT0gIm5vbmUiICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0
eWxlLmRpc3BsYXkgPSBqUXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRpc3BsYXkiKSB8fCAiIjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAg
ICAgIGhpZGU6IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAgICAg
ICAgICAgIGlmICggc3BlZWQgfHwgc3BlZWQgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIGdlbkZ4KCJoaWRlIiwgMyksIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIGogPSB0aGlzLmxlbmd0aDsgaSA8IGo7IGkrKyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbaV0uc3R5bGUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzcGxheSA9IGpRdWVyeS5j
c3MoIHRoaXNbaV0sICJkaXNwbGF5IiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZGlzcGxheSAhPT0gIm5vbmUiICYmICFqUXVlcnkuX2RhdGEoIHRoaXNb
aV0sICJvbGRkaXNwbGF5IiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIHRoaXNbaV0sICJvbGRkaXNwbGF5IiwgZGlzcGxh
eSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBh
IHNlY29uZCBsb29wCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIHRoZSBjb25z
dGFudCByZWZsb3cKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBqOyBp
KysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzW2ldLnN0eWxl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tpXS5zdHls
ZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gU2F2ZSB0aGUgb2xk
IHRvZ2dsZSBmdW5jdGlvbgogICAgICAgIF90b2dnbGU6IGpRdWVyeS5mbi50b2dnbGUsCgogICAg
ICAgIHRvZ2dsZTogZnVuY3Rpb24oIGZuLCBmbjIsIGNhbGxiYWNrICkgewogICAgICAgICAgICAg
ICAgdmFyIGJvb2wgPSB0eXBlb2YgZm4gPT09ICJib29sZWFuIjsKCiAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKGZuKSAmJiBqUXVlcnkuaXNGdW5jdGlvbihmbjIpICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50
cyApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGZuID09IG51bGwgfHwgYm9vbCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IGJvb2wgPyBmbiA6IGpRdWVyeSh0aGlz
KS5pcygiOmhpZGRlbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0
aGlzKVsgc3RhdGUgPyAic2hvdyIgOiAiaGlkZSIgXSgpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmFuaW1hdGUoZ2VuRngoInRvZ2dsZSIsIDMpLCBmbiwgZm4yLCBjYWxsYmFjayk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAg
ICAgICAgZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKCI6aGlkZGVuIikuY3NzKCJvcGFjaXR5
IiwgMCkuc2hvdygpLmVuZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuYW5pbWF0ZSh7b3BhY2l0eTogdG99LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7CiAgICAg
ICAgfSwKCiAgICAgICAgYW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICkgewogICAgICAgICAgICAgICAgdmFyIG9wdGFsbCA9IGpRdWVyeS5zcGVlZChzcGVl
ZCwgZWFzaW5nLCBjYWxsYmFjayk7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0
eU9iamVjdCggcHJvcCApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKCBvcHRhbGwuY29tcGxldGUsIFsgZmFsc2UgXSApOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIC8vIERvIG5vdCBjaGFuZ2UgcmVmZXJlbmNlZCBwcm9wZXJ0aWVzIGFzIHBl
ci1wcm9wZXJ0eSBlYXNpbmcgd2lsbCBiZSBsb3N0CiAgICAgICAgICAgICAgICBwcm9wID0galF1
ZXJ5LmV4dGVuZCgge30sIHByb3AgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1sgb3B0
YWxsLnF1ZXVlID09PSBmYWxzZSA/ICJlYWNoIiA6ICJxdWV1ZSIgXShmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gWFhYICd0aGlzJyBkb2VzIG5vdCBhbHdheXMgaGF2ZSBh
IG5vZGVOYW1lIHdoZW4gcnVubmluZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVz
dCBzdWl0ZQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRhbGwucXVldWUgPT09IGZh
bHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fbWFyayggdGhp
cyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgb3B0ID0galF1ZXJ5LmV4dGVuZCgge30sIG9wdGFsbCApLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzRWxlbWVudCA9IHRoaXMubm9kZVR5cGUgPT09IDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGlkZGVuID0gaXNFbGVtZW50ICYmIGpRdWVyeSh0aGlzKS5p
cygiOmhpZGRlbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHZhbCwg
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LCBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLCBzdGFydCwgZW5kLCB1bml0OwoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2lsbCBzdG9yZSBwZXIgcHJvcGVydHkgZWFzaW5nIGFuZCBiZSB1
c2VkIHRvIGRldGVybWluZSB3aGVuIGFuIGFuaW1hdGlvbiBpcyBjb21wbGV0ZQogICAgICAgICAg
ICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9wZXJ0aWVzID0ge307CgogICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBwIGluIHByb3AgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHByb3BlcnR5IG5hbWUgbm9ybWFsaXphdGlvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBwICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBwICE9PSBuYW1lICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvcFsgbmFtZSBdID0gcHJvcFsgcCBdOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHByb3BbIHAgXTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbCA9IHByb3BbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZWFzaW5nIHJlc29sdXRpb246IHBlciBwcm9wZXJ0eSA+IG9wdC5zcGVjaWFsRWFzaW5nID4gb3B0
LmVhc2luZyA+ICdzd2luZycgKGRlZmF1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9wZXJ0aWVzWyBuYW1lIF0gPSB2YWxbIDEg
XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHByb3BbIG5h
bWUgXSA9IHZhbFsgMCBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9w
ZXJ0aWVzWyBuYW1lIF0gPSBvcHQuc3BlY2lhbEVhc2luZyAmJiBvcHQuc3BlY2lhbEVhc2luZ1sg
bmFtZSBdIHx8IG9wdC5lYXNpbmcgfHwgJ3N3aW5nJzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsID09PSAi
aGlkZSIgJiYgaGlkZGVuIHx8IHZhbCA9PT0gInNob3ciICYmICFoaWRkZW4gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0LmNvbXBsZXRlLmNhbGwo
IHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaXNFbGVtZW50ICYmICggbmFtZSA9PT0gImhlaWdodCIg
fHwgbmFtZSA9PT0gIndpZHRoIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0
cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93
WCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93
WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHQub3ZlcmZsb3cgPSBbIHRoaXMuc3R5bGUub3ZlcmZsb3csIHRoaXMuc3R5
bGUub3ZlcmZsb3dYLCB0aGlzLnN0eWxlLm92ZXJmbG93WSBdOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1i
bG9jayBmb3IgaGVpZ2h0L3dpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lk
dGgvaGVpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmlt
YXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
Y3NzKCB0aGlzLCAiZGlzcGxheSIgKSA9PT0gImlubGluZSIgJiYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCB0aGlzLCAi
ZmxvYXQiICkgPT09ICJub25lIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91
dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGRlZmF1
bHREaXNwbGF5KCB0aGlzLm5vZGVOYW1lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlubGluZS1sZXZlbCBlbGVtZW50cyBhY2Nl
cHQgaW5saW5lLWJsb2NrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGJsb2NrLWxldmVsIGVsZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5l
IHdpdGggbGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAiaW5saW5lIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5
bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5k
aXNwbGF5ID0gImlubGluZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLnpvb20gPSAxOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBvcHQub3ZlcmZsb3cgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHAgaW4gcHJvcCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IGpRdWVyeS5meCggdGhpcywgb3B0LCBwICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcHJvcFsgcCBdOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJmeHR5cGVzLnRlc3QodmFsKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbIHZhbCA9PT0gInRvZ2dsZSIg
PyBoaWRkZW4gPyAic2hvdyIgOiAiaGlkZSIgOiB2YWwgXSgpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydHMgPSByZnhudW0uZXhlYyggdmFsICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydCA9IGUuY3VyKCk7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBwYXJ0cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcGFyc2VGbG9hdCggcGFydHNbMl0gKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCA9IHBhcnRz
WzNdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcCBdID8gIiIgOiAicHgiICk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbXB1
dGUgc3RhcnRpbmcgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB1bml0ICE9PSAicHgiICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggdGhpcywgcCwgKGVu
ZCB8fCAxKSArIHVuaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gKChlbmQgfHwgMSkgLyBlLmN1cigpKSAqIHN0YXJ0Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5zdHlsZSggdGhpcywgcCwgc3RhcnQgKyB1bml0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSArPS8tPSB0b2tlbiB3YXMgcHJvdmlkZWQsIHdl
J3JlIGRvaW5nIGEgcmVsYXRpdmUgYW5pbWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFydHNbMV0gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gKCAocGFydHNbIDEg
XSA9PT0gIi09IiA/IC0xIDogMSkgKiBlbmQgKSArIHN0YXJ0OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlLmN1c3RvbSggc3RhcnQsIGVuZCwgdW5pdCApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VzdG9tKCBzdGFydCwgdmFs
LCAiIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIEpTIHN0cmljdCBjb21wbGlhbmNlCiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
fSwKCiAgICAgICAgc3RvcDogZnVuY3Rpb24oIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CiAgICAg
ICAgICAgICAgICBpZiAoIGNsZWFyUXVldWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMucXVldWUoW10pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZWFj
aChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVycyA9IGpRdWVy
eS50aW1lcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHRpbWVycy5sZW5n
dGg7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIG1hcmtlciBjb3VudGVycyBpZiB3
ZSBrbm93IHRoZXkgd29uJ3QgYmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZ290b0Vu
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX3VubWFyayggdHJ1
ZSwgdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggaS0tICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dGltZXJzW2ldLmVsZW0gPT09IHRoaXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZ290b0VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmb3JjZSB0aGUgbmV4dCBzdGVwIHRvIGJlIHRoZSBsYXN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyc1tpXSh0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKGksIDEpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gc3RhcnQgdGhlIG5leHQgaW4g
dGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAogICAgICAgICAgICAgICAg
aWYgKCAhZ290b0VuZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXF1ZXVlKCk7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
fQoKfSk7CgovLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5j
aHJvbm91c2x5CmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgewogICAgICAgIHNldFRpbWVvdXQoIGNs
ZWFyRnhOb3csIDAgKTsKICAgICAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5ub3coKSApOwp9
CgpmdW5jdGlvbiBjbGVhckZ4Tm93KCkgewogICAgICAgIGZ4Tm93ID0gdW5kZWZpbmVkOwp9Cgov
LyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvbgpmdW5j
dGlvbiBnZW5GeCggdHlwZSwgbnVtICkgewogICAgICAgIHZhciBvYmogPSB7fTsKCiAgICAgICAg
alF1ZXJ5LmVhY2goIGZ4QXR0cnMuY29uY2F0LmFwcGx5KFtdLCBmeEF0dHJzLnNsaWNlKDAsbnVt
KSksIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgb2JqWyB0aGlzIF0gPSB0eXBlOwogICAg
ICAgIH0pOwoKICAgICAgICByZXR1cm4gb2JqOwp9CgovLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9y
IGN1c3RvbSBhbmltYXRpb25zCmpRdWVyeS5lYWNoKHsKICAgICAgICBzbGlkZURvd246IGdlbkZ4
KCJzaG93IiwgMSksCiAgICAgICAgc2xpZGVVcDogZ2VuRngoImhpZGUiLCAxKSwKICAgICAgICBz
bGlkZVRvZ2dsZTogZ2VuRngoInRvZ2dsZSIsIDEpLAogICAgICAgIGZhZGVJbjogeyBvcGFjaXR5
OiAic2hvdyIgfSwKICAgICAgICBmYWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LAogICAgICAg
IGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfQp9LCBmdW5jdGlvbiggbmFtZSwgcHJv
cHMgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2lu
ZywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9w
cywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKICAgICAgICB9Owp9KTsKCmpRdWVyeS5leHRl
bmQoewogICAgICAgIHNwZWVkOiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7CiAgICAg
ICAgICAgICAgICB2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/
IGpRdWVyeS5leHRlbmQoe30sIHNwZWVkKSA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29t
cGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgZHVyYXRpb246IHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICBlYXNpbmc6
IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKGVhc2luZykgJiYg
ZWFzaW5nCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIG9wdC5kdXJhdGlvbiA9
IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gIm51bWJlciIgPyBv
cHQuZHVyYXRpb24gOgogICAgICAgICAgICAgICAgICAgICAgICBvcHQuZHVyYXRpb24gaW4galF1
ZXJ5LmZ4LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNbb3B0LmR1cmF0aW9uXSA6IGpRdWVyeS5m
eC5zcGVlZHMuX2RlZmF1bHQ7CgogICAgICAgICAgICAgICAgLy8gUXVldWVpbmcKICAgICAgICAg
ICAgICAgIG9wdC5vbGQgPSBvcHQuY29tcGxldGU7CiAgICAgICAgICAgICAgICBvcHQuY29tcGxl
dGUgPSBmdW5jdGlvbiggbm9Vbm1hcmsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHQucXVldWUgIT09IGZhbHNlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5vVW5tYXJrICE9PSBmYWxzZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX3VubWFyayggdGhpcyApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAg
IHJldHVybiBvcHQ7CiAgICAgICAgfSwKCiAgICAgICAgZWFzaW5nOiB7CiAgICAgICAgICAgICAg
ICBsaW5lYXI6IGZ1bmN0aW9uKCBwLCBuLCBmaXJzdE51bSwgZGlmZiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZpcnN0TnVtICsgZGlmZiAqIHA7CiAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgc3dpbmc6IGZ1bmN0aW9uKCBwLCBuLCBmaXJzdE51bSwgZGlmZiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoLU1hdGguY29zKHAqTWF0aC5QSSkv
MikgKyAwLjUpICogZGlmZiArIGZpcnN0TnVtOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0s
CgogICAgICAgIHRpbWVyczogW10sCgogICAgICAgIGZ4OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9u
cywgcHJvcCApIHsKICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICAg
ICAgICAgICAgICB0aGlzLmVsZW0gPSBlbGVtOwogICAgICAgICAgICAgICAgdGhpcy5wcm9wID0g
cHJvcDsKCiAgICAgICAgICAgICAgICBvcHRpb25zLm9yaWcgPSBvcHRpb25zLm9yaWcgfHwge307
CiAgICAgICAgfQoKfSk7CgpqUXVlcnkuZngucHJvdG90eXBlID0gewogICAgICAgIC8vIFNpbXBs
ZSBmdW5jdGlvbiBmb3Igc2V0dGluZyBhIHN0eWxlIHZhbHVlCiAgICAgICAgdXBkYXRlOiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhp
cy5ub3csIHRoaXMgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAoalF1ZXJ5
LmZ4LnN0ZXBbdGhpcy5wcm9wXSB8fCBqUXVlcnkuZnguc3RlcC5fZGVmYXVsdCkoIHRoaXMgKTsK
ICAgICAgICB9LAoKICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc2l6ZQogICAgICAgIGN1cjog
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuZWxlbVt0aGlzLnByb3BdICE9
IG51bGwgJiYgKCF0aGlzLmVsZW0uc3R5bGUgfHwgdGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF0g
PT0gbnVsbCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1bIHRo
aXMucHJvcCBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBwYXJzZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBqUXVlcnkuY3NzKCB0aGlzLmVsZW0sIHRoaXMu
cHJvcCApOwogICAgICAgICAgICAgICAgLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVk
IGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLAogICAgICAgICAgICAgICAgLy8gY29tcGxl
eCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFyYWQpIiBhcmUgcmV0dXJuZWQgYXMgaXMsCiAgICAg
ICAgICAgICAgICAvLyBzaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8g
RmxvYXQuCiAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4oIHBhcnNlZCA9IHBhcnNlRmxvYXQo
IHIgKSApID8gIXIgfHwgciA9PT0gImF1dG8iID8gMCA6IHIgOiBwYXJzZWQ7CiAgICAgICAgfSwK
CiAgICAgICAgLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyb20gb25lIG51bWJlciB0byBhbm90aGVy
CiAgICAgICAgY3VzdG9tOiBmdW5jdGlvbiggZnJvbSwgdG8sIHVuaXQgKSB7CiAgICAgICAgICAg
ICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGZ4ID0galF1ZXJ5
LmZ4OwoKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhO
b3coKTsKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBmcm9tOwogICAgICAgICAgICAgICAg
dGhpcy5lbmQgPSB0bzsKICAgICAgICAgICAgICAgIHRoaXMudW5pdCA9IHVuaXQgfHwgdGhpcy51
bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgdGhpcy5wcm9wIF0gPyAiIiA6ICJweCIgKTsKICAg
ICAgICAgICAgICAgIHRoaXMubm93ID0gdGhpcy5zdGFydDsKICAgICAgICAgICAgICAgIHRoaXMu
cG9zID0gdGhpcy5zdGF0ZSA9IDA7CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gdCggZ290b0Vu
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RlcChnb3RvRW5kKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0LmVsZW0gPSB0aGlzLmVsZW07Cgog
ICAgICAgICAgICAgICAgaWYgKCB0KCkgJiYgalF1ZXJ5LnRpbWVycy5wdXNoKHQpICYmICF0aW1l
cklkICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aW1lcklkID0gc2V0SW50ZXJ2YWwoIGZ4
LnRpY2ssIGZ4LmludGVydmFsICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAg
ICAgLy8gU2ltcGxlICdzaG93JyBmdW5jdGlvbgogICAgICAgIHNob3c6IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZCwgc28gdGhhdCB3ZSBj
YW4gZ28gYmFjayB0byBpdCBsYXRlcgogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9yaWdb
dGhpcy5wcm9wXSA9IGpRdWVyeS5zdHlsZSggdGhpcy5lbGVtLCB0aGlzLnByb3AgKTsKICAgICAg
ICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvLyBC
ZWdpbiB0aGUgYW5pbWF0aW9uCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBz
dGFydCBhdCBhIHNtYWxsIHdpZHRoL2hlaWdodCB0byBhdm9pZCBhbnkKICAgICAgICAgICAgICAg
IC8vIGZsYXNoIG9mIGNvbnRlbnQKICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tKHRoaXMucHJv
cCA9PT0gIndpZHRoIiB8fCB0aGlzLnByb3AgPT09ICJoZWlnaHQiID8gMSA6IDAsIHRoaXMuY3Vy
KCkpOwoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGJ5IHNob3dpbmcgdGhlIGVsZW1lbnQKICAg
ICAgICAgICAgICAgIGpRdWVyeSggdGhpcy5lbGVtICkuc2hvdygpOwogICAgICAgIH0sCgogICAg
ICAgIC8vIFNpbXBsZSAnaGlkZScgZnVuY3Rpb24KICAgICAgICBoaWRlOiBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0ZWQsIHNvIHRoYXQgd2Ug
Y2FuIGdvIGJhY2sgdG8gaXQgbGF0ZXIKICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vcmln
W3RoaXMucHJvcF0gPSBqUXVlcnkuc3R5bGUoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7CiAgICAg
ICAgICAgICAgICB0aGlzLm9wdGlvbnMuaGlkZSA9IHRydWU7CgogICAgICAgICAgICAgICAgLy8g
QmVnaW4gdGhlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAgdGhpcy5jdXN0b20odGhpcy5jdXIo
KSwgMCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gRWFjaCBzdGVwIG9mIGFuIGFuaW1hdGlvbgog
ICAgICAgIHN0ZXA6IGZ1bmN0aW9uKCBnb3RvRW5kICkgewogICAgICAgICAgICAgICAgdmFyIHQg
PSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAogICAgICAgICAgICAgICAgICAgICAgICBkb25lID0g
dHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXMuZWxlbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywKICAgICAgICAgICAgICAgICAg
ICAgICAgaSwgbjsKCiAgICAgICAgICAgICAgICBpZiAoIGdvdG9FbmQgfHwgdCA+PSBvcHRpb25z
LmR1cmF0aW9uICsgdGhpcy5zdGFydFRpbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMubm93ID0gdGhpcy5lbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gdGhp
cy5zdGF0ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7CgogICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllc1sgdGhpcy5wcm9w
IF0gPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBvcHRpb25zLmFu
aW1hdGVkUHJvcGVydGllcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzW2ldICE9PSB0cnVlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkb25lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFJlc2V0IHRoZSBvdmVyZmxvdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggb3B0aW9ucy5vdmVyZmxvdyAhPSBudWxsICYmICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFw
QmxvY2tzICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5lYWNoKCBbICIiLCAiWCIsICJZIiBdLCBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGVbICJv
dmVyZmxvdyIgKyB2YWx1ZSBdID0gb3B0aW9ucy5vdmVyZmxvd1tpbmRleF07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZGUgdGhlIGVs
ZW1lbnQgaWYgdGhlICJoaWRlIiBvcGVyYXRpb24gd2FzIGRvbmUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMuaGlkZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeShlbGVtKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNl
dCB0aGUgcHJvcGVydGllcywgaWYgdGhlIGl0ZW0gaGFzIGJlZW4gaGlkZGVuIG9yIHNob3duCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLmhpZGUgfHwgb3B0aW9u
cy5zaG93ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIHAgaW4gb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXMgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcCwgb3B0
aW9ucy5vcmlnW3BdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb21wbGV0ZSBmdW5jdGlvbgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcGxldGUuY2FsbCggZWxlbSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xh
c3NpY2FsIGVhc2luZyBjYW5ub3QgYmUgdXNlZCB3aXRoIGFuIEluZmluaXR5IGR1cmF0aW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5kdXJhdGlvbiA9PSBJbmZpbml0eSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IHQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
biA9IHQgLSB0aGlzLnN0YXJ0VGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnN0YXRlID0gbiAvIG9wdGlvbnMuZHVyYXRpb247CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFBlcmZvcm0gdGhlIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVsdHMgdG8gc3dp
bmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IGpRdWVyeS5lYXNp
bmdbIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzWyB0aGlzLnByb3AgXSBdKCB0aGlzLnN0YXRl
LCBuLCAwLCAxLCBvcHRpb25zLmR1cmF0aW9uICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5ub3cgPSB0aGlzLnN0YXJ0ICsgKCh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpICog
dGhpcy5wb3MpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFBlcmZvcm0gdGhlIG5leHQgc3RlcCBvZiB0aGUgYW5pbWF0aW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQp9OwoKalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmZ4
LCB7CiAgICAgICAgdGljazogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
dGltZXJzID0galF1ZXJ5LnRpbWVycywgaSA9IDAgOyBpIDwgdGltZXJzLmxlbmd0aCA7ICsraSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGltZXJzW2ldKCkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZShpLS0sIDEpOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAh
dGltZXJzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0b3Ao
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBpbnRlcnZhbDogMTMsCgog
ICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCgg
dGltZXJJZCApOwogICAgICAgICAgICAgICAgdGltZXJJZCA9IG51bGw7CiAgICAgICAgfSwKCiAg
ICAgICAgc3BlZWRzOiB7CiAgICAgICAgICAgICAgICBzbG93OiA2MDAsCiAgICAgICAgICAgICAg
ICBmYXN0OiAyMDAsCiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHNwZWVkCiAgICAgICAgICAg
ICAgICBfZGVmYXVsdDogNDAwCiAgICAgICAgfSwKCiAgICAgICAgc3RlcDogewogICAgICAgICAg
ICAgICAgb3BhY2l0eTogZnVuY3Rpb24oIGZ4ICkgewogICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuc3R5bGUoIGZ4LmVsZW0sICJvcGFjaXR5IiwgZngubm93ICk7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIF9kZWZhdWx0OiBmdW5jdGlvbiggZnggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZnguZWxlbS5zdHlsZSAmJiBmeC5lbGVtLnN0eWxlWyBmeC5w
cm9wIF0gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeC5lbGVt
LnN0eWxlWyBmeC5wcm9wIF0gPSAoZngucHJvcCA9PT0gIndpZHRoIiB8fCBmeC5wcm9wID09PSAi
aGVpZ2h0IiA/IE1hdGgubWF4KDAsIGZ4Lm5vdykgOiBmeC5ub3cpICsgZngudW5pdDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmeC5lbGVtWyBmeC5wcm9wIF0gPSBmeC5ub3c7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoKaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVl
cnkuZXhwci5maWx0ZXJzICkgewogICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQg
PSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChq
UXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtID09PSBmbi5lbGVtOwogICAgICAgICAgICAgICAgfSkubGVuZ3RoOwogICAgICAg
IH07Cn0KCi8vIFRyeSB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGRpc3BsYXkgdmFsdWUgb2YgYW4g
ZWxlbWVudApmdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CgogICAgICAgIGlm
ICggIWVsZW1kaXNwbGF5WyBub2RlTmFtZSBdICkgewoKICAgICAgICAgICAgICAgIHZhciBib2R5
ID0gZG9jdW1lbnQuYm9keSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGpRdWVyeSgg
IjwiICsgbm9kZU5hbWUgKyAiPiIgKS5hcHBlbmRUbyggYm9keSApLAogICAgICAgICAgICAgICAg
ICAgICAgICBkaXNwbGF5ID0gZWxlbS5jc3MoICJkaXNwbGF5IiApOwoKICAgICAgICAgICAgICAg
IGVsZW0ucmVtb3ZlKCk7CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHNpbXBsZSB3YXkgZmFp
bHMsCiAgICAgICAgICAgICAgICAvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5
IGJ5IGF0dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCiAgICAgICAgICAgICAgICBpZiAoIGRp
c3BsYXkgPT09ICJub25lIiB8fCBkaXNwbGF5ID09PSAiIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTm8gaWZyYW1lIHRvIHVzZSB5ZXQsIHNvIGNyZWF0ZSBpdAogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFpZnJhbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlmcmFtZSIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUuZnJhbWVCb3JkZXIgPSBpZnJhbWUud2lkdGgg
PSBpZnJhbWUuaGVpZ2h0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZCggaWZyYW1lICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDcmVhdGUgYSBjYWNoZWFibGUgY29weSBvZiB0aGUgaWZyYW1lIGRvY3Vt
ZW50IG9uIGZpcnN0IGNhbGwuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGFuZCBPcGVy
YSB3aWxsIGFsbG93IHVzIHRvIHJldXNlIHRoZSBpZnJhbWVEb2Mgd2l0aG91dCByZS13cml0aW5n
IHRoZSBmYWtlIEhUTUwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9jdW1lbnQgdG8gaXQ7
IFdlYktpdCAmIEZpcmVmb3ggd29uJ3QgYWxsb3cgcmV1c2luZyB0aGUgaWZyYW1lIGRvY3VtZW50
LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpZnJhbWVEb2MgfHwgIWlmcmFtZS5jcmVh
dGVFbGVtZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZURvYyA9
ICggaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVudCApLmRvY3Vt
ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZURvYy53cml0ZSggKCBk
b2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIgPyAiPCFkb2N0eXBlIGh0bWw+IiA6
ICIiICkgKyAiPGh0bWw+PGJvZHk+IiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmcmFtZURvYy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtID0gaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICk7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2MuYm9keS5hcHBlbmRDaGlsZCggZWxl
bSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0s
ICJkaXNwbGF5IiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgYm9keS5yZW1vdmVDaGlsZCgg
aWZyYW1lICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhl
IGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5CiAgICAgICAgICAgICAgICBlbGVtZGlzcGxheVsgbm9k
ZU5hbWUgXSA9IGRpc3BsYXk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZWxlbWRpc3BsYXlb
IG5vZGVOYW1lIF07Cn0KCgoKCnZhciBydGFibGUgPSAvXnQoPzphYmxlfGR8aCkkL2ksCiAgICAg
ICAgcnJvb3QgPSAvXig/OmJvZHl8aHRtbCkkL2k7CgppZiAoICJnZXRCb3VuZGluZ0NsaWVudFJl
Y3QiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCApIHsKICAgICAgICBqUXVlcnkuZm4ub2Zm
c2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRo
aXNbMF0sIGJveDsKCiAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlv
bnMsIGkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCAhZWxlbS5vd25lckRvY3VtZW50ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5ib2R5ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm9mZnNldC5ib2R5T2Zmc2V0KCBlbGVt
ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZSkge30KCiAgICAgICAgICAgICAgICB2YXIgZG9jID0gZWxlbS5vd25l
ckRvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50
RWxlbWVudDsKCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UncmUgbm90IGRlYWxpbmcg
d2l0aCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZQogICAgICAgICAgICAgICAgaWYgKCAhYm94IHx8
ICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGJveCA/IHsgdG9wOiBib3gudG9wLCBsZWZ0OiBib3gubGVmdCB9IDogeyB0
b3A6IDAsIGxlZnQ6IDAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIg
Ym9keSA9IGRvYy5ib2R5LAogICAgICAgICAgICAgICAgICAgICAgICB3aW4gPSBnZXRXaW5kb3co
ZG9jKSwKICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50VG9wICA9IGRvY0VsZW0uY2xpZW50
VG9wICB8fCBib2R5LmNsaWVudFRvcCAgfHwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgY2xp
ZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wICA9IHdpbi5wYWdlWU9mZnNldCB8fCBqUXVl
cnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBkb2NFbGVtLnNjcm9sbFRvcCAgfHwgYm9keS5zY3JvbGxU
b3AsCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQg
fHwgalF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgZG9jRWxlbS5zY3JvbGxMZWZ0IHx8IGJvZHku
c2Nyb2xsTGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgdG9wICA9IGJveC50b3AgICsgc2Ny
b2xsVG9wICAtIGNsaWVudFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGJveC5s
ZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIHsg
dG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKICAgICAgICB9OwoKfSBlbHNlIHsKICAgICAgICBqUXVl
cnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICB2YXIg
ZWxlbSA9IHRoaXNbMF07CgogICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBv
cHRpb25zLCBpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gfHwgIWVsZW0ub3duZXJEb2N1bWVudCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQuYm9keSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCgg
ZWxlbSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQu
aW5pdGlhbGl6ZSgpOwoKICAgICAgICAgICAgICAgIHZhciBjb21wdXRlZFN0eWxlLAogICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldk9mZnNldFBhcmVudCA9IGVsZW0sCiAgICAgICAgICAgICAg
ICAgICAgICAgIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
IGJvZHkgPSBkb2MuYm9keSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZpZXcgPSBk
b2MuZGVmYXVsdFZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDb21wdXRlZFN0eWxl
ID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxs
ICkgOiBlbGVtLmN1cnJlbnRTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gZWxl
bS5vZmZzZXRUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBlbGVtLm9mZnNldExl
ZnQ7CgogICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYg
ZWxlbSAhPT0gYm9keSAmJiBlbGVtICE9PSBkb2NFbGVtICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuc3VwcG9ydHNGaXhlZFBvc2l0aW9uICYmIHByZXZDb21w
dXRlZFN0eWxlLnBvc2l0aW9uID09PSAiZml4ZWQiICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRD
b21wdXRlZFN0eWxlKGVsZW0sIG51bGwpIDogZWxlbS5jdXJyZW50U3R5bGU7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHRvcCAgLT0gZWxlbS5zY3JvbGxUb3A7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQgLT0gZWxlbS5zY3JvbGxMZWZ0OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBlbGVtID09PSBvZmZzZXRQYXJlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9wICArPSBlbGVtLm9mZnNldFRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0ICs9IGVsZW0ub2Zmc2V0TGVmdDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkub2Zmc2V0LmRvZXNOb3RBZGRCb3JkZXIgJiYgIShqUXVlcnkub2Zmc2V0
LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzICYmIHJ0YWJsZS50ZXN0KGVsZW0ubm9kZU5h
bWUpKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgKz0g
cGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCAgKSB8fCAwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBwYXJzZUZsb2F0KCBjb21w
dXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2T2Zmc2V0UGFy
ZW50ID0gb2Zmc2V0UGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuc3VidHJhY3RzQm9yZGVy
Rm9yT3ZlcmZsb3dOb3RWaXNpYmxlICYmIGNvbXB1dGVkU3R5bGUub3ZlcmZsb3cgIT09ICJ2aXNp
YmxlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxv
YXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGggICkgfHwgMDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVy
TGVmdFdpZHRoICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldkNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24g
PT09ICJyZWxhdGl2ZSIgfHwgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICJzdGF0aWMi
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IGJvZHkub2Zmc2V0VG9wOwogICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IGJvZHkub2Zmc2V0TGVmdDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuc3VwcG9ydHNGaXhlZFBv
c2l0aW9uICYmIHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAiZml4ZWQiICkgewogICAg
ICAgICAgICAgICAgICAgICAgICB0b3AgICs9IE1hdGgubWF4KCBkb2NFbGVtLnNjcm9sbFRvcCwg
Ym9keS5zY3JvbGxUb3AgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBNYXRoLm1h
eCggZG9jRWxlbS5zY3JvbGxMZWZ0LCBib2R5LnNjcm9sbExlZnQgKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwogICAg
ICAgIH07Cn0KCmpRdWVyeS5vZmZzZXQgPSB7CiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHksIGNvbnRhaW5lciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBpbm5lckRpdiwgY2hlY2tEaXYsIHRhYmxl
LCB0ZCwgYm9keU1hcmdpblRvcCA9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdp
blRvcCIpICkgfHwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9ICI8ZGl2IHN0eWxl
PSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xp
ZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsnPjxkaXY+PC9kaXY+PC9kaXY+
PHRhYmxlIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9y
ZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsnIGNlbGxw
YWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+PHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iOwoK
ICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIGNvbnRhaW5lci5zdHlsZSwgeyBwb3NpdGlv
bjogImFic29sdXRlIiwgdG9wOiAwLCBsZWZ0OiAwLCBtYXJnaW46IDAsIGJvcmRlcjogMCwgd2lk
dGg6ICIxcHgiLCBoZWlnaHQ6ICIxcHgiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiB9ICk7CgogICAg
ICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgICAgICAgICBi
b2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKICAgICAgICAg
ICAgICAgIGlubmVyRGl2ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICBj
aGVja0RpdiA9IGlubmVyRGl2LmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICB0ZCA9IGlubmVy
RGl2Lm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDsKCiAgICAgICAgICAgICAgICB0
aGlzLmRvZXNOb3RBZGRCb3JkZXIgPSAoY2hlY2tEaXYub2Zmc2V0VG9wICE9PSA1KTsKICAgICAg
ICAgICAgICAgIHRoaXMuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHMgPSAodGQub2Zmc2V0
VG9wID09PSA1KTsKCiAgICAgICAgICAgICAgICBjaGVja0Rpdi5zdHlsZS5wb3NpdGlvbiA9ICJm
aXhlZCI7CiAgICAgICAgICAgICAgICBjaGVja0Rpdi5zdHlsZS50b3AgPSAiMjBweCI7CgogICAg
ICAgICAgICAgICAgLy8gc2FmYXJpIHN1YnRyYWN0cyBwYXJlbnQgYm9yZGVyIHdpZHRoIGhlcmUg
d2hpY2ggaXMgNXB4CiAgICAgICAgICAgICAgICB0aGlzLnN1cHBvcnRzRml4ZWRQb3NpdGlvbiA9
IChjaGVja0Rpdi5vZmZzZXRUb3AgPT09IDIwIHx8IGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0gMTUp
OwogICAgICAgICAgICAgICAgY2hlY2tEaXYuc3R5bGUucG9zaXRpb24gPSBjaGVja0Rpdi5zdHls
ZS50b3AgPSAiIjsKCiAgICAgICAgICAgICAgICBpbm5lckRpdi5zdHlsZS5vdmVyZmxvdyA9ICJo
aWRkZW4iOwogICAgICAgICAgICAgICAgaW5uZXJEaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRp
dmUiOwoKICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RW
aXNpYmxlID0gKGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0gLTUpOwoKICAgICAgICAgICAgICAgIHRo
aXMuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgPSAoYm9keS5vZmZzZXRUb3AgIT09
IGJvZHlNYXJnaW5Ub3ApOwoKICAgICAgICAgICAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRh
aW5lciApOwogICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5pbml0aWFsaXplID0galF1ZXJ5
Lm5vb3A7CiAgICAgICAgfSwKCiAgICAgICAgYm9keU9mZnNldDogZnVuY3Rpb24oIGJvZHkgKSB7
CiAgICAgICAgICAgICAgICB2YXIgdG9wID0gYm9keS5vZmZzZXRUb3AsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnQgPSBib2R5Lm9mZnNldExlZnQ7CgogICAgICAgICAgICAgICAgalF1ZXJ5
Lm9mZnNldC5pbml0aWFsaXplKCk7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0
LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpblRvcCIpICkg
fHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBwYXJzZUZsb2F0KCBqUXVlcnku
Y3NzKGJvZHksICJtYXJnaW5MZWZ0IikgKSB8fCAwOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH07CiAgICAgICAgfSwKCiAg
ICAgICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHsKICAgICAgICAg
ICAgICAgIHZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIgKTsKCiAg
ICAgICAgICAgICAgICAvLyBzZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJl
IHNldCBldmVuIG9uIHN0YXRpYyBlbGVtCiAgICAgICAgICAgICAgICBpZiAoIHBvc2l0aW9uID09
PSAic3RhdGljIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5wb3NpdGlv
biA9ICJyZWxhdGl2ZSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGN1
ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyT2Zmc2V0
ID0gY3VyRWxlbS5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ1NTVG9wID0g
alF1ZXJ5LmNzcyggZWxlbSwgInRvcCIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ1NT
TGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAogICAgICAgICAgICAgICAgICAgICAg
ICBjYWxjdWxhdGVQb3NpdGlvbiA9IChwb3NpdGlvbiA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlv
biA9PT0gImZpeGVkIikgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBbY3VyQ1NTVG9wLCBjdXJD
U1NMZWZ0XSkgPiAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSB7fSwgY3VyUG9z
aXRpb24gPSB7fSwgY3VyVG9wLCBjdXJMZWZ0OwoKICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8g
YmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyIHRvcCBvciBsZWZ0IGlzIGF1
dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZAogICAgICAgICAgICAg
ICAgaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
UG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1
clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGVmdCA9
IGN1clBvc2l0aW9uLmxlZnQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOwogICAgICAg
ICAgICAgICAgICAgICAgICBjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggb3B0aW9ucyApICkgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9u
cy5jYWxsKCBlbGVtLCBpLCBjdXJPZmZzZXQgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAob3B0aW9ucy50b3AgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wcy50b3AgPSAob3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wKSArIGN1clRvcDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxlZnQgIT0gbnVsbCkg
ewogICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5sZWZ0ID0gKG9wdGlvbnMubGVmdCAtIGN1
ck9mZnNldC5sZWZ0KSArIGN1ckxlZnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgaWYgKCAidXNpbmciIGluIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckVsZW0uY3NzKCBwcm9wcyApOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0KfTsKCgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICBwb3NpdGlv
bjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoICF0aGlzWzBdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF0sCgogICAgICAgICAgICAgICAgLy8gR2V0ICpyZWFs
KiBvZmZzZXRQYXJlbnQKICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0
UGFyZW50KCksCgogICAgICAgICAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cwogICAgICAg
ICAgICAgICAgb2Zmc2V0ICAgICAgID0gdGhpcy5vZmZzZXQoKSwKICAgICAgICAgICAgICAgIHBh
cmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFyZW50WzBdLm5vZGVOYW1lKSA/IHsgdG9w
OiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7CgogICAgICAgICAgICAgICAg
Ly8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCiAgICAgICAgICAgICAgICAvLyBub3RlOiB3aGVu
IGFuIGVsZW1lbnQgaGFzIG1hcmdpbjogYXV0byB0aGUgb2Zmc2V0TGVmdCBhbmQgbWFyZ2luTGVm
dAogICAgICAgICAgICAgICAgLy8gYXJlIHRoZSBzYW1lIGluIFNhZmFyaSBjYXVzaW5nIG9mZnNl
dC5sZWZ0IHRvIGluY29ycmVjdGx5IGJlIDAKICAgICAgICAgICAgICAgIG9mZnNldC50b3AgIC09
IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdpblRvcCIpICkgfHwgMDsKICAgICAg
ICAgICAgICAgIG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1h
cmdpbkxlZnQiKSApIHx8IDA7CgogICAgICAgICAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBi
b3JkZXJzCiAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQudG9wICArPSBwYXJzZUZsb2F0KCBq
UXVlcnkuY3NzKG9mZnNldFBhcmVudFswXSwgImJvcmRlclRvcFdpZHRoIikgKSB8fCAwOwogICAg
ICAgICAgICAgICAgcGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhv
ZmZzZXRQYXJlbnRbMF0sICJib3JkZXJMZWZ0V2lkdGgiKSApIHx8IDA7CgogICAgICAgICAgICAg
ICAgLy8gU3VidHJhY3QgdGhlIHR3byBvZmZzZXRzCiAgICAgICAgICAgICAgICByZXR1cm4gewog
ICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50
b3AsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zm
c2V0LmxlZnQKICAgICAgICAgICAgICAgIH07CiAgICAgICAgfSwKCiAgICAgICAgb2Zmc2V0UGFy
ZW50OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zm
c2V0UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJlbnQubm9kZU5hbWUpICYm
IGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0YXRpYyIpICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVu
dC5vZmZzZXRQYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudDsKICAgICAgICAgICAgICAgIH0pOwogICAgICAg
IH0KfSk7CgoKLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCmpRdWVy
eS5lYWNoKCBbIkxlZnQiLCAiVG9wIl0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewogICAgICAgIHZh
ciBtZXRob2QgPSAic2Nyb2xsIiArIG5hbWU7CgogICAgICAgIGpRdWVyeS5mblsgbWV0aG9kIF0g
PSBmdW5jdGlvbiggdmFsICkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0sIHdpbjsKCiAgICAg
ICAgICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtID0gdGhpc1sgMCBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxl
bSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgd2luID0gZ2V0V2lu
ZG93KCBlbGVtICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHNjcm9s
bCBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbiA/ICgicGFnZVhPZmZz
ZXQiIGluIHdpbikgPyB3aW5bIGkgPyAicGFnZVlPZmZzZXQiIDogInBhZ2VYT2Zmc2V0IiBdIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAm
JiB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBtZXRob2QgXSB8fAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luLmRvY3VtZW50LmJvZHlbIG1ldGhvZCBdIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHNjcm9sbCBvZmZzZXQKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHdpbiA9IGdldFdpbmRvdyggdGhpcyApOwoKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB3aW4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luLnNjcm9sbFRv
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWkgPyB2YWwgOiBqUXVl
cnkoIHdpbiApLnNjcm9sbExlZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbIG1ldGhvZCBdID0gdmFsOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9Owp9KTsK
CmZ1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHsKICAgICAgICByZXR1cm4galF1ZXJ5LmlzV2lu
ZG93KCBlbGVtICkgPwogICAgICAgICAgICAgICAgZWxlbSA6CiAgICAgICAgICAgICAgICBlbGVt
Lm5vZGVUeXBlID09PSA5ID8KICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5kZWZhdWx0Vmll
dyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOwp9
CgoKCgovLyBDcmVhdGUgd2lkdGgsIGhlaWdodCwgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIG91
dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKalF1ZXJ5LmVhY2goWyAiSGVpZ2h0Iiwg
IldpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCiAgICAgICAgdmFyIHR5cGUgPSBuYW1l
LnRvTG93ZXJDYXNlKCk7CgogICAgICAgIC8vIGlubmVySGVpZ2h0IGFuZCBpbm5lcldpZHRoCiAg
ICAgICAgalF1ZXJ5LmZuWyAiaW5uZXIiICsgbmFtZSBdID0gZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSAm
JiBlbGVtLnN0eWxlID8KICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCggalF1ZXJ5
LmNzcyggZWxlbSwgdHlwZSwgInBhZGRpbmciICkgKSA6CiAgICAgICAgICAgICAgICAgICAgICAg
IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgLy8gb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGgK
ICAgICAgICBqUXVlcnkuZm5bICJvdXRlciIgKyBuYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luICkg
ewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdOwogICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW0gJiYgZWxlbS5zdHlsZSA/CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmxv
YXQoIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIG1hcmdpbiA/ICJtYXJnaW4iIDogImJvcmRlciIg
KSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKICAgICAgICB9OwoKICAgICAgICBq
UXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBzaXplICkgewogICAgICAgICAgICAgICAgLy8g
R2V0IHdpbmRvdyB3aWR0aCBvciBoZWlnaHQKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhp
c1swXTsKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzaXplID09IG51bGwgPyBudWxsIDogdGhpczsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzaXplICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmWyB0eXBlIF0oIHNpemUuY2FsbCggdGhp
cywgaSwgc2VsZlsgdHlwZSBdKCkgKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxl
bSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmVyeW9uZSBlbHNlIHVzZSBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQgb3IgZG9jdW1lbnQuYm9keSBkZXBlbmRpbmcgb24gUXVpcmtz
IHZzIFN0YW5kYXJkcyBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDNyZCBjb25kaXRp
b24gYWxsb3dzIE5va2lhIHN1cHBvcnQsIGFzIGl0IHN1cHBvcnRzIHRoZSBkb2NFbGVtIHByb3Ag
YnV0IG5vdCBDU1MxQ29tcGF0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb2NFbGVtUHJv
cCA9IGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZWxlbS5kb2N1bWVudC5ib2R5Owog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5kb2N1bWVudC5jb21wYXRNb2RlID09
PSAiQ1NTMUNvbXBhdCIgJiYgZG9jRWxlbVByb3AgfHwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib2R5ICYmIGJvZHlbICJjbGllbnQiICsgbmFtZSBdIHx8IGRvY0VsZW1Qcm9wOwoK
ICAgICAgICAgICAgICAgIC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHQKICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgv
SGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE1hdGgubWF4KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZG9jdW1l
bnRFbGVtZW50WyJjbGllbnQiICsgbmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5ib2R5WyJzY3JvbGwiICsgbmFtZV0sIGVsZW0uZG9jdW1lbnRFbGVtZW50WyJzY3Jv
bGwiICsgbmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ib2R5WyJv
ZmZzZXQiICsgbmFtZV0sIGVsZW0uZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiICsgbmFtZV0KICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAvLyBHZXQgb3Igc2V0IHdp
ZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
c2l6ZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3JpZyA9
IGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSBwYXJzZUZsb2F0KCBvcmlnICk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LmlzTmFOKCByZXQgKSA/IG9yaWcgOiByZXQ7CgogICAgICAgICAgICAgICAgLy8g
U2V0IHRoZSB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQgKGRlZmF1bHQgdG8gcGl4ZWxz
IGlmIHZhbHVlIGlzIHVuaXRsZXNzKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzKCB0eXBlLCB0eXBlb2Ygc2l6ZSA9PT0gInN0
cmluZyIgPyBzaXplIDogc2l6ZSArICJweCIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
OwoKfSk7CgoKLy8gRXhwb3NlIGpRdWVyeSB0byB0aGUgZ2xvYmFsIG9iamVjdAp3aW5kb3cualF1
ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Cn0pKHdpbmRvdyk7Cl8QD3RleHQvamF2YXNjcmlwdNQF
BgcIDg8QEV8QTWZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0
cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzTxECR2JwbGlzdDAw1AECAwQFBjU2WCR2ZXJz
aW9uWCRvYmplY3RzWSRhcmNoaXZlclQkdG9wEgABhqCrBwgfJSYtFy4vMDFVJG51bGzbCQoLDA0O
DxAREhMUFRYXGBkaGxwdHlIkM1YkY2xhc3NSJDZSJDFSJDlSJDRSJDdSJDJSJDVSJDBSJDiAAoAK
gAcQAIAJgAWAABAHgAYQCIAI0yAKIRojJFdOUy5iYXNlW05TLnJlbGF0aXZlgACABIADXxBNZmls
ZTovLy9Vc2Vycy95dXN1a2UvZGV2L1dlYktpdC9QZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9q
cXVlcnkuZmxvdC5taW4uanPSJygpKlokY2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoissVU5TVVJM
WE5TT2JqZWN0I0G5w02CRzjnXxAPdGV4dC9qYXZhc2NyaXB0EZKzI3/v////////0icoMjNdTlNV
UkxSZXNwb25zZaI0LF1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0Tc4XxATV2ViUmVz
b3VyY2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAQwBJAGAAYwBqAG0AcABzAHYAeQB8AH8AggCF
AIcAiQCLAI0AjwCRAJMAlQCXAJkAmwCiAKoAtgC4ALoAvAEMAREBHAElASsBLgE0AT0BRgFYAVsB
ZAFpAXcBegGIAZoBnQGzAAAAAAAAAgEAAAAAAAAAOQAAAAAAAAAAAAAAAAAAAbVPEZKzLyogSmF2
YXNjcmlwdCBwbG90dGluZyBsaWJyYXJ5IGZvciBqUXVlcnksIHYuIDAuNy4KICoKICogUmVsZWFz
ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGJ5IElPTEEsIERlY2VtYmVyIDIwMDcuCiAqCiAqLwoo
ZnVuY3Rpb24oYil7Yi5jb2xvcj17fTtiLmNvbG9yLm1ha2U9ZnVuY3Rpb24oZCxlLGcsZil7dmFy
IGM9e307Yy5yPWR8fDA7Yy5nPWV8fDA7Yy5iPWd8fDA7Yy5hPWYhPW51bGw/ZjoxO2MuYWRkPWZ1
bmN0aW9uKGgsail7Zm9yKHZhciBrPTA7azxoLmxlbmd0aDsrK2spe2NbaC5jaGFyQXQoayldKz1q
fXJldHVybiBjLm5vcm1hbGl6ZSgpfTtjLnNjYWxlPWZ1bmN0aW9uKGgsail7Zm9yKHZhciBrPTA7
azxoLmxlbmd0aDsrK2spe2NbaC5jaGFyQXQoayldKj1qfXJldHVybiBjLm5vcm1hbGl6ZSgpfTtj
LnRvU3RyaW5nPWZ1bmN0aW9uKCl7aWYoYy5hPj0xKXtyZXR1cm4icmdiKCIrW2MucixjLmcsYy5i
XS5qb2luKCIsIikrIikifWVsc2V7cmV0dXJuInJnYmEoIitbYy5yLGMuZyxjLmIsYy5hXS5qb2lu
KCIsIikrIikifX07Yy5ub3JtYWxpemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGssaixsKXtyZXR1
cm4gajxrP2s6KGo+bD9sOmopfWMucj1oKDAscGFyc2VJbnQoYy5yKSwyNTUpO2MuZz1oKDAscGFy
c2VJbnQoYy5nKSwyNTUpO2MuYj1oKDAscGFyc2VJbnQoYy5iKSwyNTUpO2MuYT1oKDAsYy5hLDEp
O3JldHVybiBjfTtjLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGIuY29sb3IubWFrZShjLnIsYy5i
LGMuZyxjLmEpfTtyZXR1cm4gYy5ub3JtYWxpemUoKX07Yi5jb2xvci5leHRyYWN0PWZ1bmN0aW9u
KGQsZSl7dmFyIGM7ZG97Yz1kLmNzcyhlKS50b0xvd2VyQ2FzZSgpO2lmKGMhPSIiJiZjIT0idHJh
bnNwYXJlbnQiKXticmVha31kPWQucGFyZW50KCl9d2hpbGUoIWIubm9kZU5hbWUoZC5nZXQoMCks
ImJvZHkiKSk7aWYoYz09InJnYmEoMCwgMCwgMCwgMCkiKXtjPSJ0cmFuc3BhcmVudCJ9cmV0dXJu
IGIuY29sb3IucGFyc2UoYyl9O2IuY29sb3IucGFyc2U9ZnVuY3Rpb24oYyl7dmFyIGQsZj1iLmNv
bG9yLm1ha2U7aWYoZD0vcmdiXChccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMq
LFxzKihbMC05XXsxLDN9KVxzKlwpLy5leGVjKGMpKXtyZXR1cm4gZihwYXJzZUludChkWzFdLDEw
KSxwYXJzZUludChkWzJdLDEwKSxwYXJzZUludChkWzNdLDEwKSl9aWYoZD0vcmdiYVwoXHMqKFsw
LTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFsw
LTldKyg/OlwuWzAtOV0rKT8pXHMqXCkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlSW50KGRbMV0s
MTApLHBhcnNlSW50KGRbMl0sMTApLHBhcnNlSW50KGRbM10sMTApLHBhcnNlRmxvYXQoZFs0XSkp
fWlmKGQ9L3JnYlwoXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/Olwu
WzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccypcKS8uZXhlYyhjKSl7
cmV0dXJuIGYocGFyc2VGbG9hdChkWzFdKSoyLjU1LHBhcnNlRmxvYXQoZFsyXSkqMi41NSxwYXJz
ZUZsb2F0KGRbM10pKjIuNTUpfWlmKGQ9L3JnYmFcKFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwl
XHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/
KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVxzKlwpLy5leGVjKGMpKXtyZXR1cm4gZihw
YXJzZUZsb2F0KGRbMV0pKjIuNTUscGFyc2VGbG9hdChkWzJdKSoyLjU1LHBhcnNlRmxvYXQoZFsz
XSkqMi41NSxwYXJzZUZsb2F0KGRbNF0pKX1pZihkPS8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1G
MC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pLy5leGVjKGMpKXtyZXR1cm4gZihwYXJzZUludChkWzFd
LDE2KSxwYXJzZUludChkWzJdLDE2KSxwYXJzZUludChkWzNdLDE2KSl9aWYoZD0vIyhbYS1mQS1G
MC05XSkoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKS8uZXhlYyhjKSl7cmV0dXJuIGYocGFyc2VJ
bnQoZFsxXStkWzFdLDE2KSxwYXJzZUludChkWzJdK2RbMl0sMTYpLHBhcnNlSW50KGRbM10rZFsz
XSwxNikpfXZhciBlPWIudHJpbShjKS50b0xvd2VyQ2FzZSgpO2lmKGU9PSJ0cmFuc3BhcmVudCIp
e3JldHVybiBmKDI1NSwyNTUsMjU1LDApfWVsc2V7ZD1hW2VdfHxbMCwwLDBdO3JldHVybiBmKGRb
MF0sZFsxXSxkWzJdKX19O3ZhciBhPXthcXVhOlswLDI1NSwyNTVdLGF6dXJlOlsyNDAsMjU1LDI1
NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxibGFjazpbMCwwLDBdLGJsdWU6WzAsMCwyNTVdLGJyb3du
OlsxNjUsNDIsNDJdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFu
OlswLDEzOSwxMzldLGRhcmtncmV5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxk
YXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVn
cmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1
MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrdmlv
bGV0OlsxNDgsMCwyMTFdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxncmVl
bjpbMCwxMjgsMF0saW5kaWdvOls3NSwwLDEzMF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsaWdodGJs
dWU6WzE3MywyMTYsMjMwXSxsaWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdyZWVuOlsxNDQs
MjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10s
bGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxtYWdlbnRhOlsyNTUsMCwy
NTVdLG1hcm9vbjpbMTI4LDAsMF0sbmF2eTpbMCwwLDEyOF0sb2xpdmU6WzEyOCwxMjgsMF0sb3Jh
bmdlOlsyNTUsMTY1LDBdLHBpbms6WzI1NSwxOTIsMjAzXSxwdXJwbGU6WzEyOCwwLDEyOF0sdmlv
bGV0OlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sd2hpdGU6
WzI1NSwyNTUsMjU1XSx5ZWxsb3c6WzI1NSwyNTUsMF19fSkoalF1ZXJ5KTsoZnVuY3Rpb24oYyl7
ZnVuY3Rpb24gYihhdixhaSxKLGFmKXt2YXIgUT1bXSxPPXtjb2xvcnM6WyIjZWRjMjQwIiwiI2Fm
ZDhmOCIsIiNjYjRiNGIiLCIjNGRhNzRkIiwiIzk0NDBlZCJdLGxlZ2VuZDp7c2hvdzp0cnVlLG5v
Q29sdW1uczoxLGxhYmVsRm9ybWF0dGVyOm51bGwsbGFiZWxCb3hCb3JkZXJDb2xvcjoiI2NjYyIs
Y29udGFpbmVyOm51bGwscG9zaXRpb246Im5lIixtYXJnaW46NSxiYWNrZ3JvdW5kQ29sb3I6bnVs
bCxiYWNrZ3JvdW5kT3BhY2l0eTowLjg1fSx4YXhpczp7c2hvdzpudWxsLHBvc2l0aW9uOiJib3R0
b20iLG1vZGU6bnVsbCxjb2xvcjpudWxsLHRpY2tDb2xvcjpudWxsLHRyYW5zZm9ybTpudWxsLGlu
dmVyc2VUcmFuc2Zvcm06bnVsbCxtaW46bnVsbCxtYXg6bnVsbCxhdXRvc2NhbGVNYXJnaW46bnVs
bCx0aWNrczpudWxsLHRpY2tGb3JtYXR0ZXI6bnVsbCxsYWJlbFdpZHRoOm51bGwsbGFiZWxIZWln
aHQ6bnVsbCxyZXNlcnZlU3BhY2U6bnVsbCx0aWNrTGVuZ3RoOm51bGwsYWxpZ25UaWNrc1dpdGhB
eGlzOm51bGwsdGlja0RlY2ltYWxzOm51bGwsdGlja1NpemU6bnVsbCxtaW5UaWNrU2l6ZTpudWxs
LG1vbnRoTmFtZXM6bnVsbCx0aW1lZm9ybWF0Om51bGwsdHdlbHZlSG91ckNsb2NrOmZhbHNlfSx5
YXhpczp7YXV0b3NjYWxlTWFyZ2luOjAuMDIscG9zaXRpb246ImxlZnQifSx4YXhlczpbXSx5YXhl
czpbXSxzZXJpZXM6e3BvaW50czp7c2hvdzpmYWxzZSxyYWRpdXM6MyxsaW5lV2lkdGg6MixmaWxs
OnRydWUsZmlsbENvbG9yOiIjZmZmZmZmIixzeW1ib2w6ImNpcmNsZSJ9LGxpbmVzOntsaW5lV2lk
dGg6MixmaWxsOmZhbHNlLGZpbGxDb2xvcjpudWxsLHN0ZXBzOmZhbHNlfSxiYXJzOntzaG93OmZh
bHNlLGxpbmVXaWR0aDoyLGJhcldpZHRoOjEsZmlsbDp0cnVlLGZpbGxDb2xvcjpudWxsLGFsaWdu
OiJsZWZ0Iixob3Jpem9udGFsOmZhbHNlfSxzaGFkb3dTaXplOjN9LGdyaWQ6e3Nob3c6dHJ1ZSxh
Ym92ZURhdGE6ZmFsc2UsY29sb3I6IiM1NDU0NTQiLGJhY2tncm91bmRDb2xvcjpudWxsLGJvcmRl
ckNvbG9yOm51bGwsdGlja0NvbG9yOm51bGwsbGFiZWxNYXJnaW46NSxheGlzTWFyZ2luOjgsYm9y
ZGVyV2lkdGg6MixtaW5Cb3JkZXJNYXJnaW46bnVsbCxtYXJraW5nczpudWxsLG1hcmtpbmdzQ29s
b3I6IiNmNGY0ZjQiLG1hcmtpbmdzTGluZVdpZHRoOjIsY2xpY2thYmxlOmZhbHNlLGhvdmVyYWJs
ZTpmYWxzZSxhdXRvSGlnaGxpZ2h0OnRydWUsbW91c2VBY3RpdmVSYWRpdXM6MTB9LGhvb2tzOnt9
fSxhej1udWxsLGFkPW51bGwseT1udWxsLEg9bnVsbCxBPW51bGwscD1bXSxhdz1bXSxxPXtsZWZ0
OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MH0sRz0wLEk9MCxoPTAsdz0wLGFrPXtwcm9jZXNzT3B0
aW9uczpbXSxwcm9jZXNzUmF3RGF0YTpbXSxwcm9jZXNzRGF0YXBvaW50czpbXSxkcmF3U2VyaWVz
OltdLGRyYXc6W10sYmluZEV2ZW50czpbXSxkcmF3T3ZlcmxheTpbXSxzaHV0ZG93bjpbXX0sYXE9
dGhpczthcS5zZXREYXRhPWFqO2FxLnNldHVwR3JpZD10O2FxLmRyYXc9VzthcS5nZXRQbGFjZWhv
bGRlcj1mdW5jdGlvbigpe3JldHVybiBhdn07YXEuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJu
IGF6fTthcS5nZXRQbG90T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHF9O2FxLndpZHRoPWZ1bmN0
aW9uKCl7cmV0dXJuIGh9O2FxLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB3fTthcS5vZmZzZXQ9
ZnVuY3Rpb24oKXt2YXIgYUI9eS5vZmZzZXQoKTthQi5sZWZ0Kz1xLmxlZnQ7YUIudG9wKz1xLnRv
cDtyZXR1cm4gYUJ9O2FxLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gUX07YXEuZ2V0QXhlcz1m
dW5jdGlvbigpe3ZhciBhQz17fSxhQjtjLmVhY2gocC5jb25jYXQoYXcpLGZ1bmN0aW9uKGFELGFF
KXtpZihhRSl7YUNbYUUuZGlyZWN0aW9uKyhhRS5uIT0xP2FFLm46IiIpKyJheGlzIl09YUV9fSk7
cmV0dXJuIGFDfTthcS5nZXRYQXhlcz1mdW5jdGlvbigpe3JldHVybiBwfTthcS5nZXRZQXhlcz1m
dW5jdGlvbigpe3JldHVybiBhd307YXEuYzJwPUM7YXEucDJjPWFyO2FxLmdldE9wdGlvbnM9ZnVu
Y3Rpb24oKXtyZXR1cm4gT307YXEuaGlnaGxpZ2h0PXg7YXEudW5oaWdobGlnaHQ9VDthcS50cmln
Z2VyUmVkcmF3T3ZlcmxheT1mO2FxLnBvaW50T2Zmc2V0PWZ1bmN0aW9uKGFCKXtyZXR1cm57bGVm
dDpwYXJzZUludChwW2FBKGFCLCJ4IiktMV0ucDJjKCthQi54KStxLmxlZnQpLHRvcDpwYXJzZUlu
dChhd1thQShhQiwieSIpLTFdLnAyYygrYUIueSkrcS50b3ApfX07YXEuc2h1dGRvd249YWc7YXEu
cmVzaXplPWZ1bmN0aW9uKCl7QigpO2coYXopO2coYWQpfTthcS5ob29rcz1haztGKGFxKTtaKEop
O1goKTthaihhaSk7dCgpO1coKTthaCgpO2Z1bmN0aW9uIGFuKGFELGFCKXthQj1bYXFdLmNvbmNh
dChhQik7Zm9yKHZhciBhQz0wO2FDPGFELmxlbmd0aDsrK2FDKXthRFthQ10uYXBwbHkodGhpcyxh
Qil9fWZ1bmN0aW9uIEYoKXtmb3IodmFyIGFCPTA7YUI8YWYubGVuZ3RoOysrYUIpe3ZhciBhQz1h
ZlthQl07YUMuaW5pdChhcSk7aWYoYUMub3B0aW9ucyl7Yy5leHRlbmQodHJ1ZSxPLGFDLm9wdGlv
bnMpfX19ZnVuY3Rpb24gWihhQyl7dmFyIGFCO2MuZXh0ZW5kKHRydWUsTyxhQyk7aWYoTy54YXhp
cy5jb2xvcj09bnVsbCl7Ty54YXhpcy5jb2xvcj1PLmdyaWQuY29sb3J9aWYoTy55YXhpcy5jb2xv
cj09bnVsbCl7Ty55YXhpcy5jb2xvcj1PLmdyaWQuY29sb3J9aWYoTy54YXhpcy50aWNrQ29sb3I9
PW51bGwpe08ueGF4aXMudGlja0NvbG9yPU8uZ3JpZC50aWNrQ29sb3J9aWYoTy55YXhpcy50aWNr
Q29sb3I9PW51bGwpe08ueWF4aXMudGlja0NvbG9yPU8uZ3JpZC50aWNrQ29sb3J9aWYoTy5ncmlk
LmJvcmRlckNvbG9yPT1udWxsKXtPLmdyaWQuYm9yZGVyQ29sb3I9Ty5ncmlkLmNvbG9yfWlmKE8u
Z3JpZC50aWNrQ29sb3I9PW51bGwpe08uZ3JpZC50aWNrQ29sb3I9Yy5jb2xvci5wYXJzZShPLmdy
aWQuY29sb3IpLnNjYWxlKCJhIiwwLjIyKS50b1N0cmluZygpfWZvcihhQj0wO2FCPE1hdGgubWF4
KDEsTy54YXhlcy5sZW5ndGgpOysrYUIpe08ueGF4ZXNbYUJdPWMuZXh0ZW5kKHRydWUse30sTy54
YXhpcyxPLnhheGVzW2FCXSl9Zm9yKGFCPTA7YUI8TWF0aC5tYXgoMSxPLnlheGVzLmxlbmd0aCk7
KythQil7Ty55YXhlc1thQl09Yy5leHRlbmQodHJ1ZSx7fSxPLnlheGlzLE8ueWF4ZXNbYUJdKX1p
ZihPLnhheGlzLm5vVGlja3MmJk8ueGF4aXMudGlja3M9PW51bGwpe08ueGF4aXMudGlja3M9Ty54
YXhpcy5ub1RpY2tzfWlmKE8ueWF4aXMubm9UaWNrcyYmTy55YXhpcy50aWNrcz09bnVsbCl7Ty55
YXhpcy50aWNrcz1PLnlheGlzLm5vVGlja3N9aWYoTy54MmF4aXMpe08ueGF4ZXNbMV09Yy5leHRl
bmQodHJ1ZSx7fSxPLnhheGlzLE8ueDJheGlzKTtPLnhheGVzWzFdLnBvc2l0aW9uPSJ0b3AifWlm
KE8ueTJheGlzKXtPLnlheGVzWzFdPWMuZXh0ZW5kKHRydWUse30sTy55YXhpcyxPLnkyYXhpcyk7
Ty55YXhlc1sxXS5wb3NpdGlvbj0icmlnaHQifWlmKE8uZ3JpZC5jb2xvcmVkQXJlYXMpe08uZ3Jp
ZC5tYXJraW5ncz1PLmdyaWQuY29sb3JlZEFyZWFzfWlmKE8uZ3JpZC5jb2xvcmVkQXJlYXNDb2xv
cil7Ty5ncmlkLm1hcmtpbmdzQ29sb3I9Ty5ncmlkLmNvbG9yZWRBcmVhc0NvbG9yfWlmKE8ubGlu
ZXMpe2MuZXh0ZW5kKHRydWUsTy5zZXJpZXMubGluZXMsTy5saW5lcyl9aWYoTy5wb2ludHMpe2Mu
ZXh0ZW5kKHRydWUsTy5zZXJpZXMucG9pbnRzLE8ucG9pbnRzKX1pZihPLmJhcnMpe2MuZXh0ZW5k
KHRydWUsTy5zZXJpZXMuYmFycyxPLmJhcnMpfWlmKE8uc2hhZG93U2l6ZSE9bnVsbCl7Ty5zZXJp
ZXMuc2hhZG93U2l6ZT1PLnNoYWRvd1NpemV9Zm9yKGFCPTA7YUI8Ty54YXhlcy5sZW5ndGg7Kyth
Qil7VihwLGFCKzEpLm9wdGlvbnM9Ty54YXhlc1thQl19Zm9yKGFCPTA7YUI8Ty55YXhlcy5sZW5n
dGg7KythQil7VihhdyxhQisxKS5vcHRpb25zPU8ueWF4ZXNbYUJdfWZvcih2YXIgYUQgaW4gYWsp
e2lmKE8uaG9va3NbYURdJiZPLmhvb2tzW2FEXS5sZW5ndGgpe2FrW2FEXT1ha1thRF0uY29uY2F0
KE8uaG9va3NbYURdKX19YW4oYWsucHJvY2Vzc09wdGlvbnMsW09dKX1mdW5jdGlvbiBhaihhQil7
UT1ZKGFCKTtheCgpO3ooKX1mdW5jdGlvbiBZKGFFKXt2YXIgYUM9W107Zm9yKHZhciBhQj0wO2FC
PGFFLmxlbmd0aDsrK2FCKXt2YXIgYUQ9Yy5leHRlbmQodHJ1ZSx7fSxPLnNlcmllcyk7aWYoYUVb
YUJdLmRhdGEhPW51bGwpe2FELmRhdGE9YUVbYUJdLmRhdGE7ZGVsZXRlIGFFW2FCXS5kYXRhO2Mu
ZXh0ZW5kKHRydWUsYUQsYUVbYUJdKTthRVthQl0uZGF0YT1hRC5kYXRhfWVsc2V7YUQuZGF0YT1h
RVthQl19YUMucHVzaChhRCl9cmV0dXJuIGFDfWZ1bmN0aW9uIGFBKGFDLGFEKXt2YXIgYUI9YUNb
YUQrImF4aXMiXTtpZih0eXBlb2YgYUI9PSJvYmplY3QiKXthQj1hQi5ufWlmKHR5cGVvZiBhQiE9
Im51bWJlciIpe2FCPTF9cmV0dXJuIGFCfWZ1bmN0aW9uIG0oKXtyZXR1cm4gYy5ncmVwKHAuY29u
Y2F0KGF3KSxmdW5jdGlvbihhQil7cmV0dXJuIGFCfSl9ZnVuY3Rpb24gQyhhRSl7dmFyIGFDPXt9
LGFCLGFEO2ZvcihhQj0wO2FCPHAubGVuZ3RoOysrYUIpe2FEPXBbYUJdO2lmKGFEJiZhRC51c2Vk
KXthQ1sieCIrYUQubl09YUQuYzJwKGFFLmxlZnQpfX1mb3IoYUI9MDthQjxhdy5sZW5ndGg7Kyth
Qil7YUQ9YXdbYUJdO2lmKGFEJiZhRC51c2VkKXthQ1sieSIrYUQubl09YUQuYzJwKGFFLnRvcCl9
fWlmKGFDLngxIT09dW5kZWZpbmVkKXthQy54PWFDLngxfWlmKGFDLnkxIT09dW5kZWZpbmVkKXth
Qy55PWFDLnkxfXJldHVybiBhQ31mdW5jdGlvbiBhcihhRil7dmFyIGFEPXt9LGFDLGFFLGFCO2Zv
cihhQz0wO2FDPHAubGVuZ3RoOysrYUMpe2FFPXBbYUNdO2lmKGFFJiZhRS51c2VkKXthQj0ieCIr
YUUubjtpZihhRlthQl09PW51bGwmJmFFLm49PTEpe2FCPSJ4In1pZihhRlthQl0hPW51bGwpe2FE
LmxlZnQ9YUUucDJjKGFGW2FCXSk7YnJlYWt9fX1mb3IoYUM9MDthQzxhdy5sZW5ndGg7KythQyl7
YUU9YXdbYUNdO2lmKGFFJiZhRS51c2VkKXthQj0ieSIrYUUubjtpZihhRlthQl09PW51bGwmJmFF
Lm49PTEpe2FCPSJ5In1pZihhRlthQl0hPW51bGwpe2FELnRvcD1hRS5wMmMoYUZbYUJdKTticmVh
a319fXJldHVybiBhRH1mdW5jdGlvbiBWKGFDLGFCKXtpZighYUNbYUItMV0pe2FDW2FCLTFdPXtu
OmFCLGRpcmVjdGlvbjphQz09cD8ieCI6InkiLG9wdGlvbnM6Yy5leHRlbmQodHJ1ZSx7fSxhQz09
cD9PLnhheGlzOk8ueWF4aXMpfX1yZXR1cm4gYUNbYUItMV19ZnVuY3Rpb24gYXgoKXt2YXIgYUc7
dmFyIGFNPVEubGVuZ3RoLGFCPVtdLGFFPVtdO2ZvcihhRz0wO2FHPFEubGVuZ3RoOysrYUcpe3Zh
ciBhSj1RW2FHXS5jb2xvcjtpZihhSiE9bnVsbCl7LS1hTTtpZih0eXBlb2YgYUo9PSJudW1iZXIi
KXthRS5wdXNoKGFKKX1lbHNle2FCLnB1c2goYy5jb2xvci5wYXJzZShRW2FHXS5jb2xvcikpfX19
Zm9yKGFHPTA7YUc8YUUubGVuZ3RoOysrYUcpe2FNPU1hdGgubWF4KGFNLGFFW2FHXSsxKX12YXIg
YUM9W10sYUY9MDthRz0wO3doaWxlKGFDLmxlbmd0aDxhTSl7dmFyIGFJO2lmKE8uY29sb3JzLmxl
bmd0aD09YUcpe2FJPWMuY29sb3IubWFrZSgxMDAsMTAwLDEwMCl9ZWxzZXthST1jLmNvbG9yLnBh
cnNlKE8uY29sb3JzW2FHXSl9dmFyIGFEPWFGJTI9PTE/LTE6MTthSS5zY2FsZSgicmdiIiwxK2FE
Kk1hdGguY2VpbChhRi8yKSowLjIpO2FDLnB1c2goYUkpOysrYUc7aWYoYUc+PU8uY29sb3JzLmxl
bmd0aCl7YUc9MDsrK2FGfX12YXIgYUg9MCxhTjtmb3IoYUc9MDthRzxRLmxlbmd0aDsrK2FHKXth
Tj1RW2FHXTtpZihhTi5jb2xvcj09bnVsbCl7YU4uY29sb3I9YUNbYUhdLnRvU3RyaW5nKCk7Kyth
SH1lbHNle2lmKHR5cGVvZiBhTi5jb2xvcj09Im51bWJlciIpe2FOLmNvbG9yPWFDW2FOLmNvbG9y
XS50b1N0cmluZygpfX1pZihhTi5saW5lcy5zaG93PT1udWxsKXt2YXIgYUwsYUs9dHJ1ZTtmb3Io
YUwgaW4gYU4pe2lmKGFOW2FMXSYmYU5bYUxdLnNob3cpe2FLPWZhbHNlO2JyZWFrfX1pZihhSyl7
YU4ubGluZXMuc2hvdz10cnVlfX1hTi54YXhpcz1WKHAsYUEoYU4sIngiKSk7YU4ueWF4aXM9Vihh
dyxhQShhTiwieSIpKX19ZnVuY3Rpb24geigpe3ZhciBhTz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5J
VFksYUk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGFCPU51bWJlci5NQVhfVkFMVUUsYVUsYVMs
YVIsYU4sYUQsYUosYVQsYVAsYUgsYUcsYUMsYTAsYVgsYUw7ZnVuY3Rpb24gYUYoYTMsYTIsYTEp
e2lmKGEyPGEzLmRhdGFtaW4mJmEyIT0tYUIpe2EzLmRhdGFtaW49YTJ9aWYoYTE+YTMuZGF0YW1h
eCYmYTEhPWFCKXthMy5kYXRhbWF4PWExfX1jLmVhY2gobSgpLGZ1bmN0aW9uKGExLGEyKXthMi5k
YXRhbWluPWFPO2EyLmRhdGFtYXg9YUk7YTIudXNlZD1mYWxzZX0pO2ZvcihhVT0wO2FVPFEubGVu
Z3RoOysrYVUpe2FKPVFbYVVdO2FKLmRhdGFwb2ludHM9e3BvaW50czpbXX07YW4oYWsucHJvY2Vz
c1Jhd0RhdGEsW2FKLGFKLmRhdGEsYUouZGF0YXBvaW50c10pfWZvcihhVT0wO2FVPFEubGVuZ3Ro
OysrYVUpe2FKPVFbYVVdO3ZhciBhWj1hSi5kYXRhLGFXPWFKLmRhdGFwb2ludHMuZm9ybWF0O2lm
KCFhVyl7YVc9W107YVcucHVzaCh7eDp0cnVlLG51bWJlcjp0cnVlLHJlcXVpcmVkOnRydWV9KTth
Vy5wdXNoKHt5OnRydWUsbnVtYmVyOnRydWUscmVxdWlyZWQ6dHJ1ZX0pO2lmKGFKLmJhcnMuc2hv
d3x8KGFKLmxpbmVzLnNob3cmJmFKLmxpbmVzLmZpbGwpKXthVy5wdXNoKHt5OnRydWUsbnVtYmVy
OnRydWUscmVxdWlyZWQ6ZmFsc2UsZGVmYXVsdFZhbHVlOjB9KTtpZihhSi5iYXJzLmhvcml6b250
YWwpe2RlbGV0ZSBhV1thVy5sZW5ndGgtMV0ueTthV1thVy5sZW5ndGgtMV0ueD10cnVlfX1hSi5k
YXRhcG9pbnRzLmZvcm1hdD1hV31pZihhSi5kYXRhcG9pbnRzLnBvaW50c2l6ZSE9bnVsbCl7Y29u
dGludWV9YUouZGF0YXBvaW50cy5wb2ludHNpemU9YVcubGVuZ3RoO2FQPWFKLmRhdGFwb2ludHMu
cG9pbnRzaXplO2FUPWFKLmRhdGFwb2ludHMucG9pbnRzO2luc2VydFN0ZXBzPWFKLmxpbmVzLnNo
b3cmJmFKLmxpbmVzLnN0ZXBzO2FKLnhheGlzLnVzZWQ9YUoueWF4aXMudXNlZD10cnVlO2Zvcihh
Uz1hUj0wO2FTPGFaLmxlbmd0aDsrK2FTLGFSKz1hUCl7YUw9YVpbYVNdO3ZhciBhRT1hTD09bnVs
bDtpZighYUUpe2ZvcihhTj0wO2FOPGFQOysrYU4pe2EwPWFMW2FOXTthWD1hV1thTl07aWYoYVgp
e2lmKGFYLm51bWJlciYmYTAhPW51bGwpe2EwPSthMDtpZihpc05hTihhMCkpe2EwPW51bGx9ZWxz
ZXtpZihhMD09SW5maW5pdHkpe2EwPWFCfWVsc2V7aWYoYTA9PS1JbmZpbml0eSl7YTA9LWFCfX19
fWlmKGEwPT1udWxsKXtpZihhWC5yZXF1aXJlZCl7YUU9dHJ1ZX1pZihhWC5kZWZhdWx0VmFsdWUh
PW51bGwpe2EwPWFYLmRlZmF1bHRWYWx1ZX19fWFUW2FSK2FOXT1hMH19aWYoYUUpe2ZvcihhTj0w
O2FOPGFQOysrYU4pe2EwPWFUW2FSK2FOXTtpZihhMCE9bnVsbCl7YVg9YVdbYU5dO2lmKGFYLngp
e2FGKGFKLnhheGlzLGEwLGEwKX1pZihhWC55KXthRihhSi55YXhpcyxhMCxhMCl9fWFUW2FSK2FO
XT1udWxsfX1lbHNle2lmKGluc2VydFN0ZXBzJiZhUj4wJiZhVFthUi1hUF0hPW51bGwmJmFUW2FS
LWFQXSE9YVRbYVJdJiZhVFthUi1hUCsxXSE9YVRbYVIrMV0pe2ZvcihhTj0wO2FOPGFQOysrYU4p
e2FUW2FSK2FQK2FOXT1hVFthUithTl19YVRbYVIrMV09YVRbYVItYVArMV07YVIrPWFQfX19fWZv
cihhVT0wO2FVPFEubGVuZ3RoOysrYVUpe2FKPVFbYVVdO2FuKGFrLnByb2Nlc3NEYXRhcG9pbnRz
LFthSixhSi5kYXRhcG9pbnRzXSl9Zm9yKGFVPTA7YVU8US5sZW5ndGg7KythVSl7YUo9UVthVV07
YVQ9YUouZGF0YXBvaW50cy5wb2ludHMsYVA9YUouZGF0YXBvaW50cy5wb2ludHNpemU7dmFyIGFL
PWFPLGFRPWFPLGFNPWFJLGFWPWFJO2ZvcihhUz0wO2FTPGFULmxlbmd0aDthUys9YVApe2lmKGFU
W2FTXT09bnVsbCl7Y29udGludWV9Zm9yKGFOPTA7YU48YVA7KythTil7YTA9YVRbYVMrYU5dO2FY
PWFXW2FOXTtpZighYVh8fGEwPT1hQnx8YTA9PS1hQil7Y29udGludWV9aWYoYVgueCl7aWYoYTA8
YUspe2FLPWEwfWlmKGEwPmFNKXthTT1hMH19aWYoYVgueSl7aWYoYTA8YVEpe2FRPWEwfWlmKGEw
PmFWKXthVj1hMH19fX1pZihhSi5iYXJzLnNob3cpe3ZhciBhWT1hSi5iYXJzLmFsaWduPT0ibGVm
dCI/MDotYUouYmFycy5iYXJXaWR0aC8yO2lmKGFKLmJhcnMuaG9yaXpvbnRhbCl7YVErPWFZO2FW
Kz1hWSthSi5iYXJzLmJhcldpZHRofWVsc2V7YUsrPWFZO2FNKz1hWSthSi5iYXJzLmJhcldpZHRo
fX1hRihhSi54YXhpcyxhSyxhTSk7YUYoYUoueWF4aXMsYVEsYVYpfWMuZWFjaChtKCksZnVuY3Rp
b24oYTEsYTIpe2lmKGEyLmRhdGFtaW49PWFPKXthMi5kYXRhbWluPW51bGx9aWYoYTIuZGF0YW1h
eD09YUkpe2EyLmRhdGFtYXg9bnVsbH19KX1mdW5jdGlvbiBqKGFCLGFDKXt2YXIgYUQ9ZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7YUQuY2xhc3NOYW1lPWFDO2FELndpZHRoPUc7YUQu
aGVpZ2h0PUk7aWYoIWFCKXtjKGFEKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRv
cDowfSl9YyhhRCkuYXBwZW5kVG8oYXYpO2lmKCFhRC5nZXRDb250ZXh0KXthRD13aW5kb3cuR192
bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZW50KGFEKX1hRC5nZXRDb250ZXh0KCIyZCIpLnNhdmUo
KTtyZXR1cm4gYUR9ZnVuY3Rpb24gQigpe0c9YXYud2lkdGgoKTtJPWF2LmhlaWdodCgpO2lmKEc8
PTB8fEk8PTApe3Rocm93IkludmFsaWQgZGltZW5zaW9ucyBmb3IgcGxvdCwgd2lkdGggPSAiK0cr
IiwgaGVpZ2h0ID0gIitJfX1mdW5jdGlvbiBnKGFDKXtpZihhQy53aWR0aCE9Ryl7YUMud2lkdGg9
R31pZihhQy5oZWlnaHQhPUkpe2FDLmhlaWdodD1JfXZhciBhQj1hQy5nZXRDb250ZXh0KCIyZCIp
O2FCLnJlc3RvcmUoKTthQi5zYXZlKCl9ZnVuY3Rpb24gWCgpe3ZhciBhQyxhQj1hdi5jaGlsZHJl
bigiY2FudmFzLmJhc2UiKSxhRD1hdi5jaGlsZHJlbigiY2FudmFzLm92ZXJsYXkiKTtpZihhQi5s
ZW5ndGg9PTB8fGFEPT0wKXthdi5odG1sKCIiKTthdi5jc3Moe3BhZGRpbmc6MH0pO2lmKGF2LmNz
cygicG9zaXRpb24iKT09InN0YXRpYyIpe2F2LmNzcygicG9zaXRpb24iLCJyZWxhdGl2ZSIpfUIo
KTthej1qKHRydWUsImJhc2UiKTthZD1qKGZhbHNlLCJvdmVybGF5Iik7YUM9ZmFsc2V9ZWxzZXth
ej1hQi5nZXQoMCk7YWQ9YUQuZ2V0KDApO2FDPXRydWV9SD1hei5nZXRDb250ZXh0KCIyZCIpO0E9
YWQuZ2V0Q29udGV4dCgiMmQiKTt5PWMoW2FkLGF6XSk7aWYoYUMpe2F2LmRhdGEoInBsb3QiKS5z
aHV0ZG93bigpO2FxLnJlc2l6ZSgpO0EuY2xlYXJSZWN0KDAsMCxHLEkpO3kudW5iaW5kKCk7YXYu
Y2hpbGRyZW4oKS5ub3QoW2F6LGFkXSkucmVtb3ZlKCl9YXYuZGF0YSgicGxvdCIsYXEpfWZ1bmN0
aW9uIGFoKCl7aWYoTy5ncmlkLmhvdmVyYWJsZSl7eS5tb3VzZW1vdmUoYWEpO3kubW91c2VsZWF2
ZShsKX1pZihPLmdyaWQuY2xpY2thYmxlKXt5LmNsaWNrKFIpfWFuKGFrLmJpbmRFdmVudHMsW3ld
KX1mdW5jdGlvbiBhZygpe2lmKE0pe2NsZWFyVGltZW91dChNKX15LnVuYmluZCgibW91c2Vtb3Zl
IixhYSk7eS51bmJpbmQoIm1vdXNlbGVhdmUiLGwpO3kudW5iaW5kKCJjbGljayIsUik7YW4oYWsu
c2h1dGRvd24sW3ldKX1mdW5jdGlvbiByKGFHKXtmdW5jdGlvbiBhQyhhSCl7cmV0dXJuIGFIfXZh
ciBhRixhQixhRD1hRy5vcHRpb25zLnRyYW5zZm9ybXx8YUMsYUU9YUcub3B0aW9ucy5pbnZlcnNl
VHJhbnNmb3JtO2lmKGFHLmRpcmVjdGlvbj09IngiKXthRj1hRy5zY2FsZT1oL01hdGguYWJzKGFE
KGFHLm1heCktYUQoYUcubWluKSk7YUI9TWF0aC5taW4oYUQoYUcubWF4KSxhRChhRy5taW4pKX1l
bHNle2FGPWFHLnNjYWxlPXcvTWF0aC5hYnMoYUQoYUcubWF4KS1hRChhRy5taW4pKTthRj0tYUY7
YUI9TWF0aC5tYXgoYUQoYUcubWF4KSxhRChhRy5taW4pKX1pZihhRD09YUMpe2FHLnAyYz1mdW5j
dGlvbihhSCl7cmV0dXJuKGFILWFCKSphRn19ZWxzZXthRy5wMmM9ZnVuY3Rpb24oYUgpe3JldHVy
bihhRChhSCktYUIpKmFGfX1pZighYUUpe2FHLmMycD1mdW5jdGlvbihhSCl7cmV0dXJuIGFCK2FI
L2FGfX1lbHNle2FHLmMycD1mdW5jdGlvbihhSCl7cmV0dXJuIGFFKGFCK2FIL2FGKX19fWZ1bmN0
aW9uIEwoYUQpe3ZhciBhQj1hRC5vcHRpb25zLGFGLGFKPWFELnRpY2tzfHxbXSxhST1bXSxhRSxh
Sz1hQi5sYWJlbFdpZHRoLGFHPWFCLmxhYmVsSGVpZ2h0LGFDO2Z1bmN0aW9uIGFIKGFNLGFMKXty
ZXR1cm4gYygnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDAwMHB4OycrYUwr
J2ZvbnQtc2l6ZTpzbWFsbGVyIj48ZGl2IGNsYXNzPSInK2FELmRpcmVjdGlvbisiQXhpcyAiK2FE
LmRpcmVjdGlvbithRC5uKydBeGlzIj4nK2FNLmpvaW4oIiIpKyI8L2Rpdj48L2Rpdj4iKS5hcHBl
bmRUbyhhdil9aWYoYUQuZGlyZWN0aW9uPT0ieCIpe2lmKGFLPT1udWxsKXthSz1NYXRoLmZsb29y
KEcvKGFKLmxlbmd0aD4wP2FKLmxlbmd0aDoxKSl9aWYoYUc9PW51bGwpe2FJPVtdO2ZvcihhRj0w
O2FGPGFKLmxlbmd0aDsrK2FGKXthRT1hSlthRl0ubGFiZWw7aWYoYUUpe2FJLnB1c2goJzxkaXYg
Y2xhc3M9InRpY2tMYWJlbCIgc3R5bGU9ImZsb2F0OmxlZnQ7d2lkdGg6JythSysncHgiPicrYUUr
IjwvZGl2PiIpfX1pZihhSS5sZW5ndGg+MCl7YUkucHVzaCgnPGRpdiBzdHlsZT0iY2xlYXI6bGVm
dCI+PC9kaXY+Jyk7YUM9YUgoYUksIndpZHRoOjEwMDAwcHg7Iik7YUc9YUMuaGVpZ2h0KCk7YUMu
cmVtb3ZlKCl9fX1lbHNle2lmKGFLPT1udWxsfHxhRz09bnVsbCl7Zm9yKGFGPTA7YUY8YUoubGVu
Z3RoOysrYUYpe2FFPWFKW2FGXS5sYWJlbDtpZihhRSl7YUkucHVzaCgnPGRpdiBjbGFzcz0idGlj
a0xhYmVsIj4nK2FFKyI8L2Rpdj4iKX19aWYoYUkubGVuZ3RoPjApe2FDPWFIKGFJLCIiKTtpZihh
Sz09bnVsbCl7YUs9YUMuY2hpbGRyZW4oKS53aWR0aCgpfWlmKGFHPT1udWxsKXthRz1hQy5maW5k
KCJkaXYudGlja0xhYmVsIikuaGVpZ2h0KCl9YUMucmVtb3ZlKCl9fX1pZihhSz09bnVsbCl7YUs9
MH1pZihhRz09bnVsbCl7YUc9MH1hRC5sYWJlbFdpZHRoPWFLO2FELmxhYmVsSGVpZ2h0PWFHfWZ1
bmN0aW9uIGF1KGFEKXt2YXIgYUM9YUQubGFiZWxXaWR0aCxhTD1hRC5sYWJlbEhlaWdodCxhSD1h
RC5vcHRpb25zLnBvc2l0aW9uLGFGPWFELm9wdGlvbnMudGlja0xlbmd0aCxhRz1PLmdyaWQuYXhp
c01hcmdpbixhSj1PLmdyaWQubGFiZWxNYXJnaW4sYUs9YUQuZGlyZWN0aW9uPT0ieCI/cDphdyxh
RTt2YXIgYUI9Yy5ncmVwKGFLLGZ1bmN0aW9uKGFOKXtyZXR1cm4gYU4mJmFOLm9wdGlvbnMucG9z
aXRpb249PWFIJiZhTi5yZXNlcnZlU3BhY2V9KTtpZihjLmluQXJyYXkoYUQsYUIpPT1hQi5sZW5n
dGgtMSl7YUc9MH1pZihhRj09bnVsbCl7YUY9ImZ1bGwifXZhciBhST1jLmdyZXAoYUssZnVuY3Rp
b24oYU4pe3JldHVybiBhTiYmYU4ucmVzZXJ2ZVNwYWNlfSk7dmFyIGFNPWMuaW5BcnJheShhRCxh
SSk9PTA7aWYoIWFNJiZhRj09ImZ1bGwiKXthRj01fWlmKCFpc05hTigrYUYpKXthSis9K2FGfWlm
KGFELmRpcmVjdGlvbj09IngiKXthTCs9YUo7aWYoYUg9PSJib3R0b20iKXtxLmJvdHRvbSs9YUwr
YUc7YUQuYm94PXt0b3A6SS1xLmJvdHRvbSxoZWlnaHQ6YUx9fWVsc2V7YUQuYm94PXt0b3A6cS50
b3ArYUcsaGVpZ2h0OmFMfTtxLnRvcCs9YUwrYUd9fWVsc2V7YUMrPWFKO2lmKGFIPT0ibGVmdCIp
e2FELmJveD17bGVmdDpxLmxlZnQrYUcsd2lkdGg6YUN9O3EubGVmdCs9YUMrYUd9ZWxzZXtxLnJp
Z2h0Kz1hQythRzthRC5ib3g9e2xlZnQ6Ry1xLnJpZ2h0LHdpZHRoOmFDfX19YUQucG9zaXRpb249
YUg7YUQudGlja0xlbmd0aD1hRjthRC5ib3gucGFkZGluZz1hSjthRC5pbm5lcm1vc3Q9YU19ZnVu
Y3Rpb24gVShhQil7aWYoYUIuZGlyZWN0aW9uPT0ieCIpe2FCLmJveC5sZWZ0PXEubGVmdDthQi5i
b3gud2lkdGg9aH1lbHNle2FCLmJveC50b3A9cS50b3A7YUIuYm94LmhlaWdodD13fX1mdW5jdGlv
biB0KCl7dmFyIGFDLGFFPW0oKTtjLmVhY2goYUUsZnVuY3Rpb24oYUYsYUcpe2FHLnNob3c9YUcu
b3B0aW9ucy5zaG93O2lmKGFHLnNob3c9PW51bGwpe2FHLnNob3c9YUcudXNlZH1hRy5yZXNlcnZl
U3BhY2U9YUcuc2hvd3x8YUcub3B0aW9ucy5yZXNlcnZlU3BhY2U7bihhRyl9KTthbGxvY2F0ZWRB
eGVzPWMuZ3JlcChhRSxmdW5jdGlvbihhRil7cmV0dXJuIGFGLnJlc2VydmVTcGFjZX0pO3EubGVm
dD1xLnJpZ2h0PXEudG9wPXEuYm90dG9tPTA7aWYoTy5ncmlkLnNob3cpe2MuZWFjaChhbGxvY2F0
ZWRBeGVzLGZ1bmN0aW9uKGFGLGFHKXtTKGFHKTtQKGFHKTthcChhRyxhRy50aWNrcyk7TChhRyl9
KTtmb3IoYUM9YWxsb2NhdGVkQXhlcy5sZW5ndGgtMTthQz49MDstLWFDKXthdShhbGxvY2F0ZWRB
eGVzW2FDXSl9dmFyIGFEPU8uZ3JpZC5taW5Cb3JkZXJNYXJnaW47aWYoYUQ9PW51bGwpe2FEPTA7
Zm9yKGFDPTA7YUM8US5sZW5ndGg7KythQyl7YUQ9TWF0aC5tYXgoYUQsUVthQ10ucG9pbnRzLnJh
ZGl1cytRW2FDXS5wb2ludHMubGluZVdpZHRoLzIpfX1mb3IodmFyIGFCIGluIHEpe3FbYUJdKz1P
LmdyaWQuYm9yZGVyV2lkdGg7cVthQl09TWF0aC5tYXgoYUQscVthQl0pfX1oPUctcS5sZWZ0LXEu
cmlnaHQ7dz1JLXEuYm90dG9tLXEudG9wO2MuZWFjaChhRSxmdW5jdGlvbihhRixhRyl7cihhRyl9
KTtpZihPLmdyaWQuc2hvdyl7Yy5lYWNoKGFsbG9jYXRlZEF4ZXMsZnVuY3Rpb24oYUYsYUcpe1Uo
YUcpfSk7aygpfW8oKX1mdW5jdGlvbiBuKGFFKXt2YXIgYUY9YUUub3B0aW9ucyxhRD0rKGFGLm1p
biE9bnVsbD9hRi5taW46YUUuZGF0YW1pbiksYUI9KyhhRi5tYXghPW51bGw/YUYubWF4OmFFLmRh
dGFtYXgpLGFIPWFCLWFEO2lmKGFIPT0wKXt2YXIgYUM9YUI9PTA/MTowLjAxO2lmKGFGLm1pbj09
bnVsbCl7YUQtPWFDfWlmKGFGLm1heD09bnVsbHx8YUYubWluIT1udWxsKXthQis9YUN9fWVsc2V7
dmFyIGFHPWFGLmF1dG9zY2FsZU1hcmdpbjtpZihhRyE9bnVsbCl7aWYoYUYubWluPT1udWxsKXth
RC09YUgqYUc7aWYoYUQ8MCYmYUUuZGF0YW1pbiE9bnVsbCYmYUUuZGF0YW1pbj49MCl7YUQ9MH19
aWYoYUYubWF4PT1udWxsKXthQis9YUgqYUc7aWYoYUI+MCYmYUUuZGF0YW1heCE9bnVsbCYmYUUu
ZGF0YW1heDw9MCl7YUI9MH19fX1hRS5taW49YUQ7YUUubWF4PWFCfWZ1bmN0aW9uIFMoYUcpe3Zh
ciBhTT1hRy5vcHRpb25zO3ZhciBhSDtpZih0eXBlb2YgYU0udGlja3M9PSJudW1iZXIiJiZhTS50
aWNrcz4wKXthSD1hTS50aWNrc31lbHNle2FIPTAuMypNYXRoLnNxcnQoYUcuZGlyZWN0aW9uPT0i
eCI/RzpJKX12YXIgYVQ9KGFHLm1heC1hRy5taW4pL2FILGFPLGFCLGFOLGFSLGFTLGFRLGFJO2lm
KGFNLm1vZGU9PSJ0aW1lIil7dmFyIGFKPXtzZWNvbmQ6MTAwMCxtaW51dGU6NjAqMTAwMCxob3Vy
OjYwKjYwKjEwMDAsZGF5OjI0KjYwKjYwKjEwMDAsbW9udGg6MzAqMjQqNjAqNjAqMTAwMCx5ZWFy
OjM2NS4yNDI1KjI0KjYwKjYwKjEwMDB9O3ZhciBhSz1bWzEsInNlY29uZCJdLFsyLCJzZWNvbmQi
XSxbNSwic2Vjb25kIl0sWzEwLCJzZWNvbmQiXSxbMzAsInNlY29uZCJdLFsxLCJtaW51dGUiXSxb
MiwibWludXRlIl0sWzUsIm1pbnV0ZSJdLFsxMCwibWludXRlIl0sWzMwLCJtaW51dGUiXSxbMSwi
aG91ciJdLFsyLCJob3VyIl0sWzQsImhvdXIiXSxbOCwiaG91ciJdLFsxMiwiaG91ciJdLFsxLCJk
YXkiXSxbMiwiZGF5Il0sWzMsImRheSJdLFswLjI1LCJtb250aCJdLFswLjUsIm1vbnRoIl0sWzEs
Im1vbnRoIl0sWzIsIm1vbnRoIl0sWzMsIm1vbnRoIl0sWzYsIm1vbnRoIl0sWzEsInllYXIiXV07
dmFyIGFDPTA7aWYoYU0ubWluVGlja1NpemUhPW51bGwpe2lmKHR5cGVvZiBhTS50aWNrU2l6ZT09
Im51bWJlciIpe2FDPWFNLnRpY2tTaXplfWVsc2V7YUM9YU0ubWluVGlja1NpemVbMF0qYUpbYU0u
bWluVGlja1NpemVbMV1dfX1mb3IodmFyIGFTPTA7YVM8YUsubGVuZ3RoLTE7KythUyl7aWYoYVQ8
KGFLW2FTXVswXSphSlthS1thU11bMV1dK2FLW2FTKzFdWzBdKmFKW2FLW2FTKzFdWzFdXSkvMiYm
YUtbYVNdWzBdKmFKW2FLW2FTXVsxXV0+PWFDKXticmVha319YU89YUtbYVNdWzBdO2FOPWFLW2FT
XVsxXTtpZihhTj09InllYXIiKXthUT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGFU
L2FKLnllYXIpL01hdGguTE4xMCkpO2FJPShhVC9hSi55ZWFyKS9hUTtpZihhSTwxLjUpe2FPPTF9
ZWxzZXtpZihhSTwzKXthTz0yfWVsc2V7aWYoYUk8Ny41KXthTz01fWVsc2V7YU89MTB9fX1hTyo9
YVF9YUcudGlja1NpemU9YU0udGlja1NpemV8fFthTyxhTl07YUI9ZnVuY3Rpb24oYVgpe3ZhciBh
Mj1bXSxhMD1hWC50aWNrU2l6ZVswXSxhMz1hWC50aWNrU2l6ZVsxXSxhMT1uZXcgRGF0ZShhWC5t
aW4pO3ZhciBhVz1hMCphSlthM107aWYoYTM9PSJzZWNvbmQiKXthMS5zZXRVVENTZWNvbmRzKGEo
YTEuZ2V0VVRDU2Vjb25kcygpLGEwKSl9aWYoYTM9PSJtaW51dGUiKXthMS5zZXRVVENNaW51dGVz
KGEoYTEuZ2V0VVRDTWludXRlcygpLGEwKSl9aWYoYTM9PSJob3VyIil7YTEuc2V0VVRDSG91cnMo
YShhMS5nZXRVVENIb3VycygpLGEwKSl9aWYoYTM9PSJtb250aCIpe2ExLnNldFVUQ01vbnRoKGEo
YTEuZ2V0VVRDTW9udGgoKSxhMCkpfWlmKGEzPT0ieWVhciIpe2ExLnNldFVUQ0Z1bGxZZWFyKGEo
YTEuZ2V0VVRDRnVsbFllYXIoKSxhMCkpfWExLnNldFVUQ01pbGxpc2Vjb25kcygwKTtpZihhVz49
YUoubWludXRlKXthMS5zZXRVVENTZWNvbmRzKDApfWlmKGFXPj1hSi5ob3VyKXthMS5zZXRVVENN
aW51dGVzKDApfWlmKGFXPj1hSi5kYXkpe2ExLnNldFVUQ0hvdXJzKDApfWlmKGFXPj1hSi5kYXkq
NCl7YTEuc2V0VVRDRGF0ZSgxKX1pZihhVz49YUoueWVhcil7YTEuc2V0VVRDTW9udGgoMCl9dmFy
IGE1PTAsYTQ9TnVtYmVyLk5hTixhWTtkb3thWT1hNDthND1hMS5nZXRUaW1lKCk7YTIucHVzaChh
NCk7aWYoYTM9PSJtb250aCIpe2lmKGEwPDEpe2ExLnNldFVUQ0RhdGUoMSk7dmFyIGFWPWExLmdl
dFRpbWUoKTthMS5zZXRVVENNb250aChhMS5nZXRVVENNb250aCgpKzEpO3ZhciBhWj1hMS5nZXRU
aW1lKCk7YTEuc2V0VGltZShhNCthNSphSi5ob3VyKyhhWi1hVikqYTApO2E1PWExLmdldFVUQ0hv
dXJzKCk7YTEuc2V0VVRDSG91cnMoMCl9ZWxzZXthMS5zZXRVVENNb250aChhMS5nZXRVVENNb250
aCgpK2EwKX19ZWxzZXtpZihhMz09InllYXIiKXthMS5zZXRVVENGdWxsWWVhcihhMS5nZXRVVENG
dWxsWWVhcigpK2EwKX1lbHNle2ExLnNldFRpbWUoYTQrYVcpfX19d2hpbGUoYTQ8YVgubWF4JiZh
NCE9YVkpO3JldHVybiBhMn07YVI9ZnVuY3Rpb24oYVYsYVkpe3ZhciBhMD1uZXcgRGF0ZShhVik7
aWYoYU0udGltZWZvcm1hdCE9bnVsbCl7cmV0dXJuIGMucGxvdC5mb3JtYXREYXRlKGEwLGFNLnRp
bWVmb3JtYXQsYU0ubW9udGhOYW1lcyl9dmFyIGFXPWFZLnRpY2tTaXplWzBdKmFKW2FZLnRpY2tT
aXplWzFdXTt2YXIgYVg9YVkubWF4LWFZLm1pbjt2YXIgYVo9KGFNLnR3ZWx2ZUhvdXJDbG9jayk/
IiAlcCI6IiI7aWYoYVc8YUoubWludXRlKXtmbXQ9IiVoOiVNOiVTIithWn1lbHNle2lmKGFXPGFK
LmRheSl7aWYoYVg8MiphSi5kYXkpe2ZtdD0iJWg6JU0iK2FafWVsc2V7Zm10PSIlYiAlZCAlaDol
TSIrYVp9fWVsc2V7aWYoYVc8YUoubW9udGgpe2ZtdD0iJWIgJWQifWVsc2V7aWYoYVc8YUoueWVh
cil7aWYoYVg8YUoueWVhcil7Zm10PSIlYiJ9ZWxzZXtmbXQ9IiViICV5In19ZWxzZXtmbXQ9IiV5
In19fX1yZXR1cm4gYy5wbG90LmZvcm1hdERhdGUoYTAsZm10LGFNLm1vbnRoTmFtZXMpfX1lbHNl
e3ZhciBhVT1hTS50aWNrRGVjaW1hbHM7dmFyIGFQPS1NYXRoLmZsb29yKE1hdGgubG9nKGFUKS9N
YXRoLkxOMTApO2lmKGFVIT1udWxsJiZhUD5hVSl7YVA9YVV9YVE9TWF0aC5wb3coMTAsLWFQKTth
ST1hVC9hUTtpZihhSTwxLjUpe2FPPTF9ZWxzZXtpZihhSTwzKXthTz0yO2lmKGFJPjIuMjUmJihh
VT09bnVsbHx8YVArMTw9YVUpKXthTz0yLjU7KythUH19ZWxzZXtpZihhSTw3LjUpe2FPPTV9ZWxz
ZXthTz0xMH19fWFPKj1hUTtpZihhTS5taW5UaWNrU2l6ZSE9bnVsbCYmYU88YU0ubWluVGlja1Np
emUpe2FPPWFNLm1pblRpY2tTaXplfWFHLnRpY2tEZWNpbWFscz1NYXRoLm1heCgwLGFVIT1udWxs
P2FVOmFQKTthRy50aWNrU2l6ZT1hTS50aWNrU2l6ZXx8YU87YUI9ZnVuY3Rpb24oYVgpe3ZhciBh
Wj1bXTt2YXIgYTA9YShhWC5taW4sYVgudGlja1NpemUpLGFXPTAsYVY9TnVtYmVyLk5hTixhWTtk
b3thWT1hVjthVj1hMCthVyphWC50aWNrU2l6ZTthWi5wdXNoKGFWKTsrK2FXfXdoaWxlKGFWPGFY
Lm1heCYmYVYhPWFZKTtyZXR1cm4gYVp9O2FSPWZ1bmN0aW9uKGFWLGFXKXtyZXR1cm4gYVYudG9G
aXhlZChhVy50aWNrRGVjaW1hbHMpfX1pZihhTS5hbGlnblRpY2tzV2l0aEF4aXMhPW51bGwpe3Zh
ciBhRj0oYUcuZGlyZWN0aW9uPT0ieCI/cDphdylbYU0uYWxpZ25UaWNrc1dpdGhBeGlzLTFdO2lm
KGFGJiZhRi51c2VkJiZhRiE9YUcpe3ZhciBhTD1hQihhRyk7aWYoYUwubGVuZ3RoPjApe2lmKGFN
Lm1pbj09bnVsbCl7YUcubWluPU1hdGgubWluKGFHLm1pbixhTFswXSl9aWYoYU0ubWF4PT1udWxs
JiZhTC5sZW5ndGg+MSl7YUcubWF4PU1hdGgubWF4KGFHLm1heCxhTFthTC5sZW5ndGgtMV0pfX1h
Qj1mdW5jdGlvbihhWCl7dmFyIGFZPVtdLGFWLGFXO2ZvcihhVz0wO2FXPGFGLnRpY2tzLmxlbmd0
aDsrK2FXKXthVj0oYUYudGlja3NbYVddLnYtYUYubWluKS8oYUYubWF4LWFGLm1pbik7YVY9YVgu
bWluK2FWKihhWC5tYXgtYVgubWluKTthWS5wdXNoKGFWKX1yZXR1cm4gYVl9O2lmKGFHLm1vZGUh
PSJ0aW1lIiYmYU0udGlja0RlY2ltYWxzPT1udWxsKXt2YXIgYUU9TWF0aC5tYXgoMCwtTWF0aC5m
bG9vcihNYXRoLmxvZyhhVCkvTWF0aC5MTjEwKSsxKSxhRD1hQihhRyk7aWYoIShhRC5sZW5ndGg+
MSYmL1wuLiowJC8udGVzdCgoYURbMV0tYURbMF0pLnRvRml4ZWQoYUUpKSkpe2FHLnRpY2tEZWNp
bWFscz1hRX19fX1hRy50aWNrR2VuZXJhdG9yPWFCO2lmKGMuaXNGdW5jdGlvbihhTS50aWNrRm9y
bWF0dGVyKSl7YUcudGlja0Zvcm1hdHRlcj1mdW5jdGlvbihhVixhVyl7cmV0dXJuIiIrYU0udGlj
a0Zvcm1hdHRlcihhVixhVyl9fWVsc2V7YUcudGlja0Zvcm1hdHRlcj1hUn19ZnVuY3Rpb24gUChh
Ril7dmFyIGFIPWFGLm9wdGlvbnMudGlja3MsYUc9W107aWYoYUg9PW51bGx8fCh0eXBlb2YgYUg9
PSJudW1iZXIiJiZhSD4wKSl7YUc9YUYudGlja0dlbmVyYXRvcihhRil9ZWxzZXtpZihhSCl7aWYo
Yy5pc0Z1bmN0aW9uKGFIKSl7YUc9YUgoe21pbjphRi5taW4sbWF4OmFGLm1heH0pfWVsc2V7YUc9
YUh9fX12YXIgYUUsYUI7YUYudGlja3M9W107Zm9yKGFFPTA7YUU8YUcubGVuZ3RoOysrYUUpe3Zh
ciBhQz1udWxsO3ZhciBhRD1hR1thRV07aWYodHlwZW9mIGFEPT0ib2JqZWN0Iil7YUI9K2FEWzBd
O2lmKGFELmxlbmd0aD4xKXthQz1hRFsxXX19ZWxzZXthQj0rYUR9aWYoYUM9PW51bGwpe2FDPWFG
LnRpY2tGb3JtYXR0ZXIoYUIsYUYpfWlmKCFpc05hTihhQikpe2FGLnRpY2tzLnB1c2goe3Y6YUIs
bGFiZWw6YUN9KX19fWZ1bmN0aW9uIGFwKGFCLGFDKXtpZihhQi5vcHRpb25zLmF1dG9zY2FsZU1h
cmdpbiYmYUMubGVuZ3RoPjApe2lmKGFCLm9wdGlvbnMubWluPT1udWxsKXthQi5taW49TWF0aC5t
aW4oYUIubWluLGFDWzBdLnYpfWlmKGFCLm9wdGlvbnMubWF4PT1udWxsJiZhQy5sZW5ndGg+MSl7
YUIubWF4PU1hdGgubWF4KGFCLm1heCxhQ1thQy5sZW5ndGgtMV0udil9fX1mdW5jdGlvbiBXKCl7
SC5jbGVhclJlY3QoMCwwLEcsSSk7dmFyIGFDPU8uZ3JpZDtpZihhQy5zaG93JiZhQy5iYWNrZ3Jv
dW5kQ29sb3Ipe04oKX1pZihhQy5zaG93JiYhYUMuYWJvdmVEYXRhKXthYygpfWZvcih2YXIgYUI9
MDthQjxRLmxlbmd0aDsrK2FCKXthbihhay5kcmF3U2VyaWVzLFtILFFbYUJdXSk7ZChRW2FCXSl9
YW4oYWsuZHJhdyxbSF0pO2lmKGFDLnNob3cmJmFDLmFib3ZlRGF0YSl7YWMoKX19ZnVuY3Rpb24g
RChhQixhSSl7dmFyIGFFLGFILGFHLGFELGFGPW0oKTtmb3IoaT0wO2k8YUYubGVuZ3RoOysraSl7
YUU9YUZbaV07aWYoYUUuZGlyZWN0aW9uPT1hSSl7YUQ9YUkrYUUubisiYXhpcyI7aWYoIWFCW2FE
XSYmYUUubj09MSl7YUQ9YUkrImF4aXMifWlmKGFCW2FEXSl7YUg9YUJbYURdLmZyb207YUc9YUJb
YURdLnRvO2JyZWFrfX19aWYoIWFCW2FEXSl7YUU9YUk9PSJ4Ij9wWzBdOmF3WzBdO2FIPWFCW2FJ
KyIxIl07YUc9YUJbYUkrIjIiXX1pZihhSCE9bnVsbCYmYUchPW51bGwmJmFIPmFHKXt2YXIgYUM9
YUg7YUg9YUc7YUc9YUN9cmV0dXJue2Zyb206YUgsdG86YUcsYXhpczphRX19ZnVuY3Rpb24gTigp
e0guc2F2ZSgpO0gudHJhbnNsYXRlKHEubGVmdCxxLnRvcCk7SC5maWxsU3R5bGU9YW0oTy5ncmlk
LmJhY2tncm91bmRDb2xvcix3LDAsInJnYmEoMjU1LCAyNTUsIDI1NSwgMCkiKTtILmZpbGxSZWN0
KDAsMCxoLHcpO0gucmVzdG9yZSgpfWZ1bmN0aW9uIGFjKCl7dmFyIGFGO0guc2F2ZSgpO0gudHJh
bnNsYXRlKHEubGVmdCxxLnRvcCk7dmFyIGFIPU8uZ3JpZC5tYXJraW5ncztpZihhSCl7aWYoYy5p
c0Z1bmN0aW9uKGFIKSl7dmFyIGFLPWFxLmdldEF4ZXMoKTthSy54bWluPWFLLnhheGlzLm1pbjth
Sy54bWF4PWFLLnhheGlzLm1heDthSy55bWluPWFLLnlheGlzLm1pbjthSy55bWF4PWFLLnlheGlz
Lm1heDthSD1hSChhSyl9Zm9yKGFGPTA7YUY8YUgubGVuZ3RoOysrYUYpe3ZhciBhRD1hSFthRl0s
YUM9RChhRCwieCIpLGFJPUQoYUQsInkiKTtpZihhQy5mcm9tPT1udWxsKXthQy5mcm9tPWFDLmF4
aXMubWlufWlmKGFDLnRvPT1udWxsKXthQy50bz1hQy5heGlzLm1heH1pZihhSS5mcm9tPT1udWxs
KXthSS5mcm9tPWFJLmF4aXMubWlufWlmKGFJLnRvPT1udWxsKXthSS50bz1hSS5heGlzLm1heH1p
ZihhQy50bzxhQy5heGlzLm1pbnx8YUMuZnJvbT5hQy5heGlzLm1heHx8YUkudG88YUkuYXhpcy5t
aW58fGFJLmZyb20+YUkuYXhpcy5tYXgpe2NvbnRpbnVlfWFDLmZyb209TWF0aC5tYXgoYUMuZnJv
bSxhQy5heGlzLm1pbik7YUMudG89TWF0aC5taW4oYUMudG8sYUMuYXhpcy5tYXgpO2FJLmZyb209
TWF0aC5tYXgoYUkuZnJvbSxhSS5heGlzLm1pbik7YUkudG89TWF0aC5taW4oYUkudG8sYUkuYXhp
cy5tYXgpO2lmKGFDLmZyb209PWFDLnRvJiZhSS5mcm9tPT1hSS50byl7Y29udGludWV9YUMuZnJv
bT1hQy5heGlzLnAyYyhhQy5mcm9tKTthQy50bz1hQy5heGlzLnAyYyhhQy50byk7YUkuZnJvbT1h
SS5heGlzLnAyYyhhSS5mcm9tKTthSS50bz1hSS5heGlzLnAyYyhhSS50byk7aWYoYUMuZnJvbT09
YUMudG98fGFJLmZyb209PWFJLnRvKXtILmJlZ2luUGF0aCgpO0guc3Ryb2tlU3R5bGU9YUQuY29s
b3J8fE8uZ3JpZC5tYXJraW5nc0NvbG9yO0gubGluZVdpZHRoPWFELmxpbmVXaWR0aHx8Ty5ncmlk
Lm1hcmtpbmdzTGluZVdpZHRoO0gubW92ZVRvKGFDLmZyb20sYUkuZnJvbSk7SC5saW5lVG8oYUMu
dG8sYUkudG8pO0guc3Ryb2tlKCl9ZWxzZXtILmZpbGxTdHlsZT1hRC5jb2xvcnx8Ty5ncmlkLm1h
cmtpbmdzQ29sb3I7SC5maWxsUmVjdChhQy5mcm9tLGFJLnRvLGFDLnRvLWFDLmZyb20sYUkuZnJv
bS1hSS50byl9fX12YXIgYUs9bSgpLGFNPU8uZ3JpZC5ib3JkZXJXaWR0aDtmb3IodmFyIGFFPTA7
YUU8YUsubGVuZ3RoOysrYUUpe3ZhciBhQj1hS1thRV0sYUc9YUIuYm94LGFRPWFCLnRpY2tMZW5n
dGgsYU4sYUwsYVAsYUo7aWYoIWFCLnNob3d8fGFCLnRpY2tzLmxlbmd0aD09MCl7Y29udGludWV9
SC5zdHJva2VTdHlsZT1hQi5vcHRpb25zLnRpY2tDb2xvcnx8Yy5jb2xvci5wYXJzZShhQi5vcHRp
b25zLmNvbG9yKS5zY2FsZSgiYSIsMC4yMikudG9TdHJpbmcoKTtILmxpbmVXaWR0aD0xO2lmKGFC
LmRpcmVjdGlvbj09IngiKXthTj0wO2lmKGFRPT0iZnVsbCIpe2FMPShhQi5wb3NpdGlvbj09InRv
cCI/MDp3KX1lbHNle2FMPWFHLnRvcC1xLnRvcCsoYUIucG9zaXRpb249PSJ0b3AiP2FHLmhlaWdo
dDowKX19ZWxzZXthTD0wO2lmKGFRPT0iZnVsbCIpe2FOPShhQi5wb3NpdGlvbj09ImxlZnQiPzA6
aCl9ZWxzZXthTj1hRy5sZWZ0LXEubGVmdCsoYUIucG9zaXRpb249PSJsZWZ0Ij9hRy53aWR0aDow
KX19aWYoIWFCLmlubmVybW9zdCl7SC5iZWdpblBhdGgoKTthUD1hSj0wO2lmKGFCLmRpcmVjdGlv
bj09IngiKXthUD1ofWVsc2V7YUo9d31pZihILmxpbmVXaWR0aD09MSl7YU49TWF0aC5mbG9vcihh
TikrMC41O2FMPU1hdGguZmxvb3IoYUwpKzAuNX1ILm1vdmVUbyhhTixhTCk7SC5saW5lVG8oYU4r
YVAsYUwrYUopO0guc3Ryb2tlKCl9SC5iZWdpblBhdGgoKTtmb3IoYUY9MDthRjxhQi50aWNrcy5s
ZW5ndGg7KythRil7dmFyIGFPPWFCLnRpY2tzW2FGXS52O2FQPWFKPTA7aWYoYU88YUIubWlufHxh
Tz5hQi5tYXh8fChhUT09ImZ1bGwiJiZhTT4wJiYoYU89PWFCLm1pbnx8YU89PWFCLm1heCkpKXtj
b250aW51ZX1pZihhQi5kaXJlY3Rpb249PSJ4Iil7YU49YUIucDJjKGFPKTthSj1hUT09ImZ1bGwi
Py13OmFRO2lmKGFCLnBvc2l0aW9uPT0idG9wIil7YUo9LWFKfX1lbHNle2FMPWFCLnAyYyhhTyk7
YVA9YVE9PSJmdWxsIj8taDphUTtpZihhQi5wb3NpdGlvbj09ImxlZnQiKXthUD0tYVB9fWlmKEgu
bGluZVdpZHRoPT0xKXtpZihhQi5kaXJlY3Rpb249PSJ4Iil7YU49TWF0aC5mbG9vcihhTikrMC41
fWVsc2V7YUw9TWF0aC5mbG9vcihhTCkrMC41fX1ILm1vdmVUbyhhTixhTCk7SC5saW5lVG8oYU4r
YVAsYUwrYUopfUguc3Ryb2tlKCl9aWYoYU0pe0gubGluZVdpZHRoPWFNO0guc3Ryb2tlU3R5bGU9
Ty5ncmlkLmJvcmRlckNvbG9yO0guc3Ryb2tlUmVjdCgtYU0vMiwtYU0vMixoK2FNLHcrYU0pfUgu
cmVzdG9yZSgpfWZ1bmN0aW9uIGsoKXthdi5maW5kKCIudGlja0xhYmVscyIpLnJlbW92ZSgpO3Zh
ciBhRz1bJzxkaXYgY2xhc3M9InRpY2tMYWJlbHMiIHN0eWxlPSJmb250LXNpemU6c21hbGxlciI+
J107dmFyIGFKPW0oKTtmb3IodmFyIGFEPTA7YUQ8YUoubGVuZ3RoOysrYUQpe3ZhciBhQz1hSlth
RF0sYUY9YUMuYm94O2lmKCFhQy5zaG93KXtjb250aW51ZX1hRy5wdXNoKCc8ZGl2IGNsYXNzPSIn
K2FDLmRpcmVjdGlvbisiQXhpcyAiK2FDLmRpcmVjdGlvbithQy5uKydBeGlzIiBzdHlsZT0iY29s
b3I6JythQy5vcHRpb25zLmNvbG9yKyciPicpO2Zvcih2YXIgYUU9MDthRTxhQy50aWNrcy5sZW5n
dGg7KythRSl7dmFyIGFIPWFDLnRpY2tzW2FFXTtpZighYUgubGFiZWx8fGFILnY8YUMubWlufHxh
SC52PmFDLm1heCl7Y29udGludWV9dmFyIGFLPXt9LGFJO2lmKGFDLmRpcmVjdGlvbj09IngiKXth
ST0iY2VudGVyIjthSy5sZWZ0PU1hdGgucm91bmQocS5sZWZ0K2FDLnAyYyhhSC52KS1hQy5sYWJl
bFdpZHRoLzIpO2lmKGFDLnBvc2l0aW9uPT0iYm90dG9tIil7YUsudG9wPWFGLnRvcCthRi5wYWRk
aW5nfWVsc2V7YUsuYm90dG9tPUktKGFGLnRvcCthRi5oZWlnaHQtYUYucGFkZGluZyl9fWVsc2V7
YUsudG9wPU1hdGgucm91bmQocS50b3ArYUMucDJjKGFILnYpLWFDLmxhYmVsSGVpZ2h0LzIpO2lm
KGFDLnBvc2l0aW9uPT0ibGVmdCIpe2FLLnJpZ2h0PUctKGFGLmxlZnQrYUYud2lkdGgtYUYucGFk
ZGluZyk7YUk9InJpZ2h0In1lbHNle2FLLmxlZnQ9YUYubGVmdCthRi5wYWRkaW5nO2FJPSJsZWZ0
In19YUsud2lkdGg9YUMubGFiZWxXaWR0aDt2YXIgYUI9WyJwb3NpdGlvbjphYnNvbHV0ZSIsInRl
eHQtYWxpZ246IithSV07Zm9yKHZhciBhTCBpbiBhSyl7YUIucHVzaChhTCsiOiIrYUtbYUxdKyJw
eCIpfWFHLnB1c2goJzxkaXYgY2xhc3M9InRpY2tMYWJlbCIgc3R5bGU9IicrYUIuam9pbigiOyIp
KyciPicrYUgubGFiZWwrIjwvZGl2PiIpfWFHLnB1c2goIjwvZGl2PiIpfWFHLnB1c2goIjwvZGl2
PiIpO2F2LmFwcGVuZChhRy5qb2luKCIiKSl9ZnVuY3Rpb24gZChhQil7aWYoYUIubGluZXMuc2hv
dyl7YXQoYUIpfWlmKGFCLmJhcnMuc2hvdyl7ZShhQil9aWYoYUIucG9pbnRzLnNob3cpe2FvKGFC
KX19ZnVuY3Rpb24gYXQoYUUpe2Z1bmN0aW9uIGFEKGFQLGFRLGFJLGFVLGFUKXt2YXIgYVY9YVAu
cG9pbnRzLGFKPWFQLnBvaW50c2l6ZSxhTj1udWxsLGFNPW51bGw7SC5iZWdpblBhdGgoKTtmb3Io
dmFyIGFPPWFKO2FPPGFWLmxlbmd0aDthTys9YUope3ZhciBhTD1hVlthTy1hSl0sYVM9YVZbYU8t
YUorMV0sYUs9YVZbYU9dLGFSPWFWW2FPKzFdO2lmKGFMPT1udWxsfHxhSz09bnVsbCl7Y29udGlu
dWV9aWYoYVM8PWFSJiZhUzxhVC5taW4pe2lmKGFSPGFULm1pbil7Y29udGludWV9YUw9KGFULm1p
bi1hUykvKGFSLWFTKSooYUstYUwpK2FMO2FTPWFULm1pbn1lbHNle2lmKGFSPD1hUyYmYVI8YVQu
bWluKXtpZihhUzxhVC5taW4pe2NvbnRpbnVlfWFLPShhVC5taW4tYVMpLyhhUi1hUykqKGFLLWFM
KSthTDthUj1hVC5taW59fWlmKGFTPj1hUiYmYVM+YVQubWF4KXtpZihhUj5hVC5tYXgpe2NvbnRp
bnVlfWFMPShhVC5tYXgtYVMpLyhhUi1hUykqKGFLLWFMKSthTDthUz1hVC5tYXh9ZWxzZXtpZihh
Uj49YVMmJmFSPmFULm1heCl7aWYoYVM+YVQubWF4KXtjb250aW51ZX1hSz0oYVQubWF4LWFTKS8o
YVItYVMpKihhSy1hTCkrYUw7YVI9YVQubWF4fX1pZihhTDw9YUsmJmFMPGFVLm1pbil7aWYoYUs8
YVUubWluKXtjb250aW51ZX1hUz0oYVUubWluLWFMKS8oYUstYUwpKihhUi1hUykrYVM7YUw9YVUu
bWlufWVsc2V7aWYoYUs8PWFMJiZhSzxhVS5taW4pe2lmKGFMPGFVLm1pbil7Y29udGludWV9YVI9
KGFVLm1pbi1hTCkvKGFLLWFMKSooYVItYVMpK2FTO2FLPWFVLm1pbn19aWYoYUw+PWFLJiZhTD5h
VS5tYXgpe2lmKGFLPmFVLm1heCl7Y29udGludWV9YVM9KGFVLm1heC1hTCkvKGFLLWFMKSooYVIt
YVMpK2FTO2FMPWFVLm1heH1lbHNle2lmKGFLPj1hTCYmYUs+YVUubWF4KXtpZihhTD5hVS5tYXgp
e2NvbnRpbnVlfWFSPShhVS5tYXgtYUwpLyhhSy1hTCkqKGFSLWFTKSthUzthSz1hVS5tYXh9fWlm
KGFMIT1hTnx8YVMhPWFNKXtILm1vdmVUbyhhVS5wMmMoYUwpK2FRLGFULnAyYyhhUykrYUkpfWFO
PWFLO2FNPWFSO0gubGluZVRvKGFVLnAyYyhhSykrYVEsYVQucDJjKGFSKSthSSl9SC5zdHJva2Uo
KX1mdW5jdGlvbiBhRihhSSxhUSxhUCl7dmFyIGFXPWFJLnBvaW50cyxhVj1hSS5wb2ludHNpemUs
YU49TWF0aC5taW4oTWF0aC5tYXgoMCxhUC5taW4pLGFQLm1heCksYVg9MCxhVSxhVD1mYWxzZSxh
TT0xLGFMPTAsYVI9MDt3aGlsZSh0cnVlKXtpZihhVj4wJiZhWD5hVy5sZW5ndGgrYVYpe2JyZWFr
fWFYKz1hVjt2YXIgYVo9YVdbYVgtYVZdLGFLPWFXW2FYLWFWK2FNXSxhWT1hV1thWF0sYUo9YVdb
YVgrYU1dO2lmKGFUKXtpZihhVj4wJiZhWiE9bnVsbCYmYVk9PW51bGwpe2FSPWFYO2FWPS1hVjth
TT0yO2NvbnRpbnVlfWlmKGFWPDAmJmFYPT1hTCthVil7SC5maWxsKCk7YVQ9ZmFsc2U7YVY9LWFW
O2FNPTE7YVg9YUw9YVIrYVY7Y29udGludWV9fWlmKGFaPT1udWxsfHxhWT09bnVsbCl7Y29udGlu
dWV9aWYoYVo8PWFZJiZhWjxhUS5taW4pe2lmKGFZPGFRLm1pbil7Y29udGludWV9YUs9KGFRLm1p
bi1hWikvKGFZLWFaKSooYUotYUspK2FLO2FaPWFRLm1pbn1lbHNle2lmKGFZPD1hWiYmYVk8YVEu
bWluKXtpZihhWjxhUS5taW4pe2NvbnRpbnVlfWFKPShhUS5taW4tYVopLyhhWS1hWikqKGFKLWFL
KSthSzthWT1hUS5taW59fWlmKGFaPj1hWSYmYVo+YVEubWF4KXtpZihhWT5hUS5tYXgpe2NvbnRp
bnVlfWFLPShhUS5tYXgtYVopLyhhWS1hWikqKGFKLWFLKSthSzthWj1hUS5tYXh9ZWxzZXtpZihh
WT49YVomJmFZPmFRLm1heCl7aWYoYVo+YVEubWF4KXtjb250aW51ZX1hSj0oYVEubWF4LWFaKS8o
YVktYVopKihhSi1hSykrYUs7YVk9YVEubWF4fX1pZighYVQpe0guYmVnaW5QYXRoKCk7SC5tb3Zl
VG8oYVEucDJjKGFaKSxhUC5wMmMoYU4pKTthVD10cnVlfWlmKGFLPj1hUC5tYXgmJmFKPj1hUC5t
YXgpe0gubGluZVRvKGFRLnAyYyhhWiksYVAucDJjKGFQLm1heCkpO0gubGluZVRvKGFRLnAyYyhh
WSksYVAucDJjKGFQLm1heCkpO2NvbnRpbnVlfWVsc2V7aWYoYUs8PWFQLm1pbiYmYUo8PWFQLm1p
bil7SC5saW5lVG8oYVEucDJjKGFaKSxhUC5wMmMoYVAubWluKSk7SC5saW5lVG8oYVEucDJjKGFZ
KSxhUC5wMmMoYVAubWluKSk7Y29udGludWV9fXZhciBhTz1hWixhUz1hWTtpZihhSzw9YUomJmFL
PGFQLm1pbiYmYUo+PWFQLm1pbil7YVo9KGFQLm1pbi1hSykvKGFKLWFLKSooYVktYVopK2FaO2FL
PWFQLm1pbn1lbHNle2lmKGFKPD1hSyYmYUo8YVAubWluJiZhSz49YVAubWluKXthWT0oYVAubWlu
LWFLKS8oYUotYUspKihhWS1hWikrYVo7YUo9YVAubWlufX1pZihhSz49YUomJmFLPmFQLm1heCYm
YUo8PWFQLm1heCl7YVo9KGFQLm1heC1hSykvKGFKLWFLKSooYVktYVopK2FaO2FLPWFQLm1heH1l
bHNle2lmKGFKPj1hSyYmYUo+YVAubWF4JiZhSzw9YVAubWF4KXthWT0oYVAubWF4LWFLKS8oYUot
YUspKihhWS1hWikrYVo7YUo9YVAubWF4fX1pZihhWiE9YU8pe0gubGluZVRvKGFRLnAyYyhhTyks
YVAucDJjKGFLKSl9SC5saW5lVG8oYVEucDJjKGFaKSxhUC5wMmMoYUspKTtILmxpbmVUbyhhUS5w
MmMoYVkpLGFQLnAyYyhhSikpO2lmKGFZIT1hUyl7SC5saW5lVG8oYVEucDJjKGFZKSxhUC5wMmMo
YUopKTtILmxpbmVUbyhhUS5wMmMoYVMpLGFQLnAyYyhhSikpfX19SC5zYXZlKCk7SC50cmFuc2xh
dGUocS5sZWZ0LHEudG9wKTtILmxpbmVKb2luPSJyb3VuZCI7dmFyIGFHPWFFLmxpbmVzLmxpbmVX
aWR0aCxhQj1hRS5zaGFkb3dTaXplO2lmKGFHPjAmJmFCPjApe0gubGluZVdpZHRoPWFCO0guc3Ry
b2tlU3R5bGU9InJnYmEoMCwwLDAsMC4xKSI7dmFyIGFIPU1hdGguUEkvMTg7YUQoYUUuZGF0YXBv
aW50cyxNYXRoLnNpbihhSCkqKGFHLzIrYUIvMiksTWF0aC5jb3MoYUgpKihhRy8yK2FCLzIpLGFF
LnhheGlzLGFFLnlheGlzKTtILmxpbmVXaWR0aD1hQi8yO2FEKGFFLmRhdGFwb2ludHMsTWF0aC5z
aW4oYUgpKihhRy8yK2FCLzQpLE1hdGguY29zKGFIKSooYUcvMithQi80KSxhRS54YXhpcyxhRS55
YXhpcyl9SC5saW5lV2lkdGg9YUc7SC5zdHJva2VTdHlsZT1hRS5jb2xvcjt2YXIgYUM9YWUoYUUu
bGluZXMsYUUuY29sb3IsMCx3KTtpZihhQyl7SC5maWxsU3R5bGU9YUM7YUYoYUUuZGF0YXBvaW50
cyxhRS54YXhpcyxhRS55YXhpcyl9aWYoYUc+MCl7YUQoYUUuZGF0YXBvaW50cywwLDAsYUUueGF4
aXMsYUUueWF4aXMpfUgucmVzdG9yZSgpfWZ1bmN0aW9uIGFvKGFFKXtmdW5jdGlvbiBhSChhTixh
TSxhVSxhSyxhUyxhVCxhUSxhSil7dmFyIGFSPWFOLnBvaW50cyxhST1hTi5wb2ludHNpemU7Zm9y
KHZhciBhTD0wO2FMPGFSLmxlbmd0aDthTCs9YUkpe3ZhciBhUD1hUlthTF0sYU89YVJbYUwrMV07
aWYoYVA9PW51bGx8fGFQPGFULm1pbnx8YVA+YVQubWF4fHxhTzxhUS5taW58fGFPPmFRLm1heCl7
Y29udGludWV9SC5iZWdpblBhdGgoKTthUD1hVC5wMmMoYVApO2FPPWFRLnAyYyhhTykrYUs7aWYo
YUo9PSJjaXJjbGUiKXtILmFyYyhhUCxhTyxhTSwwLGFTP01hdGguUEk6TWF0aC5QSSoyLGZhbHNl
KX1lbHNle2FKKEgsYVAsYU8sYU0sYVMpfUguY2xvc2VQYXRoKCk7aWYoYVUpe0guZmlsbFN0eWxl
PWFVO0guZmlsbCgpfUguc3Ryb2tlKCl9fUguc2F2ZSgpO0gudHJhbnNsYXRlKHEubGVmdCxxLnRv
cCk7dmFyIGFHPWFFLnBvaW50cy5saW5lV2lkdGgsYUM9YUUuc2hhZG93U2l6ZSxhQj1hRS5wb2lu
dHMucmFkaXVzLGFGPWFFLnBvaW50cy5zeW1ib2w7aWYoYUc+MCYmYUM+MCl7dmFyIGFEPWFDLzI7
SC5saW5lV2lkdGg9YUQ7SC5zdHJva2VTdHlsZT0icmdiYSgwLDAsMCwwLjEpIjthSChhRS5kYXRh
cG9pbnRzLGFCLG51bGwsYUQrYUQvMix0cnVlLGFFLnhheGlzLGFFLnlheGlzLGFGKTtILnN0cm9r
ZVN0eWxlPSJyZ2JhKDAsMCwwLDAuMikiO2FIKGFFLmRhdGFwb2ludHMsYUIsbnVsbCxhRC8yLHRy
dWUsYUUueGF4aXMsYUUueWF4aXMsYUYpfUgubGluZVdpZHRoPWFHO0guc3Ryb2tlU3R5bGU9YUUu
Y29sb3I7YUgoYUUuZGF0YXBvaW50cyxhQixhZShhRS5wb2ludHMsYUUuY29sb3IpLDAsZmFsc2Us
YUUueGF4aXMsYUUueWF4aXMsYUYpO0gucmVzdG9yZSgpfWZ1bmN0aW9uIEUoYU4sYU0sYVYsYUks
YVEsYUYsYUQsYUwsYUssYVUsYVIsYUMpe3ZhciBhRSxhVCxhSixhUCxhRyxhQixhTyxhSCxhUztp
ZihhUil7YUg9YUI9YU89dHJ1ZTthRz1mYWxzZTthRT1hVjthVD1hTjthUD1hTSthSTthSj1hTSth
UTtpZihhVDxhRSl7YVM9YVQ7YVQ9YUU7YUU9YVM7YUc9dHJ1ZTthQj1mYWxzZX19ZWxzZXthRz1h
Qj1hTz10cnVlO2FIPWZhbHNlO2FFPWFOK2FJO2FUPWFOK2FRO2FKPWFWO2FQPWFNO2lmKGFQPGFK
KXthUz1hUDthUD1hSjthSj1hUzthSD10cnVlO2FPPWZhbHNlfX1pZihhVDxhTC5taW58fGFFPmFM
Lm1heHx8YVA8YUsubWlufHxhSj5hSy5tYXgpe3JldHVybn1pZihhRTxhTC5taW4pe2FFPWFMLm1p
bjthRz1mYWxzZX1pZihhVD5hTC5tYXgpe2FUPWFMLm1heDthQj1mYWxzZX1pZihhSjxhSy5taW4p
e2FKPWFLLm1pbjthSD1mYWxzZX1pZihhUD5hSy5tYXgpe2FQPWFLLm1heDthTz1mYWxzZX1hRT1h
TC5wMmMoYUUpO2FKPWFLLnAyYyhhSik7YVQ9YUwucDJjKGFUKTthUD1hSy5wMmMoYVApO2lmKGFE
KXthVS5iZWdpblBhdGgoKTthVS5tb3ZlVG8oYUUsYUopO2FVLmxpbmVUbyhhRSxhUCk7YVUubGlu
ZVRvKGFULGFQKTthVS5saW5lVG8oYVQsYUopO2FVLmZpbGxTdHlsZT1hRChhSixhUCk7YVUuZmls
bCgpfWlmKGFDPjAmJihhR3x8YUJ8fGFPfHxhSCkpe2FVLmJlZ2luUGF0aCgpO2FVLm1vdmVUbyhh
RSxhSithRik7aWYoYUcpe2FVLmxpbmVUbyhhRSxhUCthRil9ZWxzZXthVS5tb3ZlVG8oYUUsYVAr
YUYpfWlmKGFPKXthVS5saW5lVG8oYVQsYVArYUYpfWVsc2V7YVUubW92ZVRvKGFULGFQK2FGKX1p
ZihhQil7YVUubGluZVRvKGFULGFKK2FGKX1lbHNle2FVLm1vdmVUbyhhVCxhSithRil9aWYoYUgp
e2FVLmxpbmVUbyhhRSxhSithRil9ZWxzZXthVS5tb3ZlVG8oYUUsYUorYUYpfWFVLnN0cm9rZSgp
fX1mdW5jdGlvbiBlKGFEKXtmdW5jdGlvbiBhQyhhSixhSSxhTCxhRyxhSyxhTixhTSl7dmFyIGFP
PWFKLnBvaW50cyxhRj1hSi5wb2ludHNpemU7Zm9yKHZhciBhSD0wO2FIPGFPLmxlbmd0aDthSCs9
YUYpe2lmKGFPW2FIXT09bnVsbCl7Y29udGludWV9RShhT1thSF0sYU9bYUgrMV0sYU9bYUgrMl0s
YUksYUwsYUcsYUssYU4sYU0sSCxhRC5iYXJzLmhvcml6b250YWwsYUQuYmFycy5saW5lV2lkdGgp
fX1ILnNhdmUoKTtILnRyYW5zbGF0ZShxLmxlZnQscS50b3ApO0gubGluZVdpZHRoPWFELmJhcnMu
bGluZVdpZHRoO0guc3Ryb2tlU3R5bGU9YUQuY29sb3I7dmFyIGFCPWFELmJhcnMuYWxpZ249PSJs
ZWZ0Ij8wOi1hRC5iYXJzLmJhcldpZHRoLzI7dmFyIGFFPWFELmJhcnMuZmlsbD9mdW5jdGlvbihh
RixhRyl7cmV0dXJuIGFlKGFELmJhcnMsYUQuY29sb3IsYUYsYUcpfTpudWxsO2FDKGFELmRhdGFw
b2ludHMsYUIsYUIrYUQuYmFycy5iYXJXaWR0aCwwLGFFLGFELnhheGlzLGFELnlheGlzKTtILnJl
c3RvcmUoKX1mdW5jdGlvbiBhZShhRCxhQixhQyxhRil7dmFyIGFFPWFELmZpbGw7aWYoIWFFKXty
ZXR1cm4gbnVsbH1pZihhRC5maWxsQ29sb3Ipe3JldHVybiBhbShhRC5maWxsQ29sb3IsYUMsYUYs
YUIpfXZhciBhRz1jLmNvbG9yLnBhcnNlKGFCKTthRy5hPXR5cGVvZiBhRT09Im51bWJlciI/YUU6
MC40O2FHLm5vcm1hbGl6ZSgpO3JldHVybiBhRy50b1N0cmluZygpfWZ1bmN0aW9uIG8oKXthdi5m
aW5kKCIubGVnZW5kIikucmVtb3ZlKCk7aWYoIU8ubGVnZW5kLnNob3cpe3JldHVybn12YXIgYUg9
W10sYUY9ZmFsc2UsYU49Ty5sZWdlbmQubGFiZWxGb3JtYXR0ZXIsYU0sYUo7Zm9yKHZhciBhRT0w
O2FFPFEubGVuZ3RoOysrYUUpe2FNPVFbYUVdO2FKPWFNLmxhYmVsO2lmKCFhSil7Y29udGludWV9
aWYoYUUlTy5sZWdlbmQubm9Db2x1bW5zPT0wKXtpZihhRil7YUgucHVzaCgiPC90cj4iKX1hSC5w
dXNoKCI8dHI+Iik7YUY9dHJ1ZX1pZihhTil7YUo9YU4oYUosYU0pfWFILnB1c2goJzx0ZCBjbGFz
cz0ibGVnZW5kQ29sb3JCb3giPjxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgJytPLmxlZ2Vu
ZC5sYWJlbEJveEJvcmRlckNvbG9yKyc7cGFkZGluZzoxcHgiPjxkaXYgc3R5bGU9IndpZHRoOjRw
eDtoZWlnaHQ6MDtib3JkZXI6NXB4IHNvbGlkICcrYU0uY29sb3IrJztvdmVyZmxvdzpoaWRkZW4i
PjwvZGl2PjwvZGl2PjwvdGQ+PHRkIGNsYXNzPSJsZWdlbmRMYWJlbCI+JythSisiPC90ZD4iKX1p
ZihhRil7YUgucHVzaCgiPC90cj4iKX1pZihhSC5sZW5ndGg9PTApe3JldHVybn12YXIgYUw9Jzx0
YWJsZSBzdHlsZT0iZm9udC1zaXplOnNtYWxsZXI7Y29sb3I6JytPLmdyaWQuY29sb3IrJyI+Jyth
SC5qb2luKCIiKSsiPC90YWJsZT4iO2lmKE8ubGVnZW5kLmNvbnRhaW5lciE9bnVsbCl7YyhPLmxl
Z2VuZC5jb250YWluZXIpLmh0bWwoYUwpfWVsc2V7dmFyIGFJPSIiLGFDPU8ubGVnZW5kLnBvc2l0
aW9uLGFEPU8ubGVnZW5kLm1hcmdpbjtpZihhRFswXT09bnVsbCl7YUQ9W2FELGFEXX1pZihhQy5j
aGFyQXQoMCk9PSJuIil7YUkrPSJ0b3A6IisoYURbMV0rcS50b3ApKyJweDsifWVsc2V7aWYoYUMu
Y2hhckF0KDApPT0icyIpe2FJKz0iYm90dG9tOiIrKGFEWzFdK3EuYm90dG9tKSsicHg7In19aWYo
YUMuY2hhckF0KDEpPT0iZSIpe2FJKz0icmlnaHQ6IisoYURbMF0rcS5yaWdodCkrInB4OyJ9ZWxz
ZXtpZihhQy5jaGFyQXQoMSk9PSJ3Iil7YUkrPSJsZWZ0OiIrKGFEWzBdK3EubGVmdCkrInB4OyJ9
fXZhciBhSz1jKCc8ZGl2IGNsYXNzPSJsZWdlbmQiPicrYUwucmVwbGFjZSgnc3R5bGU9IicsJ3N0
eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsnK2FJKyI7IikrIjwvZGl2PiIpLmFwcGVuZFRvKGF2KTtp
ZihPLmxlZ2VuZC5iYWNrZ3JvdW5kT3BhY2l0eSE9MCl7dmFyIGFHPU8ubGVnZW5kLmJhY2tncm91
bmRDb2xvcjtpZihhRz09bnVsbCl7YUc9Ty5ncmlkLmJhY2tncm91bmRDb2xvcjtpZihhRyYmdHlw
ZW9mIGFHPT0ic3RyaW5nIil7YUc9Yy5jb2xvci5wYXJzZShhRyl9ZWxzZXthRz1jLmNvbG9yLmV4
dHJhY3QoYUssImJhY2tncm91bmQtY29sb3IiKX1hRy5hPTE7YUc9YUcudG9TdHJpbmcoKX12YXIg
YUI9YUsuY2hpbGRyZW4oKTtjKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDon
K2FCLndpZHRoKCkrInB4O2hlaWdodDoiK2FCLmhlaWdodCgpKyJweDsiK2FJKyJiYWNrZ3JvdW5k
LWNvbG9yOiIrYUcrJzsiPiA8L2Rpdj4nKS5wcmVwZW5kVG8oYUspLmNzcygib3BhY2l0eSIsTy5s
ZWdlbmQuYmFja2dyb3VuZE9wYWNpdHkpfX19dmFyIGFiPVtdLE09bnVsbDtmdW5jdGlvbiBLKGFJ
LGFHLGFEKXt2YXIgYU89Ty5ncmlkLm1vdXNlQWN0aXZlUmFkaXVzLGEwPWFPKmFPKzEsYVk9bnVs
bCxhUj1mYWxzZSxhVyxhVTtmb3IoYVc9US5sZW5ndGgtMTthVz49MDstLWFXKXtpZighYUQoUVth
V10pKXtjb250aW51ZX12YXIgYVA9UVthV10sYUg9YVAueGF4aXMsYUY9YVAueWF4aXMsYVY9YVAu
ZGF0YXBvaW50cy5wb2ludHMsYVQ9YVAuZGF0YXBvaW50cy5wb2ludHNpemUsYVE9YUguYzJwKGFJ
KSxhTj1hRi5jMnAoYUcpLGFDPWFPL2FILnNjYWxlLGFCPWFPL2FGLnNjYWxlO2lmKGFILm9wdGlv
bnMuaW52ZXJzZVRyYW5zZm9ybSl7YUM9TnVtYmVyLk1BWF9WQUxVRX1pZihhRi5vcHRpb25zLmlu
dmVyc2VUcmFuc2Zvcm0pe2FCPU51bWJlci5NQVhfVkFMVUV9aWYoYVAubGluZXMuc2hvd3x8YVAu
cG9pbnRzLnNob3cpe2ZvcihhVT0wO2FVPGFWLmxlbmd0aDthVSs9YVQpe3ZhciBhSz1hVlthVV0s
YUo9YVZbYVUrMV07aWYoYUs9PW51bGwpe2NvbnRpbnVlfWlmKGFLLWFRPmFDfHxhSy1hUTwtYUN8
fGFKLWFOPmFCfHxhSi1hTjwtYUIpe2NvbnRpbnVlfXZhciBhTT1NYXRoLmFicyhhSC5wMmMoYUsp
LWFJKSxhTD1NYXRoLmFicyhhRi5wMmMoYUopLWFHKSxhUz1hTSphTSthTCphTDtpZihhUzxhMCl7
YTA9YVM7YVk9W2FXLGFVL2FUXX19fWlmKGFQLmJhcnMuc2hvdyYmIWFZKXt2YXIgYUU9YVAuYmFy
cy5hbGlnbj09ImxlZnQiPzA6LWFQLmJhcnMuYmFyV2lkdGgvMixhWD1hRSthUC5iYXJzLmJhcldp
ZHRoO2ZvcihhVT0wO2FVPGFWLmxlbmd0aDthVSs9YVQpe3ZhciBhSz1hVlthVV0sYUo9YVZbYVUr
MV0sYVo9YVZbYVUrMl07aWYoYUs9PW51bGwpe2NvbnRpbnVlfWlmKFFbYVddLmJhcnMuaG9yaXpv
bnRhbD8oYVE8PU1hdGgubWF4KGFaLGFLKSYmYVE+PU1hdGgubWluKGFaLGFLKSYmYU4+PWFKK2FF
JiZhTjw9YUorYVgpOihhUT49YUsrYUUmJmFRPD1hSythWCYmYU4+PU1hdGgubWluKGFaLGFKKSYm
YU48PU1hdGgubWF4KGFaLGFKKSkpe2FZPVthVyxhVS9hVF19fX19aWYoYVkpe2FXPWFZWzBdO2FV
PWFZWzFdO2FUPVFbYVddLmRhdGFwb2ludHMucG9pbnRzaXplO3JldHVybntkYXRhcG9pbnQ6UVth
V10uZGF0YXBvaW50cy5wb2ludHMuc2xpY2UoYVUqYVQsKGFVKzEpKmFUKSxkYXRhSW5kZXg6YVUs
c2VyaWVzOlFbYVddLHNlcmllc0luZGV4OmFXfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBhYShhQil7
aWYoTy5ncmlkLmhvdmVyYWJsZSl7dSgicGxvdGhvdmVyIixhQixmdW5jdGlvbihhQyl7cmV0dXJu
IGFDLmhvdmVyYWJsZSE9ZmFsc2V9KX19ZnVuY3Rpb24gbChhQil7aWYoTy5ncmlkLmhvdmVyYWJs
ZSl7dSgicGxvdGhvdmVyIixhQixmdW5jdGlvbihhQyl7cmV0dXJuIGZhbHNlfSl9fWZ1bmN0aW9u
IFIoYUIpe3UoInBsb3RjbGljayIsYUIsZnVuY3Rpb24oYUMpe3JldHVybiBhQy5jbGlja2FibGUh
PWZhbHNlfSl9ZnVuY3Rpb24gdShhQyxhQixhRCl7dmFyIGFFPXkub2Zmc2V0KCksYUg9YUIucGFn
ZVgtYUUubGVmdC1xLmxlZnQsYUY9YUIucGFnZVktYUUudG9wLXEudG9wLGFKPUMoe2xlZnQ6YUgs
dG9wOmFGfSk7YUoucGFnZVg9YUIucGFnZVg7YUoucGFnZVk9YUIucGFnZVk7dmFyIGFLPUsoYUgs
YUYsYUQpO2lmKGFLKXthSy5wYWdlWD1wYXJzZUludChhSy5zZXJpZXMueGF4aXMucDJjKGFLLmRh
dGFwb2ludFswXSkrYUUubGVmdCtxLmxlZnQpO2FLLnBhZ2VZPXBhcnNlSW50KGFLLnNlcmllcy55
YXhpcy5wMmMoYUsuZGF0YXBvaW50WzFdKSthRS50b3ArcS50b3ApfWlmKE8uZ3JpZC5hdXRvSGln
aGxpZ2h0KXtmb3IodmFyIGFHPTA7YUc8YWIubGVuZ3RoOysrYUcpe3ZhciBhST1hYlthR107aWYo
YUkuYXV0bz09YUMmJiEoYUsmJmFJLnNlcmllcz09YUsuc2VyaWVzJiZhSS5wb2ludFswXT09YUsu
ZGF0YXBvaW50WzBdJiZhSS5wb2ludFsxXT09YUsuZGF0YXBvaW50WzFdKSl7VChhSS5zZXJpZXMs
YUkucG9pbnQpfX1pZihhSyl7eChhSy5zZXJpZXMsYUsuZGF0YXBvaW50LGFDKX19YXYudHJpZ2dl
cihhQyxbYUosYUtdKX1mdW5jdGlvbiBmKCl7aWYoIU0pe009c2V0VGltZW91dChzLDMwKX19ZnVu
Y3Rpb24gcygpe009bnVsbDtBLnNhdmUoKTtBLmNsZWFyUmVjdCgwLDAsRyxJKTtBLnRyYW5zbGF0
ZShxLmxlZnQscS50b3ApO3ZhciBhQyxhQjtmb3IoYUM9MDthQzxhYi5sZW5ndGg7KythQyl7YUI9
YWJbYUNdO2lmKGFCLnNlcmllcy5iYXJzLnNob3cpe3YoYUIuc2VyaWVzLGFCLnBvaW50KX1lbHNl
e2F5KGFCLnNlcmllcyxhQi5wb2ludCl9fUEucmVzdG9yZSgpO2FuKGFrLmRyYXdPdmVybGF5LFtB
XSl9ZnVuY3Rpb24geChhRCxhQixhRil7aWYodHlwZW9mIGFEPT0ibnVtYmVyIil7YUQ9UVthRF19
aWYodHlwZW9mIGFCPT0ibnVtYmVyIil7dmFyIGFFPWFELmRhdGFwb2ludHMucG9pbnRzaXplO2FC
PWFELmRhdGFwb2ludHMucG9pbnRzLnNsaWNlKGFFKmFCLGFFKihhQisxKSl9dmFyIGFDPWFsKGFE
LGFCKTtpZihhQz09LTEpe2FiLnB1c2goe3NlcmllczphRCxwb2ludDphQixhdXRvOmFGfSk7Zigp
fWVsc2V7aWYoIWFGKXthYlthQ10uYXV0bz1mYWxzZX19fWZ1bmN0aW9uIFQoYUQsYUIpe2lmKGFE
PT1udWxsJiZhQj09bnVsbCl7YWI9W107ZigpfWlmKHR5cGVvZiBhRD09Im51bWJlciIpe2FEPVFb
YURdfWlmKHR5cGVvZiBhQj09Im51bWJlciIpe2FCPWFELmRhdGFbYUJdfXZhciBhQz1hbChhRCxh
Qik7aWYoYUMhPS0xKXthYi5zcGxpY2UoYUMsMSk7ZigpfX1mdW5jdGlvbiBhbChhRCxhRSl7Zm9y
KHZhciBhQj0wO2FCPGFiLmxlbmd0aDsrK2FCKXt2YXIgYUM9YWJbYUJdO2lmKGFDLnNlcmllcz09
YUQmJmFDLnBvaW50WzBdPT1hRVswXSYmYUMucG9pbnRbMV09PWFFWzFdKXtyZXR1cm4gYUJ9fXJl
dHVybiAtMX1mdW5jdGlvbiBheShhRSxhRCl7dmFyIGFDPWFEWzBdLGFJPWFEWzFdLGFIPWFFLnhh
eGlzLGFHPWFFLnlheGlzO2lmKGFDPGFILm1pbnx8YUM+YUgubWF4fHxhSTxhRy5taW58fGFJPmFH
Lm1heCl7cmV0dXJufXZhciBhRj1hRS5wb2ludHMucmFkaXVzK2FFLnBvaW50cy5saW5lV2lkdGgv
MjtBLmxpbmVXaWR0aD1hRjtBLnN0cm9rZVN0eWxlPWMuY29sb3IucGFyc2UoYUUuY29sb3IpLnNj
YWxlKCJhIiwwLjUpLnRvU3RyaW5nKCk7dmFyIGFCPTEuNSphRixhQz1hSC5wMmMoYUMpLGFJPWFH
LnAyYyhhSSk7QS5iZWdpblBhdGgoKTtpZihhRS5wb2ludHMuc3ltYm9sPT0iY2lyY2xlIil7QS5h
cmMoYUMsYUksYUIsMCwyKk1hdGguUEksZmFsc2UpfWVsc2V7YUUucG9pbnRzLnN5bWJvbChBLGFD
LGFJLGFCLGZhbHNlKX1BLmNsb3NlUGF0aCgpO0Euc3Ryb2tlKCl9ZnVuY3Rpb24gdihhRSxhQil7
QS5saW5lV2lkdGg9YUUuYmFycy5saW5lV2lkdGg7QS5zdHJva2VTdHlsZT1jLmNvbG9yLnBhcnNl
KGFFLmNvbG9yKS5zY2FsZSgiYSIsMC41KS50b1N0cmluZygpO3ZhciBhRD1jLmNvbG9yLnBhcnNl
KGFFLmNvbG9yKS5zY2FsZSgiYSIsMC41KS50b1N0cmluZygpO3ZhciBhQz1hRS5iYXJzLmFsaWdu
PT0ibGVmdCI/MDotYUUuYmFycy5iYXJXaWR0aC8yO0UoYUJbMF0sYUJbMV0sYUJbMl18fDAsYUMs
YUMrYUUuYmFycy5iYXJXaWR0aCwwLGZ1bmN0aW9uKCl7cmV0dXJuIGFEfSxhRS54YXhpcyxhRS55
YXhpcyxBLGFFLmJhcnMuaG9yaXpvbnRhbCxhRS5iYXJzLmxpbmVXaWR0aCl9ZnVuY3Rpb24gYW0o
YUosYUIsYUgsYUMpe2lmKHR5cGVvZiBhSj09InN0cmluZyIpe3JldHVybiBhSn1lbHNle3ZhciBh
ST1ILmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsYUgsMCxhQik7Zm9yKHZhciBhRT0wLGFEPWFKLmNv
bG9ycy5sZW5ndGg7YUU8YUQ7KythRSl7dmFyIGFGPWFKLmNvbG9yc1thRV07aWYodHlwZW9mIGFG
IT0ic3RyaW5nIil7dmFyIGFHPWMuY29sb3IucGFyc2UoYUMpO2lmKGFGLmJyaWdodG5lc3MhPW51
bGwpe2FHPWFHLnNjYWxlKCJyZ2IiLGFGLmJyaWdodG5lc3MpfWlmKGFGLm9wYWNpdHkhPW51bGwp
e2FHLmEqPWFGLm9wYWNpdHl9YUY9YUcudG9TdHJpbmcoKX1hSS5hZGRDb2xvclN0b3AoYUUvKGFE
LTEpLGFGKX1yZXR1cm4gYUl9fX1jLnBsb3Q9ZnVuY3Rpb24oZyxlLGQpe3ZhciBmPW5ldyBiKGMo
ZyksZSxkLGMucGxvdC5wbHVnaW5zKTtyZXR1cm4gZn07Yy5wbG90LnZlcnNpb249IjAuNyI7Yy5w
bG90LnBsdWdpbnM9W107Yy5wbG90LmZvcm1hdERhdGU9ZnVuY3Rpb24obCxmLGgpe3ZhciBvPWZ1
bmN0aW9uKGQpe2Q9IiIrZDtyZXR1cm4gZC5sZW5ndGg9PTE/IjAiK2Q6ZH07dmFyIGU9W107dmFy
IHA9ZmFsc2Usaj1mYWxzZTt2YXIgbj1sLmdldFVUQ0hvdXJzKCk7dmFyIGs9bjwxMjtpZihoPT1u
dWxsKXtoPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwi
U2VwIiwiT2N0IiwiTm92IiwiRGVjIl19aWYoZi5zZWFyY2goLyVwfCVQLykhPS0xKXtpZihuPjEy
KXtuPW4tMTJ9ZWxzZXtpZihuPT0wKXtuPTEyfX19Zm9yKHZhciBnPTA7ZzxmLmxlbmd0aDsrK2cp
e3ZhciBtPWYuY2hhckF0KGcpO2lmKHApe3N3aXRjaChtKXtjYXNlImgiOm09IiIrbjticmVhaztj
YXNlIkgiOm09byhuKTticmVhaztjYXNlIk0iOm09byhsLmdldFVUQ01pbnV0ZXMoKSk7YnJlYWs7
Y2FzZSJTIjptPW8obC5nZXRVVENTZWNvbmRzKCkpO2JyZWFrO2Nhc2UiZCI6bT0iIitsLmdldFVU
Q0RhdGUoKTticmVhaztjYXNlIm0iOm09IiIrKGwuZ2V0VVRDTW9udGgoKSsxKTticmVhaztjYXNl
InkiOm09IiIrbC5nZXRVVENGdWxsWWVhcigpO2JyZWFrO2Nhc2UiYiI6bT0iIitoW2wuZ2V0VVRD
TW9udGgoKV07YnJlYWs7Y2FzZSJwIjptPShrKT8oImFtIik6KCJwbSIpO2JyZWFrO2Nhc2UiUCI6
bT0oayk/KCJBTSIpOigiUE0iKTticmVhaztjYXNlIjAiOm09IiI7aj10cnVlO2JyZWFrfWlmKG0m
Jmope209byhtKTtqPWZhbHNlfWUucHVzaChtKTtpZighail7cD1mYWxzZX19ZWxzZXtpZihtPT0i
JSIpe3A9dHJ1ZX1lbHNle2UucHVzaChtKX19fXJldHVybiBlLmpvaW4oIiIpfTtmdW5jdGlvbiBh
KGUsZCl7cmV0dXJuIGQqTWF0aC5mbG9vcihlL2QpfX0pKGpRdWVyeSk7Cl8QD3RleHQvamF2YXNj
cmlwdNQFBgcIExQVFl8QVGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFu
Y2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LnRhYmxlc29ydGVyLm1pbi5qc08RAk5icGxpc3QwMNQB
AgMEBQY1NlgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagqwcIHyUmLRcuLzAx
VSRudWxs2wkKCwwNDg8QERITFBUWFxgZGhscHR5SJDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0UiQ3UiQy
UiQ1UiQwUiQ4gAKACoAHEACACYAFgAAQB4AGEAiACNMgCiEaIyRXTlMuYmFzZVtOUy5yZWxhdGl2
ZYAAgASAA18QVGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0
cy9yZXNvdXJjZXMvanF1ZXJ5LnRhYmxlc29ydGVyLm1pbi5qc9InKCkqWiRjbGFzc25hbWVYJGNs
YXNzZXNVTlNVUkyiKyxVTlNVUkxYTlNPYmplY3QjQbnDTYJHP/tfEA90ZXh0L2phdmFzY3JpcHQR
QIgjf+/////////SJygyM11OU1VSTFJlc3BvbnNlojQsXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVk
QXJjaGl2ZXLRNzhfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBDAEkAYABj
AGoAbQBwAHMAdgB5AHwAfwCCAIUAhwCJAIsAjQCPAJEAkwCVAJcAmQCbAKIAqgC2ALgAugC8ARMB
GAEjASwBMgE1ATsBRAFNAV8BYgFrAXABfgGBAY8BoQGkAboAAAAAAAACAQAAAAAAAAA5AAAAAAAA
AAAAAAAAAAABvE8RQIgKKGZ1bmN0aW9uKCQpeyQuZXh0ZW5kKHt0YWJsZXNvcnRlcjpuZXcKZnVu
Y3Rpb24oKXt2YXIgcGFyc2Vycz1bXSx3aWRnZXRzPVtdO3RoaXMuZGVmYXVsdHM9e2Nzc0hlYWRl
cjoiaGVhZGVyIixjc3NBc2M6ImhlYWRlclNvcnRVcCIsY3NzRGVzYzoiaGVhZGVyU29ydERvd24i
LGNzc0NoaWxkUm93OiJleHBhbmQtY2hpbGQiLHNvcnRJbml0aWFsT3JkZXI6ImFzYyIsc29ydE11
bHRpU29ydEtleToic2hpZnRLZXkiLHNvcnRGb3JjZTpudWxsLHNvcnRBcHBlbmQ6bnVsbCxzb3J0
TG9jYWxlQ29tcGFyZTp0cnVlLHRleHRFeHRyYWN0aW9uOiJzaW1wbGUiLHBhcnNlcnM6e30sd2lk
Z2V0czpbXSx3aWRnZXRaZWJyYTp7Y3NzOlsiZXZlbiIsIm9kZCJdfSxoZWFkZXJzOnt9LHdpZHRo
Rml4ZWQ6ZmFsc2UsY2FuY2VsU2VsZWN0aW9uOnRydWUsc29ydExpc3Q6W10saGVhZGVyTGlzdDpb
XSxkYXRlRm9ybWF0OiJ1cyIsZGVjaW1hbDonL1wufFwsL2cnLG9uUmVuZGVySGVhZGVyOm51bGws
c2VsZWN0b3JIZWFkZXJzOid0aGVhZCB0aCcsZGVidWc6ZmFsc2V9O2Z1bmN0aW9uIGJlbmNobWFy
ayhzLGQpe2xvZyhzKyIsIisobmV3IERhdGUoKS5nZXRUaW1lKCktZC5nZXRUaW1lKCkpKyJtcyIp
O310aGlzLmJlbmNobWFyaz1iZW5jaG1hcms7ZnVuY3Rpb24gbG9nKHMpe2lmKHR5cGVvZiBjb25z
b2xlIT0idW5kZWZpbmVkIiYmdHlwZW9mIGNvbnNvbGUuZGVidWchPSJ1bmRlZmluZWQiKXtjb25z
b2xlLmxvZyhzKTt9ZWxzZXthbGVydChzKTt9fWZ1bmN0aW9uIGJ1aWxkUGFyc2VyQ2FjaGUodGFi
bGUsJGhlYWRlcnMpe2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7dmFyIHBhcnNlcnNEZWJ1Zz0iIjt9
aWYodGFibGUudEJvZGllcy5sZW5ndGg9PTApcmV0dXJuO3ZhciByb3dzPXRhYmxlLnRCb2RpZXNb
MF0ucm93cztpZihyb3dzWzBdKXt2YXIgbGlzdD1bXSxjZWxscz1yb3dzWzBdLmNlbGxzLGw9Y2Vs
bHMubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKyspe3ZhciBwPWZhbHNlO2lmKCQubWV0YWRhdGEm
JigkKCRoZWFkZXJzW2ldKS5tZXRhZGF0YSgpJiYkKCRoZWFkZXJzW2ldKS5tZXRhZGF0YSgpLnNv
cnRlcikpe3A9Z2V0UGFyc2VyQnlJZCgkKCRoZWFkZXJzW2ldKS5tZXRhZGF0YSgpLnNvcnRlcik7
fWVsc2UgaWYoKHRhYmxlLmNvbmZpZy5oZWFkZXJzW2ldJiZ0YWJsZS5jb25maWcuaGVhZGVyc1tp
XS5zb3J0ZXIpKXtwPWdldFBhcnNlckJ5SWQodGFibGUuY29uZmlnLmhlYWRlcnNbaV0uc29ydGVy
KTt9aWYoIXApe3A9ZGV0ZWN0UGFyc2VyRm9yQ29sdW1uKHRhYmxlLHJvd3MsLTEsaSk7fWlmKHRh
YmxlLmNvbmZpZy5kZWJ1Zyl7cGFyc2Vyc0RlYnVnKz0iY29sdW1uOiIraSsiIHBhcnNlcjoiK3Au
aWQrIlxuIjt9bGlzdC5wdXNoKHApO319aWYodGFibGUuY29uZmlnLmRlYnVnKXtsb2cocGFyc2Vy
c0RlYnVnKTt9cmV0dXJuIGxpc3Q7fTtmdW5jdGlvbiBkZXRlY3RQYXJzZXJGb3JDb2x1bW4odGFi
bGUscm93cyxyb3dJbmRleCxjZWxsSW5kZXgpe3ZhciBsPXBhcnNlcnMubGVuZ3RoLG5vZGU9ZmFs
c2Usbm9kZVZhbHVlPWZhbHNlLGtlZXBMb29raW5nPXRydWU7d2hpbGUobm9kZVZhbHVlPT0nJyYm
a2VlcExvb2tpbmcpe3Jvd0luZGV4Kys7aWYocm93c1tyb3dJbmRleF0pe25vZGU9Z2V0Tm9kZUZy
b21Sb3dBbmRDZWxsSW5kZXgocm93cyxyb3dJbmRleCxjZWxsSW5kZXgpO25vZGVWYWx1ZT10cmlt
QW5kR2V0Tm9kZVRleHQodGFibGUuY29uZmlnLG5vZGUpO2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7
bG9nKCdDaGVja2luZyBpZiB2YWx1ZSB3YXMgZW1wdHkgb24gcm93Oicrcm93SW5kZXgpO319ZWxz
ZXtrZWVwTG9va2luZz1mYWxzZTt9fWZvcih2YXIgaT0xO2k8bDtpKyspe2lmKHBhcnNlcnNbaV0u
aXMobm9kZVZhbHVlLHRhYmxlLG5vZGUpKXtyZXR1cm4gcGFyc2Vyc1tpXTt9fXJldHVybiBwYXJz
ZXJzWzBdO31mdW5jdGlvbiBnZXROb2RlRnJvbVJvd0FuZENlbGxJbmRleChyb3dzLHJvd0luZGV4
LGNlbGxJbmRleCl7cmV0dXJuIHJvd3Nbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF07fWZ1bmN0
aW9uIHRyaW1BbmRHZXROb2RlVGV4dChjb25maWcsbm9kZSl7cmV0dXJuICQudHJpbShnZXRFbGVt
ZW50VGV4dChjb25maWcsbm9kZSkpO31mdW5jdGlvbiBnZXRQYXJzZXJCeUlkKG5hbWUpe3ZhciBs
PXBhcnNlcnMubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKyspe2lmKHBhcnNlcnNbaV0uaWQudG9M
b3dlckNhc2UoKT09bmFtZS50b0xvd2VyQ2FzZSgpKXtyZXR1cm4gcGFyc2Vyc1tpXTt9fXJldHVy
biBmYWxzZTt9ZnVuY3Rpb24gYnVpbGRDYWNoZSh0YWJsZSl7aWYodGFibGUuY29uZmlnLmRlYnVn
KXt2YXIgY2FjaGVUaW1lPW5ldyBEYXRlKCk7fXZhciB0b3RhbFJvd3M9KHRhYmxlLnRCb2RpZXNb
MF0mJnRhYmxlLnRCb2RpZXNbMF0ucm93cy5sZW5ndGgpfHwwLHRvdGFsQ2VsbHM9KHRhYmxlLnRC
b2RpZXNbMF0ucm93c1swXSYmdGFibGUudEJvZGllc1swXS5yb3dzWzBdLmNlbGxzLmxlbmd0aCl8
fDAscGFyc2Vycz10YWJsZS5jb25maWcucGFyc2VycyxjYWNoZT17cm93OltdLG5vcm1hbGl6ZWQ6
W119O2Zvcih2YXIgaT0wO2k8dG90YWxSb3dzOysraSl7dmFyIGM9JCh0YWJsZS50Qm9kaWVzWzBd
LnJvd3NbaV0pLGNvbHM9W107aWYoYy5oYXNDbGFzcyh0YWJsZS5jb25maWcuY3NzQ2hpbGRSb3cp
KXtjYWNoZS5yb3dbY2FjaGUucm93Lmxlbmd0aC0xXT1jYWNoZS5yb3dbY2FjaGUucm93Lmxlbmd0
aC0xXS5hZGQoYyk7Y29udGludWU7fWNhY2hlLnJvdy5wdXNoKGMpO2Zvcih2YXIgaj0wO2o8dG90
YWxDZWxsczsrK2ope2NvbHMucHVzaChwYXJzZXJzW2pdLmZvcm1hdChnZXRFbGVtZW50VGV4dCh0
YWJsZS5jb25maWcsY1swXS5jZWxsc1tqXSksdGFibGUsY1swXS5jZWxsc1tqXSkpO31jb2xzLnB1
c2goY2FjaGUubm9ybWFsaXplZC5sZW5ndGgpO2NhY2hlLm5vcm1hbGl6ZWQucHVzaChjb2xzKTtj
b2xzPW51bGw7fTtpZih0YWJsZS5jb25maWcuZGVidWcpe2JlbmNobWFyaygiQnVpbGRpbmcgY2Fj
aGUgZm9yICIrdG90YWxSb3dzKyIgcm93czoiLGNhY2hlVGltZSk7fXJldHVybiBjYWNoZTt9O2Z1
bmN0aW9uIGdldEVsZW1lbnRUZXh0KGNvbmZpZyxub2RlKXt2YXIgdGV4dD0iIjtpZighbm9kZSly
ZXR1cm4iIjtpZighY29uZmlnLnN1cHBvcnRzVGV4dENvbnRlbnQpY29uZmlnLnN1cHBvcnRzVGV4
dENvbnRlbnQ9bm9kZS50ZXh0Q29udGVudHx8ZmFsc2U7aWYoY29uZmlnLnRleHRFeHRyYWN0aW9u
PT0ic2ltcGxlIil7aWYoY29uZmlnLnN1cHBvcnRzVGV4dENvbnRlbnQpe3RleHQ9bm9kZS50ZXh0
Q29udGVudDt9ZWxzZXtpZihub2RlLmNoaWxkTm9kZXNbMF0mJm5vZGUuY2hpbGROb2Rlc1swXS5o
YXNDaGlsZE5vZGVzKCkpe3RleHQ9bm9kZS5jaGlsZE5vZGVzWzBdLmlubmVySFRNTDt9ZWxzZXt0
ZXh0PW5vZGUuaW5uZXJIVE1MO319fWVsc2V7aWYodHlwZW9mKGNvbmZpZy50ZXh0RXh0cmFjdGlv
bik9PSJmdW5jdGlvbiIpe3RleHQ9Y29uZmlnLnRleHRFeHRyYWN0aW9uKG5vZGUpO31lbHNle3Rl
eHQ9JChub2RlKS50ZXh0KCk7fX1yZXR1cm4gdGV4dDt9ZnVuY3Rpb24gYXBwZW5kVG9UYWJsZSh0
YWJsZSxjYWNoZSl7aWYodGFibGUuY29uZmlnLmRlYnVnKXt2YXIgYXBwZW5kVGltZT1uZXcgRGF0
ZSgpfXZhciBjPWNhY2hlLHI9Yy5yb3csbj1jLm5vcm1hbGl6ZWQsdG90YWxSb3dzPW4ubGVuZ3Ro
LGNoZWNrQ2VsbD0oblswXS5sZW5ndGgtMSksdGFibGVCb2R5PSQodGFibGUudEJvZGllc1swXSks
cm93cz1bXTtmb3IodmFyIGk9MDtpPHRvdGFsUm93cztpKyspe3ZhciBwb3M9bltpXVtjaGVja0Nl
bGxdO3Jvd3MucHVzaChyW3Bvc10pO2lmKCF0YWJsZS5jb25maWcuYXBwZW5kZXIpe3ZhciBsPXJb
cG9zXS5sZW5ndGg7Zm9yKHZhciBqPTA7ajxsO2orKyl7dGFibGVCb2R5WzBdLmFwcGVuZENoaWxk
KHJbcG9zXVtqXSk7fX19aWYodGFibGUuY29uZmlnLmFwcGVuZGVyKXt0YWJsZS5jb25maWcuYXBw
ZW5kZXIodGFibGUscm93cyk7fXJvd3M9bnVsbDtpZih0YWJsZS5jb25maWcuZGVidWcpe2JlbmNo
bWFyaygiUmVidWlsdCB0YWJsZToiLGFwcGVuZFRpbWUpO31hcHBseVdpZGdldCh0YWJsZSk7c2V0
VGltZW91dChmdW5jdGlvbigpeyQodGFibGUpLnRyaWdnZXIoInNvcnRFbmQiKTt9LDApO307ZnVu
Y3Rpb24gYnVpbGRIZWFkZXJzKHRhYmxlKXtpZih0YWJsZS5jb25maWcuZGVidWcpe3ZhciB0aW1l
PW5ldyBEYXRlKCk7fXZhciBtZXRhPSgkLm1ldGFkYXRhKT90cnVlOmZhbHNlO3ZhciBoZWFkZXJf
aW5kZXg9Y29tcHV0ZVRhYmxlSGVhZGVyQ2VsbEluZGV4ZXModGFibGUpOyR0YWJsZUhlYWRlcnM9
JCh0YWJsZS5jb25maWcuc2VsZWN0b3JIZWFkZXJzLHRhYmxlKS5lYWNoKGZ1bmN0aW9uKGluZGV4
KXt0aGlzLmNvbHVtbj1oZWFkZXJfaW5kZXhbdGhpcy5wYXJlbnROb2RlLnJvd0luZGV4KyItIit0
aGlzLmNlbGxJbmRleF07dGhpcy5vcmRlcj1mb3JtYXRTb3J0aW5nT3JkZXIodGFibGUuY29uZmln
LnNvcnRJbml0aWFsT3JkZXIpO3RoaXMuY291bnQ9dGhpcy5vcmRlcjtpZihjaGVja0hlYWRlck1l
dGFkYXRhKHRoaXMpfHxjaGVja0hlYWRlck9wdGlvbnModGFibGUsaW5kZXgpKXRoaXMuc29ydERp
c2FibGVkPXRydWU7aWYoY2hlY2tIZWFkZXJPcHRpb25zU29ydGluZ0xvY2tlZCh0YWJsZSxpbmRl
eCkpdGhpcy5vcmRlcj10aGlzLmxvY2tlZE9yZGVyPWNoZWNrSGVhZGVyT3B0aW9uc1NvcnRpbmdM
b2NrZWQodGFibGUsaW5kZXgpO2lmKCF0aGlzLnNvcnREaXNhYmxlZCl7dmFyICR0aD0kKHRoaXMp
LmFkZENsYXNzKHRhYmxlLmNvbmZpZy5jc3NIZWFkZXIpO2lmKHRhYmxlLmNvbmZpZy5vblJlbmRl
ckhlYWRlcil0YWJsZS5jb25maWcub25SZW5kZXJIZWFkZXIuYXBwbHkoJHRoKTt9dGFibGUuY29u
ZmlnLmhlYWRlckxpc3RbaW5kZXhdPXRoaXM7fSk7aWYodGFibGUuY29uZmlnLmRlYnVnKXtiZW5j
aG1hcmsoIkJ1aWx0IGhlYWRlcnM6Iix0aW1lKTtsb2coJHRhYmxlSGVhZGVycyk7fXJldHVybiAk
dGFibGVIZWFkZXJzO307ZnVuY3Rpb24gY29tcHV0ZVRhYmxlSGVhZGVyQ2VsbEluZGV4ZXModCl7
dmFyIG1hdHJpeD1bXTt2YXIgbG9va3VwPXt9O3ZhciB0aGVhZD10LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdUSEVBRCcpWzBdO3ZhciB0cnM9dGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1RSJyk7
Zm9yKHZhciBpPTA7aTx0cnMubGVuZ3RoO2krKyl7dmFyIGNlbGxzPXRyc1tpXS5jZWxscztmb3Io
dmFyIGo9MDtqPGNlbGxzLmxlbmd0aDtqKyspe3ZhciBjPWNlbGxzW2pdO3ZhciByb3dJbmRleD1j
LnBhcmVudE5vZGUucm93SW5kZXg7dmFyIGNlbGxJZD1yb3dJbmRleCsiLSIrYy5jZWxsSW5kZXg7
dmFyIHJvd1NwYW49Yy5yb3dTcGFufHwxO3ZhciBjb2xTcGFuPWMuY29sU3Bhbnx8MQp2YXIgZmly
c3RBdmFpbENvbDtpZih0eXBlb2YobWF0cml4W3Jvd0luZGV4XSk9PSJ1bmRlZmluZWQiKXttYXRy
aXhbcm93SW5kZXhdPVtdO31mb3IodmFyIGs9MDtrPG1hdHJpeFtyb3dJbmRleF0ubGVuZ3RoKzE7
aysrKXtpZih0eXBlb2YobWF0cml4W3Jvd0luZGV4XVtrXSk9PSJ1bmRlZmluZWQiKXtmaXJzdEF2
YWlsQ29sPWs7YnJlYWs7fX1sb29rdXBbY2VsbElkXT1maXJzdEF2YWlsQ29sO2Zvcih2YXIgaz1y
b3dJbmRleDtrPHJvd0luZGV4K3Jvd1NwYW47aysrKXtpZih0eXBlb2YobWF0cml4W2tdKT09InVu
ZGVmaW5lZCIpe21hdHJpeFtrXT1bXTt9dmFyIG1hdHJpeHJvdz1tYXRyaXhba107Zm9yKHZhciBs
PWZpcnN0QXZhaWxDb2w7bDxmaXJzdEF2YWlsQ29sK2NvbFNwYW47bCsrKXttYXRyaXhyb3dbbF09
IngiO319fX1yZXR1cm4gbG9va3VwO31mdW5jdGlvbiBjaGVja0NlbGxDb2xTcGFuKHRhYmxlLHJv
d3Mscm93KXt2YXIgYXJyPVtdLHI9dGFibGUudEhlYWQucm93cyxjPXJbcm93XS5jZWxscztmb3Io
dmFyIGk9MDtpPGMubGVuZ3RoO2krKyl7dmFyIGNlbGw9Y1tpXTtpZihjZWxsLmNvbFNwYW4+MSl7
YXJyPWFyci5jb25jYXQoY2hlY2tDZWxsQ29sU3Bhbih0YWJsZSxoZWFkZXJBcnIscm93KyspKTt9
ZWxzZXtpZih0YWJsZS50SGVhZC5sZW5ndGg9PTF8fChjZWxsLnJvd1NwYW4+MXx8IXJbcm93KzFd
KSl7YXJyLnB1c2goY2VsbCk7fX19cmV0dXJuIGFycjt9O2Z1bmN0aW9uIGNoZWNrSGVhZGVyTWV0
YWRhdGEoY2VsbCl7aWYoKCQubWV0YWRhdGEpJiYoJChjZWxsKS5tZXRhZGF0YSgpLnNvcnRlcj09
PWZhbHNlKSl7cmV0dXJuIHRydWU7fTtyZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIGNoZWNrSGVhZGVy
T3B0aW9ucyh0YWJsZSxpKXtpZigodGFibGUuY29uZmlnLmhlYWRlcnNbaV0pJiYodGFibGUuY29u
ZmlnLmhlYWRlcnNbaV0uc29ydGVyPT09ZmFsc2UpKXtyZXR1cm4gdHJ1ZTt9O3JldHVybiBmYWxz
ZTt9ZnVuY3Rpb24gY2hlY2tIZWFkZXJPcHRpb25zU29ydGluZ0xvY2tlZCh0YWJsZSxpKXtpZigo
dGFibGUuY29uZmlnLmhlYWRlcnNbaV0pJiYodGFibGUuY29uZmlnLmhlYWRlcnNbaV0ubG9ja2Vk
T3JkZXIpKXJldHVybiB0YWJsZS5jb25maWcuaGVhZGVyc1tpXS5sb2NrZWRPcmRlcjtyZXR1cm4g
ZmFsc2U7fWZ1bmN0aW9uIGFwcGx5V2lkZ2V0KHRhYmxlKXt2YXIgYz10YWJsZS5jb25maWcud2lk
Z2V0czt2YXIgbD1jLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXtnZXRXaWRnZXRCeUlkKGNb
aV0pLmZvcm1hdCh0YWJsZSk7fX1mdW5jdGlvbiBnZXRXaWRnZXRCeUlkKG5hbWUpe3ZhciBsPXdp
ZGdldHMubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKyspe2lmKHdpZGdldHNbaV0uaWQudG9Mb3dl
ckNhc2UoKT09bmFtZS50b0xvd2VyQ2FzZSgpKXtyZXR1cm4gd2lkZ2V0c1tpXTt9fX07ZnVuY3Rp
b24gZm9ybWF0U29ydGluZ09yZGVyKHYpe2lmKHR5cGVvZih2KSE9Ik51bWJlciIpe3JldHVybih2
LnRvTG93ZXJDYXNlKCk9PSJkZXNjIik/MTowO31lbHNle3JldHVybih2PT0xKT8xOjA7fX1mdW5j
dGlvbiBpc1ZhbHVlSW5BcnJheSh2LGEpe3ZhciBsPWEubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtp
Kyspe2lmKGFbaV1bMF09PXYpe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO31mdW5jdGlvbiBz
ZXRIZWFkZXJzQ3NzKHRhYmxlLCRoZWFkZXJzLGxpc3QsY3NzKXskaGVhZGVycy5yZW1vdmVDbGFz
cyhjc3NbMF0pLnJlbW92ZUNsYXNzKGNzc1sxXSk7dmFyIGg9W107JGhlYWRlcnMuZWFjaChmdW5j
dGlvbihvZmZzZXQpe2lmKCF0aGlzLnNvcnREaXNhYmxlZCl7aFt0aGlzLmNvbHVtbl09JCh0aGlz
KTt9fSk7dmFyIGw9bGlzdC5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2krKyl7aFtsaXN0W2ldWzBd
XS5hZGRDbGFzcyhjc3NbbGlzdFtpXVsxXV0pO319ZnVuY3Rpb24gZml4Q29sdW1uV2lkdGgodGFi
bGUsJGhlYWRlcnMpe3ZhciBjPXRhYmxlLmNvbmZpZztpZihjLndpZHRoRml4ZWQpe3ZhciBjb2xn
cm91cD0kKCc8Y29sZ3JvdXA+Jyk7JCgidHI6Zmlyc3QgdGQiLHRhYmxlLnRCb2RpZXNbMF0pLmVh
Y2goZnVuY3Rpb24oKXtjb2xncm91cC5hcHBlbmQoJCgnPGNvbD4nKS5jc3MoJ3dpZHRoJywkKHRo
aXMpLndpZHRoKCkpKTt9KTskKHRhYmxlKS5wcmVwZW5kKGNvbGdyb3VwKTt9O31mdW5jdGlvbiB1
cGRhdGVIZWFkZXJTb3J0Q291bnQodGFibGUsc29ydExpc3Qpe3ZhciBjPXRhYmxlLmNvbmZpZyxs
PXNvcnRMaXN0Lmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXt2YXIgcz1zb3J0TGlzdFtpXSxv
PWMuaGVhZGVyTGlzdFtzWzBdXTtvLmNvdW50PXNbMV07by5jb3VudCsrO319ZnVuY3Rpb24gbXVs
dGlzb3J0KHRhYmxlLHNvcnRMaXN0LGNhY2hlKXtpZih0YWJsZS5jb25maWcuZGVidWcpe3ZhciBz
b3J0VGltZT1uZXcgRGF0ZSgpO312YXIgZHluYW1pY0V4cD0idmFyIHNvcnRXcmFwcGVyID0gZnVu
Y3Rpb24oYSxiKSB7IixsPXNvcnRMaXN0Lmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXt2YXIg
Yz1zb3J0TGlzdFtpXVswXTt2YXIgb3JkZXI9c29ydExpc3RbaV1bMV07dmFyIHM9KHRhYmxlLmNv
bmZpZy5wYXJzZXJzW2NdLnR5cGU9PSJ0ZXh0Iik/KChvcmRlcj09MCk/bWFrZVNvcnRGdW5jdGlv
bigidGV4dCIsImFzYyIsYyk6bWFrZVNvcnRGdW5jdGlvbigidGV4dCIsImRlc2MiLGMpKTooKG9y
ZGVyPT0wKT9tYWtlU29ydEZ1bmN0aW9uKCJudW1lcmljIiwiYXNjIixjKTptYWtlU29ydEZ1bmN0
aW9uKCJudW1lcmljIiwiZGVzYyIsYykpO3ZhciBlPSJlIitpO2R5bmFtaWNFeHArPSJ2YXIgIitl
KyIgPSAiK3M7ZHluYW1pY0V4cCs9ImlmKCIrZSsiKSB7IHJldHVybiAiK2UrIjsgfSAiO2R5bmFt
aWNFeHArPSJlbHNlIHsgIjt9dmFyIG9yZ09yZGVyQ29sPWNhY2hlLm5vcm1hbGl6ZWRbMF0ubGVu
Z3RoLTE7ZHluYW1pY0V4cCs9InJldHVybiBhWyIrb3JnT3JkZXJDb2wrIl0tYlsiK29yZ09yZGVy
Q29sKyJdOyI7Zm9yKHZhciBpPTA7aTxsO2krKyl7ZHluYW1pY0V4cCs9In07ICI7fWR5bmFtaWNF
eHArPSJyZXR1cm4gMDsgIjtkeW5hbWljRXhwKz0ifTsgIjtpZih0YWJsZS5jb25maWcuZGVidWcp
e2JlbmNobWFyaygiRXZhbGluZyBleHByZXNzaW9uOiIrZHluYW1pY0V4cCxuZXcgRGF0ZSgpKTt9
ZXZhbChkeW5hbWljRXhwKTtjYWNoZS5ub3JtYWxpemVkLnNvcnQoc29ydFdyYXBwZXIpO2lmKHRh
YmxlLmNvbmZpZy5kZWJ1Zyl7YmVuY2htYXJrKCJTb3J0aW5nIG9uICIrc29ydExpc3QudG9TdHJp
bmcoKSsiIGFuZCBkaXIgIitvcmRlcisiIHRpbWU6Iixzb3J0VGltZSk7fXJldHVybiBjYWNoZTt9
O2Z1bmN0aW9uIG1ha2VTb3J0RnVuY3Rpb24odHlwZSxkaXJlY3Rpb24saW5kZXgpe3ZhciBhPSJh
WyIraW5kZXgrIl0iLGI9ImJbIitpbmRleCsiXSI7aWYodHlwZT09J3RleHQnJiZkaXJlY3Rpb249
PSdhc2MnKXtyZXR1cm4iKCIrYSsiID09ICIrYisiID8gMCA6ICgiK2ErIiA9PT0gbnVsbCA/IE51
bWJlci5QT1NJVElWRV9JTkZJTklUWSA6ICgiK2IrIiA9PT0gbnVsbCA/IE51bWJlci5ORUdBVElW
RV9JTkZJTklUWSA6ICgiK2ErIiA8ICIrYisiKSA/IC0xIDogMSApKSk7Ijt9ZWxzZSBpZih0eXBl
PT0ndGV4dCcmJmRpcmVjdGlvbj09J2Rlc2MnKXtyZXR1cm4iKCIrYSsiID09ICIrYisiID8gMCA6
ICgiK2ErIiA9PT0gbnVsbCA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6ICgiK2IrIiA9PT0g
bnVsbCA/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA6ICgiK2IrIiA8ICIrYSsiKSA/IC0xIDog
MSApKSk7Ijt9ZWxzZSBpZih0eXBlPT0nbnVtZXJpYycmJmRpcmVjdGlvbj09J2FzYycpe3JldHVy
biIoIithKyIgPT09IG51bGwgJiYgIitiKyIgPT09IG51bGwpID8gMCA6KCIrYSsiID09PSBudWxs
ID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogKCIrYisiID09PSBudWxsID8gTnVtYmVyLk5F
R0FUSVZFX0lORklOSVRZIDogIithKyIgLSAiK2IrIikpOyI7fWVsc2UgaWYodHlwZT09J251bWVy
aWMnJiZkaXJlY3Rpb249PSdkZXNjJyl7cmV0dXJuIigiK2ErIiA9PT0gbnVsbCAmJiAiK2IrIiA9
PT0gbnVsbCkgPyAwIDooIithKyIgPT09IG51bGwgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkg
OiAoIitiKyIgPT09IG51bGwgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgOiAiK2IrIiAtICIr
YSsiKSk7Ijt9fTtmdW5jdGlvbiBtYWtlU29ydFRleHQoaSl7cmV0dXJuIigoYVsiK2krIl0gPCBi
WyIraSsiXSkgPyAtMSA6ICgoYVsiK2krIl0gPiBiWyIraSsiXSkgPyAxIDogMCkpOyI7fTtmdW5j
dGlvbiBtYWtlU29ydFRleHREZXNjKGkpe3JldHVybiIoKGJbIitpKyJdIDwgYVsiK2krIl0pID8g
LTEgOiAoKGJbIitpKyJdID4gYVsiK2krIl0pID8gMSA6IDApKTsiO307ZnVuY3Rpb24gbWFrZVNv
cnROdW1lcmljKGkpe3JldHVybiJhWyIraSsiXS1iWyIraSsiXTsiO307ZnVuY3Rpb24gbWFrZVNv
cnROdW1lcmljRGVzYyhpKXtyZXR1cm4iYlsiK2krIl0tYVsiK2krIl07Ijt9O2Z1bmN0aW9uIHNv
cnRUZXh0KGEsYil7aWYodGFibGUuY29uZmlnLnNvcnRMb2NhbGVDb21wYXJlKXJldHVybiBhLmxv
Y2FsZUNvbXBhcmUoYik7cmV0dXJuKChhPGIpPy0xOigoYT5iKT8xOjApKTt9O2Z1bmN0aW9uIHNv
cnRUZXh0RGVzYyhhLGIpe2lmKHRhYmxlLmNvbmZpZy5zb3J0TG9jYWxlQ29tcGFyZSlyZXR1cm4g
Yi5sb2NhbGVDb21wYXJlKGEpO3JldHVybigoYjxhKT8tMTooKGI+YSk/MTowKSk7fTtmdW5jdGlv
biBzb3J0TnVtZXJpYyhhLGIpe3JldHVybiBhLWI7fTtmdW5jdGlvbiBzb3J0TnVtZXJpY0Rlc2Mo
YSxiKXtyZXR1cm4gYi1hO307ZnVuY3Rpb24gZ2V0Q2FjaGVkU29ydFR5cGUocGFyc2VycyxpKXty
ZXR1cm4gcGFyc2Vyc1tpXS50eXBlO307dGhpcy5jb25zdHJ1Y3Q9ZnVuY3Rpb24oc2V0dGluZ3Mp
e3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZighdGhpcy50SGVhZHx8IXRoaXMudEJvZGll
cylyZXR1cm47dmFyICR0aGlzLCRkb2N1bWVudCwkaGVhZGVycyxjYWNoZSxjb25maWcsc2hpZnRE
b3duPTAsc29ydE9yZGVyO3RoaXMuY29uZmlnPXt9O2NvbmZpZz0kLmV4dGVuZCh0aGlzLmNvbmZp
ZywkLnRhYmxlc29ydGVyLmRlZmF1bHRzLHNldHRpbmdzKTskdGhpcz0kKHRoaXMpOyQuZGF0YSh0
aGlzLCJ0YWJsZXNvcnRlciIsY29uZmlnKTskaGVhZGVycz1idWlsZEhlYWRlcnModGhpcyk7dGhp
cy5jb25maWcucGFyc2Vycz1idWlsZFBhcnNlckNhY2hlKHRoaXMsJGhlYWRlcnMpO2NhY2hlPWJ1
aWxkQ2FjaGUodGhpcyk7dmFyIHNvcnRDU1M9W2NvbmZpZy5jc3NEZXNjLGNvbmZpZy5jc3NBc2Nd
O2ZpeENvbHVtbldpZHRoKHRoaXMpOyRoZWFkZXJzLmNsaWNrKGZ1bmN0aW9uKGUpe3ZhciB0b3Rh
bFJvd3M9KCR0aGlzWzBdLnRCb2RpZXNbMF0mJiR0aGlzWzBdLnRCb2RpZXNbMF0ucm93cy5sZW5n
dGgpfHwwO2lmKCF0aGlzLnNvcnREaXNhYmxlZCYmdG90YWxSb3dzPjApeyR0aGlzLnRyaWdnZXIo
InNvcnRTdGFydCIpO3ZhciAkY2VsbD0kKHRoaXMpO3ZhciBpPXRoaXMuY29sdW1uO3RoaXMub3Jk
ZXI9dGhpcy5jb3VudCsrJTI7aWYodGhpcy5sb2NrZWRPcmRlcil0aGlzLm9yZGVyPXRoaXMubG9j
a2VkT3JkZXI7aWYoIWVbY29uZmlnLnNvcnRNdWx0aVNvcnRLZXldKXtjb25maWcuc29ydExpc3Q9
W107aWYoY29uZmlnLnNvcnRGb3JjZSE9bnVsbCl7dmFyIGE9Y29uZmlnLnNvcnRGb3JjZTtmb3Io
dmFyIGo9MDtqPGEubGVuZ3RoO2orKyl7aWYoYVtqXVswXSE9aSl7Y29uZmlnLnNvcnRMaXN0LnB1
c2goYVtqXSk7fX19Y29uZmlnLnNvcnRMaXN0LnB1c2goW2ksdGhpcy5vcmRlcl0pO31lbHNle2lm
KGlzVmFsdWVJbkFycmF5KGksY29uZmlnLnNvcnRMaXN0KSl7Zm9yKHZhciBqPTA7ajxjb25maWcu
c29ydExpc3QubGVuZ3RoO2orKyl7dmFyIHM9Y29uZmlnLnNvcnRMaXN0W2pdLG89Y29uZmlnLmhl
YWRlckxpc3Rbc1swXV07aWYoc1swXT09aSl7by5jb3VudD1zWzFdO28uY291bnQrKztzWzFdPW8u
Y291bnQlMjt9fX1lbHNle2NvbmZpZy5zb3J0TGlzdC5wdXNoKFtpLHRoaXMub3JkZXJdKTt9fTtz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0SGVhZGVyc0NzcygkdGhpc1swXSwkaGVhZGVycyxjb25m
aWcuc29ydExpc3Qsc29ydENTUyk7YXBwZW5kVG9UYWJsZSgkdGhpc1swXSxtdWx0aXNvcnQoJHRo
aXNbMF0sY29uZmlnLnNvcnRMaXN0LGNhY2hlKSk7fSwxKTtyZXR1cm4gZmFsc2U7fX0pLm1vdXNl
ZG93bihmdW5jdGlvbigpe2lmKGNvbmZpZy5jYW5jZWxTZWxlY3Rpb24pe3RoaXMub25zZWxlY3Rz
dGFydD1mdW5jdGlvbigpe3JldHVybiBmYWxzZX07cmV0dXJuIGZhbHNlO319KTskdGhpcy5iaW5k
KCJ1cGRhdGUiLGZ1bmN0aW9uKCl7dmFyIG1lPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe21l
LmNvbmZpZy5wYXJzZXJzPWJ1aWxkUGFyc2VyQ2FjaGUobWUsJGhlYWRlcnMpO2NhY2hlPWJ1aWxk
Q2FjaGUobWUpO30sMSk7fSkuYmluZCgidXBkYXRlQ2VsbCIsZnVuY3Rpb24oZSxjZWxsKXt2YXIg
Y29uZmlnPXRoaXMuY29uZmlnO3ZhciBwb3M9WyhjZWxsLnBhcmVudE5vZGUucm93SW5kZXgtMSks
Y2VsbC5jZWxsSW5kZXhdO2NhY2hlLm5vcm1hbGl6ZWRbcG9zWzBdXVtwb3NbMV1dPWNvbmZpZy5w
YXJzZXJzW3Bvc1sxXV0uZm9ybWF0KGdldEVsZW1lbnRUZXh0KGNvbmZpZyxjZWxsKSxjZWxsKTt9
KS5iaW5kKCJzb3J0b24iLGZ1bmN0aW9uKGUsbGlzdCl7JCh0aGlzKS50cmlnZ2VyKCJzb3J0U3Rh
cnQiKTtjb25maWcuc29ydExpc3Q9bGlzdDt2YXIgc29ydExpc3Q9Y29uZmlnLnNvcnRMaXN0O3Vw
ZGF0ZUhlYWRlclNvcnRDb3VudCh0aGlzLHNvcnRMaXN0KTtzZXRIZWFkZXJzQ3NzKHRoaXMsJGhl
YWRlcnMsc29ydExpc3Qsc29ydENTUyk7YXBwZW5kVG9UYWJsZSh0aGlzLG11bHRpc29ydCh0aGlz
LHNvcnRMaXN0LGNhY2hlKSk7fSkuYmluZCgiYXBwZW5kQ2FjaGUiLGZ1bmN0aW9uKCl7YXBwZW5k
VG9UYWJsZSh0aGlzLGNhY2hlKTt9KS5iaW5kKCJhcHBseVdpZGdldElkIixmdW5jdGlvbihlLGlk
KXtnZXRXaWRnZXRCeUlkKGlkKS5mb3JtYXQodGhpcyk7fSkuYmluZCgiYXBwbHlXaWRnZXRzIixm
dW5jdGlvbigpe2FwcGx5V2lkZ2V0KHRoaXMpO30pO2lmKCQubWV0YWRhdGEmJigkKHRoaXMpLm1l
dGFkYXRhKCkmJiQodGhpcykubWV0YWRhdGEoKS5zb3J0bGlzdCkpe2NvbmZpZy5zb3J0TGlzdD0k
KHRoaXMpLm1ldGFkYXRhKCkuc29ydGxpc3Q7fWlmKGNvbmZpZy5zb3J0TGlzdC5sZW5ndGg+MCl7
JHRoaXMudHJpZ2dlcigic29ydG9uIixbY29uZmlnLnNvcnRMaXN0XSk7fWFwcGx5V2lkZ2V0KHRo
aXMpO30pO307dGhpcy5hZGRQYXJzZXI9ZnVuY3Rpb24ocGFyc2VyKXt2YXIgbD1wYXJzZXJzLmxl
bmd0aCxhPXRydWU7Zm9yKHZhciBpPTA7aTxsO2krKyl7aWYocGFyc2Vyc1tpXS5pZC50b0xvd2Vy
Q2FzZSgpPT1wYXJzZXIuaWQudG9Mb3dlckNhc2UoKSl7YT1mYWxzZTt9fWlmKGEpe3BhcnNlcnMu
cHVzaChwYXJzZXIpO307fTt0aGlzLmFkZFdpZGdldD1mdW5jdGlvbih3aWRnZXQpe3dpZGdldHMu
cHVzaCh3aWRnZXQpO307dGhpcy5mb3JtYXRGbG9hdD1mdW5jdGlvbihzKXt2YXIgaT1wYXJzZUZs
b2F0KHMpO3JldHVybihpc05hTihpKSk/MDppO307dGhpcy5mb3JtYXRJbnQ9ZnVuY3Rpb24ocyl7
dmFyIGk9cGFyc2VJbnQocyk7cmV0dXJuKGlzTmFOKGkpKT8wOmk7fTt0aGlzLmlzRGlnaXQ9ZnVu
Y3Rpb24ocyxjb25maWcpe3JldHVybi9eWy0rXT9cZCokLy50ZXN0KCQudHJpbShzLnJlcGxhY2Uo
L1ssLiddL2csJycpKSk7fTt0aGlzLmNsZWFyVGFibGVCb2R5PWZ1bmN0aW9uKHRhYmxlKXtpZigk
LmJyb3dzZXIubXNpZSl7ZnVuY3Rpb24gZW1wdHkoKXt3aGlsZSh0aGlzLmZpcnN0Q2hpbGQpdGhp
cy5yZW1vdmVDaGlsZCh0aGlzLmZpcnN0Q2hpbGQpO31lbXB0eS5hcHBseSh0YWJsZS50Qm9kaWVz
WzBdKTt9ZWxzZXt0YWJsZS50Qm9kaWVzWzBdLmlubmVySFRNTD0iIjt9fTt9fSk7JC5mbi5leHRl
bmQoe3RhYmxlc29ydGVyOiQudGFibGVzb3J0ZXIuY29uc3RydWN0fSk7dmFyIHRzPSQudGFibGVz
b3J0ZXI7dHMuYWRkUGFyc2VyKHtpZDoidGV4dCIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRydWU7
fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7cmV0dXJuICQudHJpbShzLnRvTG9jYWxlTG93ZXJDYXNlKCkp
O30sdHlwZToidGV4dCJ9KTt0cy5hZGRQYXJzZXIoe2lkOiJkaWdpdCIsaXM6ZnVuY3Rpb24ocyx0
YWJsZSl7dmFyIGM9dGFibGUuY29uZmlnO3JldHVybiAkLnRhYmxlc29ydGVyLmlzRGlnaXQocyxj
KTt9LGZvcm1hdDpmdW5jdGlvbihzKXtyZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChz
KTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoiY3VycmVuY3kiLGlzOmZ1bmN0
aW9uKHMpe3JldHVybi9eW8KjJOKCrD8uXS8udGVzdChzKTt9LGZvcm1hdDpmdW5jdGlvbihzKXty
ZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChzLnJlcGxhY2UobmV3IFJlZ0V4cCgvW8Kj
JOKCrF0vZyksIiIpKTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoiaXBBZGRy
ZXNzIixpczpmdW5jdGlvbihzKXtyZXR1cm4vXlxkezIsM31bXC5dXGR7MiwzfVtcLl1cZHsyLDN9
W1wuXVxkezIsM30kLy50ZXN0KHMpO30sZm9ybWF0OmZ1bmN0aW9uKHMpe3ZhciBhPXMuc3BsaXQo
Ii4iKSxyPSIiLGw9YS5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGl0ZW09YVtpXTtp
ZihpdGVtLmxlbmd0aD09Mil7cis9IjAiK2l0ZW07fWVsc2V7cis9aXRlbTt9fXJldHVybiAkLnRh
Ymxlc29ydGVyLmZvcm1hdEZsb2F0KHIpO30sdHlwZToibnVtZXJpYyJ9KTt0cy5hZGRQYXJzZXIo
e2lkOiJ1cmwiLGlzOmZ1bmN0aW9uKHMpe3JldHVybi9eKGh0dHBzP3xmdHB8ZmlsZSk6XC9cLyQv
LnRlc3Qocyk7fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGpRdWVyeS50cmltKHMucmVwbGFj
ZShuZXcgUmVnRXhwKC8oaHR0cHM/fGZ0cHxmaWxlKTpcL1wvLyksJycpKTt9LHR5cGU6InRleHQi
fSk7dHMuYWRkUGFyc2VyKHtpZDoiaXNvRGF0ZSIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL15cZHs0
fVtcLy1dXGR7MSwyfVtcLy1dXGR7MSwyfSQvLnRlc3Qocyk7fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7
cmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQoKHMhPSIiKT9uZXcgRGF0ZShzLnJlcGxh
Y2UobmV3IFJlZ0V4cCgvLS9nKSwiLyIpKS5nZXRUaW1lKCk6IjAiKTt9LHR5cGU6Im51bWVyaWMi
fSk7dHMuYWRkUGFyc2VyKHtpZDoicGVyY2VudCIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL1wlJC8u
dGVzdCgkLnRyaW0ocykpO30sZm9ybWF0OmZ1bmN0aW9uKHMpe3JldHVybiAkLnRhYmxlc29ydGVy
LmZvcm1hdEZsb2F0KHMucmVwbGFjZShuZXcgUmVnRXhwKC8lL2cpLCIiKSk7fSx0eXBlOiJudW1l
cmljIn0pO3RzLmFkZFBhcnNlcih7aWQ6InVzTG9uZ0RhdGUiLGlzOmZ1bmN0aW9uKHMpe3JldHVy
biBzLm1hdGNoKG5ldyBSZWdFeHAoL15bQS1aYS16XXszLDEwfVwuPyBbMC05XXsxLDJ9LCAoWzAt
OV17NH18Jz9bMC05XXsyfSkgKChbMC0yXT9bMC05XTpbMC01XVswLTldKXwoWzAtMV0/WzAtOV06
WzAtNV1bMC05XVxzKEFNfFBNKSkpJC8pKTt9LGZvcm1hdDpmdW5jdGlvbihzKXtyZXR1cm4gJC50
YWJsZXNvcnRlci5mb3JtYXRGbG9hdChuZXcgRGF0ZShzKS5nZXRUaW1lKCkpO30sdHlwZToibnVt
ZXJpYyJ9KTt0cy5hZGRQYXJzZXIoe2lkOiJzaG9ydERhdGUiLGlzOmZ1bmN0aW9uKHMpe3JldHVy
bi9cZHsxLDJ9W1wvXC1dXGR7MSwyfVtcL1wtXVxkezIsNH0vLnRlc3Qocyk7fSxmb3JtYXQ6ZnVu
Y3Rpb24ocyx0YWJsZSl7dmFyIGM9dGFibGUuY29uZmlnO3M9cy5yZXBsYWNlKC9cLS9nLCIvIik7
aWYoYy5kYXRlRm9ybWF0PT0idXMiKXtzPXMucmVwbGFjZSgvKFxkezEsMn0pW1wvXC1dKFxkezEs
Mn0pW1wvXC1dKFxkezR9KS8sIiQzLyQxLyQyIik7fWVsc2UgaWYoYy5kYXRlRm9ybWF0PT0idWsi
KXtzPXMucmVwbGFjZSgvKFxkezEsMn0pW1wvXC1dKFxkezEsMn0pW1wvXC1dKFxkezR9KS8sIiQz
LyQyLyQxIik7fWVsc2UgaWYoYy5kYXRlRm9ybWF0PT0iZGQvbW0veXkifHxjLmRhdGVGb3JtYXQ9
PSJkZC1tbS15eSIpe3M9cy5yZXBsYWNlKC8oXGR7MSwyfSlbXC9cLV0oXGR7MSwyfSlbXC9cLV0o
XGR7Mn0pLywiJDEvJDIvJDMiKTt9cmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQobmV3
IERhdGUocykuZ2V0VGltZSgpKTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoi
dGltZSIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL14oKFswLTJdP1swLTldOlswLTVdWzAtOV0pfChb
MC0xXT9bMC05XTpbMC01XVswLTldXHMoYW18cG0pKSkkLy50ZXN0KHMpO30sZm9ybWF0OmZ1bmN0
aW9uKHMpe3JldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KG5ldyBEYXRlKCIyMDAwLzAx
LzAxICIrcykuZ2V0VGltZSgpKTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoi
bWV0YWRhdGEiLGlzOmZ1bmN0aW9uKHMpe3JldHVybiBmYWxzZTt9LGZvcm1hdDpmdW5jdGlvbihz
LHRhYmxlLGNlbGwpe3ZhciBjPXRhYmxlLmNvbmZpZyxwPSghYy5wYXJzZXJNZXRhZGF0YU5hbWUp
Pydzb3J0VmFsdWUnOmMucGFyc2VyTWV0YWRhdGFOYW1lO3JldHVybiAkKGNlbGwpLm1ldGFkYXRh
KClbcF07fSx0eXBlOiJudW1lcmljIn0pO3RzLmFkZFdpZGdldCh7aWQ6InplYnJhIixmb3JtYXQ6
ZnVuY3Rpb24odGFibGUpe2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7dmFyIHRpbWU9bmV3IERhdGUo
KTt9dmFyICR0cixyb3c9LTEsb2RkOyQoInRyOnZpc2libGUiLHRhYmxlLnRCb2RpZXNbMF0pLmVh
Y2goZnVuY3Rpb24oaSl7JHRyPSQodGhpcyk7aWYoISR0ci5oYXNDbGFzcyh0YWJsZS5jb25maWcu
Y3NzQ2hpbGRSb3cpKXJvdysrO29kZD0ocm93JTI9PTApOyR0ci5yZW1vdmVDbGFzcyh0YWJsZS5j
b25maWcud2lkZ2V0WmVicmEuY3NzW29kZD8wOjFdKS5hZGRDbGFzcyh0YWJsZS5jb25maWcud2lk
Z2V0WmVicmEuY3NzW29kZD8xOjBdKX0pO2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7JC50YWJsZXNv
cnRlci5iZW5jaG1hcmsoIkFwcGx5aW5nIFplYnJhIHdpZGdldCIsdGltZSk7fX19KTt9KShqUXVl
cnkpO18QD3RleHQvamF2YXNjcmlwdNQFBgcIGBkaG18QSGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rl
di9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGljcy5qc08RAkJicGxp
c3QwMNQBAgMEBQY1NlgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagqwcIHyUm
LRcuLzAxVSRudWxs2wkKCwwNDg8QERITFBUWFxgZGhscHR5SJDNWJGNsYXNzUiQ2UiQxUiQ5UiQ0
UiQ3UiQyUiQ1UiQwUiQ4gAKACoAHEACACYAFgAAQB4AGEAiACNMgCiEaIyRXTlMuYmFzZVtOUy5y
ZWxhdGl2ZYAAgASAA18QSGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFu
Y2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGljcy5qc9InKCkqWiRjbGFzc25hbWVYJGNsYXNzZXNV
TlNVUkyiKyxVTlNVUkxYTlNPYmplY3QjQbnDTYJHRa5fEA90ZXh0L2phdmFzY3JpcHQRIvkjf+//
///////SJygyM11OU1VSTFJlc3BvbnNlojQsXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVkQXJjaGl2
ZXLRNzhfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBDAEkAYABjAGoAbQBw
AHMAdgB5AHwAfwCCAIUAhwCJAIsAjQCPAJEAkwCVAJcAmQCbAKIAqgC2ALgAugC8AQcBDAEXASAB
JgEpAS8BOAFBAVMBVgFfAWQBcgF1AYMBlQGYAa4AAAAAAAACAQAAAAAAAAA5AAAAAAAAAAAAAAAA
AAABsE8RIvkvKgogKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCiAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwogKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCiAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCiAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwogKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgogKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQogKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCiAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICov
Cgp2YXIgU3RhdGlzdGljcyA9IG5ldyAoZnVuY3Rpb24gKCkgewoKICAgIHRoaXMubWF4ID0gZnVu
Y3Rpb24gKHZhbHVlcykgewogICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCB2YWx1
ZXMpOwogICAgfQoKICAgIHRoaXMubWluID0gZnVuY3Rpb24gKHZhbHVlcykgewogICAgICAgIHJl
dHVybiBNYXRoLm1pbi5hcHBseShNYXRoLCB2YWx1ZXMpOwogICAgfQoKICAgIHRoaXMuc3VtID0g
ZnVuY3Rpb24gKHZhbHVlcykgewogICAgICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9u
IChhLCBiKSB7IHJldHVybiBhICsgYjsgfSwgMCk7CiAgICB9CgogICAgdGhpcy5zcXVhcmVTdW0g
PSBmdW5jdGlvbiAodmFsdWVzKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoZnVuY3Rp
b24gKHN1bSwgdmFsdWUpIHsgcmV0dXJuIHN1bSArIHZhbHVlICogdmFsdWU7fSwgMCk7CiAgICB9
CgogICAgLy8gV2l0aCBzdW0gYW5kIHN1bSBvZiBzcXVhcmVzLCB3ZSBjYW4gY29tcHV0ZSB0aGUg
c2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBPKDEpLgogICAgLy8gU2VlIGh0dHBzOi8vcm5p
d2EuY29tLzIwMTItMTEtMTAvc2FtcGxlLXN0YW5kYXJkLWRldmlhdGlvbi1pbi10ZXJtcy1vZi1z
dW0tYW5kLXNxdWFyZS1zdW0tb2Ytc2FtcGxlcy8KICAgIHRoaXMuc2FtcGxlU3RhbmRhcmREZXZp
YXRpb24gPSBmdW5jdGlvbiAobnVtYmVyT2ZTYW1wbGVzLCBzdW0sIHNxdWFyZVN1bSkgewogICAg
ICAgIGlmIChudW1iZXJPZlNhbXBsZXMgPCAyKQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICByZXR1cm4gTWF0aC5zcXJ0KHNxdWFyZVN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKQogICAg
ICAgICAgICAtIHN1bSAqIHN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKSAvIG51bWJlck9mU2Ft
cGxlcyk7CiAgICB9CgogICAgdGhpcy5zdXBwb3J0ZWRDb25maWRlbmNlTGV2ZWxzID0gZnVuY3Rp
b24gKCkgewogICAgICAgIHZhciBzdXBwb3J0ZWRMZXZlbHMgPSBbXTsKICAgICAgICBmb3IgKHZh
ciBxdWFudGlsZSBpbiB0RGlzdHJpYnV0aW9uSW52ZXJzZUNERikKICAgICAgICAgICAgc3VwcG9y
dGVkTGV2ZWxzLnB1c2goKDEgLSAoMSAtIHF1YW50aWxlKSAqIDIpLnRvRml4ZWQoMikpOwogICAg
ICAgIHJldHVybiBzdXBwb3J0ZWRMZXZlbHM7CiAgICB9CgogICAgLy8gQ29tcHV0ZXMgdGhlIGRl
bHRhIGQgcy50LiAobWVhbiAtIGQsIG1lYW4gKyBkKSBpcyB0aGUgY29uZmlkZW5jZSBpbnRlcnZh
bCB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlkZW5jZSBsZXZlbCBpbiBPKDEpLgogICAgdGhpcy5j
b25maWRlbmNlSW50ZXJ2YWxEZWx0YSA9IGZ1bmN0aW9uIChjb25maWRlbmNlTGV2ZWwsIG51bWJl
ck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pIHsKICAgICAgICB2YXIgcHJvYmFiaWxpdHkgPSAo
MSAtICgxIC0gY29uZmlkZW5jZUxldmVsKSAvIDIpOwogICAgICAgIGlmICghKHByb2JhYmlsaXR5
IGluIHREaXN0cmlidXRpb25JbnZlcnNlQ0RGKSkgewogICAgICAgICAgICB0aHJvdyAnV2Ugb25s
eSBzdXBwb3J0ICcgKyB0aGlzLnN1cHBvcnRlZENvbmZpZGVuY2VMZXZlbHMoKS5tYXAoCiAgICAg
ICAgICAgICAgICBmdW5jdGlvbiAobGV2ZWwpIHsgcmV0dXJuIGxldmVsICogMTAwICsgJyUnOyB9
ICkuam9pbignLCAnKSArICcgY29uZmlkZW5jZSBpbnRlcnZhbHMuJzsKICAgICAgICB9CiAgICAg
ICAgaWYgKG51bWJlck9mU2FtcGxlcyAtIDIgPCAwKQogICAgICAgICAgICByZXR1cm4gTmFOOwoK
ICAgICAgICB2YXIgY2RmRm9yUHJvYmFiaWxpdHkgPSB0RGlzdHJpYnV0aW9uSW52ZXJzZUNERltw
cm9iYWJpbGl0eV07CiAgICAgICAgdmFyIGRlZ3JlZXNPZkZyZWVkb20gPSBudW1iZXJPZlNhbXBs
ZXMgLSAxOwogICAgICAgIGlmIChkZWdyZWVzT2ZGcmVlZG9tID4gY2RmRm9yUHJvYmFiaWxpdHku
bGVuZ3RoKQogICAgICAgICAgICB0aHJvdyAnV2Ugb25seSBzdXBwb3J0IHVwIHRvICcgKyBkZWx0
YXMubGVuZ3RoICsgJyBkZWdyZWVzIG9mIGZyZWVkb20nOwoKICAgICAgICAvLyB0RGlzdHJpYnV0
aW9uUXVhbnRpbGUoZGVncmVlc09mRnJlZWRvbSwgY29uZmlkZW5jZUxldmVsKSAqIHNhbXBsZVN0
YW5kYXJkRGV2aWF0aW9uIC8gc3FydChudW1iZXJPZlNhbXBsZXMpICogUy9zcXJ0KG51bWJlck9m
U2FtcGxlcykKICAgICAgICB2YXIgcXVhbnRpbGUgPSBjZGZGb3JQcm9iYWJpbGl0eVtkZWdyZWVz
T2ZGcmVlZG9tIC0gMV07IC8vIFRoZSBmaXJzdCBlbnRyeSBpcyBmb3IgdGhlIG9uZSBkZWdyZWUg
b2YgZnJlZWRvbS4KICAgICAgICByZXR1cm4gcXVhbnRpbGUgKiB0aGlzLnNhbXBsZVN0YW5kYXJk
RGV2aWF0aW9uKG51bWJlck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pIC8gTWF0aC5zcXJ0KG51
bWJlck9mU2FtcGxlcyk7CiAgICB9CgogICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWwgPSBmdW5j
dGlvbiAodmFsdWVzLCBwcm9iYWJpbGl0eSkgewogICAgICAgIHZhciBzdW0gPSB0aGlzLnN1bSh2
YWx1ZXMpOwogICAgICAgIHZhciBtZWFuID0gc3VtIC8gdmFsdWVzLmxlbmd0aDsKICAgICAgICB2
YXIgZGVsdGEgPSB0aGlzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKHByb2JhYmlsaXR5IHx8IDAu
OTUsIHZhbHVlcy5sZW5ndGgsIHN1bSwgdGhpcy5zcXVhcmVTdW0odmFsdWVzKSk7CiAgICAgICAg
cmV0dXJuIFttZWFuIC0gZGVsdGEsIG1lYW4gKyBkZWx0YV07CiAgICB9CgogICAgLy8gU2VlIGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3R1ZGVudCdzX3QtZGlzdHJpYnV0aW9uI1RhYmxl
X29mX3NlbGVjdGVkX3ZhbHVlcwogICAgLy8gVGhpcyB0YWJsZSBjb250YWlucyBvbmUgc2lkZWQg
KGEuay5hLiB0YWlsKSB2YWx1ZXMuCiAgICB2YXIgdERpc3RyaWJ1dGlvbkludmVyc2VDREYgPSB7
CiAgICAgICAgMC45OiBbCiAgICAgICAgICAgIDMuMDc3Njg0LCAxLjg4NTYxOCwgMS42Mzc3NDQs
IDEuNTMzMjA2LCAxLjQ3NTg4NCwgMS40Mzk3NTYsIDEuNDE0OTI0LCAxLjM5NjgxNSwgMS4zODMw
MjksIDEuMzcyMTg0LAogICAgICAgICAgICAxLjM2MzQzMCwgMS4zNTYyMTcsIDEuMzUwMTcxLCAx
LjM0NTAzMCwgMS4zNDA2MDYsIDEuMzM2NzU3LCAxLjMzMzM3OSwgMS4zMzAzOTEsIDEuMzI3NzI4
LCAxLjMyNTM0MSwKICAgICAgICAgICAgMS4zMjMxODgsIDEuMzIxMjM3LCAxLjMxOTQ2MCwgMS4z
MTc4MzYsIDEuMzE2MzQ1LCAxLjMxNDk3MiwgMS4zMTM3MDMsIDEuMzEyNTI3LCAxLjMxMTQzNCwg
MS4zMTA0MTUsCiAgICAgICAgICAgIDEuMzA5NDY0LCAxLjMwODU3MywgMS4zMDc3MzcsIDEuMzA2
OTUyLCAxLjMwNjIxMiwgMS4zMDU1MTQsIDEuMzA0ODU0LCAxLjMwNDIzMCwgMS4zMDM2MzksIDEu
MzAzMDc3LAogICAgICAgICAgICAxLjMwMjU0MywgMS4zMDIwMzUsIDEuMzAxNTUyLCAxLjMwMTA5
MCwgMS4zMDA2NDksIDEuMzAwMjI4LCAxLjI5OTgyNSwgMS4yOTk0MzksIDEuMjk5MDY5LCAxLjI5
ODcxNCwKCiAgICAgICAgICAgIDEuMjk4MzczLCAxLjI5ODA0NSwgMS4yOTc3MzAsIDEuMjk3NDI2
LCAxLjI5NzEzNCwgMS4yOTY4NTMsIDEuMjk2NTgxLCAxLjI5NjMxOSwgMS4yOTYwNjYsIDEuMjk1
ODIxLAogICAgICAgICAgICAxLjI5NTU4NSwgMS4yOTUzNTYsIDEuMjk1MTM0LCAxLjI5NDkyMCwg
MS4yOTQ3MTIsIDEuMjk0NTExLCAxLjI5NDMxNSwgMS4yOTQxMjYsIDEuMjkzOTQyLCAxLjI5Mzc2
MywKICAgICAgICAgICAgMS4yOTM1ODksIDEuMjkzNDIxLCAxLjI5MzI1NiwgMS4yOTMwOTcsIDEu
MjkyOTQxLCAxLjI5Mjc5MCwgMS4yOTI2NDMsIDEuMjkyNTAwLCAxLjI5MjM2MCwgMS4yOTIyMjQs
CiAgICAgICAgICAgIDEuMjkyMDkxLCAxLjI5MTk2MSwgMS4yOTE4MzUsIDEuMjkxNzExLCAxLjI5
MTU5MSwgMS4yOTE0NzMsIDEuMjkxMzU4LCAxLjI5MTI0NiwgMS4yOTExMzYsIDEuMjkxMDI5LAog
ICAgICAgICAgICAxLjI5MDkyNCwgMS4yOTA4MjEsIDEuMjkwNzIxLCAxLjI5MDYyMywgMS4yOTA1
MjcsIDEuMjkwNDMyLCAxLjI5MDM0MCwgMS4yOTAyNTAsIDEuMjkwMTYxLCAxLjI5MDA3NV0sCiAg
ICAgICAgMC45NTogWwogICAgICAgICAgICA2LjMxMzc1MiwgMi45MTk5ODYsIDIuMzUzMzYzLCAy
LjEzMTg0NywgMi4wMTUwNDgsIDEuOTQzMTgwLCAxLjg5NDU3OSwgMS44NTk1NDgsIDEuODMzMTEz
LCAxLjgxMjQ2MSwKICAgICAgICAgICAgMS43OTU4ODUsIDEuNzgyMjg4LCAxLjc3MDkzMywgMS43
NjEzMTAsIDEuNzUzMDUwLCAxLjc0NTg4NCwgMS43Mzk2MDcsIDEuNzM0MDY0LCAxLjcyOTEzMywg
MS43MjQ3MTgsCiAgICAgICAgICAgIDEuNzIwNzQzLCAxLjcxNzE0NCwgMS43MTM4NzIsIDEuNzEw
ODgyLCAxLjcwODE0MSwgMS43MDU2MTgsIDEuNzAzMjg4LCAxLjcwMTEzMSwgMS42OTkxMjcsIDEu
Njk3MjYxLAogICAgICAgICAgICAxLjY5NTUxOSwgMS42OTM4ODksIDEuNjkyMzYwLCAxLjY5MDky
NCwgMS42ODk1NzIsIDEuNjg4Mjk4LCAxLjY4NzA5NCwgMS42ODU5NTQsIDEuNjg0ODc1LCAxLjY4
Mzg1MSwKICAgICAgICAgICAgMS42ODI4NzgsIDEuNjgxOTUyLCAxLjY4MTA3MSwgMS42ODAyMzAs
IDEuNjc5NDI3LCAxLjY3ODY2MCwgMS42Nzc5MjcsIDEuNjc3MjI0LCAxLjY3NjU1MSwgMS42NzU5
MDUsCgogICAgICAgICAgICAxLjY3NTI4NSwgMS42NzQ2ODksIDEuNjc0MTE2LCAxLjY3MzU2NSwg
MS42NzMwMzQsIDEuNjcyNTIyLCAxLjY3MjAyOSwgMS42NzE1NTMsIDEuNjcxMDkzLCAxLjY3MDY0
OSwKICAgICAgICAgICAgMS42NzAyMTksIDEuNjY5ODA0LCAxLjY2OTQwMiwgMS42NjkwMTMsIDEu
NjY4NjM2LCAxLjY2ODI3MSwgMS42Njc5MTYsIDEuNjY3NTcyLCAxLjY2NzIzOSwgMS42NjY5MTQs
CiAgICAgICAgICAgIDEuNjY2NjAwLCAxLjY2NjI5NCwgMS42NjU5OTYsIDEuNjY1NzA3LCAxLjY2
NTQyNSwgMS42NjUxNTEsIDEuNjY0ODg1LCAxLjY2NDYyNSwgMS42NjQzNzEsIDEuNjY0MTI1LAog
ICAgICAgICAgICAxLjY2Mzg4NCwgMS42NjM2NDksIDEuNjYzNDIwLCAxLjY2MzE5NywgMS42NjI5
NzgsIDEuNjYyNzY1LCAxLjY2MjU1NywgMS42NjIzNTQsIDEuNjYyMTU1LCAxLjY2MTk2MSwKICAg
ICAgICAgICAgMS42NjE3NzEsIDEuNjYxNTg1LCAxLjY2MTQwNCwgMS42NjEyMjYsIDEuNjYxMDUy
LCAxLjY2MDg4MSwgMS42NjA3MTUsIDEuNjYwNTUxLCAxLjY2MDM5MSwgMS42NjAyMzRdLAogICAg
ICAgIDAuOTc1OiBbCiAgICAgICAgICAgIDEyLjcwNjIwNSwgNC4zMDI2NTMsIDMuMTgyNDQ2LCAy
Ljc3NjQ0NSwgMi41NzA1ODIsIDIuNDQ2OTEyLCAyLjM2NDYyNCwgMi4zMDYwMDQsIDIuMjYyMTU3
LCAyLjIyODEzOSwKICAgICAgICAgICAgMi4yMDA5ODUsIDIuMTc4ODEzLCAyLjE2MDM2OSwgMi4x
NDQ3ODcsIDIuMTMxNDUwLCAyLjExOTkwNSwgMi4xMDk4MTYsIDIuMTAwOTIyLCAyLjA5MzAyNCwg
Mi4wODU5NjMsCiAgICAgICAgICAgIDIuMDc5NjE0LCAyLjA3Mzg3MywgMi4wNjg2NTgsIDIuMDYz
ODk5LCAyLjA1OTUzOSwgMi4wNTU1MjksIDIuMDUxODMxLCAyLjA0ODQwNywgMi4wNDUyMzAsIDIu
MDQyMjcyLAogICAgICAgICAgICAyLjAzOTUxMywgMi4wMzY5MzMsIDIuMDM0NTE1LCAyLjAzMjI0
NSwgMi4wMzAxMDgsIDIuMDI4MDk0LCAyLjAyNjE5MiwgMi4wMjQzOTQsIDIuMDIyNjkxLCAyLjAy
MTA3NSwKICAgICAgICAgICAgMi4wMTk1NDEsIDIuMDE4MDgyLCAyLjAxNjY5MiwgMi4wMTUzNjgs
IDIuMDE0MTAzLCAyLjAxMjg5NiwgMi4wMTE3NDEsIDIuMDEwNjM1LCAyLjAwOTU3NSwgMi4wMDg1
NTksCgogICAgICAgICAgICAyLjAwNzU4NCwgMi4wMDY2NDcsIDIuMDA1NzQ2LCAyLjAwNDg3OSwg
Mi4wMDQwNDUsIDIuMDAzMjQxLCAyLjAwMjQ2NSwgMi4wMDE3MTcsIDIuMDAwOTk1LCAyLjAwMDI5
OCwKICAgICAgICAgICAgMS45OTk2MjQsIDEuOTk4OTcyLCAxLjk5ODM0MSwgMS45OTc3MzAsIDEu
OTk3MTM4LCAxLjk5NjU2NCwgMS45OTYwMDgsIDEuOTk1NDY5LCAxLjk5NDk0NSwgMS45OTQ0Mzcs
CiAgICAgICAgICAgIDEuOTkzOTQzLCAxLjk5MzQ2NCwgMS45OTI5OTcsIDEuOTkyNTQzLCAxLjk5
MjEwMiwgMS45OTE2NzMsIDEuOTkxMjU0LCAxLjk5MDg0NywgMS45OTA0NTAsIDEuOTkwMDYzLAog
ICAgICAgICAgICAxLjk4OTY4NiwgMS45ODkzMTksIDEuOTg4OTYwLCAxLjk4ODYxMCwgMS45ODgy
NjgsIDEuOTg3OTM0LCAxLjk4NzYwOCwgMS45ODcyOTAsIDEuOTg2OTc5LCAxLjk4NjY3NSwKICAg
ICAgICAgICAgMS45ODYzNzcsIDEuOTg2MDg2LCAxLjk4NTgwMiwgMS45ODU1MjMsIDEuOTg1MjUx
LCAxLjk4NDk4NCwgMS45ODQ3MjMsIDEuOTg0NDY3LCAxLjk4NDIxNywgMS45ODM5NzJdLAogICAg
ICAgIDAuOTk6IFsKICAgICAgICAgICAgMzEuODIwNTE2LCA2Ljk2NDU1NywgNC41NDA3MDMsIDMu
NzQ2OTQ3LCAzLjM2NDkzMCwgMy4xNDI2NjgsIDIuOTk3OTUyLCAyLjg5NjQ1OSwgMi44MjE0Mzgs
IDIuNzYzNzY5LAogICAgICAgICAgICAyLjcxODA3OSwgMi42ODA5OTgsIDIuNjUwMzA5LCAyLjYy
NDQ5NCwgMi42MDI0ODAsIDIuNTgzNDg3LCAyLjU2NjkzNCwgMi41NTIzODAsIDIuNTM5NDgzLCAy
LjUyNzk3NywKICAgICAgICAgICAgMi41MTc2NDgsIDIuNTA4MzI1LCAyLjQ5OTg2NywgMi40OTIx
NTksIDIuNDg1MTA3LCAyLjQ3ODYzMCwgMi40NzI2NjAsIDIuNDY3MTQwLCAyLjQ2MjAyMSwgMi40
NTcyNjIsCiAgICAgICAgICAgIDIuNDUyODI0LCAyLjQ0ODY3OCwgMi40NDQ3OTQsIDIuNDQxMTUw
LCAyLjQzNzcyMywgMi40MzQ0OTQsIDIuNDMxNDQ3LCAyLjQyODU2OCwgMi40MjU4NDEsIDIuNDIz
MjU3LAogICAgICAgICAgICAyLjQyMDgwMywgMi40MTg0NzAsIDIuNDE2MjUwLCAyLjQxNDEzNCwg
Mi40MTIxMTYsIDIuNDEwMTg4LCAyLjQwODM0NSwgMi40MDY1ODEsIDIuNDA0ODkyLCAyLjQwMzI3
MiwKCiAgICAgICAgICAgIDIuNDAxNzE4LCAyLjQwMDIyNSwgMi4zOTg3OTAsIDIuMzk3NDEwLCAy
LjM5NjA4MSwgMi4zOTQ4MDEsIDIuMzkzNTY4LCAyLjM5MjM3NywgMi4zOTEyMjksIDIuMzkwMTE5
LAogICAgICAgICAgICAyLjM4OTA0NywgMi4zODgwMTEsIDIuMzg3MDA4LCAyLjM4NjAzNywgMi4z
ODUwOTcsIDIuMzg0MTg2LCAyLjM4MzMwMiwgMi4zODI0NDYsIDIuMzgxNjE1LCAyLjM4MDgwNywK
ICAgICAgICAgICAgMi4zODAwMjQsIDIuMzc5MjYyLCAyLjM3ODUyMiwgMi4zNzc4MDIsIDIuMzc3
MTAyLCAyLjM3NjQyMCwgMi4zNzU3NTcsIDIuMzc1MTExLCAyLjM3NDQ4MiwgMi4zNzM4NjgsCiAg
ICAgICAgICAgIDIuMzczMjcwLCAyLjM3MjY4NywgMi4zNzIxMTksIDIuMzcxNTY0LCAyLjM3MTAy
MiwgMi4zNzA0OTMsIDIuMzY5OTc3LCAyLjM2OTQ3MiwgMi4zNjg5NzksIDIuMzY4NDk3LAogICAg
ICAgICAgICAyLjM2ODAyNiwgMi4zNjc1NjYsIDIuMzY3MTE1LCAyLjM2NjY3NCwgMi4zNjYyNDMs
IDIuMzY1ODIxLCAyLjM2NTQwNywgMi4zNjUwMDIsIDIuMzY0NjA2LCAyLjM2NDIxN10KICAgIH07
Cgp9KSgpOwoKaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpIHsKICAgIGZvciAodmFy
IGtleSBpbiBTdGF0aXN0aWNzKQogICAgICAgIG1vZHVsZS5leHBvcnRzW2tleV0gPSBTdGF0aXN0
aWNzW2tleV07Cn0KXxAPdGV4dC9qYXZhc2NyaXB01R0FBwgeHyAhIiNfEBRXZWJSZXNvdXJjZUZy
YW1lTmFtZV8QG1dlYlJlc291cmNlVGV4dEVuY29kaW5nTmFtZVBfEGBmaWxlOi8vL1VzZXJzL3l1
c3VrZS9kZXYvV2ViS2l0L1dlYktpdEJ1aWxkL3BlcmYtcmVncmVzc2lvbi9SZWxlYXNlL1BlcmZv
cm1hbmNlVGVzdHNSZXN1bHRzLmh0bWxPEb6dPCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+Cjx0
aXRsZT5XZWJLaXQgUGVyZm9ybWFuY2UgVGVzdCBSZXN1bHRzPC90aXRsZT4KPHN0eWxlIHR5cGU9
InRleHQvY3NzIj4KCnNlY3Rpb24gewogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBwYWRkaW5n
OiAxMHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoudGltZS1wbG90cyB7CiAgICBwYWRk
aW5nLWxlZnQ6IDI1cHg7Cn0KCi50aW1lLXBsb3RzID4gZGl2IHsKICAgIGRpc3BsYXk6IGlubGlu
ZS1ibG9jazsKICAgIHdpZHRoOiA5MHB4OwogICAgaGVpZ2h0OiA0MHB4OwogICAgbWFyZ2luLXJp
Z2h0OiAxMHB4Owp9CgpzZWN0aW9uIGgxIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZv
bnQtc2l6ZTogMWVtOwp9CgpzZWN0aW9uIC50b29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6ICNmZmNjNjY7CiAgICBi
b3JkZXItcmFkaXVzOiA1cHg7CiAgICBwYWRkaW5nOiAwcHggNXB4Owp9Cgpib2R5IHsKICAgIHBh
ZGRpbmc6IDBweDsKICAgIG1hcmdpbjogMHB4OwogICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7
Cn0KCnRhYmxlIHsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgd2lkdGg6IDEwMCU7Cn0KCnRh
YmxlLCB0ZCwgdGggewogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgIHBhZGRpbmc6
IDVweDsKfQoKdHIuZXZlbiB7CiAgICBiYWNrZ3JvdW5kOiAjZjZmNmY2Owp9Cgp0YWJsZSB0ZCB7
CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwp9Cgp0
aCwgdGQgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY3Vyc29yOiBoYW5kOwp9Cgp0aCB7CiAg
ICBiYWNrZ3JvdW5kOiAjZTZlZWVlOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChs
aW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjQ0LCAyNDQsIDI0NCkpLCB0
byhyZ2IoMjE3LCAyMTcsIDIxNykpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7Cn0KCnRo
OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcgXDI1QjgnOwp9Cgp0aC5oZWFkZXJTb3J0VXA6YWZ0ZXIg
ewogICAgY29udGVudDogJyBcMjVCRSc7Cn0KCnRoLmhlYWRlclNvcnREb3duOmFmdGVyIHsKICAg
IGNvbnRlbnQ6ICcgXDI1QjQnOwp9Cgp0ZC5jb21wYXJpc29uLCB0ZC5yZXN1bHQgewogICAgdGV4
dC1hbGlnbjogcmlnaHQ7Cn0KCnRkLmJldHRlciB7CiAgICBjb2xvcjogIzZjNjsKfQoKdGQud29y
c2UgewogICAgY29sb3I6ICNjNjY7Cn0KCnRkLm1pc3NpbmcgewogICAgdGV4dC1hbGlnbjogY2Vu
dGVyOwp9CgouY2hlY2tib3ggewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgYmFja2dy
b3VuZDogI2VlZTsKICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0
IGJvdHRvbSwgbGVmdCB0b3AsIGZyb20ocmdiKDIyMCwgMjIwLCAyMjApKSwgdG8ocmdiKDIwMCwg
MjAwLCAyMDApKSk7CiAgICBib3JkZXI6IGluc2V0IDFweCAjZGRkOwogICAgYm9yZGVyLXJhZGl1
czogNXB4OwogICAgbWFyZ2luOiAxMHB4OwogICAgZm9udC1zaXplOiBzbWFsbDsKICAgIGN1cnNv
cjogcG9pbnRlcjsKICAgIGN1cnNvcjogaGFuZDsKICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5v
bmU7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNoZWNrYm94IHNwYW4gewogICAgZGlzcGxh
eTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nOiA1cHgg
OHB4OwogICAgYm9yZGVyOiBvdXRzZXQgMXB4IHRyYW5zcGFyZW50Owp9CgouY2hlY2tib3ggLmNo
ZWNrZWQgewogICAgYmFja2dyb3VuZDogI2U2ZWVlZTsKICAgIGJhY2tncm91bmQ6IC13ZWJraXQt
Z3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDI1NSwgMjU1
LCAyNTUpKSwgdG8ocmdiKDIzNSwgMjM1LCAyMzUpKSk7CiAgICBib3JkZXI6IG91dHNldCAxcHgg
I2VlZTsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKfQoKPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4K
PGRpdiBzdHlsZT0icGFkZGluZzogMCAxMHB4OyI+ClJlc3VsdCA8c3BhbiBpZD0idGltZS1tZW1v
cnkiIGNsYXNzPSJjaGVja2JveCI+PHNwYW4gY2xhc3M9ImNoZWNrZWQiPlRpbWU8L3NwYW4+PHNw
YW4+TWVtb3J5PC9zcGFuPjwvc3Bhbj4KUmVmZXJlbmNlIDxzcGFuIGlkPSJyZWZlcmVuY2UiIGNs
YXNzPSJjaGVja2JveCI+PHNwYW4gdmFsdWU9IjAiIGNsYXNzPSJjaGVja2VkIj5yMTczNTU3PC9z
cGFuPjwvc3Bhbj4KPHNwYW4gdGl0bGU9IkNvbmZpZGVuY2UgSW50ZXJ2YWwgRGVsdGEiPkNJzpQ8
L3NwYW4+IDxzcGFuIGlkPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgY2xhc3M9ImNoZWNrYm94
Ij48c3BhbiBjbGFzcz0iY2hlY2tlZCI+U2hvdzwvc3Bhbj48c3Bhbj5IaWRlPC9zcGFuPjwvc3Bh
bj4KPC9kaXY+Cjx0YWJsZSBpZD0iY29udGFpbmVyIj48dGhlYWQ+PHRyPjx0aCBjbGFzcz0iaGVh
ZGVyIj5UZXN0PC90aD48dGggY2xhc3M9ImhlYWRlciI+VW5pdDwvdGg+PHRoIGNvbHNwYW49IjIi
IGNsYXNzPSJ7c29ydGVyOiAnY29tcGFyaXNvbid9IGhlYWRlciI+cjE3MzU1NzwvdGg+PC90cj48
L3RoZWFkPjx0Ym9keT48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9j
c3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gI3NjZW5lMSAjc3BlZWNoMTpSdW5zPC90ZD48dGQgY2xh
c3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMDcs
IG1pbj0yMS4zMiwgbWF4PTIxLjgzCnNsb3BlPS0wLjAwLCBSXjI9MC4wMCI+MjEuNjA8L3RkPjx0
ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjA3LCBtaW49MjEu
MzIsIG1heD0yMS44MwpzbG9wZT0tMC4wMCwgUl4yPTAuMDAiPsKxIDAuMzMlPC90ZD48L3RyPjx0
ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkv
alF1ZXJ5IC0gI3NwZWVjaDU6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+
PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0yMC40NywgbWluPTEwMjkuNTcsIG1heD0xMTY5
Ljc2CnNsb3BlPS00Ljg0LCBSXjI9MC40MyI+MTEwNy4xMjwvdGQ+PHRkIGNsYXNzPSJjb25maWRl
bmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTIwLjQ3LCBtaW49MTAyOS41NywgbWF4PTExNjku
NzYKc2xvcGU9LTQuODQsIFJeMj0wLjQzIj7CsSAxLjg1JTwvdGQ+PC90cj48dHIgY2xhc3M9Im9k
ZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gKjpS
dW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPnJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRp
dGxlPSLPgz00NS4xMCwgbWluPTI4NjMuMDAsIG1heD0zMTM0LjAwCnNsb3BlPTMuNDAsIFJeMj0w
LjA0Ij4zMDA1LjMwPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRs
ZT0iz4M9NDUuMTAsIG1pbj0yODYzLjAwLCBtYXg9MzEzNC4wMApzbG9wZT0zLjQwLCBSXjI9MC4w
NCI+wrEgMS41MCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9InRlc3QiPi9E
cm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSAuZGlhbG9nOlJ1bnM8L3RkPjx0ZCBjbGFz
cz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9My45OSwg
bWluPTMzMS43NywgbWF4PTM2MS41MQpzbG9wZT0tMC4wNSwgUl4yPTAuMDAiPjM0NS42NTwvdGQ+
PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTMuOTksIG1pbj0z
MzEuNzcsIG1heD0zNjEuNTEKc2xvcGU9LTAuMDUsIFJeMj0wLjAwIj7CsSAxLjE1JTwvdGQ+PC90
cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVl
cnkvalF1ZXJ5IC0gYm9keSBkaXY6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwv
dGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjA1LCBtaW49MTguNjYsIG1heD0xOS4x
MQpzbG9wZT0tMC4wMCwgUl4yPTAuMDIiPjE4Ljg2PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wNSwgbWluPTE4LjY2LCBtYXg9MTkuMTEKc2xvcGU9
LTAuMDAsIFJeMj0wLjAyIj7CsSAwLjI2JTwvdGQ+PC90cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBj
bGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGJvZHk6UnVuczwv
dGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxl
PSLPgz01LjE1LCBtaW49MzU2LjIyLCBtYXg9Mzg4Ljk5CnNsb3BlPTAuMDYsIFJeMj0wLjAwIj4z
NjkuODY8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz01
LjE1LCBtaW49MzU2LjIyLCBtYXg9Mzg4Ljk5CnNsb3BlPTAuMDYsIFJeMj0wLjAwIj7CsSAxLjM5
JTwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3Nx
dWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2ICNzcGVlY2g1OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5p
dCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4wOSwgbWluPTIx
LjUxLCBtYXg9MjIuMTUKc2xvcGU9MC4wMSwgUl4yPTAuMDgiPjIxLjc5PC90ZD48dGQgY2xhc3M9
ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wOSwgbWluPTIxLjUxLCBtYXg9
MjIuMTUKc2xvcGU9MC4wMSwgUl4yPTAuMDgiPsKxIDAuNDElPC90ZD48L3RyPjx0ciBjbGFzcz0i
ZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0g
ZGl2ICsgZGl2OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFz
cz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xOSwgbWluPTIwLjIxLCBtYXg9MjEuOTQKc2xvcGU9MC4w
MywgUl4yPTAuMTUiPjIxLjM1PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
IiB0aXRsZT0iz4M9MC4xOSwgbWluPTIwLjIxLCBtYXg9MjEuOTQKc2xvcGU9MC4wMywgUl4yPTAu
MTUiPsKxIDAuOTAlPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9E
cm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYgLmRpYWxvZzpSdW5zPC90ZD48dGQg
Y2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAu
MDksIG1pbj0yMS40OSwgbWF4PTIyLjEzCnNsb3BlPS0wLjAyLCBSXjI9MC4zOSI+MjEuODM8L3Rk
Pjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjA5LCBtaW49
MjEuNDksIG1heD0yMi4xMwpzbG9wZT0tMC4wMiwgUl4yPTAuMzkiPsKxIDAuMzklPC90ZD48L3Ry
Pjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVl
cnkvalF1ZXJ5IC0gZGl2ICZndDsgZGl2OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5z
L3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4wNiwgbWluPTE5LjkxLCBtYXg9
MjAuMjkKc2xvcGU9MC4wMCwgUl4yPTAuMDIiPjIwLjA5PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVu
Y2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wNiwgbWluPTE5LjkxLCBtYXg9MjAuMjkKc2xv
cGU9MC4wMCwgUl4yPTAuMDIiPsKxIDAuMjglPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQg
Y2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYgZGl2IGRp
djpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3Vs
dCIgdGl0bGU9Is+DPTAuMTcsIG1pbj0yMC41NywgbWF4PTIxLjc4CnNsb3BlPTAuMDEsIFJeMj0w
LjA0Ij4yMS4yMjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9
Is+DPTAuMTcsIG1pbj0yMC41NywgbWF4PTIxLjc4CnNsb3BlPTAuMDEsIFJeMj0wLjA0Ij7CsSAw
LjgxJTwvdGQ+PC90cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8v
Y3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdiBkaXY6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0
Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjExLCBtaW49MTku
NTEsIG1heD0yMC4yOApzbG9wZT0wLjAzLCBSXjI9MC42MyI+MjAuMDI8L3RkPjx0ZCBjbGFzcz0i
Y29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjExLCBtaW49MTkuNTEsIG1heD0y
MC4yOApzbG9wZT0wLjAzLCBSXjI9MC42MyI+wrEgMC41MyUgPHNwYW4gY2xhc3M9InJlZ3Jlc3Np
b24td2FybmluZyIgdGl0bGU9IkRldGVjdGVkIGEgdGltZSBkZXBlbmRlbmN5IHdpdGggc2xvcGU9
MC4wMywgUl4yPTAuNjMiPjxzdmcgdmlld0JveD0iMCAwIDEwMCAxMDAiIHN0eWxlPSJ3aWR0aDog
MThweDsgaGVpZ2h0OiAxOHB4OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyIgdmVyc2lvbj0iMS4x
Ij48cG9seWdvbiBmaWxsPSJyZWQiIHBvaW50cz0iNTAsMTAgOTAsODAgMTAsODAgNTAsMTAiIHN0
cm9rZT0icmVkIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48L3Bv
bHlnb24+PHBvbHlnb24gZmlsbD0id2hpdGUiIHBvaW50cz0iNDcsMzAgNDgsMjksIDUwLCAyOC43
LCA1MiwyOSA1MywzMCA1MCw2MCIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ry
b2tlLWxpbmVqb2luPSJyb3VuZCI+PC9wb2x5Z29uPjxjaXJjbGUgY3g9IjUwIiBjeT0iNzMiIHI9
IjYiIGZpbGw9IndoaXRlIj48L2NpcmNsZT48L3N2Zz4gPC9zcGFuPjwvdGQ+PC90cj48dHIgY2xh
c3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5
IC0gZGl2IH4gZGl2OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBj
bGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xMSwgbWluPTE4LjEzLCBtYXg9MTkuMDIKc2xvcGU9
MC4wNCwgUl4yPTAuODUiPjE4LjYwPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERl
bHRhIiB0aXRsZT0iz4M9MC4xMSwgbWluPTE4LjEzLCBtYXg9MTkuMDIKc2xvcGU9MC4wNCwgUl4y
PTAuODUiPsKxIDAuNTclIDxzcGFuIGNsYXNzPSJyZWdyZXNzaW9uLXdhcm5pbmciIHRpdGxlPSJE
ZXRlY3RlZCBhIHRpbWUgZGVwZW5kZW5jeSB3aXRoIHNsb3BlPTAuMDQsIFJeMj0wLjg1Ij48c3Zn
IHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBzdHlsZT0id2lkdGg6IDE4cHg7IGhlaWdodDogMThweDsg
dmVydGljYWwtYWxpZ246IGJvdHRvbTsiIHZlcnNpb249IjEuMSI+PHBvbHlnb24gZmlsbD0icmVk
IiBwb2ludHM9IjUwLDEwIDkwLDgwIDEwLDgwIDUwLDEwIiBzdHJva2U9InJlZCIgc3Ryb2tlLXdp
ZHRoPSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PC9wb2x5Z29uPjxwb2x5Z29uIGZpbGw9
IndoaXRlIiBwb2ludHM9IjQ3LDMwIDQ4LDI5LCA1MCwgMjguNywgNTIsMjkgNTMsMzAgNTAsNjAi
IHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9pbj0icm91bmQi
PjwvcG9seWdvbj48Y2lyY2xlIGN4PSI1MCIgY3k9IjczIiByPSI2IiBmaWxsPSJ3aGl0ZSI+PC9j
aXJjbGU+PC9zdmc+IDwvc3Bhbj48L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9
InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYjc2NlbmUxIGRpdi5k
aWFsb2cgZGl2OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFz
cz0icmVzdWx0IiB0aXRsZT0iz4M9MC4wOCwgbWluPTIxLjQ5LCBtYXg9MjIuMTEKc2xvcGU9MC4w
MiwgUl4yPTAuNTEiPjIxLjgwPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
IiB0aXRsZT0iz4M9MC4wOCwgbWluPTIxLjQ5LCBtYXg9MjIuMTEKc2xvcGU9MC4wMiwgUl4yPTAu
NTEiPsKxIDAuMzklPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9E
cm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYjc3BlZWNoNTpSdW5zPC90ZD48dGQg
Y2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAu
MTYsIG1pbj0yMS40MSwgbWF4PTIyLjUzCnNsb3BlPS0wLjAwLCBSXjI9MC4wMCI+MjIuMDc8L3Rk
Pjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE2LCBtaW49
MjEuNDEsIG1heD0yMi41MwpzbG9wZT0tMC4wMCwgUl4yPTAuMDAiPsKxIDAuNzQlPC90ZD48L3Ry
Pjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVl
cnkvalF1ZXJ5IC0gZGl2LCBhLCBzcGFuOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+cnVucy9z
PC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTI1LjY3LCBtaW49NjkwMi4wMCwgbWF4
PTcxMTMuMDAKc2xvcGU9NS4xMywgUl4yPTAuMzEiPjY5OTkuOTQ8L3RkPjx0ZCBjbGFzcz0iY29u
ZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0yNS42NywgbWluPTY5MDIuMDAsIG1heD03
MTEzLjAwCnNsb3BlPTUuMTMsIFJeMj0wLjMxIj7CsSAwLjM3JTwvdGQ+PC90cj48dHIgY2xhc3M9
Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0g
ZGl2LCBkaXYsIGRpdjpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPnJ1bnMvczwvdGQ+PHRkIGNs
YXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0yNy4zNiwgbWluPTgzOTcuMDAsIG1heD04NTg2LjAwCnNs
b3BlPTQuNTgsIFJeMj0wLjIxIj44NTExLjg1PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhIiB0aXRsZT0iz4M9MjcuMzYsIG1pbj04Mzk3LjAwLCBtYXg9ODU4Ni4wMApzbG9w
ZT00LjU4LCBSXjI9MC4yMSI+wrEgMC4zMiU8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQg
Y2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYuY2hhcmFj
dGVyLCBkaXYuZGlhbG9nOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0
ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4wMywgbWluPTExLjQxLCBtYXg9MTEuNjMKc2xv
cGU9MC4wMCwgUl4yPTAuMDYiPjExLjUzPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZh
bERlbHRhIiB0aXRsZT0iz4M9MC4wMywgbWluPTExLjQxLCBtYXg9MTEuNjMKc2xvcGU9MC4wMCwg
Ul4yPTAuMDYiPsKxIDAuMjQlPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRl
c3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYuZGlhbG9nOlJ1bnM8L3Rk
Pjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0i
z4M9MC4xMywgbWluPTIxLjk0LCBtYXg9MjIuODgKc2xvcGU9MC4wMiwgUl4yPTAuMTQiPjIyLjM3
PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xMywg
bWluPTIxLjk0LCBtYXg9MjIuODgKc2xvcGU9MC4wMiwgUl4yPTAuMTQiPsKxIDAuNTYlPC90ZD48
L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1q
cXVlcnkvalF1ZXJ5IC0gZGl2LnNjZW5lIGRpdi5kaWFsb2c6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1
bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjExLCBtaW49
MjEuNjAsIG1heD0yMi4zOApzbG9wZT0tMC4wMSwgUl4yPTAuMTEiPjIyLjA0PC90ZD48dGQgY2xh
c3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xMSwgbWluPTIxLjYwLCBt
YXg9MjIuMzgKc2xvcGU9LTAuMDEsIFJeMj0wLjExIj7CsSAwLjUwJTwvdGQ+PC90cj48dHIgY2xh
c3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5
IC0gZGl2OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0i
cmVzdWx0IiB0aXRsZT0iz4M9MS4yNywgbWluPTEyOS41MCwgbWF4PTEzOS44NgpzbG9wZT0wLjE2
LCBSXjI9MC4xMiI+MTM0LjUxPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
IiB0aXRsZT0iz4M9MS4yNywgbWluPTEyOS41MCwgbWF4PTEzOS44NgpzbG9wZT0wLjE2LCBSXjI9
MC4xMiI+wrEgMC45NCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9InRlc3Qi
Pi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXY6Zmlyc3QtY2hpbGQ6UnVuczwv
dGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxl
PSLPgz0wLjA5LCBtaW49MjEuMjgsIG1heD0yMS45OApzbG9wZT0tMC4wMCwgUl4yPTAuMDEiPjIx
LjYyPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4w
OSwgbWluPTIxLjI4LCBtYXg9MjEuOTgKc2xvcGU9LTAuMDAsIFJeMj0wLjAxIj7CsSAwLjQxJTwv
dGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVy
eS1qcXVlcnkvalF1ZXJ5IC0gZGl2Omxhc3QtY2hpbGQ6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0
Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjE5LCBtaW49MjAu
MzYsIG1heD0yMi4wNQpzbG9wZT0wLjAxLCBSXjI9MC4wMSI+MjEuNTc8L3RkPjx0ZCBjbGFzcz0i
Y29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE5LCBtaW49MjAuMzYsIG1heD0y
Mi4wNQpzbG9wZT0wLjAxLCBSXjI9MC4wMSI+wrEgMC45MCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJl
dmVuIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBk
aXY6bnRoLWNoaWxkKDJuKTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPnJ1bnMvczwvdGQ+PHRk
IGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0xMy41NywgbWluPTU5NDAuMDAsIG1heD02MDM5LjAw
CnNsb3BlPS0xLjk3LCBSXjI9MC4xNiI+NTk5MC45MDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNl
SW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTEzLjU3LCBtaW49NTk0MC4wMCwgbWF4PTYwMzkuMDAK
c2xvcGU9LTEuOTcsIFJeMj0wLjE2Ij7CsSAwLjIzJTwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+
PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2Om50
aC1jaGlsZCgybisxKTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPnJ1bnMvczwvdGQ+PHRkIGNs
YXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0zNi41MywgbWluPTU3NjYuMDAsIG1heD02MDY4LjAwCnNs
b3BlPTcuMzksIFJeMj0wLjMxIj41OTgxLjAwPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhIiB0aXRsZT0iz4M9MzYuNTMsIG1pbj01NzY2LjAwLCBtYXg9NjA2OC4wMApzbG9w
ZT03LjM5LCBSXjI9MC4zMSI+wrEgMC42MSU8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQg
Y2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXY6bnRoLWNo
aWxkKGV2ZW4pOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+cnVucy9zPC90ZD48dGQgY2xhc3M9
InJlc3VsdCIgdGl0bGU9Is+DPTE1LjIyLCBtaW49NTk0NC4wMCwgbWF4PTYwNzYuMDAKc2xvcGU9
LTEuMDAsIFJeMj0wLjAzIj42MDE5LjE1PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZh
bERlbHRhIiB0aXRsZT0iz4M9MTUuMjIsIG1pbj01OTQ0LjAwLCBtYXg9NjA3Ni4wMApzbG9wZT0t
MS4wMCwgUl4yPTAuMDMiPsKxIDAuMjUlPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xh
c3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXY6bnRoLWNoaWxk
KG4pOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVz
dWx0IiB0aXRsZT0iz4M9MC4wNywgbWluPTE4Ljk1LCBtYXg9MTkuNTAKc2xvcGU9MC4wMSwgUl4y
PTAuMTgiPjE5LjI4PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRs
ZT0iz4M9MC4wNywgbWluPTE4Ljk1LCBtYXg9MTkuNTAKc2xvcGU9MC4wMSwgUl4yPTAuMTgiPsKx
IDAuMzYlPC90ZD48L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFl
by9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2Om50aC1jaGlsZChvZGQpOlJ1bnM8L3RkPjx0
ZCBjbGFzcz0idW5pdCI+cnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTEy
Ljc2LCBtaW49NTk2MC4wMCwgbWF4PTYwNTUuMDAKc2xvcGU9MS45NywgUl4yPTAuMTgiPjYwMTIu
MzA8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0xMi43
NiwgbWluPTU5NjAuMDAsIG1heD02MDU1LjAwCnNsb3BlPTEuOTcsIFJeMj0wLjE4Ij7CsSAwLjIx
JTwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3Nx
dWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2Om9ubHktY2hpbGQ6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1
bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjA4LCBtaW49
MjEuNjMsIG1heD0yMi40MApzbG9wZT0tMC4wMSwgUl4yPTAuMDYiPjIyLjAyPC90ZD48dGQgY2xh
c3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wOCwgbWluPTIxLjYzLCBt
YXg9MjIuNDAKc2xvcGU9LTAuMDEsIFJeMj0wLjA2Ij7CsSAwLjM2JTwvdGQ+PC90cj48dHIgY2xh
c3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVy
eSAtIGRpdltjbGFzcyQ9bG9nXTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90
ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMDgsIG1pbj0yMS4yNiwgbWF4PTIxLjky
CnNsb3BlPS0wLjAxLCBSXjI9MC4wOSI+MjEuNjQ8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUlu
dGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjA4LCBtaW49MjEuMjYsIG1heD0yMS45MgpzbG9wZT0t
MC4wMSwgUl4yPTAuMDkiPsKxIDAuMzclPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xh
c3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXZbY2xhc3MqPXNj
ZV06UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1
bHQiIHRpdGxlPSLPgz0wLjEwLCBtaW49MjEuMDAsIG1heD0yMS44MwpzbG9wZT0wLjAxLCBSXjI9
MC4xNiI+MjEuNDQ8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxl
PSLPgz0wLjEwLCBtaW49MjEuMDAsIG1heD0yMS44MwpzbG9wZT0wLjAxLCBSXjI9MC4xNiI+wrEg
MC40NyU8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVv
L2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXZbY2xhc3M9ZGlhbG9nXTpSdW5zPC90ZD48dGQg
Y2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAu
MjAsIG1pbj0yMS40NCwgbWF4PTIyLjg0CnNsb3BlPS0wLjAzLCBSXjI9MC4yMCI+MjIuMDk8L3Rk
Pjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjIwLCBtaW49
MjEuNDQsIG1heD0yMi44NApzbG9wZT0tMC4wMywgUl4yPTAuMjAiPsKxIDAuODklPC90ZD48L3Ry
Pjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVy
eS9qUXVlcnkgLSBkaXZbY2xhc3NdOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8
L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4wNywgbWluPTE4Ljg2LCBtYXg9MTku
NDYKc2xvcGU9MC4wMiwgUl4yPTAuNTkiPjE5LjE1PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wNywgbWluPTE4Ljg2LCBtYXg9MTkuNDYKc2xvcGU9
MC4wMiwgUl4yPTAuNTkiPsKxIDAuMzYlPC90ZD48L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNs
YXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2W2NsYXNzXj1k
aWFdOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVz
dWx0IiB0aXRsZT0iz4M9MC4xMiwgbWluPTIxLjQyLCBtYXg9MjIuMjgKc2xvcGU9LTAuMDIsIFJe
Mj0wLjI5Ij4yMS45NDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0
bGU9Is+DPTAuMTIsIG1pbj0yMS40MiwgbWF4PTIyLjI4CnNsb3BlPS0wLjAyLCBSXjI9MC4yOSI+
wrEgMC41NCU8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21h
ZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdltjbGFzc3w9ZGlhbG9nXTpSdW5zPC90ZD48
dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+D
PTAuMTQsIG1pbj0yMS4zNywgbWF4PTIyLjQ0CnNsb3BlPS0wLjAyLCBSXjI9MC4yNCI+MjEuODI8
L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE0LCBt
aW49MjEuMzcsIG1heD0yMi40NApzbG9wZT0tMC4wMiwgUl4yPTAuMjQiPsKxIDAuNjIlPC90ZD48
L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1q
cXVlcnkvalF1ZXJ5IC0gZGl2W2NsYXNzfj1kaWFsb2ddOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5p
dCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xMCwgbWluPTIx
LjE4LCBtYXg9MjEuOTkKc2xvcGU9LTAuMDIsIFJeMj0wLjQxIj4yMS41ODwvdGQ+PHRkIGNsYXNz
PSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTAsIG1pbj0yMS4xOCwgbWF4
PTIxLjk5CnNsb3BlPS0wLjAyLCBSXjI9MC40MSI+wrEgMC40NyU8L3RkPjwvdHI+PHRyIGNsYXNz
PSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5OlJ1bnM8L3Rk
Pjx0ZCBjbGFzcz0idW5pdCI+cnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+D
PTEuNjksIG1pbj0zOTQuNTEsIG1heD00MDUuNjcKc2xvcGU9MC4xNSwgUl4yPTAuMDYiPjQwMC4y
NjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTEuNjks
IG1pbj0zOTQuNTEsIG1heD00MDUuNjcKc2xvcGU9MC4xNSwgUl4yPTAuMDYiPsKxIDAuNDIlPC90
ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4KPHNjcmlwdD4KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIg
alF1ZXJ5ID0gJ1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIv
bGliL2pxdWVyeS0xLjYuNC5qcyc7CiAgICB2YXIgcGx1Z2lucyA9IFsnUGVyZm9ybWFuY2VUZXN0
cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzJywgJ1BlcmZvcm1hbmNlVGVzdHMvcmVzb3Vy
Y2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMnLAogICAgICAgICdQZXJmb3JtYW5jZVRlc3Rz
L3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzJ107CiAgICB2YXIgbG9jYWxQYXRoID0gJy9Vc2Vycy95
dXN1a2UvZGV2L1dlYktpdCc7CiAgICB2YXIgcmVtb3RlUGF0aCA9ICdodHRwczovL3N2bi53ZWJr
aXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rJzsKICAgIHZhciBudW1iZXJPZkZhaWx1cmVz
ID0gMDsKICAgIHZhciBzdGFydGVkTG9hZGluZ1BsdWdpbnMgPSBmYWxzZTsKICAgIHZhciBudW1i
ZXJPZkxvYWRlZFBsdWdpbnMgPSAwOwoKICAgIGZ1bmN0aW9uIGxvYWRTY3JpcHQoc3JjLCBsb2Fk
ZWQsIGZhaWxlZCkgewogICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdzY3JpcHQnKTsKICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlOwogICAgICAgIHNjcmlwdC5z
cmMgPSBzcmM7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRlZDsKICAgICAgICBpZiAoZmFp
bGVkKQogICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IGZhaWxlZDsKICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICB9CgogICAgZnVuY3Rpb24gbG9hZFBsdWdp
bnModHJ1bmtQYXRoKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0
aDsgaSsrKQogICAgICAgICAgICBsb2FkU2NyaXB0KHRydW5rUGF0aCArICcvJyArIHBsdWdpbnNb
aV0sIGxvYWRlZFBsdWdpbiwgY3JlYXRlRmFpbGVkVG9Mb2FkUGx1Z2luKHBsdWdpbnNbaV0pKTsK
ICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkZWRQbHVnaW4oKSB7CiAgICAgICAgbnVtYmVyT2ZMb2Fk
ZWRQbHVnaW5zKys7CiAgICAgICAgaWYgKG51bWJlck9mTG9hZGVkUGx1Z2lucyA9PSBwbHVnaW5z
Lmxlbmd0aCkKICAgICAgICAgICAgc2V0VGltZW91dChpbml0LCAwKTsgICAgICAgICAgICAKICAg
IH0KCiAgICBmdW5jdGlvbiBjcmVhdGVGYWlsZWRUb0xvYWRQbHVnaW4ocGx1Z2luKSB7CiAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgYWxlcnQoIkZhaWxlZCB0byBsb2FkICIgKyBwbHVnaW4p
OyB9CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlTG9hZGVkSlF1ZXJ5KHRydW5rUGF0aCkgewog
ICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGxvYWRQbHVnaW5zKHRydW5rUGF0aCk7IH0KICAg
IH0KCiAgICBsb2FkU2NyaXB0KGxvY2FsUGF0aCArICcvJyArIGpRdWVyeSwKICAgICAgICBjcmVh
dGVMb2FkZWRKUXVlcnkobG9jYWxQYXRoKSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICAgIGxvYWRTY3JpcHQocmVtb3RlUGF0aCArICcvJyArIGpRdWVyeSwKICAgICAgICAgICAgICAg
IGNyZWF0ZUxvYWRlZEpRdWVyeShyZW1vdGVQYXRoKSwKICAgICAgICAgICAgICAgIGZ1bmN0aW9u
ICgpIHsgYWxlcnQoIkZhaWxlZCB0byBsb2FkIGpRdWVyeS4iKTsgfSk7CiAgICAgICAgfSk7Cn0p
KCk7CgpmdW5jdGlvbiBUZXN0UmVzdWx0KG1ldHJpYywgdmFsdWVzLCBhc3NvY2lhdGVkUnVuKSB7
CiAgICBpZiAodmFsdWVzWzBdIGluc3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICB2YXIgZmxhdHRl
bmVkVmFsdWVzID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3Ro
OyBpKyspCiAgICAgICAgICAgIGZsYXR0ZW5lZFZhbHVlcyA9IGZsYXR0ZW5lZFZhbHVlcy5jb25j
YXQodmFsdWVzW2ldKTsKICAgICAgICB2YWx1ZXMgPSBmbGF0dGVuZWRWYWx1ZXM7CiAgICB9Cgog
ICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0cmljOyB9CiAgICB0aGlzLnZh
bHVlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7
IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogdmFsdWU7IH0pOyB9CiAgICB0aGlzLnVu
c2NhbGVkTWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0YXRpc3RpY3Muc3VtKHZhbHVlcykg
LyB2YWx1ZXMubGVuZ3RoOyB9CiAgICB0aGlzLm1lYW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBt
ZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogdGhpcy51bnNjYWxlZE1lYW4oKTsgfQogICAgdGhpcy5t
aW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogU3RhdGlz
dGljcy5taW4odmFsdWVzKTsgfQogICAgdGhpcy5tYXggPSBmdW5jdGlvbiAoKSB7IHJldHVybiBt
ZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogU3RhdGlzdGljcy5tYXgodmFsdWVzKTsgfQogICAgdGhp
cy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4g
bWV0cmljLnNjYWxpbmdGYWN0b3IoKSAqIFN0YXRpc3RpY3MuY29uZmlkZW5jZUludGVydmFsRGVs
dGEoMC45NSwgdmFsdWVzLmxlbmd0aCwKICAgICAgICAgICAgU3RhdGlzdGljcy5zdW0odmFsdWVz
KSwgU3RhdGlzdGljcy5zcXVhcmVTdW0odmFsdWVzKSk7CiAgICB9CiAgICB0aGlzLmNvbmZpZGVu
Y2VJbnRlcnZhbERlbHRhUmF0aW8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNvbmZpZGVu
Y2VJbnRlcnZhbERlbHRhKCkgLyB0aGlzLm1lYW4oKTsgfQogICAgdGhpcy5wZXJjZW50RGlmZmVy
ZW5jZSA9IGZ1bmN0aW9uKG90aGVyKSB7IHJldHVybiAob3RoZXIudW5zY2FsZWRNZWFuKCkgLSB0
aGlzLnVuc2NhbGVkTWVhbigpKSAvIHRoaXMudW5zY2FsZWRNZWFuKCk7IH0KICAgIHRoaXMuaXNT
dGF0aXN0aWNhbGx5U2lnbmlmaWNhbnQgPSBmdW5jdGlvbiAob3RoZXIpIHsKICAgICAgICB2YXIg
ZGlmZiA9IE1hdGguYWJzKG90aGVyLm1lYW4oKSAtIHRoaXMubWVhbigpKTsKICAgICAgICByZXR1
cm4gZGlmZiA+IHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSAmJiBkaWZmID4gb3RoZXIu
Y29uZmlkZW5jZUludGVydmFsRGVsdGEoKTsKICAgIH0KICAgIHRoaXMucnVuID0gZnVuY3Rpb24g
KCkgeyByZXR1cm4gYXNzb2NpYXRlZFJ1bjsgfQp9CgpmdW5jdGlvbiBUZXN0UnVuKGVudHJ5KSB7
CiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZW50cnlbJ2Rlc2Ny
aXB0aW9uJ107IH0KICAgIHRoaXMud2Via2l0UmV2aXNpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVy
biBlbnRyeVsncmV2aXNpb25zJ11bJ1dlYktpdCddWydyZXZpc2lvbiddOyB9CiAgICB0aGlzLmxh
YmVsID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBsYWJlbCA9ICdyJyArIHRoaXMud2Via2l0
UmV2aXNpb24oKTsKICAgICAgICBpZiAodGhpcy5kZXNjcmlwdGlvbigpKQogICAgICAgICAgICBs
YWJlbCArPSAnICZkYXNoOyAnICsgdGhpcy5kZXNjcmlwdGlvbigpOwogICAgICAgIHJldHVybiBs
YWJlbDsKICAgIH0KfQoKZnVuY3Rpb24gUGVyZlRlc3RNZXRyaWMobmFtZSwgbWV0cmljKSB7CiAg
ICB2YXIgdGVzdFJlc3VsdHMgPSBbXTsKICAgIHZhciBjYWNoZWRVbml0ID0gbnVsbDsKICAgIHZh
ciBjYWNoZWRTY2FsaW5nRmFjdG9yID0gbnVsbDsKICAgIHZhciB1bml0ID0geydGcmFtZVJhdGUn
OiAnZnBzJywgJ1J1bnMnOiAncnVucy9zJywgJ1RpbWUnOiAnbXMnLCAnTWFsbG9jJzogJ2J5dGVz
JywgJ0pTSGVhcCc6ICdieXRlcyd9W21ldHJpY107CgogICAgLy8gV2UgY2FuJ3QgZG8gdGhpcyBp
biBUZXN0UmVzdWx0IGJlY2F1c2UgYWxsIHJlc3VsdHMgZm9yIGVhY2ggdGVzdCBuZWVkIHRvIHNo
YXJlIHRoZSBzYW1lIHVuaXQgYW5kIHRoZSBzYW1lIHNjYWxpbmcgZmFjdG9yLgogICAgZnVuY3Rp
b24gY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpIHsKICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGJlIGFkanVzdGluZyB1bml0cyBvbiBldmVyeSB0ZXN0IHJlc3VsdC4KICAgICAg
ICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9uIHRoZSBmaXJzdCB0ZXN0LgogICAgICAgIGlmICgh
dGVzdFJlc3VsdHMubGVuZ3RoIHx8IGNhY2hlZFVuaXQpCiAgICAgICAgICAgIHJldHVybjsKCiAg
ICAgICAgdmFyIG1lYW4gPSB0ZXN0UmVzdWx0c1swXS51bnNjYWxlZE1lYW4oKTsgLy8gRklYTUU6
IFdlIHNob3VsZCBsb29rIGF0IGFsbCB2YWx1ZXMuCiAgICAgICAgdmFyIGtpbG8gPSB1bml0ID09
ICdieXRlcycgPyAxMDI0IDogMTAwMDsKICAgICAgICBpZiAobWVhbiA+IDEwICoga2lsbyAqIGtp
bG8gJiYgdW5pdCAhPSAnbXMnKSB7CiAgICAgICAgICAgIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSAx
IC8ga2lsbyAvIGtpbG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSAnTSAnICsgdW5pdDsKICAg
ICAgICB9IGVsc2UgaWYgKG1lYW4gPiAxMCAqIGtpbG8pIHsKICAgICAgICAgICAgY2FjaGVkU2Nh
bGluZ0ZhY3RvciA9IDEgLyBraWxvOwogICAgICAgICAgICBjYWNoZWRVbml0ID0gdW5pdCA9PSAn
bXMnID8gJ3MnIDogKCdLICcgKyB1bml0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBj
YWNoZWRTY2FsaW5nRmFjdG9yID0gMTsKICAgICAgICAgICAgY2FjaGVkVW5pdCA9IHVuaXQ7CiAg
ICAgICAgfQogICAgfQoKICAgIHRoaXMubmFtZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hbWUg
KyAnOicgKyBtZXRyaWM7IH0KICAgIHRoaXMuaXNNZW1vcnlUZXN0ID0gZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gbWV0cmljID09ICdKU0hlYXAnIHx8IG1ldHJpYyA9PSAnTWFsbG9jJzsgfQogICAgdGhp
cy5hZGRSZXN1bHQgPSBmdW5jdGlvbiAobmV3UmVzdWx0KSB7CiAgICAgICAgdGVzdFJlc3VsdHMu
cHVzaChuZXdSZXN1bHQpOwogICAgICAgIGNhY2hlZFVuaXQgPSBudWxsOwogICAgICAgIGNhY2hl
ZFNjYWxpbmdGYWN0b3IgPSBudWxsOwogICAgfQogICAgdGhpcy5yZXN1bHRzID0gZnVuY3Rpb24g
KCkgeyByZXR1cm4gdGVzdFJlc3VsdHM7IH0KICAgIHRoaXMuc2NhbGluZ0ZhY3RvciA9IGZ1bmN0
aW9uKCkgewogICAgICAgIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsKICAgICAgICBy
ZXR1cm4gY2FjaGVkU2NhbGluZ0ZhY3RvcjsKICAgIH0KICAgIHRoaXMudW5pdCA9IGZ1bmN0aW9u
ICgpIHsKICAgICAgICBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVlZGVkKCk7CiAgICAgICAgcmV0
dXJuIGNhY2hlZFVuaXQ7CiAgICB9CiAgICB0aGlzLnNtYWxsZXJJc0JldHRlciA9IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIHVuaXQgPT0gJ21zJyB8fCB1bml0ID09ICdieXRlcyc7IH0KfQoKdmFyIHBs
b3RDb2xvciA9ICdyZ2IoMjMwLDUwLDUwKSc7CnZhciBzdWJwb2ludHNQbG90T3B0aW9ucyA9IHsK
ICAgIGxpbmVzOiB7c2hvdzp0cnVlLCBsaW5lV2lkdGg6IDB9LAogICAgY29sb3I6IHBsb3RDb2xv
ciwKICAgIHBvaW50czoge3Nob3c6IHRydWUsIHJhZGl1czogMX0sCiAgICBiYXJzOiB7c2hvdzog
ZmFsc2V9fTsKCnZhciBtYWluUGxvdE9wdGlvbnMgPSB7CiAgICB4YXhpczogewogICAgICAgIG1p
bjogLTAuNSwKICAgICAgICB0aWNrU2l6ZTogMSwKICAgIH0sCiAgICBjcm9zc2hhaXI6IHsgbW9k
ZTogJ3knIH0sCiAgICBzZXJpZXM6IHsgc2hhZG93U2l6ZTogMCB9LAogICAgYmFyczoge3Nob3c6
IHRydWUsIGFsaWduOiAnY2VudGVyJywgYmFyV2lkdGg6IDAuNX0sCiAgICBsaW5lczogeyBzaG93
OiBmYWxzZSB9LAogICAgcG9pbnRzOiB7IHNob3c6IHRydWUgfSwKICAgIGdyaWQ6IHsKICAgICAg
ICBib3JkZXJXaWR0aDogMSwKICAgICAgICBib3JkZXJDb2xvcjogJyNjY2MnLAogICAgICAgIGJh
Y2tncm91bmRDb2xvcjogJyNmZmYnLAogICAgICAgIGhvdmVyYWJsZTogdHJ1ZSwKICAgICAgICBh
dXRvSGlnaGxpZ2h0OiBmYWxzZSwKICAgIH0KfTsKCnZhciB0aW1lUGxvdE9wdGlvbnMgPSB7CiAg
ICB5YXhpczogeyBzaG93OiBmYWxzZSB9LAogICAgeGF4aXM6IHsgc2hvdzogZmFsc2UgfSwKICAg
IGxpbmVzOiB7IHNob3c6IHRydWUgfSwKICAgIGdyaWQ6IHsgYm9yZGVyV2lkdGg6IDEsIGJvcmRl
ckNvbG9yOiAnI2NjYycgfSwKICAgIGNvbG9yczogWyBwbG90Q29sb3IgXQp9OwoKZnVuY3Rpb24g
Y3JlYXRlUGxvdChjb250YWluZXIsIHRlc3QpIHsKICAgIHZhciBzZWN0aW9uID0gJCgnPHNlY3Rp
b24+PGRpdiBjbGFzcz0icGxvdCI+PC9kaXY+PGRpdiBjbGFzcz0idGltZS1wbG90cyI+PC9kaXY+
JwogICAgICAgICsgJzxzcGFuIGNsYXNzPSJ0b29sdGlwIj48L3NwYW4+PC9zZWN0aW9uPicpOwog
ICAgc2VjdGlvbi5jaGlsZHJlbignLnBsb3QnKS5jc3Moeyd3aWR0aCc6ICgxMDAgKiB0ZXN0LnJl
c3VsdHMoKS5sZW5ndGggKyAyNSkgKyAncHgnLCAnaGVpZ2h0JzogJzMwMHB4J30pOwogICAgJChj
b250YWluZXIpLmFwcGVuZChzZWN0aW9uKTsKCiAgICB2YXIgcGxvdENvbnRhaW5lciA9IHNlY3Rp
b24uY2hpbGRyZW4oJy5wbG90Jyk7CiAgICB2YXIgbWluSXNaZXJvID0gdHJ1ZTsKICAgIGF0dGFj
aFBsb3QodGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKTsKCiAgICBhdHRhY2hUaW1lUGxv
dHModGVzdCwgc2VjdGlvbi5jaGlsZHJlbignLnRpbWUtcGxvdHMnKSk7CgogICAgdmFyIHRvb2x0
aXAgPSBzZWN0aW9uLmNoaWxkcmVuKCcudG9vbHRpcCcpOwogICAgcGxvdENvbnRhaW5lci5iaW5k
KCdwbG90aG92ZXInLCBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCBpdGVtKSB7CiAgICAgICAg
aWYgKGl0ZW0pIHsKICAgICAgICAgICAgdmFyIHBvc3RmaXggPSBpdGVtLnNlcmllcy5pZCA/ICcg
KCcgKyBpdGVtLnNlcmllcy5pZCArICcpJyA6ICcnOwogICAgICAgICAgICB0b29sdGlwLmh0bWwo
aXRlbS5kYXRhcG9pbnRbMV0udG9QcmVjaXNpb24oNCkgKyBwb3N0Zml4KTsKICAgICAgICAgICAg
dmFyIHNlY3Rpb25PZmZzZXQgPSAkKHNlY3Rpb24pLm9mZnNldCgpOwogICAgICAgICAgICB0b29s
dGlwLmNzcyh7bGVmdDogaXRlbS5wYWdlWCAtIHNlY3Rpb25PZmZzZXQubGVmdCAtIHRvb2x0aXAu
b3V0ZXJXaWR0aCgpIC8gMiwgdG9wOiBpdGVtLnBhZ2VZIC0gc2VjdGlvbk9mZnNldC50b3AgKyAx
MH0pOwogICAgICAgICAgICB0b29sdGlwLmZhZGVJbigyMDApOwogICAgICAgIH0gZWxzZQogICAg
ICAgICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwogICAgcGxvdENvbnRhaW5lci5tb3VzZW91
dChmdW5jdGlvbiAoKSB7CiAgICAgICAgdG9vbHRpcC5oaWRlKCk7CiAgICB9KTsKICAgIHBsb3RD
b250YWluZXIuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKICAgICAgICBtaW5Jc1plcm8gPSAhbWluSXNaZXJvOwogICAgICAgIGF0dGFjaFBs
b3QodGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKTsKICAgIH0pOwoKICAgIHJldHVybiBz
ZWN0aW9uOwp9CgpmdW5jdGlvbiBhdHRhY2hUaW1lUGxvdHModGVzdCwgY29udGFpbmVyKSB7CiAg
ICB2YXIgcmVzdWx0cyA9IHRlc3QucmVzdWx0cygpOwogICAgdmFyIGF0dGFjaGVkUGxvdCA9IGZh
bHNlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAg
ICAgY29udGFpbmVyLmFwcGVuZCgnPGRpdj48L2Rpdj4nKTsKICAgICAgICB2YXIgdmFsdWVzID0g
cmVzdWx0c1tpXS52YWx1ZXMoKTsKICAgICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgYXR0YWNoZWRQbG90ID0gdHJ1ZTsKCiAgICAgICAgJC5wbG90KGNvbnRh
aW5lci5jaGlsZHJlbigpLmxhc3QoKSwgW3ZhbHVlcy5tYXAoZnVuY3Rpb24gKHZhbHVlLCBpbmRl
eCkgeyByZXR1cm4gW2luZGV4LCB2YWx1ZV07IH0pXSwKICAgICAgICAgICAgJC5leHRlbmQodHJ1
ZSwge30sIHRpbWVQbG90T3B0aW9ucywge3lheGlzOiB7bWluOiBNYXRoLm1pbi5hcHBseShNYXRo
LCB2YWx1ZXMpICogMC45LCBtYXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsIHZhbHVlcykgKiAxLjF9
LAogICAgICAgICAgICAgICAgeGF4aXM6IHttaW46IC0wLjUsIG1heDogdmFsdWVzLmxlbmd0aCAt
IDAuNX19KSk7CiAgICB9CiAgICBpZiAoIWF0dGFjaGVkUGxvdCkKICAgICAgICBjb250YWluZXIu
Y2hpbGRyZW4oKS5yZW1vdmUoKTsKfQoKZnVuY3Rpb24gYXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29u
dGFpbmVyLCBtaW5Jc1plcm8pIHsKICAgIHZhciByZXN1bHRzID0gdGVzdC5yZXN1bHRzKCk7Cgog
ICAgdmFyIHZhbHVlcyA9IHJlc3VsdHMucmVkdWNlKGZ1bmN0aW9uICh2YWx1ZXMsIHJlc3VsdCwg
aW5kZXgpIHsKICAgICAgICB2YXIgbmV3VmFsdWVzID0gcmVzdWx0LnZhbHVlcygpOwogICAgICAg
IHJldHVybiBuZXdWYWx1ZXMgPyB2YWx1ZXMuY29uY2F0KG5ld1ZhbHVlcy5tYXAoZnVuY3Rpb24g
KHZhbHVlKSB7IHJldHVybiBbaW5kZXgsIHZhbHVlXTsgfSkpIDogdmFsdWVzOwogICAgfSwgW10p
OwoKICAgIHZhciBwbG90RGF0YSA9IFskLmV4dGVuZCh0cnVlLCB7fSwgc3VicG9pbnRzUGxvdE9w
dGlvbnMsIHtkYXRhOiB2YWx1ZXN9KV07CiAgICBwbG90RGF0YS5wdXNoKHtpZDogJyZtdTsnLCBk
YXRhOiByZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gW2luZGV4
LCByZXN1bHQubWVhbigpXTsgfSksIGNvbG9yOiBwbG90Q29sb3J9KTsKCiAgICB2YXIgb3ZlcmFs
bE1heCA9IFN0YXRpc3RpY3MubWF4KHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4
KSB7IHJldHVybiByZXN1bHQubWF4KCk7IH0pKTsKICAgIHZhciBvdmVyYWxsTWluID0gU3RhdGlz
dGljcy5taW4ocmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIHJl
c3VsdC5taW4oKTsgfSkpOwogICAgdmFyIG1hcmdpbiA9IChvdmVyYWxsTWF4IC0gb3ZlcmFsbE1p
bikgKiAwLjE7CiAgICB2YXIgY3VycmVudFBsb3RPcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30s
IG1haW5QbG90T3B0aW9ucywge3lheGlzOiB7CiAgICAgICAgbWluOiBtaW5Jc1plcm8gPyAwIDog
b3ZlcmFsbE1pbiAtIG1hcmdpbiwKICAgICAgICBtYXg6IG1pbklzWmVybyA/IG92ZXJhbGxNYXgg
KiAxLjEgOiBvdmVyYWxsTWF4ICsgbWFyZ2lufX0pOwoKICAgIGN1cnJlbnRQbG90T3B0aW9ucy54
YXhpcy5tYXggPSByZXN1bHRzLmxlbmd0aCAtIDAuNTsKICAgIGN1cnJlbnRQbG90T3B0aW9ucy54
YXhpcy50aWNrcyA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVy
biBbaW5kZXgsIHJlc3VsdC5ydW4oKS5sYWJlbCgpXTsgfSk7CgogICAgJC5wbG90KHBsb3RDb250
YWluZXIsIHBsb3REYXRhLCBjdXJyZW50UGxvdE9wdGlvbnMpOwp9CgpmdW5jdGlvbiB0b0ZpeGVk
V2lkdGhQcmVjaXNpb24odmFsdWUpIHsKICAgIHZhciBkZWNpbWFsID0gdmFsdWUudG9GaXhlZCgy
KTsKICAgIHJldHVybiBkZWNpbWFsOwp9CgpmdW5jdGlvbiBmb3JtYXRQZXJjZW50YWdlKGZyYWN0
aW9uKSB7CiAgICB2YXIgcGVyY2VudGFnZSA9IGZyYWN0aW9uICogMTAwOwogICAgcmV0dXJuIChm
cmFjdGlvbiAqIDEwMCkudG9GaXhlZCgyKSArICclJzsKfQoKZnVuY3Rpb24gY3JlYXRlVGFibGUo
dGVzdHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgsIGhpZGVDb25m
aWRlbmNlSW50ZXJ2YWxEZWx0YSkgewogICAgJCgnI2NvbnRhaW5lcicpLmh0bWwoJzx0aGVhZD48
dHI+PHRoPlRlc3Q8L3RoPjx0aD5Vbml0PC90aD4nICsgcnVucy5tYXAoZnVuY3Rpb24gKHJ1biwg
aW5kZXgpIHsKICAgICAgICB2YXIgY29sc3BhbiA9IDI7CiAgICAgICAgaWYgKGluZGV4ICE9IHJl
ZmVyZW5jZUluZGV4KQogICAgICAgICAgICBjb2xzcGFuID0gMzsKICAgICAgICBpZiAoaGlkZUNv
bmZpZGVuY2VJbnRlcnZhbERlbHRhKQogICAgICAgICAgICBjb2xzcGFuLS07CiAgICAgICAgcmV0
dXJuICc8dGggY29sc3Bhbj0iJyArIGNvbHNwYW4gKyAnIiBjbGFzcz0ie3NvcnRlcjogXCdjb21w
YXJpc29uXCd9Ij4nICsgcnVuLmxhYmVsKCkgKyAnPC90aD4nOwogICAgfSkucmVkdWNlKGZ1bmN0
aW9uIChtYXJrdXAsIGNlbGwpIHsgcmV0dXJuIG1hcmt1cCArIGNlbGw7IH0sICcnKSArICc8L3Ry
PjwvaGVhZD48dGJvZHk+PC90Ym9keT4nKTsKCiAgICB2YXIgdGVzdE5hbWVzID0gW107CiAgICBm
b3IgKHRlc3ROYW1lIGluIHRlc3RzKQogICAgICAgIHRlc3ROYW1lcy5wdXNoKHRlc3ROYW1lKTsK
CiAgICB0ZXN0TmFtZXMuc29ydCgpLm1hcChmdW5jdGlvbiAodGVzdE5hbWUpIHsKICAgICAgICB2
YXIgdGVzdCA9IHRlc3RzW3Rlc3ROYW1lXTsKICAgICAgICBpZiAodGVzdC5pc01lbW9yeVRlc3Qo
KSAhPSBzaG91bGRJZ25vcmVNZW1vcnkpCiAgICAgICAgICAgIGNyZWF0ZVRhYmxlUm93KHJ1bnMs
IHRlc3QsIHJlZmVyZW5jZUluZGV4LCBoaWRlQ29uZmlkZW5jZUludGVydmFsRGVsdGEpOwogICAg
fSk7CgogICAgJCgnI2NvbnRhaW5lcicpLnRhYmxlc29ydGVyKHt3aWRnZXRzOiBbJ3plYnJhJ119
KTsKfQoKZnVuY3Rpb24gbGluZWFyUmVncmVzc2lvbihwb2ludHMpIHsKICAgIC8vIEltcGxlbWVu
dCBodHRwOi8vd3d3LmVhc3ljYWxjdWxhdGlvbi5jb20vc3RhdGlzdGljcy9sZWFybi1jb3JyZWxh
dGlvbi5waHAuCiAgICAvLyB4ID0gbWFnbml0dWRlCiAgICAvLyB5ID0gaXRlcmF0aW9ucwogICAg
dmFyIHN1bVggPSAwOwogICAgdmFyIHN1bVkgPSAwOwogICAgdmFyIHN1bVhTcXVhcmVkID0gMDsK
ICAgIHZhciBzdW1ZU3F1YXJlZCA9IDA7CiAgICB2YXIgc3VtWFRpbWVzWSA9IDA7CgogICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgeCA9IGk7
CiAgICAgICAgdmFyIHkgPSBwb2ludHNbaV07CiAgICAgICAgc3VtWCArPSB4OwogICAgICAgIHN1
bVkgKz0geTsKICAgICAgICBzdW1YU3F1YXJlZCArPSB4ICogeDsKICAgICAgICBzdW1ZU3F1YXJl
ZCArPSB5ICogeTsKICAgICAgICBzdW1YVGltZXNZICs9IHggKiB5OwogICAgfQoKICAgIHZhciBy
ID0gKHBvaW50cy5sZW5ndGggKiBzdW1YVGltZXNZIC0gc3VtWCAqIHN1bVkpIC8KICAgICAgICBN
YXRoLnNxcnQoKHBvaW50cy5sZW5ndGggKiBzdW1YU3F1YXJlZCAtIHN1bVggKiBzdW1YKSAqCiAg
ICAgICAgICAgICAgICAgIChwb2ludHMubGVuZ3RoICogc3VtWVNxdWFyZWQgLSBzdW1ZICogc3Vt
WSkpOwoKICAgIGlmIChpc05hTihyKSB8fCByID09IE1hdGguSW5maW5pdHkpCiAgICAgICAgciA9
IDA7CgogICAgdmFyIHNsb3BlID0gKHBvaW50cy5sZW5ndGggKiBzdW1YVGltZXNZIC0gc3VtWCAq
IHN1bVkpIC8gKHBvaW50cy5sZW5ndGggKiBzdW1YU3F1YXJlZCAtIHN1bVggKiBzdW1YKTsKICAg
IHZhciBpbnRlcmNlcHQgPSBzdW1ZIC8gcG9pbnRzLmxlbmd0aCAtIHNsb3BlICogc3VtWCAvIHBv
aW50cy5sZW5ndGg7CiAgICByZXR1cm4ge3Nsb3BlOiBzbG9wZSwgaW50ZXJjZXB0OiBpbnRlcmNl
cHQsIHJTcXVhcmVkOiByICogcn07Cn0KCnZhciB3YXJuaW5nU2lnbiA9ICc8c3ZnIHZpZXdCb3g9
IjAgMCAxMDAgMTAwIiBzdHlsZT0id2lkdGg6IDE4cHg7IGhlaWdodDogMThweDsgdmVydGljYWwt
YWxpZ246IGJvdHRvbTsiIHZlcnNpb249IjEuMSI+JwogICAgKyAnPHBvbHlnb24gZmlsbD0icmVk
IiBwb2ludHM9IjUwLDEwIDkwLDgwIDEwLDgwIDUwLDEwIiBzdHJva2U9InJlZCIgc3Ryb2tlLXdp
ZHRoPSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4nCiAgICArICc8cG9seWdvbiBmaWxs
PSJ3aGl0ZSIgcG9pbnRzPSI0NywzMCA0OCwyOSwgNTAsIDI4LjcsIDUyLDI5IDUzLDMwIDUwLDYw
IiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5k
IiAvPicKICAgICsgJzxjaXJjbGUgY3g9IjUwIiBjeT0iNzMiIHI9IjYiIGZpbGw9IndoaXRlIiAv
PicKICAgICsgJzwvc3ZnPic7CgpmdW5jdGlvbiBjcmVhdGVUYWJsZVJvdyhydW5zLCB0ZXN0LCBy
ZWZlcmVuY2VJbmRleCwgaGlkZUNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKSB7CiAgICB2YXIgdGFi
bGVSb3cgPSAkKCc8dHI+PHRkIGNsYXNzPSJ0ZXN0Ij4nICsgdGVzdC5uYW1lKCkgKyAnPC90ZD48
dGQgY2xhc3M9InVuaXQiPicgKyB0ZXN0LnVuaXQoKSArICc8L3RkPjwvdHI+Jyk7CgogICAgZnVu
Y3Rpb24gbWFya3VwRm9yUnVuKHJlc3VsdCwgcmVmZXJlbmNlUmVzdWx0KSB7CiAgICAgICAgdmFy
IGNvbXBhcmlzb25DZWxsID0gJyc7CiAgICAgICAgdmFyIGhpZGRlblZhbHVlID0gJyc7CiAgICAg
ICAgdmFyIHNob3VsZENvbXBhcmUgPSByZXN1bHQgIT09IHJlZmVyZW5jZVJlc3VsdDsKICAgICAg
ICBpZiAoc2hvdWxkQ29tcGFyZSAmJiByZWZlcmVuY2VSZXN1bHQpIHsKICAgICAgICAgICAgdmFy
IHBlcmNlbnREaWZmZXJlbmNlID0gcmVmZXJlbmNlUmVzdWx0LnBlcmNlbnREaWZmZXJlbmNlKHJl
c3VsdCk7CiAgICAgICAgICAgIHZhciBiZXR0ZXIgPSB0ZXN0LnNtYWxsZXJJc0JldHRlcigpID8g
cGVyY2VudERpZmZlcmVuY2UgPCAwIDogcGVyY2VudERpZmZlcmVuY2UgPiAwOwogICAgICAgICAg
ICB2YXIgY29tcGFyaXNvbiA9ICcnOwogICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gJ2NvbXBh
cmlzb24nOwogICAgICAgICAgICBpZiAocmVmZXJlbmNlUmVzdWx0LmlzU3RhdGlzdGljYWxseVNp
Z25pZmljYW50KHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb24gPSBmb3JtYXRQ
ZXJjZW50YWdlKE1hdGguYWJzKHBlcmNlbnREaWZmZXJlbmNlKSkgKyAoYmV0dGVyID8gJyBCZXR0
ZXInIDogJyBXb3JzZSZuYnNwOycpOwogICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IGJldHRl
ciA/ICcgYmV0dGVyJyA6ICcgd29yc2UnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGhpZGRl
blZhbHVlID0gJzxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58JyArIGNvbXBhcmlzb24gKyAn
PC9zcGFuPic7CiAgICAgICAgICAgIGNvbXBhcmlzb25DZWxsID0gJzx0ZCBjbGFzcz0iJyArIGNs
YXNzTmFtZSArICciPicgKyBjb21wYXJpc29uICsgJzwvdGQ+JzsKICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZENvbXBhcmUpCiAgICAgICAgICAgIGNvbXBhcmlzb25DZWxsID0gJzx0ZCBjbGFzcz0i
Y29tcGFyaXNvbiI+PC90ZD4nOwoKICAgICAgICB2YXIgdmFsdWVzID0gcmVzdWx0LnZhbHVlcygp
OwogICAgICAgIHZhciB3YXJuaW5nID0gJyc7CiAgICAgICAgdmFyIHJlZ3Jlc3Npb25BbmFseXNp
cyA9ICcnOwogICAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDMpIHsKICAgICAg
ICAgICAgcmVncmVzc2lvblJlc3VsdCA9IGxpbmVhclJlZ3Jlc3Npb24odmFsdWVzKTsKICAgICAg
ICAgICAgcmVncmVzc2lvbkFuYWx5c2lzID0gJ3Nsb3BlPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNp
b24ocmVncmVzc2lvblJlc3VsdC5zbG9wZSkKICAgICAgICAgICAgICAgICsgJywgUl4yPScgKyB0
b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVncmVzc2lvblJlc3VsdC5yU3F1YXJlZCk7CiAgICAgICAg
ICAgIGlmIChyZWdyZXNzaW9uUmVzdWx0LnJTcXVhcmVkID4gMC42ICYmIE1hdGguYWJzKHJlZ3Jl
c3Npb25SZXN1bHQuc2xvcGUpID4gMC4wMSkgewogICAgICAgICAgICAgICAgd2FybmluZyA9ICcg
PHNwYW4gY2xhc3M9InJlZ3Jlc3Npb24td2FybmluZyIgdGl0bGU9IkRldGVjdGVkIGEgdGltZSBk
ZXBlbmRlbmN5IHdpdGggJyArIHJlZ3Jlc3Npb25BbmFseXNpcyArICciPicgKyB3YXJuaW5nU2ln
biArICcgPC9zcGFuPic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzdGF0
aXN0aWNzID0gJyZzaWdtYTs9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQuY29uZmlk
ZW5jZUludGVydmFsRGVsdGEoKSkgKyAnLCBtaW49JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihy
ZXN1bHQubWluKCkpCiAgICAgICAgICAgICsgJywgbWF4PScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNp
b24ocmVzdWx0Lm1heCgpKSArICdcbicgKyByZWdyZXNzaW9uQW5hbHlzaXM7CgogICAgICAgIHZh
ciBjb25maWRlbmNlSW50ZXJ2YWxEZWx0YUNlbGwgPSAnJzsKICAgICAgICBpZiAoIWhpZGVDb25m
aWRlbmNlSW50ZXJ2YWxEZWx0YSkgewogICAgICAgICAgICBjb25maWRlbmNlSW50ZXJ2YWxEZWx0
YUNlbGwgPSAnPHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9IicgKyBz
dGF0aXN0aWNzICsgJyI+JnBsdXNtbjsgJwogICAgICAgICAgICAgICAgKyBmb3JtYXRQZXJjZW50
YWdlKHJlc3VsdC5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YVJhdGlvKCkpICsgd2FybmluZyArICc8
L3RkPic7CiAgICAgICAgfQoKICAgICAgICAvLyBUYWJsZXNvcnRlciBkb2Vzbid0IGtub3cgYWJv
dXQgdGhlIHNlY29uZCBjZWxsIHNvIHB1dCB0aGUgY29tcGFyaXNvbiBpbiB0aGUgaW52aXNpYmxl
IGVsZW1lbnQuCiAgICAgICAgcmV0dXJuICc8dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9IicgKyBz
dGF0aXN0aWNzICsgJyI+JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWVhbigpKSAr
IGhpZGRlblZhbHVlCiAgICAgICAgICAgICsgJzwvdGQ+JyArIGNvbmZpZGVuY2VJbnRlcnZhbERl
bHRhQ2VsbCArIGNvbXBhcmlzb25DZWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIG1hcmt1cEZvck1p
c3NpbmdSdW4oaXNSZWZlcmVuY2UpIHsKICAgICAgICByZXR1cm4gJzx0ZCBjb2xzcGFuPSInICsg
KGlzUmVmZXJlbmNlID8gMiA6IDMpICsgJyIgY2xhc3M9Im1pc3NpbmciPk1pc3Npbmc8L3RkPic7
CiAgICB9CgogICAgdmFyIHJ1bkluZGV4ID0gMDsKICAgIHZhciByZXN1bHRzID0gdGVzdC5yZXN1
bHRzKCk7CiAgICB2YXIgcmVmZXJlbmNlUmVzdWx0ID0gdW5kZWZpbmVkOwogICAgdmFyIHJlc3Vs
dEluZGV4TWFwID0ge307CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBp
KyspIHsKICAgICAgICB3aGlsZSAocnVuc1tydW5JbmRleF0gIT09IHJlc3VsdHNbaV0ucnVuKCkp
CiAgICAgICAgICAgIHJ1bkluZGV4Kys7CiAgICAgICAgaWYgKHJ1bkluZGV4ID09IHJlZmVyZW5j
ZUluZGV4KQogICAgICAgICAgICByZWZlcmVuY2VSZXN1bHQgPSByZXN1bHRzW2ldOwogICAgICAg
IHJlc3VsdEluZGV4TWFwW3J1bkluZGV4XSA9IGk7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJ1bnMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgcmVzdWx0SW5kZXggPSByZXN1bHRJ
bmRleE1hcFtpXTsKICAgICAgICBpZiAocmVzdWx0SW5kZXggPT0gdW5kZWZpbmVkKQogICAgICAg
ICAgICB0YWJsZVJvdy5hcHBlbmQobWFya3VwRm9yTWlzc2luZ1J1bihpID09IHJlZmVyZW5jZUlu
ZGV4KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0YWJsZVJvdy5hcHBlbmQobWFya3VwRm9y
UnVuKHJlc3VsdHNbcmVzdWx0SW5kZXhdLCByZWZlcmVuY2VSZXN1bHQpKTsKICAgIH0KCiAgICAk
KCcjY29udGFpbmVyJykuY2hpbGRyZW4oJ3Rib2R5JykubGFzdCgpLmFwcGVuZCh0YWJsZVJvdyk7
CgogICAgdGFibGVSb3cuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgaWYgKGV2ZW50
LnRhcmdldCAhPSB0YWJsZVJvd1swXSAmJiBldmVudC50YXJnZXQucGFyZW50Tm9kZSAhPSB0YWJs
ZVJvd1swXSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwoKICAgICAgICB2YXIgZmlyc3RDZWxsID0gdGFibGVSb3cuY2hpbGRyZW4oJ3RkJykuZmly
c3QoKTsKICAgICAgICBpZiAoZmlyc3RDZWxsLmNoaWxkcmVuKCdzZWN0aW9uJykubGVuZ3RoKSB7
CiAgICAgICAgICAgIGZpcnN0Q2VsbC5jaGlsZHJlbignc2VjdGlvbicpLnJlbW92ZSgpOwogICAg
ICAgICAgICB0YWJsZVJvdy5jaGlsZHJlbigndGQnKS5jc3MoeydwYWRkaW5nLWJvdHRvbSc6ICcn
fSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHBsb3QgPSBjcmVhdGVQbG90KGZp
cnN0Q2VsbCwgdGVzdCk7CiAgICAgICAgICAgIHBsb3QuY3NzKHsncG9zaXRpb24nOiAnYWJzb2x1
dGUnLCAnei1pbmRleCc6IDJ9KTsKICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRhYmxlUm93Lm9m
ZnNldCgpOwogICAgICAgICAgICBvZmZzZXQubGVmdCArPSAxOwogICAgICAgICAgICBvZmZzZXQu
dG9wICs9IHRhYmxlUm93Lm91dGVySGVpZ2h0KCk7CiAgICAgICAgICAgIHBsb3Qub2Zmc2V0KG9m
ZnNldCk7CiAgICAgICAgICAgIHRhYmxlUm93LmNoaWxkcmVuKCd0ZCcpLmNzcyh7J3BhZGRpbmct
Ym90dG9tJzogcGxvdC5vdXRlckhlaWdodCgpICsgNX0pOwogICAgICAgIH0KCiAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgfSk7Cn0KCmZ1bmN0aW9uIGluaXQoKSB7CiAgICAkLnRhYmxlc29ydGVy
LmFkZFBhcnNlcih7CiAgICAgICAgaWQ6ICdjb21wYXJpc29uJywKICAgICAgICBpczogZnVuY3Rp
b24ocykgewogICAgICAgICAgICByZXR1cm4gcy5pbmRleE9mKCd8JykgPj0gMDsKICAgICAgICB9
LAogICAgICAgIGZvcm1hdDogZnVuY3Rpb24ocykgewogICAgICAgICAgICB2YXIgcGFyc2VkID0g
cGFyc2VGbG9hdChzLnN1YnN0cmluZyhzLmluZGV4T2YoJ3wnKSArIDEpKTsKICAgICAgICAgICAg
cmV0dXJuIGlzTmFOKHBhcnNlZCkgPyAwIDogcGFyc2VkOwogICAgICAgIH0sCiAgICAgICAgdHlw
ZTogJ251bWVyaWMnLAogICAgfSk7CgogICAgdmFyIHJ1bnMgPSBbXTsKICAgIHZhciBtZXRyaWNz
ID0ge307CiAgICAkLmVhY2goSlNPTi5wYXJzZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnanNv
bicpLnRleHRDb250ZW50KSwgZnVuY3Rpb24gKGluZGV4LCBlbnRyeSkgewogICAgICAgIHZhciBy
dW4gPSBuZXcgVGVzdFJ1bihlbnRyeSk7CiAgICAgICAgcnVucy5wdXNoKHJ1bik7CgogICAgICAg
IGZ1bmN0aW9uIGFkZFRlc3RzKHRlc3RzLCBwYXJlbnRGdWxsTmFtZSkgewogICAgICAgICAgICBm
b3IgKHZhciB0ZXN0TmFtZSBpbiB0ZXN0cykgewogICAgICAgICAgICAgICAgdmFyIGZ1bGxUZXN0
TmFtZSA9IHBhcmVudEZ1bGxOYW1lICsgJy8nICsgdGVzdE5hbWU7CiAgICAgICAgICAgICAgICB2
YXIgcmF3TWV0cmljcyA9IHRlc3RzW3Rlc3ROYW1lXS5tZXRyaWNzOwoKICAgICAgICAgICAgICAg
IGZvciAodmFyIG1ldHJpY05hbWUgaW4gcmF3TWV0cmljcykgewogICAgICAgICAgICAgICAgICAg
IHZhciBmdWxsTWV0cmljTmFtZSA9IGZ1bGxUZXN0TmFtZSArICc6JyArIG1ldHJpY05hbWU7CiAg
ICAgICAgICAgICAgICAgICAgdmFyIG1ldHJpYyA9IG1ldHJpY3NbZnVsbE1ldHJpY05hbWVdOwog
ICAgICAgICAgICAgICAgICAgIGlmICghbWV0cmljKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IG1ldHJpYyA9IG5ldyBQZXJmVGVzdE1ldHJpYyhmdWxsVGVzdE5hbWUsIG1ldHJpY05hbWUpOwog
ICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzW2Z1bGxNZXRyaWNOYW1lXSA9IG1ldHJpYzsK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbWV0cmljLmFkZFJlc3Vs
dChuZXcgVGVzdFJlc3VsdChtZXRyaWMsIHJhd01ldHJpY3NbbWV0cmljTmFtZV0uY3VycmVudCwg
cnVuKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRlc3RzW3Rlc3RO
YW1lXS50ZXN0cykKICAgICAgICAgICAgICAgICAgICBhZGRUZXN0cyh0ZXN0c1t0ZXN0TmFtZV0u
dGVzdHMsIGZ1bGxUZXN0TmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGFk
ZFRlc3RzKGVudHJ5LnRlc3RzLCAnJyk7CiAgICB9KTsKCiAgICB2YXIgc2hvdWxkSWdub3JlTWVt
b3J5PSB0cnVlOwogICAgdmFyIHJlZmVyZW5jZUluZGV4ID0gMDsKICAgIHZhciBoaWRlQ29uZmlk
ZW5jZUludGVydmFsRGVsdGEgPSBmYWxzZTsKCiAgICBjcmVhdGVUYWJsZShtZXRyaWNzLCBydW5z
LCBzaG91bGRJZ25vcmVNZW1vcnksIHJlZmVyZW5jZUluZGV4KTsKCiAgICAkKCcjdGltZS1tZW1v
cnknKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQsIGNoZWNrZWRFbGVtZW50KSB7CiAg
ICAgICAgc2hvdWxkSWdub3JlTWVtb3J5ID0gY2hlY2tlZEVsZW1lbnQudGV4dENvbnRlbnQgPT0g
J1RpbWUnOwogICAgICAgIGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1bnMsIHNob3VsZElnbm9yZU1l
bW9yeSwgcmVmZXJlbmNlSW5kZXgsIGhpZGVDb25maWRlbmNlSW50ZXJ2YWxEZWx0YSk7CiAgICB9
KTsKCiAgICBydW5zLm1hcChmdW5jdGlvbiAocnVuLCBpbmRleCkgewogICAgICAgICQoJyNyZWZl
cmVuY2UnKS5hcHBlbmQoJzxzcGFuIHZhbHVlPSInICsgaW5kZXggKyAnIicgKyAoaW5kZXggPT0g
cmVmZXJlbmNlSW5kZXggPyAnIGNsYXNzPSJjaGVja2VkIicgOiAnJykgKyAnPicgKyBydW4ubGFi
ZWwoKSArICc8L3NwYW4+Jyk7CiAgICB9KQoKICAgICQoJyNyZWZlcmVuY2UnKS5iaW5kKCdjaGFu
Z2UnLCBmdW5jdGlvbiAoZXZlbnQsIGNoZWNrZWRFbGVtZW50KSB7CiAgICAgICAgcmVmZXJlbmNl
SW5kZXggPSBwYXJzZUludChjaGVja2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpOwog
ICAgICAgIGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVm
ZXJlbmNlSW5kZXgsIGhpZGVDb25maWRlbmNlSW50ZXJ2YWxEZWx0YSk7CiAgICB9KTsKCiAgICAk
KCcjY29uZmlkZW5jZUludGVydmFsRGVsdGEnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZl
bnQsIGNoZWNrZWRFbGVtZW50KSB7CiAgICAgICAgaGlkZUNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
ID0gY2hlY2tlZEVsZW1lbnQudGV4dENvbnRlbnQgPT0gJ0hpZGUnOwogICAgICAgIGNyZWF0ZVRh
YmxlKG1ldHJpY3MsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgsIGhp
ZGVDb25maWRlbmNlSW50ZXJ2YWxEZWx0YSk7CiAgICB9KTsKCiAgICAkKCcuY2hlY2tib3gnKS5l
YWNoKGZ1bmN0aW9uIChpbmRleCwgY2hlY2tib3gpIHsKICAgICAgICAkKGNoZWNrYm94KS5jaGls
ZHJlbignc3BhbicpLmNsaWNrKGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgICBpZiAoJCh0
aGlzKS5oYXNDbGFzcygnY2hlY2tlZCcpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAkKGNoZWNrYm94KS5jaGlsZHJlbignc3BhbicpLnJlbW92ZUNsYXNzKCdjaGVja2VkJyk7
CiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2NoZWNrZWQnKTsKICAgICAgICAgICAgJChj
aGVja2JveCkudHJpZ2dlcignY2hhbmdlJywgJCh0aGlzKSk7CiAgICAgICAgfSk7CiAgICB9KTsK
fQoKPC9zY3JpcHQ+PHNjcmlwdCBhc3luYz0iIiBzcmM9Ii9Vc2Vycy95dXN1a2UvZGV2L1dlYktp
dC9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xpYi9qcXVl
cnktMS42LjQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IGlkPSJqc29uIiB0eXBlPSJhcHBsaWNhdGlv
bi9qc29uIj5beyJ0ZXN0cyI6IHsiRHJvbWFlbyI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8iLCAidGVzdHMiOiB7
ImNzc3F1ZXJ5LWpxdWVyeSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nl
ci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAi
bWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMzk0Ljc3OTczMDQxNjM2MTIsIDM5Ny44
Njk1MDc5ODIwMDM3LCA0MDIuMDExMjQ2MDEyMzU0MywgNDAzLjg5OTUyNDg3OTc3MDI0LCA0MDUu
NjY5NDMyMTQ1NDg4Ml0sIFszOTUuNDE0MTYxNjI0NTg3NCwgMzk3LjIxMTQ5NzYxNTQ5MTcsIDQw
MC42MzIzMjIwNDk4OTE2LCA0MDIuNDMxNTI3Nzg0MzY1MjQsIDQwNC4zMTM5NDk5OTkxNzg4XSwg
WzM5NC41MDk0NjQyNzQxMTEwNSwgMzk3LjA1MTYzMTg0NzA2MTEsIDM5OC42Njg4Nzg4OTE4MTYy
MywgNDAwLjY2OTQ0ODc4OTY0MjksIDQwMy43MTM3NTQ3MTY2NTNdLCBbMzk2LjY5NDA0NjA2NjE5
ODYsIDM5OC41NzY5OTQ5NDY1Njg5NiwgNDAyLjM0MjQxNTMwODQyNDcsIDQwMy42MzA1MDU2MzU0
MzEsIDQwNS4xNDY1OTkxNTkyMzc1NV1dfX0sICJ0ZXN0cyI6IHsialF1ZXJ5IC0gZGl2W2NsYXNz
fD1kaWFsb2ddIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5r
L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNz
IjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTg5NS4wLCAyMjEzMi4wLCAyMjI2Ni4wLCAyMjI3
OS4wLCAyMjQ0My4wXSwgWzIxNTcxLjAsIDIxNjU2LjAsIDIxODI3LjAsIDIxODk0LjAsIDIyMDI4
LjBdLCBbMjEzNzQuMCwgMjE0MzcuMCwgMjE0NzMuMCwgMjE2NDEuMCwgMjE2NzcuMF0sIFsyMTY3
MS4wLCAyMTc1My4wLCAyMTc3Mi4wLCAyMTgwNS4wLCAyMTg2MC4wXV19fX0sICJqUXVlcnkgLSBk
aXYjc2NlbmUxIGRpdi5kaWFsb2cgZGl2IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnku
aHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTU2My4wLCAyMTU4OS4w
LCAyMTY1MC4wLCAyMTg2Ni4wLCAyMTg2OS4wXSwgWzIxNDg5LjAsIDIxNzAzLjAsIDIxNzcxLjAs
IDIxNzcyLjAsIDIxOTgzLjBdLCBbMjE1ODcuMCwgMjE2NTkuMCwgMjE2ODkuMCwgMjE3NzAuMCwg
MjE5NDkuMF0sIFsyMTk0NC4wLCAyMTk2Mi4wLCAyMTk3OS4wLCAyMjA3Ny4wLCAyMjExMC4wXV19
fX0sICJqUXVlcnkgLSBib2R5IGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
YnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0
bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTg3MTkuMCwgMTg4NjguMCwg
MTg5MTQuMCwgMTg5NTQuMCwgMTkxMDUuMF0sIFsxODc4OS4wLCAxODgzNi4wLCAxODg5MC4wLCAx
ODkzOS4wLCAxOTAwNy4wXSwgWzE4NjU4LjAsIDE4Nzg0LjAsIDE4ODAxLjAsIDE4ODE5LjAsIDE4
ODM4LjBdLCBbMTg3NzQuMCwgMTg3NzUuMCwgMTg4NTAuMCwgMTg4NzAuMCwgMTg5NzUuMF1dfX19
LCAialF1ZXJ5IC0gZGl2Om50aC1jaGlsZCgybisxKSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnkt
anF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbNTc2Ni4wLCA1
Nzc1LjAsIDU5OTUuMCwgNjAzMS4wLCA2MDY4LjBdLCBbNTkyOC4wLCA1OTc4LjAsIDU5ODQuMCwg
NTk5OS4wLCA2MDA2LjBdLCBbNTk4NC4wLCA1OTg3LjAsIDU5OTcuMCwgNjAxNS4wLCA2MDM4LjBd
LCBbNTk3OC4wLCA1OTk4LjAsIDYwMTQuMCwgNjAzMi4wLCA2MDQ3LjBdXX19fSwgImpRdWVyeSAt
IGRpdjpudGgtY2hpbGQoMm4pIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93
c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIs
ICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1s2MDEzLjAsIDYwMjUuMCwgNjAzMC4w
LCA2MDM1LjAsIDYwMzkuMF0sIFs1OTQwLjAsIDU5NjQuMCwgNTk2Ny4wLCA1OTg0LjAsIDYwMDEu
MF0sIFs1OTczLjAsIDU5NzguMCwgNTk5MC4wLCA1OTkxLjAsIDYwMDkuMF0sIFs1OTQyLjAsIDU5
NjEuMCwgNTk3OC4wLCA1OTkyLjAsIDYwMDYuMF1dfX19LCAialF1ZXJ5IC0gKiI6IHsidXJsIjog
Imh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ry
b21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVu
dCI6IFtbMjg3MC4wLCAyOTYxLjAsIDMwNDkuMCwgMzA5My4wLCAzMTEyLjBdLCBbMjg2My4wLCAy
ODkxLjAsIDMwMzYuMCwgMzA4MS4wLCAzMTE3LjBdLCBbMjg4NC4wLCAyOTUyLjAsIDI5NzcuMCwg
MzAzNC4wLCAzMTM0LjBdLCBbMjg4MS4wLCAyOTA1LjAsIDMwNzEuMCwgMzA5MC4wLCAzMTA1LjBd
XX19fSwgImpRdWVyeSAtIGRpdiAjc3BlZWNoNSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1
ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjE2ODEuMCwgMjE3
NTQuMCwgMjE5NTEuMCwgMjE5NTQuMCwgMjE5NjkuMF0sIFsyMTU3Mi4wLCAyMTYxNC4wLCAyMTY3
MC4wLCAyMTcxMy4wLCAyMTk3My4wXSwgWzIxNTEwLjAsIDIxNTM5LjAsIDIxNTg5LjAsIDIxNjMx
LjAsIDIxNzgwLjBdLCBbMjE3ODIuMCwgMjE4NTIuMCwgMjE5ODMuMCwgMjIwODAuMCwgMjIxNDgu
MF1dfX19LCAialF1ZXJ5IC0gYm9keSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
YnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0
bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMzYwNzU5LjAsIDM2MTE0Mi4w
LCAzNjIwNzQuMCwgMzYzNTU4LjAsIDM2NTQyNi4wXSwgWzM3ODg5MC4wLCAzODYyNjAuMCwgMzg4
ODQyLjAsIDM4ODg1NS4wLCAzODg5OTEuMF0sIFszNTYyMTYuMCwgMzU4NDM0LjAsIDM1OTM5OC4w
LCAzNTk3NzMuMCwgMzY0MDQ3LjBdLCBbMzY4NDg4LjAsIDM2OTAwNC4wLCAzNzE0MDQuMCwgMzcx
ODQzLjAsIDM3MzcyNS4wXV19fX0sICJqUXVlcnkgLSBkaXYgKyBkaXYiOiB7InVybCI6ICJodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBb
WzIwMjEwLjAsIDIwNDc2LjAsIDIxNzQwLjAsIDIxODQ3LjAsIDIxOTM5LjBdLCBbMjExNDIuMCwg
MjExNjkuMCwgMjExOTcuMCwgMjEyNDguMCwgMjEzNDguMF0sIFsyMTMyMC4wLCAyMTM5OS4wLCAy
MTQxNi4wLCAyMTU5MC4wLCAyMTcwMS4wXSwgWzIxMzM0LjAsIDIxMzgzLjAsIDIxMzk3LjAsIDIx
NDEwLjAsIDIxNjc4LjBdXX19fSwgImpRdWVyeSAtIGRpdiA+IGRpdiI6IHsidXJsIjogImh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8v
Y3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtb
MTk5MTYuMCwgMjAwMDAuMCwgMjAwMTIuMCwgMjAwOTMuMCwgMjAyNDkuMF0sIFsyMDAxMi4wLCAy
MDEwNS4wLCAyMDEzNC4wLCAyMDE2NS4wLCAyMDIzNS4wXSwgWzIwMDE5LjAsIDIwMDkyLjAsIDIw
MjAwLjAsIDIwMjcyLjAsIDIwMjkwLjBdLCBbMTk5MDkuMCwgMTk5MTQuMCwgMTk5NzcuMCwgMjAx
MjQuMCwgMjAxNDEuMF1dfX19LCAialF1ZXJ5IC0gZGl2IC5kaWFsb2ciOiB7InVybCI6ICJodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBb
WzIxOTY3LjAsIDIxOTc4LjAsIDIxOTgzLjAsIDIyMDE1LjAsIDIyMTMxLjBdLCBbMjE4NzYuMCwg
MjE4ODEuMCwgMjE5NzYuMCwgMjE5OTEuMCwgMjE5OTMuMF0sIFsyMTQ4OC4wLCAyMTU1NC4wLCAy
MTY3My4wLCAyMTczNi4wLCAyMTkzMC4wXSwgWzIxNTMwLjAsIDIxNjcwLjAsIDIxNzMxLjAsIDIx
NzQwLjAsIDIxODA1LjBdXX19fSwgImpRdWVyeSAtIGRpdiBkaXYgZGl2IjogeyJ1cmwiOiAiaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFl
by9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50Ijog
W1syMTQ1OC4wLCAyMTQ2Ny4wLCAyMTQ4MC4wLCAyMTQ5MS4wLCAyMTY1My4wXSwgWzIwNTczLjAs
IDIwNzQwLjAsIDIwODIzLjAsIDIwODk5LjAsIDIxMDA3LjBdLCBbMjA4NTEuMCwgMjA5NDEuMCwg
MjA5NTIuMCwgMjA5NzUuMCwgMjEyMDcuMF0sIFsyMTM3NC4wLCAyMTM3Ni4wLCAyMTU5NS4wLCAy
MTc3MC4wLCAyMTc3OC4wXV19fX0sICJqUXVlcnkgLSBkaXZbY2xhc3MkPWxvZ10iOiB7InVybCI6
ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9E
cm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJl
bnQiOiBbWzIxNTcyLjAsIDIxNzE5LjAsIDIxODMyLjAsIDIxODM0LjAsIDIxOTE2LjBdLCBbMjE2
NDguMCwgMjE3MDUuMCwgMjE3MTMuMCwgMjE3MTQuMCwgMjE3MjQuMF0sIFsyMTI1Ny4wLCAyMTI2
OS4wLCAyMTQzMC4wLCAyMTUzNi4wLCAyMTU2OC4wXSwgWzIxNTkzLjAsIDIxNTk3LjAsIDIxNjMy
LjAsIDIxNzAxLjAsIDIxNzc1LjBdXX19fSwgImpRdWVyeSAtICNzY2VuZTEgI3NwZWVjaDEiOiB7
InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VU
ZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7
ImN1cnJlbnQiOiBbWzIxNDUyLjAsIDIxNDk4LjAsIDIxNTU3LjAsIDIxNTk4LjAsIDIxNzc0LjBd
LCBbMjE2MjEuMCwgMjE2NTguMCwgMjE3MzguMCwgMjE3ODIuMCwgMjE4MjkuMF0sIFsyMTMzNy4w
LCAyMTUzNi4wLCAyMTU0Ni4wLCAyMTc0Mi4wLCAyMTgxNy4wXSwgWzIxMzE3LjAsIDIxNDY1LjAs
IDIxNTA0LjAsIDIxNjMwLjAsIDIxNjg4LjBdXX19fSwgImpRdWVyeSAtIGRpdltjbGFzcz1kaWFs
b2ddIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJS
dW5zIjogeyJjdXJyZW50IjogW1syMjUzNC4wLCAyMjU2MC4wLCAyMjU4NC4wLCAyMjcwOC4wLCAy
MjgzOC4wXSwgWzIxNjc2LjAsIDIxODYwLjAsIDIxOTYxLjAsIDIyMTg3LjAsIDIyMzA2LjBdLCBb
MjE0MzcuMCwgMjE0NzUuMCwgMjE1OTIuMCwgMjE2NDguMCwgMjE2OTUuMF0sIFsyMjA1MC4wLCAy
MjEyNC4wLCAyMjEzMi4wLCAyMjE1NS4wLCAyMjIzMi4wXV19fX0sICJqUXVlcnkgLSAuZGlhbG9n
IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5z
IjogeyJjdXJyZW50IjogW1szNDYyMzMuMCwgMzQ3MzExLjAsIDM1MzY3NS4wLCAzNjAzNTkuMCwg
MzYxNTA4LjBdLCBbMzMxNzY2LjAsIDMzMjczMi4wLCAzMzQ1MDMuMCwgMzM3NDkwLjAsIDMzODIz
MC4wXSwgWzM0Mzk1Ny4wLCAzNDQyMTUuMCwgMzQ2MzY3LjAsIDM1NDIyMy4wLCAzNTQ1NzguMF0s
IFszNDA3MjUuMCwgMzQxNDk5LjAsIDM0NTYwMS4wLCAzNDYwMTQuMCwgMzUxOTYwLjBdXX19fSwg
ImpRdWVyeSAtIGRpdltjbGFzcyo9c2NlXSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjA5OTcuMCwgMjEwMDEu
MCwgMjEyOTMuMCwgMjEzMTcuMCwgMjEzODguMF0sIFsyMTM5NS4wLCAyMTQ5NC4wLCAyMTYwNS4w
LCAyMTgwOC4wLCAyMTgyOS4wXSwgWzIxNDMyLjAsIDIxNDcxLjAsIDIxNTg1LjAsIDIxNjMxLjAs
IDIxNjYwLjBdLCBbMjEzNDEuMCwgMjEzNTMuMCwgMjEzODcuMCwgMjE0MjEuMCwgMjE0NTUuMF1d
fX19LCAialF1ZXJ5IC0gZGl2LmRpYWxvZyI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjIzNDcuMCwgMjI0MzIu
MCwgMjI0MzkuMCwgMjI1MzMuMCwgMjI3MTMuMF0sIFsyMjAyNy4wLCAyMjEyNS4wLCAyMjEzNC4w
LCAyMjEzNy4wLCAyMjE0NC4wXSwgWzIxOTQxLjAsIDIyMDcwLjAsIDIyMjU4LjAsIDIyMjcyLjAs
IDIyMzUyLjBdLCBbMjI1NDAuMCwgMjI1ODguMCwgMjI2NDkuMCwgMjI3OTQuMCwgMjI4NzUuMF1d
fX19LCAialF1ZXJ5IC0gZGl2W2NsYXNzfj1kaWFsb2ddIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVy
eS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTcwNi4w
LCAyMTcwOS4wLCAyMTgxNy4wLCAyMTgxOC4wLCAyMTk4OS4wXSwgWzIxNDk5LjAsIDIxNTMyLjAs
IDIxNjA1LjAsIDIxNjE5LjAsIDIxNzk0LjBdLCBbMjEzOTYuMCwgMjE1NDEuMCwgMjE1NjkuMCwg
MjE3MTAuMCwgMjE3NjQuMF0sIFsyMTE3Ni4wLCAyMTIwMy4wLCAyMTI2Mi4wLCAyMTQxOS4wLCAy
MTUxMS4wXV19fX0sICJqUXVlcnkgLSBkaXY6bnRoLWNoaWxkKG9kZCkiOiB7InVybCI6ICJodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBb
WzU5NzEuMCwgNTk5OC4wLCA2MDIyLjAsIDYwMzMuMCwgNjA0OS4wXSwgWzU5NjAuMCwgNTk3NC4w
LCA1OTk0LjAsIDYwMDguMCwgNjA1MS4wXSwgWzU5OTEuMCwgNTk5OC4wLCA2MDAyLjAsIDYwMTku
MCwgNjAyOS4wXSwgWzU5OTcuMCwgNjAzMC4wLCA2MDMwLjAsIDYwMzUuMCwgNjA1NS4wXV19fX0s
ICJqUXVlcnkgLSBkaXY6b25seS1jaGlsZCI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjE5NzYuMCwgMjIwNzAu
MCwgMjIxMjQuMCwgMjIyMDguMCwgMjIzOTYuMF0sIFsyMTkwOS4wLCAyMjAxNy4wLCAyMjA1OS4w
LCAyMjEyOC4wLCAyMjEzNC4wXSwgWzIxNjk3LjAsIDIxODk2LjAsIDIxOTM5LjAsIDIxOTUwLjAs
IDIyMDM1LjBdLCBbMjE2MjguMCwgMjE5NjAuMCwgMjIwMTcuMCwgMjIxMjIuMCwgMjIxODEuMF1d
fX19LCAialF1ZXJ5IC0gZGl2LCBhLCBzcGFuIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVl
cnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1s2OTAyLjAsIDY5MjMu
MCwgNjk1Ny4wLCA3MDI4LjAsIDcwNDIuODcxMzg1ODQyNDczXSwgWzY5OTQuMCwgNzAwOC4wLCA3
MDEwLjAsIDcwMjkuMCwgNzAzMC4wXSwgWzY5MjUuMCwgNjk0Ni4wLCA2OTU5LjAsIDY5NjUuMCwg
NzAxOS4wXSwgWzY5NzkuMCwgNzAzOC4wLCA3MDU2LjAsIDcwNzQuOTI1MDc0OTI1MDc1LCA3MTEz
LjBdXX19fSwgImpRdWVyeSAtIGRpdiBkaXYiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQu
b3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVy
eS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzE5NTEwLjAsIDE5NjA3
LjAsIDE5NjI5LjAsIDE5NjY0LjAsIDE5OTQ4LjBdLCBbMjAwNzIuMCwgMjAwOTUuMCwgMjAxNDIu
MCwgMjAxNDQuMCwgMjAyMDIuMF0sIFsyMDA0OC4wLCAyMDA2Mi4wLCAyMDA3MC4wLCAyMDEwNi4w
LCAyMDIwNi4wXSwgWzIwMDAyLjAsIDIwMTc0LjAsIDIwMTg5LjAsIDIwMTkxLjAsIDIwMjg0LjBd
XX19fSwgImpRdWVyeSAtIGRpdiwgZGl2LCBkaXYiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpx
dWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzgzOTcuMCwgODQy
Ni4wLCA4NDc0LjAsIDg1MDMuMCwgODU1MC4wXSwgWzg1MjQuMCwgODUyNy4wLCA4NTYwLjAsIDg1
NzEuMCwgODU4Ni4wXSwgWzg0MDYuMCwgODQ0MC4wLCA4NDYyLjAsIDg1MTcuMCwgODU0OS4wXSwg
Wzg1MTAuMCwgODU0Ny4wLCA4NTQ3LjAsIDg1NjMuMCwgODU3OC4wXV19fX0sICJqUXVlcnkgLSBk
aXZbY2xhc3NePWRpYV0iOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIv
dHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1l
dHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxOTY3LjAsIDIyMDUxLjAsIDIyMDY4LjAs
IDIyMjI5LjAsIDIyMjg0LjBdLCBbMjE5MDguMCwgMjE5NjEuMCwgMjE5NzMuMCwgMjIwMTguMCwg
MjIyNzcuMF0sIFsyMTYxNC4wLCAyMTkxNy4wLCAyMjAyNS4wLCAyMjE3MC4wLCAyMjIxNC4wXSwg
WzIxNDIzLjAsIDIxNTI5LjAsIDIxNTg0LjAsIDIxNzQ1LjAsIDIxODAwLjBdXX19fSwgImpRdWVy
eSAtICNzcGVlY2g1IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3Ry
dW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRy
aWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sxMTMwMjMwLjAsIDExNDE2MzkuMCwgMTE1MzAw
NC4wLCAxMTUzNjg1LjAsIDExNjk3NjMuMF0sIFsxMDgzMTU2LjAsIDEwODk4NzMuMCwgMTA5Mjgx
MC4wLCAxMTA0MTgwLjAsIDExMzAwNDAuMF0sIFsxMTI1NzE2LjAsIDExMjY1MTQuMCwgMTEzNDA5
OS4wLCAxMTM3NTk0LjAsIDExNTE3MjUuMF0sIFsxMDI5NTcxLjAsIDEwNDE0MTEuMCwgMTA0NTg2
MC4wLCAxMDUwMTI4LjAsIDEwNTE0MzIuMF1dfX19LCAialF1ZXJ5IC0gZGl2Omxhc3QtY2hpbGQi
OiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFu
Y2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMi
OiB7ImN1cnJlbnQiOiBbWzIxMzczLjAsIDIxNTg2LjAsIDIxNjA1LjAsIDIxNzAzLjAsIDIxNzQ5
LjBdLCBbMjE3NjguMCwgMjE3ODUuMCwgMjE4MDkuMCwgMjE4NTIuMCwgMjE5MjIuMF0sIFsyMDM1
Ny4wLCAyMDc2Ny4wLCAyMTIxOS4wLCAyMTMwNy4wLCAyMTM4Mi4wXSwgWzIxNjk4LjAsIDIxNzE4
LjAsIDIxODcxLjAsIDIxODg2LjAsIDIyMDU0LjBdXX19fSwgImpRdWVyeSAtIGRpdiB+IGRpdiI6
IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5j
ZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6
IHsiY3VycmVudCI6IFtbMTgxMzAuMCwgMTgxNzQuMCwgMTg0MzAuMCwgMTg0OTIuMCwgMTg1MTEu
MF0sIFsxODUwNi4wLCAxODUxMC4wLCAxODUxOC4wLCAxODU5Mi4wLCAxODcxMS4wXSwgWzE4NDk0
LjAsIDE4NTc3LjAsIDE4NjUzLjAsIDE4NzA1LjAsIDE4Nzc1LjBdLCBbMTg3MzMuMCwgMTg3Nzcu
MCwgMTg3OTMuMCwgMTg5OTQuMCwgMTkwMTguMF1dfX19LCAialF1ZXJ5IC0gZGl2W2NsYXNzXSI6
IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5j
ZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6
IHsiY3VycmVudCI6IFtbMTg4NTguMCwgMTg5NzUuMCwgMTkwNTguMCwgMTkxNzMuMCwgMTkxNzcu
MF0sIFsxODk3Ny4wLCAxOTA3Ni4wLCAxOTA5MS4wLCAxOTEyNy4wLCAxOTMyNS4wXSwgWzE4OTc5
LjAsIDE5MTMzLjAsIDE5MTM1LjAsIDE5MTcwLjAsIDE5MjM2LjBdLCBbMTkxNTguMCwgMTkyNTEu
MCwgMTkyODcuMCwgMTkzODUuMCwgMTk0NjIuMF1dfX19LCAialF1ZXJ5IC0gZGl2Om50aC1jaGls
ZChldmVuKSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9Q
ZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6
IHsiUnVucyI6IHsiY3VycmVudCI6IFtbNTk5NS4wLCA2MDI0LjAsIDYwNDMuMCwgNjA0My4wLCA2
MDU5LjBdLCBbNjAwMy4wLCA2MDMyLjAsIDYwMzYuMCwgNjA1OS4wLCA2MDc2LjBdLCBbNTk0NC4w
LCA1OTYxLjAsIDYwMDQuMCwgNjAwNS4wLCA2MDExLjBdLCBbNTk5OS4wLCA2MDEwLjAsIDYwMTMu
MCwgNjAxMy4wLCA2MDUzLjBdXX19fSwgImpRdWVyeSAtIGRpdjpmaXJzdC1jaGlsZCI6IHsidXJs
IjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3Rz
L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3Vy
cmVudCI6IFtbMjE2MTAuMCwgMjE3NTEuMCwgMjE3OTEuMCwgMjE4NjguMCwgMjE4ODguMF0sIFsy
MTI3OS4wLCAyMTM0OS4wLCAyMTQ0Mi4wLCAyMTUzOC4wLCAyMTU2NS4wXSwgWzIxNDY0LjAsIDIx
NTEyLjAsIDIxNzMwLjAsIDIxODE0LjAsIDIxOTg1LjBdLCBbMjE0MTkuMCwgMjE1NTQuMCwgMjE1
NzMuMCwgMjE2MDcuMCwgMjE2NTcuMF1dfX19LCAialF1ZXJ5IC0gZGl2I3NwZWVjaDUiOiB7InVy
bCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0
cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1
cnJlbnQiOiBbWzIyMjQ0LjAsIDIyMzE1LjAsIDIyNDEwLjAsIDIyNTIzLjAsIDIyNTMxLjBdLCBb
MjE3MDcuMCwgMjE3OTQuMCwgMjE4NTcuMCwgMjIwNDYuMCwgMjIwNzUuMF0sIFsyMTQxNC4wLCAy
MTYxNC4wLCAyMTY3NC4wLCAyMTc1OS4wLCAyMTc2MC4wXSwgWzIyMTg5LjAsIDIyMzA0LjAsIDIy
MzU1LjAsIDIyMzU4LjAsIDIyNTE5LjBdXX19fSwgImpRdWVyeSAtIGRpdi5zY2VuZSBkaXYuZGlh
bG9nIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJS
dW5zIjogeyJjdXJyZW50IjogW1syMjE4NC4wLCAyMjE5NC4wLCAyMjMwMy4wLCAyMjM0Ny4wLCAy
MjM4My4wXSwgWzIxNjAwLjAsIDIxNjcwLjAsIDIxODA3LjAsIDIyMDQ1LjAsIDIyMTE2LjBdLCBb
MjIxMjguMCwgMjIxNTYuMCwgMjIxNjQuMCwgMjIyMTYuMCwgMjIyMzYuMF0sIFsyMTY1My4wLCAy
MTgzOS4wLCAyMTg3NS4wLCAyMTkyNS4wLCAyMjAwMy4wXV19fX0sICJqUXVlcnkgLSBkaXYuY2hh
cmFjdGVyLCBkaXYuZGlhbG9nIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93
c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIs
ICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sxMTUwNy4wLCAxMTU1MS4wLCAxMTU1
My4wLCAxMTU2Ny4wLCAxMTU5Ny4wXSwgWzExNDYxLjAsIDExNDY4LjAsIDExNTA5LjAsIDExNTQ1
LjAsIDExNTUxLjBdLCBbMTE0MDguMCwgMTE0NDEuMCwgMTE0ODQuMCwgMTE0OTAuMCwgMTE1MjQu
MF0sIFsxMTUxMC4wLCAxMTU3OC4wLCAxMTU5My4wLCAxMTYxMy4wLCAxMTYzMy4wXV19fX0sICJq
UXVlcnkgLSBkaXY6bnRoLWNoaWxkKG4pIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnku
aHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sxODk0OC4wLCAxOTI2Mi4w
LCAxOTI4NS4wLCAxOTI5OC4wLCAxOTQ4OS4wXSwgWzE5MTIyLjAsIDE5MjcyLjAsIDE5MjkyLjAs
IDE5MzA0LjAsIDE5NDA0LjBdLCBbMTkxMDguMCwgMTkxMjkuMCwgMTkxNTYuMCwgMTkyMjYuMCwg
MTk0NjcuMF0sIFsxOTIwOS4wLCAxOTI2NS4wLCAxOTQ0Mi4wLCAxOTQ1Ni4wLCAxOTQ5NS4wXV19
fX0sICJqUXVlcnkgLSBkaXYiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dz
ZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwg
Im1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzEzMDkxNC4wLCAxMzIxMTYuMCwgMTMz
MDcyLjAsIDEzMzIxNi4wLCAxMzMzNjEuMF0sIFsxMzQyODAuMCwgMTM1OTgwLjAsIDEzNzUyMi4w
LCAxMzgxMzcuMCwgMTM5ODYwLjBdLCBbMTI5NDk3LjAsIDEzMjA3My4wLCAxMzI4NjguMCwgMTM0
MjQ3LjAsIDEzNTg4NC4wXSwgWzEzMTU5MS4wLCAxMzUwMjcuMCwgMTM2MDc4LjAsIDEzNjY0NS4w
LCAxMzc4MDEuMF1dfX19fX19fX0sICJidWlsZFRpbWUiOiAiMjAxNC0wOS0xMlQxNTozMzo1NC44
NzQ4OTAiLCAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDE0LTA5LTEy
VDEzOjA2OjEzWiIsICJyZXZpc2lvbiI6ICIxNzM1NTcifX19XTwvc2NyaXB0PgoKCjxzY3JpcHQg
YXN5bmM9IiIgc3JjPSIvVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0cy9y
ZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzIj48L3NjcmlwdD48c2NyaXB0IGFzeW5jPSIiIHNy
Yz0iL1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2px
dWVyeS50YWJsZXNvcnRlci5taW4uanMiPjwvc2NyaXB0PjxzY3JpcHQgYXN5bmM9IiIgc3JjPSIv
VXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlz
dGljcy5qcyI+PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD5ZdGV4dC9odG1sVVVURi04AAAACAAAAA0A
AAAfAAAAMQAAADYAAAA/AAAATgAAAGQAAAB2AAAAjAAAAPEAAANTAAXMmAAFzKoABcyzAAXNAwAF
z04ABmIFAAZiFwAGYiAABmJ3AAZkyQAGpVUABqVnAAalcAAGpbsABqgBAAbK/gAGyxAABssbAAbL
MgAGy1AABstRAAbLtAAHilUAB4pfAAAAAAAABAEAAAAAAAAAJAAAAAAAAAAAAAAAAAAHimU=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>238039</attachid>
            <date>2014-09-12 11:27:42 -0700</date>
            <delta_ts>2014-09-12 11:27:42 -0700</delta_ts>
            <desc>JIT Compiled version</desc>
            <filename>compiled.webarchive</filename>
            <type>application/x-webarchive</type>
            <size>520182</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">YnBsaXN0MDDSAQIDDl8QD1dlYk1haW5SZXNvdXJjZV8QD1dlYlN1YnJlc291cmNlc9UEBQYHCAkK
CwwNXxAbV2ViUmVzb3VyY2VUZXh0RW5jb2RpbmdOYW1lXxAUV2ViUmVzb3VyY2VGcmFtZU5hbWVe
V2ViUmVzb3VyY2VVUkxfEA9XZWJSZXNvdXJjZURhdGFfEBNXZWJSZXNvdXJjZU1JTUVUeXBlVVVU
Ri04UF8QYGZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvV2ViS2l0QnVpbGQvcGVyZi1y
ZWdyZXNzaW9uL1JlbGVhc2UvUGVyZm9ybWFuY2VUZXN0c1Jlc3VsdHMuaHRtbE8SAAEjfDwhRE9D
VFlQRSBodG1sPjxodG1sPjxoZWFkPgo8dGl0bGU+V2ViS2l0IFBlcmZvcm1hbmNlIFRlc3QgUmVz
dWx0czwvdGl0bGU+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgpzZWN0aW9uIHsKICAgIGJhY2tn
cm91bmQ6IHdoaXRlOwogICAgcGFkZGluZzogMTBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
fQoKLnRpbWUtcGxvdHMgewogICAgcGFkZGluZy1sZWZ0OiAyNXB4Owp9CgoudGltZS1wbG90cyA+
IGRpdiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogOTBweDsKICAgIGhl
aWdodDogNDBweDsKICAgIG1hcmdpbi1yaWdodDogMTBweDsKfQoKc2VjdGlvbiBoMSB7CiAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXNpemU6IDFlbTsKfQoKc2VjdGlvbiAudG9vbHRp
cCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBi
YWNrZ3JvdW5kOiAjZmZjYzY2OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgcGFkZGluZzog
MHB4IDVweDsKfQoKYm9keSB7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBtYXJnaW46IDBweDsKICAg
IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwp9Cgp0YWJsZSB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0
ZTsKICAgIHdpZHRoOiAxMDAlOwp9Cgp0YWJsZSwgdGQsIHRoIHsKICAgIGJvcmRlci1jb2xsYXBz
ZTogY29sbGFwc2U7CiAgICBwYWRkaW5nOiA1cHg7Cn0KCnRyLmV2ZW4gewogICAgYmFja2dyb3Vu
ZDogI2Y2ZjZmNjsKfQoKdGFibGUgdGQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZm9u
dC1mYW1pbHk6IG1vbm9zcGFjZTsKfQoKdGgsIHRkIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAg
IGN1cnNvcjogaGFuZDsKfQoKdGggewogICAgYmFja2dyb3VuZDogI2U2ZWVlZTsKICAgIGJhY2tn
cm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZy
b20ocmdiKDI0NCwgMjQ0LCAyNDQpKSwgdG8ocmdiKDIxNywgMjE3LCAyMTcpKSk7CiAgICBib3Jk
ZXI6IDFweCBzb2xpZCAjY2NjOwp9Cgp0aDphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUI4JzsK
fQoKdGguaGVhZGVyU29ydFVwOmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcgXDI1QkUnOwp9Cgp0aC5o
ZWFkZXJTb3J0RG93bjphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUI0JzsKfQoKdGQuY29tcGFy
aXNvbiwgdGQucmVzdWx0IHsKICAgIHRleHQtYWxpZ246IHJpZ2h0Owp9Cgp0ZC5iZXR0ZXIgewog
ICAgY29sb3I6ICM2YzY7Cn0KCnRkLndvcnNlIHsKICAgIGNvbG9yOiAjYzY2Owp9Cgp0ZC5taXNz
aW5nIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmNoZWNrYm94IHsKICAgIGRpc3BsYXk6
IGlubGluZS1ibG9jazsKICAgIGJhY2tncm91bmQ6ICNlZWU7CiAgICBiYWNrZ3JvdW5kOiAtd2Vi
a2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBmcm9tKHJnYigyMjAs
IDIyMCwgMjIwKSksIHRvKHJnYigyMDAsIDIwMCwgMjAwKSkpOwogICAgYm9yZGVyOiBpbnNldCAx
cHggI2RkZDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIG1hcmdpbjogMTBweDsKICAgIGZv
bnQtc2l6ZTogc21hbGw7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBjdXJzb3I6IGhhbmQ7CiAg
ICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5j
aGVja2JveCBzcGFuIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGxpbmUtaGVpZ2h0
OiAxMDAlOwogICAgcGFkZGluZzogNXB4IDhweDsKICAgIGJvcmRlcjogb3V0c2V0IDFweCB0cmFu
c3BhcmVudDsKfQoKLmNoZWNrYm94IC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQ6ICNlNmVlZWU7
CiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQg
Ym90dG9tLCBmcm9tKHJnYigyNTUsIDI1NSwgMjU1KSksIHRvKHJnYigyMzUsIDIzNSwgMjM1KSkp
OwogICAgYm9yZGVyOiBvdXRzZXQgMXB4ICNlZWU7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7Cn0K
Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgc3R5bGU9InBhZGRpbmc6IDAgMTBweDsiPgpS
ZXN1bHQgPHNwYW4gaWQ9InRpbWUtbWVtb3J5IiBjbGFzcz0iY2hlY2tib3giPjxzcGFuIGNsYXNz
PSJjaGVja2VkIj5UaW1lPC9zcGFuPjxzcGFuPk1lbW9yeTwvc3Bhbj48L3NwYW4+ClJlZmVyZW5j
ZSA8c3BhbiBpZD0icmVmZXJlbmNlIiBjbGFzcz0iY2hlY2tib3giPjxzcGFuIHZhbHVlPSIwIiBj
bGFzcz0iY2hlY2tlZCI+cjE3MzU1Nzwvc3Bhbj48c3BhbiB2YWx1ZT0iMSI+cjE3MzU1Nzwvc3Bh
bj48L3NwYW4+CjxzcGFuIHRpdGxlPSJDb25maWRlbmNlIEludGVydmFsIERlbHRhIj5DSc6UPC9z
cGFuPiA8c3BhbiBpZD0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIGNsYXNzPSJjaGVja2JveCI+
PHNwYW4gY2xhc3M9ImNoZWNrZWQiPlNob3c8L3NwYW4+PHNwYW4+SGlkZTwvc3Bhbj48L3NwYW4+
CjwvZGl2Pgo8dGFibGUgaWQ9ImNvbnRhaW5lciI+PHRoZWFkPjx0cj48dGggY2xhc3M9ImhlYWRl
ciI+VGVzdDwvdGg+PHRoIGNsYXNzPSJoZWFkZXIiPlVuaXQ8L3RoPjx0aCBjb2xzcGFuPSIyIiBj
bGFzcz0ie3NvcnRlcjogJ2NvbXBhcmlzb24nfSBoZWFkZXIiPnIxNzM1NTc8L3RoPjx0aCBjb2xz
cGFuPSIzIiBjbGFzcz0ie3NvcnRlcjogJ2NvbXBhcmlzb24nfSBoZWFkZXIiPnIxNzM1NTc8L3Ro
PjwvdHI+PC90aGVhZD48dGJvZHk+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ry
b21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtICNzY2VuZTEgI3NwZWVjaDE6UnVuczwvdGQ+
PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLP
gz0wLjA3LCBtaW49MjEuMzIsIG1heD0yMS44MwpzbG9wZT0tMC4wMCwgUl4yPTAuMDAiPjIxLjYw
PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wNywg
bWluPTIxLjMyLCBtYXg9MjEuODMKc2xvcGU9LTAuMDAsIFJeMj0wLjAwIj7CsSAwLjMzJTwvdGQ+
PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjE1LCBtaW49MjEuMDYsIG1heD0yMi4wNwpz
bG9wZT0wLjA0LCBSXjI9MC42NSI+MjEuNjk8c3BhbiBzdHlsZT0iZGlzcGxheTogbm9uZSI+fDwv
c3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0w
LjE1LCBtaW49MjEuMDYsIG1heD0yMi4wNwpzbG9wZT0wLjA0LCBSXjI9MC42NSI+wrEgMC42NyUg
PHNwYW4gY2xhc3M9InJlZ3Jlc3Npb24td2FybmluZyIgdGl0bGU9IkRldGVjdGVkIGEgdGltZSBk
ZXBlbmRlbmN5IHdpdGggc2xvcGU9MC4wNCwgUl4yPTAuNjUiPjxzdmcgdmlld0JveD0iMCAwIDEw
MCAxMDAiIHN0eWxlPSJ3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4OyB2ZXJ0aWNhbC1hbGlnbjog
Ym90dG9tOyIgdmVyc2lvbj0iMS4xIj48cG9seWdvbiBmaWxsPSJyZWQiIHBvaW50cz0iNTAsMTAg
OTAsODAgMTAsODAgNTAsMTAiIHN0cm9rZT0icmVkIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2Ut
bGluZWpvaW49InJvdW5kIj48L3BvbHlnb24+PHBvbHlnb24gZmlsbD0id2hpdGUiIHBvaW50cz0i
NDcsMzAgNDgsMjksIDUwLCAyOC43LCA1MiwyOSA1MywzMCA1MCw2MCIgc3Ryb2tlPSJ3aGl0ZSIg
c3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PC9wb2x5Z29uPjxjaXJj
bGUgY3g9IjUwIiBjeT0iNzMiIHI9IjYiIGZpbGw9IndoaXRlIj48L2NpcmNsZT48L3N2Zz4gPC9z
cGFuPjwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIj48L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVu
Ij48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSAjc3Bl
ZWNoNTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJl
c3VsdCIgdGl0bGU9Is+DPTIwLjQ3LCBtaW49MTAyOS41NywgbWF4PTExNjkuNzYKc2xvcGU9LTQu
ODQsIFJeMj0wLjQzIj4xMTA3LjEyPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERl
bHRhIiB0aXRsZT0iz4M9MjAuNDcsIG1pbj0xMDI5LjU3LCBtYXg9MTE2OS43NgpzbG9wZT0tNC44
NCwgUl4yPTAuNDMiPsKxIDEuODUlPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTIw
LjE2LCBtaW49MTAxMi44NywgbWF4PTExNTYuMzAKc2xvcGU9Ni4wNiwgUl4yPTAuNjkiPjEwOTAu
NDY8c3BhbiBzdHlsZT0iZGlzcGxheTogbm9uZSI+fDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29u
ZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0yMC4xNiwgbWluPTEwMTIuODcsIG1heD0x
MTU2LjMwCnNsb3BlPTYuMDYsIFJeMj0wLjY5Ij7CsSAxLjg1JSA8c3BhbiBjbGFzcz0icmVncmVz
c2lvbi13YXJuaW5nIiB0aXRsZT0iRGV0ZWN0ZWQgYSB0aW1lIGRlcGVuZGVuY3kgd2l0aCBzbG9w
ZT02LjA2LCBSXjI9MC42OSI+PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgc3R5bGU9IndpZHRo
OiAxOHB4OyBoZWlnaHQ6IDE4cHg7IHZlcnRpY2FsLWFsaWduOiBib3R0b207IiB2ZXJzaW9uPSIx
LjEiPjxwb2x5Z29uIGZpbGw9InJlZCIgcG9pbnRzPSI1MCwxMCA5MCw4MCAxMCw4MCA1MCwxMCIg
c3Ryb2tlPSJyZWQiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjwv
cG9seWdvbj48cG9seWdvbiBmaWxsPSJ3aGl0ZSIgcG9pbnRzPSI0NywzMCA0OCwyOSwgNTAsIDI4
LjcsIDUyLDI5IDUzLDMwIDUwLDYwIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEwIiBz
dHJva2UtbGluZWpvaW49InJvdW5kIj48L3BvbHlnb24+PGNpcmNsZSBjeD0iNTAiIGN5PSI3MyIg
cj0iNiIgZmlsbD0id2hpdGUiPjwvY2lyY2xlPjwvc3ZnPiA8L3NwYW4+PC90ZD48dGQgY2xhc3M9
ImNvbXBhcmlzb24iPjwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4v
RHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gKjpSdW5zPC90ZD48dGQgY2xhc3M9InVu
aXQiPnJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz00NS4xMCwgbWluPTI4
NjMuMDAsIG1heD0zMTM0LjAwCnNsb3BlPTMuNDAsIFJeMj0wLjA0Ij4zMDA1LjMwPC90ZD48dGQg
Y2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9NDUuMTAsIG1pbj0yODYz
LjAwLCBtYXg9MzEzNC4wMApzbG9wZT0zLjQwLCBSXjI9MC4wNCI+wrEgMS41MCU8L3RkPjx0ZCBj
bGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MzYuNjEsIG1pbj0yODExLjAwLCBtYXg9MzExOC4wMApz
bG9wZT0wLjEzLCBSXjI9MC4wMCI+Mjk4Ny4zNDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58
PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+D
PTM2LjYxLCBtaW49MjgxMS4wMCwgbWF4PTMxMTguMDAKc2xvcGU9MC4xMywgUl4yPTAuMDAiPsKx
IDEuMjMlPC90ZD48dGQgY2xhc3M9ImNvbXBhcmlzb24iPjwvdGQ+PC90cj48dHIgY2xhc3M9ImV2
ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIC5k
aWFsb2c6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJy
ZXN1bHQiIHRpdGxlPSLPgz0zLjk5LCBtaW49MzMxLjc3LCBtYXg9MzYxLjUxCnNsb3BlPS0wLjA1
LCBSXjI9MC4wMCI+MzQ1LjY1PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
IiB0aXRsZT0iz4M9My45OSwgbWluPTMzMS43NywgbWF4PTM2MS41MQpzbG9wZT0tMC4wNSwgUl4y
PTAuMDAiPsKxIDEuMTUlPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTUuODcsIG1p
bj0zMjQuNzMsIG1heD0zNjUuMjcKc2xvcGU9LTAuMjcsIFJeMj0wLjAyIj4zNDIuNzU8c3BhbiBz
dHlsZT0iZGlzcGxheTogbm9uZSI+fDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUlu
dGVydmFsRGVsdGEiIHRpdGxlPSLPgz01Ljg3LCBtaW49MzI0LjczLCBtYXg9MzY1LjI3CnNsb3Bl
PS0wLjI3LCBSXjI9MC4wMiI+wrEgMS43MSU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90
ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5
LWpxdWVyeS9qUXVlcnkgLSBib2R5IGRpdjpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVu
cy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMDUsIG1pbj0xOC42NiwgbWF4
PTE5LjExCnNsb3BlPS0wLjAwLCBSXjI9MC4wMiI+MTguODY8L3RkPjx0ZCBjbGFzcz0iY29uZmlk
ZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjA1LCBtaW49MTguNjYsIG1heD0xOS4xMQpz
bG9wZT0tMC4wMCwgUl4yPTAuMDIiPsKxIDAuMjYlPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0
bGU9Is+DPTAuMDcsIG1pbj0xOC43MywgbWF4PTE5LjIzCnNsb3BlPTAuMDEsIFJeMj0wLjM5Ij4x
OS4wMTxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58MC44MiUgQmV0dGVyPC9zcGFuPjwvdGQ+
PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMDcsIG1pbj0x
OC43MywgbWF4PTE5LjIzCnNsb3BlPTAuMDEsIFJeMj0wLjM5Ij7CsSAwLjM1JTwvdGQ+PHRkIGNs
YXNzPSJjb21wYXJpc29uIGJldHRlciI+MC44MiUgQmV0dGVyPC90ZD48L3RyPjx0ciBjbGFzcz0i
ZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0g
Ym9keTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJl
c3VsdCIgdGl0bGU9Is+DPTUuMTUsIG1pbj0zNTYuMjIsIG1heD0zODguOTkKc2xvcGU9MC4wNiwg
Ul4yPTAuMDAiPjM2OS44NjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIg
dGl0bGU9Is+DPTUuMTUsIG1pbj0zNTYuMjIsIG1heD0zODguOTkKc2xvcGU9MC4wNiwgUl4yPTAu
MDAiPsKxIDEuMzklPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTcuNDEsIG1pbj0z
MzQuODQsIG1heD0zODEuMzMKc2xvcGU9MC41MiwgUl4yPTAuMDQiPjM1OC4wNjxzcGFuIHN0eWxl
PSJkaXNwbGF5OiBub25lIj58My4xOSUgV29yc2UmbmJzcDs8L3NwYW4+PC90ZD48dGQgY2xhc3M9
ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9Ny40MSwgbWluPTMzNC44NCwgbWF4
PTM4MS4zMwpzbG9wZT0wLjUyLCBSXjI9MC4wNCI+wrEgMi4wNyU8L3RkPjx0ZCBjbGFzcz0iY29t
cGFyaXNvbiB3b3JzZSI+My4xOSUgV29yc2UmbmJzcDs8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQi
Pjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdiAj
c3BlZWNoNTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9
InJlc3VsdCIgdGl0bGU9Is+DPTAuMDksIG1pbj0yMS41MSwgbWF4PTIyLjE1CnNsb3BlPTAuMDEs
IFJeMj0wLjA4Ij4yMS43OTwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIg
dGl0bGU9Is+DPTAuMDksIG1pbj0yMS41MSwgbWF4PTIyLjE1CnNsb3BlPTAuMDEsIFJeMj0wLjA4
Ij7CsSAwLjQxJTwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjEwLCBtaW49MjAu
OTEsIG1heD0yMS44MwpzbG9wZT0tMC4wMSwgUl4yPTAuMDUiPjIxLjM0PHNwYW4gc3R5bGU9ImRp
c3BsYXk6IG5vbmUiPnwyLjA3JSBXb3JzZSZuYnNwOzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29u
ZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjEwLCBtaW49MjAuOTEsIG1heD0yMS44
MwpzbG9wZT0tMC4wMSwgUl4yPTAuMDUiPsKxIDAuNDUlPC90ZD48dGQgY2xhc3M9ImNvbXBhcmlz
b24gd29yc2UiPjIuMDclIFdvcnNlJm5ic3A7PC90ZD48L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRk
IGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2ICsgZGl2
OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0
IiB0aXRsZT0iz4M9MC4xOSwgbWluPTIwLjIxLCBtYXg9MjEuOTQKc2xvcGU9MC4wMywgUl4yPTAu
MTUiPjIxLjM1PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0i
z4M9MC4xOSwgbWluPTIwLjIxLCBtYXg9MjEuOTQKc2xvcGU9MC4wMywgUl4yPTAuMTUiPsKxIDAu
OTAlPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMDgsIG1pbj0yMS4zNywgbWF4
PTIxLjk0CnNsb3BlPTAuMDIsIFJeMj0wLjQxIj4yMS43MzxzcGFuIHN0eWxlPSJkaXNwbGF5OiBu
b25lIj58MS44MSUgQmV0dGVyPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSIgdGl0bGU9Is+DPTAuMDgsIG1pbj0yMS4zNywgbWF4PTIxLjk0CnNsb3BlPTAuMDIs
IFJeMj0wLjQxIj7CsSAwLjM1JTwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIGJldHRlciI+MS44
MSUgQmV0dGVyPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9t
YWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYgLmRpYWxvZzpSdW5zPC90ZD48dGQgY2xh
c3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMDks
IG1pbj0yMS40OSwgbWF4PTIyLjEzCnNsb3BlPS0wLjAyLCBSXjI9MC4zOSI+MjEuODM8L3RkPjx0
ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjA5LCBtaW49MjEu
NDksIG1heD0yMi4xMwpzbG9wZT0tMC4wMiwgUl4yPTAuMzkiPsKxIDAuMzklPC90ZD48dGQgY2xh
c3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMTQsIG1pbj0yMS4yNywgbWF4PTIyLjE5CnNsb3BlPTAu
MDIsIFJeMj0wLjIwIj4yMS43NjxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwv
dGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTQsIG1p
bj0yMS4yNywgbWF4PTIyLjE5CnNsb3BlPTAuMDIsIFJeMj0wLjIwIj7CsSAwLjY0JTwvdGQ+PHRk
IGNsYXNzPSJjb21wYXJpc29uIj48L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9
InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYgJmd0OyBkaXY6UnVu
czwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRp
dGxlPSLPgz0wLjA2LCBtaW49MTkuOTEsIG1heD0yMC4yOQpzbG9wZT0wLjAwLCBSXjI9MC4wMiI+
MjAuMDk8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0w
LjA2LCBtaW49MTkuOTEsIG1heD0yMC4yOQpzbG9wZT0wLjAwLCBSXjI9MC4wMiI+wrEgMC4yOCU8
L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xNSwgbWluPTE5LjE3LCBtYXg9MjAu
MTkKc2xvcGU9MC4wNSwgUl4yPTAuNzMiPjE5Ljg0PHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUi
PnwxLjI4JSBXb3JzZSZuYnNwOzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVy
dmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE1LCBtaW49MTkuMTcsIG1heD0yMC4xOQpzbG9wZT0wLjA1
LCBSXjI9MC43MyI+wrEgMC43NCUgPHNwYW4gY2xhc3M9InJlZ3Jlc3Npb24td2FybmluZyIgdGl0
bGU9IkRldGVjdGVkIGEgdGltZSBkZXBlbmRlbmN5IHdpdGggc2xvcGU9MC4wNSwgUl4yPTAuNzMi
Pjxzdmcgdmlld0JveD0iMCAwIDEwMCAxMDAiIHN0eWxlPSJ3aWR0aDogMThweDsgaGVpZ2h0OiAx
OHB4OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyIgdmVyc2lvbj0iMS4xIj48cG9seWdvbiBmaWxs
PSJyZWQiIHBvaW50cz0iNTAsMTAgOTAsODAgMTAsODAgNTAsMTAiIHN0cm9rZT0icmVkIiBzdHJv
a2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48L3BvbHlnb24+PHBvbHlnb24g
ZmlsbD0id2hpdGUiIHBvaW50cz0iNDcsMzAgNDgsMjksIDUwLCAyOC43LCA1MiwyOSA1MywzMCA1
MCw2MCIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJy
b3VuZCI+PC9wb2x5Z29uPjxjaXJjbGUgY3g9IjUwIiBjeT0iNzMiIHI9IjYiIGZpbGw9IndoaXRl
Ij48L2NpcmNsZT48L3N2Zz4gPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIHdvcnNl
Ij4xLjI4JSBXb3JzZSZuYnNwOzwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0
ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2IGRpdiBkaXY6UnVuczwv
dGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxl
PSLPgz0wLjE3LCBtaW49MjAuNTcsIG1heD0yMS43OApzbG9wZT0wLjAxLCBSXjI9MC4wNCI+MjEu
MjI8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE3
LCBtaW49MjAuNTcsIG1heD0yMS43OApzbG9wZT0wLjAxLCBSXjI9MC4wNCI+wrEgMC44MSU8L3Rk
Pjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4wOCwgbWluPTIxLjE2LCBtYXg9MjEuODcK
c2xvcGU9MC4wMCwgUl4yPTAuMDAiPjIxLjQyPHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPnww
Ljk1JSBCZXR0ZXI8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
IiB0aXRsZT0iz4M9MC4wOCwgbWluPTIxLjE2LCBtYXg9MjEuODcKc2xvcGU9MC4wMCwgUl4yPTAu
MDAiPsKxIDAuMzklPC90ZD48dGQgY2xhc3M9ImNvbXBhcmlzb24gYmV0dGVyIj4wLjk1JSBCZXR0
ZXI8L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nz
c3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXYgZGl2OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+
SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xMSwgbWluPTE5LjUx
LCBtYXg9MjAuMjgKc2xvcGU9MC4wMywgUl4yPTAuNjMiPjIwLjAyPC90ZD48dGQgY2xhc3M9ImNv
bmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xMSwgbWluPTE5LjUxLCBtYXg9MjAu
MjgKc2xvcGU9MC4wMywgUl4yPTAuNjMiPsKxIDAuNTMlIDxzcGFuIGNsYXNzPSJyZWdyZXNzaW9u
LXdhcm5pbmciIHRpdGxlPSJEZXRlY3RlZCBhIHRpbWUgZGVwZW5kZW5jeSB3aXRoIHNsb3BlPTAu
MDMsIFJeMj0wLjYzIj48c3ZnIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBzdHlsZT0id2lkdGg6IDE4
cHg7IGhlaWdodDogMThweDsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsiIHZlcnNpb249IjEuMSI+
PHBvbHlnb24gZmlsbD0icmVkIiBwb2ludHM9IjUwLDEwIDkwLDgwIDEwLDgwIDUwLDEwIiBzdHJv
a2U9InJlZCIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PC9wb2x5
Z29uPjxwb2x5Z29uIGZpbGw9IndoaXRlIiBwb2ludHM9IjQ3LDMwIDQ4LDI5LCA1MCwgMjguNywg
NTIsMjkgNTMsMzAgNTAsNjAiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9r
ZS1saW5lam9pbj0icm91bmQiPjwvcG9seWdvbj48Y2lyY2xlIGN4PSI1MCIgY3k9IjczIiByPSI2
IiBmaWxsPSJ3aGl0ZSI+PC9jaXJjbGU+PC9zdmc+IDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0icmVz
dWx0IiB0aXRsZT0iz4M9MC4xMCwgbWluPTE5LjU2LCBtYXg9MjAuMjcKc2xvcGU9MC4wMiwgUl4y
PTAuNTEiPjE5Ljk3PHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPnw8L3NwYW4+PC90ZD48dGQg
Y2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xMCwgbWluPTE5LjU2
LCBtYXg9MjAuMjcKc2xvcGU9MC4wMiwgUl4yPTAuNTEiPsKxIDAuNDglPC90ZD48dGQgY2xhc3M9
ImNvbXBhcmlzb24iPjwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4v
RHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2IH4gZGl2OlJ1bnM8L3RkPjx0ZCBj
bGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4x
MSwgbWluPTE4LjEzLCBtYXg9MTkuMDIKc2xvcGU9MC4wNCwgUl4yPTAuODUiPjE4LjYwPC90ZD48
dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xMSwgbWluPTE4
LjEzLCBtYXg9MTkuMDIKc2xvcGU9MC4wNCwgUl4yPTAuODUiPsKxIDAuNTclIDxzcGFuIGNsYXNz
PSJyZWdyZXNzaW9uLXdhcm5pbmciIHRpdGxlPSJEZXRlY3RlZCBhIHRpbWUgZGVwZW5kZW5jeSB3
aXRoIHNsb3BlPTAuMDQsIFJeMj0wLjg1Ij48c3ZnIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBzdHls
ZT0id2lkdGg6IDE4cHg7IGhlaWdodDogMThweDsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsiIHZl
cnNpb249IjEuMSI+PHBvbHlnb24gZmlsbD0icmVkIiBwb2ludHM9IjUwLDEwIDkwLDgwIDEwLDgw
IDUwLDEwIiBzdHJva2U9InJlZCIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJy
b3VuZCI+PC9wb2x5Z29uPjxwb2x5Z29uIGZpbGw9IndoaXRlIiBwb2ludHM9IjQ3LDMwIDQ4LDI5
LCA1MCwgMjguNywgNTIsMjkgNTMsMzAgNTAsNjAiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0
aD0iMTAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjwvcG9seWdvbj48Y2lyY2xlIGN4PSI1MCIg
Y3k9IjczIiByPSI2IiBmaWxsPSJ3aGl0ZSI+PC9jaXJjbGU+PC9zdmc+IDwvc3Bhbj48L3RkPjx0
ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xMiwgbWluPTE4LjMxLCBtYXg9MTkuMDUKc2xv
cGU9LTAuMDEsIFJeMj0wLjAyIj4xOC42OTxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9z
cGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAu
MTIsIG1pbj0xOC4zMSwgbWF4PTE5LjA1CnNsb3BlPS0wLjAxLCBSXjI9MC4wMiI+wrEgMC42MiU8
L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD48L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRk
IGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2I3NjZW5l
MSBkaXYuZGlhbG9nIGRpdjpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48
dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMDgsIG1pbj0yMS40OSwgbWF4PTIyLjExCnNs
b3BlPTAuMDIsIFJeMj0wLjUxIj4yMS44MDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSIgdGl0bGU9Is+DPTAuMDgsIG1pbj0yMS40OSwgbWF4PTIyLjExCnNsb3BlPTAuMDIs
IFJeMj0wLjUxIj7CsSAwLjM5JTwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjA4
LCBtaW49MjEuNDMsIG1heD0yMi4wMwpzbG9wZT0tMC4wMCwgUl4yPTAuMDMiPjIxLjc4PHNwYW4g
c3R5bGU9ImRpc3BsYXk6IG5vbmUiPnw8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wOCwgbWluPTIxLjQzLCBtYXg9MjIuMDMKc2xvcGU9
LTAuMDAsIFJeMj0wLjAzIj7CsSAwLjM2JTwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIj48L3Rk
PjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnkt
anF1ZXJ5L2pRdWVyeSAtIGRpdiNzcGVlY2g1OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBy
dW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xNiwgbWluPTIxLjQxLCBt
YXg9MjIuNTMKc2xvcGU9LTAuMDAsIFJeMj0wLjAwIj4yMi4wNzwvdGQ+PHRkIGNsYXNzPSJjb25m
aWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTYsIG1pbj0yMS40MSwgbWF4PTIyLjUz
CnNsb3BlPS0wLjAwLCBSXjI9MC4wMCI+wrEgMC43NCU8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0
aXRsZT0iz4M9MC4yMSwgbWluPTIxLjE0LCBtYXg9MjIuNTcKc2xvcGU9LTAuMDIsIFJeMj0wLjA5
Ij4yMS45MzxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNsYXNz
PSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMjEsIG1pbj0yMS4xNCwgbWF4
PTIyLjU3CnNsb3BlPS0wLjAyLCBSXjI9MC4wOSI+wrEgMC45NCU8L3RkPjx0ZCBjbGFzcz0iY29t
cGFyaXNvbiI+PC90ZD48L3RyPjx0ciBjbGFzcz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJv
bWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2LCBhLCBzcGFuOlJ1bnM8L3RkPjx0ZCBj
bGFzcz0idW5pdCI+cnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTI1LjY3
LCBtaW49NjkwMi4wMCwgbWF4PTcxMTMuMDAKc2xvcGU9NS4xMywgUl4yPTAuMzEiPjY5OTkuOTQ8
L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0yNS42Nywg
bWluPTY5MDIuMDAsIG1heD03MTEzLjAwCnNsb3BlPTUuMTMsIFJeMj0wLjMxIj7CsSAwLjM3JTwv
dGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz01MS4yNywgbWluPTk1MzkuMDAsIG1heD05
ODkyLjAwCnNsb3BlPTEyLjM3LCBSXjI9MC40NSI+OTcxMS40MDxzcGFuIHN0eWxlPSJkaXNwbGF5
OiBub25lIj58MzguNzQlIEJldHRlcjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUlu
dGVydmFsRGVsdGEiIHRpdGxlPSLPgz01MS4yNywgbWluPTk1MzkuMDAsIG1heD05ODkyLjAwCnNs
b3BlPTEyLjM3LCBSXjI9MC40NSI+wrEgMC41MyU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiBi
ZXR0ZXIiPjM4Ljc0JSBCZXR0ZXI8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0i
dGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdiwgZGl2LCBkaXY6UnVu
czwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5ydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRs
ZT0iz4M9MjcuMzYsIG1pbj04Mzk3LjAwLCBtYXg9ODU4Ni4wMApzbG9wZT00LjU4LCBSXjI9MC4y
MSI+ODUxMS44NTwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9
Is+DPTI3LjM2LCBtaW49ODM5Ny4wMCwgbWF4PTg1ODYuMDAKc2xvcGU9NC41OCwgUl4yPTAuMjEi
PsKxIDAuMzIlPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTMyLjkwLCBtaW49MTI1
MTcuMDAsIG1heD0xMjc4Ni4wMApzbG9wZT02LjIwLCBSXjI9MC4yNyI+MTI2ODUuNjA8c3BhbiBz
dHlsZT0iZGlzcGxheTogbm9uZSI+fDQ5LjAzJSBCZXR0ZXI8L3NwYW4+PC90ZD48dGQgY2xhc3M9
ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MzIuOTAsIG1pbj0xMjUxNy4wMCwg
bWF4PTEyNzg2LjAwCnNsb3BlPTYuMjAsIFJeMj0wLjI3Ij7CsSAwLjI2JTwvdGQ+PHRkIGNsYXNz
PSJjb21wYXJpc29uIGJldHRlciI+NDkuMDMlIEJldHRlcjwvdGQ+PC90cj48dHIgY2xhc3M9ImV2
ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRp
di5jaGFyYWN0ZXIsIGRpdi5kaWFsb2c6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMv
czwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjAzLCBtaW49MTEuNDEsIG1heD0x
MS42MwpzbG9wZT0wLjAwLCBSXjI9MC4wNiI+MTEuNTM8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5j
ZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjAzLCBtaW49MTEuNDEsIG1heD0xMS42MwpzbG9w
ZT0wLjAwLCBSXjI9MC4wNiI+wrEgMC4yNCU8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0i
z4M9MC4wNywgbWluPTE2LjQxLCBtYXg9MTcuMDAKc2xvcGU9MC4wMiwgUl4yPTAuNDQiPjE2Ljcy
PHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPnw0NS4wMyUgQmV0dGVyPC9zcGFuPjwvdGQ+PHRk
IGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMDcsIG1pbj0xNi40
MSwgbWF4PTE3LjAwCnNsb3BlPTAuMDIsIFJeMj0wLjQ0Ij7CsSAwLjQzJTwvdGQ+PHRkIGNsYXNz
PSJjb21wYXJpc29uIGJldHRlciI+NDUuMDMlIEJldHRlcjwvdGQ+PC90cj48dHIgY2xhc3M9Im9k
ZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2
LmRpYWxvZzpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9
InJlc3VsdCIgdGl0bGU9Is+DPTAuMTMsIG1pbj0yMS45NCwgbWF4PTIyLjg4CnNsb3BlPTAuMDIs
IFJeMj0wLjE0Ij4yMi4zNzwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIg
dGl0bGU9Is+DPTAuMTMsIG1pbj0yMS45NCwgbWF4PTIyLjg4CnNsb3BlPTAuMDIsIFJeMj0wLjE0
Ij7CsSAwLjU2JTwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjA5LCBtaW49MjEu
ODUsIG1heD0yMi41OApzbG9wZT0wLjAyLCBSXjI9MC4zNCI+MjIuMjA8c3BhbiBzdHlsZT0iZGlz
cGxheTogbm9uZSI+fDAuNzclIFdvcnNlJm5ic3A7PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25m
aWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMDksIG1pbj0yMS44NSwgbWF4PTIyLjU4
CnNsb3BlPTAuMDIsIFJeMj0wLjM0Ij7CsSAwLjQyJTwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29u
IHdvcnNlIj4wLjc3JSBXb3JzZSZuYnNwOzwvdGQ+PC90cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBj
bGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdi5zY2VuZSBk
aXYuZGlhbG9nOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFz
cz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xMSwgbWluPTIxLjYwLCBtYXg9MjIuMzgKc2xvcGU9LTAu
MDEsIFJeMj0wLjExIj4yMi4wNDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0
YSIgdGl0bGU9Is+DPTAuMTEsIG1pbj0yMS42MCwgbWF4PTIyLjM4CnNsb3BlPS0wLjAxLCBSXjI9
MC4xMSI+wrEgMC41MCU8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xMywgbWlu
PTIxLjk0LCBtYXg9MjIuODAKc2xvcGU9LTAuMDIsIFJeMj0wLjE3Ij4yMi4zOTxzcGFuIHN0eWxl
PSJkaXNwbGF5OiBub25lIj58MS41NyUgQmV0dGVyPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25m
aWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTMsIG1pbj0yMS45NCwgbWF4PTIyLjgw
CnNsb3BlPS0wLjAyLCBSXjI9MC4xNyI+wrEgMC41OSU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNv
biBiZXR0ZXIiPjEuNTclIEJldHRlcjwvdGQ+PC90cj48dHIgY2xhc3M9Im9kZCI+PHRkIGNsYXNz
PSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2OlJ1bnM8L3RkPjx0
ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9
MS4yNywgbWluPTEyOS41MCwgbWF4PTEzOS44NgpzbG9wZT0wLjE2LCBSXjI9MC4xMiI+MTM0LjUx
PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MS4yNywg
bWluPTEyOS41MCwgbWF4PTEzOS44NgpzbG9wZT0wLjE2LCBSXjI9MC4xMiI+wrEgMC45NCU8L3Rk
Pjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MS4yOSwgbWluPTEyNi44MSwgbWF4PTEzNS40
NQpzbG9wZT0wLjE1LCBSXjI9MC4xMCI+MTMyLjA2PHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUi
PnwxLjgyJSBXb3JzZSZuYnNwOzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVy
dmFsRGVsdGEiIHRpdGxlPSLPgz0xLjI5LCBtaW49MTI2LjgxLCBtYXg9MTM1LjQ1CnNsb3BlPTAu
MTUsIFJeMj0wLjEwIj7CsSAwLjk4JTwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIHdvcnNlIj4x
LjgyJSBXb3JzZSZuYnNwOzwvdGQ+PC90cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVz
dCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdjpmaXJzdC1jaGlsZDpSdW5z
PC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0
bGU9Is+DPTAuMDksIG1pbj0yMS4yOCwgbWF4PTIxLjk4CnNsb3BlPS0wLjAwLCBSXjI9MC4wMSI+
MjEuNjI8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0w
LjA5LCBtaW49MjEuMjgsIG1heD0yMS45OApzbG9wZT0tMC4wMCwgUl4yPTAuMDEiPsKxIDAuNDEl
PC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMTEsIG1pbj0yMS41OCwgbWF4PTIy
LjM4CnNsb3BlPS0wLjAxLCBSXjI9MC4xNSI+MjIuMDA8c3BhbiBzdHlsZT0iZGlzcGxheTogbm9u
ZSI+fDEuNzglIEJldHRlcjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFs
RGVsdGEiIHRpdGxlPSLPgz0wLjExLCBtaW49MjEuNTgsIG1heD0yMi4zOApzbG9wZT0tMC4wMSwg
Ul4yPTAuMTUiPsKxIDAuNDklPC90ZD48dGQgY2xhc3M9ImNvbXBhcmlzb24gYmV0dGVyIj4xLjc4
JSBCZXR0ZXI8L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21h
ZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAtIGRpdjpsYXN0LWNoaWxkOlJ1bnM8L3RkPjx0ZCBj
bGFzcz0idW5pdCI+SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4x
OSwgbWluPTIwLjM2LCBtYXg9MjIuMDUKc2xvcGU9MC4wMSwgUl4yPTAuMDEiPjIxLjU3PC90ZD48
dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xOSwgbWluPTIw
LjM2LCBtYXg9MjIuMDUKc2xvcGU9MC4wMSwgUl4yPTAuMDEiPsKxIDAuOTAlPC90ZD48dGQgY2xh
c3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMjAsIG1pbj0yMC43MSwgbWF4PTIyLjAzCnNsb3BlPTAu
MDUsIFJeMj0wLjU4Ij4yMS41NjxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwv
dGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMjAsIG1p
bj0yMC43MSwgbWF4PTIyLjAzCnNsb3BlPTAuMDUsIFJeMj0wLjU4Ij7CsSAwLjkxJTwvdGQ+PHRk
IGNsYXNzPSJjb21wYXJpc29uIj48L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9
InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXY6bnRoLWNoaWxkKDJu
KTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPnJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQi
IHRpdGxlPSLPgz0xMy41NywgbWluPTU5NDAuMDAsIG1heD02MDM5LjAwCnNsb3BlPS0xLjk3LCBS
XjI9MC4xNiI+NTk5MC45MDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIg
dGl0bGU9Is+DPTEzLjU3LCBtaW49NTk0MC4wMCwgbWF4PTYwMzkuMDAKc2xvcGU9LTEuOTcsIFJe
Mj0wLjE2Ij7CsSAwLjIzJTwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0xNS43MCwg
bWluPTU5OTIuMDAsIG1heD02MTEzLjAwCnNsb3BlPS0wLjQxLCBSXjI9MC4wMSI+NjA0Mi41MDxz
cGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58MC44NiUgQmV0dGVyPC9zcGFuPjwvdGQ+PHRkIGNs
YXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTE1LjcwLCBtaW49NTk5Mi4w
MCwgbWF4PTYxMTMuMDAKc2xvcGU9LTAuNDEsIFJeMj0wLjAxIj7CsSAwLjI2JTwvdGQ+PHRkIGNs
YXNzPSJjb21wYXJpc29uIGJldHRlciI+MC44NiUgQmV0dGVyPC90ZD48L3RyPjx0ciBjbGFzcz0i
b2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBk
aXY6bnRoLWNoaWxkKDJuKzEpOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+cnVucy9zPC90ZD48
dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTM2LjUzLCBtaW49NTc2Ni4wMCwgbWF4PTYwNjgu
MDAKc2xvcGU9Ny4zOSwgUl4yPTAuMzEiPjU5ODEuMDA8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5j
ZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0zNi41MywgbWluPTU3NjYuMDAsIG1heD02MDY4LjAw
CnNsb3BlPTcuMzksIFJeMj0wLjMxIj7CsSAwLjYxJTwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRp
dGxlPSLPgz0xNi42MywgbWluPTU5NjIuMDAsIG1heD02MDkyLjAwCnNsb3BlPTEuNTQsIFJeMj0w
LjA3Ij42MDQ0LjY1PHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPnwxLjA2JSBCZXR0ZXI8L3Nw
YW4+PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MTYu
NjMsIG1pbj01OTYyLjAwLCBtYXg9NjA5Mi4wMApzbG9wZT0xLjU0LCBSXjI9MC4wNyI+wrEgMC4y
OCU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiBiZXR0ZXIiPjEuMDYlIEJldHRlcjwvdGQ+PC90
cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1
ZXJ5L2pRdWVyeSAtIGRpdjpudGgtY2hpbGQoZXZlbik6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0
Ij5ydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MTUuMjIsIG1pbj01OTQ0
LjAwLCBtYXg9NjA3Ni4wMApzbG9wZT0tMS4wMCwgUl4yPTAuMDMiPjYwMTkuMTU8L3RkPjx0ZCBj
bGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0xNS4yMiwgbWluPTU5NDQu
MDAsIG1heD02MDc2LjAwCnNsb3BlPS0xLjAwLCBSXjI9MC4wMyI+wrEgMC4yNSU8L3RkPjx0ZCBj
bGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MTYuNzMsIG1pbj01OTQ2LjAwLCBtYXg9NjA3NS4wMApz
bG9wZT0zLjQ4LCBSXjI9MC4zMyI+NjAzMS44MDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58
PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+D
PTE2LjczLCBtaW49NTk0Ni4wMCwgbWF4PTYwNzUuMDAKc2xvcGU9My40OCwgUl4yPTAuMzMiPsKx
IDAuMjglPC90ZD48dGQgY2xhc3M9ImNvbXBhcmlzb24iPjwvdGQ+PC90cj48dHIgY2xhc3M9Im9k
ZCI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5IC0gZGl2
Om50aC1jaGlsZChuKTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQg
Y2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMDcsIG1pbj0xOC45NSwgbWF4PTE5LjUwCnNsb3Bl
PTAuMDEsIFJeMj0wLjE4Ij4xOS4yODwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YSIgdGl0bGU9Is+DPTAuMDcsIG1pbj0xOC45NSwgbWF4PTE5LjUwCnNsb3BlPTAuMDEsIFJe
Mj0wLjE4Ij7CsSAwLjM2JTwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjE1LCBt
aW49MTguODAsIG1heD0xOS45NApzbG9wZT0wLjA1LCBSXjI9MC43NyI+MTkuNDE8c3BhbiBzdHls
ZT0iZGlzcGxheTogbm9uZSI+fDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVy
dmFsRGVsdGEiIHRpdGxlPSLPgz0wLjE1LCBtaW49MTguODAsIG1heD0xOS45NApzbG9wZT0wLjA1
LCBSXjI9MC43NyI+wrEgMC43NyUgPHNwYW4gY2xhc3M9InJlZ3Jlc3Npb24td2FybmluZyIgdGl0
bGU9IkRldGVjdGVkIGEgdGltZSBkZXBlbmRlbmN5IHdpdGggc2xvcGU9MC4wNSwgUl4yPTAuNzci
Pjxzdmcgdmlld0JveD0iMCAwIDEwMCAxMDAiIHN0eWxlPSJ3aWR0aDogMThweDsgaGVpZ2h0OiAx
OHB4OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyIgdmVyc2lvbj0iMS4xIj48cG9seWdvbiBmaWxs
PSJyZWQiIHBvaW50cz0iNTAsMTAgOTAsODAgMTAsODAgNTAsMTAiIHN0cm9rZT0icmVkIiBzdHJv
a2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48L3BvbHlnb24+PHBvbHlnb24g
ZmlsbD0id2hpdGUiIHBvaW50cz0iNDcsMzAgNDgsMjksIDUwLCAyOC43LCA1MiwyOSA1MywzMCA1
MCw2MCIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJy
b3VuZCI+PC9wb2x5Z29uPjxjaXJjbGUgY3g9IjUwIiBjeT0iNzMiIHI9IjYiIGZpbGw9IndoaXRl
Ij48L2NpcmNsZT48L3N2Zz4gPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIj48L3Rk
PjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5
LWpxdWVyeS9qUXVlcnkgLSBkaXY6bnRoLWNoaWxkKG9kZCk6UnVuczwvdGQ+PHRkIGNsYXNzPSJ1
bml0Ij5ydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MTIuNzYsIG1pbj01
OTYwLjAwLCBtYXg9NjA1NS4wMApzbG9wZT0xLjk3LCBSXjI9MC4xOCI+NjAxMi4zMDwvdGQ+PHRk
IGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTEyLjc2LCBtaW49NTk2
MC4wMCwgbWF4PTYwNTUuMDAKc2xvcGU9MS45NywgUl4yPTAuMTgiPsKxIDAuMjElPC90ZD48dGQg
Y2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTE2LjExLCBtaW49NTk4OS4wMCwgbWF4PTYxMDQuMDAK
c2xvcGU9MS4wOSwgUl4yPTAuMDQiPjYwNTUuMjA8c3BhbiBzdHlsZT0iZGlzcGxheTogbm9uZSI+
fDAuNzElIEJldHRlcjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVs
dGEiIHRpdGxlPSLPgz0xNi4xMSwgbWluPTU5ODkuMDAsIG1heD02MTA0LjAwCnNsb3BlPTEuMDks
IFJeMj0wLjA0Ij7CsSAwLjI3JTwvdGQ+PHRkIGNsYXNzPSJjb21wYXJpc29uIGJldHRlciI+MC43
MSUgQmV0dGVyPC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9t
YWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXY6b25seS1jaGlsZDpSdW5zPC90ZD48dGQg
Y2xhc3M9InVuaXQiPksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAu
MDgsIG1pbj0yMS42MywgbWF4PTIyLjQwCnNsb3BlPS0wLjAxLCBSXjI9MC4wNiI+MjIuMDI8L3Rk
Pjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjA4LCBtaW49
MjEuNjMsIG1heD0yMi40MApzbG9wZT0tMC4wMSwgUl4yPTAuMDYiPsKxIDAuMzYlPC90ZD48dGQg
Y2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMTAsIG1pbj0yMS41OCwgbWF4PTIyLjM5CnNsb3Bl
PTAuMDEsIFJeMj0wLjA1Ij4yMi4wNTxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFu
PjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTAs
IG1pbj0yMS41OCwgbWF4PTIyLjM5CnNsb3BlPTAuMDEsIFJeMj0wLjA1Ij7CsSAwLjQzJTwvdGQ+
PHRkIGNsYXNzPSJjb21wYXJpc29uIj48L3RkPjwvdHI+PHRyIGNsYXNzPSJldmVuIj48dGQgY2xh
c3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXZbY2xhc3MkPWxv
Z106UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1
bHQiIHRpdGxlPSLPgz0wLjA4LCBtaW49MjEuMjYsIG1heD0yMS45MgpzbG9wZT0tMC4wMSwgUl4y
PTAuMDkiPjIxLjY0PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRs
ZT0iz4M9MC4wOCwgbWluPTIxLjI2LCBtYXg9MjEuOTIKc2xvcGU9LTAuMDEsIFJeMj0wLjA5Ij7C
sSAwLjM3JTwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjA5LCBtaW49MjAuOTAs
IG1heD0yMS42NApzbG9wZT0tMC4wMCwgUl4yPTAuMDAiPjIxLjM4PHNwYW4gc3R5bGU9ImRpc3Bs
YXk6IG5vbmUiPnwxLjIxJSBXb3JzZSZuYnNwOzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlk
ZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjA5LCBtaW49MjAuOTAsIG1heD0yMS42NApz
bG9wZT0tMC4wMCwgUl4yPTAuMDAiPsKxIDAuNDQlPC90ZD48dGQgY2xhc3M9ImNvbXBhcmlzb24g
d29yc2UiPjEuMjElIFdvcnNlJm5ic3A7PC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xh
c3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXZbY2xhc3MqPXNj
ZV06UnVuczwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1
bHQiIHRpdGxlPSLPgz0wLjEwLCBtaW49MjEuMDAsIG1heD0yMS44MwpzbG9wZT0wLjAxLCBSXjI9
MC4xNiI+MjEuNDQ8L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxl
PSLPgz0wLjEwLCBtaW49MjEuMDAsIG1heD0yMS44MwpzbG9wZT0wLjAxLCBSXjI9MC4xNiI+wrEg
MC40NyU8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4wOCwgbWluPTIxLjAyLCBt
YXg9MjEuODAKc2xvcGU9MC4wMSwgUl4yPTAuMTciPjIxLjQzPHNwYW4gc3R5bGU9ImRpc3BsYXk6
IG5vbmUiPnw8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0
aXRsZT0iz4M9MC4wOCwgbWluPTIxLjAyLCBtYXg9MjEuODAKc2xvcGU9MC4wMSwgUl4yPTAuMTci
PsKxIDAuMzglPC90ZD48dGQgY2xhc3M9ImNvbXBhcmlzb24iPjwvdGQ+PC90cj48dHIgY2xhc3M9
ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5L2pRdWVyeSAt
IGRpdltjbGFzcz1kaWFsb2ddOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3Rk
Pjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4yMCwgbWluPTIxLjQ0LCBtYXg9MjIuODQK
c2xvcGU9LTAuMDMsIFJeMj0wLjIwIj4yMi4wOTwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50
ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMjAsIG1pbj0yMS40NCwgbWF4PTIyLjg0CnNsb3BlPS0w
LjAzLCBSXjI9MC4yMCI+wrEgMC44OSU8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9
MC4xMCwgbWluPTIxLjgzLCBtYXg9MjIuNjIKc2xvcGU9LTAuMDAsIFJeMj0wLjAwIj4yMi4yNjxz
cGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRl
bmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTAsIG1pbj0yMS44MywgbWF4PTIyLjYyCnNs
b3BlPS0wLjAwLCBSXjI9MC4wMCI+wrEgMC40NiU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+
PC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1
ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXZbY2xhc3NdOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+
SyBydW5zL3M8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4wNywgbWluPTE4Ljg2
LCBtYXg9MTkuNDYKc2xvcGU9MC4wMiwgUl4yPTAuNTkiPjE5LjE1PC90ZD48dGQgY2xhc3M9ImNv
bmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4wNywgbWluPTE4Ljg2LCBtYXg9MTku
NDYKc2xvcGU9MC4wMiwgUl4yPTAuNTkiPsKxIDAuMzYlPC90ZD48dGQgY2xhc3M9InJlc3VsdCIg
dGl0bGU9Is+DPTAuMTYsIG1pbj0xOC43MCwgbWF4PTE5Ljg3CnNsb3BlPTAuMDIsIFJeMj0wLjE1
Ij4xOS4zNDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58MC45NyUgQmV0dGVyPC9zcGFuPjwv
dGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTYsIG1p
bj0xOC43MCwgbWF4PTE5Ljg3CnNsb3BlPTAuMDIsIFJeMj0wLjE1Ij7CsSAwLjg1JTwvdGQ+PHRk
IGNsYXNzPSJjb21wYXJpc29uIGJldHRlciI+MC45NyUgQmV0dGVyPC90ZD48L3RyPjx0ciBjbGFz
cz0iZXZlbiI+PHRkIGNsYXNzPSJ0ZXN0Ij4vRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkvalF1ZXJ5
IC0gZGl2W2NsYXNzXj1kaWFdOlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+SyBydW5zL3M8L3Rk
Pjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9MC4xMiwgbWluPTIxLjQyLCBtYXg9MjIuMjgK
c2xvcGU9LTAuMDIsIFJeMj0wLjI5Ij4yMS45NDwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50
ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTIsIG1pbj0yMS40MiwgbWF4PTIyLjI4CnNsb3BlPS0w
LjAyLCBSXjI9MC4yOSI+wrEgMC41NCU8L3RkPjx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iz4M9
MC4xOCwgbWluPTIxLjMwLCBtYXg9MjIuNTYKc2xvcGU9LTAuMDEsIFJeMj0wLjA1Ij4yMS44Mjxz
cGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJjb25maWRl
bmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMTgsIG1pbj0yMS4zMCwgbWF4PTIyLjU2CnNs
b3BlPS0wLjAxLCBSXjI9MC4wNSI+wrEgMC44MiU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+
PC90ZD48L3RyPjx0ciBjbGFzcz0ib2RkIj48dGQgY2xhc3M9InRlc3QiPi9Ecm9tYWVvL2Nzc3F1
ZXJ5LWpxdWVyeS9qUXVlcnkgLSBkaXZbY2xhc3N8PWRpYWxvZ106UnVuczwvdGQ+PHRkIGNsYXNz
PSJ1bml0Ij5LIHJ1bnMvczwvdGQ+PHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxlPSLPgz0wLjE0LCBt
aW49MjEuMzcsIG1heD0yMi40NApzbG9wZT0tMC4wMiwgUl4yPTAuMjQiPjIxLjgyPC90ZD48dGQg
Y2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iz4M9MC4xNCwgbWluPTIxLjM3
LCBtYXg9MjIuNDQKc2xvcGU9LTAuMDIsIFJeMj0wLjI0Ij7CsSAwLjYyJTwvdGQ+PHRkIGNsYXNz
PSJyZXN1bHQiIHRpdGxlPSLPgz0wLjEzLCBtaW49MjEuNTksIG1heD0yMi41NwpzbG9wZT0wLjAz
LCBSXjI9MC40NiI+MjIuMTA8c3BhbiBzdHlsZT0iZGlzcGxheTogbm9uZSI+fDEuMjglIEJldHRl
cjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iY29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLP
gz0wLjEzLCBtaW49MjEuNTksIG1heD0yMi41NwpzbG9wZT0wLjAzLCBSXjI9MC40NiI+wrEgMC41
OCU8L3RkPjx0ZCBjbGFzcz0iY29tcGFyaXNvbiBiZXR0ZXIiPjEuMjglIEJldHRlcjwvdGQ+PC90
cj48dHIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0idGVzdCI+L0Ryb21hZW8vY3NzcXVlcnktanF1
ZXJ5L2pRdWVyeSAtIGRpdltjbGFzc349ZGlhbG9nXTpSdW5zPC90ZD48dGQgY2xhc3M9InVuaXQi
PksgcnVucy9zPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTAuMTAsIG1pbj0yMS4x
OCwgbWF4PTIxLjk5CnNsb3BlPS0wLjAyLCBSXjI9MC40MSI+MjEuNTg8L3RkPjx0ZCBjbGFzcz0i
Y29uZmlkZW5jZUludGVydmFsRGVsdGEiIHRpdGxlPSLPgz0wLjEwLCBtaW49MjEuMTgsIG1heD0y
MS45OQpzbG9wZT0tMC4wMiwgUl4yPTAuNDEiPsKxIDAuNDclPC90ZD48dGQgY2xhc3M9InJlc3Vs
dCIgdGl0bGU9Is+DPTAuMDksIG1pbj0yMS4xNSwgbWF4PTIxLjk4CnNsb3BlPTAuMDMsIFJeMj0w
LjU4Ij4yMS41OTxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58PC9zcGFuPjwvdGQ+PHRkIGNs
YXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTAuMDksIG1pbj0yMS4xNSwg
bWF4PTIxLjk4CnNsb3BlPTAuMDMsIFJeMj0wLjU4Ij7CsSAwLjQzJTwvdGQ+PHRkIGNsYXNzPSJj
b21wYXJpc29uIj48L3RkPjwvdHI+PHRyIGNsYXNzPSJvZGQiPjx0ZCBjbGFzcz0idGVzdCI+L0Ry
b21hZW8vY3NzcXVlcnktanF1ZXJ5OlJ1bnM8L3RkPjx0ZCBjbGFzcz0idW5pdCI+cnVucy9zPC90
ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9Is+DPTEuNjksIG1pbj0zOTQuNTEsIG1heD00MDUu
NjcKc2xvcGU9MC4xNSwgUl4yPTAuMDYiPjQwMC4yNjwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNl
SW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTEuNjksIG1pbj0zOTQuNTEsIG1heD00MDUuNjcKc2xv
cGU9MC4xNSwgUl4yPTAuMDYiPsKxIDAuNDIlPC90ZD48dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9
Is+DPTEuNTcsIG1pbj00MTMuMDEsIG1heD00MjMuNzAKc2xvcGU9MC4yMCwgUl4yPTAuMTIiPjQx
OC43MTxzcGFuIHN0eWxlPSJkaXNwbGF5OiBub25lIj58NC42MSUgQmV0dGVyPC9zcGFuPjwvdGQ+
PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9Is+DPTEuNTcsIG1pbj00
MTMuMDEsIG1heD00MjMuNzAKc2xvcGU9MC4yMCwgUl4yPTAuMTIiPsKxIDAuMzglPC90ZD48dGQg
Y2xhc3M9ImNvbXBhcmlzb24gYmV0dGVyIj40LjYxJSBCZXR0ZXI8L3RkPjwvdHI+PC90Ym9keT48
L3RhYmxlPgo8c2NyaXB0PgoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBqUXVlcnkgPSAnUGVyZm9y
bWFuY2VUZXN0cy9Ecm9tYWVvL3Jlc291cmNlcy9kcm9tYWVvL3dlYi9saWIvanF1ZXJ5LTEuNi40
LmpzJzsKICAgIHZhciBwbHVnaW5zID0gWydQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9qcXVl
cnkuZmxvdC5taW4uanMnLCAnUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LnRhYmxl
c29ydGVyLm1pbi5qcycsCiAgICAgICAgJ1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3N0YXRp
c3RpY3MuanMnXTsKICAgIHZhciBsb2NhbFBhdGggPSAnL1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0
JzsKICAgIHZhciByZW1vdGVQYXRoID0gJ2h0dHBzOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9y
eS93ZWJraXQvdHJ1bmsnOwogICAgdmFyIG51bWJlck9mRmFpbHVyZXMgPSAwOwogICAgdmFyIHN0
YXJ0ZWRMb2FkaW5nUGx1Z2lucyA9IGZhbHNlOwogICAgdmFyIG51bWJlck9mTG9hZGVkUGx1Z2lu
cyA9IDA7CgogICAgZnVuY3Rpb24gbG9hZFNjcmlwdChzcmMsIGxvYWRlZCwgZmFpbGVkKSB7CiAg
ICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAg
ICAgIHNjcmlwdC5hc3luYyA9IHRydWU7CiAgICAgICAgc2NyaXB0LnNyYyA9IHNyYzsKICAgICAg
ICBzY3JpcHQub25sb2FkID0gbG9hZGVkOwogICAgICAgIGlmIChmYWlsZWQpCiAgICAgICAgICAg
IHNjcmlwdC5vbmVycm9yID0gZmFpbGVkOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoc2NyaXB0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkUGx1Z2lucyh0cnVua1BhdGgpIHsK
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspCiAgICAgICAg
ICAgIGxvYWRTY3JpcHQodHJ1bmtQYXRoICsgJy8nICsgcGx1Z2luc1tpXSwgbG9hZGVkUGx1Z2lu
LCBjcmVhdGVGYWlsZWRUb0xvYWRQbHVnaW4ocGx1Z2luc1tpXSkpOwogICAgfQoKICAgIGZ1bmN0
aW9uIGxvYWRlZFBsdWdpbigpIHsKICAgICAgICBudW1iZXJPZkxvYWRlZFBsdWdpbnMrKzsKICAg
ICAgICBpZiAobnVtYmVyT2ZMb2FkZWRQbHVnaW5zID09IHBsdWdpbnMubGVuZ3RoKQogICAgICAg
ICAgICBzZXRUaW1lb3V0KGluaXQsIDApOyAgICAgICAgICAgIAogICAgfQoKICAgIGZ1bmN0aW9u
IGNyZWF0ZUZhaWxlZFRvTG9hZFBsdWdpbihwbHVnaW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rp
b24gKCkgeyBhbGVydCgiRmFpbGVkIHRvIGxvYWQgIiArIHBsdWdpbik7IH0KICAgIH0KCiAgICBm
dW5jdGlvbiBjcmVhdGVMb2FkZWRKUXVlcnkodHJ1bmtQYXRoKSB7CiAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uICgpIHsgbG9hZFBsdWdpbnModHJ1bmtQYXRoKTsgfQogICAgfQoKICAgIGxvYWRTY3Jp
cHQobG9jYWxQYXRoICsgJy8nICsgalF1ZXJ5LAogICAgICAgIGNyZWF0ZUxvYWRlZEpRdWVyeShs
b2NhbFBhdGgpLAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgbG9hZFNjcmlwdChy
ZW1vdGVQYXRoICsgJy8nICsgalF1ZXJ5LAogICAgICAgICAgICAgICAgY3JlYXRlTG9hZGVkSlF1
ZXJ5KHJlbW90ZVBhdGgpLAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyBhbGVydCgiRmFp
bGVkIHRvIGxvYWQgalF1ZXJ5LiIpOyB9KTsKICAgICAgICB9KTsKfSkoKTsKCmZ1bmN0aW9uIFRl
c3RSZXN1bHQobWV0cmljLCB2YWx1ZXMsIGFzc29jaWF0ZWRSdW4pIHsKICAgIGlmICh2YWx1ZXNb
MF0gaW5zdGFuY2VvZiBBcnJheSkgewogICAgICAgIHZhciBmbGF0dGVuZWRWYWx1ZXMgPSBbXTsK
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykKICAgICAgICAg
ICAgZmxhdHRlbmVkVmFsdWVzID0gZmxhdHRlbmVkVmFsdWVzLmNvbmNhdCh2YWx1ZXNbaV0pOwog
ICAgICAgIHZhbHVlcyA9IGZsYXR0ZW5lZFZhbHVlczsKICAgIH0KCiAgICB0aGlzLnRlc3QgPSBm
dW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWM7IH0KICAgIHRoaXMudmFsdWVzID0gZnVuY3Rpb24g
KCkgeyByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIG1ldHJpYy5z
Y2FsaW5nRmFjdG9yKCkgKiB2YWx1ZTsgfSk7IH0KICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gU3RhdGlzdGljcy5zdW0odmFsdWVzKSAvIHZhbHVlcy5sZW5ndGg7
IH0KICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFj
dG9yKCkgKiB0aGlzLnVuc2NhbGVkTWVhbigpOyB9CiAgICB0aGlzLm1pbiA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkgKiBTdGF0aXN0aWNzLm1pbih2YWx1ZXMp
OyB9CiAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFj
dG9yKCkgKiBTdGF0aXN0aWNzLm1heCh2YWx1ZXMpOyB9CiAgICB0aGlzLmNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBtZXRyaWMuc2NhbGluZ0Zh
Y3RvcigpICogU3RhdGlzdGljcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgwLjk1LCB2YWx1ZXMu
bGVuZ3RoLAogICAgICAgICAgICBTdGF0aXN0aWNzLnN1bSh2YWx1ZXMpLCBTdGF0aXN0aWNzLnNx
dWFyZVN1bSh2YWx1ZXMpKTsKICAgIH0KICAgIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGFS
YXRpbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEo
KSAvIHRoaXMubWVhbigpOyB9CiAgICB0aGlzLnBlcmNlbnREaWZmZXJlbmNlID0gZnVuY3Rpb24o
b3RoZXIpIHsgcmV0dXJuIChvdGhlci51bnNjYWxlZE1lYW4oKSAtIHRoaXMudW5zY2FsZWRNZWFu
KCkpIC8gdGhpcy51bnNjYWxlZE1lYW4oKTsgfQogICAgdGhpcy5pc1N0YXRpc3RpY2FsbHlTaWdu
aWZpY2FudCA9IGZ1bmN0aW9uIChvdGhlcikgewogICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMo
b3RoZXIubWVhbigpIC0gdGhpcy5tZWFuKCkpOwogICAgICAgIHJldHVybiBkaWZmID4gdGhpcy5j
b25maWRlbmNlSW50ZXJ2YWxEZWx0YSgpICYmIGRpZmYgPiBvdGhlci5jb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSgpOwogICAgfQogICAgdGhpcy5ydW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3Nv
Y2lhdGVkUnVuOyB9Cn0KCmZ1bmN0aW9uIFRlc3RSdW4oZW50cnkpIHsKICAgIHRoaXMuZGVzY3Jp
cHRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnRyeVsnZGVzY3JpcHRpb24nXTsgfQogICAg
dGhpcy53ZWJraXRSZXZpc2lvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudHJ5WydyZXZpc2lv
bnMnXVsnV2ViS2l0J11bJ3JldmlzaW9uJ107IH0KICAgIHRoaXMubGFiZWwgPSBmdW5jdGlvbiAo
KSB7CiAgICAgICAgdmFyIGxhYmVsID0gJ3InICsgdGhpcy53ZWJraXRSZXZpc2lvbigpOwogICAg
ICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKCkpCiAgICAgICAgICAgIGxhYmVsICs9ICcgJmRhc2g7
ICcgKyB0aGlzLmRlc2NyaXB0aW9uKCk7CiAgICAgICAgcmV0dXJuIGxhYmVsOwogICAgfQp9Cgpm
dW5jdGlvbiBQZXJmVGVzdE1ldHJpYyhuYW1lLCBtZXRyaWMpIHsKICAgIHZhciB0ZXN0UmVzdWx0
cyA9IFtdOwogICAgdmFyIGNhY2hlZFVuaXQgPSBudWxsOwogICAgdmFyIGNhY2hlZFNjYWxpbmdG
YWN0b3IgPSBudWxsOwogICAgdmFyIHVuaXQgPSB7J0ZyYW1lUmF0ZSc6ICdmcHMnLCAnUnVucyc6
ICdydW5zL3MnLCAnVGltZSc6ICdtcycsICdNYWxsb2MnOiAnYnl0ZXMnLCAnSlNIZWFwJzogJ2J5
dGVzJ31bbWV0cmljXTsKCiAgICAvLyBXZSBjYW4ndCBkbyB0aGlzIGluIFRlc3RSZXN1bHQgYmVj
YXVzZSBhbGwgcmVzdWx0cyBmb3IgZWFjaCB0ZXN0IG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUgdW5p
dCBhbmQgdGhlIHNhbWUgc2NhbGluZyBmYWN0b3IuCiAgICBmdW5jdGlvbiBjb21wdXRlU2NhbGlu
Z0ZhY3RvcklmTmVlZGVkKCkgewogICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgYWRq
dXN0aW5nIHVuaXRzIG9uIGV2ZXJ5IHRlc3QgcmVzdWx0LgogICAgICAgIC8vIFdlIGNhbiBvbmx5
IGRvIHRoaXMgb24gdGhlIGZpcnN0IHRlc3QuCiAgICAgICAgaWYgKCF0ZXN0UmVzdWx0cy5sZW5n
dGggfHwgY2FjaGVkVW5pdCkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWVhbiA9
IHRlc3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sg
YXQgYWxsIHZhbHVlcy4KICAgICAgICB2YXIga2lsbyA9IHVuaXQgPT0gJ2J5dGVzJyA/IDEwMjQg
OiAxMDAwOwogICAgICAgIGlmIChtZWFuID4gMTAgKiBraWxvICoga2lsbyAmJiB1bml0ICE9ICdt
cycpIHsKICAgICAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IDEgLyBraWxvIC8ga2lsbzsK
ICAgICAgICAgICAgY2FjaGVkVW5pdCA9ICdNICcgKyB1bml0OwogICAgICAgIH0gZWxzZSBpZiAo
bWVhbiA+IDEwICoga2lsbykgewogICAgICAgICAgICBjYWNoZWRTY2FsaW5nRmFjdG9yID0gMSAv
IGtpbG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSB1bml0ID09ICdtcycgPyAncycgOiAoJ0sg
JyArIHVuaXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNhY2hlZFNjYWxpbmdGYWN0
b3IgPSAxOwogICAgICAgICAgICBjYWNoZWRVbml0ID0gdW5pdDsKICAgICAgICB9CiAgICB9Cgog
ICAgdGhpcy5uYW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZSArICc6JyArIG1ldHJpYzsg
fQogICAgdGhpcy5pc01lbW9yeVRlc3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMgPT0g
J0pTSGVhcCcgfHwgbWV0cmljID09ICdNYWxsb2MnOyB9CiAgICB0aGlzLmFkZFJlc3VsdCA9IGZ1
bmN0aW9uIChuZXdSZXN1bHQpIHsKICAgICAgICB0ZXN0UmVzdWx0cy5wdXNoKG5ld1Jlc3VsdCk7
CiAgICAgICAgY2FjaGVkVW5pdCA9IG51bGw7CiAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9
IG51bGw7CiAgICB9CiAgICB0aGlzLnJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXN0
UmVzdWx0czsgfQogICAgdGhpcy5zY2FsaW5nRmFjdG9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAg
Y29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpOwogICAgICAgIHJldHVybiBjYWNoZWRTY2Fs
aW5nRmFjdG9yOwogICAgfQogICAgdGhpcy51bml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGNv
bXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsKICAgICAgICByZXR1cm4gY2FjaGVkVW5pdDsK
ICAgIH0KICAgIHRoaXMuc21hbGxlcklzQmV0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5p
dCA9PSAnbXMnIHx8IHVuaXQgPT0gJ2J5dGVzJzsgfQp9Cgp2YXIgcGxvdENvbG9yID0gJ3JnYigy
MzAsNTAsNTApJzsKdmFyIHN1YnBvaW50c1Bsb3RPcHRpb25zID0gewogICAgbGluZXM6IHtzaG93
OnRydWUsIGxpbmVXaWR0aDogMH0sCiAgICBjb2xvcjogcGxvdENvbG9yLAogICAgcG9pbnRzOiB7
c2hvdzogdHJ1ZSwgcmFkaXVzOiAxfSwKICAgIGJhcnM6IHtzaG93OiBmYWxzZX19OwoKdmFyIG1h
aW5QbG90T3B0aW9ucyA9IHsKICAgIHhheGlzOiB7CiAgICAgICAgbWluOiAtMC41LAogICAgICAg
IHRpY2tTaXplOiAxLAogICAgfSwKICAgIGNyb3NzaGFpcjogeyBtb2RlOiAneScgfSwKICAgIHNl
cmllczogeyBzaGFkb3dTaXplOiAwIH0sCiAgICBiYXJzOiB7c2hvdzogdHJ1ZSwgYWxpZ246ICdj
ZW50ZXInLCBiYXJXaWR0aDogMC41fSwKICAgIGxpbmVzOiB7IHNob3c6IGZhbHNlIH0sCiAgICBw
b2ludHM6IHsgc2hvdzogdHJ1ZSB9LAogICAgZ3JpZDogewogICAgICAgIGJvcmRlcldpZHRoOiAx
LAogICAgICAgIGJvcmRlckNvbG9yOiAnI2NjYycsCiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAn
I2ZmZicsCiAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAogICAgICAgIGF1dG9IaWdobGlnaHQ6IGZh
bHNlLAogICAgfQp9OwoKdmFyIHRpbWVQbG90T3B0aW9ucyA9IHsKICAgIHlheGlzOiB7IHNob3c6
IGZhbHNlIH0sCiAgICB4YXhpczogeyBzaG93OiBmYWxzZSB9LAogICAgbGluZXM6IHsgc2hvdzog
dHJ1ZSB9LAogICAgZ3JpZDogeyBib3JkZXJXaWR0aDogMSwgYm9yZGVyQ29sb3I6ICcjY2NjJyB9
LAogICAgY29sb3JzOiBbIHBsb3RDb2xvciBdCn07CgpmdW5jdGlvbiBjcmVhdGVQbG90KGNvbnRh
aW5lciwgdGVzdCkgewogICAgdmFyIHNlY3Rpb24gPSAkKCc8c2VjdGlvbj48ZGl2IGNsYXNzPSJw
bG90Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0aW1lLXBsb3RzIj48L2Rpdj4nCiAgICAgICAgKyAnPHNw
YW4gY2xhc3M9InRvb2x0aXAiPjwvc3Bhbj48L3NlY3Rpb24+Jyk7CiAgICBzZWN0aW9uLmNoaWxk
cmVuKCcucGxvdCcpLmNzcyh7J3dpZHRoJzogKDEwMCAqIHRlc3QucmVzdWx0cygpLmxlbmd0aCAr
IDI1KSArICdweCcsICdoZWlnaHQnOiAnMzAwcHgnfSk7CiAgICAkKGNvbnRhaW5lcikuYXBwZW5k
KHNlY3Rpb24pOwoKICAgIHZhciBwbG90Q29udGFpbmVyID0gc2VjdGlvbi5jaGlsZHJlbignLnBs
b3QnKTsKICAgIHZhciBtaW5Jc1plcm8gPSB0cnVlOwogICAgYXR0YWNoUGxvdCh0ZXN0LCBwbG90
Q29udGFpbmVyLCBtaW5Jc1plcm8pOwoKICAgIGF0dGFjaFRpbWVQbG90cyh0ZXN0LCBzZWN0aW9u
LmNoaWxkcmVuKCcudGltZS1wbG90cycpKTsKCiAgICB2YXIgdG9vbHRpcCA9IHNlY3Rpb24uY2hp
bGRyZW4oJy50b29sdGlwJyk7CiAgICBwbG90Q29udGFpbmVyLmJpbmQoJ3Bsb3Rob3ZlcicsIGZ1
bmN0aW9uIChldmVudCwgcG9zaXRpb24sIGl0ZW0pIHsKICAgICAgICBpZiAoaXRlbSkgewogICAg
ICAgICAgICB2YXIgcG9zdGZpeCA9IGl0ZW0uc2VyaWVzLmlkID8gJyAoJyArIGl0ZW0uc2VyaWVz
LmlkICsgJyknIDogJyc7CiAgICAgICAgICAgIHRvb2x0aXAuaHRtbChpdGVtLmRhdGFwb2ludFsx
XS50b1ByZWNpc2lvbig0KSArIHBvc3RmaXgpOwogICAgICAgICAgICB2YXIgc2VjdGlvbk9mZnNl
dCA9ICQoc2VjdGlvbikub2Zmc2V0KCk7CiAgICAgICAgICAgIHRvb2x0aXAuY3NzKHtsZWZ0OiBp
dGVtLnBhZ2VYIC0gc2VjdGlvbk9mZnNldC5sZWZ0IC0gdG9vbHRpcC5vdXRlcldpZHRoKCkgLyAy
LCB0b3A6IGl0ZW0ucGFnZVkgLSBzZWN0aW9uT2Zmc2V0LnRvcCArIDEwfSk7CiAgICAgICAgICAg
IHRvb2x0aXAuZmFkZUluKDIwMCk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHRvb2x0aXAu
aGlkZSgpOwogICAgfSk7CiAgICBwbG90Q29udGFpbmVyLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsK
ICAgICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwogICAgcGxvdENvbnRhaW5lci5jbGljayhm
dW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAg
IG1pbklzWmVybyA9ICFtaW5Jc1plcm87CiAgICAgICAgYXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29u
dGFpbmVyLCBtaW5Jc1plcm8pOwogICAgfSk7CgogICAgcmV0dXJuIHNlY3Rpb247Cn0KCmZ1bmN0
aW9uIGF0dGFjaFRpbWVQbG90cyh0ZXN0LCBjb250YWluZXIpIHsKICAgIHZhciByZXN1bHRzID0g
dGVzdC5yZXN1bHRzKCk7CiAgICB2YXIgYXR0YWNoZWRQbG90ID0gZmFsc2U7CiAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb250YWluZXIuYXBw
ZW5kKCc8ZGl2PjwvZGl2PicpOwogICAgICAgIHZhciB2YWx1ZXMgPSByZXN1bHRzW2ldLnZhbHVl
cygpOwogICAgICAgIGlmICghdmFsdWVzKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBh
dHRhY2hlZFBsb3QgPSB0cnVlOwoKICAgICAgICAkLnBsb3QoY29udGFpbmVyLmNoaWxkcmVuKCku
bGFzdCgpLCBbdmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7IHJldHVybiBbaW5k
ZXgsIHZhbHVlXTsgfSldLAogICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB7fSwgdGltZVBsb3RP
cHRpb25zLCB7eWF4aXM6IHttaW46IE1hdGgubWluLmFwcGx5KE1hdGgsIHZhbHVlcykgKiAwLjks
IG1heDogTWF0aC5tYXguYXBwbHkoTWF0aCwgdmFsdWVzKSAqIDEuMX0sCiAgICAgICAgICAgICAg
ICB4YXhpczoge21pbjogLTAuNSwgbWF4OiB2YWx1ZXMubGVuZ3RoIC0gMC41fX0pKTsKICAgIH0K
ICAgIGlmICghYXR0YWNoZWRQbG90KQogICAgICAgIGNvbnRhaW5lci5jaGlsZHJlbigpLnJlbW92
ZSgpOwp9CgpmdW5jdGlvbiBhdHRhY2hQbG90KHRlc3QsIHBsb3RDb250YWluZXIsIG1pbklzWmVy
bykgewogICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3VsdHMoKTsKCiAgICB2YXIgdmFsdWVzID0g
cmVzdWx0cy5yZWR1Y2UoZnVuY3Rpb24gKHZhbHVlcywgcmVzdWx0LCBpbmRleCkgewogICAgICAg
IHZhciBuZXdWYWx1ZXMgPSByZXN1bHQudmFsdWVzKCk7CiAgICAgICAgcmV0dXJuIG5ld1ZhbHVl
cyA/IHZhbHVlcy5jb25jYXQobmV3VmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJu
IFtpbmRleCwgdmFsdWVdOyB9KSkgOiB2YWx1ZXM7CiAgICB9LCBbXSk7CgogICAgdmFyIHBsb3RE
YXRhID0gWyQuZXh0ZW5kKHRydWUsIHt9LCBzdWJwb2ludHNQbG90T3B0aW9ucywge2RhdGE6IHZh
bHVlc30pXTsKICAgIHBsb3REYXRhLnB1c2goe2lkOiAnJm11OycsIGRhdGE6IHJlc3VsdHMubWFw
KGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCld
OyB9KSwgY29sb3I6IHBsb3RDb2xvcn0pOwoKICAgIHZhciBvdmVyYWxsTWF4ID0gU3RhdGlzdGlj
cy5tYXgocmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIHJlc3Vs
dC5tYXgoKTsgfSkpOwogICAgdmFyIG92ZXJhbGxNaW4gPSBTdGF0aXN0aWNzLm1pbihyZXN1bHRz
Lm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSk7
CiAgICB2YXIgbWFyZ2luID0gKG92ZXJhbGxNYXggLSBvdmVyYWxsTWluKSAqIDAuMTsKICAgIHZh
ciBjdXJyZW50UGxvdE9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgbWFpblBsb3RPcHRpb25z
LCB7eWF4aXM6IHsKICAgICAgICBtaW46IG1pbklzWmVybyA/IDAgOiBvdmVyYWxsTWluIC0gbWFy
Z2luLAogICAgICAgIG1heDogbWluSXNaZXJvID8gb3ZlcmFsbE1heCAqIDEuMSA6IG92ZXJhbGxN
YXggKyBtYXJnaW59fSk7CgogICAgY3VycmVudFBsb3RPcHRpb25zLnhheGlzLm1heCA9IHJlc3Vs
dHMubGVuZ3RoIC0gMC41OwogICAgY3VycmVudFBsb3RPcHRpb25zLnhheGlzLnRpY2tzID0gcmVz
dWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0
LnJ1bigpLmxhYmVsKCldOyB9KTsKCiAgICAkLnBsb3QocGxvdENvbnRhaW5lciwgcGxvdERhdGEs
IGN1cnJlbnRQbG90T3B0aW9ucyk7Cn0KCmZ1bmN0aW9uIHRvRml4ZWRXaWR0aFByZWNpc2lvbih2
YWx1ZSkgewogICAgdmFyIGRlY2ltYWwgPSB2YWx1ZS50b0ZpeGVkKDIpOwogICAgcmV0dXJuIGRl
Y2ltYWw7Cn0KCmZ1bmN0aW9uIGZvcm1hdFBlcmNlbnRhZ2UoZnJhY3Rpb24pIHsKICAgIHZhciBw
ZXJjZW50YWdlID0gZnJhY3Rpb24gKiAxMDA7CiAgICByZXR1cm4gKGZyYWN0aW9uICogMTAwKS50
b0ZpeGVkKDIpICsgJyUnOwp9CgpmdW5jdGlvbiBjcmVhdGVUYWJsZSh0ZXN0cywgcnVucywgc2hv
dWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCwgaGlkZUNvbmZpZGVuY2VJbnRlcnZhbERl
bHRhKSB7CiAgICAkKCcjY29udGFpbmVyJykuaHRtbCgnPHRoZWFkPjx0cj48dGg+VGVzdDwvdGg+
PHRoPlVuaXQ8L3RoPicgKyBydW5zLm1hcChmdW5jdGlvbiAocnVuLCBpbmRleCkgewogICAgICAg
IHZhciBjb2xzcGFuID0gMjsKICAgICAgICBpZiAoaW5kZXggIT0gcmVmZXJlbmNlSW5kZXgpCiAg
ICAgICAgICAgIGNvbHNwYW4gPSAzOwogICAgICAgIGlmIChoaWRlQ29uZmlkZW5jZUludGVydmFs
RGVsdGEpCiAgICAgICAgICAgIGNvbHNwYW4tLTsKICAgICAgICByZXR1cm4gJzx0aCBjb2xzcGFu
PSInICsgY29sc3BhbiArICciIGNsYXNzPSJ7c29ydGVyOiBcJ2NvbXBhcmlzb25cJ30iPicgKyBy
dW4ubGFiZWwoKSArICc8L3RoPic7CiAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKG1hcmt1cCwgY2Vs
bCkgeyByZXR1cm4gbWFya3VwICsgY2VsbDsgfSwgJycpICsgJzwvdHI+PC9oZWFkPjx0Ym9keT48
L3Rib2R5PicpOwoKICAgIHZhciB0ZXN0TmFtZXMgPSBbXTsKICAgIGZvciAodGVzdE5hbWUgaW4g
dGVzdHMpCiAgICAgICAgdGVzdE5hbWVzLnB1c2godGVzdE5hbWUpOwoKICAgIHRlc3ROYW1lcy5z
b3J0KCkubWFwKGZ1bmN0aW9uICh0ZXN0TmFtZSkgewogICAgICAgIHZhciB0ZXN0ID0gdGVzdHNb
dGVzdE5hbWVdOwogICAgICAgIGlmICh0ZXN0LmlzTWVtb3J5VGVzdCgpICE9IHNob3VsZElnbm9y
ZU1lbW9yeSkKICAgICAgICAgICAgY3JlYXRlVGFibGVSb3cocnVucywgdGVzdCwgcmVmZXJlbmNl
SW5kZXgsIGhpZGVDb25maWRlbmNlSW50ZXJ2YWxEZWx0YSk7CiAgICB9KTsKCiAgICAkKCcjY29u
dGFpbmVyJykudGFibGVzb3J0ZXIoe3dpZGdldHM6IFsnemVicmEnXX0pOwp9CgpmdW5jdGlvbiBs
aW5lYXJSZWdyZXNzaW9uKHBvaW50cykgewogICAgLy8gSW1wbGVtZW50IGh0dHA6Ly93d3cuZWFz
eWNhbGN1bGF0aW9uLmNvbS9zdGF0aXN0aWNzL2xlYXJuLWNvcnJlbGF0aW9uLnBocC4KICAgIC8v
IHggPSBtYWduaXR1ZGUKICAgIC8vIHkgPSBpdGVyYXRpb25zCiAgICB2YXIgc3VtWCA9IDA7CiAg
ICB2YXIgc3VtWSA9IDA7CiAgICB2YXIgc3VtWFNxdWFyZWQgPSAwOwogICAgdmFyIHN1bVlTcXVh
cmVkID0gMDsKICAgIHZhciBzdW1YVGltZXNZID0gMDsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHBvaW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciB4ID0gaTsKICAgICAgICB2YXIgeSA9
IHBvaW50c1tpXTsKICAgICAgICBzdW1YICs9IHg7CiAgICAgICAgc3VtWSArPSB5OwogICAgICAg
IHN1bVhTcXVhcmVkICs9IHggKiB4OwogICAgICAgIHN1bVlTcXVhcmVkICs9IHkgKiB5OwogICAg
ICAgIHN1bVhUaW1lc1kgKz0geCAqIHk7CiAgICB9CgogICAgdmFyIHIgPSAocG9pbnRzLmxlbmd0
aCAqIHN1bVhUaW1lc1kgLSBzdW1YICogc3VtWSkgLwogICAgICAgIE1hdGguc3FydCgocG9pbnRz
Lmxlbmd0aCAqIHN1bVhTcXVhcmVkIC0gc3VtWCAqIHN1bVgpICoKICAgICAgICAgICAgICAgICAg
KHBvaW50cy5sZW5ndGggKiBzdW1ZU3F1YXJlZCAtIHN1bVkgKiBzdW1ZKSk7CgogICAgaWYgKGlz
TmFOKHIpIHx8IHIgPT0gTWF0aC5JbmZpbml0eSkKICAgICAgICByID0gMDsKCiAgICB2YXIgc2xv
cGUgPSAocG9pbnRzLmxlbmd0aCAqIHN1bVhUaW1lc1kgLSBzdW1YICogc3VtWSkgLyAocG9pbnRz
Lmxlbmd0aCAqIHN1bVhTcXVhcmVkIC0gc3VtWCAqIHN1bVgpOwogICAgdmFyIGludGVyY2VwdCA9
IHN1bVkgLyBwb2ludHMubGVuZ3RoIC0gc2xvcGUgKiBzdW1YIC8gcG9pbnRzLmxlbmd0aDsKICAg
IHJldHVybiB7c2xvcGU6IHNsb3BlLCBpbnRlcmNlcHQ6IGludGVyY2VwdCwgclNxdWFyZWQ6IHIg
KiByfTsKfQoKdmFyIHdhcm5pbmdTaWduID0gJzxzdmcgdmlld0JveD0iMCAwIDEwMCAxMDAiIHN0
eWxlPSJ3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyIg
dmVyc2lvbj0iMS4xIj4nCiAgICArICc8cG9seWdvbiBmaWxsPSJyZWQiIHBvaW50cz0iNTAsMTAg
OTAsODAgMTAsODAgNTAsMTAiIHN0cm9rZT0icmVkIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2Ut
bGluZWpvaW49InJvdW5kIiAvPicKICAgICsgJzxwb2x5Z29uIGZpbGw9IndoaXRlIiBwb2ludHM9
IjQ3LDMwIDQ4LDI5LCA1MCwgMjguNywgNTIsMjkgNTMsMzAgNTAsNjAiIHN0cm9rZT0id2hpdGUi
IHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+JwogICAgKyAnPGNp
cmNsZSBjeD0iNTAiIGN5PSI3MyIgcj0iNiIgZmlsbD0id2hpdGUiIC8+JwogICAgKyAnPC9zdmc+
JzsKCmZ1bmN0aW9uIGNyZWF0ZVRhYmxlUm93KHJ1bnMsIHRlc3QsIHJlZmVyZW5jZUluZGV4LCBo
aWRlQ29uZmlkZW5jZUludGVydmFsRGVsdGEpIHsKICAgIHZhciB0YWJsZVJvdyA9ICQoJzx0cj48
dGQgY2xhc3M9InRlc3QiPicgKyB0ZXN0Lm5hbWUoKSArICc8L3RkPjx0ZCBjbGFzcz0idW5pdCI+
JyArIHRlc3QudW5pdCgpICsgJzwvdGQ+PC90cj4nKTsKCiAgICBmdW5jdGlvbiBtYXJrdXBGb3JS
dW4ocmVzdWx0LCByZWZlcmVuY2VSZXN1bHQpIHsKICAgICAgICB2YXIgY29tcGFyaXNvbkNlbGwg
PSAnJzsKICAgICAgICB2YXIgaGlkZGVuVmFsdWUgPSAnJzsKICAgICAgICB2YXIgc2hvdWxkQ29t
cGFyZSA9IHJlc3VsdCAhPT0gcmVmZXJlbmNlUmVzdWx0OwogICAgICAgIGlmIChzaG91bGRDb21w
YXJlICYmIHJlZmVyZW5jZVJlc3VsdCkgewogICAgICAgICAgICB2YXIgcGVyY2VudERpZmZlcmVu
Y2UgPSByZWZlcmVuY2VSZXN1bHQucGVyY2VudERpZmZlcmVuY2UocmVzdWx0KTsKICAgICAgICAg
ICAgdmFyIGJldHRlciA9IHRlc3Quc21hbGxlcklzQmV0dGVyKCkgPyBwZXJjZW50RGlmZmVyZW5j
ZSA8IDAgOiBwZXJjZW50RGlmZmVyZW5jZSA+IDA7CiAgICAgICAgICAgIHZhciBjb21wYXJpc29u
ID0gJyc7CiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSAnY29tcGFyaXNvbic7CiAgICAgICAg
ICAgIGlmIChyZWZlcmVuY2VSZXN1bHQuaXNTdGF0aXN0aWNhbGx5U2lnbmlmaWNhbnQocmVzdWx0
KSkgewogICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9IGZvcm1hdFBlcmNlbnRhZ2UoTWF0aC5h
YnMocGVyY2VudERpZmZlcmVuY2UpKSArIChiZXR0ZXIgPyAnIEJldHRlcicgOiAnIFdvcnNlJm5i
c3A7Jyk7CiAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gYmV0dGVyID8gJyBiZXR0ZXInIDog
JyB3b3JzZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGlkZGVuVmFsdWUgPSAnPHNwYW4g
c3R5bGU9ImRpc3BsYXk6IG5vbmUiPnwnICsgY29tcGFyaXNvbiArICc8L3NwYW4+JzsKICAgICAg
ICAgICAgY29tcGFyaXNvbkNlbGwgPSAnPHRkIGNsYXNzPSInICsgY2xhc3NOYW1lICsgJyI+JyAr
IGNvbXBhcmlzb24gKyAnPC90ZD4nOwogICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkQ29tcGFyZSkK
ICAgICAgICAgICAgY29tcGFyaXNvbkNlbGwgPSAnPHRkIGNsYXNzPSJjb21wYXJpc29uIj48L3Rk
Pic7CgogICAgICAgIHZhciB2YWx1ZXMgPSByZXN1bHQudmFsdWVzKCk7CiAgICAgICAgdmFyIHdh
cm5pbmcgPSAnJzsKICAgICAgICB2YXIgcmVncmVzc2lvbkFuYWx5c2lzID0gJyc7CiAgICAgICAg
aWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMykgewogICAgICAgICAgICByZWdyZXNzaW9u
UmVzdWx0ID0gbGluZWFyUmVncmVzc2lvbih2YWx1ZXMpOwogICAgICAgICAgICByZWdyZXNzaW9u
QW5hbHlzaXMgPSAnc2xvcGU9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZWdyZXNzaW9uUmVz
dWx0LnNsb3BlKQogICAgICAgICAgICAgICAgKyAnLCBSXjI9JyArIHRvRml4ZWRXaWR0aFByZWNp
c2lvbihyZWdyZXNzaW9uUmVzdWx0LnJTcXVhcmVkKTsKICAgICAgICAgICAgaWYgKHJlZ3Jlc3Np
b25SZXN1bHQuclNxdWFyZWQgPiAwLjYgJiYgTWF0aC5hYnMocmVncmVzc2lvblJlc3VsdC5zbG9w
ZSkgPiAwLjAxKSB7CiAgICAgICAgICAgICAgICB3YXJuaW5nID0gJyA8c3BhbiBjbGFzcz0icmVn
cmVzc2lvbi13YXJuaW5nIiB0aXRsZT0iRGV0ZWN0ZWQgYSB0aW1lIGRlcGVuZGVuY3kgd2l0aCAn
ICsgcmVncmVzc2lvbkFuYWx5c2lzICsgJyI+JyArIHdhcm5pbmdTaWduICsgJyA8L3NwYW4+JzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXRpc3RpY3MgPSAnJnNpZ21h
Oz0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5jb25maWRlbmNlSW50ZXJ2YWxEZWx0
YSgpKSArICcsIG1pbj0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5taW4oKSkKICAg
ICAgICAgICAgKyAnLCBtYXg9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWF4KCkp
ICsgJ1xuJyArIHJlZ3Jlc3Npb25BbmFseXNpczsKCiAgICAgICAgdmFyIGNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhQ2VsbCA9ICcnOwogICAgICAgIGlmICghaGlkZUNvbmZpZGVuY2VJbnRlcnZhbERl
bHRhKSB7CiAgICAgICAgICAgIGNvbmZpZGVuY2VJbnRlcnZhbERlbHRhQ2VsbCA9ICc8dGQgY2xh
c3M9ImNvbmZpZGVuY2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4m
cGx1c21uOyAnCiAgICAgICAgICAgICAgICArIGZvcm1hdFBlcmNlbnRhZ2UocmVzdWx0LmNvbmZp
ZGVuY2VJbnRlcnZhbERlbHRhUmF0aW8oKSkgKyB3YXJuaW5nICsgJzwvdGQ+JzsKICAgICAgICB9
CgogICAgICAgIC8vIFRhYmxlc29ydGVyIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgc2Vjb25kIGNl
bGwgc28gcHV0IHRoZSBjb21wYXJpc29uIGluIHRoZSBpbnZpc2libGUgZWxlbWVudC4KICAgICAg
ICByZXR1cm4gJzx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4n
ICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5tZWFuKCkpICsgaGlkZGVuVmFsdWUKICAg
ICAgICAgICAgKyAnPC90ZD4nICsgY29uZmlkZW5jZUludGVydmFsRGVsdGFDZWxsICsgY29tcGFy
aXNvbkNlbGw7CiAgICB9CgogICAgZnVuY3Rpb24gbWFya3VwRm9yTWlzc2luZ1J1bihpc1JlZmVy
ZW5jZSkgewogICAgICAgIHJldHVybiAnPHRkIGNvbHNwYW49IicgKyAoaXNSZWZlcmVuY2UgPyAy
IDogMykgKyAnIiBjbGFzcz0ibWlzc2luZyI+TWlzc2luZzwvdGQ+JzsKICAgIH0KCiAgICB2YXIg
cnVuSW5kZXggPSAwOwogICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3VsdHMoKTsKICAgIHZhciBy
ZWZlcmVuY2VSZXN1bHQgPSB1bmRlZmluZWQ7CiAgICB2YXIgcmVzdWx0SW5kZXhNYXAgPSB7fTsK
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHdo
aWxlIChydW5zW3J1bkluZGV4XSAhPT0gcmVzdWx0c1tpXS5ydW4oKSkKICAgICAgICAgICAgcnVu
SW5kZXgrKzsKICAgICAgICBpZiAocnVuSW5kZXggPT0gcmVmZXJlbmNlSW5kZXgpCiAgICAgICAg
ICAgIHJlZmVyZW5jZVJlc3VsdCA9IHJlc3VsdHNbaV07CiAgICAgICAgcmVzdWx0SW5kZXhNYXBb
cnVuSW5kZXhdID0gaTsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVucy5sZW5ndGg7
IGkrKykgewogICAgICAgIHZhciByZXN1bHRJbmRleCA9IHJlc3VsdEluZGV4TWFwW2ldOwogICAg
ICAgIGlmIChyZXN1bHRJbmRleCA9PSB1bmRlZmluZWQpCiAgICAgICAgICAgIHRhYmxlUm93LmFw
cGVuZChtYXJrdXBGb3JNaXNzaW5nUnVuKGkgPT0gcmVmZXJlbmNlSW5kZXgpKTsKICAgICAgICBl
bHNlCiAgICAgICAgICAgIHRhYmxlUm93LmFwcGVuZChtYXJrdXBGb3JSdW4ocmVzdWx0c1tyZXN1
bHRJbmRleF0sIHJlZmVyZW5jZVJlc3VsdCkpOwogICAgfQoKICAgICQoJyNjb250YWluZXInKS5j
aGlsZHJlbigndGJvZHknKS5sYXN0KCkuYXBwZW5kKHRhYmxlUm93KTsKCiAgICB0YWJsZVJvdy5j
bGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9IHRhYmxl
Um93WzBdICYmIGV2ZW50LnRhcmdldC5wYXJlbnROb2RlICE9IHRhYmxlUm93WzBdKQogICAgICAg
ICAgICByZXR1cm47CgogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgIHZh
ciBmaXJzdENlbGwgPSB0YWJsZVJvdy5jaGlsZHJlbigndGQnKS5maXJzdCgpOwogICAgICAgIGlm
IChmaXJzdENlbGwuY2hpbGRyZW4oJ3NlY3Rpb24nKS5sZW5ndGgpIHsKICAgICAgICAgICAgZmly
c3RDZWxsLmNoaWxkcmVuKCdzZWN0aW9uJykucmVtb3ZlKCk7CiAgICAgICAgICAgIHRhYmxlUm93
LmNoaWxkcmVuKCd0ZCcpLmNzcyh7J3BhZGRpbmctYm90dG9tJzogJyd9KTsKICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICB2YXIgcGxvdCA9IGNyZWF0ZVBsb3QoZmlyc3RDZWxsLCB0ZXN0KTsK
ICAgICAgICAgICAgcGxvdC5jc3Moeydwb3NpdGlvbic6ICdhYnNvbHV0ZScsICd6LWluZGV4Jzog
Mn0pOwogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGFibGVSb3cub2Zmc2V0KCk7CiAgICAgICAg
ICAgIG9mZnNldC5sZWZ0ICs9IDE7CiAgICAgICAgICAgIG9mZnNldC50b3AgKz0gdGFibGVSb3cu
b3V0ZXJIZWlnaHQoKTsKICAgICAgICAgICAgcGxvdC5vZmZzZXQob2Zmc2V0KTsKICAgICAgICAg
ICAgdGFibGVSb3cuY2hpbGRyZW4oJ3RkJykuY3NzKHsncGFkZGluZy1ib3R0b20nOiBwbG90Lm91
dGVySGVpZ2h0KCkgKyA1fSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9
KTsKfQoKZnVuY3Rpb24gaW5pdCgpIHsKICAgICQudGFibGVzb3J0ZXIuYWRkUGFyc2VyKHsKICAg
ICAgICBpZDogJ2NvbXBhcmlzb24nLAogICAgICAgIGlzOiBmdW5jdGlvbihzKSB7CiAgICAgICAg
ICAgIHJldHVybiBzLmluZGV4T2YoJ3wnKSA+PSAwOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0
OiBmdW5jdGlvbihzKSB7CiAgICAgICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZUZsb2F0KHMuc3Vi
c3RyaW5nKHMuaW5kZXhPZignfCcpICsgMSkpOwogICAgICAgICAgICByZXR1cm4gaXNOYU4ocGFy
c2VkKSA/IDAgOiBwYXJzZWQ7CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAnbnVtZXJpYycsCiAg
ICB9KTsKCiAgICB2YXIgcnVucyA9IFtdOwogICAgdmFyIG1ldHJpY3MgPSB7fTsKICAgICQuZWFj
aChKU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqc29uJykudGV4dENvbnRlbnQp
LCBmdW5jdGlvbiAoaW5kZXgsIGVudHJ5KSB7CiAgICAgICAgdmFyIHJ1biA9IG5ldyBUZXN0UnVu
KGVudHJ5KTsKICAgICAgICBydW5zLnB1c2gocnVuKTsKCiAgICAgICAgZnVuY3Rpb24gYWRkVGVz
dHModGVzdHMsIHBhcmVudEZ1bGxOYW1lKSB7CiAgICAgICAgICAgIGZvciAodmFyIHRlc3ROYW1l
IGluIHRlc3RzKSB7CiAgICAgICAgICAgICAgICB2YXIgZnVsbFRlc3ROYW1lID0gcGFyZW50RnVs
bE5hbWUgKyAnLycgKyB0ZXN0TmFtZTsKICAgICAgICAgICAgICAgIHZhciByYXdNZXRyaWNzID0g
dGVzdHNbdGVzdE5hbWVdLm1ldHJpY3M7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgbWV0cmlj
TmFtZSBpbiByYXdNZXRyaWNzKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxNZXRyaWNO
YW1lID0gZnVsbFRlc3ROYW1lICsgJzonICsgbWV0cmljTmFtZTsKICAgICAgICAgICAgICAgICAg
ICB2YXIgbWV0cmljID0gbWV0cmljc1tmdWxsTWV0cmljTmFtZV07CiAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtZXRyaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljID0gbmV3IFBl
cmZUZXN0TWV0cmljKGZ1bGxUZXN0TmFtZSwgbWV0cmljTmFtZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIG1ldHJpY3NbZnVsbE1ldHJpY05hbWVdID0gbWV0cmljOwogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICBtZXRyaWMuYWRkUmVzdWx0KG5ldyBUZXN0UmVzdWx0
KG1ldHJpYywgcmF3TWV0cmljc1ttZXRyaWNOYW1lXS5jdXJyZW50LCBydW4pKTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGVzdHNbdGVzdE5hbWVdLnRlc3RzKQogICAg
ICAgICAgICAgICAgICAgIGFkZFRlc3RzKHRlc3RzW3Rlc3ROYW1lXS50ZXN0cywgZnVsbFRlc3RO
YW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgYWRkVGVzdHMoZW50cnkudGVz
dHMsICcnKTsKICAgIH0pOwoKICAgIHZhciBzaG91bGRJZ25vcmVNZW1vcnk9IHRydWU7CiAgICB2
YXIgcmVmZXJlbmNlSW5kZXggPSAwOwogICAgdmFyIGhpZGVDb25maWRlbmNlSW50ZXJ2YWxEZWx0
YSA9IGZhbHNlOwoKICAgIGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1bnMsIHNob3VsZElnbm9yZU1l
bW9yeSwgcmVmZXJlbmNlSW5kZXgpOwoKICAgICQoJyN0aW1lLW1lbW9yeScpLmJpbmQoJ2NoYW5n
ZScsIGZ1bmN0aW9uIChldmVudCwgY2hlY2tlZEVsZW1lbnQpIHsKICAgICAgICBzaG91bGRJZ25v
cmVNZW1vcnkgPSBjaGVja2VkRWxlbWVudC50ZXh0Q29udGVudCA9PSAnVGltZSc7CiAgICAgICAg
Y3JlYXRlVGFibGUobWV0cmljcywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJ
bmRleCwgaGlkZUNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKTsKICAgIH0pOwoKICAgIHJ1bnMubWFw
KGZ1bmN0aW9uIChydW4sIGluZGV4KSB7CiAgICAgICAgJCgnI3JlZmVyZW5jZScpLmFwcGVuZCgn
PHNwYW4gdmFsdWU9IicgKyBpbmRleCArICciJyArIChpbmRleCA9PSByZWZlcmVuY2VJbmRleCA/
ICcgY2xhc3M9ImNoZWNrZWQiJyA6ICcnKSArICc+JyArIHJ1bi5sYWJlbCgpICsgJzwvc3Bhbj4n
KTsKICAgIH0pCgogICAgJCgnI3JlZmVyZW5jZScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChl
dmVudCwgY2hlY2tlZEVsZW1lbnQpIHsKICAgICAgICByZWZlcmVuY2VJbmRleCA9IHBhcnNlSW50
KGNoZWNrZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgndmFsdWUnKSk7CiAgICAgICAgY3JlYXRlVGFi
bGUobWV0cmljcywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCwgaGlk
ZUNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKTsKICAgIH0pOwoKICAgICQoJyNjb25maWRlbmNlSW50
ZXJ2YWxEZWx0YScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCwgY2hlY2tlZEVsZW1l
bnQpIHsKICAgICAgICBoaWRlQ29uZmlkZW5jZUludGVydmFsRGVsdGEgPSBjaGVja2VkRWxlbWVu
dC50ZXh0Q29udGVudCA9PSAnSGlkZSc7CiAgICAgICAgY3JlYXRlVGFibGUobWV0cmljcywgcnVu
cywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCwgaGlkZUNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhKTsKICAgIH0pOwoKICAgICQoJy5jaGVja2JveCcpLmVhY2goZnVuY3Rpb24gKGlu
ZGV4LCBjaGVja2JveCkgewogICAgICAgICQoY2hlY2tib3gpLmNoaWxkcmVuKCdzcGFuJykuY2xp
Y2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdj
aGVja2VkJykpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICQoY2hlY2tib3gp
LmNoaWxkcmVuKCdzcGFuJykucmVtb3ZlQ2xhc3MoJ2NoZWNrZWQnKTsKICAgICAgICAgICAgJCh0
aGlzKS5hZGRDbGFzcygnY2hlY2tlZCcpOwogICAgICAgICAgICAkKGNoZWNrYm94KS50cmlnZ2Vy
KCdjaGFuZ2UnLCAkKHRoaXMpKTsKICAgICAgICB9KTsKICAgIH0pOwp9Cgo8L3NjcmlwdD48c2Ny
aXB0IGFzeW5jPSIiIHNyYz0iL1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qcyI+PC9z
Y3JpcHQ+CjxzY3JpcHQgaWQ9Impzb24iIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iPlt7InRlc3Rz
IjogeyJEcm9tYWVvIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3Ry
dW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlbyIsICJ0ZXN0cyI6IHsiY3NzcXVlcnktanF1ZXJ5
IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5z
IjogeyJjdXJyZW50IjogW1szOTQuNzc5NzMwNDE2MzYxMiwgMzk3Ljg2OTUwNzk4MjAwMzcsIDQw
Mi4wMTEyNDYwMTIzNTQzLCA0MDMuODk5NTI0ODc5NzcwMjQsIDQwNS42Njk0MzIxNDU0ODgyXSwg
WzM5NS40MTQxNjE2MjQ1ODc0LCAzOTcuMjExNDk3NjE1NDkxNywgNDAwLjYzMjMyMjA0OTg5MTYs
IDQwMi40MzE1Mjc3ODQzNjUyNCwgNDA0LjMxMzk0OTk5OTE3ODhdLCBbMzk0LjUwOTQ2NDI3NDEx
MTA1LCAzOTcuMDUxNjMxODQ3MDYxMSwgMzk4LjY2ODg3ODg5MTgxNjIzLCA0MDAuNjY5NDQ4Nzg5
NjQyOSwgNDAzLjcxMzc1NDcxNjY1M10sIFszOTYuNjk0MDQ2MDY2MTk4NiwgMzk4LjU3Njk5NDk0
NjU2ODk2LCA0MDIuMzQyNDE1MzA4NDI0NywgNDAzLjYzMDUwNTYzNTQzMSwgNDA1LjE0NjU5OTE1
OTIzNzU1XV19fSwgInRlc3RzIjogeyJqUXVlcnkgLSBkaXZbY2xhc3N8PWRpYWxvZ10iOiB7InVy
bCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0
cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1
cnJlbnQiOiBbWzIxODk1LjAsIDIyMTMyLjAsIDIyMjY2LjAsIDIyMjc5LjAsIDIyNDQzLjBdLCBb
MjE1NzEuMCwgMjE2NTYuMCwgMjE4MjcuMCwgMjE4OTQuMCwgMjIwMjguMF0sIFsyMTM3NC4wLCAy
MTQzNy4wLCAyMTQ3My4wLCAyMTY0MS4wLCAyMTY3Ny4wXSwgWzIxNjcxLjAsIDIxNzUzLjAsIDIx
NzcyLjAsIDIxODA1LjAsIDIxODYwLjBdXX19fSwgImpRdWVyeSAtIGRpdiNzY2VuZTEgZGl2LmRp
YWxvZyBkaXYiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsv
UGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3Mi
OiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxNTYzLjAsIDIxNTg5LjAsIDIxNjUwLjAsIDIxODY2
LjAsIDIxODY5LjBdLCBbMjE0ODkuMCwgMjE3MDMuMCwgMjE3NzEuMCwgMjE3NzIuMCwgMjE5ODMu
MF0sIFsyMTU4Ny4wLCAyMTY1OS4wLCAyMTY4OS4wLCAyMTc3MC4wLCAyMTk0OS4wXSwgWzIxOTQ0
LjAsIDIxOTYyLjAsIDIxOTc5LjAsIDIyMDc3LjAsIDIyMTEwLjBdXX19fSwgImpRdWVyeSAtIGJv
ZHkgZGl2IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Bl
cmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjog
eyJSdW5zIjogeyJjdXJyZW50IjogW1sxODcxOS4wLCAxODg2OC4wLCAxODkxNC4wLCAxODk1NC4w
LCAxOTEwNS4wXSwgWzE4Nzg5LjAsIDE4ODM2LjAsIDE4ODkwLjAsIDE4OTM5LjAsIDE5MDA3LjBd
LCBbMTg2NTguMCwgMTg3ODQuMCwgMTg4MDEuMCwgMTg4MTkuMCwgMTg4MzguMF0sIFsxODc3NC4w
LCAxODc3NS4wLCAxODg1MC4wLCAxODg3MC4wLCAxODk3NS4wXV19fX0sICJqUXVlcnkgLSBkaXY6
bnRoLWNoaWxkKDJuKzEpIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2Vy
L3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJt
ZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1s1NzY2LjAsIDU3NzUuMCwgNTk5NS4wLCA2
MDMxLjAsIDYwNjguMF0sIFs1OTI4LjAsIDU5NzguMCwgNTk4NC4wLCA1OTk5LjAsIDYwMDYuMF0s
IFs1OTg0LjAsIDU5ODcuMCwgNTk5Ny4wLCA2MDE1LjAsIDYwMzguMF0sIFs1OTc4LjAsIDU5OTgu
MCwgNjAxNC4wLCA2MDMyLjAsIDYwNDcuMF1dfX19LCAialF1ZXJ5IC0gZGl2Om50aC1jaGlsZCgy
bikiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9y
bWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1
bnMiOiB7ImN1cnJlbnQiOiBbWzYwMTMuMCwgNjAyNS4wLCA2MDMwLjAsIDYwMzUuMCwgNjAzOS4w
XSwgWzU5NDAuMCwgNTk2NC4wLCA1OTY3LjAsIDU5ODQuMCwgNjAwMS4wXSwgWzU5NzMuMCwgNTk3
OC4wLCA1OTkwLjAsIDU5OTEuMCwgNjAwOS4wXSwgWzU5NDIuMCwgNTk2MS4wLCA1OTc4LjAsIDU5
OTIuMCwgNjAwNi4wXV19fX0sICJqUXVlcnkgLSAqIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1q
cXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syODcwLjAsIDI5
NjEuMCwgMzA0OS4wLCAzMDkzLjAsIDMxMTIuMF0sIFsyODYzLjAsIDI4OTEuMCwgMzAzNi4wLCAz
MDgxLjAsIDMxMTcuMF0sIFsyODg0LjAsIDI5NTIuMCwgMjk3Ny4wLCAzMDM0LjAsIDMxMzQuMF0s
IFsyODgxLjAsIDI5MDUuMCwgMzA3MS4wLCAzMDkwLjAsIDMxMDUuMF1dfX19LCAialF1ZXJ5IC0g
ZGl2ICNzcGVlY2g1IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3Ry
dW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRy
aWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTY4MS4wLCAyMTc1NC4wLCAyMTk1MS4wLCAy
MTk1NC4wLCAyMTk2OS4wXSwgWzIxNTcyLjAsIDIxNjE0LjAsIDIxNjcwLjAsIDIxNzEzLjAsIDIx
OTczLjBdLCBbMjE1MTAuMCwgMjE1MzkuMCwgMjE1ODkuMCwgMjE2MzEuMCwgMjE3ODAuMF0sIFsy
MTc4Mi4wLCAyMTg1Mi4wLCAyMTk4My4wLCAyMjA4MC4wLCAyMjE0OC4wXV19fX0sICJqUXVlcnkg
LSBib2R5IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Bl
cmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjog
eyJSdW5zIjogeyJjdXJyZW50IjogW1szNjA3NTkuMCwgMzYxMTQyLjAsIDM2MjA3NC4wLCAzNjM1
NTguMCwgMzY1NDI2LjBdLCBbMzc4ODkwLjAsIDM4NjI2MC4wLCAzODg4NDIuMCwgMzg4ODU1LjAs
IDM4ODk5MS4wXSwgWzM1NjIxNi4wLCAzNTg0MzQuMCwgMzU5Mzk4LjAsIDM1OTc3My4wLCAzNjQw
NDcuMF0sIFszNjg0ODguMCwgMzY5MDA0LjAsIDM3MTQwNC4wLCAzNzE4NDMuMCwgMzczNzI1LjBd
XX19fSwgImpRdWVyeSAtIGRpdiArIGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjAyMTAuMCwgMjA0NzYu
MCwgMjE3NDAuMCwgMjE4NDcuMCwgMjE5MzkuMF0sIFsyMTE0Mi4wLCAyMTE2OS4wLCAyMTE5Ny4w
LCAyMTI0OC4wLCAyMTM0OC4wXSwgWzIxMzIwLjAsIDIxMzk5LjAsIDIxNDE2LjAsIDIxNTkwLjAs
IDIxNzAxLjBdLCBbMjEzMzQuMCwgMjEzODMuMCwgMjEzOTcuMCwgMjE0MTAuMCwgMjE2NzguMF1d
fX19LCAialF1ZXJ5IC0gZGl2ID4gZGl2IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnku
aHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sxOTkxNi4wLCAyMDAwMC4w
LCAyMDAxMi4wLCAyMDA5My4wLCAyMDI0OS4wXSwgWzIwMDEyLjAsIDIwMTA1LjAsIDIwMTM0LjAs
IDIwMTY1LjAsIDIwMjM1LjBdLCBbMjAwMTkuMCwgMjAwOTIuMCwgMjAyMDAuMCwgMjAyNzIuMCwg
MjAyOTAuMF0sIFsxOTkwOS4wLCAxOTkxNC4wLCAxOTk3Ny4wLCAyMDEyNC4wLCAyMDE0MS4wXV19
fX0sICJqUXVlcnkgLSBkaXYgLmRpYWxvZyI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjE5NjcuMCwgMjE5Nzgu
MCwgMjE5ODMuMCwgMjIwMTUuMCwgMjIxMzEuMF0sIFsyMTg3Ni4wLCAyMTg4MS4wLCAyMTk3Ni4w
LCAyMTk5MS4wLCAyMTk5My4wXSwgWzIxNDg4LjAsIDIxNTU0LjAsIDIxNjczLjAsIDIxNzM2LjAs
IDIxOTMwLjBdLCBbMjE1MzAuMCwgMjE2NzAuMCwgMjE3MzEuMCwgMjE3NDAuMCwgMjE4MDUuMF1d
fX19LCAialF1ZXJ5IC0gZGl2IGRpdiBkaXYiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQu
b3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVy
eS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxNDU4LjAsIDIxNDY3
LjAsIDIxNDgwLjAsIDIxNDkxLjAsIDIxNjUzLjBdLCBbMjA1NzMuMCwgMjA3NDAuMCwgMjA4MjMu
MCwgMjA4OTkuMCwgMjEwMDcuMF0sIFsyMDg1MS4wLCAyMDk0MS4wLCAyMDk1Mi4wLCAyMDk3NS4w
LCAyMTIwNy4wXSwgWzIxMzc0LjAsIDIxMzc2LjAsIDIxNTk1LjAsIDIxNzcwLjAsIDIxNzc4LjBd
XX19fSwgImpRdWVyeSAtIGRpdltjbGFzcyQ9bG9nXSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnkt
anF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjE1NzIuMCwg
MjE3MTkuMCwgMjE4MzIuMCwgMjE4MzQuMCwgMjE5MTYuMF0sIFsyMTY0OC4wLCAyMTcwNS4wLCAy
MTcxMy4wLCAyMTcxNC4wLCAyMTcyNC4wXSwgWzIxMjU3LjAsIDIxMjY5LjAsIDIxNDMwLjAsIDIx
NTM2LjAsIDIxNTY4LjBdLCBbMjE1OTMuMCwgMjE1OTcuMCwgMjE2MzIuMCwgMjE3MDEuMCwgMjE3
NzUuMF1dfX19LCAialF1ZXJ5IC0gI3NjZW5lMSAjc3BlZWNoMSI6IHsidXJsIjogImh0dHA6Ly90
cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3Nz
cXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjE0
NTIuMCwgMjE0OTguMCwgMjE1NTcuMCwgMjE1OTguMCwgMjE3NzQuMF0sIFsyMTYyMS4wLCAyMTY1
OC4wLCAyMTczOC4wLCAyMTc4Mi4wLCAyMTgyOS4wXSwgWzIxMzM3LjAsIDIxNTM2LjAsIDIxNTQ2
LjAsIDIxNzQyLjAsIDIxODE3LjBdLCBbMjEzMTcuMCwgMjE0NjUuMCwgMjE1MDQuMCwgMjE2MzAu
MCwgMjE2ODguMF1dfX19LCAialF1ZXJ5IC0gZGl2W2NsYXNzPWRpYWxvZ10iOiB7InVybCI6ICJo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9t
YWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQi
OiBbWzIyNTM0LjAsIDIyNTYwLjAsIDIyNTg0LjAsIDIyNzA4LjAsIDIyODM4LjBdLCBbMjE2NzYu
MCwgMjE4NjAuMCwgMjE5NjEuMCwgMjIxODcuMCwgMjIzMDYuMF0sIFsyMTQzNy4wLCAyMTQ3NS4w
LCAyMTU5Mi4wLCAyMTY0OC4wLCAyMTY5NS4wXSwgWzIyMDUwLjAsIDIyMTI0LjAsIDIyMTMyLjAs
IDIyMTU1LjAsIDIyMjMyLjBdXX19fSwgImpRdWVyeSAtIC5kaWFsb2ciOiB7InVybCI6ICJodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBb
WzM0NjIzMy4wLCAzNDczMTEuMCwgMzUzNjc1LjAsIDM2MDM1OS4wLCAzNjE1MDguMF0sIFszMzE3
NjYuMCwgMzMyNzMyLjAsIDMzNDUwMy4wLCAzMzc0OTAuMCwgMzM4MjMwLjBdLCBbMzQzOTU3LjAs
IDM0NDIxNS4wLCAzNDYzNjcuMCwgMzU0MjIzLjAsIDM1NDU3OC4wXSwgWzM0MDcyNS4wLCAzNDE0
OTkuMCwgMzQ1NjAxLjAsIDM0NjAxNC4wLCAzNTE5NjAuMF1dfX19LCAialF1ZXJ5IC0gZGl2W2Ns
YXNzKj1zY2VdIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5r
L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNz
IjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMDk5Ny4wLCAyMTAwMS4wLCAyMTI5My4wLCAyMTMx
Ny4wLCAyMTM4OC4wXSwgWzIxMzk1LjAsIDIxNDk0LjAsIDIxNjA1LjAsIDIxODA4LjAsIDIxODI5
LjBdLCBbMjE0MzIuMCwgMjE0NzEuMCwgMjE1ODUuMCwgMjE2MzEuMCwgMjE2NjAuMF0sIFsyMTM0
MS4wLCAyMTM1My4wLCAyMTM4Ny4wLCAyMTQyMS4wLCAyMTQ1NS4wXV19fX0sICJqUXVlcnkgLSBk
aXYuZGlhbG9nIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5r
L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNz
IjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMjM0Ny4wLCAyMjQzMi4wLCAyMjQzOS4wLCAyMjUz
My4wLCAyMjcxMy4wXSwgWzIyMDI3LjAsIDIyMTI1LjAsIDIyMTM0LjAsIDIyMTM3LjAsIDIyMTQ0
LjBdLCBbMjE5NDEuMCwgMjIwNzAuMCwgMjIyNTguMCwgMjIyNzIuMCwgMjIzNTIuMF0sIFsyMjU0
MC4wLCAyMjU4OC4wLCAyMjY0OS4wLCAyMjc5NC4wLCAyMjg3NS4wXV19fX0sICJqUXVlcnkgLSBk
aXZbY2xhc3N+PWRpYWxvZ10iOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dz
ZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwg
Im1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxNzA2LjAsIDIxNzA5LjAsIDIxODE3
LjAsIDIxODE4LjAsIDIxOTg5LjBdLCBbMjE0OTkuMCwgMjE1MzIuMCwgMjE2MDUuMCwgMjE2MTku
MCwgMjE3OTQuMF0sIFsyMTM5Ni4wLCAyMTU0MS4wLCAyMTU2OS4wLCAyMTcxMC4wLCAyMTc2NC4w
XSwgWzIxMTc2LjAsIDIxMjAzLjAsIDIxMjYyLjAsIDIxNDE5LjAsIDIxNTExLjBdXX19fSwgImpR
dWVyeSAtIGRpdjpudGgtY2hpbGQob2RkKSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbNTk3MS4wLCA1OTk4LjAs
IDYwMjIuMCwgNjAzMy4wLCA2MDQ5LjBdLCBbNTk2MC4wLCA1OTc0LjAsIDU5OTQuMCwgNjAwOC4w
LCA2MDUxLjBdLCBbNTk5MS4wLCA1OTk4LjAsIDYwMDIuMCwgNjAxOS4wLCA2MDI5LjBdLCBbNTk5
Ny4wLCA2MDMwLjAsIDYwMzAuMCwgNjAzNS4wLCA2MDU1LjBdXX19fSwgImpRdWVyeSAtIGRpdjpv
bmx5LWNoaWxkIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5r
L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNz
IjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTk3Ni4wLCAyMjA3MC4wLCAyMjEyNC4wLCAyMjIw
OC4wLCAyMjM5Ni4wXSwgWzIxOTA5LjAsIDIyMDE3LjAsIDIyMDU5LjAsIDIyMTI4LjAsIDIyMTM0
LjBdLCBbMjE2OTcuMCwgMjE4OTYuMCwgMjE5MzkuMCwgMjE5NTAuMCwgMjIwMzUuMF0sIFsyMTYy
OC4wLCAyMTk2MC4wLCAyMjAxNy4wLCAyMjEyMi4wLCAyMjE4MS4wXV19fX0sICJqUXVlcnkgLSBk
aXYsIGEsIHNwYW4iOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1
bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJp
Y3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzY5MDIuMCwgNjkyMy4wLCA2OTU3LjAsIDcwMjgu
MCwgNzA0Mi44NzEzODU4NDI0NzNdLCBbNjk5NC4wLCA3MDA4LjAsIDcwMTAuMCwgNzAyOS4wLCA3
MDMwLjBdLCBbNjkyNS4wLCA2OTQ2LjAsIDY5NTkuMCwgNjk2NS4wLCA3MDE5LjBdLCBbNjk3OS4w
LCA3MDM4LjAsIDcwNTYuMCwgNzA3NC45MjUwNzQ5MjUwNzUsIDcxMTMuMF1dfX19LCAialF1ZXJ5
IC0gZGl2IGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVu
ay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmlj
cyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTk1MTAuMCwgMTk2MDcuMCwgMTk2MjkuMCwgMTk2
NjQuMCwgMTk5NDguMF0sIFsyMDA3Mi4wLCAyMDA5NS4wLCAyMDE0Mi4wLCAyMDE0NC4wLCAyMDIw
Mi4wXSwgWzIwMDQ4LjAsIDIwMDYyLjAsIDIwMDcwLjAsIDIwMTA2LjAsIDIwMjA2LjBdLCBbMjAw
MDIuMCwgMjAxNzQuMCwgMjAxODkuMCwgMjAxOTEuMCwgMjAyODQuMF1dfX19LCAialF1ZXJ5IC0g
ZGl2LCBkaXYsIGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0
cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbODM5Ny4wLCA4NDI2LjAsIDg0NzQuMCwgODUw
My4wLCA4NTUwLjBdLCBbODUyNC4wLCA4NTI3LjAsIDg1NjAuMCwgODU3MS4wLCA4NTg2LjBdLCBb
ODQwNi4wLCA4NDQwLjAsIDg0NjIuMCwgODUxNy4wLCA4NTQ5LjBdLCBbODUxMC4wLCA4NTQ3LjAs
IDg1NDcuMCwgODU2My4wLCA4NTc4LjBdXX19fSwgImpRdWVyeSAtICNzcGVlY2g1IjogeyJ1cmwi
OiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMv
RHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJy
ZW50IjogW1sxMTMwMjMwLjAsIDExNDE2MzkuMCwgMTE1MzAwNC4wLCAxMTUzNjg1LjAsIDExNjk3
NjMuMF0sIFsxMDgzMTU2LjAsIDEwODk4NzMuMCwgMTA5MjgxMC4wLCAxMTA0MTgwLjAsIDExMzAw
NDAuMF0sIFsxMTI1NzE2LjAsIDExMjY1MTQuMCwgMTEzNDA5OS4wLCAxMTM3NTk0LjAsIDExNTE3
MjUuMF0sIFsxMDI5NTcxLjAsIDEwNDE0MTEuMCwgMTA0NTg2MC4wLCAxMDUwMTI4LjAsIDEwNTE0
MzIuMF1dfX19LCAialF1ZXJ5IC0gZGl2Omxhc3QtY2hpbGQiOiB7InVybCI6ICJodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1
ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxMzcz
LjAsIDIxNTg2LjAsIDIxNjA1LjAsIDIxNzAzLjAsIDIxNzQ5LjBdLCBbMjE3NjguMCwgMjE3ODUu
MCwgMjE4MDkuMCwgMjE4NTIuMCwgMjE5MjIuMF0sIFsyMDM1Ny4wLCAyMDc2Ny4wLCAyMTIxOS4w
LCAyMTMwNy4wLCAyMTM4Mi4wXSwgWzIxNjk4LjAsIDIxNzE4LjAsIDIxODcxLjAsIDIxODg2LjAs
IDIyMDU0LjBdXX19fSwgImpRdWVyeSAtIGRpdiB+IGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVl
cnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTgxMzAu
MCwgMTgxNzQuMCwgMTg0MzAuMCwgMTg0OTIuMCwgMTg1MTEuMF0sIFsxODUwNi4wLCAxODUxMC4w
LCAxODUxOC4wLCAxODU5Mi4wLCAxODcxMS4wXSwgWzE4NDk0LjAsIDE4NTc3LjAsIDE4NjUzLjAs
IDE4NzA1LjAsIDE4Nzc1LjBdLCBbMTg3MzMuMCwgMTg3NzcuMCwgMTg3OTMuMCwgMTg5OTQuMCwg
MTkwMTguMF1dfX19LCAialF1ZXJ5IC0gZGl2W2NsYXNzXSI6IHsidXJsIjogImh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVl
cnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTg4NTgu
MCwgMTg5NzUuMCwgMTkwNTguMCwgMTkxNzMuMCwgMTkxNzcuMF0sIFsxODk3Ny4wLCAxOTA3Ni4w
LCAxOTA5MS4wLCAxOTEyNy4wLCAxOTMyNS4wXSwgWzE4OTc5LjAsIDE5MTMzLjAsIDE5MTM1LjAs
IDE5MTcwLjAsIDE5MjM2LjBdLCBbMTkxNTguMCwgMTkyNTEuMCwgMTkyODcuMCwgMTkzODUuMCwg
MTk0NjIuMF1dfX19LCAialF1ZXJ5IC0gZGl2OmZpcnN0LWNoaWxkIjogeyJ1cmwiOiAiaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9j
c3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sy
MTYxMC4wLCAyMTc1MS4wLCAyMTc5MS4wLCAyMTg2OC4wLCAyMTg4OC4wXSwgWzIxMjc5LjAsIDIx
MzQ5LjAsIDIxNDQyLjAsIDIxNTM4LjAsIDIxNTY1LjBdLCBbMjE0NjQuMCwgMjE1MTIuMCwgMjE3
MzAuMCwgMjE4MTQuMCwgMjE5ODUuMF0sIFsyMTQxOS4wLCAyMTU1NC4wLCAyMTU3My4wLCAyMTYw
Ny4wLCAyMTY1Ny4wXV19fX0sICJqUXVlcnkgLSBkaXY6bnRoLWNoaWxkKGV2ZW4pIjogeyJ1cmwi
OiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMv
RHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJy
ZW50IjogW1s1OTk1LjAsIDYwMjQuMCwgNjA0My4wLCA2MDQzLjAsIDYwNTkuMF0sIFs2MDAzLjAs
IDYwMzIuMCwgNjAzNi4wLCA2MDU5LjAsIDYwNzYuMF0sIFs1OTQ0LjAsIDU5NjEuMCwgNjAwNC4w
LCA2MDA1LjAsIDYwMTEuMF0sIFs1OTk5LjAsIDYwMTAuMCwgNjAxMy4wLCA2MDEzLjAsIDYwNTMu
MF1dfX19LCAialF1ZXJ5IC0gZGl2W2NsYXNzXj1kaWFdIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVy
eS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMTk2Ny4w
LCAyMjA1MS4wLCAyMjA2OC4wLCAyMjIyOS4wLCAyMjI4NC4wXSwgWzIxOTA4LjAsIDIxOTYxLjAs
IDIxOTczLjAsIDIyMDE4LjAsIDIyMjc3LjBdLCBbMjE2MTQuMCwgMjE5MTcuMCwgMjIwMjUuMCwg
MjIxNzAuMCwgMjIyMTQuMF0sIFsyMTQyMy4wLCAyMTUyOS4wLCAyMTU4NC4wLCAyMTc0NS4wLCAy
MTgwMC4wXV19fX0sICJqUXVlcnkgLSBkaXYjc3BlZWNoNSI6IHsidXJsIjogImh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVl
cnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjIyNDQu
MCwgMjIzMTUuMCwgMjI0MTAuMCwgMjI1MjMuMCwgMjI1MzEuMF0sIFsyMTcwNy4wLCAyMTc5NC4w
LCAyMTg1Ny4wLCAyMjA0Ni4wLCAyMjA3NS4wXSwgWzIxNDE0LjAsIDIxNjE0LjAsIDIxNjc0LjAs
IDIxNzU5LjAsIDIxNzYwLjBdLCBbMjIxODkuMCwgMjIzMDQuMCwgMjIzNTUuMCwgMjIzNTguMCwg
MjI1MTkuMF1dfX19LCAialF1ZXJ5IC0gZGl2LnNjZW5lIGRpdi5kaWFsb2ciOiB7InVybCI6ICJo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9t
YWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQi
OiBbWzIyMTg0LjAsIDIyMTk0LjAsIDIyMzAzLjAsIDIyMzQ3LjAsIDIyMzgzLjBdLCBbMjE2MDAu
MCwgMjE2NzAuMCwgMjE4MDcuMCwgMjIwNDUuMCwgMjIxMTYuMF0sIFsyMjEyOC4wLCAyMjE1Ni4w
LCAyMjE2NC4wLCAyMjIxNi4wLCAyMjIzNi4wXSwgWzIxNjUzLjAsIDIxODM5LjAsIDIxODc1LjAs
IDIxOTI1LjAsIDIyMDAzLjBdXX19fSwgImpRdWVyeSAtIGRpdi5jaGFyYWN0ZXIsIGRpdi5kaWFs
b2ciOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9y
bWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1
bnMiOiB7ImN1cnJlbnQiOiBbWzExNTA3LjAsIDExNTUxLjAsIDExNTUzLjAsIDExNTY3LjAsIDEx
NTk3LjBdLCBbMTE0NjEuMCwgMTE0NjguMCwgMTE1MDkuMCwgMTE1NDUuMCwgMTE1NTEuMF0sIFsx
MTQwOC4wLCAxMTQ0MS4wLCAxMTQ4NC4wLCAxMTQ5MC4wLCAxMTUyNC4wXSwgWzExNTEwLjAsIDEx
NTc4LjAsIDExNTkzLjAsIDExNjEzLjAsIDExNjMzLjBdXX19fSwgImpRdWVyeSAtIGRpdjpudGgt
Y2hpbGQobikiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsv
UGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3Mi
OiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzE4OTQ4LjAsIDE5MjYyLjAsIDE5Mjg1LjAsIDE5Mjk4
LjAsIDE5NDg5LjBdLCBbMTkxMjIuMCwgMTkyNzIuMCwgMTkyOTIuMCwgMTkzMDQuMCwgMTk0MDQu
MF0sIFsxOTEwOC4wLCAxOTEyOS4wLCAxOTE1Ni4wLCAxOTIyNi4wLCAxOTQ2Ny4wXSwgWzE5MjA5
LjAsIDE5MjY1LjAsIDE5NDQyLjAsIDE5NDU2LjAsIDE5NDk1LjBdXX19fSwgImpRdWVyeSAtIGRp
diI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3Jt
YW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVu
cyI6IHsiY3VycmVudCI6IFtbMTMwOTE0LjAsIDEzMjExNi4wLCAxMzMwNzIuMCwgMTMzMjE2LjAs
IDEzMzM2MS4wXSwgWzEzNDI4MC4wLCAxMzU5ODAuMCwgMTM3NTIyLjAsIDEzODEzNy4wLCAxMzk4
NjAuMF0sIFsxMjk0OTcuMCwgMTMyMDczLjAsIDEzMjg2OC4wLCAxMzQyNDcuMCwgMTM1ODg0LjBd
LCBbMTMxNTkxLjAsIDEzNTAyNy4wLCAxMzYwNzguMCwgMTM2NjQ1LjAsIDEzNzgwMS4wXV19fX19
fX19fSwgImJ1aWxkVGltZSI6ICIyMDE0LTA5LTEyVDE1OjMzOjU0Ljg3NDg5MCIsICJyZXZpc2lv
bnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTQtMDktMTJUMTM6MDY6MTNaIiwgInJl
dmlzaW9uIjogIjE3MzU1NyJ9fX0sIHsidGVzdHMiOiB7IkRyb21hZW8iOiB7InVybCI6ICJodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
IiwgInRlc3RzIjogeyJjc3NxdWVyeS1qcXVlcnkiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpx
dWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzQxMy4wMDk0MDk1
ODI1NjQ5NiwgNDE0Ljc5MzkzMTEzODQ0NzYsIDQxOC4zNDg2Nzg4MjgxMDQzNywgNDE5Ljk3MTE5
OTYxMTU0MTY0LCA0MjIuMzUzNzA0MTgxMjMyNzNdLCBbNDE0LjE3OTg1NzM2ODgwMTcsIDQxNy4z
NTcyOTA2MTY0Mjk4LCA0MTkuODUxNDg1MTc4MjIxMSwgNDIwLjk2MDk3OTEyMjU4NDQsIDQyMy43
MDE2Mjk0Nzk0NDYzXSwgWzQxNS4wMTUxMjE3ODA2MjIzNCwgNDE4LjA1NzEwMTI2NTgzMTI1LCA0
MTkuNDk1Mjk0NDI3ODczODMsIDQyMC42MjgzMjI4OTQwNTY0LCA0MjEuODg0ODc1OTUxNDQ0OTRd
LCBbNDEzLjAxOTQzNjM3NzQ5ODIsIDQxNi42MjYyNDk5NTE4MDEzLCA0MTkuNTU5NDczNjk5NjAw
MywgNDIxLjg1MjgyOTYzNDc5ODMsIDQyMy40MzUyNzM5MTQ1Nzg5XV19fSwgInRlc3RzIjogeyJq
UXVlcnkgLSBkaXZbY2xhc3N8PWRpYWxvZ10iOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQu
b3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVy
eS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxNjI3LjAsIDIxNzIw
LjAsIDIxODk3LjAsIDIyMDYwLjAsIDIyMzI4LjBdLCBbMjE1ODguMCwgMjE5MDkuMCwgMjIxNDku
MCwgMjIzMzEuMCwgMjI0NDMuMF0sIFsyMTgzMS4wLCAyMTkzOC4wLCAyMjA1Mi4wLCAyMjE3Mi4w
LCAyMjI1Ny4wXSwgWzIyMjMwLjAsIDIyMjkxLjAsIDIyMjk1LjAsIDIyMzU3LjAsIDIyNTc1LjBd
XX19fSwgImpRdWVyeSAtIGRpdiNzY2VuZTEgZGl2LmRpYWxvZyBkaXYiOiB7InVybCI6ICJodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBb
WzIxNTk1LjAsIDIxNjI5LjAsIDIxNzQ2LjAsIDIxOTI2LjAsIDIxOTQ5LjBdLCBbMjE2NDcuMCwg
MjE4MjkuMCwgMjE4OTEuMCwgMjIwMjMuMCwgMjIwMjYuMF0sIFsyMTc3NS4wLCAyMTgyMy4wLCAy
MTgyNC4wLCAyMTg3NC4wLCAyMTk0OS4wXSwgWzIxNDM1LjAsIDIxNDk1LjAsIDIxNTc2LjAsIDIx
NzM1LjAsIDIxODAzLjBdXX19fSwgImpRdWVyeSAtIGJvZHkgZGl2IjogeyJ1cmwiOiAiaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9j
c3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sx
ODcyNy4wLCAxODc2NC4wLCAxODc5MS4wLCAxODk1OC4wLCAxOTAxNi4wXSwgWzE5MDAwLjAsIDE5
MDU3LjAsIDE5MDk1LjAsIDE5MTQyLjAsIDE5MTkzLjBdLCBbMTg4NTUuMCwgMTg5OTguMCwgMTkw
NjkuMCwgMTkxMDYuMCwgMTkxNDUuMF0sIFsxODkwNi4wLCAxOTA1Mi4wLCAxOTA2MS4wLCAxOTA4
Ni4wLCAxOTIyOC4wXV19fX0sICJqUXVlcnkgLSBkaXY6bnRoLWNoaWxkKDJuKzEpIjogeyJ1cmwi
OiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMv
RHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJy
ZW50IjogW1s2MDQ3LjAsIDYwNjAuMCwgNjA2Ni4wLCA2MDgzLjAsIDYwODMuMF0sIFs1OTYyLjAs
IDYwMTMuMCwgNjAxNC4wLCA2MDE5LjAsIDYwMzAuMF0sIFs2MDA4LjAsIDYwMDkuMCwgNjAxMC4w
LCA2MDI5LjAsIDYwNzkuMF0sIFs2MDYzLjAsIDYwNjkuMCwgNjA3Ni4wLCA2MDgxLjAsIDYwOTIu
MF1dfX19LCAialF1ZXJ5IC0gZGl2Om50aC1jaGlsZCgybikiOiB7InVybCI6ICJodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1
ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzYwMTQu
MCwgNjA2Mi4wLCA2MDkyLjAsIDYxMDEuMCwgNjExMy4wXSwgWzU5OTIuMCwgNjAwMS4wLCA2MDAz
LjAsIDYwMDYuMCwgNjA0NC4wXSwgWzYwMjYuMCwgNjAzOC4wLCA2MDM5LjAsIDYwNDYuMCwgNjA0
OS4wXSwgWzYwMTYuMCwgNjAzMy4wLCA2MDQ2LjAsIDYwNjAuMCwgNjA2OS4wXV19fX0sICJqUXVl
cnkgLSAqIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Bl
cmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjog
eyJSdW5zIjogeyJjdXJyZW50IjogW1syOTIzLjAsIDI5MjQuMCwgMzAzNi4wLCAzMDUyLjczNjMx
ODQwNzk2MDQsIDMwOTguMF0sIFsyODgzLjAsIDI5NTQuMCwgMzAyOS4wLCAzMDM5LjAsIDMxMTgu
MF0sIFsyOTA2LjAsIDI5NjUuMCwgMjk4NC4wLCAyOTg5LjAsIDI5OTEuMF0sIFsyODExLjAsIDI5
MTUuMCwgMzAwMi4wLCAzMDQ4LjAsIDMwNzkuMF1dfX19LCAialF1ZXJ5IC0gZGl2ICNzcGVlY2g1
IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1h
bmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5z
IjogeyJjdXJyZW50IjogW1syMTE1Ni4wLCAyMTE5MC4wLCAyMTM0OS4wLCAyMTQyMC4wLCAyMTUx
MC4wXSwgWzIxMjY4LjAsIDIxNDMwLjAsIDIxNTQ4LjAsIDIxNjI2LjAsIDIxODI2LjBdLCBbMjEx
ODYuMCwgMjEyNDguMCwgMjEyNTkuMCwgMjE0MDUuMCwgMjE0OTIuMF0sIFsyMDkwOC4wLCAyMTEz
My4wLCAyMTE4Ny4wLCAyMTIxNS4wLCAyMTM2MC4wXV19fX0sICJqUXVlcnkgLSBib2R5IjogeyJ1
cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJj
dXJyZW50IjogW1szMzQ4NDAuMCwgMzM2MzQ3LjAsIDM0MDMzNy4wLCAzNDMwMTguMCwgMzQ0MjAz
LjBdLCBbMzcxMTYzLjAsIDM3MTgzNy4wLCAzNzUyMTUuMCwgMzc1ODc5LjAsIDM3NzIzOS4wXSwg
WzM2NDk2Ny4wLCAzNjUzMDIuMCwgMzY4MTM3LjAsIDM3NTIxNy4wLCAzODEzMzEuMF0sIFszNDE0
OTQuMCwgMzQ2NjAzLjAsIDM0ODI3MS4wLCAzNDk0MDEuMCwgMzUwMzIwLjBdXX19fSwgImpRdWVy
eSAtIGRpdiArIGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0
cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjEzNjguMCwgMjE0NDIuMCwgMjE1MjAuMCwg
MjE1OTcuMCwgMjE4MDQuMF0sIFsyMTY2NS4wLCAyMTcyMi4wLCAyMTc2Mi4wLCAyMTc2NC4wLCAy
MTk0MC4wXSwgWzIxNzA0LjAsIDIxODQzLjAsIDIxOTE1LjAsIDIxOTI1LjAsIDIxOTMwLjBdLCBb
MjE2NjEuMCwgMjE2OTYuMCwgMjE3MDUuMCwgMjE4MDYuMCwgMjE4ODkuMF1dfX19LCAialF1ZXJ5
IC0gZGl2ID4gZGl2IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3Ry
dW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRy
aWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sxOTE3MS4wLCAxOTI5Mi4wLCAxOTQ4MC4wLCAx
OTUwMi4wLCAxOTg5Mi4wXSwgWzE5NjMxLjAsIDE5NjQxLjAsIDE5NzU4LjAsIDE5ODIzLjAsIDE5
ODQyLjBdLCBbMTk5OTEuMCwgMjAwMjEuMCwgMjAxMjguMCwgMjAxNjAuMCwgMjAxOTIuMF0sIFsx
OTY1Ni4wLCAyMDA2My4wLCAyMDE0Mi4wLCAyMDE2Ny4wLCAyMDE3OC4wXV19fX0sICJqUXVlcnkg
LSBkaXYgLmRpYWxvZyI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0
cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjEyNzQuMCwgMjEyOTcuMCwgMjEzMzcuMCwg
MjE1NDQuMCwgMjE1NjMuMF0sIFsyMTg2Ni4wLCAyMTk1NS4wLCAyMTk2OS4wLCAyMTk4NS4wLCAy
MjA4Ny4wXSwgWzIxNTY5LjAsIDIxODI4LjAsIDIyMDUzLjAsIDIyMTc5LjAsIDIyMTk0LjBdLCBb
MjEzOTguMCwgMjE1NzUuMCwgMjE2NTQuMCwgMjE5MDguMCwgMjE5MDkuMF1dfX19LCAialF1ZXJ5
IC0gZGl2IGRpdiBkaXYiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIv
dHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1l
dHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxMjY4LjAsIDIxMzQ2LjAsIDIxMzg0LjAs
IDIxNDI4LjAsIDIxNTczLjBdLCBbMjEzNDMuMCwgMjEzNjEuMCwgMjE0NTEuMCwgMjE4MzEuMCwg
MjE4NjUuMF0sIFsyMTE1OS4wLCAyMTIzMS4wLCAyMTI5OC4wLCAyMTMyMy4wLCAyMTUyNC4wXSwg
WzIxMjg3LjAsIDIxMzU0LjAsIDIxNDE0LjAsIDIxNDg3LjAsIDIxNTEyLjBdXX19fSwgImpRdWVy
eSAtIGRpdltjbGFzcyQ9bG9nXSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJv
d3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwi
LCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjA4OTYuMCwgMjEzNTIuMCwgMjEz
NjIuMCwgMjE2MDcuMCwgMjE2NDQuMF0sIFsyMTExMC4wLCAyMTM5Ny4wLCAyMTQ2My4wLCAyMTQ3
MS4wLCAyMTU2Mi4wXSwgWzIxNDI3LjAsIDIxNDQyLjAsIDIxNTI0LjAsIDIxNTI4LjAsIDIxNTY4
LjBdLCBbMjEwNTIuMCwgMjExMDUuMCwgMjEyMzkuMCwgMjEzMjQuMCwgMjE0MzMuMF1dfX19LCAi
alF1ZXJ5IC0gI3NjZW5lMSAjc3BlZWNoMSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjEwNjAuMCwgMjExMDIu
MCwgMjEyMDMuMCwgMjEyMjAuMCwgMjE0MDMuMF0sIFsyMTcyMy4wLCAyMTczMi4wLCAyMTgzNS4w
LCAyMTg3My4wLCAyMTk5My4wXSwgWzIxNjc3LjAsIDIxODE3LjAsIDIxODQwLjAsIDIxOTU3LjAs
IDIyMDY2LjBdLCBbMjE4MDIuMCwgMjE4NjguMCwgMjE4NzYuMCwgMjE5MDAuMCwgMjE5MDkuMF1d
fX19LCAialF1ZXJ5IC0gZGl2W2NsYXNzPWRpYWxvZ10iOiB7InVybCI6ICJodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5
LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIyMTU1LjAs
IDIyMjEwLjAsIDIyMzc4LjAsIDIyMzg2LjAsIDIyNTE5LjBdLCBbMjE4MjkuMCwgMjIwNjIuMCwg
MjIyMDguMCwgMjIyNzQuMCwgMjIzNTAuMF0sIFsyMjIxNi4wLCAyMjM5NS4wLCAyMjUxMy4wLCAy
MjUzMC4wLCAyMjYyMi4wXSwgWzIxODgyLjAsIDIxOTU3LjAsIDIyMTIzLjAsIDIyMjAxLjAsIDIy
Mzg1LjBdXX19fSwgImpRdWVyeSAtIC5kaWFsb2ciOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpx
dWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzMyODgwNy4wLCAz
MzM3NDkuMCwgMzMzOTM1LjAsIDMzNDI4NS4wLCAzMzcwNzIuMF0sIFszNTQzODUuMCwgMzU4MDU3
LjAsIDM1ODEyNy4wLCAzNTk2OTguMCwgMzY1MjcyLjBdLCBbMzQzODQ5LjAsIDM0NTE1Ni4wLCAz
NDg5NDIuMCwgMzUwMDU1LjAsIDM1NDQ0Ni4wXSwgWzMyNDcyNy4wLCAzMjczMjAuMCwgMzMwMjQy
LjAsIDMzMTk4OS4wLCAzMzQ4MTUuMF1dfX19LCAialF1ZXJ5IC0gZGl2W2NsYXNzKj1zY2VdIjog
eyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNl
VGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjog
eyJjdXJyZW50IjogW1syMTAxOC4wLCAyMTEwOS4wLCAyMTM5Ni4wLCAyMTUxMy4wLCAyMTYyNC4w
XSwgWzIxMzE3LjAsIDIxMzg1LjAsIDIxMzkyLjAsIDIxNDM0LjAsIDIxNDkwLjBdLCBbMjE0MjYu
MCwgMjE0NjYuMCwgMjE2MDIuMCwgMjE2ODkuMCwgMjE3OTkuMF0sIFsyMTMzOC4wLCAyMTM3OC4w
LCAyMTM3OS4wLCAyMTQzNy4wLCAyMTQ1Ni4wXV19fX0sICJqUXVlcnkgLSBkaXYuZGlhbG9nIjog
eyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNl
VGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjog
eyJjdXJyZW50IjogW1syMTg0OS4wLCAyMjAzMC4wLCAyMjAzNS4wLCAyMjA0OS4wLCAyMjA5Mi4w
XSwgWzIxODY4LjAsIDIyMTUzLjAsIDIyMjI1LjAsIDIyMzI5LjAsIDIyMzk0LjBdLCBbMjIxNjQu
MCwgMjIyNjYuMCwgMjIzMzMuMCwgMjI1NDQuMCwgMjI1ODEuMF0sIFsyMTk4NS4wLCAyMjE4OC4w
LCAyMjIxNS4wLCAyMjI3Mi4wLCAyMjMzNi4wXV19fX0sICJqUXVlcnkgLSBkaXZbY2xhc3N+PWRp
YWxvZ10iOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVy
Zm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7
IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxMTUwLjAsIDIxMjcyLjAsIDIxMzc2LjAsIDIxNDQ5LjAs
IDIxNTg1LjBdLCBbMjEzODAuMCwgMjE1MjMuMCwgMjE2NTQuMCwgMjE2NjMuMCwgMjE3NDMuMF0s
IFsyMTY2NC4wLCAyMTY4My4wLCAyMTcyMC4wLCAyMTgwMy4wLCAyMTgyMy4wXSwgWzIxNTA1LjAs
IDIxNTkxLjAsIDIxNTk2LjAsIDIxNzMxLjAsIDIxOTc3LjBdXX19fSwgImpRdWVyeSAtIGRpdjpu
dGgtY2hpbGQob2RkKSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwiLCAibWV0
cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbNjA1MC4wLCA2MDU2LjAsIDYwNjguMCwgNjA5
OC4wLCA2MTA0LjBdLCBbNTk4OS4wLCA2MDA3LjAsIDYwMTQuMCwgNjAxOS4wLCA2MDIzLjBdLCBb
NjA0MS4wLCA2MDYyLjAsIDYwOTIuMCwgNjA5NC4wLCA2MDk2LjBdLCBbNjAzMC4wLCA2MDM3LjAs
IDYwNjAuMCwgNjA3My4wLCA2MDkxLjBdXX19fSwgImpRdWVyeSAtIGRpdjpvbmx5LWNoaWxkIjog
eyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNl
VGVzdHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjog
eyJjdXJyZW50IjogW1syMTg2NC4wLCAyMTk5MS4wLCAyMjAyNS4wLCAyMjAzMy4wLCAyMjA4OS4w
XSwgWzIxOTY5LjAsIDIyMTA2LjAsIDIyMTY4LjAsIDIyMjY3LjAsIDIyMzkzLjBdLCBbMjE1ODEu
MCwgMjE3NTUuMCwgMjIwNjEuMCwgMjIwODcuMCwgMjIxNjkuMF0sIFsyMTgyOC4wLCAyMTk3OC4w
LCAyMjAwNC4wLCAyMjM0NC4wLCAyMjM1MS4wXV19fX0sICJqUXVlcnkgLSBkaXYsIGEsIHNwYW4i
OiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFu
Y2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMi
OiB7ImN1cnJlbnQiOiBbWzk1NjYuMCwgOTY0Ny4wLCA5NjY0LjAsIDk2ODEuMCwgOTc3NS4wXSwg
Wzk1MzkuMCwgOTU3NC4wLCA5NTkwLjAsIDk2MTMuMCwgOTY4OS4wXSwgWzk2ODguMCwgOTgxNi4w
LCA5ODIyLjAsIDk4MzAuMCwgOTg5Mi4wXSwgWzk2NTkuMCwgOTcxMS4wLCA5NzQ1LjAsIDk4Mzcu
MCwgOTg5MC4wXV19fX0sICJqUXVlcnkgLSBkaXYgZGl2IjogeyJ1cmwiOiAiaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVy
eS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sxOTU2NC4w
LCAxOTYzNC4wLCAxOTY4MS4wLCAxOTY4Ny4wLCAxOTc3MC4wXSwgWzE5OTcyLjAsIDIwMDEyLjAs
IDIwMDU4LjAsIDIwMDcxLjAsIDIwMTM2LjBdLCBbMTk5OTQuMCwgMjAwNjcuMCwgMjAxMDIuMCwg
MjAyNDIuMCwgMjAyNzAuMF0sIFsxOTg3MS4wLCAxOTkzMC4wLCAyMDAxNi4wLCAyMDA2NC4wLCAy
MDE3NC4wXV19fX0sICJqUXVlcnkgLSBkaXYsIGRpdiwgZGl2IjogeyJ1cmwiOiAiaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3Nx
dWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sxMjUx
Ny4wLCAxMjYzMi4wLCAxMjY2MC4wLCAxMjcxNC4wLCAxMjc1NS4wXSwgWzEyNjI4LjAsIDEyNjQ3
LjAsIDEyNzE1LjAsIDEyNzE4LjAsIDEyNzM3LjBdLCBbMTI1NDcuMCwgMTI2MzQuMCwgMTI2NDcu
MCwgMTI3MDkuMCwgMTI3ODYuMF0sIFsxMjcwMS4wLCAxMjcyNS4wLCAxMjc0NC4wLCAxMjc0OC4w
LCAxMjc0OC4wXV19fX0sICJqUXVlcnkgLSBkaXZbY2xhc3NePWRpYV0iOiB7InVybCI6ICJodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVv
L2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBb
WzIxNjAyLjAsIDIxNjk4LjAsIDIxNzM3LjAsIDIxODIwLjAsIDIxODY0LjBdLCBbMjIxOTMuMCwg
MjIyNTUuMCwgMjI0ODQuMCwgMjI0ODUuMCwgMjI1NjAuMF0sIFsyMTI5NS4wLCAyMTQyMS4wLCAy
MTQ0Ni4wLCAyMTQ1Ni4wLCAyMTYwNS4wXSwgWzIxNTcxLjAsIDIxNTkxLjAsIDIxNjEwLjAsIDIx
ODkwLjAsIDIxODk4LjBdXX19fSwgImpRdWVyeSAtICNzcGVlY2g1IjogeyJ1cmwiOiAiaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9j
c3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1sx
MDEyODY3LjAsIDEwMzAyODYuMCwgMTA0MTQzNy4wLCAxMDUwNTQyLjAsIDEwNTE3MDYuMF0sIFsx
MDQ4Mjc0LjAsIDEwNjA0NzMuMCwgMTA2NDY5Ni4wLCAxMDg2NTc0LjAsIDEwOTYyMDYuMF0sIFsx
MTI1MzEwLjAsIDExNDE3MDYuMCwgMTE0MjU3NS4wLCAxMTQzNDA3LjAsIDExNTYyOTYuMF0sIFsx
MDkyNTQ0LjAsIDExMDEwNDEuMCwgMTExNDg1Ni4wLCAxMTE5ODc1LjAsIDExMjg1NDEuMF1dfX19
LCAialF1ZXJ5IC0gZGl2Omxhc3QtY2hpbGQiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQu
b3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVy
eS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIwNzE1LjAsIDIwODUw
LjAsIDIwOTQwLjAsIDIwOTY2LjAsIDIxMDQwLjBdLCBbMjE1NjYuMCwgMjE2NTcuMCwgMjE3MDku
MCwgMjE4NDcuMCwgMjE4NzUuMF0sIFsyMTc4NS4wLCAyMTgyNC4wLCAyMTk0OC4wLCAyMTk1My4w
LCAyMjAzMC4wXSwgWzIxNTA2LjAsIDIxNTI1LjAsIDIxNjcyLjAsIDIxODg3LjAsIDIxOTYwLjBd
XX19fSwgImpRdWVyeSAtIGRpdiB+IGRpdiI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTg3NTMuMCwgMTg3Njku
MCwgMTg4NzYuMCwgMTg5ODguMCwgMTkwMDcuMF0sIFsxODMzNS4wLCAxODQwMC4wLCAxODQwMy4w
LCAxODQ3NC4wLCAxODUxNC4wXSwgWzE4ODMxLjAsIDE4ODY0LjAsIDE4OTU0LjAsIDE4OTg3LjAs
IDE5MDU1LjBdLCBbMTgzMTEuMCwgMTg0NTMuMCwgMTg2MDcuMCwgMTg2MjMuMCwgMTg2MzQuMF1d
fX19LCAialF1ZXJ5IC0gZGl2W2NsYXNzXSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5
Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMTg3MDMuMCwgMTg4MjEu
MCwgMTg4NTYuMCwgMTg5MTIuMCwgMTkwMzkuMF0sIFsxOTU2NS4wLCAxOTcyNy4wLCAxOTc0Ny4w
LCAxOTgyOS4wLCAxOTg3NC4wXSwgWzE5Mjk4LjAsIDE5MzE4LjAsIDE5NDI4LjAsIDE5NjA5LjAs
IDE5NjE3LjBdLCBbMTkwMjkuMCwgMTkyMzIuMCwgMTkzNDcuMCwgMTkzNjkuMCwgMTk0MzcuMF1d
fX19LCAialF1ZXJ5IC0gZGl2Om50aC1jaGlsZChldmVuKSI6IHsidXJsIjogImh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVl
cnktanF1ZXJ5Lmh0bWwiLCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbNTk0Ni4w
LCA1OTg0LjAsIDYwMjQuMCwgNjA0MC4wLCA2MDY0LjBdLCBbNTk4My4wLCA2MDI4LjAsIDYwMzMu
MCwgNjA0MC4wLCA2MDQ0LjBdLCBbNTk3OS4wLCA2MDUxLjAsIDYwNTIuMCwgNjA2Ny4wLCA2MDc1
LjBdLCBbNjAwOC4wLCA2MDI1LjAsIDYwNDguMCwgNjA3Mi4wLCA2MDczLjBdXX19fSwgImpRdWVy
eSAtIGRpdjpmaXJzdC1jaGlsZCI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJv
d3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vY3NzcXVlcnktanF1ZXJ5Lmh0bWwi
LCAibWV0cmljcyI6IHsiUnVucyI6IHsiY3VycmVudCI6IFtbMjE4MjAuMCwgMjE4OTcuMCwgMjE5
ODguMCwgMjIxOTQuMCwgMjIyODAuMF0sIFsyMjExMy4wLCAyMjE4OS4wLCAyMjIxMS4wLCAyMjI5
Ny4wLCAyMjM4MS4wXSwgWzIxNzc5LjAsIDIxODQxLjAsIDIxOTc5LjAsIDIyMDY5LjAsIDIyMjc4
LjBdLCBbMjE1NzYuMCwgMjE3MjcuMCwgMjE3MzQuMCwgMjE4NTYuMCwgMjE4NzkuMF1dfX19LCAi
alF1ZXJ5IC0gZGl2I3NwZWVjaDUiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jy
b3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1s
IiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzIxODAwLjAsIDIxODUzLjAsIDIy
MDM0LjAsIDIyMDYwLjAsIDIyMjg4LjBdLCBbMjIzNzkuMCwgMjI0NzIuMCwgMjI0OTUuMCwgMjI1
MTEuMCwgMjI1NjkuMF0sIFsyMTEzOS4wLCAyMTIwOC4wLCAyMTM5NC4wLCAyMTQ1NC4wLCAyMTQ2
MC4wXSwgWzIxNzc1LjAsIDIxODEwLjAsIDIxOTQyLjAsIDIyMDAzLjAsIDIyMDA0LjBdXX19fSwg
ImpRdWVyeSAtIGRpdi5zY2VuZSBkaXYuZGlhbG9nIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9jc3NxdWVyeS1q
cXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50IjogW1syMjU0MS4wLCAy
MjU2NS4wLCAyMjYxMi4wLCAyMjc0NC4wLCAyMjgwMS4wXSwgWzIyMzExLjAsIDIyMzc3LjAsIDIy
NTM2LjAsIDIyNjE0LjAsIDIyNzQwLjBdLCBbMjE5NDEuMCwgMjE5NDYuMCwgMjE5NTYuMCwgMjE5
ODUuMCwgMjIwNjUuMF0sIFsyMjI1My4wLCAyMjM2MC4wLCAyMjM4Mi4wLCAyMjQ4Mi4wLCAyMjU2
Ny4wXV19fX0sICJqUXVlcnkgLSBkaXYuY2hhcmFjdGVyLCBkaXYuZGlhbG9nIjogeyJ1cmwiOiAi
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvRHJv
bWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJjdXJyZW50
IjogW1sxNjY3Ny4wLCAxNjY3OS4wLCAxNjY5My4wLCAxNjY5Ni4wLCAxNjcwOS4wXSwgWzE2NTMy
LjAsIDE2NTYxLjAsIDE2NTYyLjAsIDE2NTc3LjAsIDE2NTk3LjBdLCBbMTY0MDkuMCwgMTY3ODMu
MCwgMTY3OTEuMCwgMTY4MjAuMCwgMTY4ODQuMF0sIFsxNjc4OC4wLCAxNjc5Ny4wLCAxNjg5MC4w
LCAxNjk3My4wLCAxNzAwMi4wXV19fX0sICJqUXVlcnkgLSBkaXY6bnRoLWNoaWxkKG4pIjogeyJ1
cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVz
dHMvRHJvbWFlby9jc3NxdWVyeS1qcXVlcnkuaHRtbCIsICJtZXRyaWNzIjogeyJSdW5zIjogeyJj
dXJyZW50IjogW1sxODgwMS4wLCAxOTA0Ny4wLCAxOTA4OC4wLCAxOTE5NS4wLCAxOTI5Ny4wXSwg
WzE5MDg5LjAsIDE5MDkyLjAsIDE5Mzg2LjAsIDE5NTQ4LjAsIDE5NzMyLjBdLCBbMTkyMzEuMCwg
MTkyNzguMCwgMTkzMzEuMCwgMTk0OTEuMCwgMTk1NTMuMF0sIFsxOTYxOS4wLCAxOTYyNS4wLCAx
OTkwMS4wLCAxOTkwNy4wLCAxOTkzNi4wXV19fX0sICJqUXVlcnkgLSBkaXYiOiB7InVybCI6ICJo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9t
YWVvL2Nzc3F1ZXJ5LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQi
OiBbWzEyNzQ0MC4wLCAxMjkzMjYuMCwgMTI5MzUwLjAsIDEyOTY0Ni4wLCAxMzA0NjQuMF0sIFsx
MzIwNDguMCwgMTMyNzU1LjAsIDEzMzQ5My4wLCAxMzQzNTUuMCwgMTM0ODM1LjBdLCBbMTMzOTI4
LjAsIDEzNDcyMy4wLCAxMzUzNDkuMCwgMTM1Mzc1LjAsIDEzNTQ0Ni4wXSwgWzEyNjgxMi4wLCAx
Mjg2MTguMCwgMTMxNzM1LjAsIDEzMjY5OS4wLCAxMzI4MDIuMF1dfX19fX19fX0sICJidWlsZFRp
bWUiOiAiMjAxNC0wOS0xMlQxNzo0NDoyMy44NjA0OTIiLCAicmV2aXNpb25zIjogeyJXZWJLaXQi
OiB7InRpbWVzdGFtcCI6ICIyMDE0LTA5LTEyVDEzOjA2OjEzWiIsICJyZXZpc2lvbiI6ICIxNzM1
NTcifX19XTwvc2NyaXB0PgoKCjxzY3JpcHQgYXN5bmM9IiIgc3JjPSIvVXNlcnMveXVzdWtlL2Rl
di9XZWJLaXQvUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzIj48
L3NjcmlwdD48c2NyaXB0IGFzeW5jPSIiIHNyYz0iL1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0L1Bl
cmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMiPjwvc2Ny
aXB0PjxzY3JpcHQgYXN5bmM9IiIgc3JjPSIvVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9y
bWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcyI+PC9zY3JpcHQ+PC9ib2R5PjwvaHRt
bD5ZdGV4dC9odG1spA8VGh/UBhAHCBESExRfEBNXZWJSZXNvdXJjZVJlc3BvbnNlXxBiZmlsZTov
Ly9Vc2Vycy95dXN1a2UvZGV2L1dlYktpdC9QZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3Vy
Y2VzL2Ryb21hZW8vd2ViL2xpYi9qcXVlcnktMS42LjQuanNPEQJeYnBsaXN0MDDUAQIDBAUGNTZY
JHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKsHCB8lJi0XLi8wMVUkbnVsbNsJ
CgsMDQ4PEBESExQVFhcYGRobHB0eUiQzViRjbGFzc1IkNlIkMVIkOVIkNFIkN1IkMlIkNVIkMFIk
OIACgAqABxAAgAmABYAAEAeABhAIgAjTIAohGiMkV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANf
EGJmaWxlOi8vL1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFl
by9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qc9InKCkqWiRjbGFzc25h
bWVYJGNsYXNzZXNVTlNVUkyiKyxVTlNVUkxYTlNPYmplY3QjQbnDa+ikPtlfEA90ZXh0L2phdmFz
Y3JpcHQSAAXJPyN/7////////9InKDIzXU5TVVJMUmVzcG9uc2WiNCxdTlNVUkxSZXNwb25zZV8Q
D05TS2V5ZWRBcmNoaXZlctE3OF8QE1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3
AEMASQBgAGMAagBtAHAAcwB2AHkAfAB/AIIAhQCHAIkAiwCNAI8AkQCTAJUAlwCZAJsAogCqALYA
uAC6ALwBIQEmATEBOgFAAUMBSQFSAVsBbQFyAXsBgAGOAZEBnwGxAbQBygAAAAAAAAIBAAAAAAAA
ADkAAAAAAAAAAAAAAAAAAAHMTxIABck/LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkg
djEuNi40CiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5cmlnaHQgMjAxMSwgSm9obiBS
ZXNpZwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNl
bnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBJbmNsdWRlcyBTaXp6bGUu
anMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICogQ29weXJpZ2h0IDIwMTEsIFRoZSBEb2pvIEZv
dW5kYXRpb24KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2Vz
LgogKgogKiBEYXRlOiBNb24gU2VwIDEyIDE4OjU0OjQ4IDIwMTEgLTA0MDAKICovCihmdW5jdGlv
biggd2luZG93LCB1bmRlZmluZWQgKSB7CgovLyBVc2UgdGhlIGNvcnJlY3QgZG9jdW1lbnQgYWNj
b3JkaW5nbHkgd2l0aCB3aW5kb3cgYXJndW1lbnQgKHNhbmRib3gpCnZhciBkb2N1bWVudCA9IHdp
bmRvdy5kb2N1bWVudCwKICAgICAgICBuYXZpZ2F0b3IgPSB3aW5kb3cubmF2aWdhdG9yLAogICAg
ICAgIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uOwp2YXIgalF1ZXJ5ID0gKGZ1bmN0aW9uKCkg
ewoKLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnkKdmFyIGpRdWVyeSA9IGZ1bmN0aW9u
KCBzZWxlY3RvciwgY29udGV4dCApIHsKICAgICAgICAgICAgICAgIC8vIFRoZSBqUXVlcnkgb2Jq
ZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJwogICAg
ICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQs
IHJvb3RqUXVlcnkgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBNYXAgb3ZlciBqUXVlcnkgaW4g
Y2FzZSBvZiBvdmVyd3JpdGUKICAgICAgICBfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSwKCiAgICAg
ICAgLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKICAgICAgICBfJCA9IHdp
bmRvdy4kLAoKICAgICAgICAvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVy
eShkb2N1bWVudCkKICAgICAgICByb290alF1ZXJ5LAoKICAgICAgICAvLyBBIHNpbXBsZSB3YXkg
dG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5ncyBvciBJRCBzdHJpbmdzCiAgICAgICAgLy8gUHJpb3Jp
dGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIx
KQogICAgICAgIHF1aWNrRXhwciA9IC9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdc
LV0qKSQpLywKCiAgICAgICAgLy8gQ2hlY2sgaWYgYSBzdHJpbmcgaGFzIGEgbm9uLXdoaXRlc3Bh
Y2UgY2hhcmFjdGVyIGluIGl0CiAgICAgICAgcm5vdHdoaXRlID0gL1xTLywKCiAgICAgICAgLy8g
VXNlZCBmb3IgdHJpbW1pbmcgd2hpdGVzcGFjZQogICAgICAgIHRyaW1MZWZ0ID0gL15ccysvLAog
ICAgICAgIHRyaW1SaWdodCA9IC9ccyskLywKCiAgICAgICAgLy8gQ2hlY2sgZm9yIGRpZ2l0cwog
ICAgICAgIHJkaWdpdCA9IC9cZC8sCgogICAgICAgIC8vIE1hdGNoIGEgc3RhbmRhbG9uZSB0YWcK
ICAgICAgICByc2luZ2xlVGFnID0gL148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLywKCiAgICAg
ICAgLy8gSlNPTiBSZWdFeHAKICAgICAgICBydmFsaWRjaGFycyA9IC9eW1xdLDp7fVxzXSokLywK
ICAgICAgICBydmFsaWRlc2NhcGUgPSAvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9
KS9nLAogICAgICAgIHJ2YWxpZHRva2VucyA9IC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVs
bHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZywKICAgICAgICBydmFsaWRicmFj
ZXMgPSAvKD86Xnw6fCwpKD86XHMqXFspKy9nLAoKICAgICAgICAvLyBVc2VyYWdlbnQgUmVnRXhw
CiAgICAgICAgcndlYmtpdCA9IC8od2Via2l0KVsgXC9dKFtcdy5dKykvLAogICAgICAgIHJvcGVy
YSA9IC8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLywKICAgICAgICBybXNpZSA9
IC8obXNpZSkgKFtcdy5dKykvLAogICAgICAgIHJtb3ppbGxhID0gLyhtb3ppbGxhKSg/Oi4qPyBy
djooW1x3Ll0rKSk/LywKCiAgICAgICAgLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1l
bGl6aW5nCiAgICAgICAgcmRhc2hBbHBoYSA9IC8tKFthLXpdfFswLTldKS9pZywKICAgICAgICBy
bXNQcmVmaXggPSAvXi1tcy0vLAoKICAgICAgICAvLyBVc2VkIGJ5IGpRdWVyeS5jYW1lbENhc2Ug
YXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCiAgICAgICAgZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBh
bGwsIGxldHRlciApIHsKICAgICAgICAgICAgICAgIHJldHVybiAoIGxldHRlciArICIiICkudG9V
cHBlckNhc2UoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBLZWVwIGEgVXNlckFnZW50IHN0cmlu
ZyBmb3IgdXNlIHdpdGggalF1ZXJ5LmJyb3dzZXIKICAgICAgICB1c2VyQWdlbnQgPSBuYXZpZ2F0
b3IudXNlckFnZW50LAoKICAgICAgICAvLyBGb3IgbWF0Y2hpbmcgdGhlIGVuZ2luZSBhbmQgdmVy
c2lvbiBvZiB0aGUgYnJvd3NlcgogICAgICAgIGJyb3dzZXJNYXRjaCwKCiAgICAgICAgLy8gVGhl
IGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5CiAgICAgICAgcmVhZHlMaXN0LAoKICAgICAgICAv
LyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlcgogICAgICAgIERPTUNvbnRlbnRMb2FkZWQsCgogICAg
ICAgIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8gc29tZSBjb3JlIG1ldGhvZHMKICAgICAgICB0b1N0
cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsCiAgICAgICAgaGFzT3duID0gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKICAgICAgICBwdXNoID0gQXJyYXkucHJvdG90eXBl
LnB1c2gsCiAgICAgICAgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsCiAgICAgICAgdHJp
bSA9IFN0cmluZy5wcm90b3R5cGUudHJpbSwKICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90
eXBlLmluZGV4T2YsCgogICAgICAgIC8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCiAgICAgICAg
Y2xhc3MydHlwZSA9IHt9OwoKalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsKICAgICAg
ICBjb25zdHJ1Y3RvcjogalF1ZXJ5LAogICAgICAgIGluaXQ6IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
Y29udGV4dCwgcm9vdGpRdWVyeSApIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaCwgZWxlbSwg
cmV0LCBkb2M7CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlICQoIiIpLCAkKG51bGwpLCBvciAk
KHVuZGVmaW5lZCkKICAgICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgJChET01FbGVtZW50KQogICAgICAgICAgICAgICAgaWYgKCBzZWxlY3Rv
ci5ub2RlVHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhp
c1swXSA9IHNlbGVjdG9yOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIFRoZSBib2R5IGVsZW1lbnQgb25seSBleGlzdHMgb25jZSwgb3B0
aW1pemUgZmluZGluZyBpdAogICAgICAgICAgICAgICAgaWYgKCBzZWxlY3RvciA9PT0gImJvZHki
ICYmICFjb250ZXh0ICYmIGRvY3VtZW50LmJvZHkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuY29udGV4dCA9IGRvY3VtZW50OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzWzBd
ID0gZG9jdW1lbnQuYm9keTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9
IHNlbGVjdG9yOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QXJlIHdlIGRlYWxpbmcgd2l0aCBIVE1MIHN0cmluZyBvciBhbiBJRD8KICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBzZWxlY3Rvci5jaGFyQXQoMCkgPT09ICI8IiAmJiBzZWxlY3Rvci5jaGFy
QXQoIHNlbGVjdG9yLmxlbmd0aCAtIDEgKSA9PT0gIj4iICYmIHNlbGVjdG9yLmxlbmd0aCA+PSAz
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHN0cmlu
Z3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4
IGNoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBbIG51bGwsIHNl
bGVjdG9yLCBudWxsIF07CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9y
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFZlcmlmeSBhIG1hdGNoLCBhbmQgdGhhdCBubyBjb250ZXh0IHdhcyBzcGVjaWZpZWQgZm9yICNp
ZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICYmIChtYXRjaFsxXSB8fCAhY29u
dGV4dCkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJCho
dG1sKSAtPiAkKGFycmF5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0
Y2hbMV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbMF0gOiBjb250ZXh0OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gKGNvbnRleHQgPyBjb250
ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50KTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHNpbmdsZSBzdHJpbmcgaXMgcGFzc2Vk
IGluIGFuZCBpdCdzIGEgc2luZ2xlIHRhZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8ganVzdCBkbyBhIGNyZWF0ZUVsZW1lbnQgYW5kIHNraXAgdGhlIHJlc3QKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJzaW5nbGVUYWcuZXhl
Yyggc2VsZWN0b3IgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHJldCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gWyBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCByZXRbMV0gKSBdOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5mbi5hdHRyLmNhbGwoIHNl
bGVjdG9yLCBjb250ZXh0LCB0cnVlICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gWyBkb2MuY3JlYXRlRWxlbWVudCgg
cmV0WzFdICkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGpRdWVy
eS5idWlsZEZyYWdtZW50KCBbIG1hdGNoWzFdIF0sIFsgZG9jIF0gKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSAocmV0LmNhY2hlYWJs
ZSA/IGpRdWVyeS5jbG9uZShyZXQuZnJhZ21lbnQpIDogcmV0LmZyYWdtZW50KS5jaGlsZE5vZGVz
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIHRoaXMsIHNl
bGVjdG9yICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJCgi
I2lkIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCBtYXRjaFsyXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5z
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFy
ZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNh
c2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVtcwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLmlkICE9
PSBtYXRjaFsyXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcm9vdGpRdWVyeS5maW5kKCBzZWxlY3RvciApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGluamVj
dCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1swXSA9IGVs
ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2Vs
ZWN0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKQogICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKGNvbnRleHQgfHwgcm9vdGpRdWVyeSkuZmluZCggc2Vs
ZWN0b3IgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHByLCBjb250
ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50
IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcikKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rv
ciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZnVuY3Rpb24pCiAgICAgICAgICAgICAgICAv
LyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcm9vdGpRdWVyeS5yZWFkeSggc2VsZWN0b3IgKTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCkgewog
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHNlbGVjdG9yLmNvbnRleHQ7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5tYWtlQXJy
YXkoIHNlbGVjdG9yLCB0aGlzICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gU3RhcnQgd2l0aCBh
biBlbXB0eSBzZWxlY3RvcgogICAgICAgIHNlbGVjdG9yOiAiIiwKCiAgICAgICAgLy8gVGhlIGN1
cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAogICAgICAgIGpxdWVyeTogIjEuNi40
IiwKCiAgICAgICAgLy8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAw
CiAgICAgICAgbGVuZ3RoOiAwLAoKICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNv
bnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldAogICAgICAgIHNpemU6IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoOwogICAgICAgIH0sCgogICAg
ICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHNsaWNlLmNh
bGwoIHRoaXMsIDAgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBHZXQgdGhlIE50aCBlbGVtZW50
IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCiAgICAgICAgLy8gR2V0IHRoZSB3aG9sZSBt
YXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkKICAgICAgICBnZXQ6IGZ1bmN0aW9u
KCBudW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVtID09IG51bGwgPwoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJheQogICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRvQXJyYXkoKSA6CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1
cm4ganVzdCB0aGUgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICggbnVtIDwgMCA/IHRo
aXNbIHRoaXMubGVuZ3RoICsgbnVtIF0gOiB0aGlzWyBudW0gXSApOwogICAgICAgIH0sCgogICAg
ICAgIC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3Rh
Y2sKICAgICAgICAvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldCkKICAg
ICAgICBwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcywgbmFtZSwgc2VsZWN0b3IgKSB7CiAgICAg
ICAgICAgICAgICAvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAogICAg
ICAgICAgICAgICAgdmFyIHJldCA9IHRoaXMuY29uc3RydWN0b3IoKTsKCiAgICAgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc0FycmF5KCBlbGVtcyApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoLmFwcGx5KCByZXQsIGVsZW1zICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW1zICk7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhl
IHN0YWNrIChhcyBhIHJlZmVyZW5jZSkKICAgICAgICAgICAgICAgIHJldC5wcmV2T2JqZWN0ID0g
dGhpczsKCiAgICAgICAgICAgICAgICByZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKCiAgICAg
ICAgICAgICAgICBpZiAoIG5hbWUgPT09ICJmaW5kIiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICh0aGlzLnNlbGVjdG9yID8gIiAiIDog
IiIpICsgc2VsZWN0b3I7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBuYW1lICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsgIi4iICsg
bmFtZSArICIoIiArIHNlbGVjdG9yICsgIikiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0CiAgICAgICAgICAg
ICAgICByZXR1cm4gcmV0OwogICAgICAgIH0sCgogICAgICAgIC8vIEV4ZWN1dGUgYSBjYWxsYmFj
ayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuCiAgICAgICAgLy8gKFlvdSBj
YW4gc2VlZCB0aGUgYXJndW1lbnRzIHdpdGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXMK
ICAgICAgICAvLyBvbmx5IHVzZWQgaW50ZXJuYWxseS4pCiAgICAgICAgZWFjaDogZnVuY3Rpb24o
IGNhbGxiYWNrLCBhcmdzICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5lYWNoKCB0
aGlzLCBjYWxsYmFjaywgYXJncyApOwogICAgICAgIH0sCgogICAgICAgIHJlYWR5OiBmdW5jdGlv
biggZm4gKSB7CiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggdGhlIGxpc3RlbmVycwogICAgICAg
ICAgICAgICAgalF1ZXJ5LmJpbmRSZWFkeSgpOwoKICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUg
Y2FsbGJhY2sKICAgICAgICAgICAgICAgIHJlYWR5TGlzdC5kb25lKCBmbiApOwoKICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGVxOiBmdW5jdGlvbiggaSAp
IHsKICAgICAgICAgICAgICAgIHJldHVybiBpID09PSAtMSA/CiAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuc2xpY2UoIGkgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpY2Uo
IGksICtpICsgMSApOwogICAgICAgIH0sCgogICAgICAgIGZpcnN0OiBmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmVxKCAwICk7CiAgICAgICAgfSwKCiAgICAgICAgbGFz
dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcSggLTEgKTsKICAg
ICAgICB9LAoKICAgICAgICBzbGljZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgInNsaWNlIiwgc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwi
KSApOwogICAgICAgIH0sCgogICAgICAgIG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0
aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2su
Y2FsbCggZWxlbSwgaSwgZWxlbSApOwogICAgICAgICAgICAgICAgfSkpOwogICAgICAgIH0sCgog
ICAgICAgIGVuZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2
T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8g
Rm9yIGludGVybmFsIHVzZSBvbmx5LgogICAgICAgIC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdz
IG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgogICAgICAgIHB1c2g6IHB1c2gsCiAg
ICAgICAgc29ydDogW10uc29ydCwKICAgICAgICBzcGxpY2U6IFtdLnNwbGljZQp9OwoKLy8gR2l2
ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFu
dGlhdGlvbgpqUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47CgpqUXVlcnkuZXh0
ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBvcHRpb25z
LCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSwKICAgICAgICAgICAgICAgIHRh
cmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwKICAgICAgICAgICAgICAgIGkgPSAxLAogICAgICAg
ICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKICAgICAgICAgICAgICAgIGRlZXAg
PSBmYWxzZTsKCiAgICAgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgogICAgICAg
IGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgewogICAgICAgICAgICAgICAgZGVl
cCA9IHRhcmdldDsKICAgICAgICAgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTsK
ICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKICAgICAg
ICAgICAgICAgIGkgPSAyOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0
YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCiAg
ICAgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rp
b24odGFyZ2V0KSApIHsKICAgICAgICAgICAgICAgIHRhcmdldCA9IHt9OwogICAgICAgIH0KCiAg
ICAgICAgLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFz
c2VkCiAgICAgICAgaWYgKCBsZW5ndGggPT09IGkgKSB7CiAgICAgICAgICAgICAgICB0YXJnZXQg
PSB0aGlzOwogICAgICAgICAgICAgICAgLS1pOwogICAgICAgIH0KCiAgICAgICAgZm9yICggOyBp
IDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAvLyBPbmx5IGRlYWwgd2l0aCBub24t
bnVsbC91bmRlZmluZWQgdmFsdWVzCiAgICAgICAgICAgICAgICBpZiAoIChvcHRpb25zID0gYXJn
dW1lbnRzWyBpIF0pICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dGVu
ZCB0aGUgYmFzZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBv
cHRpb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9IHRhcmdldFsg
bmFtZSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSBvcHRpb25zWyBu
YW1lIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgbmV2ZXIt
ZW5kaW5nIGxvb3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRhcmdldCA9
PT0gY29weSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMg
b3IgYXJyYXlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWVwICYmIGNv
cHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBqUXVl
cnkuaXNBcnJheShjb3B5KSkgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggY29weUlzQXJyYXkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc0Fy
cmF5KHNyYykgPyBzcmMgOiBbXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3Rz
LCBjbG9uZSB0aGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn
ZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1
ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb3B5ICE9PSB1
bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn
ZXRbIG5hbWUgXSA9IGNvcHk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAg
ICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdAogICAgICAgIHJldHVybiB0YXJnZXQ7Cn07
CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBub0NvbmZsaWN0OiBmdW5jdGlvbiggZGVlcCApIHsK
ICAgICAgICAgICAgICAgIGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgd2luZG93LiQgPSBfJDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICB3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5OwogICAgICAgIH0sCgogICAgICAgIC8vIElz
IHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuCiAg
ICAgICAgaXNSZWFkeTogZmFsc2UsCgogICAgICAgIC8vIEEgY291bnRlciB0byB0cmFjayBob3cg
bWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKICAgICAgICAvLyB0aGUgcmVhZHkgZXZlbnQg
ZmlyZXMuIFNlZSAjNjc4MQogICAgICAgIHJlYWR5V2FpdDogMSwKCiAgICAgICAgLy8gSG9sZCAo
b3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50CiAgICAgICAgaG9sZFJlYWR5OiBmdW5jdGlvbigg
aG9sZCApIHsKICAgICAgICAgICAgICAgIGlmICggaG9sZCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LnJlYWR5V2FpdCsrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCB0cnVlICk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfSwKCiAgICAgICAgLy8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQogICAg
ICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKICAgICAgICAgICAgICAgIC8vIEVpdGhlciBh
IHJlbGVhc2VkIGhvbGQgb3IgYW4gRE9NcmVhZHkvbG9hZCBldmVudCBhbmQgbm90IHlldCByZWFk
eQogICAgICAgICAgICAgICAgaWYgKCAod2FpdCA9PT0gdHJ1ZSAmJiAhLS1qUXVlcnkucmVhZHlX
YWl0KSB8fCAod2FpdCAhPT0gdHJ1ZSAmJiAhalF1ZXJ5LmlzUmVhZHkpICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYm9keSBleGlzdHMsIGF0IGxlYXN0LCBpbiBjYXNl
IElFIGdldHMgYSBsaXR0bGUgb3ZlcnplYWxvdXMgKHRpY2tldCAjNTQ0MykuCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWRvY3VtZW50LmJvZHkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSwgMSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0
aGF0IHRoZSBET00gaXMgcmVhZHkKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzUmVh
ZHkgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBub3JtYWwgRE9NIFJl
YWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmUKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+
IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUg
ZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5
TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cwogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGpRdWVyeS5mbi50cmlnZ2VyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2VyKCAicmVhZHkiICkudW5iaW5k
KCAicmVhZHkiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9LAoKICAgICAgICBiaW5kUmVhZHk6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgaWYgKCByZWFkeUxpc3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZWFkeUxpc3QgPSBqUXVlcnkuX0RlZmVy
cmVkKCk7CgogICAgICAgICAgICAgICAgLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCku
cmVhZHkoKSBpcyBjYWxsZWQgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAgICAvLyBicm93c2VyIGV2
ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgogICAgICAgICAgICAgICAgaWYgKCBkb2N1bWVudC5y
ZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBI
YW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkg
dG8gZGVsYXkgcmVhZHkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQo
IGpRdWVyeS5yZWFkeSwgMSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8v
IE1vemlsbGEsIE9wZXJhIGFuZCB3ZWJraXQgbmlnaHRsaWVzIGN1cnJlbnRseSBzdXBwb3J0IHRo
aXMgZXZlbnQKICAgICAgICAgICAgICAgIGlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFj
awogICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9N
Q29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdh
eXMgd29yawogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigg
ImxvYWQiLCBqUXVlcnkucmVhZHksIGZhbHNlICk7CgogICAgICAgICAgICAgICAgLy8gSWYgSUUg
ZXZlbnQgbW9kZWwgaXMgdXNlZAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZG9jdW1lbnQu
YXR0YWNoRXZlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBmaXJpbmcg
YmVmb3JlIG9ubG9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF5YmUgbGF0ZSBidXQg
c2FmZSBhbHNvIGZvciBpZnJhbWVzCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmF0
dGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0
IHdpbGwgYWx3YXlzIHdvcmsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2
ZW50KCAib25sb2FkIiwgalF1ZXJ5LnJlYWR5ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiBJRSBhbmQgbm90IGEgZnJhbWUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGlu
dWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBpcyByZWFkeQogICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgdG9wbGV2ZWwgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSB3aW5kb3cu
ZnJhbWVFbGVtZW50ID09IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkg
e30KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
LmRvU2Nyb2xsICYmIHRvcGxldmVsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvU2Nyb2xsQ2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIFNlZSB0ZXN0L3VuaXQvY29yZS5qcyBmb3IgZGV0
YWlscyBjb25jZXJuaW5nIGlzRnVuY3Rpb24uCiAgICAgICAgLy8gU2luY2UgdmVyc2lvbiAxLjMs
IERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAogICAgICAgIC8vIGFyZW4ndCBz
dXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCiAgICAgICAgaXNGdW5j
dGlvbjogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkudHlw
ZShvYmopID09PSAiZnVuY3Rpb24iOwogICAgICAgIH0sCgogICAgICAgIGlzQXJyYXk6IEFycmF5
LmlzQXJyYXkgfHwgZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkudHlwZShvYmopID09PSAiYXJyYXkiOwogICAgICAgIH0sCgogICAgICAgIC8vIEEgY3J1ZGUg
d2F5IG9mIGRldGVybWluaW5nIGlmIGFuIG9iamVjdCBpcyBhIHdpbmRvdwogICAgICAgIGlzV2lu
ZG93OiBmdW5jdGlvbiggb2JqICkgewogICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBl
b2Ygb2JqID09PSAib2JqZWN0IiAmJiAic2V0SW50ZXJ2YWwiIGluIG9iajsKICAgICAgICB9LAoK
ICAgICAgICBpc05hTjogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAgICAgIHJldHVybiBv
YmogPT0gbnVsbCB8fCAhcmRpZ2l0LnRlc3QoIG9iaiApIHx8IGlzTmFOKCBvYmogKTsKICAgICAg
ICB9LAoKICAgICAgICB0eXBlOiBmdW5jdGlvbiggb2JqICkgewogICAgICAgICAgICAgICAgcmV0
dXJuIG9iaiA9PSBudWxsID8KICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKCBvYmogKSA6
CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwob2JqKSBd
IHx8ICJvYmplY3QiOwogICAgICAgIH0sCgogICAgICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9u
KCBvYmogKSB7CiAgICAgICAgICAgICAgICAvLyBNdXN0IGJlIGFuIE9iamVjdC4KICAgICAgICAg
ICAgICAgIC8vIEJlY2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgcHJlc2Vu
Y2Ugb2YgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LgogICAgICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgRE9NIG5vZGVzIGFuZCB3aW5kb3cgb2JqZWN0cyBkb24ndCBwYXNzIHRocm91Z2gs
IGFzIHdlbGwKICAgICAgICAgICAgICAgIGlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9
PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBvd24g
Y29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3QKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBvYmouY29uc3RydWN0b3IgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAhaGFzT3duLmNhbGwob2JqLCAiY29uc3RydWN0b3IiKSAmJgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICFoYXNPd24uY2FsbChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQ
cm90b3R5cGVPZiIpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaCAo
IGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFOCw5IFdpbGwgdGhyb3cgZXhjZXB0
aW9ucyBvbiBjZXJ0YWluIGhvc3Qgb2JqZWN0cyAjOTg5NwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gT3du
IHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsCiAgICAg
ICAgICAgICAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJl
IG93bi4KCiAgICAgICAgICAgICAgICB2YXIga2V5OwogICAgICAgICAgICAgICAgZm9yICgga2V5
IGluIG9iaiApIHt9CgogICAgICAgICAgICAgICAgcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkIHx8
IGhhc093bi5jYWxsKCBvYmosIGtleSApOwogICAgICAgIH0sCgogICAgICAgIGlzRW1wdHlPYmpl
Y3Q6IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBv
YmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0sCgogICAgICAgIGVy
cm9yOiBmdW5jdGlvbiggbXNnICkgewogICAgICAgICAgICAgICAgdGhyb3cgbXNnOwogICAgICAg
IH0sCgogICAgICAgIHBhcnNlSlNPTjogZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAgICAgICAgICAg
ICBpZiAoIHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiB8fCAhZGF0YSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyByZW1vdmVkIChJ
RSBjYW4ndCBoYW5kbGUgaXQpCiAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LnRyaW0oIGRh
dGEgKTsKCiAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBuYXRp
dmUgSlNPTiBwYXJzZXIgZmlyc3QKICAgICAgICAgICAgICAgIGlmICggd2luZG93LkpTT04gJiYg
d2luZG93LkpTT04ucGFyc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5k
b3cuSlNPTi5wYXJzZSggZGF0YSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgZGF0YSBpcyBhY3R1YWwgSlNPTgogICAgICAgICAg
ICAgICAgLy8gTG9naWMgYm9ycm93ZWQgZnJvbSBodHRwOi8vanNvbi5vcmcvanNvbjIuanMKICAg
ICAgICAgICAgICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0YS5yZXBsYWNlKCBydmFsaWRl
c2NhcGUsICJAIiApCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCBydmFsaWR0b2tl
bnMsICJdIiApCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCBydmFsaWRicmFjZXMs
ICIiKSkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBGdW5jdGlvbigg
InJldHVybiAiICsgZGF0YSApKSgpOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGpRdWVyeS5lcnJvciggIkludmFsaWQgSlNPTjogIiArIGRhdGEgKTsKICAgICAgICB9LAoKICAg
ICAgICAvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCiAgICAgICAgcGFyc2VYTUw6IGZ1bmN0
aW9uKCBkYXRhICkgewogICAgICAgICAgICAgICAgdmFyIHhtbCwgdG1wOwogICAgICAgICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuRE9NUGFyc2VyICkg
eyAvLyBTdGFuZGFyZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ldyBE
T01QYXJzZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgPSB0bXAucGFy
c2VGcm9tU3RyaW5nKCBkYXRhICwgInRleHQveG1sIiApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeyAvLyBJRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IG5l
dyBBY3RpdmVYT2JqZWN0KCAiTWljcm9zb2Z0LlhNTERPTSIgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4bWwuYXN5bmMgPSAiZmFsc2UiOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhtbC5sb2FkWE1MKCBkYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHht
bCA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggIXht
bCB8fCAheG1sLmRvY3VtZW50RWxlbWVudCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJw
YXJzZXJlcnJvciIgKS5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5l
cnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgcmV0dXJuIHhtbDsKICAgICAgICB9LAoKICAgICAgICBub29wOiBmdW5jdGlvbigp
IHt9LAoKICAgICAgICAvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dAog
ICAgICAgIC8vIFdvcmthcm91bmRzIGJhc2VkIG9uIGZpbmRpbmdzIGJ5IEppbSBEcmlzY29sbAog
ICAgICAgIC8vIGh0dHA6Ly93ZWJsb2dzLmphdmEubmV0L2Jsb2cvZHJpc2NvbGwvYXJjaGl2ZS8y
MDA5LzA5LzA4L2V2YWwtamF2YXNjcmlwdC1nbG9iYWwtY29udGV4dAogICAgICAgIGdsb2JhbEV2
YWw6IGZ1bmN0aW9uKCBkYXRhICkgewogICAgICAgICAgICAgICAgaWYgKCBkYXRhICYmIHJub3R3
aGl0ZS50ZXN0KCBkYXRhICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBl
eGVjU2NyaXB0IG9uIEludGVybmV0IEV4cGxvcmVyCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHVzZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gc28gdGhhdCBjb250ZXh0IGlzIHdpbmRvdwog
ICAgICAgICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4gRmlyZWZveAog
ICAgICAgICAgICAgICAgICAgICAgICAoIHdpbmRvdy5leGVjU2NyaXB0IHx8IGZ1bmN0aW9uKCBk
YXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1sgImV2YWwiIF0u
Y2FsbCggd2luZG93LCBkYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gKSggZGF0YSAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIENvbnZlcnQgZGFzaGVk
IHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKICAgICAgICAv
LyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpCiAg
ICAgICAgY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgewogICAgICAgICAgICAgICAgcmV0
dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsICJtcy0iICkucmVwbGFjZSggcmRhc2hBbHBo
YSwgZmNhbWVsQ2FzZSApOwogICAgICAgIH0sCgogICAgICAgIG5vZGVOYW1lOiBmdW5jdGlvbigg
ZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVs
ZW0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gbmFtZS50b1VwcGVyQ2FzZSgpOwogICAgICAg
IH0sCgogICAgICAgIC8vIGFyZ3MgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKICAgICAgICBl
YWNoOiBmdW5jdGlvbiggb2JqZWN0LCBjYWxsYmFjaywgYXJncyApIHsKICAgICAgICAgICAgICAg
IHZhciBuYW1lLCBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gb2JqZWN0
Lmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgaXNPYmogPSBsZW5ndGggPT09IHVuZGVm
aW5lZCB8fCBqUXVlcnkuaXNGdW5jdGlvbiggb2JqZWN0ICk7CgogICAgICAgICAgICAgICAgaWYg
KCBhcmdzICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzT2JqICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqZWN0ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5hcHBseSggb2Jq
ZWN0WyBuYW1lIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCA7IGkgPCBsZW5ndGg7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjYWxsYmFjay5hcHBseSggb2JqZWN0WyBpKysgXSwgYXJncyApID09PSBm
YWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24g
dXNlIG9mIGVhY2gKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggaXNPYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
bmFtZSBpbiBvYmplY3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9iamVjdFsgbmFtZSBdLCBuYW1lLCBvYmplY3RbIG5hbWUg
XSApID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxl
bmd0aDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNh
bGxiYWNrLmNhbGwoIG9iamVjdFsgaSBdLCBpLCBvYmplY3RbIGkrKyBdICkgPT09IGZhbHNlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgIH0sCgogICAgICAg
IC8vIFVzZSBuYXRpdmUgU3RyaW5nLnRyaW0gZnVuY3Rpb24gd2hlcmV2ZXIgcG9zc2libGUKICAg
ICAgICB0cmltOiB0cmltID8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dCA9PSBudWxsID8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIiA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJp
bS5jYWxsKCB0ZXh0ICk7CiAgICAgICAgICAgICAgICB9IDoKCiAgICAgICAgICAgICAgICAvLyBP
dGhlcndpc2UgdXNlIG91ciBvd24gdHJpbW1pbmcgZnVuY3Rpb25hbGl0eQogICAgICAgICAgICAg
ICAgZnVuY3Rpb24oIHRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0
ID09IG51bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnRvU3RyaW5nKCkucmVwbGFjZSggdHJpbUxlZnQs
ICIiICkucmVwbGFjZSggdHJpbVJpZ2h0LCAiIiApOwogICAgICAgICAgICAgICAgfSwKCiAgICAg
ICAgLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQogICAgICAgIG1ha2VBcnJh
eTogZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9
IHJlc3VsdHMgfHwgW107CgogICAgICAgICAgICAgICAgaWYgKCBhcnJheSAhPSBudWxsICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgd2luZG93LCBzdHJpbmdzIChhbmQgZnVuY3Rp
b25zKSBhbHNvIGhhdmUgJ2xlbmd0aCcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGV4
dHJhIHR5cGVvZiBmdW5jdGlvbiBjaGVjayBpcyB0byBwcmV2ZW50IGNyYXNoZXMKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW4gU2FmYXJpIDIgKFNlZTogIzMwMzkpCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0bHkgdG8gaGFuZGxlIEJsYWNrYmVycnkg
NC43IFJlZ0V4cCBpc3N1ZXMgIzY5MzAKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUg
PSBqUXVlcnkudHlwZSggYXJyYXkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJy
YXkubGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gImZ1bmN0
aW9uIiB8fCB0eXBlID09PSAicmVnZXhwIiB8fCBqUXVlcnkuaXNXaW5kb3coIGFycmF5ICkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5jYWxsKCByZXQsIGFycmF5ICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGFycmF5ICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAg
ICAgIH0sCgogICAgICAgIGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnJheSApIHsKICAgICAg
ICAgICAgICAgIGlmICggIWFycmF5ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
LTE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBpbmRleE9mICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhPZi5jYWxsKCBhcnJheSwgZWxlbSAp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbGVu
Z3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggYXJyYXlbIGkgXSA9PT0gZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9LAoKICAgICAgICBt
ZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9
IGZpcnN0Lmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDA7CgogICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2Ygc2Vjb25kLmxlbmd0aCA9PT0gIm51bWJlciIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBsID0gc2Vjb25kLmxlbmd0aDsgaiA8IGw7IGorKyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNvbmRb
IGogXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggc2Vjb25kW2pdICE9PSB1bmRlZmluZWQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RbIGkrKyBdID0gc2Vjb25k
WyBqKysgXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIGZpcnN0Lmxlbmd0aCA9IGk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGZp
cnN0OwogICAgICAgIH0sCgogICAgICAgIGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ss
IGludiApIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXSwgcmV0VmFsOwogICAgICAgICAg
ICAgICAgaW52ID0gISFpbnY7CgogICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgYXJy
YXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwogICAgICAgICAgICAgICAgLy8gdGhhdCBwYXNzIHRo
ZSB2YWxpZGF0b3IgZnVuY3Rpb24KICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbGVu
Z3RoID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpbnYgIT09IHJldFZhbCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXQucHVzaCggZWxlbXNbIGkgXSApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAg
ICB9LAoKICAgICAgICAvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKICAgICAgICBt
YXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHsKICAgICAgICAgICAgICAgIHZh
ciB2YWx1ZSwga2V5LCByZXQgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8ganF1ZXJ5IG9iamVjdHMgYXJlIHRyZWF0ZWQgYXMgYXJyYXlzCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlzQXJyYXkgPSBlbGVtcyBpbnN0YW5jZW9mIGpRdWVyeSB8fCBs
ZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiAoICgg
bGVuZ3RoID4gMCAmJiBlbGVtc1sgMCBdICYmIGVsZW1zWyBsZW5ndGggLTEgXSApIHx8IGxlbmd0
aCA9PT0gMCB8fCBqUXVlcnkuaXNBcnJheSggZWxlbXMgKSApIDsKCiAgICAgICAgICAgICAgICAv
LyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8g
dGhlaXIKICAgICAgICAgICAgICAgIGlmICggaXNBcnJheSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVj
dCwKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IGtleSBpbiBlbGVtcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IGNhbGxiYWNrKCBlbGVtc1sga2V5IF0sIGtleSwgYXJnICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwog
ICAgICAgICAgICAgICAgcmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKICAgICAg
ICB9LAoKICAgICAgICAvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHMKICAgICAg
ICBndWlkOiAxLAoKICAgICAgICAvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRp
b25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKICAgICAgICAvLyBhcmd1bWVudHMuCiAgICAg
ICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdG1wID0gZm5bIGNvbnRleHQgXTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9
IGZuOwogICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHRtcDsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlz
IGNhbGxhYmxlLCBpbiB0aGUgc3BlYwogICAgICAgICAgICAgICAgLy8gdGhpcyB0aHJvd3MgYSBU
eXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC4KICAgICAgICAgICAg
ICAgIGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IC8vIFNpbXVsYXRlZCBiaW5kCiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwo
IGFyZ3VtZW50cywgMiApLAogICAgICAgICAgICAgICAgICAgICAgICBwcm94eSA9IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSggY29u
dGV4dCwgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGd1aWQgb2YgdW5p
cXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJl
IHJlbW92ZWQKICAgICAgICAgICAgICAgIHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8
fCBwcm94eS5ndWlkIHx8IGpRdWVyeS5ndWlkKys7CgogICAgICAgICAgICAgICAgcmV0dXJuIHBy
b3h5OwogICAgICAgIH0sCgogICAgICAgIC8vIE11dGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQg
YW5kIHNldCB2YWx1ZXMgdG8gYSBjb2xsZWN0aW9uCiAgICAgICAgLy8gVGhlIHZhbHVlL3MgY2Fu
IG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCiAgICAgICAgYWNjZXNz
OiBmdW5jdGlvbiggZWxlbXMsIGtleSwgdmFsdWUsIGV4ZWMsIGZuLCBwYXNzICkgewogICAgICAg
ICAgICAgICAgdmFyIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKCiAgICAgICAgICAgICAgICAvLyBT
ZXR0aW5nIG1hbnkgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yga2V5ID09
PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGsgaW4ga2V5
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hY2Nlc3MoIGVsZW1z
LCBrLCBrZXlba10sIGV4ZWMsIGZuLCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtczsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIG9uZSBhdHRyaWJ1dGUKICAgICAgICAgICAgICAg
IGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T3B0aW9uYWxseSwgZnVuY3Rpb24gdmFsdWVzIGdldCBleGVjdXRlZCBpZiBleGVjIGlzIHRydWUK
ICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyA9ICFwYXNzICYmIGV4ZWMgJiYgalF1ZXJ5Lmlz
RnVuY3Rpb24odmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4o
IGVsZW1zW2ldLCBrZXksIGV4ZWMgPyB2YWx1ZS5jYWxsKCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1z
W2ldLCBrZXkgKSApIDogdmFsdWUsIHBhc3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1zOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIEdldHRpbmcgYW4gYXR0cmlidXRlCiAgICAgICAgICAgICAgICBy
ZXR1cm4gbGVuZ3RoID8gZm4oIGVsZW1zWzBdLCBrZXkgKSA6IHVuZGVmaW5lZDsKICAgICAgICB9
LAoKICAgICAgICBub3c6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIChuZXcg
RGF0ZSgpKS5nZXRUaW1lKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gVXNlIG9mIGpRdWVyeS5i
cm93c2VyIGlzIGZyb3duZWQgdXBvbi4KICAgICAgICAvLyBNb3JlIGRldGFpbHM6IGh0dHA6Ly9k
b2NzLmpxdWVyeS5jb20vVXRpbGl0aWVzL2pRdWVyeS5icm93c2VyCiAgICAgICAgdWFNYXRjaDog
ZnVuY3Rpb24oIHVhICkgewogICAgICAgICAgICAgICAgdWEgPSB1YS50b0xvd2VyQ2FzZSgpOwoK
ICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHJ3ZWJraXQuZXhlYyggdWEgKSB8fAogICAgICAg
ICAgICAgICAgICAgICAgICByb3BlcmEuZXhlYyggdWEgKSB8fAogICAgICAgICAgICAgICAgICAg
ICAgICBybXNpZS5leGVjKCB1YSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIHVhLmluZGV4
T2YoImNvbXBhdGlibGUiKSA8IDAgJiYgcm1vemlsbGEuZXhlYyggdWEgKSB8fAogICAgICAgICAg
ICAgICAgICAgICAgICBbXTsKCiAgICAgICAgICAgICAgICByZXR1cm4geyBicm93c2VyOiBtYXRj
aFsxXSB8fCAiIiwgdmVyc2lvbjogbWF0Y2hbMl0gfHwgIjAiIH07CiAgICAgICAgfSwKCiAgICAg
ICAgc3ViOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGpRdWVyeVN1Yigg
c2VsZWN0b3IsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
alF1ZXJ5U3ViLmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCBqUXVlcnlTdWIsIHRoaXMgKTsK
ICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5zdXBlcmNsYXNzID0gdGhpczsKICAgICAgICAgICAg
ICAgIGpRdWVyeVN1Yi5mbiA9IGpRdWVyeVN1Yi5wcm90b3R5cGUgPSB0aGlzKCk7CiAgICAgICAg
ICAgICAgICBqUXVlcnlTdWIuZm4uY29uc3RydWN0b3IgPSBqUXVlcnlTdWI7CiAgICAgICAgICAg
ICAgICBqUXVlcnlTdWIuc3ViID0gdGhpcy5zdWI7CiAgICAgICAgICAgICAgICBqUXVlcnlTdWIu
Zm4uaW5pdCA9IGZ1bmN0aW9uIGluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSAm
JiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQgPSBqUXVlcnlTdWIoIGNvbnRleHQgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5mbi5p
bml0LmNhbGwoIHRoaXMsIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5U3ViICk7CiAgICAg
ICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgalF1ZXJ5U3ViLmZuLmluaXQucHJvdG90eXBl
ID0galF1ZXJ5U3ViLmZuOwogICAgICAgICAgICAgICAgdmFyIHJvb3RqUXVlcnlTdWIgPSBqUXVl
cnlTdWIoZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeVN1YjsKICAgICAg
ICB9LAoKICAgICAgICBicm93c2VyOiB7fQp9KTsKCi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBl
IG1hcApqUXVlcnkuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERh
dGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSwgZnVuY3Rpb24oaSwgbmFtZSkgewogICAgICAg
IGNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBuYW1lICsgIl0iIF0gPSBuYW1lLnRvTG93ZXJDYXNl
KCk7Cn0pOwoKYnJvd3Nlck1hdGNoID0galF1ZXJ5LnVhTWF0Y2goIHVzZXJBZ2VudCApOwppZiAo
IGJyb3dzZXJNYXRjaC5icm93c2VyICkgewogICAgICAgIGpRdWVyeS5icm93c2VyWyBicm93c2Vy
TWF0Y2guYnJvd3NlciBdID0gdHJ1ZTsKICAgICAgICBqUXVlcnkuYnJvd3Nlci52ZXJzaW9uID0g
YnJvd3Nlck1hdGNoLnZlcnNpb247Cn0KCi8vIERlcHJlY2F0ZWQsIHVzZSBqUXVlcnkuYnJvd3Nl
ci53ZWJraXQgaW5zdGVhZAppZiAoIGpRdWVyeS5icm93c2VyLndlYmtpdCApIHsKICAgICAgICBq
UXVlcnkuYnJvd3Nlci5zYWZhcmkgPSB0cnVlOwp9CgovLyBJRSBkb2Vzbid0IG1hdGNoIG5vbi1i
cmVha2luZyBzcGFjZXMgd2l0aCBccwppZiAoIHJub3R3aGl0ZS50ZXN0KCAiXHhBMCIgKSApIHsK
ICAgICAgICB0cmltTGVmdCA9IC9eW1xzXHhBMF0rLzsKICAgICAgICB0cmltUmlnaHQgPSAvW1xz
XHhBMF0rJC87Cn0KCi8vIEFsbCBqUXVlcnkgb2JqZWN0cyBzaG91bGQgcG9pbnQgYmFjayB0byB0
aGVzZQpyb290alF1ZXJ5ID0galF1ZXJ5KGRvY3VtZW50KTsKCi8vIENsZWFudXAgZnVuY3Rpb25z
IGZvciB0aGUgZG9jdW1lbnQgcmVhZHkgbWV0aG9kCmlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lciApIHsKICAgICAgICBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIs
IERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CiAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHko
KTsKICAgICAgICB9OwoKfSBlbHNlIGlmICggZG9jdW1lbnQuYXR0YWNoRXZlbnQgKSB7CiAgICAg
ICAgRE9NQ29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2FzZSBJRSBnZXRzIGEgbGl0dGxlIG92
ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgogICAgICAgICAgICAgICAgaWYgKCBkb2N1bWVudC5y
ZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewogICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIERPTUNvbnRlbnRMb2FkZWQg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfTsKfQoKLy8gVGhlIERPTSByZWFkeSBjaGVjayBmb3IgSW50ZXJuZXQgRXhw
bG9yZXIKZnVuY3Rpb24gZG9TY3JvbGxDaGVjaygpIHsKICAgICAgICBpZiAoIGpRdWVyeS5pc1Jl
YWR5ICkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsK
ICAgICAgICAgICAgICAgIC8vIElmIElFIGlzIHVzZWQsIHVzZSB0aGUgdHJpY2sgYnkgRGllZ28g
UGVyaW5pCiAgICAgICAgICAgICAgICAvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVD
b250ZW50TG9hZGVkLwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRv
U2Nyb2xsKCJsZWZ0Iik7CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICAgICBzZXRU
aW1lb3V0KCBkb1Njcm9sbENoZWNrLCAxICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgfQoKICAgICAgICAvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBmdW5jdGlvbnMKICAgICAg
ICBqUXVlcnkucmVhZHkoKTsKfQoKcmV0dXJuIGpRdWVyeTsKCn0pKCk7CgoKdmFyIC8vIFByb21p
c2UgbWV0aG9kcwogICAgICAgIHByb21pc2VNZXRob2RzID0gImRvbmUgZmFpbCBpc1Jlc29sdmVk
IGlzUmVqZWN0ZWQgcHJvbWlzZSB0aGVuIGFsd2F5cyBwaXBlIi5zcGxpdCggIiAiICksCiAgICAg
ICAgLy8gU3RhdGljIHJlZmVyZW5jZSB0byBzbGljZQogICAgICAgIHNsaWNlRGVmZXJyZWQgPSBb
XS5zbGljZTsKCmpRdWVyeS5leHRlbmQoewogICAgICAgIC8vIENyZWF0ZSBhIHNpbXBsZSBkZWZl
cnJlZCAob25lIGNhbGxiYWNrcyBsaXN0KQogICAgICAgIF9EZWZlcnJlZDogZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICB2YXIgLy8gY2FsbGJhY2tzIGxpc3QKICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2tzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlZCBb
IGNvbnRleHQgLCBhcmdzIF0KICAgICAgICAgICAgICAgICAgICAgICAgZmlyZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGZpcmluZyB3aGVuIGFscmVhZHkgZG9pbmcgc28K
ICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAv
LyBmbGFnIHRvIGtub3cgaWYgdGhlIGRlZmVycmVkIGhhcyBiZWVuIGNhbmNlbGxlZAogICAgICAg
ICAgICAgICAgICAgICAgICBjYW5jZWxsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRo
ZSBkZWZlcnJlZCBpdHNlbGYKICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQgID0gewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb25lKCBmMSwgZjIsIC4uLikKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNhbmNlbGxlZCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1
bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9maXJlZDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJlZCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmlyZWQgPSBmaXJlZDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJl
ZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9
IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGFyZ3Nb
IGkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0galF1ZXJ5LnR5cGUoIGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJhcnJheSIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5kb25lLmFwcGx5KCBkZWZlcnJlZCwgZWxlbSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IHR5cGUgPT09ICJmdW5jdGlvbiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucHVzaCggZWxlbSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIF9maXJlZCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5yZXNvbHZlV2l0aCggX2ZpcmVkWyAwIF0sIF9maXJlZFsgMSBdICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgd2l0aCBnaXZlbiBj
b250ZXh0IGFuZCBhcmdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVdp
dGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhY2FuY2VsbGVkICYmICFmaXJlZCAmJiAhZmlyaW5nICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1
cmUgYXJncyBhcmUgYXZhaWxhYmxlICgjODQyMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MgfHwgW107CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZyA9IDE7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIGNhbGxiYWNrc1sg
MCBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkuYXBwbHkoIGNvbnRleHQsIGFyZ3MgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyZWQg
PSBbIGNvbnRleHQsIGFyZ3MgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJpbmcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHdpdGggdGhpcyBhcyBjb250ZXh0IGFuZCBnaXZl
biBhcmd1bWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
LnJlc29sdmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhcyB0aGlzIGRlZmVy
cmVkIGJlZW4gcmVzb2x2ZWQ/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNv
bHZlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gISEoIGZpcmluZyB8fCBmaXJlZCApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbmNlbAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxsZWQgPSAxOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzID0gW107CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAg
ICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgICAgIH0sCgogICAgICAgIC8vIEZ1bGwgZmxlZGdl
ZCBkZWZlcnJlZCAodHdvIGNhbGxiYWNrcyBsaXN0KQogICAgICAgIERlZmVycmVkOiBmdW5jdGlv
biggZnVuYyApIHsKICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJy
ZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgZmFpbERlZmVycmVkID0galF1ZXJ5Ll9EZWZl
cnJlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlOwogICAgICAgICAgICAgICAg
Ly8gQWRkIGVycm9yRGVmZXJyZWQgbWV0aG9kcywgdGhlbiBhbmQgcHJvbWlzZQogICAgICAgICAg
ICAgICAgalF1ZXJ5LmV4dGVuZCggZGVmZXJyZWQsIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dGhlbjogZnVuY3Rpb24oIGRvbmVDYWxsYmFja3MsIGZhaWxDYWxsYmFja3MgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQuZG9uZSggZG9uZUNhbGxiYWNrcyApLmZh
aWwoIGZhaWxDYWxsYmFja3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAg
ICAgYWx3YXlzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVmZXJyZWQuZG9uZS5hcHBseSggZGVmZXJyZWQsIGFyZ3VtZW50cyApLmZhaWwuYXBw
bHkoIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgICAgICAgICAgICBmYWlsOiBmYWlsRGVmZXJyZWQuZG9uZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgcmVqZWN0V2l0aDogZmFpbERlZmVycmVkLnJlc29sdmVXaXRoLAogICAgICAgICAg
ICAgICAgICAgICAgICByZWplY3Q6IGZhaWxEZWZlcnJlZC5yZXNvbHZlLAogICAgICAgICAgICAg
ICAgICAgICAgICBpc1JlamVjdGVkOiBmYWlsRGVmZXJyZWQuaXNSZXNvbHZlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgcGlwZTogZnVuY3Rpb24oIGZuRG9uZSwgZm5GYWlsICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24o
IG5ld0RlZmVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmVhY2goIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9uZTogWyBmbkRvbmUsICJyZXNvbHZlIiBdLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWlsOiBbIGZuRmFpbCwgInJlamVjdCIgXQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oIGhhbmRsZXIsIGRh
dGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBmbiA9IGRhdGFbIDAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhY3Rpb24gPSBkYXRhWyAxIF0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIGZuICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWRbIGhhbmRsZXIgXShmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bmVkID0gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXR1cm5lZCAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm5lZC5wcm9taXNlKCkudGhlbiggbmV3RGVmZXIucmVzb2x2ZSwgbmV3RGVmZXIucmVq
ZWN0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlclsgYWN0aW9uICsg
IldpdGgiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gbmV3RGVmZXIgOiB0aGlzLCBbIHJldHVybmVk
IF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgaGFuZGxlciBdKCBuZXdEZWZlclsgYWN0aW9uIF0g
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSkucHJvbWlzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVk
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21p
c2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAg
cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG9iaiA9PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBwcm9taXNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b21pc2UgPSBvYmogPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBwcm9taXNlTWV0aG9kcy5sZW5ndGg7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIGktLSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialsgcHJvbWlzZU1ldGhvZHNbaV0gXSA9
IGRlZmVycmVkWyBwcm9taXNlTWV0aG9kc1tpXSBdOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSBvbmx5IG9uZSBjYWxsYmFjayBsaXN0IHdpbGwgYmUgdXNlZAogICAgICAg
ICAgICAgICAgZGVmZXJyZWQuZG9uZSggZmFpbERlZmVycmVkLmNhbmNlbCApLmZhaWwoIGRlZmVy
cmVkLmNhbmNlbCApOwogICAgICAgICAgICAgICAgLy8gVW5leHBvc2UgY2FuY2VsCiAgICAgICAg
ICAgICAgICBkZWxldGUgZGVmZXJyZWQuY2FuY2VsOwogICAgICAgICAgICAgICAgLy8gQ2FsbCBn
aXZlbiBmdW5jIGlmIGFueQogICAgICAgICAgICAgICAgaWYgKCBmdW5jICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgICAgIH0sCgogICAg
ICAgIC8vIERlZmVycmVkIGhlbHBlcgogICAgICAgIHdoZW46IGZ1bmN0aW9uKCBmaXJzdFBhcmFt
ICkgewogICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBhcmdzLmxl
bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBsZW5ndGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkID0gbGVuZ3RoIDw9IDEgJiYgZmlyc3RQYXJhbSAmJiBqUXVl
cnkuaXNGdW5jdGlvbiggZmlyc3RQYXJhbS5wcm9taXNlICkgPwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpcnN0UGFyYW0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5EZWZlcnJlZCgpOwogICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUZ1bmMo
IGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sgaSBdID0gYXJndW1lbnRzLmxl
bmd0aCA+IDEgPyBzbGljZURlZmVycmVkLmNhbGwoIGFyZ3VtZW50cywgMCApIDogdmFsdWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWNvdW50ICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJhbmdlIGJ1ZyBpbiBGRjQ6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWx1ZXMgY2hhbmdl
ZCBvbnRvIHRoZSBhcmd1bWVudHMgb2JqZWN0IHNvbWV0aW1lcyBlbmQgdXAgYXMgdW5kZWZpbmVk
IHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0c2lk
ZSB0aGUgJC53aGVuIG1ldGhvZC4gQ2xvbmluZyB0aGUgb2JqZWN0IGludG8gYSBmcmVzaCBhcnJh
eSBzb2x2ZXMgdGhlIGlzc3VlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQsIHNsaWNlRGVmZXJyZWQuY2FsbCggYXJn
cywgMCApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCBsZW5n
dGggPiAxICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IoIDsgaSA8IGxlbmd0aDsgaSsr
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJnc1sgaSBdICYmIGpR
dWVyeS5pc0Z1bmN0aW9uKCBhcmdzWyBpIF0ucHJvbWlzZSApICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sgaSBdLnByb21pc2UoKS50aGVuKCByZXNvbHZl
RnVuYyhpKSwgZGVmZXJyZWQucmVqZWN0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tY291
bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNvdW50ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBkZWZlcnJlZCwgYXJn
cyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBkZWZlcnJlZCAhPT0gZmlyc3RQYXJhbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQucmVzb2x2ZVdpdGgoIGRlZmVycmVkLCBsZW5ndGggPyBbIGZpcnN0UGFyYW0gXSA6IFtd
ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJv
bWlzZSgpOwogICAgICAgIH0KfSk7CgoKCmpRdWVyeS5zdXBwb3J0ID0gKGZ1bmN0aW9uKCkgewoK
ICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSwKICAgICAg
ICAgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKICAg
ICAgICAgICAgICAgIGFsbCwKICAgICAgICAgICAgICAgIGEsCiAgICAgICAgICAgICAgICBzZWxl
Y3QsCiAgICAgICAgICAgICAgICBvcHQsCiAgICAgICAgICAgICAgICBpbnB1dCwKICAgICAgICAg
ICAgICAgIG1hcmdpbkRpdiwKICAgICAgICAgICAgICAgIHN1cHBvcnQsCiAgICAgICAgICAgICAg
ICBmcmFnbWVudCwKICAgICAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgICAgICB0ZXN0RWxl
bWVudFBhcmVudCwKICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50LAogICAgICAgICAgICAgICAg
dGVzdEVsZW1lbnRTdHlsZSwKICAgICAgICAgICAgICAgIHRkcywKICAgICAgICAgICAgICAgIGV2
ZW50cywKICAgICAgICAgICAgICAgIGV2ZW50TmFtZSwKICAgICAgICAgICAgICAgIGksCiAgICAg
ICAgICAgICAgICBpc1N1cHBvcnRlZDsKCiAgICAgICAgLy8gUHJlbGltaW5hcnkgdGVzdHMKICAg
ICAgICBkaXYuc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCAidCIpOwogICAgICAgIGRpdi5pbm5l
ckhUTUwgPSAiICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0ndG9w
OjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU1Oyc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gn
Lz4iOwoKCiAgICAgICAgYWxsID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKICAg
ICAgICBhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiYSIgKVsgMCBdOwoKICAgICAgICAv
LyBDYW4ndCBnZXQgYmFzaWMgdGVzdCBzdXBwb3J0CiAgICAgICAgaWYgKCAhYWxsIHx8ICFhbGwu
bGVuZ3RoIHx8ICFhICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHt9OwogICAgICAgIH0KCiAg
ICAgICAgLy8gRmlyc3QgYmF0Y2ggb2Ygc3VwcG9ydHMgdGVzdHMKICAgICAgICBzZWxlY3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2VsZWN0IiApOwogICAgICAgIG9wdCA9IHNlbGVjdC5h
cHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikgKTsKICAgICAgICBp
bnB1dCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggImlucHV0IiApWyAwIF07CgogICAgICAg
IHN1cHBvcnQgPSB7CiAgICAgICAgICAgICAgICAvLyBJRSBzdHJpcHMgbGVhZGluZyB3aGl0ZXNw
YWNlIHdoZW4gLmlubmVySFRNTCBpcyB1c2VkCiAgICAgICAgICAgICAgICBsZWFkaW5nV2hpdGVz
cGFjZTogKCBkaXYuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMyApLAoKICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRib2R5IGVsZW1lbnRzIGFyZW4ndCBhdXRvbWF0aWNhbGx5IGlu
c2VydGVkCiAgICAgICAgICAgICAgICAvLyBJRSB3aWxsIGluc2VydCB0aGVtIGludG8gZW1wdHkg
dGFibGVzCiAgICAgICAgICAgICAgICB0Ym9keTogIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgg
InRib2R5IiApLmxlbmd0aCwKCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsaW5r
IGVsZW1lbnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKICAgICAgICAg
ICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVyIGVsZW1lbnQgaW4gSUUKICAgICAgICAg
ICAgICAgIGh0bWxTZXJpYWxpemU6ICEhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAibGluayIg
KS5sZW5ndGgsCgogICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzdHlsZSBpbmZvcm1hdGlvbiBm
cm9tIGdldEF0dHJpYnV0ZQogICAgICAgICAgICAgICAgLy8gKElFIHVzZXMgLmNzc1RleHQgaW5z
dGVhZCkKICAgICAgICAgICAgICAgIHN0eWxlOiAvdG9wLy50ZXN0KCBhLmdldEF0dHJpYnV0ZSgi
c3R5bGUiKSApLAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFVSTHMgYXJlbid0
IG1hbmlwdWxhdGVkCiAgICAgICAgICAgICAgICAvLyAoSUUgbm9ybWFsaXplcyBpdCBieSBkZWZh
dWx0KQogICAgICAgICAgICAgICAgaHJlZk5vcm1hbGl6ZWQ6ICggYS5nZXRBdHRyaWJ1dGUoICJo
cmVmIiApID09PSAiL2EiICksCgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgZWxl
bWVudCBvcGFjaXR5IGV4aXN0cwogICAgICAgICAgICAgICAgLy8gKElFIHVzZXMgZmlsdGVyIGlu
c3RlYWQpCiAgICAgICAgICAgICAgICAvLyBVc2UgYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdl
YktpdCBpc3N1ZS4gU2VlICM1MTQ1CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAvXjAuNTUkLy50
ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKCiAgICAgICAgICAgICAgICAvLyBWZXJpZnkgc3R5bGUg
ZmxvYXQgZXhpc3RlbmNlCiAgICAgICAgICAgICAgICAvLyAoSUUgdXNlcyBzdHlsZUZsb2F0IGlu
c3RlYWQgb2YgY3NzRmxvYXQpCiAgICAgICAgICAgICAgICBjc3NGbG9hdDogISFhLnN0eWxlLmNz
c0Zsb2F0LAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIG5vIHZhbHVlIGlz
IHNwZWNpZmllZCBmb3IgYSBjaGVja2JveAogICAgICAgICAgICAgICAgLy8gdGhhdCBpdCBkZWZh
dWx0cyB0byAib24iLgogICAgICAgICAgICAgICAgLy8gKFdlYktpdCBkZWZhdWx0cyB0byAiIiBp
bnN0ZWFkKQogICAgICAgICAgICAgICAgY2hlY2tPbjogKCBpbnB1dC52YWx1ZSA9PT0gIm9uIiAp
LAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEgc2VsZWN0ZWQtYnktZGVmYXVs
dCBvcHRpb24gaGFzIGEgd29ya2luZyBzZWxlY3RlZCBwcm9wZXJ0eS4KICAgICAgICAgICAgICAg
IC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBvZiB0cnVlLCBJRSB0b28sIGlm
IGl0J3MgaW4gYW4gb3B0Z3JvdXApCiAgICAgICAgICAgICAgICBvcHRTZWxlY3RlZDogb3B0LnNl
bGVjdGVkLAoKICAgICAgICAgICAgICAgIC8vIFRlc3Qgc2V0QXR0cmlidXRlIG9uIGNhbWVsQ2Fz
ZSBjbGFzcy4gSWYgaXQgd29ya3MsIHdlIG5lZWQgYXR0ckZpeGVzIHdoZW4gZG9pbmcgZ2V0L3Nl
dEF0dHJpYnV0ZSAoaWU2LzcpCiAgICAgICAgICAgICAgICBnZXRTZXRBdHRyaWJ1dGU6IGRpdi5j
bGFzc05hbWUgIT09ICJ0IiwKCiAgICAgICAgICAgICAgICAvLyBXaWxsIGJlIGRlZmluZWQgbGF0
ZXIKICAgICAgICAgICAgICAgIHN1Ym1pdEJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBj
aGFuZ2VCdWJibGVzOiB0cnVlLAogICAgICAgICAgICAgICAgZm9jdXNpbkJ1YmJsZXM6IGZhbHNl
LAogICAgICAgICAgICAgICAgZGVsZXRlRXhwYW5kbzogdHJ1ZSwKICAgICAgICAgICAgICAgIG5v
Q2xvbmVFdmVudDogdHJ1ZSwKICAgICAgICAgICAgICAgIGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6
IGZhbHNlLAogICAgICAgICAgICAgICAgc2hyaW5rV3JhcEJsb2NrczogZmFsc2UsCiAgICAgICAg
ICAgICAgICByZWxpYWJsZU1hcmdpblJpZ2h0OiB0cnVlCiAgICAgICAgfTsKCiAgICAgICAgLy8g
TWFrZSBzdXJlIGNoZWNrZWQgc3RhdHVzIGlzIHByb3Blcmx5IGNsb25lZAogICAgICAgIGlucHV0
LmNoZWNrZWQgPSB0cnVlOwogICAgICAgIHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSBpbnB1dC5j
bG9uZU5vZGUoIHRydWUgKS5jaGVja2VkOwoKICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
b3B0aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmVuJ3QgbWFya2VkIGFzIGRpc2FibGVk
CiAgICAgICAgLy8gKFdlYktpdCBtYXJrcyB0aGVtIGFzIGRpc2FibGVkKQogICAgICAgIHNlbGVj
dC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgc3VwcG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlz
YWJsZWQ7CgogICAgICAgIC8vIFRlc3QgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZGVsZXRl
IGFuIGV4cGFuZG8gZnJvbSBhbiBlbGVtZW50CiAgICAgICAgLy8gRmFpbHMgaW4gSW50ZXJuZXQg
RXhwbG9yZXIKICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZGVsZXRlIGRpdi50ZXN0Owog
ICAgICAgIH0gY2F0Y2goIGUgKSB7CiAgICAgICAgICAgICAgICBzdXBwb3J0LmRlbGV0ZUV4cGFu
ZG8gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICggIWRpdi5hZGRFdmVudExpc3RlbmVy
ICYmIGRpdi5hdHRhY2hFdmVudCAmJiBkaXYuZmlyZUV2ZW50ICkgewogICAgICAgICAgICAgICAg
ZGl2LmF0dGFjaEV2ZW50KCAib25jbGljayIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDbG9uaW5nIGEgbm9kZSBzaG91bGRuJ3QgY29weSBvdmVyIGFueQogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBib3VuZCBldmVudCBoYW5kbGVycyAoSUUgZG9lcyB0aGlzKQog
ICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0Lm5vQ2xvbmVFdmVudCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBkaXYuY2xvbmVOb2RlKCB0cnVlICkuZmly
ZUV2ZW50KCAib25jbGljayIgKTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIGEgcmFk
aW8gbWFpbnRhaW5zIGl0J3MgdmFsdWUKICAgICAgICAvLyBhZnRlciBiZWluZyBhcHBlbmRlZCB0
byB0aGUgRE9NCiAgICAgICAgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIp
OwogICAgICAgIGlucHV0LnZhbHVlID0gInQiOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgi
dHlwZSIsICJyYWRpbyIpOwogICAgICAgIHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVl
ID09PSAidCI7CgogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsICJjaGVja2Vk
Iik7CiAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApOwogICAgICAgIGZyYWdtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgICAgIGZyYWdtZW50LmFwcGVu
ZENoaWxkKCBkaXYuZmlyc3RDaGlsZCApOwoKICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBjbG9u
ZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMKICAgICAgICBzdXBwb3J0LmNo
ZWNrQ2xvbmUgPSBmcmFnbWVudC5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5s
YXN0Q2hpbGQuY2hlY2tlZDsKCiAgICAgICAgZGl2LmlubmVySFRNTCA9ICIiOwoKICAgICAgICAv
LyBGaWd1cmUgb3V0IGlmIHRoZSBXM0MgYm94IG1vZGVsIHdvcmtzIGFzIGV4cGVjdGVkCiAgICAg
ICAgZGl2LnN0eWxlLndpZHRoID0gZGl2LnN0eWxlLnBhZGRpbmdMZWZ0ID0gIjFweCI7CgogICAg
ICAgIGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggImJvZHkiIClbIDAgXTsK
ICAgICAgICAvLyBXZSB1c2Ugb3VyIG93biwgaW52aXNpYmxlLCBib2R5IHVubGVzcyB0aGUgYm9k
eSBpcyBhbHJlYWR5IHByZXNlbnQKICAgICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIHVzZSBhIGRp
diAoIzkyMzkpCiAgICAgICAgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBi
b2R5ID8gImRpdiIgOiAiYm9keSIgKTsKICAgICAgICB0ZXN0RWxlbWVudFN0eWxlID0gewogICAg
ICAgICAgICAgICAgdmlzaWJpbGl0eTogImhpZGRlbiIsCiAgICAgICAgICAgICAgICB3aWR0aDog
MCwKICAgICAgICAgICAgICAgIGhlaWdodDogMCwKICAgICAgICAgICAgICAgIGJvcmRlcjogMCwK
ICAgICAgICAgICAgICAgIG1hcmdpbjogMCwKICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICJu
b25lIgogICAgICAgIH07CiAgICAgICAgaWYgKCBib2R5ICkgewogICAgICAgICAgICAgICAgalF1
ZXJ5LmV4dGVuZCggdGVzdEVsZW1lbnRTdHlsZSwgewogICAgICAgICAgICAgICAgICAgICAgICBw
b3NpdGlvbjogImFic29sdXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogIi0xMDAw
cHgiLAogICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICItMTAwMHB4IgogICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgfQogICAgICAgIGZvciAoIGkgaW4gdGVzdEVsZW1lbnRTdHlsZSApIHsK
ICAgICAgICAgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlWyBpIF0gPSB0ZXN0RWxlbWVudFN0eWxl
WyBpIF07CiAgICAgICAgfQogICAgICAgIHRlc3RFbGVtZW50LmFwcGVuZENoaWxkKCBkaXYgKTsK
ICAgICAgICB0ZXN0RWxlbWVudFBhcmVudCA9IGJvZHkgfHwgZG9jdW1lbnRFbGVtZW50OwogICAg
ICAgIHRlc3RFbGVtZW50UGFyZW50Lmluc2VydEJlZm9yZSggdGVzdEVsZW1lbnQsIHRlc3RFbGVt
ZW50UGFyZW50LmZpcnN0Q2hpbGQgKTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0
ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKICAgICAgICAvLyB2YWx1ZSBvZiB0
cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00gKElFNi83KQogICAgICAgIHN1cHBvcnQuYXBw
ZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7CgogICAgICAgIHN1cHBvcnQuYm94TW9kZWwgPSBk
aXYub2Zmc2V0V2lkdGggPT09IDI7CgogICAgICAgIGlmICggInpvb20iIGluIGRpdi5zdHlsZSAp
IHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG5hdGl2ZWx5IGJsb2NrLWxldmVsIGVsZW1l
bnRzIGFjdCBsaWtlIGlubGluZS1ibG9jawogICAgICAgICAgICAgICAgLy8gZWxlbWVudHMgd2hl
biBzZXR0aW5nIHRoZWlyIGRpc3BsYXkgdG8gJ2lubGluZScgYW5kIGdpdmluZwogICAgICAgICAg
ICAgICAgLy8gdGhlbSBsYXlvdXQKICAgICAgICAgICAgICAgIC8vIChJRSA8IDggZG9lcyB0aGlz
KQogICAgICAgICAgICAgICAgZGl2LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKICAgICAgICAg
ICAgICAgIGRpdi5zdHlsZS56b29tID0gMTsKICAgICAgICAgICAgICAgIHN1cHBvcnQuaW5saW5l
QmxvY2tOZWVkc0xheW91dCA9ICggZGl2Lm9mZnNldFdpZHRoID09PSAyICk7CgogICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdyYXAgdGhlaXIg
Y2hpbGRyZW4KICAgICAgICAgICAgICAgIC8vIChJRSA2IGRvZXMgdGhpcykKICAgICAgICAgICAg
ICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1M
ID0gIjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiI7CiAgICAgICAgICAgICAgICBzdXBw
b3J0LnNocmlua1dyYXBCbG9ja3MgPSAoIGRpdi5vZmZzZXRXaWR0aCAhPT0gMiApOwogICAgICAg
IH0KCiAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGlu
ZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7
CiAgICAgICAgdGRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGQiICk7CgogICAgICAg
IC8vIENoZWNrIGlmIHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0IHdo
ZW4gdGhleSBhcmUgc2V0CiAgICAgICAgLy8gdG8gZGlzcGxheTpub25lIGFuZCB0aGVyZSBhcmUg
c3RpbGwgb3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCiAgICAgICAgLy8gdGFibGUgcm93
OyBpZiBzbywgb2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9yIHVzZSB3aGVu
CiAgICAgICAgLy8gZGV0ZXJtaW5pbmcgaWYgYW4gZWxlbWVudCBoYXMgYmVlbiBoaWRkZW4gZGly
ZWN0bHkgdXNpbmcKICAgICAgICAvLyBkaXNwbGF5Om5vbmUgKGl0IGlzIHN0aWxsIHNhZmUgdG8g
dXNlIG9mZnNldHMgaWYgYSBwYXJlbnQgZWxlbWVudCBpcwogICAgICAgIC8vIGhpZGRlbjsgZG9u
IHNhZmV0eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4K
ICAgICAgICAvLyAob25seSBJRSA4IGZhaWxzIHRoaXMgdGVzdCkKICAgICAgICBpc1N1cHBvcnRl
ZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7CgogICAgICAgIHRkc1sgMCBdLnN0
eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICB0ZHNbIDEgXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUi
OwoKICAgICAgICAvLyBDaGVjayBpZiBlbXB0eSB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNl
dFdpZHRoL0hlaWdodAogICAgICAgIC8vIChJRSA8IDggZmFpbCB0aGlzIHRlc3QpCiAgICAgICAg
c3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgPSBpc1N1cHBvcnRlZCAmJiAoIHRkc1sgMCBd
Lm9mZnNldEhlaWdodCA9PT0gMCApOwogICAgICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKCiAgICAg
ICAgLy8gQ2hlY2sgaWYgZGl2IHdpdGggZXhwbGljaXQgd2lkdGggYW5kIG5vIG1hcmdpbi1yaWdo
dCBpbmNvcnJlY3RseQogICAgICAgIC8vIGdldHMgY29tcHV0ZWQgbWFyZ2luLXJpZ2h0IGJhc2Vk
IG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gRm9yIG1vcmUKICAgICAgICAvLyBpbmZvIHNlZSBidWcg
IzMzMzMKICAgICAgICAvLyBGYWlscyBpbiBXZWJLaXQgYmVmb3JlIEZlYiAyMDExIG5pZ2h0bGll
cwogICAgICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMg
d3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAogICAgICAgIGlmICggZG9jdW1lbnQuZGVmYXVs
dFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKICAgICAg
ICAgICAgICAgIG1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CiAg
ICAgICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUud2lkdGggPSAiMCI7CiAgICAgICAgICAgICAg
ICBtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSAiMCI7CiAgICAgICAgICAgICAgICBkaXYu
YXBwZW5kQ2hpbGQoIG1hcmdpbkRpdiApOwogICAgICAgICAgICAgICAgc3VwcG9ydC5yZWxpYWJs
ZU1hcmdpblJpZ2h0ID0KICAgICAgICAgICAgICAgICAgICAgICAgKCBwYXJzZUludCggKCBkb2N1
bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBtYXJnaW5EaXYsIG51bGwgKSB8fCB7
IG1hcmdpblJpZ2h0OiAwIH0gKS5tYXJnaW5SaWdodCwgMTAgKSB8fCAwICkgPT09IDA7CiAgICAg
ICAgfQoKICAgICAgICAvLyBSZW1vdmUgdGhlIGJvZHkgZWxlbWVudCB3ZSBhZGRlZAogICAgICAg
IHRlc3RFbGVtZW50LmlubmVySFRNTCA9ICIiOwogICAgICAgIHRlc3RFbGVtZW50UGFyZW50LnJl
bW92ZUNoaWxkKCB0ZXN0RWxlbWVudCApOwoKICAgICAgICAvLyBUZWNobmlxdWUgZnJvbSBKdXJp
eSBaYXl0c2V2CiAgICAgICAgLy8gaHR0cDovL3RoaW5rd2ViMi5jb20vcHJvamVjdHMvcHJvdG90
eXBlL2RldGVjdGluZy1ldmVudC1zdXBwb3J0LXdpdGhvdXQtYnJvd3Nlci1zbmlmZmluZy8KICAg
ICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgbm9uLXN0YW5kYXJkIGV2
ZW50IHN5c3RlbXMKICAgICAgICAvLyBhcmUgdXNlZCwgbmFtZWx5IGluIElFLiBTaG9ydC1jaXJj
dWl0aW5nIGhlcmUgaGVscHMgdXMgdG8KICAgICAgICAvLyBhdm9pZCBhbiBldmFsIGNhbGwgKGlu
IHNldEF0dHJpYnV0ZSkgd2hpY2ggY2FuIGNhdXNlIENTUAogICAgICAgIC8vIHRvIGdvIGhheXdp
cmUuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vU2VjdXJpdHkvQ1NQCiAg
ICAgICAgaWYgKCBkaXYuYXR0YWNoRXZlbnQgKSB7CiAgICAgICAgICAgICAgICBmb3IoIGkgaW4g
ewogICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXQ6IDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZTogMSwKICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNpbjogMQogICAgICAg
ICAgICAgICAgfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lID0gIm9uIiAr
IGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gKCBldmVudE5hbWUgaW4g
ZGl2ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzU3VwcG9ydGVkICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoIGV2ZW50TmFtZSwg
InJldHVybjsiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQg
PSAoIHR5cGVvZiBkaXZbIGV2ZW50TmFtZSBdID09PSAiZnVuY3Rpb24iICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydFsgaSArICJCdWJi
bGVzIiBdID0gaXNTdXBwb3J0ZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAg
ICAvLyBOdWxsIGNvbm5lY3RlZCBlbGVtZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRQogICAgICAg
IHRlc3RFbGVtZW50ID0gZnJhZ21lbnQgPSBzZWxlY3QgPSBvcHQgPSBib2R5ID0gbWFyZ2luRGl2
ID0gZGl2ID0gaW5wdXQgPSBudWxsOwoKICAgICAgICByZXR1cm4gc3VwcG9ydDsKfSkoKTsKCi8v
IEtlZXAgdHJhY2sgb2YgYm94TW9kZWwKalF1ZXJ5LmJveE1vZGVsID0galF1ZXJ5LnN1cHBvcnQu
Ym94TW9kZWw7CgoKCgp2YXIgcmJyYWNlID0gL14oPzpcey4qXH18XFsuKlxdKSQvLAogICAgICAg
IHJtdWx0aURhc2ggPSAvKFtBLVpdKS9nOwoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgY2FjaGU6
IHt9LAoKICAgICAgICAvLyBQbGVhc2UgdXNlIHdpdGggY2F1dGlvbgogICAgICAgIHV1aWQ6IDAs
CgogICAgICAgIC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQog
ICAgICAgIC8vIE5vbi1kaWdpdHMgcmVtb3ZlZCB0byBtYXRjaCByaW5saW5lalF1ZXJ5CiAgICAg
ICAgZXhwYW5kbzogImpRdWVyeSIgKyAoIGpRdWVyeS5mbi5qcXVlcnkgKyBNYXRoLnJhbmRvbSgp
ICkucmVwbGFjZSggL1xEL2csICIiICksCgogICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgZWxlbWVu
dHMgdGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKICAgICAgICAvLyBhdHRlbXB0
IHRvIGFkZCBleHBhbmRvIHByb3BlcnRpZXMgdG8gdGhlbS4KICAgICAgICBub0RhdGE6IHsKICAg
ICAgICAgICAgICAgICJlbWJlZCI6IHRydWUsCiAgICAgICAgICAgICAgICAvLyBCYW4gYWxsIG9i
amVjdHMgZXhjZXB0IGZvciBGbGFzaCAod2hpY2ggaGFuZGxlIGV4cGFuZG9zKQogICAgICAgICAg
ICAgICAgIm9iamVjdCI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAw
MDAiLAogICAgICAgICAgICAgICAgImFwcGxldCI6IHRydWUKICAgICAgICB9LAoKICAgICAgICBo
YXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLm5v
ZGVUeXBlID8galF1ZXJ5LmNhY2hlWyBlbGVtW2pRdWVyeS5leHBhbmRvXSBdIDogZWxlbVsgalF1
ZXJ5LmV4cGFuZG8gXTsKCiAgICAgICAgICAgICAgICByZXR1cm4gISFlbGVtICYmICFpc0VtcHR5
RGF0YU9iamVjdCggZWxlbSApOwogICAgICAgIH0sCgogICAgICAgIGRhdGE6IGZ1bmN0aW9uKCBl
bGVtLCBuYW1lLCBkYXRhLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CiAgICAgICAg
ICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFy
IHRoaXNDYWNoZSwgcmV0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEtleSA9IGpR
dWVyeS5leHBhbmRvLAogICAgICAgICAgICAgICAgICAgICAgICBnZXRCeU5hbWUgPSB0eXBlb2Yg
bmFtZSA9PT0gInN0cmluZyIsCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRv
IGhhbmRsZSBET00gbm9kZXMgYW5kIEpTIG9iamVjdHMgZGlmZmVyZW50bHkgYmVjYXVzZSBJRTYt
NwogICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4ndCBHQyBvYmplY3QgcmVmZXJlbmNlcyBw
cm9wZXJseSBhY3Jvc3MgdGhlIERPTS1KUyBib3VuZGFyeQogICAgICAgICAgICAgICAgICAgICAg
ICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25s
eSBET00gbm9kZXMgbmVlZCB0aGUgZ2xvYmFsIGpRdWVyeSBjYWNoZTsgSlMgb2JqZWN0IGRhdGEg
aXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIG9i
amVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0b21hdGljYWxseQogICAgICAgICAgICAgICAgICAgICAg
ICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBPbmx5IGRlZmluaW5nIGFuIElEIGZvciBKUyBvYmplY3RzIGlmIGl0cyBjYWNo
ZSBhbHJlYWR5IGV4aXN0cyBhbGxvd3MKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNv
ZGUgdG8gc2hvcnRjdXQgb24gdGhlIHNhbWUgcGF0aCBhcyBhIERPTSBub2RlIHdpdGggbm8gY2Fj
aGUKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnkuZXhw
YW5kbyBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSAmJiBqUXVlcnkuZXhwYW5kbzsKCiAgICAg
ICAgICAgICAgICAvLyBBdm9pZCBkb2luZyBhbnkgbW9yZSB3b3JrIHRoYW4gd2UgbmVlZCB0byB3
aGVuIHRyeWluZyB0byBnZXQgZGF0YSBvbiBhbgogICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRo
YXQgaGFzIG5vIGRhdGEgYXQgYWxsCiAgICAgICAgICAgICAgICBpZiAoICghaWQgfHwgKHB2dCAm
JiBpZCAmJiAoY2FjaGVbIGlkIF0gJiYgIWNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdKSkpICYm
IGdldEJ5TmFtZSAmJiBkYXRhID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFpZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBET00gbm9kZXMgbmVlZCBhIG5ldyB1
bmlxdWUgSUQgZm9yIGVhY2ggZWxlbWVudCBzaW5jZSB0aGVpciBkYXRhCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGVuZHMgdXAgaW4gdGhlIGdsb2JhbCBjYWNoZQogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGlzTm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtWyBqUXVlcnkuZXhwYW5kbyBdID0gaWQgPSArK2pRdWVyeS51dWlkOwogICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0g
alF1ZXJ5LmV4cGFuZG87CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRP
RE86IFRoaXMgaXMgYSBoYWNrIGZvciAxLjUgT05MWS4gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeQog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXRhZGF0YSBvbiBwbGFpbiBKUyBvYmplY3RzIHdo
ZW4gdGhlIG9iamVjdCBpcyBzZXJpYWxpemVkIHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEpTT04uc3RyaW5naWZ5CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzTm9kZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXS50b0pTT04gPSBq
UXVlcnkubm9vcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIEFuIG9iamVjdCBjYW4gYmUgcGFzc2VkIHRvIGpRdWVyeS5kYXRh
IGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFpcjsgdGhpcyBnZXRzCiAgICAgICAgICAgICAgICAv
LyBzaGFsbG93IGNvcGllZCBvdmVyIG9udG8gdGhlIGV4aXN0aW5nIGNhY2hlCiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiBuYW1lID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbmFtZSA9PT0gImZ1
bmN0aW9uIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwdnQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0gPSBqUXVl
cnkuZXh0ZW5kKGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdLCBuYW1lKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNo
ZVsgaWQgXSA9IGpRdWVyeS5leHRlbmQoY2FjaGVbIGlkIF0sIG5hbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpc0NhY2hl
ID0gY2FjaGVbIGlkIF07CgogICAgICAgICAgICAgICAgLy8gSW50ZXJuYWwgalF1ZXJ5IGRhdGEg
aXMgc3RvcmVkIGluIGEgc2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3MgZGF0YQog
ICAgICAgICAgICAgICAgLy8gY2FjaGUgaW4gb3JkZXIgdG8gYXZvaWQga2V5IGNvbGxpc2lvbnMg
YmV0d2VlbiBpbnRlcm5hbCBkYXRhIGFuZCB1c2VyLWRlZmluZWQKICAgICAgICAgICAgICAgIC8v
IGRhdGEKICAgICAgICAgICAgICAgIGlmICggcHZ0ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICF0aGlzQ2FjaGVbIGludGVybmFsS2V5IF0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdID0ge307CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNDYWNoZSA9IHRoaXNDYWNo
ZVsgaW50ZXJuYWxLZXkgXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAo
IGRhdGEgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hl
WyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEuNSBPTkxZLiBJdCB3
aWxsIGJlIHJlbW92ZWQgaW4gMS42LiBVc2VycyBzaG91bGQKICAgICAgICAgICAgICAgIC8vIG5v
dCBhdHRlbXB0IHRvIGluc3BlY3QgdGhlIGludGVybmFsIGV2ZW50cyBvYmplY3QgdXNpbmcgalF1
ZXJ5LmRhdGEsIGFzIHRoaXMKICAgICAgICAgICAgICAgIC8vIGludGVybmFsIGRhdGEgb2JqZWN0
IGlzIHVuZG9jdW1lbnRlZCBhbmQgc3ViamVjdCB0byBjaGFuZ2UuCiAgICAgICAgICAgICAgICBp
ZiAoIG5hbWUgPT09ICJldmVudHMiICYmICF0aGlzQ2FjaGVbbmFtZV0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzQ2FjaGVbIGludGVybmFsS2V5IF0gJiYgdGhpc0NhY2hl
WyBpbnRlcm5hbEtleSBdLmV2ZW50czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAvLyBDaGVjayBmb3IgYm90aCBjb252ZXJ0ZWQtdG8tY2FtZWwgYW5kIG5vbi1jb252ZXJ0ZWQg
ZGF0YSBwcm9wZXJ0eSBuYW1lcwogICAgICAgICAgICAgICAgLy8gSWYgYSBkYXRhIHByb3BlcnR5
IHdhcyBzcGVjaWZpZWQKICAgICAgICAgICAgICAgIGlmICggZ2V0QnlOYW1lICkgewoKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgVHJ5IHRvIGZpbmQgYXMtaXMgcHJvcGVydHkgZGF0
YQogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIG5hbWUgXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgZm9yIG51bGx8dW5kZWZpbmVkIHByb3BlcnR5IGRh
dGEKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgPT0gbnVsbCApIHsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGNhbWVsQ2FzZWQgcHJv
cGVydHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIGpR
dWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2Fj
aGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAg
ICB9LAoKICAgICAgICByZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIElu
dGVybmFsIFVzZSBPbmx5ICovICkgewogICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmFjY2Vw
dERhdGEoIGVsZW0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0aGlzQ2FjaGUsCgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZWZlcmVuY2UgdG8gaW50ZXJuYWwgZGF0YSBjYWNoZSBrZXkKICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICAg
ICAgICAgICAgICAgICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAoKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0
aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5LmV4
cGFuZG8gXSA6IGpRdWVyeS5leHBhbmRvOwoKICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlz
IGFscmVhZHkgbm8gY2FjaGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0LCB0aGVyZSBpcyBubwogICAg
ICAgICAgICAgICAgLy8gcHVycG9zZSBpbiBjb250aW51aW5nCiAgICAgICAgICAgICAgICBpZiAo
ICFjYWNoZVsgaWQgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggbmFtZSApIHsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXNDYWNoZSA9IHB2dCA/IGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdIDog
Y2FjaGVbIGlkIF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNDYWNoZSApIHsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBpbnRlcm9wZXJhYmxl
IHJlbW92YWwgb2YgaHlwaGVuYXRlZCBvciBjYW1lbGNhc2VkIGtleXMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICF0aGlzQ2FjaGVbIG5hbWUgXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1l
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgdGhpc0NhY2hlWyBuYW1lIF07CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUs
IHdlIHdhbnQgdG8gY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
bmQgbGV0IHRoZSBjYWNoZSBvYmplY3QgaXRzZWxmIGdldCBkZXN0cm95ZWQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdCh0aGlzQ2FjaGUpICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9y
ZSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgaWYgKCBwdnQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhl
IGludGVybmFsIGRhdGEgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhZCBiZWVu
IHRoZSBvbmx5IHRoaW5nIGxlZnQgaW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
aXNFbXB0eURhdGFPYmplY3QoY2FjaGVbIGlkIF0pICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbENhY2hlID0gY2FjaGVbIGlkIF1bIGlu
dGVybmFsS2V5IF07CgogICAgICAgICAgICAgICAgLy8gQnJvd3NlcnMgdGhhdCBmYWlsIGV4cGFu
ZG8gZGVsZXRpb24gYWxzbyByZWZ1c2UgdG8gZGVsZXRlIGV4cGFuZG9zIG9uCiAgICAgICAgICAg
ICAgICAvLyB0aGUgd2luZG93LCBidXQgaXQgd2lsbCBhbGxvdyBpdCBvbiBhbGwgb3RoZXIgSlMg
b2JqZWN0czsgb3RoZXIgYnJvd3NlcnMKICAgICAgICAgICAgICAgIC8vIGRvbid0IGNhcmUKICAg
ICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGBjYWNoZWAgaXMgbm90IGEgd2luZG93IG9iamVj
dCAjMTAwODAKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5k
byB8fCAhY2FjaGUuc2V0SW50ZXJ2YWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBjYWNoZVsgaWQgXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGNhY2hlWyBpZCBdID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBXZSBkZXN0cm95ZWQgdGhlIGVudGlyZSB1c2VyIGNhY2hlIGF0IG9uY2UgYmVjYXVz
ZSBpdCdzIGZhc3RlciB0aGFuCiAgICAgICAgICAgICAgICAvLyBpdGVyYXRpbmcgdGhyb3VnaCBl
YWNoIGtleSwgYnV0IHdlIG5lZWQgdG8gY29udGludWUgdG8gcGVyc2lzdCBpbnRlcm5hbAogICAg
ICAgICAgICAgICAgLy8gZGF0YSBpZiBpdCBleGlzdGVkCiAgICAgICAgICAgICAgICBpZiAoIGlu
dGVybmFsQ2FjaGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdID0ge307
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIGZvciAxLjUg
T05MWS4gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeQogICAgICAgICAgICAgICAgICAgICAgICAvLyBt
ZXRhZGF0YSBvbiBwbGFpbiBKUyBvYmplY3RzIHdoZW4gdGhlIG9iamVjdCBpcyBzZXJpYWxpemVk
IHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpTT04uc3RyaW5naWZ5CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWlzTm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWNoZVsgaWQgXS50b0pTT04gPSBqUXVlcnkubm9vcDsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF1bIGludGVybmFs
S2V5IF0gPSBpbnRlcm5hbENhY2hlOwoKICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2Ug
bmVlZCB0byBlbGltaW5hdGUgdGhlIGV4cGFuZG8gb24gdGhlIG5vZGUgdG8gYXZvaWQKICAgICAg
ICAgICAgICAgIC8vIGZhbHNlIGxvb2t1cHMgaW4gdGhlIGNhY2hlIGZvciBlbnRyaWVzIHRoYXQg
bm8gbG9uZ2VyIGV4aXN0CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBpc05vZGUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGRvZXMgbm90IGFsbG93IHVzIHRvIGRlbGV0ZSBl
eHBhbmRvIHByb3BlcnRpZXMgZnJvbSBub2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bm9yIGRvZXMgaXQgaGF2ZSBhIHJlbW92ZUF0dHJpYnV0ZSBmdW5jdGlvbiBvbiBEb2N1bWVudCBu
b2RlczsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbXVzdCBoYW5kbGUgYWxsIG9mIHRo
ZXNlIGNhc2VzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuZGVs
ZXRlRXhwYW5kbyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxl
bVsgalF1ZXJ5LmV4cGFuZG8gXTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
ZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgalF1
ZXJ5LmV4cGFuZG8gXSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAg
ICAgICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgewogICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5kYXRhKCBlbGVtLCBuYW1lLCBkYXRhLCB0cnVlICk7CiAgICAgICAg
fSwKCiAgICAgICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUgY2Fu
IGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCiAgICAgICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5hbWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBtYXRjaCA9IGpRdWVyeS5ub0RhdGFbIGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIShtYXRjaCA9PT0gdHJ1ZSB8fCBl
bGVtLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpICE9PSBtYXRjaCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICB9Cn0pOwoKalF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAgICAgZGF0YTogZnVuY3Rpb24o
IGtleSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG51bGw7CgogICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2Yga2V5ID09PSAidW5kZWZpbmVkIiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhID0galF1ZXJ5LmRhdGEoIHRoaXNbMF0gKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSB0aGlzWzBdLmF0dHJpYnV0ZXMsIG5hbWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwg
PSBhdHRyLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJbaV0ubmFtZTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmFtZS5pbmRleE9mKCAiZGF0
YS0iICkgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc3Vic3RyaW5nKDUp
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFBdHRyKCB0aGlzWzBdLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGE7CgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVj
dCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIHRoaXMsIGtl
eSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQoIi4iKTsKICAgICAgICAgICAgICAgIHBh
cnRzWzFdID0gcGFydHNbMV0gPyAiLiIgKyBwYXJ0c1sxXSA6ICIiOwoKICAgICAgICAgICAgICAg
IGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSA9IHRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiICsgcGFydHNbMV0gKyAiISIsIFtwYXJ0
c1swXV0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZldGNoIGFueSBpbnRl
cm5hbGx5IHN0b3JlZCBkYXRhIGZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0
YSA9PT0gdW5kZWZpbmVkICYmIHRoaXMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEgPSBqUXVlcnkuZGF0YSggdGhpc1swXSwga2V5ICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFBdHRyKCB0aGlzWzBdLCBrZXksIGRhdGEg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBwYXJ0c1sxXSA/CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5kYXRhKCBwYXJ0c1swXSApIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyICR0aGlzID0galF1ZXJ5KCB0aGlzICksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gWyBwYXJ0c1swXSwgdmFsdWUgXTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMudHJpZ2dlckhhbmRsZXIoICJzZXRE
YXRhIiArIHBhcnRzWzFdICsgIiEiLCBhcmdzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkdGhpcy50cmlnZ2VySGFuZGxlciggImNoYW5nZURhdGEiICsgcGFydHNb
MV0gKyAiISIsIGFyZ3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHsK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCB0aGlzLCBrZXkgKTsKICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgIH0KfSk7CgpmdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRh
ICkgewogICAgICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBm
ZXRjaCBhbnkKICAgICAgICAvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGUK
ICAgICAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkg
ewoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVs
dGlEYXNoLCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7CgogICAgICAgICAgICAgICAgZGF0YSA9IGVs
ZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZGF0
YSA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgPT09ICJ0cnVlIiA/IHRydWUgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPT09ICJmYWxzZSIgPyBmYWxzZSA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gIm51bGwiID8gbnVsbCA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWpRdWVyeS5pc05hTiggZGF0YSApID8g
cGFyc2VGbG9hdCggZGF0YSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJicmFjZS50ZXN0KCBkYXRhICkgPyBqUXVlcnkucGFyc2VKU09OKCBkYXRhICkgOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCggZSApIHt9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXIKICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgZGF0YSApOwoKICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZGF0YTsKfQoKLy8g
VE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEuNSBPTkxZIHRvIGFsbG93IG9iamVjdHMgd2l0aCBh
IHNpbmdsZSB0b0pTT04KLy8gcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZCBlbXB0eSBvYmplY3Rz
OyB0aGlzIHByb3BlcnR5IGFsd2F5cyBleGlzdHMgaW4KLy8gb3JkZXIgdG8gbWFrZSBzdXJlIEpT
T04uc3RyaW5naWZ5IGRvZXMgbm90IGV4cG9zZSBpbnRlcm5hbCBtZXRhZGF0YQpmdW5jdGlvbiBp
c0VtcHR5RGF0YU9iamVjdCggb2JqICkgewogICAgICAgIGZvciAoIHZhciBuYW1lIGluIG9iaiAp
IHsKICAgICAgICAgICAgICAgIGlmICggbmFtZSAhPT0gInRvSlNPTiIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cgog
ICAgICAgIHJldHVybiB0cnVlOwp9CgoKCgpmdW5jdGlvbiBoYW5kbGVRdWV1ZU1hcmtEZWZlcigg
ZWxlbSwgdHlwZSwgc3JjICkgewogICAgICAgIHZhciBkZWZlckRhdGFLZXkgPSB0eXBlICsgImRl
ZmVyIiwKICAgICAgICAgICAgICAgIHF1ZXVlRGF0YUtleSA9IHR5cGUgKyAicXVldWUiLAogICAg
ICAgICAgICAgICAgbWFya0RhdGFLZXkgPSB0eXBlICsgIm1hcmsiLAogICAgICAgICAgICAgICAg
ZGVmZXIgPSBqUXVlcnkuZGF0YSggZWxlbSwgZGVmZXJEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUg
KTsKICAgICAgICBpZiAoIGRlZmVyICYmCiAgICAgICAgICAgICAgICAoIHNyYyA9PT0gInF1ZXVl
IiB8fCAhalF1ZXJ5LmRhdGEoIGVsZW0sIHF1ZXVlRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkg
KSAmJgogICAgICAgICAgICAgICAgKCBzcmMgPT09ICJtYXJrIiB8fCAhalF1ZXJ5LmRhdGEoIGVs
ZW0sIG1hcmtEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSApICkgewogICAgICAgICAgICAgICAg
Ly8gR2l2ZSByb29tIGZvciBoYXJkLWNvZGVkIGNhbGxiYWNrcyB0byBmaXJlIGZpcnN0CiAgICAg
ICAgICAgICAgICAvLyBhbmQgZXZlbnR1YWxseSBtYXJrL3F1ZXVlIHNvbWV0aGluZyBlbHNlIG9u
IHRoZSBlbGVtZW50CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmRhdGEoIGVsZW0sIHF1ZXVlRGF0YUtl
eSwgdW5kZWZpbmVkLCB0cnVlICkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAh
alF1ZXJ5LmRhdGEoIGVsZW0sIG1hcmtEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgZGVm
ZXJEYXRhS2V5LCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIu
cmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCAw
ICk7CiAgICAgICAgfQp9CgpqUXVlcnkuZXh0ZW5kKHsKCiAgICAgICAgX21hcms6IGZ1bmN0aW9u
KCBlbGVtLCB0eXBlICkgewogICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlID0gKHR5cGUgfHwgImZ4IikgKyAibWFyayI7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCB0eXBlLCAoalF1ZXJ5LmRhdGEoZWxlbSx0
eXBlLHVuZGVmaW5lZCx0cnVlKSB8fCAwKSArIDEsIHRydWUgKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9LAoKICAgICAgICBfdW5tYXJrOiBmdW5jdGlvbiggZm9yY2UsIGVsZW0sIHR5cGUg
KSB7CiAgICAgICAgICAgICAgICBpZiAoIGZvcmNlICE9PSB0cnVlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlID0gZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGZv
cmNlOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JjZSA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gdHlwZSB8fCAiZngiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0g
dHlwZSArICJtYXJrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGZv
cmNlID8gMCA6ICggKGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIHVuZGVmaW5lZCwgdHJ1ZSkgfHwg
MSApIC0gMSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvdW50ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGNvdW50LCB0
cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIGtleSwgdHJ1ZSApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVF1ZXVlTWFya0RlZmVyKCBlbGVtLCB0
eXBlLCAibWFyayIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgIH0sCgogICAgICAgIHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSAp
IHsKICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9ICh0eXBlIHx8ICJmeCIpICsgInF1ZXVlIjsKICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHEgPSBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSwgdW5kZWZpbmVkLCB0cnVlICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVp
Y2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXAKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXEgfHwgalF1
ZXJ5LmlzQXJyYXkoZGF0YSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBxID0galF1ZXJ5LmRhdGEoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoZGF0YSks
IHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5wdXNoKCBkYXRhICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBxIHx8IFtdOwogICAgICAgICAgICAgICAgfQogICAg
ICAgIH0sCgogICAgICAgIGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewogICAgICAg
ICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKCiAgICAgICAgICAgICAgICB2YXIgcXVldWUg
PSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKICAgICAgICAgICAgICAgICAgICAgICAgZm4g
PSBxdWV1ZS5zaGlmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZlcjsKCiAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhl
IHByb2dyZXNzIHNlbnRpbmVsCiAgICAgICAgICAgICAgICBpZiAoIGZuID09PSAiaW5wcm9ncmVz
cyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gcXVldWUuc2hpZnQoKTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGZuICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1
ZSBmcm9tIGJlaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZGVx
dWV1ZWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnVuc2hpZnQoImlucHJvZ3Jlc3MiKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZm4uY2Fs
bChlbGVtLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZGVxdWV1ZShlbGVtLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhcXVldWUubGVuZ3RoICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgdHlwZSArICJxdWV1
ZSIsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUXVldWVNYXJrRGVmZXIo
IGVsZW0sIHR5cGUsICJxdWV1ZSIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoK
alF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAgICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkg
ewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID0gImZ4IjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGRhdGEg
PT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5x
dWV1ZSggdGhpc1swXSwgdHlwZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVldWVbMF0gIT09ICJpbnByb2dyZXNz
IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhp
cywgdHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICB9LAogICAgICAgIGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgIH0sCiAgICAgICAgLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVy
cywgd2l0aCBwZXJtaXNzaW9uLgogICAgICAgIC8vIGh0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2lu
ZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS8KICAgICAgICBkZWxheTogZnVuY3Rpb24oIHRp
bWUsIHR5cGUgKSB7CiAgICAgICAgICAgICAgICB0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4
LnNwZWVkc1t0aW1lXSB8fCB0aW1lIDogdGltZTsKICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBl
IHx8ICJmeCI7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfSwgdGltZSApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAg
ICAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CiAgICAgICAgfSwKICAgICAgICAvLyBH
ZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlCiAgICAg
ICAgLy8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpCiAgICAgICAgcHJv
bWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iamVjdCApIHsKICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qg
PSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKICAgICAgICAg
ICAgICAgIHZhciBkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50cyA9IHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlbGVtZW50
cy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJEYXRhS2V5ID0gdHlwZSArICJkZWZlciIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHF1ZXVlRGF0YUtleSA9IHR5cGUgKyAicXVldWUiLAogICAgICAgICAgICAgICAg
ICAgICAgICBtYXJrRGF0YUtleSA9IHR5cGUgKyAibWFyayIsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHRtcDsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmUoKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggISggLS1jb3VudCApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IHdoaWxlKCBpLS0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIHRtcCA9IGpRdWVy
eS5kYXRhKCBlbGVtZW50c1sgaSBdLCBkZWZlckRhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApIHx8
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGpRdWVyeS5kYXRhKCBl
bGVtZW50c1sgaSBdLCBxdWV1ZURhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApIHx8CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVt
ZW50c1sgaSBdLCBtYXJrRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgKSAmJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0s
IGRlZmVyRGF0YUtleSwgalF1ZXJ5Ll9EZWZlcnJlZCgpLCB0cnVlICkgKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wLmRvbmUoIHJlc29sdmUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICAgICAg
cmV0dXJuIGRlZmVyLnByb21pc2UoKTsKICAgICAgICB9Cn0pOwoKCgoKdmFyIHJjbGFzcyA9IC9b
XG5cdFxyXS9nLAogICAgICAgIHJzcGFjZSA9IC9ccysvLAogICAgICAgIHJyZXR1cm4gPSAvXHIv
ZywKICAgICAgICBydHlwZSA9IC9eKD86YnV0dG9ufGlucHV0KSQvaSwKICAgICAgICByZm9jdXNh
YmxlID0gL14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksCiAgICAg
ICAgcmNsaWNrYWJsZSA9IC9eYSg/OnJlYSk/JC9pLAogICAgICAgIHJib29sZWFuID0gL14oPzph
dXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxo
aWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3Rl
ZCkkL2ksCiAgICAgICAgbm9kZUhvb2ssIGJvb2xIb29rOwoKalF1ZXJ5LmZuLmV4dGVuZCh7CiAg
ICAgICAgYXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewogICAgICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIG5hbWUsIHZhbHVlLCB0cnVlLCBqUXVlcnkuYXR0ciAp
OwogICAgICAgIH0sCgogICAgICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTsKICAgICAgICAgICAgICAg
IH0pOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZh
bHVlICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIG5hbWUs
IHZhbHVlLCB0cnVlLCBqUXVlcnkucHJvcCApOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAg
cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7CiAgICAgICAgICAgICAgICBuYW1lID0galF1
ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5L2NhdGNoIGhh
bmRsZXMgY2FzZXMgd2hlcmUgSUUgYmFsa3MgKHN1Y2ggYXMgcmVtb3ZpbmcgYSBwcm9wZXJ0eSBv
biB3aW5kb3cpCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc1sgbmFtZSBdID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzWyBuYW1lIF07CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0gY2F0Y2goIGUgKSB7fQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAg
ICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIHZhciBjbGFz
c05hbWVzLCBpLCBsLCBlbGVtLAogICAgICAgICAgICAgICAgICAgICAgICBzZXRDbGFzcywgYywg
Y2w7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcygg
dmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAm
JiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICBj
bGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIHJzcGFjZSApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBdOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFlbGVtLmNsYXNzTmFtZSAmJiBjbGFz
c05hbWVzLmxlbmd0aCA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSB2YWx1ZTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXRDbGFzcyA9ICIgIiArIGVsZW0uY2xhc3NOYW1lICsg
IiAiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggYyA9IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIX5z
ZXRDbGFzcy5pbmRleE9mKCAiICIgKyBjbGFzc05hbWVzWyBjIF0gKyAiICIgKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldENsYXNzICs9IGNsYXNzTmFtZXNbIGMgXSArICIgIjsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBqUXVlcnkudHJpbSggc2V0Q2xh
c3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAg
ICAgICByZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgewogICAgICAgICAgICAgICAgdmFy
IGNsYXNzTmFtZXMsIGksIGwsIGVsZW0sIGNsYXNzTmFtZSwgYywgY2w7CgogICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCh0aGlz
LCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAodmFsdWUgJiYgdHlwZW9mIHZhbHVl
ID09PSAic3RyaW5nIikgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NOYW1lcyA9ICh2YWx1ZSB8fCAiIikuc3BsaXQoIHJzcGFjZSApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7
IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBd
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09
IDEgJiYgZWxlbS5jbGFzc05hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc05hbWUgPSAoIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICIpLnJl
cGxhY2UoIHJjbGFzcywgIiAiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7
IGMrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSgiICIgKyBjbGFzc05hbWVzWyBj
IF0gKyAiICIsICIgIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5jbGFzc05hbWUgPSBqUXVlcnkudHJpbSggY2xhc3NOYW1lICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSAiIjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICB0b2dnbGVDbGFz
czogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKICAgICAgICAgICAgICAgIHZhciB0eXBl
ID0gdHlwZW9mIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICBpc0Jvb2wgPSB0eXBlb2Yg
c3RhdGVWYWwgPT09ICJib29sZWFuIjsKCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGksIHRoaXMuY2xhc3NOYW1l
LCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9nZ2xlIGluZGl2aWR1YWwgY2xhc3Mg
bmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5KCB0aGlzICksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlVmFsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0
KCByc3BhY2UgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoY2xh
c3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGVy
YXRlZCBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9
IGlzQm9vbCA/IHN0YXRlIDogIXNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDog
InJlbW92ZUNsYXNzIiBdKCBjbGFzc05hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAidW5k
ZWZpbmVkIiB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0aGlzLmNsYXNzTmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHN0b3JlIGNsYXNzTmFtZSBpZiBzZXQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1l
X18iLCB0aGlzLmNsYXNzTmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9nZ2xlIHdob2xlIGNsYXNzTmFt
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5j
bGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID8gIiIgOiBqUXVlcnkuX2RhdGEoIHRoaXMsICJf
X2NsYXNzTmFtZV9fIiApIHx8ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVj
dG9yICkgewogICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsg
IiAiOwogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpc1tpXS5ub2RlVHlw
ZSA9PT0gMSAmJiAoIiAiICsgdGhpc1tpXS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UocmNsYXNz
LCAiICIpLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSwKCiAg
ICAgICAgdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICB2YXIgaG9va3Ms
IHJldCwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbMF07CiAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgIGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
IF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Mu
Z2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS52
YWx1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXQg
PT09ICJzdHJpbmciID8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBoYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXQucmVwbGFjZShycmV0dXJuLCAiIikgOiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBp
cyBudWxsL3VuZGVmIG9yIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID09IG51bGwgPyAiIiA6IHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2
YWx1ZSApOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpLCB2YWw7Cgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzRnVuY3Rpb24gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgc2VsZi52
YWwoKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29u
dmVydCBudW1iZXJzIHRvIHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbCA9
PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9ICIiOwogICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0gIiI7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBqUXVlcnkubWFwKHZhbCwgZnVuY3Rpb24g
KCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBz
ZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhvb2tzIHx8ICEoInNldCIgaW4g
aG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9Cn0pOwoK
alF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgdmFsSG9va3M6IHsKICAgICAgICAgICAgICAgIG9wdGlv
bjogewogICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMudmFsdWUgaXMgdW5kZWZp
bmVkIGluIEJsYWNrYmVycnkgNC43IGJ1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdmFsID0gZWxlbS5hdHRyaWJ1dGVzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhdmFsIHx8IHZhbC5zcGVjaWZpZWQgPyBlbGVtLnZhbHVlIDogZWxl
bS50ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgICAgc2VsZWN0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rp
b24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBlbGVtLnNlbGVj
dGVkSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMg
PSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBl
bGVtLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUg
PSBlbGVtLnR5cGUgPT09ICJzZWxlY3Qtb25lIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTm90aGluZyB3YXMgc2VsZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGluZGV4IDwgMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2Vs
ZWN0ZWQgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gb25lID8gaW5kZXggOiAwLCBtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0
aDsgaSA8IG1heDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBv
ciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIG9wdGlvbi5zZWxlY3RlZCAmJiAoalF1ZXJ5LnN1cHBvcnQub3B0RGlzYWJs
ZWQgPyAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSA9
PT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFqUXVlcnkubm9kZU5h
bWUoIG9wdGlvbi5wYXJlbnROb2RlLCAib3B0Z3JvdXAiICkpICkgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1
ZSBmb3IgdGhlIG9wdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5
IGZvciBvbmUgc2VsZWN0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIG9uZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2
YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRml4ZXMgQnVnICMyNTUxIC0tIHNlbGVjdC52YWwoKSBicm9rZW4gaW4gSUUgYWZ0ZXIg
Zm9ybS5yZXNldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbmUgJiYg
IXZhbHVlcy5sZW5ndGggJiYgb3B0aW9ucy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBvcHRpb25zWyBpbmRleCBdICkudmFs
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOwogICAgICAgICAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJy
YXkoIHZhbHVlICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShlbGVt
KS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnko
dGhpcykudmFsKCksIHZhbHVlcyApID49IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXZhbHVlcy5sZW5n
dGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNlbGVj
dGVkSW5kZXggPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGF0dHJGbjogewog
ICAgICAgICAgICAgICAgdmFsOiB0cnVlLAogICAgICAgICAgICAgICAgY3NzOiB0cnVlLAogICAg
ICAgICAgICAgICAgaHRtbDogdHJ1ZSwKICAgICAgICAgICAgICAgIHRleHQ6IHRydWUsCiAgICAg
ICAgICAgICAgICBkYXRhOiB0cnVlLAogICAgICAgICAgICAgICAgd2lkdGg6IHRydWUsCiAgICAg
ICAgICAgICAgICBoZWlnaHQ6IHRydWUsCiAgICAgICAgICAgICAgICBvZmZzZXQ6IHRydWUKICAg
ICAgICB9LAogICAgICAgIAogICAgICAgIGF0dHJGaXg6IHsKICAgICAgICAgICAgICAgIC8vIEFs
d2F5cyBub3JtYWxpemUgdG8gZW5zdXJlIGhvb2sgdXNhZ2UKICAgICAgICAgICAgICAgIHRhYmlu
ZGV4OiAidGFiSW5kZXgiCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBhdHRyOiBmdW5jdGlv
biggZWxlbSwgbmFtZSwgdmFsdWUsIHBhc3MgKSB7CiAgICAgICAgICAgICAgICB2YXIgblR5cGUg
PSBlbGVtLm5vZGVUeXBlOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBkb24n
dCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVz
CiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4
IHx8IG5UeXBlID09PSAyICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZp
bmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggcGFzcyAmJiBuYW1l
IGluIGpRdWVyeS5hdHRyRm4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkoIGVsZW0gKVsgbmFtZSBdKCB2YWx1ZSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9y
dGVkCiAgICAgICAgICAgICAgICBpZiAoICEoImdldEF0dHJpYnV0ZSIgaW4gZWxlbSkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFs
dWUgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmV0LCBob29rcywK
ICAgICAgICAgICAgICAgICAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5p
c1hNTERvYyggZWxlbSApOwoKICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgbmFtZSBp
ZiBuZWVkZWQKICAgICAgICAgICAgICAgIGlmICggbm90eG1sICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lID0galF1ZXJ5LmF0dHJGaXhbIG5hbWUgXSB8fCBuYW1lOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF07CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFob29rcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBVc2UgYm9vbEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcmJvb2xlYW4udGVzdCggbmFtZSApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBib29sSG9vazsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIG5vZGVIb29rIGlmIGF2YWlsYWJs
ZSggSUU2LzcgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5v
ZGVIb29rICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Mg
PSBub2RlSG9vazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHZh
bHVlICE9PSB1bmRlZmluZWQgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVl
ID09PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1v
dmVBdHRyKCBlbGVtLCBuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHVuZGVmaW5lZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhvb2tz
ICYmICJzZXQiIGluIGhvb2tzICYmIG5vdHhtbCAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2
YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCAiIiAr
IHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaG9v
a3MgJiYgImdldCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0s
IG5hbWUgKSkgIT09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7
CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBO
b24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVm
aW5lZAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSBudWxsID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBy
ZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIHZhciBw
cm9wTmFtZTsKICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5hdHRyRml4WyBuYW1lIF0gfHwgbmFt
ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRyKCBlbGVtLCBuYW1lLCAiIiAp
OwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdG8g
ZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHJib29sZWFuLnRlc3QoIG5hbWUgKSAmJiAocHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFt
ZSBdIHx8IG5hbWUpIGluIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgYXR0ckhvb2tzOiB7CiAgICAgICAgICAg
ICAgICB0eXBlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0s
IHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGFs
bG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJlIGNoYW5nZWQgKHNpbmNlIGl0IGNhdXNlcyBwcm9i
bGVtcyBpbiBJRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJ0eXBlLnRl
c3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoICJ0eXBlIHByb3BlcnR5IGNh
bid0IGJlIGNoYW5nZWQiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRpbyIgJiYg
alF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgdHlwZSBvbiBhIHJhZGlvIGJ1dHRvbiBh
ZnRlciB0aGUgdmFsdWUgcmVzZXRzIHRoZSB2YWx1ZSBpbiBJRTYtOQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdmFsdWUgdG8gaXQncyBkZWZhdWx0IGlu
IGNhc2UgdHlwZSBpcyBzZXQgYWZ0ZXIgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGVsZW1lbnQgY3JlYXRpb24KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLnZhbHVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJ0eXBl
IiwgdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dmFsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLnZhbHVlID0gdmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgdmFsdWUgcHJv
cGVydHkgZm9yIGJhY2sgY29tcGF0CiAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIG5vZGVIb29r
IGZvciBidXR0b24gZWxlbWVudHMgaW4gSUU2LzcgKCMxOTU0KQogICAgICAgICAgICAgICAgdmFs
dWU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlSG9vay5nZXQoIGVsZW0sIG5hbWUgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5hbWUgaW4gZWxlbSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnZhbHVlIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAi
YnV0dG9uIiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGVIb29rLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9lcyBu
b3QgcmV0dXJuIHNvIHRoYXQgc2V0QXR0cmlidXRlIGlzIGFsc28gdXNlZAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHByb3BGaXg6IHsK
ICAgICAgICAgICAgICAgIHRhYmluZGV4OiAidGFiSW5kZXgiLAogICAgICAgICAgICAgICAgcmVh
ZG9ubHk6ICJyZWFkT25seSIsCiAgICAgICAgICAgICAgICAiZm9yIjogImh0bWxGb3IiLAogICAg
ICAgICAgICAgICAgImNsYXNzIjogImNsYXNzTmFtZSIsCiAgICAgICAgICAgICAgICBtYXhsZW5n
dGg6ICJtYXhMZW5ndGgiLAogICAgICAgICAgICAgICAgY2VsbHNwYWNpbmc6ICJjZWxsU3BhY2lu
ZyIsCiAgICAgICAgICAgICAgICBjZWxscGFkZGluZzogImNlbGxQYWRkaW5nIiwKICAgICAgICAg
ICAgICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKICAgICAgICAgICAgICAgIGNvbHNwYW46ICJjb2xT
cGFuIiwKICAgICAgICAgICAgICAgIHVzZW1hcDogInVzZU1hcCIsCiAgICAgICAgICAgICAgICBm
cmFtZWJvcmRlcjogImZyYW1lQm9yZGVyIiwKICAgICAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJs
ZTogImNvbnRlbnRFZGl0YWJsZSIKICAgICAgICB9LAogICAgICAgIAogICAgICAgIHByb3A6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIHZhciBuVHlwZSA9
IGVsZW0ubm9kZVR5cGU7CgogICAgICAgICAgICAgICAgLy8gZG9uJ3QgZ2V0L3NldCBwcm9wZXJ0
aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwogICAgICAgICAgICAgICAg
aWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmV0LCBob29rcywKICAgICAgICAgICAgICAgICAg
ICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApOwoK
ICAgICAgICAgICAgICAgIGlmICggbm90eG1sICkgewogICAgICAgICAgICAgICAgICAgICAgICAv
LyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg
PSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAg
IGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0
KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbVsgbmFtZSBd
ID0gdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29r
cyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CgogICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
WyBuYW1lIF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9LAogICAgICAgIAogICAgICAgIHByb3BIb29rczogewogICAgICAgICAgICAgICAgdGFi
SW5kZXg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3Qg
YWx3YXlzIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxp
Y2l0bHkgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2ZsdWlk
cHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3Zpbmct
dGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgYXR0cmlidXRlTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5k
ZXgiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5v
ZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQgPwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VJbnQoIGF0dHJpYnV0ZU5vZGUudmFsdWUsIDEwICkgOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVt
Lm5vZGVOYW1lICkgfHwgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5o
cmVmID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5l
ZDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0K
fSk7CgovLyBBZGQgdGhlIHRhYmluZGV4IHByb3BIb29rIHRvIGF0dHJIb29rcyBmb3IgYmFjay1j
b21wYXQKalF1ZXJ5LmF0dHJIb29rcy50YWJJbmRleCA9IGpRdWVyeS5wcm9wSG9va3MudGFiSW5k
ZXg7CgovLyBIb29rIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKYm9vbEhvb2sgPSB7CiAgICAgICAg
Z2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIC8vIEFsaWduIGJv
b2xlYW4gYXR0cmlidXRlcyB3aXRoIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcwogICAgICAgICAg
ICAgICAgLy8gRmFsbCBiYWNrIHRvIGF0dHJpYnV0ZSBwcmVzZW5jZSB3aGVyZSBzb21lIGJvb2xl
YW5zIGFyZSBub3Qgc3VwcG9ydGVkCiAgICAgICAgICAgICAgICB2YXIgYXR0ck5vZGU7CiAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUgKSA9PT0gdHJ1ZSB8fCAo
IGF0dHJOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiBhdHRyTm9kZS5u
b2RlVmFsdWUgIT09IGZhbHNlID8KICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS50b0xvd2Vy
Q2FzZSgpIDoKICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwogICAgICAgIH0sCiAg
ICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7CiAgICAgICAgICAgICAg
ICB2YXIgcHJvcE5hbWU7CiAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVu
IHNldCB0byBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0cigg
ZWxlbSwgbmFtZSApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdmFsdWUgaXMgdHJ1ZSBzaW5jZSB3ZSBrbm93IGF0IHRoaXMgcG9pbnQgaXQncyB0
eXBlIGJvb2xlYW4gYW5kIG5vdCBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQg
Ym9vbGVhbiBhdHRyaWJ1dGVzIHRvIHRoZSBzYW1lIG5hbWUgYW5kIHNldCB0aGUgRE9NIHByb3Bl
cnR5CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5h
bWUgXSB8fCBuYW1lOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHByb3BOYW1lIGluIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBzZXQgdGhlIElE
TCBzcGVjaWZpY2FsbHkgaWYgaXQgYWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1lbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBwcm9wTmFtZSBdID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRy
aWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSApOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgICAgfQp9OwoKLy8gSUU2LzcgZG8gbm90IHN1
cHBvcnQgZ2V0dGluZy9zZXR0aW5nIHNvbWUgYXR0cmlidXRlcyB3aXRoIGdldC9zZXRBdHRyaWJ1
dGUKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlICkgewogICAgICAgIAogICAg
ICAgIC8vIFVzZSB0aGlzIGZvciBhbnkgYXR0cmlidXRlIGluIElFNi83CiAgICAgICAgLy8gVGhp
cyBmaXhlcyBhbG1vc3QgZXZlcnkgSUU2LzcgaXNzdWUKICAgICAgICBub2RlSG9vayA9IGpRdWVy
eS52YWxIb29rcy5idXR0b24gPSB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OwogICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBub2RlVmFsdWUgaXMgZW1wdHkg
c3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgJiYgcmV0Lm5vZGVWYWx1
ZSAhPT0gIiIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5ub2RlVmFsdWUg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKICAgICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBleGlzdGluZyBvciBjcmVhdGUg
YSBuZXcgYXR0cmlidXRlIG5vZGUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGVs
ZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFyZXQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQu
Y3JlYXRlQXR0cmlidXRlKCBuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5zZXRBdHRyaWJ1dGVOb2RlKCByZXQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldC5ub2RlVmFsdWUgPSB2YWx1ZSArICIi
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBTZXQgd2lkdGggYW5k
IGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmcoIEJ1ZyAjODE1MCAp
CiAgICAgICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKICAgICAgICBqUXVlcnkuZWFjaChbICJ3
aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewogICAgICAgICAgICAgICAg
alF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJIb29r
c1sgbmFtZSBdLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0s
IHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09
ICIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRB
dHRyaWJ1dGUoIG5hbWUsICJhdXRvIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7
Cn0KCgovLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwgY2FsbCBvbiBJRQppZiAo
ICFqUXVlcnkuc3VwcG9ydC5ocmVmTm9ybWFsaXplZCApIHsKICAgICAgICBqUXVlcnkuZWFjaChb
ICJocmVmIiwgInNyYyIsICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkg
ewogICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVu
ZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdl
dDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCAyICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7Cn0KCmlm
ICggIWpRdWVyeS5zdXBwb3J0LnN0eWxlICkgewogICAgICAgIGpRdWVyeS5hdHRySG9va3Muc3R5
bGUgPSB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIGluIHRoZSBjYXNlIG9mIGVtcHR5IHN0
cmluZwogICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gbG93ZXJjYXNlIHNp
bmNlIElFIHVwcGVyY2FzZXMgY3NzIHByb3BlcnR5IG5hbWVzCiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKSB8fCB1bmRlZmluZWQ7
CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwg
dmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS5zdHlsZS5jc3NU
ZXh0ID0gIiIgKyB2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKfQoKLy8gU2Fm
YXJpIG1pcy1yZXBvcnRzIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHByb3BlcnR5IG9mIGFuIG9wdGlv
bgovLyBBY2Nlc3NpbmcgdGhlIHBhcmVudCdzIHNlbGVjdGVkSW5kZXggcHJvcGVydHkgZml4ZXMg
aXQKaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7CiAgICAgICAgalF1ZXJ5LnBy
b3BIb29rcy5zZWxlY3RlZCA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0
ZWQsIHsKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnQuc2VsZWN0ZWRJbmRleDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgaXQgYWxzbyB3b3JrcyB3aXRoIG9wdGdyb3Vwcywgc2VlICM1NzAx
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQucGFyZW50Tm9kZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5wYXJlbnRO
b2RlLnNlbGVjdGVkSW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0pOwp9CgovLyBSYWRpb3MgYW5kIGNoZWNrYm94
ZXMgZ2V0dGVyL3NldHRlcgppZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja09uICkgewogICAgICAg
IGpRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0gewogICAgICAgICAgICAgICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQgaW5z
dGVhZCBvZiAib24iIGlmIGEgdmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpID09PSBudWxs
ID8gIm9uIiA6IGVsZW0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH07CiAgICAgICAgfSk7Cn0KalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3gi
IF0sIGZ1bmN0aW9uKCkgewogICAgICAgIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0galF1ZXJ5
LmV4dGVuZCggalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0sIHsKICAgICAgICAgICAgICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5pc0FycmF5KCB2YWx1ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAoZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeShlbGVtKS52YWwo
KSwgdmFsdWUgKSA+PSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0pOwp9KTsKCgoKCnZhciBybmFtZXNwYWNlcyA9IC9cLiguKikkLywKICAg
ICAgICByZm9ybUVsZW1zID0gL14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLAogICAgICAg
IHJwZXJpb2QgPSAvXC4vZywKICAgICAgICByc3BhY2VzID0gLyAvZywKICAgICAgICByZXNjYXBl
ID0gL1teXHdccy58YF0vZywKICAgICAgICBmY2xlYW51cCA9IGZ1bmN0aW9uKCBubSApIHsKICAg
ICAgICAgICAgICAgIHJldHVybiBubS5yZXBsYWNlKHJlc2NhcGUsICJcXCQmIik7CiAgICAgICAg
fTsKCi8qCiAqIEEgbnVtYmVyIG9mIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBmb3IgbWFuYWdpbmcg
ZXZlbnRzLgogKiBNYW55IG9mIHRoZSBpZGVhcyBiZWhpbmQgdGhpcyBjb2RlIG9yaWdpbmF0ZWQg
ZnJvbQogKiBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkuCiAqLwpqUXVlcnkuZXZlbnQg
PSB7CgogICAgICAgIC8vIEJpbmQgYW4gZXZlbnQgdG8gYW4gZWxlbWVudAogICAgICAgIC8vIE9y
aWdpbmFsIGJ5IERlYW4gRWR3YXJkcwogICAgICAgIGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVz
LCBoYW5kbGVyLCBkYXRhICkgewogICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09
PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXIgPT09
IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gcmV0dXJuRmFsc2U7
CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhaGFuZGxlciApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRml4ZXMgYnVnICM3MjI5LiBGaXggcmVjb21tZW5kZWQgYnkgamRhbHRvbgog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgdmFyIGhhbmRsZU9iakluLCBoYW5kbGVPYmo7CgogICAgICAgICAgICAgICAgaWYg
KCBoYW5kbGVyLmhhbmRsZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaklu
ID0gaGFuZGxlcjsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZU9iaklu
LmhhbmRsZXI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkIGhhcyBhIHVuaXF1ZSBJRAogICAgICAg
ICAgICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkgewogICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUKICAgICAgICAgICAg
ICAgIHZhciBlbGVtRGF0YSA9IGpRdWVyeS5fZGF0YSggZWxlbSApOwoKICAgICAgICAgICAgICAg
IC8vIElmIG5vIGVsZW1EYXRhIGlzIGZvdW5kIHRoZW4gd2UgbXVzdCBiZSB0cnlpbmcgdG8gYmlu
ZCB0byBvbmUgb2YgdGhlCiAgICAgICAgICAgICAgICAvLyBiYW5uZWQgbm9EYXRhIGVsZW1lbnRz
CiAgICAgICAgICAgICAgICBpZiAoICFlbGVtRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBldmVudHMg
PSBlbGVtRGF0YS5ldmVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlID0g
ZWxlbURhdGEuaGFuZGxlOwoKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50cyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbURhdGEuZXZlbnRzID0gZXZlbnRzID0ge307CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhZXZlbnRIYW5kbGUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1EYXRhLmhhbmRsZSA9IGV2ZW50SGFuZGxlID0gZnVuY3Rpb24o
IGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzY2FyZCB0aGUgc2Vj
b25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2Ug
aGFzIHVubG9hZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVv
ZiBqUXVlcnkgIT09ICJ1bmRlZmluZWQiICYmICghZSB8fCBqUXVlcnkuZXZlbnQudHJpZ2dlcmVk
ICE9PSBlLnR5cGUpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5ldmVudC5oYW5kbGUuYXBwbHkoIGV2ZW50SGFuZGxlLmVsZW0sIGFyZ3VtZW50cyApIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBBZGQgZWxlbSBhcyBhIHByb3BlcnR5IG9mIHRoZSBoYW5kbGUgZnVuY3Rpb24KICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdG8gcHJldmVudCBhIG1lbW9yeSBsZWFrIHdpdGggbm9uLW5hdGl2
ZSBldmVudHMgaW4gSUUuCiAgICAgICAgICAgICAgICBldmVudEhhbmRsZS5lbGVtID0gZWxlbTsK
CiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBh
IHNwYWNlCiAgICAgICAgICAgICAgICAvLyBqUXVlcnkoLi4uKS5iaW5kKCJtb3VzZW92ZXIgbW91
c2VvdXQiLCBmbik7CiAgICAgICAgICAgICAgICB0eXBlcyA9IHR5cGVzLnNwbGl0KCIgIik7Cgog
ICAgICAgICAgICAgICAgdmFyIHR5cGUsIGkgPSAwLCBuYW1lc3BhY2VzOwoKICAgICAgICAgICAg
ICAgIHdoaWxlICggKHR5cGUgPSB0eXBlc1sgaSsrIF0pICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVPYmogPSBoYW5kbGVPYmpJbiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV4dGVuZCh7fSwgaGFuZGxlT2JqSW4pIDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IGhhbmRsZXI6IGhhbmRsZXIsIGRhdGE6IGRhdGEgfTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgZXZlbnQgaGFuZGxlcnMKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoIi4iKSA+IC0xICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID0gbmFtZXNwYWNl
cy5zbGljZSgwKS5zb3J0KCkuam9pbigiLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gW107CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLm5hbWVzcGFjZSA9ICIiOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVP
YmoudHlwZSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhhbmRsZU9iai5n
dWlkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5ndWlkID0g
aGFuZGxlci5ndWlkOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbGlzdCBvZiBmdW5jdGlvbnMgYm91bmQgdG8gdGhp
cyBldmVudAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlcnMgPSBldmVudHNbIHR5
cGUgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2
ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElu
aXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
aGFuZGxlcnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBl
dmVudHNbIHR5cGUgXSA9IFtdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBD
aGVjayBmb3IgYSBzcGVjaWFsIGV2ZW50IGhhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyL2F0dGFjaEV2ZW50IGlmIHRoZSBz
cGVjaWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlbnRzIGhhbmRsZXIg
cmV0dXJucyBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNwZWNp
YWwuc2V0dXAgfHwgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBl
dmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEJpbmQgdGhlIGdsb2JhbCBldmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uYWRkRXZl
bnRMaXN0ZW5lciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSwgZmFsc2UgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVt
LmF0dGFjaEV2ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLmF0dGFjaEV2ZW50KCAib24iICsgdHlwZSwgZXZlbnRIYW5kbGUgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggc3BlY2lhbC5hZGQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlci5ndWlk
ID0gaGFuZGxlci5ndWlkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBm
dW5jdGlvbiB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdAogICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTsKCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgYmVlbiB1c2VkLCBmb3IgZXZlbnQg
b3B0aW1pemF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9iYWxb
IHR5cGUgXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTnVs
bGlmeSBlbGVtIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGluIElFCiAgICAgICAgICAgICAgICBl
bGVtID0gbnVsbDsKICAgICAgICB9LAoKICAgICAgICBnbG9iYWw6IHt9LAoKICAgICAgICAvLyBE
ZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKICAgICAgICBy
ZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgcG9zICkgewogICAgICAgICAg
ICAgICAgLy8gZG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKICAgICAg
ICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4
ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlciA9IHJldHVybkZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHZhciByZXQsIHR5cGUsIGZuLCBqLCBpID0gMCwgYWxsLCBuYW1lc3BhY2VzLCBu
YW1lc3BhY2UsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxlT2JqLCBvcmlnVHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbURhdGEgPSBqUXVlcnkuaGFzRGF0YSggZWxlbSApICYmIGpR
dWVyeS5fZGF0YSggZWxlbSApLAogICAgICAgICAgICAgICAgICAgICAgICBldmVudHMgPSBlbGVt
RGF0YSAmJiBlbGVtRGF0YS5ldmVudHM7CgogICAgICAgICAgICAgICAgaWYgKCAhZWxlbURhdGEg
fHwgIWV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIHR5cGVzIGlzIGFjdHVhbGx5IGFuIGV2ZW50IG9i
amVjdCBoZXJlCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVzICYmIHR5cGVzLnR5cGUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSB0eXBlcy5oYW5kbGVyOwogICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlcyA9IHR5cGVzLnR5cGU7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gVW5iaW5kIGFsbCBldmVudHMgZm9yIHRoZSBlbGVtZW50CiAgICAgICAg
ICAgICAgICBpZiAoICF0eXBlcyB8fCB0eXBlb2YgdHlwZXMgPT09ICJzdHJpbmciICYmIHR5cGVz
LmNoYXJBdCgwKSA9PT0gIi4iICkgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlcyA9IHR5
cGVzIHx8ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSgg
ZWxlbSwgdHlwZSArIHR5cGVzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCiAgICAgICAg
ICAgICAgICAvLyBqUXVlcnkoLi4uKS51bmJpbmQoIm1vdXNlb3ZlciBtb3VzZW91dCIsIGZuKTsK
ICAgICAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoIiAiKTsKCiAgICAgICAgICAgICAg
ICB3aGlsZSAoICh0eXBlID0gdHlwZXNbIGkrKyBdKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgb3JpZ1R5cGUgPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBu
dWxsOwogICAgICAgICAgICAgICAgICAgICAgICBhbGwgPSB0eXBlLmluZGV4T2YoIi4iKSA8IDA7
CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBbXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIWFsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lc3BhY2UgPSBuZXcgUmVnRXhwKCIoXnxcXC4pIiArCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCBuYW1lc3BhY2VzLnNsaWNl
KDApLnNvcnQoKSwgZmNsZWFudXAgKS5qb2luKCJcXC4oPzouKlxcLik/IikgKyAiKFxcLnwkKSIp
OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBldmVu
dFR5cGUgPSBldmVudHNbIHR5cGUgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWV2
ZW50VHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaGFu
ZGxlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8
IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50VHlwZVsgaiBdOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggYWxsIHx8IG5hbWVzcGFjZS50ZXN0KCBoYW5kbGVP
YmoubmFtZXNwYWNlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIG9yaWdUeXBlLCBoYW5kbGVPYmou
aGFuZGxlciwgaiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBldmVudFR5cGUuc3BsaWNlKCBqLS0sIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNw
ZWNpYWxbIHR5cGUgXSB8fCB7fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSBw
b3MgfHwgMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGogXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBn
aXZlbiBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBhbGwgfHwgbmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1l
c3BhY2UgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBwb3MgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUuc3BsaWNlKCBqLS0sIDEgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsLnJlbW92ZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcG9zICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGdlbmVyaWMgZXZl
bnQgaGFuZGxlciBpZiBubyBtb3JlIGhhbmRsZXJzIGV4aXN0CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZXZlbnRUeXBlLmxlbmd0aCA9PT0gMCB8fCBwb3MgIT0gbnVsbCAmJiBldmVudFR5
cGUubGVuZ3RoID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IXNwZWNpYWwudGVhcmRvd24gfHwgc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3Bh
Y2VzICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IGV2ZW50c1sgdHlwZSBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9u
Z2VyIHVzZWQKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50
cyApICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlID0gZWxlbURhdGEuaGFu
ZGxlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZWxlbSA9IG51bGw7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtRGF0YS5ldmVudHM7
CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtRGF0YS5oYW5kbGU7CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBlbGVtRGF0YSApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVt
LCB1bmRlZmluZWQsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLy8gRXZlbnRzIHRoYXQgYXJlIHNh
ZmUgdG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUgYXR0YWNoZWQuCiAgICAgICAg
Ly8gTmF0aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgdGhleSBtYXkgaGF2ZSBp
bmxpbmUgaGFuZGxlcnMuCiAgICAgICAgY3VzdG9tRXZlbnQ6IHsKICAgICAgICAgICAgICAgICJn
ZXREYXRhIjogdHJ1ZSwKICAgICAgICAgICAgICAgICJzZXREYXRhIjogdHJ1ZSwKICAgICAgICAg
ICAgICAgICJjaGFuZ2VEYXRhIjogdHJ1ZQogICAgICAgIH0sCgogICAgICAgIHRyaWdnZXI6IGZ1
bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgewogICAgICAgICAgICAg
ICAgLy8gRXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKICAgICAgICAgICAgICAgIHZhciB0eXBl
ID0gZXZlbnQudHlwZSB8fCBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNl
cyA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBleGNsdXNpdmU7CgogICAgICAgICAgICAg
ICAgaWYgKCB0eXBlLmluZGV4T2YoIiEiKSA+PSAwICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBFeGNsdXNpdmUgZXZlbnRzIHRyaWdnZXIgb25seSBmb3IgdGhlIGV4YWN0IGV2ZW50IChu
byBuYW1lc3BhY2VzKQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZS5zbGljZSgw
LCAtMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoIi4iKSA+PSAwICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBh
IHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpCiAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWVzcGFjZXMuc29ydCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
KCFlbGVtIHx8IGpRdWVyeS5ldmVudC5jdXN0b21FdmVudFsgdHlwZSBdKSAmJiAhalF1ZXJ5LmV2
ZW50Lmdsb2JhbFsgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBqUXVl
cnkgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnQgdHlwZSwgYW5kIGl0IGNhbid0IGhhdmUgaW5saW5l
IGhhbmRsZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gRXZlbnQsIE9iamVj
dCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZwogICAgICAgICAgICAgICAgZXZlbnQgPSB0
eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiID8KICAgICAgICAgICAgICAgICAgICAgICAgLy8galF1
ZXJ5LkV2ZW50IG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBldmVudFsgalF1ZXJ5LmV4
cGFuZG8gXSA/IGV2ZW50IDoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0IGxpdGVy
YWwKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgZXZlbnQg
KSA6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3QgdGhlIGV2ZW50IHR5cGUgKHN0cmlu
ZykKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSApOwoKICAg
ICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSB0eXBlOwogICAgICAgICAgICAgICAgZXZlbnQuZXhj
bHVzaXZlID0gZXhjbHVzaXZlOwogICAgICAgICAgICAgICAgZXZlbnQubmFtZXNwYWNlID0gbmFt
ZXNwYWNlcy5qb2luKCIuIik7CiAgICAgICAgICAgICAgICBldmVudC5uYW1lc3BhY2VfcmUgPSBu
ZXcgUmVnRXhwKCIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbigiXFwuKD86LipcXC4pPyIpICsg
IihcXC58JCkiKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gdHJpZ2dlckhh
bmRsZXIoKSBhbmQgZ2xvYmFsIGV2ZW50cyBkb24ndCBidWJibGUgb3IgcnVuIHRoZSBkZWZhdWx0
IGFjdGlvbgogICAgICAgICAgICAgICAgaWYgKCBvbmx5SGFuZGxlcnMgfHwgIWVsZW0gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCiAgICAgICAgICAgICAg
ICBpZiAoICFlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBTdG9wIHRh
dW50aW5nIHRoZSBkYXRhIGNhY2hlOyByZW1vdmUgZ2xvYmFsIGV2ZW50cyBhbmQgYWx3YXlzIGF0
dGFjaCB0byBkb2N1bWVudAogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggalF1
ZXJ5LmNhY2hlLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbnRlcm5hbEtleSB2YXJpYWJsZSBpcyBqdXN0IHVzZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8g
ZmluZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBwb3RlbnRpYWxseSBj
aGFuZ2UgdGhpcyBzdHVmZiBsYXRlcjsgY3VycmVudGx5IGl0IGp1c3QKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBwb2ludHMgdG8galF1ZXJ5LmV4cGFuZG8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsQ2FjaGUgPSB0aGlz
WyBpbnRlcm5hbEtleSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW50
ZXJuYWxDYWNoZSAmJiBpbnRlcm5hbENhY2hlLmV2ZW50cyAmJiBpbnRlcm5hbENhY2hlLmV2ZW50
c1sgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LnRyaWdnZXIoIGV2ZW50LCBkYXRhLCBpbnRlcm5hbENhY2hlLmhhbmRsZS5lbGVt
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50
IG5vZGVzCiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5u
b2RlVHlwZSA9PT0gOCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNl
IGl0IGlzIGJlaW5nIHJldXNlZAogICAgICAgICAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZp
bmVkOwogICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZWxlbTsKCiAgICAgICAgICAgICAg
ICAvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0
aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0CiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSAhPSBu
dWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApIDogW107CiAgICAgICAgICAgICAgICBkYXRh
LnVuc2hpZnQoIGV2ZW50ICk7CgogICAgICAgICAgICAgICAgdmFyIGN1ciA9IGVsZW0sCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElFIGRvZXNuJ3QgbGlrZSBtZXRob2QgbmFtZXMgd2l0aCBh
IGNvbG9uICgjMzUzMywgIzgyNzIpCiAgICAgICAgICAgICAgICAgICAgICAgIG9udHlwZSA9IHR5
cGUuaW5kZXhPZigiOiIpIDwgMCA/ICJvbiIgKyB0eXBlIDogIiI7CgogICAgICAgICAgICAgICAg
Ly8gRmlyZSBldmVudCBvbiB0aGUgY3VycmVudCBlbGVtZW50LCB0aGVuIGJ1YmJsZSB1cCB0aGUg
RE9NIHRyZWUKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGhhbmRsZSA9IGpRdWVyeS5fZGF0YSggY3VyLCAiaGFuZGxlIiApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IGN1cjsKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBoYW5kbGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
LmFwcGx5KCBjdXIsIGRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhbiBpbmxpbmUgYm91bmQgc2NyaXB0CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggb250eXBlICYmIGpRdWVyeS5hY2NlcHREYXRhKCBjdXIgKSAm
JiBjdXJbIG9udHlwZSBdICYmIGN1clsgb250eXBlIF0uYXBwbHkoIGN1ciwgZGF0YSApID09PSBm
YWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93CiAgICAgICAgICAgICAgICAg
ICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IGN1ci5vd25lckRvY3VtZW50IHx8IGN1ciA9
PT0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQgJiYgd2luZG93OwogICAgICAgICAgICAgICAg
fSB3aGlsZSAoIGN1ciAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApOwoKICAgICAg
ICAgICAgICAgIC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBp
dCBub3cKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkg
ewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIXNwZWNpYWwuX2RlZmF1bHQgfHwgc3BlY2lh
bC5fZGVmYXVsdC5jYWxsKCBlbGVtLm93bmVyRG9jdW1lbnQsIGV2ZW50ICkgPT09IGZhbHNlKSAm
JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEodHlwZSA9PT0gImNsaWNrIiAmJiBq
UXVlcnkubm9kZU5hbWUoIGVsZW0sICJhIiApKSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSAp
ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0aXZlIERP
TSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZl
bnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIGFuIC5pc0Z1
bmN0aW9uKSgpIGNoZWNrIGhlcmUgYmVjYXVzZSBJRTYvNyBmYWlscyB0aGF0IHRlc3QuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUU8OSBkaWVzIG9uIGZvY3VzIHRvIGhpZGRl
biBlbGVtZW50ICgjMTQ4NiksIG1heSB3YW50IHRvIHJldmlzaXQgYSB0cnkvY2F0Y2guCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggb250eXBlICYmIGVsZW1bIHR5cGUgXSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dl
ciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQgPSBlbGVtWyBvbnR5cGUg
XTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
b2xkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1bIG9udHlwZSBdID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2ggKCBpZUVycm9yICkge30KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvbGQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG9sZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmln
Z2VyZWQgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3Vs
dDsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAg
ICAgICAgICAgIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgfHwgd2luZG93LmV2ZW50
ICk7CiAgICAgICAgICAgICAgICAvLyBTbmFwc2hvdCB0aGUgaGFuZGxlcnMgbGlzdCBzaW5jZSBh
IGNhbGxlZCBoYW5kbGVyIG1heSBhZGQvcmVtb3ZlIGV2ZW50cy4KICAgICAgICAgICAgICAgIHZh
ciBoYW5kbGVycyA9ICgoalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiZXZlbnRzIiApIHx8IHt9KVsgZXZl
bnQudHlwZSBdIHx8IFtdKS5zbGljZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2Fs
bCA9ICFldmVudC5leGNsdXNpdmUgJiYgIWV2ZW50Lm5hbWVzcGFjZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMsIDAg
KTsKCiAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGZpeC1lZCBFdmVudCByYXRoZXIgdGhhbiB0
aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50CiAgICAgICAgICAgICAgICBhcmdzWzBdID0gZXZl
bnQ7CiAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gdGhpczsKCiAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGogPCBsOyBqKysg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBd
OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgMSkgYmUg
bm9uLWV4Y2x1c2l2ZSBhbmQgaGF2ZSBubyBuYW1lc3BhY2UsIG9yCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3Nl
IGluIHRoZSBib3VuZCBldmVudC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBydW5fYWxs
IHx8IGV2ZW50Lm5hbWVzcGFjZV9yZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyBpbiBhIHJlZmVyZW5jZSB0byB0
aGUgaGFuZGxlciBmdW5jdGlvbiBpdHNlbGYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTbyB0aGF0IHdlIGNhbiBsYXRlciByZW1vdmUgaXQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBldmVudC5oYW5kbGVyID0gaGFuZGxlT2JqLmhhbmRsZXI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGhhbmRsZU9iai5oYW5kbGVy
LmFwcGx5KCB0aGlzLCBhcmdzICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggcmV0ICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudC5yZXN1bHQgPSByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHJldCA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OwogICAgICAgIH0sCgogICAg
ICAgIHByb3BzOiAiYWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUgYnViYmxlcyBidXR0b24gY2Fu
Y2VsYWJsZSBjaGFyQ29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRh
dGEgZGV0YWlsIGV2ZW50UGhhc2UgZnJvbUVsZW1lbnQgaGFuZGxlciBrZXlDb2RlIGxheWVyWCBs
YXllclkgbWV0YUtleSBuZXdWYWx1ZSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgcHJldlZh
bHVlIHJlbGF0ZWROb2RlIHJlbGF0ZWRUYXJnZXQgc2NyZWVuWCBzY3JlZW5ZIHNoaWZ0S2V5IHNy
Y0VsZW1lbnQgdGFyZ2V0IHRvRWxlbWVudCB2aWV3IHdoZWVsRGVsdGEgd2hpY2giLnNwbGl0KCIg
IiksCgogICAgICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgewogICAgICAgICAgICAgICAgaWYg
KCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGV2ZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIHN0b3JlIGEg
Y29weSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgb2JqZWN0CiAgICAgICAgICAgICAgICAvLyBhbmQg
ImNsb25lIiB0byBzZXQgcmVhZC1vbmx5IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgIHZhciBv
cmlnaW5hbEV2ZW50ID0gZXZlbnQ7CiAgICAgICAgICAgICAgICBldmVudCA9IGpRdWVyeS5FdmVu
dCggb3JpZ2luYWxFdmVudCApOwoKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gdGhpcy5w
cm9wcy5sZW5ndGgsIHByb3A7IGk7ICkgewogICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0g
dGhpcy5wcm9wc1sgLS1pIF07CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50WyBwcm9wIF0g
PSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gRml4IHRhcmdldCBwcm9wZXJ0eSwgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICAgICBp
ZiAoICFldmVudC50YXJnZXQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVzICMx
OTI1IHdoZXJlIHNyY0VsZW1lbnQgbWlnaHQgbm90IGJlIGRlZmluZWQgZWl0aGVyCiAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1l
bnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGFyZ2V0
IGlzIGEgdGV4dG5vZGUgKHNhZmFyaSkKICAgICAgICAgICAgICAgIGlmICggZXZlbnQudGFyZ2V0
Lm5vZGVUeXBlID09PSAzICkgewogICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXJnZXQg
PSBldmVudC50YXJnZXQucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICAgICBp
ZiAoICFldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGV2ZW50LmZyb21FbGVtZW50ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID0gZXZlbnQuZnJvbUVsZW1lbnQg
PT09IGV2ZW50LnRhcmdldCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50Owog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlWC9ZIGlm
IG1pc3NpbmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKICAgICAgICAgICAgICAgIGlmICggZXZl
bnQucGFnZVggPT0gbnVsbCAmJiBldmVudC5jbGllbnRYICE9IG51bGwgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBldmVudERvY3VtZW50ID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1l
bnQgfHwgZG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gZXZl
bnREb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9keSA9IGV2ZW50RG9jdW1lbnQuYm9keTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50LnBhZ2VYID0gZXZlbnQuY2xpZW50WCArIChkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9k
eSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCkgLSAoZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJv
ZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDApOwogICAgICAgICAgICAgICAgICAgICAgICBldmVu
dC5wYWdlWSA9IGV2ZW50LmNsaWVudFkgKyAoZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkg
JiYgYm9keS5zY3JvbGxUb3AgIHx8IDApIC0gKGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5
ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHMKICAgICAgICAgICAgICAgIGlmICggZXZl
bnQud2hpY2ggPT0gbnVsbCAmJiAoZXZlbnQuY2hhckNvZGUgIT0gbnVsbCB8fCBldmVudC5rZXlD
b2RlICE9IG51bGwpICkgewogICAgICAgICAgICAgICAgICAgICAgICBldmVudC53aGljaCA9IGV2
ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGU7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQWRkIG1ldGFLZXkgdG8gbm9uLU1h
YyBicm93c2VycyAodXNlIGN0cmwgZm9yIFBDJ3MgYW5kIE1ldGEgZm9yIE1hY3MpCiAgICAgICAg
ICAgICAgICBpZiAoICFldmVudC5tZXRhS2V5ICYmIGV2ZW50LmN0cmxLZXkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkgPSBldmVudC5jdHJsS2V5OwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxl
ZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKICAgICAgICAgICAgICAgIC8vIE5vdGU6IGJ1
dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0CiAgICAgICAgICAgICAgICBp
ZiAoICFldmVudC53aGljaCAmJiBldmVudC5idXR0b24gIT09IHVuZGVmaW5lZCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQud2hpY2ggPSAoZXZlbnQuYnV0dG9uICYgMSA/IDEgOiAo
IGV2ZW50LmJ1dHRvbiAmIDIgPyAzIDogKCBldmVudC5idXR0b24gJiA0ID8gMiA6IDAgKSApKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgICAg
fSwKCiAgICAgICAgLy8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5ndWlkIGluc3RlYWQKICAgICAg
ICBndWlkOiAxRTgsCgogICAgICAgIC8vIERlcHJlY2F0ZWQsIHVzZSBqUXVlcnkucHJveHkgaW5z
dGVhZAogICAgICAgIHByb3h5OiBqUXVlcnkucHJveHksCgogICAgICAgIHNwZWNpYWw6IHsKICAg
ICAgICAgICAgICAgIHJlYWR5OiB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgcmVhZHkgZXZlbnQgaXMgc2V0dXAKICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXA6
IGpRdWVyeS5iaW5kUmVhZHksCiAgICAgICAgICAgICAgICAgICAgICAgIHRlYXJkb3duOiBqUXVl
cnkubm9vcAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBsaXZlOiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24oIGhhbmRsZU9iaiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUNvbnZlcnQoIGhhbmRsZU9iai5vcmln
VHlwZSwgaGFuZGxlT2JqLnNlbGVjdG9yICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKHt9LCBoYW5kbGVPYmosIHtoYW5kbGVyOiBsaXZlSGFu
ZGxlciwgZ3VpZDogaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZH0pICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCBoYW5k
bGVPYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJl
bW92ZSggdGhpcywgbGl2ZUNvbnZlcnQoIGhhbmRsZU9iai5vcmlnVHlwZSwgaGFuZGxlT2JqLnNl
bGVjdG9yICksIGhhbmRsZU9iaiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGJlZm9yZXVubG9hZDogewogICAgICAgICAgICAg
ICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBk
byB0aGlzIHNwZWNpYWwgY2FzZSBvbiB3aW5kb3dzCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIHRoaXMgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxvYWQgPSBldmVudEhhbmRsZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oIG5hbWVzcGFj
ZXMsIGV2ZW50SGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dGhpcy5vbmJlZm9yZXVubG9hZCA9PT0gZXZlbnRIYW5kbGUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5sb2FkID0gbnVsbDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9Cn07CgpqUXVlcnkucmVtb3ZlRXZlbnQgPSBkb2N1bWVu
dC5yZW1vdmVFdmVudExpc3RlbmVyID8KICAgICAgICBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFu
ZGxlICkgewogICAgICAgICAgICAgICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwg
aGFuZGxlLCBmYWxzZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0gOgogICAgICAgIGZ1
bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0u
ZGV0YWNoRXZlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZGV0YWNoRXZlbnQo
ICJvbiIgKyB0eXBlLCBoYW5kbGUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwoKalF1
ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7CiAgICAgICAgLy8gQWxsb3cgaW5z
dGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkCiAgICAgICAgaWYgKCAhdGhpcy5w
cmV2ZW50RGVmYXVsdCApIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50
KCBzcmMsIHByb3BzICk7CiAgICAgICAgfQoKICAgICAgICAvLyBFdmVudCBvYmplY3QKICAgICAg
ICBpZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxF
dmVudCA9IHNyYzsKICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IHNyYy50eXBlOwoKICAgICAg
ICAgICAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVl
biBtYXJrZWQgYXMgcHJldmVudGVkCiAgICAgICAgICAgICAgICAvLyBieSBhIGhhbmRsZXIgbG93
ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS4KICAgICAgICAgICAg
ICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKHNyYy5kZWZhdWx0UHJldmVudGVkIHx8IHNy
Yy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKICAgICAgICAgICAgICAgICAgICAgICAgc3JjLmdl
dFByZXZlbnREZWZhdWx0ICYmIHNyYy5nZXRQcmV2ZW50RGVmYXVsdCgpKSA/IHJldHVyblRydWUg
OiByZXR1cm5GYWxzZTsKCiAgICAgICAgLy8gRXZlbnQgdHlwZQogICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzcmM7CiAgICAgICAgfQoKICAgICAgICAvLyBQdXQg
ZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAogICAg
ICAgIGlmICggcHJvcHMgKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aGlzLCBw
cm9wcyApOwogICAgICAgIH0KCiAgICAgICAgLy8gdGltZVN0YW1wIGlzIGJ1Z2d5IGZvciBzb21l
IGV2ZW50cyBvbiBGaXJlZm94KCMzODQzKQogICAgICAgIC8vIFNvIHdlIHdvbid0IHJlbHkgb24g
dGhlIG5hdGl2ZSB2YWx1ZQogICAgICAgIHRoaXMudGltZVN0YW1wID0galF1ZXJ5Lm5vdygpOwoK
ICAgICAgICAvLyBNYXJrIGl0IGFzIGZpeGVkCiAgICAgICAgdGhpc1sgalF1ZXJ5LmV4cGFuZG8g
XSA9IHRydWU7Cn07CgpmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKICAgICAgICByZXR1cm4gZmFs
c2U7Cn0KZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKfQoKLy8g
alF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUg
RUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nCi8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
V0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbApq
UXVlcnkuRXZlbnQucHJvdG90eXBlID0gewogICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1
ZTsKCiAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKICAgICAgICAg
ICAgICAgIGlmICggIWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBpZiBwcmV2ZW50RGVmYXVsdCBleGlzdHMg
cnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAogICAgICAgICAgICAgICAgaWYgKCBlLnByZXZl
bnREZWZhdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7
CgogICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCB0aGUgcmV0dXJuVmFsdWUgcHJvcGVy
dHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIGZhbHNlIChJRSkKICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJu
VHJ1ZTsKCiAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKICAgICAg
ICAgICAgICAgIGlmICggIWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIGlmIHN0b3BQcm9wYWdhdGlvbiBleGlz
dHMgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAogICAgICAgICAgICAgICAgaWYgKCBlLnN0
b3BQcm9wYWdhdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRp
b24oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQg
dGhlIGNhbmNlbEJ1YmJsZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gdHJ1ZSAo
SUUpCiAgICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7CiAgICAgICAgfSwKICAg
ICAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CiAgICAg
ICAgICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0sCiAgICAgICAgaXNE
ZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSwKICAgICAgICBpc1Byb3BhZ2F0aW9uU3RvcHBl
ZDogcmV0dXJuRmFsc2UsCiAgICAgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJl
dHVybkZhbHNlCn07CgovLyBDaGVja3MgaWYgYW4gZXZlbnQgaGFwcGVuZWQgb24gYW4gZWxlbWVu
dCB3aXRoaW4gYW5vdGhlciBlbGVtZW50Ci8vIFVzZWQgaW4galF1ZXJ5LmV2ZW50LnNwZWNpYWwu
bW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBoYW5kbGVycwp2YXIgd2l0aGluRWxlbWVudCA9IGZ1
bmN0aW9uKCBldmVudCApIHsKCiAgICAgICAgLy8gQ2hlY2sgaWYgbW91c2Uob3ZlcnxvdXQpIGFy
ZSBzdGlsbCB3aXRoaW4gdGhlIHNhbWUgcGFyZW50IGVsZW1lbnQKICAgICAgICB2YXIgcmVsYXRl
ZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCiAgICAgICAgICAgICAgICBpbnNpZGUgPSBmYWxzZSwK
ICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGU7CgogICAgICAgIGV2ZW50LnR5
cGUgPSBldmVudC5kYXRhOwoKICAgICAgICBpZiAoIHJlbGF0ZWQgIT09IHRoaXMgKSB7CgogICAg
ICAgICAgICAgICAgaWYgKCByZWxhdGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBpbnNp
ZGUgPSBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHJlbGF0ZWQgKTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoICFpbnNpZGUgKSB7CgogICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBldmVudFR5cGU7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQp9LAoKLy8gSW4gY2FzZSBvZiBldmVudCBkZWxlZ2F0aW9uLCB3ZSBvbmx5IG5l
ZWQgdG8gcmVuYW1lIHRoZSBldmVudC50eXBlLAovLyBsaXZlSGFuZGxlciB3aWxsIHRha2UgY2Fy
ZSBvZiB0aGUgcmVzdC4KZGVsZWdhdGUgPSBmdW5jdGlvbiggZXZlbnQgKSB7CiAgICAgICAgZXZl
bnQudHlwZSA9IGV2ZW50LmRhdGE7CiAgICAgICAgalF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSgg
dGhpcywgYXJndW1lbnRzICk7Cn07CgovLyBDcmVhdGUgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2
ZSBldmVudHMKalF1ZXJ5LmVhY2goewogICAgICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAog
ICAgICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIKfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsK
ICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0gewogICAgICAgICAgICAgICAg
c2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQuYWRkKCB0aGlzLCBmaXgsIGRhdGEgJiYgZGF0YS5zZWxlY3RvciA/IGRlbGVnYXRlIDog
d2l0aGluRWxlbWVudCwgb3JpZyApOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAg
IHRlYXJkb3duOiBmdW5jdGlvbiggZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgZml4LCBkYXRhICYmIGRhdGEuc2VsZWN0b3IgPyBkZWxl
Z2F0ZSA6IHdpdGhpbkVsZW1lbnQgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9KTsK
Ci8vIHN1Ym1pdCBkZWxlZ2F0aW9uCmlmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMg
KSB7CgogICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLnN1Ym1pdCA9IHsKICAgICAgICAgICAg
ICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwgbmFtZXNwYWNlcyApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiZm9ybSIgKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKHRoaXMsICJjbGljay5z
cGVjaWFsU3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBdm9pZCB0cmlnZ2VyaW5nIGVycm9yIG9uIG5vbi1leGlzdGVudCB0
eXBlIGF0dHJpYnV0ZSBpbiBJRSBWTUwgKCM3MDcxKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRhcmdldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwg
ImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSA/IGVsZW0udHlw
ZSA6ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKHR5
cGUgPT09ICJzdWJtaXQiIHx8IHR5cGUgPT09ICJpbWFnZSIpICYmIGpRdWVyeSggZWxlbSApLmNs
b3Nlc3QoImZvcm0iKS5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyaWdnZXIoICJzdWJtaXQiLCB0aGlzLCBhcmd1bWVudHMgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmV2ZW50LmFkZCh0aGlzLCAia2V5cHJlc3Muc3BlY2lhbFN1Ym1pdCIsIGZ1bmN0aW9uKCBlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRh
cmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSgg
ZWxlbSwgImJ1dHRvbiIgKSA/IGVsZW0udHlwZSA6ICIiOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggKHR5cGUgPT09ICJ0ZXh0IiB8fCB0eXBlID09PSAicGFz
c3dvcmQiKSAmJiBqUXVlcnkoIGVsZW0gKS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoICYmIGUua2V5
Q29kZSA9PT0gMTMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyaWdnZXIoICJzdWJtaXQiLCB0aGlzLCBhcmd1bWVudHMgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbigg
bmFtZXNwYWNlcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92
ZSggdGhpcywgIi5zcGVjaWFsU3VibWl0IiApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07
Cgp9CgovLyBjaGFuZ2UgZGVsZWdhdGlvbiwgaGFwcGVucyBoZXJlIHNvIHdlIGhhdmUgYmluZC4K
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hhbmdlQnViYmxlcyApIHsKCiAgICAgICAgdmFyIGNoYW5n
ZUZpbHRlcnMsCgogICAgICAgIGdldFZhbCA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgdmFyIHR5cGUgPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSA/IGVsZW0u
dHlwZSA6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbGVtLnZhbHVlOwoKICAg
ICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInJhZGlvIiB8fCB0eXBlID09PSAiY2hlY2tib3gi
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbGVtLmNoZWNrZWQ7CgogICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gInNlbGVjdC1tdWx0aXBsZSIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbCA9IGVsZW0uc2VsZWN0ZWRJbmRleCA+IC0xID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCBlbGVtLm9wdGlvbnMsIGZ1bmN0
aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW0uc2VsZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9p
bigiLSIpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIjsKCiAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJzZWxlY3QiICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGVsZW0uc2VsZWN0ZWRJbmRleDsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0sCgogICAgICAg
IHRlc3RDaGFuZ2UgPSBmdW5jdGlvbiB0ZXN0Q2hhbmdlKCBlICkgewogICAgICAgICAgICAgICAg
dmFyIGVsZW0gPSBlLnRhcmdldCwgZGF0YSwgdmFsOwoKICAgICAgICAgICAgICAgIGlmICggIXJm
b3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8IGVsZW0ucmVhZE9ubHkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBkYXRhID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2NoYW5nZV9kYXRhIiApOwogICAgICAg
ICAgICAgICAgdmFsID0gZ2V0VmFsKGVsZW0pOwoKICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJy
ZW50IGRhdGEgd2lsbCBiZSBhbHNvIHJldHJpZXZlZCBieSBiZWZvcmVhY3RpdmF0ZQogICAgICAg
ICAgICAgICAgaWYgKCBlLnR5cGUgIT09ICJmb2N1c291dCIgfHwgZWxlbS50eXBlICE9PSAicmFk
aW8iICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hh
bmdlX2RhdGEiLCB2YWwgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAo
IGRhdGEgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IGRhdGEgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGRh
dGEgIT0gbnVsbCB8fCB2YWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUudHlwZSA9ICJj
aGFuZ2UiOwogICAgICAgICAgICAgICAgICAgICAgICBlLmxpdmVGaXJlZCA9IHVuZGVmaW5lZDsK
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIGFyZ3VtZW50
c1sxXSwgZWxlbSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGpRdWVy
eS5ldmVudC5zcGVjaWFsLmNoYW5nZSA9IHsKICAgICAgICAgICAgICAgIGZpbHRlcnM6IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZm9jdXNvdXQ6IHRlc3RDaGFuZ2UsCgogICAgICAgICAgICAg
ICAgICAgICAgICBiZWZvcmVkZWFjdGl2YXRlOiB0ZXN0Q2hhbmdlLAoKICAgICAgICAgICAgICAg
ICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQsIHR5cGUgPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0s
ICJpbnB1dCIgKSA/IGVsZW0udHlwZSA6ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHR5cGUgPT09ICJyYWRpbyIgfHwgdHlwZSA9PT0gImNoZWNrYm94IiB8fCBqUXVl
cnkubm9kZU5hbWUoIGVsZW0sICJzZWxlY3QiICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0Q2hhbmdlLmNhbGwoIHRoaXMsIGUgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgaGFzIHRvIGJlIGNhbGxlZCBiZWZvcmUgc3VibWl0
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtleWRvd24gd2lsbCBiZSBjYWxsZWQgYmVmb3Jl
IGtleXByZXNzLCB3aGljaCBpcyB1c2VkIGluIHN1Ym1pdC1ldmVudCBkZWxlZ2F0aW9uCiAgICAg
ICAgICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCBlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQsIHR5cGUgPSBqUXVlcnkubm9k
ZU5hbWUoIGVsZW0sICJpbnB1dCIgKSA/IGVsZW0udHlwZSA6ICIiOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIChlLmtleUNvZGUgPT09IDEzICYmICFqUXVlcnkubm9kZU5h
bWUoIGVsZW0sICJ0ZXh0YXJlYSIgKSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZS5rZXlDb2RlID09PSAzMiAmJiAodHlwZSA9PT0gImNoZWNrYm94IiB8fCB0
eXBlID09PSAicmFkaW8iKSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUgPT09ICJzZWxlY3QtbXVsdGlwbGUiICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdENoYW5nZS5jYWxsKCB0aGlzLCBlICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQmVmb3JlYWN0aXZhdGUgaGFwcGVucyBhbHNvIGJlZm9yZSB0
aGUgcHJldmlvdXMgZWxlbWVudCBpcyBibHVycmVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdpdGggdGhpcyBldmVudCB5b3UgY2FuJ3QgdHJpZ2dlciBhIGNoYW5nZSBldmVudCwgYnV0IHlv
dSBjYW4gc3RvcmUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24KICAgICAg
ICAgICAgICAgICAgICAgICAgYmVmb3JlYWN0aXZhdGU6IGZ1bmN0aW9uKCBlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2NoYW5nZV9kYXRhIiwg
Z2V0VmFsKGVsZW0pICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBkYXRhLCBuYW1lc3BhY2VzICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gImZpbGUiICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHR5cGUgaW4g
Y2hhbmdlRmlsdGVycyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQuYWRkKCB0aGlzLCB0eXBlICsgIi5zcGVjaWFsQ2hhbmdlIiwgY2hhbmdlRmlsdGVyc1t0
eXBlXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbiggbmFtZXNwYWNlcyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5zcGVj
aWFsQ2hhbmdlIiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJmb3JtRWxlbXMu
dGVzdCggdGhpcy5ub2RlTmFtZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CgogICAg
ICAgIGNoYW5nZUZpbHRlcnMgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFuZ2UuZmlsdGVyczsK
CiAgICAgICAgLy8gSGFuZGxlIHdoZW4gdGhlIGlucHV0IGlzIC5mb2N1cygpJ2QKICAgICAgICBj
aGFuZ2VGaWx0ZXJzLmZvY3VzID0gY2hhbmdlRmlsdGVycy5iZWZvcmVhY3RpdmF0ZTsKfQoKZnVu
Y3Rpb24gdHJpZ2dlciggdHlwZSwgZWxlbSwgYXJncyApIHsKICAgICAgICAvLyBQaWdneWJhY2sg
b24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUuCiAgICAgICAgLy8g
RmFrZSBvcmlnaW5hbEV2ZW50IHRvIGF2b2lkIGRvbm9yJ3Mgc3RvcFByb3BhZ2F0aW9uLCBidXQg
aWYgdGhlCiAgICAgICAgLy8gc2ltdWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3
ZSBkbyB0aGUgc2FtZSBvbiB0aGUgZG9ub3IuCiAgICAgICAgLy8gRG9uJ3QgcGFzcyBhcmdzIG9y
IHJlbWVtYmVyIGxpdmVGaXJlZDsgdGhleSBhcHBseSB0byB0aGUgZG9ub3IgZXZlbnQuCiAgICAg
ICAgdmFyIGV2ZW50ID0galF1ZXJ5LmV4dGVuZCgge30sIGFyZ3NbIDAgXSApOwogICAgICAgIGV2
ZW50LnR5cGUgPSB0eXBlOwogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQgPSB7fTsKICAgICAg
ICBldmVudC5saXZlRmlyZWQgPSB1bmRlZmluZWQ7CiAgICAgICAgalF1ZXJ5LmV2ZW50LmhhbmRs
ZS5jYWxsKCBlbGVtLCBldmVudCApOwogICAgICAgIGlmICggZXZlbnQuaXNEZWZhdWx0UHJldmVu
dGVkKCkgKSB7CiAgICAgICAgICAgICAgICBhcmdzWyAwIF0ucHJldmVudERlZmF1bHQoKTsKICAg
ICAgICB9Cn0KCi8vIENyZWF0ZSAiYnViYmxpbmciIGZvY3VzIGFuZCBibHVyIGV2ZW50cwppZiAo
ICFqUXVlcnkuc3VwcG9ydC5mb2N1c2luQnViYmxlcyApIHsKICAgICAgICBqUXVlcnkuZWFjaCh7
IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZp
eCApIHsKCiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRs
ZXIgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0CiAgICAgICAgICAgICAgICB2
YXIgYXR0YWNoZXMgPSAwOwoKICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBm
aXggXSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXR0YWNoZXMrKyA9PT0gMCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAg
IHRlYXJkb3duOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIC0tYXR0YWNoZXMgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVl
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRs
ZXIoIGRvbm9yICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb25vciBldmVudCBpcyBh
bHdheXMgYSBuYXRpdmUgb25lOyBmaXggaXQgYW5kIHN3aXRjaCBpdHMgdHlwZS4KICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTGV0IGZvY3VzaW4vb3V0IGhhbmRsZXIgY2FuY2VsIHRoZSBkb25v
ciBmb2N1cy9ibHVyIGV2ZW50LgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGpRdWVy
eS5ldmVudC5maXgoIGRvbm9yICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGUudHlwZSA9IGZp
eDsKICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50ID0ge307CiAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlLnRhcmdldCAp
OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGUuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9ub3IucHJldmVudERlZmF1bHQoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0pOwp9
CgpqUXVlcnkuZWFjaChbImJpbmQiLCAib25lIl0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewogICAg
ICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHR5cGUsIGRhdGEsIGZuICkgewogICAg
ICAgICAgICAgICAgdmFyIGhhbmRsZXI7CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlIG9iamVj
dCBsaXRlcmFscwogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSA9PT0gIm9iamVjdCIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gdHlwZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBuYW1lIF0oa2V5LCBkYXRhLCB0eXBl
W2tleV0sIGZuKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAo
IGFyZ3VtZW50cy5sZW5ndGggPT09IDIgfHwgZGF0YSA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGZuID0gZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHVu
ZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09
ICJvbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gZnVuY3Rpb24oIGV2
ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnVu
YmluZCggZXZlbnQsIGhhbmRsZXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9OwogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmd1aWQgPSBmbi5ndWlkIHx8IGpR
dWVyeS5ndWlkKys7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVyID0gZm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg
KCB0eXBlID09PSAidW5sb2FkIiAmJiBuYW1lICE9PSAib25lIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5vbmUoIHR5cGUsIGRhdGEsIGZuICk7CgogICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LmFkZCggdGhpc1tpXSwgdHlwZSwgaGFuZGxlciwgZGF0YSApOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgfTsKfSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICB1bmJpbmQ6
IGZ1bmN0aW9uKCB0eXBlLCBmbiApIHsKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBvYmplY3Qg
bGl0ZXJhbHMKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUgPT09ICJvYmplY3QiICYm
ICF0eXBlLnByZXZlbnREZWZhdWx0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2
YXIga2V5IGluIHR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51
bmJpbmQoa2V5LCB0eXBlW2tleV0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpc1tpXSwgdHlwZSwgZm4gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0
b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpdmUo
IHR5cGVzLCBkYXRhLCBmbiwgc2VsZWN0b3IgKTsKICAgICAgICB9LAoKICAgICAgICB1bmRlbGVn
YXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKICAgICAgICAgICAgICAgIGlm
ICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMudW5iaW5kKCAibGl2ZSIgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaWUoIHR5cGVzLCBudWxsLCBmbiwgc2Vs
ZWN0b3IgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICB0cmlnZ2VyOiBm
dW5jdGlvbiggdHlwZSwgZGF0YSApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2Vy
KCB0eXBlLCBkYXRhLCB0aGlzICk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAg
ICAgICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CiAgICAgICAgICAg
ICAgICBpZiAoIHRoaXNbMF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpc1swXSwgdHJ1ZSApOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oIGZuICkgewogICAg
ICAgICAgICAgICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJndW1lbnRzIGZvciBhY2Nlc3MgaW4g
Y2xvc3VyZQogICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKyssCiAgICAgICAgICAg
ICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVyID0gZnVu
Y3Rpb24oIGV2ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpZ3Vy
ZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBsYXN0VG9nZ2xlID0gKCBqUXVlcnkuZGF0YSggdGhpcywgImxhc3RUb2dnbGUi
ICsgZm4uZ3VpZCApIHx8IDAgKSAlIGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmRhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1aWQsIGxhc3RUb2dnbGUgKyAx
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGNs
aWNrcyBzdG9wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGV4ZWN1dGUg
dGhlIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Nb
IGxhc3RUb2dnbGUgXS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgfHwgZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gbGluayBhbGwgdGhlIGZ1bmN0
aW9ucywgc28gYW55IG9mIHRoZW0gY2FuIHVuYmluZCB0aGlzIGNsaWNrIGhhbmRsZXIKICAgICAg
ICAgICAgICAgIHRvZ2dsZXIuZ3VpZCA9IGd1aWQ7CiAgICAgICAgICAgICAgICB3aGlsZSAoIGkg
PCBhcmdzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sgaSsrIF0uZ3Vp
ZCA9IGd1aWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Y2xpY2soIHRvZ2dsZXIgKTsKICAgICAgICB9LAoKICAgICAgICBob3ZlcjogZnVuY3Rpb24oIGZu
T3ZlciwgZm5PdXQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBm
bk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsKICAgICAgICB9Cn0pOwoKdmFy
IGxpdmVNYXAgPSB7CiAgICAgICAgZm9jdXM6ICJmb2N1c2luIiwKICAgICAgICBibHVyOiAiZm9j
dXNvdXQiLAogICAgICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAogICAgICAgIG1vdXNlbGVh
dmU6ICJtb3VzZW91dCIKfTsKCmpRdWVyeS5lYWNoKFsibGl2ZSIsICJkaWUiXSwgZnVuY3Rpb24o
IGksIG5hbWUgKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdHlwZXMs
IGRhdGEsIGZuLCBvcmlnU2VsZWN0b3IgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CiAgICAg
ICAgICAgICAgICB2YXIgdHlwZSwgaSA9IDAsIG1hdGNoLCBuYW1lc3BhY2VzLCBwcmVUeXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IG9yaWdTZWxlY3RvciB8fCB0aGlzLnNl
bGVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gb3JpZ1NlbGVjdG9yID8g
dGhpcyA6IGpRdWVyeSggdGhpcy5jb250ZXh0ICk7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBl
b2YgdHlwZXMgPT09ICJvYmplY3QiICYmICF0eXBlcy5wcmV2ZW50RGVmYXVsdCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiB0eXBlcyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0WyBuYW1lIF0oIGtleSwgZGF0YSwgdHlwZXNba2V5
XSwgc2VsZWN0b3IgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
aWYgKCBuYW1lID09PSAiZGllIiAmJiAhdHlwZXMgJiYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9yaWdTZWxlY3RvciAmJiBvcmlnU2VsZWN0b3IuY2hhckF0KDApID09
PSAiLiIgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnVuYmluZCggb3JpZ1Nl
bGVjdG9yICk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09IGZhbHNlIHx8IGpRdWVyeS5p
c0Z1bmN0aW9uKCBkYXRhICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZGF0YSB8
fCByZXR1cm5GYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0eXBlcyA9ICh0eXBlcyB8fCAiIiku
c3BsaXQoIiAiKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoICh0eXBlID0gdHlwZXNbIGkrKyBd
KSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJuYW1lc3BhY2Vz
LmV4ZWMoIHR5cGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9ICIiOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCApICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IG1hdGNoWzBdOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSB0eXBlLnJlcGxhY2UoIHJuYW1lc3BhY2VzLCAiIiApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUg
PT09ICJob3ZlciIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMucHVz
aCggIm1vdXNlZW50ZXIiICsgbmFtZXNwYWNlcywgIm1vdXNlbGVhdmUiICsgbmFtZXNwYWNlcyAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBwcmVUeXBlID0gdHlwZTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbGl2ZU1hcFsgdHlwZSBdICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goIGxpdmVNYXBbIHR5cGUgXSArIG5hbWVz
cGFjZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSArIG5h
bWVzcGFjZXM7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSAobGl2ZU1hcFsgdHlwZSBdIHx8IHR5cGUpICsgbmFt
ZXNwYWNlczsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBuYW1lID09PSAibGl2ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYmluZCBsaXZlIGhhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaiA9IDAsIGwgPSBjb250ZXh0Lmxlbmd0aDsgaiA8IGw7IGorKyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGNvbnRl
eHRbal0sICJsaXZlLiIgKyBsaXZlQ29udmVydCggdHlwZSwgc2VsZWN0b3IgKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkYXRhOiBkYXRhLCBzZWxl
Y3Rvcjogc2VsZWN0b3IsIGhhbmRsZXI6IGZuLCBvcmlnVHlwZTogdHlwZSwgb3JpZ0hhbmRsZXI6
IGZuLCBwcmVUeXBlOiBwcmVUeXBlIH0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHVuYmluZCBsaXZlIGhhbmRsZXIKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnVuYmluZCggImxpdmUuIiArIGxpdmVDb252ZXJ0KCB0eXBlLCBz
ZWxlY3RvciApLCBmbiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfTsKfSk7CgpmdW5jdGlv
biBsaXZlSGFuZGxlciggZXZlbnQgKSB7CiAgICAgICAgdmFyIHN0b3AsIG1heExldmVsLCByZWxh
dGVkLCBtYXRjaCwgaGFuZGxlT2JqLCBlbGVtLCBqLCBpLCBsLCBkYXRhLCBjbG9zZSwgbmFtZXNw
YWNlLCByZXQsCiAgICAgICAgICAgICAgICBlbGVtcyA9IFtdLAogICAgICAgICAgICAgICAgc2Vs
ZWN0b3JzID0gW10sCiAgICAgICAgICAgICAgICBldmVudHMgPSBqUXVlcnkuX2RhdGEoIHRoaXMs
ICJldmVudHMiICk7CgogICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBhdm9pZCBub24tbGVmdC1jbGlj
ayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkgYW5kIGRpc2FibGVkIGVsZW1lbnRzIGluIElF
ICgjNjkxMSkKICAgICAgICBpZiAoIGV2ZW50LmxpdmVGaXJlZCA9PT0gdGhpcyB8fCAhZXZlbnRz
IHx8ICFldmVudHMubGl2ZSB8fCBldmVudC50YXJnZXQuZGlzYWJsZWQgfHwgZXZlbnQuYnV0dG9u
ICYmIGV2ZW50LnR5cGUgPT09ICJjbGljayIgKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgfQoKICAgICAgICBpZiAoIGV2ZW50Lm5hbWVzcGFjZSApIHsKICAgICAgICAgICAgICAg
IG5hbWVzcGFjZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsgZXZlbnQubmFtZXNwYWNlLnNwbGl0
KCIuIikuam9pbigiXFwuKD86LipcXC4pPyIpICsgIihcXC58JCkiKTsKICAgICAgICB9CgogICAg
ICAgIGV2ZW50LmxpdmVGaXJlZCA9IHRoaXM7CgogICAgICAgIHZhciBsaXZlID0gZXZlbnRzLmxp
dmUuc2xpY2UoMCk7CgogICAgICAgIGZvciAoIGogPSAwOyBqIDwgbGl2ZS5sZW5ndGg7IGorKyAp
IHsKICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGxpdmVbal07CgogICAgICAgICAgICAgICAg
aWYgKCBoYW5kbGVPYmoub3JpZ1R5cGUucmVwbGFjZSggcm5hbWVzcGFjZXMsICIiICkgPT09IGV2
ZW50LnR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5wdXNoKCBoYW5k
bGVPYmouc2VsZWN0b3IgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICBsaXZlLnNwbGljZSggai0tLCAxICk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgfQoKICAgICAgICBtYXRjaCA9IGpRdWVyeSggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggc2Vs
ZWN0b3JzLCBldmVudC5jdXJyZW50VGFyZ2V0ICk7CgogICAgICAgIGZvciAoIGkgPSAwLCBsID0g
bWF0Y2gubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgY2xvc2UgPSBtYXRj
aFtpXTsKCiAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGxpdmUubGVuZ3RoOyBqKysg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGxpdmVbal07CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGNsb3NlLnNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0
b3IgJiYgKCFuYW1lc3BhY2UgfHwgbmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2Ug
KSkgJiYgIWNsb3NlLmVsZW0uZGlzYWJsZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbSA9IGNsb3NlLmVsZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVsYXRlZCA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRob3Nl
IHR3byBldmVudHMgcmVxdWlyZSBhZGRpdGlvbmFsIGNoZWNraW5nCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVPYmoucHJlVHlwZSA9PT0gIm1vdXNlZW50ZXIiIHx8
IGhhbmRsZU9iai5wcmVUeXBlID09PSAibW91c2VsZWF2ZSIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLnByZVR5cGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkID0galF1ZXJ5KCBl
dmVudC5yZWxhdGVkVGFyZ2V0ICkuY2xvc2VzdCggaGFuZGxlT2JqLnNlbGVjdG9yIClbMF07Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG5vdCB0
byBhY2NpZGVudGFsbHkgbWF0Y2ggYSBjaGlsZCBlbGVtZW50IHdpdGggdGhlIHNhbWUgc2VsZWN0
b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVsYXRlZCAm
JiBqUXVlcnkuY29udGFpbnMoIGVsZW0sIHJlbGF0ZWQgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCA9IGVsZW07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZWxhdGVkIHx8
IHJlbGF0ZWQgIT09IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtcy5wdXNoKHsgZWxlbTogZWxlbSwgaGFuZGxlT2JqOiBoYW5kbGVPYmosIGxldmVs
OiBjbG9zZS5sZXZlbCB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IGZvciAoIGkgPSAwLCBsID0gZWxlbXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAg
ICAgICAgbWF0Y2ggPSBlbGVtc1tpXTsKCiAgICAgICAgICAgICAgICBpZiAoIG1heExldmVsICYm
IG1hdGNoLmxldmVsID4gbWF4TGV2ZWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQg
PSBtYXRjaC5lbGVtOwogICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IG1hdGNoLmhhbmRsZU9i
ai5kYXRhOwogICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlT2JqID0gbWF0Y2guaGFuZGxlT2Jq
OwoKICAgICAgICAgICAgICAgIHJldCA9IG1hdGNoLmhhbmRsZU9iai5vcmlnSGFuZGxlci5hcHBs
eSggbWF0Y2guZWxlbSwgYXJndW1lbnRzICk7CgogICAgICAgICAgICAgICAgaWYgKCByZXQgPT09
IGZhbHNlIHx8IGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIG1heExldmVsID0gbWF0Y2gubGV2ZWw7CgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHJldCA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0b3A7Cn0K
CmZ1bmN0aW9uIGxpdmVDb252ZXJ0KCB0eXBlLCBzZWxlY3RvciApIHsKICAgICAgICByZXR1cm4g
KHR5cGUgJiYgdHlwZSAhPT0gIioiID8gdHlwZSArICIuIiA6ICIiKSArIHNlbGVjdG9yLnJlcGxh
Y2UocnBlcmlvZCwgImAiKS5yZXBsYWNlKHJzcGFjZXMsICImIik7Cn0KCmpRdWVyeS5lYWNoKCAo
ImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNs
aWNrIGRibGNsaWNrICIgKwogICAgICAgICJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91
c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKICAgICAgICAiY2hhbmdl
IHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciIpLnNwbGl0KCIgIiks
IGZ1bmN0aW9uKCBpLCBuYW1lICkgewoKICAgICAgICAvLyBIYW5kbGUgZXZlbnQgYmluZGluZwog
ICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgewogICAgICAg
ICAgICAgICAgaWYgKCBmbiA9PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICBmbiA9
IGRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBudWxsOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZCggbmFtZSwgZGF0YSwgZm4gKSA6CiAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlciggbmFtZSApOwogICAgICAgIH07CgogICAgICAg
IGlmICggalF1ZXJ5LmF0dHJGbiApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRyRm5bIG5h
bWUgXSA9IHRydWU7CiAgICAgICAgfQp9KTsKCgoKLyohCiAqIFNpenpsZSBDU1MgU2VsZWN0b3Ig
RW5naW5lCiAqICBDb3B5cmlnaHQgMjAxMSwgVGhlIERvam8gRm91bmRhdGlvbgogKiAgUmVsZWFz
ZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgogKiAgTW9yZSBpbmZvcm1h
dGlvbjogaHR0cDovL3NpenpsZWpzLmNvbS8KICovCihmdW5jdGlvbigpewoKdmFyIGNodW5rZXIg
PSAvKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1b
XiciXSpbJyJdfFteXFtcXSciXSspK1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyos
XHMqKT8oKD86LnxccnxcbikqKS9nLAogICAgICAgIGRvbmUgPSAwLAogICAgICAgIHRvU3RyaW5n
ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKICAgICAgICBoYXNEdXBsaWNhdGUgPSBmYWxz
ZSwKICAgICAgICBiYXNlSGFzRHVwbGljYXRlID0gdHJ1ZSwKICAgICAgICByQmFja3NsYXNoID0g
L1xcL2csCiAgICAgICAgck5vbldvcmQgPSAvXFcvOwoKLy8gSGVyZSB3ZSBjaGVjayBpZiB0aGUg
SmF2YVNjcmlwdCBlbmdpbmUgaXMgdXNpbmcgc29tZSBzb3J0IG9mCi8vIG9wdGltaXphdGlvbiB3
aGVyZSBpdCBkb2VzIG5vdCBhbHdheXMgY2FsbCBvdXIgY29tcGFyaXNpb24KLy8gZnVuY3Rpb24u
IElmIHRoYXQgaXMgdGhlIGNhc2UsIGRpc2NhcmQgdGhlIGhhc0R1cGxpY2F0ZSB2YWx1ZS4KLy8g
ICBUaHVzIGZhciB0aGF0IGluY2x1ZGVzIEdvb2dsZSBDaHJvbWUuClswLCAwXS5zb3J0KGZ1bmN0
aW9uKCkgewogICAgICAgIGJhc2VIYXNEdXBsaWNhdGUgPSBmYWxzZTsKICAgICAgICByZXR1cm4g
MDsKfSk7Cgp2YXIgU2l6emxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRz
LCBzZWVkICkgewogICAgICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOwogICAgICAgIGNvbnRl
eHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwoKICAgICAgICB2YXIgb3JpZ0NvbnRleHQgPSBjb250
ZXh0OwoKICAgICAgICBpZiAoIGNvbnRleHQubm9kZVR5cGUgIT09IDEgJiYgY29udGV4dC5ub2Rl
VHlwZSAhPT0gOSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CiAgICAg
ICAgCiAgICAgICAgaWYgKCAhc2VsZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5n
IiApIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgICAgIH0KCiAgICAgICAg
dmFyIG0sIHNldCwgY2hlY2tTZXQsIGV4dHJhLCByZXQsIGN1ciwgcG9wLCBpLAogICAgICAgICAg
ICAgICAgcHJ1bmUgPSB0cnVlLAogICAgICAgICAgICAgICAgY29udGV4dFhNTCA9IFNpenpsZS5p
c1hNTCggY29udGV4dCApLAogICAgICAgICAgICAgICAgcGFydHMgPSBbXSwKICAgICAgICAgICAg
ICAgIHNvRmFyID0gc2VsZWN0b3I7CiAgICAgICAgCiAgICAgICAgLy8gUmVzZXQgdGhlIHBvc2l0
aW9uIG9mIHRoZSBjaHVua2VyIHJlZ2V4cCAoc3RhcnQgZnJvbSBoZWFkKQogICAgICAgIGRvIHsK
ICAgICAgICAgICAgICAgIGNodW5rZXIuZXhlYyggIiIgKTsKICAgICAgICAgICAgICAgIG0gPSBj
aHVua2VyLmV4ZWMoIHNvRmFyICk7CgogICAgICAgICAgICAgICAgaWYgKCBtICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBzb0ZhciA9IG1bM107CiAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgcGFydHMucHVzaCggbVsxXSApOwogICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbVsyXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYSA9IG1bM107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9
IHdoaWxlICggbSApOwoKICAgICAgICBpZiAoIHBhcnRzLmxlbmd0aCA+IDEgJiYgb3JpZ1BPUy5l
eGVjKCBzZWxlY3RvciApICkgewoKICAgICAgICAgICAgICAgIGlmICggcGFydHMubGVuZ3RoID09
PSAyICYmIEV4cHIucmVsYXRpdmVbIHBhcnRzWzBdIF0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHNldCA9IHBvc1Byb2Nlc3MoIHBhcnRzWzBdICsgcGFydHNbMV0sIGNvbnRleHQgKTsKCiAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBFeHBy
LnJlbGF0aXZlWyBwYXJ0c1swXSBdID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
IGNvbnRleHQgXSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlKCBwYXJ0
cy5zaGlmdCgpLCBjb250ZXh0ICk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHBh
cnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9
IHBhcnRzLnNoaWZ0KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggRXhw
ci5yZWxhdGl2ZVsgc2VsZWN0b3IgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdG9yICs9IHBhcnRzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldCA9IHBvc1Byb2Nlc3MoIHNlbGVjdG9yLCBzZXQgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgLy8gVGFrZSBhIHNob3J0Y3V0IGFuZCBzZXQgdGhlIGNvbnRl
eHQgaWYgdGhlIHJvb3Qgc2VsZWN0b3IgaXMgYW4gSUQKICAgICAgICAgICAgICAgIC8vIChidXQg
bm90IGlmIGl0J2xsIGJlIGZhc3RlciBpZiB0aGUgaW5uZXIgc2VsZWN0b3IgaXMgYW4gSUQpCiAg
ICAgICAgICAgICAgICBpZiAoICFzZWVkICYmIHBhcnRzLmxlbmd0aCA+IDEgJiYgY29udGV4dC5u
b2RlVHlwZSA9PT0gOSAmJiAhY29udGV4dFhNTCAmJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEV4cHIubWF0Y2guSUQudGVzdChwYXJ0c1swXSkgJiYgIUV4cHIubWF0Y2guSUQudGVz
dChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBy
ZXQgPSBTaXp6bGUuZmluZCggcGFydHMuc2hpZnQoKSwgY29udGV4dCwgY29udGV4dFhNTCApOwog
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gcmV0LmV4cHIgPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNpenpsZS5maWx0ZXIoIHJldC5leHByLCByZXQuc2V0IClbMF0g
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zZXRbMF07CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSBzZWVkID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGV4
cHI6IHBhcnRzLnBvcCgpLCBzZXQ6IG1ha2VBcnJheShzZWVkKSB9IDoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaXp6bGUuZmluZCggcGFydHMucG9wKCksIHBhcnRzLmxlbmd0aCA9
PT0gMSAmJiAocGFydHNbMF0gPT09ICJ+IiB8fCBwYXJ0c1swXSA9PT0gIisiKSAmJiBjb250ZXh0
LnBhcmVudE5vZGUgPyBjb250ZXh0LnBhcmVudE5vZGUgOiBjb250ZXh0LCBjb250ZXh0WE1MICk7
CgogICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSByZXQuZXhwciA/CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQgKSA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNldDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcGFydHMubGVuZ3RoID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1NldCA9IG1ha2VBcnJheSggc2V0ICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggcGFydHMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1
ciA9IHBhcnRzLnBvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcCA9IGN1
cjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhRXhwci5yZWxhdGl2ZVsg
Y3VyIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSAi
IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gcGFydHMucG9wKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHBvcCA9PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9wID0gY29udGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHIucmVsYXRpdmVbIGN1ciBdKCBjaGVja1Nl
dCwgcG9wLCBjb250ZXh0WE1MICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldCA9IHBhcnRz
ID0gW107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICFjaGVja1Nl
dCApIHsKICAgICAgICAgICAgICAgIGNoZWNrU2V0ID0gc2V0OwogICAgICAgIH0KCiAgICAgICAg
aWYgKCAhY2hlY2tTZXQgKSB7CiAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIGN1ciB8fCBz
ZWxlY3RvciApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCB0b1N0cmluZy5jYWxsKGNoZWNrU2V0
KSA9PT0gIltvYmplY3QgQXJyYXldIiApIHsKICAgICAgICAgICAgICAgIGlmICggIXBydW5lICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMsIGNo
ZWNrU2V0ICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29udGV4dCAmJiBjb250ZXh0
Lm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsg
Y2hlY2tTZXRbaV0gIT0gbnVsbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY2hlY2tTZXRbaV0gJiYgKGNoZWNrU2V0W2ldID09PSB0cnVlIHx8IGNoZWNrU2V0
W2ldLm5vZGVUeXBlID09PSAxICYmIFNpenpsZS5jb250YWlucyhjb250ZXh0LCBjaGVja1NldFtp
XSkpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5w
dXNoKCBzZXRbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBpID0gMDsgY2hlY2tTZXRbaV0gIT0gbnVsbDsgaSsrICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tTZXRbaV0gJiYgY2hlY2tTZXRb
aV0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHRzLnB1c2goIHNldFtpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgbWFrZUFycmF5KCBjaGVja1NldCwgcmVzdWx0cyAp
OwogICAgICAgIH0KCiAgICAgICAgaWYgKCBleHRyYSApIHsKICAgICAgICAgICAgICAgIFNpenps
ZSggZXh0cmEsIG9yaWdDb250ZXh0LCByZXN1bHRzLCBzZWVkICk7CiAgICAgICAgICAgICAgICBT
aXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJl
c3VsdHM7Cn07CgpTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgewogICAg
ICAgIGlmICggc29ydE9yZGVyICkgewogICAgICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gYmFz
ZUhhc0R1cGxpY2F0ZTsKICAgICAgICAgICAgICAgIHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7
CgogICAgICAgICAgICAgICAgaWYgKCBoYXNEdXBsaWNhdGUgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKysgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRzW2ldID09PSByZXN1bHRzWyBp
IC0gMSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
cy5zcGxpY2UoIGktLSwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7Cn07CgpTaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBz
ZXQgKSB7CiAgICAgICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgc2V0ICk7Cn07
CgpTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIG5vZGUsIGV4cHIgKSB7CiAgICAg
ICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgW25vZGVdICkubGVuZ3RoID4gMDsK
fTsKClNpenpsZS5maW5kID0gZnVuY3Rpb24oIGV4cHIsIGNvbnRleHQsIGlzWE1MICkgewogICAg
ICAgIHZhciBzZXQ7CgogICAgICAgIGlmICggIWV4cHIgKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4gW107CiAgICAgICAgfQoKICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBFeHByLm9yZGVy
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaCwKICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IEV4cHIub3JkZXJbaV07CiAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgIGlmICggKG1hdGNoID0gRXhwci5sZWZ0TWF0Y2hbIHR5cGUgXS5leGVj
KCBleHByICkpICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IG1hdGNoWzFd
OwogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC5zcGxpY2UoIDEsIDEgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbGVmdC5zdWJzdHIoIGxlZnQubGVuZ3RoIC0gMSApICE9PSAi
XFwiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzFdID0gKG1hdGNo
WzFdIHx8ICIiKS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldCA9IEV4cHIuZmluZFsgdHlwZSBdKCBtYXRjaCwgY29udGV4dCwgaXNY
TUwgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZXQgIT0gbnVsbCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJl
cGxhY2UoIEV4cHIubWF0Y2hbIHR5cGUgXSwgIiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAg
ICAgICAgaWYgKCAhc2V0ICkgewogICAgICAgICAgICAgICAgc2V0ID0gdHlwZW9mIGNvbnRleHQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiID8KICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICkgOgogICAgICAgICAgICAg
ICAgICAgICAgICBbXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB7IHNldDogc2V0LCBleHBy
OiBleHByIH07Cn07CgpTaXp6bGUuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIHNldCwgaW5wbGFj
ZSwgbm90ICkgewogICAgICAgIHZhciBtYXRjaCwgYW55Rm91bmQsCiAgICAgICAgICAgICAgICBv
bGQgPSBleHByLAogICAgICAgICAgICAgICAgcmVzdWx0ID0gW10sCiAgICAgICAgICAgICAgICBj
dXJMb29wID0gc2V0LAogICAgICAgICAgICAgICAgaXNYTUxGaWx0ZXIgPSBzZXQgJiYgc2V0WzBd
ICYmIFNpenpsZS5pc1hNTCggc2V0WzBdICk7CgogICAgICAgIHdoaWxlICggZXhwciAmJiBzZXQu
bGVuZ3RoICkgewogICAgICAgICAgICAgICAgZm9yICggdmFyIHR5cGUgaW4gRXhwci5maWx0ZXIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKG1hdGNoID0gRXhwci5sZWZ0TWF0Y2hb
IHR5cGUgXS5leGVjKCBleHByICkpICE9IG51bGwgJiYgbWF0Y2hbMl0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kLCBpdGVtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gRXhwci5maWx0ZXJbIHR5cGUgXSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtYXRjaFsxXTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55Rm91bmQgPSBmYWxzZTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2guc3BsaWNlKDEsMSk7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbGVmdC5zdWJzdHIoIGxlZnQubGVuZ3RoIC0gMSApID09PSAi
XFwiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGN1ckxvb3AgPT09IHJlc3VsdCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHByLnBy
ZUZpbHRlclsgdHlwZSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSBFeHByLnByZUZpbHRlclsgdHlwZSBdKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFj
ZSwgcmVzdWx0LCBub3QsIGlzWE1MRmlsdGVyICk7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFueUZvdW5kID0gZm91bmQgPSB0cnVlOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGNoID09PSB0cnVl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDA7IChpdGVtID0gY3VyTG9vcFtpXSkgIT0gbnVsbDsgaSsrICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGl0ZW0gKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSBmaWx0ZXIoIGl0ZW0sIG1hdGNoLCBpLCBjdXJMb29wICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhc3MgPSBub3Qg
XiAhIWZvdW5kOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGlucGxhY2UgJiYgZm91bmQgIT0gbnVsbCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cGFzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYW55Rm91bmQgPSB0cnVlOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1ckxvb3BbaV0gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
cGFzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCBpdGVtICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZv
dW5kICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFpbnBsYWNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJMb29wID0gcmVzdWx0OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cHIgPSBleHByLnJlcGxhY2UoIEV4cHIubWF0Y2hbIHR5cGUgXSwgIiIgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFhbnlGb3VuZCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIC8vIEltcHJvcGVyIGV4cHJlc3Npb24KICAgICAgICAgICAgICAgIGlmICggZXhw
ciA9PT0gb2xkICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFueUZvdW5kID09IG51
bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBleHBy
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgb2xkID0gZXhwcjsKICAgICAgICB9CgogICAgICAgIHJl
dHVybiBjdXJMb29wOwp9OwoKU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHsKICAgICAg
ICB0aHJvdyAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZzsK
fTsKCnZhciBFeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHsKICAgICAgICBvcmRlcjogWyAiSUQi
LCAiTkFNRSIsICJUQUciIF0sCgogICAgICAgIG1hdGNoOiB7CiAgICAgICAgICAgICAgICBJRDog
LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAogICAgICAgICAgICAgICAgQ0xBU1M6
IC9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sCiAgICAgICAgICAgICAgICBOQU1F
OiAvXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sCiAg
ICAgICAgICAgICAgICBBVFRSOiAvXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylc
cyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18
XFwuKSopfCl8KVxzKlxdLywKICAgICAgICAgICAgICAgIFRBRzogL14oKD86W1x3XHUwMGMwLVx1
RkZGRlwqXC1dfFxcLikrKS8sCiAgICAgICAgICAgICAgICBDSElMRDogLzoob25seXxudGh8bGFz
dHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQq
KT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sCiAgICAgICAgICAgICAgICBQT1M6IC86
KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18
JCkvLAogICAgICAgICAgICAgICAgUFNFVURPOiAvOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxc
LikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/LwogICAgICAg
IH0sCgogICAgICAgIGxlZnRNYXRjaDoge30sCgogICAgICAgIGF0dHJNYXA6IHsKICAgICAgICAg
ICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUiLAogICAgICAgICAgICAgICAgImZvciI6ICJodG1s
Rm9yIgogICAgICAgIH0sCgogICAgICAgIGF0dHJIYW5kbGU6IHsKICAgICAgICAgICAgICAgIGhy
ZWY6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bS5nZXRBdHRyaWJ1dGUoICJocmVmIiApOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAg
ICAgIHR5cGU6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJ0eXBlIiApOwogICAgICAgICAgICAgICAgfQogICAgICAg
IH0sCgogICAgICAgIHJlbGF0aXZlOiB7CiAgICAgICAgICAgICAgICAiKyI6IGZ1bmN0aW9uKGNo
ZWNrU2V0LCBwYXJ0KXsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUGFydFN0ciA9IHR5
cGVvZiBwYXJ0ID09PSAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c1RhZyA9IGlzUGFydFN0ciAmJiAhck5vbldvcmQudGVzdCggcGFydCApLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzUGFydFN0ck5vdFRhZyA9IGlzUGFydFN0ciAmJiAhaXNUYWc7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzVGFnICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9
IGNoZWNrU2V0Lmxlbmd0aCwgZWxlbTsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIChlbGVtID0gY2hlY2tTZXRbaV0pICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW0ucHJldmlvdXNT
aWJsaW5nKSAmJiBlbGVtLm5vZGVUeXBlICE9PSAxICkge30KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IGlzUGFydFN0ck5vdFRhZyB8fCBlbGVt
ICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGFydCA/CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gfHwgZmFsc2UgOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID09PSBwYXJ0Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1BhcnRTdHJOb3RUYWcgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcGFydCwgY2hlY2tTZXQs
IHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAg
ICAgICAgICAgICAgICAiPiI6IGZ1bmN0aW9uKCBjaGVja1NldCwgcGFydCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBj
aGVja1NldC5sZW5ndGg7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzUGFydFN0ciAm
JiAhck5vbldvcmQudGVzdCggcGFydCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0gPSBjaGVja1NldFtpXTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0W2ldID0g
cGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBhcnQgPyBwYXJlbnQgOiBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjaGVja1NldFtpXTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2V0W2ldID0g
aXNQYXJ0U3RyID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZSA9PT0gcGFydDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNQ
YXJ0U3RyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxl
LmZpbHRlciggcGFydCwgY2hlY2tTZXQsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCgog
ICAgICAgICAgICAgICAgIiI6IGZ1bmN0aW9uKGNoZWNrU2V0LCBwYXJ0LCBpc1hNTCl7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBub2RlQ2hlY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9uZU5hbWUgPSBkb25lKyssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hlY2tGbiA9IGRpckNoZWNrOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBl
b2YgcGFydCA9PT0gInN0cmluZyIgJiYgIXJOb25Xb3JkLnRlc3QoIHBhcnQgKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVDaGVjayA9IHBhcnQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbiA9IGRpck5vZGVDaGVjazsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGbiggInBhcmVudE5v
ZGUiLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKTsKICAgICAg
ICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIn4iOiBmdW5jdGlvbiggY2hlY2tTZXQsIHBh
cnQsIGlzWE1MICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZUNoZWNrLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVOYW1lID0gZG9uZSsrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm4gPSBkaXJDaGVjazsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50ZXN0
KCBwYXJ0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQu
dG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlQ2hlY2sg
PSBwYXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm4gPSBkaXJOb2Rl
Q2hlY2s7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IGNoZWNrRm4oICJwcmV2aW91c1NpYmxpbmciLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQsIG5v
ZGVDaGVjaywgaXNYTUwgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBm
aW5kOiB7CiAgICAgICAgICAgICAgICBJRDogZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0LCBpc1hN
TCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVt
ZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChtYXRjaFsxXSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRj
aCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8g
W21dIDogW107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCgog
ICAgICAgICAgICAgICAgTkFNRTogZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lICE9
PSAidW5kZWZpbmVkIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0
ID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0g
Y29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggbWF0Y2hbMV0gKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gcmVzdWx0cy5sZW5ndGg7IGkgPCBs
OyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJl
c3VsdHNbaV0uZ2V0QXR0cmlidXRlKCJuYW1lIikgPT09IG1hdGNoWzFdICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggcmVzdWx0c1tp
XSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJldC5sZW5ndGggPT09IDAgPyBudWxsIDogcmV0OwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIFRBRzogZnVuY3Rpb24o
IG1hdGNoLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBj
b250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSggbWF0Y2hbMV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgIH0sCiAgICAgICAgcHJlRmlsdGVyOiB7CiAgICAgICAgICAgICAgICBDTEFTUzog
ZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCwgaXNYTUwgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gIiAiICsgbWF0Y2hbMV0ucmVwbGFjZSgg
ckJhY2tzbGFzaCwgIiIgKSArICIgIjsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNY
TUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGVsZW07IChlbGVtID0gY3VyTG9vcFtpXSkgIT0gbnVsbDsgaSsrICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbm90IF4gKGVsZW0uY2xhc3NOYW1lICYmICgiICIg
KyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSgvW1x0XG5ccl0vZywgIiAiKS5pbmRleE9m
KG1hdGNoKSA+PSAwKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaW5wbGFjZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCggZWxlbSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaW5wbGFjZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTG9vcFtpXSA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAg
ICAgICAgICBJRDogZnVuY3Rpb24oIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2hbMV0ucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsKICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNo
LCAiIiApLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAg
IENISUxEOiBmdW5jdGlvbiggbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bWF0Y2hbMV0gPT09ICJudGgiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIW1hdGNoWzJdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2l6emxlLmVycm9yKCBtYXRjaFswXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBtYXRjaFsyXS5y
ZXBsYWNlKC9eXCt8XHMqL2csICcnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gcGFyc2UgZXF1YXRpb25zIGxpa2UgJ2V2ZW4nLCAnb2RkJywgJzUnLCAnMm4nLCAnM24rMics
ICc0bi0xJywgJy1uKzYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3Qg
PSAvKC0/KShcZCopKD86bihbK1wtXT9cZCopKT8vLmV4ZWMoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9PT0gImV2ZW4iICYmICIybiIgfHwgbWF0Y2hb
Ml0gPT09ICJvZGQiICYmICIybisxIiB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIS9cRC8udGVzdCggbWF0Y2hbMl0gKSAmJiAiMG4rIiArIG1hdGNoWzJdIHx8IG1h
dGNoWzJdKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRo
ZSBudW1iZXJzIChmaXJzdCluKyhsYXN0KSBpbmNsdWRpbmcgaWYgdGhleSBhcmUgbmVnYXRpdmUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9ICh0ZXN0WzFdICsgKHRl
c3RbMl0gfHwgMSkpIC0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsz
XSA9IHRlc3RbM10gLSAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdG8gbm9ybWFsIGNhY2hp
bmcgc3lzdGVtCiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0gZG9uZSsrOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICAgICAgICAgfSwKCiAg
ICAgICAgICAgICAgICBBVFRSOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJl
c3VsdCwgbm90LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBt
YXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc1hNTCAmJiBFeHBy
LmF0dHJNYXBbbmFtZV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hb
MV0gPSBFeHByLmF0dHJNYXBbbmFtZV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBpZiBhbiB1bi1xdW90ZWQgdmFsdWUgd2FzIHVz
ZWQKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbNF0gPSAoIG1hdGNoWzRdIHx8IG1hdGNo
WzVdIHx8ICIiICkucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hbNF0gPSAiICIgKyBtYXRjaFs0XSArICIgIjsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAg
ICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBQU0VVRE86IGZ1bmN0aW9uKCBtYXRjaCwgY3Vy
TG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggbWF0Y2hbMV0gPT09ICJub3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvbXBsZXggZXhwcmVzc2lvbiwgb3IgYSBzaW1w
bGUgb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIGNodW5rZXIuZXhl
YyhtYXRjaFszXSkgfHwgIiIgKS5sZW5ndGggPiAxIHx8IC9eXHcvLnRlc3QobWF0Y2hbM10pICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbM10gPSBTaXp6
bGUobWF0Y2hbM10sIG51bGwsIG51bGwsIGN1ckxvb3ApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHJldCA9IFNpenpsZS5maWx0ZXIobWF0Y2hbM10sIGN1ckxvb3AsIGlucGxhY2UsIHRy
dWUgXiBub3QpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWlucGxhY2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5wdXNoLmFwcGx5KCByZXN1bHQsIHJldCApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBFeHByLm1hdGNoLlBPUy50ZXN0KCBt
YXRjaFswXSApIHx8IEV4cHIubWF0Y2guQ0hJTEQudGVzdCggbWF0Y2hbMF0gKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBQT1M6IGZ1
bmN0aW9uKCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2gudW5zaGlmdCgg
dHJ1ZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAg
ICAgICAgZW5hYmxlZDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSAmJiBlbGVtLnR5cGUgIT09ICJoaWRkZW4i
OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24o
IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09
PSB0cnVlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBjaGVja2VkOiBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uY2hlY2tl
ZCA9PT0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgIHNlbGVjdGVkOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4Owog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgcGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhZWxlbS5maXJzdENoaWxkOwogICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAhZWxlbS5maXJzdENoaWxkOwogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhU2l6emxlKCBtYXRjaFszXSwgZWxlbSAp
Lmxlbmd0aDsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGVhZGVyOiBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgvaFxkL2kpLnRl
c3QoIGVsZW0ubm9kZU5hbWUgKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAg
dGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRy
ID0gZWxlbS5nZXRBdHRyaWJ1dGUoICJ0eXBlIiApLCB0eXBlID0gZWxlbS50eXBlOwogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJRTYgYW5kIDcgd2lsbCBtYXAgZWxlbS50eXBlIHRvICd0ZXh0
JyBmb3IgbmV3IEhUTUw1IHR5cGVzIChzZWFyY2gsIGV0YykgCiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0IHRoaXMgY2FzZQogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAi
aW5wdXQiICYmICJ0ZXh0IiA9PT0gdHlwZSAmJiAoIGF0dHIgPT09IHR5cGUgfHwgYXR0ciA9PT0g
bnVsbCApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICByYWRpbzogZnVuY3Rp
b24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInJhZGlvIiA9PT0gZWxlbS50eXBlOwogICAg
ICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBjaGVja2JveDogZnVuY3Rpb24oIGVsZW0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCkgPT09ICJpbnB1dCIgJiYgImNoZWNrYm94IiA9PT0gZWxlbS50eXBlOwogICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICBmaWxlOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0g
ImlucHV0IiAmJiAiZmlsZSIgPT09IGVsZW0udHlwZTsKICAgICAgICAgICAgICAgIH0sCgogICAg
ICAgICAgICAgICAgcGFzc3dvcmQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYm
ICJwYXNzd29yZCIgPT09IGVsZW0udHlwZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAg
ICAgICAgc3VibWl0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYg
InN1Ym1pdCIgPT09IGVsZW0udHlwZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAg
ICAgaW1hZ2U6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJpbWFnZSIgPT09
IGVsZW0udHlwZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgcmVzZXQ6IGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChu
YW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAmJiAicmVzZXQiID09PSBlbGVt
LnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGJ1dHRvbjogZnVuY3Rp
b24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSA9
PT0gImlucHV0IiAmJiAiYnV0dG9uIiA9PT0gZWxlbS50eXBlIHx8IG5hbWUgPT09ICJidXR0b24i
OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oIGVs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoL2lucHV0fHNlbGVjdHx0ZXh0
YXJlYXxidXR0b24vaSkudGVzdCggZWxlbS5ub2RlTmFtZSApOwogICAgICAgICAgICAgICAgfSwK
CiAgICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHNldEZpbHRlcnM6IHsKICAg
ICAgICAgICAgICAgIGZpcnN0OiBmdW5jdGlvbiggZWxlbSwgaSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGkgPT09IDA7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgIGxhc3Q6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCwgYXJyYXkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpID09PSBhcnJheS5sZW5ndGggLSAxOwogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBldmVuOiBmdW5jdGlvbiggZWxlbSwgaSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgJSAyID09PSAwOwogICAgICAgICAgICAgICAgfSwK
CiAgICAgICAgICAgICAgICBvZGQ6IGZ1bmN0aW9uKCBlbGVtLCBpICkgewogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaSAlIDIgPT09IDE7CiAgICAgICAgICAgICAgICB9LAoKICAgICAg
ICAgICAgICAgIGx0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpIDwgbWF0Y2hbM10gLSAwOwogICAgICAgICAgICAgICAgfSwKCiAg
ICAgICAgICAgICAgICBndDogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaSA+IG1hdGNoWzNdIC0gMDsKICAgICAgICAgICAgICAgIH0s
CgogICAgICAgICAgICAgICAgbnRoOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFszXSAtIDAgPT09IGk7CiAgICAgICAgICAg
ICAgICB9LAoKICAgICAgICAgICAgICAgIGVxOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFszXSAtIDAgPT09IGk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmaWx0ZXI6IHsKICAgICAgICAgICAgICAg
IFBTRVVETzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoLCBpLCBhcnJheSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG5hbWUgPSBtYXRjaFsxXSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWx0ZXIgPSBFeHByLmZpbHRlcnNbIG5hbWUgXTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZmlsdGVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmaWx0ZXIoIGVsZW0sIGksIG1hdGNoLCBhcnJheSApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggbmFtZSA9PT0gImNvbnRhaW5zIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKGVsZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lclRl
eHQgfHwgU2l6emxlLmdldFRleHQoWyBlbGVtIF0pIHx8ICIiKS5pbmRleE9mKG1hdGNoWzNdKSA+
PSAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbmFtZSA9PT0gIm5vdCIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdCA9IG1hdGNoWzNdOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGwgPSBub3Qu
bGVuZ3RoOyBqIDwgbDsgaisrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBub3Rbal0gPT09IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6
bGUuZXJyb3IoIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfSwKCiAgICAgICAgICAgICAgICBDSElMRDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG1hdGNoWzFdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtOwoKICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoICggdHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJv
bmx5IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJmaXJzdCI6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5w
cmV2aW91c1NpYmxpbmcpICkgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgeyAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZmlyc3QiICkgeyAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICJsYXN0IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSApICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUg
PT09IDEgKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAibnRoIjoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IG1hdGNoWzJdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gbWF0Y2hbM107
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCA9PT0g
MSAmJiBsYXN0ID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbmVOYW1lID0gbWF0Y2hbMF0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9
IGVsZW0ucGFyZW50Tm9kZTsKICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcGFyZW50ICYmIChwYXJlbnQuc2l6Y2FjaGUgIT09IGRvbmVOYW1lIHx8
ICFlbGVtLm5vZGVJbmRleCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBub2RlID0gcGFyZW50LmZpcnN0Q2hpbGQ7IG5vZGU7IG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUubm9kZUluZGV4ID0gKytjb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJlbnQuc2l6Y2FjaGUgPSBkb25lTmFtZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYg
PSBlbGVtLm5vZGVJbmRleCAtIGxhc3Q7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBmaXJzdCA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYgPT09IDA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRp
ZmYgLyBmaXJzdCA+PSAwICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCgogICAgICAg
ICAgICAgICAgSUQ6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImlk
IikgPT09IG1hdGNoOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBUQUc6IGZ1
bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICht
YXRjaCA9PT0gIioiICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpIHx8IGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKSA9PT0gbWF0Y2g7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICBDTEFTUzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKCIgIiArIChlbGVtLmNsYXNzTmFtZSB8fCBlbGVtLmdl
dEF0dHJpYnV0ZSgiY2xhc3MiKSkgKyAiICIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLmluZGV4T2YoIG1hdGNoICkgPiAtMTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAg
ICAgICAgQVRUUjogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgbmFtZSA9IG1hdGNoWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBdID8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBdKCBlbGVtICkgOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgbmFtZSBdICE9IG51bGwg
PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBu
YW1lIF0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLmdldEF0dHJpYnV0ZSggbmFtZSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gcmVzdWx0ICsgIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IG1hdGNoWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrID0gbWF0
Y2hbNF07CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICIhPSIgOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICI9IiA/CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPT09IGNoZWNrIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID09PSAiKj0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID09PSAifj0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIiAiICsgdmFs
dWUgKyAiICIpLmluZGV4T2YoY2hlY2spID49IDAgOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICFjaGVjayA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgJiYg
cmVzdWx0ICE9PSBmYWxzZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9
PT0gIiE9IiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IGNoZWNr
IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAiXj0iID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5pbmRleE9mKGNoZWNrKSA9PT0gMCA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gIiQ9IiA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc3Vic3RyKHZhbHVlLmxlbmd0aCAtIGNoZWNrLmxl
bmd0aCkgPT09IGNoZWNrIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09
PSAifD0iID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9PT0gY2hlY2sg
fHwgdmFsdWUuc3Vic3RyKDAsIGNoZWNrLmxlbmd0aCArIDEpID09PSBjaGVjayArICItIiA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIFBPUzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoLCBpLCBhcnJheSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBtYXRjaFsyXSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBFeHByLnNldEZpbHRlcnNbIG5hbWUgXTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlsdGVyICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIoIGVsZW0sIGksIG1hdGNoLCBhcnJheSApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9OwoKdmFy
IG9yaWdQT1MgPSBFeHByLm1hdGNoLlBPUywKICAgICAgICBmZXNjYXBlID0gZnVuY3Rpb24oYWxs
LCBudW0pewogICAgICAgICAgICAgICAgcmV0dXJuICJcXCIgKyAobnVtIC0gMCArIDEpOwogICAg
ICAgIH07Cgpmb3IgKCB2YXIgdHlwZSBpbiBFeHByLm1hdGNoICkgewogICAgICAgIEV4cHIubWF0
Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAoIEV4cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UgKyAoLyg/
IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKSApOwogICAgICAgIEV4cHIubGVmdE1hdGNo
WyB0eXBlIF0gPSBuZXcgUmVnRXhwKCAvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlICsgRXhwci5t
YXRjaFsgdHlwZSBdLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csIGZlc2NhcGUpICk7Cn0KCnZh
ciBtYWtlQXJyYXkgPSBmdW5jdGlvbiggYXJyYXksIHJlc3VsdHMgKSB7CiAgICAgICAgYXJyYXkg
PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJyYXksIDAgKTsKCiAgICAgICAgaWYgKCBy
ZXN1bHRzICkgewogICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoLmFwcGx5KCByZXN1bHRzLCBh
cnJheSApOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgICAgfQogICAgICAg
IAogICAgICAgIHJldHVybiBhcnJheTsKfTsKCi8vIFBlcmZvcm0gYSBzaW1wbGUgY2hlY2sgdG8g
ZGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIGNhcGFibGUgb2YKLy8gY29udmVydGluZyBhIE5v
ZGVMaXN0IHRvIGFuIGFycmF5IHVzaW5nIGJ1aWx0aW4gbWV0aG9kcy4KLy8gQWxzbyB2ZXJpZmll
cyB0aGF0IHRoZSByZXR1cm5lZCBhcnJheSBob2xkcyBET00gbm9kZXMKLy8gKHdoaWNoIGlzIG5v
dCB0aGUgY2FzZSBpbiB0aGUgQmxhY2tiZXJyeSBicm93c2VyKQp0cnkgewogICAgICAgIEFycmF5
LnByb3RvdHlwZS5zbGljZS5jYWxsKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rl
cywgMCApWzBdLm5vZGVUeXBlOwoKLy8gUHJvdmlkZSBhIGZhbGxiYWNrIG1ldGhvZCBpZiBpdCBk
b2VzIG5vdCB3b3JrCn0gY2F0Y2goIGUgKSB7CiAgICAgICAgbWFrZUFycmF5ID0gZnVuY3Rpb24o
IGFycmF5LCByZXN1bHRzICkgewogICAgICAgICAgICAgICAgdmFyIGkgPSAwLAogICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSByZXN1bHRzIHx8IFtdOwoKICAgICAgICAgICAgICAgIGlmICgg
dG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICJbb2JqZWN0IEFycmF5XSIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KCByZXQsIGFycmF5ICk7Cgog
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBl
b2YgYXJyYXkubGVuZ3RoID09PSAibnVtYmVyIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBhcnJheVtpXSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBhcnJheVtp
XTsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1
c2goIGFycmF5W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0
dXJuIHJldDsKICAgICAgICB9Owp9Cgp2YXIgc29ydE9yZGVyLCBzaWJsaW5nQ2hlY2s7CgppZiAo
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHsKICAg
ICAgICBzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHsKICAgICAgICAgICAgICAgIGlmICgg
YSA9PT0gYiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgaWYgKCAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29t
cGFyZURvY3VtZW50UG9zaXRpb24gPyAtMSA6IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0ID8gLTEgOiAx
OwogICAgICAgIH07Cgp9IGVsc2UgewogICAgICAgIHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBi
ICkgewogICAgICAgICAgICAgICAgLy8gVGhlIG5vZGVzIGFyZSBpZGVudGljYWwsIHdlIGNhbiBl
eGl0IGVhcmx5CiAgICAgICAgICAgICAgICBpZiAoIGEgPT09IGIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOwoKICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHVzaW5nIHNvdXJjZUluZGV4
IChpbiBJRSkgaWYgaXQncyBhdmFpbGFibGUgb24gYm90aCBub2RlcwogICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggYS5zb3VyY2VJbmRleCAmJiBiLnNvdXJjZUluZGV4ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGFsLCBibCwKICAgICAgICAgICAgICAg
ICAgICAgICAgYXAgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgYnAgPSBbXSwKICAgICAg
ICAgICAgICAgICAgICAgICAgYXVwID0gYS5wYXJlbnROb2RlLAogICAgICAgICAgICAgICAgICAg
ICAgICBidXAgPSBiLnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGF1
cDsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzIChvciBpZGVu
dGljYWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCiAgICAgICAgICAgICAgICBpZiAoIGF1cCA9
PT0gYnVwICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBh
LCBiICk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm8gcGFyZW50cyB3ZXJlIGZvdW5kIHRoZW4g
dGhlIG5vZGVzIGFyZSBkaXNjb25uZWN0ZWQKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFh
dXAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKCiAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCAhYnVwICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSdyZSBz
b21ld2hlcmUgZWxzZSBpbiB0aGUgdHJlZSBzbyB3ZSBuZWVkCiAgICAgICAgICAgICAgICAvLyB0
byBidWlsZCB1cCBhIGZ1bGwgbGlzdCBvZiB0aGUgcGFyZW50Tm9kZXMgZm9yIGNvbXBhcmlzb24K
ICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICkgewogICAgICAgICAgICAgICAgICAgICAgICBh
cC51bnNoaWZ0KCBjdXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVu
dE5vZGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY3VyID0gYnVwOwoKICAg
ICAgICAgICAgICAgIHdoaWxlICggY3VyICkgewogICAgICAgICAgICAgICAgICAgICAgICBicC51
bnNoaWZ0KCBjdXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5v
ZGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYWwgPSBhcC5sZW5ndGg7CiAg
ICAgICAgICAgICAgICBibCA9IGJwLmxlbmd0aDsKCiAgICAgICAgICAgICAgICAvLyBTdGFydCB3
YWxraW5nIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQogICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYWwgJiYgaSA8IGJsOyBpKysgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggYXBbaV0gIT09IGJwW2ldICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
Ly8gV2UgZW5kZWQgc29tZXBsYWNlIHVwIHRoZSB0cmVlIHNvIGRvIGEgc2libGluZyBjaGVjawog
ICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IGFsID8KICAgICAgICAgICAgICAgICAgICAgICAg
c2libGluZ0NoZWNrKCBhLCBicFtpXSwgLTEgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIHNp
YmxpbmdDaGVjayggYXBbaV0sIGIsIDEgKTsKICAgICAgICB9OwoKICAgICAgICBzaWJsaW5nQ2hl
Y2sgPSBmdW5jdGlvbiggYSwgYiwgcmV0ICkgewogICAgICAgICAgICAgICAgaWYgKCBhID09PSBi
ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHZhciBjdXIgPSBhLm5leHRTaWJsaW5nOwoKICAgICAgICAgICAg
ICAgIHdoaWxlICggY3VyICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ciA9PT0g
YiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5uZXh0
U2libGluZzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAg
ICAgICB9Owp9CgovLyBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyZWl2aW5nIHRoZSB0ZXh0IHZh
bHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2RlcwpTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBl
bGVtcyApIHsKICAgICAgICB2YXIgcmV0ID0gIiIsIGVsZW07CgogICAgICAgIGZvciAoIHZhciBp
ID0gMDsgZWxlbXNbaV07IGkrKyApIHsKICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtc1tpXTsK
CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHRleHQgZnJvbSB0ZXh0IG5vZGVzIGFuZCBDREFU
QSBub2RlcwogICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0u
bm9kZVR5cGUgPT09IDQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBlbGVtLm5v
ZGVWYWx1ZTsKCiAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBldmVyeXRoaW5nIGVsc2UsIGV4
Y2VwdCBjb21tZW50IG5vZGVzCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVtLm5vZGVU
eXBlICE9PSA4ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gU2l6emxlLmdldFRl
eHQoIGVsZW0uY2hpbGROb2RlcyApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg
ICAgcmV0dXJuIHJldDsKfTsKCi8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYnJvd3NlciByZXR1cm5z
IGVsZW1lbnRzIGJ5IG5hbWUgd2hlbgovLyBxdWVyeWluZyBieSBnZXRFbGVtZW50QnlJZCAoYW5k
IHByb3ZpZGUgYSB3b3JrYXJvdW5kKQooZnVuY3Rpb24oKXsKICAgICAgICAvLyBXZSdyZSBnb2lu
ZyB0byBpbmplY3QgYSBmYWtlIGlucHV0IGVsZW1lbnQgd2l0aCBhIHNwZWNpZmllZCBuYW1lCiAg
ICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwKICAgICAgICAg
ICAgICAgIGlkID0gInNjcmlwdCIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAogICAgICAgICAg
ICAgICAgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCiAgICAgICAgZm9ybS5pbm5l
ckhUTUwgPSAiPGEgbmFtZT0nIiArIGlkICsgIicvPiI7CgogICAgICAgIC8vIEluamVjdCBpdCBp
bnRvIHRoZSByb290IGVsZW1lbnQsIGNoZWNrIGl0cyBzdGF0dXMsIGFuZCByZW1vdmUgaXQgcXVp
Y2tseQogICAgICAgIHJvb3QuaW5zZXJ0QmVmb3JlKCBmb3JtLCByb290LmZpcnN0Q2hpbGQgKTsK
CiAgICAgICAgLy8gVGhlIHdvcmthcm91bmQgaGFzIHRvIGRvIGFkZGl0aW9uYWwgY2hlY2tzIGFm
dGVyIGEgZ2V0RWxlbWVudEJ5SWQKICAgICAgICAvLyBXaGljaCBzbG93cyB0aGluZ3MgZG93biBm
b3Igb3RoZXIgYnJvd3NlcnMgKGhlbmNlIHRoZSBicmFuY2hpbmcpCiAgICAgICAgaWYgKCBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCggaWQgKSApIHsKICAgICAgICAgICAgICAgIEV4cHIuZmluZC5J
RCA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCwgaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQi
ICYmICFpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGNv
bnRleHQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbMV0pOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtLmlkID09PSBtYXRjaFsxXSB8fCB0eXBlb2YgbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSAidW5k
ZWZpbmVkIiAmJiBtLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlID09PSBtYXRjaFsx
XSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttXSA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5l
ZCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBFeHBy
LmZpbHRlci5JRCA9IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSAidW5kZWZp
bmVkIiAmJiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7CgogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBub2RlICYmIG5vZGUubm9kZVZhbHVl
ID09PSBtYXRjaDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICByb290LnJl
bW92ZUNoaWxkKCBmb3JtICk7CgogICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCiAgICAg
ICAgcm9vdCA9IGZvcm0gPSBudWxsOwp9KSgpOwoKKGZ1bmN0aW9uKCl7CiAgICAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHJldHVybnMgb25seSBlbGVtZW50cwogICAgICAgIC8v
IHdoZW4gZG9pbmcgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKQoKICAgICAgICAvLyBDcmVhdGUg
YSBmYWtlIGVsZW1lbnQKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CiAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCIi
KSApOwoKICAgICAgICAvLyBNYWtlIHN1cmUgbm8gY29tbWVudHMgYXJlIGZvdW5kCiAgICAgICAg
aWYgKCBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGggPiAwICkgewogICAgICAg
ICAgICAgICAgRXhwci5maW5kLlRBRyA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCBtYXRjaFsxXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlsdGVyIG91
dCBwb3NzaWJsZSBjb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoWzFd
ID09PSAiKiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IFtd
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IHJlc3Vs
dHNbaV07IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggcmVzdWx0c1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnB1c2goIHJlc3VsdHNbaV0gKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB0bXA7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHRzOwogICAgICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNr
IHRvIHNlZSBpZiBhbiBhdHRyaWJ1dGUgcmV0dXJucyBub3JtYWxpemVkIGhyZWYgYXR0cmlidXRl
cwogICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiI7CgogICAgICAgIGlm
ICggZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSAh
PT0gInVuZGVmaW5lZCIgJiYKICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQu
Z2V0QXR0cmlidXRlKCJocmVmIikgIT09ICIjIiApIHsKCiAgICAgICAgICAgICAgICBFeHByLmF0
dHJIYW5kbGUuaHJlZiA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJocmVmIiwgMiApOwogICAgICAgICAgICAgICAg
fTsKICAgICAgICB9CgogICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCiAgICAgICAgZGl2
ID0gbnVsbDsKfSkoKTsKCmlmICggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApIHsKICAgICAg
ICAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciBvbGRTaXp6bGUgPSBTaXp6bGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
LAogICAgICAgICAgICAgICAgICAgICAgICBpZCA9ICJfX3NpenpsZV9fIjsKCiAgICAgICAgICAg
ICAgICBkaXYuaW5uZXJIVE1MID0gIjxwIGNsYXNzPSdURVNUJz48L3A+IjsKCiAgICAgICAgICAg
ICAgICAvLyBTYWZhcmkgY2FuJ3QgaGFuZGxlIHVwcGVyY2FzZSBvciB1bmljb2RlIGNoYXJhY3Rl
cnMgd2hlbgogICAgICAgICAgICAgICAgLy8gaW4gcXVpcmtzIG1vZGUuCiAgICAgICAgICAgICAg
ICBpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsICYmIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCIuVEVT
VCIpLmxlbmd0aCA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgU2l6emxlID0gZnVuY3Rpb24o
IHF1ZXJ5LCBjb250ZXh0LCBleHRyYSwgc2VlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBPbmx5IHVzZSBxdWVyeVNlbGVjdG9yQWxsIG9uIG5vbi1YTUwgZG9jdW1lbnRzCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIChJRCBzZWxlY3RvcnMgZG9uJ3Qgd29yayBpbiBub24tSFRNTCBk
b2N1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNlZWQgJiYgIVNpenpsZS5p
c1hNTChjb250ZXh0KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUg
aWYgd2UgZmluZCBhIHNlbGVjdG9yIHRvIHNwZWVkIHVwCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG1hdGNoID0gL14oXHcrJCl8XlwuKFtcd1wtXSskKXxeIyhbXHdcLV0rJCkv
LmV4ZWMoIHF1ZXJ5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAoY29udGV4dC5ub2RlVHlwZSA9
PT0gMSB8fCBjb250ZXh0Lm5vZGVUeXBlID09PSA5KSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIlRBRyIpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoWzFdICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBj
b250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBxdWVyeSApLCBleHRyYSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIuQ0xBU1MiKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2hbMl0gJiYgRXhwci5m
aW5kLkNMQVNTICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSgg
Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtYXRjaFsyXSApLCBleHRyYSApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQubm9kZVR5cGUgPT09IDkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxl
KCJib2R5IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBi
b2R5IGVsZW1lbnQgb25seSBleGlzdHMgb25jZSwgb3B0aW1pemUgZmluZGluZyBpdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBxdWVyeSA9PT0gImJvZHkiICYm
IGNvbnRleHQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggWyBjb250ZXh0LmJvZHkgXSwgZXh0cmEgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2gg
JiYgbWF0Y2hbM10gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbM10gKTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBh
cmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5v
IGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBI
YW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVtcwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG5hbWUg
aW5zdGVhZCBvZiBJRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5pZCA9PT0gbWF0Y2hbM10gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZUFycmF5KCBbIGVsZW0gXSwgZXh0cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggW10sIGV4dHJh
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KSwgZXh0
cmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gocXNh
RXJyb3IpIHt9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHFTQSB3b3JrcyBz
dHJhbmdlbHkgb24gRWxlbWVudC1yb290ZWQgcXVlcmllcwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbiB3b3JrIGFyb3VuZCB0aGlzIGJ5IHNwZWNpZnlpbmcgYW4gZXh0
cmEgSUQgb24gdGhlIHJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQg
d29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhlIHRl
Y2huaXF1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSA4IGRvZXNuJ3Qg
d29yayBvbiBvYmplY3QgZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBjb250ZXh0Lm5vZGVUeXBlID09PSAxICYmIGNvbnRleHQubm9kZU5hbWUudG9M
b3dlckNhc2UoKSAhPT0gIm9iamVjdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgb2xkQ29udGV4dCA9IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCAi
aWQiICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5p
ZCA9IG9sZCB8fCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzUGFyZW50ID0gY29udGV4dC5wYXJlbnROb2RlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUhpZXJhcmNoeVNlbGVjdG9yID0g
L15ccypbK35dLy50ZXN0KCBxdWVyeSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIW9sZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIG5pZCApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gbmlkLnJlcGxhY2UoIC8nL2cs
ICJcXCQmIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZWxhdGl2ZUhpZXJhcmNo
eVNlbGVjdG9yICYmIGhhc1BhcmVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFyZWxhdGl2ZUhpZXJhcmNoeVNlbGVjdG9yIHx8IGhhc1BhcmVu
dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoICJbaWQ9JyIg
KyBuaWQgKyAiJ10gIiArIHF1ZXJ5ICksIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoKHBzZXVkb0Vycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFvbGQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ29udGV4dC5yZW1vdmVBdHRyaWJ1
dGUoICJpZCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbGRTaXp6bGUocXVlcnks
IGNvbnRleHQsIGV4dHJhLCBzZWVkKTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAg
ICAgZm9yICggdmFyIHByb3AgaW4gb2xkU2l6emxlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBTaXp6bGVbIHByb3AgXSA9IG9sZFNpenpsZVsgcHJvcCBdOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCiAgICAgICAgICAgICAgICBk
aXYgPSBudWxsOwogICAgICAgIH0pKCk7Cn0KCihmdW5jdGlvbigpewogICAgICAgIHZhciBodG1s
ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgICAgICAgICAgbWF0Y2hlcyA9IGh0
bWwubWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubW96TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwud2Vi
a2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubXNNYXRjaGVzU2VsZWN0b3I7CgogICAgICAgIGlm
ICggbWF0Y2hlcyApIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBv
c3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgogICAgICAgICAgICAgICAgLy8gb24gYSBkaXNj
b25uZWN0ZWQgbm9kZSAoSUUgOSBmYWlscyB0aGlzKQogICAgICAgICAgICAgICAgdmFyIGRpc2Nv
bm5lY3RlZE1hdGNoID0gIW1hdGNoZXMuY2FsbCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRp
diIgKSwgImRpdiIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvV29ya3MgPSBmYWxz
ZTsKCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlcy5jYWxsKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICJbdGVz
dCE9JyddOnNpenpsZSIgKTsKICAgICAgICAKICAgICAgICAgICAgICAgIH0gY2F0Y2goIHBzZXVk
b0Vycm9yICkgewogICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9Xb3JrcyA9IHRydWU7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9
IGZ1bmN0aW9uKCBub2RlLCBleHByICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWQKICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXD1ccyooW14nIlxdXSopXHMqXF0vZywgIj0n
JDEnXSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhU2l6emxlLmlzWE1MKCBub2Rl
ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBzZXVkb1dvcmtzIHx8ICFFeHByLm1h
dGNoLlBTRVVETy50ZXN0KCBleHByICkgJiYgIS8hPS8udGVzdCggZXhwciApICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gbWF0Y2hl
cy5jYWxsKCBub2RlLCBleHByICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24g
ZGlzY29ubmVjdGVkIG5vZGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcmV0IHx8ICFkaXNjb25uZWN0ZWRNYXRjaCB8fAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMg
d2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGZyYWdtZW50IGluIElFIDksIHNvIGNoZWNrIGZvciB0aGF0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRv
Y3VtZW50ICYmIG5vZGUuZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTaXp6bGUoZXhwciwgbnVsbCwgbnVsbCwgW25vZGVdKS5s
ZW5ndGggPiAwOwogICAgICAgICAgICAgICAgfTsKICAgICAgICB9Cn0pKCk7CgooZnVuY3Rpb24o
KXsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgogICAg
ICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNz
PSd0ZXN0Jz48L2Rpdj4iOwoKICAgICAgICAvLyBPcGVyYSBjYW4ndCBmaW5kIGEgc2Vjb25kIGNs
YXNzbmFtZSAoaW4gOS42KQogICAgICAgIC8vIEFsc28sIG1ha2Ugc3VyZSB0aGF0IGdldEVsZW1l
bnRzQnlDbGFzc05hbWUgYWN0dWFsbHkgZXhpc3RzCiAgICAgICAgaWYgKCAhZGl2LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUgfHwgZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGgg
PT09IDAgKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBT
YWZhcmkgY2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMsIGRvZXNuJ3QgY2F0Y2ggY2hhbmdlcyAoaW4g
My4yKQogICAgICAgIGRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOwoKICAgICAgICBpZiAo
IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoID09PSAxICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBFeHByLm9yZGVyLnNw
bGljZSgxLCAwLCAiQ0xBU1MiKTsKICAgICAgICBFeHByLmZpbmQuQ0xBU1MgPSBmdW5jdGlvbigg
bWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29u
dGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSAidW5kZWZpbmVkIiAmJiAhaXNYTUwgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUobWF0Y2hbMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8v
IHJlbGVhc2UgbWVtb3J5IGluIElFCiAgICAgICAgZGl2ID0gbnVsbDsKfSkoKTsKCmZ1bmN0aW9u
IGRpck5vZGVDaGVjayggZGlyLCBjdXIsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBp
c1hNTCApIHsKICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGg7IGkg
PCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGNoZWNrU2V0W2ldOwoKICAg
ICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1h
dGNoID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVtkaXJdOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5zaXpjYWNoZSA9PT0gZG9uZU5hbWUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGNoZWNrU2V0W2VsZW0u
c2l6c2V0XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFpc1hNTCApewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpjYWNoZSA9IGRvbmVOYW1lOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpzZXQgPSBpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGN1ciApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZWxlbTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9
IGVsZW1bZGlyXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgY2hlY2tTZXRbaV0gPSBtYXRjaDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0K
CmZ1bmN0aW9uIGRpckNoZWNrKCBkaXIsIGN1ciwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hl
Y2ssIGlzWE1MICkgewogICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gY2hlY2tTZXRbaV07
CgogICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0gPSBlbGVtW2Rpcl07CgogICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNp
emNhY2hlID09PSBkb25lTmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUg
PT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFp
c1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5zaXpjYWNoZSA9IGRvbmVOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2YgY3VyICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBjdXIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
U2l6emxlLmZpbHRlciggY3VyLCBbZWxlbV0gKS5sZW5ndGggPiAwICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGVsZW07CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1bZGly
XTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tTZXRbaV0gPSBtYXRjaDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCmlmICggZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zICkgewogICAgICAgIFNpenpsZS5jb250YWlu
cyA9IGZ1bmN0aW9uKCBhLCBiICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGEgIT09IGIgJiYg
KGEuY29udGFpbnMgPyBhLmNvbnRhaW5zKGIpIDogdHJ1ZSk7CiAgICAgICAgfTsKCn0gZWxzZSBp
ZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHsK
ICAgICAgICBTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggYSwgYiApIHsKICAgICAgICAgICAg
ICAgIHJldHVybiAhIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgMTYpOwogICAgICAg
IH07Cgp9IGVsc2UgewogICAgICAgIFNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH07Cn0KClNpenpsZS5pc1hNTCA9IGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgIC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBm
b3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKICAgICAgICAvLyAoc3VjaCBhcyBs
b2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykgCiAgICAgICAgdmFyIGRvY3VtZW50RWxlbWVu
dCA9IChlbGVtID8gZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gOiAwKS5kb2N1bWVudEVsZW1l
bnQ7CgogICAgICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9k
ZU5hbWUgIT09ICJIVE1MIiA6IGZhbHNlOwp9OwoKdmFyIHBvc1Byb2Nlc3MgPSBmdW5jdGlvbigg
c2VsZWN0b3IsIGNvbnRleHQgKSB7CiAgICAgICAgdmFyIG1hdGNoLAogICAgICAgICAgICAgICAg
dG1wU2V0ID0gW10sCiAgICAgICAgICAgICAgICBsYXRlciA9ICIiLAogICAgICAgICAgICAgICAg
cm9vdCA9IGNvbnRleHQubm9kZVR5cGUgPyBbY29udGV4dF0gOiBjb250ZXh0OwoKICAgICAgICAv
LyBQb3NpdGlvbiBzZWxlY3RvcnMgbXVzdCBiZSBkb25lIGFmdGVyIHRoZSBmaWx0ZXIKICAgICAg
ICAvLyBBbmQgc28gbXVzdCA6bm90KHBvc2l0aW9uYWwpIHNvIHdlIG1vdmUgYWxsIFBTRVVET3Mg
dG8gdGhlIGVuZAogICAgICAgIHdoaWxlICggKG1hdGNoID0gRXhwci5tYXRjaC5QU0VVRE8uZXhl
Yyggc2VsZWN0b3IgKSkgKSB7CiAgICAgICAgICAgICAgICBsYXRlciArPSBtYXRjaFswXTsKICAg
ICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSggRXhwci5tYXRjaC5QU0VV
RE8sICIiICk7CiAgICAgICAgfQoKICAgICAgICBzZWxlY3RvciA9IEV4cHIucmVsYXRpdmVbc2Vs
ZWN0b3JdID8gc2VsZWN0b3IgKyAiKiIgOiBzZWxlY3RvcjsKCiAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBsID0gcm9vdC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICBTaXp6
bGUoIHNlbGVjdG9yLCByb290W2ldLCB0bXBTZXQgKTsKICAgICAgICB9CgogICAgICAgIHJldHVy
biBTaXp6bGUuZmlsdGVyKCBsYXRlciwgdG1wU2V0ICk7Cn07CgovLyBFWFBPU0UKalF1ZXJ5LmZp
bmQgPSBTaXp6bGU7CmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9yczsKalF1ZXJ5LmV4cHJb
IjoiXSA9IGpRdWVyeS5leHByLmZpbHRlcnM7CmpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVl
U29ydDsKalF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDsKalF1ZXJ5LmlzWE1MRG9jID0gU2l6
emxlLmlzWE1MOwpqUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7CgoKfSkoKTsKCgp2
YXIgcnVudGlsID0gL1VudGlsJC8sCiAgICAgICAgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRz
fHByZXZVbnRpbHxwcmV2QWxsKS8sCiAgICAgICAgLy8gTm90ZTogVGhpcyBSZWdFeHAgc2hvdWxk
IGJlIGltcHJvdmVkLCBvciBsaWtlbHkgcHVsbGVkIGZyb20gU2l6emxlCiAgICAgICAgcm11bHRp
c2VsZWN0b3IgPSAvLC8sCiAgICAgICAgaXNTaW1wbGUgPSAvXi5bXjojXFtcLixdKiQvLAogICAg
ICAgIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAogICAgICAgIFBPUyA9IGpRdWVyeS5l
eHByLm1hdGNoLlBPUywKICAgICAgICAvLyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBh
IHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAogICAgICAgIGd1YXJh
bnRlZWRVbmlxdWUgPSB7CiAgICAgICAgICAgICAgICBjaGlsZHJlbjogdHJ1ZSwKICAgICAgICAg
ICAgICAgIGNvbnRlbnRzOiB0cnVlLAogICAgICAgICAgICAgICAgbmV4dDogdHJ1ZSwKICAgICAg
ICAgICAgICAgIHByZXY6IHRydWUKICAgICAgICB9OwoKalF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAg
ICAgZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAgICAgICAgdmFyIHNlbGYg
PSB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICBpLCBsOwoKICAgICAgICAgICAgICAgIGlm
ICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICB2YXIgcmV0ID0gdGhpcy5wdXNoU3RhY2soICIiLCAiZmluZCIsIHNlbGVjdG9y
ICksCiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgbiwgcjsKCiAgICAgICAgICAgICAg
ICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBsZW5ndGggPSByZXQubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZmluZCggc2VsZWN0b3IsIHRoaXNbaV0sIHJldCApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBpID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdW5pcXVlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggbiA9IGxlbmd0aDsgbiA8IHJldC5sZW5ndGg7IG4rKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHIgPSAwOyByIDwg
bGVuZ3RoOyByKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcmV0W3JdID09PSByZXRbbl0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZShuLS0sIDEpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9LAoKICAgICAgICBoYXM6IGZ1
bmN0aW9uKCB0YXJnZXQgKSB7CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0cyA9IGpRdWVyeSgg
dGFyZ2V0ICk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRhcmdldHMubGVu
Z3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ldICkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0p
OwogICAgICAgIH0sCgogICAgICAgIG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZh
bHNlKSwgIm5vdCIsIHNlbGVjdG9yKTsKICAgICAgICB9LAoKICAgICAgICBmaWx0ZXI6IGZ1bmN0
aW9uKCBzZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjaygg
d2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwgImZpbHRlciIsIHNlbGVjdG9yICk7CiAgICAg
ICAgfSwKCiAgICAgICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKICAgICAgICAgICAgICAg
IHJldHVybiAhIXNlbGVjdG9yICYmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiA/CiAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCB0aGlzICkubGVu
Z3RoID4gMCA6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyKCBzZWxlY3RvciAp
Lmxlbmd0aCA+IDAgKTsKICAgICAgICB9LAoKICAgICAgICBjbG9zZXN0OiBmdW5jdGlvbiggc2Vs
ZWN0b3JzLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdLCBpLCBsLCBj
dXIgPSB0aGlzWzBdOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBBcnJheQog
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggc2VsZWN0b3JzICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCwgc2VsZWN0b3IsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlcyA9IHt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxldmVsID0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyICYmIHNlbGVj
dG9ycy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9
IDAsIGwgPSBzZWxlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hlc1sgc2VsZWN0b3Ig
XSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlc1sgc2VsZWN0b3IgXSA9IFBPUy50ZXN0KCBzZWxlY3RvciApID8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9y
LCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICYmIGN1ci5vd25l
ckRvY3VtZW50ICYmIGN1ciAhPT0gY29udGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHNlbGVjdG9yIGluIG1hdGNoZXMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gbWF0Y2hlc1sgc2Vs
ZWN0b3IgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggbWF0Y2guanF1ZXJ5ID8gbWF0Y2guaW5kZXgoIGN1ciApID4gLTEgOiBqUXVlcnkoIGN1
ciApLmlzKCBtYXRjaCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHsgc2VsZWN0b3I6IHNlbGVjdG9yLCBlbGVtOiBj
dXIsIGxldmVsOiBsZXZlbCB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnRO
b2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwrKzsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgLy8gU3RyaW5nCiAgICAgICAgICAgICAgICB2YXIgcG9zID0gUE9TLnRl
c3QoIHNlbGVjdG9ycyApIHx8IHR5cGVvZiBzZWxlY3RvcnMgIT09ICJzdHJpbmciID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4dCB8fCB0
aGlzLmNvbnRleHQgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDsKCiAgICAg
ICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSB0aGlzW2ldOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCBjdXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBwb3MgPyBwb3MuaW5kZXgoY3VyKSA+IC0xIDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9y
KGN1ciwgc2VsZWN0b3JzKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldC5wdXNoKCBjdXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjdXIgfHwgIWN1
ci5vd25lckRvY3VtZW50IHx8IGN1ciA9PT0gY29udGV4dCB8fCBjdXIubm9kZVR5cGUgPT09IDEx
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXQgPSByZXQubGVuZ3RoID4gMSA/IGpRdWVyeS51
bmlxdWUoIHJldCApIDogcmV0OwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFj
ayggcmV0LCAiY2xvc2VzdCIsIHNlbGVjdG9ycyApOwogICAgICAgIH0sCgogICAgICAgIC8vIERl
dGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4KICAgICAgICAvLyB0aGUg
bWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKICAgICAgICBpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7
CgogICAgICAgICAgICAgICAgLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQK
ICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgPyB0aGlzLnByZXZBbGwoKS5s
ZW5ndGggOiAtMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBpbmRleCBp
biBzZWxlY3RvcgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSggdGhpc1sw
XSwgalF1ZXJ5KCBlbGVtICkgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnQKICAgICAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
aXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkCiAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMg
KTsKICAgICAgICB9LAoKICAgICAgICBhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCAp
IHsKICAgICAgICAgICAgICAgIHZhciBzZXQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmci
ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9yLCBjb250
ZXh0ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXko
IHNlbGVjdG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3RvciBdIDogc2VsZWN0b3Ig
KSwKICAgICAgICAgICAgICAgICAgICAgICAgYWxsID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgp
LCBzZXQgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGlzRGlzY29u
bmVjdGVkKCBzZXRbMF0gKSB8fCBpc0Rpc2Nvbm5lY3RlZCggYWxsWzBdICkgPwogICAgICAgICAg
ICAgICAgICAgICAgICBhbGwgOgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkudW5pcXVl
KCBhbGwgKSApOwogICAgICAgIH0sCgogICAgICAgIGFuZFNlbGY6IGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKCB0aGlzLnByZXZPYmplY3QgKTsKICAgICAgICB9
Cn0pOwoKLy8gQSBwYWluZnVsbHkgc2ltcGxlIGNoZWNrIHRvIHNlZSBpZiBhbiBlbGVtZW50IGlz
IGRpc2Nvbm5lY3RlZAovLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBiZSBpbXByb3ZlZCwgd2hl
cmUgZmVhc2libGUpLgpmdW5jdGlvbiBpc0Rpc2Nvbm5lY3RlZCggbm9kZSApIHsKICAgICAgICBy
ZXR1cm4gIW5vZGUgfHwgIW5vZGUucGFyZW50Tm9kZSB8fCBub2RlLnBhcmVudE5vZGUubm9kZVR5
cGUgPT09IDExOwp9CgpqUXVlcnkuZWFjaCh7CiAgICAgICAgcGFyZW50OiBmdW5jdGlvbiggZWxl
bSApIHsKICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CiAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJl
bnQgOiBudWxsOwogICAgICAgIH0sCiAgICAgICAgcGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUiICk7
CiAgICAgICAgfSwKICAgICAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRp
bCApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9k
ZSIsIHVudGlsICk7CiAgICAgICAgfSwKICAgICAgICBuZXh0OiBmdW5jdGlvbiggZWxlbSApIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubnRoKCBlbGVtLCAyLCAibmV4dFNpYmxpbmci
ICk7CiAgICAgICAgfSwKICAgICAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkubnRoKCBlbGVtLCAyLCAicHJldmlvdXNTaWJsaW5nIiApOwog
ICAgICAgIH0sCiAgICAgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiApOwogICAgICAgIH0s
CiAgICAgICAgcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIgKTsKICAgICAgICB9LAogICAg
ICAgIG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewogICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIsIHVudGlsICk7CiAgICAg
ICAgfSwKICAgICAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiwg
dW50aWwgKTsKICAgICAgICB9LAogICAgICAgIHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5wYXJlbnROb2RlLmZp
cnN0Q2hpbGQsIGVsZW0gKTsKICAgICAgICB9LAogICAgICAgIGNoaWxkcmVuOiBmdW5jdGlvbigg
ZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5maXJz
dENoaWxkICk7CiAgICAgICAgfSwKICAgICAgICBjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiAp
ID8KICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jb250ZW50RG9jdW1lbnQgfHwgZWxlbS5j
b250ZW50V2luZG93LmRvY3VtZW50IDoKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1h
a2VBcnJheSggZWxlbS5jaGlsZE5vZGVzICk7CiAgICAgICAgfQp9LCBmdW5jdGlvbiggbmFtZSwg
Zm4gKSB7CiAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVj
dG9yICkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1
bnRpbCApLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdmFyaWFibGUgJ2FyZ3MnIHdh
cyBpbnRyb2R1Y2VkIGluCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHVi
LmNvbS9qcXVlcnkvanF1ZXJ5L2NvbW1pdC81MmEwMjM4CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIENocm9tZSAxMCAoRGV2KSBhbmQgc2hvdWxkIGJl
IHJlbW92ZWQgd2hlbiB0aGUgYnVnIGlzIGZpeGVkLgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMDUwCiAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7CgogICAgICAg
ICAgICAgICAgaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZWN0b3IgPSB1bnRpbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCByZXQgKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmxlbmd0aCA+IDEg
JiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0
OwoKICAgICAgICAgICAgICAgIGlmICggKHRoaXMubGVuZ3RoID4gMSB8fCBybXVsdGlzZWxlY3Rv
ci50ZXN0KCBzZWxlY3RvciApKSAmJiBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSByZXQucmV2ZXJzZSgpOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBhcmdz
LmpvaW4oIiwiKSApOwogICAgICAgIH07Cn0pOwoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgZmls
dGVyOiBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHsKICAgICAgICAgICAgICAgIGlmICgg
bm90ICkgewogICAgICAgICAgICAgICAgICAgICAgICBleHByID0gIjpub3QoIiArIGV4cHIgKyAi
KSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1zLmxlbmd0
aCA9PT0gMSA/CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxl
Y3RvcihlbGVtc1swXSwgZXhwcikgPyBbIGVsZW1zWzBdIF0gOiBbXSA6CiAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXMoZXhwciwgZWxlbXMpOwogICAgICAgIH0sCgog
ICAgICAgIGRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7CiAgICAgICAgICAgICAg
ICB2YXIgbWF0Y2hlZCA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBlbGVtWyBk
aXIgXTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkg
JiYgKHVudGlsID09PSB1bmRlZmluZWQgfHwgY3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnko
IGN1ciApLmlzKCB1bnRpbCApKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIu
bm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ZC5wdXNoKCBjdXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICBjdXIgPSBjdXJbZGlyXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IHJldHVybiBtYXRjaGVkOwogICAgICAgIH0sCgogICAgICAgIG50aDogZnVuY3Rpb24oIGN1ciwg
cmVzdWx0LCBkaXIsIGVsZW0gKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwg
MTsKICAgICAgICAgICAgICAgIHZhciBudW0gPSAwOwoKICAgICAgICAgICAgICAgIGZvciAoIDsg
Y3VyOyBjdXIgPSBjdXJbZGlyXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIu
bm9kZVR5cGUgPT09IDEgJiYgKytudW0gPT09IHJlc3VsdCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBjdXI7CiAgICAgICAgfSwKCiAgICAgICAg
c2libGluZzogZnVuY3Rpb24oIG4sIGVsZW0gKSB7CiAgICAgICAgICAgICAgICB2YXIgciA9IFtd
OwoKICAgICAgICAgICAgICAgIGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIucHVzaCggbiApOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJu
IHI7CiAgICAgICAgfQp9KTsKCi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxp
dHkgZm9yIGZpbHRlciBhbmQgbm90CmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmll
ciwga2VlcCApIHsKCiAgICAgICAgLy8gQ2FuJ3QgcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0byBp
bmRleE9mIGluIEZpcmVmb3ggNAogICAgICAgIC8vIFNldCB0byAwIHRvIHNraXAgc3RyaW5nIGNo
ZWNrCiAgICAgICAgcXVhbGlmaWVyID0gcXVhbGlmaWVyIHx8IDA7CgogICAgICAgIGlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHJldFZhbCA9ICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbCA9PT0ga2VlcDsKICAgICAgICAg
ICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVt
LCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGVsZW0gPT09IHF1YWxpZmll
cikgPT09IGtlZXA7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIGlmICggdHlw
ZW9mIHF1YWxpZmllciA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICB2YXIgZmlsdGVy
ZWQgPSBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxOwogICAgICAgICAgICAgICAg
fSk7CgogICAgICAgICAgICAgICAgaWYgKCBpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5maWx0ZXIocXVhbGlmaWVyLCBm
aWx0ZXJlZCwgIWtlZXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcXVhbGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBmaWx0ZXJlZCAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVw
KGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAo
alF1ZXJ5LmluQXJyYXkoIGVsZW0sIHF1YWxpZmllciApID49IDApID09PSBrZWVwOwogICAgICAg
IH0pOwp9CgoKCgp2YXIgcmlubGluZWpRdWVyeSA9IC8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCki
L2csCiAgICAgICAgcmxlYWRpbmdXaGl0ZXNwYWNlID0gL15ccysvLAogICAgICAgIHJ4aHRtbFRh
ZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSko
KFtcdzpdKylbXj5dKilcLz4vaWcsCiAgICAgICAgcnRhZ05hbWUgPSAvPChbXHc6XSspLywKICAg
ICAgICBydGJvZHkgPSAvPHRib2R5L2ksCiAgICAgICAgcmh0bWwgPSAvPHwmIz9cdys7LywKICAg
ICAgICBybm9jYWNoZSA9IC88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ks
CiAgICAgICAgLy8gY2hlY2tlZD0iY2hlY2tlZCIgb3IgY2hlY2tlZAogICAgICAgIHJjaGVja2Vk
ID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksCiAgICAgICAgcnNjcmlwdFR5
cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9pLAogICAgICAgIHJjbGVhblNjcmlwdCA9IC9eXHMq
PCEoPzpcW0NEQVRBXFt8XC1cLSkvLAogICAgICAgIHdyYXBNYXAgPSB7CiAgICAgICAgICAgICAg
ICBvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+
IiBdLAogICAgICAgICAgICAgICAgbGVnZW5kOiBbIDEsICI8ZmllbGRzZXQ+IiwgIjwvZmllbGRz
ZXQ+IiBdLAogICAgICAgICAgICAgICAgdGhlYWQ6IFsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4i
IF0sCiAgICAgICAgICAgICAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48
L3RhYmxlPiIgXSwKICAgICAgICAgICAgICAgIHRkOiBbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4i
LCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBdLAogICAgICAgICAgICAgICAgY29sOiBbIDIsICI8
dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+IiBd
LAogICAgICAgICAgICAgICAgYXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAogICAgICAg
ICAgICAgICAgX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KICAgICAgICB9OwoKd3JhcE1hcC5vcHRn
cm91cCA9IHdyYXBNYXAub3B0aW9uOwp3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdy
YXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOwp3cmFwTWFw
LnRoID0gd3JhcE1hcC50ZDsKCi8vIElFIGNhbid0IHNlcmlhbGl6ZSA8bGluaz4gYW5kIDxzY3Jp
cHQ+IHRhZ3Mgbm9ybWFsbHkKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsK
ICAgICAgICB3cmFwTWFwLl9kZWZhdWx0ID0gWyAxLCAiZGl2PGRpdj4iLCAiPC9kaXY+IiBdOwp9
CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAgICAgICB0ZXh0OiBmdW5jdGlvbiggdGV4dCApIHsKICAg
ICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24odGV4dCkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dCggdGV4dC5jYWxsKHRoaXMsIGksIHNlbGYu
dGV4dCgpKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0ZXh0ICE9PSAib2JqZWN0IiAmJiB0ZXh0ICE9
PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5
KCkuYXBwZW5kKCAodGhpc1swXSAmJiB0aGlzWzBdLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQp
LmNyZWF0ZVRleHROb2RlKCB0ZXh0ICkgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LnRleHQoIHRoaXMgKTsKICAgICAgICB9LAoKICAgICAgICB3cmFw
QWxsOiBmdW5jdGlvbiggaHRtbCApIHsKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVu
Y3Rpb24oIGh0bWwgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHRo
aXMpLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0gKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJn
ZXQgYXJvdW5kCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwID0galF1ZXJ5KCBodG1s
LCB0aGlzWzBdLm93bmVyRG9jdW1lbnQgKS5lcSgwKS5jbG9uZSh0cnVlKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdGhpc1swXS5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWzBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAubWFwKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpczsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgJiYg
ZWxlbS5maXJzdENoaWxkLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtOwogICAgICAgICAgICAgICAgICAgICAgICB9KS5hcHBlbmQoIHRoaXMgKTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAg
ICAgICB3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgewogICAgICAgICAgICAgICAgaWYgKCBq
UXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1sLmNhbGwodGhpcywgaSkgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNl
bGYgPSBqUXVlcnkoIHRoaXMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZW50cyA9IHNlbGYuY29udGVudHMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29u
dGVudHMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRz
LndyYXBBbGwoIGh0bWwgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoIGh0bWwgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAg
d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS53cmFw
QWxsKCBodG1sICk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICB1bndy
YXA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCkuZWFj
aChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5vZGVO
YW1lKCB0aGlzLCAiYm9keSIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pLmVuZCgpOwogICAgICAgIH0sCgogICAg
ICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21N
YW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCggZWxlbSApOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBwcmVwZW5kOiBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50
cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dGhpcy5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIGJlZm9y
ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0gJiYgdGhpc1swXS5w
YXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5p
cChhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
YXJndW1lbnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNldCA9IGpR
dWVyeShhcmd1bWVudHNbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICBzZXQucHVzaC5hcHBs
eSggc2V0LCB0aGlzLnRvQXJyYXkoKSApOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5wdXNoU3RhY2soIHNldCwgImJlZm9yZSIsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0sCgogICAgICAgIGFmdGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9u
KCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9k
ZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcmd1bWVudHMubGVuZ3Ro
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2V0ID0gdGhpcy5wdXNoU3RhY2soIHRo
aXMsICJhZnRlciIsIGFyZ3VtZW50cyApOwogICAgICAgICAgICAgICAgICAgICAgICBzZXQucHVz
aC5hcHBseSggc2V0LCBqUXVlcnkoYXJndW1lbnRzWzBdKS50b0FycmF5KCkgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoK
ICAgICAgICAvLyBrZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHktLWRvIG5vdCBkb2N1
bWVudAogICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0YSApIHsKICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSB0aGlzW2ldKSAhPSBu
dWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yIHx8IGpR
dWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBbIGVsZW0gXSApLmxlbmd0aCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFrZWVwRGF0YSAmJiBlbGVtLm5vZGVUeXBlID09PSAx
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFu
RGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoK
ICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGVsZW07IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVh
a3MKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcwogICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKCBlbGVtLmZpcnN0Q2hpbGQgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGNsb25lOiBmdW5jdGlvbiggZGF0
YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CiAgICAgICAgICAgICAgICBkYXRhQW5k
RXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOwog
ICAgICAgICAgICAgICAgZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBu
dWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzOwoKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50
cyApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgaHRtbDogZnVuY3Rp
b24oIHZhbHVlICkgewogICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1swXSAmJiB0aGlzWzBdLm5vZGVU
eXBlID09PSAxID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWzBdLmlubmVy
SFRNTC5yZXBsYWNlKHJpbmxpbmVqUXVlcnksICIiKSA6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVsbDsKCiAgICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBz
aG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9jYWNoZS50ZXN0KCB2YWx1ZSApICYm
CiAgICAgICAgICAgICAgICAgICAgICAgIChqUXVlcnkuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFj
ZSB8fCAhcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIHZhbHVlICkpICYmCiAgICAgICAgICAgICAg
ICAgICAgICAgICF3cmFwTWFwWyAocnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIiIsICIiXSlb
MV0udG9Mb3dlckNhc2UoKSBdICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZS5yZXBsYWNlKHJ4aHRtbFRhZywgIjwkMT48LyQyPiIpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1l
bW9yeSBsZWFrcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0
aGlzW2ldLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCB0aGlzW2ldLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCIqIikgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpc1tpXS5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2Vw
dGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgfSBj
YXRjaChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eSgpLmFw
cGVuZCggdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oaSl7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5odG1sKCB2YWx1ZS5jYWxsKHRoaXMsIGksIHNlbGYuaHRtbCgpKSAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgog
ICAgICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbiggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICBp
ZiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZWxlbWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUg
RE9NIGJlZm9yZSB0aGV5IGFyZSBpbnNlcnRlZAogICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aGlzIGNhbiBoZWxwIGZpeCByZXBsYWNpbmcgYSBwYXJlbnQgd2l0aCBjaGlsZCBlbGVtZW50cwog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYg
PSBqUXVlcnkodGhpcyksIG9sZCA9IHNlbGYuaHRtbCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5yZXBsYWNlV2l0aCggdmFsdWUuY2FsbCggdGhpcywgaSwg
b2xkICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUg
IT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0g
alF1ZXJ5KCB2YWx1ZSApLmRldGFjaCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5uZXh0U2libGluZywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50
Tm9kZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVt
b3ZlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmV4dCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShuZXh0KS5iZWZvcmUo
IHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShwYXJlbnQpLmFwcGVuZCgg
dmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVl
KCkgOiB2YWx1ZSksICJyZXBsYWNlV2l0aCIsIHZhbHVlICkgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAg
ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7CiAgICAgICAgfSwKCiAgICAgICAgZG9tTWFuaXA6
IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICB2YXIg
cmVzdWx0cywgZmlyc3QsIGZyYWdtZW50LCBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gYXJnc1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyA9IFtdOwoK
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250
YWluIGNoZWNrZWQsIGluIFdlYktpdAogICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBv
cnQuY2hlY2tDbG9uZSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiB2YWx1ZSA9
PT0gInN0cmluZyIgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkodGhpcykuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFj
aywgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkodGhpcyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHZhbHVlLmNhbGwodGhpcywgaSwgdGFi
bGUgPyBzZWxmLmh0bWwoKSA6IHVuZGVmaW5lZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxiYWNrICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgg
dGhpc1swXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gdmFsdWUgJiYgdmFs
dWUucGFyZW50Tm9kZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIGEg
ZnJhZ21lbnQsIGp1c3QgdXNlIHRoYXQgaW5zdGVhZCBvZiBidWlsZGluZyBhIG5ldyBvbmUKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5wYXJlbnROb2RlICYmIHBh
cmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IDExICYmIHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0
aCA9PT0gdGhpcy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0cyA9IHsgZnJhZ21lbnQ6IHBhcmVudCB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0galF1ZXJ5LmJ1
aWxkRnJhZ21lbnQoIGFyZ3MsIHRoaXMsIHNjcmlwdHMgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSByZXN1bHRzLmZyYWdtZW50
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0
aCA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZyYWdt
ZW50ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZyYWdtZW50LmZpcnN0
Q2hpbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZmlyc3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgPSB0
YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoLCBsYXN0SW5k
ZXggPSBsIC0gMTsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrLmNhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRhYmxlID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByb290KHRoaXNbaV0sIGZpcnN0KSA6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgd2UgZG8gbm90IGxlYWsgbWVtb3J5IGJ5IGluYWR2ZXJ0ZW50bHkgZGlzY2FyZGluZwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3Jp
Z2luYWwgZnJhZ21lbnQgKHdoaWNoIG1pZ2h0IGhhdmUgYXR0YWNoZWQgZGF0YSkgaW5zdGVhZCBv
ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2lu
ZyBpdDsgaW4gYWRkaXRpb24sIHVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgb2JqZWN0IGZvciB0
aGUgbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpdGVtIGluc3RlYWQgb2YgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwIGJlaW5nIGVtcHRp
ZWQgaW5jb3JyZWN0bHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaW4gY2VydGFpbiBzaXR1YXRpb25zIChCdWcgIzgwNzApLgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGcmFnbWVudHMgZnJvbSB0aGUg
ZnJhZ21lbnQgY2FjaGUgbXVzdCBhbHdheXMgYmUgY2xvbmVkIGFuZCBuZXZlciB1c2VkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHBsYWNlLgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNh
Y2hlYWJsZSB8fCAobCA+IDEgJiYgaSA8IGxhc3RJbmRleCkgPwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbG9uZSggZnJhZ21l
bnQsIHRydWUsIHRydWUgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJhZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNjcmlwdHMubGVu
Z3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBzY3Jp
cHRzLCBldmFsU2NyaXB0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9Cn0pOwoKZnVuY3Rp
b24gcm9vdCggZWxlbSwgY3VyICkgewogICAgICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoZWxl
bSwgInRhYmxlIikgPwogICAgICAgICAgICAgICAgKGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUo
InRib2R5IilbMF0gfHwKICAgICAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZWxlbS5vd25l
ckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpKSA6CiAgICAgICAgICAgICAgICBlbGVt
Owp9CgpmdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkgewoKICAgICAgICBpZiAo
IGRlc3Qubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeS5oYXNEYXRhKCBzcmMgKSApIHsKICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBpbnRlcm5hbEtleSA9IGpR
dWVyeS5leHBhbmRvLAogICAgICAgICAgICAgICAgb2xkRGF0YSA9IGpRdWVyeS5kYXRhKCBzcmMg
KSwKICAgICAgICAgICAgICAgIGN1ckRhdGEgPSBqUXVlcnkuZGF0YSggZGVzdCwgb2xkRGF0YSAp
OwoKICAgICAgICAvLyBTd2l0Y2ggdG8gdXNlIHRoZSBpbnRlcm5hbCBkYXRhIG9iamVjdCwgaWYg
aXQgZXhpc3RzLCBmb3IgdGhlIG5leHQKICAgICAgICAvLyBzdGFnZSBvZiBkYXRhIGNvcHlpbmcK
ICAgICAgICBpZiAoIChvbGREYXRhID0gb2xkRGF0YVsgaW50ZXJuYWxLZXkgXSkgKSB7CiAgICAg
ICAgICAgICAgICB2YXIgZXZlbnRzID0gb2xkRGF0YS5ldmVudHM7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyRGF0YSA9IGN1ckRhdGFbIGludGVybmFsS2V5IF0gPSBqUXVlcnku
ZXh0ZW5kKHt9LCBvbGREYXRhKTsKCiAgICAgICAgICAgICAgICBpZiAoIGV2ZW50cyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGN1ckRhdGEuaGFuZGxlOwogICAgICAgICAgICAg
ICAgICAgICAgICBjdXJEYXRhLmV2ZW50cyA9IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdmFyIHR5cGUgaW4gZXZlbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkr
KyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC5hZGQoIGRlc3QsIHR5cGUgKyAoIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNlID8gIi4i
IDogIiIgKSArIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNlLCBldmVudHNbIHR5cGUgXVsg
aSBdLCBldmVudHNbIHR5cGUgXVsgaSBdLmRhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9Cn0KCmZ1bmN0aW9uIGNsb25lRml4QXR0cmlidXRlcyggc3JjLCBkZXN0ICkgewogICAg
ICAgIHZhciBub2RlTmFtZTsKCiAgICAgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhp
bmcgZm9yIG5vbi1FbGVtZW50cwogICAgICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsK
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIGNsZWFyQXR0cmli
dXRlcyByZW1vdmVzIHRoZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50LAogICAgICAg
IC8vIGJ1dCBhbHNvIHJlbW92ZXMgdGhlIGF0dGFjaEV2ZW50IGV2ZW50cywgd2hpY2ggd2UgKmRv
KiB3YW50CiAgICAgICAgaWYgKCBkZXN0LmNsZWFyQXR0cmlidXRlcyApIHsKICAgICAgICAgICAg
ICAgIGRlc3QuY2xlYXJBdHRyaWJ1dGVzKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBtZXJnZUF0
dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1lcmdlcyBiYWNrIG9uIHRoZQogICAgICAgIC8v
IG9yaWdpbmFsIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZXZlbnRzCiAgICAgICAgaWYgKCBkZXN0Lm1l
cmdlQXR0cmlidXRlcyApIHsKICAgICAgICAgICAgICAgIGRlc3QubWVyZ2VBdHRyaWJ1dGVzKCBz
cmMgKTsKICAgICAgICB9CgogICAgICAgIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpOwoKICAgICAgICAvLyBJRTYtOCBmYWlsIHRvIGNsb25lIGNoaWxkcmVuIGluc2lkZSBv
YmplY3QgZWxlbWVudHMgdGhhdCB1c2UKICAgICAgICAvLyB0aGUgcHJvcHJpZXRhcnkgY2xhc3Np
ZCBhdHRyaWJ1dGUgdmFsdWUgKHJhdGhlciB0aGFuIHRoZSB0eXBlCiAgICAgICAgLy8gYXR0cmli
dXRlKSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBjb250ZW50IHRvIGRpc3BsYXkKICAgICAgICBp
ZiAoIG5vZGVOYW1lID09PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgIGRlc3Qub3V0ZXJI
VE1MID0gc3JjLm91dGVySFRNTDsKCiAgICAgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJp
bnB1dCIgJiYgKHNyYy50eXBlID09PSAiY2hlY2tib3giIHx8IHNyYy50eXBlID09PSAicmFkaW8i
KSApIHsKICAgICAgICAgICAgICAgIC8vIElFNi04IGZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNr
ZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3gKICAgICAgICAgICAgICAgIC8vIG9yIHJhZGlv
IGJ1dHRvbi4gV29yc2UsIElFNi03IGZhaWwgdG8gZ2l2ZSB0aGUgY2xvbmVkIGVsZW1lbnQKICAg
ICAgICAgICAgICAgIC8vIGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tl
ZCB2YWx1ZSBpc24ndCBhbHNvIHNldAogICAgICAgICAgICAgICAgaWYgKCBzcmMuY2hlY2tlZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5kZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hl
Y2tlZCA9IHNyYy5jaGVja2VkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8v
IElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNldHRpbmcgdGhlIHZhbHVlIG9mIGEgY2xv
bmVkCiAgICAgICAgICAgICAgICAvLyBjaGVja2JveC9yYWRpbyBidXR0b24gdG8gYW4gZW1wdHkg
c3RyaW5nIGluc3RlYWQgb2YgIm9uIgogICAgICAgICAgICAgICAgaWYgKCBkZXN0LnZhbHVlICE9
PSBzcmMudmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QudmFsdWUgPSBzcmMu
dmFsdWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIC8vIElFNi04IGZhaWxzIHRvIHJldHVy
biB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCiAgICAgICAgLy8g
c3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKICAgICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9
PT0gIm9wdGlvbiIgKSB7CiAgICAgICAgICAgICAgICBkZXN0LnNlbGVjdGVkID0gc3JjLmRlZmF1
bHRTZWxlY3RlZDsKCiAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFs
dWUgdG8gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbgogICAgICAgIC8vIGNsb25pbmcgb3RoZXIgdHlw
ZXMgb2YgaW5wdXQgZmllbGRzCiAgICAgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1
dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7CiAgICAgICAgICAgICAgICBkZXN0LmRl
ZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CiAgICAgICAgfQoKICAgICAgICAvLyBFdmVu
dCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5kbwog
ICAgICAgIC8vIGdldHMgY29waWVkIHRvbwogICAgICAgIGRlc3QucmVtb3ZlQXR0cmlidXRlKCBq
UXVlcnkuZXhwYW5kbyApOwp9CgpqUXVlcnkuYnVpbGRGcmFnbWVudCA9IGZ1bmN0aW9uKCBhcmdz
LCBub2Rlcywgc2NyaXB0cyApIHsKICAgICAgICB2YXIgZnJhZ21lbnQsIGNhY2hlYWJsZSwgY2Fj
aGVyZXN1bHRzLCBkb2M7CgogIC8vIG5vZGVzIG1heSBjb250YWluIGVpdGhlciBhbiBleHBsaWNp
dCBkb2N1bWVudCBvYmplY3QsCiAgLy8gYSBqUXVlcnkgY29sbGVjdGlvbiBvciBjb250ZXh0IG9i
amVjdC4KICAvLyBJZiBub2Rlc1swXSBjb250YWlucyBhIHZhbGlkIG9iamVjdCB0byBhc3NpZ24g
dG8gZG9jCiAgaWYgKCBub2RlcyAmJiBub2Rlc1swXSApIHsKICAgIGRvYyA9IG5vZGVzWzBdLm93
bmVyRG9jdW1lbnQgfHwgbm9kZXNbMF07CiAgfQoKICAvLyBFbnN1cmUgdGhhdCBhbiBhdHRyIG9i
amVjdCBkb2Vzbid0IGluY29ycmVjdGx5IHN0YW5kIGluIGFzIGEgZG9jdW1lbnQgb2JqZWN0CiAg
ICAgICAgLy8gQ2hyb21lIGFuZCBGaXJlZm94IHNlZW0gdG8gYWxsb3cgdGhpcyB0byBvY2N1ciBh
bmQgd2lsbCB0aHJvdyBleGNlcHRpb24KICAgICAgICAvLyBGaXhlcyAjODk1MAogICAgICAgIGlm
ICggIWRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ICkgewogICAgICAgICAgICAgICAgZG9jID0g
ZG9jdW1lbnQ7CiAgICAgICAgfQoKICAgICAgICAvLyBPbmx5IGNhY2hlICJzbWFsbCIgKDEvMiBL
QikgSFRNTCBzdHJpbmdzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBkb2N1bWVu
dAogICAgICAgIC8vIENsb25pbmcgb3B0aW9ucyBsb3NlcyB0aGUgc2VsZWN0ZWQgc3RhdGUsIHNv
IGRvbid0IGNhY2hlIHRoZW0KICAgICAgICAvLyBJRSA2IGRvZXNuJ3QgbGlrZSBpdCB3aGVuIHlv
dSBwdXQgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50cyBpbiBhIGZyYWdtZW50CiAgICAgICAg
Ly8gQWxzbywgV2ViS2l0IGRvZXMgbm90IGNsb25lICdjaGVja2VkJyBhdHRyaWJ1dGVzIG9uIGNs
b25lTm9kZSwgc28gZG9uJ3QgY2FjaGUKICAgICAgICBpZiAoIGFyZ3MubGVuZ3RoID09PSAxICYm
IHR5cGVvZiBhcmdzWzBdID09PSAic3RyaW5nIiAmJiBhcmdzWzBdLmxlbmd0aCA8IDUxMiAmJiBk
b2MgPT09IGRvY3VtZW50ICYmCiAgICAgICAgICAgICAgICBhcmdzWzBdLmNoYXJBdCgwKSA9PT0g
IjwiICYmICFybm9jYWNoZS50ZXN0KCBhcmdzWzBdICkgJiYgKGpRdWVyeS5zdXBwb3J0LmNoZWNr
Q2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGFyZ3NbMF0gKSkgKSB7CgogICAgICAgICAgICAgICAg
Y2FjaGVhYmxlID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBjYWNoZXJlc3VsdHMgPSBqUXVlcnku
ZnJhZ21lbnRzWyBhcmdzWzBdIF07CiAgICAgICAgICAgICAgICBpZiAoIGNhY2hlcmVzdWx0cyAm
JiBjYWNoZXJlc3VsdHMgIT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50
ID0gY2FjaGVyZXN1bHRzOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYg
KCAhZnJhZ21lbnQgKSB7CiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7CiAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW4oIGFyZ3MsIGRvYywg
ZnJhZ21lbnQsIHNjcmlwdHMgKTsKICAgICAgICB9CgogICAgICAgIGlmICggY2FjaGVhYmxlICkg
ewogICAgICAgICAgICAgICAgalF1ZXJ5LmZyYWdtZW50c1sgYXJnc1swXSBdID0gY2FjaGVyZXN1
bHRzID8gZnJhZ21lbnQgOiAxOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsgZnJhZ21lbnQ6
IGZyYWdtZW50LCBjYWNoZWFibGU6IGNhY2hlYWJsZSB9Owp9OwoKalF1ZXJ5LmZyYWdtZW50cyA9
IHt9OwoKalF1ZXJ5LmVhY2goewogICAgICAgIGFwcGVuZFRvOiAiYXBwZW5kIiwKICAgICAgICBw
cmVwZW5kVG86ICJwcmVwZW5kIiwKICAgICAgICBpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLAogICAg
ICAgIGluc2VydEFmdGVyOiAiYWZ0ZXIiLAogICAgICAgIHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0
aCIKfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgewogICAgICAgIGpRdWVyeS5mblsgbmFt
ZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IFtd
LAogICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksCiAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXNb
MF0ucGFyZW50Tm9kZTsKCiAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCAmJiBwYXJlbnQubm9k
ZVR5cGUgPT09IDExICYmIHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSAmJiBpbnNlcnQu
bGVuZ3RoID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRbIG9yaWdpbmFs
IF0oIHRoaXNbMF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CgogICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBsID0gaW5zZXJ0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZWxlbXMgPSAoaSA+IDAgPyB0aGlzLmNsb25lKHRydWUpIDogdGhp
cykuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBpbnNlcnRb
aV0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSByZXQuY29uY2F0KCBlbGVtcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwg
aW5zZXJ0LnNlbGVjdG9yICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKfSk7CgpmdW5j
dGlvbiBnZXRBbGwoIGVsZW0gKSB7CiAgICAgICAgaWYgKCAiZ2V0RWxlbWVudHNCeVRhZ05hbWUi
IGluIGVsZW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFn
TmFtZSggIioiICk7CgogICAgICAgIH0gZWxzZSBpZiAoICJxdWVyeVNlbGVjdG9yQWxsIiBpbiBl
bGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucXVlcnlTZWxlY3RvckFsbCggIioi
ICk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAg
fQp9CgovLyBVc2VkIGluIGNsZWFuLCBmaXhlcyB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcGVydHkK
ZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7CiAgICAgICAgaWYgKCBlbGVtLnR5
cGUgPT09ICJjaGVja2JveCIgfHwgZWxlbS50eXBlID09PSAicmFkaW8iICkgewogICAgICAgICAg
ICAgICAgZWxlbS5kZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKICAgICAgICB9Cn0KLy8g
RmluZHMgYWxsIGlucHV0cyBhbmQgcGFzc2VzIHRoZW0gdG8gZml4RGVmYXVsdENoZWNrZWQKZnVu
Y3Rpb24gZmluZElucHV0cyggZWxlbSApIHsKICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSgg
ZWxlbSwgImlucHV0IiApICkgewogICAgICAgICAgICAgICAgZml4RGVmYXVsdENoZWNrZWQoIGVs
ZW0gKTsKICAgICAgICB9IGVsc2UgaWYgKCAiZ2V0RWxlbWVudHNCeVRhZ05hbWUiIGluIGVsZW0g
KSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuZ3JlcCggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiaW5wdXQiKSwgZml4RGVmYXVsdENoZWNrZWQgKTsKICAgICAgICB9Cn0KCmpRdWVyeS5leHRl
bmQoewogICAgICAgIGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERh
dGFBbmRFdmVudHMgKSB7CiAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSBlbGVtLmNsb25lTm9k
ZSh0cnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNFbGVtZW50cywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaTsKCiAgICAgICAgICAgICAgICBpZiAoICghalF1ZXJ5LnN1cHBv
cnQubm9DbG9uZUV2ZW50IHx8ICFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkgJiYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVt
Lm5vZGVUeXBlID09PSAxMSkgJiYgIWpRdWVyeS5pc1hNTERvYyhlbGVtKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSUUgY29waWVzIGV2ZW50cyBib3VuZCB2aWEgYXR0YWNoRXZlbnQg
d2hlbiB1c2luZyBjbG9uZU5vZGUuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxpbmcg
ZGV0YWNoRXZlbnQgb24gdGhlIGNsb25lIHdpbGwgYWxzbyByZW1vdmUgdGhlIGV2ZW50cwogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBvcmlnaW5hbC4gSW4gb3JkZXIgdG8gZ2V0
IGFyb3VuZCB0aGlzLCB3ZSB1c2Ugc29tZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9w
cmlldGFyeSBtZXRob2RzIHRvIGNsZWFyIHRoZSBldmVudHMuIFRoYW5rcyB0byBNb29Ub29scwog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBndXlzIGZvciB0aGlzIGhvdG5lc3MuCgogICAgICAg
ICAgICAgICAgICAgICAgICBjbG9uZUZpeEF0dHJpYnV0ZXMoIGVsZW0sIGNsb25lICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBVc2luZyBTaXp6bGUgaGVyZSBpcyBjcmF6eSBzbG93LCBz
byB3ZSB1c2UgZ2V0RWxlbWVudHNCeVRhZ05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aW5zdGVhZAogICAgICAgICAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxl
bSApOwogICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25l
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlyZCBpdGVyYXRpb24gYmVjYXVzZSBJ
RSB3aWxsIHJlcGxhY2UgdGhlIGxlbmd0aCBwcm9wZXJ0eQogICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFyZSBjbG9uaW5nIHRoZSBib2R5IGFuZCBvbmUg
b2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnRzIG9uIHRoZSBwYWdlIGhh
cyBhIG5hbWUgb3IgaWQgb2YgImxlbmd0aCIKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
aSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgbm90IG51bGw7IEZp
eGVzICM5NTg3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZXN0RWxlbWVu
dHNbaV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUZp
eEF0dHJpYnV0ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUg
b3JpZ2luYWwgdG8gdGhlIGNsb25lCiAgICAgICAgICAgICAgICBpZiAoIGRhdGFBbmRFdmVudHMg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCgg
Y2xvbmUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IHNy
Y0VsZW1lbnRzW2ldOyArK2kgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZGVzdEVs
ZW1lbnRzID0gbnVsbDsKCiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQK
ICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTsKICAgICAgICB9LAoKICAgICAgICBjbGVhbjog
ZnVuY3Rpb24oIGVsZW1zLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApIHsKICAgICAgICAg
ICAgICAgIHZhciBjaGVja1NjcmlwdFR5cGU7CgogICAgICAgICAgICAgICAgY29udGV4dCA9IGNv
bnRleHQgfHwgZG9jdW1lbnQ7CgogICAgICAgICAgICAgICAgLy8gIWNvbnRleHQuY3JlYXRlRWxl
bWVudCBmYWlscyBpbiBJRSB3aXRoIGFuIGVycm9yIGJ1dCByZXR1cm5zIHR5cGVvZiAnb2JqZWN0
JwogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5jcmVhdGVFbGVtZW50ID09PSAi
dW5kZWZpbmVkIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQu
b3duZXJEb2N1bWVudCB8fCBjb250ZXh0WzBdICYmIGNvbnRleHRbMF0ub3duZXJEb2N1bWVudCB8
fCBkb2N1bWVudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmV0ID0g
W10sIGo7CgogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGVs
ZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIGVsZW0gPT09ICJudW1iZXIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0gKz0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENvbnZlcnQgaHRtbCBzdHJpbmcgaW50byBET00gbm9kZXMKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNvbnRleHQuY3JlYXRlVGV4dE5vZGUo
IGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ICJYSFRNTCItc3R5bGUgdGFn
cyBpbiBhbGwgYnJvd3NlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0gPSBlbGVtLnJlcGxhY2UocnhodG1sVGFnLCAiPCQxPjwvJDI+Iik7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSB3aGl0ZXNwYWNlLCBvdGhlcndp
c2UgaW5kZXhPZiB3b24ndCB3b3JrIGFzIGV4cGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdGFnID0gKHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIiIs
ICIiXSlbMV0udG9Mb3dlckNhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoID0g
d3JhcFswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2Zm
IGV4dHJhIHdyYXBwZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXYuaW5uZXJIVE1MID0gd3JhcFsxXSArIGVsZW0gKyB3cmFwWzJdOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIHJpZ2h0IGRlcHRoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRlcHRoLS0gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdiA9IGRpdi5s
YXN0Q2hpbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2lu
c2VydGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVudHMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnRib2R5ICkgewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBh
IDx0YWJsZT4sICptYXkqIGhhdmUgc3B1cmlvdXMgPHRib2R5PgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzQm9keSA9IHJ0Ym9keS50ZXN0KGVs
ZW0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRib2R5ID0gdGFnID09PSAidGFibGUiICYmICFoYXNCb2R5ID8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJz
dENoaWxkICYmIGRpdi5maXJzdENoaWxkLmNoaWxkTm9kZXMgOgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3
YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcFsxXSA9PT0gIjx0YWJsZT4i
ICYmICFoYXNCb2R5ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNoaWxkTm9kZXMgOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAtLWogKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
bm9kZU5hbWUoIHRib2R5WyBqIF0sICJ0Ym9keSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVz
Lmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRib2R5WyBqIF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGJv
ZHlbIGogXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGNvbXBsZXRlbHkga2lsbHMgbGVh
ZGluZyB3aGl0ZXNwYWNlIHdoZW4gaW5uZXJIVE1MIGlzIHVzZWQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNw
YWNlICYmIHJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCBlbGVtICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoIGNvbnRl
eHQuY3JlYXRlVGV4dE5vZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKGVsZW0pWzBdICksIGRp
di5maXJzdENoaWxkICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRpdi5jaGls
ZE5vZGVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXRzIGRlZmF1bHRDaGVj
a2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2JveGVzCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFib3V0IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBET00gaW4gSUUgNi83ICgjODA2MCkKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhalF1ZXJ5LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGVsZW1bMF0gJiYgdHlwZW9mIChsZW4gPSBlbGVtLmxlbmd0aCkgPT09
ICJudW1iZXIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggaiA9IDA7IGogPCBsZW47IGorKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmluZElucHV0cyggZWxlbVtqXSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kSW5w
dXRzKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGVsZW0gKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSBqUXVlcnkubWVyZ2UoIHJldCwgZWxlbSApOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBmcmFnbWVu
dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTY3JpcHRUeXBlID0gZnVuY3Rpb24o
IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFlbGVtLnR5
cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyByZXRbaV07IGkrKyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNjcmlwdHMgJiYgalF1ZXJ5
Lm5vZGVOYW1lKCByZXRbaV0sICJzY3JpcHQiICkgJiYgKCFyZXRbaV0udHlwZSB8fCByZXRbaV0u
dHlwZS50b0xvd2VyQ2FzZSgpID09PSAidGV4dC9qYXZhc2NyaXB0IikgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLnB1c2goIHJldFtpXS5wYXJlbnRO
b2RlID8gcmV0W2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHJldFtpXSApIDogcmV0W2ldICk7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldFtpXS5ub2RlVHlwZSA9PT0gMSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzVGFn
cyA9IGpRdWVyeS5ncmVwKCByZXRbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJzY3JpcHQiICks
IGNoZWNrU2NyaXB0VHlwZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgganNU
YWdzICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBy
ZXRbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OwogICAgICAgIH0sCgogICAgICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkgewogICAg
ICAgICAgICAgICAgdmFyIGRhdGEsIGlkLCBjYWNoZSA9IGpRdWVyeS5jYWNoZSwgaW50ZXJuYWxL
ZXkgPSBqUXVlcnkuZXhwYW5kbywgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLAogICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGVFeHBhbmRvID0galF1ZXJ5LnN1cHBvcnQuZGVsZXRl
RXhwYW5kbzsKCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0g
ZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFbZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
XSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBlbGVtWyBqUXVl
cnkuZXhwYW5kbyBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpZCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gY2FjaGVbIGlkIF0gJiYgY2FjaGVbIGlk
IF1bIGludGVybmFsS2V5IF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZGF0YSAmJiBkYXRhLmV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciB0eXBlIGluIGRhdGEuZXZlbnRzICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQg
alF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0
eXBlLCBkYXRhLmhhbmRsZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnVsbCB0aGUgRE9NIHJl
ZmVyZW5jZSB0byBhdm9pZCBJRTYvNy84IGxlYWsgKCM3MDU0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLmhhbmRsZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oYW5kbGUuZWxlbSA9IG51bGw7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGRlbGV0ZUV4cGFuZG8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggalF1ZXJ5
LmV4cGFuZG8gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfSk7CgpmdW5jdGlvbiBldmFs
U2NyaXB0KCBpLCBlbGVtICkgewogICAgICAgIGlmICggZWxlbS5zcmMgKSB7CiAgICAgICAgICAg
ICAgICBqUXVlcnkuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogZWxlbS5zcmMs
CiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YVR5cGU6ICJzY3JpcHQiCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoICggZWxlbS50ZXh0IHx8IGVs
ZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lckhUTUwgfHwgIiIgKS5yZXBsYWNlKCByY2xlYW5T
Y3JpcHQsICIvKiQwKi8iICkgKTsKICAgICAgICB9CgogICAgICAgIGlmICggZWxlbS5wYXJlbnRO
b2RlICkgewogICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVt
ICk7CiAgICAgICAgfQp9CgoKCgp2YXIgcmFscGhhID0gL2FscGhhXChbXildKlwpL2ksCiAgICAg
ICAgcm9wYWNpdHkgPSAvb3BhY2l0eT0oW14pXSopLywKICAgICAgICAvLyBmaXhlZCBmb3IgSUU5
LCBzZWUgIzgzNDYKICAgICAgICBydXBwZXIgPSAvKFtBLVpdfF5tcykvZywKICAgICAgICBybnVt
cHggPSAvXi0/XGQrKD86cHgpPyQvaSwKICAgICAgICBybnVtID0gL14tP1xkLywKICAgICAgICBy
cmVsTnVtID0gL14oW1wtK10pPShbXC0rLlxkZV0rKS8sCgogICAgICAgIGNzc1Nob3cgPSB7IHBv
c2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiwgZGlzcGxheTogImJsb2Nr
IiB9LAogICAgICAgIGNzc1dpZHRoID0gWyAiTGVmdCIsICJSaWdodCIgXSwKICAgICAgICBjc3NI
ZWlnaHQgPSBbICJUb3AiLCAiQm90dG9tIiBdLAogICAgICAgIGN1ckNTUywKCiAgICAgICAgZ2V0
Q29tcHV0ZWRTdHlsZSwKICAgICAgICBjdXJyZW50U3R5bGU7CgpqUXVlcnkuZm4uY3NzID0gZnVu
Y3Rpb24oIG5hbWUsIHZhbHVlICkgewogICAgICAgIC8vIFNldHRpbmcgJ3VuZGVmaW5lZCcgaXMg
YSBuby1vcAogICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB2YWx1ZSA9PT0g
dW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAg
ICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgbmFtZSwgdmFsdWUsIHRydWUsIGZ1bmN0
aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAh
PT0gdW5kZWZpbmVkID8KICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVt
LCBuYW1lLCB2YWx1ZSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxl
bSwgbmFtZSApOwogICAgICAgIH0pOwp9OwoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgLy8gQWRk
IGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0CiAgICAg
ICAgLy8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5CiAg
ICAgICAgY3NzSG9va3M6IHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJh
Y2sgZnJvbSBvcGFjaXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCAib3BhY2l0eSIsICJvcGFjaXR5IiApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIgPyAiMSIgOiBy
ZXQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zdHlsZS5vcGFjaXR5Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIEV4Y2x1ZGUgdGhlIGZv
bGxvd2luZyBjc3MgcHJvcGVydGllcyB0byBhZGQgcHgKICAgICAgICBjc3NOdW1iZXI6IHsKICAg
ICAgICAgICAgICAgICJmaWxsT3BhY2l0eSI6IHRydWUsCiAgICAgICAgICAgICAgICAiZm9udFdl
aWdodCI6IHRydWUsCiAgICAgICAgICAgICAgICAibGluZUhlaWdodCI6IHRydWUsCiAgICAgICAg
ICAgICAgICAib3BhY2l0eSI6IHRydWUsCiAgICAgICAgICAgICAgICAib3JwaGFucyI6IHRydWUs
CiAgICAgICAgICAgICAgICAid2lkb3dzIjogdHJ1ZSwKICAgICAgICAgICAgICAgICJ6SW5kZXgi
OiB0cnVlLAogICAgICAgICAgICAgICAgInpvb20iOiB0cnVlCiAgICAgICAgfSwKCiAgICAgICAg
Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZQog
ICAgICAgIC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWUKICAgICAgICBjc3NQcm9wczog
ewogICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIGZsb2F0IGNzcyBwcm9wZXJ0eQogICAgICAg
ICAgICAgICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxvYXQgPyAiY3NzRmxvYXQiIDog
InN0eWxlRmxvYXQiCiAgICAgICAgfSwKCiAgICAgICAgLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxl
IHByb3BlcnR5IG9uIGEgRE9NIE5vZGUKICAgICAgICBzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5h
bWUsIHZhbHVlLCBleHRyYSApIHsKICAgICAgICAgICAgICAgIC8vIERvbid0IHNldCBzdHlsZXMg
b24gdGV4dCBhbmQgY29tbWVudCBub2RlcwogICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCBl
bGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJp
Z2h0IG5hbWUKICAgICAgICAgICAgICAgIHZhciByZXQsIHR5cGUsIG9yaWdOYW1lID0galF1ZXJ5
LmNhbWVsQ2FzZSggbmFtZSApLAogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IGVsZW0u
c3R5bGUsIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwoKICAgICAgICAgICAg
ICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgb3JpZ05hbWU7CgogICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCiAgICAgICAgICAg
ICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSB0eXBlb2YgdmFsdWU7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0
IHJlbGF0aXZlIG51bWJlciBzdHJpbmdzICgrPSBvciAtPSkgdG8gcmVsYXRpdmUgbnVtYmVycy4g
IzczNDUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiAmJiAo
cmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9ICggKyggcmV0WzFdICsgMSkgKiArcmV0WzJdICkgKyBwYXJzZUZsb2F0
KCBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGaXhlcyBidWcgIzkyMzcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID0gIm51bWJlciI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IE5hTiBhbmQgbnVsbCB2YWx1ZXMgYXJlbid0IHNl
dC4gU2VlOiAjNzExNgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09IG51bGwg
fHwgdHlwZSA9PT0gIm51bWJlciIgJiYgaXNOYU4oIHZhbHVlICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgJ3B4
JyB0byB0aGUgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcykKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAhalF1ZXJ5LmNzc051bWJlclsg
b3JpZ05hbWUgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSAi
cHgiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qg
c2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaG9v
a3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgKHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1
ZSApKSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdyYXBwZWQgdG8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGVycm9ycyB3aGVuICdpbnZhbGlk
JyB2YWx1ZXMgYXJlIHByb3ZpZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Rml4ZXMgYnVnICM1NTA5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlWyBuYW1lIF0gPSB2YWx1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVk
IHZhbHVlIGZyb20gdGhlcmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAi
Z2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSkg
IT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmV0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdAogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVbIG5hbWUgXTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9LAoKICAgICAgICBjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSAp
IHsKICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tzOwoKICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQogICAgICAgICAg
ICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKICAgICAgICAgICAgICAgIGhv
b2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07CiAgICAgICAgICAgICAgICBuYW1lID0galF1
ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgbmFtZTsKCiAgICAgICAgICAgICAgICAvLyBjc3NGbG9h
dCBuZWVkcyBhIHNwZWNpYWwgdHJlYXRtZW50CiAgICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09
ICJjc3NGbG9hdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiZmxvYXQiOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlk
ZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCiAgICAgICAgICAgICAgICBpZiAo
IGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIHRydWUs
IGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXQ7CgogICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhl
IGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXQKICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGN1ckNTUyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1ckNTUyggZWxl
bSwgbmFtZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIEEgbWV0
aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJvcGVydGllcyB0byBnZXQgY29y
cmVjdCBjYWxjdWxhdGlvbnMKICAgICAgICBzd2FwOiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywg
Y2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICB2YXIgb2xkID0ge307CgogICAgICAgICAgICAg
ICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCiAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBvcHRpb25zICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoIGVsZW0gKTsKCiAgICAg
ICAgICAgICAgICAvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKICAgICAgICAgICAgICAgIGZvciAo
IG5hbWUgaW4gb3B0aW9ucyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZVsg
bmFtZSBdID0gb2xkWyBuYW1lIF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9KTsKCi8v
IERFUFJFQ0FURUQsIFVzZSBqUXVlcnkuY3NzKCkgaW5zdGVhZApqUXVlcnkuY3VyQ1NTID0galF1
ZXJ5LmNzczsKCmpRdWVyeS5lYWNoKFsiaGVpZ2h0IiwgIndpZHRoIl0sIGZ1bmN0aW9uKCBpLCBu
YW1lICkgewogICAgICAgIGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0gewogICAgICAgICAgICAg
ICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkgewogICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgdmFsOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRl
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ub2Zmc2V0V2lk
dGggIT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2V0V0goIGVsZW0sIG5hbWUsIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5zd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZ2V0V0goIGVsZW0sIG5hbWUsIGV4
dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcm51bXB4LnRlc3QoIHZhbHVlICkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIG5lZ2F0aXZlIHdpZHRoIGFuZCBoZWln
aHQgdmFsdWVzICMxNTk5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBw
YXJzZUZsb2F0KCB2YWx1ZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHZhbHVlID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgKyAicHgiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfTsKfSk7CgppZiAoICFqUXVlcnkuc3VwcG9ydC5vcGFjaXR5ICkgewog
ICAgICAgIGpRdWVyeS5jc3NIb29rcy5vcGFjaXR5ID0gewogICAgICAgICAgICAgICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElF
IHVzZXMgZmlsdGVycyBmb3Igb3BhY2l0eQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cm9wYWNpdHkudGVzdCggKGNvbXB1dGVkICYmIGVsZW0uY3VycmVudFN0eWxlID8gZWxlbS5jdXJy
ZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHlsZS5maWx0ZXIpIHx8ICIiICkgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICggcGFyc2VGbG9hdCggUmVnRXhwLiQxICkgLyAxMDAgKSAr
ICIiIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCA/ICIxIiA6ICIi
OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVt
LCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbS5zdHls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1
cnJlbnRTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ID0galF1
ZXJ5LmlzTmFOKCB2YWx1ZSApID8gIiIgOiAiYWxwaGEob3BhY2l0eT0iICsgdmFsdWUgKiAxMDAg
KyAiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gY3VycmVudFN0
eWxlICYmIGN1cnJlbnRTdHlsZS5maWx0ZXIgfHwgc3R5bGUuZmlsdGVyIHx8ICIiOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRv
ZXMgbm90IGhhdmUgbGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGl0IGJ5
IHNldHRpbmcgdGhlIHpvb20gbGV2ZWwKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuem9v
bSA9IDE7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzZXR0aW5nIG9wYWNpdHkgdG8g
MSwgYW5kIG5vIG90aGVyIGZpbHRlcnMgZXhpc3QgLSBhdHRlbXB0IHRvIHJlbW92ZSBmaWx0ZXIg
YXR0cmlidXRlICM2NjUyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPj0gMSAm
JiBqUXVlcnkudHJpbSggZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgIiIgKSApID09PSAiIiApIHsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIg
dG8gbnVsbCwgIiIgJiAiICIgc3RpbGwgbGVhdmUgImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgImZpbHRlcjoiIGlzIHByZXNlbnQg
YXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gYXZvaWQgdGhpcwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSBpcyBJ
RSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBpcyB0aGlzIGNvZGUgcGF0aC4uLgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgdGhlcmUgaXMgbm8g
ZmlsdGVyIHN0eWxlIGFwcGxpZWQgaW4gYSBjc3MgcnVsZSwgd2UgYXJlIGRvbmUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxl
LmZpbHRlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgc2V0IG5ldyBmaWx0
ZXIgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmZpbHRlciA9IHJhbHBoYS50
ZXN0KCBmaWx0ZXIgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnJl
cGxhY2UoIHJhbHBoYSwgb3BhY2l0eSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWx0ZXIgKyAiICIgKyBvcGFjaXR5OwogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cn0K
CmpRdWVyeShmdW5jdGlvbigpIHsKICAgICAgICAvLyBUaGlzIGhvb2sgY2Fubm90IGJlIGFkZGVk
IHVudGlsIERPTSByZWFkeSBiZWNhdXNlIHRoZSBzdXBwb3J0IHRlc3QKICAgICAgICAvLyBmb3Ig
aXQgaXMgbm90IHJ1biB1bnRpbCBhZnRlciBET00gcmVhZHkKICAgICAgICBpZiAoICFqUXVlcnku
c3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgewogICAgICAgICAgICAgICAgalF1ZXJ5LmNz
c0hvb2tzLm1hcmdpblJpZ2h0ID0gewogICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVl
IGZvciBtYXJnaW4tcmlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXb3Jr
IGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5nIGVsZW1lbnQgZGlzcGxheSB0byBpbmxpbmUt
YmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zd2FwKCBlbGVtLCB7ICJkaXNwbGF5IjogImlu
bGluZS1ibG9jayIgfSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSBjdXJDU1MoIGVsZW0sICJtYXJnaW4tcmlnaHQiLCAi
bWFyZ2luUmlnaHQiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXQgPSBlbGVtLnN0eWxlLm1hcmdpblJpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQp9KTsKCmlmICggZG9jdW1lbnQuZGVm
YXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKICAg
ICAgICBnZXRDb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CiAgICAgICAg
ICAgICAgICB2YXIgcmV0LCBkZWZhdWx0VmlldywgY29tcHV0ZWRTdHlsZTsKCiAgICAgICAgICAg
ICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCBydXBwZXIsICItJDEiICkudG9Mb3dlckNhc2UoKTsK
CiAgICAgICAgICAgICAgICBpZiAoICEoZGVmYXVsdFZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQu
ZGVmYXVsdFZpZXcpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggKGNvbXB1dGVkU3R5bGUg
PSBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICkpICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXQgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoIG5h
bWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgPT09ICIiICYmICFqUXVlcnku
Y29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGVsZW0gKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0s
IG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKfQoKaWYgKCBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQuY3VycmVudFN0eWxlICkgewogICAgICAgIGN1cnJlbnRTdHlsZSA9IGZ1bmN0
aW9uKCBlbGVtLCBuYW1lICkgewogICAgICAgICAgICAgICAgdmFyIGxlZnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IGVsZW0uY3VycmVudFN0eWxlICYmIGVsZW0uY3VycmVudFN0eWxl
WyBuYW1lIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHJzTGVmdCA9IGVsZW0ucnVudGltZVN0
eWxlICYmIGVsZW0ucnVudGltZVN0eWxlWyBuYW1lIF0sCiAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlID0gZWxlbS5zdHlsZTsKCiAgICAgICAgICAgICAgICAvLyBGcm9tIHRoZSBhd2Vzb21l
IGhhY2sgYnkgRGVhbiBFZHdhcmRzCiAgICAgICAgICAgICAgICAvLyBodHRwOi8vZXJpay5lYWUu
bmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCgogICAgICAg
ICAgICAgICAgLy8gSWYgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIHJlZ3VsYXIgcGl4ZWwgbnVt
YmVyCiAgICAgICAgICAgICAgICAvLyBidXQgYSBudW1iZXIgdGhhdCBoYXMgYSB3ZWlyZCBlbmRp
bmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKICAgICAgICAgICAgICAgIGlmICgg
IXJudW1weC50ZXN0KCByZXQgKSAmJiBybnVtLnRlc3QoIHJldCApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzCiAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnQgPSBzdHlsZS5sZWZ0OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJzTGVmdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gZWxlbS5jdXJyZW50U3R5bGUubGVmdDsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5s
ZWZ0ID0gbmFtZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogKHJldCB8fCAwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gc3R5bGUucGl4ZWxMZWZ0ICsgInB4IjsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGUubGVmdCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cnNMZWZ0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucnVudGltZVN0
eWxlLmxlZnQgPSByc0xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICJhdXRvIiA6IHJldDsK
ICAgICAgICB9Owp9CgpjdXJDU1MgPSBnZXRDb21wdXRlZFN0eWxlIHx8IGN1cnJlbnRTdHlsZTsK
CmZ1bmN0aW9uIGdldFdIKCBlbGVtLCBuYW1lLCBleHRyYSApIHsKCiAgICAgICAgLy8gU3RhcnQg
d2l0aCBvZmZzZXQgcHJvcGVydHkKICAgICAgICB2YXIgdmFsID0gbmFtZSA9PT0gIndpZHRoIiA/
IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhlaWdodCwKICAgICAgICAgICAgICAgIHdo
aWNoID0gbmFtZSA9PT0gIndpZHRoIiA/IGNzc1dpZHRoIDogY3NzSGVpZ2h0OwoKICAgICAgICBp
ZiAoIHZhbCA+IDAgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAiYm9yZGVyIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHdoaWNoLCBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFleHRyYSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBqUXVl
cnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyB0aGlzICkgKSB8fCAwOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV4
dHJhID09PSAibWFyZ2luIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIHRoaXMgKSAp
IHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBqUXVlcnku
Y3NzKCBlbGVtLCAiYm9yZGVyIiArIHRoaXMgKyAiV2lkdGgiICkgKSB8fCAwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCArICJweCI7CiAgICAgICAg
fQoKICAgICAgICAvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVkIGNzcyBp
ZiBuZWNlc3NhcnkKICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIG5hbWUgKTsKICAg
ICAgICBpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICB2YWwg
PSBlbGVtLnN0eWxlWyBuYW1lIF0gfHwgMDsKICAgICAgICB9CiAgICAgICAgLy8gTm9ybWFsaXpl
ICIiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmEKICAgICAgICB2YWwgPSBwYXJzZUZsb2F0
KCB2YWwgKSB8fCAwOwoKICAgICAgICAvLyBBZGQgcGFkZGluZywgYm9yZGVyLCBtYXJnaW4KICAg
ICAgICBpZiAoIGV4dHJhICkgewogICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHdoaWNoLCBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGpR
dWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIHRoaXMgKSApIHx8IDA7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgImJvcmRl
ciIgKyB0aGlzICsgIldpZHRoIiApICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcygg
ZWxlbSwgZXh0cmEgKyB0aGlzICkgKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB2YWwgKyAicHgiOwp9
CgppZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHByLmZpbHRlcnMgKSB7CiAgICAgICAgalF1
ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgIHZhciB3aWR0aCA9IGVsZW0ub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCA9IGVsZW0ub2Zmc2V0SGVpZ2h0OwoKICAgICAgICAgICAgICAgIHJldHVybiAod2lk
dGggPT09IDAgJiYgaGVpZ2h0ID09PSAwKSB8fCAoIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlSGlk
ZGVuT2Zmc2V0cyAmJiAoZWxlbS5zdHlsZS5kaXNwbGF5IHx8IGpRdWVyeS5jc3MoIGVsZW0sICJk
aXNwbGF5IiApKSA9PT0gIm5vbmUiKTsKICAgICAgICB9OwoKICAgICAgICBqUXVlcnkuZXhwci5m
aWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVy
biAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsKICAgICAgICB9Owp9CgoKCgp2
YXIgcjIwID0gLyUyMC9nLAogICAgICAgIHJicmFja2V0ID0gL1xbXF0kLywKICAgICAgICByQ1JM
RiA9IC9ccj9cbi9nLAogICAgICAgIHJoYXNoID0gLyMuKiQvLAogICAgICAgIHJoZWFkZXJzID0g
L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUgbGVhdmVzIGFuIFxyIGNoYXJh
Y3RlciBhdCBFT0wKICAgICAgICByaW5wdXQgPSAvXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0
ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFy
Y2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksCiAgICAgICAgLy8gIzc2NTMsICM4MTI1LCAj
ODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uCiAgICAgICAgcmxvY2FsUHJvdG9jb2wgPSAv
Xig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQp
OiQvLAogICAgICAgIHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAogICAgICAgIHJwcm90
b2NvbCA9IC9eXC9cLy8sCiAgICAgICAgcnF1ZXJ5ID0gL1w/LywKICAgICAgICByc2NyaXB0ID0g
LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksCiAg
ICAgICAgcnNlbGVjdFRleHRhcmVhID0gL14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksCiAgICAgICAg
cnNwYWNlc0FqYXggPSAvXHMrLywKICAgICAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCiAgICAg
ICAgcnVybCA9IC9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/
LywKCiAgICAgICAgLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZAogICAgICAg
IF9sb2FkID0galF1ZXJ5LmZuLmxvYWQsCgogICAgICAgIC8qIFByZWZpbHRlcnMKICAgICAgICAg
KiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBh
amF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQogICAgICAgICAqIDIpIFRoZXNlIGFyZSBjYWxs
ZWQ6CiAgICAgICAgICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydAogICAgICAg
ICAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlm
IHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSkKICAgICAgICAgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBl
CiAgICAgICAgICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKICAgICAg
ICAgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQg
VEhFTiBjb250aW51ZSBkb3duIHRvICIqIiBpZiBuZWVkZWQKICAgICAgICAgKi8KICAgICAgICBw
cmVmaWx0ZXJzID0ge30sCgogICAgICAgIC8qIFRyYW5zcG9ydHMgYmluZGluZ3MKICAgICAgICAg
KiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCiAgICAgICAgICogMikgdGhlIGNhdGNoYWxsIHN5bWJv
bCAiKiIgY2FuIGJlIHVzZWQKICAgICAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRo
IHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCiAgICAgICAg
ICovCiAgICAgICAgdHJhbnNwb3J0cyA9IHt9LAoKICAgICAgICAvLyBEb2N1bWVudCBsb2NhdGlv
bgogICAgICAgIGFqYXhMb2NhdGlvbiwKCiAgICAgICAgLy8gRG9jdW1lbnQgbG9jYXRpb24gc2Vn
bWVudHMKICAgICAgICBhamF4TG9jUGFydHMsCiAgICAgICAgCiAgICAgICAgLy8gQXZvaWQgY29t
bWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5k
IGV2YWRlIGNvbXByZXNzaW9uCiAgICAgICAgYWxsVHlwZXMgPSBbIiovIl0gKyBbIioiXTsKCi8v
ICM4MTM4LCBJRSBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCi8vIGEgZmll
bGQgZnJvbSB3aW5kb3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9tYWluIGhhcyBiZWVuIHNldAp0
cnkgewogICAgICAgIGFqYXhMb2NhdGlvbiA9IGxvY2F0aW9uLmhyZWY7Cn0gY2F0Y2goIGUgKSB7
CiAgICAgICAgLy8gVXNlIHRoZSBocmVmIGF0dHJpYnV0ZSBvZiBhbiBBIGVsZW1lbnQKICAgICAg
ICAvLyBzaW5jZSBJRSB3aWxsIG1vZGlmeSBpdCBnaXZlbiBkb2N1bWVudC5sb2NhdGlvbgogICAg
ICAgIGFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOwogICAgICAg
IGFqYXhMb2NhdGlvbi5ocmVmID0gIiI7CiAgICAgICAgYWpheExvY2F0aW9uID0gYWpheExvY2F0
aW9uLmhyZWY7Cn0KCi8vIFNlZ21lbnQgbG9jYXRpb24gaW50byBwYXJ0cwphamF4TG9jUGFydHMg
PSBydXJsLmV4ZWMoIGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107CgovLyBCYXNl
ICJjb25zdHJ1Y3RvciIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRy
YW5zcG9ydApmdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSAp
IHsKCiAgICAgICAgLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0
cyB0byAiKiIKICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVu
YyApIHsKCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09
ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICBmdW5jID0gZGF0YVR5cGVFeHBy
ZXNzaW9uOwogICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggZnVuYyApICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YVR5cGVzID0gZGF0
YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkuc3BsaXQoIHJzcGFjZXNBamF4ICksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoID0gZGF0YVR5cGVzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlQmVmb3JlOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVz
c2lvbgogICAgICAgICAgICAgICAgICAgICAgICBmb3IoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkgXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjb250cm9sIGlmIHdlJ3JlIGFz
a2VkIHRvIGFkZCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbnkg
ZXhpc3RpbmcgZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlQmVm
b3JlID0gL15cKy8udGVzdCggZGF0YVR5cGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHBsYWNlQmVmb3JlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZS5zdWJzdHIoIDEgKSB8fCAiKiI7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwg
W107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBhZGQgdG8gdGhl
IHN0cnVjdHVyZSBhY2NvcmRpbmdseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3RbIHBsYWNlQmVmb3JlID8gInVuc2hpZnQiIDogInB1c2giIF0oIGZ1bmMgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cn0KCi8vIEJhc2Ug
aW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cwpmdW5jdGlv
biBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmln
aW5hbE9wdGlvbnMsIGpxWEhSLAogICAgICAgICAgICAgICAgZGF0YVR5cGUgLyogaW50ZXJuYWwg
Ki8sIGluc3BlY3RlZCAvKiBpbnRlcm5hbCAqLyApIHsKCiAgICAgICAgZGF0YVR5cGUgPSBkYXRh
VHlwZSB8fCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdOwogICAgICAgIGluc3BlY3RlZCA9IGluc3Bl
Y3RlZCB8fCB7fTsKCiAgICAgICAgaW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTsKCiAgICAg
ICAgdmFyIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0sCiAgICAgICAgICAgICAgICBpID0g
MCwKICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxpc3QgPyBsaXN0Lmxlbmd0aCA6IDAsCiAgICAg
ICAgICAgICAgICBleGVjdXRlT25seSA9ICggc3RydWN0dXJlID09PSBwcmVmaWx0ZXJzICksCiAg
ICAgICAgICAgICAgICBzZWxlY3Rpb247CgogICAgICAgIGZvcig7IGkgPCBsZW5ndGggJiYgKCBl
eGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICk7IGkrKyApIHsKICAgICAgICAgICAgICAgIHNlbGVj
dGlvbiA9IGxpc3RbIGkgXSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApOwogICAg
ICAgICAgICAgICAgLy8gSWYgd2UgZ290IHJlZGlyZWN0ZWQgdG8gYW5vdGhlciBkYXRhVHlwZQog
ICAgICAgICAgICAgICAgLy8gd2UgdHJ5IHRoZXJlIGlmIGV4ZWN1dGluZyBvbmx5IGFuZCBub3Qg
ZG9uZSBhbHJlYWR5CiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3Rpb24gPT09ICJz
dHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFleGVjdXRlT25seSB8fCBp
bnNwZWN0ZWRbIHNlbGVjdGlvbiBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGVjdGlvbiA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0
KCBzZWxlY3Rpb24gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24g
PSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlv
bnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIElmIHdlJ3JlIG9ubHkg
ZXhlY3V0aW5nIG9yIG5vdGhpbmcgd2FzIHNlbGVjdGVkCiAgICAgICAgLy8gd2UgdHJ5IHRoZSBj
YXRjaGFsbCBkYXRhVHlwZSBpZiBub3QgZG9uZSBhbHJlYWR5CiAgICAgICAgaWYgKCAoIGV4ZWN1
dGVPbmx5IHx8ICFzZWxlY3Rpb24gKSAmJiAhaW5zcGVjdGVkWyAiKiIgXSApIHsKICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRp
b25zLCBqcVhIUiwgIioiLCBpbnNwZWN0ZWQgKTsKICAgICAgICB9CiAgICAgICAgLy8gdW5uZWNl
c3Nhcnkgd2hlbiBvbmx5IGV4ZWN1dGluZyAocHJlZmlsdGVycykKICAgICAgICAvLyBidXQgaXQn
bGwgYmUgaWdub3JlZCBieSB0aGUgY2FsbGVyIGluIHRoYXQgY2FzZQogICAgICAgIHJldHVybiBz
ZWxlY3Rpb247Cn0KCi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucwovLyB0aGF0
IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZCkKLy8gRml4ZXMg
Izk4ODcKZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7CiAgICAgICAgdmFyIGtl
eSwgZGVlcCwKICAgICAgICAgICAgICAgIGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5n
cy5mbGF0T3B0aW9ucyB8fCB7fTsKICAgICAgICBmb3IoIGtleSBpbiBzcmMgKSB7CiAgICAgICAg
ICAgICAgICBpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVw
ID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgICAgaWYgKCBkZWVwICkgewogICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCgg
dHJ1ZSwgdGFyZ2V0LCBkZWVwICk7CiAgICAgICAgfQp9CgpqUXVlcnkuZm4uZXh0ZW5kKHsKICAg
ICAgICBsb2FkOiBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgewogICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBfbG9hZCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCiAg
ICAgICAgICAgICAgICAvLyBEb24ndCBkbyBhIHJlcXVlc3QgaWYgbm8gZWxlbWVudHMgYXJlIGJl
aW5nIHJlcXVlc3RlZAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIXRoaXMubGVuZ3RoICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICB2YXIgb2ZmID0gdXJsLmluZGV4T2YoICIgIiApOwogICAgICAgICAg
ICAgICAgaWYgKCBvZmYgPj0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVj
dG9yID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAvLyBEZWZhdWx0IHRvIGEgR0VUIHJlcXVlc3QKICAgICAgICAgICAgICAgIHZhciB0
eXBlID0gIkdFVCI7CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIg
d2FzIHByb3ZpZGVkCiAgICAgICAgICAgICAgICBpZiAoIHBhcmFtcyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zID0gdW5kZWZpbmVkOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZwogICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0IiApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBqUXVlcnkucGFyYW0oIHBhcmFtcywg
alF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSAiUE9TVCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgICAg
ICAgICAgLy8gUmVxdWVzdCB0aGUgcmVtb3RlIGRvY3VtZW50CiAgICAgICAgICAgICAgICBqUXVl
cnkuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTog
Imh0bWwiLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIENvbXBsZXRlIGNhbGxiYWNrIChyZXNwb25zZVRleHQgaXMgdXNlZCBp
bnRlcm5hbGx5KQogICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oIGpx
WEhSLCBzdGF0dXMsIHJlc3BvbnNlVGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTdG9yZSB0aGUgcmVzcG9uc2UgYXMgc3BlY2lmaWVkIGJ5IHRoZSBqcVhIUiBvYmpl
Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVRleHQgPSBqcVhIUi5y
ZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc3VjY2Vz
c2Z1bCwgaW5qZWN0IHRoZSBIVE1MIGludG8gYWxsIHRoZSBtYXRjaGVkIGVsZW1lbnRzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqcVhIUi5pc1Jlc29sdmVkKCkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjNDgyNTogR2V0IHRoZSBh
Y3R1YWwgcmVzcG9uc2UgaW4gY2FzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYSBkYXRhRmlsdGVyIGlzIHByZXNlbnQgaW4gYWpheFNldHRpbmdzCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5kb25lKGZ1bmN0aW9uKCByICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZVRleHQgPSByOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgYSBzZWxlY3Rv
ciB3YXMgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmh0bWwoIHNlbGVjdG9yID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgZGl2IHRvIGhvbGQgdGhlIHJlc3VsdHMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCI8ZGl2
PiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaW5qZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgaW4sIHJlbW92aW5nIHRo
ZSBzY3JpcHRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdG8gYXZvaWQgYW55ICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzIGluIElF
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmFwcGVuZChyZXNwb25zZVRleHQucmVwbGFjZShyc2NyaXB0LCAiIikpCgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUg
c3BlY2lmaWVkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmZpbmQoc2VsZWN0b3IpIDoKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCwganVzdCBpbmplY3QgdGhlIGZ1
bGwgcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3BvbnNlVGV4dCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWFjaCggY2FsbGJhY2ssIFsgcmVzcG9u
c2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHNlcmlhbGl6ZTogZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlh
bGl6ZUFycmF5KCkgKTsKICAgICAgICB9LAoKICAgICAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5
KCB0aGlzLmVsZW1lbnRzICkgOiB0aGlzOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAg
ICAgIC5maWx0ZXIoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMubmFtZSAmJiAhdGhpcy5kaXNhYmxlZCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICggdGhpcy5jaGVja2VkIHx8IHJzZWxlY3RUZXh0YXJlYS50ZXN0KCB0aGlzLm5vZGVOYW1l
ICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbnB1dC50ZXN0
KCB0aGlzLnR5cGUgKSApOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5tYXAo
ZnVuY3Rpb24oIGksIGVsZW0gKXsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGpR
dWVyeSggdGhpcyApLnZhbCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9
PSBudWxsID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNBcnJheSggdmFsICkgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbigg
dmFsLCBpICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxy
XG4iICkgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogZWxlbS5uYW1lLCB2
YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OwogICAgICAgICAgICAgICAgfSku
Z2V0KCk7CiAgICAgICAgfQp9KTsKCi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3Ig
aGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCmpRdWVyeS5lYWNoKCAiYWpheFN0YXJ0IGFqYXhT
dG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCAi
ICIgKSwgZnVuY3Rpb24oIGksIG8gKXsKICAgICAgICBqUXVlcnkuZm5bIG8gXSA9IGZ1bmN0aW9u
KCBmICl7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iaW5kKCBvLCBmICk7CiAgICAgICAg
fTsKfSk7CgpqUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRo
b2QgKSB7CiAgICAgICAgalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNh
bGxiYWNrLCB0eXBlICkgewogICAgICAgICAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRzIGlmIGRh
dGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVu
Y3Rpb24oIGRhdGEgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwg
Y2FsbGJhY2s7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZGF0YTsKICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFqYXgoewogICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlOiBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBzdWNj
ZXNzOiBjYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IHR5cGUKICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgIH07Cn0pOwoKalF1ZXJ5LmV4dGVuZCh7CgogICAgICAg
IGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCAic2NyaXB0IiApOwog
ICAgICAgIH0sCgogICAgICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNr
ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJh
Y2ssICJqc29uIiApOwogICAgICAgIH0sCgogICAgICAgIC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRn
ZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0CiAgICAgICAgLy8gd2l0aCBib3RoIGFqYXhT
ZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgogICAgICAgIC8vIElmIHRhcmdldCBpcyBvbWl0
dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuCiAgICAgICAgYWpheFNldHVwOiBmdW5jdGlv
biggdGFyZ2V0LCBzZXR0aW5ncyApIHsKICAgICAgICAgICAgICAgIGlmICggc2V0dGluZ3MgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0CiAg
ICAgICAgICAgICAgICAgICAgICAgIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0
aW5ncyApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5ncwogICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5n
cyA9IHRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0galF1ZXJ5LmFqYXhT
ZXR0aW5nczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFqYXhFeHRlbmQoIHRh
cmdldCwgc2V0dGluZ3MgKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgICAg
fSwKCiAgICAgICAgYWpheFNldHRpbmdzOiB7CiAgICAgICAgICAgICAgICB1cmw6IGFqYXhMb2Nh
dGlvbiwKICAgICAgICAgICAgICAgIGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGFqYXhM
b2NQYXJ0c1sgMSBdICksCiAgICAgICAgICAgICAgICBnbG9iYWw6IHRydWUsCiAgICAgICAgICAg
ICAgICB0eXBlOiAiR0VUIiwKICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRp
b24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwKICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiB0
cnVlLAogICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsCiAgICAgICAgICAgICAgICAvKgogICAg
ICAgICAgICAgICAgdGltZW91dDogMCwKICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsCiAgICAg
ICAgICAgICAgICBkYXRhVHlwZTogbnVsbCwKICAgICAgICAgICAgICAgIHVzZXJuYW1lOiBudWxs
LAogICAgICAgICAgICAgICAgcGFzc3dvcmQ6IG51bGwsCiAgICAgICAgICAgICAgICBjYWNoZTog
bnVsbCwKICAgICAgICAgICAgICAgIHRyYWRpdGlvbmFsOiBmYWxzZSwKICAgICAgICAgICAgICAg
IGhlYWRlcnM6IHt9LAogICAgICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICAgICBhY2NlcHRz
OiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94
bWwiLAogICAgICAgICAgICAgICAgICAgICAgICBodG1sOiAidGV4dC9odG1sIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAogICAgICAgICAgICAgICAgICAgICAg
ICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIioiOiBhbGxUeXBlcwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICBjb250ZW50czogewogICAgICAgICAgICAgICAgICAgICAgICB4bWw6IC94bWwvLAogICAg
ICAgICAgICAgICAgICAgICAgICBodG1sOiAvaHRtbC8sCiAgICAgICAgICAgICAgICAgICAgICAg
IGpzb246IC9qc29uLwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICByZXNwb25z
ZUZpZWxkczogewogICAgICAgICAgICAgICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhNTCIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJyZXNwb25zZVRleHQiCiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIC8vIExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCiAgICAgICAg
ICAgICAgICAvLyAxKSBrZXkgZm9ybWF0IGlzICJzb3VyY2VfdHlwZSBkZXN0aW5hdGlvbl90eXBl
IiAoYSBzaW5nbGUgc3BhY2UgaW4tYmV0d2VlbikKICAgICAgICAgICAgICAgIC8vIDIpIHRoZSBj
YXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkIGZvciBzb3VyY2VfdHlwZQogICAgICAgICAg
ICAgICAgY29udmVydGVyczogewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCBh
bnl0aGluZyB0byB0ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICIqIHRleHQiOiB3aW5kb3cu
U3RyaW5nLAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCB0byBodG1sICh0cnVlID0g
bm8gdHJhbnNmb3JtYXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0
cnVlLAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24g
ZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAidGV4dCBqc29uIjogalF1ZXJ5LnBh
cnNlSlNPTiwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRleHQgYXMgeG1sCiAg
ICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAogICAgICAg
ICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4n
dCBiZSBkZWVwIGV4dGVuZGVkOgogICAgICAgICAgICAgICAgLy8geW91IGNhbiBhZGQgeW91ciBv
d24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgogICAgICAgICAgICAgICAgLy8gYW5kIHdoZW4geW91
IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKICAgICAgICAgICAgICAgIC8vIGRlZXAgZXh0
ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKQogICAgICAgICAgICAgICAgZmxhdE9wdGlvbnM6IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsOiB0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgYWpheFBy
ZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCiAgICAg
ICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRz
ICksCgogICAgICAgIC8vIE1haW4gbWV0aG9kCiAgICAgICAgYWpheDogZnVuY3Rpb24oIHVybCwg
b3B0aW9ucyApIHsKCiAgICAgICAgICAgICAgICAvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11
bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdXJsID09
PSAib2JqZWN0IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHVybDsKICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CiAgICAgICAg
ICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICB2YXIgLy8g
Q3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICBz
ID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FsbGJhY2tzIGNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tD
b250ZXh0ID0gcy5jb250ZXh0IHx8IHMsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRl
eHQgZm9yIGdsb2JhbCBldmVudHMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyB0aGUg
Y2FsbGJhY2tDb250ZXh0IGlmIG9uZSB3YXMgcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYW5kIGlmIGl0J3MgYSBET00gbm9kZSBvciBhIGpRdWVyeSBj
b2xsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dCA9IGNh
bGxiYWNrQ29udGV4dCAhPT0gcyAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgg
Y2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dCBpbnN0YW5jZW9mIGpR
dWVyeSApID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6IGpRdWVyeS5ldmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRGVmZXJyZWRzCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkID0g
alF1ZXJ5LkRlZmVycmVkKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlRGVmZXJy
ZWQgPSBqUXVlcnkuX0RlZmVycmVkKCksCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXR1
cy1kZXBlbmRlbnQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUg
PSBzLnN0YXR1c0NvZGUgfHwge30sCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmTW9kaWZp
ZWQga2V5CiAgICAgICAgICAgICAgICAgICAgICAgIGlmTW9kaWZpZWRLZXksCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzID0ge30sCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUmVzcG9uc2UgaGVhZGVycwogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRl
cnNTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHJhbnNwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgIHRy
YW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZW91dCBoYW5kbGUKICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAv
LyBDcm9zcy1kb21haW4gZGV0ZWN0aW9uIHZhcnMKICAgICAgICAgICAgICAgICAgICAgICAgcGFy
dHMsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQogICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvIGtu
b3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZAogICAgICAgICAgICAgICAg
ICAgICAgICBmaXJlR2xvYmFscywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB2YXJp
YWJsZQogICAgICAgICAgICAgICAgICAgICAgICBpLAogICAgICAgICAgICAgICAgICAgICAgICAv
LyBGYWtlIHhocgogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUiA9IHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVhZHlTdGF0ZTogMCwKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0ZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxuYW1lID0gbmFt
ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RIZWFk
ZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3IHN0cmluZwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNlSGVhZGVy
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZUhlYWRlcnMgPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMo
IHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNbIG1h
dGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dl
ckNhc2UoKSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID09PSB1bmRl
ZmluZWQgPyBudWxsIDogbWF0Y2g7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNv
bnRlbnQtdHlwZSBoZWFkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlk
ZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIXN0YXRlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzLm1pbWVUeXBlID0gdHlwZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbmNlbCB0aGUgcmVxdWVzdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBz
dGF0dXNUZXh0IHx8ICJhYm9ydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHRyYW5zcG9ydCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJhbnNwb3J0LmFib3J0KCBzdGF0dXNUZXh0ICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb25lKCAwLCBzdGF0dXNUZXh0ICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8g
Q2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lCiAgICAgICAgICAgICAgICAvLyBJ
dCBpcyBkZWZpbmVkIGhlcmUgYmVjYXVzZSBqc2xpbnQgY29tcGxhaW5zIGlmIGl0IGlzIGRlY2xh
cmVkCiAgICAgICAgICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiAod2hpY2gg
d291bGQgYmUgbW9yZSBsb2dpY2FsIGFuZCByZWFkYWJsZSkKICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkg
ewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFN0YXRlIGlzICJkb25lIiBub3cKICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUgPSAyOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGltZW91dCBpZiBpdCBl
eGlzdHMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aW1lb3V0VGltZXIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVy
ZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb24KICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdp
bGwgYmUgdXNlZCkKICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gdW5kZWZpbmVk
OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycwogICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8ICIi
OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHJlYWR5U3RhdGUKICAgICAgICAgICAg
ICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBpc1N1Y2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3VjY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVz
VGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNl
cyA/IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSA6IHVuZGVmaW5l
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXRhZzsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQg
KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgSWYtTW9kaWZp
ZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1v
ZGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIGxhc3RNb2Rp
ZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiTGFzdC1Nb2RpZmllZCIgKSApICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubGFz
dE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gPSBsYXN0TW9kaWZpZWQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICggZXRhZyA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiRXRhZyIg
KSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdID0gZXRhZzsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBtb2RpZmllZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAzMDQgKSB7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmll
ZCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSB0
cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGRhdGEK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2Ug
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVz
VGV4dCA9ICJzdWNjZXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNTdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgcGFyc2VyZXJyb3IKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJwYXJzZXJlcnJvciI7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0g
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZXh0cmFjdCBlcnJvciBmcm9tIHN0
YXR1c1RleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIG5vcm1hbGl6
ZSBzdGF0dXNUZXh0IGFuZCBzdGF0dXMgZm9yIG5vbi1hYm9ydHMKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvciA9IHN0YXR1c1RleHQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYoICFzdGF0dXNUZXh0IHx8IHN0YXR1cyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAiZXJyb3IiOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3QKICAgICAgICAgICAgICAg
ICAgICAgICAganFYSFIuc3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgICAgICAgICAgICAgICBq
cVhIUi5zdGF0dXNUZXh0ID0gIiIgKyAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2Vzcy9FcnJvcgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0
YXR1c1RleHQsIGpxWEhSIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFj
a0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBj
YWxsYmFja3MKICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc3RhdHVzQ29kZSggc3RhdHVz
Q29kZSApOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXgiICsg
KCBpc1N1Y2Nlc3MgPyAiU3VjY2VzcyIgOiAiRXJyb3IiICksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nl
c3MgOiBlcnJvciBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENvbXBsZXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlRGVm
ZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBd
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWph
eENvbXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0b3Ai
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQXR0YWNoIGRlZmVy
cmVkcwogICAgICAgICAgICAgICAgZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTsKICAgICAgICAg
ICAgICAgIGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOwogICAgICAgICAgICAgICAganFYSFIu
ZXJyb3IgPSBqcVhIUi5mYWlsOwogICAgICAgICAgICAgICAganFYSFIuY29tcGxldGUgPSBjb21w
bGV0ZURlZmVycmVkLmRvbmU7CgogICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBj
YWxsYmFja3MKICAgICAgICAgICAgICAgIGpxWEhSLnN0YXR1c0NvZGUgPSBmdW5jdGlvbiggbWFw
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hcCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdG1wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggc3RhdGUgPCAyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yKCB0bXAgaW4gbWFwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0dXNDb2RlWyB0bXAgXSA9IFsgc3RhdHVzQ29kZVt0bXBdLCBtYXBb
dG1wXSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0bXAgPSBtYXBbIGpxWEhSLnN0YXR1cyBdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIudGhlbiggdG1wLCB0bXAgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9OwoKICAg
ICAgICAgICAgICAgIC8vIFJlbW92ZSBoYXNoIGNoYXJhY3RlciAoIzc1MzE6IGFuZCBzdHJpbmcg
cHJvbW90aW9uKQogICAgICAgICAgICAgICAgLy8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRl
ZCAoIzU4NjY6IElFNyBpc3N1ZSB3aXRoIHByb3RvY29sLWxlc3MgdXJscykKICAgICAgICAgICAg
ICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZQogICAgICAg
ICAgICAgICAgcy51cmwgPSAoICggdXJsIHx8IHMudXJsICkgKyAiIiApLnJlcGxhY2UoIHJoYXNo
LCAiIiApLnJlcGxhY2UoIHJwcm90b2NvbCwgYWpheExvY1BhcnRzWyAxIF0gKyAiLy8iICk7Cgog
ICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdAogICAgICAgICAgICAgICAg
cy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2Fz
ZSgpLnNwbGl0KCByc3BhY2VzQWpheCApOwoKICAgICAgICAgICAgICAgIC8vIERldGVybWluZSBp
ZiBhIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyCiAgICAgICAgICAgICAgICBpZiAo
IHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMg
PSBydXJsLmV4ZWMoIHMudXJsLnRvTG93ZXJDYXNlKCkgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgcy5jcm9zc0RvbWFpbiA9ICEhKCBwYXJ0cyAmJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICggcGFydHNbIDEgXSAhPSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9
IGFqYXhMb2NQYXJ0c1sgMiBdIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMg
KSApICE9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgg
YWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgw
IDogNDQzICkgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5n
CiAgICAgICAgICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBz
LmRhdGEgIT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEgPSBq
UXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKICAgICAgICAgICAgICAgIGluc3Bl
Y3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiAp
OwoKICAgICAgICAgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJl
ZmlsZXIsIHN0b3AgdGhlcmUKICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBh
c2tlZCB0bwogICAgICAgICAgICAgICAgZmlyZUdsb2JhbHMgPSBzLmdsb2JhbDsKCiAgICAgICAg
ICAgICAgICAvLyBVcHBlcmNhc2UgdGhlIHR5cGUKICAgICAgICAgICAgICAgIHMudHlwZSA9IHMu
dHlwZS50b1VwcGVyQ2FzZSgpOwoKICAgICAgICAgICAgICAgIC8vIERldGVybWluZSBpZiByZXF1
ZXN0IGhhcyBjb250ZW50CiAgICAgICAgICAgICAgICBzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVu
dC50ZXN0KCBzLnR5cGUgKTsKCiAgICAgICAgICAgICAgICAvLyBXYXRjaCBmb3IgYSBuZXcgc2V0
IG9mIHJlcXVlc3RzCiAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5h
Y3RpdmUrKyA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRy
aWdnZXIoICJhamF4U3RhcnQiICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnQKICAg
ICAgICAgICAgICAgIGlmICggIXMuaGFzQ29udGVudCApIHsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmwKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiApICsgcy5k
YXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICM5NjgyOiByZW1vdmUgZGF0
YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgcy5kYXRhOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgaWZNb2RpZmllZEtleSBiZWZvcmUg
YWRkaW5nIHRoZSBhbnRpLWNhY2hlIHBhcmFtZXRlcgogICAgICAgICAgICAgICAgICAgICAgICBp
Zk1vZGlmaWVkS2V5ID0gcy51cmw7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYW50
aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5j
YWNoZSA9PT0gZmFsc2UgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0
cyA9IGpRdWVyeS5ub3coKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRyeSByZXBsYWNpbmcgXz0gaWYgaXQgaXMgdGhlcmUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCA9IHMudXJsLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsgdHMg
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90aGluZyB3YXMgcmVw
bGFjZWQsIGFkZCB0aW1lc3RhbXAgdG8gdGhlIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHMudXJsID0gcmV0ICsgKCAocmV0ID09PSBzLnVybCApID8gKCBycXVlcnkudGVzdCgg
cy51cmwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIHRzIDogIiIgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUg
Y29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAogICAgICAgICAgICAgICAgaWYg
KCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9w
dGlvbnMuY29udGVudFR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnNldFJl
cXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQv
b3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KICAgICAgICAg
ICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZk1v
ZGlmaWVkS2V5ID0gaWZNb2RpZmllZEtleSB8fCBzLnVybDsKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1vZGlm
aWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
ZXRhZ1sgaWZNb2RpZmllZEtleSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGlm
TW9kaWZpZWRLZXkgXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNl
cnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQogICAgICAgICAgICAgICAganFYSFIuc2V0
UmVxdWVzdEhlYWRlcigKICAgICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCIsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBl
c1swXSBdID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFjY2VwdHNbIHMuZGF0
YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIqIiA/ICIsICIgKyBhbGxUeXBl
cyArICI7IHE9MC4wMSIgOiAiIiApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
LmFjY2VwdHNbICIqIiBdCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIC8vIENo
ZWNrIGZvciBoZWFkZXJzIG9wdGlvbgogICAgICAgICAgICAgICAgZm9yICggaSBpbiBzLmhlYWRl
cnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGks
IHMuaGVhZGVyc1sgaSBdICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8g
QWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAogICAgICAgICAg
ICAgICAgaWYgKCBzLmJlZm9yZVNlbmQgJiYgKCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tD
b250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5hYm9ydCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCiAgICAgICAgICAg
ICAgICBmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSWyBpIF0oIHNbIGkgXSApOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEdldCB0cmFuc3BvcnQKICAgICAgICAgICAgICAg
IHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBz
LCBvcHRpb25zLCBqcVhIUiApOwoKICAgICAgICAgICAgICAgIC8vIElmIG5vIHRyYW5zcG9ydCwg
d2UgYXV0by1hYm9ydAogICAgICAgICAgICAgICAgaWYgKCAhdHJhbnNwb3J0ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSAx
OwogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIGdsb2JhbCBldmVudAogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhS
LCBzIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaW1lb3V0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5hc3luYyAmJiBzLnRp
bWVvdXQgPiAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRUaW1l
ciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqcVhIUi5hYm9ydCggInRpbWVvdXQiICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwgcy50aW1lb3V0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5z
ZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGFnYXRlIGV4
Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggc3RhdGUgPCAyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9uZSggLTEsIGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
aW1wbHkgcmV0aHJvdyBvdGhlcndpc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVy
cm9yKCBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGpx
WEhSOwogICAgICAgIH0sCgogICAgICAgIC8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVs
ZW1lbnRzIG9yIGEgc2V0IG9mCiAgICAgICAgLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3Ry
aW5nCiAgICAgICAgcGFyYW06IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKICAgICAgICAg
ICAgICAgIHZhciBzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZCA9IGZ1bmN0aW9u
KCBrZXksIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHZh
bHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVl
ICkgPyB2YWx1ZSgpIDogdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1sg
cy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKyBlbmNvZGVVUklD
b21wb25lbnQoIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAg
ICAgICAgLy8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhh
dmlvci4KICAgICAgICAgICAgICAgIGlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdHJhZGl0aW9uYWwgPSBqUXVlcnkuYWpheFNldHRpbmdz
LnRyYWRpdGlvbmFsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFu
IGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0g
ZWxlbWVudHMuCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBhICkgfHwgKCBh
LmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlICJvbGQiIHdheSAodGhlIHdheSAx
LjMuMiBvciBvbGRlcgogICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWQgaXQpLCBvdGhlcndp
c2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS4KICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggdmFyIHByZWZpeCBpbiBhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1
aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCiAgICAgICAgICAgICAgICByZXR1
cm4gcy5qb2luKCAiJiIgKS5yZXBsYWNlKCByMjAsICIrIiApOwogICAgICAgIH0KfSk7CgpmdW5j
dGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7CiAgICAg
ICAgaWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7CiAgICAgICAgICAgICAgICAvLyBTZXJp
YWxpemUgYXJyYXkgaXRlbS4KICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0
aW9uKCBpLCB2ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRyYWRpdGlvbmFsIHx8
IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGQoIHByZWZpeCwgdiApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhcnJheSBp
dGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1lcmljIGluZGV4IHRvIHJlc29sdmUgZGVzZXJp
YWxpemF0aW9uIGFtYmlndWl0eSBpc3N1ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHJhY2sgKGFzIG9mIDEuMC4wKSBjYW4ndCBjdXJyZW50bHkgZGVzZXJp
YWxpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXN0ZWQgYXJyYXlzIHBy
b3Blcmx5LCBhbmQgYXR0ZW1wdGluZyB0byBkbyBzbyBtYXkgY2F1c2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhIHNlcnZlciBlcnJvci4gUG9zc2libGUgZml4ZXMgYXJlIHRv
IG1vZGlmeSByYWNrJ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNlcmlh
bGl6YXRpb24gYWxnb3JpdGhtIG9yIHRvIHByb3ZpZGUgYW4gb3B0aW9uIG9yIGZsYWcKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBmb3JjZSBhcnJheSBzZXJpYWxpemF0aW9u
IHRvIGJlIHNoYWxsb3cuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJh
bXMoIHByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmplY3QiIHx8IGpRdWVyeS5pc0Fy
cmF5KHYpID8gaSA6ICIiICkgKyAiXSIsIHYsIHRyYWRpdGlvbmFsLCBhZGQgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSBpZiAo
ICF0cmFkaXRpb25hbCAmJiBvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiAp
IHsKICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS4KICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBuYW1lIGluIG9iaiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnVp
bGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0cmFkaXRp
b25hbCwgYWRkICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uCiAgICAgICAgICAgICAgICBhZGQoIHBy
ZWZpeCwgb2JqICk7CiAgICAgICAgfQp9CgovLyBUaGlzIGlzIHN0aWxsIG9uIHRoZSBqUXVlcnkg
b2JqZWN0Li4uIGZvciBub3cKLy8gV2FudCB0byBtb3ZlIHRoaXMgdG8galF1ZXJ5LmFqYXggc29t
ZSBkYXkKalF1ZXJ5LmV4dGVuZCh7CgogICAgICAgIC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhl
IG51bWJlciBvZiBhY3RpdmUgcXVlcmllcwogICAgICAgIGFjdGl2ZTogMCwKCiAgICAgICAgLy8g
TGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAogICAgICAgIGxhc3RN
b2RpZmllZDoge30sCiAgICAgICAgZXRhZzoge30KCn0pOwoKLyogSGFuZGxlcyByZXNwb25zZXMg
dG8gYW4gYWpheCByZXF1ZXN0OgogKiAtIHNldHMgYWxsIHJlc3BvbnNlWFhYIGZpZWxkcyBhY2Nv
cmRpbmdseQogKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBj
b250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQogKiAtIHJldHVybnMgdGhlIGNvcnJl
c3BvbmRpbmcgcmVzcG9uc2UKICovCmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpx
WEhSLCByZXNwb25zZXMgKSB7CgogICAgICAgIHZhciBjb250ZW50cyA9IHMuY29udGVudHMsCiAg
ICAgICAgICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywKICAgICAgICAgICAgICAgIHJl
c3BvbnNlRmllbGRzID0gcy5yZXNwb25zZUZpZWxkcywKICAgICAgICAgICAgICAgIGN0LAogICAg
ICAgICAgICAgICAgdHlwZSwKICAgICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUsCiAgICAgICAg
ICAgICAgICBmaXJzdERhdGFUeXBlOwoKICAgICAgICAvLyBGaWxsIHJlc3BvbnNlWFhYIGZpZWxk
cwogICAgICAgIGZvciggdHlwZSBpbiByZXNwb25zZUZpZWxkcyApIHsKICAgICAgICAgICAgICAg
IGlmICggdHlwZSBpbiByZXNwb25zZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhS
WyByZXNwb25zZUZpZWxkc1t0eXBlXSBdID0gcmVzcG9uc2VzWyB0eXBlIF07CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0
IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcwogICAgICAgIHdoaWxlKCBkYXRhVHlwZXNbIDAg
XSA9PT0gIioiICkgewogICAgICAgICAgICAgICAgZGF0YVR5cGVzLnNoaWZ0KCk7CiAgICAgICAg
ICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggImNvbnRlbnQtdHlw
ZSIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIHdl
J3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZQogICAgICAgIGlmICggY3QgKSB7
CiAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0
KCBjdCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51bnNo
aWZ0KCB0eXBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBk
YXRhVHlwZQogICAgICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgewogICAg
ICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOwogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCiAgICAgICAg
ICAgICAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0
YVR5cGVzWzBdIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxEYXRh
VHlwZSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZmlyc3RE
YXRhVHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERhdGFUeXBl
ID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCiAgICAgICAgICAgICAgICBmaW5h
bERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlOwogICAgICAgIH0KCiAg
ICAgICAgLy8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZQogICAgICAgIC8vIFdlIGFkZCB0aGUgZGF0
YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCiAgICAgICAgLy8gYW5kIHJldHVybiB0aGUgY29y
cmVzcG9uZGluZyByZXNwb25zZQogICAgICAgIGlmICggZmluYWxEYXRhVHlwZSApIHsKICAgICAg
ICAgICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERh
dGFUeXBlIF07CiAgICAgICAgfQp9CgovLyBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVx
dWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCBy
ZXNwb25zZSApIHsKCiAgICAgICAgLy8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWQK
ICAgICAgICBpZiAoIHMuZGF0YUZpbHRlciApIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlID0g
cy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOwogICAgICAgIH0KCiAgICAgICAg
dmFyIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLAogICAgICAgICAgICAgICAgY29udmVydGVycyA9
IHt9LAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgIGtleSwKICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGgsCiAgICAgICAgICAgICAgICB0bXAsCiAgICAg
ICAgICAgICAgICAvLyBDdXJyZW50IGFuZCBwcmV2aW91cyBkYXRhVHlwZXMKICAgICAgICAgICAg
ICAgIGN1cnJlbnQgPSBkYXRhVHlwZXNbIDAgXSwKICAgICAgICAgICAgICAgIHByZXYsCiAgICAg
ICAgICAgICAgICAvLyBDb252ZXJzaW9uIGV4cHJlc3Npb24KICAgICAgICAgICAgICAgIGNvbnZl
cnNpb24sCiAgICAgICAgICAgICAgICAvLyBDb252ZXJzaW9uIGZ1bmN0aW9uCiAgICAgICAgICAg
ICAgICBjb252LAogICAgICAgICAgICAgICAgLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMgKHRyYW5z
aXRpdmUgY29udmVyc2lvbikKICAgICAgICAgICAgICAgIGNvbnYxLAogICAgICAgICAgICAgICAg
Y29udjI7CgogICAgICAgIC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBjaGFpbgogICAgICAg
IGZvciggaSA9IDE7IGkgPCBsZW5ndGg7IGkrKyApIHsKCiAgICAgICAgICAgICAgICAvLyBDcmVh
dGUgY29udmVydGVycyBtYXAKICAgICAgICAgICAgICAgIC8vIHdpdGggbG93ZXJjYXNlZCBrZXlz
CiAgICAgICAgICAgICAgICBpZiAoIGkgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGZvcigga2V5IGluIHMuY29udmVydGVycyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiggdHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdID0gcy5j
b252ZXJ0ZXJzWyBrZXkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAv
LyBHZXQgdGhlIGRhdGFUeXBlcwogICAgICAgICAgICAgICAgcHJldiA9IGN1cnJlbnQ7CiAgICAg
ICAgICAgICAgICBjdXJyZW50ID0gZGF0YVR5cGVzWyBpIF07CgogICAgICAgICAgICAgICAgLy8g
SWYgY3VycmVudCBpcyBhdXRvIGRhdGFUeXBlLCB1cGRhdGUgaXQgdG8gcHJldgogICAgICAgICAg
ICAgICAgaWYoIGN1cnJlbnQgPT09ICIqIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudCA9IHByZXY7CiAgICAgICAgICAgICAgICAvLyBJZiBubyBhdXRvIGFuZCBkYXRhVHlwZXMg
YXJlIGFjdHVhbGx5IGRpZmZlcmVudAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggcHJldiAh
PT0gIioiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBHZXQgdGhlIGNvbnZlcnRlcgogICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uID0g
cHJldiArICIgIiArIGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252
ZXJ0ZXJzWyBjb252ZXJzaW9uIF0gfHwgY29udmVydGVyc1sgIiogIiArIGN1cnJlbnQgXTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRpcmVjdCBjb252ZXJ0ZXIs
IHNlYXJjaCB0cmFuc2l0aXZlbHkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29udiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252MiA9IHVuZGVmaW5lZDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIGNvbnYxIGluIGNvbnZlcnRlcnMgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb252MS5zcGxp
dCggIiAiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRt
cFsgMCBdID09PSBwcmV2IHx8IHRtcFsgMCBdID09PSAiKiIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYyID0gY29udmVydGVyc1sgdG1wWzFd
ICsgIiAiICsgY3VycmVudCBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNvbnYyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYxID0gY29udmVydGVyc1sgY29udjEgXTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGNvbnYxID09PSB0cnVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnYyOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnYy
ID09PSB0cnVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnYxOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBm
b3VuZCBubyBjb252ZXJ0ZXIsIGRpc3BhdGNoIGFuIGVycm9yCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggISggY29udiB8fCBjb252MiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5lcnJvciggIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgY29udmVyc2lvbi5y
ZXBsYWNlKCIgIiwiIHRvICIpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgZm91bmQgY29udmVydGVyIGlzIG5vdCBhbiBlcXVpdmFsZW5j
ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB3aXRoIDEgb3IgMiBjb252ZXJ0ZXJz
IGFjY29yZGluZ2x5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBj
b252ID8gY29udiggcmVzcG9uc2UgKSA6IGNvbnYyKCBjb252MShyZXNwb25zZSkgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBy
ZXR1cm4gcmVzcG9uc2U7Cn0KCgoKCnZhciBqc2MgPSBqUXVlcnkubm93KCksCiAgICAgICAganNy
ZSA9IC8oXD0pXD8oJnwkKXxcP1w/L2k7CgovLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzCmpRdWVy
eS5hamF4U2V0dXAoewogICAgICAgIGpzb25wOiAiY2FsbGJhY2siLAogICAgICAgIGpzb25wQ2Fs
bGJhY2s6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5leHBhbmRv
ICsgIl8iICsgKCBqc2MrKyApOwogICAgICAgIH0KfSk7CgovLyBEZXRlY3QsIG5vcm1hbGl6ZSBv
cHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHMKalF1ZXJ5LmFq
YXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3Ms
IGpxWEhSICkgewoKICAgICAgICB2YXIgaW5zcGVjdERhdGEgPSBzLmNvbnRlbnRUeXBlID09PSAi
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiAmJgogICAgICAgICAgICAgICAgKCB0
eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiApOwoKICAgICAgICBpZiAoIHMuZGF0YVR5cGVzWyAw
IF0gPT09ICJqc29ucCIgfHwKICAgICAgICAgICAgICAgIHMuanNvbnAgIT09IGZhbHNlICYmICgg
anNyZS50ZXN0KCBzLnVybCApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z
cGVjdERhdGEgJiYganNyZS50ZXN0KCBzLmRhdGEgKSApICkgewoKICAgICAgICAgICAgICAgIHZh
ciByZXNwb25zZUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAganNvbnBDYWxsYmFj
ayA9IHMuanNvbnBDYWxsYmFjayA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID8gcy5qc29ucENhbGxiYWNrKCkgOiBz
Lmpzb25wQ2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gd2luZG93
WyBqc29ucENhbGxiYWNrIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHMudXJsLAog
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcy5kYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgICByZXBsYWNlID0gIiQxIiArIGpzb25wQ2FsbGJhY2sgKyAiJDIiOwoKICAgICAgICAgICAg
ICAgIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVy
bCA9IHVybC5yZXBsYWNlKCBqc3JlLCByZXBsYWNlICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcy51cmwgPT09IHVybCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGluc3BlY3REYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YSA9IGRhdGEucmVwbGFjZSgganNyZSwgcmVwbGFjZSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMu
ZGF0YSA9PT0gZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEFkZCBjYWxsYmFjayBtYW51YWxseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXJsICs9ICgvXD8vLnRlc3QoIHVybCApID8gIiYiIDogIj8iKSArIHMuanNvbnAg
KyAiPSIgKyBqc29ucENhbGxiYWNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHMudXJsID0gdXJsOwogICAgICAgICAgICAgICAgcy5kYXRhID0gZGF0YTsKCiAgICAgICAg
ICAgICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrCiAgICAgICAgICAgICAgICB3aW5kb3dbIGpzb25w
Q2FsbGJhY2sgXSA9IGZ1bmN0aW9uKCByZXNwb25zZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VDb250YWluZXIgPSBbIHJlc3BvbnNlIF07CiAgICAgICAgICAgICAgICB9OwoK
ICAgICAgICAgICAgICAgIC8vIENsZWFuLXVwIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICBqcVhI
Ui5hbHdheXMoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBjYWxs
YmFjayBiYWNrIHRvIHByZXZpb3VzIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRv
d1sganNvbnBDYWxsYmFjayBdID0gcHJldmlvdXM7CiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZQogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0
aW9uKCBwcmV2aW91cyApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRv
d1sganNvbnBDYWxsYmFjayBdKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vIFVz
ZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb24K
ICAgICAgICAgICAgICAgIHMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIGpzb25wQ2FsbGJhY2sg
KyAiIHdhcyBub3QgY2FsbGVkIiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdOwogICAgICAgICAg
ICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBmb3JjZSBqc29uIGRhdGFUeXBlCiAgICAgICAg
ICAgICAgICBzLmRhdGFUeXBlc1sgMCBdID0gImpzb24iOwoKICAgICAgICAgICAgICAgIC8vIERl
bGVnYXRlIHRvIHNjcmlwdAogICAgICAgICAgICAgICAgcmV0dXJuICJzY3JpcHQiOwogICAgICAg
IH0KfSk7CgoKCgovLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQpqUXVlcnkuYWpheFNldHVwKHsK
ICAgICAgICBhY2NlcHRzOiB7CiAgICAgICAgICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3Jp
cHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxp
Y2F0aW9uL3gtZWNtYXNjcmlwdCIKICAgICAgICB9LAogICAgICAgIGNvbnRlbnRzOiB7CiAgICAg
ICAgICAgICAgICBzY3JpcHQ6IC9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvCiAgICAgICAgfSwKICAg
ICAgICBjb252ZXJ0ZXJzOiB7CiAgICAgICAgICAgICAgICAidGV4dCBzY3JpcHQiOiBmdW5jdGlv
biggdGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIHRl
eHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfQp9KTsKCi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgZ2xv
YmFsCmpRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CiAgICAg
ICAgaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICBzLmNhY2hl
ID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKICAgICAg
ICAgICAgICAgIHMudHlwZSA9ICJHRVQiOwogICAgICAgICAgICAgICAgcy5nbG9iYWwgPSBmYWxz
ZTsKICAgICAgICB9Cn0pOwoKLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0CmpRdWVy
eS5hamF4VHJhbnNwb3J0KCAic2NyaXB0IiwgZnVuY3Rpb24ocykgewoKICAgICAgICAvLyBUaGlz
IHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIHJlcXVlc3RzCiAgICAgICAg
aWYgKCBzLmNyb3NzRG9tYWluICkgewoKICAgICAgICAgICAgICAgIHZhciBzY3JpcHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCAiaGVhZCIgKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7
CgogICAgICAgICAgICAgICAgcmV0dXJuIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6
IGZ1bmN0aW9uKCBfLCBjYWxsYmFjayApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlwdCIgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gImFzeW5jIjsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnNjcmlwdENoYXJzZXQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuY2hhcnNldCA9IHMuc2NyaXB0
Q2hhcnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzLnVybDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQXR0YWNoIGhhbmRsZXJzIGZvciBhbGwgYnJvd3NlcnMKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlz
dGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUg
fHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBtZW1v
cnkgbGVhayBpbiBJRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUg
dGhlIHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVudE5vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC5yZW1vdmVDaGlsZCggc2Ny
aXB0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlcmVm
ZXJlbmNlIHRoZSBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyaXB0ID0gdW5kZWZpbmVkOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgaWYgbm90IGFib3J0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2soIDIwMCwgInN1Y2Nlc3MiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiBhcHBlbmRDaGlsZCAg
dG8gY2lyY3VtdmVudCBhbiBJRTYgYnVnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgYXJpc2VzIHdoZW4gYSBiYXNlIG5vZGUgaXMgdXNlZCAoIzI3MDkgYW5kICM0Mzc4
KS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZSggc2Ny
aXB0LCBoZWFkLmZpcnN0Q2hpbGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHNjcmlwdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQoIDAsIDEgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07
CiAgICAgICAgfQp9KTsKCgoKCnZhciAvLyAjNTI4MDogSW50ZXJuZXQgRXhwbG9yZXIgd2lsbCBr
ZWVwIGNvbm5lY3Rpb25zIGFsaXZlIGlmIHdlIGRvbid0IGFib3J0IG9uIHVubG9hZAogICAgICAg
IHhock9uVW5sb2FkQWJvcnQgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgLy8gQWJvcnQgYWxsIHBlbmRpbmcgcmVxdWVzdHMKICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgewogICAgICAgICAgICAgICAgICAg
ICAgICB4aHJDYWxsYmFja3NbIGtleSBdKCAwLCAxICk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgfSA6IGZhbHNlLAogICAgICAgIHhocklkID0gMCwKICAgICAgICB4aHJDYWxsYmFja3M7Cgov
LyBGdW5jdGlvbnMgdG8gY3JlYXRlIHhocnMKZnVuY3Rpb24gY3JlYXRlU3RhbmRhcmRYSFIoKSB7
CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBS
ZXF1ZXN0KCk7CiAgICAgICAgfSBjYXRjaCggZSApIHt9Cn0KCmZ1bmN0aW9uIGNyZWF0ZUFjdGl2
ZVhIUigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cu
QWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiApOwogICAgICAgIH0gY2F0Y2goIGUg
KSB7fQp9CgovLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0Ci8vIChUaGlzIGlzIHN0aWxsIGF0
dGFjaGVkIHRvIGFqYXhTZXR0aW5ncyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKalF1ZXJ5
LmFqYXhTZXR0aW5ncy54aHIgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/CiAgICAgICAgLyogTWlj
cm9zb2Z0IGZhaWxlZCB0byBwcm9wZXJseQogICAgICAgICAqIGltcGxlbWVudCB0aGUgWE1MSHR0
cFJlcXVlc3QgaW4gSUU3IChjYW4ndCByZXF1ZXN0IGxvY2FsIGZpbGVzKSwKICAgICAgICAgKiBz
byB3ZSB1c2UgdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBpdCBpcyBhdmFpbGFibGUKICAgICAgICAg
KiBBZGRpdGlvbmFsbHkgWE1MSHR0cFJlcXVlc3QgY2FuIGJlIGRpc2FibGVkIGluIElFNy9JRTgg
c28KICAgICAgICAgKiB3ZSBuZWVkIGEgZmFsbGJhY2suCiAgICAgICAgICovCiAgICAgICAgZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMb2NhbCAmJiBjcmVhdGVT
dGFuZGFyZFhIUigpIHx8IGNyZWF0ZUFjdGl2ZVhIUigpOwogICAgICAgIH0gOgogICAgICAgIC8v
IEZvciBhbGwgb3RoZXIgYnJvd3NlcnMsIHVzZSB0aGUgc3RhbmRhcmQgWE1MSHR0cFJlcXVlc3Qg
b2JqZWN0CiAgICAgICAgY3JlYXRlU3RhbmRhcmRYSFI7CgovLyBEZXRlcm1pbmUgc3VwcG9ydCBw
cm9wZXJ0aWVzCihmdW5jdGlvbiggeGhyICkgewogICAgICAgIGpRdWVyeS5leHRlbmQoIGpRdWVy
eS5zdXBwb3J0LCB7CiAgICAgICAgICAgICAgICBhamF4OiAhIXhociwKICAgICAgICAgICAgICAg
IGNvcnM6ICEheGhyICYmICggIndpdGhDcmVkZW50aWFscyIgaW4geGhyICkKICAgICAgICB9KTsK
fSkoIGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCkgKTsKCi8vIENyZWF0ZSB0cmFuc3BvcnQgaWYg
dGhlIGJyb3dzZXIgY2FuIHByb3ZpZGUgYW4geGhyCmlmICggalF1ZXJ5LnN1cHBvcnQuYWpheCAp
IHsKCiAgICAgICAgalF1ZXJ5LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oIHMgKSB7CiAgICAgICAg
ICAgICAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdo
IFhNTEh0dHBSZXF1ZXN0CiAgICAgICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWluIHx8IGpR
dWVyeS5zdXBwb3J0LmNvcnMgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJh
Y2s7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgeGhyCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyID0gcy54aHIoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHNvY2tldAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzc2luZyBudWxsIHVzZXJuYW1l
LCBnZW5lcmF0ZXMgYSBsb2dpbiBwb3B1cCBvbiBPcGVyYSAoIzI4NjUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMudXNlcm5hbWUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5cGUsIHMu
dXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBzLnBhc3N3b3JkICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4aHIub3Blbiggcy50eXBlLCBzLnVybCwgcy5hc3luYyAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJv
dmlkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy54aHJG
aWVsZHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGkgaW4gcy54aHJGaWVsZHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyWyBpIF0gPSBzLnhockZpZWxkc1sgaSBdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLm1pbWVUeXBlICYmIHhoci5v
dmVycmlkZU1pbWVUeXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggcy5taW1lVHlwZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBz
ZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2lt
cGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFz
aXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFk
ZXIgaWYgYWxyZWFkeSBwcm92aWRlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgi
XSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gPSAiWE1MSHR0cFJlcXVlc3QiOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE5lZWQgYW4gZXh0cmEgdHJ5L2NhdGNoIGZvciBjcm9zcyBkb21h
aW4gcmVxdWVzdHMgaW4gRmlyZWZveCAzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRl
cnNbIGkgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBfICkg
e30KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBzZW5kIHRo
ZSByZXF1ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IG1heSByYWlzZSBhbiBleGNlcHRpb24gd2hpY2ggaXMgYWN0dWFsbHkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZWQgaW4galF1ZXJ5LmFqYXggKHNvIG5v
IHRyeS9jYXRjaCBoZXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eGhyLnNlbmQoICggcy5oYXNDb250ZW50ICYmIHMuZGF0YSApIHx8IG51bGwgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaXN0ZW5lcgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiggXywgaXNBYm9y
dCApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzVGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggdGhy
b3dzIGV4Y2VwdGlvbnMgd2hlbiBhY2Nlc3NpbmcgcHJvcGVydGllcwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiBhbiB4aHIgd2hlbiBhIG5ldHdv
cmsgZXJyb3Igb2NjdXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwOi8vaGVscGZ1bC5rbm9icy1kaWFscy5jb20vaW5kZXgucGhwL0NvbXBv
bmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4ODAwNDAxMTFfKE5TX0VSUk9SX05PVF9BVkFJ
TEFCTEUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
eSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQgb3IgY29tcGxldGUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNh
bGxiYWNrICYmICggaXNBYm9ydCB8fCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApICkgewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE9ubHkgY2FsbGVkIG9uY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVkOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIERvIG5vdCBrZWVwIGFzIGFjdGl2ZSBhbnltb3JlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGpRdWVyeS5ub29wOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIHhockNhbGxiYWNrc1sgaGFuZGxlIF07CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBpdCdzIGFuIGFib3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzQWJvcnQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFib3J0IGl0IG1hbnVhbGx5IGlmIG5lZWRlZAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHhoci5yZWFkeVN0YXRlICE9PSA0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHho
ci5hYm9ydCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSB4aHIuc3RhdHVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB4
aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcyA9IHt9
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4bWwgPSB4aHIucmVzcG9uc2VYTUw7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDb25zdHJ1Y3QgcmVzcG9uc2UgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhtbCAmJiB4bWwu
ZG9jdW1lbnRFbGVtZW50IC8qICM0OTU4ICovICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlcy54bWwgPSB4bWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCB0
aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXR1
c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0geGhyLnN0YXR1c1RleHQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
bm9ybWFsaXplIHdpdGggV2Via2l0IGdpdmluZyBhbiBlbXB0eSBzdGF0dXNUZXh0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGaWx0ZXIgc3RhdHVzIGZvciBub24gc3RhbmRhcmQgYmVoYXZpb3JzCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpcyBsb2NhbCBhbmQgd2UgaGF2ZSBkYXRhOiBh
c3N1bWUgYSBzdWNjZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChzdWNjZXNzIHdpdGggbm8gZGF0YSB3
b24ndCBnZXQgbm90aWZpZWQsIHRoYXQncyB0aGUgYmVzdCB3ZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBj
YW4gZG8gZ2l2ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IXN0YXR1cyAmJiBzLmlzTG9jYWwgJiYgIXMuY3Jvc3NEb21haW4gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzID0gcmVzcG9uc2VzLnRleHQgPyAyMDAgOiA0MDQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElFIC0gIzE0NTA6IHNvbWV0aW1lcyByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQg
YmUgMjA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMTIyMyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0
Y2goIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNBYm9ydCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBsZXRlKCAtMSwgZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBjb21wbGV0ZSBpZiBuZWVkZWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZXMg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcGxldGUoIHN0YXR1cywgc3RhdHVzVGV4dCwgcmVzcG9uc2VzLCByZXNwb25zZUhlYWRl
cnMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBzeW5jIG1vZGUgb3IgaXQn
cyBpbiBjYWNoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5k
IGhhcyBiZWVuIHJldHJpZXZlZCBkaXJlY3RseSAoSUU2ICYgSUU3KQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBtYW51YWxseSBmaXJlIHRoZSBj
YWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcy5h
c3luYyB8fCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9ICsreGhySWQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBD
cmVhdGUgdGhlIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcyBsaXN0IGlmIG5lZWRlZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBhdHRh
Y2ggdGhlIHVubG9hZCBoYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAheGhyQ2FsbGJhY2tzICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyQ2Fs
bGJhY2tzID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnVubG9hZCggeGhyT25VbmxvYWRB
Ym9ydCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBZGQgdG8gbGlzdCBvZiBhY3RpdmUgeGhycyBjYWxsYmFja3MKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFj
a3NbIGhhbmRsZSBdID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxiYWNrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKDAsMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0pOwp9CgoKCgp2YXIgZWxlbWRpc3BsYXkgPSB7fSwK
ICAgICAgICBpZnJhbWUsIGlmcmFtZURvYywKICAgICAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xl
fHNob3d8aGlkZSkkLywKICAgICAgICByZnhudW0gPSAvXihbK1wtXT0pPyhbXGQrLlwtXSspKFth
LXolXSopJC9pLAogICAgICAgIHRpbWVySWQsCiAgICAgICAgZnhBdHRycyA9IFsKICAgICAgICAg
ICAgICAgIC8vIGhlaWdodCBhbmltYXRpb25zCiAgICAgICAgICAgICAgICBbICJoZWlnaHQiLCAi
bWFyZ2luVG9wIiwgIm1hcmdpbkJvdHRvbSIsICJwYWRkaW5nVG9wIiwgInBhZGRpbmdCb3R0b20i
IF0sCiAgICAgICAgICAgICAgICAvLyB3aWR0aCBhbmltYXRpb25zCiAgICAgICAgICAgICAgICBb
ICJ3aWR0aCIsICJtYXJnaW5MZWZ0IiwgIm1hcmdpblJpZ2h0IiwgInBhZGRpbmdMZWZ0IiwgInBh
ZGRpbmdSaWdodCIgXSwKICAgICAgICAgICAgICAgIC8vIG9wYWNpdHkgYW5pbWF0aW9ucwogICAg
ICAgICAgICAgICAgWyAib3BhY2l0eSIgXQogICAgICAgIF0sCiAgICAgICAgZnhOb3c7CgpqUXVl
cnkuZm4uZXh0ZW5kKHsKICAgICAgICBzaG93OiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2Fs
bGJhY2sgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSwgZGlzcGxheTsKCiAgICAgICAgICAg
ICAgICBpZiAoIHNwZWVkIHx8IHNwZWVkID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5hbmltYXRlKCBnZW5GeCgic2hvdyIsIDMpLCBzcGVlZCwgZWFzaW5nLCBj
YWxsYmFjayk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBqID0gdGhpcy5sZW5ndGg7IGkgPCBqOyBpKysgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbaV07CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGlubGluZSBk
aXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBpcwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgaGlkZGVuIGJ5IGNhc2NhZGVkIHJ1bGVz
IG9yIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1
ZXJ5Ll9kYXRhKGVsZW0sICJvbGRkaXNwbGF5IikgJiYgZGlzcGxheSA9PT0gIm5vbmUiICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0g
ZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0
IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0
IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBzdWNoIGFuIGVsZW1lbnQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gIiIgJiYgalF1
ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJub25lIiApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKGVsZW0sICJvbGRk
aXNwbGF5IiwgZGVmYXVsdERpc3BsYXkoZWxlbS5ub2RlTmFtZSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvdwog
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGo7IGkrKyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1tpXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnN0eWxlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICIiIHx8
IGRpc3BsYXkgPT09ICJub25lIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0galF1ZXJ5Ll9kYXRhKGVsZW0sICJv
bGRkaXNwbGF5IikgfHwgIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9LAoKICAgICAgICBoaWRlOiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywg
Y2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHNwZWVkIHx8IHNwZWVkID09PSAwICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBnZW5GeCgiaGlk
ZSIsIDMpLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7CgogICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBqID0gdGhpcy5sZW5n
dGg7IGkgPCBqOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0
aGlzW2ldLnN0eWxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0aGlzW2ldLCAiZGlzcGxheSIgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpc3BsYXkgIT09ICJub25lIiAm
JiAhalF1ZXJ5Ll9kYXRhKCB0aGlzW2ldLCAib2xkZGlzcGxheSIgKSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCB0aGlzW2ld
LCAib2xkZGlzcGxheSIsIGRpc3BsYXkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZGlzcGxh
eSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAogICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CiAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdGhpc1tpXS5zdHlsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXNbaV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgog
ICAgICAgIC8vIFNhdmUgdGhlIG9sZCB0b2dnbGUgZnVuY3Rpb24KICAgICAgICBfdG9nZ2xlOiBq
UXVlcnkuZm4udG9nZ2xlLAoKICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKCBmbiwgZm4yLCBjYWxs
YmFjayApIHsKICAgICAgICAgICAgICAgIHZhciBib29sID0gdHlwZW9mIGZuID09PSAiYm9vbGVh
biI7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbihmbikgJiYgalF1ZXJ5
LmlzRnVuY3Rpb24oZm4yKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xl
LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBm
biA9PSBudWxsIHx8IGJvb2wgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWFjaChm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBi
b29sID8gZm4gOiBqUXVlcnkodGhpcykuaXMoIjpoaWRkZW4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkodGhpcylbIHN0YXRlID8gInNob3ciIDogImhpZGUiIF0oKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRlKGdlbkZ4KCJ0b2dnbGUiLCAzKSwgZm4s
IGZuMiwgY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywg
ZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcigi
OmhpZGRlbiIpLmNzcygib3BhY2l0eSIsIDApLnNob3coKS5lbmQoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLmFuaW1hdGUoe29wYWNpdHk6IHRvfSwgc3BlZWQsIGVh
c2luZywgY2FsbGJhY2spOwogICAgICAgIH0sCgogICAgICAgIGFuaW1hdGU6IGZ1bmN0aW9uKCBw
cm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAgIHZhciBvcHRh
bGwgPSBqUXVlcnkuc3BlZWQoc3BlZWQsIGVhc2luZywgY2FsbGJhY2spOwoKICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggb3B0YWxsLmNvbXBsZXRlLCBbIGZhbHNlIF0gKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBEbyBub3QgY2hhbmdlIHJlZmVy
ZW5jZWQgcHJvcGVydGllcyBhcyBwZXItcHJvcGVydHkgZWFzaW5nIHdpbGwgYmUgbG9zdAogICAg
ICAgICAgICAgICAgcHJvcCA9IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICk7CgogICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXNbIG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgPyAiZWFjaCIgOiAicXVl
dWUiIF0oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhYWCAndGhpcycg
ZG9lcyBub3QgYWx3YXlzIGhhdmUgYSBub2RlTmFtZSB3aGVuIHJ1bm5pbmcgdGhlCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRlc3Qgc3VpdGUKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggb3B0YWxsLnF1ZXVlID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuX21hcmsoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdCA9IGpRdWVyeS5leHRlbmQoIHt9LCBvcHRhbGwg
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VsZW1lbnQgPSB0aGlzLm5vZGVU
eXBlID09PSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbiA9IGlzRWxl
bWVudCAmJiBqUXVlcnkodGhpcykuaXMoIjpoaWRkZW4iKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lLCB2YWwsIHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlzcGxheSwgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cywgc3RhcnQs
IGVuZCwgdW5pdDsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgc3RvcmUgcGVyIHBy
b3BlcnR5IGVhc2luZyBhbmQgYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiBhbiBhbmltYXRpb24g
aXMgY29tcGxldGUKICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmFuaW1hdGVkUHJvcGVydGll
cyA9IHt9OwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggcCBpbiBwcm9wICkgewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eSBuYW1lIG5vcm1hbGl6YXRp
b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2Fz
ZSggcCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcCAhPT0gbmFtZSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BbIG5hbWUgXSA9
IHByb3BbIHAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBwcm9wWyBwIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwcm9wWyBuYW1lIF07CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGVhc2luZyByZXNvbHV0aW9uOiBwZXIgcHJvcGVydHkgPiBv
cHQuc3BlY2lhbEVhc2luZyA+IG9wdC5lYXNpbmcgPiAnc3dpbmcnIChkZWZhdWx0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmFuaW1hdGVkUHJvcGVy
dGllc1sgbmFtZSBdID0gdmFsWyAxIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWwgPSBwcm9wWyBuYW1lIF0gPSB2YWxbIDAgXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0LmFuaW1hdGVkUHJvcGVydGllc1sgbmFtZSBdID0gb3B0LnNwZWNpYWxFYXNpbmcg
JiYgb3B0LnNwZWNpYWxFYXNpbmdbIG5hbWUgXSB8fCBvcHQuZWFzaW5nIHx8ICdzd2luZyc7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbCA9PT0gImhpZGUiICYmIGhpZGRlbiB8fCB2YWwgPT09ICJzaG93IiAm
JiAhaGlkZGVuICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG9wdC5jb21wbGV0ZS5jYWxsKCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzRWxlbWVudCAm
JiAoIG5hbWUgPT09ICJoZWlnaHQiIHx8IG5hbWUgPT09ICJ3aWR0aCIgKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcg
c25lYWtzIG91dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVj
b3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBh
dHRyaWJ1dGUgd2hlbiBvdmVyZmxvd1ggYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm92ZXJmbG93ID0gWyB0aGlzLnN0
eWxlLm92ZXJmbG93LCB0aGlzLnN0eWxlLm92ZXJmbG93WCwgdGhpcy5zdHlsZS5vdmVyZmxvd1kg
XTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZGlzcGxh
eSBwcm9wZXJ0eSB0byBpbmxpbmUtYmxvY2sgZm9yIGhlaWdodC93aWR0aAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVu
dHMgdGhhdCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYW5pbWF0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggalF1ZXJ5LmNzcyggdGhpcywgImRpc3BsYXkiICkgPT09ICJpbmxpbmUi
ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmNzcyggdGhpcywgImZsb2F0IiApID09PSAibm9uZSIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0
LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1i
bG9jayI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheSggdGhpcy5ub2RlTmFtZSApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmxp
bmUtbGV2ZWwgZWxlbWVudHMgYWNjZXB0IGlubGluZS1ibG9jazsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibG9jay1sZXZlbCBlbGVt
ZW50cyBuZWVkIHRvIGJlIGlubGluZSB3aXRoIGxheW91dAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gImlubGlu
ZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHls
ZS56b29tID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggb3B0Lm92ZXJmbG93ICE9IG51bGwgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBw
IGluIHByb3AgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBqUXVl
cnkuZngoIHRoaXMsIG9wdCwgcCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bCA9IHByb3BbIHAgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZnh0
eXBlcy50ZXN0KHZhbCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlWyB2YWwgPT09ICJ0b2dnbGUiID8gaGlkZGVuID8gInNob3ciIDogImhpZGUiIDogdmFsIF0o
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcmZ4bnVtLmV4ZWMoIHZhbCApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBlLmN1cigpOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFydHMgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHBhcnNl
RmxvYXQoIHBhcnRzWzJdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHAgXSA/ICIi
IDogInB4IiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBjb21wdXRlIHN0YXJ0aW5nIHZhbHVlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdW5pdCAhPT0gInB4IiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuc3R5bGUoIHRoaXMsIHAsIChlbmQgfHwgMSkgKyB1bml0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICgoZW5kIHx8IDEp
IC8gZS5jdXIoKSkgKiBzdGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHRoaXMsIHAsIHN0YXJ0ICsgdW5pdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgKz0vLT0g
dG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0aXZlIGFuaW1hdGlvbgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcnRzWzFd
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZCA9ICggKHBhcnRzWyAxIF0gPT09ICItPSIgPyAtMSA6IDEpICogZW5kICkgKyBzdGFy
dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXN0b20oIHN0
YXJ0LCBlbmQsIHVuaXQgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlLmN1c3RvbSggc3RhcnQsIHZhbCwgIiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBKUyBzdHJp
Y3QgY29tcGxpYW5jZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIHN0b3A6IGZ1bmN0aW9uKCBjbGVhclF1
ZXVlLCBnb3RvRW5kICkgewogICAgICAgICAgICAgICAgaWYgKCBjbGVhclF1ZXVlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlKFtdKTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGkgPSB0aW1lcnMubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGVh
ciBtYXJrZXIgY291bnRlcnMgaWYgd2Uga25vdyB0aGV5IHdvbid0IGJlCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIWdvdG9FbmQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5Ll91bm1hcmsoIHRydWUsIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHRpbWVyc1tpXS5lbGVtID09PSB0aGlzICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdvdG9FbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yY2UgdGhlIG5leHQg
c3RlcCB0byBiZSB0aGUgbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lcnNbaV0odHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZXJzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAg
IC8vIHN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBm
b3JjZWQKICAgICAgICAgICAgICAgIGlmICggIWdvdG9FbmQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgIH0KCn0pOwoKLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNo
cm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQpmdW5jdGlvbiBjcmVhdGVGeE5vdygpIHsK
ICAgICAgICBzZXRUaW1lb3V0KCBjbGVhckZ4Tm93LCAwICk7CiAgICAgICAgcmV0dXJuICggZnhO
b3cgPSBqUXVlcnkubm93KCkgKTsKfQoKZnVuY3Rpb24gY2xlYXJGeE5vdygpIHsKICAgICAgICBm
eE5vdyA9IHVuZGVmaW5lZDsKfQoKLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBz
dGFuZGFyZCBhbmltYXRpb24KZnVuY3Rpb24gZ2VuRngoIHR5cGUsIG51bSApIHsKICAgICAgICB2
YXIgb2JqID0ge307CgogICAgICAgIGpRdWVyeS5lYWNoKCBmeEF0dHJzLmNvbmNhdC5hcHBseShb
XSwgZnhBdHRycy5zbGljZSgwLG51bSkpLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG9i
alsgdGhpcyBdID0gdHlwZTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIG9iajsKfQoKLy8g
R2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9ucwpqUXVlcnkuZWFjaCh7CiAg
ICAgICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIsIDEpLAogICAgICAgIHNsaWRlVXA6IGdlbkZ4
KCJoaWRlIiwgMSksCiAgICAgICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUiLCAxKSwKICAg
ICAgICBmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCiAgICAgICAgZmFkZU91dDogeyBvcGFj
aXR5OiAiaGlkZSIgfSwKICAgICAgICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0K
fSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkgewogICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0g
ZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CiAgICAg
ICAgfTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICBzcGVlZDogZnVuY3Rpb24oIHNwZWVk
LCBlYXNpbmcsIGZuICkgewogICAgICAgICAgICAgICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVv
ZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKHt9LCBzcGVlZCkgOiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYg
c3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBzcGVlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnku
aXNGdW5jdGlvbihlYXNpbmcpICYmIGVhc2luZwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgICAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVy
YXRpb24gPT09ICJudW1iZXIiID8gb3B0LmR1cmF0aW9uIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnkuZnguc3BlZWRzW29w
dC5kdXJhdGlvbl0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0OwoKICAgICAgICAgICAgICAg
IC8vIFF1ZXVlaW5nCiAgICAgICAgICAgICAgICBvcHQub2xkID0gb3B0LmNvbXBsZXRlOwogICAg
ICAgICAgICAgICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oIG5vVW5tYXJrICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm9sZC5jYWxsKCB0aGlzICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0LnF1
ZXVlICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZGVxdWV1ZSggdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBub1Vu
bWFyayAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
Ll91bm1hcmsoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfTsKCiAgICAgICAgICAgICAgICByZXR1cm4gb3B0OwogICAgICAgIH0sCgogICAgICAgIGVh
c2luZzogewogICAgICAgICAgICAgICAgbGluZWFyOiBmdW5jdGlvbiggcCwgbiwgZmlyc3ROdW0s
IGRpZmYgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE51bSArIGRpZmYg
KiBwOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHN3aW5nOiBmdW5jdGlvbigg
cCwgbiwgZmlyc3ROdW0sIGRpZmYgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
KC1NYXRoLmNvcyhwKk1hdGguUEkpLzIpICsgMC41KSAqIGRpZmYgKyBmaXJzdE51bTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICB0aW1lcnM6IFtdLAoKICAgICAgICBmeDog
ZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AgKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9w
dGlvbnMgPSBvcHRpb25zOwogICAgICAgICAgICAgICAgdGhpcy5lbGVtID0gZWxlbTsKICAgICAg
ICAgICAgICAgIHRoaXMucHJvcCA9IHByb3A7CgogICAgICAgICAgICAgICAgb3B0aW9ucy5vcmln
ID0gb3B0aW9ucy5vcmlnIHx8IHt9OwogICAgICAgIH0KCn0pOwoKalF1ZXJ5LmZ4LnByb3RvdHlw
ZSA9IHsKICAgICAgICAvLyBTaW1wbGUgZnVuY3Rpb24gZm9yIHNldHRpbmcgYSBzdHlsZSB2YWx1
ZQogICAgICAgIHVwZGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIHRoaXMu
b3B0aW9ucy5zdGVwICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3Rl
cC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgKGpRdWVyeS5meC5zdGVwW3RoaXMucHJvcF0gfHwgalF1ZXJ5LmZ4LnN0
ZXAuX2RlZmF1bHQpKCB0aGlzICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gR2V0IHRoZSBjdXJy
ZW50IHNpemUKICAgICAgICBjdXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCB0
aGlzLmVsZW1bdGhpcy5wcm9wXSAhPSBudWxsICYmICghdGhpcy5lbGVtLnN0eWxlIHx8IHRoaXMu
ZWxlbS5zdHlsZVt0aGlzLnByb3BdID09IG51bGwpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lbGVtWyB0aGlzLnByb3AgXTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICB2YXIgcGFyc2VkLAogICAgICAgICAgICAgICAgICAgICAgICByID0galF1ZXJ5
LmNzcyggdGhpcy5lbGVtLCB0aGlzLnByb3AgKTsKICAgICAgICAgICAgICAgIC8vIEVtcHR5IHN0
cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMCwKICAg
ICAgICAgICAgICAgIC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgInJvdGF0ZSgxcmFkKSIgYXJl
IHJldHVybmVkIGFzIGlzLAogICAgICAgICAgICAgICAgLy8gc2ltcGxlIHZhbHVlcyBzdWNoIGFz
ICIxMHB4IiBhcmUgcGFyc2VkIHRvIEZsb2F0LgogICAgICAgICAgICAgICAgcmV0dXJuIGlzTmFO
KCBwYXJzZWQgPSBwYXJzZUZsb2F0KCByICkgKSA/ICFyIHx8IHIgPT09ICJhdXRvIiA/IDAgOiBy
IDogcGFyc2VkOwogICAgICAgIH0sCgogICAgICAgIC8vIFN0YXJ0IGFuIGFuaW1hdGlvbiBmcm9t
IG9uZSBudW1iZXIgdG8gYW5vdGhlcgogICAgICAgIGN1c3RvbTogZnVuY3Rpb24oIGZyb20sIHRv
LCB1bml0ICkgewogICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgICAg
ICAgICAgICAgICBmeCA9IGpRdWVyeS5meDsKCiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGlt
ZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCk7CiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ID0g
ZnJvbTsKICAgICAgICAgICAgICAgIHRoaXMuZW5kID0gdG87CiAgICAgICAgICAgICAgICB0aGlz
LnVuaXQgPSB1bml0IHx8IHRoaXMudW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHRoaXMucHJv
cCBdID8gIiIgOiAicHgiICk7CiAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IHRoaXMuc3RhcnQ7
CiAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhdGUgPSAwOwoKICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIHQoIGdvdG9FbmQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmLnN0ZXAoZ290b0VuZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
dC5lbGVtID0gdGhpcy5lbGVtOwoKICAgICAgICAgICAgICAgIGlmICggdCgpICYmIGpRdWVyeS50
aW1lcnMucHVzaCh0KSAmJiAhdGltZXJJZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZXJJZCA9IHNldEludGVydmFsKCBmeC50aWNrLCBmeC5pbnRlcnZhbCApOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIFNpbXBsZSAnc2hvdycgZnVuY3Rpb24KICAgICAg
ICBzaG93OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHdoZXJlIHdl
IHN0YXJ0ZWQsIHNvIHRoYXQgd2UgY2FuIGdvIGJhY2sgdG8gaXQgbGF0ZXIKICAgICAgICAgICAg
ICAgIHRoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF0gPSBqUXVlcnkuc3R5bGUoIHRoaXMuZWxl
bSwgdGhpcy5wcm9wICk7CiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2hvdyA9IHRydWU7
CgogICAgICAgICAgICAgICAgLy8gQmVnaW4gdGhlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgd2Ugc3RhcnQgYXQgYSBzbWFsbCB3aWR0aC9oZWlnaHQgdG8gYXZv
aWQgYW55CiAgICAgICAgICAgICAgICAvLyBmbGFzaCBvZiBjb250ZW50CiAgICAgICAgICAgICAg
ICB0aGlzLmN1c3RvbSh0aGlzLnByb3AgPT09ICJ3aWR0aCIgfHwgdGhpcy5wcm9wID09PSAiaGVp
Z2h0IiA/IDEgOiAwLCB0aGlzLmN1cigpKTsKCiAgICAgICAgICAgICAgICAvLyBTdGFydCBieSBz
aG93aW5nIHRoZSBlbGVtZW50CiAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMuZWxlbSApLnNo
b3coKTsKICAgICAgICB9LAoKICAgICAgICAvLyBTaW1wbGUgJ2hpZGUnIGZ1bmN0aW9uCiAgICAg
ICAgaGlkZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB3aGVyZSB3
ZSBzdGFydGVkLCBzbyB0aGF0IHdlIGNhbiBnbyBiYWNrIHRvIGl0IGxhdGVyCiAgICAgICAgICAg
ICAgICB0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdID0galF1ZXJ5LnN0eWxlKCB0aGlzLmVs
ZW0sIHRoaXMucHJvcCApOwogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhpZGUgPSB0cnVl
OwoKICAgICAgICAgICAgICAgIC8vIEJlZ2luIHRoZSBhbmltYXRpb24KICAgICAgICAgICAgICAg
IHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksIDApOwogICAgICAgIH0sCgogICAgICAgIC8vIEVhY2gg
c3RlcCBvZiBhbiBhbmltYXRpb24KICAgICAgICBzdGVwOiBmdW5jdGlvbiggZ290b0VuZCApIHsK
ICAgICAgICAgICAgICAgIHZhciB0ID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgZG9uZSA9IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0g
PSB0aGlzLmVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlv
bnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGksIG47CgogICAgICAgICAgICAgICAgaWYgKCBn
b3RvRW5kIHx8IHQgPj0gb3B0aW9ucy5kdXJhdGlvbiArIHRoaXMuc3RhcnRUaW1lICkgewogICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IHRoaXMuZW5kOwogICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnVwZGF0ZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hbmltYXRl
ZFByb3BlcnRpZXNbIHRoaXMucHJvcCBdID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGkgaW4gb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXMgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllc1tpXSAhPT0g
dHJ1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZG9uZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgb3ZlcmZsb3cKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMub3ZlcmZsb3cgIT0gbnVsbCAmJiAhalF1
ZXJ5LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggWyAiIiwgIlgiLCAiWSIgXSwgZnVuY3Rpb24g
KGluZGV4LCB2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnN0eWxlWyAib3ZlcmZsb3ciICsgdmFsdWUgXSA9IG9wdGlvbnMub3ZlcmZs
b3dbaW5kZXhdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBIaWRlIHRoZSBlbGVtZW50IGlmIHRoZSAiaGlkZSIgb3BlcmF0aW9uIHdhcyBk
b25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLmhpZGUgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoZWxlbSkuaGlk
ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHByb3BlcnRpZXMsIGlmIHRoZSBpdGVtIGhhcyBi
ZWVuIGhpZGRlbiBvciBzaG93bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
b3B0aW9ucy5oaWRlIHx8IG9wdGlvbnMuc2hvdyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBwIGluIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVz
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuc3R5bGUoIGVsZW0sIHAsIG9wdGlvbnMub3JpZ1twXSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29tcGxldGUg
ZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbXBsZXRl
LmNhbGwoIGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGNsYXNzaWNhbCBlYXNpbmcgY2Fubm90IGJlIHVzZWQgd2l0aCBh
biBJbmZpbml0eSBkdXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMu
ZHVyYXRpb24gPT0gSW5maW5pdHkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5ub3cgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG4gPSB0IC0gdGhpcy5zdGFydFRpbWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG4gLyBvcHRpb25zLmR1cmF0aW9uOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBlYXNpbmcgZnVu
Y3Rpb24sIGRlZmF1bHRzIHRvIHN3aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5wb3MgPSBqUXVlcnkuZWFzaW5nWyBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllc1sgdGhp
cy5wcm9wIF0gXSggdGhpcy5zdGF0ZSwgbiwgMCwgMSwgb3B0aW9ucy5kdXJhdGlvbiApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm93ID0gdGhpcy5zdGFydCArICgodGhp
cy5lbmQgLSB0aGlzLnN0YXJ0KSAqIHRoaXMucG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBuZXh0IHN0ZXAgb2YgdGhl
IGFuaW1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KfTsKCmpR
dWVyeS5leHRlbmQoIGpRdWVyeS5meCwgewogICAgICAgIHRpY2s6IGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgZm9yICggdmFyIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsIGkgPSAwIDsgaSA8
IHRpbWVycy5sZW5ndGggOyArK2kgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXRp
bWVyc1tpXSgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxp
Y2UoaS0tLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIGlmICggIXRpbWVycy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5meC5zdG9wKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAg
ICAgICAgaW50ZXJ2YWw6IDEzLAoKICAgICAgICBzdG9wOiBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgIGNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKICAgICAgICAgICAgICAgIHRpbWVySWQg
PSBudWxsOwogICAgICAgIH0sCgogICAgICAgIHNwZWVkczogewogICAgICAgICAgICAgICAgc2xv
dzogNjAwLAogICAgICAgICAgICAgICAgZmFzdDogMjAwLAogICAgICAgICAgICAgICAgLy8gRGVm
YXVsdCBzcGVlZAogICAgICAgICAgICAgICAgX2RlZmF1bHQ6IDQwMAogICAgICAgIH0sCgogICAg
ICAgIHN0ZXA6IHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IGZ1bmN0aW9uKCBmeCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBmeC5lbGVtLCAib3BhY2l0eSIsIGZ4
Lm5vdyApOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBfZGVmYXVsdDogZnVu
Y3Rpb24oIGZ4ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZ4LmVsZW0uc3R5bGUg
JiYgZnguZWxlbS5zdHlsZVsgZngucHJvcCBdICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnguZWxlbS5zdHlsZVsgZngucHJvcCBdID0gKGZ4LnByb3AgPT09ICJ3
aWR0aCIgfHwgZngucHJvcCA9PT0gImhlaWdodCIgPyBNYXRoLm1heCgwLCBmeC5ub3cpIDogZngu
bm93KSArIGZ4LnVuaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnguZWxlbVsgZngucHJvcCBdID0gZngubm93OwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9KTsKCmlm
ICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKICAgICAgICBqUXVlcnku
ZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKICAgICAgICAgICAg
ICAgIH0pLmxlbmd0aDsKICAgICAgICB9Owp9CgovLyBUcnkgdG8gcmVzdG9yZSB0aGUgZGVmYXVs
dCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQKZnVuY3Rpb24gZGVmYXVsdERpc3BsYXkoIG5v
ZGVOYW1lICkgewoKICAgICAgICBpZiAoICFlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSApIHsKCiAg
ICAgICAgICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHksCiAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0gPSBqUXVlcnkoICI8IiArIG5vZGVOYW1lICsgIj4iICkuYXBwZW5kVG8oIGJv
ZHkgKSwKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGVsZW0uY3NzKCAiZGlzcGxh
eSIgKTsKCiAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZSgpOwoKICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLAogICAgICAgICAgICAgICAgLy8gZ2V0IGVsZW1lbnQn
cyByZWFsIGRlZmF1bHQgZGlzcGxheSBieSBhdHRhY2hpbmcgaXQgdG8gYSB0ZW1wIGlmcmFtZQog
ICAgICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgfHwgZGlzcGxheSA9PT0gIiIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGlmcmFtZSB0byB1c2UgeWV0LCBzbyBj
cmVhdGUgaXQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaWZyYW1lICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ICJpZnJhbWUiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLmZyYW1l
Qm9yZGVyID0gaWZyYW1lLndpZHRoID0gaWZyYW1lLmhlaWdodCA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoIGlm
cmFtZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgY2FjaGVhYmxlIGNv
cHkgb2YgdGhlIGlmcmFtZSBkb2N1bWVudCBvbiBmaXJzdCBjYWxsLgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJRSBhbmQgT3BlcmEgd2lsbCBhbGxvdyB1cyB0byByZXVzZSB0aGUgaWZyYW1l
RG9jIHdpdGhvdXQgcmUtd3JpdGluZyB0aGUgZmFrZSBIVE1MCiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGRvY3VtZW50IHRvIGl0OyBXZWJLaXQgJiBGaXJlZm94IHdvbid0IGFsbG93IHJldXNp
bmcgdGhlIGlmcmFtZSBkb2N1bWVudC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaWZy
YW1lRG9jIHx8ICFpZnJhbWUuY3JlYXRlRWxlbWVudCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlmcmFtZS5j
b250ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZnJhbWVEb2Mud3JpdGUoICggZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gIkNTUzFDb21wYXQi
ID8gIjwhZG9jdHlwZSBodG1sPiIgOiAiIiApICsgIjxodG1sPjxib2R5PiIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2MuY2xvc2UoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGlmcmFtZURvYy5jcmVh
dGVFbGVtZW50KCBub2RlTmFtZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9j
LmJvZHkuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bs
YXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIGJvZHkucmVtb3ZlQ2hpbGQoIGlmcmFtZSApOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIC8vIFN0b3JlIHRoZSBjb3JyZWN0IGRlZmF1bHQgZGlzcGxheQogICAgICAgICAg
ICAgICAgZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBkaXNwbGF5OwogICAgICAgIH0KCiAgICAg
ICAgcmV0dXJuIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdOwp9CgoKCgp2YXIgcnRhYmxlID0gL150
KD86YWJsZXxkfGgpJC9pLAogICAgICAgIHJyb290ID0gL14oPzpib2R5fGh0bWwpJC9pOwoKaWYg
KCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgKSB7
CiAgICAgICAgalF1ZXJ5LmZuLm9mZnNldCA9IGZ1bmN0aW9uKCBvcHRpb25zICkgewogICAgICAg
ICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdLCBib3g7CgogICAgICAgICAgICAgICAgaWYgKCBv
cHRpb25zICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQu
c2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIWVsZW0gfHwgIWVsZW0u
b3duZXJEb2N1bWVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBlbGVtLm93bmVy
RG9jdW1lbnQuYm9keSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5v
ZmZzZXQuYm9keU9mZnNldCggZWxlbSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CgogICAgICAgICAgICAg
ICAgdmFyIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CgogICAgICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSBkaXNjb25uZWN0ZWQgRE9NIG5vZGUKICAgICAg
ICAgICAgICAgIGlmICggIWJveCB8fCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBlbGVtICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3ggPyB7IHRvcDogYm94LnRvcCwg
bGVmdDogYm94LmxlZnQgfSA6IHsgdG9wOiAwLCBsZWZ0OiAwIH07CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keSwKICAgICAgICAgICAgICAgICAg
ICAgICAgd2luID0gZ2V0V2luZG93KGRvYyksCiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVu
dFRvcCAgPSBkb2NFbGVtLmNsaWVudFRvcCAgfHwgYm9keS5jbGllbnRUb3AgIHx8IDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNsaWVudExlZnQgPSBkb2NFbGVtLmNsaWVudExlZnQgfHwgYm9k
eS5jbGllbnRMZWZ0IHx8IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCAgPSB3
aW4ucGFnZVlPZmZzZXQgfHwgalF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgZG9jRWxlbS5zY3Jv
bGxUb3AgIHx8IGJvZHkuc2Nyb2xsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxM
ZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0IHx8IGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYmIGRvY0Vs
ZW0uc2Nyb2xsTGVmdCB8fCBib2R5LnNjcm9sbExlZnQsCiAgICAgICAgICAgICAgICAgICAgICAg
IHRvcCAgPSBib3gudG9wICArIHNjcm9sbFRvcCAgLSBjbGllbnRUb3AsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnQgPSBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0OwoKICAg
ICAgICAgICAgICAgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH07CiAgICAgICAgfTsK
Cn0gZWxzZSB7CiAgICAgICAgalF1ZXJ5LmZuLm9mZnNldCA9IGZ1bmN0aW9uKCBvcHRpb25zICkg
ewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdOwoKICAgICAgICAgICAgICAgIGlm
ICggb3B0aW9ucyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbiggaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkub2Zm
c2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8ICFl
bGVtLm93bmVyRG9jdW1lbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZWxlbSA9PT0gZWxlbS5v
d25lckRvY3VtZW50LmJvZHkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkub2Zmc2V0LmJvZHlPZmZzZXQoIGVsZW0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBqUXVlcnkub2Zmc2V0LmluaXRpYWxpemUoKTsKCiAgICAgICAgICAgICAgICB2YXIg
Y29tcHV0ZWRTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gZWxl
bS5vZmZzZXRQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZPZmZzZXRQYXJlbnQg
PSBlbGVtLAogICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50LAog
ICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZG9jLmJvZHksCiAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHRWaWV3ID0gZG9jLmRlZmF1bHRWaWV3LAogICAgICAgICAgICAgICAgICAg
ICAgICBwcmV2Q29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApIDogZWxlbS5jdXJyZW50U3R5bGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHRvcCA9IGVsZW0ub2Zmc2V0VG9wLAogICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0ID0gZWxlbS5vZmZzZXRMZWZ0OwoKICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0g
PSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0gIT09IGJvZHkgJiYgZWxlbSAhPT0gZG9jRWxlbSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkub2Zmc2V0LnN1cHBvcnRzRml4
ZWRQb3NpdGlvbiAmJiBwcmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gImZpeGVkIiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRW
aWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKSA6IGVsZW0uY3Vy
cmVudFN0eWxlOwogICAgICAgICAgICAgICAgICAgICAgICB0b3AgIC09IGVsZW0uc2Nyb2xsVG9w
OwogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IGVsZW0uc2Nyb2xsTGVmdDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSA9PT0gb2Zmc2V0UGFyZW50ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gZWxlbS5vZmZzZXRUb3A7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBlbGVtLm9mZnNldExlZnQ7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm9mZnNldC5kb2VzTm90QWRkQm9y
ZGVyICYmICEoalF1ZXJ5Lm9mZnNldC5kb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxscyAmJiBy
dGFibGUudGVzdChlbGVtLm5vZGVOYW1lKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9w
V2lkdGggICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnQgKz0gcGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGggKSB8fCAwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldk9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
b2Zmc2V0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSAmJiBjb21wdXRlZFN0
eWxlLm92ZXJmbG93ICE9PSAidmlzaWJsZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoICAp
IHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBwYXJzZUZsb2F0
KCBjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCApIHx8IDA7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDb21wdXRlZFN0eWxlID0gY29t
cHV0ZWRTdHlsZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHByZXZD
b21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAicmVsYXRpdmUiIHx8IHByZXZDb21wdXRlZFN0eWxl
LnBvc2l0aW9uID09PSAic3RhdGljIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9wICAr
PSBib2R5Lm9mZnNldFRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBib2R5Lm9m
ZnNldExlZnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
b2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiAmJiBwcmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlv
biA9PT0gImZpeGVkIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9wICArPSBNYXRoLm1h
eCggZG9jRWxlbS5zY3JvbGxUb3AsIGJvZHkuc2Nyb2xsVG9wICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnQgKz0gTWF0aC5tYXgoIGRvY0VsZW0uc2Nyb2xsTGVmdCwgYm9keS5zY3JvbGxM
ZWZ0ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHsgdG9wOiB0
b3AsIGxlZnQ6IGxlZnQgfTsKICAgICAgICB9Owp9CgpqUXVlcnkub2Zmc2V0ID0gewogICAgICAg
IGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2N1
bWVudC5ib2R5LCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgaW5u
ZXJEaXYsIGNoZWNrRGl2LCB0YWJsZSwgdGQsIGJvZHlNYXJnaW5Ub3AgPSBwYXJzZUZsb2F0KCBq
UXVlcnkuY3NzKGJvZHksICJtYXJnaW5Ub3AiKSApIHx8IDAsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGh0bWwgPSAiPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21h
cmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDox
cHg7Jz48ZGl2PjwvZGl2PjwvZGl2Pjx0YWJsZSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9w
OjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6
MXB4O2hlaWdodDoxcHg7JyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+
PC90ZD48L3RyPjwvdGFibGU+IjsKCiAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCBjb250
YWluZXIuc3R5bGUsIHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHRvcDogMCwgbGVmdDogMCwgbWFy
Z2luOiAwLCBib3JkZXI6IDAsIHdpZHRoOiAiMXB4IiwgaGVpZ2h0OiAiMXB4IiwgdmlzaWJpbGl0
eTogImhpZGRlbiIgfSApOwoKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBo
dG1sOwogICAgICAgICAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUoIGNvbnRhaW5lciwgYm9keS5m
aXJzdENoaWxkICk7CiAgICAgICAgICAgICAgICBpbm5lckRpdiA9IGNvbnRhaW5lci5maXJzdENo
aWxkOwogICAgICAgICAgICAgICAgY2hlY2tEaXYgPSBpbm5lckRpdi5maXJzdENoaWxkOwogICAg
ICAgICAgICAgICAgdGQgPSBpbm5lckRpdi5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hp
bGQ7CgogICAgICAgICAgICAgICAgdGhpcy5kb2VzTm90QWRkQm9yZGVyID0gKGNoZWNrRGl2Lm9m
ZnNldFRvcCAhPT0gNSk7CiAgICAgICAgICAgICAgICB0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJs
ZUFuZENlbGxzID0gKHRkLm9mZnNldFRvcCA9PT0gNSk7CgogICAgICAgICAgICAgICAgY2hlY2tE
aXYuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICAgICAgICAgICAgY2hlY2tEaXYuc3R5
bGUudG9wID0gIjIwcHgiOwoKICAgICAgICAgICAgICAgIC8vIHNhZmFyaSBzdWJ0cmFjdHMgcGFy
ZW50IGJvcmRlciB3aWR0aCBoZXJlIHdoaWNoIGlzIDVweAogICAgICAgICAgICAgICAgdGhpcy5z
dXBwb3J0c0ZpeGVkUG9zaXRpb24gPSAoY2hlY2tEaXYub2Zmc2V0VG9wID09PSAyMCB8fCBjaGVj
a0Rpdi5vZmZzZXRUb3AgPT09IDE1KTsKICAgICAgICAgICAgICAgIGNoZWNrRGl2LnN0eWxlLnBv
c2l0aW9uID0gY2hlY2tEaXYuc3R5bGUudG9wID0gIiI7CgogICAgICAgICAgICAgICAgaW5uZXJE
aXYuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgICAgICAgICAgIGlubmVyRGl2LnN0
eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKCiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0
c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSA9IChjaGVja0Rpdi5vZmZzZXRUb3AgPT09IC01
KTsKCiAgICAgICAgICAgICAgICB0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0
ID0gKGJvZHkub2Zmc2V0VG9wICE9PSBib2R5TWFyZ2luVG9wKTsKCiAgICAgICAgICAgICAgICBi
b2R5LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZz
ZXQuaW5pdGlhbGl6ZSA9IGpRdWVyeS5ub29wOwogICAgICAgIH0sCgogICAgICAgIGJvZHlPZmZz
ZXQ6IGZ1bmN0aW9uKCBib2R5ICkgewogICAgICAgICAgICAgICAgdmFyIHRvcCA9IGJvZHkub2Zm
c2V0VG9wLAogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gYm9keS5vZmZzZXRMZWZ0OwoK
ICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQuaW5pdGlhbGl6ZSgpOwoKICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5Lm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3Nz
KGJvZHksICJtYXJnaW5Ub3AiKSApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQg
Kz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhib2R5LCAibWFyZ2luTGVmdCIpICkgfHwgMDsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDog
bGVmdCB9OwogICAgICAgIH0sCgogICAgICAgIHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9w
dGlvbnMsIGkgKSB7CiAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBl
bGVtLCAicG9zaXRpb24iICk7CgogICAgICAgICAgICAgICAgLy8gc2V0IHBvc2l0aW9uIGZpcnN0
LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQogICAgICAgICAg
ICAgICAgaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIHZhciBjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCiAgICAgICAgICAg
ICAgICAgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgIGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICksCiAgICAgICAg
ICAgICAgICAgICAgICAgIGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAocG9zaXRpb24gPT09
ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24gPT09ICJmaXhlZCIpICYmIGpRdWVyeS5pbkFycmF5KCJh
dXRvIiwgW2N1ckNTU1RvcCwgY3VyQ1NTTGVmdF0pID4gLTEsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BzID0ge30sIGN1clBvc2l0aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDsKCiAgICAg
ICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVp
dGhlciB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUg
b3IgZml4ZWQKICAgICAgICAgICAgICAgIGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpOwogICAg
ICAgICAgICAgICAgICAgICAgICBjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OwogICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9wID0gcGFyc2VGbG9hdCggY3Vy
Q1NTVG9wICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGVmdCA9IHBhcnNlRmxv
YXQoIGN1ckNTU0xlZnQgKSB8fCAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudG9wICE9IG51bGwpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudG9wID0gKG9wdGlvbnMudG9wIC0gY3VyT2Zm
c2V0LnRvcCkgKyBjdXJUb3A7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAo
b3B0aW9ucy5sZWZ0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMubGVm
dCA9IChvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCkgKyBjdXJMZWZ0OwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7CiAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjdXJFbGVtLmNz
cyggcHJvcHMgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn07CgoKalF1ZXJ5LmZuLmV4
dGVuZCh7CiAgICAgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYg
KCAhdGhpc1swXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdLAoKICAgICAg
ICAgICAgICAgIC8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50CiAgICAgICAgICAgICAgICBvZmZz
ZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpLAoKICAgICAgICAgICAgICAgIC8vIEdldCBj
b3JyZWN0IG9mZnNldHMKICAgICAgICAgICAgICAgIG9mZnNldCAgICAgICA9IHRoaXMub2Zmc2V0
KCksCiAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQgPSBycm9vdC50ZXN0KG9mZnNldFBhcmVu
dFswXS5ub2RlTmFtZSkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogb2Zmc2V0UGFyZW50Lm9mZnNl
dCgpOwoKICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGVsZW1lbnQgbWFyZ2lucwogICAgICAg
ICAgICAgICAgLy8gbm90ZTogd2hlbiBhbiBlbGVtZW50IGhhcyBtYXJnaW46IGF1dG8gdGhlIG9m
ZnNldExlZnQgYW5kIG1hcmdpbkxlZnQKICAgICAgICAgICAgICAgIC8vIGFyZSB0aGUgc2FtZSBp
biBTYWZhcmkgY2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNvcnJlY3RseSBiZSAwCiAgICAgICAg
ICAgICAgICBvZmZzZXQudG9wICAtPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJn
aW5Ub3AiKSApIHx8IDA7CiAgICAgICAgICAgICAgICBvZmZzZXQubGVmdCAtPSBwYXJzZUZsb2F0
KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5MZWZ0IikgKSB8fCAwOwoKICAgICAgICAgICAgICAg
IC8vIEFkZCBvZmZzZXRQYXJlbnQgYm9yZGVycwogICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0
LnRvcCAgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sICJib3JkZXJU
b3BXaWR0aCIpICkgfHwgMDsKICAgICAgICAgICAgICAgIHBhcmVudE9mZnNldC5sZWZ0ICs9IHBh
cnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVyTGVmdFdpZHRoIikg
KSB8fCAwOwoKICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHRoZSB0d28gb2Zmc2V0cwogICAg
ICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAgb2Zmc2V0
LnRvcCAgLSBwYXJlbnRPZmZzZXQudG9wLAogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBv
ZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0CiAgICAgICAgICAgICAgICB9OwogICAgICAg
IH0sCgogICAgICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBv
ZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5OwogICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoIG9mZnNldFBhcmVudCAmJiAoIXJyb290LnRlc3Qob2Zm
c2V0UGFyZW50Lm5vZGVOYW1lKSAmJiBqUXVlcnkuY3NzKG9mZnNldFBhcmVudCwgInBvc2l0aW9u
IikgPT09ICJzdGF0aWMiKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz
ZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXRQYXJlbnQ7CiAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICB9Cn0pOwoKCi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBz
Y3JvbGxUb3AgbWV0aG9kcwpqUXVlcnkuZWFjaCggWyJMZWZ0IiwgIlRvcCJdLCBmdW5jdGlvbigg
aSwgbmFtZSApIHsKICAgICAgICB2YXIgbWV0aG9kID0gInNjcm9sbCIgKyBuYW1lOwoKICAgICAg
ICBqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHsKICAgICAgICAgICAgICAg
IHZhciBlbGVtLCB3aW47CgogICAgICAgICAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbiA9IGdldFdpbmRvdyggZWxlbSApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmV0dXJuIHRoZSBzY3JvbGwgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB3aW4gPyAoInBhZ2VYT2Zmc2V0IiBpbiB3aW4pID8gd2luWyBpID8gInBhZ2VZT2Zmc2V0
IiA6ICJwYWdlWE9mZnNldCIgXSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgbWV0
aG9kIF0gfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbi5kb2N1
bWVudC5ib2R5WyBtZXRob2QgXSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bVsgbWV0aG9kIF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2V0IHRo
ZSBzY3JvbGwgb2Zmc2V0CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICB3aW4gPSBnZXRXaW5kb3coIHRoaXMgKTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggd2luICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbi5zY3JvbGxUbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICFpID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxMZWZ0KCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Ny
b2xsVG9wKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
WyBtZXRob2QgXSA9IHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgfTsKfSk7CgpmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7CiAgICAg
ICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8KICAgICAgICAgICAgICAgIGVsZW0g
OgogICAgICAgICAgICAgICAgZWxlbS5ub2RlVHlwZSA9PT0gOSA/CiAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0uZGVmYXVsdFZpZXcgfHwgZWxlbS5wYXJlbnRXaW5kb3cgOgogICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZTsKfQoKCgoKLy8gQ3JlYXRlIHdpZHRoLCBoZWlnaHQsIGlubmVy
SGVpZ2h0LCBpbm5lcldpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzCmpR
dWVyeS5lYWNoKFsgIkhlaWdodCIsICJXaWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Cgog
ICAgICAgIHZhciB0eXBlID0gbmFtZS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAvLyBpbm5lckhl
aWdodCBhbmQgaW5uZXJXaWR0aAogICAgICAgIGpRdWVyeS5mblsgImlubmVyIiArIG5hbWUgXSA9
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdOwogICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0gJiYgZWxlbS5zdHlsZSA/CiAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsICJwYWRkaW5nIiApICkgOgog
ICAgICAgICAgICAgICAgICAgICAgICBudWxsOwogICAgICAgIH07CgogICAgICAgIC8vIG91dGVy
SGVpZ2h0IGFuZCBvdXRlcldpZHRoCiAgICAgICAgalF1ZXJ5LmZuWyAib3V0ZXIiICsgbmFtZSBd
ID0gZnVuY3Rpb24oIG1hcmdpbiApIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1sw
XTsKICAgICAgICAgICAgICAgIHJldHVybiBlbGVtICYmIGVsZW0uc3R5bGUgPwogICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBtYXJnaW4g
PyAibWFyZ2luIiA6ICJib3JkZXIiICkgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7
CiAgICAgICAgfTsKCiAgICAgICAgalF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggc2l6ZSAp
IHsKICAgICAgICAgICAgICAgIC8vIEdldCB3aW5kb3cgd2lkdGggb3IgaGVpZ2h0CiAgICAgICAg
ICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF07CiAgICAgICAgICAgICAgICBpZiAoICFlbGVtICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZSA9PSBudWxsID8gbnVsbCA6IHRo
aXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggc2l6ZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxm
ID0galF1ZXJ5KCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZlsg
dHlwZSBdKCBzaXplLmNhbGwoIHRoaXMsIGksIHNlbGZbIHR5cGUgXSgpICkgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RXZlcnlvbmUgZWxzZSB1c2UgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IG9yIGRvY3VtZW50LmJv
ZHkgZGVwZW5kaW5nIG9uIFF1aXJrcyB2cyBTdGFuZGFyZHMgbW9kZQogICAgICAgICAgICAgICAg
ICAgICAgICAvLyAzcmQgY29uZGl0aW9uIGFsbG93cyBOb2tpYSBzdXBwb3J0LCBhcyBpdCBzdXBw
b3J0cyB0aGUgZG9jRWxlbSBwcm9wIGJ1dCBub3QgQ1NTMUNvbXBhdAogICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgZG9jRWxlbVByb3AgPSBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsg
ImNsaWVudCIgKyBuYW1lIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9
IGVsZW0uZG9jdW1lbnQuYm9keTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0u
ZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gIkNTUzFDb21wYXQiICYmIGRvY0VsZW1Qcm9wIHx8CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSAmJiBib2R5WyAiY2xpZW50IiArIG5h
bWUgXSB8fCBkb2NFbGVtUHJvcDsKCiAgICAgICAgICAgICAgICAvLyBHZXQgZG9jdW1lbnQgd2lk
dGggb3IgaGVpZ2h0CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09
PSA5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hl
aWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZlciBpcyBncmVhdGVyCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLmRvY3VtZW50RWxlbWVudFsiY2xpZW50IiArIG5hbWVdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsic2Nyb2xsIiArIG5hbWVdLCBlbGVt
LmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIiArIG5hbWVdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uYm9keVsib2Zmc2V0IiArIG5hbWVdLCBlbGVtLmRvY3VtZW50RWxlbWVu
dFsib2Zmc2V0IiArIG5hbWVdCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAg
ICAgICAgLy8gR2V0IG9yIHNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQKICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHNpemUgPT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG9yaWcgPSBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlICksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcGFyc2VGbG9hdCggb3JpZyApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pc05hTiggcmV0ICkgPyBvcmlnIDogcmV0
OwoKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVt
ZW50IChkZWZhdWx0IHRvIHBpeGVscyBpZiB2YWx1ZSBpcyB1bml0bGVzcykKICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNzcyggdHlw
ZSwgdHlwZW9mIHNpemUgPT09ICJzdHJpbmciID8gc2l6ZSA6IHNpemUgKyAicHgiICk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfTsKCn0pOwoKCi8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGds
b2JhbCBvYmplY3QKd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5Owp9KSh3aW5kb3cp
OwpfEA90ZXh0L2phdmFzY3JpcHTUBhAHCBYXGBlfEE1maWxlOi8vL1VzZXJzL3l1c3VrZS9kZXYv
V2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS5mbG90Lm1pbi5qc08RAkdi
cGxpc3QwMNQBAgMEBQY1NlgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagqwcI
HyUmLRcuLzAxVSRudWxs2wkKCwwNDg8QERITFBUWFxgZGhscHR5SJDNWJGNsYXNzUiQ2UiQxUiQ5
UiQ0UiQ3UiQyUiQ1UiQwUiQ4gAKACoAHEACACYAFgAAQB4AGEAiACNMgCiEaIyRXTlMuYmFzZVtO
Uy5yZWxhdGl2ZYAAgASAA18QTWZpbGU6Ly8vVXNlcnMveXVzdWtlL2Rldi9XZWJLaXQvUGVyZm9y
bWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpz0icoKSpaJGNsYXNzbmFtZVgk
Y2xhc3Nlc1VOU1VSTKIrLFVOU1VSTFhOU09iamVjdCNBucNr6KRRyl8QD3RleHQvamF2YXNjcmlw
dBGSsyN/7////////9InKDIzXU5TVVJMUmVzcG9uc2WiNCxdTlNVUkxSZXNwb25zZV8QD05TS2V5
ZWRBcmNoaXZlctE3OF8QE1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3AEMASQBg
AGMAagBtAHAAcwB2AHkAfAB/AIIAhQCHAIkAiwCNAI8AkQCTAJUAlwCZAJsAogCqALYAuAC6ALwB
DAERARwBJQErAS4BNAE9AUYBWAFbAWQBaQF3AXoBiAGaAZ0BswAAAAAAAAIBAAAAAAAAADkAAAAA
AAAAAAAAAAAAAAG1TxGSsy8qIEphdmFzY3JpcHQgcGxvdHRpbmcgbGlicmFyeSBmb3IgalF1ZXJ5
LCB2LiAwLjcuCiAqCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBieSBJT0xBLCBE
ZWNlbWJlciAyMDA3LgogKgogKi8KKGZ1bmN0aW9uKGIpe2IuY29sb3I9e307Yi5jb2xvci5tYWtl
PWZ1bmN0aW9uKGQsZSxnLGYpe3ZhciBjPXt9O2Mucj1kfHwwO2MuZz1lfHwwO2MuYj1nfHwwO2Mu
YT1mIT1udWxsP2Y6MTtjLmFkZD1mdW5jdGlvbihoLGope2Zvcih2YXIgaz0wO2s8aC5sZW5ndGg7
KytrKXtjW2guY2hhckF0KGspXSs9an1yZXR1cm4gYy5ub3JtYWxpemUoKX07Yy5zY2FsZT1mdW5j
dGlvbihoLGope2Zvcih2YXIgaz0wO2s8aC5sZW5ndGg7KytrKXtjW2guY2hhckF0KGspXSo9an1y
ZXR1cm4gYy5ub3JtYWxpemUoKX07Yy50b1N0cmluZz1mdW5jdGlvbigpe2lmKGMuYT49MSl7cmV0
dXJuInJnYigiK1tjLnIsYy5nLGMuYl0uam9pbigiLCIpKyIpIn1lbHNle3JldHVybiJyZ2JhKCIr
W2MucixjLmcsYy5iLGMuYV0uam9pbigiLCIpKyIpIn19O2Mubm9ybWFsaXplPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gaChrLGosbCl7cmV0dXJuIGo8az9rOihqPmw/bDpqKX1jLnI9aCgwLHBhcnNlSW50
KGMuciksMjU1KTtjLmc9aCgwLHBhcnNlSW50KGMuZyksMjU1KTtjLmI9aCgwLHBhcnNlSW50KGMu
YiksMjU1KTtjLmE9aCgwLGMuYSwxKTtyZXR1cm4gY307Yy5jbG9uZT1mdW5jdGlvbigpe3JldHVy
biBiLmNvbG9yLm1ha2UoYy5yLGMuYixjLmcsYy5hKX07cmV0dXJuIGMubm9ybWFsaXplKCl9O2Iu
Y29sb3IuZXh0cmFjdD1mdW5jdGlvbihkLGUpe3ZhciBjO2Rve2M9ZC5jc3MoZSkudG9Mb3dlckNh
c2UoKTtpZihjIT0iIiYmYyE9InRyYW5zcGFyZW50Iil7YnJlYWt9ZD1kLnBhcmVudCgpfXdoaWxl
KCFiLm5vZGVOYW1lKGQuZ2V0KDApLCJib2R5IikpO2lmKGM9PSJyZ2JhKDAsIDAsIDAsIDApIil7
Yz0idHJhbnNwYXJlbnQifXJldHVybiBiLmNvbG9yLnBhcnNlKGMpfTtiLmNvbG9yLnBhcnNlPWZ1
bmN0aW9uKGMpe3ZhciBkLGY9Yi5jb2xvci5tYWtlO2lmKGQ9L3JnYlwoXHMqKFswLTldezEsM30p
XHMqLFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccypcKS8uZXhlYyhjKSl7cmV0
dXJuIGYocGFyc2VJbnQoZFsxXSwxMCkscGFyc2VJbnQoZFsyXSwxMCkscGFyc2VJbnQoZFszXSwx
MCkpfWlmKGQ9L3JnYmFcKFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMq
KFswLTldezEsM30pXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVxzKlwpLy5leGVjKGMpKXty
ZXR1cm4gZihwYXJzZUludChkWzFdLDEwKSxwYXJzZUludChkWzJdLDEwKSxwYXJzZUludChkWzNd
LDEwKSxwYXJzZUZsb2F0KGRbNF0pKX1pZihkPS9yZ2JcKFxzKihbMC05XSsoPzpcLlswLTldKyk/
KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTld
Kyk/KVwlXHMqXCkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlRmxvYXQoZFsxXSkqMi41NSxwYXJz
ZUZsb2F0KGRbMl0pKjIuNTUscGFyc2VGbG9hdChkWzNdKSoyLjU1KX1pZihkPS9yZ2JhXChccyoo
WzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixc
cyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylccypc
KS8uZXhlYyhjKSl7cmV0dXJuIGYocGFyc2VGbG9hdChkWzFdKSoyLjU1LHBhcnNlRmxvYXQoZFsy
XSkqMi41NSxwYXJzZUZsb2F0KGRbM10pKjIuNTUscGFyc2VGbG9hdChkWzRdKSl9aWYoZD0vIyhb
YS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KS8uZXhlYyhjKSl7
cmV0dXJuIGYocGFyc2VJbnQoZFsxXSwxNikscGFyc2VJbnQoZFsyXSwxNikscGFyc2VJbnQoZFsz
XSwxNikpfWlmKGQ9LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkvLmV4
ZWMoYykpe3JldHVybiBmKHBhcnNlSW50KGRbMV0rZFsxXSwxNikscGFyc2VJbnQoZFsyXStkWzJd
LDE2KSxwYXJzZUludChkWzNdK2RbM10sMTYpKX12YXIgZT1iLnRyaW0oYykudG9Mb3dlckNhc2Uo
KTtpZihlPT0idHJhbnNwYXJlbnQiKXtyZXR1cm4gZigyNTUsMjU1LDI1NSwwKX1lbHNle2Q9YVtl
XXx8WzAsMCwwXTtyZXR1cm4gZihkWzBdLGRbMV0sZFsyXSl9fTt2YXIgYT17YXF1YTpbMCwyNTUs
MjU1XSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmxhY2s6WzAsMCww
XSxibHVlOlswLDAsMjU1XSxicm93bjpbMTY1LDQyLDQyXSxjeWFuOlswLDI1NSwyNTVdLGRhcmti
bHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ3JleTpbMTY5LDE2OSwxNjld
LGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2toYWtpOlsxODksMTgzLDEwN10sZGFya21hZ2VudGE6
WzEzOSwwLDEzOV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0N10sZGFya29yYW5nZTpbMjU1LDE0
MCwwXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0XSxkYXJrcmVkOlsxMzksMCwwXSxkYXJrc2FsbW9u
OlsyMzMsMTUwLDEyMl0sZGFya3Zpb2xldDpbMTQ4LDAsMjExXSxmdWNoc2lhOlsyNTUsMCwyNTVd
LGdvbGQ6WzI1NSwyMTUsMF0sZ3JlZW46WzAsMTI4LDBdLGluZGlnbzpbNzUsMCwxMzBdLGtoYWtp
OlsyNDAsMjMwLDE0MF0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjeWFuOlsyMjQsMjU1
LDI1NV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxp
Z2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNF0sbGltZTpbMCwy
NTUsMF0sbWFnZW50YTpbMjU1LDAsMjU1XSxtYXJvb246WzEyOCwwLDBdLG5hdnk6WzAsMCwxMjhd
LG9saXZlOlsxMjgsMTI4LDBdLG9yYW5nZTpbMjU1LDE2NSwwXSxwaW5rOlsyNTUsMTkyLDIwM10s
cHVycGxlOlsxMjgsMCwxMjhdLHZpb2xldDpbMTI4LDAsMTI4XSxyZWQ6WzI1NSwwLDBdLHNpbHZl
cjpbMTkyLDE5MiwxOTJdLHdoaXRlOlsyNTUsMjU1LDI1NV0seWVsbG93OlsyNTUsMjU1LDBdfX0p
KGpRdWVyeSk7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYXYsYWksSixhZil7dmFyIFE9W10sTz17
Y29sb3JzOlsiI2VkYzI0MCIsIiNhZmQ4ZjgiLCIjY2I0YjRiIiwiIzRkYTc0ZCIsIiM5NDQwZWQi
XSxsZWdlbmQ6e3Nob3c6dHJ1ZSxub0NvbHVtbnM6MSxsYWJlbEZvcm1hdHRlcjpudWxsLGxhYmVs
Qm94Qm9yZGVyQ29sb3I6IiNjY2MiLGNvbnRhaW5lcjpudWxsLHBvc2l0aW9uOiJuZSIsbWFyZ2lu
OjUsYmFja2dyb3VuZENvbG9yOm51bGwsYmFja2dyb3VuZE9wYWNpdHk6MC44NX0seGF4aXM6e3No
b3c6bnVsbCxwb3NpdGlvbjoiYm90dG9tIixtb2RlOm51bGwsY29sb3I6bnVsbCx0aWNrQ29sb3I6
bnVsbCx0cmFuc2Zvcm06bnVsbCxpbnZlcnNlVHJhbnNmb3JtOm51bGwsbWluOm51bGwsbWF4Om51
bGwsYXV0b3NjYWxlTWFyZ2luOm51bGwsdGlja3M6bnVsbCx0aWNrRm9ybWF0dGVyOm51bGwsbGFi
ZWxXaWR0aDpudWxsLGxhYmVsSGVpZ2h0Om51bGwscmVzZXJ2ZVNwYWNlOm51bGwsdGlja0xlbmd0
aDpudWxsLGFsaWduVGlja3NXaXRoQXhpczpudWxsLHRpY2tEZWNpbWFsczpudWxsLHRpY2tTaXpl
Om51bGwsbWluVGlja1NpemU6bnVsbCxtb250aE5hbWVzOm51bGwsdGltZWZvcm1hdDpudWxsLHR3
ZWx2ZUhvdXJDbG9jazpmYWxzZX0seWF4aXM6e2F1dG9zY2FsZU1hcmdpbjowLjAyLHBvc2l0aW9u
OiJsZWZ0In0seGF4ZXM6W10seWF4ZXM6W10sc2VyaWVzOntwb2ludHM6e3Nob3c6ZmFsc2UscmFk
aXVzOjMsbGluZVdpZHRoOjIsZmlsbDp0cnVlLGZpbGxDb2xvcjoiI2ZmZmZmZiIsc3ltYm9sOiJj
aXJjbGUifSxsaW5lczp7bGluZVdpZHRoOjIsZmlsbDpmYWxzZSxmaWxsQ29sb3I6bnVsbCxzdGVw
czpmYWxzZX0sYmFyczp7c2hvdzpmYWxzZSxsaW5lV2lkdGg6MixiYXJXaWR0aDoxLGZpbGw6dHJ1
ZSxmaWxsQ29sb3I6bnVsbCxhbGlnbjoibGVmdCIsaG9yaXpvbnRhbDpmYWxzZX0sc2hhZG93U2l6
ZTozfSxncmlkOntzaG93OnRydWUsYWJvdmVEYXRhOmZhbHNlLGNvbG9yOiIjNTQ1NDU0IixiYWNr
Z3JvdW5kQ29sb3I6bnVsbCxib3JkZXJDb2xvcjpudWxsLHRpY2tDb2xvcjpudWxsLGxhYmVsTWFy
Z2luOjUsYXhpc01hcmdpbjo4LGJvcmRlcldpZHRoOjIsbWluQm9yZGVyTWFyZ2luOm51bGwsbWFy
a2luZ3M6bnVsbCxtYXJraW5nc0NvbG9yOiIjZjRmNGY0IixtYXJraW5nc0xpbmVXaWR0aDoyLGNs
aWNrYWJsZTpmYWxzZSxob3ZlcmFibGU6ZmFsc2UsYXV0b0hpZ2hsaWdodDp0cnVlLG1vdXNlQWN0
aXZlUmFkaXVzOjEwfSxob29rczp7fX0sYXo9bnVsbCxhZD1udWxsLHk9bnVsbCxIPW51bGwsQT1u
dWxsLHA9W10sYXc9W10scT17bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LEc9MCxJPTAs
aD0wLHc9MCxhaz17cHJvY2Vzc09wdGlvbnM6W10scHJvY2Vzc1Jhd0RhdGE6W10scHJvY2Vzc0Rh
dGFwb2ludHM6W10sZHJhd1NlcmllczpbXSxkcmF3OltdLGJpbmRFdmVudHM6W10sZHJhd092ZXJs
YXk6W10sc2h1dGRvd246W119LGFxPXRoaXM7YXEuc2V0RGF0YT1hajthcS5zZXR1cEdyaWQ9dDth
cS5kcmF3PVc7YXEuZ2V0UGxhY2Vob2xkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYXZ9O2FxLmdldENh
bnZhcz1mdW5jdGlvbigpe3JldHVybiBhen07YXEuZ2V0UGxvdE9mZnNldD1mdW5jdGlvbigpe3Jl
dHVybiBxfTthcS53aWR0aD1mdW5jdGlvbigpe3JldHVybiBofTthcS5oZWlnaHQ9ZnVuY3Rpb24o
KXtyZXR1cm4gd307YXEub2Zmc2V0PWZ1bmN0aW9uKCl7dmFyIGFCPXkub2Zmc2V0KCk7YUIubGVm
dCs9cS5sZWZ0O2FCLnRvcCs9cS50b3A7cmV0dXJuIGFCfTthcS5nZXREYXRhPWZ1bmN0aW9uKCl7
cmV0dXJuIFF9O2FxLmdldEF4ZXM9ZnVuY3Rpb24oKXt2YXIgYUM9e30sYUI7Yy5lYWNoKHAuY29u
Y2F0KGF3KSxmdW5jdGlvbihhRCxhRSl7aWYoYUUpe2FDW2FFLmRpcmVjdGlvbisoYUUubiE9MT9h
RS5uOiIiKSsiYXhpcyJdPWFFfX0pO3JldHVybiBhQ307YXEuZ2V0WEF4ZXM9ZnVuY3Rpb24oKXty
ZXR1cm4gcH07YXEuZ2V0WUF4ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYXd9O2FxLmMycD1DO2FxLnAy
Yz1hcjthcS5nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIE99O2FxLmhpZ2hsaWdodD14O2Fx
LnVuaGlnaGxpZ2h0PVQ7YXEudHJpZ2dlclJlZHJhd092ZXJsYXk9ZjthcS5wb2ludE9mZnNldD1m
dW5jdGlvbihhQil7cmV0dXJue2xlZnQ6cGFyc2VJbnQocFthQShhQiwieCIpLTFdLnAyYygrYUIu
eCkrcS5sZWZ0KSx0b3A6cGFyc2VJbnQoYXdbYUEoYUIsInkiKS0xXS5wMmMoK2FCLnkpK3EudG9w
KX19O2FxLnNodXRkb3duPWFnO2FxLnJlc2l6ZT1mdW5jdGlvbigpe0IoKTtnKGF6KTtnKGFkKX07
YXEuaG9va3M9YWs7RihhcSk7WihKKTtYKCk7YWooYWkpO3QoKTtXKCk7YWgoKTtmdW5jdGlvbiBh
bihhRCxhQil7YUI9W2FxXS5jb25jYXQoYUIpO2Zvcih2YXIgYUM9MDthQzxhRC5sZW5ndGg7Kyth
Qyl7YURbYUNdLmFwcGx5KHRoaXMsYUIpfX1mdW5jdGlvbiBGKCl7Zm9yKHZhciBhQj0wO2FCPGFm
Lmxlbmd0aDsrK2FCKXt2YXIgYUM9YWZbYUJdO2FDLmluaXQoYXEpO2lmKGFDLm9wdGlvbnMpe2Mu
ZXh0ZW5kKHRydWUsTyxhQy5vcHRpb25zKX19fWZ1bmN0aW9uIFooYUMpe3ZhciBhQjtjLmV4dGVu
ZCh0cnVlLE8sYUMpO2lmKE8ueGF4aXMuY29sb3I9PW51bGwpe08ueGF4aXMuY29sb3I9Ty5ncmlk
LmNvbG9yfWlmKE8ueWF4aXMuY29sb3I9PW51bGwpe08ueWF4aXMuY29sb3I9Ty5ncmlkLmNvbG9y
fWlmKE8ueGF4aXMudGlja0NvbG9yPT1udWxsKXtPLnhheGlzLnRpY2tDb2xvcj1PLmdyaWQudGlj
a0NvbG9yfWlmKE8ueWF4aXMudGlja0NvbG9yPT1udWxsKXtPLnlheGlzLnRpY2tDb2xvcj1PLmdy
aWQudGlja0NvbG9yfWlmKE8uZ3JpZC5ib3JkZXJDb2xvcj09bnVsbCl7Ty5ncmlkLmJvcmRlckNv
bG9yPU8uZ3JpZC5jb2xvcn1pZihPLmdyaWQudGlja0NvbG9yPT1udWxsKXtPLmdyaWQudGlja0Nv
bG9yPWMuY29sb3IucGFyc2UoTy5ncmlkLmNvbG9yKS5zY2FsZSgiYSIsMC4yMikudG9TdHJpbmco
KX1mb3IoYUI9MDthQjxNYXRoLm1heCgxLE8ueGF4ZXMubGVuZ3RoKTsrK2FCKXtPLnhheGVzW2FC
XT1jLmV4dGVuZCh0cnVlLHt9LE8ueGF4aXMsTy54YXhlc1thQl0pfWZvcihhQj0wO2FCPE1hdGgu
bWF4KDEsTy55YXhlcy5sZW5ndGgpOysrYUIpe08ueWF4ZXNbYUJdPWMuZXh0ZW5kKHRydWUse30s
Ty55YXhpcyxPLnlheGVzW2FCXSl9aWYoTy54YXhpcy5ub1RpY2tzJiZPLnhheGlzLnRpY2tzPT1u
dWxsKXtPLnhheGlzLnRpY2tzPU8ueGF4aXMubm9UaWNrc31pZihPLnlheGlzLm5vVGlja3MmJk8u
eWF4aXMudGlja3M9PW51bGwpe08ueWF4aXMudGlja3M9Ty55YXhpcy5ub1RpY2tzfWlmKE8ueDJh
eGlzKXtPLnhheGVzWzFdPWMuZXh0ZW5kKHRydWUse30sTy54YXhpcyxPLngyYXhpcyk7Ty54YXhl
c1sxXS5wb3NpdGlvbj0idG9wIn1pZihPLnkyYXhpcyl7Ty55YXhlc1sxXT1jLmV4dGVuZCh0cnVl
LHt9LE8ueWF4aXMsTy55MmF4aXMpO08ueWF4ZXNbMV0ucG9zaXRpb249InJpZ2h0In1pZihPLmdy
aWQuY29sb3JlZEFyZWFzKXtPLmdyaWQubWFya2luZ3M9Ty5ncmlkLmNvbG9yZWRBcmVhc31pZihP
LmdyaWQuY29sb3JlZEFyZWFzQ29sb3Ipe08uZ3JpZC5tYXJraW5nc0NvbG9yPU8uZ3JpZC5jb2xv
cmVkQXJlYXNDb2xvcn1pZihPLmxpbmVzKXtjLmV4dGVuZCh0cnVlLE8uc2VyaWVzLmxpbmVzLE8u
bGluZXMpfWlmKE8ucG9pbnRzKXtjLmV4dGVuZCh0cnVlLE8uc2VyaWVzLnBvaW50cyxPLnBvaW50
cyl9aWYoTy5iYXJzKXtjLmV4dGVuZCh0cnVlLE8uc2VyaWVzLmJhcnMsTy5iYXJzKX1pZihPLnNo
YWRvd1NpemUhPW51bGwpe08uc2VyaWVzLnNoYWRvd1NpemU9Ty5zaGFkb3dTaXplfWZvcihhQj0w
O2FCPE8ueGF4ZXMubGVuZ3RoOysrYUIpe1YocCxhQisxKS5vcHRpb25zPU8ueGF4ZXNbYUJdfWZv
cihhQj0wO2FCPE8ueWF4ZXMubGVuZ3RoOysrYUIpe1YoYXcsYUIrMSkub3B0aW9ucz1PLnlheGVz
W2FCXX1mb3IodmFyIGFEIGluIGFrKXtpZihPLmhvb2tzW2FEXSYmTy5ob29rc1thRF0ubGVuZ3Ro
KXtha1thRF09YWtbYURdLmNvbmNhdChPLmhvb2tzW2FEXSl9fWFuKGFrLnByb2Nlc3NPcHRpb25z
LFtPXSl9ZnVuY3Rpb24gYWooYUIpe1E9WShhQik7YXgoKTt6KCl9ZnVuY3Rpb24gWShhRSl7dmFy
IGFDPVtdO2Zvcih2YXIgYUI9MDthQjxhRS5sZW5ndGg7KythQil7dmFyIGFEPWMuZXh0ZW5kKHRy
dWUse30sTy5zZXJpZXMpO2lmKGFFW2FCXS5kYXRhIT1udWxsKXthRC5kYXRhPWFFW2FCXS5kYXRh
O2RlbGV0ZSBhRVthQl0uZGF0YTtjLmV4dGVuZCh0cnVlLGFELGFFW2FCXSk7YUVbYUJdLmRhdGE9
YUQuZGF0YX1lbHNle2FELmRhdGE9YUVbYUJdfWFDLnB1c2goYUQpfXJldHVybiBhQ31mdW5jdGlv
biBhQShhQyxhRCl7dmFyIGFCPWFDW2FEKyJheGlzIl07aWYodHlwZW9mIGFCPT0ib2JqZWN0Iil7
YUI9YUIubn1pZih0eXBlb2YgYUIhPSJudW1iZXIiKXthQj0xfXJldHVybiBhQn1mdW5jdGlvbiBt
KCl7cmV0dXJuIGMuZ3JlcChwLmNvbmNhdChhdyksZnVuY3Rpb24oYUIpe3JldHVybiBhQn0pfWZ1
bmN0aW9uIEMoYUUpe3ZhciBhQz17fSxhQixhRDtmb3IoYUI9MDthQjxwLmxlbmd0aDsrK2FCKXth
RD1wW2FCXTtpZihhRCYmYUQudXNlZCl7YUNbIngiK2FELm5dPWFELmMycChhRS5sZWZ0KX19Zm9y
KGFCPTA7YUI8YXcubGVuZ3RoOysrYUIpe2FEPWF3W2FCXTtpZihhRCYmYUQudXNlZCl7YUNbInki
K2FELm5dPWFELmMycChhRS50b3ApfX1pZihhQy54MSE9PXVuZGVmaW5lZCl7YUMueD1hQy54MX1p
ZihhQy55MSE9PXVuZGVmaW5lZCl7YUMueT1hQy55MX1yZXR1cm4gYUN9ZnVuY3Rpb24gYXIoYUYp
e3ZhciBhRD17fSxhQyxhRSxhQjtmb3IoYUM9MDthQzxwLmxlbmd0aDsrK2FDKXthRT1wW2FDXTtp
ZihhRSYmYUUudXNlZCl7YUI9IngiK2FFLm47aWYoYUZbYUJdPT1udWxsJiZhRS5uPT0xKXthQj0i
eCJ9aWYoYUZbYUJdIT1udWxsKXthRC5sZWZ0PWFFLnAyYyhhRlthQl0pO2JyZWFrfX19Zm9yKGFD
PTA7YUM8YXcubGVuZ3RoOysrYUMpe2FFPWF3W2FDXTtpZihhRSYmYUUudXNlZCl7YUI9InkiK2FF
Lm47aWYoYUZbYUJdPT1udWxsJiZhRS5uPT0xKXthQj0ieSJ9aWYoYUZbYUJdIT1udWxsKXthRC50
b3A9YUUucDJjKGFGW2FCXSk7YnJlYWt9fX1yZXR1cm4gYUR9ZnVuY3Rpb24gVihhQyxhQil7aWYo
IWFDW2FCLTFdKXthQ1thQi0xXT17bjphQixkaXJlY3Rpb246YUM9PXA/IngiOiJ5IixvcHRpb25z
OmMuZXh0ZW5kKHRydWUse30sYUM9PXA/Ty54YXhpczpPLnlheGlzKX19cmV0dXJuIGFDW2FCLTFd
fWZ1bmN0aW9uIGF4KCl7dmFyIGFHO3ZhciBhTT1RLmxlbmd0aCxhQj1bXSxhRT1bXTtmb3IoYUc9
MDthRzxRLmxlbmd0aDsrK2FHKXt2YXIgYUo9UVthR10uY29sb3I7aWYoYUohPW51bGwpey0tYU07
aWYodHlwZW9mIGFKPT0ibnVtYmVyIil7YUUucHVzaChhSil9ZWxzZXthQi5wdXNoKGMuY29sb3Iu
cGFyc2UoUVthR10uY29sb3IpKX19fWZvcihhRz0wO2FHPGFFLmxlbmd0aDsrK2FHKXthTT1NYXRo
Lm1heChhTSxhRVthR10rMSl9dmFyIGFDPVtdLGFGPTA7YUc9MDt3aGlsZShhQy5sZW5ndGg8YU0p
e3ZhciBhSTtpZihPLmNvbG9ycy5sZW5ndGg9PWFHKXthST1jLmNvbG9yLm1ha2UoMTAwLDEwMCwx
MDApfWVsc2V7YUk9Yy5jb2xvci5wYXJzZShPLmNvbG9yc1thR10pfXZhciBhRD1hRiUyPT0xPy0x
OjE7YUkuc2NhbGUoInJnYiIsMSthRCpNYXRoLmNlaWwoYUYvMikqMC4yKTthQy5wdXNoKGFJKTsr
K2FHO2lmKGFHPj1PLmNvbG9ycy5sZW5ndGgpe2FHPTA7KythRn19dmFyIGFIPTAsYU47Zm9yKGFH
PTA7YUc8US5sZW5ndGg7KythRyl7YU49UVthR107aWYoYU4uY29sb3I9PW51bGwpe2FOLmNvbG9y
PWFDW2FIXS50b1N0cmluZygpOysrYUh9ZWxzZXtpZih0eXBlb2YgYU4uY29sb3I9PSJudW1iZXIi
KXthTi5jb2xvcj1hQ1thTi5jb2xvcl0udG9TdHJpbmcoKX19aWYoYU4ubGluZXMuc2hvdz09bnVs
bCl7dmFyIGFMLGFLPXRydWU7Zm9yKGFMIGluIGFOKXtpZihhTlthTF0mJmFOW2FMXS5zaG93KXth
Sz1mYWxzZTticmVha319aWYoYUspe2FOLmxpbmVzLnNob3c9dHJ1ZX19YU4ueGF4aXM9VihwLGFB
KGFOLCJ4IikpO2FOLnlheGlzPVYoYXcsYUEoYU4sInkiKSl9fWZ1bmN0aW9uIHooKXt2YXIgYU89
TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGFJPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxhQj1O
dW1iZXIuTUFYX1ZBTFVFLGFVLGFTLGFSLGFOLGFELGFKLGFULGFQLGFILGFHLGFDLGEwLGFYLGFM
O2Z1bmN0aW9uIGFGKGEzLGEyLGExKXtpZihhMjxhMy5kYXRhbWluJiZhMiE9LWFCKXthMy5kYXRh
bWluPWEyfWlmKGExPmEzLmRhdGFtYXgmJmExIT1hQil7YTMuZGF0YW1heD1hMX19Yy5lYWNoKG0o
KSxmdW5jdGlvbihhMSxhMil7YTIuZGF0YW1pbj1hTzthMi5kYXRhbWF4PWFJO2EyLnVzZWQ9ZmFs
c2V9KTtmb3IoYVU9MDthVTxRLmxlbmd0aDsrK2FVKXthSj1RW2FVXTthSi5kYXRhcG9pbnRzPXtw
b2ludHM6W119O2FuKGFrLnByb2Nlc3NSYXdEYXRhLFthSixhSi5kYXRhLGFKLmRhdGFwb2ludHNd
KX1mb3IoYVU9MDthVTxRLmxlbmd0aDsrK2FVKXthSj1RW2FVXTt2YXIgYVo9YUouZGF0YSxhVz1h
Si5kYXRhcG9pbnRzLmZvcm1hdDtpZighYVcpe2FXPVtdO2FXLnB1c2goe3g6dHJ1ZSxudW1iZXI6
dHJ1ZSxyZXF1aXJlZDp0cnVlfSk7YVcucHVzaCh7eTp0cnVlLG51bWJlcjp0cnVlLHJlcXVpcmVk
OnRydWV9KTtpZihhSi5iYXJzLnNob3d8fChhSi5saW5lcy5zaG93JiZhSi5saW5lcy5maWxsKSl7
YVcucHVzaCh7eTp0cnVlLG51bWJlcjp0cnVlLHJlcXVpcmVkOmZhbHNlLGRlZmF1bHRWYWx1ZTow
fSk7aWYoYUouYmFycy5ob3Jpem9udGFsKXtkZWxldGUgYVdbYVcubGVuZ3RoLTFdLnk7YVdbYVcu
bGVuZ3RoLTFdLng9dHJ1ZX19YUouZGF0YXBvaW50cy5mb3JtYXQ9YVd9aWYoYUouZGF0YXBvaW50
cy5wb2ludHNpemUhPW51bGwpe2NvbnRpbnVlfWFKLmRhdGFwb2ludHMucG9pbnRzaXplPWFXLmxl
bmd0aDthUD1hSi5kYXRhcG9pbnRzLnBvaW50c2l6ZTthVD1hSi5kYXRhcG9pbnRzLnBvaW50cztp
bnNlcnRTdGVwcz1hSi5saW5lcy5zaG93JiZhSi5saW5lcy5zdGVwczthSi54YXhpcy51c2VkPWFK
LnlheGlzLnVzZWQ9dHJ1ZTtmb3IoYVM9YVI9MDthUzxhWi5sZW5ndGg7KythUyxhUis9YVApe2FM
PWFaW2FTXTt2YXIgYUU9YUw9PW51bGw7aWYoIWFFKXtmb3IoYU49MDthTjxhUDsrK2FOKXthMD1h
TFthTl07YVg9YVdbYU5dO2lmKGFYKXtpZihhWC5udW1iZXImJmEwIT1udWxsKXthMD0rYTA7aWYo
aXNOYU4oYTApKXthMD1udWxsfWVsc2V7aWYoYTA9PUluZmluaXR5KXthMD1hQn1lbHNle2lmKGEw
PT0tSW5maW5pdHkpe2EwPS1hQn19fX1pZihhMD09bnVsbCl7aWYoYVgucmVxdWlyZWQpe2FFPXRy
dWV9aWYoYVguZGVmYXVsdFZhbHVlIT1udWxsKXthMD1hWC5kZWZhdWx0VmFsdWV9fX1hVFthUith
Tl09YTB9fWlmKGFFKXtmb3IoYU49MDthTjxhUDsrK2FOKXthMD1hVFthUithTl07aWYoYTAhPW51
bGwpe2FYPWFXW2FOXTtpZihhWC54KXthRihhSi54YXhpcyxhMCxhMCl9aWYoYVgueSl7YUYoYUou
eWF4aXMsYTAsYTApfX1hVFthUithTl09bnVsbH19ZWxzZXtpZihpbnNlcnRTdGVwcyYmYVI+MCYm
YVRbYVItYVBdIT1udWxsJiZhVFthUi1hUF0hPWFUW2FSXSYmYVRbYVItYVArMV0hPWFUW2FSKzFd
KXtmb3IoYU49MDthTjxhUDsrK2FOKXthVFthUithUCthTl09YVRbYVIrYU5dfWFUW2FSKzFdPWFU
W2FSLWFQKzFdO2FSKz1hUH19fX1mb3IoYVU9MDthVTxRLmxlbmd0aDsrK2FVKXthSj1RW2FVXTth
bihhay5wcm9jZXNzRGF0YXBvaW50cyxbYUosYUouZGF0YXBvaW50c10pfWZvcihhVT0wO2FVPFEu
bGVuZ3RoOysrYVUpe2FKPVFbYVVdO2FUPWFKLmRhdGFwb2ludHMucG9pbnRzLGFQPWFKLmRhdGFw
b2ludHMucG9pbnRzaXplO3ZhciBhSz1hTyxhUT1hTyxhTT1hSSxhVj1hSTtmb3IoYVM9MDthUzxh
VC5sZW5ndGg7YVMrPWFQKXtpZihhVFthU109PW51bGwpe2NvbnRpbnVlfWZvcihhTj0wO2FOPGFQ
OysrYU4pe2EwPWFUW2FTK2FOXTthWD1hV1thTl07aWYoIWFYfHxhMD09YUJ8fGEwPT0tYUIpe2Nv
bnRpbnVlfWlmKGFYLngpe2lmKGEwPGFLKXthSz1hMH1pZihhMD5hTSl7YU09YTB9fWlmKGFYLnkp
e2lmKGEwPGFRKXthUT1hMH1pZihhMD5hVil7YVY9YTB9fX19aWYoYUouYmFycy5zaG93KXt2YXIg
YVk9YUouYmFycy5hbGlnbj09ImxlZnQiPzA6LWFKLmJhcnMuYmFyV2lkdGgvMjtpZihhSi5iYXJz
Lmhvcml6b250YWwpe2FRKz1hWTthVis9YVkrYUouYmFycy5iYXJXaWR0aH1lbHNle2FLKz1hWTth
TSs9YVkrYUouYmFycy5iYXJXaWR0aH19YUYoYUoueGF4aXMsYUssYU0pO2FGKGFKLnlheGlzLGFR
LGFWKX1jLmVhY2gobSgpLGZ1bmN0aW9uKGExLGEyKXtpZihhMi5kYXRhbWluPT1hTyl7YTIuZGF0
YW1pbj1udWxsfWlmKGEyLmRhdGFtYXg9PWFJKXthMi5kYXRhbWF4PW51bGx9fSl9ZnVuY3Rpb24g
aihhQixhQyl7dmFyIGFEPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2FELmNsYXNz
TmFtZT1hQzthRC53aWR0aD1HO2FELmhlaWdodD1JO2lmKCFhQil7YyhhRCkuY3NzKHtwb3NpdGlv
bjoiYWJzb2x1dGUiLGxlZnQ6MCx0b3A6MH0pfWMoYUQpLmFwcGVuZFRvKGF2KTtpZighYUQuZ2V0
Q29udGV4dCl7YUQ9d2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci5pbml0RWxlbWVudChhRCl9YUQu
Z2V0Q29udGV4dCgiMmQiKS5zYXZlKCk7cmV0dXJuIGFEfWZ1bmN0aW9uIEIoKXtHPWF2LndpZHRo
KCk7ST1hdi5oZWlnaHQoKTtpZihHPD0wfHxJPD0wKXt0aHJvdyJJbnZhbGlkIGRpbWVuc2lvbnMg
Zm9yIHBsb3QsIHdpZHRoID0gIitHKyIsIGhlaWdodCA9ICIrSX19ZnVuY3Rpb24gZyhhQyl7aWYo
YUMud2lkdGghPUcpe2FDLndpZHRoPUd9aWYoYUMuaGVpZ2h0IT1JKXthQy5oZWlnaHQ9SX12YXIg
YUI9YUMuZ2V0Q29udGV4dCgiMmQiKTthQi5yZXN0b3JlKCk7YUIuc2F2ZSgpfWZ1bmN0aW9uIFgo
KXt2YXIgYUMsYUI9YXYuY2hpbGRyZW4oImNhbnZhcy5iYXNlIiksYUQ9YXYuY2hpbGRyZW4oImNh
bnZhcy5vdmVybGF5Iik7aWYoYUIubGVuZ3RoPT0wfHxhRD09MCl7YXYuaHRtbCgiIik7YXYuY3Nz
KHtwYWRkaW5nOjB9KTtpZihhdi5jc3MoInBvc2l0aW9uIik9PSJzdGF0aWMiKXthdi5jc3MoInBv
c2l0aW9uIiwicmVsYXRpdmUiKX1CKCk7YXo9aih0cnVlLCJiYXNlIik7YWQ9aihmYWxzZSwib3Zl
cmxheSIpO2FDPWZhbHNlfWVsc2V7YXo9YUIuZ2V0KDApO2FkPWFELmdldCgwKTthQz10cnVlfUg9
YXouZ2V0Q29udGV4dCgiMmQiKTtBPWFkLmdldENvbnRleHQoIjJkIik7eT1jKFthZCxhel0pO2lm
KGFDKXthdi5kYXRhKCJwbG90Iikuc2h1dGRvd24oKTthcS5yZXNpemUoKTtBLmNsZWFyUmVjdCgw
LDAsRyxJKTt5LnVuYmluZCgpO2F2LmNoaWxkcmVuKCkubm90KFtheixhZF0pLnJlbW92ZSgpfWF2
LmRhdGEoInBsb3QiLGFxKX1mdW5jdGlvbiBhaCgpe2lmKE8uZ3JpZC5ob3ZlcmFibGUpe3kubW91
c2Vtb3ZlKGFhKTt5Lm1vdXNlbGVhdmUobCl9aWYoTy5ncmlkLmNsaWNrYWJsZSl7eS5jbGljayhS
KX1hbihhay5iaW5kRXZlbnRzLFt5XSl9ZnVuY3Rpb24gYWcoKXtpZihNKXtjbGVhclRpbWVvdXQo
TSl9eS51bmJpbmQoIm1vdXNlbW92ZSIsYWEpO3kudW5iaW5kKCJtb3VzZWxlYXZlIixsKTt5LnVu
YmluZCgiY2xpY2siLFIpO2FuKGFrLnNodXRkb3duLFt5XSl9ZnVuY3Rpb24gcihhRyl7ZnVuY3Rp
b24gYUMoYUgpe3JldHVybiBhSH12YXIgYUYsYUIsYUQ9YUcub3B0aW9ucy50cmFuc2Zvcm18fGFD
LGFFPWFHLm9wdGlvbnMuaW52ZXJzZVRyYW5zZm9ybTtpZihhRy5kaXJlY3Rpb249PSJ4Iil7YUY9
YUcuc2NhbGU9aC9NYXRoLmFicyhhRChhRy5tYXgpLWFEKGFHLm1pbikpO2FCPU1hdGgubWluKGFE
KGFHLm1heCksYUQoYUcubWluKSl9ZWxzZXthRj1hRy5zY2FsZT13L01hdGguYWJzKGFEKGFHLm1h
eCktYUQoYUcubWluKSk7YUY9LWFGO2FCPU1hdGgubWF4KGFEKGFHLm1heCksYUQoYUcubWluKSl9
aWYoYUQ9PWFDKXthRy5wMmM9ZnVuY3Rpb24oYUgpe3JldHVybihhSC1hQikqYUZ9fWVsc2V7YUcu
cDJjPWZ1bmN0aW9uKGFIKXtyZXR1cm4oYUQoYUgpLWFCKSphRn19aWYoIWFFKXthRy5jMnA9ZnVu
Y3Rpb24oYUgpe3JldHVybiBhQithSC9hRn19ZWxzZXthRy5jMnA9ZnVuY3Rpb24oYUgpe3JldHVy
biBhRShhQithSC9hRil9fX1mdW5jdGlvbiBMKGFEKXt2YXIgYUI9YUQub3B0aW9ucyxhRixhSj1h
RC50aWNrc3x8W10sYUk9W10sYUUsYUs9YUIubGFiZWxXaWR0aCxhRz1hQi5sYWJlbEhlaWdodCxh
QztmdW5jdGlvbiBhSChhTSxhTCl7cmV0dXJuIGMoJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29s
dXRlO3RvcDotMTAwMDBweDsnK2FMKydmb250LXNpemU6c21hbGxlciI+PGRpdiBjbGFzcz0iJyth
RC5kaXJlY3Rpb24rIkF4aXMgIithRC5kaXJlY3Rpb24rYUQubisnQXhpcyI+JythTS5qb2luKCIi
KSsiPC9kaXY+PC9kaXY+IikuYXBwZW5kVG8oYXYpfWlmKGFELmRpcmVjdGlvbj09IngiKXtpZihh
Sz09bnVsbCl7YUs9TWF0aC5mbG9vcihHLyhhSi5sZW5ndGg+MD9hSi5sZW5ndGg6MSkpfWlmKGFH
PT1udWxsKXthST1bXTtmb3IoYUY9MDthRjxhSi5sZW5ndGg7KythRil7YUU9YUpbYUZdLmxhYmVs
O2lmKGFFKXthSS5wdXNoKCc8ZGl2IGNsYXNzPSJ0aWNrTGFiZWwiIHN0eWxlPSJmbG9hdDpsZWZ0
O3dpZHRoOicrYUsrJ3B4Ij4nK2FFKyI8L2Rpdj4iKX19aWYoYUkubGVuZ3RoPjApe2FJLnB1c2go
JzxkaXYgc3R5bGU9ImNsZWFyOmxlZnQiPjwvZGl2PicpO2FDPWFIKGFJLCJ3aWR0aDoxMDAwMHB4
OyIpO2FHPWFDLmhlaWdodCgpO2FDLnJlbW92ZSgpfX19ZWxzZXtpZihhSz09bnVsbHx8YUc9PW51
bGwpe2ZvcihhRj0wO2FGPGFKLmxlbmd0aDsrK2FGKXthRT1hSlthRl0ubGFiZWw7aWYoYUUpe2FJ
LnB1c2goJzxkaXYgY2xhc3M9InRpY2tMYWJlbCI+JythRSsiPC9kaXY+Iil9fWlmKGFJLmxlbmd0
aD4wKXthQz1hSChhSSwiIik7aWYoYUs9PW51bGwpe2FLPWFDLmNoaWxkcmVuKCkud2lkdGgoKX1p
ZihhRz09bnVsbCl7YUc9YUMuZmluZCgiZGl2LnRpY2tMYWJlbCIpLmhlaWdodCgpfWFDLnJlbW92
ZSgpfX19aWYoYUs9PW51bGwpe2FLPTB9aWYoYUc9PW51bGwpe2FHPTB9YUQubGFiZWxXaWR0aD1h
SzthRC5sYWJlbEhlaWdodD1hR31mdW5jdGlvbiBhdShhRCl7dmFyIGFDPWFELmxhYmVsV2lkdGgs
YUw9YUQubGFiZWxIZWlnaHQsYUg9YUQub3B0aW9ucy5wb3NpdGlvbixhRj1hRC5vcHRpb25zLnRp
Y2tMZW5ndGgsYUc9Ty5ncmlkLmF4aXNNYXJnaW4sYUo9Ty5ncmlkLmxhYmVsTWFyZ2luLGFLPWFE
LmRpcmVjdGlvbj09IngiP3A6YXcsYUU7dmFyIGFCPWMuZ3JlcChhSyxmdW5jdGlvbihhTil7cmV0
dXJuIGFOJiZhTi5vcHRpb25zLnBvc2l0aW9uPT1hSCYmYU4ucmVzZXJ2ZVNwYWNlfSk7aWYoYy5p
bkFycmF5KGFELGFCKT09YUIubGVuZ3RoLTEpe2FHPTB9aWYoYUY9PW51bGwpe2FGPSJmdWxsIn12
YXIgYUk9Yy5ncmVwKGFLLGZ1bmN0aW9uKGFOKXtyZXR1cm4gYU4mJmFOLnJlc2VydmVTcGFjZX0p
O3ZhciBhTT1jLmluQXJyYXkoYUQsYUkpPT0wO2lmKCFhTSYmYUY9PSJmdWxsIil7YUY9NX1pZigh
aXNOYU4oK2FGKSl7YUorPSthRn1pZihhRC5kaXJlY3Rpb249PSJ4Iil7YUwrPWFKO2lmKGFIPT0i
Ym90dG9tIil7cS5ib3R0b20rPWFMK2FHO2FELmJveD17dG9wOkktcS5ib3R0b20saGVpZ2h0OmFM
fX1lbHNle2FELmJveD17dG9wOnEudG9wK2FHLGhlaWdodDphTH07cS50b3ArPWFMK2FHfX1lbHNl
e2FDKz1hSjtpZihhSD09ImxlZnQiKXthRC5ib3g9e2xlZnQ6cS5sZWZ0K2FHLHdpZHRoOmFDfTtx
LmxlZnQrPWFDK2FHfWVsc2V7cS5yaWdodCs9YUMrYUc7YUQuYm94PXtsZWZ0OkctcS5yaWdodCx3
aWR0aDphQ319fWFELnBvc2l0aW9uPWFIO2FELnRpY2tMZW5ndGg9YUY7YUQuYm94LnBhZGRpbmc9
YUo7YUQuaW5uZXJtb3N0PWFNfWZ1bmN0aW9uIFUoYUIpe2lmKGFCLmRpcmVjdGlvbj09IngiKXth
Qi5ib3gubGVmdD1xLmxlZnQ7YUIuYm94LndpZHRoPWh9ZWxzZXthQi5ib3gudG9wPXEudG9wO2FC
LmJveC5oZWlnaHQ9d319ZnVuY3Rpb24gdCgpe3ZhciBhQyxhRT1tKCk7Yy5lYWNoKGFFLGZ1bmN0
aW9uKGFGLGFHKXthRy5zaG93PWFHLm9wdGlvbnMuc2hvdztpZihhRy5zaG93PT1udWxsKXthRy5z
aG93PWFHLnVzZWR9YUcucmVzZXJ2ZVNwYWNlPWFHLnNob3d8fGFHLm9wdGlvbnMucmVzZXJ2ZVNw
YWNlO24oYUcpfSk7YWxsb2NhdGVkQXhlcz1jLmdyZXAoYUUsZnVuY3Rpb24oYUYpe3JldHVybiBh
Ri5yZXNlcnZlU3BhY2V9KTtxLmxlZnQ9cS5yaWdodD1xLnRvcD1xLmJvdHRvbT0wO2lmKE8uZ3Jp
ZC5zaG93KXtjLmVhY2goYWxsb2NhdGVkQXhlcyxmdW5jdGlvbihhRixhRyl7UyhhRyk7UChhRyk7
YXAoYUcsYUcudGlja3MpO0woYUcpfSk7Zm9yKGFDPWFsbG9jYXRlZEF4ZXMubGVuZ3RoLTE7YUM+
PTA7LS1hQyl7YXUoYWxsb2NhdGVkQXhlc1thQ10pfXZhciBhRD1PLmdyaWQubWluQm9yZGVyTWFy
Z2luO2lmKGFEPT1udWxsKXthRD0wO2ZvcihhQz0wO2FDPFEubGVuZ3RoOysrYUMpe2FEPU1hdGgu
bWF4KGFELFFbYUNdLnBvaW50cy5yYWRpdXMrUVthQ10ucG9pbnRzLmxpbmVXaWR0aC8yKX19Zm9y
KHZhciBhQiBpbiBxKXtxW2FCXSs9Ty5ncmlkLmJvcmRlcldpZHRoO3FbYUJdPU1hdGgubWF4KGFE
LHFbYUJdKX19aD1HLXEubGVmdC1xLnJpZ2h0O3c9SS1xLmJvdHRvbS1xLnRvcDtjLmVhY2goYUUs
ZnVuY3Rpb24oYUYsYUcpe3IoYUcpfSk7aWYoTy5ncmlkLnNob3cpe2MuZWFjaChhbGxvY2F0ZWRB
eGVzLGZ1bmN0aW9uKGFGLGFHKXtVKGFHKX0pO2soKX1vKCl9ZnVuY3Rpb24gbihhRSl7dmFyIGFG
PWFFLm9wdGlvbnMsYUQ9KyhhRi5taW4hPW51bGw/YUYubWluOmFFLmRhdGFtaW4pLGFCPSsoYUYu
bWF4IT1udWxsP2FGLm1heDphRS5kYXRhbWF4KSxhSD1hQi1hRDtpZihhSD09MCl7dmFyIGFDPWFC
PT0wPzE6MC4wMTtpZihhRi5taW49PW51bGwpe2FELT1hQ31pZihhRi5tYXg9PW51bGx8fGFGLm1p
biE9bnVsbCl7YUIrPWFDfX1lbHNle3ZhciBhRz1hRi5hdXRvc2NhbGVNYXJnaW47aWYoYUchPW51
bGwpe2lmKGFGLm1pbj09bnVsbCl7YUQtPWFIKmFHO2lmKGFEPDAmJmFFLmRhdGFtaW4hPW51bGwm
JmFFLmRhdGFtaW4+PTApe2FEPTB9fWlmKGFGLm1heD09bnVsbCl7YUIrPWFIKmFHO2lmKGFCPjAm
JmFFLmRhdGFtYXghPW51bGwmJmFFLmRhdGFtYXg8PTApe2FCPTB9fX19YUUubWluPWFEO2FFLm1h
eD1hQn1mdW5jdGlvbiBTKGFHKXt2YXIgYU09YUcub3B0aW9uczt2YXIgYUg7aWYodHlwZW9mIGFN
LnRpY2tzPT0ibnVtYmVyIiYmYU0udGlja3M+MCl7YUg9YU0udGlja3N9ZWxzZXthSD0wLjMqTWF0
aC5zcXJ0KGFHLmRpcmVjdGlvbj09IngiP0c6SSl9dmFyIGFUPShhRy5tYXgtYUcubWluKS9hSCxh
TyxhQixhTixhUixhUyxhUSxhSTtpZihhTS5tb2RlPT0idGltZSIpe3ZhciBhSj17c2Vjb25kOjEw
MDAsbWludXRlOjYwKjEwMDAsaG91cjo2MCo2MCoxMDAwLGRheToyNCo2MCo2MCoxMDAwLG1vbnRo
OjMwKjI0KjYwKjYwKjEwMDAseWVhcjozNjUuMjQyNSoyNCo2MCo2MCoxMDAwfTt2YXIgYUs9W1sx
LCJzZWNvbmQiXSxbMiwic2Vjb25kIl0sWzUsInNlY29uZCJdLFsxMCwic2Vjb25kIl0sWzMwLCJz
ZWNvbmQiXSxbMSwibWludXRlIl0sWzIsIm1pbnV0ZSJdLFs1LCJtaW51dGUiXSxbMTAsIm1pbnV0
ZSJdLFszMCwibWludXRlIl0sWzEsImhvdXIiXSxbMiwiaG91ciJdLFs0LCJob3VyIl0sWzgsImhv
dXIiXSxbMTIsImhvdXIiXSxbMSwiZGF5Il0sWzIsImRheSJdLFszLCJkYXkiXSxbMC4yNSwibW9u
dGgiXSxbMC41LCJtb250aCJdLFsxLCJtb250aCJdLFsyLCJtb250aCJdLFszLCJtb250aCJdLFs2
LCJtb250aCJdLFsxLCJ5ZWFyIl1dO3ZhciBhQz0wO2lmKGFNLm1pblRpY2tTaXplIT1udWxsKXtp
Zih0eXBlb2YgYU0udGlja1NpemU9PSJudW1iZXIiKXthQz1hTS50aWNrU2l6ZX1lbHNle2FDPWFN
Lm1pblRpY2tTaXplWzBdKmFKW2FNLm1pblRpY2tTaXplWzFdXX19Zm9yKHZhciBhUz0wO2FTPGFL
Lmxlbmd0aC0xOysrYVMpe2lmKGFUPChhS1thU11bMF0qYUpbYUtbYVNdWzFdXSthS1thUysxXVsw
XSphSlthS1thUysxXVsxXV0pLzImJmFLW2FTXVswXSphSlthS1thU11bMV1dPj1hQyl7YnJlYWt9
fWFPPWFLW2FTXVswXTthTj1hS1thU11bMV07aWYoYU49PSJ5ZWFyIil7YVE9TWF0aC5wb3coMTAs
TWF0aC5mbG9vcihNYXRoLmxvZyhhVC9hSi55ZWFyKS9NYXRoLkxOMTApKTthST0oYVQvYUoueWVh
cikvYVE7aWYoYUk8MS41KXthTz0xfWVsc2V7aWYoYUk8Myl7YU89Mn1lbHNle2lmKGFJPDcuNSl7
YU89NX1lbHNle2FPPTEwfX19YU8qPWFRfWFHLnRpY2tTaXplPWFNLnRpY2tTaXplfHxbYU8sYU5d
O2FCPWZ1bmN0aW9uKGFYKXt2YXIgYTI9W10sYTA9YVgudGlja1NpemVbMF0sYTM9YVgudGlja1Np
emVbMV0sYTE9bmV3IERhdGUoYVgubWluKTt2YXIgYVc9YTAqYUpbYTNdO2lmKGEzPT0ic2Vjb25k
Iil7YTEuc2V0VVRDU2Vjb25kcyhhKGExLmdldFVUQ1NlY29uZHMoKSxhMCkpfWlmKGEzPT0ibWlu
dXRlIil7YTEuc2V0VVRDTWludXRlcyhhKGExLmdldFVUQ01pbnV0ZXMoKSxhMCkpfWlmKGEzPT0i
aG91ciIpe2ExLnNldFVUQ0hvdXJzKGEoYTEuZ2V0VVRDSG91cnMoKSxhMCkpfWlmKGEzPT0ibW9u
dGgiKXthMS5zZXRVVENNb250aChhKGExLmdldFVUQ01vbnRoKCksYTApKX1pZihhMz09InllYXIi
KXthMS5zZXRVVENGdWxsWWVhcihhKGExLmdldFVUQ0Z1bGxZZWFyKCksYTApKX1hMS5zZXRVVENN
aWxsaXNlY29uZHMoMCk7aWYoYVc+PWFKLm1pbnV0ZSl7YTEuc2V0VVRDU2Vjb25kcygwKX1pZihh
Vz49YUouaG91cil7YTEuc2V0VVRDTWludXRlcygwKX1pZihhVz49YUouZGF5KXthMS5zZXRVVENI
b3VycygwKX1pZihhVz49YUouZGF5KjQpe2ExLnNldFVUQ0RhdGUoMSl9aWYoYVc+PWFKLnllYXIp
e2ExLnNldFVUQ01vbnRoKDApfXZhciBhNT0wLGE0PU51bWJlci5OYU4sYVk7ZG97YVk9YTQ7YTQ9
YTEuZ2V0VGltZSgpO2EyLnB1c2goYTQpO2lmKGEzPT0ibW9udGgiKXtpZihhMDwxKXthMS5zZXRV
VENEYXRlKDEpO3ZhciBhVj1hMS5nZXRUaW1lKCk7YTEuc2V0VVRDTW9udGgoYTEuZ2V0VVRDTW9u
dGgoKSsxKTt2YXIgYVo9YTEuZ2V0VGltZSgpO2ExLnNldFRpbWUoYTQrYTUqYUouaG91cisoYVot
YVYpKmEwKTthNT1hMS5nZXRVVENIb3VycygpO2ExLnNldFVUQ0hvdXJzKDApfWVsc2V7YTEuc2V0
VVRDTW9udGgoYTEuZ2V0VVRDTW9udGgoKSthMCl9fWVsc2V7aWYoYTM9PSJ5ZWFyIil7YTEuc2V0
VVRDRnVsbFllYXIoYTEuZ2V0VVRDRnVsbFllYXIoKSthMCl9ZWxzZXthMS5zZXRUaW1lKGE0K2FX
KX19fXdoaWxlKGE0PGFYLm1heCYmYTQhPWFZKTtyZXR1cm4gYTJ9O2FSPWZ1bmN0aW9uKGFWLGFZ
KXt2YXIgYTA9bmV3IERhdGUoYVYpO2lmKGFNLnRpbWVmb3JtYXQhPW51bGwpe3JldHVybiBjLnBs
b3QuZm9ybWF0RGF0ZShhMCxhTS50aW1lZm9ybWF0LGFNLm1vbnRoTmFtZXMpfXZhciBhVz1hWS50
aWNrU2l6ZVswXSphSlthWS50aWNrU2l6ZVsxXV07dmFyIGFYPWFZLm1heC1hWS5taW47dmFyIGFa
PShhTS50d2VsdmVIb3VyQ2xvY2spPyIgJXAiOiIiO2lmKGFXPGFKLm1pbnV0ZSl7Zm10PSIlaDol
TTolUyIrYVp9ZWxzZXtpZihhVzxhSi5kYXkpe2lmKGFYPDIqYUouZGF5KXtmbXQ9IiVoOiVNIith
Wn1lbHNle2ZtdD0iJWIgJWQgJWg6JU0iK2FafX1lbHNle2lmKGFXPGFKLm1vbnRoKXtmbXQ9IiVi
ICVkIn1lbHNle2lmKGFXPGFKLnllYXIpe2lmKGFYPGFKLnllYXIpe2ZtdD0iJWIifWVsc2V7Zm10
PSIlYiAleSJ9fWVsc2V7Zm10PSIleSJ9fX19cmV0dXJuIGMucGxvdC5mb3JtYXREYXRlKGEwLGZt
dCxhTS5tb250aE5hbWVzKX19ZWxzZXt2YXIgYVU9YU0udGlja0RlY2ltYWxzO3ZhciBhUD0tTWF0
aC5mbG9vcihNYXRoLmxvZyhhVCkvTWF0aC5MTjEwKTtpZihhVSE9bnVsbCYmYVA+YVUpe2FQPWFV
fWFRPU1hdGgucG93KDEwLC1hUCk7YUk9YVQvYVE7aWYoYUk8MS41KXthTz0xfWVsc2V7aWYoYUk8
Myl7YU89MjtpZihhST4yLjI1JiYoYVU9PW51bGx8fGFQKzE8PWFVKSl7YU89Mi41OysrYVB9fWVs
c2V7aWYoYUk8Ny41KXthTz01fWVsc2V7YU89MTB9fX1hTyo9YVE7aWYoYU0ubWluVGlja1NpemUh
PW51bGwmJmFPPGFNLm1pblRpY2tTaXplKXthTz1hTS5taW5UaWNrU2l6ZX1hRy50aWNrRGVjaW1h
bHM9TWF0aC5tYXgoMCxhVSE9bnVsbD9hVTphUCk7YUcudGlja1NpemU9YU0udGlja1NpemV8fGFP
O2FCPWZ1bmN0aW9uKGFYKXt2YXIgYVo9W107dmFyIGEwPWEoYVgubWluLGFYLnRpY2tTaXplKSxh
Vz0wLGFWPU51bWJlci5OYU4sYVk7ZG97YVk9YVY7YVY9YTArYVcqYVgudGlja1NpemU7YVoucHVz
aChhVik7KythV313aGlsZShhVjxhWC5tYXgmJmFWIT1hWSk7cmV0dXJuIGFafTthUj1mdW5jdGlv
bihhVixhVyl7cmV0dXJuIGFWLnRvRml4ZWQoYVcudGlja0RlY2ltYWxzKX19aWYoYU0uYWxpZ25U
aWNrc1dpdGhBeGlzIT1udWxsKXt2YXIgYUY9KGFHLmRpcmVjdGlvbj09IngiP3A6YXcpW2FNLmFs
aWduVGlja3NXaXRoQXhpcy0xXTtpZihhRiYmYUYudXNlZCYmYUYhPWFHKXt2YXIgYUw9YUIoYUcp
O2lmKGFMLmxlbmd0aD4wKXtpZihhTS5taW49PW51bGwpe2FHLm1pbj1NYXRoLm1pbihhRy5taW4s
YUxbMF0pfWlmKGFNLm1heD09bnVsbCYmYUwubGVuZ3RoPjEpe2FHLm1heD1NYXRoLm1heChhRy5t
YXgsYUxbYUwubGVuZ3RoLTFdKX19YUI9ZnVuY3Rpb24oYVgpe3ZhciBhWT1bXSxhVixhVztmb3Io
YVc9MDthVzxhRi50aWNrcy5sZW5ndGg7KythVyl7YVY9KGFGLnRpY2tzW2FXXS52LWFGLm1pbikv
KGFGLm1heC1hRi5taW4pO2FWPWFYLm1pbithViooYVgubWF4LWFYLm1pbik7YVkucHVzaChhVil9
cmV0dXJuIGFZfTtpZihhRy5tb2RlIT0idGltZSImJmFNLnRpY2tEZWNpbWFscz09bnVsbCl7dmFy
IGFFPU1hdGgubWF4KDAsLU1hdGguZmxvb3IoTWF0aC5sb2coYVQpL01hdGguTE4xMCkrMSksYUQ9
YUIoYUcpO2lmKCEoYUQubGVuZ3RoPjEmJi9cLi4qMCQvLnRlc3QoKGFEWzFdLWFEWzBdKS50b0Zp
eGVkKGFFKSkpKXthRy50aWNrRGVjaW1hbHM9YUV9fX19YUcudGlja0dlbmVyYXRvcj1hQjtpZihj
LmlzRnVuY3Rpb24oYU0udGlja0Zvcm1hdHRlcikpe2FHLnRpY2tGb3JtYXR0ZXI9ZnVuY3Rpb24o
YVYsYVcpe3JldHVybiIiK2FNLnRpY2tGb3JtYXR0ZXIoYVYsYVcpfX1lbHNle2FHLnRpY2tGb3Jt
YXR0ZXI9YVJ9fWZ1bmN0aW9uIFAoYUYpe3ZhciBhSD1hRi5vcHRpb25zLnRpY2tzLGFHPVtdO2lm
KGFIPT1udWxsfHwodHlwZW9mIGFIPT0ibnVtYmVyIiYmYUg+MCkpe2FHPWFGLnRpY2tHZW5lcmF0
b3IoYUYpfWVsc2V7aWYoYUgpe2lmKGMuaXNGdW5jdGlvbihhSCkpe2FHPWFIKHttaW46YUYubWlu
LG1heDphRi5tYXh9KX1lbHNle2FHPWFIfX19dmFyIGFFLGFCO2FGLnRpY2tzPVtdO2ZvcihhRT0w
O2FFPGFHLmxlbmd0aDsrK2FFKXt2YXIgYUM9bnVsbDt2YXIgYUQ9YUdbYUVdO2lmKHR5cGVvZiBh
RD09Im9iamVjdCIpe2FCPSthRFswXTtpZihhRC5sZW5ndGg+MSl7YUM9YURbMV19fWVsc2V7YUI9
K2FEfWlmKGFDPT1udWxsKXthQz1hRi50aWNrRm9ybWF0dGVyKGFCLGFGKX1pZighaXNOYU4oYUIp
KXthRi50aWNrcy5wdXNoKHt2OmFCLGxhYmVsOmFDfSl9fX1mdW5jdGlvbiBhcChhQixhQyl7aWYo
YUIub3B0aW9ucy5hdXRvc2NhbGVNYXJnaW4mJmFDLmxlbmd0aD4wKXtpZihhQi5vcHRpb25zLm1p
bj09bnVsbCl7YUIubWluPU1hdGgubWluKGFCLm1pbixhQ1swXS52KX1pZihhQi5vcHRpb25zLm1h
eD09bnVsbCYmYUMubGVuZ3RoPjEpe2FCLm1heD1NYXRoLm1heChhQi5tYXgsYUNbYUMubGVuZ3Ro
LTFdLnYpfX19ZnVuY3Rpb24gVygpe0guY2xlYXJSZWN0KDAsMCxHLEkpO3ZhciBhQz1PLmdyaWQ7
aWYoYUMuc2hvdyYmYUMuYmFja2dyb3VuZENvbG9yKXtOKCl9aWYoYUMuc2hvdyYmIWFDLmFib3Zl
RGF0YSl7YWMoKX1mb3IodmFyIGFCPTA7YUI8US5sZW5ndGg7KythQil7YW4oYWsuZHJhd1Nlcmll
cyxbSCxRW2FCXV0pO2QoUVthQl0pfWFuKGFrLmRyYXcsW0hdKTtpZihhQy5zaG93JiZhQy5hYm92
ZURhdGEpe2FjKCl9fWZ1bmN0aW9uIEQoYUIsYUkpe3ZhciBhRSxhSCxhRyxhRCxhRj1tKCk7Zm9y
KGk9MDtpPGFGLmxlbmd0aDsrK2kpe2FFPWFGW2ldO2lmKGFFLmRpcmVjdGlvbj09YUkpe2FEPWFJ
K2FFLm4rImF4aXMiO2lmKCFhQlthRF0mJmFFLm49PTEpe2FEPWFJKyJheGlzIn1pZihhQlthRF0p
e2FIPWFCW2FEXS5mcm9tO2FHPWFCW2FEXS50bzticmVha319fWlmKCFhQlthRF0pe2FFPWFJPT0i
eCI/cFswXTphd1swXTthSD1hQlthSSsiMSJdO2FHPWFCW2FJKyIyIl19aWYoYUghPW51bGwmJmFH
IT1udWxsJiZhSD5hRyl7dmFyIGFDPWFIO2FIPWFHO2FHPWFDfXJldHVybntmcm9tOmFILHRvOmFH
LGF4aXM6YUV9fWZ1bmN0aW9uIE4oKXtILnNhdmUoKTtILnRyYW5zbGF0ZShxLmxlZnQscS50b3Ap
O0guZmlsbFN0eWxlPWFtKE8uZ3JpZC5iYWNrZ3JvdW5kQ29sb3IsdywwLCJyZ2JhKDI1NSwgMjU1
LCAyNTUsIDApIik7SC5maWxsUmVjdCgwLDAsaCx3KTtILnJlc3RvcmUoKX1mdW5jdGlvbiBhYygp
e3ZhciBhRjtILnNhdmUoKTtILnRyYW5zbGF0ZShxLmxlZnQscS50b3ApO3ZhciBhSD1PLmdyaWQu
bWFya2luZ3M7aWYoYUgpe2lmKGMuaXNGdW5jdGlvbihhSCkpe3ZhciBhSz1hcS5nZXRBeGVzKCk7
YUsueG1pbj1hSy54YXhpcy5taW47YUsueG1heD1hSy54YXhpcy5tYXg7YUsueW1pbj1hSy55YXhp
cy5taW47YUsueW1heD1hSy55YXhpcy5tYXg7YUg9YUgoYUspfWZvcihhRj0wO2FGPGFILmxlbmd0
aDsrK2FGKXt2YXIgYUQ9YUhbYUZdLGFDPUQoYUQsIngiKSxhST1EKGFELCJ5Iik7aWYoYUMuZnJv
bT09bnVsbCl7YUMuZnJvbT1hQy5heGlzLm1pbn1pZihhQy50bz09bnVsbCl7YUMudG89YUMuYXhp
cy5tYXh9aWYoYUkuZnJvbT09bnVsbCl7YUkuZnJvbT1hSS5heGlzLm1pbn1pZihhSS50bz09bnVs
bCl7YUkudG89YUkuYXhpcy5tYXh9aWYoYUMudG88YUMuYXhpcy5taW58fGFDLmZyb20+YUMuYXhp
cy5tYXh8fGFJLnRvPGFJLmF4aXMubWlufHxhSS5mcm9tPmFJLmF4aXMubWF4KXtjb250aW51ZX1h
Qy5mcm9tPU1hdGgubWF4KGFDLmZyb20sYUMuYXhpcy5taW4pO2FDLnRvPU1hdGgubWluKGFDLnRv
LGFDLmF4aXMubWF4KTthSS5mcm9tPU1hdGgubWF4KGFJLmZyb20sYUkuYXhpcy5taW4pO2FJLnRv
PU1hdGgubWluKGFJLnRvLGFJLmF4aXMubWF4KTtpZihhQy5mcm9tPT1hQy50byYmYUkuZnJvbT09
YUkudG8pe2NvbnRpbnVlfWFDLmZyb209YUMuYXhpcy5wMmMoYUMuZnJvbSk7YUMudG89YUMuYXhp
cy5wMmMoYUMudG8pO2FJLmZyb209YUkuYXhpcy5wMmMoYUkuZnJvbSk7YUkudG89YUkuYXhpcy5w
MmMoYUkudG8pO2lmKGFDLmZyb209PWFDLnRvfHxhSS5mcm9tPT1hSS50byl7SC5iZWdpblBhdGgo
KTtILnN0cm9rZVN0eWxlPWFELmNvbG9yfHxPLmdyaWQubWFya2luZ3NDb2xvcjtILmxpbmVXaWR0
aD1hRC5saW5lV2lkdGh8fE8uZ3JpZC5tYXJraW5nc0xpbmVXaWR0aDtILm1vdmVUbyhhQy5mcm9t
LGFJLmZyb20pO0gubGluZVRvKGFDLnRvLGFJLnRvKTtILnN0cm9rZSgpfWVsc2V7SC5maWxsU3R5
bGU9YUQuY29sb3J8fE8uZ3JpZC5tYXJraW5nc0NvbG9yO0guZmlsbFJlY3QoYUMuZnJvbSxhSS50
byxhQy50by1hQy5mcm9tLGFJLmZyb20tYUkudG8pfX19dmFyIGFLPW0oKSxhTT1PLmdyaWQuYm9y
ZGVyV2lkdGg7Zm9yKHZhciBhRT0wO2FFPGFLLmxlbmd0aDsrK2FFKXt2YXIgYUI9YUtbYUVdLGFH
PWFCLmJveCxhUT1hQi50aWNrTGVuZ3RoLGFOLGFMLGFQLGFKO2lmKCFhQi5zaG93fHxhQi50aWNr
cy5sZW5ndGg9PTApe2NvbnRpbnVlfUguc3Ryb2tlU3R5bGU9YUIub3B0aW9ucy50aWNrQ29sb3J8
fGMuY29sb3IucGFyc2UoYUIub3B0aW9ucy5jb2xvcikuc2NhbGUoImEiLDAuMjIpLnRvU3RyaW5n
KCk7SC5saW5lV2lkdGg9MTtpZihhQi5kaXJlY3Rpb249PSJ4Iil7YU49MDtpZihhUT09ImZ1bGwi
KXthTD0oYUIucG9zaXRpb249PSJ0b3AiPzA6dyl9ZWxzZXthTD1hRy50b3AtcS50b3ArKGFCLnBv
c2l0aW9uPT0idG9wIj9hRy5oZWlnaHQ6MCl9fWVsc2V7YUw9MDtpZihhUT09ImZ1bGwiKXthTj0o
YUIucG9zaXRpb249PSJsZWZ0Ij8wOmgpfWVsc2V7YU49YUcubGVmdC1xLmxlZnQrKGFCLnBvc2l0
aW9uPT0ibGVmdCI/YUcud2lkdGg6MCl9fWlmKCFhQi5pbm5lcm1vc3Qpe0guYmVnaW5QYXRoKCk7
YVA9YUo9MDtpZihhQi5kaXJlY3Rpb249PSJ4Iil7YVA9aH1lbHNle2FKPXd9aWYoSC5saW5lV2lk
dGg9PTEpe2FOPU1hdGguZmxvb3IoYU4pKzAuNTthTD1NYXRoLmZsb29yKGFMKSswLjV9SC5tb3Zl
VG8oYU4sYUwpO0gubGluZVRvKGFOK2FQLGFMK2FKKTtILnN0cm9rZSgpfUguYmVnaW5QYXRoKCk7
Zm9yKGFGPTA7YUY8YUIudGlja3MubGVuZ3RoOysrYUYpe3ZhciBhTz1hQi50aWNrc1thRl0udjth
UD1hSj0wO2lmKGFPPGFCLm1pbnx8YU8+YUIubWF4fHwoYVE9PSJmdWxsIiYmYU0+MCYmKGFPPT1h
Qi5taW58fGFPPT1hQi5tYXgpKSl7Y29udGludWV9aWYoYUIuZGlyZWN0aW9uPT0ieCIpe2FOPWFC
LnAyYyhhTyk7YUo9YVE9PSJmdWxsIj8tdzphUTtpZihhQi5wb3NpdGlvbj09InRvcCIpe2FKPS1h
Sn19ZWxzZXthTD1hQi5wMmMoYU8pO2FQPWFRPT0iZnVsbCI/LWg6YVE7aWYoYUIucG9zaXRpb249
PSJsZWZ0Iil7YVA9LWFQfX1pZihILmxpbmVXaWR0aD09MSl7aWYoYUIuZGlyZWN0aW9uPT0ieCIp
e2FOPU1hdGguZmxvb3IoYU4pKzAuNX1lbHNle2FMPU1hdGguZmxvb3IoYUwpKzAuNX19SC5tb3Zl
VG8oYU4sYUwpO0gubGluZVRvKGFOK2FQLGFMK2FKKX1ILnN0cm9rZSgpfWlmKGFNKXtILmxpbmVX
aWR0aD1hTTtILnN0cm9rZVN0eWxlPU8uZ3JpZC5ib3JkZXJDb2xvcjtILnN0cm9rZVJlY3QoLWFN
LzIsLWFNLzIsaCthTSx3K2FNKX1ILnJlc3RvcmUoKX1mdW5jdGlvbiBrKCl7YXYuZmluZCgiLnRp
Y2tMYWJlbHMiKS5yZW1vdmUoKTt2YXIgYUc9Wyc8ZGl2IGNsYXNzPSJ0aWNrTGFiZWxzIiBzdHls
ZT0iZm9udC1zaXplOnNtYWxsZXIiPiddO3ZhciBhSj1tKCk7Zm9yKHZhciBhRD0wO2FEPGFKLmxl
bmd0aDsrK2FEKXt2YXIgYUM9YUpbYURdLGFGPWFDLmJveDtpZighYUMuc2hvdyl7Y29udGludWV9
YUcucHVzaCgnPGRpdiBjbGFzcz0iJythQy5kaXJlY3Rpb24rIkF4aXMgIithQy5kaXJlY3Rpb24r
YUMubisnQXhpcyIgc3R5bGU9ImNvbG9yOicrYUMub3B0aW9ucy5jb2xvcisnIj4nKTtmb3IodmFy
IGFFPTA7YUU8YUMudGlja3MubGVuZ3RoOysrYUUpe3ZhciBhSD1hQy50aWNrc1thRV07aWYoIWFI
LmxhYmVsfHxhSC52PGFDLm1pbnx8YUgudj5hQy5tYXgpe2NvbnRpbnVlfXZhciBhSz17fSxhSTtp
ZihhQy5kaXJlY3Rpb249PSJ4Iil7YUk9ImNlbnRlciI7YUsubGVmdD1NYXRoLnJvdW5kKHEubGVm
dCthQy5wMmMoYUgudiktYUMubGFiZWxXaWR0aC8yKTtpZihhQy5wb3NpdGlvbj09ImJvdHRvbSIp
e2FLLnRvcD1hRi50b3ArYUYucGFkZGluZ31lbHNle2FLLmJvdHRvbT1JLShhRi50b3ArYUYuaGVp
Z2h0LWFGLnBhZGRpbmcpfX1lbHNle2FLLnRvcD1NYXRoLnJvdW5kKHEudG9wK2FDLnAyYyhhSC52
KS1hQy5sYWJlbEhlaWdodC8yKTtpZihhQy5wb3NpdGlvbj09ImxlZnQiKXthSy5yaWdodD1HLShh
Ri5sZWZ0K2FGLndpZHRoLWFGLnBhZGRpbmcpO2FJPSJyaWdodCJ9ZWxzZXthSy5sZWZ0PWFGLmxl
ZnQrYUYucGFkZGluZzthST0ibGVmdCJ9fWFLLndpZHRoPWFDLmxhYmVsV2lkdGg7dmFyIGFCPVsi
cG9zaXRpb246YWJzb2x1dGUiLCJ0ZXh0LWFsaWduOiIrYUldO2Zvcih2YXIgYUwgaW4gYUspe2FC
LnB1c2goYUwrIjoiK2FLW2FMXSsicHgiKX1hRy5wdXNoKCc8ZGl2IGNsYXNzPSJ0aWNrTGFiZWwi
IHN0eWxlPSInK2FCLmpvaW4oIjsiKSsnIj4nK2FILmxhYmVsKyI8L2Rpdj4iKX1hRy5wdXNoKCI8
L2Rpdj4iKX1hRy5wdXNoKCI8L2Rpdj4iKTthdi5hcHBlbmQoYUcuam9pbigiIikpfWZ1bmN0aW9u
IGQoYUIpe2lmKGFCLmxpbmVzLnNob3cpe2F0KGFCKX1pZihhQi5iYXJzLnNob3cpe2UoYUIpfWlm
KGFCLnBvaW50cy5zaG93KXthbyhhQil9fWZ1bmN0aW9uIGF0KGFFKXtmdW5jdGlvbiBhRChhUCxh
USxhSSxhVSxhVCl7dmFyIGFWPWFQLnBvaW50cyxhSj1hUC5wb2ludHNpemUsYU49bnVsbCxhTT1u
dWxsO0guYmVnaW5QYXRoKCk7Zm9yKHZhciBhTz1hSjthTzxhVi5sZW5ndGg7YU8rPWFKKXt2YXIg
YUw9YVZbYU8tYUpdLGFTPWFWW2FPLWFKKzFdLGFLPWFWW2FPXSxhUj1hVlthTysxXTtpZihhTD09
bnVsbHx8YUs9PW51bGwpe2NvbnRpbnVlfWlmKGFTPD1hUiYmYVM8YVQubWluKXtpZihhUjxhVC5t
aW4pe2NvbnRpbnVlfWFMPShhVC5taW4tYVMpLyhhUi1hUykqKGFLLWFMKSthTDthUz1hVC5taW59
ZWxzZXtpZihhUjw9YVMmJmFSPGFULm1pbil7aWYoYVM8YVQubWluKXtjb250aW51ZX1hSz0oYVQu
bWluLWFTKS8oYVItYVMpKihhSy1hTCkrYUw7YVI9YVQubWlufX1pZihhUz49YVImJmFTPmFULm1h
eCl7aWYoYVI+YVQubWF4KXtjb250aW51ZX1hTD0oYVQubWF4LWFTKS8oYVItYVMpKihhSy1hTCkr
YUw7YVM9YVQubWF4fWVsc2V7aWYoYVI+PWFTJiZhUj5hVC5tYXgpe2lmKGFTPmFULm1heCl7Y29u
dGludWV9YUs9KGFULm1heC1hUykvKGFSLWFTKSooYUstYUwpK2FMO2FSPWFULm1heH19aWYoYUw8
PWFLJiZhTDxhVS5taW4pe2lmKGFLPGFVLm1pbil7Y29udGludWV9YVM9KGFVLm1pbi1hTCkvKGFL
LWFMKSooYVItYVMpK2FTO2FMPWFVLm1pbn1lbHNle2lmKGFLPD1hTCYmYUs8YVUubWluKXtpZihh
TDxhVS5taW4pe2NvbnRpbnVlfWFSPShhVS5taW4tYUwpLyhhSy1hTCkqKGFSLWFTKSthUzthSz1h
VS5taW59fWlmKGFMPj1hSyYmYUw+YVUubWF4KXtpZihhSz5hVS5tYXgpe2NvbnRpbnVlfWFTPShh
VS5tYXgtYUwpLyhhSy1hTCkqKGFSLWFTKSthUzthTD1hVS5tYXh9ZWxzZXtpZihhSz49YUwmJmFL
PmFVLm1heCl7aWYoYUw+YVUubWF4KXtjb250aW51ZX1hUj0oYVUubWF4LWFMKS8oYUstYUwpKihh
Ui1hUykrYVM7YUs9YVUubWF4fX1pZihhTCE9YU58fGFTIT1hTSl7SC5tb3ZlVG8oYVUucDJjKGFM
KSthUSxhVC5wMmMoYVMpK2FJKX1hTj1hSzthTT1hUjtILmxpbmVUbyhhVS5wMmMoYUspK2FRLGFU
LnAyYyhhUikrYUkpfUguc3Ryb2tlKCl9ZnVuY3Rpb24gYUYoYUksYVEsYVApe3ZhciBhVz1hSS5w
b2ludHMsYVY9YUkucG9pbnRzaXplLGFOPU1hdGgubWluKE1hdGgubWF4KDAsYVAubWluKSxhUC5t
YXgpLGFYPTAsYVUsYVQ9ZmFsc2UsYU09MSxhTD0wLGFSPTA7d2hpbGUodHJ1ZSl7aWYoYVY+MCYm
YVg+YVcubGVuZ3RoK2FWKXticmVha31hWCs9YVY7dmFyIGFaPWFXW2FYLWFWXSxhSz1hV1thWC1h
VithTV0sYVk9YVdbYVhdLGFKPWFXW2FYK2FNXTtpZihhVCl7aWYoYVY+MCYmYVohPW51bGwmJmFZ
PT1udWxsKXthUj1hWDthVj0tYVY7YU09Mjtjb250aW51ZX1pZihhVjwwJiZhWD09YUwrYVYpe0gu
ZmlsbCgpO2FUPWZhbHNlO2FWPS1hVjthTT0xO2FYPWFMPWFSK2FWO2NvbnRpbnVlfX1pZihhWj09
bnVsbHx8YVk9PW51bGwpe2NvbnRpbnVlfWlmKGFaPD1hWSYmYVo8YVEubWluKXtpZihhWTxhUS5t
aW4pe2NvbnRpbnVlfWFLPShhUS5taW4tYVopLyhhWS1hWikqKGFKLWFLKSthSzthWj1hUS5taW59
ZWxzZXtpZihhWTw9YVomJmFZPGFRLm1pbil7aWYoYVo8YVEubWluKXtjb250aW51ZX1hSj0oYVEu
bWluLWFaKS8oYVktYVopKihhSi1hSykrYUs7YVk9YVEubWlufX1pZihhWj49YVkmJmFaPmFRLm1h
eCl7aWYoYVk+YVEubWF4KXtjb250aW51ZX1hSz0oYVEubWF4LWFaKS8oYVktYVopKihhSi1hSykr
YUs7YVo9YVEubWF4fWVsc2V7aWYoYVk+PWFaJiZhWT5hUS5tYXgpe2lmKGFaPmFRLm1heCl7Y29u
dGludWV9YUo9KGFRLm1heC1hWikvKGFZLWFaKSooYUotYUspK2FLO2FZPWFRLm1heH19aWYoIWFU
KXtILmJlZ2luUGF0aCgpO0gubW92ZVRvKGFRLnAyYyhhWiksYVAucDJjKGFOKSk7YVQ9dHJ1ZX1p
ZihhSz49YVAubWF4JiZhSj49YVAubWF4KXtILmxpbmVUbyhhUS5wMmMoYVopLGFQLnAyYyhhUC5t
YXgpKTtILmxpbmVUbyhhUS5wMmMoYVkpLGFQLnAyYyhhUC5tYXgpKTtjb250aW51ZX1lbHNle2lm
KGFLPD1hUC5taW4mJmFKPD1hUC5taW4pe0gubGluZVRvKGFRLnAyYyhhWiksYVAucDJjKGFQLm1p
bikpO0gubGluZVRvKGFRLnAyYyhhWSksYVAucDJjKGFQLm1pbikpO2NvbnRpbnVlfX12YXIgYU89
YVosYVM9YVk7aWYoYUs8PWFKJiZhSzxhUC5taW4mJmFKPj1hUC5taW4pe2FaPShhUC5taW4tYUsp
LyhhSi1hSykqKGFZLWFaKSthWjthSz1hUC5taW59ZWxzZXtpZihhSjw9YUsmJmFKPGFQLm1pbiYm
YUs+PWFQLm1pbil7YVk9KGFQLm1pbi1hSykvKGFKLWFLKSooYVktYVopK2FaO2FKPWFQLm1pbn19
aWYoYUs+PWFKJiZhSz5hUC5tYXgmJmFKPD1hUC5tYXgpe2FaPShhUC5tYXgtYUspLyhhSi1hSykq
KGFZLWFaKSthWjthSz1hUC5tYXh9ZWxzZXtpZihhSj49YUsmJmFKPmFQLm1heCYmYUs8PWFQLm1h
eCl7YVk9KGFQLm1heC1hSykvKGFKLWFLKSooYVktYVopK2FaO2FKPWFQLm1heH19aWYoYVohPWFP
KXtILmxpbmVUbyhhUS5wMmMoYU8pLGFQLnAyYyhhSykpfUgubGluZVRvKGFRLnAyYyhhWiksYVAu
cDJjKGFLKSk7SC5saW5lVG8oYVEucDJjKGFZKSxhUC5wMmMoYUopKTtpZihhWSE9YVMpe0gubGlu
ZVRvKGFRLnAyYyhhWSksYVAucDJjKGFKKSk7SC5saW5lVG8oYVEucDJjKGFTKSxhUC5wMmMoYUop
KX19fUguc2F2ZSgpO0gudHJhbnNsYXRlKHEubGVmdCxxLnRvcCk7SC5saW5lSm9pbj0icm91bmQi
O3ZhciBhRz1hRS5saW5lcy5saW5lV2lkdGgsYUI9YUUuc2hhZG93U2l6ZTtpZihhRz4wJiZhQj4w
KXtILmxpbmVXaWR0aD1hQjtILnN0cm9rZVN0eWxlPSJyZ2JhKDAsMCwwLDAuMSkiO3ZhciBhSD1N
YXRoLlBJLzE4O2FEKGFFLmRhdGFwb2ludHMsTWF0aC5zaW4oYUgpKihhRy8yK2FCLzIpLE1hdGgu
Y29zKGFIKSooYUcvMithQi8yKSxhRS54YXhpcyxhRS55YXhpcyk7SC5saW5lV2lkdGg9YUIvMjth
RChhRS5kYXRhcG9pbnRzLE1hdGguc2luKGFIKSooYUcvMithQi80KSxNYXRoLmNvcyhhSCkqKGFH
LzIrYUIvNCksYUUueGF4aXMsYUUueWF4aXMpfUgubGluZVdpZHRoPWFHO0guc3Ryb2tlU3R5bGU9
YUUuY29sb3I7dmFyIGFDPWFlKGFFLmxpbmVzLGFFLmNvbG9yLDAsdyk7aWYoYUMpe0guZmlsbFN0
eWxlPWFDO2FGKGFFLmRhdGFwb2ludHMsYUUueGF4aXMsYUUueWF4aXMpfWlmKGFHPjApe2FEKGFF
LmRhdGFwb2ludHMsMCwwLGFFLnhheGlzLGFFLnlheGlzKX1ILnJlc3RvcmUoKX1mdW5jdGlvbiBh
byhhRSl7ZnVuY3Rpb24gYUgoYU4sYU0sYVUsYUssYVMsYVQsYVEsYUope3ZhciBhUj1hTi5wb2lu
dHMsYUk9YU4ucG9pbnRzaXplO2Zvcih2YXIgYUw9MDthTDxhUi5sZW5ndGg7YUwrPWFJKXt2YXIg
YVA9YVJbYUxdLGFPPWFSW2FMKzFdO2lmKGFQPT1udWxsfHxhUDxhVC5taW58fGFQPmFULm1heHx8
YU88YVEubWlufHxhTz5hUS5tYXgpe2NvbnRpbnVlfUguYmVnaW5QYXRoKCk7YVA9YVQucDJjKGFQ
KTthTz1hUS5wMmMoYU8pK2FLO2lmKGFKPT0iY2lyY2xlIil7SC5hcmMoYVAsYU8sYU0sMCxhUz9N
YXRoLlBJOk1hdGguUEkqMixmYWxzZSl9ZWxzZXthSihILGFQLGFPLGFNLGFTKX1ILmNsb3NlUGF0
aCgpO2lmKGFVKXtILmZpbGxTdHlsZT1hVTtILmZpbGwoKX1ILnN0cm9rZSgpfX1ILnNhdmUoKTtI
LnRyYW5zbGF0ZShxLmxlZnQscS50b3ApO3ZhciBhRz1hRS5wb2ludHMubGluZVdpZHRoLGFDPWFF
LnNoYWRvd1NpemUsYUI9YUUucG9pbnRzLnJhZGl1cyxhRj1hRS5wb2ludHMuc3ltYm9sO2lmKGFH
PjAmJmFDPjApe3ZhciBhRD1hQy8yO0gubGluZVdpZHRoPWFEO0guc3Ryb2tlU3R5bGU9InJnYmEo
MCwwLDAsMC4xKSI7YUgoYUUuZGF0YXBvaW50cyxhQixudWxsLGFEK2FELzIsdHJ1ZSxhRS54YXhp
cyxhRS55YXhpcyxhRik7SC5zdHJva2VTdHlsZT0icmdiYSgwLDAsMCwwLjIpIjthSChhRS5kYXRh
cG9pbnRzLGFCLG51bGwsYUQvMix0cnVlLGFFLnhheGlzLGFFLnlheGlzLGFGKX1ILmxpbmVXaWR0
aD1hRztILnN0cm9rZVN0eWxlPWFFLmNvbG9yO2FIKGFFLmRhdGFwb2ludHMsYUIsYWUoYUUucG9p
bnRzLGFFLmNvbG9yKSwwLGZhbHNlLGFFLnhheGlzLGFFLnlheGlzLGFGKTtILnJlc3RvcmUoKX1m
dW5jdGlvbiBFKGFOLGFNLGFWLGFJLGFRLGFGLGFELGFMLGFLLGFVLGFSLGFDKXt2YXIgYUUsYVQs
YUosYVAsYUcsYUIsYU8sYUgsYVM7aWYoYVIpe2FIPWFCPWFPPXRydWU7YUc9ZmFsc2U7YUU9YVY7
YVQ9YU47YVA9YU0rYUk7YUo9YU0rYVE7aWYoYVQ8YUUpe2FTPWFUO2FUPWFFO2FFPWFTO2FHPXRy
dWU7YUI9ZmFsc2V9fWVsc2V7YUc9YUI9YU89dHJ1ZTthSD1mYWxzZTthRT1hTithSTthVD1hTith
UTthSj1hVjthUD1hTTtpZihhUDxhSil7YVM9YVA7YVA9YUo7YUo9YVM7YUg9dHJ1ZTthTz1mYWxz
ZX19aWYoYVQ8YUwubWlufHxhRT5hTC5tYXh8fGFQPGFLLm1pbnx8YUo+YUsubWF4KXtyZXR1cm59
aWYoYUU8YUwubWluKXthRT1hTC5taW47YUc9ZmFsc2V9aWYoYVQ+YUwubWF4KXthVD1hTC5tYXg7
YUI9ZmFsc2V9aWYoYUo8YUsubWluKXthSj1hSy5taW47YUg9ZmFsc2V9aWYoYVA+YUsubWF4KXth
UD1hSy5tYXg7YU89ZmFsc2V9YUU9YUwucDJjKGFFKTthSj1hSy5wMmMoYUopO2FUPWFMLnAyYyhh
VCk7YVA9YUsucDJjKGFQKTtpZihhRCl7YVUuYmVnaW5QYXRoKCk7YVUubW92ZVRvKGFFLGFKKTth
VS5saW5lVG8oYUUsYVApO2FVLmxpbmVUbyhhVCxhUCk7YVUubGluZVRvKGFULGFKKTthVS5maWxs
U3R5bGU9YUQoYUosYVApO2FVLmZpbGwoKX1pZihhQz4wJiYoYUd8fGFCfHxhT3x8YUgpKXthVS5i
ZWdpblBhdGgoKTthVS5tb3ZlVG8oYUUsYUorYUYpO2lmKGFHKXthVS5saW5lVG8oYUUsYVArYUYp
fWVsc2V7YVUubW92ZVRvKGFFLGFQK2FGKX1pZihhTyl7YVUubGluZVRvKGFULGFQK2FGKX1lbHNl
e2FVLm1vdmVUbyhhVCxhUCthRil9aWYoYUIpe2FVLmxpbmVUbyhhVCxhSithRil9ZWxzZXthVS5t
b3ZlVG8oYVQsYUorYUYpfWlmKGFIKXthVS5saW5lVG8oYUUsYUorYUYpfWVsc2V7YVUubW92ZVRv
KGFFLGFKK2FGKX1hVS5zdHJva2UoKX19ZnVuY3Rpb24gZShhRCl7ZnVuY3Rpb24gYUMoYUosYUks
YUwsYUcsYUssYU4sYU0pe3ZhciBhTz1hSi5wb2ludHMsYUY9YUoucG9pbnRzaXplO2Zvcih2YXIg
YUg9MDthSDxhTy5sZW5ndGg7YUgrPWFGKXtpZihhT1thSF09PW51bGwpe2NvbnRpbnVlfUUoYU9b
YUhdLGFPW2FIKzFdLGFPW2FIKzJdLGFJLGFMLGFHLGFLLGFOLGFNLEgsYUQuYmFycy5ob3Jpem9u
dGFsLGFELmJhcnMubGluZVdpZHRoKX19SC5zYXZlKCk7SC50cmFuc2xhdGUocS5sZWZ0LHEudG9w
KTtILmxpbmVXaWR0aD1hRC5iYXJzLmxpbmVXaWR0aDtILnN0cm9rZVN0eWxlPWFELmNvbG9yO3Zh
ciBhQj1hRC5iYXJzLmFsaWduPT0ibGVmdCI/MDotYUQuYmFycy5iYXJXaWR0aC8yO3ZhciBhRT1h
RC5iYXJzLmZpbGw/ZnVuY3Rpb24oYUYsYUcpe3JldHVybiBhZShhRC5iYXJzLGFELmNvbG9yLGFG
LGFHKX06bnVsbDthQyhhRC5kYXRhcG9pbnRzLGFCLGFCK2FELmJhcnMuYmFyV2lkdGgsMCxhRSxh
RC54YXhpcyxhRC55YXhpcyk7SC5yZXN0b3JlKCl9ZnVuY3Rpb24gYWUoYUQsYUIsYUMsYUYpe3Zh
ciBhRT1hRC5maWxsO2lmKCFhRSl7cmV0dXJuIG51bGx9aWYoYUQuZmlsbENvbG9yKXtyZXR1cm4g
YW0oYUQuZmlsbENvbG9yLGFDLGFGLGFCKX12YXIgYUc9Yy5jb2xvci5wYXJzZShhQik7YUcuYT10
eXBlb2YgYUU9PSJudW1iZXIiP2FFOjAuNDthRy5ub3JtYWxpemUoKTtyZXR1cm4gYUcudG9TdHJp
bmcoKX1mdW5jdGlvbiBvKCl7YXYuZmluZCgiLmxlZ2VuZCIpLnJlbW92ZSgpO2lmKCFPLmxlZ2Vu
ZC5zaG93KXtyZXR1cm59dmFyIGFIPVtdLGFGPWZhbHNlLGFOPU8ubGVnZW5kLmxhYmVsRm9ybWF0
dGVyLGFNLGFKO2Zvcih2YXIgYUU9MDthRTxRLmxlbmd0aDsrK2FFKXthTT1RW2FFXTthSj1hTS5s
YWJlbDtpZighYUope2NvbnRpbnVlfWlmKGFFJU8ubGVnZW5kLm5vQ29sdW1ucz09MCl7aWYoYUYp
e2FILnB1c2goIjwvdHI+Iil9YUgucHVzaCgiPHRyPiIpO2FGPXRydWV9aWYoYU4pe2FKPWFOKGFK
LGFNKX1hSC5wdXNoKCc8dGQgY2xhc3M9ImxlZ2VuZENvbG9yQm94Ij48ZGl2IHN0eWxlPSJib3Jk
ZXI6MXB4IHNvbGlkICcrTy5sZWdlbmQubGFiZWxCb3hCb3JkZXJDb2xvcisnO3BhZGRpbmc6MXB4
Ij48ZGl2IHN0eWxlPSJ3aWR0aDo0cHg7aGVpZ2h0OjA7Ym9yZGVyOjVweCBzb2xpZCAnK2FNLmNv
bG9yKyc7b3ZlcmZsb3c6aGlkZGVuIj48L2Rpdj48L2Rpdj48L3RkPjx0ZCBjbGFzcz0ibGVnZW5k
TGFiZWwiPicrYUorIjwvdGQ+Iil9aWYoYUYpe2FILnB1c2goIjwvdHI+Iil9aWYoYUgubGVuZ3Ro
PT0wKXtyZXR1cm59dmFyIGFMPSc8dGFibGUgc3R5bGU9ImZvbnQtc2l6ZTpzbWFsbGVyO2NvbG9y
OicrTy5ncmlkLmNvbG9yKyciPicrYUguam9pbigiIikrIjwvdGFibGU+IjtpZihPLmxlZ2VuZC5j
b250YWluZXIhPW51bGwpe2MoTy5sZWdlbmQuY29udGFpbmVyKS5odG1sKGFMKX1lbHNle3ZhciBh
ST0iIixhQz1PLmxlZ2VuZC5wb3NpdGlvbixhRD1PLmxlZ2VuZC5tYXJnaW47aWYoYURbMF09PW51
bGwpe2FEPVthRCxhRF19aWYoYUMuY2hhckF0KDApPT0ibiIpe2FJKz0idG9wOiIrKGFEWzFdK3Eu
dG9wKSsicHg7In1lbHNle2lmKGFDLmNoYXJBdCgwKT09InMiKXthSSs9ImJvdHRvbToiKyhhRFsx
XStxLmJvdHRvbSkrInB4OyJ9fWlmKGFDLmNoYXJBdCgxKT09ImUiKXthSSs9InJpZ2h0OiIrKGFE
WzBdK3EucmlnaHQpKyJweDsifWVsc2V7aWYoYUMuY2hhckF0KDEpPT0idyIpe2FJKz0ibGVmdDoi
KyhhRFswXStxLmxlZnQpKyJweDsifX12YXIgYUs9YygnPGRpdiBjbGFzcz0ibGVnZW5kIj4nK2FM
LnJlcGxhY2UoJ3N0eWxlPSInLCdzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7JythSSsiOyIpKyI8
L2Rpdj4iKS5hcHBlbmRUbyhhdik7aWYoTy5sZWdlbmQuYmFja2dyb3VuZE9wYWNpdHkhPTApe3Zh
ciBhRz1PLmxlZ2VuZC5iYWNrZ3JvdW5kQ29sb3I7aWYoYUc9PW51bGwpe2FHPU8uZ3JpZC5iYWNr
Z3JvdW5kQ29sb3I7aWYoYUcmJnR5cGVvZiBhRz09InN0cmluZyIpe2FHPWMuY29sb3IucGFyc2Uo
YUcpfWVsc2V7YUc9Yy5jb2xvci5leHRyYWN0KGFLLCJiYWNrZ3JvdW5kLWNvbG9yIil9YUcuYT0x
O2FHPWFHLnRvU3RyaW5nKCl9dmFyIGFCPWFLLmNoaWxkcmVuKCk7YygnPGRpdiBzdHlsZT0icG9z
aXRpb246YWJzb2x1dGU7d2lkdGg6JythQi53aWR0aCgpKyJweDtoZWlnaHQ6IithQi5oZWlnaHQo
KSsicHg7IithSSsiYmFja2dyb3VuZC1jb2xvcjoiK2FHKyc7Ij4gPC9kaXY+JykucHJlcGVuZFRv
KGFLKS5jc3MoIm9wYWNpdHkiLE8ubGVnZW5kLmJhY2tncm91bmRPcGFjaXR5KX19fXZhciBhYj1b
XSxNPW51bGw7ZnVuY3Rpb24gSyhhSSxhRyxhRCl7dmFyIGFPPU8uZ3JpZC5tb3VzZUFjdGl2ZVJh
ZGl1cyxhMD1hTyphTysxLGFZPW51bGwsYVI9ZmFsc2UsYVcsYVU7Zm9yKGFXPVEubGVuZ3RoLTE7
YVc+PTA7LS1hVyl7aWYoIWFEKFFbYVddKSl7Y29udGludWV9dmFyIGFQPVFbYVddLGFIPWFQLnhh
eGlzLGFGPWFQLnlheGlzLGFWPWFQLmRhdGFwb2ludHMucG9pbnRzLGFUPWFQLmRhdGFwb2ludHMu
cG9pbnRzaXplLGFRPWFILmMycChhSSksYU49YUYuYzJwKGFHKSxhQz1hTy9hSC5zY2FsZSxhQj1h
Ty9hRi5zY2FsZTtpZihhSC5vcHRpb25zLmludmVyc2VUcmFuc2Zvcm0pe2FDPU51bWJlci5NQVhf
VkFMVUV9aWYoYUYub3B0aW9ucy5pbnZlcnNlVHJhbnNmb3JtKXthQj1OdW1iZXIuTUFYX1ZBTFVF
fWlmKGFQLmxpbmVzLnNob3d8fGFQLnBvaW50cy5zaG93KXtmb3IoYVU9MDthVTxhVi5sZW5ndGg7
YVUrPWFUKXt2YXIgYUs9YVZbYVVdLGFKPWFWW2FVKzFdO2lmKGFLPT1udWxsKXtjb250aW51ZX1p
ZihhSy1hUT5hQ3x8YUstYVE8LWFDfHxhSi1hTj5hQnx8YUotYU48LWFCKXtjb250aW51ZX12YXIg
YU09TWF0aC5hYnMoYUgucDJjKGFLKS1hSSksYUw9TWF0aC5hYnMoYUYucDJjKGFKKS1hRyksYVM9
YU0qYU0rYUwqYUw7aWYoYVM8YTApe2EwPWFTO2FZPVthVyxhVS9hVF19fX1pZihhUC5iYXJzLnNo
b3cmJiFhWSl7dmFyIGFFPWFQLmJhcnMuYWxpZ249PSJsZWZ0Ij8wOi1hUC5iYXJzLmJhcldpZHRo
LzIsYVg9YUUrYVAuYmFycy5iYXJXaWR0aDtmb3IoYVU9MDthVTxhVi5sZW5ndGg7YVUrPWFUKXt2
YXIgYUs9YVZbYVVdLGFKPWFWW2FVKzFdLGFaPWFWW2FVKzJdO2lmKGFLPT1udWxsKXtjb250aW51
ZX1pZihRW2FXXS5iYXJzLmhvcml6b250YWw/KGFRPD1NYXRoLm1heChhWixhSykmJmFRPj1NYXRo
Lm1pbihhWixhSykmJmFOPj1hSithRSYmYU48PWFKK2FYKTooYVE+PWFLK2FFJiZhUTw9YUsrYVgm
JmFOPj1NYXRoLm1pbihhWixhSikmJmFOPD1NYXRoLm1heChhWixhSikpKXthWT1bYVcsYVUvYVRd
fX19fWlmKGFZKXthVz1hWVswXTthVT1hWVsxXTthVD1RW2FXXS5kYXRhcG9pbnRzLnBvaW50c2l6
ZTtyZXR1cm57ZGF0YXBvaW50OlFbYVddLmRhdGFwb2ludHMucG9pbnRzLnNsaWNlKGFVKmFULChh
VSsxKSphVCksZGF0YUluZGV4OmFVLHNlcmllczpRW2FXXSxzZXJpZXNJbmRleDphV319cmV0dXJu
IG51bGx9ZnVuY3Rpb24gYWEoYUIpe2lmKE8uZ3JpZC5ob3ZlcmFibGUpe3UoInBsb3Rob3ZlciIs
YUIsZnVuY3Rpb24oYUMpe3JldHVybiBhQy5ob3ZlcmFibGUhPWZhbHNlfSl9fWZ1bmN0aW9uIGwo
YUIpe2lmKE8uZ3JpZC5ob3ZlcmFibGUpe3UoInBsb3Rob3ZlciIsYUIsZnVuY3Rpb24oYUMpe3Jl
dHVybiBmYWxzZX0pfX1mdW5jdGlvbiBSKGFCKXt1KCJwbG90Y2xpY2siLGFCLGZ1bmN0aW9uKGFD
KXtyZXR1cm4gYUMuY2xpY2thYmxlIT1mYWxzZX0pfWZ1bmN0aW9uIHUoYUMsYUIsYUQpe3ZhciBh
RT15Lm9mZnNldCgpLGFIPWFCLnBhZ2VYLWFFLmxlZnQtcS5sZWZ0LGFGPWFCLnBhZ2VZLWFFLnRv
cC1xLnRvcCxhSj1DKHtsZWZ0OmFILHRvcDphRn0pO2FKLnBhZ2VYPWFCLnBhZ2VYO2FKLnBhZ2VZ
PWFCLnBhZ2VZO3ZhciBhSz1LKGFILGFGLGFEKTtpZihhSyl7YUsucGFnZVg9cGFyc2VJbnQoYUsu
c2VyaWVzLnhheGlzLnAyYyhhSy5kYXRhcG9pbnRbMF0pK2FFLmxlZnQrcS5sZWZ0KTthSy5wYWdl
WT1wYXJzZUludChhSy5zZXJpZXMueWF4aXMucDJjKGFLLmRhdGFwb2ludFsxXSkrYUUudG9wK3Eu
dG9wKX1pZihPLmdyaWQuYXV0b0hpZ2hsaWdodCl7Zm9yKHZhciBhRz0wO2FHPGFiLmxlbmd0aDsr
K2FHKXt2YXIgYUk9YWJbYUddO2lmKGFJLmF1dG89PWFDJiYhKGFLJiZhSS5zZXJpZXM9PWFLLnNl
cmllcyYmYUkucG9pbnRbMF09PWFLLmRhdGFwb2ludFswXSYmYUkucG9pbnRbMV09PWFLLmRhdGFw
b2ludFsxXSkpe1QoYUkuc2VyaWVzLGFJLnBvaW50KX19aWYoYUspe3goYUsuc2VyaWVzLGFLLmRh
dGFwb2ludCxhQyl9fWF2LnRyaWdnZXIoYUMsW2FKLGFLXSl9ZnVuY3Rpb24gZigpe2lmKCFNKXtN
PXNldFRpbWVvdXQocywzMCl9fWZ1bmN0aW9uIHMoKXtNPW51bGw7QS5zYXZlKCk7QS5jbGVhclJl
Y3QoMCwwLEcsSSk7QS50cmFuc2xhdGUocS5sZWZ0LHEudG9wKTt2YXIgYUMsYUI7Zm9yKGFDPTA7
YUM8YWIubGVuZ3RoOysrYUMpe2FCPWFiW2FDXTtpZihhQi5zZXJpZXMuYmFycy5zaG93KXt2KGFC
LnNlcmllcyxhQi5wb2ludCl9ZWxzZXtheShhQi5zZXJpZXMsYUIucG9pbnQpfX1BLnJlc3RvcmUo
KTthbihhay5kcmF3T3ZlcmxheSxbQV0pfWZ1bmN0aW9uIHgoYUQsYUIsYUYpe2lmKHR5cGVvZiBh
RD09Im51bWJlciIpe2FEPVFbYURdfWlmKHR5cGVvZiBhQj09Im51bWJlciIpe3ZhciBhRT1hRC5k
YXRhcG9pbnRzLnBvaW50c2l6ZTthQj1hRC5kYXRhcG9pbnRzLnBvaW50cy5zbGljZShhRSphQixh
RSooYUIrMSkpfXZhciBhQz1hbChhRCxhQik7aWYoYUM9PS0xKXthYi5wdXNoKHtzZXJpZXM6YUQs
cG9pbnQ6YUIsYXV0bzphRn0pO2YoKX1lbHNle2lmKCFhRil7YWJbYUNdLmF1dG89ZmFsc2V9fX1m
dW5jdGlvbiBUKGFELGFCKXtpZihhRD09bnVsbCYmYUI9PW51bGwpe2FiPVtdO2YoKX1pZih0eXBl
b2YgYUQ9PSJudW1iZXIiKXthRD1RW2FEXX1pZih0eXBlb2YgYUI9PSJudW1iZXIiKXthQj1hRC5k
YXRhW2FCXX12YXIgYUM9YWwoYUQsYUIpO2lmKGFDIT0tMSl7YWIuc3BsaWNlKGFDLDEpO2YoKX19
ZnVuY3Rpb24gYWwoYUQsYUUpe2Zvcih2YXIgYUI9MDthQjxhYi5sZW5ndGg7KythQil7dmFyIGFD
PWFiW2FCXTtpZihhQy5zZXJpZXM9PWFEJiZhQy5wb2ludFswXT09YUVbMF0mJmFDLnBvaW50WzFd
PT1hRVsxXSl7cmV0dXJuIGFCfX1yZXR1cm4gLTF9ZnVuY3Rpb24gYXkoYUUsYUQpe3ZhciBhQz1h
RFswXSxhST1hRFsxXSxhSD1hRS54YXhpcyxhRz1hRS55YXhpcztpZihhQzxhSC5taW58fGFDPmFI
Lm1heHx8YUk8YUcubWlufHxhST5hRy5tYXgpe3JldHVybn12YXIgYUY9YUUucG9pbnRzLnJhZGl1
cythRS5wb2ludHMubGluZVdpZHRoLzI7QS5saW5lV2lkdGg9YUY7QS5zdHJva2VTdHlsZT1jLmNv
bG9yLnBhcnNlKGFFLmNvbG9yKS5zY2FsZSgiYSIsMC41KS50b1N0cmluZygpO3ZhciBhQj0xLjUq
YUYsYUM9YUgucDJjKGFDKSxhST1hRy5wMmMoYUkpO0EuYmVnaW5QYXRoKCk7aWYoYUUucG9pbnRz
LnN5bWJvbD09ImNpcmNsZSIpe0EuYXJjKGFDLGFJLGFCLDAsMipNYXRoLlBJLGZhbHNlKX1lbHNl
e2FFLnBvaW50cy5zeW1ib2woQSxhQyxhSSxhQixmYWxzZSl9QS5jbG9zZVBhdGgoKTtBLnN0cm9r
ZSgpfWZ1bmN0aW9uIHYoYUUsYUIpe0EubGluZVdpZHRoPWFFLmJhcnMubGluZVdpZHRoO0Euc3Ry
b2tlU3R5bGU9Yy5jb2xvci5wYXJzZShhRS5jb2xvcikuc2NhbGUoImEiLDAuNSkudG9TdHJpbmco
KTt2YXIgYUQ9Yy5jb2xvci5wYXJzZShhRS5jb2xvcikuc2NhbGUoImEiLDAuNSkudG9TdHJpbmco
KTt2YXIgYUM9YUUuYmFycy5hbGlnbj09ImxlZnQiPzA6LWFFLmJhcnMuYmFyV2lkdGgvMjtFKGFC
WzBdLGFCWzFdLGFCWzJdfHwwLGFDLGFDK2FFLmJhcnMuYmFyV2lkdGgsMCxmdW5jdGlvbigpe3Jl
dHVybiBhRH0sYUUueGF4aXMsYUUueWF4aXMsQSxhRS5iYXJzLmhvcml6b250YWwsYUUuYmFycy5s
aW5lV2lkdGgpfWZ1bmN0aW9uIGFtKGFKLGFCLGFILGFDKXtpZih0eXBlb2YgYUo9PSJzdHJpbmci
KXtyZXR1cm4gYUp9ZWxzZXt2YXIgYUk9SC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLGFILDAsYUIp
O2Zvcih2YXIgYUU9MCxhRD1hSi5jb2xvcnMubGVuZ3RoO2FFPGFEOysrYUUpe3ZhciBhRj1hSi5j
b2xvcnNbYUVdO2lmKHR5cGVvZiBhRiE9InN0cmluZyIpe3ZhciBhRz1jLmNvbG9yLnBhcnNlKGFD
KTtpZihhRi5icmlnaHRuZXNzIT1udWxsKXthRz1hRy5zY2FsZSgicmdiIixhRi5icmlnaHRuZXNz
KX1pZihhRi5vcGFjaXR5IT1udWxsKXthRy5hKj1hRi5vcGFjaXR5fWFGPWFHLnRvU3RyaW5nKCl9
YUkuYWRkQ29sb3JTdG9wKGFFLyhhRC0xKSxhRil9cmV0dXJuIGFJfX19Yy5wbG90PWZ1bmN0aW9u
KGcsZSxkKXt2YXIgZj1uZXcgYihjKGcpLGUsZCxjLnBsb3QucGx1Z2lucyk7cmV0dXJuIGZ9O2Mu
cGxvdC52ZXJzaW9uPSIwLjciO2MucGxvdC5wbHVnaW5zPVtdO2MucGxvdC5mb3JtYXREYXRlPWZ1
bmN0aW9uKGwsZixoKXt2YXIgbz1mdW5jdGlvbihkKXtkPSIiK2Q7cmV0dXJuIGQubGVuZ3RoPT0x
PyIwIitkOmR9O3ZhciBlPVtdO3ZhciBwPWZhbHNlLGo9ZmFsc2U7dmFyIG49bC5nZXRVVENIb3Vy
cygpO3ZhciBrPW48MTI7aWYoaD09bnVsbCl7aD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1h
eSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfWlmKGYuc2VhcmNo
KC8lcHwlUC8pIT0tMSl7aWYobj4xMil7bj1uLTEyfWVsc2V7aWYobj09MCl7bj0xMn19fWZvcih2
YXIgZz0wO2c8Zi5sZW5ndGg7KytnKXt2YXIgbT1mLmNoYXJBdChnKTtpZihwKXtzd2l0Y2gobSl7
Y2FzZSJoIjptPSIiK247YnJlYWs7Y2FzZSJIIjptPW8obik7YnJlYWs7Y2FzZSJNIjptPW8obC5n
ZXRVVENNaW51dGVzKCkpO2JyZWFrO2Nhc2UiUyI6bT1vKGwuZ2V0VVRDU2Vjb25kcygpKTticmVh
aztjYXNlImQiOm09IiIrbC5nZXRVVENEYXRlKCk7YnJlYWs7Y2FzZSJtIjptPSIiKyhsLmdldFVU
Q01vbnRoKCkrMSk7YnJlYWs7Y2FzZSJ5IjptPSIiK2wuZ2V0VVRDRnVsbFllYXIoKTticmVhaztj
YXNlImIiOm09IiIraFtsLmdldFVUQ01vbnRoKCldO2JyZWFrO2Nhc2UicCI6bT0oayk/KCJhbSIp
OigicG0iKTticmVhaztjYXNlIlAiOm09KGspPygiQU0iKTooIlBNIik7YnJlYWs7Y2FzZSIwIjpt
PSIiO2o9dHJ1ZTticmVha31pZihtJiZqKXttPW8obSk7aj1mYWxzZX1lLnB1c2gobSk7aWYoIWop
e3A9ZmFsc2V9fWVsc2V7aWYobT09IiUiKXtwPXRydWV9ZWxzZXtlLnB1c2gobSl9fX1yZXR1cm4g
ZS5qb2luKCIiKX07ZnVuY3Rpb24gYShlLGQpe3JldHVybiBkKk1hdGguZmxvb3IoZS9kKX19KShq
UXVlcnkpOwpfEA90ZXh0L2phdmFzY3JpcHTUBhAHCBscHR5fEFRmaWxlOi8vL1VzZXJzL3l1c3Vr
ZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRl
ci5taW4uanNPEQJOYnBsaXN0MDDUAQIDBAUGNTZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVy
VCR0b3ASAAGGoKsHCB8lJi0XLi8wMVUkbnVsbNsJCgsMDQ4PEBESExQVFhcYGRobHB0eUiQzViRj
bGFzc1IkNlIkMVIkOVIkNFIkN1IkMlIkNVIkMFIkOIACgAqABxAAgAmABYAAEAeABhAIgAjTIAoh
GiMkV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEFRmaWxlOi8vL1VzZXJzL3l1c3VrZS9kZXYv
V2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4u
anPSJygpKlokY2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoissVU5TVVJMWE5TT2JqZWN0I0G5w2vo
pFyrXxAPdGV4dC9qYXZhc2NyaXB0EUCII3/v////////0icoMjNdTlNVUkxSZXNwb25zZaI0LF1O
U1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0Tc4XxATV2ViUmVzb3VyY2VSZXNwb25zZYAB
AAgAEQAaACMALQAyADcAQwBJAGAAYwBqAG0AcABzAHYAeQB8AH8AggCFAIcAiQCLAI0AjwCRAJMA
lQCXAJkAmwCiAKoAtgC4ALoAvAETARgBIwEsATIBNQE7AUQBTQFfAWIBawFwAX4BgQGPAaEBpAG6
AAAAAAAAAgEAAAAAAAAAOQAAAAAAAAAAAAAAAAAAAbxPEUCICihmdW5jdGlvbigkKXskLmV4dGVu
ZCh7dGFibGVzb3J0ZXI6bmV3CmZ1bmN0aW9uKCl7dmFyIHBhcnNlcnM9W10sd2lkZ2V0cz1bXTt0
aGlzLmRlZmF1bHRzPXtjc3NIZWFkZXI6ImhlYWRlciIsY3NzQXNjOiJoZWFkZXJTb3J0VXAiLGNz
c0Rlc2M6ImhlYWRlclNvcnREb3duIixjc3NDaGlsZFJvdzoiZXhwYW5kLWNoaWxkIixzb3J0SW5p
dGlhbE9yZGVyOiJhc2MiLHNvcnRNdWx0aVNvcnRLZXk6InNoaWZ0S2V5Iixzb3J0Rm9yY2U6bnVs
bCxzb3J0QXBwZW5kOm51bGwsc29ydExvY2FsZUNvbXBhcmU6dHJ1ZSx0ZXh0RXh0cmFjdGlvbjoi
c2ltcGxlIixwYXJzZXJzOnt9LHdpZGdldHM6W10sd2lkZ2V0WmVicmE6e2NzczpbImV2ZW4iLCJv
ZGQiXX0saGVhZGVyczp7fSx3aWR0aEZpeGVkOmZhbHNlLGNhbmNlbFNlbGVjdGlvbjp0cnVlLHNv
cnRMaXN0OltdLGhlYWRlckxpc3Q6W10sZGF0ZUZvcm1hdDoidXMiLGRlY2ltYWw6Jy9cLnxcLC9n
JyxvblJlbmRlckhlYWRlcjpudWxsLHNlbGVjdG9ySGVhZGVyczondGhlYWQgdGgnLGRlYnVnOmZh
bHNlfTtmdW5jdGlvbiBiZW5jaG1hcmsocyxkKXtsb2cocysiLCIrKG5ldyBEYXRlKCkuZ2V0VGlt
ZSgpLWQuZ2V0VGltZSgpKSsibXMiKTt9dGhpcy5iZW5jaG1hcms9YmVuY2htYXJrO2Z1bmN0aW9u
IGxvZyhzKXtpZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCImJnR5cGVvZiBjb25zb2xlLmRl
YnVnIT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2cocyk7fWVsc2V7YWxlcnQocyk7fX1mdW5jdGlv
biBidWlsZFBhcnNlckNhY2hlKHRhYmxlLCRoZWFkZXJzKXtpZih0YWJsZS5jb25maWcuZGVidWcp
e3ZhciBwYXJzZXJzRGVidWc9IiI7fWlmKHRhYmxlLnRCb2RpZXMubGVuZ3RoPT0wKXJldHVybjt2
YXIgcm93cz10YWJsZS50Qm9kaWVzWzBdLnJvd3M7aWYocm93c1swXSl7dmFyIGxpc3Q9W10sY2Vs
bHM9cm93c1swXS5jZWxscyxsPWNlbGxzLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXt2YXIg
cD1mYWxzZTtpZigkLm1ldGFkYXRhJiYoJCgkaGVhZGVyc1tpXSkubWV0YWRhdGEoKSYmJCgkaGVh
ZGVyc1tpXSkubWV0YWRhdGEoKS5zb3J0ZXIpKXtwPWdldFBhcnNlckJ5SWQoJCgkaGVhZGVyc1tp
XSkubWV0YWRhdGEoKS5zb3J0ZXIpO31lbHNlIGlmKCh0YWJsZS5jb25maWcuaGVhZGVyc1tpXSYm
dGFibGUuY29uZmlnLmhlYWRlcnNbaV0uc29ydGVyKSl7cD1nZXRQYXJzZXJCeUlkKHRhYmxlLmNv
bmZpZy5oZWFkZXJzW2ldLnNvcnRlcik7fWlmKCFwKXtwPWRldGVjdFBhcnNlckZvckNvbHVtbih0
YWJsZSxyb3dzLC0xLGkpO31pZih0YWJsZS5jb25maWcuZGVidWcpe3BhcnNlcnNEZWJ1Zys9ImNv
bHVtbjoiK2krIiBwYXJzZXI6IitwLmlkKyJcbiI7fWxpc3QucHVzaChwKTt9fWlmKHRhYmxlLmNv
bmZpZy5kZWJ1Zyl7bG9nKHBhcnNlcnNEZWJ1Zyk7fXJldHVybiBsaXN0O307ZnVuY3Rpb24gZGV0
ZWN0UGFyc2VyRm9yQ29sdW1uKHRhYmxlLHJvd3Mscm93SW5kZXgsY2VsbEluZGV4KXt2YXIgbD1w
YXJzZXJzLmxlbmd0aCxub2RlPWZhbHNlLG5vZGVWYWx1ZT1mYWxzZSxrZWVwTG9va2luZz10cnVl
O3doaWxlKG5vZGVWYWx1ZT09JycmJmtlZXBMb29raW5nKXtyb3dJbmRleCsrO2lmKHJvd3Nbcm93
SW5kZXhdKXtub2RlPWdldE5vZGVGcm9tUm93QW5kQ2VsbEluZGV4KHJvd3Mscm93SW5kZXgsY2Vs
bEluZGV4KTtub2RlVmFsdWU9dHJpbUFuZEdldE5vZGVUZXh0KHRhYmxlLmNvbmZpZyxub2RlKTtp
Zih0YWJsZS5jb25maWcuZGVidWcpe2xvZygnQ2hlY2tpbmcgaWYgdmFsdWUgd2FzIGVtcHR5IG9u
IHJvdzonK3Jvd0luZGV4KTt9fWVsc2V7a2VlcExvb2tpbmc9ZmFsc2U7fX1mb3IodmFyIGk9MTtp
PGw7aSsrKXtpZihwYXJzZXJzW2ldLmlzKG5vZGVWYWx1ZSx0YWJsZSxub2RlKSl7cmV0dXJuIHBh
cnNlcnNbaV07fX1yZXR1cm4gcGFyc2Vyc1swXTt9ZnVuY3Rpb24gZ2V0Tm9kZUZyb21Sb3dBbmRD
ZWxsSW5kZXgocm93cyxyb3dJbmRleCxjZWxsSW5kZXgpe3JldHVybiByb3dzW3Jvd0luZGV4XS5j
ZWxsc1tjZWxsSW5kZXhdO31mdW5jdGlvbiB0cmltQW5kR2V0Tm9kZVRleHQoY29uZmlnLG5vZGUp
e3JldHVybiAkLnRyaW0oZ2V0RWxlbWVudFRleHQoY29uZmlnLG5vZGUpKTt9ZnVuY3Rpb24gZ2V0
UGFyc2VyQnlJZChuYW1lKXt2YXIgbD1wYXJzZXJzLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsr
KXtpZihwYXJzZXJzW2ldLmlkLnRvTG93ZXJDYXNlKCk9PW5hbWUudG9Mb3dlckNhc2UoKSl7cmV0
dXJuIHBhcnNlcnNbaV07fX1yZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIGJ1aWxkQ2FjaGUodGFibGUp
e2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7dmFyIGNhY2hlVGltZT1uZXcgRGF0ZSgpO312YXIgdG90
YWxSb3dzPSh0YWJsZS50Qm9kaWVzWzBdJiZ0YWJsZS50Qm9kaWVzWzBdLnJvd3MubGVuZ3RoKXx8
MCx0b3RhbENlbGxzPSh0YWJsZS50Qm9kaWVzWzBdLnJvd3NbMF0mJnRhYmxlLnRCb2RpZXNbMF0u
cm93c1swXS5jZWxscy5sZW5ndGgpfHwwLHBhcnNlcnM9dGFibGUuY29uZmlnLnBhcnNlcnMsY2Fj
aGU9e3JvdzpbXSxub3JtYWxpemVkOltdfTtmb3IodmFyIGk9MDtpPHRvdGFsUm93czsrK2kpe3Zh
ciBjPSQodGFibGUudEJvZGllc1swXS5yb3dzW2ldKSxjb2xzPVtdO2lmKGMuaGFzQ2xhc3ModGFi
bGUuY29uZmlnLmNzc0NoaWxkUm93KSl7Y2FjaGUucm93W2NhY2hlLnJvdy5sZW5ndGgtMV09Y2Fj
aGUucm93W2NhY2hlLnJvdy5sZW5ndGgtMV0uYWRkKGMpO2NvbnRpbnVlO31jYWNoZS5yb3cucHVz
aChjKTtmb3IodmFyIGo9MDtqPHRvdGFsQ2VsbHM7KytqKXtjb2xzLnB1c2gocGFyc2Vyc1tqXS5m
b3JtYXQoZ2V0RWxlbWVudFRleHQodGFibGUuY29uZmlnLGNbMF0uY2VsbHNbal0pLHRhYmxlLGNb
MF0uY2VsbHNbal0pKTt9Y29scy5wdXNoKGNhY2hlLm5vcm1hbGl6ZWQubGVuZ3RoKTtjYWNoZS5u
b3JtYWxpemVkLnB1c2goY29scyk7Y29scz1udWxsO307aWYodGFibGUuY29uZmlnLmRlYnVnKXti
ZW5jaG1hcmsoIkJ1aWxkaW5nIGNhY2hlIGZvciAiK3RvdGFsUm93cysiIHJvd3M6IixjYWNoZVRp
bWUpO31yZXR1cm4gY2FjaGU7fTtmdW5jdGlvbiBnZXRFbGVtZW50VGV4dChjb25maWcsbm9kZSl7
dmFyIHRleHQ9IiI7aWYoIW5vZGUpcmV0dXJuIiI7aWYoIWNvbmZpZy5zdXBwb3J0c1RleHRDb250
ZW50KWNvbmZpZy5zdXBwb3J0c1RleHRDb250ZW50PW5vZGUudGV4dENvbnRlbnR8fGZhbHNlO2lm
KGNvbmZpZy50ZXh0RXh0cmFjdGlvbj09InNpbXBsZSIpe2lmKGNvbmZpZy5zdXBwb3J0c1RleHRD
b250ZW50KXt0ZXh0PW5vZGUudGV4dENvbnRlbnQ7fWVsc2V7aWYobm9kZS5jaGlsZE5vZGVzWzBd
JiZub2RlLmNoaWxkTm9kZXNbMF0uaGFzQ2hpbGROb2RlcygpKXt0ZXh0PW5vZGUuY2hpbGROb2Rl
c1swXS5pbm5lckhUTUw7fWVsc2V7dGV4dD1ub2RlLmlubmVySFRNTDt9fX1lbHNle2lmKHR5cGVv
Zihjb25maWcudGV4dEV4dHJhY3Rpb24pPT0iZnVuY3Rpb24iKXt0ZXh0PWNvbmZpZy50ZXh0RXh0
cmFjdGlvbihub2RlKTt9ZWxzZXt0ZXh0PSQobm9kZSkudGV4dCgpO319cmV0dXJuIHRleHQ7fWZ1
bmN0aW9uIGFwcGVuZFRvVGFibGUodGFibGUsY2FjaGUpe2lmKHRhYmxlLmNvbmZpZy5kZWJ1Zyl7
dmFyIGFwcGVuZFRpbWU9bmV3IERhdGUoKX12YXIgYz1jYWNoZSxyPWMucm93LG49Yy5ub3JtYWxp
emVkLHRvdGFsUm93cz1uLmxlbmd0aCxjaGVja0NlbGw9KG5bMF0ubGVuZ3RoLTEpLHRhYmxlQm9k
eT0kKHRhYmxlLnRCb2RpZXNbMF0pLHJvd3M9W107Zm9yKHZhciBpPTA7aTx0b3RhbFJvd3M7aSsr
KXt2YXIgcG9zPW5baV1bY2hlY2tDZWxsXTtyb3dzLnB1c2gocltwb3NdKTtpZighdGFibGUuY29u
ZmlnLmFwcGVuZGVyKXt2YXIgbD1yW3Bvc10ubGVuZ3RoO2Zvcih2YXIgaj0wO2o8bDtqKyspe3Rh
YmxlQm9keVswXS5hcHBlbmRDaGlsZChyW3Bvc11bal0pO319fWlmKHRhYmxlLmNvbmZpZy5hcHBl
bmRlcil7dGFibGUuY29uZmlnLmFwcGVuZGVyKHRhYmxlLHJvd3MpO31yb3dzPW51bGw7aWYodGFi
bGUuY29uZmlnLmRlYnVnKXtiZW5jaG1hcmsoIlJlYnVpbHQgdGFibGU6IixhcHBlbmRUaW1lKTt9
YXBwbHlXaWRnZXQodGFibGUpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXskKHRhYmxlKS50cmlnZ2Vy
KCJzb3J0RW5kIik7fSwwKTt9O2Z1bmN0aW9uIGJ1aWxkSGVhZGVycyh0YWJsZSl7aWYodGFibGUu
Y29uZmlnLmRlYnVnKXt2YXIgdGltZT1uZXcgRGF0ZSgpO312YXIgbWV0YT0oJC5tZXRhZGF0YSk/
dHJ1ZTpmYWxzZTt2YXIgaGVhZGVyX2luZGV4PWNvbXB1dGVUYWJsZUhlYWRlckNlbGxJbmRleGVz
KHRhYmxlKTskdGFibGVIZWFkZXJzPSQodGFibGUuY29uZmlnLnNlbGVjdG9ySGVhZGVycyx0YWJs
ZSkuZWFjaChmdW5jdGlvbihpbmRleCl7dGhpcy5jb2x1bW49aGVhZGVyX2luZGV4W3RoaXMucGFy
ZW50Tm9kZS5yb3dJbmRleCsiLSIrdGhpcy5jZWxsSW5kZXhdO3RoaXMub3JkZXI9Zm9ybWF0U29y
dGluZ09yZGVyKHRhYmxlLmNvbmZpZy5zb3J0SW5pdGlhbE9yZGVyKTt0aGlzLmNvdW50PXRoaXMu
b3JkZXI7aWYoY2hlY2tIZWFkZXJNZXRhZGF0YSh0aGlzKXx8Y2hlY2tIZWFkZXJPcHRpb25zKHRh
YmxlLGluZGV4KSl0aGlzLnNvcnREaXNhYmxlZD10cnVlO2lmKGNoZWNrSGVhZGVyT3B0aW9uc1Nv
cnRpbmdMb2NrZWQodGFibGUsaW5kZXgpKXRoaXMub3JkZXI9dGhpcy5sb2NrZWRPcmRlcj1jaGVj
a0hlYWRlck9wdGlvbnNTb3J0aW5nTG9ja2VkKHRhYmxlLGluZGV4KTtpZighdGhpcy5zb3J0RGlz
YWJsZWQpe3ZhciAkdGg9JCh0aGlzKS5hZGRDbGFzcyh0YWJsZS5jb25maWcuY3NzSGVhZGVyKTtp
Zih0YWJsZS5jb25maWcub25SZW5kZXJIZWFkZXIpdGFibGUuY29uZmlnLm9uUmVuZGVySGVhZGVy
LmFwcGx5KCR0aCk7fXRhYmxlLmNvbmZpZy5oZWFkZXJMaXN0W2luZGV4XT10aGlzO30pO2lmKHRh
YmxlLmNvbmZpZy5kZWJ1Zyl7YmVuY2htYXJrKCJCdWlsdCBoZWFkZXJzOiIsdGltZSk7bG9nKCR0
YWJsZUhlYWRlcnMpO31yZXR1cm4gJHRhYmxlSGVhZGVyczt9O2Z1bmN0aW9uIGNvbXB1dGVUYWJs
ZUhlYWRlckNlbGxJbmRleGVzKHQpe3ZhciBtYXRyaXg9W107dmFyIGxvb2t1cD17fTt2YXIgdGhl
YWQ9dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnVEhFQUQnKVswXTt2YXIgdHJzPXRoZWFkLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdUUicpO2Zvcih2YXIgaT0wO2k8dHJzLmxlbmd0aDtpKyspe3ZhciBj
ZWxscz10cnNbaV0uY2VsbHM7Zm9yKHZhciBqPTA7ajxjZWxscy5sZW5ndGg7aisrKXt2YXIgYz1j
ZWxsc1tqXTt2YXIgcm93SW5kZXg9Yy5wYXJlbnROb2RlLnJvd0luZGV4O3ZhciBjZWxsSWQ9cm93
SW5kZXgrIi0iK2MuY2VsbEluZGV4O3ZhciByb3dTcGFuPWMucm93U3Bhbnx8MTt2YXIgY29sU3Bh
bj1jLmNvbFNwYW58fDEKdmFyIGZpcnN0QXZhaWxDb2w7aWYodHlwZW9mKG1hdHJpeFtyb3dJbmRl
eF0pPT0idW5kZWZpbmVkIil7bWF0cml4W3Jvd0luZGV4XT1bXTt9Zm9yKHZhciBrPTA7azxtYXRy
aXhbcm93SW5kZXhdLmxlbmd0aCsxO2srKyl7aWYodHlwZW9mKG1hdHJpeFtyb3dJbmRleF1ba10p
PT0idW5kZWZpbmVkIil7Zmlyc3RBdmFpbENvbD1rO2JyZWFrO319bG9va3VwW2NlbGxJZF09Zmly
c3RBdmFpbENvbDtmb3IodmFyIGs9cm93SW5kZXg7azxyb3dJbmRleCtyb3dTcGFuO2srKyl7aWYo
dHlwZW9mKG1hdHJpeFtrXSk9PSJ1bmRlZmluZWQiKXttYXRyaXhba109W107fXZhciBtYXRyaXhy
b3c9bWF0cml4W2tdO2Zvcih2YXIgbD1maXJzdEF2YWlsQ29sO2w8Zmlyc3RBdmFpbENvbCtjb2xT
cGFuO2wrKyl7bWF0cml4cm93W2xdPSJ4Ijt9fX19cmV0dXJuIGxvb2t1cDt9ZnVuY3Rpb24gY2hl
Y2tDZWxsQ29sU3Bhbih0YWJsZSxyb3dzLHJvdyl7dmFyIGFycj1bXSxyPXRhYmxlLnRIZWFkLnJv
d3MsYz1yW3Jvd10uY2VsbHM7Zm9yKHZhciBpPTA7aTxjLmxlbmd0aDtpKyspe3ZhciBjZWxsPWNb
aV07aWYoY2VsbC5jb2xTcGFuPjEpe2Fycj1hcnIuY29uY2F0KGNoZWNrQ2VsbENvbFNwYW4odGFi
bGUsaGVhZGVyQXJyLHJvdysrKSk7fWVsc2V7aWYodGFibGUudEhlYWQubGVuZ3RoPT0xfHwoY2Vs
bC5yb3dTcGFuPjF8fCFyW3JvdysxXSkpe2Fyci5wdXNoKGNlbGwpO319fXJldHVybiBhcnI7fTtm
dW5jdGlvbiBjaGVja0hlYWRlck1ldGFkYXRhKGNlbGwpe2lmKCgkLm1ldGFkYXRhKSYmKCQoY2Vs
bCkubWV0YWRhdGEoKS5zb3J0ZXI9PT1mYWxzZSkpe3JldHVybiB0cnVlO307cmV0dXJuIGZhbHNl
O31mdW5jdGlvbiBjaGVja0hlYWRlck9wdGlvbnModGFibGUsaSl7aWYoKHRhYmxlLmNvbmZpZy5o
ZWFkZXJzW2ldKSYmKHRhYmxlLmNvbmZpZy5oZWFkZXJzW2ldLnNvcnRlcj09PWZhbHNlKSl7cmV0
dXJuIHRydWU7fTtyZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIGNoZWNrSGVhZGVyT3B0aW9uc1NvcnRp
bmdMb2NrZWQodGFibGUsaSl7aWYoKHRhYmxlLmNvbmZpZy5oZWFkZXJzW2ldKSYmKHRhYmxlLmNv
bmZpZy5oZWFkZXJzW2ldLmxvY2tlZE9yZGVyKSlyZXR1cm4gdGFibGUuY29uZmlnLmhlYWRlcnNb
aV0ubG9ja2VkT3JkZXI7cmV0dXJuIGZhbHNlO31mdW5jdGlvbiBhcHBseVdpZGdldCh0YWJsZSl7
dmFyIGM9dGFibGUuY29uZmlnLndpZGdldHM7dmFyIGw9Yy5sZW5ndGg7Zm9yKHZhciBpPTA7aTxs
O2krKyl7Z2V0V2lkZ2V0QnlJZChjW2ldKS5mb3JtYXQodGFibGUpO319ZnVuY3Rpb24gZ2V0V2lk
Z2V0QnlJZChuYW1lKXt2YXIgbD13aWRnZXRzLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXtp
Zih3aWRnZXRzW2ldLmlkLnRvTG93ZXJDYXNlKCk9PW5hbWUudG9Mb3dlckNhc2UoKSl7cmV0dXJu
IHdpZGdldHNbaV07fX19O2Z1bmN0aW9uIGZvcm1hdFNvcnRpbmdPcmRlcih2KXtpZih0eXBlb2Yo
dikhPSJOdW1iZXIiKXtyZXR1cm4odi50b0xvd2VyQ2FzZSgpPT0iZGVzYyIpPzE6MDt9ZWxzZXty
ZXR1cm4odj09MSk/MTowO319ZnVuY3Rpb24gaXNWYWx1ZUluQXJyYXkodixhKXt2YXIgbD1hLmxl
bmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXtpZihhW2ldWzBdPT12KXtyZXR1cm4gdHJ1ZTt9fXJl
dHVybiBmYWxzZTt9ZnVuY3Rpb24gc2V0SGVhZGVyc0Nzcyh0YWJsZSwkaGVhZGVycyxsaXN0LGNz
cyl7JGhlYWRlcnMucmVtb3ZlQ2xhc3MoY3NzWzBdKS5yZW1vdmVDbGFzcyhjc3NbMV0pO3ZhciBo
PVtdOyRoZWFkZXJzLmVhY2goZnVuY3Rpb24ob2Zmc2V0KXtpZighdGhpcy5zb3J0RGlzYWJsZWQp
e2hbdGhpcy5jb2x1bW5dPSQodGhpcyk7fX0pO3ZhciBsPWxpc3QubGVuZ3RoO2Zvcih2YXIgaT0w
O2k8bDtpKyspe2hbbGlzdFtpXVswXV0uYWRkQ2xhc3MoY3NzW2xpc3RbaV1bMV1dKTt9fWZ1bmN0
aW9uIGZpeENvbHVtbldpZHRoKHRhYmxlLCRoZWFkZXJzKXt2YXIgYz10YWJsZS5jb25maWc7aWYo
Yy53aWR0aEZpeGVkKXt2YXIgY29sZ3JvdXA9JCgnPGNvbGdyb3VwPicpOyQoInRyOmZpcnN0IHRk
Iix0YWJsZS50Qm9kaWVzWzBdKS5lYWNoKGZ1bmN0aW9uKCl7Y29sZ3JvdXAuYXBwZW5kKCQoJzxj
b2w+JykuY3NzKCd3aWR0aCcsJCh0aGlzKS53aWR0aCgpKSk7fSk7JCh0YWJsZSkucHJlcGVuZChj
b2xncm91cCk7fTt9ZnVuY3Rpb24gdXBkYXRlSGVhZGVyU29ydENvdW50KHRhYmxlLHNvcnRMaXN0
KXt2YXIgYz10YWJsZS5jb25maWcsbD1zb3J0TGlzdC5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2kr
Kyl7dmFyIHM9c29ydExpc3RbaV0sbz1jLmhlYWRlckxpc3Rbc1swXV07by5jb3VudD1zWzFdO28u
Y291bnQrKzt9fWZ1bmN0aW9uIG11bHRpc29ydCh0YWJsZSxzb3J0TGlzdCxjYWNoZSl7aWYodGFi
bGUuY29uZmlnLmRlYnVnKXt2YXIgc29ydFRpbWU9bmV3IERhdGUoKTt9dmFyIGR5bmFtaWNFeHA9
InZhciBzb3J0V3JhcHBlciA9IGZ1bmN0aW9uKGEsYikgeyIsbD1zb3J0TGlzdC5sZW5ndGg7Zm9y
KHZhciBpPTA7aTxsO2krKyl7dmFyIGM9c29ydExpc3RbaV1bMF07dmFyIG9yZGVyPXNvcnRMaXN0
W2ldWzFdO3ZhciBzPSh0YWJsZS5jb25maWcucGFyc2Vyc1tjXS50eXBlPT0idGV4dCIpPygob3Jk
ZXI9PTApP21ha2VTb3J0RnVuY3Rpb24oInRleHQiLCJhc2MiLGMpOm1ha2VTb3J0RnVuY3Rpb24o
InRleHQiLCJkZXNjIixjKSk6KChvcmRlcj09MCk/bWFrZVNvcnRGdW5jdGlvbigibnVtZXJpYyIs
ImFzYyIsYyk6bWFrZVNvcnRGdW5jdGlvbigibnVtZXJpYyIsImRlc2MiLGMpKTt2YXIgZT0iZSIr
aTtkeW5hbWljRXhwKz0idmFyICIrZSsiID0gIitzO2R5bmFtaWNFeHArPSJpZigiK2UrIikgeyBy
ZXR1cm4gIitlKyI7IH0gIjtkeW5hbWljRXhwKz0iZWxzZSB7ICI7fXZhciBvcmdPcmRlckNvbD1j
YWNoZS5ub3JtYWxpemVkWzBdLmxlbmd0aC0xO2R5bmFtaWNFeHArPSJyZXR1cm4gYVsiK29yZ09y
ZGVyQ29sKyJdLWJbIitvcmdPcmRlckNvbCsiXTsiO2Zvcih2YXIgaT0wO2k8bDtpKyspe2R5bmFt
aWNFeHArPSJ9OyAiO31keW5hbWljRXhwKz0icmV0dXJuIDA7ICI7ZHluYW1pY0V4cCs9In07ICI7
aWYodGFibGUuY29uZmlnLmRlYnVnKXtiZW5jaG1hcmsoIkV2YWxpbmcgZXhwcmVzc2lvbjoiK2R5
bmFtaWNFeHAsbmV3IERhdGUoKSk7fWV2YWwoZHluYW1pY0V4cCk7Y2FjaGUubm9ybWFsaXplZC5z
b3J0KHNvcnRXcmFwcGVyKTtpZih0YWJsZS5jb25maWcuZGVidWcpe2JlbmNobWFyaygiU29ydGlu
ZyBvbiAiK3NvcnRMaXN0LnRvU3RyaW5nKCkrIiBhbmQgZGlyICIrb3JkZXIrIiB0aW1lOiIsc29y
dFRpbWUpO31yZXR1cm4gY2FjaGU7fTtmdW5jdGlvbiBtYWtlU29ydEZ1bmN0aW9uKHR5cGUsZGly
ZWN0aW9uLGluZGV4KXt2YXIgYT0iYVsiK2luZGV4KyJdIixiPSJiWyIraW5kZXgrIl0iO2lmKHR5
cGU9PSd0ZXh0JyYmZGlyZWN0aW9uPT0nYXNjJyl7cmV0dXJuIigiK2ErIiA9PSAiK2IrIiA/IDAg
OiAoIithKyIgPT09IG51bGwgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiAoIitiKyIgPT09
IG51bGwgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgOiAoIithKyIgPCAiK2IrIikgPyAtMSA6
IDEgKSkpOyI7fWVsc2UgaWYodHlwZT09J3RleHQnJiZkaXJlY3Rpb249PSdkZXNjJyl7cmV0dXJu
IigiK2ErIiA9PSAiK2IrIiA/IDAgOiAoIithKyIgPT09IG51bGwgPyBOdW1iZXIuUE9TSVRJVkVf
SU5GSU5JVFkgOiAoIitiKyIgPT09IG51bGwgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgOiAo
IitiKyIgPCAiK2ErIikgPyAtMSA6IDEgKSkpOyI7fWVsc2UgaWYodHlwZT09J251bWVyaWMnJiZk
aXJlY3Rpb249PSdhc2MnKXtyZXR1cm4iKCIrYSsiID09PSBudWxsICYmICIrYisiID09PSBudWxs
KSA/IDAgOigiK2ErIiA9PT0gbnVsbCA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6ICgiK2Ir
IiA9PT0gbnVsbCA/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA6ICIrYSsiIC0gIitiKyIpKTsi
O31lbHNlIGlmKHR5cGU9PSdudW1lcmljJyYmZGlyZWN0aW9uPT0nZGVzYycpe3JldHVybiIoIith
KyIgPT09IG51bGwgJiYgIitiKyIgPT09IG51bGwpID8gMCA6KCIrYSsiID09PSBudWxsID8gTnVt
YmVyLlBPU0lUSVZFX0lORklOSVRZIDogKCIrYisiID09PSBudWxsID8gTnVtYmVyLk5FR0FUSVZF
X0lORklOSVRZIDogIitiKyIgLSAiK2ErIikpOyI7fX07ZnVuY3Rpb24gbWFrZVNvcnRUZXh0KGkp
e3JldHVybiIoKGFbIitpKyJdIDwgYlsiK2krIl0pID8gLTEgOiAoKGFbIitpKyJdID4gYlsiK2kr
Il0pID8gMSA6IDApKTsiO307ZnVuY3Rpb24gbWFrZVNvcnRUZXh0RGVzYyhpKXtyZXR1cm4iKChi
WyIraSsiXSA8IGFbIitpKyJdKSA/IC0xIDogKChiWyIraSsiXSA+IGFbIitpKyJdKSA/IDEgOiAw
KSk7Ijt9O2Z1bmN0aW9uIG1ha2VTb3J0TnVtZXJpYyhpKXtyZXR1cm4iYVsiK2krIl0tYlsiK2kr
Il07Ijt9O2Z1bmN0aW9uIG1ha2VTb3J0TnVtZXJpY0Rlc2MoaSl7cmV0dXJuImJbIitpKyJdLWFb
IitpKyJdOyI7fTtmdW5jdGlvbiBzb3J0VGV4dChhLGIpe2lmKHRhYmxlLmNvbmZpZy5zb3J0TG9j
YWxlQ29tcGFyZSlyZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpO3JldHVybigoYTxiKT8tMTooKGE+
Yik/MTowKSk7fTtmdW5jdGlvbiBzb3J0VGV4dERlc2MoYSxiKXtpZih0YWJsZS5jb25maWcuc29y
dExvY2FsZUNvbXBhcmUpcmV0dXJuIGIubG9jYWxlQ29tcGFyZShhKTtyZXR1cm4oKGI8YSk/LTE6
KChiPmEpPzE6MCkpO307ZnVuY3Rpb24gc29ydE51bWVyaWMoYSxiKXtyZXR1cm4gYS1iO307ZnVu
Y3Rpb24gc29ydE51bWVyaWNEZXNjKGEsYil7cmV0dXJuIGItYTt9O2Z1bmN0aW9uIGdldENhY2hl
ZFNvcnRUeXBlKHBhcnNlcnMsaSl7cmV0dXJuIHBhcnNlcnNbaV0udHlwZTt9O3RoaXMuY29uc3Ry
dWN0PWZ1bmN0aW9uKHNldHRpbmdzKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoIXRo
aXMudEhlYWR8fCF0aGlzLnRCb2RpZXMpcmV0dXJuO3ZhciAkdGhpcywkZG9jdW1lbnQsJGhlYWRl
cnMsY2FjaGUsY29uZmlnLHNoaWZ0RG93bj0wLHNvcnRPcmRlcjt0aGlzLmNvbmZpZz17fTtjb25m
aWc9JC5leHRlbmQodGhpcy5jb25maWcsJC50YWJsZXNvcnRlci5kZWZhdWx0cyxzZXR0aW5ncyk7
JHRoaXM9JCh0aGlzKTskLmRhdGEodGhpcywidGFibGVzb3J0ZXIiLGNvbmZpZyk7JGhlYWRlcnM9
YnVpbGRIZWFkZXJzKHRoaXMpO3RoaXMuY29uZmlnLnBhcnNlcnM9YnVpbGRQYXJzZXJDYWNoZSh0
aGlzLCRoZWFkZXJzKTtjYWNoZT1idWlsZENhY2hlKHRoaXMpO3ZhciBzb3J0Q1NTPVtjb25maWcu
Y3NzRGVzYyxjb25maWcuY3NzQXNjXTtmaXhDb2x1bW5XaWR0aCh0aGlzKTskaGVhZGVycy5jbGlj
ayhmdW5jdGlvbihlKXt2YXIgdG90YWxSb3dzPSgkdGhpc1swXS50Qm9kaWVzWzBdJiYkdGhpc1sw
XS50Qm9kaWVzWzBdLnJvd3MubGVuZ3RoKXx8MDtpZighdGhpcy5zb3J0RGlzYWJsZWQmJnRvdGFs
Um93cz4wKXskdGhpcy50cmlnZ2VyKCJzb3J0U3RhcnQiKTt2YXIgJGNlbGw9JCh0aGlzKTt2YXIg
aT10aGlzLmNvbHVtbjt0aGlzLm9yZGVyPXRoaXMuY291bnQrKyUyO2lmKHRoaXMubG9ja2VkT3Jk
ZXIpdGhpcy5vcmRlcj10aGlzLmxvY2tlZE9yZGVyO2lmKCFlW2NvbmZpZy5zb3J0TXVsdGlTb3J0
S2V5XSl7Y29uZmlnLnNvcnRMaXN0PVtdO2lmKGNvbmZpZy5zb3J0Rm9yY2UhPW51bGwpe3ZhciBh
PWNvbmZpZy5zb3J0Rm9yY2U7Zm9yKHZhciBqPTA7ajxhLmxlbmd0aDtqKyspe2lmKGFbal1bMF0h
PWkpe2NvbmZpZy5zb3J0TGlzdC5wdXNoKGFbal0pO319fWNvbmZpZy5zb3J0TGlzdC5wdXNoKFtp
LHRoaXMub3JkZXJdKTt9ZWxzZXtpZihpc1ZhbHVlSW5BcnJheShpLGNvbmZpZy5zb3J0TGlzdCkp
e2Zvcih2YXIgaj0wO2o8Y29uZmlnLnNvcnRMaXN0Lmxlbmd0aDtqKyspe3ZhciBzPWNvbmZpZy5z
b3J0TGlzdFtqXSxvPWNvbmZpZy5oZWFkZXJMaXN0W3NbMF1dO2lmKHNbMF09PWkpe28uY291bnQ9
c1sxXTtvLmNvdW50Kys7c1sxXT1vLmNvdW50JTI7fX19ZWxzZXtjb25maWcuc29ydExpc3QucHVz
aChbaSx0aGlzLm9yZGVyXSk7fX07c2V0VGltZW91dChmdW5jdGlvbigpe3NldEhlYWRlcnNDc3Mo
JHRoaXNbMF0sJGhlYWRlcnMsY29uZmlnLnNvcnRMaXN0LHNvcnRDU1MpO2FwcGVuZFRvVGFibGUo
JHRoaXNbMF0sbXVsdGlzb3J0KCR0aGlzWzBdLGNvbmZpZy5zb3J0TGlzdCxjYWNoZSkpO30sMSk7
cmV0dXJuIGZhbHNlO319KS5tb3VzZWRvd24oZnVuY3Rpb24oKXtpZihjb25maWcuY2FuY2VsU2Vs
ZWN0aW9uKXt0aGlzLm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9O3JldHVy
biBmYWxzZTt9fSk7JHRoaXMuYmluZCgidXBkYXRlIixmdW5jdGlvbigpe3ZhciBtZT10aGlzO3Nl
dFRpbWVvdXQoZnVuY3Rpb24oKXttZS5jb25maWcucGFyc2Vycz1idWlsZFBhcnNlckNhY2hlKG1l
LCRoZWFkZXJzKTtjYWNoZT1idWlsZENhY2hlKG1lKTt9LDEpO30pLmJpbmQoInVwZGF0ZUNlbGwi
LGZ1bmN0aW9uKGUsY2VsbCl7dmFyIGNvbmZpZz10aGlzLmNvbmZpZzt2YXIgcG9zPVsoY2VsbC5w
YXJlbnROb2RlLnJvd0luZGV4LTEpLGNlbGwuY2VsbEluZGV4XTtjYWNoZS5ub3JtYWxpemVkW3Bv
c1swXV1bcG9zWzFdXT1jb25maWcucGFyc2Vyc1twb3NbMV1dLmZvcm1hdChnZXRFbGVtZW50VGV4
dChjb25maWcsY2VsbCksY2VsbCk7fSkuYmluZCgic29ydG9uIixmdW5jdGlvbihlLGxpc3QpeyQo
dGhpcykudHJpZ2dlcigic29ydFN0YXJ0Iik7Y29uZmlnLnNvcnRMaXN0PWxpc3Q7dmFyIHNvcnRM
aXN0PWNvbmZpZy5zb3J0TGlzdDt1cGRhdGVIZWFkZXJTb3J0Q291bnQodGhpcyxzb3J0TGlzdCk7
c2V0SGVhZGVyc0Nzcyh0aGlzLCRoZWFkZXJzLHNvcnRMaXN0LHNvcnRDU1MpO2FwcGVuZFRvVGFi
bGUodGhpcyxtdWx0aXNvcnQodGhpcyxzb3J0TGlzdCxjYWNoZSkpO30pLmJpbmQoImFwcGVuZENh
Y2hlIixmdW5jdGlvbigpe2FwcGVuZFRvVGFibGUodGhpcyxjYWNoZSk7fSkuYmluZCgiYXBwbHlX
aWRnZXRJZCIsZnVuY3Rpb24oZSxpZCl7Z2V0V2lkZ2V0QnlJZChpZCkuZm9ybWF0KHRoaXMpO30p
LmJpbmQoImFwcGx5V2lkZ2V0cyIsZnVuY3Rpb24oKXthcHBseVdpZGdldCh0aGlzKTt9KTtpZigk
Lm1ldGFkYXRhJiYoJCh0aGlzKS5tZXRhZGF0YSgpJiYkKHRoaXMpLm1ldGFkYXRhKCkuc29ydGxp
c3QpKXtjb25maWcuc29ydExpc3Q9JCh0aGlzKS5tZXRhZGF0YSgpLnNvcnRsaXN0O31pZihjb25m
aWcuc29ydExpc3QubGVuZ3RoPjApeyR0aGlzLnRyaWdnZXIoInNvcnRvbiIsW2NvbmZpZy5zb3J0
TGlzdF0pO31hcHBseVdpZGdldCh0aGlzKTt9KTt9O3RoaXMuYWRkUGFyc2VyPWZ1bmN0aW9uKHBh
cnNlcil7dmFyIGw9cGFyc2Vycy5sZW5ndGgsYT10cnVlO2Zvcih2YXIgaT0wO2k8bDtpKyspe2lm
KHBhcnNlcnNbaV0uaWQudG9Mb3dlckNhc2UoKT09cGFyc2VyLmlkLnRvTG93ZXJDYXNlKCkpe2E9
ZmFsc2U7fX1pZihhKXtwYXJzZXJzLnB1c2gocGFyc2VyKTt9O307dGhpcy5hZGRXaWRnZXQ9ZnVu
Y3Rpb24od2lkZ2V0KXt3aWRnZXRzLnB1c2god2lkZ2V0KTt9O3RoaXMuZm9ybWF0RmxvYXQ9ZnVu
Y3Rpb24ocyl7dmFyIGk9cGFyc2VGbG9hdChzKTtyZXR1cm4oaXNOYU4oaSkpPzA6aTt9O3RoaXMu
Zm9ybWF0SW50PWZ1bmN0aW9uKHMpe3ZhciBpPXBhcnNlSW50KHMpO3JldHVybihpc05hTihpKSk/
MDppO307dGhpcy5pc0RpZ2l0PWZ1bmN0aW9uKHMsY29uZmlnKXtyZXR1cm4vXlstK10/XGQqJC8u
dGVzdCgkLnRyaW0ocy5yZXBsYWNlKC9bLC4nXS9nLCcnKSkpO307dGhpcy5jbGVhclRhYmxlQm9k
eT1mdW5jdGlvbih0YWJsZSl7aWYoJC5icm93c2VyLm1zaWUpe2Z1bmN0aW9uIGVtcHR5KCl7d2hp
bGUodGhpcy5maXJzdENoaWxkKXRoaXMucmVtb3ZlQ2hpbGQodGhpcy5maXJzdENoaWxkKTt9ZW1w
dHkuYXBwbHkodGFibGUudEJvZGllc1swXSk7fWVsc2V7dGFibGUudEJvZGllc1swXS5pbm5lckhU
TUw9IiI7fX07fX0pOyQuZm4uZXh0ZW5kKHt0YWJsZXNvcnRlcjokLnRhYmxlc29ydGVyLmNvbnN0
cnVjdH0pO3ZhciB0cz0kLnRhYmxlc29ydGVyO3RzLmFkZFBhcnNlcih7aWQ6InRleHQiLGlzOmZ1
bmN0aW9uKHMpe3JldHVybiB0cnVlO30sZm9ybWF0OmZ1bmN0aW9uKHMpe3JldHVybiAkLnRyaW0o
cy50b0xvY2FsZUxvd2VyQ2FzZSgpKTt9LHR5cGU6InRleHQifSk7dHMuYWRkUGFyc2VyKHtpZDoi
ZGlnaXQiLGlzOmZ1bmN0aW9uKHMsdGFibGUpe3ZhciBjPXRhYmxlLmNvbmZpZztyZXR1cm4gJC50
YWJsZXNvcnRlci5pc0RpZ2l0KHMsYyk7fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7cmV0dXJuICQudGFi
bGVzb3J0ZXIuZm9ybWF0RmxvYXQocyk7fSx0eXBlOiJudW1lcmljIn0pO3RzLmFkZFBhcnNlcih7
aWQ6ImN1cnJlbmN5IixpczpmdW5jdGlvbihzKXtyZXR1cm4vXlvCoyTigqw/Ll0vLnRlc3Qocyk7
fSxmb3JtYXQ6ZnVuY3Rpb24ocyl7cmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQocy5y
ZXBsYWNlKG5ldyBSZWdFeHAoL1vCoyTigqxdL2cpLCIiKSk7fSx0eXBlOiJudW1lcmljIn0pO3Rz
LmFkZFBhcnNlcih7aWQ6ImlwQWRkcmVzcyIsaXM6ZnVuY3Rpb24ocyl7cmV0dXJuL15cZHsyLDN9
W1wuXVxkezIsM31bXC5dXGR7MiwzfVtcLl1cZHsyLDN9JC8udGVzdChzKTt9LGZvcm1hdDpmdW5j
dGlvbihzKXt2YXIgYT1zLnNwbGl0KCIuIikscj0iIixsPWEubGVuZ3RoO2Zvcih2YXIgaT0wO2k8
bDtpKyspe3ZhciBpdGVtPWFbaV07aWYoaXRlbS5sZW5ndGg9PTIpe3IrPSIwIitpdGVtO31lbHNl
e3IrPWl0ZW07fX1yZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChyKTt9LHR5cGU6Im51
bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoidXJsIixpczpmdW5jdGlvbihzKXtyZXR1cm4vXiho
dHRwcz98ZnRwfGZpbGUpOlwvXC8kLy50ZXN0KHMpO30sZm9ybWF0OmZ1bmN0aW9uKHMpe3JldHVy
biBqUXVlcnkudHJpbShzLnJlcGxhY2UobmV3IFJlZ0V4cCgvKGh0dHBzP3xmdHB8ZmlsZSk6XC9c
Ly8pLCcnKSk7fSx0eXBlOiJ0ZXh0In0pO3RzLmFkZFBhcnNlcih7aWQ6Imlzb0RhdGUiLGlzOmZ1
bmN0aW9uKHMpe3JldHVybi9eXGR7NH1bXC8tXVxkezEsMn1bXC8tXVxkezEsMn0kLy50ZXN0KHMp
O30sZm9ybWF0OmZ1bmN0aW9uKHMpe3JldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KChz
IT0iIik/bmV3IERhdGUocy5yZXBsYWNlKG5ldyBSZWdFeHAoLy0vZyksIi8iKSkuZ2V0VGltZSgp
OiIwIik7fSx0eXBlOiJudW1lcmljIn0pO3RzLmFkZFBhcnNlcih7aWQ6InBlcmNlbnQiLGlzOmZ1
bmN0aW9uKHMpe3JldHVybi9cJSQvLnRlc3QoJC50cmltKHMpKTt9LGZvcm1hdDpmdW5jdGlvbihz
KXtyZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChzLnJlcGxhY2UobmV3IFJlZ0V4cCgv
JS9nKSwiIikpO30sdHlwZToibnVtZXJpYyJ9KTt0cy5hZGRQYXJzZXIoe2lkOiJ1c0xvbmdEYXRl
IixpczpmdW5jdGlvbihzKXtyZXR1cm4gcy5tYXRjaChuZXcgUmVnRXhwKC9eW0EtWmEtel17Mywx
MH1cLj8gWzAtOV17MSwyfSwgKFswLTldezR9fCc/WzAtOV17Mn0pICgoWzAtMl0/WzAtOV06WzAt
NV1bMC05XSl8KFswLTFdP1swLTldOlswLTVdWzAtOV1ccyhBTXxQTSkpKSQvKSk7fSxmb3JtYXQ6
ZnVuY3Rpb24ocyl7cmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQobmV3IERhdGUocyku
Z2V0VGltZSgpKTt9LHR5cGU6Im51bWVyaWMifSk7dHMuYWRkUGFyc2VyKHtpZDoic2hvcnREYXRl
IixpczpmdW5jdGlvbihzKXtyZXR1cm4vXGR7MSwyfVtcL1wtXVxkezEsMn1bXC9cLV1cZHsyLDR9
Ly50ZXN0KHMpO30sZm9ybWF0OmZ1bmN0aW9uKHMsdGFibGUpe3ZhciBjPXRhYmxlLmNvbmZpZztz
PXMucmVwbGFjZSgvXC0vZywiLyIpO2lmKGMuZGF0ZUZvcm1hdD09InVzIil7cz1zLnJlcGxhY2Uo
LyhcZHsxLDJ9KVtcL1wtXShcZHsxLDJ9KVtcL1wtXShcZHs0fSkvLCIkMy8kMS8kMiIpO31lbHNl
IGlmKGMuZGF0ZUZvcm1hdD09InVrIil7cz1zLnJlcGxhY2UoLyhcZHsxLDJ9KVtcL1wtXShcZHsx
LDJ9KVtcL1wtXShcZHs0fSkvLCIkMy8kMi8kMSIpO31lbHNlIGlmKGMuZGF0ZUZvcm1hdD09ImRk
L21tL3l5Inx8Yy5kYXRlRm9ybWF0PT0iZGQtbW0teXkiKXtzPXMucmVwbGFjZSgvKFxkezEsMn0p
W1wvXC1dKFxkezEsMn0pW1wvXC1dKFxkezJ9KS8sIiQxLyQyLyQzIik7fXJldHVybiAkLnRhYmxl
c29ydGVyLmZvcm1hdEZsb2F0KG5ldyBEYXRlKHMpLmdldFRpbWUoKSk7fSx0eXBlOiJudW1lcmlj
In0pO3RzLmFkZFBhcnNlcih7aWQ6InRpbWUiLGlzOmZ1bmN0aW9uKHMpe3JldHVybi9eKChbMC0y
XT9bMC05XTpbMC01XVswLTldKXwoWzAtMV0/WzAtOV06WzAtNV1bMC05XVxzKGFtfHBtKSkpJC8u
dGVzdChzKTt9LGZvcm1hdDpmdW5jdGlvbihzKXtyZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRG
bG9hdChuZXcgRGF0ZSgiMjAwMC8wMS8wMSAiK3MpLmdldFRpbWUoKSk7fSx0eXBlOiJudW1lcmlj
In0pO3RzLmFkZFBhcnNlcih7aWQ6Im1ldGFkYXRhIixpczpmdW5jdGlvbihzKXtyZXR1cm4gZmFs
c2U7fSxmb3JtYXQ6ZnVuY3Rpb24ocyx0YWJsZSxjZWxsKXt2YXIgYz10YWJsZS5jb25maWcscD0o
IWMucGFyc2VyTWV0YWRhdGFOYW1lKT8nc29ydFZhbHVlJzpjLnBhcnNlck1ldGFkYXRhTmFtZTty
ZXR1cm4gJChjZWxsKS5tZXRhZGF0YSgpW3BdO30sdHlwZToibnVtZXJpYyJ9KTt0cy5hZGRXaWRn
ZXQoe2lkOiJ6ZWJyYSIsZm9ybWF0OmZ1bmN0aW9uKHRhYmxlKXtpZih0YWJsZS5jb25maWcuZGVi
dWcpe3ZhciB0aW1lPW5ldyBEYXRlKCk7fXZhciAkdHIscm93PS0xLG9kZDskKCJ0cjp2aXNpYmxl
Iix0YWJsZS50Qm9kaWVzWzBdKS5lYWNoKGZ1bmN0aW9uKGkpeyR0cj0kKHRoaXMpO2lmKCEkdHIu
aGFzQ2xhc3ModGFibGUuY29uZmlnLmNzc0NoaWxkUm93KSlyb3crKztvZGQ9KHJvdyUyPT0wKTsk
dHIucmVtb3ZlQ2xhc3ModGFibGUuY29uZmlnLndpZGdldFplYnJhLmNzc1tvZGQ/MDoxXSkuYWRk
Q2xhc3ModGFibGUuY29uZmlnLndpZGdldFplYnJhLmNzc1tvZGQ/MTowXSl9KTtpZih0YWJsZS5j
b25maWcuZGVidWcpeyQudGFibGVzb3J0ZXIuYmVuY2htYXJrKCJBcHBseWluZyBaZWJyYSB3aWRn
ZXQiLHRpbWUpO319fSk7fSkoalF1ZXJ5KTtfEA90ZXh0L2phdmFzY3JpcHTUBhAHCCAhIiNfEEhm
aWxlOi8vL1VzZXJzL3l1c3VrZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2Vz
L3N0YXRpc3RpY3MuanNPEQJCYnBsaXN0MDDUAQIDBAUGNTZYJHZlcnNpb25YJG9iamVjdHNZJGFy
Y2hpdmVyVCR0b3ASAAGGoKsHCB8lJi0XLi8wMVUkbnVsbNsJCgsMDQ4PEBESExQVFhcYGRobHB0e
UiQzViRjbGFzc1IkNlIkMVIkOVIkNFIkN1IkMlIkNVIkMFIkOIACgAqABxAAgAmABYAAEAeABhAI
gAjTIAohGiMkV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEEhmaWxlOi8vL1VzZXJzL3l1c3Vr
ZS9kZXYvV2ViS2l0L1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanPSJygp
KlokY2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoissVU5TVVJMWE5TT2JqZWN0I0G5w2vopGYKXxAP
dGV4dC9qYXZhc2NyaXB0ESL5I3/v////////0icoMjNdTlNVUkxSZXNwb25zZaI0LF1OU1VSTFJl
c3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0Tc4XxATV2ViUmVzb3VyY2VSZXNwb25zZYABAAgAEQAa
ACMALQAyADcAQwBJAGAAYwBqAG0AcABzAHYAeQB8AH8AggCFAIcAiQCLAI0AjwCRAJMAlQCXAJkA
mwCiAKoAtgC4ALoAvAEHAQwBFwEgASYBKQEvATgBQQFTAVYBXwFkAXIBdQGDAZUBmAGuAAAAAAAA
AgEAAAAAAAAAOQAAAAAAAAAAAAAAAAAAAbBPESL5LyoKICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwog
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgogKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgogKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAqLwoKdmFyIFN0YXRpc3RpY3MgPSBuZXcgKGZ1bmN0aW9uICgp
IHsKCiAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsKICAgICAgICByZXR1cm4gTWF0
aC5tYXguYXBwbHkoTWF0aCwgdmFsdWVzKTsKICAgIH0KCiAgICB0aGlzLm1pbiA9IGZ1bmN0aW9u
ICh2YWx1ZXMpIHsKICAgICAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCwgdmFsdWVzKTsK
ICAgIH0KCiAgICB0aGlzLnN1bSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsKICAgICAgICByZXR1cm4g
dmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSArIGI7IH0sIDApOwogICAg
fQoKICAgIHRoaXMuc3F1YXJlU3VtID0gZnVuY3Rpb24gKHZhbHVlcykgewogICAgICAgIHJldHVy
biB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIHZhbHVlKSB7IHJldHVybiBzdW0gKyB2YWx1
ZSAqIHZhbHVlO30sIDApOwogICAgfQoKICAgIC8vIFdpdGggc3VtIGFuZCBzdW0gb2Ygc3F1YXJl
cywgd2UgY2FuIGNvbXB1dGUgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gTygxKS4K
ICAgIC8vIFNlZSBodHRwczovL3JuaXdhLmNvbS8yMDEyLTExLTEwL3NhbXBsZS1zdGFuZGFyZC1k
ZXZpYXRpb24taW4tdGVybXMtb2Ytc3VtLWFuZC1zcXVhcmUtc3VtLW9mLXNhbXBsZXMvCiAgICB0
aGlzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uID0gZnVuY3Rpb24gKG51bWJlck9mU2FtcGxlcywg
c3VtLCBzcXVhcmVTdW0pIHsKICAgICAgICBpZiAobnVtYmVyT2ZTYW1wbGVzIDwgMikKICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgcmV0dXJuIE1hdGguc3FydChzcXVhcmVTdW0gLyAobnVt
YmVyT2ZTYW1wbGVzIC0gMSkKICAgICAgICAgICAgLSBzdW0gKiBzdW0gLyAobnVtYmVyT2ZTYW1w
bGVzIC0gMSkgLyBudW1iZXJPZlNhbXBsZXMpOwogICAgfQoKICAgIHRoaXMuc3VwcG9ydGVkQ29u
ZmlkZW5jZUxldmVscyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgc3VwcG9ydGVkTGV2ZWxz
ID0gW107CiAgICAgICAgZm9yICh2YXIgcXVhbnRpbGUgaW4gdERpc3RyaWJ1dGlvbkludmVyc2VD
REYpCiAgICAgICAgICAgIHN1cHBvcnRlZExldmVscy5wdXNoKCgxIC0gKDEgLSBxdWFudGlsZSkg
KiAyKS50b0ZpeGVkKDIpKTsKICAgICAgICByZXR1cm4gc3VwcG9ydGVkTGV2ZWxzOwogICAgfQoK
ICAgIC8vIENvbXB1dGVzIHRoZSBkZWx0YSBkIHMudC4gKG1lYW4gLSBkLCBtZWFuICsgZCkgaXMg
dGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZGVuY2UgbGV2
ZWwgaW4gTygxKS4KICAgIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEgPSBmdW5jdGlvbiAo
Y29uZmlkZW5jZUxldmVsLCBudW1iZXJPZlNhbXBsZXMsIHN1bSwgc3F1YXJlU3VtKSB7CiAgICAg
ICAgdmFyIHByb2JhYmlsaXR5ID0gKDEgLSAoMSAtIGNvbmZpZGVuY2VMZXZlbCkgLyAyKTsKICAg
ICAgICBpZiAoIShwcm9iYWJpbGl0eSBpbiB0RGlzdHJpYnV0aW9uSW52ZXJzZUNERikpIHsKICAg
ICAgICAgICAgdGhyb3cgJ1dlIG9ubHkgc3VwcG9ydCAnICsgdGhpcy5zdXBwb3J0ZWRDb25maWRl
bmNlTGV2ZWxzKCkubWFwKAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKGxldmVsKSB7IHJldHVy
biBsZXZlbCAqIDEwMCArICclJzsgfSApLmpvaW4oJywgJykgKyAnIGNvbmZpZGVuY2UgaW50ZXJ2
YWxzLic7CiAgICAgICAgfQogICAgICAgIGlmIChudW1iZXJPZlNhbXBsZXMgLSAyIDwgMCkKICAg
ICAgICAgICAgcmV0dXJuIE5hTjsKCiAgICAgICAgdmFyIGNkZkZvclByb2JhYmlsaXR5ID0gdERp
c3RyaWJ1dGlvbkludmVyc2VDREZbcHJvYmFiaWxpdHldOwogICAgICAgIHZhciBkZWdyZWVzT2ZG
cmVlZG9tID0gbnVtYmVyT2ZTYW1wbGVzIC0gMTsKICAgICAgICBpZiAoZGVncmVlc09mRnJlZWRv
bSA+IGNkZkZvclByb2JhYmlsaXR5Lmxlbmd0aCkKICAgICAgICAgICAgdGhyb3cgJ1dlIG9ubHkg
c3VwcG9ydCB1cCB0byAnICsgZGVsdGFzLmxlbmd0aCArICcgZGVncmVlcyBvZiBmcmVlZG9tJzsK
CiAgICAgICAgLy8gdERpc3RyaWJ1dGlvblF1YW50aWxlKGRlZ3JlZXNPZkZyZWVkb20sIGNvbmZp
ZGVuY2VMZXZlbCkgKiBzYW1wbGVTdGFuZGFyZERldmlhdGlvbiAvIHNxcnQobnVtYmVyT2ZTYW1w
bGVzKSAqIFMvc3FydChudW1iZXJPZlNhbXBsZXMpCiAgICAgICAgdmFyIHF1YW50aWxlID0gY2Rm
Rm9yUHJvYmFiaWxpdHlbZGVncmVlc09mRnJlZWRvbSAtIDFdOyAvLyBUaGUgZmlyc3QgZW50cnkg
aXMgZm9yIHRoZSBvbmUgZGVncmVlIG9mIGZyZWVkb20uCiAgICAgICAgcmV0dXJuIHF1YW50aWxl
ICogdGhpcy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbihudW1iZXJPZlNhbXBsZXMsIHN1bSwgc3F1
YXJlU3VtKSAvIE1hdGguc3FydChudW1iZXJPZlNhbXBsZXMpOwogICAgfQoKICAgIHRoaXMuY29u
ZmlkZW5jZUludGVydmFsID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvYmFiaWxpdHkpIHsKICAgICAg
ICB2YXIgc3VtID0gdGhpcy5zdW0odmFsdWVzKTsKICAgICAgICB2YXIgbWVhbiA9IHN1bSAvIHZh
bHVlcy5sZW5ndGg7CiAgICAgICAgdmFyIGRlbHRhID0gdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YShwcm9iYWJpbGl0eSB8fCAwLjk1LCB2YWx1ZXMubGVuZ3RoLCBzdW0sIHRoaXMuc3F1YXJl
U3VtKHZhbHVlcykpOwogICAgICAgIHJldHVybiBbbWVhbiAtIGRlbHRhLCBtZWFuICsgZGVsdGFd
OwogICAgfQoKICAgIC8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0dWRlbnQn
c190LWRpc3RyaWJ1dGlvbiNUYWJsZV9vZl9zZWxlY3RlZF92YWx1ZXMKICAgIC8vIFRoaXMgdGFi
bGUgY29udGFpbnMgb25lIHNpZGVkIChhLmsuYS4gdGFpbCkgdmFsdWVzLgogICAgdmFyIHREaXN0
cmlidXRpb25JbnZlcnNlQ0RGID0gewogICAgICAgIDAuOTogWwogICAgICAgICAgICAzLjA3NzY4
NCwgMS44ODU2MTgsIDEuNjM3NzQ0LCAxLjUzMzIwNiwgMS40NzU4ODQsIDEuNDM5NzU2LCAxLjQx
NDkyNCwgMS4zOTY4MTUsIDEuMzgzMDI5LCAxLjM3MjE4NCwKICAgICAgICAgICAgMS4zNjM0MzAs
IDEuMzU2MjE3LCAxLjM1MDE3MSwgMS4zNDUwMzAsIDEuMzQwNjA2LCAxLjMzNjc1NywgMS4zMzMz
NzksIDEuMzMwMzkxLCAxLjMyNzcyOCwgMS4zMjUzNDEsCiAgICAgICAgICAgIDEuMzIzMTg4LCAx
LjMyMTIzNywgMS4zMTk0NjAsIDEuMzE3ODM2LCAxLjMxNjM0NSwgMS4zMTQ5NzIsIDEuMzEzNzAz
LCAxLjMxMjUyNywgMS4zMTE0MzQsIDEuMzEwNDE1LAogICAgICAgICAgICAxLjMwOTQ2NCwgMS4z
MDg1NzMsIDEuMzA3NzM3LCAxLjMwNjk1MiwgMS4zMDYyMTIsIDEuMzA1NTE0LCAxLjMwNDg1NCwg
MS4zMDQyMzAsIDEuMzAzNjM5LCAxLjMwMzA3NywKICAgICAgICAgICAgMS4zMDI1NDMsIDEuMzAy
MDM1LCAxLjMwMTU1MiwgMS4zMDEwOTAsIDEuMzAwNjQ5LCAxLjMwMDIyOCwgMS4yOTk4MjUsIDEu
Mjk5NDM5LCAxLjI5OTA2OSwgMS4yOTg3MTQsCgogICAgICAgICAgICAxLjI5ODM3MywgMS4yOTgw
NDUsIDEuMjk3NzMwLCAxLjI5NzQyNiwgMS4yOTcxMzQsIDEuMjk2ODUzLCAxLjI5NjU4MSwgMS4y
OTYzMTksIDEuMjk2MDY2LCAxLjI5NTgyMSwKICAgICAgICAgICAgMS4yOTU1ODUsIDEuMjk1MzU2
LCAxLjI5NTEzNCwgMS4yOTQ5MjAsIDEuMjk0NzEyLCAxLjI5NDUxMSwgMS4yOTQzMTUsIDEuMjk0
MTI2LCAxLjI5Mzk0MiwgMS4yOTM3NjMsCiAgICAgICAgICAgIDEuMjkzNTg5LCAxLjI5MzQyMSwg
MS4yOTMyNTYsIDEuMjkzMDk3LCAxLjI5Mjk0MSwgMS4yOTI3OTAsIDEuMjkyNjQzLCAxLjI5MjUw
MCwgMS4yOTIzNjAsIDEuMjkyMjI0LAogICAgICAgICAgICAxLjI5MjA5MSwgMS4yOTE5NjEsIDEu
MjkxODM1LCAxLjI5MTcxMSwgMS4yOTE1OTEsIDEuMjkxNDczLCAxLjI5MTM1OCwgMS4yOTEyNDYs
IDEuMjkxMTM2LCAxLjI5MTAyOSwKICAgICAgICAgICAgMS4yOTA5MjQsIDEuMjkwODIxLCAxLjI5
MDcyMSwgMS4yOTA2MjMsIDEuMjkwNTI3LCAxLjI5MDQzMiwgMS4yOTAzNDAsIDEuMjkwMjUwLCAx
LjI5MDE2MSwgMS4yOTAwNzVdLAogICAgICAgIDAuOTU6IFsKICAgICAgICAgICAgNi4zMTM3NTIs
IDIuOTE5OTg2LCAyLjM1MzM2MywgMi4xMzE4NDcsIDIuMDE1MDQ4LCAxLjk0MzE4MCwgMS44OTQ1
NzksIDEuODU5NTQ4LCAxLjgzMzExMywgMS44MTI0NjEsCiAgICAgICAgICAgIDEuNzk1ODg1LCAx
Ljc4MjI4OCwgMS43NzA5MzMsIDEuNzYxMzEwLCAxLjc1MzA1MCwgMS43NDU4ODQsIDEuNzM5NjA3
LCAxLjczNDA2NCwgMS43MjkxMzMsIDEuNzI0NzE4LAogICAgICAgICAgICAxLjcyMDc0MywgMS43
MTcxNDQsIDEuNzEzODcyLCAxLjcxMDg4MiwgMS43MDgxNDEsIDEuNzA1NjE4LCAxLjcwMzI4OCwg
MS43MDExMzEsIDEuNjk5MTI3LCAxLjY5NzI2MSwKICAgICAgICAgICAgMS42OTU1MTksIDEuNjkz
ODg5LCAxLjY5MjM2MCwgMS42OTA5MjQsIDEuNjg5NTcyLCAxLjY4ODI5OCwgMS42ODcwOTQsIDEu
Njg1OTU0LCAxLjY4NDg3NSwgMS42ODM4NTEsCiAgICAgICAgICAgIDEuNjgyODc4LCAxLjY4MTk1
MiwgMS42ODEwNzEsIDEuNjgwMjMwLCAxLjY3OTQyNywgMS42Nzg2NjAsIDEuNjc3OTI3LCAxLjY3
NzIyNCwgMS42NzY1NTEsIDEuNjc1OTA1LAoKICAgICAgICAgICAgMS42NzUyODUsIDEuNjc0Njg5
LCAxLjY3NDExNiwgMS42NzM1NjUsIDEuNjczMDM0LCAxLjY3MjUyMiwgMS42NzIwMjksIDEuNjcx
NTUzLCAxLjY3MTA5MywgMS42NzA2NDksCiAgICAgICAgICAgIDEuNjcwMjE5LCAxLjY2OTgwNCwg
MS42Njk0MDIsIDEuNjY5MDEzLCAxLjY2ODYzNiwgMS42NjgyNzEsIDEuNjY3OTE2LCAxLjY2NzU3
MiwgMS42NjcyMzksIDEuNjY2OTE0LAogICAgICAgICAgICAxLjY2NjYwMCwgMS42NjYyOTQsIDEu
NjY1OTk2LCAxLjY2NTcwNywgMS42NjU0MjUsIDEuNjY1MTUxLCAxLjY2NDg4NSwgMS42NjQ2MjUs
IDEuNjY0MzcxLCAxLjY2NDEyNSwKICAgICAgICAgICAgMS42NjM4ODQsIDEuNjYzNjQ5LCAxLjY2
MzQyMCwgMS42NjMxOTcsIDEuNjYyOTc4LCAxLjY2Mjc2NSwgMS42NjI1NTcsIDEuNjYyMzU0LCAx
LjY2MjE1NSwgMS42NjE5NjEsCiAgICAgICAgICAgIDEuNjYxNzcxLCAxLjY2MTU4NSwgMS42NjE0
MDQsIDEuNjYxMjI2LCAxLjY2MTA1MiwgMS42NjA4ODEsIDEuNjYwNzE1LCAxLjY2MDU1MSwgMS42
NjAzOTEsIDEuNjYwMjM0XSwKICAgICAgICAwLjk3NTogWwogICAgICAgICAgICAxMi43MDYyMDUs
IDQuMzAyNjUzLCAzLjE4MjQ0NiwgMi43NzY0NDUsIDIuNTcwNTgyLCAyLjQ0NjkxMiwgMi4zNjQ2
MjQsIDIuMzA2MDA0LCAyLjI2MjE1NywgMi4yMjgxMzksCiAgICAgICAgICAgIDIuMjAwOTg1LCAy
LjE3ODgxMywgMi4xNjAzNjksIDIuMTQ0Nzg3LCAyLjEzMTQ1MCwgMi4xMTk5MDUsIDIuMTA5ODE2
LCAyLjEwMDkyMiwgMi4wOTMwMjQsIDIuMDg1OTYzLAogICAgICAgICAgICAyLjA3OTYxNCwgMi4w
NzM4NzMsIDIuMDY4NjU4LCAyLjA2Mzg5OSwgMi4wNTk1MzksIDIuMDU1NTI5LCAyLjA1MTgzMSwg
Mi4wNDg0MDcsIDIuMDQ1MjMwLCAyLjA0MjI3MiwKICAgICAgICAgICAgMi4wMzk1MTMsIDIuMDM2
OTMzLCAyLjAzNDUxNSwgMi4wMzIyNDUsIDIuMDMwMTA4LCAyLjAyODA5NCwgMi4wMjYxOTIsIDIu
MDI0Mzk0LCAyLjAyMjY5MSwgMi4wMjEwNzUsCiAgICAgICAgICAgIDIuMDE5NTQxLCAyLjAxODA4
MiwgMi4wMTY2OTIsIDIuMDE1MzY4LCAyLjAxNDEwMywgMi4wMTI4OTYsIDIuMDExNzQxLCAyLjAx
MDYzNSwgMi4wMDk1NzUsIDIuMDA4NTU5LAoKICAgICAgICAgICAgMi4wMDc1ODQsIDIuMDA2NjQ3
LCAyLjAwNTc0NiwgMi4wMDQ4NzksIDIuMDA0MDQ1LCAyLjAwMzI0MSwgMi4wMDI0NjUsIDIuMDAx
NzE3LCAyLjAwMDk5NSwgMi4wMDAyOTgsCiAgICAgICAgICAgIDEuOTk5NjI0LCAxLjk5ODk3Miwg
MS45OTgzNDEsIDEuOTk3NzMwLCAxLjk5NzEzOCwgMS45OTY1NjQsIDEuOTk2MDA4LCAxLjk5NTQ2
OSwgMS45OTQ5NDUsIDEuOTk0NDM3LAogICAgICAgICAgICAxLjk5Mzk0MywgMS45OTM0NjQsIDEu
OTkyOTk3LCAxLjk5MjU0MywgMS45OTIxMDIsIDEuOTkxNjczLCAxLjk5MTI1NCwgMS45OTA4NDcs
IDEuOTkwNDUwLCAxLjk5MDA2MywKICAgICAgICAgICAgMS45ODk2ODYsIDEuOTg5MzE5LCAxLjk4
ODk2MCwgMS45ODg2MTAsIDEuOTg4MjY4LCAxLjk4NzkzNCwgMS45ODc2MDgsIDEuOTg3MjkwLCAx
Ljk4Njk3OSwgMS45ODY2NzUsCiAgICAgICAgICAgIDEuOTg2Mzc3LCAxLjk4NjA4NiwgMS45ODU4
MDIsIDEuOTg1NTIzLCAxLjk4NTI1MSwgMS45ODQ5ODQsIDEuOTg0NzIzLCAxLjk4NDQ2NywgMS45
ODQyMTcsIDEuOTgzOTcyXSwKICAgICAgICAwLjk5OiBbCiAgICAgICAgICAgIDMxLjgyMDUxNiwg
Ni45NjQ1NTcsIDQuNTQwNzAzLCAzLjc0Njk0NywgMy4zNjQ5MzAsIDMuMTQyNjY4LCAyLjk5Nzk1
MiwgMi44OTY0NTksIDIuODIxNDM4LCAyLjc2Mzc2OSwKICAgICAgICAgICAgMi43MTgwNzksIDIu
NjgwOTk4LCAyLjY1MDMwOSwgMi42MjQ0OTQsIDIuNjAyNDgwLCAyLjU4MzQ4NywgMi41NjY5MzQs
IDIuNTUyMzgwLCAyLjUzOTQ4MywgMi41Mjc5NzcsCiAgICAgICAgICAgIDIuNTE3NjQ4LCAyLjUw
ODMyNSwgMi40OTk4NjcsIDIuNDkyMTU5LCAyLjQ4NTEwNywgMi40Nzg2MzAsIDIuNDcyNjYwLCAy
LjQ2NzE0MCwgMi40NjIwMjEsIDIuNDU3MjYyLAogICAgICAgICAgICAyLjQ1MjgyNCwgMi40NDg2
NzgsIDIuNDQ0Nzk0LCAyLjQ0MTE1MCwgMi40Mzc3MjMsIDIuNDM0NDk0LCAyLjQzMTQ0NywgMi40
Mjg1NjgsIDIuNDI1ODQxLCAyLjQyMzI1NywKICAgICAgICAgICAgMi40MjA4MDMsIDIuNDE4NDcw
LCAyLjQxNjI1MCwgMi40MTQxMzQsIDIuNDEyMTE2LCAyLjQxMDE4OCwgMi40MDgzNDUsIDIuNDA2
NTgxLCAyLjQwNDg5MiwgMi40MDMyNzIsCgogICAgICAgICAgICAyLjQwMTcxOCwgMi40MDAyMjUs
IDIuMzk4NzkwLCAyLjM5NzQxMCwgMi4zOTYwODEsIDIuMzk0ODAxLCAyLjM5MzU2OCwgMi4zOTIz
NzcsIDIuMzkxMjI5LCAyLjM5MDExOSwKICAgICAgICAgICAgMi4zODkwNDcsIDIuMzg4MDExLCAy
LjM4NzAwOCwgMi4zODYwMzcsIDIuMzg1MDk3LCAyLjM4NDE4NiwgMi4zODMzMDIsIDIuMzgyNDQ2
LCAyLjM4MTYxNSwgMi4zODA4MDcsCiAgICAgICAgICAgIDIuMzgwMDI0LCAyLjM3OTI2MiwgMi4z
Nzg1MjIsIDIuMzc3ODAyLCAyLjM3NzEwMiwgMi4zNzY0MjAsIDIuMzc1NzU3LCAyLjM3NTExMSwg
Mi4zNzQ0ODIsIDIuMzczODY4LAogICAgICAgICAgICAyLjM3MzI3MCwgMi4zNzI2ODcsIDIuMzcy
MTE5LCAyLjM3MTU2NCwgMi4zNzEwMjIsIDIuMzcwNDkzLCAyLjM2OTk3NywgMi4zNjk0NzIsIDIu
MzY4OTc5LCAyLjM2ODQ5NywKICAgICAgICAgICAgMi4zNjgwMjYsIDIuMzY3NTY2LCAyLjM2NzEx
NSwgMi4zNjY2NzQsIDIuMzY2MjQzLCAyLjM2NTgyMSwgMi4zNjU0MDcsIDIuMzY1MDAyLCAyLjM2
NDYwNiwgMi4zNjQyMTddCiAgICB9OwoKfSkoKTsKCmlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRl
ZmluZWQnKSB7CiAgICBmb3IgKHZhciBrZXkgaW4gU3RhdGlzdGljcykKICAgICAgICBtb2R1bGUu
ZXhwb3J0c1trZXldID0gU3RhdGlzdGljc1trZXldOwp9Cl8QD3RleHQvamF2YXNjcmlwdAAAAAgA
AAANAAAAHwAAADEAAAA8AAAAWgAAAHEAAACAAAAAkgAAAKgAAACuAAAArwAAARIAASSUAAEkngAB
JKMAASSsAAEkwgABJScAASeJAAbwzgAG8OAABvDpAAbxOQAG84QAB4Y7AAeGTQAHhlYAB4atAAeI
/wAHyYsAB8mdAAfJpgAHyfEAB8w3AAfvNAAAAAAAAAQBAAAAAAAAACQAAAAAAAAAAAAAAAAAB+9G
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238040</attachid>
            <date>2014-09-12 11:32:53 -0700</date>
            <delta_ts>2014-09-12 14:48:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135255-20140913033301.patch</filename>
            <type>text/plain</type>
            <size>11111</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTI4NzNiYTJhZjBkN2I2
ZWY0OWU5ZDkzYjZlZmIwMDQ3ZjMxNzU3ZS4uYWNhZjhjNGNhYTU1MmJlYjk3ZTM2M2FlNGJiNWE2
MGFkNTg4NjQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE0LTA5LTEyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IEFw
cGx5IENTUyBKSVQgdG8gU2VsZWN0b3JRdWVyeSB3aXRoIG11bHRpcGxlIHNlbGVjdG9ycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MjU1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWZ0ZXIgZHJvcHBp
bmcgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGgsIERyb21hZW8gY3NzcXVlcnktanF1ZXJ5IHRlc3QK
KyAgICAgICAgcmVzdWx0IGJlY29tZXMgc2lnbmlmaWNhbnRseSB3b3JzZS4gNDAwLjI2L3MgdG8g
MzQ4LjE2L3MsIDEzJQorICAgICAgICBwZXJmb3JtYW5jZSByZWdyZXNzaW9uLgorCisgICAgICAg
IEludmVzdGlnYXRlZCB0aGUgY2F1c2Ugb2YgaXQgYW5kIHdlIGZvdW5kIHRoYXQgdGhlIHRlc3Qg
cmVzdWx0cyBmb3IKKyAgICAgICAgcXVlcnlTZWxlY3RvciB3aXRoIG11bHRpcGxlIHNlbGVjdG9y
cyBjYXVzZXMgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuCisKKyAgICAgICAgVG8gc29sdmUgdGhp
cywgd2UgYXR0ZW1wdCB0byBKSVQgY29tcGlsZSBhbGwgc2VsZWN0b3JzIGluIG11bHRpcGxlCisg
ICAgICAgIHNlbGVjdG9ycy4gQW5kIGlmIGNvbXBpbGluZyBzb21lIHNlbGVjdG9ycyBpcyBmYWls
ZWQsIFNlbGVjdG9yUXVlcnkKKyAgICAgICAgZmFsbGJhY2tzIHRvIHRoZSBzbG93ZXIgaW1wbGVt
ZW50YXRpb24uCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNl
LiBBZnRlciBhcHBseWluZyB0aGlzIHBhdGNoLAorICAgICAgICBjc3NxdWVyeS1qcXVlcnkgdGVz
dCByZXN1bHQgYmVjb21lcyA0MTguNzEvcywgNC42MSUgYmV0dGVyIHRoYW4gdGhlCisgICAgICAg
IHByZXZpb3VzIGdvb2QgcGVyZm9ybWFuY2UgY2FzZS4KKworICAgICAgICBUZXN0OiBmYXN0L3Nl
bGVjdG9ycy9xdWVyeVNlbGVjdG9yLW11bHRpcGxlLXNlbGVjdG9ycy5odG1sCisKKyAgICAgICAg
KiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFM
aXN0OjpTZWxlY3RvckRhdGFMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxp
c3Q6OmV4ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUpOgorICAgICAgICAqIGRvbS9TZWxlY3Rv
clF1ZXJ5Lmg6CisKIDIwMTQtMDktMTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE3MzQ0MSk6IFtHVEtdIEFsbCBidXR0
b25zIGFwcGVhciBpbnNlbnNpdGl2ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Nl
bGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCmlu
ZGV4IGM5ZGQ2MGU4ZjZjZmJhZDdiMzU2NGZlZGRhYjU1NGM5ZWU5YWE4YTQuLjAzYWE1NDIzYjEy
MjY2YTcwOTE1OWE1MGM2MDc1MmZlZWNhZmFiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JR
dWVyeS5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBzdGF0aWMgSWRNYXRjaGluZ1R5cGUgZmluZElk
TWF0Y2hpbmdUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBmaXJzdFNlbGVjdG9yKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIG1fbWF0Y2hUeXBlID0gTXVsdGlw
bGVTZWxlY3Rvck1hdGNoOworICAgICAgICBtX21hdGNoVHlwZSA9IENvbXBpbGFibGVNdWx0aXBs
ZVNlbGVjdG9yTWF0Y2g7CiB9CiAKIGlubGluZSBib29sIFNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVj
dG9yTWF0Y2hlcyhjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSwgRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUpIGNvbnN0CkBAIC0zODksNiArMzg5
LDM3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGls
ZWRTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDCiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0PgorQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0
YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKGNvbnN0IENvbnRh
aW5lck5vZGUmIHJvb3ROb2RlLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5
cGUmIG91dHB1dCkgY29uc3QKK3sKKyAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCBjaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsK
KyAgICBjaGVja2luZ0NvbnRleHQuc2NvcGUgPSByb290Tm9kZS5pc0RvY3VtZW50Tm9kZSgpID8g
bnVsbHB0ciA6ICZyb290Tm9kZTsKKyAgICB1bnNpZ25lZCBzZWxlY3RvckNvdW50ID0gbV9zZWxl
Y3RvcnMuc2l6ZSgpOworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50
cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzZWxlY3RvckNvdW50OyArK2kpIHsKKyNpZiBDU1NfU0VMRUNU
T1JfSklUX1BST0ZJTElORworICAgICAgICAgICAgbV9zZWxlY3RvcnNbaV0uY29tcGlsZWRTZWxl
Y3RvclVzZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7Cisg
ICAgICAgICAgICB2b2lkKiBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciA9IG1fc2VsZWN0b3JzW2ld
LmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
ICAgICAgICAgaWYgKG1fc2VsZWN0b3JzW2ldLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9y
Q29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgeworICAgICAgICAgICAg
ICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNr
ZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21w
aWxlZFNlbGVjdG9yQ2hlY2tlciwgbV9zZWxlY3RvcnNbaV0uY29tcGlsYXRpb25TdGF0dXMpOwor
ICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zZWxlY3RvcnNbaV0u
Y29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7CisgICAgICAgICAgICAgICAgU2VsZWN0b3JDb21w
aWxlcjo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNrZXIg
PSBTZWxlY3RvckNvbXBpbGVyOjpzZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0Nv
bnRleHQoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIG1fc2VsZWN0b3JzW2ldLmNvbXBpbGF0aW9u
U3RhdHVzKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gc2VsZWN0b3JDaGVja2VyKCZlbGVt
ZW50LCAmY2hlY2tpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICht
YXRjaGVkKSB7CisgICAgICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRw
dXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChTZWxl
Y3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZpcnN0RWxlbWVudCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCiBzdGF0aWMgYm9vbCBpc0NvbXBpbGVkU2VsZWN0b3IoU2Vs
ZWN0b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxhdGlvblN0YXR1cykKIHsKICAgICByZXR1cm4g
Y29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2ltcGxlU2Vs
ZWN0b3JDaGVja2VyIHx8IGNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25T
dGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQ7CkBAIC00ODksNyArNTIw
LDM0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlKENvbnRh
aW5lck5vZGUmIHJvb3ROb2RlLCB0eXBlbmFtZSBTCiAgICAgY2FzZSBDbGFzc05hbWVNYXRjaDoK
ICAgICAgICAgZXhlY3V0ZVNpbmdsZUNsYXNzTmFtZVNlbGVjdG9yRGF0YTxTZWxlY3RvclF1ZXJ5
VHJhaXQ+KCpzZWFyY2hSb290Tm9kZSwgbV9zZWxlY3RvcnMuZmlyc3QoKSwgb3V0cHV0KTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21waWxhYmxlTXVsdGlwbGVTZWxlY3Rvck1hdGNoOgor
I2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQorICAgICAgICB7CisgICAgICAgIHVuc2lnbmVk
IHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzZWxlY3RvckNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghY29t
cGlsZVNlbGVjdG9yKG1fc2VsZWN0b3JzW2ldLCAqc2VhcmNoUm9vdE5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgbV9tYXRjaFR5cGUgPSBNdWx0aXBsZVNlbGVjdG9yTWF0Y2g7CisgICAgICAgICAg
ICAgICAgZ290byBNdWx0aXBsZVNlbGVjdG9yTWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgbV9tYXRjaFR5cGUgPSBDb21waWxlZE11bHRpcGxlU2VsZWN0b3JNYXRjaDsK
KyAgICAgICAgZ290byBDb21waWxlZE11bHRpcGxlU2VsZWN0b3JNYXRjaDsKKyNlbHNlCisgICAg
ICAgIEZBTExUSFJPVUdIOworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQorICAg
ICAgICB9CisgICAgY2FzZSBDb21waWxlZE11bHRpcGxlU2VsZWN0b3JNYXRjaDoKKyNpZiBFTkFC
TEUoQ1NTX1NFTEVDVE9SX0pJVCkKKyAgICAgICAgQ29tcGlsZWRNdWx0aXBsZVNlbGVjdG9yTWF0
Y2g6CisgICAgICAgIGV4ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRhPFNlbGVj
dG9yUXVlcnlUcmFpdD4oKnNlYXJjaFJvb3ROb2RlLCBvdXRwdXQpOworICAgICAgICBicmVhazsK
KyNlbHNlCisgICAgICAgIEZBTExUSFJPVUdIOworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNU
T1JfSklUKQogICAgIGNhc2UgTXVsdGlwbGVTZWxlY3Rvck1hdGNoOgorI2lmIEVOQUJMRShDU1Nf
U0VMRUNUT1JfSklUKQorICAgICAgICBNdWx0aXBsZVNlbGVjdG9yTWF0Y2g6CisjZW5kaWYKICAg
ICAgICAgZXhlY3V0ZVNpbmdsZU11bHRpU2VsZWN0b3JEYXRhPFNlbGVjdG9yUXVlcnlUcmFpdD4o
KnNlYXJjaFJvb3ROb2RlLCBvdXRwdXQpOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NlbGVjdG9yUXVlcnkuaAppbmRleCBjMDc1YmUzMDk2OTVlOTEwODY2YjQxZTI2MjI5YTAy
NDZlNThkYzQ3Li5hMGY0YmJjNTQ5ODE4YjRjY2U0NjE3YTk1OTEyODAzODViY2FiZWQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKQEAgLTg5LDYgKzg5LDcgQEAgY2xhc3MgU2VsZWN0
b3JEYXRhTGlzdCB7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTaW1wbGVT
ZWxlY3RvckNoZWNrZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVj
dG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciwgdHlwZW5hbWUgU2VsZWN0b3JRdWVy
eVRyYWl0OjpPdXRwdXRUeXBlJiwgY29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7CiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRT
ZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmIHJv
b3ROb2RlLCBjb25zdCBDb250YWluZXJOb2RlJiBzZWFyY2hSb290Tm9kZSwgU2VsZWN0b3JDb21w
aWxlcjo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgdHlwZW5hbWUgU2VsZWN0
b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiwgY29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29t
cGlsZWRTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9k
ZSwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJikgY29uc3Q7CiAgICAg
c3RhdGljIGJvb2wgY29tcGlsZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yRGF0YSYsIGNvbnN0IENv
bnRhaW5lck5vZGUmIHJvb3ROb2RlKTsKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJ
VCkKIApAQCAtOTYsOCArOTcsMTAgQEAgY2xhc3MgU2VsZWN0b3JEYXRhTGlzdCB7CiAgICAgbXV0
YWJsZSBlbnVtIE1hdGNoVHlwZSB7CiAgICAgICAgIENvbXBpbGFibGVTaW5nbGUsCiAgICAgICAg
IENvbXBpbGFibGVTaW5nbGVXaXRoUm9vdEZpbHRlciwKKyAgICAgICAgQ29tcGlsYWJsZU11bHRp
cGxlU2VsZWN0b3JNYXRjaCwKICAgICAgICAgQ29tcGlsZWRTaW5nbGUsCiAgICAgICAgIENvbXBp
bGVkU2luZ2xlV2l0aFJvb3RGaWx0ZXIsCisgICAgICAgIENvbXBpbGVkTXVsdGlwbGVTZWxlY3Rv
ck1hdGNoLAogICAgICAgICBTaW5nbGVTZWxlY3RvciwKICAgICAgICAgUmlnaHRNb3N0V2l0aElk
TWF0Y2gsCiAgICAgICAgIFRhZ05hbWVNYXRjaCwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxOTQ4ZmE5Y2JkZjljMzEwYTEz
OTU5ODA0YTc5NmYxOTA1ZDc2ZmFjLi4zOTJkZWNmZWEzM2RlZjhmMGUxNzcxYjQyZTAwZTQ0ZDZk
NjAxZmYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDktMTIgIFl1c3VrZSBTdXp1a2kg
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgQ1NTIEpJVDogQXBwbHkgQ1NTIEpJ
VCB0byBTZWxlY3RvclF1ZXJ5IHdpdGggbXVsdGlwbGUgc2VsZWN0b3JzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUyNTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3F1ZXJ5
U2VsZWN0b3ItbXVsdGlwbGUtc2VsZWN0b3JzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1tdWx0aXBsZS1zZWxlY3RvcnMuaHRtbDog
QWRkZWQuCisKIDIwMTQtMDktMTEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CiAKICAgICAgICAgZmFzdC9mb3Jtcy9zdWJtaXQtdG8tYmxhbmstbXVsdGlwbGUtdGltZXMuaHRt
bCBjcmFzaGVzIHdpdGggSlNDX3Nsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1tdWx0aXBsZS1zZWxlY3Rv
cnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rv
ci1tdWx0aXBsZS1zZWxlY3RvcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxZDZlZDdlZGFj
ZGZhYTcwNzBlNjQ5ZWRmMzI3ZWYyMTkxOTU0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLW11bHRpcGxlLXNlbGVjdG9ycy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGVzdCBjYXNlcyB3aGVuIHRoZSBtdWx0aXBsZSBz
ZWxlY3RvcnMgYXJlIHByb3ZpZGVkCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgidDAsIHQxIikubGVuZ3RoIGlzIDQK
K1BBU1MgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCIjdDIsIHQzIikubGVuZ3RoIGlz
IDEKK1BBU1MgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCJ0ND4gI3Q1LCB0NiB0Ny5v
ayIpLmxlbmd0aCBpcyAyCitQQVNTIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgidDgg
KyB0OSwgdDEwIHQxMS5vayIpLmxlbmd0aCBpcyAxCitQQVNTIGRvY3VtZW50LmJvZHkucXVlcnlT
ZWxlY3RvckFsbCgidDggKyB0OSwgdDEwIHQxMS5vayIpLmxlbmd0aCBpcyAxCitQQVNTIGRvY3Vt
ZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgiLnQxMiwgLnQxMywgLnQxNCwgLnQxNSIpLmxlbmd0
aCBpcyAyCitDU1MgSklUIGNvbXBpbGUgbWF5IGZhaWwsIGZhbGxiYWNrIHRvIHRoZSBzbG93IHBh
dGguCitQQVNTIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgiLnQxNiwgLnQxNz50MTg6
bnRoLWxhc3QtY2hpbGQoMSkiKS5sZW5ndGggaXMgMworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
c2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3ItbXVsdGlwbGUtc2VsZWN0b3JzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLW11bHRpcGxlLXNlbGVjdG9ycy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM1ZmY5N2U2MDI3MWQyYTRhODNjMTJjN2JiMzVhMTkxOWJkMmRmMDEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9y
LW11bHRpcGxlLXNlbGVjdG9ycy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzwhZG9jdHlwZSBodG1s
PgorPGh0bWwgaWQ9aHRtbERvY3VtZW50PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBz
dHlsZT0iZGlzcGxheTpub25lIj4KKzx0MD4KKyAgICA8dDA+PC90MD4KKzwvdDA+Cis8dDE+Cisg
ICAgPHQwPjwvdDA+Cis8L3QxPgorCisKKzx0Mz48L3QzPgorCis8dDQ+CisgICAgPHQ1IGlkPSJ0
NSI+PC90NT4KKzwvdDQ+Cis8dDY+CisgICAgPG5nPgorICAgICAgICA8dDcgY2xhc3M9Im9rIj48
L3Q3PgorICAgIDwvbmc+Cis8L3Q2PgorCis8dDg+PC90OD4KKzx0OT48L3Q5PgorPHQ5PjwvdDk+
Cis8dDEwPgorICAgIDx0MTEgY2xhc3M9Im5nIj48L3QxMT4KKzwvdDEwPgorCis8b2sgY2xhc3M9
InQxMiI+PC9vaz4KKzxvayBjbGFzcz0idDEzIHQxNCB0MTUiPjwvb2s+CisKKzxvayBjbGFzcz0i
dDE2Ij48L29rPgorPG9rIGNsYXNzPSJ0MTciPgorICAgIDx0MTg+PC90MTg+CisgICAgPHQxOD48
L3QxOD4KKyAgICA8dDE4PjwvdDE4PgorICAgIDx0MTg+PC90MTg+CisgICAgPHQxOD48L3QxOD4K
Kzwvb2s+Cis8b2sgY2xhc3M9InQxNyI+CisgICAgPHQxOD48L3QxOD4KKyAgICA8dDE4PjwvdDE4
PgorICAgIDx0MTg+PC90MTg+CisgICAgPHQxOD48L3QxOD4KKyAgICA8dDE4PjwvdDE4PgorPC9v
az4KKworPC9kaXY+Cis8L2JvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3QgY2FzZXMg
d2hlbiB0aGUgbXVsdGlwbGUgc2VsZWN0b3JzIGFyZSBwcm92aWRlZCcpOworCitzaG91bGRCZSgn
ZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCJ0MCwgdDEiKS5sZW5ndGgnLCAnNCcpOwor
c2hvdWxkQmUoJ2RvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgiI3QyLCB0MyIpLmxlbmd0
aCcsICcxJyk7CitzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCJ0ND4g
I3Q1LCB0NiB0Ny5vayIpLmxlbmd0aCcsICcyJyk7CitzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5x
dWVyeVNlbGVjdG9yQWxsKCJ0OCArIHQ5LCB0MTAgdDExLm9rIikubGVuZ3RoJywgJzEnKTsKK3No
b3VsZEJlKCdkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoInQ4ICsgdDksIHQxMCB0MTEu
b2siKS5sZW5ndGgnLCAnMScpOworc2hvdWxkQmUoJ2RvY3VtZW50LmJvZHkucXVlcnlTZWxlY3Rv
ckFsbCgiLnQxMiwgLnQxMywgLnQxNCwgLnQxNSIpLmxlbmd0aCcsICcyJyk7CisKK2RlYnVnKCdD
U1MgSklUIGNvbXBpbGUgbWF5IGZhaWwsIGZhbGxiYWNrIHRvIHRoZSBzbG93IHBhdGguJykKK3No
b3VsZEJlKCdkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoIi50MTYsIC50MTc+dDE4Om50
aC1sYXN0LWNoaWxkKDEpIikubGVuZ3RoJywgJzMnKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238060</attachid>
            <date>2014-09-12 14:48:41 -0700</date>
            <delta_ts>2014-09-12 17:03:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135255-20140912144706.patch</filename>
            <type>text/plain</type>
            <size>10668</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE0LTA5LTEyICBZdXN1a2Ug
U3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IEFwcGx5
IENTUyBKSVQgdG8gU2VsZWN0b3JRdWVyeSB3aXRoIG11bHRpcGxlIHNlbGVjdG9ycworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MjU1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICBBZnRlciBkcm9wcGlu
ZyBTZWxlY3RvckNoZWNrZXJGYXN0UGF0aCwgRHJvbWFlbyBjc3NxdWVyeS1qcXVlcnkgdGVzdAor
ICAgICAgICByZXN1bHQgYmVjb21lcyBzaWduaWZpY2FudGx5IHdvcnNlLiA0MDAuMjYvcyB0byAz
NDguMTYvcywgMTMlCisgICAgICAgIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uCisKKyAgICAgICAg
SW52ZXN0aWdhdGVkIHRoZSBjYXVzZSBvZiBpdCBhbmQgd2UgZm91bmQgdGhhdCB0aGUgdGVzdCBy
ZXN1bHRzIGZvcgorICAgICAgICBxdWVyeVNlbGVjdG9yIHdpdGggbXVsdGlwbGUgc2VsZWN0b3Jz
IGNhdXNlcyBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4KKworICAgICAgICBUbyBzb2x2ZSB0aGlz
LCB3ZSBhdHRlbXB0IHRvIEpJVCBjb21waWxlIGFsbCBzZWxlY3RvcnMgaW4gbXVsdGlwbGUKKyAg
ICAgICAgc2VsZWN0b3JzLiBBbmQgaWYgY29tcGlsaW5nIHNvbWUgc2VsZWN0b3JzIGlzIGZhaWxl
ZCwgU2VsZWN0b3JRdWVyeQorICAgICAgICBmYWxsYmFja3MgdG8gdGhlIHNsb3dlciBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Uu
IEFmdGVyIGFwcGx5aW5nIHRoaXMgcGF0Y2gsCisgICAgICAgIGNzc3F1ZXJ5LWpxdWVyeSB0ZXN0
IHJlc3VsdCBiZWNvbWVzIDQxOC43MS9zLCA0LjYxJSBiZXR0ZXIgdGhhbiB0aGUKKyAgICAgICAg
cHJldmlvdXMgZ29vZCBwZXJmb3JtYW5jZSBjYXNlLgorCisgICAgICAgIFRlc3Q6IGZhc3Qvc2Vs
ZWN0b3JzL3F1ZXJ5U2VsZWN0b3ItbXVsdGlwbGUtc2VsZWN0b3JzLmh0bWwKKworICAgICAgICAq
IGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxp
c3Q6OlNlbGVjdG9yRGF0YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlz
dDo6ZXhlY3V0ZUNvbXBpbGVkU2luZ2xlTXVsdGlTZWxlY3RvckRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZSk6CisgICAgICAgICogZG9tL1NlbGVjdG9y
UXVlcnkuaDoKKwogMjAxNC0wOS0xMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZSBQTEFURk9STShJT1MpIGZyb20gV2ViQ29yZS9lZGl0aW5nIChQ
YXJ0IDMpLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkocmV2aXNpb24g
MTczNTc4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgU2VsZWN0b3JEYXRhTGlzdDo6U2VsZWN0b3JEYXRh
TGlzdChjb25zdAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAg
IG1fbWF0Y2hUeXBlID0gTXVsdGlwbGVTZWxlY3Rvck1hdGNoOworICAgICAgICBtX21hdGNoVHlw
ZSA9IENvbXBpbGFibGVNdWx0aXBsZVNlbGVjdG9yTWF0Y2g7CiB9CiAKIGlubGluZSBib29sIFNl
bGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yTWF0Y2hlcyhjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVj
dG9yRGF0YSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUp
IGNvbnN0CkBAIC0zODksNiArMzg5LDM3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRh
dGFMaXN0OjpleGUKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5
VHJhaXQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBp
bGVkU2luZ2xlTXVsdGlTZWxlY3RvckRhdGEoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUs
IHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0KSBjb25zdAor
eworICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChT
ZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOworICAgIGNoZWNraW5nQ29udGV4
dC5zY29wZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2Rl
OworICAgIHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7CisgICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFp
bmVyTm9kZSY+KHJvb3ROb2RlKSkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNlbGVjdG9yQ291bnQ7ICsraSkgeworI2lmIENTU19TRUxFQ1RPUl9KSVRfUFJPRklMSU5HCisg
ICAgICAgICAgICBtX3NlbGVjdG9yc1tpXS5jb21waWxlZFNlbGVjdG9yVXNlZCgpOworI2VuZGlm
CisgICAgICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHZvaWQqIGNv
bXBpbGVkU2VsZWN0b3JDaGVja2VyID0gbV9zZWxlY3RvcnNbaV0uY29tcGlsZWRTZWxlY3RvckNv
ZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBpZiAobV9zZWxl
Y3RvcnNbaV0uY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6
U2ltcGxlU2VsZWN0b3JDaGVja2VyKSB7CisgICAgICAgICAgICAgICAgU2VsZWN0b3JDb21waWxl
cjo6U2ltcGxlU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGls
ZXI6OnNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVja2Vy
LCBtX3NlbGVjdG9yc1tpXS5jb21waWxhdGlvblN0YXR1cyk7CisgICAgICAgICAgICAgICAgbWF0
Y2hlZCA9IHNlbGVjdG9yQ2hlY2tlcigmZWxlbWVudCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3NlbGVjdG9yc1tpXS5jb21waWxhdGlvblN0YXR1cyA9
PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdD
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNoZWNr
ZXJXaXRoQ2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6
OnNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb21waWxlZFNlbGVj
dG9yQ2hlY2tlciwgbV9zZWxlY3RvcnNbaV0uY29tcGlsYXRpb25TdGF0dXMpOworICAgICAgICAg
ICAgICAgIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQsICZjaGVja2luZ0NvbnRl
eHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHsKKyAgICAgICAg
ICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0
LCAmZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKFNlbGVjdG9yUXVlcnlUcmFpdDo6c2hv
dWxkT25seU1hdGNoRmlyc3RFbGVtZW50KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKIHN0YXRpYyBib29sIGlzQ29tcGlsZWRTZWxlY3RvcihTZWxlY3RvckNvbXBpbGF0aW9uU3Rh
dHVzIGNvbXBpbGF0aW9uU3RhdHVzKQogewogICAgIHJldHVybiBjb21waWxhdGlvblN0YXR1cyA9
PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIgfHwgY29t
cGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVj
a2VyV2l0aENoZWNraW5nQ29udGV4dDsKQEAgLTQ4OSw3ICs1MjAsMzQgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZQogICAgIGNhc2UgQ2xhc3NOYW1lTWF0Y2g6CiAg
ICAgICAgIGV4ZWN1dGVTaW5nbGVDbGFzc05hbWVTZWxlY3RvckRhdGE8U2VsZWN0b3JRdWVyeVRy
YWl0Pigqc2VhcmNoUm9vdE5vZGUsIG1fc2VsZWN0b3JzLmZpcnN0KCksIG91dHB1dCk7CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29tcGlsYWJsZU11bHRpcGxlU2VsZWN0b3JNYXRjaDoKKyNp
ZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKKyAgICAgICAgeworICAgICAgICB1bnNpZ25lZCBz
ZWxlY3RvckNvdW50ID0gbV9zZWxlY3RvcnMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWNvbXBp
bGVTZWxlY3RvcihtX3NlbGVjdG9yc1tpXSwgKnNlYXJjaFJvb3ROb2RlKSkgeworICAgICAgICAg
ICAgICAgIG1fbWF0Y2hUeXBlID0gTXVsdGlwbGVTZWxlY3Rvck1hdGNoOworICAgICAgICAgICAg
ICAgIGdvdG8gTXVsdGlwbGVTZWxlY3Rvck1hdGNoOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIG1fbWF0Y2hUeXBlID0gQ29tcGlsZWRNdWx0aXBsZVNlbGVjdG9yTWF0Y2g7Cisg
ICAgICAgIGdvdG8gQ29tcGlsZWRNdWx0aXBsZVNlbGVjdG9yTWF0Y2g7CisgICAgICAgIH0KKyNl
bHNlCisgICAgICAgIEZBTExUSFJPVUdIOworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1Jf
SklUKQorICAgIGNhc2UgQ29tcGlsZWRNdWx0aXBsZVNlbGVjdG9yTWF0Y2g6CisjaWYgRU5BQkxF
KENTU19TRUxFQ1RPUl9KSVQpCisgICAgICAgIENvbXBpbGVkTXVsdGlwbGVTZWxlY3Rvck1hdGNo
OgorICAgICAgICBleGVjdXRlQ29tcGlsZWRTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YTxTZWxlY3Rv
clF1ZXJ5VHJhaXQ+KCpzZWFyY2hSb290Tm9kZSwgb3V0cHV0KTsKKyAgICAgICAgYnJlYWs7Cisj
ZWxzZQorICAgICAgICBGQUxMVEhST1VHSDsKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9S
X0pJVCkKICAgICBjYXNlIE11bHRpcGxlU2VsZWN0b3JNYXRjaDoKKyNpZiBFTkFCTEUoQ1NTX1NF
TEVDVE9SX0pJVCkKKyAgICAgICAgTXVsdGlwbGVTZWxlY3Rvck1hdGNoOgorI2VuZGlmCiAgICAg
ICAgIGV4ZWN1dGVTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YTxTZWxlY3RvclF1ZXJ5VHJhaXQ+KCpz
ZWFyY2hSb290Tm9kZSwgb3V0cHV0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCShyZXZpc2lvbiAxNzM1NzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBA
IHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxl
Y3RvckNoZWNrZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9y
Q29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRy
YWl0OjpPdXRwdXRUeXBlJiwgY29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTZWxl
Y3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3RO
b2RlLCBjb25zdCBDb250YWluZXJOb2RlJiBzZWFyY2hSb290Tm9kZSwgU2VsZWN0b3JDb21waWxl
cjo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgdHlwZW5hbWUgU2VsZWN0b3JR
dWVyeVRyYWl0OjpPdXRwdXRUeXBlJiwgY29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGls
ZWRTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwg
dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJikgY29uc3Q7CiAgICAgc3Rh
dGljIGJvb2wgY29tcGlsZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yRGF0YSYsIGNvbnN0IENvbnRh
aW5lck5vZGUmIHJvb3ROb2RlKTsKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkK
IApAQCAtOTYsOCArOTcsMTAgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIGVudW0gTWF0Y2hUeXBl
IHsKICAgICAgICAgQ29tcGlsYWJsZVNpbmdsZSwKICAgICAgICAgQ29tcGlsYWJsZVNpbmdsZVdp
dGhSb290RmlsdGVyLAorICAgICAgICBDb21waWxhYmxlTXVsdGlwbGVTZWxlY3Rvck1hdGNoLAog
ICAgICAgICBDb21waWxlZFNpbmdsZSwKICAgICAgICAgQ29tcGlsZWRTaW5nbGVXaXRoUm9vdEZp
bHRlciwKKyAgICAgICAgQ29tcGlsZWRNdWx0aXBsZVNlbGVjdG9yTWF0Y2gsCiAgICAgICAgIFNp
bmdsZVNlbGVjdG9yLAogICAgICAgICBSaWdodE1vc3RXaXRoSWRNYXRjaCwKICAgICAgICAgVGFn
TmFtZU1hdGNoLApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTczNTc4KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDktMTIgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgQ1NTIEpJVDogQXBw
bHkgQ1NTIEpJVCB0byBTZWxlY3RvclF1ZXJ5IHdpdGggbXVsdGlwbGUgc2VsZWN0b3JzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUyNTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgICogZmFzdC9zZWxl
Y3RvcnMvcXVlcnlTZWxlY3Rvci1tdWx0aXBsZS1zZWxlY3RvcnMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLW11bHRpcGxlLXNlbGVj
dG9ycy5odG1sOiBBZGRlZC4KKwogMjAxNC0wOS0xMiAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFdlYkdMIGNvbmZvcm1hbmNlIHRlc3Qg
Z2FyZGVuaW5nLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rv
ci1tdWx0aXBsZS1zZWxlY3RvcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3ItbXVsdGlwbGUtc2VsZWN0b3JzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3F1ZXJ5
U2VsZWN0b3ItbXVsdGlwbGUtc2VsZWN0b3JzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3IEBACitUZXN0IGNhc2VzIHdoZW4gdGhlIG11bHRpcGxlIHNlbGVjdG9ycyBh
cmUgcHJvdmlkZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1l
bnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCJ0MCwgdDEiKS5sZW5ndGggaXMgNAorUEFTUyBkb2N1
bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoIiN0MiwgdDMiKS5sZW5ndGggaXMgMQorUEFTUyBk
b2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoInQ0PiAjdDUsIHQ2IHQ3Lm9rIikubGVuZ3Ro
IGlzIDIKK1BBU1MgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCJ0OCArIHQ5LCB0MTAg
dDExLm9rIikubGVuZ3RoIGlzIDEKK1BBU1MgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxs
KCJ0OCArIHQ5LCB0MTAgdDExLm9rIikubGVuZ3RoIGlzIDEKK1BBU1MgZG9jdW1lbnQuYm9keS5x
dWVyeVNlbGVjdG9yQWxsKCIudDEyLCAudDEzLCAudDE0LCAudDE1IikubGVuZ3RoIGlzIDIKK0NT
UyBKSVQgY29tcGlsZSBtYXkgZmFpbCwgZmFsbGJhY2sgdG8gdGhlIHNsb3cgcGF0aC4KK1BBU1Mg
ZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCIudDE2LCAudDE3PnQxODpudGgtbGFzdC1j
aGlsZCgxKSIpLmxlbmd0aCBpcyAzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlT
ZWxlY3Rvci1tdWx0aXBsZS1zZWxlY3RvcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLW11bHRpcGxlLXNlbGVjdG9ycy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1t
dWx0aXBsZS1zZWxlY3RvcnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACis8
IWRvY3R5cGUgaHRtbD4KKzxodG1sIGlkPWh0bWxEb2N1bWVudD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Cis8dDA+CisgICAgPHQwPjwvdDA+Cis8
L3QwPgorPHQxPgorICAgIDx0MD48L3QwPgorPC90MT4KKworCis8dDM+PC90Mz4KKworPHQ0Pgor
ICAgIDx0NSBpZD0idDUiPjwvdDU+Cis8L3Q0PgorPHQ2PgorICAgIDxuZz4KKyAgICAgICAgPHQ3
IGNsYXNzPSJvayI+PC90Nz4KKyAgICA8L25nPgorPC90Nj4KKworPHQ4PjwvdDg+Cis8dDk+PC90
OT4KKzx0OT48L3Q5PgorPHQxMD4KKyAgICA8dDExIGNsYXNzPSJuZyI+PC90MTE+Cis8L3QxMD4K
KworPG9rIGNsYXNzPSJ0MTIiPjwvb2s+Cis8b2sgY2xhc3M9InQxMyB0MTQgdDE1Ij48L29rPgor
Cis8b2sgY2xhc3M9InQxNiI+PC9vaz4KKzxvayBjbGFzcz0idDE3Ij4KKyAgICA8dDE4PjwvdDE4
PgorICAgIDx0MTg+PC90MTg+CisgICAgPHQxOD48L3QxOD4KKyAgICA8dDE4PjwvdDE4PgorICAg
IDx0MTg+PC90MTg+Cis8L29rPgorPG9rIGNsYXNzPSJ0MTciPgorICAgIDx0MTg+PC90MTg+Cisg
ICAgPHQxOD48L3QxOD4KKyAgICA8dDE4PjwvdDE4PgorICAgIDx0MTg+PC90MTg+CisgICAgPHQx
OD48L3QxOD4KKzwvb2s+CisKKzwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9u
KCdUZXN0IGNhc2VzIHdoZW4gdGhlIG11bHRpcGxlIHNlbGVjdG9ycyBhcmUgcHJvdmlkZWQnKTsK
Kworc2hvdWxkQmUoJ2RvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgidDAsIHQxIikubGVu
Z3RoJywgJzQnKTsKK3Nob3VsZEJlKCdkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoIiN0
MiwgdDMiKS5sZW5ndGgnLCAnMScpOworc2hvdWxkQmUoJ2RvY3VtZW50LmJvZHkucXVlcnlTZWxl
Y3RvckFsbCgidDQ+ICN0NSwgdDYgdDcub2siKS5sZW5ndGgnLCAnMicpOworc2hvdWxkQmUoJ2Rv
Y3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgidDggKyB0OSwgdDEwIHQxMS5vayIpLmxlbmd0
aCcsICcxJyk7CitzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCJ0OCAr
IHQ5LCB0MTAgdDExLm9rIikubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdkb2N1bWVudC5ib2R5
LnF1ZXJ5U2VsZWN0b3JBbGwoIi50MTIsIC50MTMsIC50MTQsIC50MTUiKS5sZW5ndGgnLCAnMicp
OworCitkZWJ1ZygnQ1NTIEpJVCBjb21waWxlIG1heSBmYWlsLCBmYWxsYmFjayB0byB0aGUgc2xv
dyBwYXRoLicpCitzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCIudDE2
LCAudDE3PnQxODpudGgtbGFzdC1jaGlsZCgxKSIpLmxlbmd0aCcsICczJyk7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>