<?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>38599</bug_id>
          
          <creation_ts>2010-05-05 12:06:17 -0700</creation_ts>
          <short_desc>Merge incremental results.json on test results app engine server</short_desc>
          <delta_ts>2010-08-04 16:52:17 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Victor Wang">victorw</reporter>
          <assigned_to name="Victor Wang">victorw</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>kinuko</cc>
    
    <cc>kinuko</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>221218</commentid>
    <comment_count>0</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-05 12:06:17 -0700</bug_when>
    <thetext>We have an App Engine server (test-results.appsopt.com) to host test results json files. Currently, the app engine only allows client to upload aggregated json results and replace the one stored on server. Add merging functionality to the App Engine so client could upload incremental results.json.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221315</commentid>
    <comment_count>1</comment_count>
      <attachid>55163</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-05 15:51:52 -0700</bug_when>
    <thetext>Created attachment 55163
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221320</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-05 15:55:40 -0700</bug_when>
    <thetext>Attachment 55163 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
0:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebKitTools/TestResultServer/simplejson/_speedups.c:152:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKitTools/TestResultServer/simplejson/_speedups.c:165:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKitTools/TestResultServer/simplejson/_speedups.c:168:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKitTools/TestResultServer/simplejson/_speedups.c:175:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKitTools/TestResultServer/simplejson/_speedups.c:186:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKitTools/TestResultServer/simplejson/_speedups.c:188:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebKitTools/TestResultServer/simplejson/_speedups.c:204:  speedups_methods is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/ChangeLog:5:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:12:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:41:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:46:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:64:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:70:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:77:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:84:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:105:  whitespace before &apos;)&apos;  [pep8/E202] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:108:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:116:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:173:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:220:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:236:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:243:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:269:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:278:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:287:  blank line at end of file  [pep8/W391] [5]
Total errors found: 79 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221323</commentid>
    <comment_count>3</comment_count>
      <attachid>55165</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-05 15:59:18 -0700</bug_when>
    <thetext>Created attachment 55165
Fix styles in ChangeLog

There are style warnings in simplejson model. This is third party lib so don;t think we should touch it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221327</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-05 16:03:21 -0700</bug_when>
    <thetext>Attachment 55165 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
ank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:21:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:29:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:46:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:50:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:68:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:111:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:118:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:159:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:160:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:185:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:196:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:201:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/decoder.py:234:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:12:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:41:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:46:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:64:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:70:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:77:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:84:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:105:  whitespace before &apos;)&apos;  [pep8/E202] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:108:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:116:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:173:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:220:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:236:  trailing whitespace  [pep8/W291] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:243:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:269:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:278:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/TestResultServer/simplejson/__init__.py:287:  blank line at end of file  [pep8/W391] [5]
Total errors found: 77 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221337</commentid>
    <comment_count>5</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-05 16:13:48 -0700</bug_when>
    <thetext>These warnings are from third party lib: simplejson.

(In reply to comment #4)
&gt; Attachment 55165 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot;
&gt; exit_code: 1
&gt; Last 3072 characters of output:
&gt; ank lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:21:  expected 2 blank lines,
&gt; found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:29:  expected 2 blank lines,
&gt; found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:46:  expected 2 blank lines,
&gt; found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:50:  expected 2 blank lines,
&gt; found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:68:  expected 2 blank lines,
&gt; found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:111:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:118:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:159:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:160:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:185:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:196:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:201:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/decoder.py:234:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:12:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:41:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:46:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:64:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:70:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:77:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:84:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:105:  whitespace before &apos;)&apos;
&gt;  [pep8/E202] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:108:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:116:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:173:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:220:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:236:  trailing whitespace 
&gt; [pep8/W291] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:243:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:269:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:278:  expected 2 blank
&gt; lines, found 1  [pep8/E302] [5]
&gt; WebKitTools/TestResultServer/simplejson/__init__.py:287:  blank line at end of
&gt; file  [pep8/W391] [5]
&gt; Total errors found: 77 in 19 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221349</commentid>
    <comment_count>6</comment_count>
      <attachid>55165</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 16:37:58 -0700</bug_when>
    <thetext>Comment on attachment 55165
Fix styles in ChangeLog

simplejson is already available autoinstalled from webkitpy.thirdparty.simplejson.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221350</commentid>
    <comment_count>7</comment_count>
      <attachid>55165</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 16:38:50 -0700</bug_when>
    <thetext>Comment on attachment 55165
Fix styles in ChangeLog

Oh.  I see.  This is on app-engine so we have to include our own copy.

The .c file seems useless in that case anyway.  Since AppEngine won&apos;t use it since it only uses .py files, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221352</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 16:40:53 -0700</bug_when>
    <thetext>I expect there is some slick way by which we could configure AppEngine to upload a specific version of simplejson w/o checking one in.  But it should also be OK to check this in if MIT is allowed in WebKit (which I think it might be, but I&quot;m not sure).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221353</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-05 16:41:39 -0700</bug_when>
    <thetext>I think AppEngine might have a JSON library already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221354</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-05 16:42:47 -0700</bug_when>
    <thetext>from django.utils import simplejson

according to http://code.google.com/appengine/articles/rpc.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221362</commentid>
    <comment_count>11</comment_count>
      <attachid>55176</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-05 16:56:18 -0700</bug_when>
    <thetext>Created attachment 55176
Remove simplejson from AE

Remove simplejson from this AE and update related code. Thanks Adam!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221381</commentid>
    <comment_count>12</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-05 17:37:14 -0700</bug_when>
    <thetext>LGTM though I&apos;m not a reviewer.
Some nits and comments:

&gt; --- WebKitTools/ChangeLog	(revision 58840)
&gt; +++ WebKitTools/ChangeLog	(working copy)
&gt; @@ -1,3 +1,29 @@
&gt; +2010-05-05  Victor Wang  &lt;victorw@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        -. Add result.json incremental merging functionality to test results app engine.
&gt; +        -. blobstore is not suitable for AE data merging and there is no API to
&gt; +           programatically edit existing blob or write a new one yet, so replace blbostore

blbostore -&gt; blobstore

&gt; --- WebKitTools/TestResultServer/model/jsonresults.py	(revision 0)
&gt; +++ WebKitTools/TestResultServer/model/jsonresults.py	(revision 0)
&gt; +class JsonResults(object):
&gt; +    @classmethod

This class only has classmethods?
I have no strong opinion here but is there a reason not to use module-level functions?

&gt; +    @classmethod
&gt; +    def merge(cls, builder, aggregated, incremental, sort_keys=False):
&lt;snip&gt;
&gt; +        return JsonResults._generate_file_data(aggregated_json, sort_keys)

return cls._generate_file_data(aggregated_json, sort_keys)
might be better?

&gt; --- WebKitTools/TestResultServer/model/jsonresults_unittest.py	(revision 0)
&gt; +++ WebKitTools/TestResultServer/model/jsonresults_unittest.py	(revision 0)
&gt; +        # Test if build in incremental results is older than the most recent
&gt; +        # build in aggregated results.
&gt; +        # The incremental results should be dropped and no merge happens.
&gt; +        self._test_merge(
&gt; +            # Aggregated results
&gt; +            ([&quot;3&quot;, &quot;1&quot;], [[&quot;001.html&quot;, &quot;[200,\&quot;P\&quot;]&quot;, &quot;[200,\&quot;0\&quot;]&quot;]]),
&gt; +            # Incremental results
&gt; +            ([&quot;2&quot;], [[&quot;001.html&quot;, &quot;[1, \&quot;P\&quot;]&quot;, &quot;[1,\&quot;0\&quot;]&quot;]]),
&gt; +            # Expected no merge happens.
&gt; +            None)

Can this happen in real case?  In that case do we really want to leave it with no merge?  (Just want to make sure)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221894</commentid>
    <comment_count>13</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-06 12:51:26 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; LGTM though I&apos;m not a reviewer.
&gt; Some nits and comments:
&gt; 
&gt; &gt; --- WebKitTools/ChangeLog	(revision 58840)
&gt; &gt; +++ WebKitTools/ChangeLog	(working copy)
&gt; &gt; @@ -1,3 +1,29 @@
&gt; &gt; +2010-05-05  Victor Wang  &lt;victorw@chromium.org (c)&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        -. Add result.json incremental merging functionality to test results app engine.
&gt; &gt; +        -. blobstore is not suitable for AE data merging and there is no API to
&gt; &gt; +           programatically edit existing blob or write a new one yet, so replace blbostore
&gt; 
&gt; blbostore -&gt; blobstore
done

&gt; 
&gt; &gt; --- WebKitTools/TestResultServer/model/jsonresults.py	(revision 0)
&gt; &gt; +++ WebKitTools/TestResultServer/model/jsonresults.py	(revision 0)
&gt; &gt; +class JsonResults(object):
&gt; &gt; +    @classmethod
&gt; 
&gt; This class only has classmethods?
&gt; I have no strong opinion here but is there a reason not to use module-level
&gt; functions?
No strong reason. I was thinking this as a util class so did it this way. I am fine either way. If you strong prefer to do it other way, I am OK to change it.

&gt; 
&gt; &gt; +    @classmethod
&gt; &gt; +    def merge(cls, builder, aggregated, incremental, sort_keys=False):
&gt; &lt;snip&gt;
&gt; &gt; +        return JsonResults._generate_file_data(aggregated_json, sort_keys)
&gt; 
&gt; return cls._generate_file_data(aggregated_json, sort_keys)
&gt; might be better?
done

&gt; 
&gt; &gt; --- WebKitTools/TestResultServer/model/jsonresults_unittest.py	(revision 0)
&gt; &gt; +++ WebKitTools/TestResultServer/model/jsonresults_unittest.py	(revision 0)
&gt; &gt; +        # Test if build in incremental results is older than the most recent
&gt; &gt; +        # build in aggregated results.
&gt; &gt; +        # The incremental results should be dropped and no merge happens.
&gt; &gt; +        self._test_merge(
&gt; &gt; +            # Aggregated results
&gt; &gt; +            ([&quot;3&quot;, &quot;1&quot;], [[&quot;001.html&quot;, &quot;[200,\&quot;P\&quot;]&quot;, &quot;[200,\&quot;0\&quot;]&quot;]]),
&gt; &gt; +            # Incremental results
&gt; &gt; +            ([&quot;2&quot;], [[&quot;001.html&quot;, &quot;[1, \&quot;P\&quot;]&quot;, &quot;[1,\&quot;0\&quot;]&quot;]]),
&gt; &gt; +            # Expected no merge happens.
&gt; &gt; +            None)
&gt; 
&gt; Can this happen in real case?  In that case do we really want to leave it with
&gt; no merge?  (Just want to make sure)
Not sure whether this happens in real case, but in theory, it may happen. If it happens, I am not sure a good way to merge the test results and times because it requires the values to be summed from continuous runs.
Here is one example: build 1 test result is [1, &quot;P&quot;], then build 3 result [1, &quot;P&quot;] comes first, so the merged results would be [2, &quot;p&quot;], however, if build 2 result is [1, &quot;I&quot;], then the previous build 3 merging is not right, but at that time, it is hard to tell how you want to merge it. To simplify this, for now, I skip the merging if the incremental build is older than the most recent build in aggregated results. Would like to see how it happens in real case and what&apos;s the best way to handle this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221895</commentid>
    <comment_count>14</comment_count>
      <attachid>55288</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-06 12:52:36 -0700</bug_when>
    <thetext>Created attachment 55288
Address Kinuko&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221904</commentid>
    <comment_count>15</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-06 13:02:01 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Can this happen in real case?  In that case do we really want to leave it with
&gt; &gt; no merge?  (Just want to make sure)
&gt; Not sure whether this happens in real case, but in theory, it may happen. If it
&gt; happens, I am not sure a good way to merge the test results and times because
&gt; it requires the values to be summed from continuous runs.
&gt; Here is one example: build 1 test result is [1, &quot;P&quot;], then build 3 result [1,
&gt; &quot;P&quot;] comes first, so the merged results would be [2, &quot;p&quot;], however, if build 2
&gt; result is [1, &quot;I&quot;], then the previous build 3 merging is not right, but at that
&gt; time, it is hard to tell how you want to merge it. To simplify this, for now, I
&gt; skip the merging if the incremental build is older than the most recent build
&gt; in aggregated results. Would like to see how it happens in real case and what&apos;s
&gt; the best way to handle this.

Thanks for explaining the rational, your comments and changes sound/look good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226892</commentid>
    <comment_count>16</comment_count>
      <attachid>55288</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-17 14:11:54 -0700</bug_when>
    <thetext>Comment on attachment 55288
Address Kinuko&apos;s comments

WebKitTools/TestResultServer/main.py: 
 +      (&apos;/uploadfail&apos;, testfilehandler.UploadStatus),
So this new incremental based upload replaces the old type of upload?

WebKitTools/TestResultServer/handlers/testfilehandler.py:68
 +  class GetFile(webapp.RequestHandler):
No sure what this change does...

WebKitTools/TestResultServer/handlers/testfilehandler.py:163
 +              if type(item) is list:
Strange.  I would have probably done:
if not isinstance(item, list) and not isinstance(tuple, item):
    item = [item]
files.extend(item)

Will your code have trouble with tuples?  Seems it might.

WebKitTools/TestResultServer/handlers/testfilehandler.py:169
 +          for f in files:
bad bad single-char variable names. :(

WebKitTools/TestResultServer/handlers/testfilehandler.py:172
 +                  if f.filename != &quot;results.json&quot;:
case sensitive file systems?

WebKitTools/TestResultServer/handlers/testfilehandler.py:177
 +                  tf = JsonResults.update(builder, test_type, f.value)
What the heck is tf?

WebKitTools/TestResultServer/model/datastorefile.py:39
 +      &quot;&quot;&quot;Datastore entry that stores one segmant of file data
segment

WebKitTools/TestResultServer/model/datastorefile.py:38
 +  class DataEntry(db.Model):
I&apos;m confused.  So we end up splitting the uploaded files into pieces instead of storing them in blobs?

WebKitTools/TestResultServer/model/datastorefile.py:55
 +         If a file is oversize (&gt;1000*1000 bytes), the file is splitted into
s/splitted/split/

WebKitTools/TestResultServer/model/datastorefile.py:53
 +  class DataStoreFile(db.Model):
I&apos;m confused why we need our own model type for this?  The QueueStatusServer just uses plain old blobs.

WebKitTools/TestResultServer/model/jsonresults.py:49
 +      def _strip_prefix_suffix(cls, data):
This method is fragile with changes to JSON_RESULTS_PREFIX and JSON_RESULTS_SUFFIX.

WebKitTools/TestResultServer/model/jsonresults.py:59
 +          return data[len(JSON_RESULTS_PREFIX):
Maybe we should ASSERT that the suffix and prefix are as expected in the data?

WebKitTools/TestResultServer/model/jsonresults.py:103
 +      def _merge_json(cls, aggregated_json, incremental_json):
This method is rather large and could be split into smaller bits.

WebKitTools/TestResultServer/model/jsonresults.py:188
 +                      incremental_json[test_name][JSON_RESULTS_RESULTS],
I might have used local variables for incremental_json[test_name] and agregated_json[test_name]

WebKitTools/TestResultServer/model/jsonresults.py:215
 +                  for i in reversed(range(1, len(aggregated_item))):
I&apos;m surprised python doesn&apos;t have a more concise way to express &quot;reversed(range(1, len(aggregated_item)))&quot;

This is a really big change to try and digest at once. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226954</commentid>
    <comment_count>17</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-17 15:51:54 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 55288 [details])
&gt; WebKitTools/TestResultServer/main.py: 
&gt;  +      (&apos;/uploadfail&apos;, testfilehandler.UploadStatus),
&gt; So this new incremental based upload replaces the old type of upload?
No. If the &quot;incremental&quot; parameter appears in the request, AE merges the uploaded results.json with the one in datastore. Otherwise, it replaces the old one. Basically there are two major changes in this patch: one is merging the incremental results.json and the other one is changing BlobStore to blob entry in DataStore because BlobStore does not support programmatically updating existing entries (confirmed with Google AE team). Since we don&apos;t use blobstore which requires redirect at the end of the request handling, the above handlers (testfilehandler.UploadStatus, GetUploadUrl etc) are no longer needed.

&gt; 
&gt; WebKitTools/TestResultServer/handlers/testfilehandler.py:68
&gt;  +  class GetFile(webapp.RequestHandler):
&gt; No sure what this change does...
As I mentioned above, blobstore is no longer used, so change the base request handler here.

&gt; 
&gt; WebKitTools/TestResultServer/handlers/testfilehandler.py:163
&gt;  +              if type(item) is list:
&gt; Strange.  I would have probably done:
&gt; if not isinstance(item, list) and not isinstance(tuple, item):
&gt;     item = [item]
&gt; files.extend(item)
&gt; 
&gt; Will your code have trouble with tuples?  Seems it might.
Good suggestion. done.

&gt; 
&gt; WebKitTools/TestResultServer/handlers/testfilehandler.py:169
&gt;  +          for f in files:
&gt; bad bad single-char variable names. :(
changed

&gt; 
&gt; WebKitTools/TestResultServer/handlers/testfilehandler.py:172
&gt;  +                  if f.filename != &quot;results.json&quot;:
&gt; case sensitive file systems?
done

&gt; 
&gt; WebKitTools/TestResultServer/handlers/testfilehandler.py:177
&gt;  +                  tf = JsonResults.update(builder, test_type, f.value)
&gt; What the heck is tf?
changed the name.

&gt; 
&gt; WebKitTools/TestResultServer/model/datastorefile.py:39
&gt;  +      &quot;&quot;&quot;Datastore entry that stores one segmant of file data
&gt; segment
&gt; 
&gt; WebKitTools/TestResultServer/model/datastorefile.py:38
&gt;  +  class DataEntry(db.Model):
&gt; I&apos;m confused.  So we end up splitting the uploaded files into pieces instead of storing them in blobs?
Yes, due to the size limitation of datastore blob entry, we need to split the uploaded file into pieces if the file is too big. Checked with AE team, this is the best we can do to support server side merging.

&gt; 
&gt; WebKitTools/TestResultServer/model/datastorefile.py:55
&gt;  +         If a file is oversize (&gt;1000*1000 bytes), the file is splitted into
&gt; s/splitted/split/
done

&gt; 
&gt; WebKitTools/TestResultServer/model/datastorefile.py:53
&gt;  +  class DataStoreFile(db.Model):
&gt; I&apos;m confused why we need our own model type for this?  The QueueStatusServer just uses plain old blobs.
QueueStatusServer does not expect the file size over 1M, but test results json could be over this limit.

&gt; 
&gt; WebKitTools/TestResultServer/model/jsonresults.py:49
&gt;  +      def _strip_prefix_suffix(cls, data):
&gt; This method is fragile with changes to JSON_RESULTS_PREFIX and JSON_RESULTS_SUFFIX.
&gt; 
&gt; WebKitTools/TestResultServer/model/jsonresults.py:59
&gt;  +          return data[len(JSON_RESULTS_PREFIX):
&gt; Maybe we should ASSERT that the suffix and prefix are as expected in the data?
Good suggestion. done.

&gt; 
&gt; WebKitTools/TestResultServer/model/jsonresults.py:103
&gt;  +      def _merge_json(cls, aggregated_json, incremental_json):
&gt; This method is rather large and could be split into smaller bits.
done

&gt; 
&gt; WebKitTools/TestResultServer/model/jsonresults.py:188
&gt;  +                      incremental_json[test_name][JSON_RESULTS_RESULTS],
&gt; I might have used local variables for incremental_json[test_name] and agregated_json[test_name]
done

&gt; 
&gt; WebKitTools/TestResultServer/model/jsonresults.py:215
&gt;  +                  for i in reversed(range(1, len(aggregated_item))):
&gt; I&apos;m surprised python doesn&apos;t have a more concise way to express &quot;reversed(range(1, len(aggregated_item)))&quot;
Ya, I couldn&apos;t find a better way.

&gt; 
&gt; This is a really big change to try and digest at once. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226956</commentid>
    <comment_count>18</comment_count>
      <attachid>56280</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-05-17 15:54:00 -0700</bug_when>
    <thetext>Created attachment 56280
Updated patch per Eric&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228029</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-19 15:59:50 -0700</bug_when>
    <thetext>I tried to review your patch, but it was large and I got lost.  Will try again later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259704</commentid>
    <comment_count>20</comment_count>
      <attachid>56280</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-03 14:52:49 -0700</bug_when>
    <thetext>Comment on attachment 56280
Updated patch per Eric&apos;s comments.

All nits except for one correctness concern below. Thanks for waiting patiently for this review. Also, thanks for writing tests. Makes it much easier to be confident about the correctness of the merging code. Please fix the below and upload a new patch.

&gt; +++ WebKitTools/TestResultServer/model/datastorefile.py	(revision 0)
There should be a trailing newline at the end of the file.

&gt; +        # Tests properties are merged in _merg_tests.
Typo: _merg_tests

&gt; +            # Return if not all build numbers in the incremental json results
&gt; +            # are newer than the most recent build in the aggregated results.
&gt; +            if build_number &lt; aggregated_build_number:
&gt; +                logging.warning((&quot;Build %d in incremental json is older than &quot;
&gt; +                    &quot;the most recent build in aggregated results: %d&quot;),
&gt; +                    build_number, aggregated_build_number)
&gt; +                return False

Maybe put in a FIXME to make this case work? It&apos;s certainly not high priority, but we might care one day to improve on this.

&gt; +            # Skip merging duplicate build.
&gt; +            if build_number == aggregated_build_number:
&gt; +                logging.warning(&quot;Duplicate build %d in incremental json&quot;,
&gt; +                    build_number)
&gt; +                continue

Skipping duplicated builds seems fine, but we&apos;d need to skip the corresponding value in _merge_tests as well. Otherwise, the results get out of sync with the build numbers. I&apos;d be OK with adding a FIXME for now and just returning False here as well. Although, of course, feel free to fix it. Please add a test for this case either way.

&gt; +        # Make sure results json version is updated.
&gt; +        aggregated_json[JSON_RESULTS_VERSION_KEY] = JSON_RESULTS_VERSION

This comment doesn&apos;t add much to the code.

&gt; +
&gt; +        return file

Need newline at end of file.

&gt; +++ WebKitTools/TestResultServer/model/jsonresults_unittest.py	(revision 0)
&gt; +if __name__ == &apos;__main__&apos;:
&gt; +    unittest.main()

Newline at end of file. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259750</commentid>
    <comment_count>21</comment_count>
      <attachid>63390</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-08-03 16:58:07 -0700</bug_when>
    <thetext>Created attachment 63390
Updated patch per Ojan&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259753</commentid>
    <comment_count>22</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-08-03 17:02:41 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 56280 [details])
&gt; All nits except for one correctness concern below. Thanks for waiting patiently for this review. Also, thanks for writing tests. Makes it much easier to be confident about the correctness of the merging code. Please fix the below and upload a new patch.
&gt; 
&gt; &gt; +++ WebKitTools/TestResultServer/model/datastorefile.py	(revision 0)
&gt; There should be a trailing newline at the end of the file.
This will cause PEP8 style warning:  blank line at end of file  [pep8/W391]

&gt; 
&gt; &gt; +        # Tests properties are merged in _merg_tests.
&gt; Typo: _merg_tests
fixed

&gt; 
&gt; &gt; +            # Return if not all build numbers in the incremental json results
&gt; &gt; +            # are newer than the most recent build in the aggregated results.
&gt; &gt; +            if build_number &lt; aggregated_build_number:
&gt; &gt; +                logging.warning((&quot;Build %d in incremental json is older than &quot;
&gt; &gt; +                    &quot;the most recent build in aggregated results: %d&quot;),
&gt; &gt; +                    build_number, aggregated_build_number)
&gt; &gt; +                return False
&gt; 
&gt; Maybe put in a FIXME to make this case work? It&apos;s certainly not high priority, but we might care one day to improve on this.
done

&gt; 
&gt; &gt; +            # Skip merging duplicate build.
&gt; &gt; +            if build_number == aggregated_build_number:
&gt; &gt; +                logging.warning(&quot;Duplicate build %d in incremental json&quot;,
&gt; &gt; +                    build_number)
&gt; &gt; +                continue
&gt; 
&gt; Skipping duplicated builds seems fine, but we&apos;d need to skip the corresponding value in _merge_tests as well. Otherwise, the results get out of sync with the build numbers. I&apos;d be OK with adding a FIXME for now and just returning False here as well. Although, of course, feel free to fix it. Please add a test for this case either way.
It is little tricky in handling the property data for each test in this case. The property data (results) is accumulated value, so need to be careful on how to drop or modify its value for the duplicated build number. Added a FIXME for now. Also added a test case.

&gt; 
&gt; &gt; +        # Make sure results json version is updated.
&gt; &gt; +        aggregated_json[JSON_RESULTS_VERSION_KEY] = JSON_RESULTS_VERSION
&gt; 
&gt; This comment doesn&apos;t add much to the code.
removed

&gt; 
&gt; &gt; +
&gt; &gt; +        return file
&gt; 
&gt; Need newline at end of file.
see above

&gt; 
&gt; &gt; +++ WebKitTools/TestResultServer/model/jsonresults_unittest.py	(revision 0)
&gt; &gt; +if __name__ == &apos;__main__&apos;:
&gt; &gt; +    unittest.main()
&gt; 
&gt; Newline at end of file. :)
see above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260135</commentid>
    <comment_count>23</comment_count>
      <attachid>63475</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-08-04 11:58:23 -0700</bug_when>
    <thetext>Created attachment 63475
Updated Patch

Remove one debugging statement (print request) from the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260275</commentid>
    <comment_count>24</comment_count>
      <attachid>63475</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-08-04 16:52:10 -0700</bug_when>
    <thetext>Comment on attachment 63475
Updated Patch

Clearing flags on attachment: 63475

Committed r64687: &lt;http://trac.webkit.org/changeset/64687&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260276</commentid>
    <comment_count>25</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-08-04 16:52:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55163</attachid>
            <date>2010-05-05 15:51:52 -0700</date>
            <delta_ts>2010-05-05 15:59:18 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>ae_merge.patch</filename>
            <type>text/plain</type>
            <size>100700</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU4ODQwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTAtMDUtMDUgIFZpY3RvciBXYW5nICA8dmlj
dG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKwktLiBBZGQgcmVzdWx0Lmpzb24gaW5jcmVtZW50YWwgbWVyZ2luZyBmdW5jdGlvbmFsaXR5
IHRvIHRlc3QgcmVzdWx0cyBhcHAgZW5naW5lLgorICAgICAgICAtLiBibG9ic3RvcmUgaXMgbm90
IHN1aXRhYmxlIGZvciBBRSBkYXRhIG1lcmdpbmcgYW5kIHRoZXJlIGlzIG5vIEFQSSB0bworICAg
ICAgICAgICBwcm9ncmFtYXRpY2FsbHkgZWRpdCBleGlzdGluZyBibG9iIG9yIHdyaXRlIGEgbmV3
IG9uZSB5ZXQsIHNvIHJlcGxhY2UgYmxib3N0b3JlCisgICAgICAgICAgIHdpdGggZGF0YXN0b3Jl
LiBJZiBmaWxlIGlzIG92ZXJzaXplICg+MTAwMCoxMDAwIGJ5dGVzKSwgc3RvcmUgZmlsZSBkYXRh
IGluCisgICAgICAgICAgIG11bHRpcGxlIGRhdGFzdG9yZSBlbnRyaWVzLgorCS0uIEZpeCBzdHls
ZXMuCisKKyAgICAgICAgVGVzdDoganNvbnJlc3VsdHNfdW5pdHRlc3QgdG8gdGVzdCBtZXJnaW5n
IGxvZ2ljcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mzg1OTkKKworICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvYXBwLnlhbWw6CisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5OgorICAgICAg
ICAqIFRlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvbWVudS5weToKKyAgICAgICAgKiBUZXN0UmVz
dWx0U2VydmVyL2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5weToKKyAgICAgICAgKiBUZXN0UmVz
dWx0U2VydmVyL21haW4ucHk6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNo
Ym9hcmRmaWxlLnB5OgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3Jl
ZmlsZS5weTogQWRkZWQuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVz
dWx0cy5weTogQWRkZWQuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVz
dWx0c191bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2Rl
bC90ZXN0ZmlsZS5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb246IEFk
ZGVkLgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9MSUNFTlNFLnR4dDog
QWRkZWQuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL1JFQURNRS50eHQ6
IEFkZGVkLgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL19zcGVlZHVw
cy5jOiBBZGRlZC4KKyAgICAgICAgKGFzY2lpX2VzY2FwZV9jaGFyKToKKyAgICAgICAgKGFzY2lp
X2VzY2FwZV91bmljb2RlKToKKyAgICAgICAgKGFzY2lpX2VzY2FwZV9zdHIpOgorICAgICAgICAo
cHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpOgorICAgICAgICAoaW5pdF9zcGVlZHVwcyk6Cisg
ICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL2RlY29kZXIucHk6IEFkZGVkLgor
ICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9lbmNvZGVyLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vanNvbmZpbHRlci5weTogQWRk
ZWQuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL3NjYW5uZXIucHk6IEFk
ZGVkLgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3VwbG9hZGZvcm0uaHRt
bDoKKwogMjAxMC0wNS0wNCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCkluZGV4OiBXZWJLaXRUb29scy9UZXN0
UmVzdWx0U2VydmVyL2FwcC55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvYXBwLnlhbWwJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9hcHAueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLWFwcGxp
Y2F0aW9uOiB0ZXN0LXJlc3VsdHMKK2FwcGxpY2F0aW9uOiB0ZXN0LXJlc3VsdHMtdGVzdAogdmVy
c2lvbjogMQogcnVudGltZTogcHl0aG9uCiBhcGlfdmVyc2lvbjogMQpJbmRleDogV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9tYWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvbWFpbi5weQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9U
ZXN0UmVzdWx0U2VydmVyL21haW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNDIs
MTcgKzQyLDE1IEBAIHJvdXRlcyA9IFsKICAgICAoJy9kYXNoYm9hcmRzL3VwZGF0ZScsIGRhc2hi
b2FyZGhhbmRsZXIuVXBkYXRlRGFzaGJvYXJkRmlsZSksCiAgICAgKCcvZGFzaGJvYXJkcy8oW14/
XSspPycsIGRhc2hib2FyZGhhbmRsZXIuR2V0RGFzaGJvYXJkRmlsZSksCiAgICAgKCcvdGVzdGZp
bGUvZGVsZXRlJywgdGVzdGZpbGVoYW5kbGVyLkRlbGV0ZUZpbGUpLAotICAgICgnL3Rlc3RmaWxl
L3VwbG9hZHVybCcsIHRlc3RmaWxlaGFuZGxlci5HZXRVcGxvYWRVcmwpLAogICAgICgnL3Rlc3Rm
aWxlL3VwbG9hZCcsIHRlc3RmaWxlaGFuZGxlci5VcGxvYWQpLAogICAgICgnL3Rlc3RmaWxlL3Vw
bG9hZGZvcm0nLCB0ZXN0ZmlsZWhhbmRsZXIuVXBsb2FkRm9ybSksCiAgICAgKCcvdGVzdGZpbGUv
PycsIHRlc3RmaWxlaGFuZGxlci5HZXRGaWxlKSwKLSAgICAoJy91cGxvYWRmYWlsJywgdGVzdGZp
bGVoYW5kbGVyLlVwbG9hZFN0YXR1cyksCi0gICAgKCcvdXBsb2Fkc3VjY2VzcycsIHRlc3RmaWxl
aGFuZGxlci5VcGxvYWRTdGF0dXMpLAogICAgICgnLyp8L21lbnUnLCBtZW51Lk1lbnUpLAogXQog
CiBhcHBsaWNhdGlvbiA9IHdlYmFwcC5XU0dJQXBwbGljYXRpb24ocm91dGVzLCBkZWJ1Zz1UcnVl
KQogCisKIGRlZiBtYWluKCk6CiAgICAgcnVuX3dzZ2lfYXBwKGFwcGxpY2F0aW9uKQogCkluZGV4
OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL2Rhc2hib2FyZGhhbmRsZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9k
YXNoYm9hcmRoYW5kbGVyLnB5CShyZXZpc2lvbiA1ODc5MCkKKysrIFdlYktpdFRvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvZGFzaGJvYXJkaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpA
QCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgotIyAK
KyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3IEBACiAjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
ICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCkBAIC0zOCw2ICszOCw3IEBAIGZyb20gbW9kZWwuZGFzaGJvYXJkZmlsZSBpbXBv
cnQgRGFzaGJvYXIKIAogUEFSQU1fRklMRSA9ICJmaWxlIgogCisKIGRlZiBnZXRfY29udGVudF90
eXBlKGZpbGVuYW1lKToKICAgICByZXR1cm4gbWltZXR5cGVzLmd1ZXNzX3R5cGUoZmlsZW5hbWUp
WzBdIG9yICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iCiAKSW5kZXg6IFdlYktpdFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvbWVudS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL21lbnUucHkJKHJldmlzaW9uIDU4NzkwKQorKysg
V2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9tZW51LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zLDcgKzMsNyBAQAogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6
Ci0jIAorIwogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAogIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAK
ICMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKKyMKICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAog
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKQEAgLTYxLDQgKzYxLDMgQEAgY2xhc3MgTWVudSh3ZWJhcHAuUmVxdWVz
dEhhbmRsZXIpOgogCiAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKAogICAgICAgICAg
ICAgdGVtcGxhdGUucmVuZGVyKCJ0ZW1wbGF0ZXMvbWVudS5odG1sIiwgdGVtcGxhdGVfdmFsdWVz
KSkKLQpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0Zmls
ZWhhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9o
YW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIucHkJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1l
dDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBA
QAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgpAQCAtMzAsMTEgKzMwLDEwIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBv
cnQgdXJsbGliCiAKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0IHVzZXJzCi1mcm9t
IGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVu
Z2luZS5leHQgaW1wb3J0IHdlYmFwcAotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAg
aW1wb3J0IGJsb2JzdG9yZV9oYW5kbGVycwogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJh
cHAgaW1wb3J0IHRlbXBsYXRlCiAKK2Zyb20gbW9kZWwuanNvbnJlc3VsdHMgaW1wb3J0IEpzb25S
ZXN1bHRzCiBmcm9tIG1vZGVsLnRlc3RmaWxlIGltcG9ydCBUZXN0RmlsZQogCiBQQVJBTV9CVUlM
REVSID0gImJ1aWxkZXIiCkBAIC00MywxMCArNDIsMTEgQEAgUEFSQU1fRklMRSA9ICJmaWxlIgog
UEFSQU1fTkFNRSA9ICJuYW1lIgogUEFSQU1fS0VZID0gImtleSIKIFBBUkFNX1RFU1RfVFlQRSA9
ICJ0ZXN0dHlwZSIKK1BBUkFNX0lOQ1JFTUVOVEFMID0gImluY3JlbWVudGFsIgogCiAKIGNsYXNz
IERlbGV0ZUZpbGUod2ViYXBwLlJlcXVlc3RIYW5kbGVyKToKLSAgICAiIiJEZWxldGUgdGVzdCBm
aWxlIGZvciBhIGdpdmVuIGJ1aWxkZXIgYW5kIG5hbWUgZnJvbSBkYXRhc3RvcmUgKG1ldGFkYXRh
KSBhbmQgYmxvYnN0b3JlIChmaWxlIGRhdGEpLiIiIgorICAgICIiIkRlbGV0ZSB0ZXN0IGZpbGUg
Zm9yIGEgZ2l2ZW4gYnVpbGRlciBhbmQgbmFtZSBmcm9tIGRhdGFzdG9yZS4iIiIKIAogICAgIGRl
ZiBnZXQoc2VsZik6CiAgICAgICAgIGtleSA9IHNlbGYucmVxdWVzdC5nZXQoUEFSQU1fS0VZKQpA
QCAtNTUsNyArNTUsNyBAQCBjbGFzcyBEZWxldGVGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6
CiAgICAgICAgIG5hbWUgPSBzZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX05BTUUpCiAKICAgICAgICAg
bG9nZ2luZy5kZWJ1ZygKLSAgICAgICAgICAgICJEZWxldGluZyBGaWxlLCBidWlsZGVyOiAlcywg
dGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGJsb2Iga2V5OiAlcy4iLAorICAgICAgICAgICAgIkRl
bGV0aW5nIEZpbGUsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywga2V5OiAl
cy4iLAogICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBrZXkpCiAKICAgICAg
ICAgVGVzdEZpbGUuZGVsZXRlX2ZpbGUoa2V5LCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIDEw
MCkKQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgRGVsZXRlRmlsZSh3ZWJhcHAuUmVxdWVzdEhhbmRs
ZXIpOgogICAgICAgICAgICAgJSAoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKSkKIAogCi1jbGFz
cyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvcmVEb3dubG9hZEhhbmRsZXIpOgor
Y2xhc3MgR2V0RmlsZSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgogICAgICIiIkdldCBmaWxlIGNv
bnRlbnQgb3IgbGlzdCBvZiBmaWxlcyBmb3IgZ2l2ZW4gYnVpbGRlciBhbmQgbmFtZS4iIiIKIAog
ICAgIGRlZiBfZ2V0X2ZpbGVfbGlzdChzZWxmLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpOgpA
QCAtNzcsNyArNzcsOCBAQCBjbGFzcyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3Rv
CiAgICAgICAgICAgICBuYW1lOiBmaWxlIG5hbWUKICAgICAgICAgIiIiCiAKLSAgICAgICAgZmls
ZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCAxMDApCisg
ICAgICAgIGZpbGVzID0gVGVzdEZpbGUuZ2V0X2ZpbGVzKAorICAgICAgICAgICAgYnVpbGRlciwg
dGVzdF90eXBlLCBuYW1lLCBsb2FkX2RhdGE9RmFsc2UsIGxpbWl0PTEwMCkKICAgICAgICAgaWYg
bm90IGZpbGVzOgogICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJGaWxlIG5vdCBmb3VuZCwgYnVp
bGRlcjogJXMsIHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLiIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKQpAQCAtMTAzLDE2ICsxMDQsMTUgQEAgY2xh
c3MgR2V0RmlsZShibG9ic3RvcmVfaGFuZGxlcnMuQmxvYnN0bwogICAgICAgICAgICAgbmFtZTog
ZmlsZSBuYW1lCiAgICAgICAgICIiIgogCi0gICAgICAgIGZpbGVzID0gVGVzdEZpbGUuZ2V0X2Zp
bGVzKGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgMSkKKyAgICAgICAgZmlsZXMgPSBUZXN0Rmls
ZS5nZXRfZmlsZXMoCisgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGxvYWRf
ZGF0YT1UcnVlLCBsaW1pdD0xKQogICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBs
b2dnaW5nLmluZm8oIkZpbGUgbm90IGZvdW5kLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywg
bmFtZTogJXMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUs
IG5hbWUpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBibG9iX2tleSA9IGZpbGVzWzBd
LmJsb2Jfa2V5Ci0gICAgICAgIGJsb2JfaW5mbyA9IGJsb2JzdG9yZS5nZXQoYmxvYl9rZXkpCi0g
ICAgICAgIGlmIGJsb2JfaW5mbzoKLSAgICAgICAgICAgIHNlbGYuc2VuZF9ibG9iKGJsb2JfaW5m
bywgInRleHQvcGxhaW4iKQorICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbIkNvbnRlbnQt
VHlwZSJdID0gInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiCisgICAgICAgIHNlbGYucmVzcG9u
c2Uub3V0LndyaXRlKGZpbGVzWzBdLmRhdGEpCiAKICAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAg
ICBidWlsZGVyID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9CVUlMREVSKQpAQCAtMTMzLDg5ICsx
MzMsNzIgQEAgY2xhc3MgR2V0RmlsZShibG9ic3RvcmVfaGFuZGxlcnMuQmxvYnN0bwogICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX2dldF9maWxlX2NvbnRlbnQoYnVpbGRlciwgdGVzdF90eXBlLCBu
YW1lKQogCiAKLWNsYXNzIEdldFVwbG9hZFVybCh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAg
ICIiIkdldCBhbiB1cmwgZm9yIHVwbG9hZGluZyBmaWxlIHRvIGJsb2JzdG9yZS4gQSBzcGVjaWFs
IHVybCBpcyByZXF1aXJlZCBmb3IgZWFjaCBibG9ic290cmUgdXBsb2FkLiIiIgotCi0gICAgZGVm
IGdldChzZWxmKToKLSAgICAgICAgdXBsb2FkX3VybCA9IGJsb2JzdG9yZS5jcmVhdGVfdXBsb2Fk
X3VybCgiL3Rlc3RmaWxlL3VwbG9hZCIpCi0gICAgICAgIGxvZ2dpbmcuaW5mbygiR2V0dGluZyB1
cGxvYWQgdXJsOiAlcy4iLCB1cGxvYWRfdXJsKQotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53
cml0ZSh1cGxvYWRfdXJsKQotCi0KLWNsYXNzIFVwbG9hZChibG9ic3RvcmVfaGFuZGxlcnMuQmxv
YnN0b3JlVXBsb2FkSGFuZGxlcik6Ci0gICAgIiIiVXBsb2FkIGZpbGUgdG8gYmxvYnN0b3JlLiIi
IgorY2xhc3MgVXBsb2FkKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiVXBsb2FkIHRl
c3QgcmVzdWx0cyBmaWxlIHRvIGRhdGFzdG9yZS4iIiIKIAogICAgIGRlZiBwb3N0KHNlbGYpOgot
ICAgICAgICB1cGxvYWRlZF9maWxlcyA9IHNlbGYuZ2V0X3VwbG9hZHMoImZpbGUiKQotICAgICAg
ICBpZiBub3QgdXBsb2FkZWRfZmlsZXM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBsb2Fk
X2RvbmUoWygiTWlzc2luZyB1cGxvYWQgZmlsZSBmaWVsZC4iKV0pCisgICAgICAgIGZpbGVfcGFy
YW1zID0gc2VsZi5yZXF1ZXN0LlBPU1QuZ2V0YWxsKFBBUkFNX0ZJTEUpCisgICAgICAgIGlmIG5v
dCBmaWxlX3BhcmFtczoKKyAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlM
OiBtaXNzaW5nIHVwbG9hZCBmaWxlIGZpZWxkLiIpCisgICAgICAgICAgICByZXR1cm4KIAogICAg
ICAgICBidWlsZGVyID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9CVUlMREVSKQogICAgICAgICBp
ZiBub3QgYnVpbGRlcjoKLSAgICAgICAgICAgIGZvciBibG9iX2luZm8gaW4gdXBsb2FkZWRfZmls
ZXM6Ci0gICAgICAgICAgICAgICAgYmxvYl9pbmZvLmRlbGV0ZSgpCi0gICAgCi0gICAgICAgICAg
ICByZXR1cm4gc2VsZi5fdXBsb2FkX2RvbmUoWygiTWlzc2luZyBidWlsZGVyIHBhcmFtZXRlciBp
biB1cGxvYWQgcmVxdWVzdC4iKV0pCisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0
ZSgiRkFJTDogbWlzc2luZyBidWlsZGVyIHBhcmFtZXRlci4iKQorICAgICAgICAgICAgcmV0dXJu
CiAKICAgICAgICAgdGVzdF90eXBlID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9URVNUX1RZUEUp
CisgICAgICAgIGluY3JlbWVudGFsID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9JTkNSRU1FTlRB
TCkKIAogICAgICAgICBsb2dnaW5nLmRlYnVnKAogICAgICAgICAgICAgIlByb2Nlc3NpbmcgdXBs
b2FkIHJlcXVlc3QsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLiIsCiAgICAgICAgICAgICBi
dWlsZGVyLCB0ZXN0X3R5cGUpCiAKKyAgICAgICAgIyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHR5
cGVzIG9mIGVhY2ggZmlsZV9wYXJhbXMgaW4gdGhlIHJlcXVlc3Q6CisgICAgICAgICMgb25lIGZp
bGUgaXRlbSBvciBhIGxpc3Qgb2YgZmlsZSBpdGVtcy4KKyAgICAgICAgIyBOb3JtYWxpemUgZmls
ZV9wYXJhbXMgdG8gYmVjb21lcyBhIGZpbGUgaXRlbSBsaXN0LgorICAgICAgICBmaWxlcyA9IFtd
CisgICAgICAgIGxvZ2dpbmcuZGVidWcoInRlc3Q6ICVzLCB0eXBlOiVzIiwgZmlsZV9wYXJhbXMs
IHR5cGUoZmlsZV9wYXJhbXMpKQorICAgICAgICBmb3IgaXRlbSBpbiBmaWxlX3BhcmFtczoKKyAg
ICAgICAgICAgIGlmIHR5cGUoaXRlbSkgaXMgbGlzdDoKKyAgICAgICAgICAgICAgICBmaWxlcy5l
eHRlbmQoaXRlbSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZXMuYXBw
ZW5kKGl0ZW0pCisKICAgICAgICAgZXJyb3JzID0gW10KLSAgICAgICAgZm9yIGJsb2JfaW5mbyBp
biB1cGxvYWRlZF9maWxlczoKLSAgICAgICAgICAgIHRmID0gVGVzdEZpbGUudXBkYXRlX2ZpbGUo
YnVpbGRlciwgdGVzdF90eXBlLCBibG9iX2luZm8pCisgICAgICAgIGZvciBmIGluIGZpbGVzOgor
ICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCB1cGRhdGUgb3IgcmVwbGFjZSB0aGUgd2hvbGUgZmls
ZS4KKyAgICAgICAgICAgIGlmIGluY3JlbWVudGFsOgorICAgICAgICAgICAgICAgIGlmIGYuZmls
ZW5hbWUgIT0gInJlc3VsdHMuanNvbiI6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hcHBl
bmQoCisgICAgICAgICAgICAgICAgICAgICAgICAiTWVyZ2luZyBpbmNyZW1lbnRhbCByZXN1bHRz
ICVzIGlzIG5vdCBzdXBwb3J0ZWQiICUgZi5maWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKKworICAgICAgICAgICAgICAgIHRmID0gSnNvblJlc3VsdHMudXBkYXRlKGJ1aWxk
ZXIsIHRlc3RfdHlwZSwgZi52YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgdGYgPSBUZXN0RmlsZS51cGRhdGUoYnVpbGRlciwgdGVzdF90eXBlLCBmLmZpbGVuYW1lLCBm
LnZhbHVlKQorCiAgICAgICAgICAgICBpZiBub3QgdGY6CiAgICAgICAgICAgICAgICAgZXJyb3Jz
LmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgIlVwbG9hZCBmYWlsZWQsIGJ1aWxkZXI6ICVz
LCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcy4iICUKLSAgICAgICAgICAgICAgICAgICAgKGJ1aWxk
ZXIsIHRlc3RfdHlwZSwgYmxvYl9pbmZvLmZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICBibG9i
X2luZm8uZGVsZXRlKCkKLQotICAgICAgICByZXR1cm4gc2VsZi5fdXBsb2FkX2RvbmUoZXJyb3Jz
KQotCi0gICAgZGVmIF91cGxvYWRfZG9uZShzZWxmLCBlcnJvcnMpOgotICAgICAgICBsb2dnaW5n
LmluZm8oInVwbG9hZCBkb25lLiIpCi0KLSAgICAgICAgZXJyb3JfbWVzc2FnZXMgPSBbXQotICAg
ICAgICBmb3IgZXJyb3IgaW4gZXJyb3JzOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKGVycm9y
KQotICAgICAgICAgICAgZXJyb3JfbWVzc2FnZXMuYXBwZW5kKCJlcnJvcj0lcyIgJSB1cmxsaWIu
cXVvdGUoZXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAoYnVpbGRlciwgdGVzdF90eXBlLCBm
LmZpbGVuYW1lKSkKIAotICAgICAgICBpZiBlcnJvcl9tZXNzYWdlczoKLSAgICAgICAgICAgIHJl
ZGlyZWN0X3VybCA9ICIvdXBsb2FkZmFpbD8lcyIgJSAiJiIuam9pbihlcnJvcl9tZXNzYWdlcykK
KyAgICAgICAgaWYgZXJyb3JzOgorICAgICAgICAgICAgbWVzc2FnZXMgPSAiRkFJTDogIiArICI7
ICIuam9pbihlcnJvcnMpCisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcobWVzc2FnZXMpCisg
ICAgICAgICAgICBzZWxmLnJlc3BvbnNlLnNldF9zdGF0dXMoNTAwLCBtZXNzYWdlcykKKyAgICAg
ICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMIikKICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIHJlZGlyZWN0X3VybCA9ICIvdXBsb2Fkc3VjY2VzcyIKLQotICAgICAgICBsb2dn
aW5nLmluZm8ocmVkaXJlY3RfdXJsKQotICAgICAgICAjIEJsb2JzdG9yZVVwbG9hZEhhbmRsZXIg
cmVxdWlyZXMgcmVkaXJlY3QgYXQgdGhlIGVuZC4KLSAgICAgICAgc2VsZi5yZWRpcmVjdChyZWRp
cmVjdF91cmwpCisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLnNldF9zdGF0dXMoMjAwKQorICAg
ICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIk9LIikKIAogCiBjbGFzcyBVcGxvYWRG
b3JtKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgIiIiU2hvdyBhIGZvcm0gc28gdXNlciBj
YW4gc3VibWl0IGEgZmlsZSB0byBibG9ic3RvcmUuIiIiCisgICAgIiIiU2hvdyBhIGZvcm0gc28g
dXNlciBjYW4gdXBsb2FkIGEgZmlsZS4iIiIKIAogICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAg
IHVwbG9hZF91cmwgPSBibG9ic3RvcmUuY3JlYXRlX3VwbG9hZF91cmwoIi90ZXN0ZmlsZS91cGxv
YWQiKQogICAgICAgICB0ZW1wbGF0ZV92YWx1ZXMgPSB7Ci0gICAgICAgICAgICAidXBsb2FkX3Vy
bCI6IHVwbG9hZF91cmwsCisgICAgICAgICAgICAidXBsb2FkX3VybCI6ICIvdGVzdGZpbGUvdXBs
b2FkIiwKICAgICAgICAgfQogICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSh0ZW1wbGF0
ZS5yZW5kZXIoInRlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVfdmFsdWVzKSkKLQotY2xhc3Mg
VXBsb2FkU3RhdHVzKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgIiIiUmV0dXJuIHN0YXR1
cyBvZiBmaWxlIHVwbG9hZGluZyIiIgotCi0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAgbG9n
Z2luZy5kZWJ1ZygiVXBkYXRlIHN0YXR1cyIpCi0KLSAgICAgICAgaWYgc2VsZi5yZXF1ZXN0LnBh
dGggPT0gIi91cGxvYWRzdWNjZXNzIjoKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uuc2V0X3N0
YXR1cygyMDApCi0gICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiT0siKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgZXJyb3JzID0gc2VsZi5yZXF1ZXN0LnBhcmFtcy5nZXRh
bGwoImVycm9yIikKLSAgICAgICAgICAgIGlmIGVycm9yczoKLSAgICAgICAgICAgICAgICBtZXNz
YWdlcyA9ICJGQUlMOiAiICsgIjsgIi5qb2luKGVycm9ycykKLSAgICAgICAgICAgICAgICBsb2dn
aW5nLndhcm5pbmcobWVzc2FnZXMpCi0gICAgICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRf
c3RhdHVzKDUwMCwgbWVzc2FnZXMpCi0gICAgICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQu
d3JpdGUoIkZBSUwiKQpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9k
YXNoYm9hcmRmaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvbW9kZWwvZGFzaGJvYXJkZmlsZS5weQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29s
cy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2Rhc2hib2FyZGZpbGUucHkJKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMg
CisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgpAQCAtMzYsNiArMzYsNyBAQCBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGlt
cG9ydCBkYgogU1ZOX1BBVEhfREFTSEJPQVJEID0gKCJodHRwOi8vc3JjLmNocm9taXVtLm9yZy92
aWV3dmMvY2hyb21lL3RydW5rL3Rvb2xzLyIKICAgICAiZGFzaGJvYXJkcy8iKQogCisKIGNsYXNz
IERhc2hib2FyZEZpbGUoZGIuTW9kZWwpOgogICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgp
CiAgICAgZGF0YSA9IGRiLkJsb2JQcm9wZXJ0eSgpCkBAIC05Miw3ICs5Myw3IEBAIGNsYXNzIERh
c2hib2FyZEZpbGUoZGIuTW9kZWwpOgogICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAg
ICBsb2dnaW5nLmluZm8oIk5vIGV4aXN0aW5nIGZpbGUsIGFkZGVkIGFzIG5ldyBmaWxlLiIpCiAg
ICAgICAgICAgICByZXR1cm4gY2xzLmFkZF9maWxlKG5hbWUsIGRhdGEpCi0gICAgICAgIAorCiAg
ICAgICAgIGxvZ2dpbmcuZGVidWcoIlVwZGF0aW5nIGV4aXN0aW5nIGZpbGUuIikKICAgICAgICAg
ZmlsZSA9IGZpbGVzWzBdCiAgICAgICAgIGZpbGUuZGF0YSA9IGRhdGEKSW5kZXg6IFdlYktpdFRv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUucHkJKHJl
dmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2RhdGFzdG9y
ZWZpbGUucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5IEBACisjIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20g
Z29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGRiCisKK01BWF9EQVRBX0VOVFJZX1BFUl9GSUxF
ID0gMTAKK01BWF9FTlRSWV9MRU4gPSAxMDAwICogMTAwMAorCisKK2NsYXNzIERhdGFFbnRyeShk
Yi5Nb2RlbCk6CisgICAgIiIiRGF0YXN0b3JlIGVudHJ5IHRoYXQgc3RvcmVzIG9uZSBzZWdtYW50
IG9mIGZpbGUgZGF0YQorICAgICAgICg8MTAwMCoxMDAwIGJ5dGVzKS4KKyAgICAiIiIKKworICAg
IGRhdGEgPSBkYi5CbG9iUHJvcGVydHkoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdl
dChjbHMsIGtleSk6CisgICAgICAgIHJldHVybiBkYi5nZXQoa2V5KQorCisgICAgZGVmIGdldF9k
YXRhKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBkYi5nZXQoa2V5KQorCisKK2NsYXNzIERh
dGFTdG9yZUZpbGUoZGIuTW9kZWwpOgorICAgICIiIlRoaXMgY2xhc3Mgc3RvcmVzIGZpbGUgaW4g
ZGF0YXN0b3JlLgorICAgICAgIElmIGEgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRl
cyksIHRoZSBmaWxlIGlzIHNwbGl0dGVkIGludG8KKyAgICAgICBtdWx0aXBsZSBzZWdtZW50cyBh
bmQgc3RvcmVkIGluIG11bHRpcGxlIGRhdGFzdG9yZSBlbnRyaWVzLgorICAgICIiIgorCisgICAg
bmFtZSA9IGRiLlN0cmluZ1Byb3BlcnR5KCkKKyAgICBkYXRhX2tleXMgPSBkYi5MaXN0UHJvcGVy
dHkoZGIuS2V5KQorICAgIGRhdGUgPSBkYi5EYXRlVGltZVByb3BlcnR5KGF1dG9fbm93X2FkZD1U
cnVlKQorCisgICAgZGF0YSA9IE5vbmUKKworICAgIGRlZiBkZWxldGVfZGF0YShzZWxmLCBrZXlz
PU5vbmUpOgorICAgICAgICBpZiBub3Qga2V5czoKKyAgICAgICAgICAgIGtleXMgPSBzZWxmLmRh
dGFfa2V5cworCisgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIGRhdGFfZW50
cnkgPSBEYXRhRW50cnkuZ2V0KGtleSkKKyAgICAgICAgICAgIGlmIGRhdGFfZW50cnk6CisgICAg
ICAgICAgICAgICAgZGF0YV9lbnRyeS5kZWxldGUoKQorCisgICAgZGVmIHNhdmVfZGF0YShzZWxm
LCBkYXRhKToKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICBsb2dnaW5nLndhcm5p
bmcoIk5vIGRhdGEgdG8gc2F2ZS4iKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAg
ICAgaWYgbGVuKGRhdGEpID4gKE1BWF9EQVRBX0VOVFJZX1BFUl9GSUxFICogTUFYX0VOVFJZX0xF
Tik6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJGaWxlIHRvbyBiaWcsIGNhbid0IHNhdmUg
dG8gZGF0YXN0b3JlOiAlZEsiLAorICAgICAgICAgICAgICAgIGxlbihkYXRhKSAvIDEwMjQpCisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzdGFydCA9IDAKKyAgICAgICAga2V5
cyA9IHNlbGYuZGF0YV9rZXlzCisgICAgICAgIHNlbGYuZGF0YV9rZXlzID0gW10KKyAgICAgICAg
d2hpbGUgc3RhcnQgPCBsZW4oZGF0YSk6CisgICAgICAgICAgICBpZiBrZXlzOgorICAgICAgICAg
ICAgICAgIGtleSA9IGtleXMucG9wKDApCisgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERh
dGFFbnRyeS5nZXQoa2V5KQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhX2VudHJ5OgorICAg
ICAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIkZvdW5kIGtleSwgYnV0IG5vIGRhdGEg
ZW50cnk6ICVzIiwga2V5KQorICAgICAgICAgICAgICAgICAgICBkYXRhX2VudHJ5ID0gRGF0YUVu
dHJ5KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERh
dGFFbnRyeSgpCisKKyAgICAgICAgICAgIGRhdGFfZW50cnkuZGF0YSA9IGRiLkJsb2IoZGF0YVtz
dGFydDogc3RhcnQgKyBNQVhfRU5UUllfTEVOXSkKKyAgICAgICAgICAgIGRhdGFfZW50cnkucHV0
KCkKKworICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJEYXRhIHNhdmVkOiAlcy4iLCBkYXRhX2Vu
dHJ5LmtleSgpKQorICAgICAgICAgICAgc2VsZi5kYXRhX2tleXMuYXBwZW5kKGRhdGFfZW50cnku
a2V5KCkpCisKKyAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgKyBNQVhfRU5UUllfTEVOCisKKyAg
ICAgICAgaWYga2V5czoKKyAgICAgICAgICAgIHNlbGYuZGVsZXRlX2RhdGEoa2V5cykKKworICAg
ICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBs
b2FkX2RhdGEoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmRhdGFfa2V5czoKKyAgICAgICAg
ICAgIGxvZ2dpbmcud2FybmluZygiTm8gZGF0YSB0byBsb2FkLiIpCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIGRhdGEgPSBbXQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuZGF0
YV9rZXlzOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJMb2FkaW5nIGRhdGEgZm9yIGtleTog
JXMuIiwga2V5KQorICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeS5nZXQoa2V5KQor
ICAgICAgICAgICAgaWYgbm90IGRhdGFfZW50cnk6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5l
cnJvcigiTm8gZGF0YSBmb3VuZCBmb3Iga2V5OiAlcy4iLCBrZXkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgICAgICAgICAgZGF0YS5hcHBlbmQoZGF0YV9lbnRyeS5kYXRhKQor
CisgICAgICAgIHNlbGYuZGF0YSA9ICIiLmpvaW4oZGF0YSkKKworICAgICAgICByZXR1cm4gc2Vs
Zi5kYXRhCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVy
L21vZGVsL2RhdGFzdG9yZWZpbGUucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
ICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVz
dWx0cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVs
L2pzb25yZXN1bHRzLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9tb2RlbC9qc29ucmVzdWx0cy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMzYgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQoraW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCBzaW1wbGVqc29uCisKK2Zyb20gbW9kZWwudGVzdGZpbGUgaW1wb3J0
IFRlc3RGaWxlCisKK0pTT05fUkVTVUxUU19GSUxFID0gInJlc3VsdHMuanNvbiIKK0pTT05fUkVT
VUxUU19QUkVGSVggPSAiQUREX1JFU1VMVFMoIgorSlNPTl9SRVNVTFRTX1NVRkZJWCA9ICIpOyIK
K0pTT05fUkVTVUxUU19WRVJTSU9OX0tFWSA9ICJ2ZXJzaW9uIgorSlNPTl9SRVNVTFRTX0JVSUxE
X05VTUJFUlMgPSAiYnVpbGROdW1iZXJzIgorSlNPTl9SRVNVTFRTX1RFU1RTID0gInRlc3RzIgor
SlNPTl9SRVNVTFRTX1JFU1VMVFMgPSAicmVzdWx0cyIKK0pTT05fUkVTVUxUU19USU1FUyA9ICJ0
aW1lcyIKK0pTT05fUkVTVUxUU19WRVJTSU9OID0gMworSlNPTl9SRVNVTFRTX01BWF9CVUlMRFMg
PSA3NTAKKworCitjbGFzcyBKc29uUmVzdWx0cyhvYmplY3QpOgorICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBfc3RyaXBfcHJlZml4X3N1ZmZpeChjbHMsIGRhdGEpOgorICAgICAgICAiIiJTdHJp
cCBvdXQgcHJlZml4IGFuZCBzdWZmaXggb2YganNvbiByZXN1bHRzIHN0cmluZy4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgZGF0YToganNvbiBmaWxlIGNvbnRlbnQuCisKKyAgICAgICAg
UmV0dXJuczoKKyAgICAgICAgICAgIGpzb24gc3RyaW5nIHdpdGhvdXQgcHJlZml4IGFuZCBzdWZm
aXguCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBkYXRhW2xlbihKU09OX1JFU1VMVFNf
UFJFRklYKToKKyAgICAgICAgICAgICAgICAgICAgbGVuKGRhdGEpIC0gbGVuKEpTT05fUkVTVUxU
U19TVUZGSVgpXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9nZW5lcmF0ZV9maWxlX2Rh
dGEoY2xzLCBqc29uLCBzb3J0X2tleXM9RmFsc2UpOgorICAgICAgICAiIiJHaXZlbiBqc29uIHN0
cmluZywgZ2VuZXJhdGUgZmlsZSBjb250ZW50IGRhdGEgYnkgYWRkaW5nCisgICAgICAgICAgIHBy
ZWZpeCBhbmQgc3VmZml4LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBqc29uOiBqc29u
IHN0cmluZyB3aXRob3V0IHByZWZpeCBhbmQgc3VmZml4LgorCisgICAgICAgIFJldHVybnM6Cisg
ICAgICAgICAgICBqc29uIGZpbGUgZGF0YS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGF0YSA9
IHNpbXBsZWpzb24uZHVtcHMoanNvbiwgc2VwYXJhdG9ycz0oJywnLCAnOicpLAorICAgICAgICAg
ICAgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgcmV0dXJuIEpTT05fUkVTVUxUU19QUkVG
SVggKyBkYXRhICsgSlNPTl9SRVNVTFRTX1NVRkZJWAorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIF9sb2FkX2pzb24oY2xzLCBmaWxlX2RhdGEpOgorICAgICAgICAiIiJMb2FkIGpzb24gZmls
ZSB0byBhIHB5dGhvbiBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVf
ZGF0YToganNvbiBmaWxlIGNvbnRlbnQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAg
IGpzb24gb2JqZWN0IG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIi
IgorCisgICAgICAgIGpzb25fcmVzdWx0c19zdHIgPSBjbHMuX3N0cmlwX3ByZWZpeF9zdWZmaXgo
ZmlsZV9kYXRhKQorICAgICAgICBpZiBub3QganNvbl9yZXN1bHRzX3N0cjoKKyAgICAgICAgICAg
IGxvZ2dpbmcud2FybmluZygiTm8ganNvbiByZXN1bHRzIGRhdGEuIikKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNpbXBsZWpzb24u
bG9hZHMoanNvbl9yZXN1bHRzX3N0cikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgor
ICAgICAgICAgICAgbG9nZ2luZy5kZWJ1Zyhqc29uX3Jlc3VsdHNfc3RyKQorICAgICAgICAgICAg
bG9nZ2luZy5lcnJvcigiRmFpbGVkIHRvIGxvYWQganNvbiByZXN1bHRzOiAlcyIsIHN0cihlcnIp
KQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBf
bWVyZ2VfanNvbihjbHMsIGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbik6CisgICAg
ICAgICIiIk1lcmdlIGluY3JlbWVudGFsIGpzb24gaW50byBhZ2dyZWdhdGVkIGpzb24gcmVzdWx0
cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dyZWdh
dGVkIGpzb24gb2JqZWN0LgorICAgICAgICAgICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVtZW50
YWwganNvbiBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWUgaWYg
bWVyZ2Ugc3VjY2VlZHMgb3IKKyAgICAgICAgICAgIEZhbHNlIG9uIGZhaWx1cmUuCisgICAgICAg
ICIiIgorCisgICAgICAgIGluY3JlbWVudGFsX2J1aWxkcyA9IGluY3JlbWVudGFsX2pzb25bSlNP
Tl9SRVNVTFRTX0JVSUxEX05VTUJFUlNdCisgICAgICAgIGFnZ3JlZ2F0ZWRfYnVpbGRzID0gYWdn
cmVnYXRlZF9qc29uW0pTT05fUkVTVUxUU19CVUlMRF9OVU1CRVJTXQorICAgICAgICBhZ2dyZWdh
dGVkX2J1aWxkX251bWJlciA9IGludChhZ2dyZWdhdGVkX2J1aWxkc1swXSkKKyAgICAgICAgIyBM
b29wIHRocm91Z2ggYWxsIGluY3JlbWVudGFsIGJ1aWxkcywgc3RhcnQgZnJvbSB0aGUgb2xkZXN0
IHJ1bi4KKyAgICAgICAgZm9yIGluZGV4IGluIHJldmVyc2VkKHJhbmdlKGxlbihpbmNyZW1lbnRh
bF9idWlsZHMpKSk6CisgICAgICAgICAgICBidWlsZF9udW1iZXIgPSBpbnQoaW5jcmVtZW50YWxf
YnVpbGRzW2luZGV4XSkKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIk1lcmdpbmcgYnVpbGQg
JXMsIGluY3JlbWVudGFsIGpzb24gaW5kZXg6ICVkLiIsCisgICAgICAgICAgICAgICAgYnVpbGRf
bnVtYmVyLCBpbmRleCkKKworICAgICAgICAgICAgIyBSZXR1cm4gaWYgbm90IGFsbCBidWlsZCBu
dW1iZXJzIGluIHRoZSBpbmNyZW1lbnRhbCBqc29uIHJlc3VsdHMKKyAgICAgICAgICAgICMgYXJl
IG5ld2VyIHRoYW4gdGhlIG1vc3QgcmVjZW50IGJ1aWxkIGluIHRoZSBhZ2dyZWdhdGVkIHJlc3Vs
dHMuCisgICAgICAgICAgICBpZiBidWlsZF9udW1iZXIgPCBhZ2dyZWdhdGVkX2J1aWxkX251bWJl
cjoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoKCJCdWlsZCAlZCBpbiBpbmNyZW1l
bnRhbCBqc29uIGlzIG9sZGVyIHRoYW4gIgorICAgICAgICAgICAgICAgICAgICAidGhlIG1vc3Qg
cmVjZW50IGJ1aWxkIGluIGFnZ3JlZ2F0ZWQgcmVzdWx0czogJWQiKSwKKyAgICAgICAgICAgICAg
ICAgICAgYnVpbGRfbnVtYmVyLCBhZ2dyZWdhdGVkX2J1aWxkX251bWJlcikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgIyBTa2lwIG1lcmdpbmcgZHVwbGljYXRl
IGJ1aWxkLgorICAgICAgICAgICAgaWYgYnVpbGRfbnVtYmVyID09IGFnZ3JlZ2F0ZWRfYnVpbGRf
bnVtYmVyOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiRHVwbGljYXRlIGJ1aWxk
ICVkIGluIGluY3JlbWVudGFsIGpzb24iLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9udW1i
ZXIpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBNZXJnZSB0aGlz
IGJ1aWxkIGludG8gYWdncmVhZ2F0ZWQgcmVzdWx0cy4KKyAgICAgICAgICAgIGNscy5fbWVyZ2Vf
b25lX2J1aWxkKGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbiwgaW5kZXgpCisgICAg
ICAgICAgICBsb2dnaW5nLmRlYnVnKCJNZXJnZWQgYnVpbGQgJXMsIG1lcmdlZCBqc29uOiAlcy4i
LAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlciwgYWdncmVnYXRlZF9qc29uKQorCisgICAg
ICAgICMgTWVyZ2UgdGVzdHMgcmVzdWx0cyBhbmQgdGltZXMKKyAgICAgICAgaW5jcmVtZW50YWxf
dGVzdHMgPSBpbmNyZW1lbnRhbF9qc29uW0pTT05fUkVTVUxUU19URVNUU10KKyAgICAgICAgaWYg
aW5jcmVtZW50YWxfdGVzdHM6CisgICAgICAgICAgICBhZ2dyZWdhdGVkX3Rlc3RzID0gYWdncmVn
YXRlZF9qc29uW0pTT05fUkVTVUxUU19URVNUU10KKyAgICAgICAgICAgIGNscy5fbWVyZ2VfdGVz
dHMoYWdncmVnYXRlZF90ZXN0cywgaW5jcmVtZW50YWxfdGVzdHMpCisKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2Vfb25lX2J1aWxkKGNscywg
YWdncmVnYXRlZF9qc29uLCBpbmNyZW1lbnRhbF9qc29uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGluY3JlbWVudGFsX2luZGV4KToKKyAgICAgICAgIiIiTWVyZ2Ugb25lIGJ1aWxkIG9mIGlu
Y3JlbWVudGFsIGpzb24gaW50byBhZ2dyZWdhdGVkIGpzb24gcmVzdWx0cy4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dyZWdhdGVkIGpzb24gb2JqZWN0
LgorICAgICAgICAgICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVtZW50YWwganNvbiBvYmplY3Qu
CisgICAgICAgICAgICBpbmNyZW1lbnRhbF9pbmRleDogaW5kZXggb2YgdGhlIGluY3JlbWVudGFs
IGpzb24gcmVzdWx0cyB0byBtZXJnZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGtleSBp
biBpbmNyZW1lbnRhbF9qc29uLmtleXMoKToKKyAgICAgICAgICAgICMgTWVyZ2UganNvbiByZXN1
bHRzIGV4Y2VwdCAidGVzdHMiIHByb3BlcnRpZXMgKHJlc3VsdHMsIHRpbWVzIGV0YykuCisgICAg
ICAgICAgICAjICJ0ZXN0cyIgcHJvcGVydGllcyB3aWxsIGJlIGhhbmRsZWQgc2VwYXJhdGVseS4K
KyAgICAgICAgICAgIGlmIGtleSA9PSBKU09OX1JFU1VMVFNfVEVTVFM6CisgICAgICAgICAgICAg
ICAgY29udGludWUKKworICAgICAgICAgICAgaWYga2V5IGluIGFnZ3JlZ2F0ZWRfanNvbjoKKyAg
ICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XS5pbnNlcnQoCisgICAgICAgICAgICAg
ICAgICAgIDAsIGluY3JlbWVudGFsX2pzb25ba2V5XVtpbmNyZW1lbnRhbF9pbmRleF0pCisgICAg
ICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uW2tleV0gPSBcCisgICAgICAgICAgICAgICAgICAg
IGFnZ3JlZ2F0ZWRfanNvbltrZXldWzpKU09OX1JFU1VMVFNfTUFYX0JVSUxEU10KKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uW2tleV0gPSBpbmNyZW1l
bnRhbF9qc29uW2tleV0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2VfdGVzdHMo
Y2xzLCBhZ2dyZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24pOgorICAgICAgICAiIiJNZXJn
ZSAidGVzdHMiIHByb3BlcnRpZXM6cmVzdWx0cywgdGltZXMuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbjogYWdncmVnYXRlZCBqc29uIG9iamVjdC4KKyAgICAg
ICAgICAgIGluY3JlbWVudGFsX2pzb246IGluY3JlbWVudGFsIGpzb24gb2JqZWN0LgorICAgICAg
ICAiIiIKKworICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGluY3JlbWVudGFsX2pzb246CisgICAg
ICAgICAgICBpZiB0ZXN0X25hbWUgaW4gYWdncmVnYXRlZF9qc29uOgorICAgICAgICAgICAgICAg
IGNscy5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKAorICAgICAgICAgICAgICAgICAg
ICBpbmNyZW1lbnRhbF9qc29uW3Rlc3RfbmFtZV1bSlNPTl9SRVNVTFRTX1JFU1VMVFNdLAorICAg
ICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bdGVzdF9uYW1lXVtKU09OX1JFU1VMVFNf
UkVTVUxUU10pCisgICAgICAgICAgICAgICAgY2xzLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2Vu
Y29kZWQoCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsX2pzb25bdGVzdF9uYW1lXVtK
U09OX1JFU1VMVFNfVElNRVNdLAorICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25b
dGVzdF9uYW1lXVtKU09OX1JFU1VMVFNfVElNRVNdKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bdGVzdF9uYW1lXSA9IGluY3JlbWVudGFsX2pzb25b
dGVzdF9uYW1lXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9pbnNlcnRfaXRlbV9ydW5f
bGVuZ3RoX2VuY29kZWQoY2xzLCBpbmNyZW1lbnRhbF9pdGVtLCBhZ2dyZWdhdGVkX2l0ZW0pOgor
ICAgICAgICAiIiJJbnNlcnRzIHRoZSBpbmNyZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29kZWQgcmVz
dWx0cyBpbnRvIHRoZSBhZ2dyZWdhdGVkCisgICAgICAgICAgIHJ1bi1sZW5ndGggZW5jb2RlZCBy
ZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpbmNyZW1lbnRhbF9pdGVtOiBp
bmNyZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKyAgICAgICAgICAgIGFnZ3Jl
Z2F0ZWRfaXRlbTogYWdncmVnYXRlZCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKyAgICAg
ICAgIiIiCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gaW5jcmVtZW50YWxfaXRlbToKKyAgICAgICAg
ICAgIGlmIGxlbihhZ2dyZWdhdGVkX2l0ZW0pIGFuZCBpdGVtWzFdID09IGFnZ3JlZ2F0ZWRfaXRl
bVswXVsxXToKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0ZW1bMF1bMF0gPSBtaW4oCisg
ICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfaXRlbVswXVswXSArIGl0ZW1bMF0sIEpTT05f
UkVTVUxUU19NQVhfQlVJTERTKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAj
IFRoZSB0ZXN0IGl0ZW0gdmFsdWVzIG5lZWQgdG8gYmUgc3VtbWVkIGZyb20gY29udGludW91cyBy
dW5zLgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgYW4gb2xkZXIgaXRlbSAobm90IG1v
c3QgcmVjZW50IG9uZSkgd2hvc2UgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAjIHNhbWUgYXMg
dGhlIG9uZSB0byBpbnNlcnQsIHRoZW4gd2Ugc2hvdWxkIHJlbW92ZSB0aGUgb2xkIGl0ZW0KKyAg
ICAgICAgICAgICAgICAjIGZyb20gYWdncmVnYXRlZCBsaXN0LgorICAgICAgICAgICAgICAgIGZv
ciBpIGluIHJldmVyc2VkKHJhbmdlKDEsIGxlbihhZ2dyZWdhdGVkX2l0ZW0pKSk6CisgICAgICAg
ICAgICAgICAgICAgIGlmIGl0ZW1bMV0gPT0gYWdncmVnYXRlZF9pdGVtW2ldWzFdOgorICAgICAg
ICAgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9pdGVtLnBvcChpKQorCisgICAgICAgICAgICAg
ICAgYWdncmVnYXRlZF9pdGVtLmluc2VydCgwLCBpdGVtKQorCisgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIF9jaGVja19qc29uKGNscywgYnVpbGRlciwganNvbik6CisgICAgICAgICIiIkNoZWNr
IHdoZXRoZXIgdGhlIGdpdmVuIGpzb24gaXMgdmFsaWQuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZSB0aGlzIGpzb24gaXMgZm9yLgorICAgICAgICAg
ICAganNvbjoganNvbiBvYmplY3QgdG8gY2hlY2suCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAg
ICAgICAgIFRydWUgaWYgdGhlIGpzb24gaXMgdmFsaWQgb3IKKyAgICAgICAgICAgIEZhbHNlIG90
aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdmVyc2lvbiA9IGpzb25bSlNPTl9SRVNV
TFRTX1ZFUlNJT05fS0VZXQorICAgICAgICBpZiB2ZXJzaW9uID4gSlNPTl9SRVNVTFRTX1ZFUlNJ
T046CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJSZXN1bHRzIEpTT04gdmVyc2lvbiAnJXMn
IGlzIG5vdCBzdXBwb3J0ZWQuIiwKKyAgICAgICAgICAgICAgICB2ZXJzaW9uKQorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IGJ1aWxkZXIgaW4ganNvbjoKKyAgICAg
ICAgICAgIGxvZ2dpbmcuZXJyb3IoIkJ1aWxkZXIgJyVzJyBpcyBub3QgaW4ganNvbiByZXN1bHRz
LiIsIGJ1aWxkZXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXN1bHRz
X2Zvcl9idWlsZGVyID0ganNvbltidWlsZGVyXQorICAgICAgICBpZiBub3QgSlNPTl9SRVNVTFRT
X0JVSUxEX05VTUJFUlMgaW4gcmVzdWx0c19mb3JfYnVpbGRlcjoKKyAgICAgICAgICAgIGxvZ2dp
bmcuZXJyb3IoIk1pc3NpbmcgYnVpbGQgbnVtYmVyIGluIGpzb24gcmVzdWx0cy4iKQorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBtZXJnZShjbHMsIGJ1aWxkZXIsIGFnZ3JlZ2F0ZWQsIGluY3JlbWVudGFs
LCBzb3J0X2tleXM9RmFsc2UpOgorICAgICAgICAiIiJNZXJnZSBpbmNyZW1lbnRhbCBqc29uIGZp
bGUgZGF0YSB3aXRoIGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZS4KKyAgICAgICAgICAgIGFnZ3JlZ2F0
ZWQ6IGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBpbmNyZW1lbnRhbDog
aW5jcmVtZW50YWwganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBzb3J0X2tleTogd2hldGhl
ciBvciBub3QgdG8gc29ydCBrZXkgd2hlbiBkdW1waW5nIGpzb24gcmVzdWx0cy4KKworICAgICAg
ICBSZXR1cm5zOgorICAgICAgICAgICAgTWVyZ2VkIGpzb24gZmlsZSBkYXRhIGlmIG1lcmdlIHN1
Y2NlZWRzIG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgorCisg
ICAgICAgIGlmIG5vdCBpbmNyZW1lbnRhbDoKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygi
Tm90aGluZyB0byBtZXJnZS4iKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBs
b2dnaW5nLmluZm8oIkxvYWRpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAgIGluY3Jl
bWVudGFsX2pzb24gPSBjbHMuX2xvYWRfanNvbihpbmNyZW1lbnRhbCkKKyAgICAgICAgaWYgbm90
IGluY3JlbWVudGFsX2pzb246CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGxv
Z2dpbmcuaW5mbygiQ2hlY2tpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAgIGlmIG5v
dCBjbHMuX2NoZWNrX2pzb24oYnVpbGRlciwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBleGlzdGluZyBh
Z2dyZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBhZ2dyZWdhdGVkX2pzb24gPSBjbHMuX2xvYWRf
anNvbihhZ2dyZWdhdGVkKQorICAgICAgICBpZiBub3QgYWdncmVnYXRlZF9qc29uOgorICAgICAg
ICAgICAgcmV0dXJuIGluY3JlbWVudGFsCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJDaGVja2lu
ZyBleGlzdGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBpZiBub3QgY2xzLl9jaGVj
a19qc29uKGJ1aWxkZXIsIGFnZ3JlZ2F0ZWRfanNvbik6CisgICAgICAgICAgICByZXR1cm4gaW5j
cmVtZW50YWwKKworICAgICAgICBsb2dnaW5nLmluZm8oIk1lcmdpbmcganNvbiByZXN1bHRzLi4u
IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGNscy5fbWVyZ2VfanNvbigKKyAg
ICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bYnVpbGRlcl0sCisgICAgICAgICAgICAgICAg
aW5jcmVtZW50YWxfanNvbltidWlsZGVyXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJv
cigiRmFpbGVkIHRvIG1lcmdlIGpzb24gcmVzdWx0czogJXMiLCBzdHIoZXJyKSkKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBNYWtlIHN1cmUgcmVzdWx0cyBqc29uIHZlcnNp
b24gaXMgdXBkYXRlZC4KKyAgICAgICAgYWdncmVnYXRlZF9qc29uW0pTT05fUkVTVUxUU19WRVJT
SU9OX0tFWV0gPSBKU09OX1JFU1VMVFNfVkVSU0lPTgorCisgICAgICAgIHJldHVybiBKc29uUmVz
dWx0cy5fZ2VuZXJhdGVfZmlsZV9kYXRhKGFnZ3JlZ2F0ZWRfanNvbiwgc29ydF9rZXlzKQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHVwZGF0ZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwg
aW5jcmVtZW50YWwpOgorICAgICAgICAiIiJVcGRhdGUgZGF0YXN0b3JlIGpzb24gZmlsZSBkYXRh
IGJ5IG1lcmdpbmcgaXQgd2l0aCBpbmNyZW1lbnRhbCBqc29uCisgICAgICAgICAgIGZpbGUuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZS4KKyAgICAg
ICAgICAgIHRlc3RfdHlwZTogdHlwZSBvZiB0ZXN0IHJlc3VsdHMuCisgICAgICAgICAgICBpbmNy
ZW1lbnRhbDogaW5jcmVtZW50YWwganNvbiBmaWxlIGRhdGEgdG8gbWVyZ2UuCisKKyAgICAgICAg
UmV0dXJuczoKKyAgICAgICAgICAgIFRlc3RGaWxlIG9iamVjdCBpZiB1cGRhdGUgc3VjY2VlZHMg
b3IKKyAgICAgICAgICAgIE5vbmUgb24gZmFpbHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAg
ZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoYnVpbGRlciwgdGVzdF90eXBlLCBKU09OX1JFU1VM
VFNfRklMRSkKKyAgICAgICAgaWYgZmlsZXM6CisgICAgICAgICAgICBmaWxlID0gZmlsZXNbMF0K
KyAgICAgICAgICAgIG5ld19yZXN1bHRzID0gY2xzLm1lcmdlKGJ1aWxkZXIsIGZpbGUuZGF0YSwg
aW5jcmVtZW50YWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFVzZSB0aGUgaW5jcmVt
ZW50YWwgZGF0YSBpZiB0aGVyZSBpcyBubyBhZ2dyZWdhdGVkIGZpbGUgdG8gbWVyZ2UuCisgICAg
ICAgICAgICBmaWxlID0gVGVzdEZpbGUoKQorICAgICAgICAgICAgZmlsZS5idWlsZGVyID0gYnVp
bGRlcgorICAgICAgICAgICAgZmlsZS5uYW1lID0gSlNPTl9SRVNVTFRTX0ZJTEUKKyAgICAgICAg
ICAgIG5ld19yZXN1bHRzID0gaW5jcmVtZW50YWwKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygi
Tm8gZXhpc3RpbmcganNvbiByZXN1bHRzLCBpbmNyZW1lbnRhbCBqc29uIGlzIHNhdmVkLiIpCisK
KyAgICAgICAgaWYgbm90IG5ld19yZXN1bHRzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICAgICBpZiBub3QgZmlsZS5zYXZlKG5ld19yZXN1bHRzKToKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAgICAgcmV0dXJuIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktp
dFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHMucHkKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVz
dWx0c191bml0dGVzdC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDUgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBqc29ucmVzdWx0cyBpbXBvcnQgSnNv
blJlc3VsdHMKKworSlNPTl9SRVNVTFRTX1RFTVBMQVRFID0gKAorICAgICd7IldlYmtpdCI6eycK
KyAgICAnImFsbEZpeGFibGVDb3VudCI6W1tURVNUREFUQV9DT1VOVF1dLCcKKyAgICAnImJ1aWxk
TnVtYmVycyI6W1tURVNUREFUQV9CVUlMRE5VTUJFUlNdXSwnCisgICAgJyJjaHJvbWVSZXZpc2lv
biI6W1tURVNUREFUQV9DSFJPTUVSRVZJU0lPTl1dLCcKKyAgICAnImRlZmVycmVkQ291bnRzIjpb
W1RFU1REQVRBX0NPVU5UU11dLCcKKyAgICAnImZpeGFibGVDb3VudCI6W1tURVNUREFUQV9DT1VO
VF1dLCcKKyAgICAnImZpeGFibGVDb3VudHMiOltbVEVTVERBVEFfQ09VTlRTXV0sJworICAgICci
c2Vjb25kc1NpbmNlRXBvY2giOltbVEVTVERBVEFfVElNRVNdXSwnCisgICAgJyJ0ZXN0cyI6e1tU
RVNUREFUQV9URVNUU119LCcKKyAgICAnIndlYmtpdFJldmlzaW9uIjpbW1RFU1REQVRBX1dFQktJ
VFJFVklTSU9OXV0sJworICAgICcid29udGZpeENvdW50cyI6W1tURVNUREFUQV9DT1VOVFNdXScK
KyAgICAnfSwnCisgICAgJyJ2ZXJzaW9uIjozJworICAgICd9JykKKworSlNPTl9SRVNVTFRTX0NP
VU5UU19URU1QTEFURSA9ICgKKyAgICAneycKKyAgICAnIkMiOltURVNUREFUQV0sJworICAgICci
RiI6W1RFU1REQVRBXSwnCisgICAgJyJJIjpbVEVTVERBVEFdLCcKKyAgICAnIk8iOltURVNUREFU
QV0sJworICAgICciUCI6W1RFU1REQVRBXSwnCisgICAgJyJUIjpbVEVTVERBVEFdLCcKKyAgICAn
IlgiOltURVNUREFUQV0sJworICAgICciWiI6W1RFU1REQVRBXX0nKQorCitKU09OX1JFU1VMVFNf
VEVTVFNfVEVNUExBVEUgPSAoCisgICAgJyJbVEVTVERBVEFfVEVTVF9OQU1FXSI6eycKKyAgICAn
InJlc3VsdHMiOltbVEVTVERBVEFfVEVTVF9SRVNVTFRTXV0sJworICAgICcidGltZXMiOltbVEVT
VERBVEFfVEVTVF9USU1FU11dfScpCisKK0pTT05fUkVTVUxUU19QUkVGSVggPSAiQUREX1JFU1VM
VFMoIgorSlNPTl9SRVNVTFRTX1NVRkZJWCA9ICIpOyIKKworCitjbGFzcyBKc29uUmVzdWx0c1Rl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2Vs
Zi5fYnVpbGRlciA9ICJXZWJraXQiCisKKyAgICBkZWYgX21ha2VfdGVzdF9qc29uKHNlbGYsIHRl
c3RfZGF0YSk6CisgICAgICAgIGlmIG5vdCB0ZXN0X2RhdGE6CisgICAgICAgICAgICByZXR1cm4g
IiIKKworICAgICAgICAoYnVpbGRzLCB0ZXN0cykgPSB0ZXN0X2RhdGEKKyAgICAgICAgaWYgbm90
IGJ1aWxkcyBvciBub3QgdGVzdHM6CisgICAgICAgICAgICByZXR1cm4gSlNPTl9SRVNVTFRTX1BS
RUZJWCArIEpTT05fUkVTVUxUU19TVUZGSVgKKworICAgICAgICBqc29uID0gSlNPTl9SRVNVTFRT
X1RFTVBMQVRFCisKKyAgICAgICAgY291bnRzID0gW10KKyAgICAgICAgYnVpbGRfbnVtYmVycyA9
IFtdCisgICAgICAgIHdlYmtpdF9yZXZpc2lvbiA9IFtdCisgICAgICAgIGNocm9tZV9yZXZpc2lv
biA9IFtdCisgICAgICAgIHRpbWVzID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoK
KyAgICAgICAgICAgIGNvdW50cy5hcHBlbmQoSlNPTl9SRVNVTFRTX0NPVU5UU19URU1QTEFURS5y
ZXBsYWNlKCJbVEVTVERBVEFdIiwgYnVpbGQpKQorICAgICAgICAgICAgYnVpbGRfbnVtYmVycy5h
cHBlbmQoIjEwMDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIHdlYmtpdF9yZXZpc2lvbi5hcHBl
bmQoIjIwMDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIGNocm9tZV9yZXZpc2lvbi5hcHBlbmQo
IjMwMDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIHRpbWVzLmFwcGVuZCgiMTAwMDAwJXMwMDAi
ICUgYnVpbGQpCisKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX0NPVU5U
U10iLCAiLCIuam9pbihjb3VudHMpKQorICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVT
VERBVEFfQ09VTlRdIiwgIiwiLmpvaW4oYnVpbGRzKSkKKyAgICAgICAganNvbiA9IGpzb24ucmVw
bGFjZSgiW1RFU1REQVRBX0JVSUxETlVNQkVSU10iLCAiLCIuam9pbihidWlsZF9udW1iZXJzKSkK
KyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX1dFQktJVFJFVklTSU9OXSIs
ICIsIi5qb2luKHdlYmtpdF9yZXZpc2lvbikpCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2Uo
IltURVNUREFUQV9DSFJPTUVSRVZJU0lPTl0iLCAiLCIuam9pbihjaHJvbWVfcmV2aXNpb24pKQor
ICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfVElNRVNdIiwgIiwiLmpvaW4o
dGltZXMpKQorCisgICAgICAgIGpzb25fdGVzdHMgPSBbXQorICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0czoKKyAgICAgICAgICAgIHQgPSBKU09OX1JFU1VMVFNfVEVTVFNfVEVNUExBVEUucmVwbGFj
ZSgiW1RFU1REQVRBX1RFU1RfTkFNRV0iLCB0ZXN0WzBdKQorICAgICAgICAgICAgdCA9IHQucmVw
bGFjZSgiW1RFU1REQVRBX1RFU1RfUkVTVUxUU10iLCB0ZXN0WzFdKQorICAgICAgICAgICAgdCA9
IHQucmVwbGFjZSgiW1RFU1REQVRBX1RFU1RfVElNRVNdIiwgdGVzdFsyXSkKKyAgICAgICAgICAg
IGpzb25fdGVzdHMuYXBwZW5kKHQpCisKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RF
U1REQVRBX1RFU1RTXSIsICIsIi5qb2luKGpzb25fdGVzdHMpKQorCisgICAgICAgIHJldHVybiBK
U09OX1JFU1VMVFNfUFJFRklYICsganNvbiArIEpTT05fUkVTVUxUU19TVUZGSVgKKworICAgIGRl
ZiBfdGVzdF9tZXJnZShzZWxmLCBhZ2dyZWdhdGVkX2RhdGEsIGluY3JlbWVudGFsX2RhdGEsIGV4
cGVjdGVkX2RhdGEpOgorICAgICAgICBhZ2dyZWdhdGVkX3Jlc3VsdHMgPSBzZWxmLl9tYWtlX3Rl
c3RfanNvbihhZ2dyZWdhdGVkX2RhdGEpCisgICAgICAgIGluY3JlbWVudGFsX3Jlc3VsdHMgPSBz
ZWxmLl9tYWtlX3Rlc3RfanNvbihpbmNyZW1lbnRhbF9kYXRhKQorICAgICAgICBtZXJnZWRfcmVz
dWx0cyA9IEpzb25SZXN1bHRzLm1lcmdlKHNlbGYuX2J1aWxkZXIsCisgICAgICAgICAgICBhZ2dy
ZWdhdGVkX3Jlc3VsdHMsIGluY3JlbWVudGFsX3Jlc3VsdHMsIHNvcnRfa2V5cz1UcnVlKQorCisg
ICAgICAgIGlmIGV4cGVjdGVkX2RhdGE6CisgICAgICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0g
c2VsZi5fbWFrZV90ZXN0X2pzb24oZXhwZWN0ZWRfZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG1lcmdlZF9yZXN1bHRzLCBleHBlY3RlZF9yZXN1bHRzKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXJnZWRfcmVzdWx0cykKKworICAgIGRl
ZiB0ZXN0KHNlbGYpOgorICAgICAgICAjIEVtcHR5IGluY3JlbWVudGFsIHJlc3VsdHMganNvbi4K
KyAgICAgICAgIyBOb3RoaW5nIHRvIG1lcmdlLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAor
ICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJd
LCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAg
ICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAg
ICAjIEV4cGVjdCBubyBtZXJnZSBoYXBwZW5zLgorICAgICAgICAgICAgTm9uZSkKKworICAgICAg
ICAjIE5vIGFjdHVhbCBpbmNyZW1lbnRhbCB0ZXN0IHJlc3VsdHMgKG9ubHkgcHJlZml4IGFuZCBz
dWZmaXgpIHRvIG1lcmdlLgorICAgICAgICAjIE5vdGhpbmcgdG8gbWVyZ2UuCisgICAgICAgIHNl
bGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAg
ICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIw
XCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAg
KFtdLCBbXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIG5vIG1lcmdlIGhhcHBlbnMuCisgICAg
ICAgICAgICBOb25lKQorCisgICAgICAgICMgTm8gZXhpc3RpbmcgYWdncmVnYXRlZCByZXN1bHRz
LgorICAgICAgICAjIE1lcmdlZCByZXN1bHRzID09IG5ldyBpbmNyZW1lbnRhbCByZXN1bHRzLgor
ICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3Vs
dHMKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMK
KyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJb
MjAwLFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAg
ICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwi
XSJdXSkpCisKKyAgICAgICAgIyBTaW5nbGUgdGVzdCBmb3Igc2luZ2xlIHJ1bi4KKyAgICAgICAg
IyBJbmNyZW1lbnRhbCByZXN1bHRzIGhhcyB0aGUgbGF0ZXN0IGJ1aWxkIGFuZCBzYW1lIHRlc3Qg
cmVzdWx0cyBmb3IKKyAgICAgICAgIyB0aGF0IHJ1bi4KKyAgICAgICAgIyBJbnNlcnQgdGhlIGlu
Y3JlbWVudGFsIHJlc3VsdHMgYXQgdGhlIGZpcnN0IHBsYWNlIGFuZCBzdW0gbnVtYmVyCisgICAg
ICAgICMgb2YgcnVucyBmb3IgIlAiICgyMDAgKyAxKSB0byBnZXQgbWVyZ2VkIHJlc3VsdHMuCisg
ICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0
cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwg
IlsyMDAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAg
ICAgICAgICAgKFsiMyJdLCBbWyIwMDEuaHRtbCIsICJbMSxcIlBcIl0iLCAiWzEsXCIwXCJdIl1d
KSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIy
IiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMSxcIlBcIl0iLCAiWzIwMSxcIjBcIl0iXV0pKQor
CisgICAgICAgICMgU2luZ2xlIHRlc3QgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgSW5jcmVt
ZW50YWwgcmVzdWx0cyBoYXMgdGhlIGxhdGVzdCBidWlsZCBidXQgZGlmZmVyZW50IHRlc3QgcmVz
dWx0cworICAgICAgICAjIGZvciB0aGF0IHJ1bi4KKyAgICAgICAgIyBJbnNlcnQgdGhlIGluY3Jl
bWVudGFsIHJlc3VsdHMgYXQgdGhlIGZpcnN0IHBsYWNlLgorICAgICAgICBzZWxmLl90ZXN0X21l
cmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIi
LCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisg
ICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwgW1si
MDAxLmh0bWwiLCAiWzEsIFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAgICAgIyBF
eHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJdLCBbWyIwMDEuaHRt
bCIsICJbMSxcIklcIl0sWzIwMCxcIlBcIl0iLCAiWzEsXCIxXCJdLFsyMDAsXCIwXCJdIl1dKSkK
KworICAgICAgICAjIFNpbmdsZSB0ZXN0IGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIEluY3Jl
bWVudGFsIHJlc3VsdHMgaGFzIHRoZSBsYXRlc3QgYnVpbGQgYnV0IGRpZmZlcmVudCB0ZXN0IHJl
c3VsdHMKKyAgICAgICAgIyBmb3IgdGhhdCBydW4uCisgICAgICAgICMgVGhlIHRlc3QgInJlc3Vs
dHMiIGFuZCAidGltZXMiIG5lZWQgdG8gYmUgY29udGludW91cywgc28gdGhlIG9sZAorICAgICAg
ICAjIFsxMCwiSSJdIHJlc3VsdCBzaG91bGQgYmUgZHJvcHBlZCBiZWNhdXNlIGEgbmV3IHJlc3Vs
dCBvZiBzYW1lIHR5cGUgWzEsIkkiXQorICAgICAgICAjIGlzIGluc2VydGVkIGluIGZyb250IG9m
IFsyMDAsIlAiXS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdn
cmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAi
WzIwMCxcIlBcIl0sWzEwLFwiSVwiXSIsICJbMjAwLFwiMFwiXSxbMTAsXCIxXCJdIl1dKSwKKyAg
ICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMyJdLCBbWyIw
MDEuaHRtbCIsICJbMSxcIklcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhw
ZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwi
LCAiWzEsXCJJXCJdLFsyMDAsXCJQXCJdIiwgIlsxLFwiMVwiXSxbMjAwLFwiMFwiXSJdXSkpCisK
KyAgICAgICAgIyBNdWx0aXBsZSB0ZXN0cyBmb3Igc2luZ2xlIHJ1bi4KKyAgICAgICAgIyBBbGwg
dGVzdHMgaGF2ZSBpbmNyZW1lbnRhbCB1cGRhdGVzLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdl
KAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAi
MSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdLCBbIjAwMi5o
dG1sIiwgIlsxMDAsXCJJXCJdIiwgIlsxMDAsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5j
cmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMyJdLCBbWyIwMDEuaHRtbCIsICJbMSxc
IlBcIl0iLCAiWzEsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEsXCJJXCJdIiwgIlsxLFwiMVwi
XSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMi
LCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDEsXCJQXCJdIiwgIlsyMDEsXCIwXCJdIl0s
IFsiMDAyLmh0bWwiLCAiWzEwMSxcIklcIl0iLCAiWzEwMSxcIjFcIl0iXV0pKQorCisgICAgICAg
ICMgTXVsdGlwbGUgdGVzdHMgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgTm90IGFsbCB0ZXN0
cyBoYXZlIHVwZGF0ZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMg
QWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwi
LCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwgWyIwMDIuaHRtbCIsICJbMTAwLFwiSVwi
XSIsICJbMTAwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMK
KyAgICAgICAgICAgIChbIjMiXSwgW1siMDAyLmh0bWwiLCAiWzEsXCJJXCJdIiwgIlsxLFwiMVwi
XSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMi
LCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl0s
IFsiMDAyLmh0bWwiLCAiWzEwMSxcIklcIl0iLCAiWzEwMSxcIjFcIl0iXV0pKQorCisgICAgICAg
ICMgU2luZ2xlIHRlc3QgZm9yIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVy
Z2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMiIs
ICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl1dKSwKKyAg
ICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiNCIsICIzIl0s
IFtbIjAwMS5odG1sIiwgIlsyLCBcIklcIl0iLCAiWzIsXCIyXCJdIl1dKSwKKyAgICAgICAgICAg
ICMgRXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiNCIsICIzIiwgIjIiLCAiMSJdLCBb
WyIwMDEuaHRtbCIsICJbMixcIklcIl0sWzIwMCxcIlBcIl0iLCAiWzIsXCIyXCJdLFsyMDAsXCIw
XCJdIl1dKSkKKworICAgICAgICAjIE11bHRpcGxlIHRlc3RzIGZvciBtdWx0aXBsZSBydW5zLgor
ICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3Vs
dHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIs
ICJbMjAwLFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsxMCxcIlpcIl0iLCAiWzEwLFwiMFwiXSJd
XSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjQi
LCAiMyJdLCBbWyIwMDEuaHRtbCIsICJbMiwgXCJJXCJdIiwgIlsyLFwiMlwiXSJdLCBbIjAwMi5o
dG1sIiwgIlsxLFwiQ1wiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAgICAgIyBFeHBlY3Rl
ZCByZXN1bHRzCisgICAgICAgICAgICAoWyI0IiwgIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1s
IiwgIlsyLFwiSVwiXSxbMjAwLFwiUFwiXSIsICJbMixcIjJcIl0sWzIwMCxcIjBcIl0iXSwgWyIw
MDIuaHRtbCIsICJbMSxcIkNcIl0sWzEwLFwiWlwiXSIsICJbMSxcIjFcIl0sWzEwLFwiMFwiXSJd
XSkpCisKKyAgICAgICAgIyBUZXN0IGlmIGJ1aWxkIGluIGluY3JlbWVudGFsIHJlc3VsdHMgaXMg
b2xkZXIgdGhhbiB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgIyBidWlsZCBpbiBhZ2dyZWdhdGVk
IHJlc3VsdHMuCisgICAgICAgICMgVGhlIGluY3JlbWVudGFsIHJlc3VsdHMgc2hvdWxkIGJlIGRy
b3BwZWQgYW5kIG5vIG1lcmdlIGhhcHBlbnMuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisg
ICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIxIl0s
IFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl1dKSwKKyAgICAgICAg
ICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMiJdLCBbWyIwMDEuaHRt
bCIsICJbMSwgXCJQXCJdIiwgIlsxLFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVk
IG5vIG1lcmdlIGhhcHBlbnMuCisgICAgICAgICAgICBOb25lKQorCitpZiBfX25hbWVfXyA9PSAn
X19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
S2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJLaXRUb29s
cy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL3Rlc3RmaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZpbGUucHkJKHJldmlzaW9uIDU4Nzkw
KQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weQkod29y
a2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
ICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsx
Myw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0yOSwxNiArMjksMTQgQEAKIGZyb20gZGF0ZXRpbWUg
aW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwogCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUu
ZXh0IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGRi
CiAKK2Zyb20gbW9kZWwuZGF0YXN0b3JlZmlsZSBpbXBvcnQgRGF0YVN0b3JlRmlsZQogCi1jbGFz
cyBUZXN0RmlsZShkYi5Nb2RlbCk6CisKK2NsYXNzIFRlc3RGaWxlKERhdGFTdG9yZUZpbGUpOgog
ICAgIGJ1aWxkZXIgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgbmFtZSA9IGRiLlN0cmluZ1By
b3BlcnR5KCkKICAgICB0ZXN0X3R5cGUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgYmxvYl9r
ZXkgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgZGF0ZSA9IGRiLkRhdGVUaW1lUHJvcGVydHko
YXV0b19ub3dfYWRkPVRydWUpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZGVsZXRlX2Zp
bGUoY2xzLCBrZXksIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbGltaXQpOgpAQCAtNjMsNyAr
NjEsNyBAQCBjbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAK
ICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZ2V0X2ZpbGVzKGNscywgYnVpbGRlciwgdGVzdF90
eXBlLCBuYW1lLCBsaW1pdCk6CisgICAgZGVmIGdldF9maWxlcyhjbHMsIGJ1aWxkZXIsIHRlc3Rf
dHlwZSwgbmFtZSwgbG9hZF9kYXRhPVRydWUsIGxpbWl0PTEpOgogICAgICAgICBxdWVyeSA9IFRl
c3RGaWxlLmFsbCgpCiAgICAgICAgIGlmIGJ1aWxkZXI6CiAgICAgICAgICAgICBxdWVyeSA9IHF1
ZXJ5LmZpbHRlcigiYnVpbGRlciA9IiwgYnVpbGRlcikKQEAgLTcyLDUxICs3MCw1NCBAQCBjbGFz
cyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIGlmIG5hbWU6CiAgICAgICAgICAgICBxdWVy
eSA9IHF1ZXJ5LmZpbHRlcigibmFtZSA9IiwgbmFtZSkKIAotICAgICAgICByZXR1cm4gcXVlcnku
b3JkZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGZpbGVzID0gcXVlcnkub3JkZXIo
Ii1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGlmIGxvYWRfZGF0YToKKyAgICAgICAgICAg
IGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUubG9hZF9kYXRhKCkKKwor
ICAgICAgICByZXR1cm4gZmlsZXMKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBhZGRfZmls
ZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgYmxvYl9pbmZvKToKKyAgICBkZWYgYWRkX2ZpbGUo
Y2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGRhdGEpOgogICAgICAgICBmaWxlID0gVGVz
dEZpbGUoKQogICAgICAgICBmaWxlLmJ1aWxkZXIgPSBidWlsZGVyCiAgICAgICAgIGZpbGUudGVz
dF90eXBlID0gdGVzdF90eXBlCi0gICAgICAgIGZpbGUubmFtZSA9IGJsb2JfaW5mby5maWxlbmFt
ZQotICAgICAgICBmaWxlLmJsb2Jfa2V5ID0gc3RyKGJsb2JfaW5mby5rZXkoKSkKLSAgICAgICAg
ZmlsZS5wdXQoKQorICAgICAgICBmaWxlLm5hbWUgPSBuYW1lCisKKyAgICAgICAgaWYgbm90IGZp
bGUuc2F2ZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgbG9nZ2lu
Zy5pbmZvKAotICAgICAgICAgICAgIkZpbGUgc2F2ZWQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6
ICVzLCBuYW1lOiAlcywgYmxvYiBrZXk6ICVzLiIsCi0gICAgICAgICAgICBidWlsZGVyLCB0ZXN0
X3R5cGUsIGZpbGUubmFtZSwgZmlsZS5ibG9iX2tleSkKKyAgICAgICAgICAgICJGaWxlIHNhdmVk
LCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGtleTogJXMuIiwKKyAgICAg
ICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5kYXRhX2tleXMp
KQogCiAgICAgICAgIHJldHVybiBmaWxlCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdXBk
YXRlX2ZpbGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbyk6Ci0gICAgICAgIGZp
bGVzID0gY2xzLmdldF9maWxlcyhidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mby5maWxlbmFt
ZSwgMSkKKyAgICBkZWYgdXBkYXRlKGNscywgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBkYXRh
KToKKyAgICAgICAgZmlsZXMgPSBjbHMuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFt
ZSkKICAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAgICAgICAgcmV0dXJuIGNscy5hZGRfZmls
ZShidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbykKKyAgICAgICAgICAgIHJldHVybiBjbHMu
YWRkX2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBkYXRhKQogCiAgICAgICAgIGZpbGUg
PSBmaWxlc1swXQotICAgICAgICBvbGRfYmxvYl9pbmZvID0gYmxvYnN0b3JlLkJsb2JJbmZvLmdl
dChmaWxlLmJsb2Jfa2V5KQotICAgICAgICBpZiBvbGRfYmxvYl9pbmZvOgotICAgICAgICAgICAg
b2xkX2Jsb2JfaW5mby5kZWxldGUoKQotCi0gICAgICAgIGZpbGUuYnVpbGRlciA9IGJ1aWxkZXIK
LSAgICAgICAgZmlsZS50ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKLSAgICAgICAgZmlsZS5uYW1lID0g
YmxvYl9pbmZvLmZpbGVuYW1lCi0gICAgICAgIGZpbGUuYmxvYl9rZXkgPSBzdHIoYmxvYl9pbmZv
LmtleSgpKQotICAgICAgICBmaWxlLmRhdGUgPSBkYXRldGltZS5ub3coKQotICAgICAgICBmaWxl
LnB1dCgpCisgICAgICAgIGlmIG5vdCBmaWxlLnNhdmUoZGF0YSk6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQogCiAgICAgICAgIGxvZ2dpbmcuaW5mbygKLSAgICAgICAgICAgICJGaWxlIHJlcGxh
Y2VkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGJsb2Iga2V5OiAlcy4i
LAotICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlLm5hbWUsIGZpbGUuYmxvYl9r
ZXkpCisgICAgICAgICAgICAiRmlsZSByZXBsYWNlZCwgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTog
JXMsIG5hbWU6ICVzLCBkYXRhIGtleTogJXMuIiwKKyAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3Rf
dHlwZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5kYXRhX2tleXMpKQogCiAgICAgICAgIHJldHVybiBm
aWxlCiAKLSAgICBkZWYgX2RlbGV0ZV9hbGwoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuYmxvYl9r
ZXk6Ci0gICAgICAgICAgICBibG9iX2luZm8gPSBibG9ic3RvcmUuQmxvYkluZm8uZ2V0KHNlbGYu
YmxvYl9rZXkpCi0gICAgICAgICAgICBpZiBibG9iX2luZm86Ci0gICAgICAgICAgICAgICAgYmxv
Yl9pbmZvLmRlbGV0ZSgpCisgICAgZGVmIHNhdmUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5v
dCBzZWxmLnNhdmVfZGF0YShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAg
ICAgIHNlbGYuZGF0ZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlbGYucHV0KCkKIAorICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZWxldGVfYWxsKHNlbGYpOgorICAgICAgICBz
ZWxmLmRlbGV0ZV9kYXRhKCkKICAgICAgICAgc2VsZi5kZWxldGUoKQpJbmRleDogV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL0xJQ0VOU0UudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9MSUNFTlNFLnR4dAkocmV2
aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9MSUNF
TlNFLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorQ29weXJpZ2h0IChjKSAyMDA2
IEJvYiBJcHBvbGl0bworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo
YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFu
ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVh
bCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0
IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs
aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBT
b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1
cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor
CitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz
aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv
ZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI
T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcg
QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg
Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFO
IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09V
VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI
RVIgREVBTElOR1MgSU4gVEhFCitTT0ZUV0FSRS4KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktp
dFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9MSUNFTlNFLnR4dApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL3NpbXBsZWpzb24vUkVBRE1FLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vUkVBRE1FLnR4dAkocmV2aXNpb24gMCkKKysr
IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9SRUFETUUudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitVUkw6IGh0dHA6Ly91bmRlZmluZWQub3JnL3B5dGhv
bi8jc2ltcGxlanNvbgorVmVyc2lvbjogMS43LjMKK0xpY2Vuc2U6IE1JVAorTGljZW5zZSBGaWxl
OiBMSUNFTlNFLnR4dAorCitEZXNjcmlwdGlvbjoKK3NpbXBsZWpzb24gaXMgYSBKU09OIGVuY29k
ZXIgYW5kIGRlY29kZXIgZm9yIFB5dGhvbi4KKworCitMb2NhbCBNb2RpZmljYXRpb25zOgorUmVt
b3ZlZCB1bml0IHRlc3RzIGZyb20gY3VycmVudCBkaXN0cmlidXRpb24uCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vUkVBRE1FLnR4
dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vX19pbml0X18ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL19faW5pdF9fLnB5CShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL19f
aW5pdF9fLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4NyBAQAorciIiIgorQSBzaW1wbGUs
IGZhc3QsIGV4dGVuc2libGUgSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyCisKK0pTT04gKEphdmFT
Y3JpcHQgT2JqZWN0IE5vdGF0aW9uKSA8aHR0cDovL2pzb24ub3JnPiBpcyBhIHN1YnNldCBvZgor
SmF2YVNjcmlwdCBzeW50YXggKEVDTUEtMjYyIDNyZCBlZGl0aW9uKSB1c2VkIGFzIGEgbGlnaHR3
ZWlnaHQgZGF0YQoraW50ZXJjaGFuZ2UgZm9ybWF0LgorCitzaW1wbGVqc29uIGV4cG9zZXMgYW4g
QVBJIGZhbWlsaWFyIHRvIHVzZXMgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkKK21hcnNoYWwgYW5k
IHBpY2tsZSBtb2R1bGVzLgorCitFbmNvZGluZyBiYXNpYyBQeXRob24gb2JqZWN0IGhpZXJhcmNo
aWVzOjoKKyAgICAKKyAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gc2ltcGxlanNv
bi5kdW1wcyhbJ2ZvbycsIHsnYmFyJzogKCdiYXonLCBOb25lLCAxLjAsIDIpfV0pCisgICAgJ1si
Zm9vIiwgeyJiYXIiOiBbImJheiIsIG51bGwsIDEuMCwgMl19XScKKyAgICA+Pj4gcHJpbnQgc2lt
cGxlanNvbi5kdW1wcygiXCJmb29cYmFyIikKKyAgICAiXCJmb29cYmFyIgorICAgID4+PiBwcmlu
dCBzaW1wbGVqc29uLmR1bXBzKHUnXHUxMjM0JykKKyAgICAiXHUxMjM0IgorICAgID4+PiBwcmlu
dCBzaW1wbGVqc29uLmR1bXBzKCdcXCcpCisgICAgIlxcIgorICAgID4+PiBwcmludCBzaW1wbGVq
c29uLmR1bXBzKHsiYyI6IDAsICJiIjogMCwgImEiOiAwfSwgc29ydF9rZXlzPVRydWUpCisgICAg
eyJhIjogMCwgImIiOiAwLCAiYyI6IDB9CisgICAgPj4+IGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0
cmluZ0lPCisgICAgPj4+IGlvID0gU3RyaW5nSU8oKQorICAgID4+PiBzaW1wbGVqc29uLmR1bXAo
WydzdHJlYW1pbmcgQVBJJ10sIGlvKQorICAgID4+PiBpby5nZXR2YWx1ZSgpCisgICAgJ1sic3Ry
ZWFtaW5nIEFQSSJdJworCitDb21wYWN0IGVuY29kaW5nOjoKKworICAgID4+PiBpbXBvcnQgc2lt
cGxlanNvbgorICAgID4+PiBzaW1wbGVqc29uLmR1bXBzKFsxLDIsMyx7JzQnOiA1LCAnNic6IDd9
XSwgc2VwYXJhdG9ycz0oJywnLCc6JykpCisgICAgJ1sxLDIsMyx7IjQiOjUsIjYiOjd9XScKKwor
UHJldHR5IHByaW50aW5nOjoKKworICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBw
cmludCBzaW1wbGVqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBp
bmRlbnQ9NCkKKyAgICB7CisgICAgICAgICI0IjogNSwgCisgICAgICAgICI2IjogNworICAgIH0K
KworRGVjb2RpbmcgSlNPTjo6CisgICAgCisgICAgPj4+IGltcG9ydCBzaW1wbGVqc29uCisgICAg
Pj4+IHNpbXBsZWpzb24ubG9hZHMoJ1siZm9vIiwgeyJiYXIiOlsiYmF6IiwgbnVsbCwgMS4wLCAy
XX1dJykKKyAgICBbdSdmb28nLCB7dSdiYXInOiBbdSdiYXonLCBOb25lLCAxLjAsIDJdfV0KKyAg
ICA+Pj4gc2ltcGxlanNvbi5sb2FkcygnIlxcImZvb1xcYmFyIicpCisgICAgdSciZm9vXHgwOGFy
JworICAgID4+PiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgID4+PiBpbyA9IFN0
cmluZ0lPKCdbInN0cmVhbWluZyBBUEkiXScpCisgICAgPj4+IHNpbXBsZWpzb24ubG9hZChpbykK
KyAgICBbdSdzdHJlYW1pbmcgQVBJJ10KKworU3BlY2lhbGl6aW5nIEpTT04gb2JqZWN0IGRlY29k
aW5nOjoKKworICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBkZWYgYXNfY29tcGxl
eChkY3QpOgorICAgIC4uLiAgICAgaWYgJ19fY29tcGxleF9fJyBpbiBkY3Q6CisgICAgLi4uICAg
ICAgICAgcmV0dXJuIGNvbXBsZXgoZGN0WydyZWFsJ10sIGRjdFsnaW1hZyddKQorICAgIC4uLiAg
ICAgcmV0dXJuIGRjdAorICAgIC4uLiAKKyAgICA+Pj4gc2ltcGxlanNvbi5sb2FkcygneyJfX2Nv
bXBsZXhfXyI6IHRydWUsICJyZWFsIjogMSwgImltYWciOiAyfScsCisgICAgLi4uICAgICBvYmpl
Y3RfaG9vaz1hc19jb21wbGV4KQorICAgICgxKzJqKQorCitFeHRlbmRpbmcgSlNPTkVuY29kZXI6
OgorICAgIAorICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBjbGFzcyBDb21wbGV4
RW5jb2RlcihzaW1wbGVqc29uLkpTT05FbmNvZGVyKToKKyAgICAuLi4gICAgIGRlZiBkZWZhdWx0
KHNlbGYsIG9iaik6CisgICAgLi4uICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGNvbXBsZXgp
OgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gW29iai5yZWFsLCBvYmouaW1hZ10KKyAgICAu
Li4gICAgICAgICByZXR1cm4gc2ltcGxlanNvbi5KU09ORW5jb2Rlci5kZWZhdWx0KHNlbGYsIG9i
aikKKyAgICAuLi4gCisgICAgPj4+IGR1bXBzKDIgKyAxaiwgY2xzPUNvbXBsZXhFbmNvZGVyKQor
ICAgICdbMi4wLCAxLjBdJworICAgID4+PiBDb21wbGV4RW5jb2RlcigpLmVuY29kZSgyICsgMWop
CisgICAgJ1syLjAsIDEuMF0nCisgICAgPj4+IGxpc3QoQ29tcGxleEVuY29kZXIoKS5pdGVyZW5j
b2RlKDIgKyAxaikpCisgICAgWydbJywgJzIuMCcsICcsICcsICcxLjAnLCAnXSddCisgICAgCisK
K05vdGUgdGhhdCB0aGUgSlNPTiBwcm9kdWNlZCBieSB0aGlzIG1vZHVsZSdzIGRlZmF1bHQgc2V0
dGluZ3MKK2lzIGEgc3Vic2V0IG9mIFlBTUwsIHNvIGl0IG1heSBiZSB1c2VkIGFzIGEgc2VyaWFs
aXplciBmb3IgdGhhdCBhcyB3ZWxsLgorIiIiCitfX3ZlcnNpb25fXyA9ICcxLjcuMycKK19fYWxs
X18gPSBbCisgICAgJ2R1bXAnLCAnZHVtcHMnLCAnbG9hZCcsICdsb2FkcycsCisgICAgJ0pTT05E
ZWNvZGVyJywgJ0pTT05FbmNvZGVyJywKK10KKworZnJvbSBkZWNvZGVyIGltcG9ydCBKU09ORGVj
b2RlcgorZnJvbSBlbmNvZGVyIGltcG9ydCBKU09ORW5jb2RlcgorCitfZGVmYXVsdF9lbmNvZGVy
ID0gSlNPTkVuY29kZXIoCisgICAgc2tpcGtleXM9RmFsc2UsCisgICAgZW5zdXJlX2FzY2lpPVRy
dWUsCisgICAgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwKKyAgICBhbGxvd19uYW49VHJ1ZSwKKyAgICBp
bmRlbnQ9Tm9uZSwKKyAgICBzZXBhcmF0b3JzPU5vbmUsCisgICAgZW5jb2Rpbmc9J3V0Zi04Jwor
KQorCitkZWYgZHVtcChvYmosIGZwLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lpPVRydWUs
IGNoZWNrX2NpcmN1bGFyPVRydWUsCisgICAgICAgIGFsbG93X25hbj1UcnVlLCBjbHM9Tm9uZSwg
aW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9uZSwKKyAgICAgICAgZW5jb2Rpbmc9J3V0Zi04Jywg
Kiprdyk6CisgICAgIiIiCisgICAgU2VyaWFsaXplIGBgb2JqYGAgYXMgYSBKU09OIGZvcm1hdHRl
ZCBzdHJlYW0gdG8gYGBmcGBgIChhCisgICAgYGAud3JpdGUoKWBgLXN1cHBvcnRpbmcgZmlsZS1s
aWtlIG9iamVjdCkuCisKKyAgICBJZiBgYHNraXBrZXlzYGAgaXMgYGBUcnVlYGAgdGhlbiBgYGRp
Y3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcworICAgIChgYHN0cmBgLCBgYHVuaWNv
ZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRgYCwgYGBib29sYGAsIGBgTm9uZWBgKSAK
KyAgICB3aWxsIGJlIHNraXBwZWQgaW5zdGVhZCBvZiByYWlzaW5nIGEgYGBUeXBlRXJyb3JgYC4K
KworICAgIElmIGBgZW5zdXJlX2FzY2lpYGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBzb21lIGNo
dW5rcyB3cml0dGVuIHRvIGBgZnBgYAorICAgIG1heSBiZSBgYHVuaWNvZGVgYCBpbnN0YW5jZXMs
IHN1YmplY3QgdG8gbm9ybWFsIFB5dGhvbiBgYHN0cmBgIHRvCisgICAgYGB1bmljb2RlYGAgY29l
cmNpb24gcnVsZXMuIFVubGVzcyBgYGZwLndyaXRlKClgYCBleHBsaWNpdGx5CisgICAgdW5kZXJz
dGFuZHMgYGB1bmljb2RlYGAgKGFzIGluIGBgY29kZWNzLmdldHdyaXRlcigpYGApIHRoaXMgaXMg
bGlrZWx5CisgICAgdG8gY2F1c2UgYW4gZXJyb3IuCisKKyAgICBJZiBgYGNoZWNrX2NpcmN1bGFy
YGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY2hlY2sKKyAgICBm
b3IgY29udGFpbmVyIHR5cGVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgYSBjaXJjdWxhciByZWZlcmVu
Y2Ugd2lsbAorICAgIHJlc3VsdCBpbiBhbiBgYE92ZXJmbG93RXJyb3JgYCAob3Igd29yc2UpLgor
CisgICAgSWYgYGBhbGxvd19uYW5gYCBpcyBgYEZhbHNlYGAsIHRoZW4gaXQgd2lsbCBiZSBhIGBg
VmFsdWVFcnJvcmBgIHRvCisgICAgc2VyaWFsaXplIG91dCBvZiByYW5nZSBgYGZsb2F0YGAgdmFs
dWVzIChgYG5hbmBgLCBgYGluZmBgLCBgYC1pbmZgYCkKKyAgICBpbiBzdHJpY3QgY29tcGxpYW5j
ZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZQorICAgIEph
dmFTY3JpcHQgZXF1aXZhbGVudHMgKGBgTmFOYGAsIGBgSW5maW5pdHlgYCwgYGAtSW5maW5pdHlg
YCkuCisKKyAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4g
SlNPTiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0CisgICAgbWVtYmVycyB3aWxsIGJlIHByZXR0
eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudCBsZXZlbAorICAgIG9m
IDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFj
dCByZXByZXNlbnRhdGlvbi4KKworICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1f
c2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQorICAgIHRoZW4gaXQgd2lsbCBiZSB1
c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgor
ICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlv
bi4KKworICAgIGBgZW5jb2RpbmdgYCBpcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBzdHIg
aW5zdGFuY2VzLCBkZWZhdWx0IGlzIFVURi04LgorCisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNP
TkVuY29kZXJgYCBzdWJjbGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCisgICAgYGAu
ZGVmYXVsdCgpYGAgbWV0aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwgc3BlY2lm
eSBpdCB3aXRoCisgICAgdGhlIGBgY2xzYGAga3dhcmcuCisgICAgIiIiCisgICAgIyBjYWNoZWQg
ZW5jb2RlcgorICAgIGlmIChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lpIGlzIFRy
dWUgYW5kCisgICAgICAgIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25hbiBpcyBU
cnVlIGFuZAorICAgICAgICBjbHMgaXMgTm9uZSBhbmQgaW5kZW50IGlzIE5vbmUgYW5kIHNlcGFy
YXRvcnMgaXMgTm9uZSBhbmQKKyAgICAgICAgZW5jb2RpbmcgPT0gJ3V0Zi04JyBhbmQgbm90IGt3
KToKKyAgICAgICAgaXRlcmFibGUgPSBfZGVmYXVsdF9lbmNvZGVyLml0ZXJlbmNvZGUob2JqKQor
ICAgIGVsc2U6CisgICAgICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICAgICAgY2xzID0gSlNP
TkVuY29kZXIKKyAgICAgICAgaXRlcmFibGUgPSBjbHMoc2tpcGtleXM9c2tpcGtleXMsIGVuc3Vy
ZV9hc2NpaT1lbnN1cmVfYXNjaWksCisgICAgICAgICAgICBjaGVja19jaXJjdWxhcj1jaGVja19j
aXJjdWxhciwgYWxsb3dfbmFuPWFsbG93X25hbiwgaW5kZW50PWluZGVudCwKKyAgICAgICAgICAg
IHNlcGFyYXRvcnM9c2VwYXJhdG9ycywgZW5jb2Rpbmc9ZW5jb2RpbmcsICoqa3cpLml0ZXJlbmNv
ZGUob2JqKQorICAgICMgY291bGQgYWNjZWxlcmF0ZSB3aXRoIHdyaXRlbGluZXMgaW4gc29tZSB2
ZXJzaW9ucyBvZiBQeXRob24sIGF0CisgICAgIyBhIGRlYnVnZ2FiaWxpdHkgY29zdAorICAgIGZv
ciBjaHVuayBpbiBpdGVyYWJsZToKKyAgICAgICAgZnAud3JpdGUoY2h1bmspCisKKworZGVmIGR1
bXBzKG9iaiwgc2tpcGtleXM9RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVlLCBjaGVja19jaXJjdWxh
cj1UcnVlLAorICAgICAgICBhbGxvd19uYW49VHJ1ZSwgY2xzPU5vbmUsIGluZGVudD1Ob25lLCBz
ZXBhcmF0b3JzPU5vbmUsCisgICAgICAgIGVuY29kaW5nPSd1dGYtOCcsICoqa3cpOgorICAgICIi
IgorICAgIFNlcmlhbGl6ZSBgYG9iamBgIHRvIGEgSlNPTiBmb3JtYXR0ZWQgYGBzdHJgYC4KKwor
ICAgIElmIGBgc2tpcGtleXNgYCBpcyBgYFRydWVgYCB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBh
cmUgbm90IGJhc2ljIHR5cGVzCisgICAgKGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGludGBgLCBg
YGxvbmdgYCwgYGBmbG9hdGBgLCBgYGJvb2xgYCwgYGBOb25lYGApIAorICAgIHdpbGwgYmUgc2tp
cHBlZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgorCisgICAgSWYgYGBlbnN1
cmVfYXNjaWlgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEK
KyAgICBgYHVuaWNvZGVgYCBpbnN0YW5jZSBzdWJqZWN0IHRvIG5vcm1hbCBQeXRob24gYGBzdHJg
YCB0byBgYHVuaWNvZGVgYAorICAgIGNvZXJjaW9uIHJ1bGVzIGluc3RlYWQgb2YgYmVpbmcgZXNj
YXBlZCB0byBhbiBBU0NJSSBgYHN0cmBgLgorCisgICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlz
IGBgRmFsc2VgYCwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCisgICAgZm9yIGNv
bnRhaW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHdp
bGwKKyAgICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4KKworICAg
IElmIGBgYWxsb3dfbmFuYGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdpbGwgYmUgYSBgYFZhbHVl
RXJyb3JgYCB0bworICAgIHNlcmlhbGl6ZSBvdXQgb2YgcmFuZ2UgYGBmbG9hdGBgIHZhbHVlcyAo
YGBuYW5gYCwgYGBpbmZgYCwgYGAtaW5mYGApIGluCisgICAgc3RyaWN0IGNvbXBsaWFuY2Ugb2Yg
dGhlIEpTT04gc3BlY2lmaWNhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyB0aGUKKyAgICBKYXZhU2Ny
aXB0IGVxdWl2YWxlbnRzIChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUluZmluaXR5YGApLgor
CisgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04g
YXJyYXkgZWxlbWVudHMgYW5kCisgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJp
bnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQKKyAgICBsZXZlbCBvZiAwIHdp
bGwgb25seSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QKKyAg
ICByZXByZXNlbnRhdGlvbi4KKworICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1f
c2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQorICAgIHRoZW4gaXQgd2lsbCBiZSB1
c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgor
ICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlv
bi4KKworICAgIGBgZW5jb2RpbmdgYCBpcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBzdHIg
aW5zdGFuY2VzLCBkZWZhdWx0IGlzIFVURi04LgorCisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNP
TkVuY29kZXJgYCBzdWJjbGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCisgICAgYGAu
ZGVmYXVsdCgpYGAgbWV0aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwgc3BlY2lm
eSBpdCB3aXRoCisgICAgdGhlIGBgY2xzYGAga3dhcmcuCisgICAgIiIiCisgICAgIyBjYWNoZWQg
ZW5jb2RlcgorICAgIGlmIChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lpIGlzIFRy
dWUgYW5kCisgICAgICAgIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25hbiBpcyBU
cnVlIGFuZAorICAgICAgICBjbHMgaXMgTm9uZSBhbmQgaW5kZW50IGlzIE5vbmUgYW5kIHNlcGFy
YXRvcnMgaXMgTm9uZSBhbmQKKyAgICAgICAgZW5jb2RpbmcgPT0gJ3V0Zi04JyBhbmQgbm90IGt3
KToKKyAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2VuY29kZXIuZW5jb2RlKG9iaikKKyAgICBpZiBj
bHMgaXMgTm9uZToKKyAgICAgICAgY2xzID0gSlNPTkVuY29kZXIKKyAgICByZXR1cm4gY2xzKAor
ICAgICAgICBza2lwa2V5cz1za2lwa2V5cywgZW5zdXJlX2FzY2lpPWVuc3VyZV9hc2NpaSwKKyAg
ICAgICAgY2hlY2tfY2lyY3VsYXI9Y2hlY2tfY2lyY3VsYXIsIGFsbG93X25hbj1hbGxvd19uYW4s
IGluZGVudD1pbmRlbnQsCisgICAgICAgIHNlcGFyYXRvcnM9c2VwYXJhdG9ycywgZW5jb2Rpbmc9
ZW5jb2RpbmcsCisgICAgICAgICoqa3cpLmVuY29kZShvYmopCisKK19kZWZhdWx0X2RlY29kZXIg
PSBKU09ORGVjb2RlcihlbmNvZGluZz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lKQorCitkZWYgbG9h
ZChmcCwgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsICoqa3cpOgor
ICAgICIiIgorICAgIERlc2VyaWFsaXplIGBgZnBgYCAoYSBgYC5yZWFkKClgYC1zdXBwb3J0aW5n
IGZpbGUtbGlrZSBvYmplY3QgY29udGFpbmluZworICAgIGEgSlNPTiBkb2N1bWVudCkgdG8gYSBQ
eXRob24gb2JqZWN0LgorCisgICAgSWYgdGhlIGNvbnRlbnRzIG9mIGBgZnBgYCBpcyBlbmNvZGVk
IHdpdGggYW4gQVNDSUkgYmFzZWQgZW5jb2Rpbmcgb3RoZXIKKyAgICB0aGFuIHV0Zi04IChlLmcu
IGxhdGluLTEpLCB0aGVuIGFuIGFwcHJvcHJpYXRlIGBgZW5jb2RpbmdgYCBuYW1lIG11c3QKKyAg
ICBiZSBzcGVjaWZpZWQuIEVuY29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQgKHN1Y2gg
YXMgVUNTLTIpIGFyZQorICAgIG5vdCBhbGxvd2VkLCBhbmQgc2hvdWxkIGJlIHdyYXBwZWQgd2l0
aAorICAgIGBgY29kZWNzLmdldHJlYWRlcihmcCkoZW5jb2RpbmcpYGAsIG9yIHNpbXBseSBkZWNv
ZGVkIHRvIGEgYGB1bmljb2RlYGAKKyAgICBvYmplY3QgYW5kIHBhc3NlZCB0byBgYGxvYWRzKClg
YAorCisgICAgYGBvYmplY3RfaG9va2BgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2ls
bCBiZSBjYWxsZWQgd2l0aCB0aGUKKyAgICByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRl
Y29kZSAoYSBgYGRpY3RgYCkuIFRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICBgYG9iamVjdF9ob29r
YGAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGBgZGljdGBgLiBUaGlzIGZlYXR1cmUKKyAg
ICBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpTT04tUlBD
IGNsYXNzIGhpbnRpbmcpLgorICAgIAorICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05EZWNvZGVy
YGAgc3ViY2xhc3MsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAorICAgIGt3YXJnLgorICAg
ICIiIgorICAgIHJldHVybiBsb2FkcyhmcC5yZWFkKCksCisgICAgICAgIGVuY29kaW5nPWVuY29k
aW5nLCBjbHM9Y2xzLCBvYmplY3RfaG9vaz1vYmplY3RfaG9vaywgKiprdykKKworZGVmIGxvYWRz
KHMsIGVuY29kaW5nPU5vbmUsIGNscz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLCAqKmt3KToKKyAg
ICAiIiIKKyAgICBEZXNlcmlhbGl6ZSBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgIGlu
c3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OCisgICAgZG9jdW1lbnQpIHRvIGEgUHl0aG9uIG9iamVj
dC4KKworICAgIElmIGBgc2BgIGlzIGEgYGBzdHJgYCBpbnN0YW5jZSBhbmQgaXMgZW5jb2RlZCB3
aXRoIGFuIEFTQ0lJIGJhc2VkIGVuY29kaW5nCisgICAgb3RoZXIgdGhhbiB1dGYtOCAoZS5nLiBs
YXRpbi0xKSB0aGVuIGFuIGFwcHJvcHJpYXRlIGBgZW5jb2RpbmdgYCBuYW1lCisgICAgbXVzdCBi
ZSBzcGVjaWZpZWQuIEVuY29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQgKHN1Y2ggYXMg
VUNTLTIpCisgICAgYXJlIG5vdCBhbGxvd2VkIGFuZCBzaG91bGQgYmUgZGVjb2RlZCB0byBgYHVu
aWNvZGVgYCBmaXJzdC4KKworICAgIGBgb2JqZWN0X2hvb2tgYCBpcyBhbiBvcHRpb25hbCBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlCisgICAgcmVzdWx0IG9mIGFueSBvYmpl
Y3QgbGl0ZXJhbCBkZWNvZGUgKGEgYGBkaWN0YGApLiBUaGUgcmV0dXJuIHZhbHVlIG9mCisgICAg
YGBvYmplY3RfaG9va2BgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4gVGhp
cyBmZWF0dXJlCisgICAgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyAo
ZS5nLiBKU09OLVJQQyBjbGFzcyBoaW50aW5nKS4KKworICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpT
T05EZWNvZGVyYGAgc3ViY2xhc3MsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAorICAgIGt3
YXJnLgorICAgICIiIgorICAgIGlmIGNscyBpcyBOb25lIGFuZCBlbmNvZGluZyBpcyBOb25lIGFu
ZCBvYmplY3RfaG9vayBpcyBOb25lIGFuZCBub3Qga3c6CisgICAgICAgIHJldHVybiBfZGVmYXVs
dF9kZWNvZGVyLmRlY29kZShzKQorICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICBjbHMgPSBK
U09ORGVjb2RlcgorICAgIGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOgorICAgICAgICBrd1sn
b2JqZWN0X2hvb2snXSA9IG9iamVjdF9ob29rCisgICAgcmV0dXJuIGNscyhlbmNvZGluZz1lbmNv
ZGluZywgKiprdykuZGVjb2RlKHMpCisKK2RlZiByZWFkKHMpOgorICAgICIiIgorICAgIGpzb24t
cHkgQVBJIGNvbXBhdGliaWxpdHkgaG9vay4gVXNlIGxvYWRzKHMpIGluc3RlYWQuCisgICAgIiIi
CisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2FybmluZ3Mud2Fybigic2ltcGxlanNvbi5sb2Fk
cyhzKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHJlYWQocykiLAorICAgICAgICBEZXByZWNh
dGlvbldhcm5pbmcpCisgICAgcmV0dXJuIGxvYWRzKHMpCisKK2RlZiB3cml0ZShvYmopOgorICAg
ICIiIgorICAgIGpzb24tcHkgQVBJIGNvbXBhdGliaWxpdHkgaG9vay4gVXNlIGR1bXBzKHMpIGlu
c3RlYWQuCisgICAgIiIiCisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2FybmluZ3Mud2Fybigi
c2ltcGxlanNvbi5kdW1wcyhzKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHdyaXRlKHMpIiwK
KyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIHJldHVybiBkdW1wcyhvYmopCisKKwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVq
c29uL19faW5pdF9fLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
SW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9fc3BlZWR1cHMu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24v
X3NwZWVkdXBzLmMJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVy
L3NpbXBsZWpzb24vX3NwZWVkdXBzLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE1IEBACisj
aW5jbHVkZSAiUHl0aG9uLmgiCisjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwICYmICFk
ZWZpbmVkKFBZX1NTSVpFX1RfTUlOKQordHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKKyNkZWZpbmUg
UFlfU1NJWkVfVF9NQVggSU5UX01BWAorI2RlZmluZSBQWV9TU0laRV9UX01JTiBJTlRfTUlOCisj
ZW5kaWYKKworc3RhdGljIFB5X3NzaXplX3QKK2FzY2lpX2VzY2FwZV9jaGFyKFB5X1VOSUNPREUg
YywgY2hhciAqb3V0cHV0LCBQeV9zc2l6ZV90IGNoYXJzKTsKK3N0YXRpYyBQeU9iamVjdCAqCith
c2NpaV9lc2NhcGVfdW5pY29kZShQeU9iamVjdCAqcHlzdHIpOworc3RhdGljIFB5T2JqZWN0ICoK
K2FzY2lpX2VzY2FwZV9zdHIoUHlPYmplY3QgKnB5c3RyKTsKK3N0YXRpYyBQeU9iamVjdCAqCitw
eV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShQeU9iamVjdCogc2VsZiBfX2F0dHJpYnV0ZV9fKChf
X3VudXNlZF9fKSksIFB5T2JqZWN0ICpweXN0cik7Cit2b2lkIGluaXRfc3BlZWR1cHModm9pZCk7
CisKKyNkZWZpbmUgU19DSEFSKGMpIChjID49ICcgJyAmJiBjIDw9ICd+JyAmJiBjICE9ICdcXCcg
JiYgYyAhPSAnLycgJiYgYyAhPSAnIicpCisKKyNkZWZpbmUgTUlOX0VYUEFOU0lPTiA2CisjaWZk
ZWYgUHlfVU5JQ09ERV9XSURFCisjZGVmaW5lIE1BWF9FWFBBTlNJT04gKDIgKiBNSU5fRVhQQU5T
SU9OKQorI2Vsc2UKKyNkZWZpbmUgTUFYX0VYUEFOU0lPTiBNSU5fRVhQQU5TSU9OCisjZW5kaWYK
Kworc3RhdGljIFB5X3NzaXplX3QKK2FzY2lpX2VzY2FwZV9jaGFyKFB5X1VOSUNPREUgYywgY2hh
ciAqb3V0cHV0LCBQeV9zc2l6ZV90IGNoYXJzKSB7CisgICAgUHlfVU5JQ09ERSB4OworICAgIG91
dHB1dFtjaGFycysrXSA9ICdcXCc7CisgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgJy8n
OiBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOyBicmVhazsKKyAgICAgICAgY2FzZSAnXFwnOiBv
dXRwdXRbY2hhcnMrK10gPSAoY2hhciljOyBicmVhazsKKyAgICAgICAgY2FzZSAnIic6IG91dHB1
dFtjaGFycysrXSA9IChjaGFyKWM7IGJyZWFrOworICAgICAgICBjYXNlICdcYic6IG91dHB1dFtj
aGFycysrXSA9ICdiJzsgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xmJzogb3V0cHV0W2NoYXJzKytd
ID0gJ2YnOyBicmVhazsKKyAgICAgICAgY2FzZSAnXG4nOiBvdXRwdXRbY2hhcnMrK10gPSAnbic7
IGJyZWFrOworICAgICAgICBjYXNlICdccic6IG91dHB1dFtjaGFycysrXSA9ICdyJzsgYnJlYWs7
CisgICAgICAgIGNhc2UgJ1x0Jzogb3V0cHV0W2NoYXJzKytdID0gJ3QnOyBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICAgICAgICAgIGlmIChjID49
IDB4MTAwMDApIHsKKyAgICAgICAgICAgICAgICAvKiBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgKi8K
KyAgICAgICAgICAgICAgICBQeV9VTklDT0RFIHYgPSBjIC0gMHgxMDAwMDsKKyAgICAgICAgICAg
ICAgICBjID0gMHhkODAwIHwgKCh2ID4+IDEwKSAmIDB4M2ZmKTsKKyAgICAgICAgICAgICAgICBv
dXRwdXRbY2hhcnMrK10gPSAndSc7CisgICAgICAgICAgICAgICAgeCA9IChjICYgMHhmMDAwKSA+
PiAxMjsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyAr
IHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgICAgICB4ID0gKGMgJiAweDBmMDApID4+
IDg7CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4
IDogJ2EnICsgKHggLSAxMCk7CisgICAgICAgICAgICAgICAgeCA9IChjICYgMHgwMGYwKSA+PiA0
OworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6
ICdhJyArICh4IC0gMTApOworICAgICAgICAgICAgICAgIHggPSAoYyAmIDB4MDAwZik7CisgICAg
ICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsg
KHggLSAxMCk7CisgICAgICAgICAgICAgICAgYyA9IDB4ZGMwMCB8ICh2ICYgMHgzZmYpOworICAg
ICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICdcXCc7CisgICAgICAgICAgICB9CisjZW5k
aWYKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKKyAgICAgICAgICAgIHggPSAo
YyAmIDB4ZjAwMCkgPj4gMTI7CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEw
KSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgIHggPSAoYyAmIDB4MGYw
MCkgPj4gODsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsg
eCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAgICAgeCA9IChjICYgMHgwMGYwKSA+PiA0Owor
ICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsg
KHggLSAxMCk7CisgICAgICAgICAgICB4ID0gKGMgJiAweDAwMGYpOworICAgICAgICAgICAgb3V0
cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7CisgICAg
fQorICAgIHJldHVybiBjaGFyczsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2FzY2lpX2VzY2Fw
ZV91bmljb2RlKFB5T2JqZWN0ICpweXN0cikgeworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9z
c2l6ZV90IGlucHV0X2NoYXJzOworICAgIFB5X3NzaXplX3Qgb3V0cHV0X3NpemU7CisgICAgUHlf
c3NpemVfdCBjaGFyczsKKyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICBjaGFyICpvdXRwdXQ7Cisg
ICAgUHlfVU5JQ09ERSAqaW5wdXRfdW5pY29kZTsKKworICAgIGlucHV0X2NoYXJzID0gUHlVbmlj
b2RlX0dFVF9TSVpFKHB5c3RyKTsKKyAgICBpbnB1dF91bmljb2RlID0gUHlVbmljb2RlX0FTX1VO
SUNPREUocHlzdHIpOworICAgIC8qIE9uZSBjaGFyIGlucHV0IGNhbiBiZSB1cCB0byA2IGNoYXJz
IG91dHB1dCwgZXN0aW1hdGUgNCBvZiB0aGVzZSAqLworICAgIG91dHB1dF9zaXplID0gMiArIChN
SU5fRVhQQU5TSU9OICogNCkgKyBpbnB1dF9jaGFyczsKKyAgICBydmFsID0gUHlTdHJpbmdfRnJv
bVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0cHV0X3NpemUpOworICAgIGlmIChydmFsID09IE5VTEwp
IHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG91dHB1dCA9IFB5U3RyaW5nX0FT
X1NUUklORyhydmFsKTsKKyAgICBjaGFycyA9IDA7CisgICAgb3V0cHV0W2NoYXJzKytdID0gJyIn
OworICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7CisgICAgICAgIFB5X1VO
SUNPREUgYyA9IGlucHV0X3VuaWNvZGVbaV07CisgICAgICAgIGlmIChTX0NIQVIoYykpIHsKKyAg
ICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBjaGFycyA9IGFzY2lpX2VzY2FwZV9jaGFyKGMsIG91dHB1dCwgY2hhcnMpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvdXRwdXRfc2l6ZSAtIGNoYXJzIDwgKDEgKyBNQVhfRVhQ
QU5TSU9OKSkgeworICAgICAgICAgICAgLyogVGhlcmUncyBtb3JlIHRoYW4gZm91ciwgc28gbGV0
J3MgcmVzaXplIGJ5IGEgbG90ICovCisgICAgICAgICAgICBvdXRwdXRfc2l6ZSAqPSAyOworICAg
ICAgICAgICAgLyogVGhpcyBpcyBhbiB1cHBlciBib3VuZCAqLworICAgICAgICAgICAgaWYgKG91
dHB1dF9zaXplID4gMiArIChpbnB1dF9jaGFycyAqIE1BWF9FWFBBTlNJT04pKSB7CisgICAgICAg
ICAgICAgICAgb3V0cHV0X3NpemUgPSAyICsgKGlucHV0X2NoYXJzICogTUFYX0VYUEFOU0lPTik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwg
b3V0cHV0X3NpemUpID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXRwdXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgb3V0cHV0W2NoYXJzKytdID0gJyInOworICAgIGlmIChf
UHlTdHJpbmdfUmVzaXplKCZydmFsLCBjaGFycykgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorICAgIHJldHVybiBydmFsOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYXNj
aWlfZXNjYXBlX3N0cihQeU9iamVjdCAqcHlzdHIpIHsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAg
UHlfc3NpemVfdCBpbnB1dF9jaGFyczsKKyAgICBQeV9zc2l6ZV90IG91dHB1dF9zaXplOworICAg
IFB5X3NzaXplX3QgY2hhcnM7CisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAgY2hhciAqb3V0cHV0
OworICAgIGNoYXIgKmlucHV0X3N0cjsKKworICAgIGlucHV0X2NoYXJzID0gUHlTdHJpbmdfR0VU
X1NJWkUocHlzdHIpOworICAgIGlucHV0X3N0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7
CisgICAgLyogT25lIGNoYXIgaW5wdXQgY2FuIGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3Rp
bWF0ZSA0IG9mIHRoZXNlICovCisgICAgb3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04g
KiA0KSArIGlucHV0X2NoYXJzOworICAgIHJ2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6
ZShOVUxMLCBvdXRwdXRfc2l6ZSk7CisgICAgaWYgKHJ2YWwgPT0gTlVMTCkgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwp
OworICAgIGNoYXJzID0gMDsKKyAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7CisgICAgZm9yIChp
ID0gMDsgaSA8IGlucHV0X2NoYXJzOyBpKyspIHsKKyAgICAgICAgUHlfVU5JQ09ERSBjID0gKFB5
X1VOSUNPREUpaW5wdXRfc3RyW2ldOworICAgICAgICBpZiAoU19DSEFSKGMpKSB7CisgICAgICAg
ICAgICBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOworICAgICAgICB9IGVsc2UgaWYgKGMgPiAw
eDdGKSB7CisgICAgICAgICAgICAvKiBXZSBoaXQgYSBub24tQVNDSUkgY2hhcmFjdGVyLCBiYWls
IHRvIHVuaWNvZGUgbW9kZSAqLworICAgICAgICAgICAgUHlPYmplY3QgKnVuaTsKKyAgICAgICAg
ICAgIFB5X0RFQ1JFRihydmFsKTsKKyAgICAgICAgICAgIHVuaSA9IFB5VW5pY29kZV9EZWNvZGVV
VEY4KGlucHV0X3N0ciwgaW5wdXRfY2hhcnMsICJzdHJpY3QiKTsKKyAgICAgICAgICAgIGlmICh1
bmkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcnZhbCA9IGFzY2lpX2VzY2FwZV91bmljb2RlKHVuaSk7CisgICAgICAg
ICAgICBQeV9ERUNSRUYodW5pKTsKKyAgICAgICAgICAgIHJldHVybiBydmFsOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgY2hhcnMgPSBhc2NpaV9lc2NhcGVfY2hhcihjLCBvdXRwdXQs
IGNoYXJzKTsKKyAgICAgICAgfQorICAgICAgICAvKiBBbiBBU0NJSSBjaGFyIGNhbid0IHBvc3Np
Ymx5IGV4cGFuZCB0byBhIHN1cnJvZ2F0ZSEgKi8KKyAgICAgICAgaWYgKG91dHB1dF9zaXplIC0g
Y2hhcnMgPCAoMSArIE1JTl9FWFBBTlNJT04pKSB7CisgICAgICAgICAgICAvKiBUaGVyZSdzIG1v
cmUgdGhhbiBmb3VyLCBzbyBsZXQncyByZXNpemUgYnkgYSBsb3QgKi8KKyAgICAgICAgICAgIG91
dHB1dF9zaXplICo9IDI7CisgICAgICAgICAgICBpZiAob3V0cHV0X3NpemUgPiAyICsgKGlucHV0
X2NoYXJzICogTUlOX0VYUEFOU0lPTikpIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9
IDIgKyAoaW5wdXRfY2hhcnMgKiBNSU5fRVhQQU5TSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydmFsLCBvdXRwdXRfc2l6ZSkgPT0gLTEpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG91dHB1dCA9IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBvdXRwdXRbY2hhcnMrK10gPSAnIic7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2YWws
IGNoYXJzKSA9PSAtMSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJu
IHJ2YWw7Cit9CisKK1B5RG9jX1NUUlZBUihweWRvY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSwK
KyAgICAiZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoYmFzZXN0cmluZykgLT4gc3RyXG4iCisgICAg
IlxuIgorICAgICIuLi4iCispOworCitzdGF0aWMgUHlPYmplY3QgKgorcHlfZW5jb2RlX2Jhc2Vz
dHJpbmdfYXNjaWkoUHlPYmplY3QqIHNlbGYgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLCBQ
eU9iamVjdCAqcHlzdHIpIHsKKyAgICAvKiBNRVRIX08gKi8KKyAgICBpZiAoUHlTdHJpbmdfQ2hl
Y2socHlzdHIpKSB7CisgICAgICAgIHJldHVybiBhc2NpaV9lc2NhcGVfc3RyKHB5c3RyKTsKKyAg
ICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKKyAgICAgICAgcmV0dXJuIGFz
Y2lpX2VzY2FwZV91bmljb2RlKHB5c3RyKTsKKyAgICB9CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5
RXhjX1R5cGVFcnJvciwgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTsKKyAgICBy
ZXR1cm4gTlVMTDsKK30KKworI2RlZmluZSBERUZOKG4sIGspIFwKKyAgICB7ICBcCisgICAgICAg
ICNuLCBcCisgICAgICAgIChQeUNGdW5jdGlvbilweV8gIyNuLCBcCisgICAgICAgIGssIFwKKyAg
ICAgICAgcHlkb2NfICMjbiBcCisgICAgfQorc3RhdGljIFB5TWV0aG9kRGVmIHNwZWVkdXBzX21l
dGhvZHNbXSA9IHsKKyAgICBERUZOKGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpLCBNRVRIX08pLAor
ICAgIHt9Cit9OworI3VuZGVmIERFRk4KKwordm9pZAoraW5pdF9zcGVlZHVwcyh2b2lkKQorewor
ICAgIFB5T2JqZWN0ICptOworICAgIG0gPSBQeV9Jbml0TW9kdWxlNCgiX3NwZWVkdXBzIiwgc3Bl
ZWR1cHNfbWV0aG9kcywgTlVMTCwgTlVMTCwgUFlUSE9OX0FQSV9WRVJTSU9OKTsKK30KClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9f
c3BlZWR1cHMuYwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4
OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vZGVjb2Rlci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vZGVjb2Rl
ci5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxl
anNvbi9kZWNvZGVyLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3MyBAQAorIiIiCitJbXBs
ZW1lbnRhdGlvbiBvZiBKU09ORGVjb2RlcgorIiIiCitpbXBvcnQgcmUKKworZnJvbSAuc2Nhbm5l
ciBpbXBvcnQgU2Nhbm5lciwgcGF0dGVybgorCitGTEFHUyA9IHJlLlZFUkJPU0UgfCByZS5NVUxU
SUxJTkUgfCByZS5ET1RBTEwKKworZGVmIF9mbG9hdGNvbnN0YW50cygpOgorICAgIGltcG9ydCBz
dHJ1Y3QKKyAgICBpbXBvcnQgc3lzCisgICAgX0JZVEVTID0gJzdGRjgwMDAwMDAwMDAwMDA3RkYw
MDAwMDAwMDAwMDAwJy5kZWNvZGUoJ2hleCcpCisgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmln
JzoKKyAgICAgICAgX0JZVEVTID0gX0JZVEVTWzo4XVs6Oi0xXSArIF9CWVRFU1s4Ol1bOjotMV0K
KyAgICBuYW4sIGluZiA9IHN0cnVjdC51bnBhY2soJ2RkJywgX0JZVEVTKQorICAgIHJldHVybiBu
YW4sIGluZiwgLWluZgorCitOYU4sIFBvc0luZiwgTmVnSW5mID0gX2Zsb2F0Y29uc3RhbnRzKCkK
KworZGVmIGxpbmVjb2woZG9jLCBwb3MpOgorICAgIGxpbmVubyA9IGRvYy5jb3VudCgnXG4nLCAw
LCBwb3MpICsgMQorICAgIGlmIGxpbmVubyA9PSAxOgorICAgICAgICBjb2xubyA9IHBvcworICAg
IGVsc2U6CisgICAgICAgIGNvbG5vID0gcG9zIC0gZG9jLnJpbmRleCgnXG4nLCAwLCBwb3MpCisg
ICAgcmV0dXJuIGxpbmVubywgY29sbm8KKworZGVmIGVycm1zZyhtc2csIGRvYywgcG9zLCBlbmQ9
Tm9uZSk6CisgICAgbGluZW5vLCBjb2xubyA9IGxpbmVjb2woZG9jLCBwb3MpCisgICAgaWYgZW5k
IGlzIE5vbmU6CisgICAgICAgIHJldHVybiAnJXM6IGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVk
KScgJSAobXNnLCBsaW5lbm8sIGNvbG5vLCBwb3MpCisgICAgZW5kbGluZW5vLCBlbmRjb2xubyA9
IGxpbmVjb2woZG9jLCBlbmQpCisgICAgcmV0dXJuICclczogbGluZSAlZCBjb2x1bW4gJWQgLSBs
aW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCAtICVkKScgJSAoCisgICAgICAgIG1zZywgbGluZW5v
LCBjb2xubywgZW5kbGluZW5vLCBlbmRjb2xubywgcG9zLCBlbmQpCisKK19DT05TVEFOVFMgPSB7
CisgICAgJy1JbmZpbml0eSc6IE5lZ0luZiwKKyAgICAnSW5maW5pdHknOiBQb3NJbmYsCisgICAg
J05hTic6IE5hTiwKKyAgICAndHJ1ZSc6IFRydWUsCisgICAgJ2ZhbHNlJzogRmFsc2UsCisgICAg
J251bGwnOiBOb25lLAorfQorCitkZWYgSlNPTkNvbnN0YW50KG1hdGNoLCBjb250ZXh0LCBjPV9D
T05TVEFOVFMpOgorICAgIHJldHVybiBjW21hdGNoLmdyb3VwKDApXSwgTm9uZQorcGF0dGVybign
KC0/SW5maW5pdHl8TmFOfHRydWV8ZmFsc2V8bnVsbCknKShKU09OQ29uc3RhbnQpCisKK2RlZiBK
U09OTnVtYmVyKG1hdGNoLCBjb250ZXh0KToKKyAgICBtYXRjaCA9IEpTT05OdW1iZXIucmVnZXgu
bWF0Y2gobWF0Y2guc3RyaW5nLCAqbWF0Y2guc3BhbigpKQorICAgIGludGVnZXIsIGZyYWMsIGV4
cCA9IG1hdGNoLmdyb3VwcygpCisgICAgaWYgZnJhYyBvciBleHA6CisgICAgICAgIHJlcyA9IGZs
b2F0KGludGVnZXIgKyAoZnJhYyBvciAnJykgKyAoZXhwIG9yICcnKSkKKyAgICBlbHNlOgorICAg
ICAgICByZXMgPSBpbnQoaW50ZWdlcikKKyAgICByZXR1cm4gcmVzLCBOb25lCitwYXR0ZXJuKHIn
KC0/KD86MHxbMS05XVxkKikpKFwuXGQrKT8oW2VFXVstK10/XGQrKT8nKShKU09OTnVtYmVyKQor
CitTVFJJTkdDSFVOSyA9IHJlLmNvbXBpbGUocicoLio/KShbIlxcXSknLCBGTEFHUykKK0JBQ0tT
TEFTSCA9IHsKKyAgICAnIic6IHUnIicsICdcXCc6IHUnXFwnLCAnLyc6IHUnLycsCisgICAgJ2In
OiB1J1xiJywgJ2YnOiB1J1xmJywgJ24nOiB1J1xuJywgJ3InOiB1J1xyJywgJ3QnOiB1J1x0JywK
K30KKworREVGQVVMVF9FTkNPRElORyA9ICJ1dGYtOCIKKworZGVmIHNjYW5zdHJpbmcocywgZW5k
LCBlbmNvZGluZz1Ob25lLCBfYj1CQUNLU0xBU0gsIF9tPVNUUklOR0NIVU5LLm1hdGNoKToKKyAg
ICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICBlbmNvZGluZyA9IERFRkFVTFRfRU5DT0RJ
TkcKKyAgICBjaHVua3MgPSBbXQorICAgIF9hcHBlbmQgPSBjaHVua3MuYXBwZW5kCisgICAgYmVn
aW4gPSBlbmQgLSAxCisgICAgd2hpbGUgMToKKyAgICAgICAgY2h1bmsgPSBfbShzLCBlbmQpCisg
ICAgICAgIGlmIGNodW5rIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAor
ICAgICAgICAgICAgICAgIGVycm1zZygiVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCIs
IHMsIGJlZ2luKSkKKyAgICAgICAgZW5kID0gY2h1bmsuZW5kKCkKKyAgICAgICAgY29udGVudCwg
dGVybWluYXRvciA9IGNodW5rLmdyb3VwcygpCisgICAgICAgIGlmIGNvbnRlbnQ6CisgICAgICAg
ICAgICBpZiBub3QgaXNpbnN0YW5jZShjb250ZW50LCB1bmljb2RlKToKKyAgICAgICAgICAgICAg
ICBjb250ZW50ID0gdW5pY29kZShjb250ZW50LCBlbmNvZGluZykKKyAgICAgICAgICAgIF9hcHBl
bmQoY29udGVudCkKKyAgICAgICAgaWYgdGVybWluYXRvciA9PSAnIic6CisgICAgICAgICAgICBi
cmVhaworICAgICAgICB0cnk6CisgICAgICAgICAgICBlc2MgPSBzW2VuZF0KKyAgICAgICAgZXhj
ZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAg
ICAgICAgIGVycm1zZygiVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCIsIHMsIGJlZ2lu
KSkKKyAgICAgICAgaWYgZXNjICE9ICd1JzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBtID0gX2JbZXNjXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgIGVycm1zZygiSW52
YWxpZCBcXGVzY2FwZTogJXIiICUgKGVzYywpLCBzLCBlbmQpKQorICAgICAgICAgICAgZW5kICs9
IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVzYyA9IHNbZW5kICsgMTplbmQgKyA1XQor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG0gPSB1bmljaHIoaW50KGVzYywgMTYp
KQorICAgICAgICAgICAgICAgIGlmIGxlbihlc2MpICE9IDQgb3Igbm90IGVzYy5pc2FsbnVtKCk6
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJJ
bnZhbGlkIFxcdVhYWFggZXNjYXBlIiwgcywgZW5kKSkKKyAgICAgICAgICAgIGVuZCArPSA1Cisg
ICAgICAgIF9hcHBlbmQobSkKKyAgICByZXR1cm4gdScnLmpvaW4oY2h1bmtzKSwgZW5kCisKK2Rl
ZiBKU09OU3RyaW5nKG1hdGNoLCBjb250ZXh0KToKKyAgICBlbmNvZGluZyA9IGdldGF0dHIoY29u
dGV4dCwgJ2VuY29kaW5nJywgTm9uZSkKKyAgICByZXR1cm4gc2NhbnN0cmluZyhtYXRjaC5zdHJp
bmcsIG1hdGNoLmVuZCgpLCBlbmNvZGluZykKK3BhdHRlcm4ociciJykoSlNPTlN0cmluZykKKwor
V0hJVEVTUEFDRSA9IHJlLmNvbXBpbGUocidccyonLCBGTEFHUykKKworZGVmIEpTT05PYmplY3Qo
bWF0Y2gsIGNvbnRleHQsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgorICAgIHBhaXJzID0ge30KKyAg
ICBzID0gbWF0Y2guc3RyaW5nCisgICAgZW5kID0gX3cocywgbWF0Y2guZW5kKCkpLmVuZCgpCisg
ICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICMgdHJpdmlhbCBlbXB0eSBvYmplY3QK
KyAgICBpZiBuZXh0Y2hhciA9PSAnfSc6CisgICAgICAgIHJldHVybiBwYWlycywgZW5kICsgMQor
ICAgIGlmIG5leHRjaGFyICE9ICciJzoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2co
IkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcywgZW5kKSkKKyAgICBlbmQgKz0gMQorICAgIGVu
Y29kaW5nID0gZ2V0YXR0cihjb250ZXh0LCAnZW5jb2RpbmcnLCBOb25lKQorICAgIGl0ZXJzY2Fu
ID0gSlNPTlNjYW5uZXIuaXRlcnNjYW4KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBrZXksIGVu
ZCA9IHNjYW5zdHJpbmcocywgZW5kLCBlbmNvZGluZykKKyAgICAgICAgZW5kID0gX3cocywgZW5k
KS5lbmQoKQorICAgICAgICBpZiBzW2VuZDplbmQgKyAxXSAhPSAnOic6CisgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIDogZGVsaW1pdGVyIiwgcywgZW5kKSkK
KyAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgdmFsdWUsIGVuZCA9IGl0ZXJzY2FuKHMsIGlkeD1lbmQsIGNvbnRleHQ9Y29udGV4dCku
bmV4dCgpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQorICAgICAgICBw
YWlyc1trZXldID0gdmFsdWUKKyAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQorICAgICAg
ICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgICAgIGVuZCArPSAxCisgICAgICAgIGlm
IG5leHRjaGFyID09ICd9JzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5leHRjaGFy
ICE9ICcsJzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcg
LCBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKSkKKyAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQo
KQorICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgICAgIGVuZCArPSAxCisg
ICAgICAgIGlmIG5leHRjaGFyICE9ICciJzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
ZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHMsIGVuZCAtIDEpKQorICAgIG9iamVj
dF9ob29rID0gZ2V0YXR0cihjb250ZXh0LCAnb2JqZWN0X2hvb2snLCBOb25lKQorICAgIGlmIG9i
amVjdF9ob29rIGlzIG5vdCBOb25lOgorICAgICAgICBwYWlycyA9IG9iamVjdF9ob29rKHBhaXJz
KQorICAgIHJldHVybiBwYWlycywgZW5kCitwYXR0ZXJuKHIneycpKEpTT05PYmplY3QpCisgICAg
ICAgICAgICAKK2RlZiBKU09OQXJyYXkobWF0Y2gsIGNvbnRleHQsIF93PVdISVRFU1BBQ0UubWF0
Y2gpOgorICAgIHZhbHVlcyA9IFtdCisgICAgcyA9IG1hdGNoLnN0cmluZworICAgIGVuZCA9IF93
KHMsIG1hdGNoLmVuZCgpKS5lbmQoKQorICAgICMgbG9vay1haGVhZCBmb3IgdHJpdmlhbCBlbXB0
eSBhcnJheQorICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICBpZiBuZXh0Y2hhciA9
PSAnXSc6CisgICAgICAgIHJldHVybiB2YWx1ZXMsIGVuZCArIDEKKyAgICBpdGVyc2NhbiA9IEpT
T05TY2FubmVyLml0ZXJzY2FuCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgdmFsdWUsIGVuZCA9IGl0ZXJzY2FuKHMsIGlkeD1lbmQsIGNvbnRleHQ9Y29udGV4dCku
bmV4dCgpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQorICAgICAgICB2
YWx1ZXMuYXBwZW5kKHZhbHVlKQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAg
ICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICAgICAgZW5kICs9IDEKKyAgICAgICAg
aWYgbmV4dGNoYXIgPT0gJ10nOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbmV4dGNo
YXIgIT0gJywnOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGlu
ZyAsIGRlbGltaXRlciIsIHMsIGVuZCkpCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkK
KyAgICByZXR1cm4gdmFsdWVzLCBlbmQKK3BhdHRlcm4ocidcWycpKEpTT05BcnJheSkKKyAKK0FO
WVRISU5HID0gWworICAgIEpTT05PYmplY3QsCisgICAgSlNPTkFycmF5LAorICAgIEpTT05TdHJp
bmcsCisgICAgSlNPTkNvbnN0YW50LAorICAgIEpTT05OdW1iZXIsCitdCisKK0pTT05TY2FubmVy
ID0gU2Nhbm5lcihBTllUSElORykKKworY2xhc3MgSlNPTkRlY29kZXIob2JqZWN0KToKKyAgICAi
IiIKKyAgICBTaW1wbGUgSlNPTiA8aHR0cDovL2pzb24ub3JnPiBkZWNvZGVyCisKKyAgICBQZXJm
b3JtcyB0aGUgZm9sbG93aW5nIHRyYW5zbGF0aW9ucyBpbiBkZWNvZGluZzoKKyAgICAKKyAgICAr
LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBKU09OICAgICAgICAg
IHwgUHl0aG9uICAgICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rPT09PT09PT09PT09
PT09PT09PSsKKyAgICB8IG9iamVjdCAgICAgICAgfCBkaWN0ICAgICAgICAgICAgICB8CisgICAg
Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgYXJyYXkgICAgICAg
ICB8IGxpc3QgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t
LS0tLS0tLS0rCisgICAgfCBzdHJpbmcgICAgICAgIHwgdW5pY29kZSAgICAgICAgICAgfAorICAg
ICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IG51bWJlciAoaW50
KSAgfCBpbnQsIGxvbmcgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgIHwgbnVtYmVyIChyZWFsKSB8IGZsb2F0ICAgICAgICAgICAgIHwKKyAg
ICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCB0cnVlICAgICAg
ICAgIHwgVHJ1ZSAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t
LS0tLS0tLS0tLSsKKyAgICB8IGZhbHNlICAgICAgICAgfCBGYWxzZSAgICAgICAgICAgICB8Cisg
ICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgbnVsbCAgICAg
ICAgICB8IE5vbmUgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t
LS0tLS0tLS0tLS0rCisKKyAgICBJdCBhbHNvIHVuZGVyc3RhbmRzIGBgTmFOYGAsIGBgSW5maW5p
dHlgYCwgYW5kIGBgLUluZmluaXR5YGAgYXMKKyAgICB0aGVpciBjb3JyZXNwb25kaW5nIGBgZmxv
YXRgYCB2YWx1ZXMsIHdoaWNoIGlzIG91dHNpZGUgdGhlIEpTT04gc3BlYy4KKyAgICAiIiIKKwor
ICAgIF9zY2FubmVyID0gU2Nhbm5lcihBTllUSElORykKKyAgICBfX2FsbF9fID0gWydfX2luaXRf
XycsICdkZWNvZGUnLCAncmF3X2RlY29kZSddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW5j
b2Rpbmc9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBgYGVu
Y29kaW5nYGAgZGV0ZXJtaW5lcyB0aGUgZW5jb2RpbmcgdXNlZCB0byBpbnRlcnByZXQgYW55IGBg
c3RyYGAKKyAgICAgICAgb2JqZWN0cyBkZWNvZGVkIGJ5IHRoaXMgaW5zdGFuY2UgKHV0Zi04IGJ5
IGRlZmF1bHQpLiAgSXQgaGFzIG5vCisgICAgICAgIGVmZmVjdCB3aGVuIGRlY29kaW5nIGBgdW5p
Y29kZWBgIG9iamVjdHMuCisgICAgICAgIAorICAgICAgICBOb3RlIHRoYXQgY3VycmVudGx5IG9u
bHkgZW5jb2RpbmdzIHRoYXQgYXJlIGEgc3VwZXJzZXQgb2YgQVNDSUkgd29yaywKKyAgICAgICAg
c3RyaW5ncyBvZiBvdGhlciBlbmNvZGluZ3Mgc2hvdWxkIGJlIHBhc3NlZCBpbiBhcyBgYHVuaWNv
ZGVgYC4KKworICAgICAgICBgYG9iamVjdF9ob29rYGAsIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBj
YWxsZWQgd2l0aCB0aGUgcmVzdWx0CisgICAgICAgIG9mIGV2ZXJ5IEpTT04gb2JqZWN0IGRlY29k
ZWQgYW5kIGl0cyByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkIGluCisgICAgICAgIHBsYWNlIG9m
IHRoZSBnaXZlbiBgYGRpY3RgYC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBjdXN0b20K
KyAgICAgICAgZGVzZXJpYWxpemF0aW9ucyAoZS5nLiB0byBzdXBwb3J0IEpTT04tUlBDIGNsYXNz
IGhpbnRpbmcpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5n
CisgICAgICAgIHNlbGYub2JqZWN0X2hvb2sgPSBvYmplY3RfaG9vaworCisgICAgZGVmIGRlY29k
ZShzZWxmLCBzLCBfdz1XSElURVNQQUNFLm1hdGNoKToKKyAgICAgICAgIiIiCisgICAgICAgIFJl
dHVybiB0aGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGBgc2BgIChhIGBgc3RyYGAgb3IgYGB1
bmljb2RlYGAKKyAgICAgICAgaW5zdGFuY2UgY29udGFpbmluZyBhIEpTT04gZG9jdW1lbnQpCisg
ICAgICAgICIiIgorICAgICAgICBvYmosIGVuZCA9IHNlbGYucmF3X2RlY29kZShzLCBpZHg9X3co
cywgMCkuZW5kKCkpCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgaWYg
ZW5kICE9IGxlbihzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHRy
YSBkYXRhIiwgcywgZW5kLCBsZW4ocykpKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYg
cmF3X2RlY29kZShzZWxmLCBzLCAqKmt3KToKKyAgICAgICAgIiIiCisgICAgICAgIERlY29kZSBh
IEpTT04gZG9jdW1lbnQgZnJvbSBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgIGJlZ2lu
bmluZworICAgICAgICB3aXRoIGEgSlNPTiBkb2N1bWVudCkgYW5kIHJldHVybiBhIDItdHVwbGUg
b2YgdGhlIFB5dGhvbgorICAgICAgICByZXByZXNlbnRhdGlvbiBhbmQgdGhlIGluZGV4IGluIGBg
c2BgIHdoZXJlIHRoZSBkb2N1bWVudCBlbmRlZC4KKworICAgICAgICBUaGlzIGNhbiBiZSB1c2Vk
IHRvIGRlY29kZSBhIEpTT04gZG9jdW1lbnQgZnJvbSBhIHN0cmluZyB0aGF0IG1heQorICAgICAg
ICBoYXZlIGV4dHJhbmVvdXMgZGF0YSBhdCB0aGUgZW5kLgorICAgICAgICAiIiIKKyAgICAgICAg
a3cuc2V0ZGVmYXVsdCgnY29udGV4dCcsIHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IG9iaiwgZW5kID0gc2VsZi5fc2Nhbm5lci5pdGVyc2NhbihzLCAqKmt3KS5uZXh0KCkKKyAgICAg
ICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJO
byBKU09OIG9iamVjdCBjb3VsZCBiZSBkZWNvZGVkIikKKyAgICAgICAgcmV0dXJuIG9iaiwgZW5k
CisKK19fYWxsX18gPSBbJ0pTT05EZWNvZGVyJ10KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktp
dFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9kZWNvZGVyLnB5Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc2ltcGxlanNvbi9lbmNvZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9lbmNvZGVyLnB5CShyZXZpc2lvbiAwKQorKysg
V2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL2VuY29kZXIucHkJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzcxIEBACisiIiIKK0ltcGxlbWVudGF0aW9uIG9mIEpTT05FbmNv
ZGVyCisiIiIKK2ltcG9ydCByZQordHJ5OgorICAgIGZyb20gc2ltcGxlanNvbiBpbXBvcnQgX3Nw
ZWVkdXBzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3NwZWVkdXBzID0gTm9uZQorCitFU0NB
UEUgPSByZS5jb21waWxlKHInW1x4MDAtXHgxOVxcIlxiXGZcblxyXHRdJykKK0VTQ0FQRV9BU0NJ
SSA9IHJlLmNvbXBpbGUocicoW1xcIi9dfFteXCAtfl0pJykKK0VTQ0FQRV9EQ1QgPSB7CisgICAg
IyBlc2NhcGUgYWxsIGZvcndhcmQgc2xhc2hlcyB0byBwcmV2ZW50IDwvc2NyaXB0PiBhdHRhY2sK
KyAgICAnLyc6ICdcXC8nLAorICAgICdcXCc6ICdcXFxcJywKKyAgICAnIic6ICdcXCInLAorICAg
ICdcYic6ICdcXGInLAorICAgICdcZic6ICdcXGYnLAorICAgICdcbic6ICdcXG4nLAorICAgICdc
cic6ICdcXHInLAorICAgICdcdCc6ICdcXHQnLAorfQorZm9yIGkgaW4gcmFuZ2UoMHgyMCk6Cisg
ICAgRVNDQVBFX0RDVC5zZXRkZWZhdWx0KGNocihpKSwgJ1xcdSUwNHgnICUgKGksKSkKKworIyBh
c3N1bWUgdGhpcyBwcm9kdWNlcyBhbiBpbmZpbml0eSBvbiBhbGwgbWFjaGluZXMgKHByb2JhYmx5
IG5vdCBndWFyYW50ZWVkKQorSU5GSU5JVFkgPSBmbG9hdCgnMWU2NjY2NicpCisKK2RlZiBmbG9h
dHN0cihvLCBhbGxvd19uYW49VHJ1ZSk6CisgICAgIyBDaGVjayBmb3Igc3BlY2lhbHMuICBOb3Rl
IHRoYXQgdGhpcyB0eXBlIG9mIHRlc3QgaXMgcHJvY2Vzc29yLSBhbmQvb3IKKyAgICAjIHBsYXRm
b3JtLXNwZWNpZmljLCBzbyBkbyB0ZXN0cyB3aGljaCBkb24ndCBkZXBlbmQgb24gdGhlIGludGVy
bmFscy4KKworICAgIGlmIG8gIT0gbzoKKyAgICAgICAgdGV4dCA9ICdOYU4nCisgICAgZWxpZiBv
ID09IElORklOSVRZOgorICAgICAgICB0ZXh0ID0gJ0luZmluaXR5JworICAgIGVsaWYgbyA9PSAt
SU5GSU5JVFk6CisgICAgICAgIHRleHQgPSAnLUluZmluaXR5JworICAgIGVsc2U6CisgICAgICAg
IHJldHVybiByZXByKG8pCisKKyAgICBpZiBub3QgYWxsb3dfbmFuOgorICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlh
bnQ6ICVyIgorICAgICAgICAgICAgJSAobywpKQorCisgICAgcmV0dXJuIHRleHQKKworCitkZWYg
ZW5jb2RlX2Jhc2VzdHJpbmcocyk6CisgICAgIiIiCisgICAgUmV0dXJuIGEgSlNPTiByZXByZXNl
bnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJpbmcKKyAgICAiIiIKKyAgICBkZWYgcmVwbGFjZShtYXRj
aCk6CisgICAgICAgIHJldHVybiBFU0NBUEVfRENUW21hdGNoLmdyb3VwKDApXQorICAgIHJldHVy
biAnIicgKyBFU0NBUEUuc3ViKHJlcGxhY2UsIHMpICsgJyInCisKK2RlZiBlbmNvZGVfYmFzZXN0
cmluZ19hc2NpaShzKToKKyAgICBkZWYgcmVwbGFjZShtYXRjaCk6CisgICAgICAgIHMgPSBtYXRj
aC5ncm91cCgwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gRVNDQVBFX0RDVFtz
XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBuID0gb3JkKHMpCisgICAg
ICAgICAgICBpZiBuIDwgMHgxMDAwMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdSUwNHgn
ICUgKG4sKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHN1cnJvZ2F0ZSBw
YWlyCisgICAgICAgICAgICAgICAgbiAtPSAweDEwMDAwCisgICAgICAgICAgICAgICAgczEgPSAw
eGQ4MDAgfCAoKG4gPj4gMTApICYgMHgzZmYpCisgICAgICAgICAgICAgICAgczIgPSAweGRjMDAg
fCAobiAmIDB4M2ZmKQorICAgICAgICAgICAgICAgIHJldHVybiAnXFx1JTA0eFxcdSUwNHgnICUg
KHMxLCBzMikKKyAgICByZXR1cm4gJyInICsgc3RyKEVTQ0FQRV9BU0NJSS5zdWIocmVwbGFjZSwg
cykpICsgJyInCisgICAgICAgIAordHJ5OgorICAgIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpID0g
X3NwZWVkdXBzLmVuY29kZV9iYXNlc3RyaW5nX2FzY2lpCisgICAgX25lZWRfdXRmOCA9IFRydWUK
K2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBfbmVlZF91dGY4ID0gRmFsc2UKKworY2xhc3Mg
SlNPTkVuY29kZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBFeHRlbnNpYmxlIEpTT04gPGh0dHA6
Ly9qc29uLm9yZz4gZW5jb2RlciBmb3IgUHl0aG9uIGRhdGEgc3RydWN0dXJlcy4KKworICAgIFN1
cHBvcnRzIHRoZSBmb2xsb3dpbmcgb2JqZWN0cyBhbmQgdHlwZXMgYnkgZGVmYXVsdDoKKyAgICAK
KyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBQeXRob24g
ICAgICAgICAgICB8IEpTT04gICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT09PT09Kz09
PT09PT09PT09PT09PSsKKyAgICB8IGRpY3QgICAgICAgICAgICAgIHwgb2JqZWN0ICAgICAgICB8
CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgIHwgbGlzdCwg
dHVwbGUgICAgICAgfCBhcnJheSAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSst
LS0tLS0tLS0tLS0tLS0rCisgICAgfCBzdHIsIHVuaWNvZGUgICAgICB8IHN0cmluZyAgICAgICAg
fAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IGludCwg
bG9uZywgZmxvYXQgIHwgbnVtYmVyICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tKworICAgIHwgVHJ1ZSAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAg
IHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBGYWxz
ZSAgICAgICAgICAgICB8IGZhbHNlICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
Ky0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IE5vbmUgICAgICAgICAgICAgIHwgbnVsbCAgICAgICAg
ICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisgICAgVG8g
ZXh0ZW5kIHRoaXMgdG8gcmVjb2duaXplIG90aGVyIG9iamVjdHMsIHN1YmNsYXNzIGFuZCBpbXBs
ZW1lbnQgYQorICAgIGBgLmRlZmF1bHQoKWBgIG1ldGhvZCB3aXRoIGFub3RoZXIgbWV0aG9kIHRo
YXQgcmV0dXJucyBhIHNlcmlhbGl6YWJsZQorICAgIG9iamVjdCBmb3IgYGBvYGAgaWYgcG9zc2li
bGUsIG90aGVyd2lzZSBpdCBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcworICAgIGltcGxlbWVu
dGF0aW9uICh0byByYWlzZSBgYFR5cGVFcnJvcmBgKS4KKyAgICAiIiIKKyAgICBfX2FsbF9fID0g
WydfX2luaXRfXycsICdkZWZhdWx0JywgJ2VuY29kZScsICdpdGVyZW5jb2RlJ10KKyAgICBpdGVt
X3NlcGFyYXRvciA9ICcsICcKKyAgICBrZXlfc2VwYXJhdG9yID0gJzogJworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lpPVRydWUsCisgICAgICAgICAg
ICBjaGVja19jaXJjdWxhcj1UcnVlLCBhbGxvd19uYW49VHJ1ZSwgc29ydF9rZXlzPUZhbHNlLAor
ICAgICAgICAgICAgaW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9uZSwgZW5jb2Rpbmc9J3V0Zi04
Jyk6CisgICAgICAgICIiIgorICAgICAgICBDb25zdHJ1Y3RvciBmb3IgSlNPTkVuY29kZXIsIHdp
dGggc2Vuc2libGUgZGVmYXVsdHMuCisKKyAgICAgICAgSWYgc2tpcGtleXMgaXMgRmFsc2UsIHRo
ZW4gaXQgaXMgYSBUeXBlRXJyb3IgdG8gYXR0ZW1wdAorICAgICAgICBlbmNvZGluZyBvZiBrZXlz
IHRoYXQgYXJlIG5vdCBzdHIsIGludCwgbG9uZywgZmxvYXQgb3IgTm9uZS4gIElmCisgICAgICAg
IHNraXBrZXlzIGlzIFRydWUsIHN1Y2ggaXRlbXMgYXJlIHNpbXBseSBza2lwcGVkLgorCisgICAg
ICAgIElmIGVuc3VyZV9hc2NpaSBpcyBUcnVlLCB0aGUgb3V0cHV0IGlzIGd1YXJhbnRlZWQgdG8g
YmUgc3RyCisgICAgICAgIG9iamVjdHMgd2l0aCBhbGwgaW5jb21pbmcgdW5pY29kZSBjaGFyYWN0
ZXJzIGVzY2FwZWQuICBJZgorICAgICAgICBlbnN1cmVfYXNjaWkgaXMgZmFsc2UsIHRoZSBvdXRw
dXQgd2lsbCBiZSB1bmljb2RlIG9iamVjdC4KKworICAgICAgICBJZiBjaGVja19jaXJjdWxhciBp
cyBUcnVlLCB0aGVuIGxpc3RzLCBkaWN0cywgYW5kIGN1c3RvbSBlbmNvZGVkCisgICAgICAgIG9i
amVjdHMgd2lsbCBiZSBjaGVja2VkIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGR1cmluZyBlbmNv
ZGluZyB0bworICAgICAgICBwcmV2ZW50IGFuIGluZmluaXRlIHJlY3Vyc2lvbiAod2hpY2ggd291
bGQgY2F1c2UgYW4gT3ZlcmZsb3dFcnJvcikuCisgICAgICAgIE90aGVyd2lzZSwgbm8gc3VjaCBj
aGVjayB0YWtlcyBwbGFjZS4KKworICAgICAgICBJZiBhbGxvd19uYW4gaXMgVHJ1ZSwgdGhlbiBO
YU4sIEluZmluaXR5LCBhbmQgLUluZmluaXR5IHdpbGwgYmUKKyAgICAgICAgZW5jb2RlZCBhcyBz
dWNoLiAgVGhpcyBiZWhhdmlvciBpcyBub3QgSlNPTiBzcGVjaWZpY2F0aW9uIGNvbXBsaWFudCwK
KyAgICAgICAgYnV0IGlzIGNvbnNpc3RlbnQgd2l0aCBtb3N0IEphdmFTY3JpcHQgYmFzZWQgZW5j
b2RlcnMgYW5kIGRlY29kZXJzLgorICAgICAgICBPdGhlcndpc2UsIGl0IHdpbGwgYmUgYSBWYWx1
ZUVycm9yIHRvIGVuY29kZSBzdWNoIGZsb2F0cy4KKworICAgICAgICBJZiBzb3J0X2tleXMgaXMg
VHJ1ZSwgdGhlbiB0aGUgb3V0cHV0IG9mIGRpY3Rpb25hcmllcyB3aWxsIGJlCisgICAgICAgIHNv
cnRlZCBieSBrZXk7IHRoaXMgaXMgdXNlZnVsIGZvciByZWdyZXNzaW9uIHRlc3RzIHRvIGVuc3Vy
ZQorICAgICAgICB0aGF0IEpTT04gc2VyaWFsaXphdGlvbnMgY2FuIGJlIGNvbXBhcmVkIG9uIGEg
ZGF5LXRvLWRheSBiYXNpcy4KKworICAgICAgICBJZiBpbmRlbnQgaXMgYSBub24tbmVnYXRpdmUg
aW50ZWdlciwgdGhlbiBKU09OIGFycmF5CisgICAgICAgIGVsZW1lbnRzIGFuZCBvYmplY3QgbWVt
YmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdAorICAgICAgICBpbmRlbnQgbGV2
ZWwuICBBbiBpbmRlbnQgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLgorICAg
ICAgICBOb25lIGlzIHRoZSBtb3N0IGNvbXBhY3QgcmVwcmVzZW50YXRpb24uCisKKyAgICAgICAg
SWYgc3BlY2lmaWVkLCBzZXBhcmF0b3JzIHNob3VsZCBiZSBhIChpdGVtX3NlcGFyYXRvciwga2V5
X3NlcGFyYXRvcikKKyAgICAgICAgdHVwbGUuIFRoZSBkZWZhdWx0IGlzICgnLCAnLCAnOiAnKS4g
VG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgorICAgICAgICByZXByZXNlbnRhdGlvbiB5b3Ug
c2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKworICAg
ICAgICBJZiBlbmNvZGluZyBpcyBub3QgTm9uZSwgdGhlbiBhbGwgaW5wdXQgc3RyaW5ncyB3aWxs
IGJlCisgICAgICAgIHRyYW5zZm9ybWVkIGludG8gdW5pY29kZSB1c2luZyB0aGF0IGVuY29kaW5n
IHByaW9yIHRvIEpTT04tZW5jb2RpbmcuIAorICAgICAgICBUaGUgZGVmYXVsdCBpcyBVVEYtOC4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5za2lwa2V5cyA9IHNraXBrZXlzCisgICAgICAg
IHNlbGYuZW5zdXJlX2FzY2lpID0gZW5zdXJlX2FzY2lpCisgICAgICAgIHNlbGYuY2hlY2tfY2ly
Y3VsYXIgPSBjaGVja19jaXJjdWxhcgorICAgICAgICBzZWxmLmFsbG93X25hbiA9IGFsbG93X25h
bgorICAgICAgICBzZWxmLnNvcnRfa2V5cyA9IHNvcnRfa2V5cworICAgICAgICBzZWxmLmluZGVu
dCA9IGluZGVudAorICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsID0gMAorICAgICAg
ICBpZiBzZXBhcmF0b3JzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFy
YXRvciwgc2VsZi5rZXlfc2VwYXJhdG9yID0gc2VwYXJhdG9ycworICAgICAgICBzZWxmLmVuY29k
aW5nID0gZW5jb2RpbmcKKworICAgIGRlZiBfbmV3bGluZV9pbmRlbnQoc2VsZik6CisgICAgICAg
IHJldHVybiAnXG4nICsgKCcgJyAqIChzZWxmLmluZGVudCAqIHNlbGYuY3VycmVudF9pbmRlbnRf
bGV2ZWwpKQorCisgICAgZGVmIF9pdGVyZW5jb2RlX2xpc3Qoc2VsZiwgbHN0LCBtYXJrZXJzPU5v
bmUpOgorICAgICAgICBpZiBub3QgbHN0OgorICAgICAgICAgICAgeWllbGQgJ1tdJworICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICBtYXJrZXJpZCA9IGlkKGxzdCkKKyAgICAgICAgICAgIGlmIG1hcmtlcmlkIGluIG1hcmtlcnM6
CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRl
dGVjdGVkIikKKyAgICAgICAgICAgIG1hcmtlcnNbbWFya2VyaWRdID0gbHN0CisgICAgICAgIHlp
ZWxkICdbJworICAgICAgICBpZiBzZWxmLmluZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICAgICAgbmV3bGluZV9pbmRl
bnQgPSBzZWxmLl9uZXdsaW5lX2luZGVudCgpCisgICAgICAgICAgICBzZXBhcmF0b3IgPSBzZWxm
Lml0ZW1fc2VwYXJhdG9yICsgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgICAgIHlpZWxkIG5ld2xp
bmVfaW5kZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IE5v
bmUKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IKKyAgICAgICAg
Zmlyc3QgPSBUcnVlCisgICAgICAgIGZvciB2YWx1ZSBpbiBsc3Q6CisgICAgICAgICAgICBpZiBm
aXJzdDoKKyAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHlpZWxkIHNlcGFyYXRvcgorICAgICAgICAgICAgZm9yIGNodW5rIGlu
IHNlbGYuX2l0ZXJlbmNvZGUodmFsdWUsIG1hcmtlcnMpOgorICAgICAgICAgICAgICAgIHlpZWxk
IGNodW5rCisgICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCisgICAgICAgICAgICB5aWVsZCBzZWxm
Ll9uZXdsaW5lX2luZGVudCgpCisgICAgICAgIHlpZWxkICddJworICAgICAgICBpZiBtYXJrZXJz
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCisKKyAgICBk
ZWYgX2l0ZXJlbmNvZGVfZGljdChzZWxmLCBkY3QsIG1hcmtlcnM9Tm9uZSk6CisgICAgICAgIGlm
IG5vdCBkY3Q6CisgICAgICAgICAgICB5aWVsZCAne30nCisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1hcmtlcmlkID0gaWQo
ZGN0KQorICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKKyAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQorICAgICAg
ICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBkY3QKKyAgICAgICAgeWllbGQgJ3snCisgICAgICAg
IGtleV9zZXBhcmF0b3IgPSBzZWxmLmtleV9zZXBhcmF0b3IKKyAgICAgICAgaWYgc2VsZi5pbmRl
bnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsICs9
IDEKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gc2VsZi5fbmV3bGluZV9pbmRlbnQoKQor
ICAgICAgICAgICAgaXRlbV9zZXBhcmF0b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yICsgbmV3bGlu
ZV9pbmRlbnQKKyAgICAgICAgICAgIHlpZWxkIG5ld2xpbmVfaW5kZW50CisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IE5vbmUKKyAgICAgICAgICAgIGl0ZW1fc2Vw
YXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvcgorICAgICAgICBmaXJzdCA9IFRydWUKKyAgICAg
ICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6CisgICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jh
c2VzdHJpbmdfYXNjaWkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVuY29kZXIgPSBlbmNv
ZGVfYmFzZXN0cmluZworICAgICAgICBhbGxvd19uYW4gPSBzZWxmLmFsbG93X25hbgorICAgICAg
ICBpZiBzZWxmLnNvcnRfa2V5czoKKyAgICAgICAgICAgIGtleXMgPSBkY3Qua2V5cygpCisgICAg
ICAgICAgICBrZXlzLnNvcnQoKQorICAgICAgICAgICAgaXRlbXMgPSBbKGssIGRjdFtrXSkgZm9y
IGsgaW4ga2V5c10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGl0ZW1zID0gZGN0Lml0ZXJp
dGVtcygpCisgICAgICAgIF9lbmNvZGluZyA9IHNlbGYuZW5jb2RpbmcKKyAgICAgICAgX2RvX2Rl
Y29kZSA9IChfZW5jb2RpbmcgaXMgbm90IE5vbmUKKyAgICAgICAgICAgIGFuZCBub3QgKF9uZWVk
X3V0ZjggYW5kIF9lbmNvZGluZyA9PSAndXRmLTgnKSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4gaXRlbXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAg
ICAgICAgICBpZiBfZG9fZGVjb2RlOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkuZGVj
b2RlKF9lbmNvZGluZykKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGJhc2VzdHJp
bmcpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgSmF2YVNjcmlwdCBpcyB3
ZWFrbHkgdHlwZWQgZm9yIHRoZXNlLCBzbyBpdCBtYWtlcyBzZW5zZSB0bworICAgICAgICAgICAg
IyBhbHNvIGFsbG93IHRoZW0uICBNYW55IGVuY29kZXJzIHNlZW0gdG8gZG8gc29tZXRoaW5nIGxp
a2UgdGhpcy4KKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGZsb2F0KToKKyAgICAg
ICAgICAgICAgICBrZXkgPSBmbG9hdHN0cihrZXksIGFsbG93X25hbikKKyAgICAgICAgICAgIGVs
aWYgaXNpbnN0YW5jZShrZXksIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgICAgICBrZXkgPSBz
dHIoa2V5KQorICAgICAgICAgICAgZWxpZiBrZXkgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICBr
ZXkgPSAndHJ1ZScKKyAgICAgICAgICAgIGVsaWYga2V5IGlzIEZhbHNlOgorICAgICAgICAgICAg
ICAgIGtleSA9ICdmYWxzZScKKyAgICAgICAgICAgIGVsaWYga2V5IGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAga2V5ID0gJ251bGwnCisgICAgICAgICAgICBlbGlmIHNlbGYuc2tpcGtleXM6Cisg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmFpc2UgVHlwZUVycm9yKCJrZXkgJXIgaXMgbm90IGEgc3RyaW5nIiAlIChrZXksKSkKKyAg
ICAgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgaXRlbV9zZXBhcmF0b3IKKyAgICAg
ICAgICAgIHlpZWxkIGVuY29kZXIoa2V5KQorICAgICAgICAgICAgeWllbGQga2V5X3NlcGFyYXRv
cgorICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJlbmNvZGUodmFsdWUsIG1hcmtl
cnMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgIGlmIG5ld2xpbmVfaW5k
ZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCAt
PSAxCisgICAgICAgICAgICB5aWVsZCBzZWxmLl9uZXdsaW5lX2luZGVudCgpCisgICAgICAgIHlp
ZWxkICd9JworICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVs
IG1hcmtlcnNbbWFya2VyaWRdCisKKyAgICBkZWYgX2l0ZXJlbmNvZGUoc2VsZiwgbywgbWFya2Vy
cz1Ob25lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvLCBiYXNlc3RyaW5nKToKKyAgICAgICAg
ICAgIGlmIHNlbGYuZW5zdXJlX2FzY2lpOgorICAgICAgICAgICAgICAgIGVuY29kZXIgPSBlbmNv
ZGVfYmFzZXN0cmluZ19hc2NpaQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBl
bmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmcKKyAgICAgICAgICAgIF9lbmNvZGluZyA9IHNlbGYu
ZW5jb2RpbmcKKyAgICAgICAgICAgIGlmIChfZW5jb2RpbmcgaXMgbm90IE5vbmUgYW5kIGlzaW5z
dGFuY2Uobywgc3RyKQorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IChfbmVlZF91dGY4IGFu
ZCBfZW5jb2RpbmcgPT0gJ3V0Zi04JykpOgorICAgICAgICAgICAgICAgIG8gPSBvLmRlY29kZShf
ZW5jb2RpbmcpCisgICAgICAgICAgICB5aWVsZCBlbmNvZGVyKG8pCisgICAgICAgIGVsaWYgbyBp
cyBOb25lOgorICAgICAgICAgICAgeWllbGQgJ251bGwnCisgICAgICAgIGVsaWYgbyBpcyBUcnVl
OgorICAgICAgICAgICAgeWllbGQgJ3RydWUnCisgICAgICAgIGVsaWYgbyBpcyBGYWxzZToKKyAg
ICAgICAgICAgIHlpZWxkICdmYWxzZScKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIChpbnQs
IGxvbmcpKToKKyAgICAgICAgICAgIHlpZWxkIHN0cihvKQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UobywgZmxvYXQpOgorICAgICAgICAgICAgeWllbGQgZmxvYXRzdHIobywgc2VsZi5hbGxvd19u
YW4pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAg
ICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5jb2RlX2xpc3QobywgbWFya2Vycyk6CisgICAg
ICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGRpY3Qp
OgorICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJlbmNvZGVfZGljdChvLCBtYXJr
ZXJzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBtYXJrZXJpZCA9
IGlkKG8pCisgICAgICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKKyAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVk
IikKKyAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IG8KKyAgICAgICAgICAgIGZv
ciBjaHVuayBpbiBzZWxmLl9pdGVyZW5jb2RlX2RlZmF1bHQobywgbWFya2Vycyk6CisgICAgICAg
ICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCisKKyAgICBkZWYgX2l0ZXJl
bmNvZGVfZGVmYXVsdChzZWxmLCBvLCBtYXJrZXJzPU5vbmUpOgorICAgICAgICBuZXdvYmogPSBz
ZWxmLmRlZmF1bHQobykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2l0ZXJlbmNvZGUobmV3b2JqLCBt
YXJrZXJzKQorCisgICAgZGVmIGRlZmF1bHQoc2VsZiwgbyk6CisgICAgICAgICIiIgorICAgICAg
ICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4gYSBzdWJjbGFzcyBzdWNoIHRoYXQgaXQgcmV0dXJu
cworICAgICAgICBhIHNlcmlhbGl6YWJsZSBvYmplY3QgZm9yIGBgb2BgLCBvciBjYWxscyB0aGUg
YmFzZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAodG8gcmFpc2UgYSBgYFR5cGVFcnJvcmBgKS4K
KworICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc3VwcG9ydCBhcmJpdHJhcnkgaXRlcmF0b3JzLCB5
b3UgY291bGQKKyAgICAgICAgaW1wbGVtZW50IGRlZmF1bHQgbGlrZSB0aGlzOjoKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZGVmIGRlZmF1bHQoc2VsZiwgbyk6CisgICAgICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgICAgICBpdGVyYWJsZSA9IGl0ZXIobykKKyAgICAgICAgICAg
ICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QoaXRlcmFibGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTT05FbmNvZGVyLmRlZmF1bHQoc2VsZiwgbykKKyAg
ICAgICAgIiIiCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXIgaXMgbm90IEpTT04gc2VyaWFs
aXphYmxlIiAlIChvLCkpCisKKyAgICBkZWYgZW5jb2RlKHNlbGYsIG8pOgorICAgICAgICAiIiIK
KyAgICAgICAgUmV0dXJuIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24g
ZGF0YSBzdHJ1Y3R1cmUuCisKKyAgICAgICAgPj4+IEpTT05FbmNvZGVyKCkuZW5jb2RlKHsiZm9v
IjogWyJiYXIiLCAiYmF6Il19KQorICAgICAgICAneyJmb28iOlsiYmFyIiwgImJheiJdfScKKyAg
ICAgICAgIiIiCisgICAgICAgICMgVGhpcyBpcyBmb3IgZXh0cmVtZWx5IHNpbXBsZSBjYXNlcyBh
bmQgYmVuY2htYXJrcy4uLgorICAgICAgICBpZiBpc2luc3RhbmNlKG8sIGJhc2VzdHJpbmcpOgor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvLCBzdHIpOgorICAgICAgICAgICAgICAgIF9lbmNv
ZGluZyA9IHNlbGYuZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBpZiAoX2VuY29kaW5nIGlzIG5v
dCBOb25lIAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCAoX2VuY29kaW5nID09ICd1
dGYtOCcgYW5kIF9uZWVkX3V0ZjgpKToKKyAgICAgICAgICAgICAgICAgICAgbyA9IG8uZGVjb2Rl
KF9lbmNvZGluZykKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaShv
KQorICAgICAgICAjIFRoaXMgZG9lc24ndCBwYXNzIHRoZSBpdGVyYXRvciBkaXJlY3RseSB0byAn
Jy5qb2luKCkgYmVjYXVzZSBpdAorICAgICAgICAjIHN1Y2tzIGF0IHJlcG9ydGluZyBleGNlcHRp
b25zLiAgSXQncyBnb2luZyB0byBkbyB0aGlzIGludGVybmFsbHkKKyAgICAgICAgIyBhbnl3YXkg
YmVjYXVzZSBpdCB1c2VzIFB5U2VxdWVuY2VfRmFzdCBvciBzaW1pbGFyLgorICAgICAgICBjaHVu
a3MgPSBsaXN0KHNlbGYuaXRlcmVuY29kZShvKSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oY2h1
bmtzKQorCisgICAgZGVmIGl0ZXJlbmNvZGUoc2VsZiwgbyk6CisgICAgICAgICIiIgorICAgICAg
ICBFbmNvZGUgdGhlIGdpdmVuIG9iamVjdCBhbmQgeWllbGQgZWFjaCBzdHJpbmcKKyAgICAgICAg
cmVwcmVzZW50YXRpb24gYXMgYXZhaWxhYmxlLgorICAgICAgICAKKyAgICAgICAgRm9yIGV4YW1w
bGU6OgorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gSlNPTkVuY29kZXIo
KS5pdGVyZW5jb2RlKGJpZ29iamVjdCk6CisgICAgICAgICAgICAgICAgbXlzb2NrZXQud3JpdGUo
Y2h1bmspCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmNoZWNrX2NpcmN1bGFyOgorICAg
ICAgICAgICAgbWFya2VycyA9IHt9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXJrZXJz
ID0gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5faXRlcmVuY29kZShvLCBtYXJrZXJzKQorCitf
X2FsbF9fID0gWydKU09ORW5jb2RlciddCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29s
cy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vZW5jb2Rlci5weQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2Vy
dmVyL3NpbXBsZWpzb24vanNvbmZpbHRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9U
ZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vanNvbmZpbHRlci5weQkocmV2aXNpb24gMCkKKysr
IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9qc29uZmlsdGVyLnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACitpbXBvcnQgc2ltcGxlanNvbgoraW1wb3J0IGNn
aQorCitjbGFzcyBKU09ORmlsdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFw
cCwgbWltZV90eXBlPSd0ZXh0L3gtanNvbicpOgorICAgICAgICBzZWxmLmFwcCA9IGFwcAorICAg
ICAgICBzZWxmLm1pbWVfdHlwZSA9IG1pbWVfdHlwZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYs
IGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKToKKyAgICAgICAgIyBSZWFkIEpTT04gUE9TVCBpbnB1
dCB0byBqc29uZmlsdGVyLmpzb24gaWYgbWF0Y2hpbmcgbWltZSB0eXBlCisgICAgICAgIHJlc3Bv
bnNlID0geydzdGF0dXMnOiAnMjAwIE9LJywgJ2hlYWRlcnMnOiBbXX0KKyAgICAgICAgZGVmIGpz
b25fc3RhcnRfcmVzcG9uc2Uoc3RhdHVzLCBoZWFkZXJzKToKKyAgICAgICAgICAgIHJlc3BvbnNl
WydzdGF0dXMnXSA9IHN0YXR1cworICAgICAgICAgICAgcmVzcG9uc2VbJ2hlYWRlcnMnXS5leHRl
bmQoaGVhZGVycykKKyAgICAgICAgZW52aXJvblsnanNvbmZpbHRlci5taW1lX3R5cGUnXSA9IHNl
bGYubWltZV90eXBlCisgICAgICAgIGlmIGVudmlyb24uZ2V0KCdSRVFVRVNUX01FVEhPRCcsICcn
KSA9PSAnUE9TVCc6CisgICAgICAgICAgICBpZiBlbnZpcm9uLmdldCgnQ09OVEVOVF9UWVBFJywg
JycpID09IHNlbGYubWltZV90eXBlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSBbXyBmb3IgXyBp
biBbZW52aXJvbi5nZXQoJ0NPTlRFTlRfTEVOR1RIJyldIGlmIF9dCisgICAgICAgICAgICAgICAg
ZGF0YSA9IGVudmlyb25bJ3dzZ2kuaW5wdXQnXS5yZWFkKCptYXAoaW50LCBhcmdzKSkKKyAgICAg
ICAgICAgICAgICBlbnZpcm9uWydqc29uZmlsdGVyLmpzb24nXSA9IHNpbXBsZWpzb24ubG9hZHMo
ZGF0YSkKKyAgICAgICAgcmVzID0gc2ltcGxlanNvbi5kdW1wcyhzZWxmLmFwcChlbnZpcm9uLCBq
c29uX3N0YXJ0X3Jlc3BvbnNlKSkKKyAgICAgICAganNvbnAgPSBjZ2kucGFyc2VfcXMoZW52aXJv
bi5nZXQoJ1FVRVJZX1NUUklORycsICcnKSkuZ2V0KCdqc29ucCcpCisgICAgICAgIGlmIGpzb25w
OgorICAgICAgICAgICAgY29udGVudF90eXBlID0gJ3RleHQvamF2YXNjcmlwdCcKKyAgICAgICAg
ICAgIHJlcyA9ICcnLmpvaW4oanNvbnAgKyBbJygnLCByZXMsICcpJ10pCisgICAgICAgIGVsaWYg
J09wZXJhJyBpbiBlbnZpcm9uLmdldCgnSFRUUF9VU0VSX0FHRU5UJywgJycpOgorICAgICAgICAg
ICAgIyBPcGVyYSBoYXMgYnVuayBYTUxIdHRwUmVxdWVzdCBzdXBwb3J0IGZvciBtb3N0IG1pbWUg
dHlwZXMKKyAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9ICd0ZXh0L3BsYWluJworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgY29udGVudF90eXBlID0gc2VsZi5taW1lX3R5cGUKKyAgICAgICAg
aGVhZGVycyA9IFsKKyAgICAgICAgICAgICgnQ29udGVudC10eXBlJywgY29udGVudF90eXBlKSwK
KyAgICAgICAgICAgICgnQ29udGVudC1sZW5ndGgnLCBsZW4ocmVzKSksCisgICAgICAgIF0KKyAg
ICAgICAgaGVhZGVycy5leHRlbmQocmVzcG9uc2VbJ2hlYWRlcnMnXSkKKyAgICAgICAgc3RhcnRf
cmVzcG9uc2UocmVzcG9uc2VbJ3N0YXR1cyddLCBoZWFkZXJzKQorICAgICAgICByZXR1cm4gW3Jl
c10KKworZGVmIGZhY3RvcnkoYXBwLCBnbG9iYWxfY29uZiwgKiprdyk6CisgICAgcmV0dXJuIEpT
T05GaWx0ZXIoYXBwLCAqKmt3KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL2pzb25maWx0ZXIucHkKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zaW1wbGVqc29uL3NjYW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zaW1wbGVqc29uL3NjYW5uZXIucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vc2Nhbm5lci5weQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2MyBAQAorIiIiCitJdGVyYXRvciBiYXNlZCBzcmUgdG9rZW4gc2Nhbm5lcgor
IiIiCitpbXBvcnQgc3JlX3BhcnNlLCBzcmVfY29tcGlsZSwgc3JlX2NvbnN0YW50cworZnJvbSBz
cmVfY29uc3RhbnRzIGltcG9ydCBCUkFOQ0gsIFNVQlBBVFRFUk4KK2Zyb20gcmUgaW1wb3J0IFZF
UkJPU0UsIE1VTFRJTElORSwgRE9UQUxMCitpbXBvcnQgcmUKKworX19hbGxfXyA9IFsnU2Nhbm5l
cicsICdwYXR0ZXJuJ10KKworRkxBR1MgPSAoVkVSQk9TRSB8IE1VTFRJTElORSB8IERPVEFMTCkK
K2NsYXNzIFNjYW5uZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGV4aWNvbiwg
ZmxhZ3M9RkxBR1MpOgorICAgICAgICBzZWxmLmFjdGlvbnMgPSBbTm9uZV0KKyAgICAgICAgIyBj
b21iaW5lIHBocmFzZXMgaW50byBhIGNvbXBvdW5kIHBhdHRlcm4KKyAgICAgICAgcyA9IHNyZV9w
YXJzZS5QYXR0ZXJuKCkKKyAgICAgICAgcy5mbGFncyA9IGZsYWdzCisgICAgICAgIHAgPSBbXQor
ICAgICAgICBmb3IgaWR4LCB0b2tlbiBpbiBlbnVtZXJhdGUobGV4aWNvbik6CisgICAgICAgICAg
ICBwaHJhc2UgPSB0b2tlbi5wYXR0ZXJuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgc3VicGF0dGVybiA9IHNyZV9wYXJzZS5TdWJQYXR0ZXJuKHMsCisgICAgICAgICAgICAgICAg
ICAgIFsoU1VCUEFUVEVSTiwgKGlkeCArIDEsIHNyZV9wYXJzZS5wYXJzZShwaHJhc2UsIGZsYWdz
KSkpXSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcmVfY29uc3RhbnRzLmVycm9yOgorICAgICAgICAg
ICAgICAgIHJhaXNlCisgICAgICAgICAgICBwLmFwcGVuZChzdWJwYXR0ZXJuKQorICAgICAgICAg
ICAgc2VsZi5hY3Rpb25zLmFwcGVuZCh0b2tlbikKKworICAgICAgICBwID0gc3JlX3BhcnNlLlN1
YlBhdHRlcm4ocywgWyhCUkFOQ0gsIChOb25lLCBwKSldKQorICAgICAgICBzZWxmLnNjYW5uZXIg
PSBzcmVfY29tcGlsZS5jb21waWxlKHApCisKKworICAgIGRlZiBpdGVyc2NhbihzZWxmLCBzdHJp
bmcsIGlkeD0wLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgWWllbGQgbWF0
Y2gsIGVuZF9pZHggZm9yIGVhY2ggbWF0Y2gKKyAgICAgICAgIiIiCisgICAgICAgIG1hdGNoID0g
c2VsZi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nLCBpZHgpLm1hdGNoCisgICAgICAgIGFjdGlvbnMg
PSBzZWxmLmFjdGlvbnMKKyAgICAgICAgbGFzdGVuZCA9IGlkeAorICAgICAgICBlbmQgPSBsZW4o
c3RyaW5nKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbSA9IG1hdGNoKCkKKyAg
ICAgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgbWF0Y2hiZWdpbiwgbWF0Y2hlbmQgPSBtLnNwYW4oKQorICAgICAgICAgICAgaWYgbGFzdGVu
ZCA9PSBtYXRjaGVuZDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYWN0aW9u
ID0gYWN0aW9uc1ttLmxhc3RpbmRleF0KKyAgICAgICAgICAgIGlmIGFjdGlvbiBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgICAgICBydmFsLCBuZXh0X3BvcyA9IGFjdGlvbihtLCBjb250ZXh0KQor
ICAgICAgICAgICAgICAgIGlmIG5leHRfcG9zIGlzIG5vdCBOb25lIGFuZCBuZXh0X3BvcyAhPSBt
YXRjaGVuZDoKKyAgICAgICAgICAgICAgICAgICAgIyAiZmFzdCBmb3J3YXJkIiB0aGUgc2Nhbm5l
cgorICAgICAgICAgICAgICAgICAgICBtYXRjaGVuZCA9IG5leHRfcG9zCisgICAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gc2VsZi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nLCBtYXRjaGVuZCkubWF0
Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBydmFsLCBtYXRjaGVuZAorICAgICAgICAgICAgbGFz
dGVuZCA9IG1hdGNoZW5kCisgICAgICAgICAgICAKK2RlZiBwYXR0ZXJuKHBhdHRlcm4sIGZsYWdz
PUZMQUdTKToKKyAgICBkZWYgZGVjb3JhdG9yKGZuKToKKyAgICAgICAgZm4ucGF0dGVybiA9IHBh
dHRlcm4KKyAgICAgICAgZm4ucmVnZXggPSByZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzKQorICAg
ICAgICByZXR1cm4gZm4KKyAgICByZXR1cm4gZGVjb3JhdG9yCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vc2Nhbm5lci5weQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJLaXRUb29scy9U
ZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCShy
ZXZpc2lvbiA1ODc5MCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVz
L3VwbG9hZGZvcm0uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsOSBAQAogICAgICAg
ICA8dGQ+PGlucHV0IGNsYXNzPWlucHV0dGV4dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXN0dHlwZSIg
dmFsdWU9IiIvPjwvdGQ+CiAgICAgPC90cj4KICAgICA8L3RhYmxlPgorICAgIDxicj4KKyAgICA8
ZGl2PjxpbnB1dCBjbGFzcz1idXR0b24gdHlwZT0iY2hlY2tib3giIG5hbWU9ImluY3JlbWVudGFs
Ij5JbmNyZW1lbnRhbCByZXN1bHRzLCBtZXJnZSB3aXRoIHNlcnZlciBmaWxlLjwvZGl2PgorICAg
IDxicj4KICAgICA8ZGl2PjxpbnB1dCBjbGFzcz1idXR0b24gdHlwZT0iZmlsZSIgbmFtZT0iZmls
ZSIgbXVsdGlwbGU+PC9kaXY+CiAgICAgPGJyPgogICAgIDxkaXY+PGlucHV0IGNsYXNzPWJ1dHRv
biB0eXBlPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiPjwvZGl2Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55165</attachid>
            <date>2010-05-05 15:59:18 -0700</date>
            <delta_ts>2010-05-05 16:56:18 -0700</delta_ts>
            <desc>Fix styles in ChangeLog</desc>
            <filename>ae_merge.patch</filename>
            <type>text/plain</type>
            <size>100327</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU4ODQwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTAtMDUtMDUgIFZpY3RvciBXYW5nICA8dmlj
dG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLS4gQWRkIHJlc3VsdC5qc29uIGluY3JlbWVudGFsIG1lcmdpbmcgZnVuY3Rp
b25hbGl0eSB0byB0ZXN0IHJlc3VsdHMgYXBwIGVuZ2luZS4KKyAgICAgICAgLS4gYmxvYnN0b3Jl
IGlzIG5vdCBzdWl0YWJsZSBmb3IgQUUgZGF0YSBtZXJnaW5nIGFuZCB0aGVyZSBpcyBubyBBUEkg
dG8KKyAgICAgICAgICAgcHJvZ3JhbWF0aWNhbGx5IGVkaXQgZXhpc3RpbmcgYmxvYiBvciB3cml0
ZSBhIG5ldyBvbmUgeWV0LCBzbyByZXBsYWNlIGJsYm9zdG9yZQorICAgICAgICAgICB3aXRoIGRh
dGFzdG9yZS4gSWYgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRlcyksIHN0b3JlIGZp
bGUgZGF0YSBpbgorICAgICAgICAgICBtdWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAgICAg
ICAgLS4gRml4IHN0eWxlcy4KKworICAgICAgICBUZXN0OiBqc29ucmVzdWx0c191bml0dGVzdCB0
byB0ZXN0IG1lcmdpbmcgbG9naWNzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODU5OQorCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9oYW5k
bGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5OgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvaGFu
ZGxlcnMvbWVudS5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3Rm
aWxlaGFuZGxlci5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL21haW4ucHk6CisgICAg
ICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5OgorICAgICAgICAq
IFRlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weTogQWRkZWQu
CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weToKKyAgICAgICAg
KiBUZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb246IEFkZGVkLgorICAgICAgICAqIFRlc3RSZXN1
bHRTZXJ2ZXIvc2ltcGxlanNvbi9MSUNFTlNFLnR4dDogQWRkZWQuCisgICAgICAgICogVGVzdFJl
c3VsdFNlcnZlci9zaW1wbGVqc29uL1JFQURNRS50eHQ6IEFkZGVkLgorICAgICAgICAqIFRlc3RS
ZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogVGVz
dFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL19zcGVlZHVwcy5jOiBBZGRlZC4KKyAgICAgICAgKGFz
Y2lpX2VzY2FwZV9jaGFyKToKKyAgICAgICAgKGFzY2lpX2VzY2FwZV91bmljb2RlKToKKyAgICAg
ICAgKGFzY2lpX2VzY2FwZV9zdHIpOgorICAgICAgICAocHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNj
aWkpOgorICAgICAgICAoaW5pdF9zcGVlZHVwcyk6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZl
ci9zaW1wbGVqc29uL2RlY29kZXIucHk6IEFkZGVkLgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2
ZXIvc2ltcGxlanNvbi9lbmNvZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBUZXN0UmVzdWx0U2Vy
dmVyL3NpbXBsZWpzb24vanNvbmZpbHRlci5weTogQWRkZWQuCisgICAgICAgICogVGVzdFJlc3Vs
dFNlcnZlci9zaW1wbGVqc29uL3NjYW5uZXIucHk6IEFkZGVkLgorICAgICAgICAqIFRlc3RSZXN1
bHRTZXJ2ZXIvdGVtcGxhdGVzL3VwbG9hZGZvcm0uaHRtbDoKKwogMjAxMC0wNS0wNCAgRXJpYyBT
ZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGly
byBIYW1hamkuCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21haW4ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tYWluLnB5CShyZXZpc2lv
biA1ODc5MCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbWFpbi5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMg
bWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3
IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCkBAIC00MiwxNyArNDIsMTUgQEAgcm91dGVzID0gWwogICAgICgn
L2Rhc2hib2FyZHMvdXBkYXRlJywgZGFzaGJvYXJkaGFuZGxlci5VcGRhdGVEYXNoYm9hcmRGaWxl
KSwKICAgICAoJy9kYXNoYm9hcmRzLyhbXj9dKyk/JywgZGFzaGJvYXJkaGFuZGxlci5HZXREYXNo
Ym9hcmRGaWxlKSwKICAgICAoJy90ZXN0ZmlsZS9kZWxldGUnLCB0ZXN0ZmlsZWhhbmRsZXIuRGVs
ZXRlRmlsZSksCi0gICAgKCcvdGVzdGZpbGUvdXBsb2FkdXJsJywgdGVzdGZpbGVoYW5kbGVyLkdl
dFVwbG9hZFVybCksCiAgICAgKCcvdGVzdGZpbGUvdXBsb2FkJywgdGVzdGZpbGVoYW5kbGVyLlVw
bG9hZCksCiAgICAgKCcvdGVzdGZpbGUvdXBsb2FkZm9ybScsIHRlc3RmaWxlaGFuZGxlci5VcGxv
YWRGb3JtKSwKICAgICAoJy90ZXN0ZmlsZS8/JywgdGVzdGZpbGVoYW5kbGVyLkdldEZpbGUpLAot
ICAgICgnL3VwbG9hZGZhaWwnLCB0ZXN0ZmlsZWhhbmRsZXIuVXBsb2FkU3RhdHVzKSwKLSAgICAo
Jy91cGxvYWRzdWNjZXNzJywgdGVzdGZpbGVoYW5kbGVyLlVwbG9hZFN0YXR1cyksCiAgICAgKCcv
KnwvbWVudScsIG1lbnUuTWVudSksCiBdCiAKIGFwcGxpY2F0aW9uID0gd2ViYXBwLldTR0lBcHBs
aWNhdGlvbihyb3V0ZXMsIGRlYnVnPVRydWUpCiAKKwogZGVmIG1haW4oKToKICAgICBydW5fd3Nn
aV9hcHAoYXBwbGljYXRpb24pCiAKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
aGFuZGxlcnMvZGFzaGJvYXJkaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9U
ZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL2Rhc2hib2FyZGhhbmRsZXIucHkJKHJldmlzaW9uIDU4
NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9kYXNoYm9hcmRo
YW5kbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKKyMKICMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwogIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTM4LDYgKzM4LDcgQEAgZnJv
bSBtb2RlbC5kYXNoYm9hcmRmaWxlIGltcG9ydCBEYXNoYm9hcgogCiBQQVJBTV9GSUxFID0gImZp
bGUiCiAKKwogZGVmIGdldF9jb250ZW50X3R5cGUoZmlsZW5hbWUpOgogICAgIHJldHVybiBtaW1l
dHlwZXMuZ3Vlc3NfdHlwZShmaWxlbmFtZSlbMF0gb3IgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIKIApJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9tZW51LnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvbWVu
dS5weQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hh
bmRsZXJzL21lbnUucHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
ICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwog
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNjEsNCArNjEsMyBA
QCBjbGFzcyBNZW51KHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAKICAgICAgICAgc2VsZi5yZXNw
b25zZS5vdXQud3JpdGUoCiAgICAgICAgICAgICB0ZW1wbGF0ZS5yZW5kZXIoInRlbXBsYXRlcy9t
ZW51Lmh0bWwiLCB0ZW1wbGF0ZV92YWx1ZXMpKQotCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5weQkocmV2
aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rl
c3RmaWxlaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisj
CiAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zMCwxMSArMzAs
MTAgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB1cmxsaWIKIAogZnJvbSBnb29nbGUuYXBwZW5n
aW5lLmFwaSBpbXBvcnQgdXNlcnMKLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGJs
b2JzdG9yZQogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgd2ViYXBwCi1mcm9tIGdv
b2dsZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBvcnQgYmxvYnN0b3JlX2hhbmRsZXJzCiBmcm9t
IGdvb2dsZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBvcnQgdGVtcGxhdGUKIAorZnJvbSBtb2Rl
bC5qc29ucmVzdWx0cyBpbXBvcnQgSnNvblJlc3VsdHMKIGZyb20gbW9kZWwudGVzdGZpbGUgaW1w
b3J0IFRlc3RGaWxlCiAKIFBBUkFNX0JVSUxERVIgPSAiYnVpbGRlciIKQEAgLTQzLDEwICs0Miwx
MSBAQCBQQVJBTV9GSUxFID0gImZpbGUiCiBQQVJBTV9OQU1FID0gIm5hbWUiCiBQQVJBTV9LRVkg
PSAia2V5IgogUEFSQU1fVEVTVF9UWVBFID0gInRlc3R0eXBlIgorUEFSQU1fSU5DUkVNRU5UQUwg
PSAiaW5jcmVtZW50YWwiCiAKIAogY2xhc3MgRGVsZXRlRmlsZSh3ZWJhcHAuUmVxdWVzdEhhbmRs
ZXIpOgotICAgICIiIkRlbGV0ZSB0ZXN0IGZpbGUgZm9yIGEgZ2l2ZW4gYnVpbGRlciBhbmQgbmFt
ZSBmcm9tIGRhdGFzdG9yZSAobWV0YWRhdGEpIGFuZCBibG9ic3RvcmUgKGZpbGUgZGF0YSkuIiIi
CisgICAgIiIiRGVsZXRlIHRlc3QgZmlsZSBmb3IgYSBnaXZlbiBidWlsZGVyIGFuZCBuYW1lIGZy
b20gZGF0YXN0b3JlLiIiIgogCiAgICAgZGVmIGdldChzZWxmKToKICAgICAgICAga2V5ID0gc2Vs
Zi5yZXF1ZXN0LmdldChQQVJBTV9LRVkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIERlbGV0ZUZp
bGUod2ViYXBwLlJlcXVlc3RIYW5kbGVyKToKICAgICAgICAgbmFtZSA9IHNlbGYucmVxdWVzdC5n
ZXQoUEFSQU1fTkFNRSkKIAogICAgICAgICBsb2dnaW5nLmRlYnVnKAotICAgICAgICAgICAgIkRl
bGV0aW5nIEZpbGUsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywgYmxvYiBr
ZXk6ICVzLiIsCisgICAgICAgICAgICAiRGVsZXRpbmcgRmlsZSwgYnVpbGRlcjogJXMsIHRlc3Rf
dHlwZTogJXMsIG5hbWU6ICVzLCBrZXk6ICVzLiIsCiAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0
X3R5cGUsIG5hbWUsIGtleSkKIAogICAgICAgICBUZXN0RmlsZS5kZWxldGVfZmlsZShrZXksIGJ1
aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgMTAwKQpAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBEZWxl
dGVGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgICAgICAlIChidWlsZGVyLCB0
ZXN0X3R5cGUsIG5hbWUpKQogCiAKLWNsYXNzIEdldEZpbGUoYmxvYnN0b3JlX2hhbmRsZXJzLkJs
b2JzdG9yZURvd25sb2FkSGFuZGxlcik6CitjbGFzcyBHZXRGaWxlKHdlYmFwcC5SZXF1ZXN0SGFu
ZGxlcik6CiAgICAgIiIiR2V0IGZpbGUgY29udGVudCBvciBsaXN0IG9mIGZpbGVzIGZvciBnaXZl
biBidWlsZGVyIGFuZCBuYW1lLiIiIgogCiAgICAgZGVmIF9nZXRfZmlsZV9saXN0KHNlbGYsIGJ1
aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSk6CkBAIC03Nyw3ICs3Nyw4IEBAIGNsYXNzIEdldEZpbGUo
YmxvYnN0b3JlX2hhbmRsZXJzLkJsb2JzdG8KICAgICAgICAgICAgIG5hbWU6IGZpbGUgbmFtZQog
ICAgICAgICAiIiIKIAotICAgICAgICBmaWxlcyA9IFRlc3RGaWxlLmdldF9maWxlcyhidWlsZGVy
LCB0ZXN0X3R5cGUsIG5hbWUsIDEwMCkKKyAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmls
ZXMoCisgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGxvYWRfZGF0YT1GYWxz
ZSwgbGltaXQ9MTAwKQogICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBsb2dnaW5n
LmluZm8oIkZpbGUgbm90IGZvdW5kLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTog
JXMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUp
CkBAIC0xMDMsMTYgKzEwNCwxNSBAQCBjbGFzcyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5kbGVycy5C
bG9ic3RvCiAgICAgICAgICAgICBuYW1lOiBmaWxlIG5hbWUKICAgICAgICAgIiIiCiAKLSAgICAg
ICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCAx
KQorICAgICAgICBmaWxlcyA9IFRlc3RGaWxlLmdldF9maWxlcygKKyAgICAgICAgICAgIGJ1aWxk
ZXIsIHRlc3RfdHlwZSwgbmFtZSwgbG9hZF9kYXRhPVRydWUsIGxpbWl0PTEpCiAgICAgICAgIGlm
IG5vdCBmaWxlczoKICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiRmlsZSBub3QgZm91bmQsIGJ1
aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcy4iLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSkKICAgICAgICAgICAgIHJldHVybgogCi0g
ICAgICAgIGJsb2Jfa2V5ID0gZmlsZXNbMF0uYmxvYl9rZXkKLSAgICAgICAgYmxvYl9pbmZvID0g
YmxvYnN0b3JlLmdldChibG9iX2tleSkKLSAgICAgICAgaWYgYmxvYl9pbmZvOgotICAgICAgICAg
ICAgc2VsZi5zZW5kX2Jsb2IoYmxvYl9pbmZvLCAidGV4dC9wbGFpbiIpCisgICAgICAgIHNlbGYu
cmVzcG9uc2UuaGVhZGVyc1siQ29udGVudC1UeXBlIl0gPSAidGV4dC9wbGFpbjsgY2hhcnNldD11
dGYtOCIKKyAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoZmlsZXNbMF0uZGF0YSkKIAog
ICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgIGJ1aWxkZXIgPSBzZWxmLnJlcXVlc3QuZ2V0KFBB
UkFNX0JVSUxERVIpCkBAIC0xMzMsODkgKzEzMyw3MiBAQCBjbGFzcyBHZXRGaWxlKGJsb2JzdG9y
ZV9oYW5kbGVycy5CbG9ic3RvCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2ZpbGVfY29u
dGVudChidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCiAKIAotY2xhc3MgR2V0VXBsb2FkVXJsKHdl
YmFwcC5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgIiIiR2V0IGFuIHVybCBmb3IgdXBsb2FkaW5nIGZp
bGUgdG8gYmxvYnN0b3JlLiBBIHNwZWNpYWwgdXJsIGlzIHJlcXVpcmVkIGZvciBlYWNoIGJsb2Jz
b3RyZSB1cGxvYWQuIiIiCi0KLSAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICB1cGxvYWRfdXJs
ID0gYmxvYnN0b3JlLmNyZWF0ZV91cGxvYWRfdXJsKCIvdGVzdGZpbGUvdXBsb2FkIikKLSAgICAg
ICAgbG9nZ2luZy5pbmZvKCJHZXR0aW5nIHVwbG9hZCB1cmw6ICVzLiIsIHVwbG9hZF91cmwpCi0g
ICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKHVwbG9hZF91cmwpCi0KLQotY2xhc3MgVXBs
b2FkKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvcmVVcGxvYWRIYW5kbGVyKToKLSAgICAiIiJV
cGxvYWQgZmlsZSB0byBibG9ic3RvcmUuIiIiCitjbGFzcyBVcGxvYWQod2ViYXBwLlJlcXVlc3RI
YW5kbGVyKToKKyAgICAiIiJVcGxvYWQgdGVzdCByZXN1bHRzIGZpbGUgdG8gZGF0YXN0b3JlLiIi
IgogCiAgICAgZGVmIHBvc3Qoc2VsZik6Ci0gICAgICAgIHVwbG9hZGVkX2ZpbGVzID0gc2VsZi5n
ZXRfdXBsb2FkcygiZmlsZSIpCi0gICAgICAgIGlmIG5vdCB1cGxvYWRlZF9maWxlczoKLSAgICAg
ICAgICAgIHJldHVybiBzZWxmLl91cGxvYWRfZG9uZShbKCJNaXNzaW5nIHVwbG9hZCBmaWxlIGZp
ZWxkLiIpXSkKKyAgICAgICAgZmlsZV9wYXJhbXMgPSBzZWxmLnJlcXVlc3QuUE9TVC5nZXRhbGwo
UEFSQU1fRklMRSkKKyAgICAgICAgaWYgbm90IGZpbGVfcGFyYW1zOgorICAgICAgICAgICAgc2Vs
Zi5yZXNwb25zZS5vdXQud3JpdGUoIkZBSUw6IG1pc3NpbmcgdXBsb2FkIGZpbGUgZmllbGQuIikK
KyAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGJ1aWxkZXIgPSBzZWxmLnJlcXVlc3QuZ2V0
KFBBUkFNX0JVSUxERVIpCiAgICAgICAgIGlmIG5vdCBidWlsZGVyOgotICAgICAgICAgICAgZm9y
IGJsb2JfaW5mbyBpbiB1cGxvYWRlZF9maWxlczoKLSAgICAgICAgICAgICAgICBibG9iX2luZm8u
ZGVsZXRlKCkKLSAgICAKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl91cGxvYWRfZG9uZShbKCJN
aXNzaW5nIGJ1aWxkZXIgcGFyYW1ldGVyIGluIHVwbG9hZCByZXF1ZXN0LiIpXSkKKyAgICAgICAg
ICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMOiBtaXNzaW5nIGJ1aWxkZXIgcGFyYW1l
dGVyLiIpCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICB0ZXN0X3R5cGUgPSBzZWxmLnJl
cXVlc3QuZ2V0KFBBUkFNX1RFU1RfVFlQRSkKKyAgICAgICAgaW5jcmVtZW50YWwgPSBzZWxmLnJl
cXVlc3QuZ2V0KFBBUkFNX0lOQ1JFTUVOVEFMKQogCiAgICAgICAgIGxvZ2dpbmcuZGVidWcoCiAg
ICAgICAgICAgICAiUHJvY2Vzc2luZyB1cGxvYWQgcmVxdWVzdCwgYnVpbGRlcjogJXMsIHRlc3Rf
dHlwZTogJXMuIiwKICAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSkKIAorICAgICAgICAj
IFRoZXJlIGFyZSB0d28gcG9zc2libGUgdHlwZXMgb2YgZWFjaCBmaWxlX3BhcmFtcyBpbiB0aGUg
cmVxdWVzdDoKKyAgICAgICAgIyBvbmUgZmlsZSBpdGVtIG9yIGEgbGlzdCBvZiBmaWxlIGl0ZW1z
LgorICAgICAgICAjIE5vcm1hbGl6ZSBmaWxlX3BhcmFtcyB0byBiZWNvbWVzIGEgZmlsZSBpdGVt
IGxpc3QuCisgICAgICAgIGZpbGVzID0gW10KKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGVzdDog
JXMsIHR5cGU6JXMiLCBmaWxlX3BhcmFtcywgdHlwZShmaWxlX3BhcmFtcykpCisgICAgICAgIGZv
ciBpdGVtIGluIGZpbGVfcGFyYW1zOgorICAgICAgICAgICAgaWYgdHlwZShpdGVtKSBpcyBsaXN0
OgorICAgICAgICAgICAgICAgIGZpbGVzLmV4dGVuZChpdGVtKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQoaXRlbSkKKwogICAgICAgICBlcnJvcnMgPSBb
XQotICAgICAgICBmb3IgYmxvYl9pbmZvIGluIHVwbG9hZGVkX2ZpbGVzOgotICAgICAgICAgICAg
dGYgPSBUZXN0RmlsZS51cGRhdGVfZmlsZShidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbykK
KyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHVwZGF0
ZSBvciByZXBsYWNlIHRoZSB3aG9sZSBmaWxlLgorICAgICAgICAgICAgaWYgaW5jcmVtZW50YWw6
CisgICAgICAgICAgICAgICAgaWYgZi5maWxlbmFtZSAhPSAicmVzdWx0cy5qc29uIjoKKyAgICAg
ICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJN
ZXJnaW5nIGluY3JlbWVudGFsIHJlc3VsdHMgJXMgaXMgbm90IHN1cHBvcnRlZCIgJSBmLmZpbGVu
YW1lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdGYg
PSBKc29uUmVzdWx0cy51cGRhdGUoYnVpbGRlciwgdGVzdF90eXBlLCBmLnZhbHVlKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0ZiA9IFRlc3RGaWxlLnVwZGF0ZShidWlsZGVy
LCB0ZXN0X3R5cGUsIGYuZmlsZW5hbWUsIGYudmFsdWUpCisKICAgICAgICAgICAgIGlmIG5vdCB0
ZjoKICAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAi
VXBsb2FkIGZhaWxlZCwgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLiIgJQot
ICAgICAgICAgICAgICAgICAgICAoYnVpbGRlciwgdGVzdF90eXBlLCBibG9iX2luZm8uZmlsZW5h
bWUpKQotICAgICAgICAgICAgICAgIGJsb2JfaW5mby5kZWxldGUoKQotCi0gICAgICAgIHJldHVy
biBzZWxmLl91cGxvYWRfZG9uZShlcnJvcnMpCi0KLSAgICBkZWYgX3VwbG9hZF9kb25lKHNlbGYs
IGVycm9ycyk6Ci0gICAgICAgIGxvZ2dpbmcuaW5mbygidXBsb2FkIGRvbmUuIikKLQotICAgICAg
ICBlcnJvcl9tZXNzYWdlcyA9IFtdCi0gICAgICAgIGZvciBlcnJvciBpbiBlcnJvcnM6Ci0gICAg
ICAgICAgICBsb2dnaW5nLmluZm8oZXJyb3IpCi0gICAgICAgICAgICBlcnJvcl9tZXNzYWdlcy5h
cHBlbmQoImVycm9yPSVzIiAlIHVybGxpYi5xdW90ZShlcnJvcikpCisgICAgICAgICAgICAgICAg
ICAgIChidWlsZGVyLCB0ZXN0X3R5cGUsIGYuZmlsZW5hbWUpKQogCi0gICAgICAgIGlmIGVycm9y
X21lc3NhZ2VzOgotICAgICAgICAgICAgcmVkaXJlY3RfdXJsID0gIi91cGxvYWRmYWlsPyVzIiAl
ICImIi5qb2luKGVycm9yX21lc3NhZ2VzKQorICAgICAgICBpZiBlcnJvcnM6CisgICAgICAgICAg
ICBtZXNzYWdlcyA9ICJGQUlMOiAiICsgIjsgIi5qb2luKGVycm9ycykKKyAgICAgICAgICAgIGxv
Z2dpbmcud2FybmluZyhtZXNzYWdlcykKKyAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uuc2V0X3N0
YXR1cyg1MDAsIG1lc3NhZ2VzKQorICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUo
IkZBSUwiKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVkaXJlY3RfdXJsID0gIi91cGxv
YWRzdWNjZXNzIgotCi0gICAgICAgIGxvZ2dpbmcuaW5mbyhyZWRpcmVjdF91cmwpCi0gICAgICAg
ICMgQmxvYnN0b3JlVXBsb2FkSGFuZGxlciByZXF1aXJlcyByZWRpcmVjdCBhdCB0aGUgZW5kLgot
ICAgICAgICBzZWxmLnJlZGlyZWN0KHJlZGlyZWN0X3VybCkKKyAgICAgICAgICAgIHNlbGYucmVz
cG9uc2Uuc2V0X3N0YXR1cygyMDApCisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0
ZSgiT0siKQogCiAKIGNsYXNzIFVwbG9hZEZvcm0od2ViYXBwLlJlcXVlc3RIYW5kbGVyKToKLSAg
ICAiIiJTaG93IGEgZm9ybSBzbyB1c2VyIGNhbiBzdWJtaXQgYSBmaWxlIHRvIGJsb2JzdG9yZS4i
IiIKKyAgICAiIiJTaG93IGEgZm9ybSBzbyB1c2VyIGNhbiB1cGxvYWQgYSBmaWxlLiIiIgogCiAg
ICAgZGVmIGdldChzZWxmKToKLSAgICAgICAgdXBsb2FkX3VybCA9IGJsb2JzdG9yZS5jcmVhdGVf
dXBsb2FkX3VybCgiL3Rlc3RmaWxlL3VwbG9hZCIpCiAgICAgICAgIHRlbXBsYXRlX3ZhbHVlcyA9
IHsKLSAgICAgICAgICAgICJ1cGxvYWRfdXJsIjogdXBsb2FkX3VybCwKKyAgICAgICAgICAgICJ1
cGxvYWRfdXJsIjogIi90ZXN0ZmlsZS91cGxvYWQiLAogICAgICAgICB9CiAgICAgICAgIHNlbGYu
cmVzcG9uc2Uub3V0LndyaXRlKHRlbXBsYXRlLnJlbmRlcigidGVtcGxhdGVzL3VwbG9hZGZvcm0u
aHRtbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wbGF0ZV92YWx1ZXMpKQotCi1jbGFzcyBVcGxvYWRTdGF0dXMod2ViYXBwLlJlcXVlc3RIYW5k
bGVyKToKLSAgICAiIiJSZXR1cm4gc3RhdHVzIG9mIGZpbGUgdXBsb2FkaW5nIiIiCi0KLSAgICBk
ZWYgZ2V0KHNlbGYpOgotICAgICAgICBsb2dnaW5nLmRlYnVnKCJVcGRhdGUgc3RhdHVzIikKLQot
ICAgICAgICBpZiBzZWxmLnJlcXVlc3QucGF0aCA9PSAiL3VwbG9hZHN1Y2Nlc3MiOgotICAgICAg
ICAgICAgc2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDIwMCkKLSAgICAgICAgICAgIHNlbGYucmVz
cG9uc2Uub3V0LndyaXRlKCJPSyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlcnJvcnMg
PSBzZWxmLnJlcXVlc3QucGFyYW1zLmdldGFsbCgiZXJyb3IiKQotICAgICAgICAgICAgaWYgZXJy
b3JzOgotICAgICAgICAgICAgICAgIG1lc3NhZ2VzID0gIkZBSUw6ICIgKyAiOyAiLmpvaW4oZXJy
b3JzKQotICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZyhtZXNzYWdlcykKLSAgICAgICAg
ICAgICAgICBzZWxmLnJlc3BvbnNlLnNldF9zdGF0dXMoNTAwLCBtZXNzYWdlcykKLSAgICAgICAg
ICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiRkFJTCIpCkluZGV4OiBXZWJLaXRUb29s
cy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2Rhc2hib2FyZGZpbGUucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5CShyZXZp
c2lvbiA1ODc5MCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGFzaGJv
YXJkZmlsZS5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCkBAIC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zNiw2ICszNiw3IEBAIGZy
b20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGRiCiBTVk5fUEFUSF9EQVNIQk9BUkQgPSAo
Imh0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUvdHJ1bmsvdG9vbHMvIgogICAg
ICJkYXNoYm9hcmRzLyIpCiAKKwogY2xhc3MgRGFzaGJvYXJkRmlsZShkYi5Nb2RlbCk6CiAgICAg
bmFtZSA9IGRiLlN0cmluZ1Byb3BlcnR5KCkKICAgICBkYXRhID0gZGIuQmxvYlByb3BlcnR5KCkK
QEAgLTkyLDcgKzkzLDcgQEAgY2xhc3MgRGFzaGJvYXJkRmlsZShkYi5Nb2RlbCk6CiAgICAgICAg
IGlmIG5vdCBmaWxlczoKICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiTm8gZXhpc3RpbmcgZmls
ZSwgYWRkZWQgYXMgbmV3IGZpbGUuIikKICAgICAgICAgICAgIHJldHVybiBjbHMuYWRkX2ZpbGUo
bmFtZSwgZGF0YSkKLSAgICAgICAgCisKICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVXBkYXRpbmcg
ZXhpc3RpbmcgZmlsZS4iKQogICAgICAgICBmaWxlID0gZmlsZXNbMF0KICAgICAgICAgZmlsZS5k
YXRhID0gZGF0YQpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRh
c3RvcmVmaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
bW9kZWwvZGF0YXN0b3JlZmlsZS5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMjkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGlt
ZQoraW1wb3J0IGxvZ2dpbmcKKworZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIK
KworTUFYX0RBVEFfRU5UUllfUEVSX0ZJTEUgPSAxMAorTUFYX0VOVFJZX0xFTiA9IDEwMDAgKiAx
MDAwCisKKworY2xhc3MgRGF0YUVudHJ5KGRiLk1vZGVsKToKKyAgICAiIiJEYXRhc3RvcmUgZW50
cnkgdGhhdCBzdG9yZXMgb25lIHNlZ21hbnQgb2YgZmlsZSBkYXRhCisgICAgICAgKDwxMDAwKjEw
MDAgYnl0ZXMpLgorICAgICIiIgorCisgICAgZGF0YSA9IGRiLkJsb2JQcm9wZXJ0eSgpCisKKyAg
ICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0KGNscywga2V5KToKKyAgICAgICAgcmV0dXJuIGRi
LmdldChrZXkpCisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJu
IGRiLmdldChrZXkpCisKKworY2xhc3MgRGF0YVN0b3JlRmlsZShkYi5Nb2RlbCk6CisgICAgIiIi
VGhpcyBjbGFzcyBzdG9yZXMgZmlsZSBpbiBkYXRhc3RvcmUuCisgICAgICAgSWYgYSBmaWxlIGlz
IG92ZXJzaXplICg+MTAwMCoxMDAwIGJ5dGVzKSwgdGhlIGZpbGUgaXMgc3BsaXR0ZWQgaW50bwor
ICAgICAgIG11bHRpcGxlIHNlZ21lbnRzIGFuZCBzdG9yZWQgaW4gbXVsdGlwbGUgZGF0YXN0b3Jl
IGVudHJpZXMuCisgICAgIiIiCisKKyAgICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkoKQorICAg
IGRhdGFfa2V5cyA9IGRiLkxpc3RQcm9wZXJ0eShkYi5LZXkpCisgICAgZGF0ZSA9IGRiLkRhdGVU
aW1lUHJvcGVydHkoYXV0b19ub3dfYWRkPVRydWUpCisKKyAgICBkYXRhID0gTm9uZQorCisgICAg
ZGVmIGRlbGV0ZV9kYXRhKHNlbGYsIGtleXM9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBrZXlzOgor
ICAgICAgICAgICAga2V5cyA9IHNlbGYuZGF0YV9rZXlzCisKKyAgICAgICAgZm9yIGtleSBpbiBr
ZXlzOgorICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeS5nZXQoa2V5KQorICAgICAg
ICAgICAgaWYgZGF0YV9lbnRyeToKKyAgICAgICAgICAgICAgICBkYXRhX2VudHJ5LmRlbGV0ZSgp
CisKKyAgICBkZWYgc2F2ZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgZGF0YToK
KyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiTm8gZGF0YSB0byBzYXZlLiIpCisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBsZW4oZGF0YSkgPiAoTUFYX0RBVEFfRU5U
UllfUEVSX0ZJTEUgKiBNQVhfRU5UUllfTEVOKToKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Io
IkZpbGUgdG9vIGJpZywgY2FuJ3Qgc2F2ZSB0byBkYXRhc3RvcmU6ICVkSyIsCisgICAgICAgICAg
ICAgICAgbGVuKGRhdGEpIC8gMTAyNCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAg
ICAgIHN0YXJ0ID0gMAorICAgICAgICBrZXlzID0gc2VsZi5kYXRhX2tleXMKKyAgICAgICAgc2Vs
Zi5kYXRhX2tleXMgPSBbXQorICAgICAgICB3aGlsZSBzdGFydCA8IGxlbihkYXRhKToKKyAgICAg
ICAgICAgIGlmIGtleXM6CisgICAgICAgICAgICAgICAga2V5ID0ga2V5cy5wb3AoMCkKKyAgICAg
ICAgICAgICAgICBkYXRhX2VudHJ5ID0gRGF0YUVudHJ5LmdldChrZXkpCisgICAgICAgICAgICAg
ICAgaWYgbm90IGRhdGFfZW50cnk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcud2Fybmlu
ZygiRm91bmQga2V5LCBidXQgbm8gZGF0YSBlbnRyeTogJXMiLCBrZXkpCisgICAgICAgICAgICAg
ICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkoKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBkYXRhX2VudHJ5ID0gRGF0YUVudHJ5KCkKKworICAgICAgICAgICAgZGF0YV9l
bnRyeS5kYXRhID0gZGIuQmxvYihkYXRhW3N0YXJ0OiBzdGFydCArIE1BWF9FTlRSWV9MRU5dKQor
ICAgICAgICAgICAgZGF0YV9lbnRyeS5wdXQoKQorCisgICAgICAgICAgICBsb2dnaW5nLmluZm8o
IkRhdGEgc2F2ZWQ6ICVzLiIsIGRhdGFfZW50cnkua2V5KCkpCisgICAgICAgICAgICBzZWxmLmRh
dGFfa2V5cy5hcHBlbmQoZGF0YV9lbnRyeS5rZXkoKSkKKworICAgICAgICAgICAgc3RhcnQgPSBz
dGFydCArIE1BWF9FTlRSWV9MRU4KKworICAgICAgICBpZiBrZXlzOgorICAgICAgICAgICAgc2Vs
Zi5kZWxldGVfZGF0YShrZXlzKQorCisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGxvYWRfZGF0YShzZWxmKToKKyAgICAgICAgaWYgbm90
IHNlbGYuZGF0YV9rZXlzOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJObyBkYXRhIHRv
IGxvYWQuIikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZGF0YSA9IFtdCisg
ICAgICAgIGZvciBrZXkgaW4gc2VsZi5kYXRhX2tleXM6CisgICAgICAgICAgICBsb2dnaW5nLmlu
Zm8oIkxvYWRpbmcgZGF0YSBmb3Iga2V5OiAlcy4iLCBrZXkpCisgICAgICAgICAgICBkYXRhX2Vu
dHJ5ID0gRGF0YUVudHJ5LmdldChrZXkpCisgICAgICAgICAgICBpZiBub3QgZGF0YV9lbnRyeToK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJObyBkYXRhIGZvdW5kIGZvciBrZXk6ICVz
LiIsIGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBkYXRh
LmFwcGVuZChkYXRhX2VudHJ5LmRhdGEpCisKKyAgICAgICAgc2VsZi5kYXRhID0gIiIuam9pbihk
YXRhKQorCisgICAgICAgIHJldHVybiBzZWxmLmRhdGEKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weQpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJLaXRUb29scy9UZXN0
UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHMucHkJKHJldmlzaW9uIDApCisr
KyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzLnB5CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMzNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisj
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gZGF0ZXRp
bWUgaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNpbXBsZWpzb24KKwor
ZnJvbSBtb2RlbC50ZXN0ZmlsZSBpbXBvcnQgVGVzdEZpbGUKKworSlNPTl9SRVNVTFRTX0ZJTEUg
PSAicmVzdWx0cy5qc29uIgorSlNPTl9SRVNVTFRTX1BSRUZJWCA9ICJBRERfUkVTVUxUUygiCitK
U09OX1JFU1VMVFNfU1VGRklYID0gIik7IgorSlNPTl9SRVNVTFRTX1ZFUlNJT05fS0VZID0gInZl
cnNpb24iCitKU09OX1JFU1VMVFNfQlVJTERfTlVNQkVSUyA9ICJidWlsZE51bWJlcnMiCitKU09O
X1JFU1VMVFNfVEVTVFMgPSAidGVzdHMiCitKU09OX1JFU1VMVFNfUkVTVUxUUyA9ICJyZXN1bHRz
IgorSlNPTl9SRVNVTFRTX1RJTUVTID0gInRpbWVzIgorSlNPTl9SRVNVTFRTX1ZFUlNJT04gPSAz
CitKU09OX1JFU1VMVFNfTUFYX0JVSUxEUyA9IDc1MAorCisKK2NsYXNzIEpzb25SZXN1bHRzKG9i
amVjdCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zdHJpcF9wcmVmaXhfc3VmZml4KGNs
cywgZGF0YSk6CisgICAgICAgICIiIlN0cmlwIG91dCBwcmVmaXggYW5kIHN1ZmZpeCBvZiBqc29u
IHJlc3VsdHMgc3RyaW5nLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkYXRhOiBqc29u
IGZpbGUgY29udGVudC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAganNvbiBzdHJp
bmcgd2l0aG91dCBwcmVmaXggYW5kIHN1ZmZpeC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0
dXJuIGRhdGFbbGVuKEpTT05fUkVTVUxUU19QUkVGSVgpOgorICAgICAgICAgICAgICAgICAgICBs
ZW4oZGF0YSkgLSBsZW4oSlNPTl9SRVNVTFRTX1NVRkZJWCldCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgX2dlbmVyYXRlX2ZpbGVfZGF0YShjbHMsIGpzb24sIHNvcnRfa2V5cz1GYWxzZSk6
CisgICAgICAgICIiIkdpdmVuIGpzb24gc3RyaW5nLCBnZW5lcmF0ZSBmaWxlIGNvbnRlbnQgZGF0
YSBieSBhZGRpbmcKKyAgICAgICAgICAgcHJlZml4IGFuZCBzdWZmaXguCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICAgIGpzb246IGpzb24gc3RyaW5nIHdpdGhvdXQgcHJlZml4IGFuZCBzdWZm
aXguCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGpzb24gZmlsZSBkYXRhLgorICAg
ICAgICAiIiIKKworICAgICAgICBkYXRhID0gc2ltcGxlanNvbi5kdW1wcyhqc29uLCBzZXBhcmF0
b3JzPSgnLCcsICc6JyksCisgICAgICAgICAgICBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAg
ICByZXR1cm4gSlNPTl9SRVNVTFRTX1BSRUZJWCArIGRhdGEgKyBKU09OX1JFU1VMVFNfU1VGRklY
CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2xvYWRfanNvbihjbHMsIGZpbGVfZGF0YSk6
CisgICAgICAgICIiIkxvYWQganNvbiBmaWxlIHRvIGEgcHl0aG9uIG9iamVjdC4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgZmlsZV9kYXRhOiBqc29uIGZpbGUgY29udGVudC4KKworICAg
ICAgICBSZXR1cm5zOgorICAgICAgICAgICAganNvbiBvYmplY3Qgb3IKKyAgICAgICAgICAgIE5v
bmUgb24gZmFpbHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAganNvbl9yZXN1bHRzX3N0ciA9
IGNscy5fc3RyaXBfcHJlZml4X3N1ZmZpeChmaWxlX2RhdGEpCisgICAgICAgIGlmIG5vdCBqc29u
X3Jlc3VsdHNfc3RyOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJObyBqc29uIHJlc3Vs
dHMgZGF0YS4iKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZXR1cm4gc2ltcGxlanNvbi5sb2Fkcyhqc29uX3Jlc3VsdHNfc3RyKQorICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGpzb25f
cmVzdWx0c19zdHIpCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJGYWlsZWQgdG8gbG9hZCBq
c29uIHJlc3VsdHM6ICVzIiwgc3RyKGVycikpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9tZXJnZV9qc29uKGNscywgYWdncmVnYXRlZF9qc29u
LCBpbmNyZW1lbnRhbF9qc29uKToKKyAgICAgICAgIiIiTWVyZ2UgaW5jcmVtZW50YWwganNvbiBp
bnRvIGFnZ3JlZ2F0ZWQganNvbiByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICBhZ2dyZWdhdGVkX2pzb246IGFnZ3JlZ2F0ZWQganNvbiBvYmplY3QuCisgICAgICAgICAgICBp
bmNyZW1lbnRhbF9qc29uOiBpbmNyZW1lbnRhbCBqc29uIG9iamVjdC4KKworICAgICAgICBSZXR1
cm5zOgorICAgICAgICAgICAgVHJ1ZSBpZiBtZXJnZSBzdWNjZWVkcyBvcgorICAgICAgICAgICAg
RmFsc2Ugb24gZmFpbHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaW5jcmVtZW50YWxfYnVp
bGRzID0gaW5jcmVtZW50YWxfanNvbltKU09OX1JFU1VMVFNfQlVJTERfTlVNQkVSU10KKyAgICAg
ICAgYWdncmVnYXRlZF9idWlsZHMgPSBhZ2dyZWdhdGVkX2pzb25bSlNPTl9SRVNVTFRTX0JVSUxE
X05VTUJFUlNdCisgICAgICAgIGFnZ3JlZ2F0ZWRfYnVpbGRfbnVtYmVyID0gaW50KGFnZ3JlZ2F0
ZWRfYnVpbGRzWzBdKQorICAgICAgICAjIExvb3AgdGhyb3VnaCBhbGwgaW5jcmVtZW50YWwgYnVp
bGRzLCBzdGFydCBmcm9tIHRoZSBvbGRlc3QgcnVuLgorICAgICAgICBmb3IgaW5kZXggaW4gcmV2
ZXJzZWQocmFuZ2UobGVuKGluY3JlbWVudGFsX2J1aWxkcykpKToKKyAgICAgICAgICAgIGJ1aWxk
X251bWJlciA9IGludChpbmNyZW1lbnRhbF9idWlsZHNbaW5kZXhdKQorICAgICAgICAgICAgbG9n
Z2luZy5kZWJ1ZygiTWVyZ2luZyBidWlsZCAlcywgaW5jcmVtZW50YWwganNvbiBpbmRleDogJWQu
IiwKKyAgICAgICAgICAgICAgICBidWlsZF9udW1iZXIsIGluZGV4KQorCisgICAgICAgICAgICAj
IFJldHVybiBpZiBub3QgYWxsIGJ1aWxkIG51bWJlcnMgaW4gdGhlIGluY3JlbWVudGFsIGpzb24g
cmVzdWx0cworICAgICAgICAgICAgIyBhcmUgbmV3ZXIgdGhhbiB0aGUgbW9zdCByZWNlbnQgYnVp
bGQgaW4gdGhlIGFnZ3JlZ2F0ZWQgcmVzdWx0cy4KKyAgICAgICAgICAgIGlmIGJ1aWxkX251bWJl
ciA8IGFnZ3JlZ2F0ZWRfYnVpbGRfbnVtYmVyOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2Fy
bmluZygoIkJ1aWxkICVkIGluIGluY3JlbWVudGFsIGpzb24gaXMgb2xkZXIgdGhhbiAiCisgICAg
ICAgICAgICAgICAgICAgICJ0aGUgbW9zdCByZWNlbnQgYnVpbGQgaW4gYWdncmVnYXRlZCByZXN1
bHRzOiAlZCIpLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9udW1iZXIsIGFnZ3JlZ2F0ZWRf
YnVpbGRfbnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAg
ICAjIFNraXAgbWVyZ2luZyBkdXBsaWNhdGUgYnVpbGQuCisgICAgICAgICAgICBpZiBidWlsZF9u
dW1iZXIgPT0gYWdncmVnYXRlZF9idWlsZF9udW1iZXI6CisgICAgICAgICAgICAgICAgbG9nZ2lu
Zy53YXJuaW5nKCJEdXBsaWNhdGUgYnVpbGQgJWQgaW4gaW5jcmVtZW50YWwganNvbiIsCisgICAg
ICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgICAgICAjIE1lcmdlIHRoaXMgYnVpbGQgaW50byBhZ2dyZWFnYXRlZCByZXN1bHRz
LgorICAgICAgICAgICAgY2xzLl9tZXJnZV9vbmVfYnVpbGQoYWdncmVnYXRlZF9qc29uLCBpbmNy
ZW1lbnRhbF9qc29uLCBpbmRleCkKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIk1lcmdlZCBi
dWlsZCAlcywgbWVyZ2VkIGpzb246ICVzLiIsCisgICAgICAgICAgICAgICAgYnVpbGRfbnVtYmVy
LCBhZ2dyZWdhdGVkX2pzb24pCisKKyAgICAgICAgIyBNZXJnZSB0ZXN0cyByZXN1bHRzIGFuZCB0
aW1lcworICAgICAgICBpbmNyZW1lbnRhbF90ZXN0cyA9IGluY3JlbWVudGFsX2pzb25bSlNPTl9S
RVNVTFRTX1RFU1RTXQorICAgICAgICBpZiBpbmNyZW1lbnRhbF90ZXN0czoKKyAgICAgICAgICAg
IGFnZ3JlZ2F0ZWRfdGVzdHMgPSBhZ2dyZWdhdGVkX2pzb25bSlNPTl9SRVNVTFRTX1RFU1RTXQor
ICAgICAgICAgICAgY2xzLl9tZXJnZV90ZXN0cyhhZ2dyZWdhdGVkX3Rlc3RzLCBpbmNyZW1lbnRh
bF90ZXN0cykKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIF9tZXJnZV9vbmVfYnVpbGQoY2xzLCBhZ2dyZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pz
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxfaW5kZXgpOgorICAgICAg
ICAiIiJNZXJnZSBvbmUgYnVpbGQgb2YgaW5jcmVtZW50YWwganNvbiBpbnRvIGFnZ3JlZ2F0ZWQg
anNvbiByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBhZ2dyZWdhdGVkX2pz
b246IGFnZ3JlZ2F0ZWQganNvbiBvYmplY3QuCisgICAgICAgICAgICBpbmNyZW1lbnRhbF9qc29u
OiBpbmNyZW1lbnRhbCBqc29uIG9iamVjdC4KKyAgICAgICAgICAgIGluY3JlbWVudGFsX2luZGV4
OiBpbmRleCBvZiB0aGUgaW5jcmVtZW50YWwganNvbiByZXN1bHRzIHRvIG1lcmdlLgorICAgICAg
ICAiIiIKKworICAgICAgICBmb3Iga2V5IGluIGluY3JlbWVudGFsX2pzb24ua2V5cygpOgorICAg
ICAgICAgICAgIyBNZXJnZSBqc29uIHJlc3VsdHMgZXhjZXB0ICJ0ZXN0cyIgcHJvcGVydGllcyAo
cmVzdWx0cywgdGltZXMgZXRjKS4KKyAgICAgICAgICAgICMgInRlc3RzIiBwcm9wZXJ0aWVzIHdp
bGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgaWYga2V5ID09IEpTT05fUkVT
VUxUU19URVNUUzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBr
ZXkgaW4gYWdncmVnYXRlZF9qc29uOgorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbltr
ZXldLmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgaW5jcmVtZW50YWxfanNvbltrZXld
W2luY3JlbWVudGFsX2luZGV4XSkKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5
XSA9IFwKKyAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uW2tleV1bOkpTT05fUkVT
VUxUU19NQVhfQlVJTERTXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhZ2dy
ZWdhdGVkX2pzb25ba2V5XSA9IGluY3JlbWVudGFsX2pzb25ba2V5XQorCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIF9tZXJnZV90ZXN0cyhjbHMsIGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50
YWxfanNvbik6CisgICAgICAgICIiIk1lcmdlICJ0ZXN0cyIgcHJvcGVydGllczpyZXN1bHRzLCB0
aW1lcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dy
ZWdhdGVkIGpzb24gb2JqZWN0LgorICAgICAgICAgICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVt
ZW50YWwganNvbiBvYmplY3QuCisgICAgICAgICIiIgorCisgICAgICAgIGZvciB0ZXN0X25hbWUg
aW4gaW5jcmVtZW50YWxfanNvbjoKKyAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBpbiBhZ2dyZWdh
dGVkX2pzb246CisgICAgICAgICAgICAgICAgY2xzLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2Vu
Y29kZWQoCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsX2pzb25bdGVzdF9uYW1lXVtK
U09OX1JFU1VMVFNfUkVTVUxUU10sCisgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNv
blt0ZXN0X25hbWVdW0pTT05fUkVTVUxUU19SRVNVTFRTXSkKKyAgICAgICAgICAgICAgICBjbHMu
X2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZCgKKyAgICAgICAgICAgICAgICAgICAgaW5j
cmVtZW50YWxfanNvblt0ZXN0X25hbWVdW0pTT05fUkVTVUxUU19USU1FU10sCisgICAgICAgICAg
ICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvblt0ZXN0X25hbWVdW0pTT05fUkVTVUxUU19USU1FU10p
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvblt0ZXN0
X25hbWVdID0gaW5jcmVtZW50YWxfanNvblt0ZXN0X25hbWVdCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChjbHMsIGluY3JlbWVudGFs
X2l0ZW0sIGFnZ3JlZ2F0ZWRfaXRlbSk6CisgICAgICAgICIiIkluc2VydHMgdGhlIGluY3JlbWVu
dGFsIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzIGludG8gdGhlIGFnZ3JlZ2F0ZWQKKyAgICAg
ICAgICAgcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICAgIGluY3JlbWVudGFsX2l0ZW06IGluY3JlbWVudGFsIHJ1bi1sZW5ndGggZW5jb2RlZCBy
ZXN1bHRzLgorICAgICAgICAgICAgYWdncmVnYXRlZF9pdGVtOiBhZ2dyZWdhdGVkIHJ1bi1sZW5n
dGggZW5jb2RlZCByZXN1bHRzLgorICAgICAgICAiIiIKKworICAgICAgICBmb3IgaXRlbSBpbiBp
bmNyZW1lbnRhbF9pdGVtOgorICAgICAgICAgICAgaWYgbGVuKGFnZ3JlZ2F0ZWRfaXRlbSkgYW5k
IGl0ZW1bMV0gPT0gYWdncmVnYXRlZF9pdGVtWzBdWzFdOgorICAgICAgICAgICAgICAgIGFnZ3Jl
Z2F0ZWRfaXRlbVswXVswXSA9IG1pbigKKyAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9p
dGVtWzBdWzBdICsgaXRlbVswXSwgSlNPTl9SRVNVTFRTX01BWF9CVUlMRFMpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhlIHRlc3QgaXRlbSB2YWx1ZXMgbmVlZCB0byBi
ZSBzdW1tZWQgZnJvbSBjb250aW51b3VzIHJ1bnMuCisgICAgICAgICAgICAgICAgIyBJZiB0aGVy
ZSBpcyBhbiBvbGRlciBpdGVtIChub3QgbW9zdCByZWNlbnQgb25lKSB3aG9zZSB2YWx1ZSBpcwor
ICAgICAgICAgICAgICAgICMgc2FtZSBhcyB0aGUgb25lIHRvIGluc2VydCwgdGhlbiB3ZSBzaG91
bGQgcmVtb3ZlIHRoZSBvbGQgaXRlbQorICAgICAgICAgICAgICAgICMgZnJvbSBhZ2dyZWdhdGVk
IGxpc3QuCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UoMSwgbGVuKGFn
Z3JlZ2F0ZWRfaXRlbSkpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXRlbVsxXSA9PSBhZ2dy
ZWdhdGVkX2l0ZW1baV1bMV06CisgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0
ZW0ucG9wKGkpCisKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0ZW0uaW5zZXJ0KDAsIGl0
ZW0pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NoZWNrX2pzb24oY2xzLCBidWlsZGVy
LCBqc29uKToKKyAgICAgICAgIiIiQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4ganNvbiBpcyB2YWxp
ZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYnVpbGRlcjogYnVpbGRlciBuYW1lIHRo
aXMganNvbiBpcyBmb3IuCisgICAgICAgICAgICBqc29uOiBqc29uIG9iamVjdCB0byBjaGVjay4K
KworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZSBpZiB0aGUganNvbiBpcyB2YWxp
ZCBvcgorICAgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKworICAgICAg
ICB2ZXJzaW9uID0ganNvbltKU09OX1JFU1VMVFNfVkVSU0lPTl9LRVldCisgICAgICAgIGlmIHZl
cnNpb24gPiBKU09OX1JFU1VMVFNfVkVSU0lPTjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Io
IlJlc3VsdHMgSlNPTiB2ZXJzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZC4iLAorICAgICAgICAg
ICAgICAgIHZlcnNpb24pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBu
b3QgYnVpbGRlciBpbiBqc29uOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQnVpbGRlciAn
JXMnIGlzIG5vdCBpbiBqc29uIHJlc3VsdHMuIiwgYnVpbGRlcikKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSBqc29uW2J1aWxkZXJdCisg
ICAgICAgIGlmIG5vdCBKU09OX1JFU1VMVFNfQlVJTERfTlVNQkVSUyBpbiByZXN1bHRzX2Zvcl9i
dWlsZGVyOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiTWlzc2luZyBidWlsZCBudW1iZXIg
aW4ganNvbiByZXN1bHRzLiIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1lcmdlKGNscywgYnVpbGRl
ciwgYWdncmVnYXRlZCwgaW5jcmVtZW50YWwsIHNvcnRfa2V5cz1GYWxzZSk6CisgICAgICAgICIi
Ik1lcmdlIGluY3JlbWVudGFsIGpzb24gZmlsZSBkYXRhIHdpdGggYWdncmVnYXRlZCBqc29uIGZp
bGUgZGF0YS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYnVpbGRlcjogYnVpbGRlciBu
YW1lLgorICAgICAgICAgICAgYWdncmVnYXRlZDogYWdncmVnYXRlZCBqc29uIGZpbGUgZGF0YS4K
KyAgICAgICAgICAgIGluY3JlbWVudGFsOiBpbmNyZW1lbnRhbCBqc29uIGZpbGUgZGF0YS4KKyAg
ICAgICAgICAgIHNvcnRfa2V5OiB3aGV0aGVyIG9yIG5vdCB0byBzb3J0IGtleSB3aGVuIGR1bXBp
bmcganNvbiByZXN1bHRzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBNZXJnZWQg
anNvbiBmaWxlIGRhdGEgaWYgbWVyZ2Ugc3VjY2VlZHMgb3IKKyAgICAgICAgICAgIE5vbmUgb24g
ZmFpbHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IGluY3JlbWVudGFsOgorICAg
ICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJOb3RoaW5nIHRvIG1lcmdlLiIpCisgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBpbmNyZW1lbnRh
bCBqc29uLi4uIikKKyAgICAgICAgaW5jcmVtZW50YWxfanNvbiA9IGNscy5fbG9hZF9qc29uKGlu
Y3JlbWVudGFsKQorICAgICAgICBpZiBub3QgaW5jcmVtZW50YWxfanNvbjoKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJDaGVja2luZyBpbmNyZW1lbnRh
bCBqc29uLi4uIikKKyAgICAgICAgaWYgbm90IGNscy5fY2hlY2tfanNvbihidWlsZGVyLCBpbmNy
ZW1lbnRhbF9qc29uKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgbG9nZ2lu
Zy5pbmZvKCJMb2FkaW5nIGV4aXN0aW5nIGFnZ3JlZ2F0ZWQganNvbi4uLiIpCisgICAgICAgIGFn
Z3JlZ2F0ZWRfanNvbiA9IGNscy5fbG9hZF9qc29uKGFnZ3JlZ2F0ZWQpCisgICAgICAgIGlmIG5v
dCBhZ2dyZWdhdGVkX2pzb246CisgICAgICAgICAgICByZXR1cm4gaW5jcmVtZW50YWwKKworICAg
ICAgICBsb2dnaW5nLmluZm8oIkNoZWNraW5nIGV4aXN0aW5nIGFnZ3JlZ2F0ZWQganNvbi4uLiIp
CisgICAgICAgIGlmIG5vdCBjbHMuX2NoZWNrX2pzb24oYnVpbGRlciwgYWdncmVnYXRlZF9qc29u
KToKKyAgICAgICAgICAgIHJldHVybiBpbmNyZW1lbnRhbAorCisgICAgICAgIGxvZ2dpbmcuaW5m
bygiTWVyZ2luZyBqc29uIHJlc3VsdHMuLi4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBp
ZiBub3QgY2xzLl9tZXJnZV9qc29uKAorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvblti
dWlsZGVyXSwKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbF9qc29uW2J1aWxkZXJdKToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6
CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJGYWlsZWQgdG8gbWVyZ2UganNvbiByZXN1bHRz
OiAlcyIsIHN0cihlcnIpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIE1h
a2Ugc3VyZSByZXN1bHRzIGpzb24gdmVyc2lvbiBpcyB1cGRhdGVkLgorICAgICAgICBhZ2dyZWdh
dGVkX2pzb25bSlNPTl9SRVNVTFRTX1ZFUlNJT05fS0VZXSA9IEpTT05fUkVTVUxUU19WRVJTSU9O
CisKKyAgICAgICAgcmV0dXJuIEpzb25SZXN1bHRzLl9nZW5lcmF0ZV9maWxlX2RhdGEoYWdncmVn
YXRlZF9qc29uLCBzb3J0X2tleXMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdXBkYXRl
KGNscywgYnVpbGRlciwgdGVzdF90eXBlLCBpbmNyZW1lbnRhbCk6CisgICAgICAgICIiIlVwZGF0
ZSBkYXRhc3RvcmUganNvbiBmaWxlIGRhdGEgYnkgbWVyZ2luZyBpdCB3aXRoIGluY3JlbWVudGFs
IGpzb24KKyAgICAgICAgICAgZmlsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYnVp
bGRlcjogYnVpbGRlciBuYW1lLgorICAgICAgICAgICAgdGVzdF90eXBlOiB0eXBlIG9mIHRlc3Qg
cmVzdWx0cy4KKyAgICAgICAgICAgIGluY3JlbWVudGFsOiBpbmNyZW1lbnRhbCBqc29uIGZpbGUg
ZGF0YSB0byBtZXJnZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVGVzdEZpbGUg
b2JqZWN0IGlmIHVwZGF0ZSBzdWNjZWVkcyBvcgorICAgICAgICAgICAgTm9uZSBvbiBmYWlsdXJl
LgorICAgICAgICAiIiIKKworICAgICAgICBmaWxlcyA9IFRlc3RGaWxlLmdldF9maWxlcyhidWls
ZGVyLCB0ZXN0X3R5cGUsIEpTT05fUkVTVUxUU19GSUxFKQorICAgICAgICBpZiBmaWxlczoKKyAg
ICAgICAgICAgIGZpbGUgPSBmaWxlc1swXQorICAgICAgICAgICAgbmV3X3Jlc3VsdHMgPSBjbHMu
bWVyZ2UoYnVpbGRlciwgZmlsZS5kYXRhLCBpbmNyZW1lbnRhbCkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICMgVXNlIHRoZSBpbmNyZW1lbnRhbCBkYXRhIGlmIHRoZXJlIGlzIG5vIGFnZ3Jl
Z2F0ZWQgZmlsZSB0byBtZXJnZS4KKyAgICAgICAgICAgIGZpbGUgPSBUZXN0RmlsZSgpCisgICAg
ICAgICAgICBmaWxlLmJ1aWxkZXIgPSBidWlsZGVyCisgICAgICAgICAgICBmaWxlLm5hbWUgPSBK
U09OX1JFU1VMVFNfRklMRQorICAgICAgICAgICAgbmV3X3Jlc3VsdHMgPSBpbmNyZW1lbnRhbAor
ICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJObyBleGlzdGluZyBqc29uIHJlc3VsdHMsIGluY3Jl
bWVudGFsIGpzb24gaXMgc2F2ZWQuIikKKworICAgICAgICBpZiBub3QgbmV3X3Jlc3VsdHM6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBmaWxlLnNhdmUobmV3X3Jl
c3VsdHMpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gZmlsZQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9q
c29ucmVzdWx0cy5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCklu
ZGV4OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwv
anNvbnJlc3VsdHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9UZXN0
UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI0NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitm
cm9tIGpzb25yZXN1bHRzIGltcG9ydCBKc29uUmVzdWx0cworCitKU09OX1JFU1VMVFNfVEVNUExB
VEUgPSAoCisgICAgJ3siV2Via2l0Ijp7JworICAgICciYWxsRml4YWJsZUNvdW50IjpbW1RFU1RE
QVRBX0NPVU5UXV0sJworICAgICciYnVpbGROdW1iZXJzIjpbW1RFU1REQVRBX0JVSUxETlVNQkVS
U11dLCcKKyAgICAnImNocm9tZVJldmlzaW9uIjpbW1RFU1REQVRBX0NIUk9NRVJFVklTSU9OXV0s
JworICAgICciZGVmZXJyZWRDb3VudHMiOltbVEVTVERBVEFfQ09VTlRTXV0sJworICAgICciZml4
YWJsZUNvdW50IjpbW1RFU1REQVRBX0NPVU5UXV0sJworICAgICciZml4YWJsZUNvdW50cyI6W1tU
RVNUREFUQV9DT1VOVFNdXSwnCisgICAgJyJzZWNvbmRzU2luY2VFcG9jaCI6W1tURVNUREFUQV9U
SU1FU11dLCcKKyAgICAnInRlc3RzIjp7W1RFU1REQVRBX1RFU1RTXX0sJworICAgICcid2Via2l0
UmV2aXNpb24iOltbVEVTVERBVEFfV0VCS0lUUkVWSVNJT05dXSwnCisgICAgJyJ3b250Zml4Q291
bnRzIjpbW1RFU1REQVRBX0NPVU5UU11dJworICAgICd9LCcKKyAgICAnInZlcnNpb24iOjMnCisg
ICAgJ30nKQorCitKU09OX1JFU1VMVFNfQ09VTlRTX1RFTVBMQVRFID0gKAorICAgICd7JworICAg
ICciQyI6W1RFU1REQVRBXSwnCisgICAgJyJGIjpbVEVTVERBVEFdLCcKKyAgICAnIkkiOltURVNU
REFUQV0sJworICAgICciTyI6W1RFU1REQVRBXSwnCisgICAgJyJQIjpbVEVTVERBVEFdLCcKKyAg
ICAnIlQiOltURVNUREFUQV0sJworICAgICciWCI6W1RFU1REQVRBXSwnCisgICAgJyJaIjpbVEVT
VERBVEFdfScpCisKK0pTT05fUkVTVUxUU19URVNUU19URU1QTEFURSA9ICgKKyAgICAnIltURVNU
REFUQV9URVNUX05BTUVdIjp7JworICAgICcicmVzdWx0cyI6W1tURVNUREFUQV9URVNUX1JFU1VM
VFNdXSwnCisgICAgJyJ0aW1lcyI6W1tURVNUREFUQV9URVNUX1RJTUVTXV19JykKKworSlNPTl9S
RVNVTFRTX1BSRUZJWCA9ICJBRERfUkVTVUxUUygiCitKU09OX1JFU1VMVFNfU1VGRklYID0gIik7
IgorCisKK2NsYXNzIEpzb25SZXN1bHRzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVm
IHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9idWlsZGVyID0gIldlYmtpdCIKKworICAgIGRl
ZiBfbWFrZV90ZXN0X2pzb24oc2VsZiwgdGVzdF9kYXRhKToKKyAgICAgICAgaWYgbm90IHRlc3Rf
ZGF0YToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIChidWlsZHMsIHRlc3RzKSA9
IHRlc3RfZGF0YQorICAgICAgICBpZiBub3QgYnVpbGRzIG9yIG5vdCB0ZXN0czoKKyAgICAgICAg
ICAgIHJldHVybiBKU09OX1JFU1VMVFNfUFJFRklYICsgSlNPTl9SRVNVTFRTX1NVRkZJWAorCisg
ICAgICAgIGpzb24gPSBKU09OX1JFU1VMVFNfVEVNUExBVEUKKworICAgICAgICBjb3VudHMgPSBb
XQorICAgICAgICBidWlsZF9udW1iZXJzID0gW10KKyAgICAgICAgd2Via2l0X3JldmlzaW9uID0g
W10KKyAgICAgICAgY2hyb21lX3JldmlzaW9uID0gW10KKyAgICAgICAgdGltZXMgPSBbXQorICAg
ICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgY291bnRzLmFwcGVuZChKU09O
X1JFU1VMVFNfQ09VTlRTX1RFTVBMQVRFLnJlcGxhY2UoIltURVNUREFUQV0iLCBidWlsZCkpCisg
ICAgICAgICAgICBidWlsZF9udW1iZXJzLmFwcGVuZCgiMTAwMCVzIiAlIGJ1aWxkKQorICAgICAg
ICAgICAgd2Via2l0X3JldmlzaW9uLmFwcGVuZCgiMjAwMCVzIiAlIGJ1aWxkKQorICAgICAgICAg
ICAgY2hyb21lX3JldmlzaW9uLmFwcGVuZCgiMzAwMCVzIiAlIGJ1aWxkKQorICAgICAgICAgICAg
dGltZXMuYXBwZW5kKCIxMDAwMDAlczAwMCIgJSBidWlsZCkKKworICAgICAgICBqc29uID0ganNv
bi5yZXBsYWNlKCJbVEVTVERBVEFfQ09VTlRTXSIsICIsIi5qb2luKGNvdW50cykpCisgICAgICAg
IGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9DT1VOVF0iLCAiLCIuam9pbihidWlsZHMp
KQorICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfQlVJTEROVU1CRVJTXSIs
ICIsIi5qb2luKGJ1aWxkX251bWJlcnMpKQorICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJb
VEVTVERBVEFfV0VCS0lUUkVWSVNJT05dIiwgIiwiLmpvaW4od2Via2l0X3JldmlzaW9uKSkKKyAg
ICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX0NIUk9NRVJFVklTSU9OXSIsICIs
Ii5qb2luKGNocm9tZV9yZXZpc2lvbikpCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltU
RVNUREFUQV9USU1FU10iLCAiLCIuam9pbih0aW1lcykpCisKKyAgICAgICAganNvbl90ZXN0cyA9
IFtdCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgdCA9IEpTT05fUkVT
VUxUU19URVNUU19URU1QTEFURS5yZXBsYWNlKCJbVEVTVERBVEFfVEVTVF9OQU1FXSIsIHRlc3Rb
MF0pCisgICAgICAgICAgICB0ID0gdC5yZXBsYWNlKCJbVEVTVERBVEFfVEVTVF9SRVNVTFRTXSIs
IHRlc3RbMV0pCisgICAgICAgICAgICB0ID0gdC5yZXBsYWNlKCJbVEVTVERBVEFfVEVTVF9USU1F
U10iLCB0ZXN0WzJdKQorICAgICAgICAgICAganNvbl90ZXN0cy5hcHBlbmQodCkKKworICAgICAg
ICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfVEVTVFNdIiwgIiwiLmpvaW4oanNvbl90
ZXN0cykpCisKKyAgICAgICAgcmV0dXJuIEpTT05fUkVTVUxUU19QUkVGSVggKyBqc29uICsgSlNP
Tl9SRVNVTFRTX1NVRkZJWAorCisgICAgZGVmIF90ZXN0X21lcmdlKHNlbGYsIGFnZ3JlZ2F0ZWRf
ZGF0YSwgaW5jcmVtZW50YWxfZGF0YSwgZXhwZWN0ZWRfZGF0YSk6CisgICAgICAgIGFnZ3JlZ2F0
ZWRfcmVzdWx0cyA9IHNlbGYuX21ha2VfdGVzdF9qc29uKGFnZ3JlZ2F0ZWRfZGF0YSkKKyAgICAg
ICAgaW5jcmVtZW50YWxfcmVzdWx0cyA9IHNlbGYuX21ha2VfdGVzdF9qc29uKGluY3JlbWVudGFs
X2RhdGEpCisgICAgICAgIG1lcmdlZF9yZXN1bHRzID0gSnNvblJlc3VsdHMubWVyZ2Uoc2VsZi5f
YnVpbGRlciwKKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfcmVzdWx0cywgaW5jcmVtZW50YWxfcmVz
dWx0cywgc29ydF9rZXlzPVRydWUpCisKKyAgICAgICAgaWYgZXhwZWN0ZWRfZGF0YToKKyAgICAg
ICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSBzZWxmLl9tYWtlX3Rlc3RfanNvbihleHBlY3RlZF9k
YXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVyZ2VkX3Jlc3VsdHMsIGV4cGVj
dGVkX3Jlc3VsdHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KG1lcmdlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICMgRW1wdHkg
aW5jcmVtZW50YWwgcmVzdWx0cyBqc29uLgorICAgICAgICAjIE5vdGhpbmcgdG8gbWVyZ2UuCisg
ICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0
cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwg
IlsyMDAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAg
ICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICMgRXhwZWN0IG5vIG1lcmdlIGhhcHBlbnMuCisg
ICAgICAgICAgICBOb25lKQorCisgICAgICAgICMgTm8gYWN0dWFsIGluY3JlbWVudGFsIHRlc3Qg
cmVzdWx0cyAob25seSBwcmVmaXggYW5kIHN1ZmZpeCkgdG8gbWVyZ2UuCisgICAgICAgICMgTm90
aGluZyB0byBtZXJnZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMg
QWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwi
LCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1l
bnRhbCByZXN1bHRzCisgICAgICAgICAgICAoW10sIFtdKSwKKyAgICAgICAgICAgICMgRXhwZWN0
ZWQgbm8gbWVyZ2UgaGFwcGVucy4KKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgIyBObyBl
eGlzdGluZyBhZ2dyZWdhdGVkIHJlc3VsdHMuCisgICAgICAgICMgTWVyZ2VkIHJlc3VsdHMgPT0g
bmV3IGluY3JlbWVudGFsIHJlc3VsdHMuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAg
ICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAgICAgICAgTm9uZSwKKyAgICAgICAg
ICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAw
MS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMg
RXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwg
IlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl1dKSkKKworICAgICAgICAjIFNpbmdsZSB0ZXN0
IGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMgaGFzIHRoZSBs
YXRlc3QgYnVpbGQgYW5kIHNhbWUgdGVzdCByZXN1bHRzIGZvcgorICAgICAgICAjIHRoYXQgcnVu
LgorICAgICAgICAjIEluc2VydCB0aGUgaW5jcmVtZW50YWwgcmVzdWx0cyBhdCB0aGUgZmlyc3Qg
cGxhY2UgYW5kIHN1bSBudW1iZXIKKyAgICAgICAgIyBvZiBydW5zIGZvciAiUCIgKDIwMCArIDEp
IHRvIGdldCBtZXJnZWQgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAg
ICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1si
MDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAg
IyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIl0sIFtbIjAwMS5odG1sIiwg
IlsxLFwiUFwiXSIsICJbMSxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1
bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAxLFwi
UFwiXSIsICJbMjAxLFwiMFwiXSJdXSkpCisKKyAgICAgICAgIyBTaW5nbGUgdGVzdCBmb3Igc2lu
Z2xlIHJ1bi4KKyAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzIGhhcyB0aGUgbGF0ZXN0IGJ1
aWxkIGJ1dCBkaWZmZXJlbnQgdGVzdCByZXN1bHRzCisgICAgICAgICMgZm9yIHRoYXQgcnVuLgor
ICAgICAgICAjIEluc2VydCB0aGUgaW5jcmVtZW50YWwgcmVzdWx0cyBhdCB0aGUgZmlyc3QgcGxh
Y2UuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQg
cmVzdWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQ
XCJdIiwgIlsyMDAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0
cworICAgICAgICAgICAgKFsiMyJdLCBbWyIwMDEuaHRtbCIsICJbMSwgXCJJXCJdIiwgIlsxLFwi
MVwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChb
IjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsxLFwiSVwiXSxbMjAwLFwiUFwiXSIsICJb
MSxcIjFcIl0sWzIwMCxcIjBcIl0iXV0pKQorCisgICAgICAgICMgU2luZ2xlIHRlc3QgZm9yIHNp
bmdsZSBydW4uCisgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cyBoYXMgdGhlIGxhdGVzdCBi
dWlsZCBidXQgZGlmZmVyZW50IHRlc3QgcmVzdWx0cworICAgICAgICAjIGZvciB0aGF0IHJ1bi4K
KyAgICAgICAgIyBUaGUgdGVzdCAicmVzdWx0cyIgYW5kICJ0aW1lcyIgbmVlZCB0byBiZSBjb250
aW51b3VzLCBzbyB0aGUgb2xkCisgICAgICAgICMgWzEwLCJJIl0gcmVzdWx0IHNob3VsZCBiZSBk
cm9wcGVkIGJlY2F1c2UgYSBuZXcgcmVzdWx0IG9mIHNhbWUgdHlwZSBbMSwiSSJdCisgICAgICAg
ICMgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgWzIwMCwiUCJdLgorICAgICAgICBzZWxmLl90ZXN0
X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChb
IjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSxbMTAsXCJJXCJdIiwgIlsyMDAs
XCIwXCJdLFsxMCxcIjFcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRz
CisgICAgICAgICAgICAoWyIzIl0sIFtbIjAwMS5odG1sIiwgIlsxLFwiSVwiXSIsICJbMSxcIjFc
Il0iXV0pLAorICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIz
IiwgIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMSxcIklcIl0sWzIwMCxcIlBcIl0iLCAiWzEs
XCIxXCJdLFsyMDAsXCIwXCJdIl1dKSkKKworICAgICAgICAjIE11bHRpcGxlIHRlc3RzIGZvciBz
aW5nbGUgcnVuLgorICAgICAgICAjIEFsbCB0ZXN0cyBoYXZlIGluY3JlbWVudGFsIHVwZGF0ZXMu
CisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVz
dWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJd
IiwgIlsyMDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEwMCxcIklcIl0iLCAiWzEwMCxcIjFc
Il0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAo
WyIzIl0sIFtbIjAwMS5odG1sIiwgIlsxLFwiUFwiXSIsICJbMSxcIjBcIl0iXSwgWyIwMDIuaHRt
bCIsICJbMSxcIklcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQg
cmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIw
MSxcIlBcIl0iLCAiWzIwMSxcIjBcIl0iXSwgWyIwMDIuaHRtbCIsICJbMTAxLFwiSVwiXSIsICJb
MTAxLFwiMVwiXSJdXSkpCisKKyAgICAgICAgIyBNdWx0aXBsZSB0ZXN0cyBmb3Igc2luZ2xlIHJ1
bi4KKyAgICAgICAgIyBOb3QgYWxsIHRlc3RzIGhhdmUgdXBkYXRlLgorICAgICAgICBzZWxmLl90
ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAg
IChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJd
LCBbIjAwMi5odG1sIiwgIlsxMDAsXCJJXCJdIiwgIlsxMDAsXCIxXCJdIl1dKSwKKyAgICAgICAg
ICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMyJdLCBbWyIwMDIuaHRt
bCIsICJbMSxcIklcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQg
cmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIw
MCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwgWyIwMDIuaHRtbCIsICJbMTAxLFwiSVwiXSIsICJb
MTAxLFwiMVwiXSJdXSkpCisKKyAgICAgICAgIyBTaW5nbGUgdGVzdCBmb3IgbXVsdGlwbGUgcnVu
cy4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVnYXRlZCBy
ZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBc
Il0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRz
CisgICAgICAgICAgICAoWyI0IiwgIjMiXSwgW1siMDAxLmh0bWwiLCAiWzIsIFwiSVwiXSIsICJb
MixcIjJcIl0iXV0pLAorICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAg
ICAoWyI0IiwgIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyLFwiSVwiXSxbMjAwLFwi
UFwiXSIsICJbMixcIjJcIl0sWzIwMCxcIjBcIl0iXV0pKQorCisgICAgICAgICMgTXVsdGlwbGUg
dGVzdHMgZm9yIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAg
ICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtb
IjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAi
WzEwLFwiWlwiXSIsICJbMTAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwg
cmVzdWx0cworICAgICAgICAgICAgKFsiNCIsICIzIl0sIFtbIjAwMS5odG1sIiwgIlsyLCBcIklc
Il0iLCAiWzIsXCIyXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEsXCJDXCJdIiwgIlsxLFwiMVwiXSJd
XSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjQiLCAi
MyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIsXCJJXCJdLFsyMDAsXCJQXCJdIiwgIlsy
LFwiMlwiXSxbMjAwLFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsxLFwiQ1wiXSxbMTAsXCJaXCJd
IiwgIlsxLFwiMVwiXSxbMTAsXCIwXCJdIl1dKSkKKworICAgICAgICAjIFRlc3QgaWYgYnVpbGQg
aW4gaW5jcmVtZW50YWwgcmVzdWx0cyBpcyBvbGRlciB0aGFuIHRoZSBtb3N0IHJlY2VudAorICAg
ICAgICAjIGJ1aWxkIGluIGFnZ3JlZ2F0ZWQgcmVzdWx0cy4KKyAgICAgICAgIyBUaGUgaW5jcmVt
ZW50YWwgcmVzdWx0cyBzaG91bGQgYmUgZHJvcHBlZCBhbmQgbm8gbWVyZ2UgaGFwcGVucy4KKyAg
ICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRz
CisgICAgICAgICAgICAoWyIzIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAi
WzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAg
ICAgICAgICAoWyIyIl0sIFtbIjAwMS5odG1sIiwgIlsxLCBcIlBcIl0iLCAiWzEsXCIwXCJdIl1d
KSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgbm8gbWVyZ2UgaGFwcGVucy4KKyAgICAgICAgICAg
IE5vbmUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigp
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVs
L2pzb25yZXN1bHRzX3VuaXR0ZXN0LnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxl
CiAgICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZp
bGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90
ZXN0ZmlsZS5weQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2Vy
dmVyL21vZGVsL3Rlc3RmaWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAog
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
IyAKKyMKICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTI5LDE2
ICsyOSwxNCBAQAogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBsb2dnaW5n
CiAKLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGJsb2JzdG9yZQogZnJvbSBnb29n
bGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKIAorZnJvbSBtb2RlbC5kYXRhc3RvcmVmaWxlIGlt
cG9ydCBEYXRhU3RvcmVGaWxlCiAKLWNsYXNzIFRlc3RGaWxlKGRiLk1vZGVsKToKKworY2xhc3Mg
VGVzdEZpbGUoRGF0YVN0b3JlRmlsZSk6CiAgICAgYnVpbGRlciA9IGRiLlN0cmluZ1Byb3BlcnR5
KCkKLSAgICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkoKQogICAgIHRlc3RfdHlwZSA9IGRiLlN0
cmluZ1Byb3BlcnR5KCkKLSAgICBibG9iX2tleSA9IGRiLlN0cmluZ1Byb3BlcnR5KCkKLSAgICBk
YXRlID0gZGIuRGF0ZVRpbWVQcm9wZXJ0eShhdXRvX25vd19hZGQ9VHJ1ZSkKIAogICAgIEBjbGFz
c21ldGhvZAogICAgIGRlZiBkZWxldGVfZmlsZShjbHMsIGtleSwgYnVpbGRlciwgdGVzdF90eXBl
LCBuYW1lLCBsaW1pdCk6CkBAIC02Myw3ICs2MSw3IEBAIGNsYXNzIFRlc3RGaWxlKGRiLk1vZGVs
KToKICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBnZXRf
ZmlsZXMoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGxpbWl0KToKKyAgICBkZWYgZ2V0
X2ZpbGVzKGNscywgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBsb2FkX2RhdGE9VHJ1ZSwgbGlt
aXQ9MSk6CiAgICAgICAgIHF1ZXJ5ID0gVGVzdEZpbGUuYWxsKCkKICAgICAgICAgaWYgYnVpbGRl
cjoKICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZmlsdGVyKCJidWlsZGVyID0iLCBidWlsZGVy
KQpAQCAtNzIsNTEgKzcwLDU0IEBAIGNsYXNzIFRlc3RGaWxlKGRiLk1vZGVsKToKICAgICAgICAg
aWYgbmFtZToKICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZmlsdGVyKCJuYW1lID0iLCBuYW1l
KQogCi0gICAgICAgIHJldHVybiBxdWVyeS5vcmRlcigiLWRhdGUiKS5mZXRjaChsaW1pdCkKKyAg
ICAgICAgZmlsZXMgPSBxdWVyeS5vcmRlcigiLWRhdGUiKS5mZXRjaChsaW1pdCkKKyAgICAgICAg
aWYgbG9hZF9kYXRhOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAg
ICAgICAgZmlsZS5sb2FkX2RhdGEoKQorCisgICAgICAgIHJldHVybiBmaWxlcwogCiAgICAgQGNs
YXNzbWV0aG9kCi0gICAgZGVmIGFkZF9maWxlKGNscywgYnVpbGRlciwgdGVzdF90eXBlLCBibG9i
X2luZm8pOgorICAgIGRlZiBhZGRfZmlsZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwg
ZGF0YSk6CiAgICAgICAgIGZpbGUgPSBUZXN0RmlsZSgpCiAgICAgICAgIGZpbGUuYnVpbGRlciA9
IGJ1aWxkZXIKICAgICAgICAgZmlsZS50ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKLSAgICAgICAgZmls
ZS5uYW1lID0gYmxvYl9pbmZvLmZpbGVuYW1lCi0gICAgICAgIGZpbGUuYmxvYl9rZXkgPSBzdHIo
YmxvYl9pbmZvLmtleSgpKQotICAgICAgICBmaWxlLnB1dCgpCisgICAgICAgIGZpbGUubmFtZSA9
IG5hbWUKKworICAgICAgICBpZiBub3QgZmlsZS5zYXZlKGRhdGEpOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKIAogICAgICAgICBsb2dnaW5nLmluZm8oCi0gICAgICAgICAgICAiRmlsZSBzYXZl
ZCwgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLCBibG9iIGtleTogJXMuIiwK
LSAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBmaWxlLmJsb2Jfa2V5
KQorICAgICAgICAgICAgIkZpbGUgc2F2ZWQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBu
YW1lOiAlcywga2V5OiAlcy4iLAorICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxl
Lm5hbWUsIHN0cihmaWxlLmRhdGFfa2V5cykpCiAKICAgICAgICAgcmV0dXJuIGZpbGUKIAogICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiB1cGRhdGVfZmlsZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlw
ZSwgYmxvYl9pbmZvKToKLSAgICAgICAgZmlsZXMgPSBjbHMuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRl
c3RfdHlwZSwgYmxvYl9pbmZvLmZpbGVuYW1lLCAxKQorICAgIGRlZiB1cGRhdGUoY2xzLCBidWls
ZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGRhdGEpOgorICAgICAgICBmaWxlcyA9IGNscy5nZXRfZmls
ZXMoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKQogICAgICAgICBpZiBub3QgZmlsZXM6Ci0gICAg
ICAgICAgICByZXR1cm4gY2xzLmFkZF9maWxlKGJ1aWxkZXIsIHRlc3RfdHlwZSwgYmxvYl9pbmZv
KQorICAgICAgICAgICAgcmV0dXJuIGNscy5hZGRfZmlsZShidWlsZGVyLCB0ZXN0X3R5cGUsIG5h
bWUsIGRhdGEpCiAKICAgICAgICAgZmlsZSA9IGZpbGVzWzBdCi0gICAgICAgIG9sZF9ibG9iX2lu
Zm8gPSBibG9ic3RvcmUuQmxvYkluZm8uZ2V0KGZpbGUuYmxvYl9rZXkpCi0gICAgICAgIGlmIG9s
ZF9ibG9iX2luZm86Ci0gICAgICAgICAgICBvbGRfYmxvYl9pbmZvLmRlbGV0ZSgpCi0KLSAgICAg
ICAgZmlsZS5idWlsZGVyID0gYnVpbGRlcgotICAgICAgICBmaWxlLnRlc3RfdHlwZSA9IHRlc3Rf
dHlwZQotICAgICAgICBmaWxlLm5hbWUgPSBibG9iX2luZm8uZmlsZW5hbWUKLSAgICAgICAgZmls
ZS5ibG9iX2tleSA9IHN0cihibG9iX2luZm8ua2V5KCkpCi0gICAgICAgIGZpbGUuZGF0ZSA9IGRh
dGV0aW1lLm5vdygpCi0gICAgICAgIGZpbGUucHV0KCkKKyAgICAgICAgaWYgbm90IGZpbGUuc2F2
ZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgbG9nZ2luZy5pbmZv
KAotICAgICAgICAgICAgIkZpbGUgcmVwbGFjZWQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVz
LCBuYW1lOiAlcywgYmxvYiBrZXk6ICVzLiIsCi0gICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5
cGUsIGZpbGUubmFtZSwgZmlsZS5ibG9iX2tleSkKKyAgICAgICAgICAgICJGaWxlIHJlcGxhY2Vk
LCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGRhdGEga2V5OiAlcy4iLAor
ICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlLm5hbWUsIHN0cihmaWxlLmRhdGFf
a2V5cykpCiAKICAgICAgICAgcmV0dXJuIGZpbGUKIAotICAgIGRlZiBfZGVsZXRlX2FsbChzZWxm
KToKLSAgICAgICAgaWYgc2VsZi5ibG9iX2tleToKLSAgICAgICAgICAgIGJsb2JfaW5mbyA9IGJs
b2JzdG9yZS5CbG9iSW5mby5nZXQoc2VsZi5ibG9iX2tleSkKLSAgICAgICAgICAgIGlmIGJsb2Jf
aW5mbzoKLSAgICAgICAgICAgICAgICBibG9iX2luZm8uZGVsZXRlKCkKKyAgICBkZWYgc2F2ZShz
ZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IHNlbGYuc2F2ZV9kYXRhKGRhdGEpOgorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5kYXRlID0gZGF0ZXRpbWUubm93KCkK
KyAgICAgICAgc2VsZi5wdXQoKQogCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2Rl
bGV0ZV9hbGwoc2VsZik6CisgICAgICAgIHNlbGYuZGVsZXRlX2RhdGEoKQogICAgICAgICBzZWxm
LmRlbGV0ZSgpCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24v
TElDRU5TRS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
aW1wbGVqc29uL0xJQ0VOU0UudHh0CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zaW1wbGVqc29uL0xJQ0VOU0UudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE5IEBACitDb3B5cmlnaHQgKGMpIDIwMDYgQm9iIElwcG9saXRvCisKK1Blcm1pc3Npb24gaXMg
aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh
IGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl
cyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0
cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2Us
IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu
ZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg
dG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVz
IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF
U1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENP
UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS
CitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U
SEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg
U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVq
c29uL0xJQ0VOU0UudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
SW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9SRUFETUUudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9S
RUFETUUudHh0CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
aW1wbGVqc29uL1JFQURNRS50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1VSTDog
aHR0cDovL3VuZGVmaW5lZC5vcmcvcHl0aG9uLyNzaW1wbGVqc29uCitWZXJzaW9uOiAxLjcuMwor
TGljZW5zZTogTUlUCitMaWNlbnNlIEZpbGU6IExJQ0VOU0UudHh0CisKK0Rlc2NyaXB0aW9uOgor
c2ltcGxlanNvbiBpcyBhIEpTT04gZW5jb2RlciBhbmQgZGVjb2RlciBmb3IgUHl0aG9uLgorCisK
K0xvY2FsIE1vZGlmaWNhdGlvbnM6CitSZW1vdmVkIHVuaXQgdGVzdHMgZnJvbSBjdXJyZW50IGRp
c3RyaWJ1dGlvbi4KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc2ltcGxlanNvbi9SRUFETUUudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRh
YmxlCiAgICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNv
bi9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVy
L3NpbXBsZWpzb24vX19pbml0X18ucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9UZXN0
UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vX19pbml0X18ucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjg3IEBACityIiIiCitBIHNpbXBsZSwgZmFzdCwgZXh0ZW5zaWJsZSBKU09OIGVuY29kZXIg
YW5kIGRlY29kZXIKKworSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIDxodHRwOi8v
anNvbi5vcmc+IGlzIGEgc3Vic2V0IG9mCitKYXZhU2NyaXB0IHN5bnRheCAoRUNNQS0yNjIgM3Jk
IGVkaXRpb24pIHVzZWQgYXMgYSBsaWdodHdlaWdodCBkYXRhCitpbnRlcmNoYW5nZSBmb3JtYXQu
CisKK3NpbXBsZWpzb24gZXhwb3NlcyBhbiBBUEkgZmFtaWxpYXIgdG8gdXNlcyBvZiB0aGUgc3Rh
bmRhcmQgbGlicmFyeQorbWFyc2hhbCBhbmQgcGlja2xlIG1vZHVsZXMuCisKK0VuY29kaW5nIGJh
c2ljIFB5dGhvbiBvYmplY3QgaGllcmFyY2hpZXM6OgorICAgIAorICAgID4+PiBpbXBvcnQgc2lt
cGxlanNvbgorICAgID4+PiBzaW1wbGVqc29uLmR1bXBzKFsnZm9vJywgeydiYXInOiAoJ2Jheics
IE5vbmUsIDEuMCwgMil9XSkKKyAgICAnWyJmb28iLCB7ImJhciI6IFsiYmF6IiwgbnVsbCwgMS4w
LCAyXX1dJworICAgID4+PiBwcmludCBzaW1wbGVqc29uLmR1bXBzKCJcImZvb1xiYXIiKQorICAg
ICJcImZvb1xiYXIiCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHModSdcdTEyMzQnKQor
ICAgICJcdTEyMzQiCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHMoJ1xcJykKKyAgICAi
XFwiCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHMoeyJjIjogMCwgImIiOiAwLCAiYSI6
IDB9LCBzb3J0X2tleXM9VHJ1ZSkKKyAgICB7ImEiOiAwLCAiYiI6IDAsICJjIjogMH0KKyAgICA+
Pj4gZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gaW8gPSBTdHJpbmdJTygp
CisgICAgPj4+IHNpbXBsZWpzb24uZHVtcChbJ3N0cmVhbWluZyBBUEknXSwgaW8pCisgICAgPj4+
IGlvLmdldHZhbHVlKCkKKyAgICAnWyJzdHJlYW1pbmcgQVBJIl0nCisKK0NvbXBhY3QgZW5jb2Rp
bmc6OgorCisgICAgPj4+IGltcG9ydCBzaW1wbGVqc29uCisgICAgPj4+IHNpbXBsZWpzb24uZHVt
cHMoWzEsMiwzLHsnNCc6IDUsICc2JzogN31dLCBzZXBhcmF0b3JzPSgnLCcsJzonKSkKKyAgICAn
WzEsMiwzLHsiNCI6NSwiNiI6N31dJworCitQcmV0dHkgcHJpbnRpbmc6OgorCisgICAgPj4+IGlt
cG9ydCBzaW1wbGVqc29uCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHMoeyc0JzogNSwg
JzYnOiA3fSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KQorICAgIHsKKyAgICAgICAgIjQiOiA1
LCAKKyAgICAgICAgIjYiOiA3CisgICAgfQorCitEZWNvZGluZyBKU09OOjoKKyAgICAKKyAgICA+
Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gc2ltcGxlanNvbi5sb2FkcygnWyJmb28iLCB7
ImJhciI6WyJiYXoiLCBudWxsLCAxLjAsIDJdfV0nKQorICAgIFt1J2ZvbycsIHt1J2Jhcic6IFt1
J2JheicsIE5vbmUsIDEuMCwgMl19XQorICAgID4+PiBzaW1wbGVqc29uLmxvYWRzKCciXFwiZm9v
XFxiYXIiJykKKyAgICB1JyJmb29ceDA4YXInCisgICAgPj4+IGZyb20gU3RyaW5nSU8gaW1wb3J0
IFN0cmluZ0lPCisgICAgPj4+IGlvID0gU3RyaW5nSU8oJ1sic3RyZWFtaW5nIEFQSSJdJykKKyAg
ICA+Pj4gc2ltcGxlanNvbi5sb2FkKGlvKQorICAgIFt1J3N0cmVhbWluZyBBUEknXQorCitTcGVj
aWFsaXppbmcgSlNPTiBvYmplY3QgZGVjb2Rpbmc6OgorCisgICAgPj4+IGltcG9ydCBzaW1wbGVq
c29uCisgICAgPj4+IGRlZiBhc19jb21wbGV4KGRjdCk6CisgICAgLi4uICAgICBpZiAnX19jb21w
bGV4X18nIGluIGRjdDoKKyAgICAuLi4gICAgICAgICByZXR1cm4gY29tcGxleChkY3RbJ3JlYWwn
XSwgZGN0WydpbWFnJ10pCisgICAgLi4uICAgICByZXR1cm4gZGN0CisgICAgLi4uIAorICAgID4+
PiBzaW1wbGVqc29uLmxvYWRzKCd7Il9fY29tcGxleF9fIjogdHJ1ZSwgInJlYWwiOiAxLCAiaW1h
ZyI6IDJ9JywKKyAgICAuLi4gICAgIG9iamVjdF9ob29rPWFzX2NvbXBsZXgpCisgICAgKDErMmop
CisKK0V4dGVuZGluZyBKU09ORW5jb2Rlcjo6CisgICAgCisgICAgPj4+IGltcG9ydCBzaW1wbGVq
c29uCisgICAgPj4+IGNsYXNzIENvbXBsZXhFbmNvZGVyKHNpbXBsZWpzb24uSlNPTkVuY29kZXIp
OgorICAgIC4uLiAgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAuLi4gICAgICAgICBp
ZiBpc2luc3RhbmNlKG9iaiwgY29tcGxleCk6CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBb
b2JqLnJlYWwsIG9iai5pbWFnXQorICAgIC4uLiAgICAgICAgIHJldHVybiBzaW1wbGVqc29uLkpT
T05FbmNvZGVyLmRlZmF1bHQoc2VsZiwgb2JqKQorICAgIC4uLiAKKyAgICA+Pj4gZHVtcHMoMiAr
IDFqLCBjbHM9Q29tcGxleEVuY29kZXIpCisgICAgJ1syLjAsIDEuMF0nCisgICAgPj4+IENvbXBs
ZXhFbmNvZGVyKCkuZW5jb2RlKDIgKyAxaikKKyAgICAnWzIuMCwgMS4wXScKKyAgICA+Pj4gbGlz
dChDb21wbGV4RW5jb2RlcigpLml0ZXJlbmNvZGUoMiArIDFqKSkKKyAgICBbJ1snLCAnMi4wJywg
JywgJywgJzEuMCcsICddJ10KKyAgICAKKworTm90ZSB0aGF0IHRoZSBKU09OIHByb2R1Y2VkIGJ5
IHRoaXMgbW9kdWxlJ3MgZGVmYXVsdCBzZXR0aW5ncworaXMgYSBzdWJzZXQgb2YgWUFNTCwgc28g
aXQgbWF5IGJlIHVzZWQgYXMgYSBzZXJpYWxpemVyIGZvciB0aGF0IGFzIHdlbGwuCisiIiIKK19f
dmVyc2lvbl9fID0gJzEuNy4zJworX19hbGxfXyA9IFsKKyAgICAnZHVtcCcsICdkdW1wcycsICds
b2FkJywgJ2xvYWRzJywKKyAgICAnSlNPTkRlY29kZXInLCAnSlNPTkVuY29kZXInLAorXQorCitm
cm9tIGRlY29kZXIgaW1wb3J0IEpTT05EZWNvZGVyCitmcm9tIGVuY29kZXIgaW1wb3J0IEpTT05F
bmNvZGVyCisKK19kZWZhdWx0X2VuY29kZXIgPSBKU09ORW5jb2RlcigKKyAgICBza2lwa2V5cz1G
YWxzZSwKKyAgICBlbnN1cmVfYXNjaWk9VHJ1ZSwKKyAgICBjaGVja19jaXJjdWxhcj1UcnVlLAor
ICAgIGFsbG93X25hbj1UcnVlLAorICAgIGluZGVudD1Ob25lLAorICAgIHNlcGFyYXRvcnM9Tm9u
ZSwKKyAgICBlbmNvZGluZz0ndXRmLTgnCispCisKK2RlZiBkdW1wKG9iaiwgZnAsIHNraXBrZXlz
PUZhbHNlLCBlbnN1cmVfYXNjaWk9VHJ1ZSwgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwKKyAgICAgICAg
YWxsb3dfbmFuPVRydWUsIGNscz1Ob25lLCBpbmRlbnQ9Tm9uZSwgc2VwYXJhdG9ycz1Ob25lLAor
ICAgICAgICBlbmNvZGluZz0ndXRmLTgnLCAqKmt3KToKKyAgICAiIiIKKyAgICBTZXJpYWxpemUg
YGBvYmpgYCBhcyBhIEpTT04gZm9ybWF0dGVkIHN0cmVhbSB0byBgYGZwYGAgKGEKKyAgICBgYC53
cml0ZSgpYGAtc3VwcG9ydGluZyBmaWxlLWxpa2Ugb2JqZWN0KS4KKworICAgIElmIGBgc2tpcGtl
eXNgYCBpcyBgYFRydWVgYCB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90IGJhc2ljIHR5
cGVzCisgICAgKGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGludGBgLCBgYGxvbmdgYCwgYGBmbG9h
dGBgLCBgYGJvb2xgYCwgYGBOb25lYGApIAorICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0ZWFkIG9m
IHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgorCisgICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBg
YEZhbHNlYGAsIHRoZW4gdGhlIHNvbWUgY2h1bmtzIHdyaXR0ZW4gdG8gYGBmcGBgCisgICAgbWF5
IGJlIGBgdW5pY29kZWBgIGluc3RhbmNlcywgc3ViamVjdCB0byBub3JtYWwgUHl0aG9uIGBgc3Ry
YGAgdG8KKyAgICBgYHVuaWNvZGVgYCBjb2VyY2lvbiBydWxlcy4gVW5sZXNzIGBgZnAud3JpdGUo
KWBgIGV4cGxpY2l0bHkKKyAgICB1bmRlcnN0YW5kcyBgYHVuaWNvZGVgYCAoYXMgaW4gYGBjb2Rl
Y3MuZ2V0d3JpdGVyKClgYCkgdGhpcyBpcyBsaWtlbHkKKyAgICB0byBjYXVzZSBhbiBlcnJvci4K
KworICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIGNpcmN1
bGFyIHJlZmVyZW5jZSBjaGVjaworICAgIGZvciBjb250YWluZXIgdHlwZXMgd2lsbCBiZSBza2lw
cGVkIGFuZCBhIGNpcmN1bGFyIHJlZmVyZW5jZSB3aWxsCisgICAgcmVzdWx0IGluIGFuIGBgT3Zl
cmZsb3dFcnJvcmBgIChvciB3b3JzZSkuCisKKyAgICBJZiBgYGFsbG93X25hbmBgIGlzIGBgRmFs
c2VgYCwgdGhlbiBpdCB3aWxsIGJlIGEgYGBWYWx1ZUVycm9yYGAgdG8KKyAgICBzZXJpYWxpemUg
b3V0IG9mIHJhbmdlIGBgZmxvYXRgYCB2YWx1ZXMgKGBgbmFuYGAsIGBgaW5mYGAsIGBgLWluZmBg
KQorICAgIGluIHN0cmljdCBjb21wbGlhbmNlIG9mIHRoZSBKU09OIHNwZWNpZmljYXRpb24sIGlu
c3RlYWQgb2YgdXNpbmcgdGhlCisgICAgSmF2YVNjcmlwdCBlcXVpdmFsZW50cyAoYGBOYU5gYCwg
YGBJbmZpbml0eWBgLCBgYC1JbmZpbml0eWBgKS4KKworICAgIElmIGBgaW5kZW50YGAgaXMgYSBu
b24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZCBvYmplY3QK
KyAgICBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZl
bC4gQW4gaW5kZW50IGxldmVsCisgICAgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBg
YE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgorCisgICAgSWYgYGBz
ZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1
cGxlCisgICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgn
LCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCisgICAgYGAoJywnLCAnOicpYGAgaXMgdGhlIG1vc3Qg
Y29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorCisgICAgYGBlbmNvZGluZ2BgIGlzIHRoZSBj
aGFyYWN0ZXIgZW5jb2RpbmcgZm9yIHN0ciBpbnN0YW5jZXMsIGRlZmF1bHQgaXMgVVRGLTguCisK
KyAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORW5jb2RlcmBgIHN1YmNsYXNzIChlLmcuIG9uZSB0
aGF0IG92ZXJyaWRlcyB0aGUKKyAgICBgYC5kZWZhdWx0KClgYCBtZXRob2QgdG8gc2VyaWFsaXpl
IGFkZGl0aW9uYWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGgKKyAgICB0aGUgYGBjbHNgYCBrd2Fy
Zy4KKyAgICAiIiIKKyAgICAjIGNhY2hlZCBlbmNvZGVyCisgICAgaWYgKHNraXBrZXlzIGlzIEZh
bHNlIGFuZCBlbnN1cmVfYXNjaWkgaXMgVHJ1ZSBhbmQKKyAgICAgICAgY2hlY2tfY2lyY3VsYXIg
aXMgVHJ1ZSBhbmQgYWxsb3dfbmFuIGlzIFRydWUgYW5kCisgICAgICAgIGNscyBpcyBOb25lIGFu
ZCBpbmRlbnQgaXMgTm9uZSBhbmQgc2VwYXJhdG9ycyBpcyBOb25lIGFuZAorICAgICAgICBlbmNv
ZGluZyA9PSAndXRmLTgnIGFuZCBub3Qga3cpOgorICAgICAgICBpdGVyYWJsZSA9IF9kZWZhdWx0
X2VuY29kZXIuaXRlcmVuY29kZShvYmopCisgICAgZWxzZToKKyAgICAgICAgaWYgY2xzIGlzIE5v
bmU6CisgICAgICAgICAgICBjbHMgPSBKU09ORW5jb2RlcgorICAgICAgICBpdGVyYWJsZSA9IGNs
cyhza2lwa2V5cz1za2lwa2V5cywgZW5zdXJlX2FzY2lpPWVuc3VyZV9hc2NpaSwKKyAgICAgICAg
ICAgIGNoZWNrX2NpcmN1bGFyPWNoZWNrX2NpcmN1bGFyLCBhbGxvd19uYW49YWxsb3dfbmFuLCBp
bmRlbnQ9aW5kZW50LAorICAgICAgICAgICAgc2VwYXJhdG9ycz1zZXBhcmF0b3JzLCBlbmNvZGlu
Zz1lbmNvZGluZywgKiprdykuaXRlcmVuY29kZShvYmopCisgICAgIyBjb3VsZCBhY2NlbGVyYXRl
IHdpdGggd3JpdGVsaW5lcyBpbiBzb21lIHZlcnNpb25zIG9mIFB5dGhvbiwgYXQKKyAgICAjIGEg
ZGVidWdnYWJpbGl0eSBjb3N0CisgICAgZm9yIGNodW5rIGluIGl0ZXJhYmxlOgorICAgICAgICBm
cC53cml0ZShjaHVuaykKKworCitkZWYgZHVtcHMob2JqLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJl
X2FzY2lpPVRydWUsIGNoZWNrX2NpcmN1bGFyPVRydWUsCisgICAgICAgIGFsbG93X25hbj1UcnVl
LCBjbHM9Tm9uZSwgaW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9uZSwKKyAgICAgICAgZW5jb2Rp
bmc9J3V0Zi04JywgKiprdyk6CisgICAgIiIiCisgICAgU2VyaWFsaXplIGBgb2JqYGAgdG8gYSBK
U09OIGZvcm1hdHRlZCBgYHN0cmBgLgorCisgICAgSWYgYGBza2lwa2V5c2BgIGlzIGBgVHJ1ZWBg
IHRoZW4gYGBkaWN0YGAga2V5cyB0aGF0IGFyZSBub3QgYmFzaWMgdHlwZXMKKyAgICAoYGBzdHJg
YCwgYGB1bmljb2RlYGAsIGBgaW50YGAsIGBgbG9uZ2BgLCBgYGZsb2F0YGAsIGBgYm9vbGBgLCBg
YE5vbmVgYCkgCisgICAgd2lsbCBiZSBza2lwcGVkIGluc3RlYWQgb2YgcmFpc2luZyBhIGBgVHlw
ZUVycm9yYGAuCisKKyAgICBJZiBgYGVuc3VyZV9hc2NpaWBgIGlzIGBgRmFsc2VgYCwgdGhlbiB0
aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYQorICAgIGBgdW5pY29kZWBgIGluc3RhbmNlIHN1Ympl
Y3QgdG8gbm9ybWFsIFB5dGhvbiBgYHN0cmBgIHRvIGBgdW5pY29kZWBgCisgICAgY29lcmNpb24g
cnVsZXMgaW5zdGVhZCBvZiBiZWluZyBlc2NhcGVkIHRvIGFuIEFTQ0lJIGBgc3RyYGAuCisKKyAg
ICBJZiBgYGNoZWNrX2NpcmN1bGFyYGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBjaXJjdWxhciBy
ZWZlcmVuY2UgY2hlY2sKKyAgICBmb3IgY29udGFpbmVyIHR5cGVzIHdpbGwgYmUgc2tpcHBlZCBh
bmQgYSBjaXJjdWxhciByZWZlcmVuY2Ugd2lsbAorICAgIHJlc3VsdCBpbiBhbiBgYE92ZXJmbG93
RXJyb3JgYCAob3Igd29yc2UpLgorCisgICAgSWYgYGBhbGxvd19uYW5gYCBpcyBgYEZhbHNlYGAs
IHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBgIHRvCisgICAgc2VyaWFsaXplIG91dCBv
ZiByYW5nZSBgYGZsb2F0YGAgdmFsdWVzIChgYG5hbmBgLCBgYGluZmBgLCBgYC1pbmZgYCkgaW4K
KyAgICBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFk
IG9mIHVzaW5nIHRoZQorICAgIEphdmFTY3JpcHQgZXF1aXZhbGVudHMgKGBgTmFOYGAsIGBgSW5m
aW5pdHlgYCwgYGAtSW5maW5pdHlgYCkuCisKKyAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5l
Z2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKKyAgICBvYmplY3Qg
bWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFu
IGluZGVudAorICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25l
YGAgaXMgdGhlIG1vc3QgY29tcGFjdAorICAgIHJlcHJlc2VudGF0aW9uLgorCisgICAgSWYgYGBz
ZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1
cGxlCisgICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgn
LCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCisgICAgYGAoJywnLCAnOicpYGAgaXMgdGhlIG1vc3Qg
Y29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorCisgICAgYGBlbmNvZGluZ2BgIGlzIHRoZSBj
aGFyYWN0ZXIgZW5jb2RpbmcgZm9yIHN0ciBpbnN0YW5jZXMsIGRlZmF1bHQgaXMgVVRGLTguCisK
KyAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORW5jb2RlcmBgIHN1YmNsYXNzIChlLmcuIG9uZSB0
aGF0IG92ZXJyaWRlcyB0aGUKKyAgICBgYC5kZWZhdWx0KClgYCBtZXRob2QgdG8gc2VyaWFsaXpl
IGFkZGl0aW9uYWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGgKKyAgICB0aGUgYGBjbHNgYCBrd2Fy
Zy4KKyAgICAiIiIKKyAgICAjIGNhY2hlZCBlbmNvZGVyCisgICAgaWYgKHNraXBrZXlzIGlzIEZh
bHNlIGFuZCBlbnN1cmVfYXNjaWkgaXMgVHJ1ZSBhbmQKKyAgICAgICAgY2hlY2tfY2lyY3VsYXIg
aXMgVHJ1ZSBhbmQgYWxsb3dfbmFuIGlzIFRydWUgYW5kCisgICAgICAgIGNscyBpcyBOb25lIGFu
ZCBpbmRlbnQgaXMgTm9uZSBhbmQgc2VwYXJhdG9ycyBpcyBOb25lIGFuZAorICAgICAgICBlbmNv
ZGluZyA9PSAndXRmLTgnIGFuZCBub3Qga3cpOgorICAgICAgICByZXR1cm4gX2RlZmF1bHRfZW5j
b2Rlci5lbmNvZGUob2JqKQorICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICBjbHMgPSBKU09O
RW5jb2RlcgorICAgIHJldHVybiBjbHMoCisgICAgICAgIHNraXBrZXlzPXNraXBrZXlzLCBlbnN1
cmVfYXNjaWk9ZW5zdXJlX2FzY2lpLAorICAgICAgICBjaGVja19jaXJjdWxhcj1jaGVja19jaXJj
dWxhciwgYWxsb3dfbmFuPWFsbG93X25hbiwgaW5kZW50PWluZGVudCwKKyAgICAgICAgc2VwYXJh
dG9ycz1zZXBhcmF0b3JzLCBlbmNvZGluZz1lbmNvZGluZywKKyAgICAgICAgKiprdykuZW5jb2Rl
KG9iaikKKworX2RlZmF1bHRfZGVjb2RlciA9IEpTT05EZWNvZGVyKGVuY29kaW5nPU5vbmUsIG9i
amVjdF9ob29rPU5vbmUpCisKK2RlZiBsb2FkKGZwLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwg
b2JqZWN0X2hvb2s9Tm9uZSwgKiprdyk6CisgICAgIiIiCisgICAgRGVzZXJpYWxpemUgYGBmcGBg
IChhIGBgLnJlYWQoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCBjb250YWluaW5nCisg
ICAgYSBKU09OIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCisKKyAgICBJZiB0aGUgY29u
dGVudHMgb2YgYGBmcGBgIGlzIGVuY29kZWQgd2l0aCBhbiBBU0NJSSBiYXNlZCBlbmNvZGluZyBv
dGhlcgorICAgIHRoYW4gdXRmLTggKGUuZy4gbGF0aW4tMSksIHRoZW4gYW4gYXBwcm9wcmlhdGUg
YGBlbmNvZGluZ2BgIG5hbWUgbXVzdAorICAgIGJlIHNwZWNpZmllZC4gRW5jb2RpbmdzIHRoYXQg
YXJlIG5vdCBBU0NJSSBiYXNlZCAoc3VjaCBhcyBVQ1MtMikgYXJlCisgICAgbm90IGFsbG93ZWQs
IGFuZCBzaG91bGQgYmUgd3JhcHBlZCB3aXRoCisgICAgYGBjb2RlY3MuZ2V0cmVhZGVyKGZwKShl
bmNvZGluZylgYCwgb3Igc2ltcGx5IGRlY29kZWQgdG8gYSBgYHVuaWNvZGVgYAorICAgIG9iamVj
dCBhbmQgcGFzc2VkIHRvIGBgbG9hZHMoKWBgCisKKyAgICBgYG9iamVjdF9ob29rYGAgaXMgYW4g
b3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZQorICAgIHJlc3Vs
dCBvZiBhbnkgb2JqZWN0IGxpdGVyYWwgZGVjb2RlIChhIGBgZGljdGBgKS4gVGhlIHJldHVybiB2
YWx1ZSBvZgorICAgIGBgb2JqZWN0X2hvb2tgYCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUg
YGBkaWN0YGAuIFRoaXMgZmVhdHVyZQorICAgIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0
b20gZGVjb2RlcnMgKGUuZy4gSlNPTi1SUEMgY2xhc3MgaGludGluZykuCisgICAgCisgICAgVG8g
dXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBpdCB3aXRoIHRo
ZSBgYGNsc2BgCisgICAga3dhcmcuCisgICAgIiIiCisgICAgcmV0dXJuIGxvYWRzKGZwLnJlYWQo
KSwKKyAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGNscz1jbHMsIG9iamVjdF9ob29rPW9iamVj
dF9ob29rLCAqKmt3KQorCitkZWYgbG9hZHMocywgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUsIG9i
amVjdF9ob29rPU5vbmUsICoqa3cpOgorICAgICIiIgorICAgIERlc2VyaWFsaXplIGBgc2BgIChh
IGBgc3RyYGAgb3IgYGB1bmljb2RlYGAgaW5zdGFuY2UgY29udGFpbmluZyBhIEpTT04KKyAgICBk
b2N1bWVudCkgdG8gYSBQeXRob24gb2JqZWN0LgorCisgICAgSWYgYGBzYGAgaXMgYSBgYHN0cmBg
IGluc3RhbmNlIGFuZCBpcyBlbmNvZGVkIHdpdGggYW4gQVNDSUkgYmFzZWQgZW5jb2RpbmcKKyAg
ICBvdGhlciB0aGFuIHV0Zi04IChlLmcuIGxhdGluLTEpIHRoZW4gYW4gYXBwcm9wcmlhdGUgYGBl
bmNvZGluZ2BgIG5hbWUKKyAgICBtdXN0IGJlIHNwZWNpZmllZC4gRW5jb2RpbmdzIHRoYXQgYXJl
IG5vdCBBU0NJSSBiYXNlZCAoc3VjaCBhcyBVQ1MtMikKKyAgICBhcmUgbm90IGFsbG93ZWQgYW5k
IHNob3VsZCBiZSBkZWNvZGVkIHRvIGBgdW5pY29kZWBgIGZpcnN0LgorCisgICAgYGBvYmplY3Rf
aG9va2BgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0
aGUKKyAgICByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRlY29kZSAoYSBgYGRpY3RgYCku
IFRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICBgYG9iamVjdF9ob29rYGAgd2lsbCBiZSB1c2VkIGlu
c3RlYWQgb2YgdGhlIGBgZGljdGBgLiBUaGlzIGZlYXR1cmUKKyAgICBjYW4gYmUgdXNlZCB0byBp
bXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgor
CisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBp
dCB3aXRoIHRoZSBgYGNsc2BgCisgICAga3dhcmcuCisgICAgIiIiCisgICAgaWYgY2xzIGlzIE5v
bmUgYW5kIGVuY29kaW5nIGlzIE5vbmUgYW5kIG9iamVjdF9ob29rIGlzIE5vbmUgYW5kIG5vdCBr
dzoKKyAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2RlY29kZXIuZGVjb2RlKHMpCisgICAgaWYgY2xz
IGlzIE5vbmU6CisgICAgICAgIGNscyA9IEpTT05EZWNvZGVyCisgICAgaWYgb2JqZWN0X2hvb2sg
aXMgbm90IE5vbmU6CisgICAgICAgIGt3WydvYmplY3RfaG9vayddID0gb2JqZWN0X2hvb2sKKyAg
ICByZXR1cm4gY2xzKGVuY29kaW5nPWVuY29kaW5nLCAqKmt3KS5kZWNvZGUocykKKworZGVmIHJl
YWQocyk6CisgICAgIiIiCisgICAganNvbi1weSBBUEkgY29tcGF0aWJpbGl0eSBob29rLiBVc2Ug
bG9hZHMocykgaW5zdGVhZC4KKyAgICAiIiIKKyAgICBpbXBvcnQgd2FybmluZ3MKKyAgICB3YXJu
aW5ncy53YXJuKCJzaW1wbGVqc29uLmxvYWRzKHMpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Yg
cmVhZChzKSIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICByZXR1cm4gbG9hZHMo
cykKKworZGVmIHdyaXRlKG9iaik6CisgICAgIiIiCisgICAganNvbi1weSBBUEkgY29tcGF0aWJp
bGl0eSBob29rLiBVc2UgZHVtcHMocykgaW5zdGVhZC4KKyAgICAiIiIKKyAgICBpbXBvcnQgd2Fy
bmluZ3MKKyAgICB3YXJuaW5ncy53YXJuKCJzaW1wbGVqc29uLmR1bXBzKHMpIHNob3VsZCBiZSB1
c2VkIGluc3RlYWQgb2Ygd3JpdGUocykiLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisg
ICAgcmV0dXJuIGR1bXBzKG9iaikKKworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29s
cy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vX19pbml0X18ucHkKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zaW1wbGVqc29uL19zcGVlZHVwcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9fc3BlZWR1cHMuYwkocmV2aXNpb24gMCkKKysrIFdl
YktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9fc3BlZWR1cHMuYwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMTUgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpZiBQWV9WRVJT
SU9OX0hFWCA8IDB4MDIwNTAwMDAgJiYgIWRlZmluZWQoUFlfU1NJWkVfVF9NSU4pCit0eXBlZGVm
IGludCBQeV9zc2l6ZV90OworI2RlZmluZSBQWV9TU0laRV9UX01BWCBJTlRfTUFYCisjZGVmaW5l
IFBZX1NTSVpFX1RfTUlOIElOVF9NSU4KKyNlbmRpZgorCitzdGF0aWMgUHlfc3NpemVfdAorYXNj
aWlfZXNjYXBlX2NoYXIoUHlfVU5JQ09ERSBjLCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hh
cnMpOworc3RhdGljIFB5T2JqZWN0ICoKK2FzY2lpX2VzY2FwZV91bmljb2RlKFB5T2JqZWN0ICpw
eXN0cik7CitzdGF0aWMgUHlPYmplY3QgKgorYXNjaWlfZXNjYXBlX3N0cihQeU9iamVjdCAqcHlz
dHIpOworc3RhdGljIFB5T2JqZWN0ICoKK3B5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKFB5T2Jq
ZWN0KiBzZWxmIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSwgUHlPYmplY3QgKnB5c3RyKTsK
K3ZvaWQgaW5pdF9zcGVlZHVwcyh2b2lkKTsKKworI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAn
ICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICcvJyAmJiBjICE9ICciJykKKworI2Rl
ZmluZSBNSU5fRVhQQU5TSU9OIDYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyNkZWZpbmUgTUFY
X0VYUEFOU0lPTiAoMiAqIE1JTl9FWFBBTlNJT04pCisjZWxzZQorI2RlZmluZSBNQVhfRVhQQU5T
SU9OIE1JTl9FWFBBTlNJT04KKyNlbmRpZgorCitzdGF0aWMgUHlfc3NpemVfdAorYXNjaWlfZXNj
YXBlX2NoYXIoUHlfVU5JQ09ERSBjLCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpIHsK
KyAgICBQeV9VTklDT0RFIHg7CisgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsKKyAgICBzd2l0
Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnLyc6IG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7IGJy
ZWFrOworICAgICAgICBjYXNlICdcXCc6IG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7IGJyZWFr
OworICAgICAgICBjYXNlICciJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJ1xiJzogb3V0cHV0W2NoYXJzKytdID0gJ2InOyBicmVhazsKKyAgICAgICAg
Y2FzZSAnXGYnOiBvdXRwdXRbY2hhcnMrK10gPSAnZic7IGJyZWFrOworICAgICAgICBjYXNlICdc
bic6IG91dHB1dFtjaGFycysrXSA9ICduJzsgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xyJzogb3V0
cHV0W2NoYXJzKytdID0gJ3InOyBicmVhazsKKyAgICAgICAgY2FzZSAnXHQnOiBvdXRwdXRbY2hh
cnMrK10gPSAndCc7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorI2lmZGVmIFB5X1VOSUNPREVf
V0lERQorICAgICAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgeworICAgICAgICAgICAgICAgIC8q
IFVURi0xNiBzdXJyb2dhdGUgcGFpciAqLworICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgdiA9
IGMgLSAweDEwMDAwOworICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAoKHYgPj4gMTApICYg
MHgzZmYpOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKKyAgICAgICAg
ICAgICAgICB4ID0gKGMgJiAweGYwMDApID4+IDEyOworICAgICAgICAgICAgICAgIG91dHB1dFtj
aGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAg
ICAgICAgIHggPSAoYyAmIDB4MGYwMCkgPj4gODsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hh
cnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAg
ICAgICB4ID0gKGMgJiAweDAwZjApID4+IDQ7CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJz
KytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7CisgICAgICAgICAgICAg
ICAgeCA9IChjICYgMHgwMDBmKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAo
eCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgICAgICBjID0g
MHhkYzAwIHwgKHYgJiAweDNmZik7CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0g
J1xcJzsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytd
ID0gJ3UnOworICAgICAgICAgICAgeCA9IChjICYgMHhmMDAwKSA+PiAxMjsKKyAgICAgICAgICAg
IG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOwor
ICAgICAgICAgICAgeCA9IChjICYgMHgwZjAwKSA+PiA4OworICAgICAgICAgICAgb3V0cHV0W2No
YXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7CisgICAgICAgICAg
ICB4ID0gKGMgJiAweDAwZjApID4+IDQ7CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAo
eCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgIHggPSAoYyAm
IDB4MDAwZik7CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyAr
IHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICB9CisgICAgcmV0dXJuIGNoYXJzOworfQorCitzdGF0
aWMgUHlPYmplY3QgKgorYXNjaWlfZXNjYXBlX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyKSB7Cisg
ICAgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgaW5wdXRfY2hhcnM7CisgICAgUHlfc3Np
emVfdCBvdXRwdXRfc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGNoYXJzOworICAgIFB5T2JqZWN0ICpy
dmFsOworICAgIGNoYXIgKm91dHB1dDsKKyAgICBQeV9VTklDT0RFICppbnB1dF91bmljb2RlOwor
CisgICAgaW5wdXRfY2hhcnMgPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpOworICAgIGlucHV0
X3VuaWNvZGUgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7CisgICAgLyogT25lIGNoYXIg
aW5wdXQgY2FuIGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3RpbWF0ZSA0IG9mIHRoZXNlICov
CisgICAgb3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJz
OworICAgIHJ2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRwdXRfc2l6
ZSk7CisgICAgaWYgKHJ2YWwgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9
CisgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOworICAgIGNoYXJzID0gMDsK
KyAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7CisgICAgZm9yIChpID0gMDsgaSA8IGlucHV0X2No
YXJzOyBpKyspIHsKKyAgICAgICAgUHlfVU5JQ09ERSBjID0gaW5wdXRfdW5pY29kZVtpXTsKKyAg
ICAgICAgaWYgKFNfQ0hBUihjKSkgeworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKGNo
YXIpYzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJzID0gYXNjaWlfZXNjYXBl
X2NoYXIoYywgb3V0cHV0LCBjaGFycyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG91dHB1dF9z
aXplIC0gY2hhcnMgPCAoMSArIE1BWF9FWFBBTlNJT04pKSB7CisgICAgICAgICAgICAvKiBUaGVy
ZSdzIG1vcmUgdGhhbiBmb3VyLCBzbyBsZXQncyByZXNpemUgYnkgYSBsb3QgKi8KKyAgICAgICAg
ICAgIG91dHB1dF9zaXplICo9IDI7CisgICAgICAgICAgICAvKiBUaGlzIGlzIGFuIHVwcGVyIGJv
dW5kICovCisgICAgICAgICAgICBpZiAob3V0cHV0X3NpemUgPiAyICsgKGlucHV0X2NoYXJzICog
TUFYX0VYUEFOU0lPTikpIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IDIgKyAoaW5w
dXRfY2hhcnMgKiBNQVhfRVhQQU5TSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChfUHlTdHJpbmdfUmVzaXplKCZydmFsLCBvdXRwdXRfc2l6ZSkgPT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHB1dCA9
IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBvdXRwdXRb
Y2hhcnMrK10gPSAnIic7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2YWwsIGNoYXJzKSA9
PSAtMSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJ2YWw7Cit9
CisKK3N0YXRpYyBQeU9iamVjdCAqCithc2NpaV9lc2NhcGVfc3RyKFB5T2JqZWN0ICpweXN0cikg
eworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGlucHV0X2NoYXJzOworICAgIFB5
X3NzaXplX3Qgb3V0cHV0X3NpemU7CisgICAgUHlfc3NpemVfdCBjaGFyczsKKyAgICBQeU9iamVj
dCAqcnZhbDsKKyAgICBjaGFyICpvdXRwdXQ7CisgICAgY2hhciAqaW5wdXRfc3RyOworCisgICAg
aW5wdXRfY2hhcnMgPSBQeVN0cmluZ19HRVRfU0laRShweXN0cik7CisgICAgaW5wdXRfc3RyID0g
UHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKKyAgICAvKiBPbmUgY2hhciBpbnB1dCBjYW4gYmUg
dXAgdG8gNiBjaGFycyBvdXRwdXQsIGVzdGltYXRlIDQgb2YgdGhlc2UgKi8KKyAgICBvdXRwdXRf
c2l6ZSA9IDIgKyAoTUlOX0VYUEFOU0lPTiAqIDQpICsgaW5wdXRfY2hhcnM7CisgICAgcnZhbCA9
IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dHB1dF9zaXplKTsKKyAgICBpZiAo
cnZhbCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvdXRwdXQg
PSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7CisgICAgY2hhcnMgPSAwOworICAgIG91dHB1dFtj
aGFycysrXSA9ICciJzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfY2hhcnM7IGkrKykgewor
ICAgICAgICBQeV9VTklDT0RFIGMgPSAoUHlfVU5JQ09ERSlpbnB1dF9zdHJbaV07CisgICAgICAg
IGlmIChTX0NIQVIoYykpIHsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7
CisgICAgICAgIH0gZWxzZSBpZiAoYyA+IDB4N0YpIHsKKyAgICAgICAgICAgIC8qIFdlIGhpdCBh
IG5vbi1BU0NJSSBjaGFyYWN0ZXIsIGJhaWwgdG8gdW5pY29kZSBtb2RlICovCisgICAgICAgICAg
ICBQeU9iamVjdCAqdW5pOworICAgICAgICAgICAgUHlfREVDUkVGKHJ2YWwpOworICAgICAgICAg
ICAgdW5pID0gUHlVbmljb2RlX0RlY29kZVVURjgoaW5wdXRfc3RyLCBpbnB1dF9jaGFycywgInN0
cmljdCIpOworICAgICAgICAgICAgaWYgKHVuaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydmFsID0gYXNjaWlfZXNj
YXBlX3VuaWNvZGUodW5pKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1bmkpOworICAgICAgICAg
ICAgcmV0dXJuIHJ2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFycyA9IGFz
Y2lpX2VzY2FwZV9jaGFyKGMsIG91dHB1dCwgY2hhcnMpOworICAgICAgICB9CisgICAgICAgIC8q
IEFuIEFTQ0lJIGNoYXIgY2FuJ3QgcG9zc2libHkgZXhwYW5kIHRvIGEgc3Vycm9nYXRlISAqLwor
ICAgICAgICBpZiAob3V0cHV0X3NpemUgLSBjaGFycyA8ICgxICsgTUlOX0VYUEFOU0lPTikpIHsK
KyAgICAgICAgICAgIC8qIFRoZXJlJ3MgbW9yZSB0aGFuIGZvdXIsIHNvIGxldCdzIHJlc2l6ZSBi
eSBhIGxvdCAqLworICAgICAgICAgICAgb3V0cHV0X3NpemUgKj0gMjsKKyAgICAgICAgICAgIGlm
IChvdXRwdXRfc2l6ZSA+IDIgKyAoaW5wdXRfY2hhcnMgKiBNSU5fRVhQQU5TSU9OKSkgeworICAg
ICAgICAgICAgICAgIG91dHB1dF9zaXplID0gMiArIChpbnB1dF9jaGFycyAqIE1JTl9FWFBBTlNJ
T04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2
YWwsIG91dHB1dF9zaXplKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2
YWwpOworICAgICAgICB9CisgICAgfQorICAgIG91dHB1dFtjaGFycysrXSA9ICciJzsKKyAgICBp
ZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgY2hhcnMpID09IC0xKSB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcnZhbDsKK30KKworUHlEb2NfU1RSVkFSKHB5ZG9j
X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLAorICAgICJlbmNvZGVfYmFzZXN0cmluZ19hc2NpaShi
YXNlc3RyaW5nKSAtPiBzdHJcbiIKKyAgICAiXG4iCisgICAgIi4uLiIKKyk7CisKK3N0YXRpYyBQ
eU9iamVjdCAqCitweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShQeU9iamVjdCogc2VsZiBfX2F0
dHJpYnV0ZV9fKChfX3VudXNlZF9fKSksIFB5T2JqZWN0ICpweXN0cikgeworICAgIC8qIE1FVEhf
TyAqLworICAgIGlmIChQeVN0cmluZ19DaGVjayhweXN0cikpIHsKKyAgICAgICAgcmV0dXJuIGFz
Y2lpX2VzY2FwZV9zdHIocHlzdHIpOworICAgIH0gZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHB5
c3RyKSkgeworICAgICAgICByZXR1cm4gYXNjaWlfZXNjYXBlX3VuaWNvZGUocHlzdHIpOworICAg
IH0KKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZmlyc3QgYXJndW1lbnQg
bXVzdCBiZSBhIHN0cmluZyIpOworICAgIHJldHVybiBOVUxMOworfQorCisjZGVmaW5lIERFRk4o
biwgaykgXAorICAgIHsgIFwKKyAgICAgICAgI24sIFwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5
XyAjI24sIFwKKyAgICAgICAgaywgXAorICAgICAgICBweWRvY18gIyNuIFwKKyAgICB9CitzdGF0
aWMgUHlNZXRob2REZWYgc3BlZWR1cHNfbWV0aG9kc1tdID0geworICAgIERFRk4oZW5jb2RlX2Jh
c2VzdHJpbmdfYXNjaWksIE1FVEhfTyksCisgICAge30KK307CisjdW5kZWYgREVGTgorCit2b2lk
Citpbml0X3NwZWVkdXBzKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm07CisgICAgbSA9IFB5X0lu
aXRNb2R1bGU0KCJfc3BlZWR1cHMiLCBzcGVlZHVwc19tZXRob2RzLCBOVUxMLCBOVUxMLCBQWVRI
T05fQVBJX1ZFUlNJT04pOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL19zcGVlZHVwcy5jCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c2ltcGxlanNvbi9kZWNvZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc2ltcGxlanNvbi9kZWNvZGVyLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL2RlY29kZXIucHkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjczIEBACisiIiIKK0ltcGxlbWVudGF0aW9uIG9mIEpTT05EZWNvZGVyCisiIiIK
K2ltcG9ydCByZQorCitmcm9tIC5zY2FubmVyIGltcG9ydCBTY2FubmVyLCBwYXR0ZXJuCisKK0ZM
QUdTID0gcmUuVkVSQk9TRSB8IHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTAorCitkZWYgX2Zsb2F0
Y29uc3RhbnRzKCk6CisgICAgaW1wb3J0IHN0cnVjdAorICAgIGltcG9ydCBzeXMKKyAgICBfQllU
RVMgPSAnN0ZGODAwMDAwMDAwMDAwMDdGRjAwMDAwMDAwMDAwMDAnLmRlY29kZSgnaGV4JykKKyAg
ICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgorICAgICAgICBfQllURVMgPSBfQllURVNbOjhd
Wzo6LTFdICsgX0JZVEVTWzg6XVs6Oi0xXQorICAgIG5hbiwgaW5mID0gc3RydWN0LnVucGFjaygn
ZGQnLCBfQllURVMpCisgICAgcmV0dXJuIG5hbiwgaW5mLCAtaW5mCisKK05hTiwgUG9zSW5mLCBO
ZWdJbmYgPSBfZmxvYXRjb25zdGFudHMoKQorCitkZWYgbGluZWNvbChkb2MsIHBvcyk6CisgICAg
bGluZW5vID0gZG9jLmNvdW50KCdcbicsIDAsIHBvcykgKyAxCisgICAgaWYgbGluZW5vID09IDE6
CisgICAgICAgIGNvbG5vID0gcG9zCisgICAgZWxzZToKKyAgICAgICAgY29sbm8gPSBwb3MgLSBk
b2MucmluZGV4KCdcbicsIDAsIHBvcykKKyAgICByZXR1cm4gbGluZW5vLCBjb2xubworCitkZWYg
ZXJybXNnKG1zZywgZG9jLCBwb3MsIGVuZD1Ob25lKToKKyAgICBsaW5lbm8sIGNvbG5vID0gbGlu
ZWNvbChkb2MsIHBvcykKKyAgICBpZiBlbmQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuICclczog
bGluZSAlZCBjb2x1bW4gJWQgKGNoYXIgJWQpJyAlIChtc2csIGxpbmVubywgY29sbm8sIHBvcykK
KyAgICBlbmRsaW5lbm8sIGVuZGNvbG5vID0gbGluZWNvbChkb2MsIGVuZCkKKyAgICByZXR1cm4g
JyVzOiBsaW5lICVkIGNvbHVtbiAlZCAtIGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkIC0gJWQp
JyAlICgKKyAgICAgICAgbXNnLCBsaW5lbm8sIGNvbG5vLCBlbmRsaW5lbm8sIGVuZGNvbG5vLCBw
b3MsIGVuZCkKKworX0NPTlNUQU5UUyA9IHsKKyAgICAnLUluZmluaXR5JzogTmVnSW5mLAorICAg
ICdJbmZpbml0eSc6IFBvc0luZiwKKyAgICAnTmFOJzogTmFOLAorICAgICd0cnVlJzogVHJ1ZSwK
KyAgICAnZmFsc2UnOiBGYWxzZSwKKyAgICAnbnVsbCc6IE5vbmUsCit9CisKK2RlZiBKU09OQ29u
c3RhbnQobWF0Y2gsIGNvbnRleHQsIGM9X0NPTlNUQU5UUyk6CisgICAgcmV0dXJuIGNbbWF0Y2gu
Z3JvdXAoMCldLCBOb25lCitwYXR0ZXJuKCcoLT9JbmZpbml0eXxOYU58dHJ1ZXxmYWxzZXxudWxs
KScpKEpTT05Db25zdGFudCkKKworZGVmIEpTT05OdW1iZXIobWF0Y2gsIGNvbnRleHQpOgorICAg
IG1hdGNoID0gSlNPTk51bWJlci5yZWdleC5tYXRjaChtYXRjaC5zdHJpbmcsICptYXRjaC5zcGFu
KCkpCisgICAgaW50ZWdlciwgZnJhYywgZXhwID0gbWF0Y2guZ3JvdXBzKCkKKyAgICBpZiBmcmFj
IG9yIGV4cDoKKyAgICAgICAgcmVzID0gZmxvYXQoaW50ZWdlciArIChmcmFjIG9yICcnKSArIChl
eHAgb3IgJycpKQorICAgIGVsc2U6CisgICAgICAgIHJlcyA9IGludChpbnRlZ2VyKQorICAgIHJl
dHVybiByZXMsIE5vbmUKK3BhdHRlcm4ocicoLT8oPzowfFsxLTldXGQqKSkoXC5cZCspPyhbZUVd
Wy0rXT9cZCspPycpKEpTT05OdW1iZXIpCisKK1NUUklOR0NIVU5LID0gcmUuY29tcGlsZShyJygu
Kj8pKFsiXFxdKScsIEZMQUdTKQorQkFDS1NMQVNIID0geworICAgICciJzogdSciJywgJ1xcJzog
dSdcXCcsICcvJzogdScvJywKKyAgICAnYic6IHUnXGInLCAnZic6IHUnXGYnLCAnbic6IHUnXG4n
LCAncic6IHUnXHInLCAndCc6IHUnXHQnLAorfQorCitERUZBVUxUX0VOQ09ESU5HID0gInV0Zi04
IgorCitkZWYgc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nPU5vbmUsIF9iPUJBQ0tTTEFTSCwg
X209U1RSSU5HQ0hVTksubWF0Y2gpOgorICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAg
IGVuY29kaW5nID0gREVGQVVMVF9FTkNPRElORworICAgIGNodW5rcyA9IFtdCisgICAgX2FwcGVu
ZCA9IGNodW5rcy5hcHBlbmQKKyAgICBiZWdpbiA9IGVuZCAtIDEKKyAgICB3aGlsZSAxOgorICAg
ICAgICBjaHVuayA9IF9tKHMsIGVuZCkKKyAgICAgICAgaWYgY2h1bmsgaXMgTm9uZToKKyAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgZXJybXNnKCJVbnRlcm1p
bmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0IiwgcywgYmVnaW4pKQorICAgICAgICBlbmQgPSBjaHVu
ay5lbmQoKQorICAgICAgICBjb250ZW50LCB0ZXJtaW5hdG9yID0gY2h1bmsuZ3JvdXBzKCkKKyAg
ICAgICAgaWYgY29udGVudDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbnRlbnQs
IHVuaWNvZGUpOgorICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB1bmljb2RlKGNvbnRlbnQsIGVu
Y29kaW5nKQorICAgICAgICAgICAgX2FwcGVuZChjb250ZW50KQorICAgICAgICBpZiB0ZXJtaW5h
dG9yID09ICciJzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IGVzYyA9IHNbZW5kXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgZXJybXNnKCJVbnRlcm1pbmF0ZWQgc3Ry
aW5nIHN0YXJ0aW5nIGF0IiwgcywgYmVnaW4pKQorICAgICAgICBpZiBlc2MgIT0gJ3UnOgorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG0gPSBfYltlc2NdCisgICAgICAgICAgICBl
eGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAg
ICAgICAgICAgICAgICAgZXJybXNnKCJJbnZhbGlkIFxcZXNjYXBlOiAlciIgJSAoZXNjLCksIHMs
IGVuZCkpCisgICAgICAgICAgICBlbmQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ZXNjID0gc1tlbmQgKyAxOmVuZCArIDVdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgbSA9IHVuaWNocihpbnQoZXNjLCAxNikpCisgICAgICAgICAgICAgICAgaWYgbGVuKGVzYykg
IT0gNCBvciBub3QgZXNjLmlzYWxudW0oKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcgorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBzLCBlbmQp
KQorICAgICAgICAgICAgZW5kICs9IDUKKyAgICAgICAgX2FwcGVuZChtKQorICAgIHJldHVybiB1
Jycuam9pbihjaHVua3MpLCBlbmQKKworZGVmIEpTT05TdHJpbmcobWF0Y2gsIGNvbnRleHQpOgor
ICAgIGVuY29kaW5nID0gZ2V0YXR0cihjb250ZXh0LCAnZW5jb2RpbmcnLCBOb25lKQorICAgIHJl
dHVybiBzY2Fuc3RyaW5nKG1hdGNoLnN0cmluZywgbWF0Y2guZW5kKCksIGVuY29kaW5nKQorcGF0
dGVybihyJyInKShKU09OU3RyaW5nKQorCitXSElURVNQQUNFID0gcmUuY29tcGlsZShyJ1xzKics
IEZMQUdTKQorCitkZWYgSlNPTk9iamVjdChtYXRjaCwgY29udGV4dCwgX3c9V0hJVEVTUEFDRS5t
YXRjaCk6CisgICAgcGFpcnMgPSB7fQorICAgIHMgPSBtYXRjaC5zdHJpbmcKKyAgICBlbmQgPSBf
dyhzLCBtYXRjaC5lbmQoKSkuZW5kKCkKKyAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisg
ICAgIyB0cml2aWFsIGVtcHR5IG9iamVjdAorICAgIGlmIG5leHRjaGFyID09ICd9JzoKKyAgICAg
ICAgcmV0dXJuIHBhaXJzLCBlbmQgKyAxCisgICAgaWYgbmV4dGNoYXIgIT0gJyInOgorICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBl
bmQpKQorICAgIGVuZCArPSAxCisgICAgZW5jb2RpbmcgPSBnZXRhdHRyKGNvbnRleHQsICdlbmNv
ZGluZycsIE5vbmUpCisgICAgaXRlcnNjYW4gPSBKU09OU2Nhbm5lci5pdGVyc2NhbgorICAgIHdo
aWxlIFRydWU6CisgICAgICAgIGtleSwgZW5kID0gc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5n
KQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgIGlmIHNbZW5kOmVuZCAr
IDFdICE9ICc6JzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rp
bmcgOiBkZWxpbWl0ZXIiLCBzLCBlbmQpKQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5l
bmQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSwgZW5kID0gaXRlcnNjYW4ocywg
aWR4PWVuZCwgY29udGV4dD1jb250ZXh0KS5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVy
YXRpb246CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9i
amVjdCIsIHMsIGVuZCkpCisgICAgICAgIHBhaXJzW2tleV0gPSB2YWx1ZQorICAgICAgICBlbmQg
PSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAg
ICAgICAgZW5kICs9IDEKKyAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ30nOgorICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgaWYgbmV4dGNoYXIgIT0gJywnOgorICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHMsIGVuZCAtIDEpKQorICAg
ICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5k
ICsgMV0KKyAgICAgICAgZW5kICs9IDEKKyAgICAgICAgaWYgbmV4dGNoYXIgIT0gJyInOgorICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1l
IiwgcywgZW5kIC0gMSkpCisgICAgb2JqZWN0X2hvb2sgPSBnZXRhdHRyKGNvbnRleHQsICdvYmpl
Y3RfaG9vaycsIE5vbmUpCisgICAgaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAg
IHBhaXJzID0gb2JqZWN0X2hvb2socGFpcnMpCisgICAgcmV0dXJuIHBhaXJzLCBlbmQKK3BhdHRl
cm4ocid7JykoSlNPTk9iamVjdCkKKyAgICAgICAgICAgIAorZGVmIEpTT05BcnJheShtYXRjaCwg
Y29udGV4dCwgX3c9V0hJVEVTUEFDRS5tYXRjaCk6CisgICAgdmFsdWVzID0gW10KKyAgICBzID0g
bWF0Y2guc3RyaW5nCisgICAgZW5kID0gX3cocywgbWF0Y2guZW5kKCkpLmVuZCgpCisgICAgIyBs
b29rLWFoZWFkIGZvciB0cml2aWFsIGVtcHR5IGFycmF5CisgICAgbmV4dGNoYXIgPSBzW2VuZDpl
bmQgKyAxXQorICAgIGlmIG5leHRjaGFyID09ICddJzoKKyAgICAgICAgcmV0dXJuIHZhbHVlcywg
ZW5kICsgMQorICAgIGl0ZXJzY2FuID0gSlNPTlNjYW5uZXIuaXRlcnNjYW4KKyAgICB3aGlsZSBU
cnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSwgZW5kID0gaXRlcnNjYW4ocywg
aWR4PWVuZCwgY29udGV4dD1jb250ZXh0KS5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVy
YXRpb246CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9i
amVjdCIsIHMsIGVuZCkpCisgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisgICAgICAgIGVu
ZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQor
ICAgICAgICBlbmQgKz0gMQorICAgICAgICBpZiBuZXh0Y2hhciA9PSAnXSc6CisgICAgICAgICAg
ICBicmVhaworICAgICAgICBpZiBuZXh0Y2hhciAhPSAnLCc6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcywgZW5kKSkKKyAgICAg
ICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQorICAgIHJldHVybiB2YWx1ZXMsIGVuZAorcGF0dGVy
bihyJ1xbJykoSlNPTkFycmF5KQorIAorQU5ZVEhJTkcgPSBbCisgICAgSlNPTk9iamVjdCwKKyAg
ICBKU09OQXJyYXksCisgICAgSlNPTlN0cmluZywKKyAgICBKU09OQ29uc3RhbnQsCisgICAgSlNP
Tk51bWJlciwKK10KKworSlNPTlNjYW5uZXIgPSBTY2FubmVyKEFOWVRISU5HKQorCitjbGFzcyBK
U09ORGVjb2RlcihvYmplY3QpOgorICAgICIiIgorICAgIFNpbXBsZSBKU09OIDxodHRwOi8vanNv
bi5vcmc+IGRlY29kZXIKKworICAgIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdHJhbnNsYXRpb25z
IGluIGRlY29kaW5nOgorICAgIAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKyAgICB8IEpTT04gICAgICAgICAgfCBQeXRob24gICAgICAgICAgICB8CisgICAgKz09
PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09KworICAgIHwgb2JqZWN0ICAgICAgICB8
IGRpY3QgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t
LS0tLS0rCisgICAgfCBhcnJheSAgICAgICAgIHwgbGlzdCAgICAgICAgICAgICAgfAorICAgICst
LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IHN0cmluZyAgICAgICAg
fCB1bmljb2RlICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t
LS0tLS0tKworICAgIHwgbnVtYmVyIChpbnQpICB8IGludCwgbG9uZyAgICAgICAgIHwKKyAgICAr
LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBudW1iZXIgKHJlYWwp
IHwgZmxvYXQgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyAgICB8IHRydWUgICAgICAgICAgfCBUcnVlICAgICAgICAgICAgICB8CisgICAg
Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgZmFsc2UgICAgICAg
ICB8IEZhbHNlICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t
LS0tLS0tLS0rCisgICAgfCBudWxsICAgICAgICAgIHwgTm9uZSAgICAgICAgICAgICAgfAorICAg
ICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgIEl0IGFsc28gdW5k
ZXJzdGFuZHMgYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBhbmQgYGAtSW5maW5pdHlgYCBhcworICAg
IHRoZWlyIGNvcnJlc3BvbmRpbmcgYGBmbG9hdGBgIHZhbHVlcywgd2hpY2ggaXMgb3V0c2lkZSB0
aGUgSlNPTiBzcGVjLgorICAgICIiIgorCisgICAgX3NjYW5uZXIgPSBTY2FubmVyKEFOWVRISU5H
KQorICAgIF9fYWxsX18gPSBbJ19faW5pdF9fJywgJ2RlY29kZScsICdyYXdfZGVjb2RlJ10KKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbmNvZGluZz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lKToK
KyAgICAgICAgIiIiCisgICAgICAgIGBgZW5jb2RpbmdgYCBkZXRlcm1pbmVzIHRoZSBlbmNvZGlu
ZyB1c2VkIHRvIGludGVycHJldCBhbnkgYGBzdHJgYAorICAgICAgICBvYmplY3RzIGRlY29kZWQg
YnkgdGhpcyBpbnN0YW5jZSAodXRmLTggYnkgZGVmYXVsdCkuICBJdCBoYXMgbm8KKyAgICAgICAg
ZWZmZWN0IHdoZW4gZGVjb2RpbmcgYGB1bmljb2RlYGAgb2JqZWN0cy4KKyAgICAgICAgCisgICAg
ICAgIE5vdGUgdGhhdCBjdXJyZW50bHkgb25seSBlbmNvZGluZ3MgdGhhdCBhcmUgYSBzdXBlcnNl
dCBvZiBBU0NJSSB3b3JrLAorICAgICAgICBzdHJpbmdzIG9mIG90aGVyIGVuY29kaW5ncyBzaG91
bGQgYmUgcGFzc2VkIGluIGFzIGBgdW5pY29kZWBgLgorCisgICAgICAgIGBgb2JqZWN0X2hvb2tg
YCwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQKKyAgICAgICAg
b2YgZXZlcnkgSlNPTiBvYmplY3QgZGVjb2RlZCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJl
IHVzZWQgaW4KKyAgICAgICAgcGxhY2Ugb2YgdGhlIGdpdmVuIGBgZGljdGBgLiAgVGhpcyBjYW4g
YmUgdXNlZCB0byBwcm92aWRlIGN1c3RvbQorICAgICAgICBkZXNlcmlhbGl6YXRpb25zIChlLmcu
IHRvIHN1cHBvcnQgSlNPTi1SUEMgY2xhc3MgaGludGluZykuCisgICAgICAgICIiIgorICAgICAg
ICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKKyAgICAgICAgc2VsZi5vYmplY3RfaG9vayA9IG9i
amVjdF9ob29rCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIHMsIF93PVdISVRFU1BBQ0UubWF0Y2gp
OgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBQeXRob24gcmVwcmVzZW50YXRpb24g
b2YgYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYAorICAgICAgICBpbnN0YW5jZSBjb250
YWluaW5nIGEgSlNPTiBkb2N1bWVudCkKKyAgICAgICAgIiIiCisgICAgICAgIG9iaiwgZW5kID0g
c2VsZi5yYXdfZGVjb2RlKHMsIGlkeD1fdyhzLCAwKS5lbmQoKSkKKyAgICAgICAgZW5kID0gX3co
cywgZW5kKS5lbmQoKQorICAgICAgICBpZiBlbmQgIT0gbGVuKHMpOgorICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcihlcnJtc2coIkV4dHJhIGRhdGEiLCBzLCBlbmQsIGxlbihzKSkpCisgICAg
ICAgIHJldHVybiBvYmoKKworICAgIGRlZiByYXdfZGVjb2RlKHNlbGYsIHMsICoqa3cpOgorICAg
ICAgICAiIiIKKyAgICAgICAgRGVjb2RlIGEgSlNPTiBkb2N1bWVudCBmcm9tIGBgc2BgIChhIGBg
c3RyYGAgb3IgYGB1bmljb2RlYGAgYmVnaW5uaW5nCisgICAgICAgIHdpdGggYSBKU09OIGRvY3Vt
ZW50KSBhbmQgcmV0dXJuIGEgMi10dXBsZSBvZiB0aGUgUHl0aG9uCisgICAgICAgIHJlcHJlc2Vu
dGF0aW9uIGFuZCB0aGUgaW5kZXggaW4gYGBzYGAgd2hlcmUgdGhlIGRvY3VtZW50IGVuZGVkLgor
CisgICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVjb2RlIGEgSlNPTiBkb2N1bWVudCBmcm9t
IGEgc3RyaW5nIHRoYXQgbWF5CisgICAgICAgIGhhdmUgZXh0cmFuZW91cyBkYXRhIGF0IHRoZSBl
bmQuCisgICAgICAgICIiIgorICAgICAgICBrdy5zZXRkZWZhdWx0KCdjb250ZXh0Jywgc2VsZikK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqLCBlbmQgPSBzZWxmLl9zY2FubmVyLml0ZXJz
Y2FuKHMsICoqa3cpLm5leHQoKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIEpTT04gb2JqZWN0IGNvdWxkIGJlIGRlY29kZWQi
KQorICAgICAgICByZXR1cm4gb2JqLCBlbmQKKworX19hbGxfXyA9IFsnSlNPTkRlY29kZXInXQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVq
c29uL2RlY29kZXIucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL2VuY29kZXIucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zaW1wbGVqc29uL2Vu
Y29kZXIucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3Np
bXBsZWpzb24vZW5jb2Rlci5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNzEgQEAKKyIiIgor
SW1wbGVtZW50YXRpb24gb2YgSlNPTkVuY29kZXIKKyIiIgoraW1wb3J0IHJlCit0cnk6CisgICAg
ZnJvbSBzaW1wbGVqc29uIGltcG9ydCBfc3BlZWR1cHMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAg
ICBfc3BlZWR1cHMgPSBOb25lCisKK0VTQ0FQRSA9IHJlLmNvbXBpbGUocidbXHgwMC1ceDE5XFwi
XGJcZlxuXHJcdF0nKQorRVNDQVBFX0FTQ0lJID0gcmUuY29tcGlsZShyJyhbXFwiL118W15cIC1+
XSknKQorRVNDQVBFX0RDVCA9IHsKKyAgICAjIGVzY2FwZSBhbGwgZm9yd2FyZCBzbGFzaGVzIHRv
IHByZXZlbnQgPC9zY3JpcHQ+IGF0dGFjaworICAgICcvJzogJ1xcLycsCisgICAgJ1xcJzogJ1xc
XFwnLAorICAgICciJzogJ1xcIicsCisgICAgJ1xiJzogJ1xcYicsCisgICAgJ1xmJzogJ1xcZics
CisgICAgJ1xuJzogJ1xcbicsCisgICAgJ1xyJzogJ1xccicsCisgICAgJ1x0JzogJ1xcdCcsCit9
Citmb3IgaSBpbiByYW5nZSgweDIwKToKKyAgICBFU0NBUEVfRENULnNldGRlZmF1bHQoY2hyKGkp
LCAnXFx1JTA0eCcgJSAoaSwpKQorCisjIGFzc3VtZSB0aGlzIHByb2R1Y2VzIGFuIGluZmluaXR5
IG9uIGFsbCBtYWNoaW5lcyAocHJvYmFibHkgbm90IGd1YXJhbnRlZWQpCitJTkZJTklUWSA9IGZs
b2F0KCcxZTY2NjY2JykKKworZGVmIGZsb2F0c3RyKG8sIGFsbG93X25hbj1UcnVlKToKKyAgICAj
IENoZWNrIGZvciBzcGVjaWFscy4gIE5vdGUgdGhhdCB0aGlzIHR5cGUgb2YgdGVzdCBpcyBwcm9j
ZXNzb3ItIGFuZC9vcgorICAgICMgcGxhdGZvcm0tc3BlY2lmaWMsIHNvIGRvIHRlc3RzIHdoaWNo
IGRvbid0IGRlcGVuZCBvbiB0aGUgaW50ZXJuYWxzLgorCisgICAgaWYgbyAhPSBvOgorICAgICAg
ICB0ZXh0ID0gJ05hTicKKyAgICBlbGlmIG8gPT0gSU5GSU5JVFk6CisgICAgICAgIHRleHQgPSAn
SW5maW5pdHknCisgICAgZWxpZiBvID09IC1JTkZJTklUWToKKyAgICAgICAgdGV4dCA9ICctSW5m
aW5pdHknCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHJlcHIobykKKworICAgIGlmIG5vdCBh
bGxvd19uYW46CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk91dCBvZiByYW5nZSBmbG9hdCB2
YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudDogJXIiCisgICAgICAgICAgICAlIChvLCkpCisK
KyAgICByZXR1cm4gdGV4dAorCisKK2RlZiBlbmNvZGVfYmFzZXN0cmluZyhzKToKKyAgICAiIiIK
KyAgICBSZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIHN0cmluZworICAg
ICIiIgorICAgIGRlZiByZXBsYWNlKG1hdGNoKToKKyAgICAgICAgcmV0dXJuIEVTQ0FQRV9EQ1Rb
bWF0Y2guZ3JvdXAoMCldCisgICAgcmV0dXJuICciJyArIEVTQ0FQRS5zdWIocmVwbGFjZSwgcykg
KyAnIicKKworZGVmIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKHMpOgorICAgIGRlZiByZXBsYWNl
KG1hdGNoKToKKyAgICAgICAgcyA9IG1hdGNoLmdyb3VwKDApCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHJldHVybiBFU0NBUEVfRENUW3NdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAg
ICAgICAgICAgIG4gPSBvcmQocykKKyAgICAgICAgICAgIGlmIG4gPCAweDEwMDAwOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnXFx1JTA0eCcgJSAobiwpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICMgc3Vycm9nYXRlIHBhaXIKKyAgICAgICAgICAgICAgICBuIC09IDB4MTAw
MDAKKyAgICAgICAgICAgICAgICBzMSA9IDB4ZDgwMCB8ICgobiA+PiAxMCkgJiAweDNmZikKKyAg
ICAgICAgICAgICAgICBzMiA9IDB4ZGMwMCB8IChuICYgMHgzZmYpCisgICAgICAgICAgICAgICAg
cmV0dXJuICdcXHUlMDR4XFx1JTA0eCcgJSAoczEsIHMyKQorICAgIHJldHVybiAnIicgKyBzdHIo
RVNDQVBFX0FTQ0lJLnN1YihyZXBsYWNlLCBzKSkgKyAnIicKKyAgICAgICAgCit0cnk6CisgICAg
ZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgPSBfc3BlZWR1cHMuZW5jb2RlX2Jhc2VzdHJpbmdfYXNj
aWkKKyAgICBfbmVlZF91dGY4ID0gVHJ1ZQorZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIF9u
ZWVkX3V0ZjggPSBGYWxzZQorCitjbGFzcyBKU09ORW5jb2RlcihvYmplY3QpOgorICAgICIiIgor
ICAgIEV4dGVuc2libGUgSlNPTiA8aHR0cDovL2pzb24ub3JnPiBlbmNvZGVyIGZvciBQeXRob24g
ZGF0YSBzdHJ1Y3R1cmVzLgorCisgICAgU3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvYmplY3RzIGFu
ZCB0eXBlcyBieSBkZWZhdWx0OgorICAgIAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t
LS0tLS0tLS0tLSsKKyAgICB8IFB5dGhvbiAgICAgICAgICAgIHwgSlNPTiAgICAgICAgICB8Cisg
ICAgKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KworICAgIHwgZGljdCAgICAg
ICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t
LS0tLS0tLS0tLS0rCisgICAgfCBsaXN0LCB0dXBsZSAgICAgICB8IGFycmF5ICAgICAgICAgfAor
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IHN0ciwgdW5p
Y29kZSAgICAgIHwgc3RyaW5nICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t
LS0tLS0tLS0tLS0tKworICAgIHwgaW50LCBsb25nLCBmbG9hdCAgfCBudW1iZXIgICAgICAgIHwK
KyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBUcnVlICAg
ICAgICAgICAgICB8IHRydWUgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0t
LS0tLS0tLS0tLS0tLSsKKyAgICB8IEZhbHNlICAgICAgICAgICAgIHwgZmFsc2UgICAgICAgICB8
CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgIHwgTm9uZSAg
ICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSst
LS0tLS0tLS0tLS0tLS0rCisKKyAgICBUbyBleHRlbmQgdGhpcyB0byByZWNvZ25pemUgb3RoZXIg
b2JqZWN0cywgc3ViY2xhc3MgYW5kIGltcGxlbWVudCBhCisgICAgYGAuZGVmYXVsdCgpYGAgbWV0
aG9kIHdpdGggYW5vdGhlciBtZXRob2QgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXphYmxlCisgICAg
b2JqZWN0IGZvciBgYG9gYCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0IHNob3VsZCBjYWxsIHRo
ZSBzdXBlcmNsYXNzCisgICAgaW1wbGVtZW50YXRpb24gKHRvIHJhaXNlIGBgVHlwZUVycm9yYGAp
LgorICAgICIiIgorICAgIF9fYWxsX18gPSBbJ19faW5pdF9fJywgJ2RlZmF1bHQnLCAnZW5jb2Rl
JywgJ2l0ZXJlbmNvZGUnXQorICAgIGl0ZW1fc2VwYXJhdG9yID0gJywgJworICAgIGtleV9zZXBh
cmF0b3IgPSAnOiAnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNraXBrZXlzPUZhbHNlLCBlbnN1
cmVfYXNjaWk9VHJ1ZSwKKyAgICAgICAgICAgIGNoZWNrX2NpcmN1bGFyPVRydWUsIGFsbG93X25h
bj1UcnVlLCBzb3J0X2tleXM9RmFsc2UsCisgICAgICAgICAgICBpbmRlbnQ9Tm9uZSwgc2VwYXJh
dG9ycz1Ob25lLCBlbmNvZGluZz0ndXRmLTgnKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnN0
cnVjdG9yIGZvciBKU09ORW5jb2Rlciwgd2l0aCBzZW5zaWJsZSBkZWZhdWx0cy4KKworICAgICAg
ICBJZiBza2lwa2V5cyBpcyBGYWxzZSwgdGhlbiBpdCBpcyBhIFR5cGVFcnJvciB0byBhdHRlbXB0
CisgICAgICAgIGVuY29kaW5nIG9mIGtleXMgdGhhdCBhcmUgbm90IHN0ciwgaW50LCBsb25nLCBm
bG9hdCBvciBOb25lLiAgSWYKKyAgICAgICAgc2tpcGtleXMgaXMgVHJ1ZSwgc3VjaCBpdGVtcyBh
cmUgc2ltcGx5IHNraXBwZWQuCisKKyAgICAgICAgSWYgZW5zdXJlX2FzY2lpIGlzIFRydWUsIHRo
ZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHIKKyAgICAgICAgb2JqZWN0cyB3aXRoIGFs
bCBpbmNvbWluZyB1bmljb2RlIGNoYXJhY3RlcnMgZXNjYXBlZC4gIElmCisgICAgICAgIGVuc3Vy
ZV9hc2NpaSBpcyBmYWxzZSwgdGhlIG91dHB1dCB3aWxsIGJlIHVuaWNvZGUgb2JqZWN0LgorCisg
ICAgICAgIElmIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUsIHRoZW4gbGlzdHMsIGRpY3RzLCBhbmQg
Y3VzdG9tIGVuY29kZWQKKyAgICAgICAgb2JqZWN0cyB3aWxsIGJlIGNoZWNrZWQgZm9yIGNpcmN1
bGFyIHJlZmVyZW5jZXMgZHVyaW5nIGVuY29kaW5nIHRvCisgICAgICAgIHByZXZlbnQgYW4gaW5m
aW5pdGUgcmVjdXJzaW9uICh3aGljaCB3b3VsZCBjYXVzZSBhbiBPdmVyZmxvd0Vycm9yKS4KKyAg
ICAgICAgT3RoZXJ3aXNlLCBubyBzdWNoIGNoZWNrIHRha2VzIHBsYWNlLgorCisgICAgICAgIElm
IGFsbG93X25hbiBpcyBUcnVlLCB0aGVuIE5hTiwgSW5maW5pdHksIGFuZCAtSW5maW5pdHkgd2ls
bCBiZQorICAgICAgICBlbmNvZGVkIGFzIHN1Y2guICBUaGlzIGJlaGF2aW9yIGlzIG5vdCBKU09O
IHNwZWNpZmljYXRpb24gY29tcGxpYW50LAorICAgICAgICBidXQgaXMgY29uc2lzdGVudCB3aXRo
IG1vc3QgSmF2YVNjcmlwdCBiYXNlZCBlbmNvZGVycyBhbmQgZGVjb2RlcnMuCisgICAgICAgIE90
aGVyd2lzZSwgaXQgd2lsbCBiZSBhIFZhbHVlRXJyb3IgdG8gZW5jb2RlIHN1Y2ggZmxvYXRzLgor
CisgICAgICAgIElmIHNvcnRfa2V5cyBpcyBUcnVlLCB0aGVuIHRoZSBvdXRwdXQgb2YgZGljdGlv
bmFyaWVzIHdpbGwgYmUKKyAgICAgICAgc29ydGVkIGJ5IGtleTsgdGhpcyBpcyB1c2VmdWwgZm9y
IHJlZ3Jlc3Npb24gdGVzdHMgdG8gZW5zdXJlCisgICAgICAgIHRoYXQgSlNPTiBzZXJpYWxpemF0
aW9ucyBjYW4gYmUgY29tcGFyZWQgb24gYSBkYXktdG8tZGF5IGJhc2lzLgorCisgICAgICAgIElm
IGluZGVudCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkKKyAgICAg
ICAgZWxlbWVudHMgYW5kIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0
aCB0aGF0CisgICAgICAgIGluZGVudCBsZXZlbC4gIEFuIGluZGVudCBsZXZlbCBvZiAwIHdpbGwg
b25seSBpbnNlcnQgbmV3bGluZXMuCisgICAgICAgIE5vbmUgaXMgdGhlIG1vc3QgY29tcGFjdCBy
ZXByZXNlbnRhdGlvbi4KKworICAgICAgICBJZiBzcGVjaWZpZWQsIHNlcGFyYXRvcnMgc2hvdWxk
IGJlIGEgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKQorICAgICAgICB0dXBsZS4gVGhl
IGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OCisg
ICAgICAgIHJlcHJlc2VudGF0aW9uIHlvdSBzaG91bGQgc3BlY2lmeSAoJywnLCAnOicpIHRvIGVs
aW1pbmF0ZSB3aGl0ZXNwYWNlLgorCisgICAgICAgIElmIGVuY29kaW5nIGlzIG5vdCBOb25lLCB0
aGVuIGFsbCBpbnB1dCBzdHJpbmdzIHdpbGwgYmUKKyAgICAgICAgdHJhbnNmb3JtZWQgaW50byB1
bmljb2RlIHVzaW5nIHRoYXQgZW5jb2RpbmcgcHJpb3IgdG8gSlNPTi1lbmNvZGluZy4gCisgICAg
ICAgIFRoZSBkZWZhdWx0IGlzIFVURi04LgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLnNr
aXBrZXlzID0gc2tpcGtleXMKKyAgICAgICAgc2VsZi5lbnN1cmVfYXNjaWkgPSBlbnN1cmVfYXNj
aWkKKyAgICAgICAgc2VsZi5jaGVja19jaXJjdWxhciA9IGNoZWNrX2NpcmN1bGFyCisgICAgICAg
IHNlbGYuYWxsb3dfbmFuID0gYWxsb3dfbmFuCisgICAgICAgIHNlbGYuc29ydF9rZXlzID0gc29y
dF9rZXlzCisgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CisgICAgICAgIHNlbGYuY3VycmVu
dF9pbmRlbnRfbGV2ZWwgPSAwCisgICAgICAgIGlmIHNlcGFyYXRvcnMgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJhdG9yLCBzZWxmLmtleV9zZXBhcmF0b3IgPSBzZXBh
cmF0b3JzCisgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworCisgICAgZGVmIF9uZXds
aW5lX2luZGVudChzZWxmKToKKyAgICAgICAgcmV0dXJuICdcbicgKyAoJyAnICogKHNlbGYuaW5k
ZW50ICogc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCkpCisKKyAgICBkZWYgX2l0ZXJlbmNvZGVf
bGlzdChzZWxmLCBsc3QsIG1hcmtlcnM9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBsc3Q6CisgICAg
ICAgICAgICB5aWVsZCAnW10nCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbWFya2Vy
cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobHN0KQorICAgICAgICAg
ICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQorICAgICAgICAgICAgbWFya2Vyc1tt
YXJrZXJpZF0gPSBsc3QKKyAgICAgICAgeWllbGQgJ1snCisgICAgICAgIGlmIHNlbGYuaW5kZW50
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCArPSAx
CisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAg
ICAgICAgICAgIHNlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVu
dAorICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQorICAgICAgICAgICAgc2VwYXJhdG9yID0gc2Vs
Zi5pdGVtX3NlcGFyYXRvcgorICAgICAgICBmaXJzdCA9IFRydWUKKyAgICAgICAgZm9yIHZhbHVl
IGluIGxzdDoKKyAgICAgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgICAgIGZpcnN0ID0g
RmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgc2VwYXJhdG9y
CisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vy
cyk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRl
bnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09
IDEKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgeWll
bGQgJ10nCisgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwg
bWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVuY29kZV9kaWN0KHNlbGYsIGRjdCwg
bWFya2Vycz1Ob25lKToKKyAgICAgICAgaWYgbm90IGRjdDoKKyAgICAgICAgICAgIHlpZWxkICd7
fScKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgbWFya2VyaWQgPSBpZChkY3QpCisgICAgICAgICAgICBpZiBtYXJrZXJpZCBp
biBtYXJrZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJl
ZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGRjdAor
ICAgICAgICB5aWVsZCAneycKKyAgICAgICAga2V5X3NlcGFyYXRvciA9IHNlbGYua2V5X3NlcGFy
YXRvcgorICAgICAgICBpZiBzZWxmLmluZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNl
bGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQg
PSBzZWxmLl9uZXdsaW5lX2luZGVudCgpCisgICAgICAgICAgICBpdGVtX3NlcGFyYXRvciA9IHNl
bGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICAgICAgeWllbGQgbmV3
bGluZV9pbmRlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0g
Tm9uZQorICAgICAgICAgICAgaXRlbV9zZXBhcmF0b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yCisg
ICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKKyAgICAg
ICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nCisgICAgICAgIGFsbG93X25h
biA9IHNlbGYuYWxsb3dfbmFuCisgICAgICAgIGlmIHNlbGYuc29ydF9rZXlzOgorICAgICAgICAg
ICAga2V5cyA9IGRjdC5rZXlzKCkKKyAgICAgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgICAg
ICBpdGVtcyA9IFsoaywgZGN0W2tdKSBmb3IgayBpbiBrZXlzXQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgaXRlbXMgPSBkY3QuaXRlcml0ZW1zKCkKKyAgICAgICAgX2VuY29kaW5nID0gc2Vs
Zi5lbmNvZGluZworICAgICAgICBfZG9fZGVjb2RlID0gKF9lbmNvZGluZyBpcyBub3QgTm9uZQor
ICAgICAgICAgICAgYW5kIG5vdCAoX25lZWRfdXRmOCBhbmQgX2VuY29kaW5nID09ICd1dGYtOCcp
KQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgIGlmIF9kb19kZWNvZGU6CisgICAgICAg
ICAgICAgICAgICAgIGtleSA9IGtleS5kZWNvZGUoX2VuY29kaW5nKQorICAgICAgICAgICAgZWxp
ZiBpc2luc3RhbmNlKGtleSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgcGFzcworICAg
ICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1h
a2VzIHNlbnNlIHRvCisgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2Rl
cnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgorICAgICAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKGtleSwgZmxvYXQpOgorICAgICAgICAgICAgICAgIGtleSA9IGZsb2F0c3RyKGtleSwg
YWxsb3dfbmFuKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgKGludCwgbG9uZykp
OgorICAgICAgICAgICAgICAgIGtleSA9IHN0cihrZXkpCisgICAgICAgICAgICBlbGlmIGtleSBp
cyBUcnVlOgorICAgICAgICAgICAgICAgIGtleSA9ICd0cnVlJworICAgICAgICAgICAgZWxpZiBr
ZXkgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAga2V5ID0gJ2ZhbHNlJworICAgICAgICAgICAg
ZWxpZiBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcKKyAgICAgICAg
ICAgIGVsaWYgc2VsZi5za2lwa2V5czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleSAlciBpcyBu
b3QgYSBzdHJpbmciICUgKGtleSwpKQorICAgICAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAg
ICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5
aWVsZCBpdGVtX3NlcGFyYXRvcgorICAgICAgICAgICAgeWllbGQgZW5jb2RlcihrZXkpCisgICAg
ICAgICAgICB5aWVsZCBrZXlfc2VwYXJhdG9yCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2Vs
Zi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vycyk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1
bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBz
ZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX25l
d2xpbmVfaW5kZW50KCkKKyAgICAgICAgeWllbGQgJ30nCisgICAgICAgIGlmIG1hcmtlcnMgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBf
aXRlcmVuY29kZShzZWxmLCBvLCBtYXJrZXJzPU5vbmUpOgorICAgICAgICBpZiBpc2luc3RhbmNl
KG8sIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6CisgICAg
ICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZworICAg
ICAgICAgICAgX2VuY29kaW5nID0gc2VsZi5lbmNvZGluZworICAgICAgICAgICAgaWYgKF9lbmNv
ZGluZyBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShvLCBzdHIpCisgICAgICAgICAgICAgICAg
ICAgIGFuZCBub3QgKF9uZWVkX3V0ZjggYW5kIF9lbmNvZGluZyA9PSAndXRmLTgnKSk6CisgICAg
ICAgICAgICAgICAgbyA9IG8uZGVjb2RlKF9lbmNvZGluZykKKyAgICAgICAgICAgIHlpZWxkIGVu
Y29kZXIobykKKyAgICAgICAgZWxpZiBvIGlzIE5vbmU6CisgICAgICAgICAgICB5aWVsZCAnbnVs
bCcKKyAgICAgICAgZWxpZiBvIGlzIFRydWU6CisgICAgICAgICAgICB5aWVsZCAndHJ1ZScKKyAg
ICAgICAgZWxpZiBvIGlzIEZhbHNlOgorICAgICAgICAgICAgeWllbGQgJ2ZhbHNlJworICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UobywgKGludCwgbG9uZykpOgorICAgICAgICAgICAgeWllbGQgc3Ry
KG8pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBmbG9hdCk6CisgICAgICAgICAgICB5aWVs
ZCBmbG9hdHN0cihvLCBzZWxmLmFsbG93X25hbikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8s
IChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJlbmNv
ZGVfbGlzdChvLCBtYXJrZXJzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UobywgZGljdCk6CisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2Vs
Zi5faXRlcmVuY29kZV9kaWN0KG8sIG1hcmtlcnMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNo
dW5rCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobykKKyAgICAgICAgICAgICAgICBpZiBtYXJr
ZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJD
aXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQorICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFy
a2VyaWRdID0gbworICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJlbmNvZGVfZGVm
YXVsdChvLCBtYXJrZXJzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAg
ICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBkZWwgbWFya2Vyc1tt
YXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVuY29kZV9kZWZhdWx0KHNlbGYsIG8sIG1hcmtlcnM9
Tm9uZSk6CisgICAgICAgIG5ld29iaiA9IHNlbGYuZGVmYXVsdChvKQorICAgICAgICByZXR1cm4g
c2VsZi5faXRlcmVuY29kZShuZXdvYmosIG1hcmtlcnMpCisKKyAgICBkZWYgZGVmYXVsdChzZWxm
LCBvKToKKyAgICAgICAgIiIiCisgICAgICAgIEltcGxlbWVudCB0aGlzIG1ldGhvZCBpbiBhIHN1
YmNsYXNzIHN1Y2ggdGhhdCBpdCByZXR1cm5zCisgICAgICAgIGEgc2VyaWFsaXphYmxlIG9iamVj
dCBmb3IgYGBvYGAsIG9yIGNhbGxzIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uCisgICAgICAgICh0
byByYWlzZSBhIGBgVHlwZUVycm9yYGApLgorCisgICAgICAgIEZvciBleGFtcGxlLCB0byBzdXBw
b3J0IGFyYml0cmFyeSBpdGVyYXRvcnMsIHlvdSBjb3VsZAorICAgICAgICBpbXBsZW1lbnQgZGVm
YXVsdCBsaWtlIHRoaXM6OgorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWYgZGVmYXVsdChz
ZWxmLCBvKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGl0ZXJh
YmxlID0gaXRlcihvKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAg
ICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbGlzdChpdGVyYWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNPTkVu
Y29kZXIuZGVmYXVsdChzZWxmLCBvKQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgVHlwZUVy
cm9yKCIlciBpcyBub3QgSlNPTiBzZXJpYWxpemFibGUiICUgKG8sKSkKKworICAgIGRlZiBlbmNv
ZGUoc2VsZiwgbyk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBKU09OIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBkYXRhIHN0cnVjdHVyZS4KKworICAgICAgICA+Pj4g
SlNPTkVuY29kZXIoKS5lbmNvZGUoeyJmb28iOiBbImJhciIsICJiYXoiXX0pCisgICAgICAgICd7
ImZvbyI6WyJiYXIiLCAiYmF6Il19JworICAgICAgICAiIiIKKyAgICAgICAgIyBUaGlzIGlzIGZv
ciBleHRyZW1lbHkgc2ltcGxlIGNhc2VzIGFuZCBiZW5jaG1hcmtzLi4uCisgICAgICAgIGlmIGlz
aW5zdGFuY2UobywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIHN0
cik6CisgICAgICAgICAgICAgICAgX2VuY29kaW5nID0gc2VsZi5lbmNvZGluZworICAgICAgICAg
ICAgICAgIGlmIChfZW5jb2RpbmcgaXMgbm90IE5vbmUgCisgICAgICAgICAgICAgICAgICAgICAg
ICBhbmQgbm90IChfZW5jb2RpbmcgPT0gJ3V0Zi04JyBhbmQgX25lZWRfdXRmOCkpOgorICAgICAg
ICAgICAgICAgICAgICBvID0gby5kZWNvZGUoX2VuY29kaW5nKQorICAgICAgICAgICAgcmV0dXJu
IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKG8pCisgICAgICAgICMgVGhpcyBkb2Vzbid0IHBhc3Mg
dGhlIGl0ZXJhdG9yIGRpcmVjdGx5IHRvICcnLmpvaW4oKSBiZWNhdXNlIGl0CisgICAgICAgICMg
c3Vja3MgYXQgcmVwb3J0aW5nIGV4Y2VwdGlvbnMuICBJdCdzIGdvaW5nIHRvIGRvIHRoaXMgaW50
ZXJuYWxseQorICAgICAgICAjIGFueXdheSBiZWNhdXNlIGl0IHVzZXMgUHlTZXF1ZW5jZV9GYXN0
IG9yIHNpbWlsYXIuCisgICAgICAgIGNodW5rcyA9IGxpc3Qoc2VsZi5pdGVyZW5jb2RlKG8pKQor
ICAgICAgICByZXR1cm4gJycuam9pbihjaHVua3MpCisKKyAgICBkZWYgaXRlcmVuY29kZShzZWxm
LCBvKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuY29kZSB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCB5
aWVsZCBlYWNoIHN0cmluZworICAgICAgICByZXByZXNlbnRhdGlvbiBhcyBhdmFpbGFibGUuCisg
ICAgICAgIAorICAgICAgICBGb3IgZXhhbXBsZTo6CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciBjaHVuayBpbiBKU09ORW5jb2RlcigpLml0ZXJlbmNvZGUoYmlnb2JqZWN0KToKKyAgICAg
ICAgICAgICAgICBteXNvY2tldC53cml0ZShjaHVuaykKKyAgICAgICAgIiIiCisgICAgICAgIGlm
IHNlbGYuY2hlY2tfY2lyY3VsYXI6CisgICAgICAgICAgICBtYXJrZXJzID0ge30KKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIG1hcmtlcnMgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9p
dGVyZW5jb2RlKG8sIG1hcmtlcnMpCisKK19fYWxsX18gPSBbJ0pTT05FbmNvZGVyJ10KClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9l
bmNvZGVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9qc29uZmlsdGVyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNvbi9qc29u
ZmlsdGVyLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
aW1wbGVqc29uL2pzb25maWx0ZXIucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKK2lt
cG9ydCBzaW1wbGVqc29uCitpbXBvcnQgY2dpCisKK2NsYXNzIEpTT05GaWx0ZXIob2JqZWN0KToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYXBwLCBtaW1lX3R5cGU9J3RleHQveC1qc29uJyk6Cisg
ICAgICAgIHNlbGYuYXBwID0gYXBwCisgICAgICAgIHNlbGYubWltZV90eXBlID0gbWltZV90eXBl
CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgorICAg
ICAgICAjIFJlYWQgSlNPTiBQT1NUIGlucHV0IHRvIGpzb25maWx0ZXIuanNvbiBpZiBtYXRjaGlu
ZyBtaW1lIHR5cGUKKyAgICAgICAgcmVzcG9uc2UgPSB7J3N0YXR1cyc6ICcyMDAgT0snLCAnaGVh
ZGVycyc6IFtdfQorICAgICAgICBkZWYganNvbl9zdGFydF9yZXNwb25zZShzdGF0dXMsIGhlYWRl
cnMpOgorICAgICAgICAgICAgcmVzcG9uc2VbJ3N0YXR1cyddID0gc3RhdHVzCisgICAgICAgICAg
ICByZXNwb25zZVsnaGVhZGVycyddLmV4dGVuZChoZWFkZXJzKQorICAgICAgICBlbnZpcm9uWydq
c29uZmlsdGVyLm1pbWVfdHlwZSddID0gc2VsZi5taW1lX3R5cGUKKyAgICAgICAgaWYgZW52aXJv
bi5nZXQoJ1JFUVVFU1RfTUVUSE9EJywgJycpID09ICdQT1NUJzoKKyAgICAgICAgICAgIGlmIGVu
dmlyb24uZ2V0KCdDT05URU5UX1RZUEUnLCAnJykgPT0gc2VsZi5taW1lX3R5cGU6CisgICAgICAg
ICAgICAgICAgYXJncyA9IFtfIGZvciBfIGluIFtlbnZpcm9uLmdldCgnQ09OVEVOVF9MRU5HVEgn
KV0gaWYgX10KKyAgICAgICAgICAgICAgICBkYXRhID0gZW52aXJvblsnd3NnaS5pbnB1dCddLnJl
YWQoKm1hcChpbnQsIGFyZ3MpKQorICAgICAgICAgICAgICAgIGVudmlyb25bJ2pzb25maWx0ZXIu
anNvbiddID0gc2ltcGxlanNvbi5sb2FkcyhkYXRhKQorICAgICAgICByZXMgPSBzaW1wbGVqc29u
LmR1bXBzKHNlbGYuYXBwKGVudmlyb24sIGpzb25fc3RhcnRfcmVzcG9uc2UpKQorICAgICAgICBq
c29ucCA9IGNnaS5wYXJzZV9xcyhlbnZpcm9uLmdldCgnUVVFUllfU1RSSU5HJywgJycpKS5nZXQo
J2pzb25wJykKKyAgICAgICAgaWYganNvbnA6CisgICAgICAgICAgICBjb250ZW50X3R5cGUgPSAn
dGV4dC9qYXZhc2NyaXB0JworICAgICAgICAgICAgcmVzID0gJycuam9pbihqc29ucCArIFsnKCcs
IHJlcywgJyknXSkKKyAgICAgICAgZWxpZiAnT3BlcmEnIGluIGVudmlyb24uZ2V0KCdIVFRQX1VT
RVJfQUdFTlQnLCAnJyk6CisgICAgICAgICAgICAjIE9wZXJhIGhhcyBidW5rIFhNTEh0dHBSZXF1
ZXN0IHN1cHBvcnQgZm9yIG1vc3QgbWltZSB0eXBlcworICAgICAgICAgICAgY29udGVudF90eXBl
ID0gJ3RleHQvcGxhaW4nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250ZW50X3R5cGUg
PSBzZWxmLm1pbWVfdHlwZQorICAgICAgICBoZWFkZXJzID0gWworICAgICAgICAgICAgKCdDb250
ZW50LXR5cGUnLCBjb250ZW50X3R5cGUpLAorICAgICAgICAgICAgKCdDb250ZW50LWxlbmd0aCcs
IGxlbihyZXMpKSwKKyAgICAgICAgXQorICAgICAgICBoZWFkZXJzLmV4dGVuZChyZXNwb25zZVsn
aGVhZGVycyddKQorICAgICAgICBzdGFydF9yZXNwb25zZShyZXNwb25zZVsnc3RhdHVzJ10sIGhl
YWRlcnMpCisgICAgICAgIHJldHVybiBbcmVzXQorCitkZWYgZmFjdG9yeShhcHAsIGdsb2JhbF9j
b25mLCAqKmt3KToKKyAgICByZXR1cm4gSlNPTkZpbHRlcihhcHAsICoqa3cpCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vanNvbmZp
bHRlci5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBX
ZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vc2Nhbm5lci5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3NpbXBsZWpzb24vc2Nhbm5lci5w
eQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc2ltcGxlanNv
bi9zY2FubmVyLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisiIiIKK0l0ZXJhdG9y
IGJhc2VkIHNyZSB0b2tlbiBzY2FubmVyCisiIiIKK2ltcG9ydCBzcmVfcGFyc2UsIHNyZV9jb21w
aWxlLCBzcmVfY29uc3RhbnRzCitmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0IEJSQU5DSCwgU1VC
UEFUVEVSTgorZnJvbSByZSBpbXBvcnQgVkVSQk9TRSwgTVVMVElMSU5FLCBET1RBTEwKK2ltcG9y
dCByZQorCitfX2FsbF9fID0gWydTY2FubmVyJywgJ3BhdHRlcm4nXQorCitGTEFHUyA9IChWRVJC
T1NFIHwgTVVMVElMSU5FIHwgRE9UQUxMKQorY2xhc3MgU2Nhbm5lcihvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBsZXhpY29uLCBmbGFncz1GTEFHUyk6CisgICAgICAgIHNlbGYuYWN0
aW9ucyA9IFtOb25lXQorICAgICAgICAjIGNvbWJpbmUgcGhyYXNlcyBpbnRvIGEgY29tcG91bmQg
cGF0dGVybgorICAgICAgICBzID0gc3JlX3BhcnNlLlBhdHRlcm4oKQorICAgICAgICBzLmZsYWdz
ID0gZmxhZ3MKKyAgICAgICAgcCA9IFtdCisgICAgICAgIGZvciBpZHgsIHRva2VuIGluIGVudW1l
cmF0ZShsZXhpY29uKToKKyAgICAgICAgICAgIHBocmFzZSA9IHRva2VuLnBhdHRlcm4KKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuID0gc3JlX3BhcnNlLlN1YlBh
dHRlcm4ocywKKyAgICAgICAgICAgICAgICAgICAgWyhTVUJQQVRURVJOLCAoaWR4ICsgMSwgc3Jl
X3BhcnNlLnBhcnNlKHBocmFzZSwgZmxhZ3MpKSldKQorICAgICAgICAgICAgZXhjZXB0IHNyZV9j
b25zdGFudHMuZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHAuYXBw
ZW5kKHN1YnBhdHRlcm4pCisgICAgICAgICAgICBzZWxmLmFjdGlvbnMuYXBwZW5kKHRva2VuKQor
CisgICAgICAgIHAgPSBzcmVfcGFyc2UuU3ViUGF0dGVybihzLCBbKEJSQU5DSCwgKE5vbmUsIHAp
KV0pCisgICAgICAgIHNlbGYuc2Nhbm5lciA9IHNyZV9jb21waWxlLmNvbXBpbGUocCkKKworCisg
ICAgZGVmIGl0ZXJzY2FuKHNlbGYsIHN0cmluZywgaWR4PTAsIGNvbnRleHQ9Tm9uZSk6CisgICAg
ICAgICIiIgorICAgICAgICBZaWVsZCBtYXRjaCwgZW5kX2lkeCBmb3IgZWFjaCBtYXRjaAorICAg
ICAgICAiIiIKKyAgICAgICAgbWF0Y2ggPSBzZWxmLnNjYW5uZXIuc2Nhbm5lcihzdHJpbmcsIGlk
eCkubWF0Y2gKKyAgICAgICAgYWN0aW9ucyA9IHNlbGYuYWN0aW9ucworICAgICAgICBsYXN0ZW5k
ID0gaWR4CisgICAgICAgIGVuZCA9IGxlbihzdHJpbmcpCisgICAgICAgIHdoaWxlIFRydWU6Cisg
ICAgICAgICAgICBtID0gbWF0Y2goKQorICAgICAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBtYXRjaGJlZ2luLCBtYXRjaGVuZCA9IG0uc3Bh
bigpCisgICAgICAgICAgICBpZiBsYXN0ZW5kID09IG1hdGNoZW5kOgorICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb25zW20ubGFzdGluZGV4XQorICAgICAg
ICAgICAgaWYgYWN0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJ2YWwsIG5leHRf
cG9zID0gYWN0aW9uKG0sIGNvbnRleHQpCisgICAgICAgICAgICAgICAgaWYgbmV4dF9wb3MgaXMg
bm90IE5vbmUgYW5kIG5leHRfcG9zICE9IG1hdGNoZW5kOgorICAgICAgICAgICAgICAgICAgICAj
ICJmYXN0IGZvcndhcmQiIHRoZSBzY2FubmVyCisgICAgICAgICAgICAgICAgICAgIG1hdGNoZW5k
ID0gbmV4dF9wb3MKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLnNjYW5uZXIuc2Nh
bm5lcihzdHJpbmcsIG1hdGNoZW5kKS5tYXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIHJ2YWws
IG1hdGNoZW5kCisgICAgICAgICAgICBsYXN0ZW5kID0gbWF0Y2hlbmQKKyAgICAgICAgICAgIAor
ZGVmIHBhdHRlcm4ocGF0dGVybiwgZmxhZ3M9RkxBR1MpOgorICAgIGRlZiBkZWNvcmF0b3IoZm4p
OgorICAgICAgICBmbi5wYXR0ZXJuID0gcGF0dGVybgorICAgICAgICBmbi5yZWdleCA9IHJlLmNv
bXBpbGUocGF0dGVybiwgZmxhZ3MpCisgICAgICAgIHJldHVybiBmbgorICAgIHJldHVybiBkZWNv
cmF0b3IKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c2ltcGxlanNvbi9zY2FubmVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAg
ICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3VwbG9h
ZGZvcm0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3Rl
bXBsYXRlcy91cGxvYWRmb3JtLmh0bWwJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMv
VGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xOCw2ICsxOCw5IEBACiAgICAgICAgIDx0ZD48aW5wdXQgY2xhc3M9aW5wdXR0ZXh0IHR5
cGU9InRleHQiIG5hbWU9InRlc3R0eXBlIiB2YWx1ZT0iIi8+PC90ZD4KICAgICA8L3RyPgogICAg
IDwvdGFibGU+CisgICAgPGJyPgorICAgIDxkaXY+PGlucHV0IGNsYXNzPWJ1dHRvbiB0eXBlPSJj
aGVja2JveCIgbmFtZT0iaW5jcmVtZW50YWwiPkluY3JlbWVudGFsIHJlc3VsdHMsIG1lcmdlIHdp
dGggc2VydmVyIGZpbGUuPC9kaXY+CisgICAgPGJyPgogICAgIDxkaXY+PGlucHV0IGNsYXNzPWJ1
dHRvbiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiBtdWx0aXBsZT48L2Rpdj4KICAgICA8YnI+CiAg
ICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlVwbG9hZCI+
PC9kaXY+Cg==
</data>
<flag name="review"
          id="39282"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55176</attachid>
            <date>2010-05-05 16:56:18 -0700</date>
            <delta_ts>2010-05-06 12:52:36 -0700</delta_ts>
            <desc>Remove simplejson from AE</desc>
            <filename>ae_merge.patch</filename>
            <type>text/plain</type>
            <size>50370</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU4ODQwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMDUgIFZpY3RvciBXYW5nICA8dmlj
dG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLS4gQWRkIHJlc3VsdC5qc29uIGluY3JlbWVudGFsIG1lcmdpbmcgZnVuY3Rp
b25hbGl0eSB0byB0ZXN0IHJlc3VsdHMgYXBwIGVuZ2luZS4KKyAgICAgICAgLS4gYmxvYnN0b3Jl
IGlzIG5vdCBzdWl0YWJsZSBmb3IgQUUgZGF0YSBtZXJnaW5nIGFuZCB0aGVyZSBpcyBubyBBUEkg
dG8KKyAgICAgICAgICAgcHJvZ3JhbWF0aWNhbGx5IGVkaXQgZXhpc3RpbmcgYmxvYiBvciB3cml0
ZSBhIG5ldyBvbmUgeWV0LCBzbyByZXBsYWNlIGJsYm9zdG9yZQorICAgICAgICAgICB3aXRoIGRh
dGFzdG9yZS4gSWYgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRlcyksIHN0b3JlIGZp
bGUgZGF0YSBpbgorICAgICAgICAgICBtdWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAgICAg
ICAgLS4gRml4IHN0eWxlcy4KKworICAgICAgICBUZXN0OiBqc29ucmVzdWx0c191bml0dGVzdCB0
byB0ZXN0IG1lcmdpbmcgbG9naWNzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODU5OQorCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9oYW5k
bGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5OgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvaGFu
ZGxlcnMvbWVudS5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3Rm
aWxlaGFuZGxlci5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL21haW4ucHk6CisgICAg
ICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5OgorICAgICAgICAq
IFRlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weTogQWRkZWQu
CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weToKKyAgICAgICAg
KiBUZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWw6CisKIDIwMTAtMDUt
MDQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNoaW5pY2hpcm8gSGFtYWppLgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9t
YWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbWFpbi5w
eQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21haW4u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAt
MTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwogIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNDIsMTcgKzQyLDE1IEBAIHJvdXRlcyA9
IFsKICAgICAoJy9kYXNoYm9hcmRzL3VwZGF0ZScsIGRhc2hib2FyZGhhbmRsZXIuVXBkYXRlRGFz
aGJvYXJkRmlsZSksCiAgICAgKCcvZGFzaGJvYXJkcy8oW14/XSspPycsIGRhc2hib2FyZGhhbmRs
ZXIuR2V0RGFzaGJvYXJkRmlsZSksCiAgICAgKCcvdGVzdGZpbGUvZGVsZXRlJywgdGVzdGZpbGVo
YW5kbGVyLkRlbGV0ZUZpbGUpLAotICAgICgnL3Rlc3RmaWxlL3VwbG9hZHVybCcsIHRlc3RmaWxl
aGFuZGxlci5HZXRVcGxvYWRVcmwpLAogICAgICgnL3Rlc3RmaWxlL3VwbG9hZCcsIHRlc3RmaWxl
aGFuZGxlci5VcGxvYWQpLAogICAgICgnL3Rlc3RmaWxlL3VwbG9hZGZvcm0nLCB0ZXN0ZmlsZWhh
bmRsZXIuVXBsb2FkRm9ybSksCiAgICAgKCcvdGVzdGZpbGUvPycsIHRlc3RmaWxlaGFuZGxlci5H
ZXRGaWxlKSwKLSAgICAoJy91cGxvYWRmYWlsJywgdGVzdGZpbGVoYW5kbGVyLlVwbG9hZFN0YXR1
cyksCi0gICAgKCcvdXBsb2Fkc3VjY2VzcycsIHRlc3RmaWxlaGFuZGxlci5VcGxvYWRTdGF0dXMp
LAogICAgICgnLyp8L21lbnUnLCBtZW51Lk1lbnUpLAogXQogCiBhcHBsaWNhdGlvbiA9IHdlYmFw
cC5XU0dJQXBwbGljYXRpb24ocm91dGVzLCBkZWJ1Zz1UcnVlKQogCisKIGRlZiBtYWluKCk6CiAg
ICAgcnVuX3dzZ2lfYXBwKGFwcGxpY2F0aW9uKQogCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL2hhbmRsZXJzL2Rhc2hib2FyZGhhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5CShy
ZXZpc2lvbiA1ODc5MCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMv
ZGFzaGJvYXJkaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMg
CisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zOCw2ICsz
OCw3IEBAIGZyb20gbW9kZWwuZGFzaGJvYXJkZmlsZSBpbXBvcnQgRGFzaGJvYXIKIAogUEFSQU1f
RklMRSA9ICJmaWxlIgogCisKIGRlZiBnZXRfY29udGVudF90eXBlKGZpbGVuYW1lKToKICAgICBy
ZXR1cm4gbWltZXR5cGVzLmd1ZXNzX3R5cGUoZmlsZW5hbWUpWzBdIG9yICJhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0iCiAKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxl
cnMvbWVudS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hh
bmRsZXJzL21lbnUucHkJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9oYW5kbGVycy9tZW51LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAog
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAogIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQog
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotIyAKKyMKICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYx
LDQgKzYxLDMgQEAgY2xhc3MgTWVudSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgogCiAgICAgICAg
IHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKAogICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKCJ0
ZW1wbGF0ZXMvbWVudS5odG1sIiwgdGVtcGxhdGVfdmFsdWVzKSkKLQpJbmRleDogV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0ZmlsZWhhbmRs
ZXIucHkJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9o
YW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBA
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAt
MzAsMTEgKzMwLDEwIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdXJsbGliCiAKIGZyb20gZ29v
Z2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0IHVzZXJzCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0
IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IHdlYmFw
cAotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAgaW1wb3J0IGJsb2JzdG9yZV9oYW5k
bGVycwogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAgaW1wb3J0IHRlbXBsYXRlCiAK
K2Zyb20gbW9kZWwuanNvbnJlc3VsdHMgaW1wb3J0IEpzb25SZXN1bHRzCiBmcm9tIG1vZGVsLnRl
c3RmaWxlIGltcG9ydCBUZXN0RmlsZQogCiBQQVJBTV9CVUlMREVSID0gImJ1aWxkZXIiCkBAIC00
MywxMCArNDIsMTEgQEAgUEFSQU1fRklMRSA9ICJmaWxlIgogUEFSQU1fTkFNRSA9ICJuYW1lIgog
UEFSQU1fS0VZID0gImtleSIKIFBBUkFNX1RFU1RfVFlQRSA9ICJ0ZXN0dHlwZSIKK1BBUkFNX0lO
Q1JFTUVOVEFMID0gImluY3JlbWVudGFsIgogCiAKIGNsYXNzIERlbGV0ZUZpbGUod2ViYXBwLlJl
cXVlc3RIYW5kbGVyKToKLSAgICAiIiJEZWxldGUgdGVzdCBmaWxlIGZvciBhIGdpdmVuIGJ1aWxk
ZXIgYW5kIG5hbWUgZnJvbSBkYXRhc3RvcmUgKG1ldGFkYXRhKSBhbmQgYmxvYnN0b3JlIChmaWxl
IGRhdGEpLiIiIgorICAgICIiIkRlbGV0ZSB0ZXN0IGZpbGUgZm9yIGEgZ2l2ZW4gYnVpbGRlciBh
bmQgbmFtZSBmcm9tIGRhdGFzdG9yZS4iIiIKIAogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAg
IGtleSA9IHNlbGYucmVxdWVzdC5nZXQoUEFSQU1fS0VZKQpAQCAtNTUsNyArNTUsNyBAQCBjbGFz
cyBEZWxldGVGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgIG5hbWUgPSBzZWxm
LnJlcXVlc3QuZ2V0KFBBUkFNX05BTUUpCiAKICAgICAgICAgbG9nZ2luZy5kZWJ1ZygKLSAgICAg
ICAgICAgICJEZWxldGluZyBGaWxlLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTog
JXMsIGJsb2Iga2V5OiAlcy4iLAorICAgICAgICAgICAgIkRlbGV0aW5nIEZpbGUsIGJ1aWxkZXI6
ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywga2V5OiAlcy4iLAogICAgICAgICAgICAgYnVp
bGRlciwgdGVzdF90eXBlLCBuYW1lLCBrZXkpCiAKICAgICAgICAgVGVzdEZpbGUuZGVsZXRlX2Zp
bGUoa2V5LCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIDEwMCkKQEAgLTY1LDcgKzY1LDcgQEAg
Y2xhc3MgRGVsZXRlRmlsZSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgogICAgICAgICAgICAgJSAo
YnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKSkKIAogCi1jbGFzcyBHZXRGaWxlKGJsb2JzdG9yZV9o
YW5kbGVycy5CbG9ic3RvcmVEb3dubG9hZEhhbmRsZXIpOgorY2xhc3MgR2V0RmlsZSh3ZWJhcHAu
UmVxdWVzdEhhbmRsZXIpOgogICAgICIiIkdldCBmaWxlIGNvbnRlbnQgb3IgbGlzdCBvZiBmaWxl
cyBmb3IgZ2l2ZW4gYnVpbGRlciBhbmQgbmFtZS4iIiIKIAogICAgIGRlZiBfZ2V0X2ZpbGVfbGlz
dChzZWxmLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpOgpAQCAtNzcsNyArNzcsOCBAQCBjbGFz
cyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvCiAgICAgICAgICAgICBuYW1lOiBm
aWxlIG5hbWUKICAgICAgICAgIiIiCiAKLSAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmls
ZXMoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCAxMDApCisgICAgICAgIGZpbGVzID0gVGVzdEZp
bGUuZ2V0X2ZpbGVzKAorICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBsb2Fk
X2RhdGE9RmFsc2UsIGxpbWl0PTEwMCkKICAgICAgICAgaWYgbm90IGZpbGVzOgogICAgICAgICAg
ICAgbG9nZ2luZy5pbmZvKCJGaWxlIG5vdCBmb3VuZCwgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTog
JXMsIG5hbWU6ICVzLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90
eXBlLCBuYW1lKQpAQCAtMTAzLDE2ICsxMDQsMTUgQEAgY2xhc3MgR2V0RmlsZShibG9ic3RvcmVf
aGFuZGxlcnMuQmxvYnN0bwogICAgICAgICAgICAgbmFtZTogZmlsZSBuYW1lCiAgICAgICAgICIi
IgogCi0gICAgICAgIGZpbGVzID0gVGVzdEZpbGUuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3RfdHlw
ZSwgbmFtZSwgMSkKKyAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoCisgICAgICAg
ICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGxvYWRfZGF0YT1UcnVlLCBsaW1pdD0xKQog
ICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIkZpbGUgbm90
IGZvdW5kLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMuIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCiAgICAgICAgICAgICBy
ZXR1cm4KIAotICAgICAgICBibG9iX2tleSA9IGZpbGVzWzBdLmJsb2Jfa2V5Ci0gICAgICAgIGJs
b2JfaW5mbyA9IGJsb2JzdG9yZS5nZXQoYmxvYl9rZXkpCi0gICAgICAgIGlmIGJsb2JfaW5mbzoK
LSAgICAgICAgICAgIHNlbGYuc2VuZF9ibG9iKGJsb2JfaW5mbywgInRleHQvcGxhaW4iKQorICAg
ICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID0gInRleHQvcGxhaW47
IGNoYXJzZXQ9dXRmLTgiCisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKGZpbGVzWzBd
LmRhdGEpCiAKICAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgICBidWlsZGVyID0gc2VsZi5yZXF1
ZXN0LmdldChQQVJBTV9CVUlMREVSKQpAQCAtMTMzLDg5ICsxMzMsNzIgQEAgY2xhc3MgR2V0Rmls
ZShibG9ic3RvcmVfaGFuZGxlcnMuQmxvYnN0bwogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dl
dF9maWxlX2NvbnRlbnQoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKQogCiAKLWNsYXNzIEdldFVw
bG9hZFVybCh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIkdldCBhbiB1cmwgZm9yIHVw
bG9hZGluZyBmaWxlIHRvIGJsb2JzdG9yZS4gQSBzcGVjaWFsIHVybCBpcyByZXF1aXJlZCBmb3Ig
ZWFjaCBibG9ic290cmUgdXBsb2FkLiIiIgotCi0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAg
dXBsb2FkX3VybCA9IGJsb2JzdG9yZS5jcmVhdGVfdXBsb2FkX3VybCgiL3Rlc3RmaWxlL3VwbG9h
ZCIpCi0gICAgICAgIGxvZ2dpbmcuaW5mbygiR2V0dGluZyB1cGxvYWQgdXJsOiAlcy4iLCB1cGxv
YWRfdXJsKQotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSh1cGxvYWRfdXJsKQotCi0K
LWNsYXNzIFVwbG9hZChibG9ic3RvcmVfaGFuZGxlcnMuQmxvYnN0b3JlVXBsb2FkSGFuZGxlcik6
Ci0gICAgIiIiVXBsb2FkIGZpbGUgdG8gYmxvYnN0b3JlLiIiIgorY2xhc3MgVXBsb2FkKHdlYmFw
cC5SZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiVXBsb2FkIHRlc3QgcmVzdWx0cyBmaWxlIHRvIGRh
dGFzdG9yZS4iIiIKIAogICAgIGRlZiBwb3N0KHNlbGYpOgotICAgICAgICB1cGxvYWRlZF9maWxl
cyA9IHNlbGYuZ2V0X3VwbG9hZHMoImZpbGUiKQotICAgICAgICBpZiBub3QgdXBsb2FkZWRfZmls
ZXM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBsb2FkX2RvbmUoWygiTWlzc2luZyB1cGxv
YWQgZmlsZSBmaWVsZC4iKV0pCisgICAgICAgIGZpbGVfcGFyYW1zID0gc2VsZi5yZXF1ZXN0LlBP
U1QuZ2V0YWxsKFBBUkFNX0ZJTEUpCisgICAgICAgIGlmIG5vdCBmaWxlX3BhcmFtczoKKyAgICAg
ICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMOiBtaXNzaW5nIHVwbG9hZCBmaWxl
IGZpZWxkLiIpCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBidWlsZGVyID0gc2VsZi5y
ZXF1ZXN0LmdldChQQVJBTV9CVUlMREVSKQogICAgICAgICBpZiBub3QgYnVpbGRlcjoKLSAgICAg
ICAgICAgIGZvciBibG9iX2luZm8gaW4gdXBsb2FkZWRfZmlsZXM6Ci0gICAgICAgICAgICAgICAg
YmxvYl9pbmZvLmRlbGV0ZSgpCi0gICAgCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBsb2Fk
X2RvbmUoWygiTWlzc2luZyBidWlsZGVyIHBhcmFtZXRlciBpbiB1cGxvYWQgcmVxdWVzdC4iKV0p
CisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiRkFJTDogbWlzc2luZyBidWls
ZGVyIHBhcmFtZXRlci4iKQorICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgdGVzdF90eXBl
ID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9URVNUX1RZUEUpCisgICAgICAgIGluY3JlbWVudGFs
ID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9JTkNSRU1FTlRBTCkKIAogICAgICAgICBsb2dnaW5n
LmRlYnVnKAogICAgICAgICAgICAgIlByb2Nlc3NpbmcgdXBsb2FkIHJlcXVlc3QsIGJ1aWxkZXI6
ICVzLCB0ZXN0X3R5cGU6ICVzLiIsCiAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUpCiAK
KyAgICAgICAgIyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHR5cGVzIG9mIGVhY2ggZmlsZV9wYXJh
bXMgaW4gdGhlIHJlcXVlc3Q6CisgICAgICAgICMgb25lIGZpbGUgaXRlbSBvciBhIGxpc3Qgb2Yg
ZmlsZSBpdGVtcy4KKyAgICAgICAgIyBOb3JtYWxpemUgZmlsZV9wYXJhbXMgdG8gYmVjb21lcyBh
IGZpbGUgaXRlbSBsaXN0LgorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGxvZ2dpbmcuZGVi
dWcoInRlc3Q6ICVzLCB0eXBlOiVzIiwgZmlsZV9wYXJhbXMsIHR5cGUoZmlsZV9wYXJhbXMpKQor
ICAgICAgICBmb3IgaXRlbSBpbiBmaWxlX3BhcmFtczoKKyAgICAgICAgICAgIGlmIHR5cGUoaXRl
bSkgaXMgbGlzdDoKKyAgICAgICAgICAgICAgICBmaWxlcy5leHRlbmQoaXRlbSkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGl0ZW0pCisKICAgICAgICAg
ZXJyb3JzID0gW10KLSAgICAgICAgZm9yIGJsb2JfaW5mbyBpbiB1cGxvYWRlZF9maWxlczoKLSAg
ICAgICAgICAgIHRmID0gVGVzdEZpbGUudXBkYXRlX2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBi
bG9iX2luZm8pCisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgIyBJbmNyZW1l
bnRhbCB1cGRhdGUgb3IgcmVwbGFjZSB0aGUgd2hvbGUgZmlsZS4KKyAgICAgICAgICAgIGlmIGlu
Y3JlbWVudGFsOgorICAgICAgICAgICAgICAgIGlmIGYuZmlsZW5hbWUgIT0gInJlc3VsdHMuanNv
biI6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAiTWVyZ2luZyBpbmNyZW1lbnRhbCByZXN1bHRzICVzIGlzIG5vdCBzdXBwb3J0ZWQi
ICUgZi5maWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg
ICAgICAgIHRmID0gSnNvblJlc3VsdHMudXBkYXRlKGJ1aWxkZXIsIHRlc3RfdHlwZSwgZi52YWx1
ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGYgPSBUZXN0RmlsZS51cGRh
dGUoYnVpbGRlciwgdGVzdF90eXBlLCBmLmZpbGVuYW1lLCBmLnZhbHVlKQorCiAgICAgICAgICAg
ICBpZiBub3QgdGY6CiAgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgKICAgICAgICAgICAg
ICAgICAgICAgIlVwbG9hZCBmYWlsZWQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1l
OiAlcy4iICUKLSAgICAgICAgICAgICAgICAgICAgKGJ1aWxkZXIsIHRlc3RfdHlwZSwgYmxvYl9p
bmZvLmZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICBibG9iX2luZm8uZGVsZXRlKCkKLQotICAg
ICAgICByZXR1cm4gc2VsZi5fdXBsb2FkX2RvbmUoZXJyb3JzKQotCi0gICAgZGVmIF91cGxvYWRf
ZG9uZShzZWxmLCBlcnJvcnMpOgotICAgICAgICBsb2dnaW5nLmluZm8oInVwbG9hZCBkb25lLiIp
Ci0KLSAgICAgICAgZXJyb3JfbWVzc2FnZXMgPSBbXQotICAgICAgICBmb3IgZXJyb3IgaW4gZXJy
b3JzOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKGVycm9yKQotICAgICAgICAgICAgZXJyb3Jf
bWVzc2FnZXMuYXBwZW5kKCJlcnJvcj0lcyIgJSB1cmxsaWIucXVvdGUoZXJyb3IpKQorICAgICAg
ICAgICAgICAgICAgICAoYnVpbGRlciwgdGVzdF90eXBlLCBmLmZpbGVuYW1lKSkKIAotICAgICAg
ICBpZiBlcnJvcl9tZXNzYWdlczoKLSAgICAgICAgICAgIHJlZGlyZWN0X3VybCA9ICIvdXBsb2Fk
ZmFpbD8lcyIgJSAiJiIuam9pbihlcnJvcl9tZXNzYWdlcykKKyAgICAgICAgaWYgZXJyb3JzOgor
ICAgICAgICAgICAgbWVzc2FnZXMgPSAiRkFJTDogIiArICI7ICIuam9pbihlcnJvcnMpCisgICAg
ICAgICAgICBsb2dnaW5nLndhcm5pbmcobWVzc2FnZXMpCisgICAgICAgICAgICBzZWxmLnJlc3Bv
bnNlLnNldF9zdGF0dXMoNTAwLCBtZXNzYWdlcykKKyAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uu
b3V0LndyaXRlKCJGQUlMIikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlZGlyZWN0X3Vy
bCA9ICIvdXBsb2Fkc3VjY2VzcyIKLQotICAgICAgICBsb2dnaW5nLmluZm8ocmVkaXJlY3RfdXJs
KQotICAgICAgICAjIEJsb2JzdG9yZVVwbG9hZEhhbmRsZXIgcmVxdWlyZXMgcmVkaXJlY3QgYXQg
dGhlIGVuZC4KLSAgICAgICAgc2VsZi5yZWRpcmVjdChyZWRpcmVjdF91cmwpCisgICAgICAgICAg
ICBzZWxmLnJlc3BvbnNlLnNldF9zdGF0dXMoMjAwKQorICAgICAgICAgICAgc2VsZi5yZXNwb25z
ZS5vdXQud3JpdGUoIk9LIikKIAogCiBjbGFzcyBVcGxvYWRGb3JtKHdlYmFwcC5SZXF1ZXN0SGFu
ZGxlcik6Ci0gICAgIiIiU2hvdyBhIGZvcm0gc28gdXNlciBjYW4gc3VibWl0IGEgZmlsZSB0byBi
bG9ic3RvcmUuIiIiCisgICAgIiIiU2hvdyBhIGZvcm0gc28gdXNlciBjYW4gdXBsb2FkIGEgZmls
ZS4iIiIKIAogICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIHVwbG9hZF91cmwgPSBibG9ic3Rv
cmUuY3JlYXRlX3VwbG9hZF91cmwoIi90ZXN0ZmlsZS91cGxvYWQiKQogICAgICAgICB0ZW1wbGF0
ZV92YWx1ZXMgPSB7Ci0gICAgICAgICAgICAidXBsb2FkX3VybCI6IHVwbG9hZF91cmwsCisgICAg
ICAgICAgICAidXBsb2FkX3VybCI6ICIvdGVzdGZpbGUvdXBsb2FkIiwKICAgICAgICAgfQogICAg
ICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSh0ZW1wbGF0ZS5yZW5kZXIoInRlbXBsYXRlcy91
cGxvYWRmb3JtLmh0bWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVtcGxhdGVfdmFsdWVzKSkKLQotY2xhc3MgVXBsb2FkU3RhdHVzKHdlYmFwcC5S
ZXF1ZXN0SGFuZGxlcik6Ci0gICAgIiIiUmV0dXJuIHN0YXR1cyBvZiBmaWxlIHVwbG9hZGluZyIi
IgotCi0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVXBkYXRlIHN0
YXR1cyIpCi0KLSAgICAgICAgaWYgc2VsZi5yZXF1ZXN0LnBhdGggPT0gIi91cGxvYWRzdWNjZXNz
IjoKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uuc2V0X3N0YXR1cygyMDApCi0gICAgICAgICAg
ICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiT0siKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZXJyb3JzID0gc2VsZi5yZXF1ZXN0LnBhcmFtcy5nZXRhbGwoImVycm9yIikKLSAgICAgICAg
ICAgIGlmIGVycm9yczoKLSAgICAgICAgICAgICAgICBtZXNzYWdlcyA9ICJGQUlMOiAiICsgIjsg
Ii5qb2luKGVycm9ycykKLSAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcobWVzc2FnZXMp
Ci0gICAgICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDUwMCwgbWVzc2FnZXMp
Ci0gICAgICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIkZBSUwiKQpJbmRleDog
V2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGFzaGJvYXJkZmls
ZS5weQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21v
ZGVsL2Rhc2hib2FyZGZpbGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
IAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtMzYsNiAr
MzYsNyBAQCBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkYgogU1ZOX1BBVEhfREFT
SEJPQVJEID0gKCJodHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3Rv
b2xzLyIKICAgICAiZGFzaGJvYXJkcy8iKQogCisKIGNsYXNzIERhc2hib2FyZEZpbGUoZGIuTW9k
ZWwpOgogICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCiAgICAgZGF0YSA9IGRiLkJsb2JQ
cm9wZXJ0eSgpCkBAIC05Miw3ICs5Myw3IEBAIGNsYXNzIERhc2hib2FyZEZpbGUoZGIuTW9kZWwp
OgogICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIk5vIGV4
aXN0aW5nIGZpbGUsIGFkZGVkIGFzIG5ldyBmaWxlLiIpCiAgICAgICAgICAgICByZXR1cm4gY2xz
LmFkZF9maWxlKG5hbWUsIGRhdGEpCi0gICAgICAgIAorCiAgICAgICAgIGxvZ2dpbmcuZGVidWco
IlVwZGF0aW5nIGV4aXN0aW5nIGZpbGUuIikKICAgICAgICAgZmlsZSA9IGZpbGVzWzBdCiAgICAg
ICAgIGZpbGUuZGF0YSA9IGRhdGEKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
bW9kZWwvZGF0YXN0b3JlZmlsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUucHkJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTI5IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBkYXRldGltZSBpbXBv
cnQgZGF0ZXRpbWUKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQg
aW1wb3J0IGRiCisKK01BWF9EQVRBX0VOVFJZX1BFUl9GSUxFID0gMTAKK01BWF9FTlRSWV9MRU4g
PSAxMDAwICogMTAwMAorCisKK2NsYXNzIERhdGFFbnRyeShkYi5Nb2RlbCk6CisgICAgIiIiRGF0
YXN0b3JlIGVudHJ5IHRoYXQgc3RvcmVzIG9uZSBzZWdtYW50IG9mIGZpbGUgZGF0YQorICAgICAg
ICg8MTAwMCoxMDAwIGJ5dGVzKS4KKyAgICAiIiIKKworICAgIGRhdGEgPSBkYi5CbG9iUHJvcGVy
dHkoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldChjbHMsIGtleSk6CisgICAgICAg
IHJldHVybiBkYi5nZXQoa2V5KQorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIGtleSk6CisgICAg
ICAgIHJldHVybiBkYi5nZXQoa2V5KQorCisKK2NsYXNzIERhdGFTdG9yZUZpbGUoZGIuTW9kZWwp
OgorICAgICIiIlRoaXMgY2xhc3Mgc3RvcmVzIGZpbGUgaW4gZGF0YXN0b3JlLgorICAgICAgIElm
IGEgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRlcyksIHRoZSBmaWxlIGlzIHNwbGl0
dGVkIGludG8KKyAgICAgICBtdWx0aXBsZSBzZWdtZW50cyBhbmQgc3RvcmVkIGluIG11bHRpcGxl
IGRhdGFzdG9yZSBlbnRyaWVzLgorICAgICIiIgorCisgICAgbmFtZSA9IGRiLlN0cmluZ1Byb3Bl
cnR5KCkKKyAgICBkYXRhX2tleXMgPSBkYi5MaXN0UHJvcGVydHkoZGIuS2V5KQorICAgIGRhdGUg
PSBkYi5EYXRlVGltZVByb3BlcnR5KGF1dG9fbm93X2FkZD1UcnVlKQorCisgICAgZGF0YSA9IE5v
bmUKKworICAgIGRlZiBkZWxldGVfZGF0YShzZWxmLCBrZXlzPU5vbmUpOgorICAgICAgICBpZiBu
b3Qga2V5czoKKyAgICAgICAgICAgIGtleXMgPSBzZWxmLmRhdGFfa2V5cworCisgICAgICAgIGZv
ciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtl
eSkKKyAgICAgICAgICAgIGlmIGRhdGFfZW50cnk6CisgICAgICAgICAgICAgICAgZGF0YV9lbnRy
eS5kZWxldGUoKQorCisgICAgZGVmIHNhdmVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYg
bm90IGRhdGE6CisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIk5vIGRhdGEgdG8gc2F2ZS4i
KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbGVuKGRhdGEpID4gKE1B
WF9EQVRBX0VOVFJZX1BFUl9GSUxFICogTUFYX0VOVFJZX0xFTik6CisgICAgICAgICAgICBsb2dn
aW5nLmVycm9yKCJGaWxlIHRvbyBiaWcsIGNhbid0IHNhdmUgdG8gZGF0YXN0b3JlOiAlZEsiLAor
ICAgICAgICAgICAgICAgIGxlbihkYXRhKSAvIDEwMjQpCisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgICAgICBzdGFydCA9IDAKKyAgICAgICAga2V5cyA9IHNlbGYuZGF0YV9rZXlzCisg
ICAgICAgIHNlbGYuZGF0YV9rZXlzID0gW10KKyAgICAgICAgd2hpbGUgc3RhcnQgPCBsZW4oZGF0
YSk6CisgICAgICAgICAgICBpZiBrZXlzOgorICAgICAgICAgICAgICAgIGtleSA9IGtleXMucG9w
KDApCisgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeS5nZXQoa2V5KQorICAg
ICAgICAgICAgICAgIGlmIG5vdCBkYXRhX2VudHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2dn
aW5nLndhcm5pbmcoIkZvdW5kIGtleSwgYnV0IG5vIGRhdGEgZW50cnk6ICVzIiwga2V5KQorICAg
ICAgICAgICAgICAgICAgICBkYXRhX2VudHJ5ID0gRGF0YUVudHJ5KCkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeSgpCisKKyAgICAgICAg
ICAgIGRhdGFfZW50cnkuZGF0YSA9IGRiLkJsb2IoZGF0YVtzdGFydDogc3RhcnQgKyBNQVhfRU5U
UllfTEVOXSkKKyAgICAgICAgICAgIGRhdGFfZW50cnkucHV0KCkKKworICAgICAgICAgICAgbG9n
Z2luZy5pbmZvKCJEYXRhIHNhdmVkOiAlcy4iLCBkYXRhX2VudHJ5LmtleSgpKQorICAgICAgICAg
ICAgc2VsZi5kYXRhX2tleXMuYXBwZW5kKGRhdGFfZW50cnkua2V5KCkpCisKKyAgICAgICAgICAg
IHN0YXJ0ID0gc3RhcnQgKyBNQVhfRU5UUllfTEVOCisKKyAgICAgICAgaWYga2V5czoKKyAgICAg
ICAgICAgIHNlbGYuZGVsZXRlX2RhdGEoa2V5cykKKworICAgICAgICBzZWxmLmRhdGEgPSBkYXRh
CisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBsb2FkX2RhdGEoc2VsZik6CisgICAg
ICAgIGlmIG5vdCBzZWxmLmRhdGFfa2V5czoKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygi
Tm8gZGF0YSB0byBsb2FkLiIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGRh
dGEgPSBbXQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuZGF0YV9rZXlzOgorICAgICAgICAgICAg
bG9nZ2luZy5pbmZvKCJMb2FkaW5nIGRhdGEgZm9yIGtleTogJXMuIiwga2V5KQorICAgICAgICAg
ICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeS5nZXQoa2V5KQorICAgICAgICAgICAgaWYgbm90IGRh
dGFfZW50cnk6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiTm8gZGF0YSBmb3VuZCBm
b3Iga2V5OiAlcy4iLCBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICAgICAgZGF0YS5hcHBlbmQoZGF0YV9lbnRyeS5kYXRhKQorCisgICAgICAgIHNlbGYuZGF0YSA9
ICIiLmpvaW4oZGF0YSkKKworICAgICAgICByZXR1cm4gc2VsZi5kYXRhCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUu
cHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzLnB5CShyZXZp
c2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0
cy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitm
cm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHNp
bXBsZWpzb24KK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gbW9kZWwudGVzdGZpbGUgaW1wb3J0IFRl
c3RGaWxlCisKK0pTT05fUkVTVUxUU19GSUxFID0gInJlc3VsdHMuanNvbiIKK0pTT05fUkVTVUxU
U19QUkVGSVggPSAiQUREX1JFU1VMVFMoIgorSlNPTl9SRVNVTFRTX1NVRkZJWCA9ICIpOyIKK0pT
T05fUkVTVUxUU19WRVJTSU9OX0tFWSA9ICJ2ZXJzaW9uIgorSlNPTl9SRVNVTFRTX0JVSUxEX05V
TUJFUlMgPSAiYnVpbGROdW1iZXJzIgorSlNPTl9SRVNVTFRTX1RFU1RTID0gInRlc3RzIgorSlNP
Tl9SRVNVTFRTX1JFU1VMVFMgPSAicmVzdWx0cyIKK0pTT05fUkVTVUxUU19USU1FUyA9ICJ0aW1l
cyIKK0pTT05fUkVTVUxUU19WRVJTSU9OID0gMworSlNPTl9SRVNVTFRTX01BWF9CVUlMRFMgPSA3
NTAKKworCitjbGFzcyBKc29uUmVzdWx0cyhvYmplY3QpOgorICAgIEBjbGFzc21ldGhvZAorICAg
IGRlZiBfc3RyaXBfcHJlZml4X3N1ZmZpeChjbHMsIGRhdGEpOgorICAgICAgICAiIiJTdHJpcCBv
dXQgcHJlZml4IGFuZCBzdWZmaXggb2YganNvbiByZXN1bHRzIHN0cmluZy4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgICAgZGF0YToganNvbiBmaWxlIGNvbnRlbnQuCisKKyAgICAgICAgUmV0
dXJuczoKKyAgICAgICAgICAgIGpzb24gc3RyaW5nIHdpdGhvdXQgcHJlZml4IGFuZCBzdWZmaXgu
CisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBkYXRhW2xlbihKU09OX1JFU1VMVFNfUFJF
RklYKToKKyAgICAgICAgICAgICAgICAgICAgbGVuKGRhdGEpIC0gbGVuKEpTT05fUkVTVUxUU19T
VUZGSVgpXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9nZW5lcmF0ZV9maWxlX2RhdGEo
Y2xzLCBqc29uLCBzb3J0X2tleXM9RmFsc2UpOgorICAgICAgICAiIiJHaXZlbiBqc29uIHN0cmlu
ZywgZ2VuZXJhdGUgZmlsZSBjb250ZW50IGRhdGEgYnkgYWRkaW5nCisgICAgICAgICAgIHByZWZp
eCBhbmQgc3VmZml4LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBqc29uOiBqc29uIHN0
cmluZyB3aXRob3V0IHByZWZpeCBhbmQgc3VmZml4LgorCisgICAgICAgIFJldHVybnM6CisgICAg
ICAgICAgICBqc29uIGZpbGUgZGF0YS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGF0YSA9IHNp
bXBsZWpzb24uZHVtcHMoanNvbiwgc2VwYXJhdG9ycz0oJywnLCAnOicpLAorICAgICAgICAgICAg
c29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgcmV0dXJuIEpTT05fUkVTVUxUU19QUkVGSVgg
KyBkYXRhICsgSlNPTl9SRVNVTFRTX1NVRkZJWAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVm
IF9sb2FkX2pzb24oY2xzLCBmaWxlX2RhdGEpOgorICAgICAgICAiIiJMb2FkIGpzb24gZmlsZSB0
byBhIHB5dGhvbiBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVfZGF0
YToganNvbiBmaWxlIGNvbnRlbnQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGpz
b24gb2JqZWN0IG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgor
CisgICAgICAgIGpzb25fcmVzdWx0c19zdHIgPSBjbHMuX3N0cmlwX3ByZWZpeF9zdWZmaXgoZmls
ZV9kYXRhKQorICAgICAgICBpZiBub3QganNvbl9yZXN1bHRzX3N0cjoKKyAgICAgICAgICAgIGxv
Z2dpbmcud2FybmluZygiTm8ganNvbiByZXN1bHRzIGRhdGEuIikKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNpbXBsZWpzb24ubG9h
ZHMoanNvbl9yZXN1bHRzX3N0cikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAg
ICAgICAgICAgbG9nZ2luZy5kZWJ1Zyhqc29uX3Jlc3VsdHNfc3RyKQorICAgICAgICAgICAgbG9n
Z2luZy5lcnJvcigiRmFpbGVkIHRvIGxvYWQganNvbiByZXN1bHRzOiAlcyIsIHN0cihlcnIpKQor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVy
Z2VfanNvbihjbHMsIGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAg
ICIiIk1lcmdlIGluY3JlbWVudGFsIGpzb24gaW50byBhZ2dyZWdhdGVkIGpzb24gcmVzdWx0cy4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dyZWdhdGVk
IGpzb24gb2JqZWN0LgorICAgICAgICAgICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVtZW50YWwg
anNvbiBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWUgaWYgbWVy
Z2Ugc3VjY2VlZHMgb3IKKyAgICAgICAgICAgIEZhbHNlIG9uIGZhaWx1cmUuCisgICAgICAgICIi
IgorCisgICAgICAgIGluY3JlbWVudGFsX2J1aWxkcyA9IGluY3JlbWVudGFsX2pzb25bSlNPTl9S
RVNVTFRTX0JVSUxEX05VTUJFUlNdCisgICAgICAgIGFnZ3JlZ2F0ZWRfYnVpbGRzID0gYWdncmVn
YXRlZF9qc29uW0pTT05fUkVTVUxUU19CVUlMRF9OVU1CRVJTXQorICAgICAgICBhZ2dyZWdhdGVk
X2J1aWxkX251bWJlciA9IGludChhZ2dyZWdhdGVkX2J1aWxkc1swXSkKKyAgICAgICAgIyBMb29w
IHRocm91Z2ggYWxsIGluY3JlbWVudGFsIGJ1aWxkcywgc3RhcnQgZnJvbSB0aGUgb2xkZXN0IHJ1
bi4KKyAgICAgICAgZm9yIGluZGV4IGluIHJldmVyc2VkKHJhbmdlKGxlbihpbmNyZW1lbnRhbF9i
dWlsZHMpKSk6CisgICAgICAgICAgICBidWlsZF9udW1iZXIgPSBpbnQoaW5jcmVtZW50YWxfYnVp
bGRzW2luZGV4XSkKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIk1lcmdpbmcgYnVpbGQgJXMs
IGluY3JlbWVudGFsIGpzb24gaW5kZXg6ICVkLiIsCisgICAgICAgICAgICAgICAgYnVpbGRfbnVt
YmVyLCBpbmRleCkKKworICAgICAgICAgICAgIyBSZXR1cm4gaWYgbm90IGFsbCBidWlsZCBudW1i
ZXJzIGluIHRoZSBpbmNyZW1lbnRhbCBqc29uIHJlc3VsdHMKKyAgICAgICAgICAgICMgYXJlIG5l
d2VyIHRoYW4gdGhlIG1vc3QgcmVjZW50IGJ1aWxkIGluIHRoZSBhZ2dyZWdhdGVkIHJlc3VsdHMu
CisgICAgICAgICAgICBpZiBidWlsZF9udW1iZXIgPCBhZ2dyZWdhdGVkX2J1aWxkX251bWJlcjoK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoKCJCdWlsZCAlZCBpbiBpbmNyZW1lbnRh
bCBqc29uIGlzIG9sZGVyIHRoYW4gIgorICAgICAgICAgICAgICAgICAgICAidGhlIG1vc3QgcmVj
ZW50IGJ1aWxkIGluIGFnZ3JlZ2F0ZWQgcmVzdWx0czogJWQiKSwKKyAgICAgICAgICAgICAgICAg
ICAgYnVpbGRfbnVtYmVyLCBhZ2dyZWdhdGVkX2J1aWxkX251bWJlcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgIyBTa2lwIG1lcmdpbmcgZHVwbGljYXRlIGJ1
aWxkLgorICAgICAgICAgICAgaWYgYnVpbGRfbnVtYmVyID09IGFnZ3JlZ2F0ZWRfYnVpbGRfbnVt
YmVyOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiRHVwbGljYXRlIGJ1aWxkICVk
IGluIGluY3JlbWVudGFsIGpzb24iLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9udW1iZXIp
CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBNZXJnZSB0aGlzIGJ1
aWxkIGludG8gYWdncmVhZ2F0ZWQgcmVzdWx0cy4KKyAgICAgICAgICAgIGNscy5fbWVyZ2Vfb25l
X2J1aWxkKGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbiwgaW5kZXgpCisgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJNZXJnZWQgYnVpbGQgJXMsIG1lcmdlZCBqc29uOiAlcy4iLAor
ICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlciwgYWdncmVnYXRlZF9qc29uKQorCisgICAgICAg
ICMgTWVyZ2UgdGVzdHMgcmVzdWx0cyBhbmQgdGltZXMKKyAgICAgICAgaW5jcmVtZW50YWxfdGVz
dHMgPSBpbmNyZW1lbnRhbF9qc29uW0pTT05fUkVTVUxUU19URVNUU10KKyAgICAgICAgaWYgaW5j
cmVtZW50YWxfdGVzdHM6CisgICAgICAgICAgICBhZ2dyZWdhdGVkX3Rlc3RzID0gYWdncmVnYXRl
ZF9qc29uW0pTT05fUkVTVUxUU19URVNUU10KKyAgICAgICAgICAgIGNscy5fbWVyZ2VfdGVzdHMo
YWdncmVnYXRlZF90ZXN0cywgaW5jcmVtZW50YWxfdGVzdHMpCisKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2Vfb25lX2J1aWxkKGNscywgYWdn
cmVnYXRlZF9qc29uLCBpbmNyZW1lbnRhbF9qc29uLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGluY3JlbWVudGFsX2luZGV4KToKKyAgICAgICAgIiIiTWVyZ2Ugb25lIGJ1aWxkIG9mIGluY3Jl
bWVudGFsIGpzb24gaW50byBhZ2dyZWdhdGVkIGpzb24gcmVzdWx0cy4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dyZWdhdGVkIGpzb24gb2JqZWN0Lgor
ICAgICAgICAgICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVtZW50YWwganNvbiBvYmplY3QuCisg
ICAgICAgICAgICBpbmNyZW1lbnRhbF9pbmRleDogaW5kZXggb2YgdGhlIGluY3JlbWVudGFsIGpz
b24gcmVzdWx0cyB0byBtZXJnZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGtleSBpbiBp
bmNyZW1lbnRhbF9qc29uLmtleXMoKToKKyAgICAgICAgICAgICMgTWVyZ2UganNvbiByZXN1bHRz
IGV4Y2VwdCAidGVzdHMiIHByb3BlcnRpZXMgKHJlc3VsdHMsIHRpbWVzIGV0YykuCisgICAgICAg
ICAgICAjICJ0ZXN0cyIgcHJvcGVydGllcyB3aWxsIGJlIGhhbmRsZWQgc2VwYXJhdGVseS4KKyAg
ICAgICAgICAgIGlmIGtleSA9PSBKU09OX1JFU1VMVFNfVEVTVFM6CisgICAgICAgICAgICAgICAg
Y29udGludWUKKworICAgICAgICAgICAgaWYga2V5IGluIGFnZ3JlZ2F0ZWRfanNvbjoKKyAgICAg
ICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XS5pbnNlcnQoCisgICAgICAgICAgICAgICAg
ICAgIDAsIGluY3JlbWVudGFsX2pzb25ba2V5XVtpbmNyZW1lbnRhbF9pbmRleF0pCisgICAgICAg
ICAgICAgICAgYWdncmVnYXRlZF9qc29uW2tleV0gPSBcCisgICAgICAgICAgICAgICAgICAgIGFn
Z3JlZ2F0ZWRfanNvbltrZXldWzpKU09OX1JFU1VMVFNfTUFYX0JVSUxEU10KKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uW2tleV0gPSBpbmNyZW1lbnRh
bF9qc29uW2tleV0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2VfdGVzdHMoY2xz
LCBhZ2dyZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24pOgorICAgICAgICAiIiJNZXJnZSAi
dGVzdHMiIHByb3BlcnRpZXM6cmVzdWx0cywgdGltZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICAgIGFnZ3JlZ2F0ZWRfanNvbjogYWdncmVnYXRlZCBqc29uIG9iamVjdC4KKyAgICAgICAg
ICAgIGluY3JlbWVudGFsX2pzb246IGluY3JlbWVudGFsIGpzb24gb2JqZWN0LgorICAgICAgICAi
IiIKKworICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGluY3JlbWVudGFsX2pzb246CisgICAgICAg
ICAgICBpZiB0ZXN0X25hbWUgaW4gYWdncmVnYXRlZF9qc29uOgorICAgICAgICAgICAgICAgIGNs
cy5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKAorICAgICAgICAgICAgICAgICAgICBp
bmNyZW1lbnRhbF9qc29uW3Rlc3RfbmFtZV1bSlNPTl9SRVNVTFRTX1JFU1VMVFNdLAorICAgICAg
ICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bdGVzdF9uYW1lXVtKU09OX1JFU1VMVFNfUkVT
VUxUU10pCisgICAgICAgICAgICAgICAgY2xzLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29k
ZWQoCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsX2pzb25bdGVzdF9uYW1lXVtKU09O
X1JFU1VMVFNfVElNRVNdLAorICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bdGVz
dF9uYW1lXVtKU09OX1JFU1VMVFNfVElNRVNdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBhZ2dyZWdhdGVkX2pzb25bdGVzdF9uYW1lXSA9IGluY3JlbWVudGFsX2pzb25bdGVz
dF9uYW1lXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9pbnNlcnRfaXRlbV9ydW5fbGVu
Z3RoX2VuY29kZWQoY2xzLCBpbmNyZW1lbnRhbF9pdGVtLCBhZ2dyZWdhdGVkX2l0ZW0pOgorICAg
ICAgICAiIiJJbnNlcnRzIHRoZSBpbmNyZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0
cyBpbnRvIHRoZSBhZ2dyZWdhdGVkCisgICAgICAgICAgIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1
bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpbmNyZW1lbnRhbF9pdGVtOiBpbmNy
ZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKyAgICAgICAgICAgIGFnZ3JlZ2F0
ZWRfaXRlbTogYWdncmVnYXRlZCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKyAgICAgICAg
IiIiCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gaW5jcmVtZW50YWxfaXRlbToKKyAgICAgICAgICAg
IGlmIGxlbihhZ2dyZWdhdGVkX2l0ZW0pIGFuZCBpdGVtWzFdID09IGFnZ3JlZ2F0ZWRfaXRlbVsw
XVsxXToKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0ZW1bMF1bMF0gPSBtaW4oCisgICAg
ICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfaXRlbVswXVswXSArIGl0ZW1bMF0sIEpTT05fUkVT
VUxUU19NQVhfQlVJTERTKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRo
ZSB0ZXN0IGl0ZW0gdmFsdWVzIG5lZWQgdG8gYmUgc3VtbWVkIGZyb20gY29udGludW91cyBydW5z
LgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgYW4gb2xkZXIgaXRlbSAobm90IG1vc3Qg
cmVjZW50IG9uZSkgd2hvc2UgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAjIHNhbWUgYXMgdGhl
IG9uZSB0byBpbnNlcnQsIHRoZW4gd2Ugc2hvdWxkIHJlbW92ZSB0aGUgb2xkIGl0ZW0KKyAgICAg
ICAgICAgICAgICAjIGZyb20gYWdncmVnYXRlZCBsaXN0LgorICAgICAgICAgICAgICAgIGZvciBp
IGluIHJldmVyc2VkKHJhbmdlKDEsIGxlbihhZ2dyZWdhdGVkX2l0ZW0pKSk6CisgICAgICAgICAg
ICAgICAgICAgIGlmIGl0ZW1bMV0gPT0gYWdncmVnYXRlZF9pdGVtW2ldWzFdOgorICAgICAgICAg
ICAgICAgICAgICAgICAgYWdncmVnYXRlZF9pdGVtLnBvcChpKQorCisgICAgICAgICAgICAgICAg
YWdncmVnYXRlZF9pdGVtLmluc2VydCgwLCBpdGVtKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIF9jaGVja19qc29uKGNscywgYnVpbGRlciwganNvbik6CisgICAgICAgICIiIkNoZWNrIHdo
ZXRoZXIgdGhlIGdpdmVuIGpzb24gaXMgdmFsaWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZSB0aGlzIGpzb24gaXMgZm9yLgorICAgICAgICAgICAg
anNvbjoganNvbiBvYmplY3QgdG8gY2hlY2suCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAg
ICAgIFRydWUgaWYgdGhlIGpzb24gaXMgdmFsaWQgb3IKKyAgICAgICAgICAgIEZhbHNlIG90aGVy
d2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdmVyc2lvbiA9IGpzb25bSlNPTl9SRVNVTFRT
X1ZFUlNJT05fS0VZXQorICAgICAgICBpZiB2ZXJzaW9uID4gSlNPTl9SRVNVTFRTX1ZFUlNJT046
CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJSZXN1bHRzIEpTT04gdmVyc2lvbiAnJXMnIGlz
IG5vdCBzdXBwb3J0ZWQuIiwKKyAgICAgICAgICAgICAgICB2ZXJzaW9uKQorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IGJ1aWxkZXIgaW4ganNvbjoKKyAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoIkJ1aWxkZXIgJyVzJyBpcyBub3QgaW4ganNvbiByZXN1bHRzLiIs
IGJ1aWxkZXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXN1bHRzX2Zv
cl9idWlsZGVyID0ganNvbltidWlsZGVyXQorICAgICAgICBpZiBub3QgSlNPTl9SRVNVTFRTX0JV
SUxEX05VTUJFUlMgaW4gcmVzdWx0c19mb3JfYnVpbGRlcjoKKyAgICAgICAgICAgIGxvZ2dpbmcu
ZXJyb3IoIk1pc3NpbmcgYnVpbGQgbnVtYmVyIGluIGpzb24gcmVzdWx0cy4iKQorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBtZXJnZShjbHMsIGJ1aWxkZXIsIGFnZ3JlZ2F0ZWQsIGluY3JlbWVudGFsLCBz
b3J0X2tleXM9RmFsc2UpOgorICAgICAgICAiIiJNZXJnZSBpbmNyZW1lbnRhbCBqc29uIGZpbGUg
ZGF0YSB3aXRoIGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZS4KKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWQ6
IGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBpbmNyZW1lbnRhbDogaW5j
cmVtZW50YWwganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBzb3J0X2tleTogd2hldGhlciBv
ciBub3QgdG8gc29ydCBrZXkgd2hlbiBkdW1waW5nIGpzb24gcmVzdWx0cy4KKworICAgICAgICBS
ZXR1cm5zOgorICAgICAgICAgICAgTWVyZ2VkIGpzb24gZmlsZSBkYXRhIGlmIG1lcmdlIHN1Y2Nl
ZWRzIG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgorCisgICAg
ICAgIGlmIG5vdCBpbmNyZW1lbnRhbDoKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiTm90
aGluZyB0byBtZXJnZS4iKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBsb2dn
aW5nLmluZm8oIkxvYWRpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAgIGluY3JlbWVu
dGFsX2pzb24gPSBjbHMuX2xvYWRfanNvbihpbmNyZW1lbnRhbCkKKyAgICAgICAgaWYgbm90IGlu
Y3JlbWVudGFsX2pzb246CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dp
bmcuaW5mbygiQ2hlY2tpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAgIGlmIG5vdCBj
bHMuX2NoZWNrX2pzb24oYnVpbGRlciwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBleGlzdGluZyBhZ2dy
ZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBhZ2dyZWdhdGVkX2pzb24gPSBjbHMuX2xvYWRfanNv
bihhZ2dyZWdhdGVkKQorICAgICAgICBpZiBub3QgYWdncmVnYXRlZF9qc29uOgorICAgICAgICAg
ICAgcmV0dXJuIGluY3JlbWVudGFsCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJDaGVja2luZyBl
eGlzdGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBpZiBub3QgY2xzLl9jaGVja19q
c29uKGJ1aWxkZXIsIGFnZ3JlZ2F0ZWRfanNvbik6CisgICAgICAgICAgICByZXR1cm4gaW5jcmVt
ZW50YWwKKworICAgICAgICBsb2dnaW5nLmluZm8oIk1lcmdpbmcganNvbiByZXN1bHRzLi4uIikK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGNscy5fbWVyZ2VfanNvbigKKyAgICAg
ICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bYnVpbGRlcl0sCisgICAgICAgICAgICAgICAgaW5j
cmVtZW50YWxfanNvbltidWlsZGVyXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigi
RmFpbGVkIHRvIG1lcmdlIGpzb24gcmVzdWx0czogJXMiLCBzdHIoZXJyKSkKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisKKyAgICAgICAgIyBNYWtlIHN1cmUgcmVzdWx0cyBqc29uIHZlcnNpb24g
aXMgdXBkYXRlZC4KKyAgICAgICAgYWdncmVnYXRlZF9qc29uW0pTT05fUkVTVUxUU19WRVJTSU9O
X0tFWV0gPSBKU09OX1JFU1VMVFNfVkVSU0lPTgorCisgICAgICAgIHJldHVybiBKc29uUmVzdWx0
cy5fZ2VuZXJhdGVfZmlsZV9kYXRhKGFnZ3JlZ2F0ZWRfanNvbiwgc29ydF9rZXlzKQorCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIHVwZGF0ZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgaW5j
cmVtZW50YWwpOgorICAgICAgICAiIiJVcGRhdGUgZGF0YXN0b3JlIGpzb24gZmlsZSBkYXRhIGJ5
IG1lcmdpbmcgaXQgd2l0aCBpbmNyZW1lbnRhbCBqc29uCisgICAgICAgICAgIGZpbGUuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZS4KKyAgICAgICAg
ICAgIHRlc3RfdHlwZTogdHlwZSBvZiB0ZXN0IHJlc3VsdHMuCisgICAgICAgICAgICBpbmNyZW1l
bnRhbDogaW5jcmVtZW50YWwganNvbiBmaWxlIGRhdGEgdG8gbWVyZ2UuCisKKyAgICAgICAgUmV0
dXJuczoKKyAgICAgICAgICAgIFRlc3RGaWxlIG9iamVjdCBpZiB1cGRhdGUgc3VjY2VlZHMgb3IK
KyAgICAgICAgICAgIE5vbmUgb24gZmFpbHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmls
ZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoYnVpbGRlciwgdGVzdF90eXBlLCBKU09OX1JFU1VMVFNf
RklMRSkKKyAgICAgICAgaWYgZmlsZXM6CisgICAgICAgICAgICBmaWxlID0gZmlsZXNbMF0KKyAg
ICAgICAgICAgIG5ld19yZXN1bHRzID0gY2xzLm1lcmdlKGJ1aWxkZXIsIGZpbGUuZGF0YSwgaW5j
cmVtZW50YWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFVzZSB0aGUgaW5jcmVtZW50
YWwgZGF0YSBpZiB0aGVyZSBpcyBubyBhZ2dyZWdhdGVkIGZpbGUgdG8gbWVyZ2UuCisgICAgICAg
ICAgICBmaWxlID0gVGVzdEZpbGUoKQorICAgICAgICAgICAgZmlsZS5idWlsZGVyID0gYnVpbGRl
cgorICAgICAgICAgICAgZmlsZS5uYW1lID0gSlNPTl9SRVNVTFRTX0ZJTEUKKyAgICAgICAgICAg
IG5ld19yZXN1bHRzID0gaW5jcmVtZW50YWwKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiTm8g
ZXhpc3RpbmcganNvbiByZXN1bHRzLCBpbmNyZW1lbnRhbCBqc29uIGlzIHNhdmVkLiIpCisKKyAg
ICAgICAgaWYgbm90IG5ld19yZXN1bHRzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICBpZiBub3QgZmlsZS5zYXZlKG5ld19yZXN1bHRzKToKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisKKyAgICAgICAgcmV0dXJuIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHMucHkKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0
c191bml0dGVzdC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDUgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBqc29ucmVzdWx0cyBpbXBvcnQgSnNvblJl
c3VsdHMKKworSlNPTl9SRVNVTFRTX1RFTVBMQVRFID0gKAorICAgICd7IldlYmtpdCI6eycKKyAg
ICAnImFsbEZpeGFibGVDb3VudCI6W1tURVNUREFUQV9DT1VOVF1dLCcKKyAgICAnImJ1aWxkTnVt
YmVycyI6W1tURVNUREFUQV9CVUlMRE5VTUJFUlNdXSwnCisgICAgJyJjaHJvbWVSZXZpc2lvbiI6
W1tURVNUREFUQV9DSFJPTUVSRVZJU0lPTl1dLCcKKyAgICAnImRlZmVycmVkQ291bnRzIjpbW1RF
U1REQVRBX0NPVU5UU11dLCcKKyAgICAnImZpeGFibGVDb3VudCI6W1tURVNUREFUQV9DT1VOVF1d
LCcKKyAgICAnImZpeGFibGVDb3VudHMiOltbVEVTVERBVEFfQ09VTlRTXV0sJworICAgICcic2Vj
b25kc1NpbmNlRXBvY2giOltbVEVTVERBVEFfVElNRVNdXSwnCisgICAgJyJ0ZXN0cyI6e1tURVNU
REFUQV9URVNUU119LCcKKyAgICAnIndlYmtpdFJldmlzaW9uIjpbW1RFU1REQVRBX1dFQktJVFJF
VklTSU9OXV0sJworICAgICcid29udGZpeENvdW50cyI6W1tURVNUREFUQV9DT1VOVFNdXScKKyAg
ICAnfSwnCisgICAgJyJ2ZXJzaW9uIjozJworICAgICd9JykKKworSlNPTl9SRVNVTFRTX0NPVU5U
U19URU1QTEFURSA9ICgKKyAgICAneycKKyAgICAnIkMiOltURVNUREFUQV0sJworICAgICciRiI6
W1RFU1REQVRBXSwnCisgICAgJyJJIjpbVEVTVERBVEFdLCcKKyAgICAnIk8iOltURVNUREFUQV0s
JworICAgICciUCI6W1RFU1REQVRBXSwnCisgICAgJyJUIjpbVEVTVERBVEFdLCcKKyAgICAnIlgi
OltURVNUREFUQV0sJworICAgICciWiI6W1RFU1REQVRBXX0nKQorCitKU09OX1JFU1VMVFNfVEVT
VFNfVEVNUExBVEUgPSAoCisgICAgJyJbVEVTVERBVEFfVEVTVF9OQU1FXSI6eycKKyAgICAnInJl
c3VsdHMiOltbVEVTVERBVEFfVEVTVF9SRVNVTFRTXV0sJworICAgICcidGltZXMiOltbVEVTVERB
VEFfVEVTVF9USU1FU11dfScpCisKK0pTT05fUkVTVUxUU19QUkVGSVggPSAiQUREX1JFU1VMVFMo
IgorSlNPTl9SRVNVTFRTX1NVRkZJWCA9ICIpOyIKKworCitjbGFzcyBKc29uUmVzdWx0c1Rlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5f
YnVpbGRlciA9ICJXZWJraXQiCisKKyAgICBkZWYgX21ha2VfdGVzdF9qc29uKHNlbGYsIHRlc3Rf
ZGF0YSk6CisgICAgICAgIGlmIG5vdCB0ZXN0X2RhdGE6CisgICAgICAgICAgICByZXR1cm4gIiIK
KworICAgICAgICAoYnVpbGRzLCB0ZXN0cykgPSB0ZXN0X2RhdGEKKyAgICAgICAgaWYgbm90IGJ1
aWxkcyBvciBub3QgdGVzdHM6CisgICAgICAgICAgICByZXR1cm4gSlNPTl9SRVNVTFRTX1BSRUZJ
WCArIEpTT05fUkVTVUxUU19TVUZGSVgKKworICAgICAgICBqc29uID0gSlNPTl9SRVNVTFRTX1RF
TVBMQVRFCisKKyAgICAgICAgY291bnRzID0gW10KKyAgICAgICAgYnVpbGRfbnVtYmVycyA9IFtd
CisgICAgICAgIHdlYmtpdF9yZXZpc2lvbiA9IFtdCisgICAgICAgIGNocm9tZV9yZXZpc2lvbiA9
IFtdCisgICAgICAgIHRpbWVzID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAg
ICAgICAgICAgIGNvdW50cy5hcHBlbmQoSlNPTl9SRVNVTFRTX0NPVU5UU19URU1QTEFURS5yZXBs
YWNlKCJbVEVTVERBVEFdIiwgYnVpbGQpKQorICAgICAgICAgICAgYnVpbGRfbnVtYmVycy5hcHBl
bmQoIjEwMDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIHdlYmtpdF9yZXZpc2lvbi5hcHBlbmQo
IjIwMDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIGNocm9tZV9yZXZpc2lvbi5hcHBlbmQoIjMw
MDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIHRpbWVzLmFwcGVuZCgiMTAwMDAwJXMwMDAiICUg
YnVpbGQpCisKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX0NPVU5UU10i
LCAiLCIuam9pbihjb3VudHMpKQorICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERB
VEFfQ09VTlRdIiwgIiwiLmpvaW4oYnVpbGRzKSkKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFj
ZSgiW1RFU1REQVRBX0JVSUxETlVNQkVSU10iLCAiLCIuam9pbihidWlsZF9udW1iZXJzKSkKKyAg
ICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX1dFQktJVFJFVklTSU9OXSIsICIs
Ii5qb2luKHdlYmtpdF9yZXZpc2lvbikpCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltU
RVNUREFUQV9DSFJPTUVSRVZJU0lPTl0iLCAiLCIuam9pbihjaHJvbWVfcmV2aXNpb24pKQorICAg
ICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfVElNRVNdIiwgIiwiLmpvaW4odGlt
ZXMpKQorCisgICAgICAgIGpzb25fdGVzdHMgPSBbXQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0
czoKKyAgICAgICAgICAgIHQgPSBKU09OX1JFU1VMVFNfVEVTVFNfVEVNUExBVEUucmVwbGFjZSgi
W1RFU1REQVRBX1RFU1RfTkFNRV0iLCB0ZXN0WzBdKQorICAgICAgICAgICAgdCA9IHQucmVwbGFj
ZSgiW1RFU1REQVRBX1RFU1RfUkVTVUxUU10iLCB0ZXN0WzFdKQorICAgICAgICAgICAgdCA9IHQu
cmVwbGFjZSgiW1RFU1REQVRBX1RFU1RfVElNRVNdIiwgdGVzdFsyXSkKKyAgICAgICAgICAgIGpz
b25fdGVzdHMuYXBwZW5kKHQpCisKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1RE
QVRBX1RFU1RTXSIsICIsIi5qb2luKGpzb25fdGVzdHMpKQorCisgICAgICAgIHJldHVybiBKU09O
X1JFU1VMVFNfUFJFRklYICsganNvbiArIEpTT05fUkVTVUxUU19TVUZGSVgKKworICAgIGRlZiBf
dGVzdF9tZXJnZShzZWxmLCBhZ2dyZWdhdGVkX2RhdGEsIGluY3JlbWVudGFsX2RhdGEsIGV4cGVj
dGVkX2RhdGEpOgorICAgICAgICBhZ2dyZWdhdGVkX3Jlc3VsdHMgPSBzZWxmLl9tYWtlX3Rlc3Rf
anNvbihhZ2dyZWdhdGVkX2RhdGEpCisgICAgICAgIGluY3JlbWVudGFsX3Jlc3VsdHMgPSBzZWxm
Ll9tYWtlX3Rlc3RfanNvbihpbmNyZW1lbnRhbF9kYXRhKQorICAgICAgICBtZXJnZWRfcmVzdWx0
cyA9IEpzb25SZXN1bHRzLm1lcmdlKHNlbGYuX2J1aWxkZXIsCisgICAgICAgICAgICBhZ2dyZWdh
dGVkX3Jlc3VsdHMsIGluY3JlbWVudGFsX3Jlc3VsdHMsIHNvcnRfa2V5cz1UcnVlKQorCisgICAg
ICAgIGlmIGV4cGVjdGVkX2RhdGE6CisgICAgICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gc2Vs
Zi5fbWFrZV90ZXN0X2pzb24oZXhwZWN0ZWRfZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKG1lcmdlZF9yZXN1bHRzLCBleHBlY3RlZF9yZXN1bHRzKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXJnZWRfcmVzdWx0cykKKworICAgIGRlZiB0
ZXN0KHNlbGYpOgorICAgICAgICAjIEVtcHR5IGluY3JlbWVudGFsIHJlc3VsdHMganNvbi4KKyAg
ICAgICAgIyBOb3RoaW5nIHRvIG1lcmdlLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAg
ICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBb
WyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAgICAg
ICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAj
IEV4cGVjdCBubyBtZXJnZSBoYXBwZW5zLgorICAgICAgICAgICAgTm9uZSkKKworICAgICAgICAj
IE5vIGFjdHVhbCBpbmNyZW1lbnRhbCB0ZXN0IHJlc3VsdHMgKG9ubHkgcHJlZml4IGFuZCBzdWZm
aXgpIHRvIG1lcmdlLgorICAgICAgICAjIE5vdGhpbmcgdG8gbWVyZ2UuCisgICAgICAgIHNlbGYu
X3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAgICAg
ICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJd
Il1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFtd
LCBbXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIG5vIG1lcmdlIGhhcHBlbnMuCisgICAgICAg
ICAgICBOb25lKQorCisgICAgICAgICMgTm8gZXhpc3RpbmcgYWdncmVnYXRlZCByZXN1bHRzLgor
ICAgICAgICAjIE1lcmdlZCByZXN1bHRzID09IG5ldyBpbmNyZW1lbnRhbCByZXN1bHRzLgorICAg
ICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMK
KyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAg
ICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAw
LFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAg
IChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJd
XSkpCisKKyAgICAgICAgIyBTaW5nbGUgdGVzdCBmb3Igc2luZ2xlIHJ1bi4KKyAgICAgICAgIyBJ
bmNyZW1lbnRhbCByZXN1bHRzIGhhcyB0aGUgbGF0ZXN0IGJ1aWxkIGFuZCBzYW1lIHRlc3QgcmVz
dWx0cyBmb3IKKyAgICAgICAgIyB0aGF0IHJ1bi4KKyAgICAgICAgIyBJbnNlcnQgdGhlIGluY3Jl
bWVudGFsIHJlc3VsdHMgYXQgdGhlIGZpcnN0IHBsYWNlIGFuZCBzdW0gbnVtYmVyCisgICAgICAg
ICMgb2YgcnVucyBmb3IgIlAiICgyMDAgKyAxKSB0byBnZXQgbWVyZ2VkIHJlc3VsdHMuCisgICAg
ICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cwor
ICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsy
MDAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAg
ICAgICAgKFsiMyJdLCBbWyIwMDEuaHRtbCIsICJbMSxcIlBcIl0iLCAiWzEsXCIwXCJdIl1dKSwK
KyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIyIiwg
IjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMSxcIlBcIl0iLCAiWzIwMSxcIjBcIl0iXV0pKQorCisg
ICAgICAgICMgU2luZ2xlIHRlc3QgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgSW5jcmVtZW50
YWwgcmVzdWx0cyBoYXMgdGhlIGxhdGVzdCBidWlsZCBidXQgZGlmZmVyZW50IHRlc3QgcmVzdWx0
cworICAgICAgICAjIGZvciB0aGF0IHJ1bi4KKyAgICAgICAgIyBJbnNlcnQgdGhlIGluY3JlbWVu
dGFsIHJlc3VsdHMgYXQgdGhlIGZpcnN0IHBsYWNlLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdl
KAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAi
MSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAg
ICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwgW1siMDAx
Lmh0bWwiLCAiWzEsIFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAgICAgIyBFeHBl
Y3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIs
ICJbMSxcIklcIl0sWzIwMCxcIlBcIl0iLCAiWzEsXCIxXCJdLFsyMDAsXCIwXCJdIl1dKSkKKwor
ICAgICAgICAjIFNpbmdsZSB0ZXN0IGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIEluY3JlbWVu
dGFsIHJlc3VsdHMgaGFzIHRoZSBsYXRlc3QgYnVpbGQgYnV0IGRpZmZlcmVudCB0ZXN0IHJlc3Vs
dHMKKyAgICAgICAgIyBmb3IgdGhhdCBydW4uCisgICAgICAgICMgVGhlIHRlc3QgInJlc3VsdHMi
IGFuZCAidGltZXMiIG5lZWQgdG8gYmUgY29udGludW91cywgc28gdGhlIG9sZAorICAgICAgICAj
IFsxMCwiSSJdIHJlc3VsdCBzaG91bGQgYmUgZHJvcHBlZCBiZWNhdXNlIGEgbmV3IHJlc3VsdCBv
ZiBzYW1lIHR5cGUgWzEsIkkiXQorICAgICAgICAjIGlzIGluc2VydGVkIGluIGZyb250IG9mIFsy
MDAsIlAiXS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVn
YXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIw
MCxcIlBcIl0sWzEwLFwiSVwiXSIsICJbMjAwLFwiMFwiXSxbMTAsXCIxXCJdIl1dKSwKKyAgICAg
ICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMyJdLCBbWyIwMDEu
aHRtbCIsICJbMSxcIklcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0
ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAi
WzEsXCJJXCJdLFsyMDAsXCJQXCJdIiwgIlsxLFwiMVwiXSxbMjAwLFwiMFwiXSJdXSkpCisKKyAg
ICAgICAgIyBNdWx0aXBsZSB0ZXN0cyBmb3Igc2luZ2xlIHJ1bi4KKyAgICAgICAgIyBBbGwgdGVz
dHMgaGF2ZSBpbmNyZW1lbnRhbCB1cGRhdGVzLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAor
ICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJd
LCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdLCBbIjAwMi5odG1s
IiwgIlsxMDAsXCJJXCJdIiwgIlsxMDAsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVt
ZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMyJdLCBbWyIwMDEuaHRtbCIsICJbMSxcIlBc
Il0iLCAiWzEsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEsXCJJXCJdIiwgIlsxLFwiMVwiXSJd
XSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiLCAi
MiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDEsXCJQXCJdIiwgIlsyMDEsXCIwXCJdIl0sIFsi
MDAyLmh0bWwiLCAiWzEwMSxcIklcIl0iLCAiWzEwMSxcIjFcIl0iXV0pKQorCisgICAgICAgICMg
TXVsdGlwbGUgdGVzdHMgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgTm90IGFsbCB0ZXN0cyBo
YXZlIHVwZGF0ZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdn
cmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAi
WzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwgWyIwMDIuaHRtbCIsICJbMTAwLFwiSVwiXSIs
ICJbMTAwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAg
ICAgICAgICAgIChbIjMiXSwgW1siMDAyLmh0bWwiLCAiWzEsXCJJXCJdIiwgIlsxLFwiMVwiXSJd
XSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiLCAi
MiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl0sIFsi
MDAyLmh0bWwiLCAiWzEwMSxcIklcIl0iLCAiWzEwMSxcIjFcIl0iXV0pKQorCisgICAgICAgICMg
U2luZ2xlIHRlc3QgZm9yIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2Uo
CisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMiIsICIx
Il0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl1dKSwKKyAgICAg
ICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiNCIsICIzIl0sIFtb
IjAwMS5odG1sIiwgIlsyLCBcIklcIl0iLCAiWzIsXCIyXCJdIl1dKSwKKyAgICAgICAgICAgICMg
RXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiNCIsICIzIiwgIjIiLCAiMSJdLCBbWyIw
MDEuaHRtbCIsICJbMixcIklcIl0sWzIwMCxcIlBcIl0iLCAiWzIsXCIyXCJdLFsyMDAsXCIwXCJd
Il1dKSkKKworICAgICAgICAjIE11bHRpcGxlIHRlc3RzIGZvciBtdWx0aXBsZSBydW5zLgorICAg
ICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMK
KyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJb
MjAwLFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsxMCxcIlpcIl0iLCAiWzEwLFwiMFwiXSJdXSks
CisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjQiLCAi
MyJdLCBbWyIwMDEuaHRtbCIsICJbMiwgXCJJXCJdIiwgIlsyLFwiMlwiXSJdLCBbIjAwMi5odG1s
IiwgIlsxLFwiQ1wiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAgICAgIyBFeHBlY3RlZCBy
ZXN1bHRzCisgICAgICAgICAgICAoWyI0IiwgIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwg
IlsyLFwiSVwiXSxbMjAwLFwiUFwiXSIsICJbMixcIjJcIl0sWzIwMCxcIjBcIl0iXSwgWyIwMDIu
aHRtbCIsICJbMSxcIkNcIl0sWzEwLFwiWlwiXSIsICJbMSxcIjFcIl0sWzEwLFwiMFwiXSJdXSkp
CisKKyAgICAgICAgIyBUZXN0IGlmIGJ1aWxkIGluIGluY3JlbWVudGFsIHJlc3VsdHMgaXMgb2xk
ZXIgdGhhbiB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgIyBidWlsZCBpbiBhZ2dyZWdhdGVkIHJl
c3VsdHMuCisgICAgICAgICMgVGhlIGluY3JlbWVudGFsIHJlc3VsdHMgc2hvdWxkIGJlIGRyb3Bw
ZWQgYW5kIG5vIG1lcmdlIGhhcHBlbnMuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAg
ICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIxIl0sIFtb
IjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAg
ICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMiJdLCBbWyIwMDEuaHRtbCIs
ICJbMSwgXCJQXCJdIiwgIlsxLFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIG5v
IG1lcmdlIGhhcHBlbnMuCisgICAgICAgICAgICBOb25lKQorCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJLaXRUb29scy9U
ZXN0UmVzdWx0U2VydmVyL21vZGVsL3Rlc3RmaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZpbGUucHkJKHJldmlzaW9uIDU4NzkwKQor
KysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMg
bWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3
IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0yOSwxNiArMjksMTQgQEAKIGZyb20gZGF0ZXRpbWUgaW1w
b3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwogCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0
IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGRiCiAK
K2Zyb20gbW9kZWwuZGF0YXN0b3JlZmlsZSBpbXBvcnQgRGF0YVN0b3JlRmlsZQogCi1jbGFzcyBU
ZXN0RmlsZShkYi5Nb2RlbCk6CisKK2NsYXNzIFRlc3RGaWxlKERhdGFTdG9yZUZpbGUpOgogICAg
IGJ1aWxkZXIgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgbmFtZSA9IGRiLlN0cmluZ1Byb3Bl
cnR5KCkKICAgICB0ZXN0X3R5cGUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgYmxvYl9rZXkg
PSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgZGF0ZSA9IGRiLkRhdGVUaW1lUHJvcGVydHkoYXV0
b19ub3dfYWRkPVRydWUpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZGVsZXRlX2ZpbGUo
Y2xzLCBrZXksIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbGltaXQpOgpAQCAtNjMsNyArNjEs
NyBAQCBjbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKICAg
ICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZ2V0X2ZpbGVzKGNscywgYnVpbGRlciwgdGVzdF90eXBl
LCBuYW1lLCBsaW1pdCk6CisgICAgZGVmIGdldF9maWxlcyhjbHMsIGJ1aWxkZXIsIHRlc3RfdHlw
ZSwgbmFtZSwgbG9hZF9kYXRhPVRydWUsIGxpbWl0PTEpOgogICAgICAgICBxdWVyeSA9IFRlc3RG
aWxlLmFsbCgpCiAgICAgICAgIGlmIGJ1aWxkZXI6CiAgICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5
LmZpbHRlcigiYnVpbGRlciA9IiwgYnVpbGRlcikKQEAgLTcyLDUxICs3MCw1NCBAQCBjbGFzcyBU
ZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIGlmIG5hbWU6CiAgICAgICAgICAgICBxdWVyeSA9
IHF1ZXJ5LmZpbHRlcigibmFtZSA9IiwgbmFtZSkKIAotICAgICAgICByZXR1cm4gcXVlcnkub3Jk
ZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGZpbGVzID0gcXVlcnkub3JkZXIoIi1k
YXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGlmIGxvYWRfZGF0YToKKyAgICAgICAgICAgIGZv
ciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUubG9hZF9kYXRhKCkKKworICAg
ICAgICByZXR1cm4gZmlsZXMKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBhZGRfZmlsZShj
bHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgYmxvYl9pbmZvKToKKyAgICBkZWYgYWRkX2ZpbGUoY2xz
LCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGRhdGEpOgogICAgICAgICBmaWxlID0gVGVzdEZp
bGUoKQogICAgICAgICBmaWxlLmJ1aWxkZXIgPSBidWlsZGVyCiAgICAgICAgIGZpbGUudGVzdF90
eXBlID0gdGVzdF90eXBlCi0gICAgICAgIGZpbGUubmFtZSA9IGJsb2JfaW5mby5maWxlbmFtZQot
ICAgICAgICBmaWxlLmJsb2Jfa2V5ID0gc3RyKGJsb2JfaW5mby5rZXkoKSkKLSAgICAgICAgZmls
ZS5wdXQoKQorICAgICAgICBmaWxlLm5hbWUgPSBuYW1lCisKKyAgICAgICAgaWYgbm90IGZpbGUu
c2F2ZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgbG9nZ2luZy5p
bmZvKAotICAgICAgICAgICAgIkZpbGUgc2F2ZWQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVz
LCBuYW1lOiAlcywgYmxvYiBrZXk6ICVzLiIsCi0gICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5
cGUsIGZpbGUubmFtZSwgZmlsZS5ibG9iX2tleSkKKyAgICAgICAgICAgICJGaWxlIHNhdmVkLCBi
dWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGtleTogJXMuIiwKKyAgICAgICAg
ICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5kYXRhX2tleXMpKQog
CiAgICAgICAgIHJldHVybiBmaWxlCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdXBkYXRl
X2ZpbGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbyk6Ci0gICAgICAgIGZpbGVz
ID0gY2xzLmdldF9maWxlcyhidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mby5maWxlbmFtZSwg
MSkKKyAgICBkZWYgdXBkYXRlKGNscywgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBkYXRhKToK
KyAgICAgICAgZmlsZXMgPSBjbHMuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSkK
ICAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAgICAgICAgcmV0dXJuIGNscy5hZGRfZmlsZShi
dWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbykKKyAgICAgICAgICAgIHJldHVybiBjbHMuYWRk
X2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBkYXRhKQogCiAgICAgICAgIGZpbGUgPSBm
aWxlc1swXQotICAgICAgICBvbGRfYmxvYl9pbmZvID0gYmxvYnN0b3JlLkJsb2JJbmZvLmdldChm
aWxlLmJsb2Jfa2V5KQotICAgICAgICBpZiBvbGRfYmxvYl9pbmZvOgotICAgICAgICAgICAgb2xk
X2Jsb2JfaW5mby5kZWxldGUoKQotCi0gICAgICAgIGZpbGUuYnVpbGRlciA9IGJ1aWxkZXIKLSAg
ICAgICAgZmlsZS50ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKLSAgICAgICAgZmlsZS5uYW1lID0gYmxv
Yl9pbmZvLmZpbGVuYW1lCi0gICAgICAgIGZpbGUuYmxvYl9rZXkgPSBzdHIoYmxvYl9pbmZvLmtl
eSgpKQotICAgICAgICBmaWxlLmRhdGUgPSBkYXRldGltZS5ub3coKQotICAgICAgICBmaWxlLnB1
dCgpCisgICAgICAgIGlmIG5vdCBmaWxlLnNhdmUoZGF0YSk6CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQogCiAgICAgICAgIGxvZ2dpbmcuaW5mbygKLSAgICAgICAgICAgICJGaWxlIHJlcGxhY2Vk
LCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGJsb2Iga2V5OiAlcy4iLAot
ICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlLm5hbWUsIGZpbGUuYmxvYl9rZXkp
CisgICAgICAgICAgICAiRmlsZSByZXBsYWNlZCwgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTogJXMs
IG5hbWU6ICVzLCBkYXRhIGtleTogJXMuIiwKKyAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlw
ZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5kYXRhX2tleXMpKQogCiAgICAgICAgIHJldHVybiBmaWxl
CiAKLSAgICBkZWYgX2RlbGV0ZV9hbGwoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuYmxvYl9rZXk6
Ci0gICAgICAgICAgICBibG9iX2luZm8gPSBibG9ic3RvcmUuQmxvYkluZm8uZ2V0KHNlbGYuYmxv
Yl9rZXkpCi0gICAgICAgICAgICBpZiBibG9iX2luZm86Ci0gICAgICAgICAgICAgICAgYmxvYl9p
bmZvLmRlbGV0ZSgpCisgICAgZGVmIHNhdmUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBz
ZWxmLnNhdmVfZGF0YShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAg
IHNlbGYuZGF0ZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlbGYucHV0KCkKIAorICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZWxldGVfYWxsKHNlbGYpOgorICAgICAgICBzZWxm
LmRlbGV0ZV9kYXRhKCkKICAgICAgICAgc2VsZi5kZWxldGUoKQpJbmRleDogV2ViS2l0VG9vbHMv
VGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3VwbG9hZGZvcm0uaHRtbAko
cmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRl
cy91cGxvYWRmb3JtLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDkgQEAKICAgICAg
ICAgPHRkPjxpbnB1dCBjbGFzcz1pbnB1dHRleHQgdHlwZT0idGV4dCIgbmFtZT0idGVzdHR5cGUi
IHZhbHVlPSIiLz48L3RkPgogICAgIDwvdHI+CiAgICAgPC90YWJsZT4KKyAgICA8YnI+CisgICAg
PGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJpbmNyZW1lbnRh
bCI+SW5jcmVtZW50YWwgcmVzdWx0cywgbWVyZ2Ugd2l0aCBzZXJ2ZXIgZmlsZS48L2Rpdj4KKyAg
ICA8YnI+CiAgICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9ImZpbGUiIG5hbWU9ImZp
bGUiIG11bHRpcGxlPjwvZGl2PgogICAgIDxicj4KICAgICA8ZGl2PjxpbnB1dCBjbGFzcz1idXR0
b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIj48L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55288</attachid>
            <date>2010-05-06 12:52:36 -0700</date>
            <delta_ts>2010-05-17 15:54:00 -0700</delta_ts>
            <desc>Address Kinuko&apos;s comments</desc>
            <filename>ae_merge.patch</filename>
            <type>text/plain</type>
            <size>50362</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU4ODQwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMDUgIFZpY3RvciBXYW5nICA8dmlj
dG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLS4gQWRkIHJlc3VsdC5qc29uIGluY3JlbWVudGFsIG1lcmdpbmcgZnVuY3Rp
b25hbGl0eSB0byB0ZXN0IHJlc3VsdHMgYXBwIGVuZ2luZS4KKyAgICAgICAgLS4gYmxvYnN0b3Jl
IGlzIG5vdCBzdWl0YWJsZSBmb3IgQUUgZGF0YSBtZXJnaW5nIGFuZCB0aGVyZSBpcyBubyBBUEkg
dG8KKyAgICAgICAgICAgcHJvZ3JhbWF0aWNhbGx5IGVkaXQgZXhpc3RpbmcgYmxvYiBvciB3cml0
ZSBhIG5ldyBvbmUgeWV0LCBzbyByZXBsYWNlIGJsb2JzdG9yZQorICAgICAgICAgICB3aXRoIGRh
dGFzdG9yZS4gSWYgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRlcyksIHN0b3JlIGZp
bGUgZGF0YSBpbgorICAgICAgICAgICBtdWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAgICAg
ICAgLS4gRml4IHN0eWxlcy4KKworICAgICAgICBUZXN0OiBqc29ucmVzdWx0c191bml0dGVzdCB0
byB0ZXN0IG1lcmdpbmcgbG9naWNzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODU5OQorCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9oYW5k
bGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5OgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvaGFu
ZGxlcnMvbWVudS5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3Rm
aWxlaGFuZGxlci5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL21haW4ucHk6CisgICAg
ICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5OgorICAgICAgICAq
IFRlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weTogQWRkZWQu
CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weToKKyAgICAgICAg
KiBUZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWw6CisKIDIwMTAtMDUt
MDQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNoaW5pY2hpcm8gSGFtYWppLgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9t
YWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbWFpbi5w
eQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21haW4u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAt
MTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwogIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNDIsMTcgKzQyLDE1IEBAIHJvdXRlcyA9
IFsKICAgICAoJy9kYXNoYm9hcmRzL3VwZGF0ZScsIGRhc2hib2FyZGhhbmRsZXIuVXBkYXRlRGFz
aGJvYXJkRmlsZSksCiAgICAgKCcvZGFzaGJvYXJkcy8oW14/XSspPycsIGRhc2hib2FyZGhhbmRs
ZXIuR2V0RGFzaGJvYXJkRmlsZSksCiAgICAgKCcvdGVzdGZpbGUvZGVsZXRlJywgdGVzdGZpbGVo
YW5kbGVyLkRlbGV0ZUZpbGUpLAotICAgICgnL3Rlc3RmaWxlL3VwbG9hZHVybCcsIHRlc3RmaWxl
aGFuZGxlci5HZXRVcGxvYWRVcmwpLAogICAgICgnL3Rlc3RmaWxlL3VwbG9hZCcsIHRlc3RmaWxl
aGFuZGxlci5VcGxvYWQpLAogICAgICgnL3Rlc3RmaWxlL3VwbG9hZGZvcm0nLCB0ZXN0ZmlsZWhh
bmRsZXIuVXBsb2FkRm9ybSksCiAgICAgKCcvdGVzdGZpbGUvPycsIHRlc3RmaWxlaGFuZGxlci5H
ZXRGaWxlKSwKLSAgICAoJy91cGxvYWRmYWlsJywgdGVzdGZpbGVoYW5kbGVyLlVwbG9hZFN0YXR1
cyksCi0gICAgKCcvdXBsb2Fkc3VjY2VzcycsIHRlc3RmaWxlaGFuZGxlci5VcGxvYWRTdGF0dXMp
LAogICAgICgnLyp8L21lbnUnLCBtZW51Lk1lbnUpLAogXQogCiBhcHBsaWNhdGlvbiA9IHdlYmFw
cC5XU0dJQXBwbGljYXRpb24ocm91dGVzLCBkZWJ1Zz1UcnVlKQogCisKIGRlZiBtYWluKCk6CiAg
ICAgcnVuX3dzZ2lfYXBwKGFwcGxpY2F0aW9uKQogCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL2hhbmRsZXJzL2Rhc2hib2FyZGhhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5CShy
ZXZpc2lvbiA1ODc5MCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMv
ZGFzaGJvYXJkaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMg
CisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zOCw2ICsz
OCw3IEBAIGZyb20gbW9kZWwuZGFzaGJvYXJkZmlsZSBpbXBvcnQgRGFzaGJvYXIKIAogUEFSQU1f
RklMRSA9ICJmaWxlIgogCisKIGRlZiBnZXRfY29udGVudF90eXBlKGZpbGVuYW1lKToKICAgICBy
ZXR1cm4gbWltZXR5cGVzLmd1ZXNzX3R5cGUoZmlsZW5hbWUpWzBdIG9yICJhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0iCiAKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxl
cnMvbWVudS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hh
bmRsZXJzL21lbnUucHkJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9oYW5kbGVycy9tZW51LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAog
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAogIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQog
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotIyAKKyMKICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYx
LDQgKzYxLDMgQEAgY2xhc3MgTWVudSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgogCiAgICAgICAg
IHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKAogICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKCJ0
ZW1wbGF0ZXMvbWVudS5odG1sIiwgdGVtcGxhdGVfdmFsdWVzKSkKLQpJbmRleDogV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0ZmlsZWhhbmRs
ZXIucHkJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9o
YW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBA
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAt
MzAsMTEgKzMwLDEwIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdXJsbGliCiAKIGZyb20gZ29v
Z2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0IHVzZXJzCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0
IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IHdlYmFw
cAotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAgaW1wb3J0IGJsb2JzdG9yZV9oYW5k
bGVycwogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAgaW1wb3J0IHRlbXBsYXRlCiAK
K2Zyb20gbW9kZWwuanNvbnJlc3VsdHMgaW1wb3J0IEpzb25SZXN1bHRzCiBmcm9tIG1vZGVsLnRl
c3RmaWxlIGltcG9ydCBUZXN0RmlsZQogCiBQQVJBTV9CVUlMREVSID0gImJ1aWxkZXIiCkBAIC00
MywxMCArNDIsMTEgQEAgUEFSQU1fRklMRSA9ICJmaWxlIgogUEFSQU1fTkFNRSA9ICJuYW1lIgog
UEFSQU1fS0VZID0gImtleSIKIFBBUkFNX1RFU1RfVFlQRSA9ICJ0ZXN0dHlwZSIKK1BBUkFNX0lO
Q1JFTUVOVEFMID0gImluY3JlbWVudGFsIgogCiAKIGNsYXNzIERlbGV0ZUZpbGUod2ViYXBwLlJl
cXVlc3RIYW5kbGVyKToKLSAgICAiIiJEZWxldGUgdGVzdCBmaWxlIGZvciBhIGdpdmVuIGJ1aWxk
ZXIgYW5kIG5hbWUgZnJvbSBkYXRhc3RvcmUgKG1ldGFkYXRhKSBhbmQgYmxvYnN0b3JlIChmaWxl
IGRhdGEpLiIiIgorICAgICIiIkRlbGV0ZSB0ZXN0IGZpbGUgZm9yIGEgZ2l2ZW4gYnVpbGRlciBh
bmQgbmFtZSBmcm9tIGRhdGFzdG9yZS4iIiIKIAogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAg
IGtleSA9IHNlbGYucmVxdWVzdC5nZXQoUEFSQU1fS0VZKQpAQCAtNTUsNyArNTUsNyBAQCBjbGFz
cyBEZWxldGVGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgIG5hbWUgPSBzZWxm
LnJlcXVlc3QuZ2V0KFBBUkFNX05BTUUpCiAKICAgICAgICAgbG9nZ2luZy5kZWJ1ZygKLSAgICAg
ICAgICAgICJEZWxldGluZyBGaWxlLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTog
JXMsIGJsb2Iga2V5OiAlcy4iLAorICAgICAgICAgICAgIkRlbGV0aW5nIEZpbGUsIGJ1aWxkZXI6
ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywga2V5OiAlcy4iLAogICAgICAgICAgICAgYnVp
bGRlciwgdGVzdF90eXBlLCBuYW1lLCBrZXkpCiAKICAgICAgICAgVGVzdEZpbGUuZGVsZXRlX2Zp
bGUoa2V5LCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIDEwMCkKQEAgLTY1LDcgKzY1LDcgQEAg
Y2xhc3MgRGVsZXRlRmlsZSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgogICAgICAgICAgICAgJSAo
YnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKSkKIAogCi1jbGFzcyBHZXRGaWxlKGJsb2JzdG9yZV9o
YW5kbGVycy5CbG9ic3RvcmVEb3dubG9hZEhhbmRsZXIpOgorY2xhc3MgR2V0RmlsZSh3ZWJhcHAu
UmVxdWVzdEhhbmRsZXIpOgogICAgICIiIkdldCBmaWxlIGNvbnRlbnQgb3IgbGlzdCBvZiBmaWxl
cyBmb3IgZ2l2ZW4gYnVpbGRlciBhbmQgbmFtZS4iIiIKIAogICAgIGRlZiBfZ2V0X2ZpbGVfbGlz
dChzZWxmLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpOgpAQCAtNzcsNyArNzcsOCBAQCBjbGFz
cyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvCiAgICAgICAgICAgICBuYW1lOiBm
aWxlIG5hbWUKICAgICAgICAgIiIiCiAKLSAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmls
ZXMoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCAxMDApCisgICAgICAgIGZpbGVzID0gVGVzdEZp
bGUuZ2V0X2ZpbGVzKAorICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBsb2Fk
X2RhdGE9RmFsc2UsIGxpbWl0PTEwMCkKICAgICAgICAgaWYgbm90IGZpbGVzOgogICAgICAgICAg
ICAgbG9nZ2luZy5pbmZvKCJGaWxlIG5vdCBmb3VuZCwgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTog
JXMsIG5hbWU6ICVzLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90
eXBlLCBuYW1lKQpAQCAtMTAzLDE2ICsxMDQsMTUgQEAgY2xhc3MgR2V0RmlsZShibG9ic3RvcmVf
aGFuZGxlcnMuQmxvYnN0bwogICAgICAgICAgICAgbmFtZTogZmlsZSBuYW1lCiAgICAgICAgICIi
IgogCi0gICAgICAgIGZpbGVzID0gVGVzdEZpbGUuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3RfdHlw
ZSwgbmFtZSwgMSkKKyAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoCisgICAgICAg
ICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGxvYWRfZGF0YT1UcnVlLCBsaW1pdD0xKQog
ICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIkZpbGUgbm90
IGZvdW5kLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMuIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCiAgICAgICAgICAgICBy
ZXR1cm4KIAotICAgICAgICBibG9iX2tleSA9IGZpbGVzWzBdLmJsb2Jfa2V5Ci0gICAgICAgIGJs
b2JfaW5mbyA9IGJsb2JzdG9yZS5nZXQoYmxvYl9rZXkpCi0gICAgICAgIGlmIGJsb2JfaW5mbzoK
LSAgICAgICAgICAgIHNlbGYuc2VuZF9ibG9iKGJsb2JfaW5mbywgInRleHQvcGxhaW4iKQorICAg
ICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID0gInRleHQvcGxhaW47
IGNoYXJzZXQ9dXRmLTgiCisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKGZpbGVzWzBd
LmRhdGEpCiAKICAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgICBidWlsZGVyID0gc2VsZi5yZXF1
ZXN0LmdldChQQVJBTV9CVUlMREVSKQpAQCAtMTMzLDg5ICsxMzMsNzIgQEAgY2xhc3MgR2V0Rmls
ZShibG9ic3RvcmVfaGFuZGxlcnMuQmxvYnN0bwogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dl
dF9maWxlX2NvbnRlbnQoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKQogCiAKLWNsYXNzIEdldFVw
bG9hZFVybCh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIkdldCBhbiB1cmwgZm9yIHVw
bG9hZGluZyBmaWxlIHRvIGJsb2JzdG9yZS4gQSBzcGVjaWFsIHVybCBpcyByZXF1aXJlZCBmb3Ig
ZWFjaCBibG9ic290cmUgdXBsb2FkLiIiIgotCi0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAg
dXBsb2FkX3VybCA9IGJsb2JzdG9yZS5jcmVhdGVfdXBsb2FkX3VybCgiL3Rlc3RmaWxlL3VwbG9h
ZCIpCi0gICAgICAgIGxvZ2dpbmcuaW5mbygiR2V0dGluZyB1cGxvYWQgdXJsOiAlcy4iLCB1cGxv
YWRfdXJsKQotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSh1cGxvYWRfdXJsKQotCi0K
LWNsYXNzIFVwbG9hZChibG9ic3RvcmVfaGFuZGxlcnMuQmxvYnN0b3JlVXBsb2FkSGFuZGxlcik6
Ci0gICAgIiIiVXBsb2FkIGZpbGUgdG8gYmxvYnN0b3JlLiIiIgorY2xhc3MgVXBsb2FkKHdlYmFw
cC5SZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiVXBsb2FkIHRlc3QgcmVzdWx0cyBmaWxlIHRvIGRh
dGFzdG9yZS4iIiIKIAogICAgIGRlZiBwb3N0KHNlbGYpOgotICAgICAgICB1cGxvYWRlZF9maWxl
cyA9IHNlbGYuZ2V0X3VwbG9hZHMoImZpbGUiKQotICAgICAgICBpZiBub3QgdXBsb2FkZWRfZmls
ZXM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBsb2FkX2RvbmUoWygiTWlzc2luZyB1cGxv
YWQgZmlsZSBmaWVsZC4iKV0pCisgICAgICAgIGZpbGVfcGFyYW1zID0gc2VsZi5yZXF1ZXN0LlBP
U1QuZ2V0YWxsKFBBUkFNX0ZJTEUpCisgICAgICAgIGlmIG5vdCBmaWxlX3BhcmFtczoKKyAgICAg
ICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMOiBtaXNzaW5nIHVwbG9hZCBmaWxl
IGZpZWxkLiIpCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBidWlsZGVyID0gc2VsZi5y
ZXF1ZXN0LmdldChQQVJBTV9CVUlMREVSKQogICAgICAgICBpZiBub3QgYnVpbGRlcjoKLSAgICAg
ICAgICAgIGZvciBibG9iX2luZm8gaW4gdXBsb2FkZWRfZmlsZXM6Ci0gICAgICAgICAgICAgICAg
YmxvYl9pbmZvLmRlbGV0ZSgpCi0gICAgCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBsb2Fk
X2RvbmUoWygiTWlzc2luZyBidWlsZGVyIHBhcmFtZXRlciBpbiB1cGxvYWQgcmVxdWVzdC4iKV0p
CisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiRkFJTDogbWlzc2luZyBidWls
ZGVyIHBhcmFtZXRlci4iKQorICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgdGVzdF90eXBl
ID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9URVNUX1RZUEUpCisgICAgICAgIGluY3JlbWVudGFs
ID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9JTkNSRU1FTlRBTCkKIAogICAgICAgICBsb2dnaW5n
LmRlYnVnKAogICAgICAgICAgICAgIlByb2Nlc3NpbmcgdXBsb2FkIHJlcXVlc3QsIGJ1aWxkZXI6
ICVzLCB0ZXN0X3R5cGU6ICVzLiIsCiAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUpCiAK
KyAgICAgICAgIyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHR5cGVzIG9mIGVhY2ggZmlsZV9wYXJh
bXMgaW4gdGhlIHJlcXVlc3Q6CisgICAgICAgICMgb25lIGZpbGUgaXRlbSBvciBhIGxpc3Qgb2Yg
ZmlsZSBpdGVtcy4KKyAgICAgICAgIyBOb3JtYWxpemUgZmlsZV9wYXJhbXMgdG8gYmVjb21lcyBh
IGZpbGUgaXRlbSBsaXN0LgorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGxvZ2dpbmcuZGVi
dWcoInRlc3Q6ICVzLCB0eXBlOiVzIiwgZmlsZV9wYXJhbXMsIHR5cGUoZmlsZV9wYXJhbXMpKQor
ICAgICAgICBmb3IgaXRlbSBpbiBmaWxlX3BhcmFtczoKKyAgICAgICAgICAgIGlmIHR5cGUoaXRl
bSkgaXMgbGlzdDoKKyAgICAgICAgICAgICAgICBmaWxlcy5leHRlbmQoaXRlbSkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGl0ZW0pCisKICAgICAgICAg
ZXJyb3JzID0gW10KLSAgICAgICAgZm9yIGJsb2JfaW5mbyBpbiB1cGxvYWRlZF9maWxlczoKLSAg
ICAgICAgICAgIHRmID0gVGVzdEZpbGUudXBkYXRlX2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBi
bG9iX2luZm8pCisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgIyBJbmNyZW1l
bnRhbCB1cGRhdGUgb3IgcmVwbGFjZSB0aGUgd2hvbGUgZmlsZS4KKyAgICAgICAgICAgIGlmIGlu
Y3JlbWVudGFsOgorICAgICAgICAgICAgICAgIGlmIGYuZmlsZW5hbWUgIT0gInJlc3VsdHMuanNv
biI6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAiTWVyZ2luZyBpbmNyZW1lbnRhbCByZXN1bHRzICVzIGlzIG5vdCBzdXBwb3J0ZWQi
ICUgZi5maWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg
ICAgICAgIHRmID0gSnNvblJlc3VsdHMudXBkYXRlKGJ1aWxkZXIsIHRlc3RfdHlwZSwgZi52YWx1
ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGYgPSBUZXN0RmlsZS51cGRh
dGUoYnVpbGRlciwgdGVzdF90eXBlLCBmLmZpbGVuYW1lLCBmLnZhbHVlKQorCiAgICAgICAgICAg
ICBpZiBub3QgdGY6CiAgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgKICAgICAgICAgICAg
ICAgICAgICAgIlVwbG9hZCBmYWlsZWQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1l
OiAlcy4iICUKLSAgICAgICAgICAgICAgICAgICAgKGJ1aWxkZXIsIHRlc3RfdHlwZSwgYmxvYl9p
bmZvLmZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICBibG9iX2luZm8uZGVsZXRlKCkKLQotICAg
ICAgICByZXR1cm4gc2VsZi5fdXBsb2FkX2RvbmUoZXJyb3JzKQotCi0gICAgZGVmIF91cGxvYWRf
ZG9uZShzZWxmLCBlcnJvcnMpOgotICAgICAgICBsb2dnaW5nLmluZm8oInVwbG9hZCBkb25lLiIp
Ci0KLSAgICAgICAgZXJyb3JfbWVzc2FnZXMgPSBbXQotICAgICAgICBmb3IgZXJyb3IgaW4gZXJy
b3JzOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKGVycm9yKQotICAgICAgICAgICAgZXJyb3Jf
bWVzc2FnZXMuYXBwZW5kKCJlcnJvcj0lcyIgJSB1cmxsaWIucXVvdGUoZXJyb3IpKQorICAgICAg
ICAgICAgICAgICAgICAoYnVpbGRlciwgdGVzdF90eXBlLCBmLmZpbGVuYW1lKSkKIAotICAgICAg
ICBpZiBlcnJvcl9tZXNzYWdlczoKLSAgICAgICAgICAgIHJlZGlyZWN0X3VybCA9ICIvdXBsb2Fk
ZmFpbD8lcyIgJSAiJiIuam9pbihlcnJvcl9tZXNzYWdlcykKKyAgICAgICAgaWYgZXJyb3JzOgor
ICAgICAgICAgICAgbWVzc2FnZXMgPSAiRkFJTDogIiArICI7ICIuam9pbihlcnJvcnMpCisgICAg
ICAgICAgICBsb2dnaW5nLndhcm5pbmcobWVzc2FnZXMpCisgICAgICAgICAgICBzZWxmLnJlc3Bv
bnNlLnNldF9zdGF0dXMoNTAwLCBtZXNzYWdlcykKKyAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uu
b3V0LndyaXRlKCJGQUlMIikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlZGlyZWN0X3Vy
bCA9ICIvdXBsb2Fkc3VjY2VzcyIKLQotICAgICAgICBsb2dnaW5nLmluZm8ocmVkaXJlY3RfdXJs
KQotICAgICAgICAjIEJsb2JzdG9yZVVwbG9hZEhhbmRsZXIgcmVxdWlyZXMgcmVkaXJlY3QgYXQg
dGhlIGVuZC4KLSAgICAgICAgc2VsZi5yZWRpcmVjdChyZWRpcmVjdF91cmwpCisgICAgICAgICAg
ICBzZWxmLnJlc3BvbnNlLnNldF9zdGF0dXMoMjAwKQorICAgICAgICAgICAgc2VsZi5yZXNwb25z
ZS5vdXQud3JpdGUoIk9LIikKIAogCiBjbGFzcyBVcGxvYWRGb3JtKHdlYmFwcC5SZXF1ZXN0SGFu
ZGxlcik6Ci0gICAgIiIiU2hvdyBhIGZvcm0gc28gdXNlciBjYW4gc3VibWl0IGEgZmlsZSB0byBi
bG9ic3RvcmUuIiIiCisgICAgIiIiU2hvdyBhIGZvcm0gc28gdXNlciBjYW4gdXBsb2FkIGEgZmls
ZS4iIiIKIAogICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIHVwbG9hZF91cmwgPSBibG9ic3Rv
cmUuY3JlYXRlX3VwbG9hZF91cmwoIi90ZXN0ZmlsZS91cGxvYWQiKQogICAgICAgICB0ZW1wbGF0
ZV92YWx1ZXMgPSB7Ci0gICAgICAgICAgICAidXBsb2FkX3VybCI6IHVwbG9hZF91cmwsCisgICAg
ICAgICAgICAidXBsb2FkX3VybCI6ICIvdGVzdGZpbGUvdXBsb2FkIiwKICAgICAgICAgfQogICAg
ICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSh0ZW1wbGF0ZS5yZW5kZXIoInRlbXBsYXRlcy91
cGxvYWRmb3JtLmh0bWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVtcGxhdGVfdmFsdWVzKSkKLQotY2xhc3MgVXBsb2FkU3RhdHVzKHdlYmFwcC5S
ZXF1ZXN0SGFuZGxlcik6Ci0gICAgIiIiUmV0dXJuIHN0YXR1cyBvZiBmaWxlIHVwbG9hZGluZyIi
IgotCi0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVXBkYXRlIHN0
YXR1cyIpCi0KLSAgICAgICAgaWYgc2VsZi5yZXF1ZXN0LnBhdGggPT0gIi91cGxvYWRzdWNjZXNz
IjoKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uuc2V0X3N0YXR1cygyMDApCi0gICAgICAgICAg
ICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiT0siKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZXJyb3JzID0gc2VsZi5yZXF1ZXN0LnBhcmFtcy5nZXRhbGwoImVycm9yIikKLSAgICAgICAg
ICAgIGlmIGVycm9yczoKLSAgICAgICAgICAgICAgICBtZXNzYWdlcyA9ICJGQUlMOiAiICsgIjsg
Ii5qb2luKGVycm9ycykKLSAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcobWVzc2FnZXMp
Ci0gICAgICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDUwMCwgbWVzc2FnZXMp
Ci0gICAgICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIkZBSUwiKQpJbmRleDog
V2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGFzaGJvYXJkZmls
ZS5weQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21v
ZGVsL2Rhc2hib2FyZGZpbGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
IAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtMzYsNiAr
MzYsNyBAQCBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkYgogU1ZOX1BBVEhfREFT
SEJPQVJEID0gKCJodHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3Rv
b2xzLyIKICAgICAiZGFzaGJvYXJkcy8iKQogCisKIGNsYXNzIERhc2hib2FyZEZpbGUoZGIuTW9k
ZWwpOgogICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCiAgICAgZGF0YSA9IGRiLkJsb2JQ
cm9wZXJ0eSgpCkBAIC05Miw3ICs5Myw3IEBAIGNsYXNzIERhc2hib2FyZEZpbGUoZGIuTW9kZWwp
OgogICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIk5vIGV4
aXN0aW5nIGZpbGUsIGFkZGVkIGFzIG5ldyBmaWxlLiIpCiAgICAgICAgICAgICByZXR1cm4gY2xz
LmFkZF9maWxlKG5hbWUsIGRhdGEpCi0gICAgICAgIAorCiAgICAgICAgIGxvZ2dpbmcuZGVidWco
IlVwZGF0aW5nIGV4aXN0aW5nIGZpbGUuIikKICAgICAgICAgZmlsZSA9IGZpbGVzWzBdCiAgICAg
ICAgIGZpbGUuZGF0YSA9IGRhdGEKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
bW9kZWwvZGF0YXN0b3JlZmlsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUucHkJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTI5IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBkYXRldGltZSBpbXBv
cnQgZGF0ZXRpbWUKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQg
aW1wb3J0IGRiCisKK01BWF9EQVRBX0VOVFJZX1BFUl9GSUxFID0gMTAKK01BWF9FTlRSWV9MRU4g
PSAxMDAwICogMTAwMAorCisKK2NsYXNzIERhdGFFbnRyeShkYi5Nb2RlbCk6CisgICAgIiIiRGF0
YXN0b3JlIGVudHJ5IHRoYXQgc3RvcmVzIG9uZSBzZWdtYW50IG9mIGZpbGUgZGF0YQorICAgICAg
ICg8MTAwMCoxMDAwIGJ5dGVzKS4KKyAgICAiIiIKKworICAgIGRhdGEgPSBkYi5CbG9iUHJvcGVy
dHkoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldChjbHMsIGtleSk6CisgICAgICAg
IHJldHVybiBkYi5nZXQoa2V5KQorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIGtleSk6CisgICAg
ICAgIHJldHVybiBkYi5nZXQoa2V5KQorCisKK2NsYXNzIERhdGFTdG9yZUZpbGUoZGIuTW9kZWwp
OgorICAgICIiIlRoaXMgY2xhc3Mgc3RvcmVzIGZpbGUgaW4gZGF0YXN0b3JlLgorICAgICAgIElm
IGEgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRlcyksIHRoZSBmaWxlIGlzIHNwbGl0
dGVkIGludG8KKyAgICAgICBtdWx0aXBsZSBzZWdtZW50cyBhbmQgc3RvcmVkIGluIG11bHRpcGxl
IGRhdGFzdG9yZSBlbnRyaWVzLgorICAgICIiIgorCisgICAgbmFtZSA9IGRiLlN0cmluZ1Byb3Bl
cnR5KCkKKyAgICBkYXRhX2tleXMgPSBkYi5MaXN0UHJvcGVydHkoZGIuS2V5KQorICAgIGRhdGUg
PSBkYi5EYXRlVGltZVByb3BlcnR5KGF1dG9fbm93X2FkZD1UcnVlKQorCisgICAgZGF0YSA9IE5v
bmUKKworICAgIGRlZiBkZWxldGVfZGF0YShzZWxmLCBrZXlzPU5vbmUpOgorICAgICAgICBpZiBu
b3Qga2V5czoKKyAgICAgICAgICAgIGtleXMgPSBzZWxmLmRhdGFfa2V5cworCisgICAgICAgIGZv
ciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtl
eSkKKyAgICAgICAgICAgIGlmIGRhdGFfZW50cnk6CisgICAgICAgICAgICAgICAgZGF0YV9lbnRy
eS5kZWxldGUoKQorCisgICAgZGVmIHNhdmVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYg
bm90IGRhdGE6CisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIk5vIGRhdGEgdG8gc2F2ZS4i
KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbGVuKGRhdGEpID4gKE1B
WF9EQVRBX0VOVFJZX1BFUl9GSUxFICogTUFYX0VOVFJZX0xFTik6CisgICAgICAgICAgICBsb2dn
aW5nLmVycm9yKCJGaWxlIHRvbyBiaWcsIGNhbid0IHNhdmUgdG8gZGF0YXN0b3JlOiAlZEsiLAor
ICAgICAgICAgICAgICAgIGxlbihkYXRhKSAvIDEwMjQpCisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgICAgICBzdGFydCA9IDAKKyAgICAgICAga2V5cyA9IHNlbGYuZGF0YV9rZXlzCisg
ICAgICAgIHNlbGYuZGF0YV9rZXlzID0gW10KKyAgICAgICAgd2hpbGUgc3RhcnQgPCBsZW4oZGF0
YSk6CisgICAgICAgICAgICBpZiBrZXlzOgorICAgICAgICAgICAgICAgIGtleSA9IGtleXMucG9w
KDApCisgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeS5nZXQoa2V5KQorICAg
ICAgICAgICAgICAgIGlmIG5vdCBkYXRhX2VudHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2dn
aW5nLndhcm5pbmcoIkZvdW5kIGtleSwgYnV0IG5vIGRhdGEgZW50cnk6ICVzIiwga2V5KQorICAg
ICAgICAgICAgICAgICAgICBkYXRhX2VudHJ5ID0gRGF0YUVudHJ5KCkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeSgpCisKKyAgICAgICAg
ICAgIGRhdGFfZW50cnkuZGF0YSA9IGRiLkJsb2IoZGF0YVtzdGFydDogc3RhcnQgKyBNQVhfRU5U
UllfTEVOXSkKKyAgICAgICAgICAgIGRhdGFfZW50cnkucHV0KCkKKworICAgICAgICAgICAgbG9n
Z2luZy5pbmZvKCJEYXRhIHNhdmVkOiAlcy4iLCBkYXRhX2VudHJ5LmtleSgpKQorICAgICAgICAg
ICAgc2VsZi5kYXRhX2tleXMuYXBwZW5kKGRhdGFfZW50cnkua2V5KCkpCisKKyAgICAgICAgICAg
IHN0YXJ0ID0gc3RhcnQgKyBNQVhfRU5UUllfTEVOCisKKyAgICAgICAgaWYga2V5czoKKyAgICAg
ICAgICAgIHNlbGYuZGVsZXRlX2RhdGEoa2V5cykKKworICAgICAgICBzZWxmLmRhdGEgPSBkYXRh
CisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBsb2FkX2RhdGEoc2VsZik6CisgICAg
ICAgIGlmIG5vdCBzZWxmLmRhdGFfa2V5czoKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygi
Tm8gZGF0YSB0byBsb2FkLiIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGRh
dGEgPSBbXQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuZGF0YV9rZXlzOgorICAgICAgICAgICAg
bG9nZ2luZy5pbmZvKCJMb2FkaW5nIGRhdGEgZm9yIGtleTogJXMuIiwga2V5KQorICAgICAgICAg
ICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeS5nZXQoa2V5KQorICAgICAgICAgICAgaWYgbm90IGRh
dGFfZW50cnk6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiTm8gZGF0YSBmb3VuZCBm
b3Iga2V5OiAlcy4iLCBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICAgICAgZGF0YS5hcHBlbmQoZGF0YV9lbnRyeS5kYXRhKQorCisgICAgICAgIHNlbGYuZGF0YSA9
ICIiLmpvaW4oZGF0YSkKKworICAgICAgICByZXR1cm4gc2VsZi5kYXRhCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUu
cHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzLnB5CShyZXZp
c2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0
cy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitm
cm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHNp
bXBsZWpzb24KK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gbW9kZWwudGVzdGZpbGUgaW1wb3J0IFRl
c3RGaWxlCisKK0pTT05fUkVTVUxUU19GSUxFID0gInJlc3VsdHMuanNvbiIKK0pTT05fUkVTVUxU
U19QUkVGSVggPSAiQUREX1JFU1VMVFMoIgorSlNPTl9SRVNVTFRTX1NVRkZJWCA9ICIpOyIKK0pT
T05fUkVTVUxUU19WRVJTSU9OX0tFWSA9ICJ2ZXJzaW9uIgorSlNPTl9SRVNVTFRTX0JVSUxEX05V
TUJFUlMgPSAiYnVpbGROdW1iZXJzIgorSlNPTl9SRVNVTFRTX1RFU1RTID0gInRlc3RzIgorSlNP
Tl9SRVNVTFRTX1JFU1VMVFMgPSAicmVzdWx0cyIKK0pTT05fUkVTVUxUU19USU1FUyA9ICJ0aW1l
cyIKK0pTT05fUkVTVUxUU19WRVJTSU9OID0gMworSlNPTl9SRVNVTFRTX01BWF9CVUlMRFMgPSA3
NTAKKworCitjbGFzcyBKc29uUmVzdWx0cyhvYmplY3QpOgorICAgIEBjbGFzc21ldGhvZAorICAg
IGRlZiBfc3RyaXBfcHJlZml4X3N1ZmZpeChjbHMsIGRhdGEpOgorICAgICAgICAiIiJTdHJpcCBv
dXQgcHJlZml4IGFuZCBzdWZmaXggb2YganNvbiByZXN1bHRzIHN0cmluZy4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgICAgZGF0YToganNvbiBmaWxlIGNvbnRlbnQuCisKKyAgICAgICAgUmV0
dXJuczoKKyAgICAgICAgICAgIGpzb24gc3RyaW5nIHdpdGhvdXQgcHJlZml4IGFuZCBzdWZmaXgu
CisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBkYXRhW2xlbihKU09OX1JFU1VMVFNfUFJF
RklYKToKKyAgICAgICAgICAgICAgICAgICAgbGVuKGRhdGEpIC0gbGVuKEpTT05fUkVTVUxUU19T
VUZGSVgpXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9nZW5lcmF0ZV9maWxlX2RhdGEo
Y2xzLCBqc29uLCBzb3J0X2tleXM9RmFsc2UpOgorICAgICAgICAiIiJHaXZlbiBqc29uIHN0cmlu
ZywgZ2VuZXJhdGUgZmlsZSBjb250ZW50IGRhdGEgYnkgYWRkaW5nCisgICAgICAgICAgIHByZWZp
eCBhbmQgc3VmZml4LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBqc29uOiBqc29uIHN0
cmluZyB3aXRob3V0IHByZWZpeCBhbmQgc3VmZml4LgorCisgICAgICAgIFJldHVybnM6CisgICAg
ICAgICAgICBqc29uIGZpbGUgZGF0YS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGF0YSA9IHNp
bXBsZWpzb24uZHVtcHMoanNvbiwgc2VwYXJhdG9ycz0oJywnLCAnOicpLAorICAgICAgICAgICAg
c29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgcmV0dXJuIEpTT05fUkVTVUxUU19QUkVGSVgg
KyBkYXRhICsgSlNPTl9SRVNVTFRTX1NVRkZJWAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVm
IF9sb2FkX2pzb24oY2xzLCBmaWxlX2RhdGEpOgorICAgICAgICAiIiJMb2FkIGpzb24gZmlsZSB0
byBhIHB5dGhvbiBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVfZGF0
YToganNvbiBmaWxlIGNvbnRlbnQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGpz
b24gb2JqZWN0IG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgor
CisgICAgICAgIGpzb25fcmVzdWx0c19zdHIgPSBjbHMuX3N0cmlwX3ByZWZpeF9zdWZmaXgoZmls
ZV9kYXRhKQorICAgICAgICBpZiBub3QganNvbl9yZXN1bHRzX3N0cjoKKyAgICAgICAgICAgIGxv
Z2dpbmcud2FybmluZygiTm8ganNvbiByZXN1bHRzIGRhdGEuIikKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNpbXBsZWpzb24ubG9h
ZHMoanNvbl9yZXN1bHRzX3N0cikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAg
ICAgICAgICAgbG9nZ2luZy5kZWJ1Zyhqc29uX3Jlc3VsdHNfc3RyKQorICAgICAgICAgICAgbG9n
Z2luZy5lcnJvcigiRmFpbGVkIHRvIGxvYWQganNvbiByZXN1bHRzOiAlcyIsIHN0cihlcnIpKQor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVy
Z2VfanNvbihjbHMsIGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAg
ICIiIk1lcmdlIGluY3JlbWVudGFsIGpzb24gaW50byBhZ2dyZWdhdGVkIGpzb24gcmVzdWx0cy4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dyZWdhdGVk
IGpzb24gb2JqZWN0LgorICAgICAgICAgICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVtZW50YWwg
anNvbiBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWUgaWYgbWVy
Z2Ugc3VjY2VlZHMgb3IKKyAgICAgICAgICAgIEZhbHNlIG9uIGZhaWx1cmUuCisgICAgICAgICIi
IgorCisgICAgICAgIGluY3JlbWVudGFsX2J1aWxkcyA9IGluY3JlbWVudGFsX2pzb25bSlNPTl9S
RVNVTFRTX0JVSUxEX05VTUJFUlNdCisgICAgICAgIGFnZ3JlZ2F0ZWRfYnVpbGRzID0gYWdncmVn
YXRlZF9qc29uW0pTT05fUkVTVUxUU19CVUlMRF9OVU1CRVJTXQorICAgICAgICBhZ2dyZWdhdGVk
X2J1aWxkX251bWJlciA9IGludChhZ2dyZWdhdGVkX2J1aWxkc1swXSkKKyAgICAgICAgIyBMb29w
IHRocm91Z2ggYWxsIGluY3JlbWVudGFsIGJ1aWxkcywgc3RhcnQgZnJvbSB0aGUgb2xkZXN0IHJ1
bi4KKyAgICAgICAgZm9yIGluZGV4IGluIHJldmVyc2VkKHJhbmdlKGxlbihpbmNyZW1lbnRhbF9i
dWlsZHMpKSk6CisgICAgICAgICAgICBidWlsZF9udW1iZXIgPSBpbnQoaW5jcmVtZW50YWxfYnVp
bGRzW2luZGV4XSkKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIk1lcmdpbmcgYnVpbGQgJXMs
IGluY3JlbWVudGFsIGpzb24gaW5kZXg6ICVkLiIsCisgICAgICAgICAgICAgICAgYnVpbGRfbnVt
YmVyLCBpbmRleCkKKworICAgICAgICAgICAgIyBSZXR1cm4gaWYgbm90IGFsbCBidWlsZCBudW1i
ZXJzIGluIHRoZSBpbmNyZW1lbnRhbCBqc29uIHJlc3VsdHMKKyAgICAgICAgICAgICMgYXJlIG5l
d2VyIHRoYW4gdGhlIG1vc3QgcmVjZW50IGJ1aWxkIGluIHRoZSBhZ2dyZWdhdGVkIHJlc3VsdHMu
CisgICAgICAgICAgICBpZiBidWlsZF9udW1iZXIgPCBhZ2dyZWdhdGVkX2J1aWxkX251bWJlcjoK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoKCJCdWlsZCAlZCBpbiBpbmNyZW1lbnRh
bCBqc29uIGlzIG9sZGVyIHRoYW4gIgorICAgICAgICAgICAgICAgICAgICAidGhlIG1vc3QgcmVj
ZW50IGJ1aWxkIGluIGFnZ3JlZ2F0ZWQgcmVzdWx0czogJWQiKSwKKyAgICAgICAgICAgICAgICAg
ICAgYnVpbGRfbnVtYmVyLCBhZ2dyZWdhdGVkX2J1aWxkX251bWJlcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgIyBTa2lwIG1lcmdpbmcgZHVwbGljYXRlIGJ1
aWxkLgorICAgICAgICAgICAgaWYgYnVpbGRfbnVtYmVyID09IGFnZ3JlZ2F0ZWRfYnVpbGRfbnVt
YmVyOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiRHVwbGljYXRlIGJ1aWxkICVk
IGluIGluY3JlbWVudGFsIGpzb24iLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9udW1iZXIp
CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBNZXJnZSB0aGlzIGJ1
aWxkIGludG8gYWdncmVhZ2F0ZWQgcmVzdWx0cy4KKyAgICAgICAgICAgIGNscy5fbWVyZ2Vfb25l
X2J1aWxkKGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbiwgaW5kZXgpCisgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJNZXJnZWQgYnVpbGQgJXMsIG1lcmdlZCBqc29uOiAlcy4iLAor
ICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlciwgYWdncmVnYXRlZF9qc29uKQorCisgICAgICAg
ICMgTWVyZ2UgdGVzdHMgcmVzdWx0cyBhbmQgdGltZXMKKyAgICAgICAgaW5jcmVtZW50YWxfdGVz
dHMgPSBpbmNyZW1lbnRhbF9qc29uW0pTT05fUkVTVUxUU19URVNUU10KKyAgICAgICAgaWYgaW5j
cmVtZW50YWxfdGVzdHM6CisgICAgICAgICAgICBhZ2dyZWdhdGVkX3Rlc3RzID0gYWdncmVnYXRl
ZF9qc29uW0pTT05fUkVTVUxUU19URVNUU10KKyAgICAgICAgICAgIGNscy5fbWVyZ2VfdGVzdHMo
YWdncmVnYXRlZF90ZXN0cywgaW5jcmVtZW50YWxfdGVzdHMpCisKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2Vfb25lX2J1aWxkKGNscywgYWdn
cmVnYXRlZF9qc29uLCBpbmNyZW1lbnRhbF9qc29uLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGluY3JlbWVudGFsX2luZGV4KToKKyAgICAgICAgIiIiTWVyZ2Ugb25lIGJ1aWxkIG9mIGluY3Jl
bWVudGFsIGpzb24gaW50byBhZ2dyZWdhdGVkIGpzb24gcmVzdWx0cy4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dyZWdhdGVkIGpzb24gb2JqZWN0Lgor
ICAgICAgICAgICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVtZW50YWwganNvbiBvYmplY3QuCisg
ICAgICAgICAgICBpbmNyZW1lbnRhbF9pbmRleDogaW5kZXggb2YgdGhlIGluY3JlbWVudGFsIGpz
b24gcmVzdWx0cyB0byBtZXJnZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGtleSBpbiBp
bmNyZW1lbnRhbF9qc29uLmtleXMoKToKKyAgICAgICAgICAgICMgTWVyZ2UganNvbiByZXN1bHRz
IGV4Y2VwdCAidGVzdHMiIHByb3BlcnRpZXMgKHJlc3VsdHMsIHRpbWVzIGV0YykuCisgICAgICAg
ICAgICAjICJ0ZXN0cyIgcHJvcGVydGllcyB3aWxsIGJlIGhhbmRsZWQgc2VwYXJhdGVseS4KKyAg
ICAgICAgICAgIGlmIGtleSA9PSBKU09OX1JFU1VMVFNfVEVTVFM6CisgICAgICAgICAgICAgICAg
Y29udGludWUKKworICAgICAgICAgICAgaWYga2V5IGluIGFnZ3JlZ2F0ZWRfanNvbjoKKyAgICAg
ICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XS5pbnNlcnQoCisgICAgICAgICAgICAgICAg
ICAgIDAsIGluY3JlbWVudGFsX2pzb25ba2V5XVtpbmNyZW1lbnRhbF9pbmRleF0pCisgICAgICAg
ICAgICAgICAgYWdncmVnYXRlZF9qc29uW2tleV0gPSBcCisgICAgICAgICAgICAgICAgICAgIGFn
Z3JlZ2F0ZWRfanNvbltrZXldWzpKU09OX1JFU1VMVFNfTUFYX0JVSUxEU10KKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9qc29uW2tleV0gPSBpbmNyZW1lbnRh
bF9qc29uW2tleV0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2VfdGVzdHMoY2xz
LCBhZ2dyZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24pOgorICAgICAgICAiIiJNZXJnZSAi
dGVzdHMiIHByb3BlcnRpZXM6cmVzdWx0cywgdGltZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICAgIGFnZ3JlZ2F0ZWRfanNvbjogYWdncmVnYXRlZCBqc29uIG9iamVjdC4KKyAgICAgICAg
ICAgIGluY3JlbWVudGFsX2pzb246IGluY3JlbWVudGFsIGpzb24gb2JqZWN0LgorICAgICAgICAi
IiIKKworICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGluY3JlbWVudGFsX2pzb246CisgICAgICAg
ICAgICBpZiB0ZXN0X25hbWUgaW4gYWdncmVnYXRlZF9qc29uOgorICAgICAgICAgICAgICAgIGNs
cy5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKAorICAgICAgICAgICAgICAgICAgICBp
bmNyZW1lbnRhbF9qc29uW3Rlc3RfbmFtZV1bSlNPTl9SRVNVTFRTX1JFU1VMVFNdLAorICAgICAg
ICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bdGVzdF9uYW1lXVtKU09OX1JFU1VMVFNfUkVT
VUxUU10pCisgICAgICAgICAgICAgICAgY2xzLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29k
ZWQoCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsX2pzb25bdGVzdF9uYW1lXVtKU09O
X1JFU1VMVFNfVElNRVNdLAorICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bdGVz
dF9uYW1lXVtKU09OX1JFU1VMVFNfVElNRVNdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBhZ2dyZWdhdGVkX2pzb25bdGVzdF9uYW1lXSA9IGluY3JlbWVudGFsX2pzb25bdGVz
dF9uYW1lXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9pbnNlcnRfaXRlbV9ydW5fbGVu
Z3RoX2VuY29kZWQoY2xzLCBpbmNyZW1lbnRhbF9pdGVtLCBhZ2dyZWdhdGVkX2l0ZW0pOgorICAg
ICAgICAiIiJJbnNlcnRzIHRoZSBpbmNyZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0
cyBpbnRvIHRoZSBhZ2dyZWdhdGVkCisgICAgICAgICAgIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1
bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpbmNyZW1lbnRhbF9pdGVtOiBpbmNy
ZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKyAgICAgICAgICAgIGFnZ3JlZ2F0
ZWRfaXRlbTogYWdncmVnYXRlZCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKyAgICAgICAg
IiIiCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gaW5jcmVtZW50YWxfaXRlbToKKyAgICAgICAgICAg
IGlmIGxlbihhZ2dyZWdhdGVkX2l0ZW0pIGFuZCBpdGVtWzFdID09IGFnZ3JlZ2F0ZWRfaXRlbVsw
XVsxXToKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0ZW1bMF1bMF0gPSBtaW4oCisgICAg
ICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfaXRlbVswXVswXSArIGl0ZW1bMF0sIEpTT05fUkVT
VUxUU19NQVhfQlVJTERTKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRo
ZSB0ZXN0IGl0ZW0gdmFsdWVzIG5lZWQgdG8gYmUgc3VtbWVkIGZyb20gY29udGludW91cyBydW5z
LgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgYW4gb2xkZXIgaXRlbSAobm90IG1vc3Qg
cmVjZW50IG9uZSkgd2hvc2UgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAjIHNhbWUgYXMgdGhl
IG9uZSB0byBpbnNlcnQsIHRoZW4gd2Ugc2hvdWxkIHJlbW92ZSB0aGUgb2xkIGl0ZW0KKyAgICAg
ICAgICAgICAgICAjIGZyb20gYWdncmVnYXRlZCBsaXN0LgorICAgICAgICAgICAgICAgIGZvciBp
IGluIHJldmVyc2VkKHJhbmdlKDEsIGxlbihhZ2dyZWdhdGVkX2l0ZW0pKSk6CisgICAgICAgICAg
ICAgICAgICAgIGlmIGl0ZW1bMV0gPT0gYWdncmVnYXRlZF9pdGVtW2ldWzFdOgorICAgICAgICAg
ICAgICAgICAgICAgICAgYWdncmVnYXRlZF9pdGVtLnBvcChpKQorCisgICAgICAgICAgICAgICAg
YWdncmVnYXRlZF9pdGVtLmluc2VydCgwLCBpdGVtKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIF9jaGVja19qc29uKGNscywgYnVpbGRlciwganNvbik6CisgICAgICAgICIiIkNoZWNrIHdo
ZXRoZXIgdGhlIGdpdmVuIGpzb24gaXMgdmFsaWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZSB0aGlzIGpzb24gaXMgZm9yLgorICAgICAgICAgICAg
anNvbjoganNvbiBvYmplY3QgdG8gY2hlY2suCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAg
ICAgIFRydWUgaWYgdGhlIGpzb24gaXMgdmFsaWQgb3IKKyAgICAgICAgICAgIEZhbHNlIG90aGVy
d2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdmVyc2lvbiA9IGpzb25bSlNPTl9SRVNVTFRT
X1ZFUlNJT05fS0VZXQorICAgICAgICBpZiB2ZXJzaW9uID4gSlNPTl9SRVNVTFRTX1ZFUlNJT046
CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJSZXN1bHRzIEpTT04gdmVyc2lvbiAnJXMnIGlz
IG5vdCBzdXBwb3J0ZWQuIiwKKyAgICAgICAgICAgICAgICB2ZXJzaW9uKQorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IGJ1aWxkZXIgaW4ganNvbjoKKyAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoIkJ1aWxkZXIgJyVzJyBpcyBub3QgaW4ganNvbiByZXN1bHRzLiIs
IGJ1aWxkZXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXN1bHRzX2Zv
cl9idWlsZGVyID0ganNvbltidWlsZGVyXQorICAgICAgICBpZiBub3QgSlNPTl9SRVNVTFRTX0JV
SUxEX05VTUJFUlMgaW4gcmVzdWx0c19mb3JfYnVpbGRlcjoKKyAgICAgICAgICAgIGxvZ2dpbmcu
ZXJyb3IoIk1pc3NpbmcgYnVpbGQgbnVtYmVyIGluIGpzb24gcmVzdWx0cy4iKQorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBtZXJnZShjbHMsIGJ1aWxkZXIsIGFnZ3JlZ2F0ZWQsIGluY3JlbWVudGFsLCBz
b3J0X2tleXM9RmFsc2UpOgorICAgICAgICAiIiJNZXJnZSBpbmNyZW1lbnRhbCBqc29uIGZpbGUg
ZGF0YSB3aXRoIGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZS4KKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWQ6
IGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBpbmNyZW1lbnRhbDogaW5j
cmVtZW50YWwganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBzb3J0X2tleTogd2hldGhlciBv
ciBub3QgdG8gc29ydCBrZXkgd2hlbiBkdW1waW5nIGpzb24gcmVzdWx0cy4KKworICAgICAgICBS
ZXR1cm5zOgorICAgICAgICAgICAgTWVyZ2VkIGpzb24gZmlsZSBkYXRhIGlmIG1lcmdlIHN1Y2Nl
ZWRzIG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgorCisgICAg
ICAgIGlmIG5vdCBpbmNyZW1lbnRhbDoKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiTm90
aGluZyB0byBtZXJnZS4iKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBsb2dn
aW5nLmluZm8oIkxvYWRpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAgIGluY3JlbWVu
dGFsX2pzb24gPSBjbHMuX2xvYWRfanNvbihpbmNyZW1lbnRhbCkKKyAgICAgICAgaWYgbm90IGlu
Y3JlbWVudGFsX2pzb246CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dp
bmcuaW5mbygiQ2hlY2tpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAgIGlmIG5vdCBj
bHMuX2NoZWNrX2pzb24oYnVpbGRlciwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBleGlzdGluZyBhZ2dy
ZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBhZ2dyZWdhdGVkX2pzb24gPSBjbHMuX2xvYWRfanNv
bihhZ2dyZWdhdGVkKQorICAgICAgICBpZiBub3QgYWdncmVnYXRlZF9qc29uOgorICAgICAgICAg
ICAgcmV0dXJuIGluY3JlbWVudGFsCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJDaGVja2luZyBl
eGlzdGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBpZiBub3QgY2xzLl9jaGVja19q
c29uKGJ1aWxkZXIsIGFnZ3JlZ2F0ZWRfanNvbik6CisgICAgICAgICAgICByZXR1cm4gaW5jcmVt
ZW50YWwKKworICAgICAgICBsb2dnaW5nLmluZm8oIk1lcmdpbmcganNvbiByZXN1bHRzLi4uIikK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGNscy5fbWVyZ2VfanNvbigKKyAgICAg
ICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bYnVpbGRlcl0sCisgICAgICAgICAgICAgICAgaW5j
cmVtZW50YWxfanNvbltidWlsZGVyXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigi
RmFpbGVkIHRvIG1lcmdlIGpzb24gcmVzdWx0czogJXMiLCBzdHIoZXJyKSkKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisKKyAgICAgICAgIyBNYWtlIHN1cmUgcmVzdWx0cyBqc29uIHZlcnNpb24g
aXMgdXBkYXRlZC4KKyAgICAgICAgYWdncmVnYXRlZF9qc29uW0pTT05fUkVTVUxUU19WRVJTSU9O
X0tFWV0gPSBKU09OX1JFU1VMVFNfVkVSU0lPTgorCisgICAgICAgIHJldHVybiBjbHMuX2dlbmVy
YXRlX2ZpbGVfZGF0YShhZ2dyZWdhdGVkX2pzb24sIHNvcnRfa2V5cykKKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiB1cGRhdGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIGluY3JlbWVudGFs
KToKKyAgICAgICAgIiIiVXBkYXRlIGRhdGFzdG9yZSBqc29uIGZpbGUgZGF0YSBieSBtZXJnaW5n
IGl0IHdpdGggaW5jcmVtZW50YWwganNvbgorICAgICAgICAgICBmaWxlLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIG5hbWUuCisgICAgICAgICAgICB0ZXN0
X3R5cGU6IHR5cGUgb2YgdGVzdCByZXN1bHRzLgorICAgICAgICAgICAgaW5jcmVtZW50YWw6IGlu
Y3JlbWVudGFsIGpzb24gZmlsZSBkYXRhIHRvIG1lcmdlLgorCisgICAgICAgIFJldHVybnM6Cisg
ICAgICAgICAgICBUZXN0RmlsZSBvYmplY3QgaWYgdXBkYXRlIHN1Y2NlZWRzIG9yCisgICAgICAg
ICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgorCisgICAgICAgIGZpbGVzID0gVGVz
dEZpbGUuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3RfdHlwZSwgSlNPTl9SRVNVTFRTX0ZJTEUpCisg
ICAgICAgIGlmIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IGZpbGVzWzBdCisgICAgICAgICAg
ICBuZXdfcmVzdWx0cyA9IGNscy5tZXJnZShidWlsZGVyLCBmaWxlLmRhdGEsIGluY3JlbWVudGFs
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBVc2UgdGhlIGluY3JlbWVudGFsIGRhdGEg
aWYgdGhlcmUgaXMgbm8gYWdncmVnYXRlZCBmaWxlIHRvIG1lcmdlLgorICAgICAgICAgICAgZmls
ZSA9IFRlc3RGaWxlKCkKKyAgICAgICAgICAgIGZpbGUuYnVpbGRlciA9IGJ1aWxkZXIKKyAgICAg
ICAgICAgIGZpbGUubmFtZSA9IEpTT05fUkVTVUxUU19GSUxFCisgICAgICAgICAgICBuZXdfcmVz
dWx0cyA9IGluY3JlbWVudGFsCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oIk5vIGV4aXN0aW5n
IGpzb24gcmVzdWx0cywgaW5jcmVtZW50YWwganNvbiBpcyBzYXZlZC4iKQorCisgICAgICAgIGlm
IG5vdCBuZXdfcmVzdWx0czoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYg
bm90IGZpbGUuc2F2ZShuZXdfcmVzdWx0cyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgICAgIHJldHVybiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9UZXN0
UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzLnB5Cl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9k
ZWwvanNvbnJlc3VsdHNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weQkocmV2aXNpb24gMCkK
KysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHNfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ1IEBACisjIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20ganNvbnJlc3VsdHMgaW1wb3J0IEpzb25SZXN1bHRzCisK
K0pTT05fUkVTVUxUU19URU1QTEFURSA9ICgKKyAgICAneyJXZWJraXQiOnsnCisgICAgJyJhbGxG
aXhhYmxlQ291bnQiOltbVEVTVERBVEFfQ09VTlRdXSwnCisgICAgJyJidWlsZE51bWJlcnMiOltb
VEVTVERBVEFfQlVJTEROVU1CRVJTXV0sJworICAgICciY2hyb21lUmV2aXNpb24iOltbVEVTVERB
VEFfQ0hST01FUkVWSVNJT05dXSwnCisgICAgJyJkZWZlcnJlZENvdW50cyI6W1tURVNUREFUQV9D
T1VOVFNdXSwnCisgICAgJyJmaXhhYmxlQ291bnQiOltbVEVTVERBVEFfQ09VTlRdXSwnCisgICAg
JyJmaXhhYmxlQ291bnRzIjpbW1RFU1REQVRBX0NPVU5UU11dLCcKKyAgICAnInNlY29uZHNTaW5j
ZUVwb2NoIjpbW1RFU1REQVRBX1RJTUVTXV0sJworICAgICcidGVzdHMiOntbVEVTVERBVEFfVEVT
VFNdfSwnCisgICAgJyJ3ZWJraXRSZXZpc2lvbiI6W1tURVNUREFUQV9XRUJLSVRSRVZJU0lPTl1d
LCcKKyAgICAnIndvbnRmaXhDb3VudHMiOltbVEVTVERBVEFfQ09VTlRTXV0nCisgICAgJ30sJwor
ICAgICcidmVyc2lvbiI6MycKKyAgICAnfScpCisKK0pTT05fUkVTVUxUU19DT1VOVFNfVEVNUExB
VEUgPSAoCisgICAgJ3snCisgICAgJyJDIjpbVEVTVERBVEFdLCcKKyAgICAnIkYiOltURVNUREFU
QV0sJworICAgICciSSI6W1RFU1REQVRBXSwnCisgICAgJyJPIjpbVEVTVERBVEFdLCcKKyAgICAn
IlAiOltURVNUREFUQV0sJworICAgICciVCI6W1RFU1REQVRBXSwnCisgICAgJyJYIjpbVEVTVERB
VEFdLCcKKyAgICAnIloiOltURVNUREFUQV19JykKKworSlNPTl9SRVNVTFRTX1RFU1RTX1RFTVBM
QVRFID0gKAorICAgICciW1RFU1REQVRBX1RFU1RfTkFNRV0iOnsnCisgICAgJyJyZXN1bHRzIjpb
W1RFU1REQVRBX1RFU1RfUkVTVUxUU11dLCcKKyAgICAnInRpbWVzIjpbW1RFU1REQVRBX1RFU1Rf
VElNRVNdXX0nKQorCitKU09OX1JFU1VMVFNfUFJFRklYID0gIkFERF9SRVNVTFRTKCIKK0pTT05f
UkVTVUxUU19TVUZGSVggPSAiKTsiCisKKworY2xhc3MgSnNvblJlc3VsdHNUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX2J1aWxkZXIg
PSAiV2Via2l0IgorCisgICAgZGVmIF9tYWtlX3Rlc3RfanNvbihzZWxmLCB0ZXN0X2RhdGEpOgor
ICAgICAgICBpZiBub3QgdGVzdF9kYXRhOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAg
ICAgKGJ1aWxkcywgdGVzdHMpID0gdGVzdF9kYXRhCisgICAgICAgIGlmIG5vdCBidWlsZHMgb3Ig
bm90IHRlc3RzOgorICAgICAgICAgICAgcmV0dXJuIEpTT05fUkVTVUxUU19QUkVGSVggKyBKU09O
X1JFU1VMVFNfU1VGRklYCisKKyAgICAgICAganNvbiA9IEpTT05fUkVTVUxUU19URU1QTEFURQor
CisgICAgICAgIGNvdW50cyA9IFtdCisgICAgICAgIGJ1aWxkX251bWJlcnMgPSBbXQorICAgICAg
ICB3ZWJraXRfcmV2aXNpb24gPSBbXQorICAgICAgICBjaHJvbWVfcmV2aXNpb24gPSBbXQorICAg
ICAgICB0aW1lcyA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAg
ICBjb3VudHMuYXBwZW5kKEpTT05fUkVTVUxUU19DT1VOVFNfVEVNUExBVEUucmVwbGFjZSgiW1RF
U1REQVRBXSIsIGJ1aWxkKSkKKyAgICAgICAgICAgIGJ1aWxkX251bWJlcnMuYXBwZW5kKCIxMDAw
JXMiICUgYnVpbGQpCisgICAgICAgICAgICB3ZWJraXRfcmV2aXNpb24uYXBwZW5kKCIyMDAwJXMi
ICUgYnVpbGQpCisgICAgICAgICAgICBjaHJvbWVfcmV2aXNpb24uYXBwZW5kKCIzMDAwJXMiICUg
YnVpbGQpCisgICAgICAgICAgICB0aW1lcy5hcHBlbmQoIjEwMDAwMCVzMDAwIiAlIGJ1aWxkKQor
CisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9DT1VOVFNdIiwgIiwiLmpv
aW4oY291bnRzKSkKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX0NPVU5U
XSIsICIsIi5qb2luKGJ1aWxkcykpCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNU
REFUQV9CVUlMRE5VTUJFUlNdIiwgIiwiLmpvaW4oYnVpbGRfbnVtYmVycykpCisgICAgICAgIGpz
b24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9XRUJLSVRSRVZJU0lPTl0iLCAiLCIuam9pbih3
ZWJraXRfcmV2aXNpb24pKQorICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFf
Q0hST01FUkVWSVNJT05dIiwgIiwiLmpvaW4oY2hyb21lX3JldmlzaW9uKSkKKyAgICAgICAganNv
biA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX1RJTUVTXSIsICIsIi5qb2luKHRpbWVzKSkKKwor
ICAgICAgICBqc29uX3Rlc3RzID0gW10KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAg
ICAgICAgICB0ID0gSlNPTl9SRVNVTFRTX1RFU1RTX1RFTVBMQVRFLnJlcGxhY2UoIltURVNUREFU
QV9URVNUX05BTUVdIiwgdGVzdFswXSkKKyAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UoIltURVNU
REFUQV9URVNUX1JFU1VMVFNdIiwgdGVzdFsxXSkKKyAgICAgICAgICAgIHQgPSB0LnJlcGxhY2Uo
IltURVNUREFUQV9URVNUX1RJTUVTXSIsIHRlc3RbMl0pCisgICAgICAgICAgICBqc29uX3Rlc3Rz
LmFwcGVuZCh0KQorCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9URVNU
U10iLCAiLCIuam9pbihqc29uX3Rlc3RzKSkKKworICAgICAgICByZXR1cm4gSlNPTl9SRVNVTFRT
X1BSRUZJWCArIGpzb24gKyBKU09OX1JFU1VMVFNfU1VGRklYCisKKyAgICBkZWYgX3Rlc3RfbWVy
Z2Uoc2VsZiwgYWdncmVnYXRlZF9kYXRhLCBpbmNyZW1lbnRhbF9kYXRhLCBleHBlY3RlZF9kYXRh
KToKKyAgICAgICAgYWdncmVnYXRlZF9yZXN1bHRzID0gc2VsZi5fbWFrZV90ZXN0X2pzb24oYWdn
cmVnYXRlZF9kYXRhKQorICAgICAgICBpbmNyZW1lbnRhbF9yZXN1bHRzID0gc2VsZi5fbWFrZV90
ZXN0X2pzb24oaW5jcmVtZW50YWxfZGF0YSkKKyAgICAgICAgbWVyZ2VkX3Jlc3VsdHMgPSBKc29u
UmVzdWx0cy5tZXJnZShzZWxmLl9idWlsZGVyLAorICAgICAgICAgICAgYWdncmVnYXRlZF9yZXN1
bHRzLCBpbmNyZW1lbnRhbF9yZXN1bHRzLCBzb3J0X2tleXM9VHJ1ZSkKKworICAgICAgICBpZiBl
eHBlY3RlZF9kYXRhOgorICAgICAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX21ha2Vf
dGVzdF9qc29uKGV4cGVjdGVkX2RhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyht
ZXJnZWRfcmVzdWx0cywgZXhwZWN0ZWRfcmVzdWx0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UobWVyZ2VkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdChzZWxm
KToKKyAgICAgICAgIyBFbXB0eSBpbmNyZW1lbnRhbCByZXN1bHRzIGpzb24uCisgICAgICAgICMg
Tm90aGluZyB0byBtZXJnZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAg
ICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0
bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNy
ZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgIyBFeHBlY3Qg
bm8gbWVyZ2UgaGFwcGVucy4KKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgIyBObyBhY3R1
YWwgaW5jcmVtZW50YWwgdGVzdCByZXN1bHRzIChvbmx5IHByZWZpeCBhbmQgc3VmZml4KSB0byBt
ZXJnZS4KKyAgICAgICAgIyBOb3RoaW5nIHRvIG1lcmdlLgorICAgICAgICBzZWxmLl90ZXN0X21l
cmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIi
LCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisg
ICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbXSwgW10pLAor
ICAgICAgICAgICAgIyBFeHBlY3RlZCBubyBtZXJnZSBoYXBwZW5zLgorICAgICAgICAgICAgTm9u
ZSkKKworICAgICAgICAjIE5vIGV4aXN0aW5nIGFnZ3JlZ2F0ZWQgcmVzdWx0cy4KKyAgICAgICAg
IyBNZXJnZWQgcmVzdWx0cyA9PSBuZXcgaW5jcmVtZW50YWwgcmVzdWx0cy4KKyAgICAgICAgc2Vs
Zi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAg
ICAgICBOb25lLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAg
ICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0i
XV0pLAorICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwg
IjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pKQorCisg
ICAgICAgICMgU2luZ2xlIHRlc3QgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgSW5jcmVtZW50
YWwgcmVzdWx0cyBoYXMgdGhlIGxhdGVzdCBidWlsZCBhbmQgc2FtZSB0ZXN0IHJlc3VsdHMgZm9y
CisgICAgICAgICMgdGhhdCBydW4uCisgICAgICAgICMgSW5zZXJ0IHRoZSBpbmNyZW1lbnRhbCBy
ZXN1bHRzIGF0IHRoZSBmaXJzdCBwbGFjZSBhbmQgc3VtIG51bWJlcgorICAgICAgICAjIG9mIHJ1
bnMgZm9yICJQIiAoMjAwICsgMSkgdG8gZ2V0IG1lcmdlZCByZXN1bHRzLgorICAgICAgICBzZWxm
Ll90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAg
ICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwi
XSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChb
IjMiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJQXCJdIiwgIlsxLFwiMFwiXSJdXSksCisgICAgICAg
ICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiLCAiMiIsICIxIl0sIFtb
IjAwMS5odG1sIiwgIlsyMDEsXCJQXCJdIiwgIlsyMDEsXCIwXCJdIl1dKSkKKworICAgICAgICAj
IFNpbmdsZSB0ZXN0IGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIEluY3JlbWVudGFsIHJlc3Vs
dHMgaGFzIHRoZSBsYXRlc3QgYnVpbGQgYnV0IGRpZmZlcmVudCB0ZXN0IHJlc3VsdHMKKyAgICAg
ICAgIyBmb3IgdGhhdCBydW4uCisgICAgICAgICMgSW5zZXJ0IHRoZSBpbmNyZW1lbnRhbCByZXN1
bHRzIGF0IHRoZSBmaXJzdCBwbGFjZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAg
ICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1si
MDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAg
IyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIl0sIFtbIjAwMS5odG1sIiwg
IlsxLCBcIklcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVz
dWx0cworICAgICAgICAgICAgKFsiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJJ
XCJdLFsyMDAsXCJQXCJdIiwgIlsxLFwiMVwiXSxbMjAwLFwiMFwiXSJdXSkpCisKKyAgICAgICAg
IyBTaW5nbGUgdGVzdCBmb3Igc2luZ2xlIHJ1bi4KKyAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1
bHRzIGhhcyB0aGUgbGF0ZXN0IGJ1aWxkIGJ1dCBkaWZmZXJlbnQgdGVzdCByZXN1bHRzCisgICAg
ICAgICMgZm9yIHRoYXQgcnVuLgorICAgICAgICAjIFRoZSB0ZXN0ICJyZXN1bHRzIiBhbmQgInRp
bWVzIiBuZWVkIHRvIGJlIGNvbnRpbnVvdXMsIHNvIHRoZSBvbGQKKyAgICAgICAgIyBbMTAsIkki
XSByZXN1bHQgc2hvdWxkIGJlIGRyb3BwZWQgYmVjYXVzZSBhIG5ldyByZXN1bHQgb2Ygc2FtZSB0
eXBlIFsxLCJJIl0KKyAgICAgICAgIyBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiBbMjAwLCJQIl0u
CisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVz
dWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJd
LFsxMCxcIklcIl0iLCAiWzIwMCxcIjBcIl0sWzEwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAj
IEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwgW1siMDAxLmh0bWwiLCAi
WzEsXCJJXCJdIiwgIlsxLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3Vs
dHMKKyAgICAgICAgICAgIChbIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsxLFwiSVwi
XSxbMjAwLFwiUFwiXSIsICJbMSxcIjFcIl0sWzIwMCxcIjBcIl0iXV0pKQorCisgICAgICAgICMg
TXVsdGlwbGUgdGVzdHMgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgQWxsIHRlc3RzIGhhdmUg
aW5jcmVtZW50YWwgdXBkYXRlcy4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAg
ICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAx
Lmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwgWyIwMDIuaHRtbCIsICJbMTAw
LFwiSVwiXSIsICJbMTAwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJl
c3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJQXCJdIiwgIlsx
LFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsxLFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAg
ICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJd
LCBbWyIwMDEuaHRtbCIsICJbMjAxLFwiUFwiXSIsICJbMjAxLFwiMFwiXSJdLCBbIjAwMi5odG1s
IiwgIlsxMDEsXCJJXCJdIiwgIlsxMDEsXCIxXCJdIl1dKSkKKworICAgICAgICAjIE11bHRpcGxl
IHRlc3RzIGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIE5vdCBhbGwgdGVzdHMgaGF2ZSB1cGRh
dGUuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQg
cmVzdWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQ
XCJdIiwgIlsyMDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEwMCxcIklcIl0iLCAiWzEwMCxc
IjFcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAg
ICAoWyIzIl0sIFtbIjAwMi5odG1sIiwgIlsxLFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAg
ICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJd
LCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdLCBbIjAwMi5odG1s
IiwgIlsxMDEsXCJJXCJdIiwgIlsxMDEsXCIxXCJdIl1dKSkKKworICAgICAgICAjIFNpbmdsZSB0
ZXN0IGZvciBtdWx0aXBsZSBydW5zLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAg
ICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIw
MDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAgICAgICAj
IEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjQiLCAiMyJdLCBbWyIwMDEuaHRt
bCIsICJbMiwgXCJJXCJdIiwgIlsyLFwiMlwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVk
IHJlc3VsdHMKKyAgICAgICAgICAgIChbIjQiLCAiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwi
LCAiWzIsXCJJXCJdLFsyMDAsXCJQXCJdIiwgIlsyLFwiMlwiXSxbMjAwLFwiMFwiXSJdXSkpCisK
KyAgICAgICAgIyBNdWx0aXBsZSB0ZXN0cyBmb3IgbXVsdGlwbGUgcnVucy4KKyAgICAgICAgc2Vs
Zi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAg
ICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBc
Il0iXSwgWyIwMDIuaHRtbCIsICJbMTAsXCJaXCJdIiwgIlsxMCxcIjBcIl0iXV0pLAorICAgICAg
ICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyI0IiwgIjMiXSwgW1si
MDAxLmh0bWwiLCAiWzIsIFwiSVwiXSIsICJbMixcIjJcIl0iXSwgWyIwMDIuaHRtbCIsICJbMSxc
IkNcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cwor
ICAgICAgICAgICAgKFsiNCIsICIzIiwgIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMixcIklc
Il0sWzIwMCxcIlBcIl0iLCAiWzIsXCIyXCJdLFsyMDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAi
WzEsXCJDXCJdLFsxMCxcIlpcIl0iLCAiWzEsXCIxXCJdLFsxMCxcIjBcIl0iXV0pKQorCisgICAg
ICAgICMgVGVzdCBpZiBidWlsZCBpbiBpbmNyZW1lbnRhbCByZXN1bHRzIGlzIG9sZGVyIHRoYW4g
dGhlIG1vc3QgcmVjZW50CisgICAgICAgICMgYnVpbGQgaW4gYWdncmVnYXRlZCByZXN1bHRzLgor
ICAgICAgICAjIFRoZSBpbmNyZW1lbnRhbCByZXN1bHRzIHNob3VsZCBiZSBkcm9wcGVkIGFuZCBu
byBtZXJnZSBoYXBwZW5zLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAg
IyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiLCAiMSJdLCBbWyIwMDEuaHRt
bCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEluY3Jl
bWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiXSwgW1siMDAxLmh0bWwiLCAiWzEsIFwi
UFwiXSIsICJbMSxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBFeHBlY3RlZCBubyBtZXJnZSBo
YXBwZW5zLgorICAgICAgICAgICAgTm9uZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
KyAgICB1bml0dGVzdC5tYWluKCkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHNfdW5pdHRlc3QucHkKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0
UmVzdWx0U2VydmVyL21vZGVsL3Rlc3RmaWxlLnB5CShyZXZpc2lvbiA1ODc5MCkKKysrIFdlYktp
dFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZpbGUucHkJKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMg
CisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgpAQCAtMjksMTYgKzI5LDE0IEBACiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRl
dGltZQogaW1wb3J0IGxvZ2dpbmcKIAotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQg
YmxvYnN0b3JlCiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkYgogCitmcm9tIG1v
ZGVsLmRhdGFzdG9yZWZpbGUgaW1wb3J0IERhdGFTdG9yZUZpbGUKIAotY2xhc3MgVGVzdEZpbGUo
ZGIuTW9kZWwpOgorCitjbGFzcyBUZXN0RmlsZShEYXRhU3RvcmVGaWxlKToKICAgICBidWlsZGVy
ID0gZGIuU3RyaW5nUHJvcGVydHkoKQotICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCiAg
ICAgdGVzdF90eXBlID0gZGIuU3RyaW5nUHJvcGVydHkoKQotICAgIGJsb2Jfa2V5ID0gZGIuU3Ry
aW5nUHJvcGVydHkoKQotICAgIGRhdGUgPSBkYi5EYXRlVGltZVByb3BlcnR5KGF1dG9fbm93X2Fk
ZD1UcnVlKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGRlbGV0ZV9maWxlKGNscywga2V5
LCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGxpbWl0KToKQEAgLTYzLDcgKzYxLDcgQEAgY2xh
c3MgVGVzdEZpbGUoZGIuTW9kZWwpOgogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgQGNsYXNz
bWV0aG9kCi0gICAgZGVmIGdldF9maWxlcyhjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwg
bGltaXQpOgorICAgIGRlZiBnZXRfZmlsZXMoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUs
IGxvYWRfZGF0YT1UcnVlLCBsaW1pdD0xKToKICAgICAgICAgcXVlcnkgPSBUZXN0RmlsZS5hbGwo
KQogICAgICAgICBpZiBidWlsZGVyOgogICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5maWx0ZXIo
ImJ1aWxkZXIgPSIsIGJ1aWxkZXIpCkBAIC03Miw1MSArNzAsNTQgQEAgY2xhc3MgVGVzdEZpbGUo
ZGIuTW9kZWwpOgogICAgICAgICBpZiBuYW1lOgogICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5m
aWx0ZXIoIm5hbWUgPSIsIG5hbWUpCiAKLSAgICAgICAgcmV0dXJuIHF1ZXJ5Lm9yZGVyKCItZGF0
ZSIpLmZldGNoKGxpbWl0KQorICAgICAgICBmaWxlcyA9IHF1ZXJ5Lm9yZGVyKCItZGF0ZSIpLmZl
dGNoKGxpbWl0KQorICAgICAgICBpZiBsb2FkX2RhdGE6CisgICAgICAgICAgICBmb3IgZmlsZSBp
biBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxlLmxvYWRfZGF0YSgpCisKKyAgICAgICAgcmV0
dXJuIGZpbGVzCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgYWRkX2ZpbGUoY2xzLCBidWls
ZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbyk6CisgICAgZGVmIGFkZF9maWxlKGNscywgYnVpbGRl
ciwgdGVzdF90eXBlLCBuYW1lLCBkYXRhKToKICAgICAgICAgZmlsZSA9IFRlc3RGaWxlKCkKICAg
ICAgICAgZmlsZS5idWlsZGVyID0gYnVpbGRlcgogICAgICAgICBmaWxlLnRlc3RfdHlwZSA9IHRl
c3RfdHlwZQotICAgICAgICBmaWxlLm5hbWUgPSBibG9iX2luZm8uZmlsZW5hbWUKLSAgICAgICAg
ZmlsZS5ibG9iX2tleSA9IHN0cihibG9iX2luZm8ua2V5KCkpCi0gICAgICAgIGZpbGUucHV0KCkK
KyAgICAgICAgZmlsZS5uYW1lID0gbmFtZQorCisgICAgICAgIGlmIG5vdCBmaWxlLnNhdmUoZGF0
YSk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgIGxvZ2dpbmcuaW5mbygKLSAg
ICAgICAgICAgICJGaWxlIHNhdmVkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTog
JXMsIGJsb2Iga2V5OiAlcy4iLAotICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxl
Lm5hbWUsIGZpbGUuYmxvYl9rZXkpCisgICAgICAgICAgICAiRmlsZSBzYXZlZCwgYnVpbGRlcjog
JXMsIHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLCBrZXk6ICVzLiIsCisgICAgICAgICAgICBidWls
ZGVyLCB0ZXN0X3R5cGUsIGZpbGUubmFtZSwgc3RyKGZpbGUuZGF0YV9rZXlzKSkKIAogICAgICAg
ICByZXR1cm4gZmlsZQogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHVwZGF0ZV9maWxlKGNs
cywgYnVpbGRlciwgdGVzdF90eXBlLCBibG9iX2luZm8pOgotICAgICAgICBmaWxlcyA9IGNscy5n
ZXRfZmlsZXMoYnVpbGRlciwgdGVzdF90eXBlLCBibG9iX2luZm8uZmlsZW5hbWUsIDEpCisgICAg
ZGVmIHVwZGF0ZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgZGF0YSk6CisgICAgICAg
IGZpbGVzID0gY2xzLmdldF9maWxlcyhidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCiAgICAgICAg
IGlmIG5vdCBmaWxlczoKLSAgICAgICAgICAgIHJldHVybiBjbHMuYWRkX2ZpbGUoYnVpbGRlciwg
dGVzdF90eXBlLCBibG9iX2luZm8pCisgICAgICAgICAgICByZXR1cm4gY2xzLmFkZF9maWxlKGJ1
aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgZGF0YSkKIAogICAgICAgICBmaWxlID0gZmlsZXNbMF0K
LSAgICAgICAgb2xkX2Jsb2JfaW5mbyA9IGJsb2JzdG9yZS5CbG9iSW5mby5nZXQoZmlsZS5ibG9i
X2tleSkKLSAgICAgICAgaWYgb2xkX2Jsb2JfaW5mbzoKLSAgICAgICAgICAgIG9sZF9ibG9iX2lu
Zm8uZGVsZXRlKCkKLQotICAgICAgICBmaWxlLmJ1aWxkZXIgPSBidWlsZGVyCi0gICAgICAgIGZp
bGUudGVzdF90eXBlID0gdGVzdF90eXBlCi0gICAgICAgIGZpbGUubmFtZSA9IGJsb2JfaW5mby5m
aWxlbmFtZQotICAgICAgICBmaWxlLmJsb2Jfa2V5ID0gc3RyKGJsb2JfaW5mby5rZXkoKSkKLSAg
ICAgICAgZmlsZS5kYXRlID0gZGF0ZXRpbWUubm93KCkKLSAgICAgICAgZmlsZS5wdXQoKQorICAg
ICAgICBpZiBub3QgZmlsZS5zYXZlKGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAog
ICAgICAgICBsb2dnaW5nLmluZm8oCi0gICAgICAgICAgICAiRmlsZSByZXBsYWNlZCwgYnVpbGRl
cjogJXMsIHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLCBibG9iIGtleTogJXMuIiwKLSAgICAgICAg
ICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBmaWxlLmJsb2Jfa2V5KQorICAgICAg
ICAgICAgIkZpbGUgcmVwbGFjZWQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAl
cywgZGF0YSBrZXk6ICVzLiIsCisgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIGZpbGUu
bmFtZSwgc3RyKGZpbGUuZGF0YV9rZXlzKSkKIAogICAgICAgICByZXR1cm4gZmlsZQogCi0gICAg
ZGVmIF9kZWxldGVfYWxsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmJsb2Jfa2V5OgotICAgICAg
ICAgICAgYmxvYl9pbmZvID0gYmxvYnN0b3JlLkJsb2JJbmZvLmdldChzZWxmLmJsb2Jfa2V5KQot
ICAgICAgICAgICAgaWYgYmxvYl9pbmZvOgotICAgICAgICAgICAgICAgIGJsb2JfaW5mby5kZWxl
dGUoKQorICAgIGRlZiBzYXZlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3Qgc2VsZi5zYXZl
X2RhdGEoZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmRh
dGUgPSBkYXRldGltZS5ub3coKQorICAgICAgICBzZWxmLnB1dCgpCiAKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBfZGVsZXRlX2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5kZWxldGVf
ZGF0YSgpCiAgICAgICAgIHNlbGYuZGVsZXRlKCkKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvdGVtcGxhdGVzL3VwbG9hZGZvcm0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwJKHJldmlzaW9u
IDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvdXBsb2Fk
Zm9ybS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsxOCw5IEBACiAgICAgICAgIDx0ZD48
aW5wdXQgY2xhc3M9aW5wdXR0ZXh0IHR5cGU9InRleHQiIG5hbWU9InRlc3R0eXBlIiB2YWx1ZT0i
Ii8+PC90ZD4KICAgICA8L3RyPgogICAgIDwvdGFibGU+CisgICAgPGJyPgorICAgIDxkaXY+PGlu
cHV0IGNsYXNzPWJ1dHRvbiB0eXBlPSJjaGVja2JveCIgbmFtZT0iaW5jcmVtZW50YWwiPkluY3Jl
bWVudGFsIHJlc3VsdHMsIG1lcmdlIHdpdGggc2VydmVyIGZpbGUuPC9kaXY+CisgICAgPGJyPgog
ICAgIDxkaXY+PGlucHV0IGNsYXNzPWJ1dHRvbiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiBtdWx0
aXBsZT48L2Rpdj4KICAgICA8YnI+CiAgICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9
InN1Ym1pdCIgdmFsdWU9IlVwbG9hZCI+PC9kaXY+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56280</attachid>
            <date>2010-05-17 15:54:00 -0700</date>
            <delta_ts>2010-08-03 16:58:07 -0700</delta_ts>
            <desc>Updated patch per Eric&apos;s comments.</desc>
            <filename>ae_merge.patch</filename>
            <type>text/plain</type>
            <size>51354</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU4ODQwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMDUgIFZpY3RvciBXYW5nICA8dmlj
dG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLS4gQWRkIHJlc3VsdC5qc29uIGluY3JlbWVudGFsIG1lcmdpbmcgZnVuY3Rp
b25hbGl0eSB0byB0ZXN0IHJlc3VsdHMgYXBwIGVuZ2luZS4KKyAgICAgICAgLS4gYmxvYnN0b3Jl
IGlzIG5vdCBzdWl0YWJsZSBmb3IgQUUgZGF0YSBtZXJnaW5nIGFuZCB0aGVyZSBpcyBubyBBUEkg
dG8KKyAgICAgICAgICAgcHJvZ3JhbWF0aWNhbGx5IGVkaXQgZXhpc3RpbmcgYmxvYiBvciB3cml0
ZSBhIG5ldyBvbmUgeWV0LCBzbyByZXBsYWNlIGJsb2JzdG9yZQorICAgICAgICAgICB3aXRoIGRh
dGFzdG9yZS4gSWYgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRlcyksIHN0b3JlIGZp
bGUgZGF0YSBpbgorICAgICAgICAgICBtdWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAgICAg
ICAgLS4gRml4IHN0eWxlcy4KKworICAgICAgICBUZXN0OiBqc29ucmVzdWx0c191bml0dGVzdCB0
byB0ZXN0IG1lcmdpbmcgbG9naWNzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODU5OQorCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9oYW5k
bGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5OgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvaGFu
ZGxlcnMvbWVudS5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3Rm
aWxlaGFuZGxlci5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL21haW4ucHk6CisgICAg
ICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5OgorICAgICAgICAq
IFRlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weTogQWRkZWQu
CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weToKKyAgICAgICAg
KiBUZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWw6CisKIDIwMTAtMDUt
MDQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNoaW5pY2hpcm8gSGFtYWppLgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9t
YWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbWFpbi5w
eQkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21haW4u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAt
MTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwogIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNDIsMTcgKzQyLDE1IEBAIHJvdXRlcyA9
IFsKICAgICAoJy9kYXNoYm9hcmRzL3VwZGF0ZScsIGRhc2hib2FyZGhhbmRsZXIuVXBkYXRlRGFz
aGJvYXJkRmlsZSksCiAgICAgKCcvZGFzaGJvYXJkcy8oW14/XSspPycsIGRhc2hib2FyZGhhbmRs
ZXIuR2V0RGFzaGJvYXJkRmlsZSksCiAgICAgKCcvdGVzdGZpbGUvZGVsZXRlJywgdGVzdGZpbGVo
YW5kbGVyLkRlbGV0ZUZpbGUpLAotICAgICgnL3Rlc3RmaWxlL3VwbG9hZHVybCcsIHRlc3RmaWxl
aGFuZGxlci5HZXRVcGxvYWRVcmwpLAogICAgICgnL3Rlc3RmaWxlL3VwbG9hZCcsIHRlc3RmaWxl
aGFuZGxlci5VcGxvYWQpLAogICAgICgnL3Rlc3RmaWxlL3VwbG9hZGZvcm0nLCB0ZXN0ZmlsZWhh
bmRsZXIuVXBsb2FkRm9ybSksCiAgICAgKCcvdGVzdGZpbGUvPycsIHRlc3RmaWxlaGFuZGxlci5H
ZXRGaWxlKSwKLSAgICAoJy91cGxvYWRmYWlsJywgdGVzdGZpbGVoYW5kbGVyLlVwbG9hZFN0YXR1
cyksCi0gICAgKCcvdXBsb2Fkc3VjY2VzcycsIHRlc3RmaWxlaGFuZGxlci5VcGxvYWRTdGF0dXMp
LAogICAgICgnLyp8L21lbnUnLCBtZW51Lk1lbnUpLAogXQogCiBhcHBsaWNhdGlvbiA9IHdlYmFw
cC5XU0dJQXBwbGljYXRpb24ocm91dGVzLCBkZWJ1Zz1UcnVlKQogCisKIGRlZiBtYWluKCk6CiAg
ICAgcnVuX3dzZ2lfYXBwKGFwcGxpY2F0aW9uKQogCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL2hhbmRsZXJzL2Rhc2hib2FyZGhhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5CShy
ZXZpc2lvbiA1ODc5MCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMv
ZGFzaGJvYXJkaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMg
CisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zOCw2ICsz
OCw3IEBAIGZyb20gbW9kZWwuZGFzaGJvYXJkZmlsZSBpbXBvcnQgRGFzaGJvYXIKIAogUEFSQU1f
RklMRSA9ICJmaWxlIgogCisKIGRlZiBnZXRfY29udGVudF90eXBlKGZpbGVuYW1lKToKICAgICBy
ZXR1cm4gbWltZXR5cGVzLmd1ZXNzX3R5cGUoZmlsZW5hbWUpWzBdIG9yICJhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0iCiAKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxl
cnMvbWVudS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hh
bmRsZXJzL21lbnUucHkJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9oYW5kbGVycy9tZW51LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAog
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAogIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQog
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotIyAKKyMKICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYx
LDQgKzYxLDMgQEAgY2xhc3MgTWVudSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgogCiAgICAgICAg
IHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKAogICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKCJ0
ZW1wbGF0ZXMvbWVudS5odG1sIiwgdGVtcGxhdGVfdmFsdWVzKSkKLQpJbmRleDogV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0ZmlsZWhhbmRs
ZXIucHkJKHJldmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9o
YW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBA
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAt
MzAsMTEgKzMwLDEwIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdXJsbGliCiAKIGZyb20gZ29v
Z2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0IHVzZXJzCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0
IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IHdlYmFw
cAotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAgaW1wb3J0IGJsb2JzdG9yZV9oYW5k
bGVycwogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAgaW1wb3J0IHRlbXBsYXRlCiAK
K2Zyb20gbW9kZWwuanNvbnJlc3VsdHMgaW1wb3J0IEpzb25SZXN1bHRzCiBmcm9tIG1vZGVsLnRl
c3RmaWxlIGltcG9ydCBUZXN0RmlsZQogCiBQQVJBTV9CVUlMREVSID0gImJ1aWxkZXIiCkBAIC00
MywxMCArNDIsMTEgQEAgUEFSQU1fRklMRSA9ICJmaWxlIgogUEFSQU1fTkFNRSA9ICJuYW1lIgog
UEFSQU1fS0VZID0gImtleSIKIFBBUkFNX1RFU1RfVFlQRSA9ICJ0ZXN0dHlwZSIKK1BBUkFNX0lO
Q1JFTUVOVEFMID0gImluY3JlbWVudGFsIgogCiAKIGNsYXNzIERlbGV0ZUZpbGUod2ViYXBwLlJl
cXVlc3RIYW5kbGVyKToKLSAgICAiIiJEZWxldGUgdGVzdCBmaWxlIGZvciBhIGdpdmVuIGJ1aWxk
ZXIgYW5kIG5hbWUgZnJvbSBkYXRhc3RvcmUgKG1ldGFkYXRhKSBhbmQgYmxvYnN0b3JlIChmaWxl
IGRhdGEpLiIiIgorICAgICIiIkRlbGV0ZSB0ZXN0IGZpbGUgZm9yIGEgZ2l2ZW4gYnVpbGRlciBh
bmQgbmFtZSBmcm9tIGRhdGFzdG9yZS4iIiIKIAogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAg
IGtleSA9IHNlbGYucmVxdWVzdC5nZXQoUEFSQU1fS0VZKQpAQCAtNTUsNyArNTUsNyBAQCBjbGFz
cyBEZWxldGVGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgIG5hbWUgPSBzZWxm
LnJlcXVlc3QuZ2V0KFBBUkFNX05BTUUpCiAKICAgICAgICAgbG9nZ2luZy5kZWJ1ZygKLSAgICAg
ICAgICAgICJEZWxldGluZyBGaWxlLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTog
JXMsIGJsb2Iga2V5OiAlcy4iLAorICAgICAgICAgICAgIkRlbGV0aW5nIEZpbGUsIGJ1aWxkZXI6
ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywga2V5OiAlcy4iLAogICAgICAgICAgICAgYnVp
bGRlciwgdGVzdF90eXBlLCBuYW1lLCBrZXkpCiAKICAgICAgICAgVGVzdEZpbGUuZGVsZXRlX2Zp
bGUoa2V5LCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIDEwMCkKQEAgLTY1LDcgKzY1LDcgQEAg
Y2xhc3MgRGVsZXRlRmlsZSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgogICAgICAgICAgICAgJSAo
YnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKSkKIAogCi1jbGFzcyBHZXRGaWxlKGJsb2JzdG9yZV9o
YW5kbGVycy5CbG9ic3RvcmVEb3dubG9hZEhhbmRsZXIpOgorY2xhc3MgR2V0RmlsZSh3ZWJhcHAu
UmVxdWVzdEhhbmRsZXIpOgogICAgICIiIkdldCBmaWxlIGNvbnRlbnQgb3IgbGlzdCBvZiBmaWxl
cyBmb3IgZ2l2ZW4gYnVpbGRlciBhbmQgbmFtZS4iIiIKIAogICAgIGRlZiBfZ2V0X2ZpbGVfbGlz
dChzZWxmLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpOgpAQCAtNzcsNyArNzcsOCBAQCBjbGFz
cyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvCiAgICAgICAgICAgICBuYW1lOiBm
aWxlIG5hbWUKICAgICAgICAgIiIiCiAKLSAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmls
ZXMoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCAxMDApCisgICAgICAgIGZpbGVzID0gVGVzdEZp
bGUuZ2V0X2ZpbGVzKAorICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBsb2Fk
X2RhdGE9RmFsc2UsIGxpbWl0PTEwMCkKICAgICAgICAgaWYgbm90IGZpbGVzOgogICAgICAgICAg
ICAgbG9nZ2luZy5pbmZvKCJGaWxlIG5vdCBmb3VuZCwgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTog
JXMsIG5hbWU6ICVzLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90
eXBlLCBuYW1lKQpAQCAtMTAzLDE2ICsxMDQsMTUgQEAgY2xhc3MgR2V0RmlsZShibG9ic3RvcmVf
aGFuZGxlcnMuQmxvYnN0bwogICAgICAgICAgICAgbmFtZTogZmlsZSBuYW1lCiAgICAgICAgICIi
IgogCi0gICAgICAgIGZpbGVzID0gVGVzdEZpbGUuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3RfdHlw
ZSwgbmFtZSwgMSkKKyAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoCisgICAgICAg
ICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGxvYWRfZGF0YT1UcnVlLCBsaW1pdD0xKQog
ICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIkZpbGUgbm90
IGZvdW5kLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMuIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCiAgICAgICAgICAgICBy
ZXR1cm4KIAotICAgICAgICBibG9iX2tleSA9IGZpbGVzWzBdLmJsb2Jfa2V5Ci0gICAgICAgIGJs
b2JfaW5mbyA9IGJsb2JzdG9yZS5nZXQoYmxvYl9rZXkpCi0gICAgICAgIGlmIGJsb2JfaW5mbzoK
LSAgICAgICAgICAgIHNlbGYuc2VuZF9ibG9iKGJsb2JfaW5mbywgInRleHQvcGxhaW4iKQorICAg
ICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID0gInRleHQvcGxhaW47
IGNoYXJzZXQ9dXRmLTgiCisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKGZpbGVzWzBd
LmRhdGEpCiAKICAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgICBidWlsZGVyID0gc2VsZi5yZXF1
ZXN0LmdldChQQVJBTV9CVUlMREVSKQpAQCAtMTMzLDg5ICsxMzMsNzQgQEAgY2xhc3MgR2V0Rmls
ZShibG9ic3RvcmVfaGFuZGxlcnMuQmxvYnN0bwogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dl
dF9maWxlX2NvbnRlbnQoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKQogCiAKLWNsYXNzIEdldFVw
bG9hZFVybCh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIkdldCBhbiB1cmwgZm9yIHVw
bG9hZGluZyBmaWxlIHRvIGJsb2JzdG9yZS4gQSBzcGVjaWFsIHVybCBpcyByZXF1aXJlZCBmb3Ig
ZWFjaCBibG9ic290cmUgdXBsb2FkLiIiIgotCi0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAg
dXBsb2FkX3VybCA9IGJsb2JzdG9yZS5jcmVhdGVfdXBsb2FkX3VybCgiL3Rlc3RmaWxlL3VwbG9h
ZCIpCi0gICAgICAgIGxvZ2dpbmcuaW5mbygiR2V0dGluZyB1cGxvYWQgdXJsOiAlcy4iLCB1cGxv
YWRfdXJsKQotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSh1cGxvYWRfdXJsKQotCi0K
LWNsYXNzIFVwbG9hZChibG9ic3RvcmVfaGFuZGxlcnMuQmxvYnN0b3JlVXBsb2FkSGFuZGxlcik6
Ci0gICAgIiIiVXBsb2FkIGZpbGUgdG8gYmxvYnN0b3JlLiIiIgorY2xhc3MgVXBsb2FkKHdlYmFw
cC5SZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiVXBsb2FkIHRlc3QgcmVzdWx0cyBmaWxlIHRvIGRh
dGFzdG9yZS4iIiIKIAogICAgIGRlZiBwb3N0KHNlbGYpOgotICAgICAgICB1cGxvYWRlZF9maWxl
cyA9IHNlbGYuZ2V0X3VwbG9hZHMoImZpbGUiKQotICAgICAgICBpZiBub3QgdXBsb2FkZWRfZmls
ZXM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBsb2FkX2RvbmUoWygiTWlzc2luZyB1cGxv
YWQgZmlsZSBmaWVsZC4iKV0pCisgICAgICAgIGZpbGVfcGFyYW1zID0gc2VsZi5yZXF1ZXN0LlBP
U1QuZ2V0YWxsKFBBUkFNX0ZJTEUpCisgICAgICAgIGlmIG5vdCBmaWxlX3BhcmFtczoKKyAgICAg
ICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMOiBtaXNzaW5nIHVwbG9hZCBmaWxl
IGZpZWxkLiIpCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBidWlsZGVyID0gc2VsZi5y
ZXF1ZXN0LmdldChQQVJBTV9CVUlMREVSKQogICAgICAgICBpZiBub3QgYnVpbGRlcjoKLSAgICAg
ICAgICAgIGZvciBibG9iX2luZm8gaW4gdXBsb2FkZWRfZmlsZXM6Ci0gICAgICAgICAgICAgICAg
YmxvYl9pbmZvLmRlbGV0ZSgpCi0gICAgCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBsb2Fk
X2RvbmUoWygiTWlzc2luZyBidWlsZGVyIHBhcmFtZXRlciBpbiB1cGxvYWQgcmVxdWVzdC4iKV0p
CisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiRkFJTDogbWlzc2luZyBidWls
ZGVyIHBhcmFtZXRlci4iKQorICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgdGVzdF90eXBl
ID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9URVNUX1RZUEUpCisgICAgICAgIGluY3JlbWVudGFs
ID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9JTkNSRU1FTlRBTCkKIAogICAgICAgICBsb2dnaW5n
LmRlYnVnKAogICAgICAgICAgICAgIlByb2Nlc3NpbmcgdXBsb2FkIHJlcXVlc3QsIGJ1aWxkZXI6
ICVzLCB0ZXN0X3R5cGU6ICVzLiIsCiAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUpCiAK
KyAgICAgICAgIyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHR5cGVzIG9mIGVhY2ggZmlsZV9wYXJh
bXMgaW4gdGhlIHJlcXVlc3Q6CisgICAgICAgICMgb25lIGZpbGUgaXRlbSBvciBhIGxpc3Qgb2Yg
ZmlsZSBpdGVtcy4KKyAgICAgICAgIyBOb3JtYWxpemUgZmlsZV9wYXJhbXMgdG8gYSBmaWxlIGl0
ZW0gbGlzdC4KKyAgICAgICAgZmlsZXMgPSBbXQorICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0ZXN0
OiAlcywgdHlwZTolcyIsIGZpbGVfcGFyYW1zLCB0eXBlKGZpbGVfcGFyYW1zKSkKKyAgICAgICAg
Zm9yIGl0ZW0gaW4gZmlsZV9wYXJhbXM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShp
dGVtLCBsaXN0KSBhbmQgbm90IGlzaW5zdGFuY2UoaXRlbSwgdHVwbGUpOgorICAgICAgICAgICAg
ICAgIGl0ZW0gPSBbaXRlbV0KKyAgICAgICAgICAgIGZpbGVzLmV4dGVuZChpdGVtKQorCiAgICAg
ICAgIGVycm9ycyA9IFtdCi0gICAgICAgIGZvciBibG9iX2luZm8gaW4gdXBsb2FkZWRfZmlsZXM6
Ci0gICAgICAgICAgICB0ZiA9IFRlc3RGaWxlLnVwZGF0ZV9maWxlKGJ1aWxkZXIsIHRlc3RfdHlw
ZSwgYmxvYl9pbmZvKQotICAgICAgICAgICAgaWYgbm90IHRmOgorICAgICAgICBmb3IgZmlsZSBp
biBmaWxlczoKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgdXBkYXRlIG9yIHJlcGxhY2UgdGhl
IHdob2xlIGZpbGUuCisgICAgICAgICAgICBpZiBpbmNyZW1lbnRhbDoKKyAgICAgICAgICAgICAg
ICBpZiBmaWxlLmZpbGVuYW1lLmxvd2VyKCkgIT0gInJlc3VsdHMuanNvbiI6CisgICAgICAgICAg
ICAgICAgICAgIGVycm9ycy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAiTWVyZ2lu
ZyBpbmNyZW1lbnRhbCByZXN1bHRzICVzIGlzIG5vdCBzdXBwb3J0ZWQuIiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICBmaWxlLmZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZQorCisgICAgICAgICAgICAgICAgc2F2ZWRfZmlsZSA9IEpzb25SZXN1bHRzLnVwZGF0ZSgKKyAg
ICAgICAgICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlLnZhbHVlKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzYXZlZF9maWxlID0gVGVzdEZpbGUudXBkYXRl
KAorICAgICAgICAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIGZpbGUuZmlsZW5hbWUs
IGZpbGUudmFsdWUpCisKKyAgICAgICAgICAgIGlmIG5vdCBzYXZlZF9maWxlOgogICAgICAgICAg
ICAgICAgIGVycm9ycy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICJVcGxvYWQgZmFpbGVk
LCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMuIiAlCi0gICAgICAgICAgICAg
ICAgICAgIChidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mby5maWxlbmFtZSkpCi0gICAgICAg
ICAgICAgICAgYmxvYl9pbmZvLmRlbGV0ZSgpCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX3VwbG9h
ZF9kb25lKGVycm9ycykKLQotICAgIGRlZiBfdXBsb2FkX2RvbmUoc2VsZiwgZXJyb3JzKToKLSAg
ICAgICAgbG9nZ2luZy5pbmZvKCJ1cGxvYWQgZG9uZS4iKQotCi0gICAgICAgIGVycm9yX21lc3Nh
Z2VzID0gW10KLSAgICAgICAgZm9yIGVycm9yIGluIGVycm9yczoKLSAgICAgICAgICAgIGxvZ2dp
bmcuaW5mbyhlcnJvcikKLSAgICAgICAgICAgIGVycm9yX21lc3NhZ2VzLmFwcGVuZCgiZXJyb3I9
JXMiICUgdXJsbGliLnF1b3RlKGVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgKGJ1aWxkZXIs
IHRlc3RfdHlwZSwgZmlsZS5maWxlbmFtZSkpCiAKLSAgICAgICAgaWYgZXJyb3JfbWVzc2FnZXM6
Ci0gICAgICAgICAgICByZWRpcmVjdF91cmwgPSAiL3VwbG9hZGZhaWw/JXMiICUgIiYiLmpvaW4o
ZXJyb3JfbWVzc2FnZXMpCisgICAgICAgIGlmIGVycm9yczoKKyAgICAgICAgICAgIG1lc3NhZ2Vz
ID0gIkZBSUw6ICIgKyAiOyAiLmpvaW4oZXJyb3JzKQorICAgICAgICAgICAgbG9nZ2luZy53YXJu
aW5nKG1lc3NhZ2VzKQorICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDUwMCwg
bWVzc2FnZXMpCisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiRkFJTCIpCiAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWRpcmVjdF91cmwgPSAiL3VwbG9hZHN1Y2Nlc3Mi
Ci0KLSAgICAgICAgbG9nZ2luZy5pbmZvKHJlZGlyZWN0X3VybCkKLSAgICAgICAgIyBCbG9ic3Rv
cmVVcGxvYWRIYW5kbGVyIHJlcXVpcmVzIHJlZGlyZWN0IGF0IHRoZSBlbmQuCi0gICAgICAgIHNl
bGYucmVkaXJlY3QocmVkaXJlY3RfdXJsKQorICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRf
c3RhdHVzKDIwMCkKKyAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJPSyIpCiAK
IAogY2xhc3MgVXBsb2FkRm9ybSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIlNob3cg
YSBmb3JtIHNvIHVzZXIgY2FuIHN1Ym1pdCBhIGZpbGUgdG8gYmxvYnN0b3JlLiIiIgorICAgICIi
IlNob3cgYSBmb3JtIHNvIHVzZXIgY2FuIHVwbG9hZCBhIGZpbGUuIiIiCiAKICAgICBkZWYgZ2V0
KHNlbGYpOgotICAgICAgICB1cGxvYWRfdXJsID0gYmxvYnN0b3JlLmNyZWF0ZV91cGxvYWRfdXJs
KCIvdGVzdGZpbGUvdXBsb2FkIikKICAgICAgICAgdGVtcGxhdGVfdmFsdWVzID0gewotICAgICAg
ICAgICAgInVwbG9hZF91cmwiOiB1cGxvYWRfdXJsLAorICAgICAgICAgICAgInVwbG9hZF91cmwi
OiAiL3Rlc3RmaWxlL3VwbG9hZCIsCiAgICAgICAgIH0KICAgICAgICAgc2VsZi5yZXNwb25zZS5v
dXQud3JpdGUodGVtcGxhdGUucmVuZGVyKCJ0ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sIiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX3Zh
bHVlcykpCi0KLWNsYXNzIFVwbG9hZFN0YXR1cyh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAg
ICIiIlJldHVybiBzdGF0dXMgb2YgZmlsZSB1cGxvYWRpbmciIiIKLQotICAgIGRlZiBnZXQoc2Vs
Zik6Ci0gICAgICAgIGxvZ2dpbmcuZGVidWcoIlVwZGF0ZSBzdGF0dXMiKQotCi0gICAgICAgIGlm
IHNlbGYucmVxdWVzdC5wYXRoID09ICIvdXBsb2Fkc3VjY2VzcyI6Ci0gICAgICAgICAgICBzZWxm
LnJlc3BvbnNlLnNldF9zdGF0dXMoMjAwKQotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQu
d3JpdGUoIk9LIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVycm9ycyA9IHNlbGYucmVx
dWVzdC5wYXJhbXMuZ2V0YWxsKCJlcnJvciIpCi0gICAgICAgICAgICBpZiBlcnJvcnM6Ci0gICAg
ICAgICAgICAgICAgbWVzc2FnZXMgPSAiRkFJTDogIiArICI7ICIuam9pbihlcnJvcnMpCi0gICAg
ICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKG1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIHNl
bGYucmVzcG9uc2Uuc2V0X3N0YXR1cyg1MDAsIG1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIHNl
bGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMIikKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvbW9kZWwvZGFzaGJvYXJkZmlsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2Rhc2hib2FyZGZpbGUucHkJKHJldmlzaW9uIDU4Nzkw
KQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEz
LDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKKyMKICMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwog
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTM2LDYgKzM2LDcgQEAgZnJvbSBnb29nbGUu
YXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKIFNWTl9QQVRIX0RBU0hCT0FSRCA9ICgiaHR0cDovL3Ny
Yy5jaHJvbWl1bS5vcmcvdmlld3ZjL2Nocm9tZS90cnVuay90b29scy8iCiAgICAgImRhc2hib2Fy
ZHMvIikKIAorCiBjbGFzcyBEYXNoYm9hcmRGaWxlKGRiLk1vZGVsKToKICAgICBuYW1lID0gZGIu
U3RyaW5nUHJvcGVydHkoKQogICAgIGRhdGEgPSBkYi5CbG9iUHJvcGVydHkoKQpAQCAtOTIsNyAr
OTMsNyBAQCBjbGFzcyBEYXNoYm9hcmRGaWxlKGRiLk1vZGVsKToKICAgICAgICAgaWYgbm90IGZp
bGVzOgogICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJObyBleGlzdGluZyBmaWxlLCBhZGRlZCBh
cyBuZXcgZmlsZS4iKQogICAgICAgICAgICAgcmV0dXJuIGNscy5hZGRfZmlsZShuYW1lLCBkYXRh
KQotICAgICAgICAKKwogICAgICAgICBsb2dnaW5nLmRlYnVnKCJVcGRhdGluZyBleGlzdGluZyBm
aWxlLiIpCiAgICAgICAgIGZpbGUgPSBmaWxlc1swXQogICAgICAgICBmaWxlLmRhdGEgPSBkYXRh
CkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRh
c3RvcmVmaWxlLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9tb2RlbC9kYXRhc3RvcmVmaWxlLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOSBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQg
bG9nZ2luZworCitmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkYgorCitNQVhfREFU
QV9FTlRSWV9QRVJfRklMRSA9IDEwCitNQVhfRU5UUllfTEVOID0gMTAwMCAqIDEwMDAKKworCitj
bGFzcyBEYXRhRW50cnkoZGIuTW9kZWwpOgorICAgICIiIkRhdGFzdG9yZSBlbnRyeSB0aGF0IHN0
b3JlcyBvbmUgc2VnbWFudCBvZiBmaWxlIGRhdGEKKyAgICAgICAoPDEwMDAqMTAwMCBieXRlcyku
CisgICAgIiIiCisKKyAgICBkYXRhID0gZGIuQmxvYlByb3BlcnR5KCkKKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBnZXQoY2xzLCBrZXkpOgorICAgICAgICByZXR1cm4gZGIuZ2V0KGtleSkK
KworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gZGIuZ2V0KGtl
eSkKKworCitjbGFzcyBEYXRhU3RvcmVGaWxlKGRiLk1vZGVsKToKKyAgICAiIiJUaGlzIGNsYXNz
IHN0b3JlcyBmaWxlIGluIGRhdGFzdG9yZS4KKyAgICAgICBJZiBhIGZpbGUgaXMgb3ZlcnNpemUg
KD4xMDAwKjEwMDAgYnl0ZXMpLCB0aGUgZmlsZSBpcyBzcGxpdCBpbnRvCisgICAgICAgbXVsdGlw
bGUgc2VnbWVudHMgYW5kIHN0b3JlZCBpbiBtdWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAg
ICAiIiIKKworICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCisgICAgZGF0YV9rZXlzID0g
ZGIuTGlzdFByb3BlcnR5KGRiLktleSkKKyAgICBkYXRlID0gZGIuRGF0ZVRpbWVQcm9wZXJ0eShh
dXRvX25vd19hZGQ9VHJ1ZSkKKworICAgIGRhdGEgPSBOb25lCisKKyAgICBkZWYgZGVsZXRlX2Rh
dGEoc2VsZiwga2V5cz1Ob25lKToKKyAgICAgICAgaWYgbm90IGtleXM6CisgICAgICAgICAgICBr
ZXlzID0gc2VsZi5kYXRhX2tleXMKKworICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAg
ICAgICBkYXRhX2VudHJ5ID0gRGF0YUVudHJ5LmdldChrZXkpCisgICAgICAgICAgICBpZiBkYXRh
X2VudHJ5OgorICAgICAgICAgICAgICAgIGRhdGFfZW50cnkuZGVsZXRlKCkKKworICAgIGRlZiBz
YXZlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAg
bG9nZ2luZy53YXJuaW5nKCJObyBkYXRhIHRvIHNhdmUuIikKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgICAgIGlmIGxlbihkYXRhKSA+IChNQVhfREFUQV9FTlRSWV9QRVJfRklMRSAq
IE1BWF9FTlRSWV9MRU4pOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiRmlsZSB0b28gYmln
LCBjYW4ndCBzYXZlIHRvIGRhdGFzdG9yZTogJWRLIiwKKyAgICAgICAgICAgICAgICBsZW4oZGF0
YSkgLyAxMDI0KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc3RhcnQgPSAw
CisgICAgICAgIGtleXMgPSBzZWxmLmRhdGFfa2V5cworICAgICAgICBzZWxmLmRhdGFfa2V5cyA9
IFtdCisgICAgICAgIHdoaWxlIHN0YXJ0IDwgbGVuKGRhdGEpOgorICAgICAgICAgICAgaWYga2V5
czoKKyAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLnBvcCgwKQorICAgICAgICAgICAgICAgIGRh
dGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtleSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0
YV9lbnRyeToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJGb3VuZCBrZXks
IGJ1dCBubyBkYXRhIGVudHJ5OiAlcyIsIGtleSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YV9l
bnRyeSA9IERhdGFFbnRyeSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRh
dGFfZW50cnkgPSBEYXRhRW50cnkoKQorCisgICAgICAgICAgICBkYXRhX2VudHJ5LmRhdGEgPSBk
Yi5CbG9iKGRhdGFbc3RhcnQ6IHN0YXJ0ICsgTUFYX0VOVFJZX0xFTl0pCisgICAgICAgICAgICBk
YXRhX2VudHJ5LnB1dCgpCisKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiRGF0YSBzYXZlZDog
JXMuIiwgZGF0YV9lbnRyeS5rZXkoKSkKKyAgICAgICAgICAgIHNlbGYuZGF0YV9rZXlzLmFwcGVu
ZChkYXRhX2VudHJ5LmtleSgpKQorCisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0ICsgTUFYX0VO
VFJZX0xFTgorCisgICAgICAgIGlmIGtleXM6CisgICAgICAgICAgICBzZWxmLmRlbGV0ZV9kYXRh
KGtleXMpCisKKyAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorCisgICAgICAgIHJldHVybiBUcnVl
CisKKyAgICBkZWYgbG9hZF9kYXRhKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5kYXRhX2tl
eXM6CisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIk5vIGRhdGEgdG8gbG9hZC4iKQorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBkYXRhID0gW10KKyAgICAgICAgZm9yIGtl
eSBpbiBzZWxmLmRhdGFfa2V5czoKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBk
YXRhIGZvciBrZXk6ICVzLiIsIGtleSkKKyAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50
cnkuZ2V0KGtleSkKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhX2VudHJ5OgorICAgICAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoIk5vIGRhdGEgZm91bmQgZm9yIGtleTogJXMuIiwga2V5KQorICAg
ICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGRhdGFf
ZW50cnkuZGF0YSkKKworICAgICAgICBzZWxmLmRhdGEgPSAiIi5qb2luKGRhdGEpCisKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZGF0YQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3RvcmVmaWxlLnB5Cl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
bW9kZWwvanNvbnJlc3VsdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHMucHkJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzYxIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCBzaW1wbGVqc29uCitpbXBvcnQgbG9nZ2lu
ZworCitmcm9tIG1vZGVsLnRlc3RmaWxlIGltcG9ydCBUZXN0RmlsZQorCitKU09OX1JFU1VMVFNf
RklMRSA9ICJyZXN1bHRzLmpzb24iCitKU09OX1JFU1VMVFNfUFJFRklYID0gIkFERF9SRVNVTFRT
KCIKK0pTT05fUkVTVUxUU19TVUZGSVggPSAiKTsiCitKU09OX1JFU1VMVFNfVkVSU0lPTl9LRVkg
PSAidmVyc2lvbiIKK0pTT05fUkVTVUxUU19CVUlMRF9OVU1CRVJTID0gImJ1aWxkTnVtYmVycyIK
K0pTT05fUkVTVUxUU19URVNUUyA9ICJ0ZXN0cyIKK0pTT05fUkVTVUxUU19SRVNVTFRTID0gInJl
c3VsdHMiCitKU09OX1JFU1VMVFNfVElNRVMgPSAidGltZXMiCitKU09OX1JFU1VMVFNfVkVSU0lP
TiA9IDMKK0pTT05fUkVTVUxUU19NQVhfQlVJTERTID0gNzUwCisKKworY2xhc3MgSnNvblJlc3Vs
dHMob2JqZWN0KToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3N0cmlwX3ByZWZpeF9zdWZm
aXgoY2xzLCBkYXRhKToKKyAgICAgICAgIiIiU3RyaXAgb3V0IHByZWZpeCBhbmQgc3VmZml4IG9m
IGpzb24gcmVzdWx0cyBzdHJpbmcuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGE6
IGpzb24gZmlsZSBjb250ZW50LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBqc29u
IHN0cmluZyB3aXRob3V0IHByZWZpeCBhbmQgc3VmZml4LgorICAgICAgICAiIiIKKworICAgICAg
ICBhc3NlcnQoZGF0YS5zdGFydHN3aXRoKEpTT05fUkVTVUxUU19QUkVGSVgpKQorICAgICAgICBh
c3NlcnQoZGF0YS5lbmRzd2l0aChKU09OX1JFU1VMVFNfU1VGRklYKSkKKworICAgICAgICByZXR1
cm4gZGF0YVtsZW4oSlNPTl9SRVNVTFRTX1BSRUZJWCk6CisgICAgICAgICAgICAgICAgICAgIGxl
bihkYXRhKSAtIGxlbihKU09OX1JFU1VMVFNfU1VGRklYKV0KKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBfZ2VuZXJhdGVfZmlsZV9kYXRhKGNscywganNvbiwgc29ydF9rZXlzPUZhbHNlKToK
KyAgICAgICAgIiIiR2l2ZW4ganNvbiBzdHJpbmcsIGdlbmVyYXRlIGZpbGUgY29udGVudCBkYXRh
IGJ5IGFkZGluZworICAgICAgICAgICBwcmVmaXggYW5kIHN1ZmZpeC4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgICAganNvbjoganNvbiBzdHJpbmcgd2l0aG91dCBwcmVmaXggYW5kIHN1ZmZp
eC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAganNvbiBmaWxlIGRhdGEuCisgICAg
ICAgICIiIgorCisgICAgICAgIGRhdGEgPSBzaW1wbGVqc29uLmR1bXBzKGpzb24sIHNlcGFyYXRv
cnM9KCcsJywgJzonKSwKKyAgICAgICAgICAgIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAg
IHJldHVybiBKU09OX1JFU1VMVFNfUFJFRklYICsgZGF0YSArIEpTT05fUkVTVUxUU19TVUZGSVgK
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbG9hZF9qc29uKGNscywgZmlsZV9kYXRhKToK
KyAgICAgICAgIiIiTG9hZCBqc29uIGZpbGUgdG8gYSBweXRob24gb2JqZWN0LgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgICBmaWxlX2RhdGE6IGpzb24gZmlsZSBjb250ZW50LgorCisgICAg
ICAgIFJldHVybnM6CisgICAgICAgICAgICBqc29uIG9iamVjdCBvcgorICAgICAgICAgICAgTm9u
ZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIKKworICAgICAgICBqc29uX3Jlc3VsdHNfc3RyID0g
Y2xzLl9zdHJpcF9wcmVmaXhfc3VmZml4KGZpbGVfZGF0YSkKKyAgICAgICAgaWYgbm90IGpzb25f
cmVzdWx0c19zdHI6CisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIk5vIGpzb24gcmVzdWx0
cyBkYXRhLiIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHJldHVybiBzaW1wbGVqc29uLmxvYWRzKGpzb25fcmVzdWx0c19zdHIpCisgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoanNvbl9y
ZXN1bHRzX3N0cikKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGpz
b24gcmVzdWx0czogJXMiLCBzdHIoZXJyKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX21lcmdlX2pzb24oY2xzLCBhZ2dyZWdhdGVkX2pzb24s
IGluY3JlbWVudGFsX2pzb24pOgorICAgICAgICAiIiJNZXJnZSBpbmNyZW1lbnRhbCBqc29uIGlu
dG8gYWdncmVnYXRlZCBqc29uIHJlc3VsdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg
IGFnZ3JlZ2F0ZWRfanNvbjogYWdncmVnYXRlZCBqc29uIG9iamVjdC4KKyAgICAgICAgICAgIGlu
Y3JlbWVudGFsX2pzb246IGluY3JlbWVudGFsIGpzb24gb2JqZWN0LgorCisgICAgICAgIFJldHVy
bnM6CisgICAgICAgICAgICBUcnVlIGlmIG1lcmdlIHN1Y2NlZWRzIG9yCisgICAgICAgICAgICBG
YWxzZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIKKworICAgICAgICAjIE1lcmdlIG5vbiB0ZXN0
cyBwcm9wZXJ0eSBkYXRhLgorICAgICAgICAjIFRlc3RzIHByb3BlcnRpZXMgYXJlIG1lcmdlZCBp
biBfbWVyZ190ZXN0cy4KKyAgICAgICAgaWYgbm90IGNscy5fbWVyZ2Vfbm9uX3Rlc3RfZGF0YShh
Z2dyZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24pOgorICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisKKyAgICAgICAgIyBNZXJnZSB0ZXN0cyByZXN1bHRzIGFuZCB0aW1lcworICAgICAgICBp
bmNyZW1lbnRhbF90ZXN0cyA9IGluY3JlbWVudGFsX2pzb25bSlNPTl9SRVNVTFRTX1RFU1RTXQor
ICAgICAgICBpZiBpbmNyZW1lbnRhbF90ZXN0czoKKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfdGVz
dHMgPSBhZ2dyZWdhdGVkX2pzb25bSlNPTl9SRVNVTFRTX1RFU1RTXQorICAgICAgICAgICAgY2xz
Ll9tZXJnZV90ZXN0cyhhZ2dyZWdhdGVkX3Rlc3RzLCBpbmNyZW1lbnRhbF90ZXN0cykKKworICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9tZXJnZV9ub25f
dGVzdF9kYXRhKGNscywgYWdncmVnYXRlZF9qc29uLCBpbmNyZW1lbnRhbF9qc29uKToKKyAgICAg
ICAgIiIiTWVyZ2UgaW5jcmVtZW50YWwgbm9uIHRlc3RzIHByb3BlcnR5IGRhdGEgaW50byBhZ2dy
ZWdhdGVkIGpzb24gcmVzdWx0cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYWdncmVn
YXRlZF9qc29uOiBhZ2dyZWdhdGVkIGpzb24gb2JqZWN0LgorICAgICAgICAgICAgaW5jcmVtZW50
YWxfanNvbjogaW5jcmVtZW50YWwganNvbiBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuczoKKyAg
ICAgICAgICAgIFRydWUgaWYgbWVyZ2Ugc3VjY2VlZHMgb3IKKyAgICAgICAgICAgIEZhbHNlIG9u
IGZhaWx1cmUuCisgICAgICAgICIiIgorCisgICAgICAgIGluY3JlbWVudGFsX2J1aWxkcyA9IGlu
Y3JlbWVudGFsX2pzb25bSlNPTl9SRVNVTFRTX0JVSUxEX05VTUJFUlNdCisgICAgICAgIGFnZ3Jl
Z2F0ZWRfYnVpbGRzID0gYWdncmVnYXRlZF9qc29uW0pTT05fUkVTVUxUU19CVUlMRF9OVU1CRVJT
XQorICAgICAgICBhZ2dyZWdhdGVkX2J1aWxkX251bWJlciA9IGludChhZ2dyZWdhdGVkX2J1aWxk
c1swXSkKKyAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIGluY3JlbWVudGFsIGJ1aWxkcywgc3Rh
cnQgZnJvbSB0aGUgb2xkZXN0IHJ1bi4KKyAgICAgICAgZm9yIGluZGV4IGluIHJldmVyc2VkKHJh
bmdlKGxlbihpbmNyZW1lbnRhbF9idWlsZHMpKSk6CisgICAgICAgICAgICBidWlsZF9udW1iZXIg
PSBpbnQoaW5jcmVtZW50YWxfYnVpbGRzW2luZGV4XSkKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVi
dWcoIk1lcmdpbmcgYnVpbGQgJXMsIGluY3JlbWVudGFsIGpzb24gaW5kZXg6ICVkLiIsCisgICAg
ICAgICAgICAgICAgYnVpbGRfbnVtYmVyLCBpbmRleCkKKworICAgICAgICAgICAgIyBSZXR1cm4g
aWYgbm90IGFsbCBidWlsZCBudW1iZXJzIGluIHRoZSBpbmNyZW1lbnRhbCBqc29uIHJlc3VsdHMK
KyAgICAgICAgICAgICMgYXJlIG5ld2VyIHRoYW4gdGhlIG1vc3QgcmVjZW50IGJ1aWxkIGluIHRo
ZSBhZ2dyZWdhdGVkIHJlc3VsdHMuCisgICAgICAgICAgICBpZiBidWlsZF9udW1iZXIgPCBhZ2dy
ZWdhdGVkX2J1aWxkX251bWJlcjoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoKCJC
dWlsZCAlZCBpbiBpbmNyZW1lbnRhbCBqc29uIGlzIG9sZGVyIHRoYW4gIgorICAgICAgICAgICAg
ICAgICAgICAidGhlIG1vc3QgcmVjZW50IGJ1aWxkIGluIGFnZ3JlZ2F0ZWQgcmVzdWx0czogJWQi
KSwKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRfbnVtYmVyLCBhZ2dyZWdhdGVkX2J1aWxkX251
bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgIyBTa2lw
IG1lcmdpbmcgZHVwbGljYXRlIGJ1aWxkLgorICAgICAgICAgICAgaWYgYnVpbGRfbnVtYmVyID09
IGFnZ3JlZ2F0ZWRfYnVpbGRfbnVtYmVyOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2Fybmlu
ZygiRHVwbGljYXRlIGJ1aWxkICVkIGluIGluY3JlbWVudGFsIGpzb24iLAorICAgICAgICAgICAg
ICAgICAgICBidWlsZF9udW1iZXIpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICAgICAgIyBNZXJnZSB0aGlzIGJ1aWxkIGludG8gYWdncmVhZ2F0ZWQgcmVzdWx0cy4KKyAgICAg
ICAgICAgIGNscy5fbWVyZ2Vfb25lX2J1aWxkKGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxf
anNvbiwgaW5kZXgpCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJNZXJnZWQgYnVpbGQgJXMs
IG1lcmdlZCBqc29uOiAlcy4iLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlciwgYWdncmVn
YXRlZF9qc29uKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgX21lcmdlX29uZV9idWlsZChjbHMsIGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxf
anNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbF9pbmRleCk6CisgICAg
ICAgICIiIk1lcmdlIG9uZSBidWlsZCBvZiBpbmNyZW1lbnRhbCBqc29uIGludG8gYWdncmVnYXRl
ZCBqc29uIHJlc3VsdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWRf
anNvbjogYWdncmVnYXRlZCBqc29uIG9iamVjdC4KKyAgICAgICAgICAgIGluY3JlbWVudGFsX2pz
b246IGluY3JlbWVudGFsIGpzb24gb2JqZWN0LgorICAgICAgICAgICAgaW5jcmVtZW50YWxfaW5k
ZXg6IGluZGV4IG9mIHRoZSBpbmNyZW1lbnRhbCBqc29uIHJlc3VsdHMgdG8gbWVyZ2UuCisgICAg
ICAgICIiIgorCisgICAgICAgIGZvciBrZXkgaW4gaW5jcmVtZW50YWxfanNvbi5rZXlzKCk6Cisg
ICAgICAgICAgICAjIE1lcmdlIGpzb24gcmVzdWx0cyBleGNlcHQgInRlc3RzIiBwcm9wZXJ0aWVz
IChyZXN1bHRzLCB0aW1lcyBldGMpLgorICAgICAgICAgICAgIyAidGVzdHMiIHByb3BlcnRpZXMg
d2lsbCBiZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisgICAgICAgICAgICBpZiBrZXkgPT0gSlNPTl9S
RVNVTFRTX1RFU1RTOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlm
IGtleSBpbiBhZ2dyZWdhdGVkX2pzb246CisgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9qc29u
W2tleV0uaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBpbmNyZW1lbnRhbF9qc29uW2tl
eV1baW5jcmVtZW50YWxfaW5kZXhdKQorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbltr
ZXldID0gXAorICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XVs6SlNPTl9S
RVNVTFRTX01BWF9CVUlMRFNdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFn
Z3JlZ2F0ZWRfanNvbltrZXldID0gaW5jcmVtZW50YWxfanNvbltrZXldCisKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgX21lcmdlX3Rlc3RzKGNscywgYWdncmVnYXRlZF9qc29uLCBpbmNyZW1l
bnRhbF9qc29uKToKKyAgICAgICAgIiIiTWVyZ2UgInRlc3RzIiBwcm9wZXJ0aWVzOnJlc3VsdHMs
IHRpbWVzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb246IGFn
Z3JlZ2F0ZWQganNvbiBvYmplY3QuCisgICAgICAgICAgICBpbmNyZW1lbnRhbF9qc29uOiBpbmNy
ZW1lbnRhbCBqc29uIG9iamVjdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIHRlc3RfbmFt
ZSBpbiBpbmNyZW1lbnRhbF9qc29uOgorICAgICAgICAgICAgaW5jcmVtZW50YWxfdGVzdCA9IGlu
Y3JlbWVudGFsX2pzb25bdGVzdF9uYW1lXQorICAgICAgICAgICAgaWYgdGVzdF9uYW1lIGluIGFn
Z3JlZ2F0ZWRfanNvbjoKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX3Rlc3QgPSBhZ2dyZWdh
dGVkX2pzb25bdGVzdF9uYW1lXQorICAgICAgICAgICAgICAgIGNscy5faW5zZXJ0X2l0ZW1fcnVu
X2xlbmd0aF9lbmNvZGVkKAorICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbF90ZXN0W0pT
T05fUkVTVUxUU19SRVNVTFRTXSwKKyAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlZF90ZXN0
W0pTT05fUkVTVUxUU19SRVNVTFRTXSkKKyAgICAgICAgICAgICAgICBjbHMuX2luc2VydF9pdGVt
X3J1bl9sZW5ndGhfZW5jb2RlZCgKKyAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxfdGVz
dFtKU09OX1JFU1VMVFNfVElNRVNdLAorICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX3Rl
c3RbSlNPTl9SRVNVTFRTX1RJTUVTXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgYWdncmVnYXRlZF9qc29uW3Rlc3RfbmFtZV0gPSBpbmNyZW1lbnRhbF90ZXN0CisKKyAgICBA
Y2xhc3NtZXRob2QKKyAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChjbHMs
IGluY3JlbWVudGFsX2l0ZW0sIGFnZ3JlZ2F0ZWRfaXRlbSk6CisgICAgICAgICIiIkluc2VydHMg
dGhlIGluY3JlbWVudGFsIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzIGludG8gdGhlIGFnZ3Jl
Z2F0ZWQKKyAgICAgICAgICAgcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICAgIGluY3JlbWVudGFsX2l0ZW06IGluY3JlbWVudGFsIHJ1bi1sZW5n
dGggZW5jb2RlZCByZXN1bHRzLgorICAgICAgICAgICAgYWdncmVnYXRlZF9pdGVtOiBhZ2dyZWdh
dGVkIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLgorICAgICAgICAiIiIKKworICAgICAgICBm
b3IgaXRlbSBpbiBpbmNyZW1lbnRhbF9pdGVtOgorICAgICAgICAgICAgaWYgbGVuKGFnZ3JlZ2F0
ZWRfaXRlbSkgYW5kIGl0ZW1bMV0gPT0gYWdncmVnYXRlZF9pdGVtWzBdWzFdOgorICAgICAgICAg
ICAgICAgIGFnZ3JlZ2F0ZWRfaXRlbVswXVswXSA9IG1pbigKKyAgICAgICAgICAgICAgICAgICAg
YWdncmVnYXRlZF9pdGVtWzBdWzBdICsgaXRlbVswXSwgSlNPTl9SRVNVTFRTX01BWF9CVUlMRFMp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhlIHRlc3QgaXRlbSB2YWx1
ZXMgbmVlZCB0byBiZSBzdW1tZWQgZnJvbSBjb250aW51b3VzIHJ1bnMuCisgICAgICAgICAgICAg
ICAgIyBJZiB0aGVyZSBpcyBhbiBvbGRlciBpdGVtIChub3QgbW9zdCByZWNlbnQgb25lKSB3aG9z
ZSB2YWx1ZSBpcworICAgICAgICAgICAgICAgICMgc2FtZSBhcyB0aGUgb25lIHRvIGluc2VydCwg
dGhlbiB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBvbGQgaXRlbQorICAgICAgICAgICAgICAgICMgZnJv
bSBhZ2dyZWdhdGVkIGxpc3QuCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFu
Z2UoMSwgbGVuKGFnZ3JlZ2F0ZWRfaXRlbSkpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXRl
bVsxXSA9PSBhZ2dyZWdhdGVkX2l0ZW1baV1bMV06CisgICAgICAgICAgICAgICAgICAgICAgICBh
Z2dyZWdhdGVkX2l0ZW0ucG9wKGkpCisKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0ZW0u
aW5zZXJ0KDAsIGl0ZW0pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NoZWNrX2pzb24o
Y2xzLCBidWlsZGVyLCBqc29uKToKKyAgICAgICAgIiIiQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4g
anNvbiBpcyB2YWxpZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYnVpbGRlcjogYnVp
bGRlciBuYW1lIHRoaXMganNvbiBpcyBmb3IuCisgICAgICAgICAgICBqc29uOiBqc29uIG9iamVj
dCB0byBjaGVjay4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZSBpZiB0aGUg
anNvbiBpcyB2YWxpZCBvcgorICAgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAi
IiIKKworICAgICAgICB2ZXJzaW9uID0ganNvbltKU09OX1JFU1VMVFNfVkVSU0lPTl9LRVldCisg
ICAgICAgIGlmIHZlcnNpb24gPiBKU09OX1JFU1VMVFNfVkVSU0lPTjoKKyAgICAgICAgICAgIGxv
Z2dpbmcuZXJyb3IoIlJlc3VsdHMgSlNPTiB2ZXJzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZC4i
LAorICAgICAgICAgICAgICAgIHZlcnNpb24pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgICAgICBpZiBub3QgYnVpbGRlciBpbiBqc29uOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJv
cigiQnVpbGRlciAnJXMnIGlzIG5vdCBpbiBqc29uIHJlc3VsdHMuIiwgYnVpbGRlcikKKyAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSBqc29u
W2J1aWxkZXJdCisgICAgICAgIGlmIG5vdCBKU09OX1JFU1VMVFNfQlVJTERfTlVNQkVSUyBpbiBy
ZXN1bHRzX2Zvcl9idWlsZGVyOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiTWlzc2luZyBi
dWlsZCBudW1iZXIgaW4ganNvbiByZXN1bHRzLiIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1lcmdl
KGNscywgYnVpbGRlciwgYWdncmVnYXRlZCwgaW5jcmVtZW50YWwsIHNvcnRfa2V5cz1GYWxzZSk6
CisgICAgICAgICIiIk1lcmdlIGluY3JlbWVudGFsIGpzb24gZmlsZSBkYXRhIHdpdGggYWdncmVn
YXRlZCBqc29uIGZpbGUgZGF0YS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYnVpbGRl
cjogYnVpbGRlciBuYW1lLgorICAgICAgICAgICAgYWdncmVnYXRlZDogYWdncmVnYXRlZCBqc29u
IGZpbGUgZGF0YS4KKyAgICAgICAgICAgIGluY3JlbWVudGFsOiBpbmNyZW1lbnRhbCBqc29uIGZp
bGUgZGF0YS4KKyAgICAgICAgICAgIHNvcnRfa2V5OiB3aGV0aGVyIG9yIG5vdCB0byBzb3J0IGtl
eSB3aGVuIGR1bXBpbmcganNvbiByZXN1bHRzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAg
ICAgICBNZXJnZWQganNvbiBmaWxlIGRhdGEgaWYgbWVyZ2Ugc3VjY2VlZHMgb3IKKyAgICAgICAg
ICAgIE5vbmUgb24gZmFpbHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IGluY3Jl
bWVudGFsOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJOb3RoaW5nIHRvIG1lcmdlLiIp
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGlu
ZyBpbmNyZW1lbnRhbCBqc29uLi4uIikKKyAgICAgICAgaW5jcmVtZW50YWxfanNvbiA9IGNscy5f
bG9hZF9qc29uKGluY3JlbWVudGFsKQorICAgICAgICBpZiBub3QgaW5jcmVtZW50YWxfanNvbjoK
KyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJDaGVja2lu
ZyBpbmNyZW1lbnRhbCBqc29uLi4uIikKKyAgICAgICAgaWYgbm90IGNscy5fY2hlY2tfanNvbihi
dWlsZGVyLCBpbmNyZW1lbnRhbF9qc29uKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICAgICAgbG9nZ2luZy5pbmZvKCJMb2FkaW5nIGV4aXN0aW5nIGFnZ3JlZ2F0ZWQganNvbi4uLiIp
CisgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbiA9IGNscy5fbG9hZF9qc29uKGFnZ3JlZ2F0ZWQpCisg
ICAgICAgIGlmIG5vdCBhZ2dyZWdhdGVkX2pzb246CisgICAgICAgICAgICByZXR1cm4gaW5jcmVt
ZW50YWwKKworICAgICAgICBsb2dnaW5nLmluZm8oIkNoZWNraW5nIGV4aXN0aW5nIGFnZ3JlZ2F0
ZWQganNvbi4uLiIpCisgICAgICAgIGlmIG5vdCBjbHMuX2NoZWNrX2pzb24oYnVpbGRlciwgYWdn
cmVnYXRlZF9qc29uKToKKyAgICAgICAgICAgIHJldHVybiBpbmNyZW1lbnRhbAorCisgICAgICAg
IGxvZ2dpbmcuaW5mbygiTWVyZ2luZyBqc29uIHJlc3VsdHMuLi4iKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpZiBub3QgY2xzLl9tZXJnZV9qc29uKAorICAgICAgICAgICAgICAgIGFnZ3Jl
Z2F0ZWRfanNvbltidWlsZGVyXSwKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbF9qc29uW2J1
aWxkZXJdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uLCBlcnI6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJGYWlsZWQgdG8gbWVyZ2Ug
anNvbiByZXN1bHRzOiAlcyIsIHN0cihlcnIpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICAgICAjIE1ha2Ugc3VyZSByZXN1bHRzIGpzb24gdmVyc2lvbiBpcyB1cGRhdGVkLgorICAg
ICAgICBhZ2dyZWdhdGVkX2pzb25bSlNPTl9SRVNVTFRTX1ZFUlNJT05fS0VZXSA9IEpTT05fUkVT
VUxUU19WRVJTSU9OCisKKyAgICAgICAgcmV0dXJuIGNscy5fZ2VuZXJhdGVfZmlsZV9kYXRhKGFn
Z3JlZ2F0ZWRfanNvbiwgc29ydF9rZXlzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHVw
ZGF0ZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgaW5jcmVtZW50YWwpOgorICAgICAgICAiIiJV
cGRhdGUgZGF0YXN0b3JlIGpzb24gZmlsZSBkYXRhIGJ5IG1lcmdpbmcgaXQgd2l0aCBpbmNyZW1l
bnRhbCBqc29uCisgICAgICAgICAgIGZpbGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg
IGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZS4KKyAgICAgICAgICAgIHRlc3RfdHlwZTogdHlwZSBvZiB0
ZXN0IHJlc3VsdHMuCisgICAgICAgICAgICBpbmNyZW1lbnRhbDogaW5jcmVtZW50YWwganNvbiBm
aWxlIGRhdGEgdG8gbWVyZ2UuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRlc3RG
aWxlIG9iamVjdCBpZiB1cGRhdGUgc3VjY2VlZHMgb3IKKyAgICAgICAgICAgIE5vbmUgb24gZmFp
bHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMo
YnVpbGRlciwgdGVzdF90eXBlLCBKU09OX1JFU1VMVFNfRklMRSkKKyAgICAgICAgaWYgZmlsZXM6
CisgICAgICAgICAgICBmaWxlID0gZmlsZXNbMF0KKyAgICAgICAgICAgIG5ld19yZXN1bHRzID0g
Y2xzLm1lcmdlKGJ1aWxkZXIsIGZpbGUuZGF0YSwgaW5jcmVtZW50YWwpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAjIFVzZSB0aGUgaW5jcmVtZW50YWwgZGF0YSBpZiB0aGVyZSBpcyBubyBh
Z2dyZWdhdGVkIGZpbGUgdG8gbWVyZ2UuCisgICAgICAgICAgICBmaWxlID0gVGVzdEZpbGUoKQor
ICAgICAgICAgICAgZmlsZS5idWlsZGVyID0gYnVpbGRlcgorICAgICAgICAgICAgZmlsZS5uYW1l
ID0gSlNPTl9SRVNVTFRTX0ZJTEUKKyAgICAgICAgICAgIG5ld19yZXN1bHRzID0gaW5jcmVtZW50
YWwKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiTm8gZXhpc3RpbmcganNvbiByZXN1bHRzLCBp
bmNyZW1lbnRhbCBqc29uIGlzIHNhdmVkLiIpCisKKyAgICAgICAgaWYgbm90IG5ld19yZXN1bHRz
OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBub3QgZmlsZS5zYXZlKG5l
d19yZXN1bHRzKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIGZp
bGUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9k
ZWwvanNvbnJlc3VsdHMucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAq
CgpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21v
ZGVsL2pzb25yZXN1bHRzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QK
KworZnJvbSBqc29ucmVzdWx0cyBpbXBvcnQgSnNvblJlc3VsdHMKKworSlNPTl9SRVNVTFRTX1RF
TVBMQVRFID0gKAorICAgICd7IldlYmtpdCI6eycKKyAgICAnImFsbEZpeGFibGVDb3VudCI6W1tU
RVNUREFUQV9DT1VOVF1dLCcKKyAgICAnImJ1aWxkTnVtYmVycyI6W1tURVNUREFUQV9CVUlMRE5V
TUJFUlNdXSwnCisgICAgJyJjaHJvbWVSZXZpc2lvbiI6W1tURVNUREFUQV9DSFJPTUVSRVZJU0lP
Tl1dLCcKKyAgICAnImRlZmVycmVkQ291bnRzIjpbW1RFU1REQVRBX0NPVU5UU11dLCcKKyAgICAn
ImZpeGFibGVDb3VudCI6W1tURVNUREFUQV9DT1VOVF1dLCcKKyAgICAnImZpeGFibGVDb3VudHMi
OltbVEVTVERBVEFfQ09VTlRTXV0sJworICAgICcic2Vjb25kc1NpbmNlRXBvY2giOltbVEVTVERB
VEFfVElNRVNdXSwnCisgICAgJyJ0ZXN0cyI6e1tURVNUREFUQV9URVNUU119LCcKKyAgICAnIndl
YmtpdFJldmlzaW9uIjpbW1RFU1REQVRBX1dFQktJVFJFVklTSU9OXV0sJworICAgICcid29udGZp
eENvdW50cyI6W1tURVNUREFUQV9DT1VOVFNdXScKKyAgICAnfSwnCisgICAgJyJ2ZXJzaW9uIjoz
JworICAgICd9JykKKworSlNPTl9SRVNVTFRTX0NPVU5UU19URU1QTEFURSA9ICgKKyAgICAneycK
KyAgICAnIkMiOltURVNUREFUQV0sJworICAgICciRiI6W1RFU1REQVRBXSwnCisgICAgJyJJIjpb
VEVTVERBVEFdLCcKKyAgICAnIk8iOltURVNUREFUQV0sJworICAgICciUCI6W1RFU1REQVRBXSwn
CisgICAgJyJUIjpbVEVTVERBVEFdLCcKKyAgICAnIlgiOltURVNUREFUQV0sJworICAgICciWiI6
W1RFU1REQVRBXX0nKQorCitKU09OX1JFU1VMVFNfVEVTVFNfVEVNUExBVEUgPSAoCisgICAgJyJb
VEVTVERBVEFfVEVTVF9OQU1FXSI6eycKKyAgICAnInJlc3VsdHMiOltbVEVTVERBVEFfVEVTVF9S
RVNVTFRTXV0sJworICAgICcidGltZXMiOltbVEVTVERBVEFfVEVTVF9USU1FU11dfScpCisKK0pT
T05fUkVTVUxUU19QUkVGSVggPSAiQUREX1JFU1VMVFMoIgorSlNPTl9SRVNVTFRTX1NVRkZJWCA9
ICIpOyIKKworCitjbGFzcyBKc29uUmVzdWx0c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fYnVpbGRlciA9ICJXZWJraXQiCisKKyAg
ICBkZWYgX21ha2VfdGVzdF9qc29uKHNlbGYsIHRlc3RfZGF0YSk6CisgICAgICAgIGlmIG5vdCB0
ZXN0X2RhdGE6CisgICAgICAgICAgICByZXR1cm4gSlNPTl9SRVNVTFRTX1BSRUZJWCArIEpTT05f
UkVTVUxUU19TVUZGSVgKKworICAgICAgICAoYnVpbGRzLCB0ZXN0cykgPSB0ZXN0X2RhdGEKKyAg
ICAgICAgaWYgbm90IGJ1aWxkcyBvciBub3QgdGVzdHM6CisgICAgICAgICAgICByZXR1cm4gSlNP
Tl9SRVNVTFRTX1BSRUZJWCArIEpTT05fUkVTVUxUU19TVUZGSVgKKworICAgICAgICBqc29uID0g
SlNPTl9SRVNVTFRTX1RFTVBMQVRFCisKKyAgICAgICAgY291bnRzID0gW10KKyAgICAgICAgYnVp
bGRfbnVtYmVycyA9IFtdCisgICAgICAgIHdlYmtpdF9yZXZpc2lvbiA9IFtdCisgICAgICAgIGNo
cm9tZV9yZXZpc2lvbiA9IFtdCisgICAgICAgIHRpbWVzID0gW10KKyAgICAgICAgZm9yIGJ1aWxk
IGluIGJ1aWxkczoKKyAgICAgICAgICAgIGNvdW50cy5hcHBlbmQoSlNPTl9SRVNVTFRTX0NPVU5U
U19URU1QTEFURS5yZXBsYWNlKCJbVEVTVERBVEFdIiwgYnVpbGQpKQorICAgICAgICAgICAgYnVp
bGRfbnVtYmVycy5hcHBlbmQoIjEwMDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIHdlYmtpdF9y
ZXZpc2lvbi5hcHBlbmQoIjIwMDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIGNocm9tZV9yZXZp
c2lvbi5hcHBlbmQoIjMwMDAlcyIgJSBidWlsZCkKKyAgICAgICAgICAgIHRpbWVzLmFwcGVuZCgi
MTAwMDAwJXMwMDAiICUgYnVpbGQpCisKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RF
U1REQVRBX0NPVU5UU10iLCAiLCIuam9pbihjb3VudHMpKQorICAgICAgICBqc29uID0ganNvbi5y
ZXBsYWNlKCJbVEVTVERBVEFfQ09VTlRdIiwgIiwiLmpvaW4oYnVpbGRzKSkKKyAgICAgICAganNv
biA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX0JVSUxETlVNQkVSU10iLCAiLCIuam9pbihidWls
ZF9udW1iZXJzKSkKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX1dFQktJ
VFJFVklTSU9OXSIsICIsIi5qb2luKHdlYmtpdF9yZXZpc2lvbikpCisgICAgICAgIGpzb24gPSBq
c29uLnJlcGxhY2UoIltURVNUREFUQV9DSFJPTUVSRVZJU0lPTl0iLCAiLCIuam9pbihjaHJvbWVf
cmV2aXNpb24pKQorICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfVElNRVNd
IiwgIiwiLmpvaW4odGltZXMpKQorCisgICAgICAgIGpzb25fdGVzdHMgPSBbXQorICAgICAgICBm
b3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHQgPSBKU09OX1JFU1VMVFNfVEVTVFNfVEVN
UExBVEUucmVwbGFjZSgiW1RFU1REQVRBX1RFU1RfTkFNRV0iLCB0ZXN0WzBdKQorICAgICAgICAg
ICAgdCA9IHQucmVwbGFjZSgiW1RFU1REQVRBX1RFU1RfUkVTVUxUU10iLCB0ZXN0WzFdKQorICAg
ICAgICAgICAgdCA9IHQucmVwbGFjZSgiW1RFU1REQVRBX1RFU1RfVElNRVNdIiwgdGVzdFsyXSkK
KyAgICAgICAgICAgIGpzb25fdGVzdHMuYXBwZW5kKHQpCisKKyAgICAgICAganNvbiA9IGpzb24u
cmVwbGFjZSgiW1RFU1REQVRBX1RFU1RTXSIsICIsIi5qb2luKGpzb25fdGVzdHMpKQorCisgICAg
ICAgIHJldHVybiBKU09OX1JFU1VMVFNfUFJFRklYICsganNvbiArIEpTT05fUkVTVUxUU19TVUZG
SVgKKworICAgIGRlZiBfdGVzdF9tZXJnZShzZWxmLCBhZ2dyZWdhdGVkX2RhdGEsIGluY3JlbWVu
dGFsX2RhdGEsIGV4cGVjdGVkX2RhdGEpOgorICAgICAgICBhZ2dyZWdhdGVkX3Jlc3VsdHMgPSBz
ZWxmLl9tYWtlX3Rlc3RfanNvbihhZ2dyZWdhdGVkX2RhdGEpCisgICAgICAgIGluY3JlbWVudGFs
X3Jlc3VsdHMgPSBzZWxmLl9tYWtlX3Rlc3RfanNvbihpbmNyZW1lbnRhbF9kYXRhKQorICAgICAg
ICBtZXJnZWRfcmVzdWx0cyA9IEpzb25SZXN1bHRzLm1lcmdlKHNlbGYuX2J1aWxkZXIsCisgICAg
ICAgICAgICBhZ2dyZWdhdGVkX3Jlc3VsdHMsIGluY3JlbWVudGFsX3Jlc3VsdHMsIHNvcnRfa2V5
cz1UcnVlKQorCisgICAgICAgIGlmIGV4cGVjdGVkX2RhdGE6CisgICAgICAgICAgICBleHBlY3Rl
ZF9yZXN1bHRzID0gc2VsZi5fbWFrZV90ZXN0X2pzb24oZXhwZWN0ZWRfZGF0YSkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lcmdlZF9yZXN1bHRzLCBleHBlY3RlZF9yZXN1bHRzKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXJnZWRfcmVzdWx0
cykKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAjIEVtcHR5IGluY3JlbWVudGFsIHJl
c3VsdHMganNvbi4KKyAgICAgICAgIyBOb3RoaW5nIHRvIG1lcmdlLgorICAgICAgICBzZWxmLl90
ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAg
IChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJd
XSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIE5vbmUs
CisgICAgICAgICAgICAjIEV4cGVjdCBubyBtZXJnZSBoYXBwZW5zLgorICAgICAgICAgICAgTm9u
ZSkKKworICAgICAgICAjIE5vIGFjdHVhbCBpbmNyZW1lbnRhbCB0ZXN0IHJlc3VsdHMgKG9ubHkg
cHJlZml4IGFuZCBzdWZmaXgpIHRvIG1lcmdlLgorICAgICAgICAjIE5vdGhpbmcgdG8gbWVyZ2Uu
CisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVz
dWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJd
IiwgIlsyMDAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cwor
ICAgICAgICAgICAgKFtdLCBbXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIG5vIG1lcmdlIGhh
cHBlbnMuCisgICAgICAgICAgICBOb25lKQorCisgICAgICAgICMgTm8gZXhpc3RpbmcgYWdncmVn
YXRlZCByZXN1bHRzLgorICAgICAgICAjIE1lcmdlZCByZXN1bHRzID09IG5ldyBpbmNyZW1lbnRh
bCByZXN1bHRzLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dy
ZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAjIEluY3JlbWVu
dGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAw
LFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3Vs
dHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIs
ICJbMjAwLFwiMFwiXSJdXSkpCisKKyAgICAgICAgIyBTaW5nbGUgdGVzdCBmb3Igc2luZ2xlIHJ1
bi4KKyAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzIGhhcyB0aGUgbGF0ZXN0IGJ1aWxkIGFu
ZCBzYW1lIHRlc3QgcmVzdWx0cyBmb3IKKyAgICAgICAgIyB0aGF0IHJ1bi4KKyAgICAgICAgIyBJ
bnNlcnQgdGhlIGluY3JlbWVudGFsIHJlc3VsdHMgYXQgdGhlIGZpcnN0IHBsYWNlIGFuZCBzdW0g
bnVtYmVyCisgICAgICAgICMgb2YgcnVucyBmb3IgIlAiICgyMDAgKyAxKSB0byBnZXQgbWVyZ2Vk
IHJlc3VsdHMuCisgICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3Jl
Z2F0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsy
MDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwg
cmVzdWx0cworICAgICAgICAgICAgKFsiMyJdLCBbWyIwMDEuaHRtbCIsICJbMSxcIlBcIl0iLCAi
WzEsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAg
ICAgKFsiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMSxcIlBcIl0iLCAiWzIwMSxc
IjBcIl0iXV0pKQorCisgICAgICAgICMgU2luZ2xlIHRlc3QgZm9yIHNpbmdsZSBydW4uCisgICAg
ICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cyBoYXMgdGhlIGxhdGVzdCBidWlsZCBidXQgZGlmZmVy
ZW50IHRlc3QgcmVzdWx0cworICAgICAgICAjIGZvciB0aGF0IHJ1bi4KKyAgICAgICAgIyBJbnNl
cnQgdGhlIGluY3JlbWVudGFsIHJlc3VsdHMgYXQgdGhlIGZpcnN0IHBsYWNlLgorICAgICAgICBz
ZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAg
ICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwi
MFwiXSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAg
IChbIjMiXSwgW1siMDAxLmh0bWwiLCAiWzEsIFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAg
ICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJd
LCBbWyIwMDEuaHRtbCIsICJbMSxcIklcIl0sWzIwMCxcIlBcIl0iLCAiWzEsXCIxXCJdLFsyMDAs
XCIwXCJdIl1dKSkKKworICAgICAgICAjIFNpbmdsZSB0ZXN0IGZvciBzaW5nbGUgcnVuLgorICAg
ICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMgaGFzIHRoZSBsYXRlc3QgYnVpbGQgYnV0IGRpZmZl
cmVudCB0ZXN0IHJlc3VsdHMKKyAgICAgICAgIyBmb3IgdGhhdCBydW4uCisgICAgICAgICMgVGhl
IHRlc3QgInJlc3VsdHMiIGFuZCAidGltZXMiIG5lZWQgdG8gYmUgY29udGludW91cywgc28gdGhl
IG9sZAorICAgICAgICAjIFsxMCwiSSJdIHJlc3VsdCBzaG91bGQgYmUgZHJvcHBlZCBiZWNhdXNl
IGEgbmV3IHJlc3VsdCBvZiBzYW1lIHR5cGUgWzEsIkkiXQorICAgICAgICAjIGlzIGluc2VydGVk
IGluIGZyb250IG9mIFsyMDAsIlAiXS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAg
ICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1si
MDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0sWzEwLFwiSVwiXSIsICJbMjAwLFwiMFwiXSxbMTAsXCIx
XCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAg
KFsiMyJdLCBbWyIwMDEuaHRtbCIsICJbMSxcIklcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAg
ICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiMyIsICIyIiwgIjEiXSwg
W1siMDAxLmh0bWwiLCAiWzEsXCJJXCJdLFsyMDAsXCJQXCJdIiwgIlsxLFwiMVwiXSxbMjAwLFwi
MFwiXSJdXSkpCisKKyAgICAgICAgIyBNdWx0aXBsZSB0ZXN0cyBmb3Igc2luZ2xlIHJ1bi4KKyAg
ICAgICAgIyBBbGwgdGVzdHMgaGF2ZSBpbmNyZW1lbnRhbCB1cGRhdGVzLgorICAgICAgICBzZWxm
Ll90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAg
ICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwi
XSJdLCBbIjAwMi5odG1sIiwgIlsxMDAsXCJJXCJdIiwgIlsxMDAsXCIxXCJdIl1dKSwKKyAgICAg
ICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMyJdLCBbWyIwMDEu
aHRtbCIsICJbMSxcIlBcIl0iLCAiWzEsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEsXCJJXCJd
IiwgIlsxLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAg
ICAgICAgIChbIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDEsXCJQXCJdIiwgIlsy
MDEsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEwMSxcIklcIl0iLCAiWzEwMSxcIjFcIl0iXV0p
KQorCisgICAgICAgICMgTXVsdGlwbGUgdGVzdHMgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMg
Tm90IGFsbCB0ZXN0cyBoYXZlIHVwZGF0ZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAg
ICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwg
W1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwgWyIwMDIuaHRtbCIs
ICJbMTAwLFwiSVwiXSIsICJbMTAwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVu
dGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwgW1siMDAyLmh0bWwiLCAiWzEsXCJJXCJd
IiwgIlsxLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAgICAg
ICAgICAgIChbIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsy
MDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEwMSxcIklcIl0iLCAiWzEwMSxcIjFcIl0iXV0p
KQorCisgICAgICAgICMgU2luZ2xlIHRlc3QgZm9yIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIHNl
bGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAg
ICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIw
XCJdIl1dKSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAg
KFsiNCIsICIzIl0sIFtbIjAwMS5odG1sIiwgIlsyLCBcIklcIl0iLCAiWzIsXCIyXCJdIl1dKSwK
KyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAgKFsiNCIsICIzIiwg
IjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMixcIklcIl0sWzIwMCxcIlBcIl0iLCAiWzIsXCIy
XCJdLFsyMDAsXCIwXCJdIl1dKSkKKworICAgICAgICAjIE11bHRpcGxlIHRlc3RzIGZvciBtdWx0
aXBsZSBydW5zLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dy
ZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJb
MjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsxMCxcIlpcIl0iLCAi
WzEwLFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAg
ICAgICAgIChbIjQiLCAiMyJdLCBbWyIwMDEuaHRtbCIsICJbMiwgXCJJXCJdIiwgIlsyLFwiMlwi
XSJdLCBbIjAwMi5odG1sIiwgIlsxLFwiQ1wiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAg
ICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyI0IiwgIjMiLCAiMiIsICIxIl0s
IFtbIjAwMS5odG1sIiwgIlsyLFwiSVwiXSxbMjAwLFwiUFwiXSIsICJbMixcIjJcIl0sWzIwMCxc
IjBcIl0iXSwgWyIwMDIuaHRtbCIsICJbMSxcIkNcIl0sWzEwLFwiWlwiXSIsICJbMSxcIjFcIl0s
WzEwLFwiMFwiXSJdXSkpCisKKyAgICAgICAgIyBUZXN0IGlmIGJ1aWxkIGluIGluY3JlbWVudGFs
IHJlc3VsdHMgaXMgb2xkZXIgdGhhbiB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgIyBidWlsZCBp
biBhZ2dyZWdhdGVkIHJlc3VsdHMuCisgICAgICAgICMgVGhlIGluY3JlbWVudGFsIHJlc3VsdHMg
c2hvdWxkIGJlIGRyb3BwZWQgYW5kIG5vIG1lcmdlIGhhcHBlbnMuCisgICAgICAgIHNlbGYuX3Rl
c3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cworICAgICAgICAgICAg
KFsiMyIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwgIlsyMDAsXCIwXCJdIl1d
KSwKKyAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cworICAgICAgICAgICAgKFsiMiJd
LCBbWyIwMDEuaHRtbCIsICJbMSwgXCJQXCJdIiwgIlsxLFwiMFwiXSJdXSksCisgICAgICAgICAg
ICAjIEV4cGVjdGVkIG5vIG1lcmdlIGhhcHBlbnMuCisgICAgICAgICAgICBOb25lKQorCitpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191
bml0dGVzdC5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4
OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL3Rlc3RmaWxlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZpbGUucHkJKHJl
dmlzaW9uIDU4NzkwKQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0
ZmlsZS5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CkBAIC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0yOSwxNiArMjksMTQgQEAKIGZy
b20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwogCi1mcm9tIGdvb2ds
ZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5l
eHQgaW1wb3J0IGRiCiAKK2Zyb20gbW9kZWwuZGF0YXN0b3JlZmlsZSBpbXBvcnQgRGF0YVN0b3Jl
RmlsZQogCi1jbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CisKK2NsYXNzIFRlc3RGaWxlKERhdGFT
dG9yZUZpbGUpOgogICAgIGJ1aWxkZXIgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgbmFtZSA9
IGRiLlN0cmluZ1Byb3BlcnR5KCkKICAgICB0ZXN0X3R5cGUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgp
Ci0gICAgYmxvYl9rZXkgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgZGF0ZSA9IGRiLkRhdGVU
aW1lUHJvcGVydHkoYXV0b19ub3dfYWRkPVRydWUpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBk
ZWYgZGVsZXRlX2ZpbGUoY2xzLCBrZXksIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbGltaXQp
OgpAQCAtNjMsNyArNjEsNyBAQCBjbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIHJl
dHVybiBUcnVlCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZ2V0X2ZpbGVzKGNscywgYnVp
bGRlciwgdGVzdF90eXBlLCBuYW1lLCBsaW1pdCk6CisgICAgZGVmIGdldF9maWxlcyhjbHMsIGJ1
aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbG9hZF9kYXRhPVRydWUsIGxpbWl0PTEpOgogICAgICAg
ICBxdWVyeSA9IFRlc3RGaWxlLmFsbCgpCiAgICAgICAgIGlmIGJ1aWxkZXI6CiAgICAgICAgICAg
ICBxdWVyeSA9IHF1ZXJ5LmZpbHRlcigiYnVpbGRlciA9IiwgYnVpbGRlcikKQEAgLTcyLDUxICs3
MCw1NCBAQCBjbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIGlmIG5hbWU6CiAgICAg
ICAgICAgICBxdWVyeSA9IHF1ZXJ5LmZpbHRlcigibmFtZSA9IiwgbmFtZSkKIAotICAgICAgICBy
ZXR1cm4gcXVlcnkub3JkZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGZpbGVzID0g
cXVlcnkub3JkZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGlmIGxvYWRfZGF0YToK
KyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUubG9h
ZF9kYXRhKCkKKworICAgICAgICByZXR1cm4gZmlsZXMKIAogICAgIEBjbGFzc21ldGhvZAotICAg
IGRlZiBhZGRfZmlsZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgYmxvYl9pbmZvKToKKyAgICBk
ZWYgYWRkX2ZpbGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGRhdGEpOgogICAgICAg
ICBmaWxlID0gVGVzdEZpbGUoKQogICAgICAgICBmaWxlLmJ1aWxkZXIgPSBidWlsZGVyCiAgICAg
ICAgIGZpbGUudGVzdF90eXBlID0gdGVzdF90eXBlCi0gICAgICAgIGZpbGUubmFtZSA9IGJsb2Jf
aW5mby5maWxlbmFtZQotICAgICAgICBmaWxlLmJsb2Jfa2V5ID0gc3RyKGJsb2JfaW5mby5rZXko
KSkKLSAgICAgICAgZmlsZS5wdXQoKQorICAgICAgICBmaWxlLm5hbWUgPSBuYW1lCisKKyAgICAg
ICAgaWYgbm90IGZpbGUuc2F2ZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAg
ICAgICAgbG9nZ2luZy5pbmZvKAotICAgICAgICAgICAgIkZpbGUgc2F2ZWQsIGJ1aWxkZXI6ICVz
LCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywgYmxvYiBrZXk6ICVzLiIsCi0gICAgICAgICAgICBi
dWlsZGVyLCB0ZXN0X3R5cGUsIGZpbGUubmFtZSwgZmlsZS5ibG9iX2tleSkKKyAgICAgICAgICAg
ICJGaWxlIHNhdmVkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGtleTog
JXMuIiwKKyAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBzdHIoZmls
ZS5kYXRhX2tleXMpKQogCiAgICAgICAgIHJldHVybiBmaWxlCiAKICAgICBAY2xhc3NtZXRob2QK
LSAgICBkZWYgdXBkYXRlX2ZpbGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbyk6
Ci0gICAgICAgIGZpbGVzID0gY2xzLmdldF9maWxlcyhidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2Jf
aW5mby5maWxlbmFtZSwgMSkKKyAgICBkZWYgdXBkYXRlKGNscywgYnVpbGRlciwgdGVzdF90eXBl
LCBuYW1lLCBkYXRhKToKKyAgICAgICAgZmlsZXMgPSBjbHMuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRl
c3RfdHlwZSwgbmFtZSkKICAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAgICAgICAgcmV0dXJu
IGNscy5hZGRfZmlsZShidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbykKKyAgICAgICAgICAg
IHJldHVybiBjbHMuYWRkX2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBkYXRhKQogCiAg
ICAgICAgIGZpbGUgPSBmaWxlc1swXQotICAgICAgICBvbGRfYmxvYl9pbmZvID0gYmxvYnN0b3Jl
LkJsb2JJbmZvLmdldChmaWxlLmJsb2Jfa2V5KQotICAgICAgICBpZiBvbGRfYmxvYl9pbmZvOgot
ICAgICAgICAgICAgb2xkX2Jsb2JfaW5mby5kZWxldGUoKQotCi0gICAgICAgIGZpbGUuYnVpbGRl
ciA9IGJ1aWxkZXIKLSAgICAgICAgZmlsZS50ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKLSAgICAgICAg
ZmlsZS5uYW1lID0gYmxvYl9pbmZvLmZpbGVuYW1lCi0gICAgICAgIGZpbGUuYmxvYl9rZXkgPSBz
dHIoYmxvYl9pbmZvLmtleSgpKQotICAgICAgICBmaWxlLmRhdGUgPSBkYXRldGltZS5ub3coKQot
ICAgICAgICBmaWxlLnB1dCgpCisgICAgICAgIGlmIG5vdCBmaWxlLnNhdmUoZGF0YSk6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgIGxvZ2dpbmcuaW5mbygKLSAgICAgICAgICAg
ICJGaWxlIHJlcGxhY2VkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGJs
b2Iga2V5OiAlcy4iLAotICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlLm5hbWUs
IGZpbGUuYmxvYl9rZXkpCisgICAgICAgICAgICAiRmlsZSByZXBsYWNlZCwgYnVpbGRlcjogJXMs
IHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLCBkYXRhIGtleTogJXMuIiwKKyAgICAgICAgICAgIGJ1
aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5kYXRhX2tleXMpKQogCiAgICAg
ICAgIHJldHVybiBmaWxlCiAKLSAgICBkZWYgX2RlbGV0ZV9hbGwoc2VsZik6Ci0gICAgICAgIGlm
IHNlbGYuYmxvYl9rZXk6Ci0gICAgICAgICAgICBibG9iX2luZm8gPSBibG9ic3RvcmUuQmxvYklu
Zm8uZ2V0KHNlbGYuYmxvYl9rZXkpCi0gICAgICAgICAgICBpZiBibG9iX2luZm86Ci0gICAgICAg
ICAgICAgICAgYmxvYl9pbmZvLmRlbGV0ZSgpCisgICAgZGVmIHNhdmUoc2VsZiwgZGF0YSk6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLnNhdmVfZGF0YShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgICAgIHNlbGYuZGF0ZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlbGYu
cHV0KCkKIAorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZWxldGVfYWxsKHNlbGYp
OgorICAgICAgICBzZWxmLmRlbGV0ZV9kYXRhKCkKICAgICAgICAgc2VsZi5kZWxldGUoKQpJbmRl
eDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3Vw
bG9hZGZvcm0uaHRtbAkocmV2aXNpb24gNTg3OTApCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0
U2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYg
KzE4LDkgQEAKICAgICAgICAgPHRkPjxpbnB1dCBjbGFzcz1pbnB1dHRleHQgdHlwZT0idGV4dCIg
bmFtZT0idGVzdHR5cGUiIHZhbHVlPSIiLz48L3RkPgogICAgIDwvdHI+CiAgICAgPC90YWJsZT4K
KyAgICA8YnI+CisgICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9ImNoZWNrYm94IiBu
YW1lPSJpbmNyZW1lbnRhbCI+SW5jcmVtZW50YWwgcmVzdWx0cywgbWVyZ2Ugd2l0aCBzZXJ2ZXIg
ZmlsZS48L2Rpdj4KKyAgICA8YnI+CiAgICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9
ImZpbGUiIG5hbWU9ImZpbGUiIG11bHRpcGxlPjwvZGl2PgogICAgIDxicj4KICAgICA8ZGl2Pjxp
bnB1dCBjbGFzcz1idXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIj48L2Rpdj4K
</data>
<flag name="review"
          id="40681"
          type_id="1"
          status="-"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63390</attachid>
            <date>2010-08-03 16:58:07 -0700</date>
            <delta_ts>2010-08-04 11:58:23 -0700</delta_ts>
            <desc>Updated patch per Ojan&apos;s comments</desc>
            <filename>ae_merge.patch</filename>
            <type>text/plain</type>
            <size>52035</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY0NjA3KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDgtMDMgIFZpY3RvciBXYW5nICA8dmlj
dG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLS4gQWRkIHJlc3VsdC5qc29uIGluY3JlbWVudGFsIG1lcmdpbmcgZnVuY3Rp
b25hbGl0eSB0byB0ZXN0IHJlc3VsdHMgYXBwIGVuZ2luZS4KKyAgICAgICAgLS4gYmxvYnN0b3Jl
IGlzIG5vdCBzdWl0YWJsZSBmb3IgQUUgZGF0YSBtZXJnaW5nIGFuZCB0aGVyZSBpcyBubyBBUEkg
dG8KKyAgICAgICAgICAgcHJvZ3JhbWF0aWNhbGx5IGVkaXQgZXhpc3RpbmcgYmxvYiBvciB3cml0
ZSBhIG5ldyBvbmUgeWV0LCBzbyByZXBsYWNlIGJsb2JzdG9yZQorICAgICAgICAgICB3aXRoIGRh
dGFzdG9yZS4gSWYgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRlcyksIHN0b3JlIGZp
bGUgZGF0YSBpbgorICAgICAgICAgICBtdWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAgICAg
ICAgLS4gRml4IHN0eWxlcy4KKworICAgICAgICBUZXN0OiBqc29ucmVzdWx0c191bml0dGVzdCB0
byB0ZXN0IG1lcmdpbmcgbG9naWNzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODU5OQorCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9oYW5k
bGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5OgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvaGFu
ZGxlcnMvbWVudS5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3Rm
aWxlaGFuZGxlci5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL21haW4ucHk6CisgICAg
ICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5OgorICAgICAgICAq
IFRlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weTogQWRkZWQu
CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weToKKyAgICAgICAg
KiBUZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWw6CisKIDIwMTAtMDgt
MDMgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBuZXcgTGVv
cGFyZCBidWlsZCBzbGF2ZSB0byBydW4gdGhlIHJlbGVhc2UgdGVzdHMuCkluZGV4OiBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9tYWluLnB5CShyZXZpc2lvbiA2NDYwNCkKKysrIFdlYktpdFRvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvbWFpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAK
ICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKICMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
ICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSMgCisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC00
MiwxNyArNDIsMTUgQEAgcm91dGVzID0gWwogICAgICgnL2Rhc2hib2FyZHMvdXBkYXRlJywgZGFz
aGJvYXJkaGFuZGxlci5VcGRhdGVEYXNoYm9hcmRGaWxlKSwKICAgICAoJy9kYXNoYm9hcmRzLyhb
Xj9dKyk/JywgZGFzaGJvYXJkaGFuZGxlci5HZXREYXNoYm9hcmRGaWxlKSwKICAgICAoJy90ZXN0
ZmlsZS9kZWxldGUnLCB0ZXN0ZmlsZWhhbmRsZXIuRGVsZXRlRmlsZSksCi0gICAgKCcvdGVzdGZp
bGUvdXBsb2FkdXJsJywgdGVzdGZpbGVoYW5kbGVyLkdldFVwbG9hZFVybCksCiAgICAgKCcvdGVz
dGZpbGUvdXBsb2FkJywgdGVzdGZpbGVoYW5kbGVyLlVwbG9hZCksCiAgICAgKCcvdGVzdGZpbGUv
dXBsb2FkZm9ybScsIHRlc3RmaWxlaGFuZGxlci5VcGxvYWRGb3JtKSwKICAgICAoJy90ZXN0Zmls
ZS8/JywgdGVzdGZpbGVoYW5kbGVyLkdldEZpbGUpLAotICAgICgnL3VwbG9hZGZhaWwnLCB0ZXN0
ZmlsZWhhbmRsZXIuVXBsb2FkU3RhdHVzKSwKLSAgICAoJy91cGxvYWRzdWNjZXNzJywgdGVzdGZp
bGVoYW5kbGVyLlVwbG9hZFN0YXR1cyksCiAgICAgKCcvKnwvbWVudScsIG1lbnUuTWVudSksCiBd
CiAKIGFwcGxpY2F0aW9uID0gd2ViYXBwLldTR0lBcHBsaWNhdGlvbihyb3V0ZXMsIGRlYnVnPVRy
dWUpCiAKKwogZGVmIG1haW4oKToKICAgICBydW5fd3NnaV9hcHAoYXBwbGljYXRpb24pCiAKSW5k
ZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvZGFzaGJvYXJkaGFuZGxl
ci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJz
L2Rhc2hib2FyZGhhbmRsZXIucHkJKHJldmlzaW9uIDY0NjA0KQorKysgV2ViS2l0VG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9oYW5kbGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zLDcgKzMsNyBAQAogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6Ci0j
IAorIwogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAogIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAKICMg
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKKyMKICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKQEAgLTM4LDYgKzM4LDcgQEAgZnJvbSBtb2RlbC5kYXNoYm9hcmRmaWxlIGlt
cG9ydCBEYXNoYm9hcgogCiBQQVJBTV9GSUxFID0gImZpbGUiCiAKKwogZGVmIGdldF9jb250ZW50
X3R5cGUoZmlsZW5hbWUpOgogICAgIHJldHVybiBtaW1ldHlwZXMuZ3Vlc3NfdHlwZShmaWxlbmFt
ZSlbMF0gb3IgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIKIApJbmRleDogV2ViS2l0VG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9tZW51LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxlcnMvbWVudS5weQkocmV2aXNpb24gNjQ2MDQpCisr
KyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL21lbnUucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1l
dDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBA
QAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgpAQCAtNjEsNCArNjEsMyBAQCBjbGFzcyBNZW51KHdlYmFwcC5SZXF1
ZXN0SGFuZGxlcik6CiAKICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoCiAgICAgICAg
ICAgICB0ZW1wbGF0ZS5yZW5kZXIoInRlbXBsYXRlcy9tZW51Lmh0bWwiLCB0ZW1wbGF0ZV92YWx1
ZXMpKQotCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3Rm
aWxlaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVy
L2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5weQkocmV2aXNpb24gNjQ2MDQpCisrKyBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMg
bWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3
IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zMCwxMSArMzAsMTAgQEAgaW1wb3J0IGxvZ2dpbmcKIGlt
cG9ydCB1cmxsaWIKIAogZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaSBpbXBvcnQgdXNlcnMKLWZy
b20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGJsb2JzdG9yZQogZnJvbSBnb29nbGUuYXBw
ZW5naW5lLmV4dCBpbXBvcnQgd2ViYXBwCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0LndlYmFw
cCBpbXBvcnQgYmxvYnN0b3JlX2hhbmRsZXJzCiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0Lndl
YmFwcCBpbXBvcnQgdGVtcGxhdGUKIAorZnJvbSBtb2RlbC5qc29ucmVzdWx0cyBpbXBvcnQgSnNv
blJlc3VsdHMKIGZyb20gbW9kZWwudGVzdGZpbGUgaW1wb3J0IFRlc3RGaWxlCiAKIFBBUkFNX0JV
SUxERVIgPSAiYnVpbGRlciIKQEAgLTQzLDEwICs0MiwxMSBAQCBQQVJBTV9GSUxFID0gImZpbGUi
CiBQQVJBTV9OQU1FID0gIm5hbWUiCiBQQVJBTV9LRVkgPSAia2V5IgogUEFSQU1fVEVTVF9UWVBF
ID0gInRlc3R0eXBlIgorUEFSQU1fSU5DUkVNRU5UQUwgPSAiaW5jcmVtZW50YWwiCiAKIAogY2xh
c3MgRGVsZXRlRmlsZSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIkRlbGV0ZSB0ZXN0
IGZpbGUgZm9yIGEgZ2l2ZW4gYnVpbGRlciBhbmQgbmFtZSBmcm9tIGRhdGFzdG9yZSAobWV0YWRh
dGEpIGFuZCBibG9ic3RvcmUgKGZpbGUgZGF0YSkuIiIiCisgICAgIiIiRGVsZXRlIHRlc3QgZmls
ZSBmb3IgYSBnaXZlbiBidWlsZGVyIGFuZCBuYW1lIGZyb20gZGF0YXN0b3JlLiIiIgogCiAgICAg
ZGVmIGdldChzZWxmKToKICAgICAgICAga2V5ID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9LRVkp
CkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIERlbGV0ZUZpbGUod2ViYXBwLlJlcXVlc3RIYW5kbGVy
KToKICAgICAgICAgbmFtZSA9IHNlbGYucmVxdWVzdC5nZXQoUEFSQU1fTkFNRSkKIAogICAgICAg
ICBsb2dnaW5nLmRlYnVnKAotICAgICAgICAgICAgIkRlbGV0aW5nIEZpbGUsIGJ1aWxkZXI6ICVz
LCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywgYmxvYiBrZXk6ICVzLiIsCisgICAgICAgICAgICAi
RGVsZXRpbmcgRmlsZSwgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLCBrZXk6
ICVzLiIsCiAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGtleSkKIAogICAg
ICAgICBUZXN0RmlsZS5kZWxldGVfZmlsZShrZXksIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwg
MTAwKQpAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBEZWxldGVGaWxlKHdlYmFwcC5SZXF1ZXN0SGFu
ZGxlcik6CiAgICAgICAgICAgICAlIChidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpKQogCiAKLWNs
YXNzIEdldEZpbGUoYmxvYnN0b3JlX2hhbmRsZXJzLkJsb2JzdG9yZURvd25sb2FkSGFuZGxlcik6
CitjbGFzcyBHZXRGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAgICAgIiIiR2V0IGZpbGUg
Y29udGVudCBvciBsaXN0IG9mIGZpbGVzIGZvciBnaXZlbiBidWlsZGVyIGFuZCBuYW1lLiIiIgog
CiAgICAgZGVmIF9nZXRfZmlsZV9saXN0KHNlbGYsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSk6
CkBAIC03Nyw3ICs3Nyw4IEBAIGNsYXNzIEdldEZpbGUoYmxvYnN0b3JlX2hhbmRsZXJzLkJsb2Jz
dG8KICAgICAgICAgICAgIG5hbWU6IGZpbGUgbmFtZQogICAgICAgICAiIiIKIAotICAgICAgICBm
aWxlcyA9IFRlc3RGaWxlLmdldF9maWxlcyhidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIDEwMCkK
KyAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoCisgICAgICAgICAgICBidWlsZGVy
LCB0ZXN0X3R5cGUsIG5hbWUsIGxvYWRfZGF0YT1GYWxzZSwgbGltaXQ9MTAwKQogICAgICAgICBp
ZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIkZpbGUgbm90IGZvdW5kLCBi
dWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMuIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCkBAIC0xMDMsMTYgKzEwNCwxNSBAQCBj
bGFzcyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvCiAgICAgICAgICAgICBuYW1l
OiBmaWxlIG5hbWUKICAgICAgICAgIiIiCiAKLSAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRf
ZmlsZXMoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCAxKQorICAgICAgICBmaWxlcyA9IFRlc3RG
aWxlLmdldF9maWxlcygKKyAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbG9h
ZF9kYXRhPVRydWUsIGxpbWl0PTEpCiAgICAgICAgIGlmIG5vdCBmaWxlczoKICAgICAgICAgICAg
IGxvZ2dpbmcuaW5mbygiRmlsZSBub3QgZm91bmQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVz
LCBuYW1lOiAlcy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlw
ZSwgbmFtZSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGJsb2Jfa2V5ID0gZmlsZXNb
MF0uYmxvYl9rZXkKLSAgICAgICAgYmxvYl9pbmZvID0gYmxvYnN0b3JlLmdldChibG9iX2tleSkK
LSAgICAgICAgaWYgYmxvYl9pbmZvOgotICAgICAgICAgICAgc2VsZi5zZW5kX2Jsb2IoYmxvYl9p
bmZvLCAidGV4dC9wbGFpbiIpCisgICAgICAgIHNlbGYucmVzcG9uc2UuaGVhZGVyc1siQ29udGVu
dC1UeXBlIl0gPSAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIKKyAgICAgICAgc2VsZi5yZXNw
b25zZS5vdXQud3JpdGUoZmlsZXNbMF0uZGF0YSkKIAogICAgIGRlZiBnZXQoc2VsZik6CiAgICAg
ICAgIGJ1aWxkZXIgPSBzZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX0JVSUxERVIpCkBAIC0xMzMsODkg
KzEzMyw3MSBAQCBjbGFzcyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvCiAgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2ZpbGVfY29udGVudChidWlsZGVyLCB0ZXN0X3R5cGUs
IG5hbWUpCiAKIAotY2xhc3MgR2V0VXBsb2FkVXJsKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6Ci0g
ICAgIiIiR2V0IGFuIHVybCBmb3IgdXBsb2FkaW5nIGZpbGUgdG8gYmxvYnN0b3JlLiBBIHNwZWNp
YWwgdXJsIGlzIHJlcXVpcmVkIGZvciBlYWNoIGJsb2Jzb3RyZSB1cGxvYWQuIiIiCi0KLSAgICBk
ZWYgZ2V0KHNlbGYpOgotICAgICAgICB1cGxvYWRfdXJsID0gYmxvYnN0b3JlLmNyZWF0ZV91cGxv
YWRfdXJsKCIvdGVzdGZpbGUvdXBsb2FkIikKLSAgICAgICAgbG9nZ2luZy5pbmZvKCJHZXR0aW5n
IHVwbG9hZCB1cmw6ICVzLiIsIHVwbG9hZF91cmwpCi0gICAgICAgIHNlbGYucmVzcG9uc2Uub3V0
LndyaXRlKHVwbG9hZF91cmwpCi0KLQotY2xhc3MgVXBsb2FkKGJsb2JzdG9yZV9oYW5kbGVycy5C
bG9ic3RvcmVVcGxvYWRIYW5kbGVyKToKLSAgICAiIiJVcGxvYWQgZmlsZSB0byBibG9ic3RvcmUu
IiIiCitjbGFzcyBVcGxvYWQod2ViYXBwLlJlcXVlc3RIYW5kbGVyKToKKyAgICAiIiJVcGxvYWQg
dGVzdCByZXN1bHRzIGZpbGUgdG8gZGF0YXN0b3JlLiIiIgogCiAgICAgZGVmIHBvc3Qoc2VsZik6
Ci0gICAgICAgIHVwbG9hZGVkX2ZpbGVzID0gc2VsZi5nZXRfdXBsb2FkcygiZmlsZSIpCi0gICAg
ICAgIGlmIG5vdCB1cGxvYWRlZF9maWxlczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl91cGxv
YWRfZG9uZShbKCJNaXNzaW5nIHVwbG9hZCBmaWxlIGZpZWxkLiIpXSkKKyAgICAgICAgcHJpbnQg
c2VsZi5yZXF1ZXN0CisKKyAgICAgICAgZmlsZV9wYXJhbXMgPSBzZWxmLnJlcXVlc3QuUE9TVC5n
ZXRhbGwoUEFSQU1fRklMRSkKKyAgICAgICAgaWYgbm90IGZpbGVfcGFyYW1zOgorICAgICAgICAg
ICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIkZBSUw6IG1pc3NpbmcgdXBsb2FkIGZpbGUgZmll
bGQuIikKKyAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGJ1aWxkZXIgPSBzZWxmLnJlcXVl
c3QuZ2V0KFBBUkFNX0JVSUxERVIpCiAgICAgICAgIGlmIG5vdCBidWlsZGVyOgotICAgICAgICAg
ICAgZm9yIGJsb2JfaW5mbyBpbiB1cGxvYWRlZF9maWxlczoKLSAgICAgICAgICAgICAgICBibG9i
X2luZm8uZGVsZXRlKCkKLSAgICAKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl91cGxvYWRfZG9u
ZShbKCJNaXNzaW5nIGJ1aWxkZXIgcGFyYW1ldGVyIGluIHVwbG9hZCByZXF1ZXN0LiIpXSkKKyAg
ICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMOiBtaXNzaW5nIGJ1aWxkZXIg
cGFyYW1ldGVyLiIpCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICB0ZXN0X3R5cGUgPSBz
ZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX1RFU1RfVFlQRSkKKyAgICAgICAgaW5jcmVtZW50YWwgPSBz
ZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX0lOQ1JFTUVOVEFMKQogCiAgICAgICAgIGxvZ2dpbmcuZGVi
dWcoCiAgICAgICAgICAgICAiUHJvY2Vzc2luZyB1cGxvYWQgcmVxdWVzdCwgYnVpbGRlcjogJXMs
IHRlc3RfdHlwZTogJXMuIiwKICAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSkKIAorICAg
ICAgICAjIFRoZXJlIGFyZSB0d28gcG9zc2libGUgdHlwZXMgb2YgZWFjaCBmaWxlX3BhcmFtcyBp
biB0aGUgcmVxdWVzdDoKKyAgICAgICAgIyBvbmUgZmlsZSBpdGVtIG9yIGEgbGlzdCBvZiBmaWxl
IGl0ZW1zLgorICAgICAgICAjIE5vcm1hbGl6ZSBmaWxlX3BhcmFtcyB0byBhIGZpbGUgaXRlbSBs
aXN0LgorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGxvZ2dpbmcuZGVidWcoInRlc3Q6ICVz
LCB0eXBlOiVzIiwgZmlsZV9wYXJhbXMsIHR5cGUoZmlsZV9wYXJhbXMpKQorICAgICAgICBmb3Ig
aXRlbSBpbiBmaWxlX3BhcmFtczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0s
IGxpc3QpIGFuZCBub3QgaXNpbnN0YW5jZShpdGVtLCB0dXBsZSk6CisgICAgICAgICAgICAgICAg
aXRlbSA9IFtpdGVtXQorICAgICAgICAgICAgZmlsZXMuZXh0ZW5kKGl0ZW0pCisKICAgICAgICAg
ZXJyb3JzID0gW10KLSAgICAgICAgZm9yIGJsb2JfaW5mbyBpbiB1cGxvYWRlZF9maWxlczoKLSAg
ICAgICAgICAgIHRmID0gVGVzdEZpbGUudXBkYXRlX2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBi
bG9iX2luZm8pCi0gICAgICAgICAgICBpZiBub3QgdGY6CisgICAgICAgIGZvciBmaWxlIGluIGZp
bGVzOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlLmZpbGVuYW1lLmxvd2VyKCkKKyAgICAg
ICAgICAgIGlmICgoaW5jcmVtZW50YWwgYW5kIGZpbGVuYW1lID09ICJyZXN1bHRzLmpzb24iKSBv
cgorICAgICAgICAgICAgICAgIChmaWxlbmFtZSA9PSAiaW5jcmVtZW50YWxfcmVzdWx0cy5qc29u
IikpOgorICAgICAgICAgICAgICAgICMgTWVyZ2UgaW5jcmVtZW50YWwganNvbiByZXN1bHRzLgor
ICAgICAgICAgICAgICAgIHNhdmVkX2ZpbGUgPSBKc29uUmVzdWx0cy51cGRhdGUoYnVpbGRlciwg
dGVzdF90eXBlLCBmaWxlLnZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBzYXZlZF9maWxlID0gVGVzdEZpbGUudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBidWls
ZGVyLCB0ZXN0X3R5cGUsIGZpbGUuZmlsZW5hbWUsIGZpbGUudmFsdWUpCisKKyAgICAgICAgICAg
IGlmIG5vdCBzYXZlZF9maWxlOgogICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoCiAgICAg
ICAgICAgICAgICAgICAgICJVcGxvYWQgZmFpbGVkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAl
cywgbmFtZTogJXMuIiAlCi0gICAgICAgICAgICAgICAgICAgIChidWlsZGVyLCB0ZXN0X3R5cGUs
IGJsb2JfaW5mby5maWxlbmFtZSkpCi0gICAgICAgICAgICAgICAgYmxvYl9pbmZvLmRlbGV0ZSgp
Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYuX3VwbG9hZF9kb25lKGVycm9ycykKLQotICAgIGRlZiBf
dXBsb2FkX2RvbmUoc2VsZiwgZXJyb3JzKToKLSAgICAgICAgbG9nZ2luZy5pbmZvKCJ1cGxvYWQg
ZG9uZS4iKQorICAgICAgICAgICAgICAgICAgICAoYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlLmZp
bGVuYW1lKSkKIAotICAgICAgICBlcnJvcl9tZXNzYWdlcyA9IFtdCi0gICAgICAgIGZvciBlcnJv
ciBpbiBlcnJvcnM6Ci0gICAgICAgICAgICBsb2dnaW5nLmluZm8oZXJyb3IpCi0gICAgICAgICAg
ICBlcnJvcl9tZXNzYWdlcy5hcHBlbmQoImVycm9yPSVzIiAlIHVybGxpYi5xdW90ZShlcnJvcikp
Ci0KLSAgICAgICAgaWYgZXJyb3JfbWVzc2FnZXM6Ci0gICAgICAgICAgICByZWRpcmVjdF91cmwg
PSAiL3VwbG9hZGZhaWw/JXMiICUgIiYiLmpvaW4oZXJyb3JfbWVzc2FnZXMpCisgICAgICAgIGlm
IGVycm9yczoKKyAgICAgICAgICAgIG1lc3NhZ2VzID0gIkZBSUw6ICIgKyAiOyAiLmpvaW4oZXJy
b3JzKQorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKG1lc3NhZ2VzKQorICAgICAgICAgICAg
c2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDUwMCwgbWVzc2FnZXMpCisgICAgICAgICAgICBzZWxm
LnJlc3BvbnNlLm91dC53cml0ZSgiRkFJTCIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZWRpcmVjdF91cmwgPSAiL3VwbG9hZHN1Y2Nlc3MiCi0KLSAgICAgICAgbG9nZ2luZy5pbmZvKHJl
ZGlyZWN0X3VybCkKLSAgICAgICAgIyBCbG9ic3RvcmVVcGxvYWRIYW5kbGVyIHJlcXVpcmVzIHJl
ZGlyZWN0IGF0IHRoZSBlbmQuCi0gICAgICAgIHNlbGYucmVkaXJlY3QocmVkaXJlY3RfdXJsKQor
ICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDIwMCkKKyAgICAgICAgICAgIHNl
bGYucmVzcG9uc2Uub3V0LndyaXRlKCJPSyIpCiAKIAogY2xhc3MgVXBsb2FkRm9ybSh3ZWJhcHAu
UmVxdWVzdEhhbmRsZXIpOgotICAgICIiIlNob3cgYSBmb3JtIHNvIHVzZXIgY2FuIHN1Ym1pdCBh
IGZpbGUgdG8gYmxvYnN0b3JlLiIiIgorICAgICIiIlNob3cgYSBmb3JtIHNvIHVzZXIgY2FuIHVw
bG9hZCBhIGZpbGUuIiIiCiAKICAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICB1cGxvYWRfdXJs
ID0gYmxvYnN0b3JlLmNyZWF0ZV91cGxvYWRfdXJsKCIvdGVzdGZpbGUvdXBsb2FkIikKICAgICAg
ICAgdGVtcGxhdGVfdmFsdWVzID0gewotICAgICAgICAgICAgInVwbG9hZF91cmwiOiB1cGxvYWRf
dXJsLAorICAgICAgICAgICAgInVwbG9hZF91cmwiOiAiL3Rlc3RmaWxlL3VwbG9hZCIsCiAgICAg
ICAgIH0KICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUodGVtcGxhdGUucmVuZGVyKCJ0
ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX3ZhbHVlcykpCi0KLWNsYXNzIFVwbG9hZFN0YXR1
cyh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIlJldHVybiBzdGF0dXMgb2YgZmlsZSB1
cGxvYWRpbmciIiIKLQotICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIGxvZ2dpbmcuZGVidWco
IlVwZGF0ZSBzdGF0dXMiKQotCi0gICAgICAgIGlmIHNlbGYucmVxdWVzdC5wYXRoID09ICIvdXBs
b2Fkc3VjY2VzcyI6Ci0gICAgICAgICAgICBzZWxmLnJlc3BvbnNlLnNldF9zdGF0dXMoMjAwKQot
ICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIk9LIikKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIGVycm9ycyA9IHNlbGYucmVxdWVzdC5wYXJhbXMuZ2V0YWxsKCJlcnJvciIp
Ci0gICAgICAgICAgICBpZiBlcnJvcnM6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZXMgPSAiRkFJ
TDogIiArICI7ICIuam9pbihlcnJvcnMpCi0gICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5n
KG1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uuc2V0X3N0YXR1cyg1MDAs
IG1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlM
IikKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGFzaGJvYXJkZmls
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2Rh
c2hib2FyZGZpbGUucHkJKHJldmlzaW9uIDY0NjA0KQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NyBAQAogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAogIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotIyAKKyMKICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
QEAgLTM2LDYgKzM2LDcgQEAgZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKIFNW
Tl9QQVRIX0RBU0hCT0FSRCA9ICgiaHR0cDovL3NyYy5jaHJvbWl1bS5vcmcvdmlld3ZjL2Nocm9t
ZS90cnVuay90b29scy8iCiAgICAgImRhc2hib2FyZHMvIikKIAorCiBjbGFzcyBEYXNoYm9hcmRG
aWxlKGRiLk1vZGVsKToKICAgICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkoKQogICAgIGRhdGEg
PSBkYi5CbG9iUHJvcGVydHkoKQpAQCAtOTIsNyArOTMsNyBAQCBjbGFzcyBEYXNoYm9hcmRGaWxl
KGRiLk1vZGVsKToKICAgICAgICAgaWYgbm90IGZpbGVzOgogICAgICAgICAgICAgbG9nZ2luZy5p
bmZvKCJObyBleGlzdGluZyBmaWxlLCBhZGRlZCBhcyBuZXcgZmlsZS4iKQogICAgICAgICAgICAg
cmV0dXJuIGNscy5hZGRfZmlsZShuYW1lLCBkYXRhKQotICAgICAgICAKKwogICAgICAgICBsb2dn
aW5nLmRlYnVnKCJVcGRhdGluZyBleGlzdGluZyBmaWxlLiIpCiAgICAgICAgIGZpbGUgPSBmaWxl
c1swXQogICAgICAgICBmaWxlLmRhdGEgPSBkYXRhCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3RvcmVmaWxlLnB5CShyZXZpc2lvbiAwKQor
KysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3RvcmVmaWxlLnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gZGF0
ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgbG9nZ2luZworCitmcm9tIGdvb2dsZS5hcHBl
bmdpbmUuZXh0IGltcG9ydCBkYgorCitNQVhfREFUQV9FTlRSWV9QRVJfRklMRSA9IDEwCitNQVhf
RU5UUllfTEVOID0gMTAwMCAqIDEwMDAKKworCitjbGFzcyBEYXRhRW50cnkoZGIuTW9kZWwpOgor
ICAgICIiIkRhdGFzdG9yZSBlbnRyeSB0aGF0IHN0b3JlcyBvbmUgc2VnbWFudCBvZiBmaWxlIGRh
dGEKKyAgICAgICAoPDEwMDAqMTAwMCBieXRlcykuCisgICAgIiIiCisKKyAgICBkYXRhID0gZGIu
QmxvYlByb3BlcnR5KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXQoY2xzLCBrZXkp
OgorICAgICAgICByZXR1cm4gZGIuZ2V0KGtleSkKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBr
ZXkpOgorICAgICAgICByZXR1cm4gZGIuZ2V0KGtleSkKKworCitjbGFzcyBEYXRhU3RvcmVGaWxl
KGRiLk1vZGVsKToKKyAgICAiIiJUaGlzIGNsYXNzIHN0b3JlcyBmaWxlIGluIGRhdGFzdG9yZS4K
KyAgICAgICBJZiBhIGZpbGUgaXMgb3ZlcnNpemUgKD4xMDAwKjEwMDAgYnl0ZXMpLCB0aGUgZmls
ZSBpcyBzcGxpdCBpbnRvCisgICAgICAgbXVsdGlwbGUgc2VnbWVudHMgYW5kIHN0b3JlZCBpbiBt
dWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAgICAiIiIKKworICAgIG5hbWUgPSBkYi5TdHJp
bmdQcm9wZXJ0eSgpCisgICAgZGF0YV9rZXlzID0gZGIuTGlzdFByb3BlcnR5KGRiLktleSkKKyAg
ICBkYXRlID0gZGIuRGF0ZVRpbWVQcm9wZXJ0eShhdXRvX25vd19hZGQ9VHJ1ZSkKKworICAgIGRh
dGEgPSBOb25lCisKKyAgICBkZWYgZGVsZXRlX2RhdGEoc2VsZiwga2V5cz1Ob25lKToKKyAgICAg
ICAgaWYgbm90IGtleXM6CisgICAgICAgICAgICBrZXlzID0gc2VsZi5kYXRhX2tleXMKKworICAg
ICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBkYXRhX2VudHJ5ID0gRGF0YUVudHJ5
LmdldChrZXkpCisgICAgICAgICAgICBpZiBkYXRhX2VudHJ5OgorICAgICAgICAgICAgICAgIGRh
dGFfZW50cnkuZGVsZXRlKCkKKworICAgIGRlZiBzYXZlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAg
ICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJObyBkYXRhIHRv
IHNhdmUuIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIGxlbihkYXRh
KSA+IChNQVhfREFUQV9FTlRSWV9QRVJfRklMRSAqIE1BWF9FTlRSWV9MRU4pOgorICAgICAgICAg
ICAgbG9nZ2luZy5lcnJvcigiRmlsZSB0b28gYmlnLCBjYW4ndCBzYXZlIHRvIGRhdGFzdG9yZTog
JWRLIiwKKyAgICAgICAgICAgICAgICBsZW4oZGF0YSkgLyAxMDI0KQorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisKKyAgICAgICAgc3RhcnQgPSAwCisgICAgICAgIGtleXMgPSBzZWxmLmRhdGFf
a2V5cworICAgICAgICBzZWxmLmRhdGFfa2V5cyA9IFtdCisgICAgICAgIHdoaWxlIHN0YXJ0IDwg
bGVuKGRhdGEpOgorICAgICAgICAgICAgaWYga2V5czoKKyAgICAgICAgICAgICAgICBrZXkgPSBr
ZXlzLnBvcCgwKQorICAgICAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtl
eSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YV9lbnRyeToKKyAgICAgICAgICAgICAgICAg
ICAgbG9nZ2luZy53YXJuaW5nKCJGb3VuZCBrZXksIGJ1dCBubyBkYXRhIGVudHJ5OiAlcyIsIGtl
eSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeSgpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkoKQorCisg
ICAgICAgICAgICBkYXRhX2VudHJ5LmRhdGEgPSBkYi5CbG9iKGRhdGFbc3RhcnQ6IHN0YXJ0ICsg
TUFYX0VOVFJZX0xFTl0pCisgICAgICAgICAgICBkYXRhX2VudHJ5LnB1dCgpCisKKyAgICAgICAg
ICAgIGxvZ2dpbmcuaW5mbygiRGF0YSBzYXZlZDogJXMuIiwgZGF0YV9lbnRyeS5rZXkoKSkKKyAg
ICAgICAgICAgIHNlbGYuZGF0YV9rZXlzLmFwcGVuZChkYXRhX2VudHJ5LmtleSgpKQorCisgICAg
ICAgICAgICBzdGFydCA9IHN0YXJ0ICsgTUFYX0VOVFJZX0xFTgorCisgICAgICAgIGlmIGtleXM6
CisgICAgICAgICAgICBzZWxmLmRlbGV0ZV9kYXRhKGtleXMpCisKKyAgICAgICAgc2VsZi5kYXRh
ID0gZGF0YQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbG9hZF9kYXRhKHNlbGYp
OgorICAgICAgICBpZiBub3Qgc2VsZi5kYXRhX2tleXM6CisgICAgICAgICAgICBsb2dnaW5nLndh
cm5pbmcoIk5vIGRhdGEgdG8gbG9hZC4iKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICBkYXRhID0gW10KKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLmRhdGFfa2V5czoKKyAgICAg
ICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBkYXRhIGZvciBrZXk6ICVzLiIsIGtleSkKKyAg
ICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtleSkKKyAgICAgICAgICAgIGlm
IG5vdCBkYXRhX2VudHJ5OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIk5vIGRhdGEg
Zm91bmQgZm9yIGtleTogJXMuIiwga2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGRhdGFfZW50cnkuZGF0YSkKKworICAgICAgICBzZWxm
LmRhdGEgPSAiIi5qb2luKGRhdGEpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3Rv
cmVmaWxlLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHMucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5w
eQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNv
bnJlc3VsdHMucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzY1IEBACisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gZGphbmdvLnV0aWxzIGlt
cG9ydCBzaW1wbGVqc29uCitpbXBvcnQgbG9nZ2luZworCitmcm9tIG1vZGVsLnRlc3RmaWxlIGlt
cG9ydCBUZXN0RmlsZQorCitKU09OX1JFU1VMVFNfRklMRSA9ICJyZXN1bHRzLmpzb24iCitKU09O
X1JFU1VMVFNfUFJFRklYID0gIkFERF9SRVNVTFRTKCIKK0pTT05fUkVTVUxUU19TVUZGSVggPSAi
KTsiCitKU09OX1JFU1VMVFNfVkVSU0lPTl9LRVkgPSAidmVyc2lvbiIKK0pTT05fUkVTVUxUU19C
VUlMRF9OVU1CRVJTID0gImJ1aWxkTnVtYmVycyIKK0pTT05fUkVTVUxUU19URVNUUyA9ICJ0ZXN0
cyIKK0pTT05fUkVTVUxUU19SRVNVTFRTID0gInJlc3VsdHMiCitKU09OX1JFU1VMVFNfVElNRVMg
PSAidGltZXMiCitKU09OX1JFU1VMVFNfVkVSU0lPTiA9IDMKK0pTT05fUkVTVUxUU19NQVhfQlVJ
TERTID0gNzUwCisKKworY2xhc3MgSnNvblJlc3VsdHMob2JqZWN0KToKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgX3N0cmlwX3ByZWZpeF9zdWZmaXgoY2xzLCBkYXRhKToKKyAgICAgICAgIiIi
U3RyaXAgb3V0IHByZWZpeCBhbmQgc3VmZml4IG9mIGpzb24gcmVzdWx0cyBzdHJpbmcuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGE6IGpzb24gZmlsZSBjb250ZW50LgorCisgICAg
ICAgIFJldHVybnM6CisgICAgICAgICAgICBqc29uIHN0cmluZyB3aXRob3V0IHByZWZpeCBhbmQg
c3VmZml4LgorICAgICAgICAiIiIKKworICAgICAgICBhc3NlcnQoZGF0YS5zdGFydHN3aXRoKEpT
T05fUkVTVUxUU19QUkVGSVgpKQorICAgICAgICBhc3NlcnQoZGF0YS5lbmRzd2l0aChKU09OX1JF
U1VMVFNfU1VGRklYKSkKKworICAgICAgICByZXR1cm4gZGF0YVtsZW4oSlNPTl9SRVNVTFRTX1BS
RUZJWCk6CisgICAgICAgICAgICAgICAgICAgIGxlbihkYXRhKSAtIGxlbihKU09OX1JFU1VMVFNf
U1VGRklYKV0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZ2VuZXJhdGVfZmlsZV9kYXRh
KGNscywganNvbiwgc29ydF9rZXlzPUZhbHNlKToKKyAgICAgICAgIiIiR2l2ZW4ganNvbiBzdHJp
bmcsIGdlbmVyYXRlIGZpbGUgY29udGVudCBkYXRhIGJ5IGFkZGluZworICAgICAgICAgICBwcmVm
aXggYW5kIHN1ZmZpeC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAganNvbjoganNvbiBz
dHJpbmcgd2l0aG91dCBwcmVmaXggYW5kIHN1ZmZpeC4KKworICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgICAganNvbiBmaWxlIGRhdGEuCisgICAgICAgICIiIgorCisgICAgICAgIGRhdGEgPSBz
aW1wbGVqc29uLmR1bXBzKGpzb24sIHNlcGFyYXRvcnM9KCcsJywgJzonKSwKKyAgICAgICAgICAg
IHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAgIHJldHVybiBKU09OX1JFU1VMVFNfUFJFRklY
ICsgZGF0YSArIEpTT05fUkVTVUxUU19TVUZGSVgKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBfbG9hZF9qc29uKGNscywgZmlsZV9kYXRhKToKKyAgICAgICAgIiIiTG9hZCBqc29uIGZpbGUg
dG8gYSBweXRob24gb2JqZWN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmaWxlX2Rh
dGE6IGpzb24gZmlsZSBjb250ZW50LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBq
c29uIG9iamVjdCBvcgorICAgICAgICAgICAgTm9uZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIK
KworICAgICAgICBqc29uX3Jlc3VsdHNfc3RyID0gY2xzLl9zdHJpcF9wcmVmaXhfc3VmZml4KGZp
bGVfZGF0YSkKKyAgICAgICAgaWYgbm90IGpzb25fcmVzdWx0c19zdHI6CisgICAgICAgICAgICBs
b2dnaW5nLndhcm5pbmcoIk5vIGpzb24gcmVzdWx0cyBkYXRhLiIpCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVqc29uLmxv
YWRzKGpzb25fcmVzdWx0c19zdHIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAg
ICAgICAgICAgIGxvZ2dpbmcuZGVidWcoanNvbl9yZXN1bHRzX3N0cikKKyAgICAgICAgICAgIGxv
Z2dpbmcuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGpzb24gcmVzdWx0czogJXMiLCBzdHIoZXJyKSkK
KyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX21l
cmdlX2pzb24oY2xzLCBhZ2dyZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24pOgorICAgICAg
ICAiIiJNZXJnZSBpbmNyZW1lbnRhbCBqc29uIGludG8gYWdncmVnYXRlZCBqc29uIHJlc3VsdHMu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbjogYWdncmVnYXRl
ZCBqc29uIG9iamVjdC4KKyAgICAgICAgICAgIGluY3JlbWVudGFsX2pzb246IGluY3JlbWVudGFs
IGpzb24gb2JqZWN0LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlIGlmIG1l
cmdlIHN1Y2NlZWRzIG9yCisgICAgICAgICAgICBGYWxzZSBvbiBmYWlsdXJlLgorICAgICAgICAi
IiIKKworICAgICAgICAjIE1lcmdlIG5vbiB0ZXN0cyBwcm9wZXJ0eSBkYXRhLgorICAgICAgICAj
IFRlc3RzIHByb3BlcnRpZXMgYXJlIG1lcmdlZCBpbiBfbWVyZ2VfdGVzdHMuCisgICAgICAgIGlm
IG5vdCBjbHMuX21lcmdlX25vbl90ZXN0X2RhdGEoYWdncmVnYXRlZF9qc29uLCBpbmNyZW1lbnRh
bF9qc29uKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgTWVyZ2UgdGVz
dHMgcmVzdWx0cyBhbmQgdGltZXMKKyAgICAgICAgaW5jcmVtZW50YWxfdGVzdHMgPSBpbmNyZW1l
bnRhbF9qc29uW0pTT05fUkVTVUxUU19URVNUU10KKyAgICAgICAgaWYgaW5jcmVtZW50YWxfdGVz
dHM6CisgICAgICAgICAgICBhZ2dyZWdhdGVkX3Rlc3RzID0gYWdncmVnYXRlZF9qc29uW0pTT05f
UkVTVUxUU19URVNUU10KKyAgICAgICAgICAgIGNscy5fbWVyZ2VfdGVzdHMoYWdncmVnYXRlZF90
ZXN0cywgaW5jcmVtZW50YWxfdGVzdHMpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBj
bGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2Vfbm9uX3Rlc3RfZGF0YShjbHMsIGFnZ3JlZ2F0ZWRf
anNvbiwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAgICIiIk1lcmdlIGluY3JlbWVudGFsIG5v
biB0ZXN0cyBwcm9wZXJ0eSBkYXRhIGludG8gYWdncmVnYXRlZCBqc29uIHJlc3VsdHMuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbjogYWdncmVnYXRlZCBqc29u
IG9iamVjdC4KKyAgICAgICAgICAgIGluY3JlbWVudGFsX2pzb246IGluY3JlbWVudGFsIGpzb24g
b2JqZWN0LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlIGlmIG1lcmdlIHN1
Y2NlZWRzIG9yCisgICAgICAgICAgICBGYWxzZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIKKwor
ICAgICAgICBpbmNyZW1lbnRhbF9idWlsZHMgPSBpbmNyZW1lbnRhbF9qc29uW0pTT05fUkVTVUxU
U19CVUlMRF9OVU1CRVJTXQorICAgICAgICBhZ2dyZWdhdGVkX2J1aWxkcyA9IGFnZ3JlZ2F0ZWRf
anNvbltKU09OX1JFU1VMVFNfQlVJTERfTlVNQkVSU10KKyAgICAgICAgYWdncmVnYXRlZF9idWls
ZF9udW1iZXIgPSBpbnQoYWdncmVnYXRlZF9idWlsZHNbMF0pCisgICAgICAgICMgTG9vcCB0aHJv
dWdoIGFsbCBpbmNyZW1lbnRhbCBidWlsZHMsIHN0YXJ0IGZyb20gdGhlIG9sZGVzdCBydW4uCisg
ICAgICAgIGZvciBpbmRleCBpbiByZXZlcnNlZChyYW5nZShsZW4oaW5jcmVtZW50YWxfYnVpbGRz
KSkpOgorICAgICAgICAgICAgYnVpbGRfbnVtYmVyID0gaW50KGluY3JlbWVudGFsX2J1aWxkc1tp
bmRleF0pCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJNZXJnaW5nIGJ1aWxkICVzLCBpbmNy
ZW1lbnRhbCBqc29uIGluZGV4OiAlZC4iLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlciwg
aW5kZXgpCisKKyAgICAgICAgICAgICMgUmV0dXJuIGlmIG5vdCBhbGwgYnVpbGQgbnVtYmVycyBp
biB0aGUgaW5jcmVtZW50YWwganNvbiByZXN1bHRzCisgICAgICAgICAgICAjIGFyZSBuZXdlciB0
aGFuIHRoZSBtb3N0IHJlY2VudCBidWlsZCBpbiB0aGUgYWdncmVnYXRlZCByZXN1bHRzLgorICAg
ICAgICAgICAgIyBGSVhNRTogbWFrZSB0aGlzIGNhc2Ugd29yay4KKyAgICAgICAgICAgIGlmIGJ1
aWxkX251bWJlciA8IGFnZ3JlZ2F0ZWRfYnVpbGRfbnVtYmVyOgorICAgICAgICAgICAgICAgIGxv
Z2dpbmcud2FybmluZygoIkJ1aWxkICVkIGluIGluY3JlbWVudGFsIGpzb24gaXMgb2xkZXIgdGhh
biAiCisgICAgICAgICAgICAgICAgICAgICJ0aGUgbW9zdCByZWNlbnQgYnVpbGQgaW4gYWdncmVn
YXRlZCByZXN1bHRzOiAlZCIpLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9udW1iZXIsIGFn
Z3JlZ2F0ZWRfYnVpbGRfbnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgICAgICAgICAjIFJldHVybiBpZiB0aGUgYnVpbGQgbnVtYmVyIGlzIGR1cGxpY2F0ZWQuCisg
ICAgICAgICAgICAjIEZJWE1FOiBza2lwIHRoZSBkdXBsaWNhdGVkIGJ1aWxkIGFuZCBtZXJnZSBy
ZXN0IG9mIHRoZSByZXN1bHRzLgorICAgICAgICAgICAgIyAgICAgICAgTmVlZCB0byBiZSBjYXJl
ZnVsIG9uIHNraXBpbmcgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4KKyAgICAgICAgICAgICMg
ICAgICAgIF9tZXJnZV90ZXN0cyBiZWNhdXNlIHRoZSBwcm9wZXJ0eSBkYXRhIGZvciBlYWNoIHRl
c3QgY291bGQKKyAgICAgICAgICAgICMgICAgICAgIGJlIGFjY3VtdWxhdGVkLgorICAgICAgICAg
ICAgaWYgYnVpbGRfbnVtYmVyID09IGFnZ3JlZ2F0ZWRfYnVpbGRfbnVtYmVyOgorICAgICAgICAg
ICAgICAgIGxvZ2dpbmcud2FybmluZygiRHVwbGljYXRlIGJ1aWxkICVkIGluIGluY3JlbWVudGFs
IGpzb24iLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9udW1iZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgICMgTWVyZ2UgdGhpcyBidWlsZCBpbnRvIGFn
Z3JlYWdhdGVkIHJlc3VsdHMuCisgICAgICAgICAgICBjbHMuX21lcmdlX29uZV9idWlsZChhZ2dy
ZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24sIGluZGV4KQorICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygiTWVyZ2VkIGJ1aWxkICVzLCBtZXJnZWQganNvbjogJXMuIiwKKyAgICAgICAgICAg
ICAgICBidWlsZF9udW1iZXIsIGFnZ3JlZ2F0ZWRfanNvbikKKworICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9tZXJnZV9vbmVfYnVpbGQoY2xzLCBhZ2dy
ZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
aW5jcmVtZW50YWxfaW5kZXgpOgorICAgICAgICAiIiJNZXJnZSBvbmUgYnVpbGQgb2YgaW5jcmVt
ZW50YWwganNvbiBpbnRvIGFnZ3JlZ2F0ZWQganNvbiByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb246IGFnZ3JlZ2F0ZWQganNvbiBvYmplY3QuCisg
ICAgICAgICAgICBpbmNyZW1lbnRhbF9qc29uOiBpbmNyZW1lbnRhbCBqc29uIG9iamVjdC4KKyAg
ICAgICAgICAgIGluY3JlbWVudGFsX2luZGV4OiBpbmRleCBvZiB0aGUgaW5jcmVtZW50YWwganNv
biByZXN1bHRzIHRvIG1lcmdlLgorICAgICAgICAiIiIKKworICAgICAgICBmb3Iga2V5IGluIGlu
Y3JlbWVudGFsX2pzb24ua2V5cygpOgorICAgICAgICAgICAgIyBNZXJnZSBqc29uIHJlc3VsdHMg
ZXhjZXB0ICJ0ZXN0cyIgcHJvcGVydGllcyAocmVzdWx0cywgdGltZXMgZXRjKS4KKyAgICAgICAg
ICAgICMgInRlc3RzIiBwcm9wZXJ0aWVzIHdpbGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorICAg
ICAgICAgICAgaWYga2V5ID09IEpTT05fUkVTVUxUU19URVNUUzoKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorCisgICAgICAgICAgICBpZiBrZXkgaW4gYWdncmVnYXRlZF9qc29uOgorICAgICAg
ICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbltrZXldLmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgMCwgaW5jcmVtZW50YWxfanNvbltrZXldW2luY3JlbWVudGFsX2luZGV4XSkKKyAgICAgICAg
ICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XSA9IFwKKyAgICAgICAgICAgICAgICAgICAgYWdn
cmVnYXRlZF9qc29uW2tleV1bOkpTT05fUkVTVUxUU19NQVhfQlVJTERTXQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XSA9IGluY3JlbWVudGFs
X2pzb25ba2V5XQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9tZXJnZV90ZXN0cyhjbHMs
IGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAgICIiIk1lcmdlICJ0
ZXN0cyIgcHJvcGVydGllczpyZXN1bHRzLCB0aW1lcy4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dyZWdhdGVkIGpzb24gb2JqZWN0LgorICAgICAgICAg
ICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVtZW50YWwganNvbiBvYmplY3QuCisgICAgICAgICIi
IgorCisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaW5jcmVtZW50YWxfanNvbjoKKyAgICAgICAg
ICAgIGluY3JlbWVudGFsX3Rlc3QgPSBpbmNyZW1lbnRhbF9qc29uW3Rlc3RfbmFtZV0KKyAgICAg
ICAgICAgIGlmIHRlc3RfbmFtZSBpbiBhZ2dyZWdhdGVkX2pzb246CisgICAgICAgICAgICAgICAg
YWdncmVnYXRlZF90ZXN0ID0gYWdncmVnYXRlZF9qc29uW3Rlc3RfbmFtZV0KKyAgICAgICAgICAg
ICAgICBjbHMuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZCgKKyAgICAgICAgICAgICAg
ICAgICAgaW5jcmVtZW50YWxfdGVzdFtKU09OX1JFU1VMVFNfUkVTVUxUU10sCisgICAgICAgICAg
ICAgICAgICAgIGFnZ3JlZ2F0ZWRfdGVzdFtKU09OX1JFU1VMVFNfUkVTVUxUU10pCisgICAgICAg
ICAgICAgICAgY2xzLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQoCisgICAgICAgICAg
ICAgICAgICAgIGluY3JlbWVudGFsX3Rlc3RbSlNPTl9SRVNVTFRTX1RJTUVTXSwKKyAgICAgICAg
ICAgICAgICAgICAgYWdncmVnYXRlZF90ZXN0W0pTT05fUkVTVUxUU19USU1FU10pCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvblt0ZXN0X25hbWVdID0g
aW5jcmVtZW50YWxfdGVzdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9pbnNlcnRfaXRl
bV9ydW5fbGVuZ3RoX2VuY29kZWQoY2xzLCBpbmNyZW1lbnRhbF9pdGVtLCBhZ2dyZWdhdGVkX2l0
ZW0pOgorICAgICAgICAiIiJJbnNlcnRzIHRoZSBpbmNyZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29k
ZWQgcmVzdWx0cyBpbnRvIHRoZSBhZ2dyZWdhdGVkCisgICAgICAgICAgIHJ1bi1sZW5ndGggZW5j
b2RlZCByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpbmNyZW1lbnRhbF9p
dGVtOiBpbmNyZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKyAgICAgICAgICAg
IGFnZ3JlZ2F0ZWRfaXRlbTogYWdncmVnYXRlZCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gaW5jcmVtZW50YWxfaXRlbToKKyAg
ICAgICAgICAgIGlmIGxlbihhZ2dyZWdhdGVkX2l0ZW0pIGFuZCBpdGVtWzFdID09IGFnZ3JlZ2F0
ZWRfaXRlbVswXVsxXToKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0ZW1bMF1bMF0gPSBt
aW4oCisgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfaXRlbVswXVswXSArIGl0ZW1bMF0s
IEpTT05fUkVTVUxUU19NQVhfQlVJTERTKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICAjIFRoZSB0ZXN0IGl0ZW0gdmFsdWVzIG5lZWQgdG8gYmUgc3VtbWVkIGZyb20gY29udGlu
dW91cyBydW5zLgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgYW4gb2xkZXIgaXRlbSAo
bm90IG1vc3QgcmVjZW50IG9uZSkgd2hvc2UgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAjIHNh
bWUgYXMgdGhlIG9uZSB0byBpbnNlcnQsIHRoZW4gd2Ugc2hvdWxkIHJlbW92ZSB0aGUgb2xkIGl0
ZW0KKyAgICAgICAgICAgICAgICAjIGZyb20gYWdncmVnYXRlZCBsaXN0LgorICAgICAgICAgICAg
ICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKDEsIGxlbihhZ2dyZWdhdGVkX2l0ZW0pKSk6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1bMV0gPT0gYWdncmVnYXRlZF9pdGVtW2ldWzFdOgor
ICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9pdGVtLnBvcChpKQorCisgICAgICAg
ICAgICAgICAgYWdncmVnYXRlZF9pdGVtLmluc2VydCgwLCBpdGVtKQorCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIF9jaGVja19qc29uKGNscywgYnVpbGRlciwganNvbik6CisgICAgICAgICIi
IkNoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGpzb24gaXMgdmFsaWQuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZSB0aGlzIGpzb24gaXMgZm9yLgorICAg
ICAgICAgICAganNvbjoganNvbiBvYmplY3QgdG8gY2hlY2suCisKKyAgICAgICAgUmV0dXJuczoK
KyAgICAgICAgICAgIFRydWUgaWYgdGhlIGpzb24gaXMgdmFsaWQgb3IKKyAgICAgICAgICAgIEZh
bHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdmVyc2lvbiA9IGpzb25bSlNP
Tl9SRVNVTFRTX1ZFUlNJT05fS0VZXQorICAgICAgICBpZiB2ZXJzaW9uID4gSlNPTl9SRVNVTFRT
X1ZFUlNJT046CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJSZXN1bHRzIEpTT04gdmVyc2lv
biAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQuIiwKKyAgICAgICAgICAgICAgICB2ZXJzaW9uKQorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IGJ1aWxkZXIgaW4ganNvbjoK
KyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkJ1aWxkZXIgJyVzJyBpcyBub3QgaW4ganNvbiBy
ZXN1bHRzLiIsIGJ1aWxkZXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBy
ZXN1bHRzX2Zvcl9idWlsZGVyID0ganNvbltidWlsZGVyXQorICAgICAgICBpZiBub3QgSlNPTl9S
RVNVTFRTX0JVSUxEX05VTUJFUlMgaW4gcmVzdWx0c19mb3JfYnVpbGRlcjoKKyAgICAgICAgICAg
IGxvZ2dpbmcuZXJyb3IoIk1pc3NpbmcgYnVpbGQgbnVtYmVyIGluIGpzb24gcmVzdWx0cy4iKQor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBj
bGFzc21ldGhvZAorICAgIGRlZiBtZXJnZShjbHMsIGJ1aWxkZXIsIGFnZ3JlZ2F0ZWQsIGluY3Jl
bWVudGFsLCBzb3J0X2tleXM9RmFsc2UpOgorICAgICAgICAiIiJNZXJnZSBpbmNyZW1lbnRhbCBq
c29uIGZpbGUgZGF0YSB3aXRoIGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZS4KKyAgICAgICAgICAgIGFn
Z3JlZ2F0ZWQ6IGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBpbmNyZW1l
bnRhbDogaW5jcmVtZW50YWwganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBzb3J0X2tleTog
d2hldGhlciBvciBub3QgdG8gc29ydCBrZXkgd2hlbiBkdW1waW5nIGpzb24gcmVzdWx0cy4KKwor
ICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgTWVyZ2VkIGpzb24gZmlsZSBkYXRhIGlmIG1l
cmdlIHN1Y2NlZWRzIG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIi
IgorCisgICAgICAgIGlmIG5vdCBpbmNyZW1lbnRhbDoKKyAgICAgICAgICAgIGxvZ2dpbmcud2Fy
bmluZygiTm90aGluZyB0byBtZXJnZS4iKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICBsb2dnaW5nLmluZm8oIkxvYWRpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAg
IGluY3JlbWVudGFsX2pzb24gPSBjbHMuX2xvYWRfanNvbihpbmNyZW1lbnRhbCkKKyAgICAgICAg
aWYgbm90IGluY3JlbWVudGFsX2pzb246CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ICAgIGxvZ2dpbmcuaW5mbygiQ2hlY2tpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAg
IGlmIG5vdCBjbHMuX2NoZWNrX2pzb24oYnVpbGRlciwgaW5jcmVtZW50YWxfanNvbik6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBleGlz
dGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBhZ2dyZWdhdGVkX2pzb24gPSBjbHMu
X2xvYWRfanNvbihhZ2dyZWdhdGVkKQorICAgICAgICBpZiBub3QgYWdncmVnYXRlZF9qc29uOgor
ICAgICAgICAgICAgcmV0dXJuIGluY3JlbWVudGFsCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJD
aGVja2luZyBleGlzdGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBpZiBub3QgY2xz
Ll9jaGVja19qc29uKGJ1aWxkZXIsIGFnZ3JlZ2F0ZWRfanNvbik6CisgICAgICAgICAgICByZXR1
cm4gaW5jcmVtZW50YWwKKworICAgICAgICBsb2dnaW5nLmluZm8oIk1lcmdpbmcganNvbiByZXN1
bHRzLi4uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGNscy5fbWVyZ2VfanNv
bigKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bYnVpbGRlcl0sCisgICAgICAgICAg
ICAgICAgaW5jcmVtZW50YWxfanNvbltidWlsZGVyXSk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgbG9nZ2lu
Zy5lcnJvcigiRmFpbGVkIHRvIG1lcmdlIGpzb24gcmVzdWx0czogJXMiLCBzdHIoZXJyKSkKKyAg
ICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYWdncmVnYXRlZF9qc29uW0pTT05fUkVT
VUxUU19WRVJTSU9OX0tFWV0gPSBKU09OX1JFU1VMVFNfVkVSU0lPTgorCisgICAgICAgIHJldHVy
biBjbHMuX2dlbmVyYXRlX2ZpbGVfZGF0YShhZ2dyZWdhdGVkX2pzb24sIHNvcnRfa2V5cykKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB1cGRhdGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUs
IGluY3JlbWVudGFsKToKKyAgICAgICAgIiIiVXBkYXRlIGRhdGFzdG9yZSBqc29uIGZpbGUgZGF0
YSBieSBtZXJnaW5nIGl0IHdpdGggaW5jcmVtZW50YWwganNvbgorICAgICAgICAgICBmaWxlLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIG5hbWUuCisgICAg
ICAgICAgICB0ZXN0X3R5cGU6IHR5cGUgb2YgdGVzdCByZXN1bHRzLgorICAgICAgICAgICAgaW5j
cmVtZW50YWw6IGluY3JlbWVudGFsIGpzb24gZmlsZSBkYXRhIHRvIG1lcmdlLgorCisgICAgICAg
IFJldHVybnM6CisgICAgICAgICAgICBUZXN0RmlsZSBvYmplY3QgaWYgdXBkYXRlIHN1Y2NlZWRz
IG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgorCisgICAgICAg
IGZpbGVzID0gVGVzdEZpbGUuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3RfdHlwZSwgSlNPTl9SRVNV
TFRTX0ZJTEUpCisgICAgICAgIGlmIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IGZpbGVzWzBd
CisgICAgICAgICAgICBuZXdfcmVzdWx0cyA9IGNscy5tZXJnZShidWlsZGVyLCBmaWxlLmRhdGEs
IGluY3JlbWVudGFsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBVc2UgdGhlIGluY3Jl
bWVudGFsIGRhdGEgaWYgdGhlcmUgaXMgbm8gYWdncmVnYXRlZCBmaWxlIHRvIG1lcmdlLgorICAg
ICAgICAgICAgZmlsZSA9IFRlc3RGaWxlKCkKKyAgICAgICAgICAgIGZpbGUuYnVpbGRlciA9IGJ1
aWxkZXIKKyAgICAgICAgICAgIGZpbGUubmFtZSA9IEpTT05fUkVTVUxUU19GSUxFCisgICAgICAg
ICAgICBuZXdfcmVzdWx0cyA9IGluY3JlbWVudGFsCisgICAgICAgICAgICBsb2dnaW5nLmluZm8o
Ik5vIGV4aXN0aW5nIGpzb24gcmVzdWx0cywgaW5jcmVtZW50YWwganNvbiBpcyBzYXZlZC4iKQor
CisgICAgICAgIGlmIG5vdCBuZXdfcmVzdWx0czoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgaWYgbm90IGZpbGUuc2F2ZShuZXdfcmVzdWx0cyk6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIHJldHVybiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJL
aXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzLnB5Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weQko
cmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJl
c3VsdHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU2IEBACisjIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20ganNvbnJlc3VsdHMgaW1wb3J0IEpz
b25SZXN1bHRzCisKK0pTT05fUkVTVUxUU19URU1QTEFURSA9ICgKKyAgICAneyJXZWJraXQiOnsn
CisgICAgJyJhbGxGaXhhYmxlQ291bnQiOltbVEVTVERBVEFfQ09VTlRdXSwnCisgICAgJyJidWls
ZE51bWJlcnMiOltbVEVTVERBVEFfQlVJTEROVU1CRVJTXV0sJworICAgICciY2hyb21lUmV2aXNp
b24iOltbVEVTVERBVEFfQ0hST01FUkVWSVNJT05dXSwnCisgICAgJyJkZWZlcnJlZENvdW50cyI6
W1tURVNUREFUQV9DT1VOVFNdXSwnCisgICAgJyJmaXhhYmxlQ291bnQiOltbVEVTVERBVEFfQ09V
TlRdXSwnCisgICAgJyJmaXhhYmxlQ291bnRzIjpbW1RFU1REQVRBX0NPVU5UU11dLCcKKyAgICAn
InNlY29uZHNTaW5jZUVwb2NoIjpbW1RFU1REQVRBX1RJTUVTXV0sJworICAgICcidGVzdHMiOntb
VEVTVERBVEFfVEVTVFNdfSwnCisgICAgJyJ3ZWJraXRSZXZpc2lvbiI6W1tURVNUREFUQV9XRUJL
SVRSRVZJU0lPTl1dLCcKKyAgICAnIndvbnRmaXhDb3VudHMiOltbVEVTVERBVEFfQ09VTlRTXV0n
CisgICAgJ30sJworICAgICcidmVyc2lvbiI6MycKKyAgICAnfScpCisKK0pTT05fUkVTVUxUU19D
T1VOVFNfVEVNUExBVEUgPSAoCisgICAgJ3snCisgICAgJyJDIjpbVEVTVERBVEFdLCcKKyAgICAn
IkYiOltURVNUREFUQV0sJworICAgICciSSI6W1RFU1REQVRBXSwnCisgICAgJyJPIjpbVEVTVERB
VEFdLCcKKyAgICAnIlAiOltURVNUREFUQV0sJworICAgICciVCI6W1RFU1REQVRBXSwnCisgICAg
JyJYIjpbVEVTVERBVEFdLCcKKyAgICAnIloiOltURVNUREFUQV19JykKKworSlNPTl9SRVNVTFRT
X1RFU1RTX1RFTVBMQVRFID0gKAorICAgICciW1RFU1REQVRBX1RFU1RfTkFNRV0iOnsnCisgICAg
JyJyZXN1bHRzIjpbW1RFU1REQVRBX1RFU1RfUkVTVUxUU11dLCcKKyAgICAnInRpbWVzIjpbW1RF
U1REQVRBX1RFU1RfVElNRVNdXX0nKQorCitKU09OX1JFU1VMVFNfUFJFRklYID0gIkFERF9SRVNV
TFRTKCIKK0pTT05fUkVTVUxUU19TVUZGSVggPSAiKTsiCisKKworY2xhc3MgSnNvblJlc3VsdHNU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNl
bGYuX2J1aWxkZXIgPSAiV2Via2l0IgorCisgICAgZGVmIF9tYWtlX3Rlc3RfanNvbihzZWxmLCB0
ZXN0X2RhdGEpOgorICAgICAgICBpZiBub3QgdGVzdF9kYXRhOgorICAgICAgICAgICAgcmV0dXJu
IEpTT05fUkVTVUxUU19QUkVGSVggKyBKU09OX1JFU1VMVFNfU1VGRklYCisKKyAgICAgICAgKGJ1
aWxkcywgdGVzdHMpID0gdGVzdF9kYXRhCisgICAgICAgIGlmIG5vdCBidWlsZHMgb3Igbm90IHRl
c3RzOgorICAgICAgICAgICAgcmV0dXJuIEpTT05fUkVTVUxUU19QUkVGSVggKyBKU09OX1JFU1VM
VFNfU1VGRklYCisKKyAgICAgICAganNvbiA9IEpTT05fUkVTVUxUU19URU1QTEFURQorCisgICAg
ICAgIGNvdW50cyA9IFtdCisgICAgICAgIGJ1aWxkX251bWJlcnMgPSBbXQorICAgICAgICB3ZWJr
aXRfcmV2aXNpb24gPSBbXQorICAgICAgICBjaHJvbWVfcmV2aXNpb24gPSBbXQorICAgICAgICB0
aW1lcyA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICBjb3Vu
dHMuYXBwZW5kKEpTT05fUkVTVUxUU19DT1VOVFNfVEVNUExBVEUucmVwbGFjZSgiW1RFU1REQVRB
XSIsIGJ1aWxkKSkKKyAgICAgICAgICAgIGJ1aWxkX251bWJlcnMuYXBwZW5kKCIxMDAwJXMiICUg
YnVpbGQpCisgICAgICAgICAgICB3ZWJraXRfcmV2aXNpb24uYXBwZW5kKCIyMDAwJXMiICUgYnVp
bGQpCisgICAgICAgICAgICBjaHJvbWVfcmV2aXNpb24uYXBwZW5kKCIzMDAwJXMiICUgYnVpbGQp
CisgICAgICAgICAgICB0aW1lcy5hcHBlbmQoIjEwMDAwMCVzMDAwIiAlIGJ1aWxkKQorCisgICAg
ICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9DT1VOVFNdIiwgIiwiLmpvaW4oY291
bnRzKSkKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX0NPVU5UXSIsICIs
Ii5qb2luKGJ1aWxkcykpCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9C
VUlMRE5VTUJFUlNdIiwgIiwiLmpvaW4oYnVpbGRfbnVtYmVycykpCisgICAgICAgIGpzb24gPSBq
c29uLnJlcGxhY2UoIltURVNUREFUQV9XRUJLSVRSRVZJU0lPTl0iLCAiLCIuam9pbih3ZWJraXRf
cmV2aXNpb24pKQorICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfQ0hST01F
UkVWSVNJT05dIiwgIiwiLmpvaW4oY2hyb21lX3JldmlzaW9uKSkKKyAgICAgICAganNvbiA9IGpz
b24ucmVwbGFjZSgiW1RFU1REQVRBX1RJTUVTXSIsICIsIi5qb2luKHRpbWVzKSkKKworICAgICAg
ICBqc29uX3Rlc3RzID0gW10KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAg
ICB0ID0gSlNPTl9SRVNVTFRTX1RFU1RTX1RFTVBMQVRFLnJlcGxhY2UoIltURVNUREFUQV9URVNU
X05BTUVdIiwgdGVzdFswXSkKKyAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UoIltURVNUREFUQV9U
RVNUX1JFU1VMVFNdIiwgdGVzdFsxXSkKKyAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UoIltURVNU
REFUQV9URVNUX1RJTUVTXSIsIHRlc3RbMl0pCisgICAgICAgICAgICBqc29uX3Rlc3RzLmFwcGVu
ZCh0KQorCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9URVNUU10iLCAi
LCIuam9pbihqc29uX3Rlc3RzKSkKKworICAgICAgICByZXR1cm4gSlNPTl9SRVNVTFRTX1BSRUZJ
WCArIGpzb24gKyBKU09OX1JFU1VMVFNfU1VGRklYCisKKyAgICBkZWYgX3Rlc3RfbWVyZ2Uoc2Vs
ZiwgYWdncmVnYXRlZF9kYXRhLCBpbmNyZW1lbnRhbF9kYXRhLCBleHBlY3RlZF9kYXRhKToKKyAg
ICAgICAgYWdncmVnYXRlZF9yZXN1bHRzID0gc2VsZi5fbWFrZV90ZXN0X2pzb24oYWdncmVnYXRl
ZF9kYXRhKQorICAgICAgICBpbmNyZW1lbnRhbF9yZXN1bHRzID0gc2VsZi5fbWFrZV90ZXN0X2pz
b24oaW5jcmVtZW50YWxfZGF0YSkKKyAgICAgICAgbWVyZ2VkX3Jlc3VsdHMgPSBKc29uUmVzdWx0
cy5tZXJnZShzZWxmLl9idWlsZGVyLAorICAgICAgICAgICAgYWdncmVnYXRlZF9yZXN1bHRzLCBp
bmNyZW1lbnRhbF9yZXN1bHRzLCBzb3J0X2tleXM9VHJ1ZSkKKworICAgICAgICBpZiBleHBlY3Rl
ZF9kYXRhOgorICAgICAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX21ha2VfdGVzdF9q
c29uKGV4cGVjdGVkX2RhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXJnZWRf
cmVzdWx0cywgZXhwZWN0ZWRfcmVzdWx0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UobWVyZ2VkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAg
ICAgICAgIyBFbXB0eSBpbmNyZW1lbnRhbCByZXN1bHRzIGpzb24uCisgICAgICAgICMgTm90aGlu
ZyB0byBtZXJnZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdn
cmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAi
WzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRh
bCByZXN1bHRzCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgIyBFeHBlY3Qgbm8gbWVy
Z2UgaGFwcGVucy4KKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgIyBObyBhY3R1YWwgaW5j
cmVtZW50YWwgdGVzdCByZXN1bHRzIChvbmx5IHByZWZpeCBhbmQgc3VmZml4KSB0byBtZXJnZS4K
KyAgICAgICAgIyBOb3RoaW5nIHRvIG1lcmdlLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAor
ICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJd
LCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAg
ICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbXSwgW10pLAorICAgICAg
ICAgICAgIyBFeHBlY3RlZCBubyBtZXJnZSBoYXBwZW5zLgorICAgICAgICAgICAgTm9uZSkKKwor
ICAgICAgICAjIE5vIGV4aXN0aW5nIGFnZ3JlZ2F0ZWQgcmVzdWx0cy4KKyAgICAgICAgIyBNZXJn
ZWQgcmVzdWx0cyA9PSBuZXcgaW5jcmVtZW50YWwgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5fdGVz
dF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICBO
b25lLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyIy
IiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAor
ICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwg
W1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pKQorCisgICAgICAg
ICMgU2luZ2xlIHRlc3QgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgSW5jcmVtZW50YWwgcmVz
dWx0cyBoYXMgdGhlIGxhdGVzdCBidWlsZCBhbmQgc2FtZSB0ZXN0IHJlc3VsdHMgZm9yCisgICAg
ICAgICMgdGhhdCBydW4uCisgICAgICAgICMgSW5zZXJ0IHRoZSBpbmNyZW1lbnRhbCByZXN1bHRz
IGF0IHRoZSBmaXJzdCBwbGFjZSBhbmQgc3VtIG51bWJlcgorICAgICAgICAjIG9mIHJ1bnMgZm9y
ICJQIiAoMjAwICsgMSkgdG8gZ2V0IG1lcmdlZCByZXN1bHRzLgorICAgICAgICBzZWxmLl90ZXN0
X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChb
IjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSks
CisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwg
W1siMDAxLmh0bWwiLCAiWzEsXCJQXCJdIiwgIlsxLFwiMFwiXSJdXSksCisgICAgICAgICAgICAj
IEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5o
dG1sIiwgIlsyMDEsXCJQXCJdIiwgIlsyMDEsXCIwXCJdIl1dKSkKKworICAgICAgICAjIFNpbmds
ZSB0ZXN0IGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMgaGFz
IHRoZSBsYXRlc3QgYnVpbGQgYnV0IGRpZmZlcmVudCB0ZXN0IHJlc3VsdHMKKyAgICAgICAgIyBm
b3IgdGhhdCBydW4uCisgICAgICAgICMgSW5zZXJ0IHRoZSBpbmNyZW1lbnRhbCByZXN1bHRzIGF0
IHRoZSBmaXJzdCBwbGFjZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAg
ICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0
bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNy
ZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIl0sIFtbIjAwMS5odG1sIiwgIlsxLCBc
IklcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cwor
ICAgICAgICAgICAgKFsiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJJXCJdLFsy
MDAsXCJQXCJdIiwgIlsxLFwiMVwiXSxbMjAwLFwiMFwiXSJdXSkpCisKKyAgICAgICAgIyBTaW5n
bGUgdGVzdCBmb3Igc2luZ2xlIHJ1bi4KKyAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzIGhh
cyB0aGUgbGF0ZXN0IGJ1aWxkIGJ1dCBkaWZmZXJlbnQgdGVzdCByZXN1bHRzCisgICAgICAgICMg
Zm9yIHRoYXQgcnVuLgorICAgICAgICAjIFRoZSB0ZXN0ICJyZXN1bHRzIiBhbmQgInRpbWVzIiBu
ZWVkIHRvIGJlIGNvbnRpbnVvdXMsIHNvIHRoZSBvbGQKKyAgICAgICAgIyBbMTAsIkkiXSByZXN1
bHQgc2hvdWxkIGJlIGRyb3BwZWQgYmVjYXVzZSBhIG5ldyByZXN1bHQgb2Ygc2FtZSB0eXBlIFsx
LCJJIl0KKyAgICAgICAgIyBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiBbMjAwLCJQIl0uCisgICAg
ICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cwor
ICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdLFsxMCxc
IklcIl0iLCAiWzIwMCxcIjBcIl0sWzEwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEluY3Jl
bWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJJ
XCJdIiwgIlsxLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAg
ICAgICAgICAgIChbIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsxLFwiSVwiXSxbMjAw
LFwiUFwiXSIsICJbMSxcIjFcIl0sWzIwMCxcIjBcIl0iXV0pKQorCisgICAgICAgICMgTXVsdGlw
bGUgdGVzdHMgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgQWxsIHRlc3RzIGhhdmUgaW5jcmVt
ZW50YWwgdXBkYXRlcy4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMg
QWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwi
LCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwgWyIwMDIuaHRtbCIsICJbMTAwLFwiSVwi
XSIsICJbMTAwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMK
KyAgICAgICAgICAgIChbIjMiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJQXCJdIiwgIlsxLFwiMFwi
XSJdLCBbIjAwMi5odG1sIiwgIlsxLFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAg
ICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJdLCBbWyIw
MDEuaHRtbCIsICJbMjAxLFwiUFwiXSIsICJbMjAxLFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsx
MDEsXCJJXCJdIiwgIlsxMDEsXCIxXCJdIl1dKSkKKworICAgICAgICAjIE11bHRpcGxlIHRlc3Rz
IGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIE5vdCBhbGwgdGVzdHMgaGF2ZSB1cGRhdGUuCisg
ICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0
cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwg
IlsyMDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEwMCxcIklcIl0iLCAiWzEwMCxcIjFcIl0i
XV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyIz
Il0sIFtbIjAwMi5odG1sIiwgIlsxLFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAg
ICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJdLCBbWyIw
MDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsx
MDEsXCJJXCJdIiwgIlsxMDEsXCIxXCJdIl1dKSkKKworICAgICAgICAjIFNpbmdsZSB0ZXN0IGZv
ciBtdWx0aXBsZSBydW5zLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAg
IyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRt
bCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEluY3Jl
bWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjQiLCAiMyJdLCBbWyIwMDEuaHRtbCIsICJb
MiwgXCJJXCJdIiwgIlsyLFwiMlwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3Vs
dHMKKyAgICAgICAgICAgIChbIjQiLCAiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIs
XCJJXCJdLFsyMDAsXCJQXCJdIiwgIlsyLFwiMlwiXSxbMjAwLFwiMFwiXSJdXSkpCisKKyAgICAg
ICAgIyBNdWx0aXBsZSB0ZXN0cyBmb3IgbXVsdGlwbGUgcnVucy4KKyAgICAgICAgc2VsZi5fdGVz
dF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAo
WyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwg
WyIwMDIuaHRtbCIsICJbMTAsXCJaXCJdIiwgIlsxMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAg
IyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyI0IiwgIjMiXSwgW1siMDAxLmh0
bWwiLCAiWzIsIFwiSVwiXSIsICJbMixcIjJcIl0iXSwgWyIwMDIuaHRtbCIsICJbMSxcIkNcIl0i
LCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cworICAgICAg
ICAgICAgKFsiNCIsICIzIiwgIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMixcIklcIl0sWzIw
MCxcIlBcIl0iLCAiWzIsXCIyXCJdLFsyMDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEsXCJD
XCJdLFsxMCxcIlpcIl0iLCAiWzEsXCIxXCJdLFsxMCxcIjBcIl0iXV0pKQorCisgICAgICAgICMg
VGVzdCB0aGUgYnVpbGQgaW4gaW5jcmVtZW50YWwgcmVzdWx0cyBpcyBvbGRlciB0aGFuIHRoZSBt
b3N0IHJlY2VudAorICAgICAgICAjIGJ1aWxkIGluIGFnZ3JlZ2F0ZWQgcmVzdWx0cy4KKyAgICAg
ICAgIyBUaGUgaW5jcmVtZW50YWwgcmVzdWx0cyBzaG91bGQgYmUgZHJvcHBlZCBhbmQgbm8gbWVy
Z2UgaGFwcGVucy4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdn
cmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAi
WzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRh
bCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIl0sIFtbIjAwMS5odG1sIiwgIlsxLCBcIlBcIl0i
LCAiWzEsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgbm8gbWVyZ2UgaGFwcGVu
cy4KKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgIyBUZXN0IHRoZSBidWlsZCBpbiBpbmNy
ZW1lbnRhbCByZXN1bHRzIGlzIHNhbWUgYXMgdGhlIGJ1aWxkIGluCisgICAgICAgICMgYWdncmVn
YXRlZCByZXN1bHRzLgorICAgICAgICAjIFRoZSBpbmNyZW1lbnRhbCByZXN1bHRzIHNob3VsZCBi
ZSBkcm9wcGVkIGFuZCBubyBtZXJnZSBoYXBwZW5zLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdl
KAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAi
MSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAg
ICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiLCAiMiJdLCBb
WyIwMDEuaHRtbCIsICJbMiwgXCJQXCJdIiwgIlsyLFwiMFwiXSJdXSksCisgICAgICAgICAgICAj
IEV4cGVjdGVkIG5vIG1lcmdlIGhhcHBlbnMuCisgICAgICAgICAgICBOb25lKQorCitpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0
dGVzdC5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBX
ZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL3Rlc3RmaWxlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZpbGUucHkJKHJldmlz
aW9uIDY0NjA0KQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0Zmls
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBA
IC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0yOSwxNiArMjksMTQgQEAKIGZyb20g
ZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwogCi1mcm9tIGdvb2dsZS5h
cHBlbmdpbmUuZXh0IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQg
aW1wb3J0IGRiCiAKK2Zyb20gbW9kZWwuZGF0YXN0b3JlZmlsZSBpbXBvcnQgRGF0YVN0b3JlRmls
ZQogCi1jbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CisKK2NsYXNzIFRlc3RGaWxlKERhdGFTdG9y
ZUZpbGUpOgogICAgIGJ1aWxkZXIgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgbmFtZSA9IGRi
LlN0cmluZ1Byb3BlcnR5KCkKICAgICB0ZXN0X3R5cGUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0g
ICAgYmxvYl9rZXkgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgZGF0ZSA9IGRiLkRhdGVUaW1l
UHJvcGVydHkoYXV0b19ub3dfYWRkPVRydWUpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYg
ZGVsZXRlX2ZpbGUoY2xzLCBrZXksIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbGltaXQpOgpA
QCAtNjMsNyArNjEsNyBAQCBjbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIHJldHVy
biBUcnVlCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZ2V0X2ZpbGVzKGNscywgYnVpbGRl
ciwgdGVzdF90eXBlLCBuYW1lLCBsaW1pdCk6CisgICAgZGVmIGdldF9maWxlcyhjbHMsIGJ1aWxk
ZXIsIHRlc3RfdHlwZSwgbmFtZSwgbG9hZF9kYXRhPVRydWUsIGxpbWl0PTEpOgogICAgICAgICBx
dWVyeSA9IFRlc3RGaWxlLmFsbCgpCiAgICAgICAgIGlmIGJ1aWxkZXI6CiAgICAgICAgICAgICBx
dWVyeSA9IHF1ZXJ5LmZpbHRlcigiYnVpbGRlciA9IiwgYnVpbGRlcikKQEAgLTcyLDUxICs3MCw1
NCBAQCBjbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIGlmIG5hbWU6CiAgICAgICAg
ICAgICBxdWVyeSA9IHF1ZXJ5LmZpbHRlcigibmFtZSA9IiwgbmFtZSkKIAotICAgICAgICByZXR1
cm4gcXVlcnkub3JkZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGZpbGVzID0gcXVl
cnkub3JkZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGlmIGxvYWRfZGF0YToKKyAg
ICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUubG9hZF9k
YXRhKCkKKworICAgICAgICByZXR1cm4gZmlsZXMKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBhZGRfZmlsZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgYmxvYl9pbmZvKToKKyAgICBkZWYg
YWRkX2ZpbGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGRhdGEpOgogICAgICAgICBm
aWxlID0gVGVzdEZpbGUoKQogICAgICAgICBmaWxlLmJ1aWxkZXIgPSBidWlsZGVyCiAgICAgICAg
IGZpbGUudGVzdF90eXBlID0gdGVzdF90eXBlCi0gICAgICAgIGZpbGUubmFtZSA9IGJsb2JfaW5m
by5maWxlbmFtZQotICAgICAgICBmaWxlLmJsb2Jfa2V5ID0gc3RyKGJsb2JfaW5mby5rZXkoKSkK
LSAgICAgICAgZmlsZS5wdXQoKQorICAgICAgICBmaWxlLm5hbWUgPSBuYW1lCisKKyAgICAgICAg
aWYgbm90IGZpbGUuc2F2ZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAg
ICAgbG9nZ2luZy5pbmZvKAotICAgICAgICAgICAgIkZpbGUgc2F2ZWQsIGJ1aWxkZXI6ICVzLCB0
ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywgYmxvYiBrZXk6ICVzLiIsCi0gICAgICAgICAgICBidWls
ZGVyLCB0ZXN0X3R5cGUsIGZpbGUubmFtZSwgZmlsZS5ibG9iX2tleSkKKyAgICAgICAgICAgICJG
aWxlIHNhdmVkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGtleTogJXMu
IiwKKyAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5k
YXRhX2tleXMpKQogCiAgICAgICAgIHJldHVybiBmaWxlCiAKICAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgdXBkYXRlX2ZpbGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbyk6Ci0g
ICAgICAgIGZpbGVzID0gY2xzLmdldF9maWxlcyhidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5m
by5maWxlbmFtZSwgMSkKKyAgICBkZWYgdXBkYXRlKGNscywgYnVpbGRlciwgdGVzdF90eXBlLCBu
YW1lLCBkYXRhKToKKyAgICAgICAgZmlsZXMgPSBjbHMuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3Rf
dHlwZSwgbmFtZSkKICAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAgICAgICAgcmV0dXJuIGNs
cy5hZGRfZmlsZShidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbykKKyAgICAgICAgICAgIHJl
dHVybiBjbHMuYWRkX2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBkYXRhKQogCiAgICAg
ICAgIGZpbGUgPSBmaWxlc1swXQotICAgICAgICBvbGRfYmxvYl9pbmZvID0gYmxvYnN0b3JlLkJs
b2JJbmZvLmdldChmaWxlLmJsb2Jfa2V5KQotICAgICAgICBpZiBvbGRfYmxvYl9pbmZvOgotICAg
ICAgICAgICAgb2xkX2Jsb2JfaW5mby5kZWxldGUoKQotCi0gICAgICAgIGZpbGUuYnVpbGRlciA9
IGJ1aWxkZXIKLSAgICAgICAgZmlsZS50ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKLSAgICAgICAgZmls
ZS5uYW1lID0gYmxvYl9pbmZvLmZpbGVuYW1lCi0gICAgICAgIGZpbGUuYmxvYl9rZXkgPSBzdHIo
YmxvYl9pbmZvLmtleSgpKQotICAgICAgICBmaWxlLmRhdGUgPSBkYXRldGltZS5ub3coKQotICAg
ICAgICBmaWxlLnB1dCgpCisgICAgICAgIGlmIG5vdCBmaWxlLnNhdmUoZGF0YSk6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgIGxvZ2dpbmcuaW5mbygKLSAgICAgICAgICAgICJG
aWxlIHJlcGxhY2VkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGJsb2Ig
a2V5OiAlcy4iLAotICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlLm5hbWUsIGZp
bGUuYmxvYl9rZXkpCisgICAgICAgICAgICAiRmlsZSByZXBsYWNlZCwgYnVpbGRlcjogJXMsIHRl
c3RfdHlwZTogJXMsIG5hbWU6ICVzLCBkYXRhIGtleTogJXMuIiwKKyAgICAgICAgICAgIGJ1aWxk
ZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5kYXRhX2tleXMpKQogCiAgICAgICAg
IHJldHVybiBmaWxlCiAKLSAgICBkZWYgX2RlbGV0ZV9hbGwoc2VsZik6Ci0gICAgICAgIGlmIHNl
bGYuYmxvYl9rZXk6Ci0gICAgICAgICAgICBibG9iX2luZm8gPSBibG9ic3RvcmUuQmxvYkluZm8u
Z2V0KHNlbGYuYmxvYl9rZXkpCi0gICAgICAgICAgICBpZiBibG9iX2luZm86Ci0gICAgICAgICAg
ICAgICAgYmxvYl9pbmZvLmRlbGV0ZSgpCisgICAgZGVmIHNhdmUoc2VsZiwgZGF0YSk6CisgICAg
ICAgIGlmIG5vdCBzZWxmLnNhdmVfZGF0YShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgICAgIHNlbGYuZGF0ZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlbGYucHV0
KCkKIAorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZWxldGVfYWxsKHNlbGYpOgor
ICAgICAgICBzZWxmLmRlbGV0ZV9kYXRhKCkKICAgICAgICAgc2VsZi5kZWxldGUoKQpJbmRleDog
V2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3VwbG9h
ZGZvcm0uaHRtbAkocmV2aXNpb24gNjQ2MDQpCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2Vy
dmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4
LDkgQEAKICAgICAgICAgPHRkPjxpbnB1dCBjbGFzcz1pbnB1dHRleHQgdHlwZT0idGV4dCIgbmFt
ZT0idGVzdHR5cGUiIHZhbHVlPSIiLz48L3RkPgogICAgIDwvdHI+CiAgICAgPC90YWJsZT4KKyAg
ICA8YnI+CisgICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9ImNoZWNrYm94IiBuYW1l
PSJpbmNyZW1lbnRhbCI+SW5jcmVtZW50YWwgcmVzdWx0cywgbWVyZ2Ugd2l0aCBzZXJ2ZXIgZmls
ZS48L2Rpdj4KKyAgICA8YnI+CiAgICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9ImZp
bGUiIG5hbWU9ImZpbGUiIG11bHRpcGxlPjwvZGl2PgogICAgIDxicj4KICAgICA8ZGl2PjxpbnB1
dCBjbGFzcz1idXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIj48L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63475</attachid>
            <date>2010-08-04 11:58:23 -0700</date>
            <delta_ts>2010-08-04 16:52:10 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>ae_merge.patch</filename>
            <type>text/plain</type>
            <size>51978</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY0NjU1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDgtMDQgIFZpY3RvciBXYW5nICA8dmlj
dG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLS4gQWRkIHJlc3VsdC5qc29uIGluY3JlbWVudGFsIG1lcmdpbmcgZnVuY3Rp
b25hbGl0eSB0byB0ZXN0IHJlc3VsdHMgYXBwIGVuZ2luZS4KKyAgICAgICAgLS4gYmxvYnN0b3Jl
IGlzIG5vdCBzdWl0YWJsZSBmb3IgQUUgZGF0YSBtZXJnaW5nIGFuZCB0aGVyZSBpcyBubyBBUEkg
dG8KKyAgICAgICAgICAgcHJvZ3JhbWF0aWNhbGx5IGVkaXQgZXhpc3RpbmcgYmxvYiBvciB3cml0
ZSBhIG5ldyBvbmUgeWV0LCBzbyByZXBsYWNlIGJsb2JzdG9yZQorICAgICAgICAgICB3aXRoIGRh
dGFzdG9yZS4gSWYgZmlsZSBpcyBvdmVyc2l6ZSAoPjEwMDAqMTAwMCBieXRlcyksIHN0b3JlIGZp
bGUgZGF0YSBpbgorICAgICAgICAgICBtdWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAgICAg
ICAgLS4gRml4IHN0eWxlcy4KKworICAgICAgICBUZXN0OiBqc29ucmVzdWx0c191bml0dGVzdCB0
byB0ZXN0IG1lcmdpbmcgbG9naWNzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODU5OQorCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9oYW5k
bGVycy9kYXNoYm9hcmRoYW5kbGVyLnB5OgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvaGFu
ZGxlcnMvbWVudS5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3Rm
aWxlaGFuZGxlci5weToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL21haW4ucHk6CisgICAg
ICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5OgorICAgICAgICAq
IFRlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weTogQWRkZWQuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weTogQWRkZWQu
CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0ZmlsZS5weToKKyAgICAgICAg
KiBUZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWw6CisKIDIwMTAtMDgt
MDQgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21haW4u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tYWluLnB5CShy
ZXZpc2lvbiA2NDY1NSkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbWFpbi5weQko
d29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3
ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC00MiwxNyArNDIsMTUgQEAgcm91dGVzID0gWwog
ICAgICgnL2Rhc2hib2FyZHMvdXBkYXRlJywgZGFzaGJvYXJkaGFuZGxlci5VcGRhdGVEYXNoYm9h
cmRGaWxlKSwKICAgICAoJy9kYXNoYm9hcmRzLyhbXj9dKyk/JywgZGFzaGJvYXJkaGFuZGxlci5H
ZXREYXNoYm9hcmRGaWxlKSwKICAgICAoJy90ZXN0ZmlsZS9kZWxldGUnLCB0ZXN0ZmlsZWhhbmRs
ZXIuRGVsZXRlRmlsZSksCi0gICAgKCcvdGVzdGZpbGUvdXBsb2FkdXJsJywgdGVzdGZpbGVoYW5k
bGVyLkdldFVwbG9hZFVybCksCiAgICAgKCcvdGVzdGZpbGUvdXBsb2FkJywgdGVzdGZpbGVoYW5k
bGVyLlVwbG9hZCksCiAgICAgKCcvdGVzdGZpbGUvdXBsb2FkZm9ybScsIHRlc3RmaWxlaGFuZGxl
ci5VcGxvYWRGb3JtKSwKICAgICAoJy90ZXN0ZmlsZS8/JywgdGVzdGZpbGVoYW5kbGVyLkdldEZp
bGUpLAotICAgICgnL3VwbG9hZGZhaWwnLCB0ZXN0ZmlsZWhhbmRsZXIuVXBsb2FkU3RhdHVzKSwK
LSAgICAoJy91cGxvYWRzdWNjZXNzJywgdGVzdGZpbGVoYW5kbGVyLlVwbG9hZFN0YXR1cyksCiAg
ICAgKCcvKnwvbWVudScsIG1lbnUuTWVudSksCiBdCiAKIGFwcGxpY2F0aW9uID0gd2ViYXBwLldT
R0lBcHBsaWNhdGlvbihyb3V0ZXMsIGRlYnVnPVRydWUpCiAKKwogZGVmIG1haW4oKToKICAgICBy
dW5fd3NnaV9hcHAoYXBwbGljYXRpb24pCiAKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvaGFuZGxlcnMvZGFzaGJvYXJkaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL2Rhc2hib2FyZGhhbmRsZXIucHkJKHJldmlz
aW9uIDY0NjU1KQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9kYXNo
Ym9hcmRoYW5kbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKKyMK
ICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTM4LDYgKzM4LDcg
QEAgZnJvbSBtb2RlbC5kYXNoYm9hcmRmaWxlIGltcG9ydCBEYXNoYm9hcgogCiBQQVJBTV9GSUxF
ID0gImZpbGUiCiAKKwogZGVmIGdldF9jb250ZW50X3R5cGUoZmlsZW5hbWUpOgogICAgIHJldHVy
biBtaW1ldHlwZXMuZ3Vlc3NfdHlwZShmaWxlbmFtZSlbMF0gb3IgImFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbSIKIApJbmRleDogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy9t
ZW51LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaGFuZGxl
cnMvbWVudS5weQkocmV2aXNpb24gNjQ2NTUpCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2Vy
dmVyL2hhbmRsZXJzL21lbnUucHkJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
IAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNjEsNCAr
NjEsMyBAQCBjbGFzcyBNZW51KHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAKICAgICAgICAgc2Vs
Zi5yZXNwb25zZS5vdXQud3JpdGUoCiAgICAgICAgICAgICB0ZW1wbGF0ZS5yZW5kZXIoInRlbXBs
YXRlcy9tZW51Lmh0bWwiLCB0ZW1wbGF0ZV92YWx1ZXMpKQotCkluZGV4OiBXZWJLaXRUb29scy9U
ZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5w
eQkocmV2aXNpb24gNjQ2NTUpCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRs
ZXJzL3Rlc3RmaWxlaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
ICMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSMgCisjCiAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zMCwx
MSArMzAsMTAgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB1cmxsaWIKIAogZnJvbSBnb29nbGUu
YXBwZW5naW5lLmFwaSBpbXBvcnQgdXNlcnMKLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1w
b3J0IGJsb2JzdG9yZQogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgd2ViYXBwCi1m
cm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBvcnQgYmxvYnN0b3JlX2hhbmRsZXJz
CiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBvcnQgdGVtcGxhdGUKIAorZnJv
bSBtb2RlbC5qc29ucmVzdWx0cyBpbXBvcnQgSnNvblJlc3VsdHMKIGZyb20gbW9kZWwudGVzdGZp
bGUgaW1wb3J0IFRlc3RGaWxlCiAKIFBBUkFNX0JVSUxERVIgPSAiYnVpbGRlciIKQEAgLTQzLDEw
ICs0MiwxMSBAQCBQQVJBTV9GSUxFID0gImZpbGUiCiBQQVJBTV9OQU1FID0gIm5hbWUiCiBQQVJB
TV9LRVkgPSAia2V5IgogUEFSQU1fVEVTVF9UWVBFID0gInRlc3R0eXBlIgorUEFSQU1fSU5DUkVN
RU5UQUwgPSAiaW5jcmVtZW50YWwiCiAKIAogY2xhc3MgRGVsZXRlRmlsZSh3ZWJhcHAuUmVxdWVz
dEhhbmRsZXIpOgotICAgICIiIkRlbGV0ZSB0ZXN0IGZpbGUgZm9yIGEgZ2l2ZW4gYnVpbGRlciBh
bmQgbmFtZSBmcm9tIGRhdGFzdG9yZSAobWV0YWRhdGEpIGFuZCBibG9ic3RvcmUgKGZpbGUgZGF0
YSkuIiIiCisgICAgIiIiRGVsZXRlIHRlc3QgZmlsZSBmb3IgYSBnaXZlbiBidWlsZGVyIGFuZCBu
YW1lIGZyb20gZGF0YXN0b3JlLiIiIgogCiAgICAgZGVmIGdldChzZWxmKToKICAgICAgICAga2V5
ID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9LRVkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIERl
bGV0ZUZpbGUod2ViYXBwLlJlcXVlc3RIYW5kbGVyKToKICAgICAgICAgbmFtZSA9IHNlbGYucmVx
dWVzdC5nZXQoUEFSQU1fTkFNRSkKIAogICAgICAgICBsb2dnaW5nLmRlYnVnKAotICAgICAgICAg
ICAgIkRlbGV0aW5nIEZpbGUsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywg
YmxvYiBrZXk6ICVzLiIsCisgICAgICAgICAgICAiRGVsZXRpbmcgRmlsZSwgYnVpbGRlcjogJXMs
IHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLCBrZXk6ICVzLiIsCiAgICAgICAgICAgICBidWlsZGVy
LCB0ZXN0X3R5cGUsIG5hbWUsIGtleSkKIAogICAgICAgICBUZXN0RmlsZS5kZWxldGVfZmlsZShr
ZXksIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgMTAwKQpAQCAtNjUsNyArNjUsNyBAQCBjbGFz
cyBEZWxldGVGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgICAgICAlIChidWls
ZGVyLCB0ZXN0X3R5cGUsIG5hbWUpKQogCiAKLWNsYXNzIEdldEZpbGUoYmxvYnN0b3JlX2hhbmRs
ZXJzLkJsb2JzdG9yZURvd25sb2FkSGFuZGxlcik6CitjbGFzcyBHZXRGaWxlKHdlYmFwcC5SZXF1
ZXN0SGFuZGxlcik6CiAgICAgIiIiR2V0IGZpbGUgY29udGVudCBvciBsaXN0IG9mIGZpbGVzIGZv
ciBnaXZlbiBidWlsZGVyIGFuZCBuYW1lLiIiIgogCiAgICAgZGVmIF9nZXRfZmlsZV9saXN0KHNl
bGYsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSk6CkBAIC03Nyw3ICs3Nyw4IEBAIGNsYXNzIEdl
dEZpbGUoYmxvYnN0b3JlX2hhbmRsZXJzLkJsb2JzdG8KICAgICAgICAgICAgIG5hbWU6IGZpbGUg
bmFtZQogICAgICAgICAiIiIKIAotICAgICAgICBmaWxlcyA9IFRlc3RGaWxlLmdldF9maWxlcyhi
dWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIDEwMCkKKyAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5n
ZXRfZmlsZXMoCisgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGxvYWRfZGF0
YT1GYWxzZSwgbGltaXQ9MTAwKQogICAgICAgICBpZiBub3QgZmlsZXM6CiAgICAgICAgICAgICBs
b2dnaW5nLmluZm8oIkZpbGUgbm90IGZvdW5kLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywg
bmFtZTogJXMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLCB0ZXN0X3R5cGUs
IG5hbWUpCkBAIC0xMDMsMTYgKzEwNCwxNSBAQCBjbGFzcyBHZXRGaWxlKGJsb2JzdG9yZV9oYW5k
bGVycy5CbG9ic3RvCiAgICAgICAgICAgICBuYW1lOiBmaWxlIG5hbWUKICAgICAgICAgIiIiCiAK
LSAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoYnVpbGRlciwgdGVzdF90eXBlLCBu
YW1lLCAxKQorICAgICAgICBmaWxlcyA9IFRlc3RGaWxlLmdldF9maWxlcygKKyAgICAgICAgICAg
IGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbG9hZF9kYXRhPVRydWUsIGxpbWl0PTEpCiAgICAg
ICAgIGlmIG5vdCBmaWxlczoKICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiRmlsZSBub3QgZm91
bmQsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcy4iLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSkKICAgICAgICAgICAgIHJldHVy
bgogCi0gICAgICAgIGJsb2Jfa2V5ID0gZmlsZXNbMF0uYmxvYl9rZXkKLSAgICAgICAgYmxvYl9p
bmZvID0gYmxvYnN0b3JlLmdldChibG9iX2tleSkKLSAgICAgICAgaWYgYmxvYl9pbmZvOgotICAg
ICAgICAgICAgc2VsZi5zZW5kX2Jsb2IoYmxvYl9pbmZvLCAidGV4dC9wbGFpbiIpCisgICAgICAg
IHNlbGYucmVzcG9uc2UuaGVhZGVyc1siQ29udGVudC1UeXBlIl0gPSAidGV4dC9wbGFpbjsgY2hh
cnNldD11dGYtOCIKKyAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoZmlsZXNbMF0uZGF0
YSkKIAogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgIGJ1aWxkZXIgPSBzZWxmLnJlcXVlc3Qu
Z2V0KFBBUkFNX0JVSUxERVIpCkBAIC0xMzMsODkgKzEzMyw2OSBAQCBjbGFzcyBHZXRGaWxlKGJs
b2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2Zp
bGVfY29udGVudChidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCiAKIAotY2xhc3MgR2V0VXBsb2Fk
VXJsKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgIiIiR2V0IGFuIHVybCBmb3IgdXBsb2Fk
aW5nIGZpbGUgdG8gYmxvYnN0b3JlLiBBIHNwZWNpYWwgdXJsIGlzIHJlcXVpcmVkIGZvciBlYWNo
IGJsb2Jzb3RyZSB1cGxvYWQuIiIiCi0KLSAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICB1cGxv
YWRfdXJsID0gYmxvYnN0b3JlLmNyZWF0ZV91cGxvYWRfdXJsKCIvdGVzdGZpbGUvdXBsb2FkIikK
LSAgICAgICAgbG9nZ2luZy5pbmZvKCJHZXR0aW5nIHVwbG9hZCB1cmw6ICVzLiIsIHVwbG9hZF91
cmwpCi0gICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKHVwbG9hZF91cmwpCi0KLQotY2xh
c3MgVXBsb2FkKGJsb2JzdG9yZV9oYW5kbGVycy5CbG9ic3RvcmVVcGxvYWRIYW5kbGVyKToKLSAg
ICAiIiJVcGxvYWQgZmlsZSB0byBibG9ic3RvcmUuIiIiCitjbGFzcyBVcGxvYWQod2ViYXBwLlJl
cXVlc3RIYW5kbGVyKToKKyAgICAiIiJVcGxvYWQgdGVzdCByZXN1bHRzIGZpbGUgdG8gZGF0YXN0
b3JlLiIiIgogCiAgICAgZGVmIHBvc3Qoc2VsZik6Ci0gICAgICAgIHVwbG9hZGVkX2ZpbGVzID0g
c2VsZi5nZXRfdXBsb2FkcygiZmlsZSIpCi0gICAgICAgIGlmIG5vdCB1cGxvYWRlZF9maWxlczoK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLl91cGxvYWRfZG9uZShbKCJNaXNzaW5nIHVwbG9hZCBm
aWxlIGZpZWxkLiIpXSkKKyAgICAgICAgZmlsZV9wYXJhbXMgPSBzZWxmLnJlcXVlc3QuUE9TVC5n
ZXRhbGwoUEFSQU1fRklMRSkKKyAgICAgICAgaWYgbm90IGZpbGVfcGFyYW1zOgorICAgICAgICAg
ICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIkZBSUw6IG1pc3NpbmcgdXBsb2FkIGZpbGUgZmll
bGQuIikKKyAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGJ1aWxkZXIgPSBzZWxmLnJlcXVl
c3QuZ2V0KFBBUkFNX0JVSUxERVIpCiAgICAgICAgIGlmIG5vdCBidWlsZGVyOgotICAgICAgICAg
ICAgZm9yIGJsb2JfaW5mbyBpbiB1cGxvYWRlZF9maWxlczoKLSAgICAgICAgICAgICAgICBibG9i
X2luZm8uZGVsZXRlKCkKLSAgICAKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl91cGxvYWRfZG9u
ZShbKCJNaXNzaW5nIGJ1aWxkZXIgcGFyYW1ldGVyIGluIHVwbG9hZCByZXF1ZXN0LiIpXSkKKyAg
ICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMOiBtaXNzaW5nIGJ1aWxkZXIg
cGFyYW1ldGVyLiIpCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICB0ZXN0X3R5cGUgPSBz
ZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX1RFU1RfVFlQRSkKKyAgICAgICAgaW5jcmVtZW50YWwgPSBz
ZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX0lOQ1JFTUVOVEFMKQogCiAgICAgICAgIGxvZ2dpbmcuZGVi
dWcoCiAgICAgICAgICAgICAiUHJvY2Vzc2luZyB1cGxvYWQgcmVxdWVzdCwgYnVpbGRlcjogJXMs
IHRlc3RfdHlwZTogJXMuIiwKICAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSkKIAorICAg
ICAgICAjIFRoZXJlIGFyZSB0d28gcG9zc2libGUgdHlwZXMgb2YgZWFjaCBmaWxlX3BhcmFtcyBp
biB0aGUgcmVxdWVzdDoKKyAgICAgICAgIyBvbmUgZmlsZSBpdGVtIG9yIGEgbGlzdCBvZiBmaWxl
IGl0ZW1zLgorICAgICAgICAjIE5vcm1hbGl6ZSBmaWxlX3BhcmFtcyB0byBhIGZpbGUgaXRlbSBs
aXN0LgorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGxvZ2dpbmcuZGVidWcoInRlc3Q6ICVz
LCB0eXBlOiVzIiwgZmlsZV9wYXJhbXMsIHR5cGUoZmlsZV9wYXJhbXMpKQorICAgICAgICBmb3Ig
aXRlbSBpbiBmaWxlX3BhcmFtczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0s
IGxpc3QpIGFuZCBub3QgaXNpbnN0YW5jZShpdGVtLCB0dXBsZSk6CisgICAgICAgICAgICAgICAg
aXRlbSA9IFtpdGVtXQorICAgICAgICAgICAgZmlsZXMuZXh0ZW5kKGl0ZW0pCisKICAgICAgICAg
ZXJyb3JzID0gW10KLSAgICAgICAgZm9yIGJsb2JfaW5mbyBpbiB1cGxvYWRlZF9maWxlczoKLSAg
ICAgICAgICAgIHRmID0gVGVzdEZpbGUudXBkYXRlX2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBi
bG9iX2luZm8pCi0gICAgICAgICAgICBpZiBub3QgdGY6CisgICAgICAgIGZvciBmaWxlIGluIGZp
bGVzOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlLmZpbGVuYW1lLmxvd2VyKCkKKyAgICAg
ICAgICAgIGlmICgoaW5jcmVtZW50YWwgYW5kIGZpbGVuYW1lID09ICJyZXN1bHRzLmpzb24iKSBv
cgorICAgICAgICAgICAgICAgIChmaWxlbmFtZSA9PSAiaW5jcmVtZW50YWxfcmVzdWx0cy5qc29u
IikpOgorICAgICAgICAgICAgICAgICMgTWVyZ2UgaW5jcmVtZW50YWwganNvbiByZXN1bHRzLgor
ICAgICAgICAgICAgICAgIHNhdmVkX2ZpbGUgPSBKc29uUmVzdWx0cy51cGRhdGUoYnVpbGRlciwg
dGVzdF90eXBlLCBmaWxlLnZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBzYXZlZF9maWxlID0gVGVzdEZpbGUudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBidWls
ZGVyLCB0ZXN0X3R5cGUsIGZpbGUuZmlsZW5hbWUsIGZpbGUudmFsdWUpCisKKyAgICAgICAgICAg
IGlmIG5vdCBzYXZlZF9maWxlOgogICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoCiAgICAg
ICAgICAgICAgICAgICAgICJVcGxvYWQgZmFpbGVkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAl
cywgbmFtZTogJXMuIiAlCi0gICAgICAgICAgICAgICAgICAgIChidWlsZGVyLCB0ZXN0X3R5cGUs
IGJsb2JfaW5mby5maWxlbmFtZSkpCi0gICAgICAgICAgICAgICAgYmxvYl9pbmZvLmRlbGV0ZSgp
Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYuX3VwbG9hZF9kb25lKGVycm9ycykKLQotICAgIGRlZiBf
dXBsb2FkX2RvbmUoc2VsZiwgZXJyb3JzKToKLSAgICAgICAgbG9nZ2luZy5pbmZvKCJ1cGxvYWQg
ZG9uZS4iKQotCi0gICAgICAgIGVycm9yX21lc3NhZ2VzID0gW10KLSAgICAgICAgZm9yIGVycm9y
IGluIGVycm9yczoKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbyhlcnJvcikKLSAgICAgICAgICAg
IGVycm9yX21lc3NhZ2VzLmFwcGVuZCgiZXJyb3I9JXMiICUgdXJsbGliLnF1b3RlKGVycm9yKSkK
KyAgICAgICAgICAgICAgICAgICAgKGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5maWxlbmFtZSkp
CiAKLSAgICAgICAgaWYgZXJyb3JfbWVzc2FnZXM6Ci0gICAgICAgICAgICByZWRpcmVjdF91cmwg
PSAiL3VwbG9hZGZhaWw/JXMiICUgIiYiLmpvaW4oZXJyb3JfbWVzc2FnZXMpCisgICAgICAgIGlm
IGVycm9yczoKKyAgICAgICAgICAgIG1lc3NhZ2VzID0gIkZBSUw6ICIgKyAiOyAiLmpvaW4oZXJy
b3JzKQorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKG1lc3NhZ2VzKQorICAgICAgICAgICAg
c2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDUwMCwgbWVzc2FnZXMpCisgICAgICAgICAgICBzZWxm
LnJlc3BvbnNlLm91dC53cml0ZSgiRkFJTCIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZWRpcmVjdF91cmwgPSAiL3VwbG9hZHN1Y2Nlc3MiCi0KLSAgICAgICAgbG9nZ2luZy5pbmZvKHJl
ZGlyZWN0X3VybCkKLSAgICAgICAgIyBCbG9ic3RvcmVVcGxvYWRIYW5kbGVyIHJlcXVpcmVzIHJl
ZGlyZWN0IGF0IHRoZSBlbmQuCi0gICAgICAgIHNlbGYucmVkaXJlY3QocmVkaXJlY3RfdXJsKQor
ICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDIwMCkKKyAgICAgICAgICAgIHNl
bGYucmVzcG9uc2Uub3V0LndyaXRlKCJPSyIpCiAKIAogY2xhc3MgVXBsb2FkRm9ybSh3ZWJhcHAu
UmVxdWVzdEhhbmRsZXIpOgotICAgICIiIlNob3cgYSBmb3JtIHNvIHVzZXIgY2FuIHN1Ym1pdCBh
IGZpbGUgdG8gYmxvYnN0b3JlLiIiIgorICAgICIiIlNob3cgYSBmb3JtIHNvIHVzZXIgY2FuIHVw
bG9hZCBhIGZpbGUuIiIiCiAKICAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICB1cGxvYWRfdXJs
ID0gYmxvYnN0b3JlLmNyZWF0ZV91cGxvYWRfdXJsKCIvdGVzdGZpbGUvdXBsb2FkIikKICAgICAg
ICAgdGVtcGxhdGVfdmFsdWVzID0gewotICAgICAgICAgICAgInVwbG9hZF91cmwiOiB1cGxvYWRf
dXJsLAorICAgICAgICAgICAgInVwbG9hZF91cmwiOiAiL3Rlc3RmaWxlL3VwbG9hZCIsCiAgICAg
ICAgIH0KICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUodGVtcGxhdGUucmVuZGVyKCJ0
ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX3ZhbHVlcykpCi0KLWNsYXNzIFVwbG9hZFN0YXR1
cyh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIlJldHVybiBzdGF0dXMgb2YgZmlsZSB1
cGxvYWRpbmciIiIKLQotICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIGxvZ2dpbmcuZGVidWco
IlVwZGF0ZSBzdGF0dXMiKQotCi0gICAgICAgIGlmIHNlbGYucmVxdWVzdC5wYXRoID09ICIvdXBs
b2Fkc3VjY2VzcyI6Ci0gICAgICAgICAgICBzZWxmLnJlc3BvbnNlLnNldF9zdGF0dXMoMjAwKQot
ICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIk9LIikKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIGVycm9ycyA9IHNlbGYucmVxdWVzdC5wYXJhbXMuZ2V0YWxsKCJlcnJvciIp
Ci0gICAgICAgICAgICBpZiBlcnJvcnM6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZXMgPSAiRkFJ
TDogIiArICI7ICIuam9pbihlcnJvcnMpCi0gICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5n
KG1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uuc2V0X3N0YXR1cyg1MDAs
IG1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlM
IikKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGFzaGJvYXJkZmls
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2Rh
c2hib2FyZGZpbGUucHkJKHJldmlzaW9uIDY0NjU1KQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9tb2RlbC9kYXNoYm9hcmRmaWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NyBAQAogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAogIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEzLDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotIyAKKyMKICMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
QEAgLTM2LDYgKzM2LDcgQEAgZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKIFNW
Tl9QQVRIX0RBU0hCT0FSRCA9ICgiaHR0cDovL3NyYy5jaHJvbWl1bS5vcmcvdmlld3ZjL2Nocm9t
ZS90cnVuay90b29scy8iCiAgICAgImRhc2hib2FyZHMvIikKIAorCiBjbGFzcyBEYXNoYm9hcmRG
aWxlKGRiLk1vZGVsKToKICAgICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkoKQogICAgIGRhdGEg
PSBkYi5CbG9iUHJvcGVydHkoKQpAQCAtOTIsNyArOTMsNyBAQCBjbGFzcyBEYXNoYm9hcmRGaWxl
KGRiLk1vZGVsKToKICAgICAgICAgaWYgbm90IGZpbGVzOgogICAgICAgICAgICAgbG9nZ2luZy5p
bmZvKCJObyBleGlzdGluZyBmaWxlLCBhZGRlZCBhcyBuZXcgZmlsZS4iKQogICAgICAgICAgICAg
cmV0dXJuIGNscy5hZGRfZmlsZShuYW1lLCBkYXRhKQotICAgICAgICAKKwogICAgICAgICBsb2dn
aW5nLmRlYnVnKCJVcGRhdGluZyBleGlzdGluZyBmaWxlLiIpCiAgICAgICAgIGZpbGUgPSBmaWxl
c1swXQogICAgICAgICBmaWxlLmRhdGEgPSBkYXRhCkluZGV4OiBXZWJLaXRUb29scy9UZXN0UmVz
dWx0U2VydmVyL21vZGVsL2RhdGFzdG9yZWZpbGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3RvcmVmaWxlLnB5CShyZXZpc2lvbiAwKQor
KysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3RvcmVmaWxlLnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gZGF0
ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgbG9nZ2luZworCitmcm9tIGdvb2dsZS5hcHBl
bmdpbmUuZXh0IGltcG9ydCBkYgorCitNQVhfREFUQV9FTlRSWV9QRVJfRklMRSA9IDEwCitNQVhf
RU5UUllfTEVOID0gMTAwMCAqIDEwMDAKKworCitjbGFzcyBEYXRhRW50cnkoZGIuTW9kZWwpOgor
ICAgICIiIkRhdGFzdG9yZSBlbnRyeSB0aGF0IHN0b3JlcyBvbmUgc2VnbWFudCBvZiBmaWxlIGRh
dGEKKyAgICAgICAoPDEwMDAqMTAwMCBieXRlcykuCisgICAgIiIiCisKKyAgICBkYXRhID0gZGIu
QmxvYlByb3BlcnR5KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXQoY2xzLCBrZXkp
OgorICAgICAgICByZXR1cm4gZGIuZ2V0KGtleSkKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBr
ZXkpOgorICAgICAgICByZXR1cm4gZGIuZ2V0KGtleSkKKworCitjbGFzcyBEYXRhU3RvcmVGaWxl
KGRiLk1vZGVsKToKKyAgICAiIiJUaGlzIGNsYXNzIHN0b3JlcyBmaWxlIGluIGRhdGFzdG9yZS4K
KyAgICAgICBJZiBhIGZpbGUgaXMgb3ZlcnNpemUgKD4xMDAwKjEwMDAgYnl0ZXMpLCB0aGUgZmls
ZSBpcyBzcGxpdCBpbnRvCisgICAgICAgbXVsdGlwbGUgc2VnbWVudHMgYW5kIHN0b3JlZCBpbiBt
dWx0aXBsZSBkYXRhc3RvcmUgZW50cmllcy4KKyAgICAiIiIKKworICAgIG5hbWUgPSBkYi5TdHJp
bmdQcm9wZXJ0eSgpCisgICAgZGF0YV9rZXlzID0gZGIuTGlzdFByb3BlcnR5KGRiLktleSkKKyAg
ICBkYXRlID0gZGIuRGF0ZVRpbWVQcm9wZXJ0eShhdXRvX25vd19hZGQ9VHJ1ZSkKKworICAgIGRh
dGEgPSBOb25lCisKKyAgICBkZWYgZGVsZXRlX2RhdGEoc2VsZiwga2V5cz1Ob25lKToKKyAgICAg
ICAgaWYgbm90IGtleXM6CisgICAgICAgICAgICBrZXlzID0gc2VsZi5kYXRhX2tleXMKKworICAg
ICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBkYXRhX2VudHJ5ID0gRGF0YUVudHJ5
LmdldChrZXkpCisgICAgICAgICAgICBpZiBkYXRhX2VudHJ5OgorICAgICAgICAgICAgICAgIGRh
dGFfZW50cnkuZGVsZXRlKCkKKworICAgIGRlZiBzYXZlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAg
ICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJObyBkYXRhIHRv
IHNhdmUuIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIGxlbihkYXRh
KSA+IChNQVhfREFUQV9FTlRSWV9QRVJfRklMRSAqIE1BWF9FTlRSWV9MRU4pOgorICAgICAgICAg
ICAgbG9nZ2luZy5lcnJvcigiRmlsZSB0b28gYmlnLCBjYW4ndCBzYXZlIHRvIGRhdGFzdG9yZTog
JWRLIiwKKyAgICAgICAgICAgICAgICBsZW4oZGF0YSkgLyAxMDI0KQorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisKKyAgICAgICAgc3RhcnQgPSAwCisgICAgICAgIGtleXMgPSBzZWxmLmRhdGFf
a2V5cworICAgICAgICBzZWxmLmRhdGFfa2V5cyA9IFtdCisgICAgICAgIHdoaWxlIHN0YXJ0IDwg
bGVuKGRhdGEpOgorICAgICAgICAgICAgaWYga2V5czoKKyAgICAgICAgICAgICAgICBrZXkgPSBr
ZXlzLnBvcCgwKQorICAgICAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtl
eSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YV9lbnRyeToKKyAgICAgICAgICAgICAgICAg
ICAgbG9nZ2luZy53YXJuaW5nKCJGb3VuZCBrZXksIGJ1dCBubyBkYXRhIGVudHJ5OiAlcyIsIGtl
eSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeSgpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkoKQorCisg
ICAgICAgICAgICBkYXRhX2VudHJ5LmRhdGEgPSBkYi5CbG9iKGRhdGFbc3RhcnQ6IHN0YXJ0ICsg
TUFYX0VOVFJZX0xFTl0pCisgICAgICAgICAgICBkYXRhX2VudHJ5LnB1dCgpCisKKyAgICAgICAg
ICAgIGxvZ2dpbmcuaW5mbygiRGF0YSBzYXZlZDogJXMuIiwgZGF0YV9lbnRyeS5rZXkoKSkKKyAg
ICAgICAgICAgIHNlbGYuZGF0YV9rZXlzLmFwcGVuZChkYXRhX2VudHJ5LmtleSgpKQorCisgICAg
ICAgICAgICBzdGFydCA9IHN0YXJ0ICsgTUFYX0VOVFJZX0xFTgorCisgICAgICAgIGlmIGtleXM6
CisgICAgICAgICAgICBzZWxmLmRlbGV0ZV9kYXRhKGtleXMpCisKKyAgICAgICAgc2VsZi5kYXRh
ID0gZGF0YQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbG9hZF9kYXRhKHNlbGYp
OgorICAgICAgICBpZiBub3Qgc2VsZi5kYXRhX2tleXM6CisgICAgICAgICAgICBsb2dnaW5nLndh
cm5pbmcoIk5vIGRhdGEgdG8gbG9hZC4iKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICBkYXRhID0gW10KKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLmRhdGFfa2V5czoKKyAgICAg
ICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBkYXRhIGZvciBrZXk6ICVzLiIsIGtleSkKKyAg
ICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtleSkKKyAgICAgICAgICAgIGlm
IG5vdCBkYXRhX2VudHJ5OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIk5vIGRhdGEg
Zm91bmQgZm9yIGtleTogJXMuIiwga2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGRhdGFfZW50cnkuZGF0YSkKKworICAgICAgICBzZWxm
LmRhdGEgPSAiIi5qb2luKGRhdGEpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3Rv
cmVmaWxlLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHMucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5w
eQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNv
bnJlc3VsdHMucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzY1IEBACisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gZGphbmdvLnV0aWxzIGlt
cG9ydCBzaW1wbGVqc29uCitpbXBvcnQgbG9nZ2luZworCitmcm9tIG1vZGVsLnRlc3RmaWxlIGlt
cG9ydCBUZXN0RmlsZQorCitKU09OX1JFU1VMVFNfRklMRSA9ICJyZXN1bHRzLmpzb24iCitKU09O
X1JFU1VMVFNfUFJFRklYID0gIkFERF9SRVNVTFRTKCIKK0pTT05fUkVTVUxUU19TVUZGSVggPSAi
KTsiCitKU09OX1JFU1VMVFNfVkVSU0lPTl9LRVkgPSAidmVyc2lvbiIKK0pTT05fUkVTVUxUU19C
VUlMRF9OVU1CRVJTID0gImJ1aWxkTnVtYmVycyIKK0pTT05fUkVTVUxUU19URVNUUyA9ICJ0ZXN0
cyIKK0pTT05fUkVTVUxUU19SRVNVTFRTID0gInJlc3VsdHMiCitKU09OX1JFU1VMVFNfVElNRVMg
PSAidGltZXMiCitKU09OX1JFU1VMVFNfVkVSU0lPTiA9IDMKK0pTT05fUkVTVUxUU19NQVhfQlVJ
TERTID0gNzUwCisKKworY2xhc3MgSnNvblJlc3VsdHMob2JqZWN0KToKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgX3N0cmlwX3ByZWZpeF9zdWZmaXgoY2xzLCBkYXRhKToKKyAgICAgICAgIiIi
U3RyaXAgb3V0IHByZWZpeCBhbmQgc3VmZml4IG9mIGpzb24gcmVzdWx0cyBzdHJpbmcuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGE6IGpzb24gZmlsZSBjb250ZW50LgorCisgICAg
ICAgIFJldHVybnM6CisgICAgICAgICAgICBqc29uIHN0cmluZyB3aXRob3V0IHByZWZpeCBhbmQg
c3VmZml4LgorICAgICAgICAiIiIKKworICAgICAgICBhc3NlcnQoZGF0YS5zdGFydHN3aXRoKEpT
T05fUkVTVUxUU19QUkVGSVgpKQorICAgICAgICBhc3NlcnQoZGF0YS5lbmRzd2l0aChKU09OX1JF
U1VMVFNfU1VGRklYKSkKKworICAgICAgICByZXR1cm4gZGF0YVtsZW4oSlNPTl9SRVNVTFRTX1BS
RUZJWCk6CisgICAgICAgICAgICAgICAgICAgIGxlbihkYXRhKSAtIGxlbihKU09OX1JFU1VMVFNf
U1VGRklYKV0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZ2VuZXJhdGVfZmlsZV9kYXRh
KGNscywganNvbiwgc29ydF9rZXlzPUZhbHNlKToKKyAgICAgICAgIiIiR2l2ZW4ganNvbiBzdHJp
bmcsIGdlbmVyYXRlIGZpbGUgY29udGVudCBkYXRhIGJ5IGFkZGluZworICAgICAgICAgICBwcmVm
aXggYW5kIHN1ZmZpeC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAganNvbjoganNvbiBz
dHJpbmcgd2l0aG91dCBwcmVmaXggYW5kIHN1ZmZpeC4KKworICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgICAganNvbiBmaWxlIGRhdGEuCisgICAgICAgICIiIgorCisgICAgICAgIGRhdGEgPSBz
aW1wbGVqc29uLmR1bXBzKGpzb24sIHNlcGFyYXRvcnM9KCcsJywgJzonKSwKKyAgICAgICAgICAg
IHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAgIHJldHVybiBKU09OX1JFU1VMVFNfUFJFRklY
ICsgZGF0YSArIEpTT05fUkVTVUxUU19TVUZGSVgKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBfbG9hZF9qc29uKGNscywgZmlsZV9kYXRhKToKKyAgICAgICAgIiIiTG9hZCBqc29uIGZpbGUg
dG8gYSBweXRob24gb2JqZWN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmaWxlX2Rh
dGE6IGpzb24gZmlsZSBjb250ZW50LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBq
c29uIG9iamVjdCBvcgorICAgICAgICAgICAgTm9uZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIK
KworICAgICAgICBqc29uX3Jlc3VsdHNfc3RyID0gY2xzLl9zdHJpcF9wcmVmaXhfc3VmZml4KGZp
bGVfZGF0YSkKKyAgICAgICAgaWYgbm90IGpzb25fcmVzdWx0c19zdHI6CisgICAgICAgICAgICBs
b2dnaW5nLndhcm5pbmcoIk5vIGpzb24gcmVzdWx0cyBkYXRhLiIpCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVqc29uLmxv
YWRzKGpzb25fcmVzdWx0c19zdHIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAg
ICAgICAgICAgIGxvZ2dpbmcuZGVidWcoanNvbl9yZXN1bHRzX3N0cikKKyAgICAgICAgICAgIGxv
Z2dpbmcuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGpzb24gcmVzdWx0czogJXMiLCBzdHIoZXJyKSkK
KyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX21l
cmdlX2pzb24oY2xzLCBhZ2dyZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24pOgorICAgICAg
ICAiIiJNZXJnZSBpbmNyZW1lbnRhbCBqc29uIGludG8gYWdncmVnYXRlZCBqc29uIHJlc3VsdHMu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbjogYWdncmVnYXRl
ZCBqc29uIG9iamVjdC4KKyAgICAgICAgICAgIGluY3JlbWVudGFsX2pzb246IGluY3JlbWVudGFs
IGpzb24gb2JqZWN0LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlIGlmIG1l
cmdlIHN1Y2NlZWRzIG9yCisgICAgICAgICAgICBGYWxzZSBvbiBmYWlsdXJlLgorICAgICAgICAi
IiIKKworICAgICAgICAjIE1lcmdlIG5vbiB0ZXN0cyBwcm9wZXJ0eSBkYXRhLgorICAgICAgICAj
IFRlc3RzIHByb3BlcnRpZXMgYXJlIG1lcmdlZCBpbiBfbWVyZ2VfdGVzdHMuCisgICAgICAgIGlm
IG5vdCBjbHMuX21lcmdlX25vbl90ZXN0X2RhdGEoYWdncmVnYXRlZF9qc29uLCBpbmNyZW1lbnRh
bF9qc29uKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgTWVyZ2UgdGVz
dHMgcmVzdWx0cyBhbmQgdGltZXMKKyAgICAgICAgaW5jcmVtZW50YWxfdGVzdHMgPSBpbmNyZW1l
bnRhbF9qc29uW0pTT05fUkVTVUxUU19URVNUU10KKyAgICAgICAgaWYgaW5jcmVtZW50YWxfdGVz
dHM6CisgICAgICAgICAgICBhZ2dyZWdhdGVkX3Rlc3RzID0gYWdncmVnYXRlZF9qc29uW0pTT05f
UkVTVUxUU19URVNUU10KKyAgICAgICAgICAgIGNscy5fbWVyZ2VfdGVzdHMoYWdncmVnYXRlZF90
ZXN0cywgaW5jcmVtZW50YWxfdGVzdHMpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBj
bGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2Vfbm9uX3Rlc3RfZGF0YShjbHMsIGFnZ3JlZ2F0ZWRf
anNvbiwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAgICIiIk1lcmdlIGluY3JlbWVudGFsIG5v
biB0ZXN0cyBwcm9wZXJ0eSBkYXRhIGludG8gYWdncmVnYXRlZCBqc29uIHJlc3VsdHMuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbjogYWdncmVnYXRlZCBqc29u
IG9iamVjdC4KKyAgICAgICAgICAgIGluY3JlbWVudGFsX2pzb246IGluY3JlbWVudGFsIGpzb24g
b2JqZWN0LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlIGlmIG1lcmdlIHN1
Y2NlZWRzIG9yCisgICAgICAgICAgICBGYWxzZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIKKwor
ICAgICAgICBpbmNyZW1lbnRhbF9idWlsZHMgPSBpbmNyZW1lbnRhbF9qc29uW0pTT05fUkVTVUxU
U19CVUlMRF9OVU1CRVJTXQorICAgICAgICBhZ2dyZWdhdGVkX2J1aWxkcyA9IGFnZ3JlZ2F0ZWRf
anNvbltKU09OX1JFU1VMVFNfQlVJTERfTlVNQkVSU10KKyAgICAgICAgYWdncmVnYXRlZF9idWls
ZF9udW1iZXIgPSBpbnQoYWdncmVnYXRlZF9idWlsZHNbMF0pCisgICAgICAgICMgTG9vcCB0aHJv
dWdoIGFsbCBpbmNyZW1lbnRhbCBidWlsZHMsIHN0YXJ0IGZyb20gdGhlIG9sZGVzdCBydW4uCisg
ICAgICAgIGZvciBpbmRleCBpbiByZXZlcnNlZChyYW5nZShsZW4oaW5jcmVtZW50YWxfYnVpbGRz
KSkpOgorICAgICAgICAgICAgYnVpbGRfbnVtYmVyID0gaW50KGluY3JlbWVudGFsX2J1aWxkc1tp
bmRleF0pCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJNZXJnaW5nIGJ1aWxkICVzLCBpbmNy
ZW1lbnRhbCBqc29uIGluZGV4OiAlZC4iLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlciwg
aW5kZXgpCisKKyAgICAgICAgICAgICMgUmV0dXJuIGlmIG5vdCBhbGwgYnVpbGQgbnVtYmVycyBp
biB0aGUgaW5jcmVtZW50YWwganNvbiByZXN1bHRzCisgICAgICAgICAgICAjIGFyZSBuZXdlciB0
aGFuIHRoZSBtb3N0IHJlY2VudCBidWlsZCBpbiB0aGUgYWdncmVnYXRlZCByZXN1bHRzLgorICAg
ICAgICAgICAgIyBGSVhNRTogbWFrZSB0aGlzIGNhc2Ugd29yay4KKyAgICAgICAgICAgIGlmIGJ1
aWxkX251bWJlciA8IGFnZ3JlZ2F0ZWRfYnVpbGRfbnVtYmVyOgorICAgICAgICAgICAgICAgIGxv
Z2dpbmcud2FybmluZygoIkJ1aWxkICVkIGluIGluY3JlbWVudGFsIGpzb24gaXMgb2xkZXIgdGhh
biAiCisgICAgICAgICAgICAgICAgICAgICJ0aGUgbW9zdCByZWNlbnQgYnVpbGQgaW4gYWdncmVn
YXRlZCByZXN1bHRzOiAlZCIpLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9udW1iZXIsIGFn
Z3JlZ2F0ZWRfYnVpbGRfbnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgICAgICAgICAjIFJldHVybiBpZiB0aGUgYnVpbGQgbnVtYmVyIGlzIGR1cGxpY2F0ZWQuCisg
ICAgICAgICAgICAjIEZJWE1FOiBza2lwIHRoZSBkdXBsaWNhdGVkIGJ1aWxkIGFuZCBtZXJnZSBy
ZXN0IG9mIHRoZSByZXN1bHRzLgorICAgICAgICAgICAgIyAgICAgICAgTmVlZCB0byBiZSBjYXJl
ZnVsIG9uIHNraXBpbmcgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4KKyAgICAgICAgICAgICMg
ICAgICAgIF9tZXJnZV90ZXN0cyBiZWNhdXNlIHRoZSBwcm9wZXJ0eSBkYXRhIGZvciBlYWNoIHRl
c3QgY291bGQKKyAgICAgICAgICAgICMgICAgICAgIGJlIGFjY3VtdWxhdGVkLgorICAgICAgICAg
ICAgaWYgYnVpbGRfbnVtYmVyID09IGFnZ3JlZ2F0ZWRfYnVpbGRfbnVtYmVyOgorICAgICAgICAg
ICAgICAgIGxvZ2dpbmcud2FybmluZygiRHVwbGljYXRlIGJ1aWxkICVkIGluIGluY3JlbWVudGFs
IGpzb24iLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9udW1iZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgICMgTWVyZ2UgdGhpcyBidWlsZCBpbnRvIGFn
Z3JlYWdhdGVkIHJlc3VsdHMuCisgICAgICAgICAgICBjbHMuX21lcmdlX29uZV9idWlsZChhZ2dy
ZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24sIGluZGV4KQorICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygiTWVyZ2VkIGJ1aWxkICVzLCBtZXJnZWQganNvbjogJXMuIiwKKyAgICAgICAgICAg
ICAgICBidWlsZF9udW1iZXIsIGFnZ3JlZ2F0ZWRfanNvbikKKworICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9tZXJnZV9vbmVfYnVpbGQoY2xzLCBhZ2dy
ZWdhdGVkX2pzb24sIGluY3JlbWVudGFsX2pzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
aW5jcmVtZW50YWxfaW5kZXgpOgorICAgICAgICAiIiJNZXJnZSBvbmUgYnVpbGQgb2YgaW5jcmVt
ZW50YWwganNvbiBpbnRvIGFnZ3JlZ2F0ZWQganNvbiByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb246IGFnZ3JlZ2F0ZWQganNvbiBvYmplY3QuCisg
ICAgICAgICAgICBpbmNyZW1lbnRhbF9qc29uOiBpbmNyZW1lbnRhbCBqc29uIG9iamVjdC4KKyAg
ICAgICAgICAgIGluY3JlbWVudGFsX2luZGV4OiBpbmRleCBvZiB0aGUgaW5jcmVtZW50YWwganNv
biByZXN1bHRzIHRvIG1lcmdlLgorICAgICAgICAiIiIKKworICAgICAgICBmb3Iga2V5IGluIGlu
Y3JlbWVudGFsX2pzb24ua2V5cygpOgorICAgICAgICAgICAgIyBNZXJnZSBqc29uIHJlc3VsdHMg
ZXhjZXB0ICJ0ZXN0cyIgcHJvcGVydGllcyAocmVzdWx0cywgdGltZXMgZXRjKS4KKyAgICAgICAg
ICAgICMgInRlc3RzIiBwcm9wZXJ0aWVzIHdpbGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorICAg
ICAgICAgICAgaWYga2V5ID09IEpTT05fUkVTVUxUU19URVNUUzoKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorCisgICAgICAgICAgICBpZiBrZXkgaW4gYWdncmVnYXRlZF9qc29uOgorICAgICAg
ICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbltrZXldLmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgMCwgaW5jcmVtZW50YWxfanNvbltrZXldW2luY3JlbWVudGFsX2luZGV4XSkKKyAgICAgICAg
ICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XSA9IFwKKyAgICAgICAgICAgICAgICAgICAgYWdn
cmVnYXRlZF9qc29uW2tleV1bOkpTT05fUkVTVUxUU19NQVhfQlVJTERTXQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XSA9IGluY3JlbWVudGFs
X2pzb25ba2V5XQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9tZXJnZV90ZXN0cyhjbHMs
IGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbik6CisgICAgICAgICIiIk1lcmdlICJ0
ZXN0cyIgcHJvcGVydGllczpyZXN1bHRzLCB0aW1lcy4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgYWdncmVnYXRlZF9qc29uOiBhZ2dyZWdhdGVkIGpzb24gb2JqZWN0LgorICAgICAgICAg
ICAgaW5jcmVtZW50YWxfanNvbjogaW5jcmVtZW50YWwganNvbiBvYmplY3QuCisgICAgICAgICIi
IgorCisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaW5jcmVtZW50YWxfanNvbjoKKyAgICAgICAg
ICAgIGluY3JlbWVudGFsX3Rlc3QgPSBpbmNyZW1lbnRhbF9qc29uW3Rlc3RfbmFtZV0KKyAgICAg
ICAgICAgIGlmIHRlc3RfbmFtZSBpbiBhZ2dyZWdhdGVkX2pzb246CisgICAgICAgICAgICAgICAg
YWdncmVnYXRlZF90ZXN0ID0gYWdncmVnYXRlZF9qc29uW3Rlc3RfbmFtZV0KKyAgICAgICAgICAg
ICAgICBjbHMuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZCgKKyAgICAgICAgICAgICAg
ICAgICAgaW5jcmVtZW50YWxfdGVzdFtKU09OX1JFU1VMVFNfUkVTVUxUU10sCisgICAgICAgICAg
ICAgICAgICAgIGFnZ3JlZ2F0ZWRfdGVzdFtKU09OX1JFU1VMVFNfUkVTVUxUU10pCisgICAgICAg
ICAgICAgICAgY2xzLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQoCisgICAgICAgICAg
ICAgICAgICAgIGluY3JlbWVudGFsX3Rlc3RbSlNPTl9SRVNVTFRTX1RJTUVTXSwKKyAgICAgICAg
ICAgICAgICAgICAgYWdncmVnYXRlZF90ZXN0W0pTT05fUkVTVUxUU19USU1FU10pCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvblt0ZXN0X25hbWVdID0g
aW5jcmVtZW50YWxfdGVzdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9pbnNlcnRfaXRl
bV9ydW5fbGVuZ3RoX2VuY29kZWQoY2xzLCBpbmNyZW1lbnRhbF9pdGVtLCBhZ2dyZWdhdGVkX2l0
ZW0pOgorICAgICAgICAiIiJJbnNlcnRzIHRoZSBpbmNyZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29k
ZWQgcmVzdWx0cyBpbnRvIHRoZSBhZ2dyZWdhdGVkCisgICAgICAgICAgIHJ1bi1sZW5ndGggZW5j
b2RlZCByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpbmNyZW1lbnRhbF9p
dGVtOiBpbmNyZW1lbnRhbCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKyAgICAgICAgICAg
IGFnZ3JlZ2F0ZWRfaXRlbTogYWdncmVnYXRlZCBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gaW5jcmVtZW50YWxfaXRlbToKKyAg
ICAgICAgICAgIGlmIGxlbihhZ2dyZWdhdGVkX2l0ZW0pIGFuZCBpdGVtWzFdID09IGFnZ3JlZ2F0
ZWRfaXRlbVswXVsxXToKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0ZW1bMF1bMF0gPSBt
aW4oCisgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfaXRlbVswXVswXSArIGl0ZW1bMF0s
IEpTT05fUkVTVUxUU19NQVhfQlVJTERTKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICAjIFRoZSB0ZXN0IGl0ZW0gdmFsdWVzIG5lZWQgdG8gYmUgc3VtbWVkIGZyb20gY29udGlu
dW91cyBydW5zLgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgYW4gb2xkZXIgaXRlbSAo
bm90IG1vc3QgcmVjZW50IG9uZSkgd2hvc2UgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAjIHNh
bWUgYXMgdGhlIG9uZSB0byBpbnNlcnQsIHRoZW4gd2Ugc2hvdWxkIHJlbW92ZSB0aGUgb2xkIGl0
ZW0KKyAgICAgICAgICAgICAgICAjIGZyb20gYWdncmVnYXRlZCBsaXN0LgorICAgICAgICAgICAg
ICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKDEsIGxlbihhZ2dyZWdhdGVkX2l0ZW0pKSk6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1bMV0gPT0gYWdncmVnYXRlZF9pdGVtW2ldWzFdOgor
ICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlZF9pdGVtLnBvcChpKQorCisgICAgICAg
ICAgICAgICAgYWdncmVnYXRlZF9pdGVtLmluc2VydCgwLCBpdGVtKQorCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIF9jaGVja19qc29uKGNscywgYnVpbGRlciwganNvbik6CisgICAgICAgICIi
IkNoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGpzb24gaXMgdmFsaWQuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZSB0aGlzIGpzb24gaXMgZm9yLgorICAg
ICAgICAgICAganNvbjoganNvbiBvYmplY3QgdG8gY2hlY2suCisKKyAgICAgICAgUmV0dXJuczoK
KyAgICAgICAgICAgIFRydWUgaWYgdGhlIGpzb24gaXMgdmFsaWQgb3IKKyAgICAgICAgICAgIEZh
bHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdmVyc2lvbiA9IGpzb25bSlNP
Tl9SRVNVTFRTX1ZFUlNJT05fS0VZXQorICAgICAgICBpZiB2ZXJzaW9uID4gSlNPTl9SRVNVTFRT
X1ZFUlNJT046CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJSZXN1bHRzIEpTT04gdmVyc2lv
biAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQuIiwKKyAgICAgICAgICAgICAgICB2ZXJzaW9uKQorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IGJ1aWxkZXIgaW4ganNvbjoK
KyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkJ1aWxkZXIgJyVzJyBpcyBub3QgaW4ganNvbiBy
ZXN1bHRzLiIsIGJ1aWxkZXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBy
ZXN1bHRzX2Zvcl9idWlsZGVyID0ganNvbltidWlsZGVyXQorICAgICAgICBpZiBub3QgSlNPTl9S
RVNVTFRTX0JVSUxEX05VTUJFUlMgaW4gcmVzdWx0c19mb3JfYnVpbGRlcjoKKyAgICAgICAgICAg
IGxvZ2dpbmcuZXJyb3IoIk1pc3NpbmcgYnVpbGQgbnVtYmVyIGluIGpzb24gcmVzdWx0cy4iKQor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBj
bGFzc21ldGhvZAorICAgIGRlZiBtZXJnZShjbHMsIGJ1aWxkZXIsIGFnZ3JlZ2F0ZWQsIGluY3Jl
bWVudGFsLCBzb3J0X2tleXM9RmFsc2UpOgorICAgICAgICAiIiJNZXJnZSBpbmNyZW1lbnRhbCBq
c29uIGZpbGUgZGF0YSB3aXRoIGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZS4KKyAgICAgICAgICAgIGFn
Z3JlZ2F0ZWQ6IGFnZ3JlZ2F0ZWQganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBpbmNyZW1l
bnRhbDogaW5jcmVtZW50YWwganNvbiBmaWxlIGRhdGEuCisgICAgICAgICAgICBzb3J0X2tleTog
d2hldGhlciBvciBub3QgdG8gc29ydCBrZXkgd2hlbiBkdW1waW5nIGpzb24gcmVzdWx0cy4KKwor
ICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgTWVyZ2VkIGpzb24gZmlsZSBkYXRhIGlmIG1l
cmdlIHN1Y2NlZWRzIG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIi
IgorCisgICAgICAgIGlmIG5vdCBpbmNyZW1lbnRhbDoKKyAgICAgICAgICAgIGxvZ2dpbmcud2Fy
bmluZygiTm90aGluZyB0byBtZXJnZS4iKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICBsb2dnaW5nLmluZm8oIkxvYWRpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAg
IGluY3JlbWVudGFsX2pzb24gPSBjbHMuX2xvYWRfanNvbihpbmNyZW1lbnRhbCkKKyAgICAgICAg
aWYgbm90IGluY3JlbWVudGFsX2pzb246CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ICAgIGxvZ2dpbmcuaW5mbygiQ2hlY2tpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCisgICAgICAg
IGlmIG5vdCBjbHMuX2NoZWNrX2pzb24oYnVpbGRlciwgaW5jcmVtZW50YWxfanNvbik6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBleGlz
dGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBhZ2dyZWdhdGVkX2pzb24gPSBjbHMu
X2xvYWRfanNvbihhZ2dyZWdhdGVkKQorICAgICAgICBpZiBub3QgYWdncmVnYXRlZF9qc29uOgor
ICAgICAgICAgICAgcmV0dXJuIGluY3JlbWVudGFsCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJD
aGVja2luZyBleGlzdGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQorICAgICAgICBpZiBub3QgY2xz
Ll9jaGVja19qc29uKGJ1aWxkZXIsIGFnZ3JlZ2F0ZWRfanNvbik6CisgICAgICAgICAgICByZXR1
cm4gaW5jcmVtZW50YWwKKworICAgICAgICBsb2dnaW5nLmluZm8oIk1lcmdpbmcganNvbiByZXN1
bHRzLi4uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGNscy5fbWVyZ2VfanNv
bigKKyAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25bYnVpbGRlcl0sCisgICAgICAgICAg
ICAgICAgaW5jcmVtZW50YWxfanNvbltidWlsZGVyXSk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgbG9nZ2lu
Zy5lcnJvcigiRmFpbGVkIHRvIG1lcmdlIGpzb24gcmVzdWx0czogJXMiLCBzdHIoZXJyKSkKKyAg
ICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYWdncmVnYXRlZF9qc29uW0pTT05fUkVT
VUxUU19WRVJTSU9OX0tFWV0gPSBKU09OX1JFU1VMVFNfVkVSU0lPTgorCisgICAgICAgIHJldHVy
biBjbHMuX2dlbmVyYXRlX2ZpbGVfZGF0YShhZ2dyZWdhdGVkX2pzb24sIHNvcnRfa2V5cykKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB1cGRhdGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUs
IGluY3JlbWVudGFsKToKKyAgICAgICAgIiIiVXBkYXRlIGRhdGFzdG9yZSBqc29uIGZpbGUgZGF0
YSBieSBtZXJnaW5nIGl0IHdpdGggaW5jcmVtZW50YWwganNvbgorICAgICAgICAgICBmaWxlLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIG5hbWUuCisgICAg
ICAgICAgICB0ZXN0X3R5cGU6IHR5cGUgb2YgdGVzdCByZXN1bHRzLgorICAgICAgICAgICAgaW5j
cmVtZW50YWw6IGluY3JlbWVudGFsIGpzb24gZmlsZSBkYXRhIHRvIG1lcmdlLgorCisgICAgICAg
IFJldHVybnM6CisgICAgICAgICAgICBUZXN0RmlsZSBvYmplY3QgaWYgdXBkYXRlIHN1Y2NlZWRz
IG9yCisgICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgorCisgICAgICAg
IGZpbGVzID0gVGVzdEZpbGUuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3RfdHlwZSwgSlNPTl9SRVNV
TFRTX0ZJTEUpCisgICAgICAgIGlmIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IGZpbGVzWzBd
CisgICAgICAgICAgICBuZXdfcmVzdWx0cyA9IGNscy5tZXJnZShidWlsZGVyLCBmaWxlLmRhdGEs
IGluY3JlbWVudGFsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBVc2UgdGhlIGluY3Jl
bWVudGFsIGRhdGEgaWYgdGhlcmUgaXMgbm8gYWdncmVnYXRlZCBmaWxlIHRvIG1lcmdlLgorICAg
ICAgICAgICAgZmlsZSA9IFRlc3RGaWxlKCkKKyAgICAgICAgICAgIGZpbGUuYnVpbGRlciA9IGJ1
aWxkZXIKKyAgICAgICAgICAgIGZpbGUubmFtZSA9IEpTT05fUkVTVUxUU19GSUxFCisgICAgICAg
ICAgICBuZXdfcmVzdWx0cyA9IGluY3JlbWVudGFsCisgICAgICAgICAgICBsb2dnaW5nLmluZm8o
Ik5vIGV4aXN0aW5nIGpzb24gcmVzdWx0cywgaW5jcmVtZW50YWwganNvbiBpcyBzYXZlZC4iKQor
CisgICAgICAgIGlmIG5vdCBuZXdfcmVzdWx0czoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgaWYgbm90IGZpbGUuc2F2ZShuZXdfcmVzdWx0cyk6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIHJldHVybiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJL
aXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzLnB5Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0dGVzdC5weQko
cmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJl
c3VsdHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU2IEBACisjIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20ganNvbnJlc3VsdHMgaW1wb3J0IEpz
b25SZXN1bHRzCisKK0pTT05fUkVTVUxUU19URU1QTEFURSA9ICgKKyAgICAneyJXZWJraXQiOnsn
CisgICAgJyJhbGxGaXhhYmxlQ291bnQiOltbVEVTVERBVEFfQ09VTlRdXSwnCisgICAgJyJidWls
ZE51bWJlcnMiOltbVEVTVERBVEFfQlVJTEROVU1CRVJTXV0sJworICAgICciY2hyb21lUmV2aXNp
b24iOltbVEVTVERBVEFfQ0hST01FUkVWSVNJT05dXSwnCisgICAgJyJkZWZlcnJlZENvdW50cyI6
W1tURVNUREFUQV9DT1VOVFNdXSwnCisgICAgJyJmaXhhYmxlQ291bnQiOltbVEVTVERBVEFfQ09V
TlRdXSwnCisgICAgJyJmaXhhYmxlQ291bnRzIjpbW1RFU1REQVRBX0NPVU5UU11dLCcKKyAgICAn
InNlY29uZHNTaW5jZUVwb2NoIjpbW1RFU1REQVRBX1RJTUVTXV0sJworICAgICcidGVzdHMiOntb
VEVTVERBVEFfVEVTVFNdfSwnCisgICAgJyJ3ZWJraXRSZXZpc2lvbiI6W1tURVNUREFUQV9XRUJL
SVRSRVZJU0lPTl1dLCcKKyAgICAnIndvbnRmaXhDb3VudHMiOltbVEVTVERBVEFfQ09VTlRTXV0n
CisgICAgJ30sJworICAgICcidmVyc2lvbiI6MycKKyAgICAnfScpCisKK0pTT05fUkVTVUxUU19D
T1VOVFNfVEVNUExBVEUgPSAoCisgICAgJ3snCisgICAgJyJDIjpbVEVTVERBVEFdLCcKKyAgICAn
IkYiOltURVNUREFUQV0sJworICAgICciSSI6W1RFU1REQVRBXSwnCisgICAgJyJPIjpbVEVTVERB
VEFdLCcKKyAgICAnIlAiOltURVNUREFUQV0sJworICAgICciVCI6W1RFU1REQVRBXSwnCisgICAg
JyJYIjpbVEVTVERBVEFdLCcKKyAgICAnIloiOltURVNUREFUQV19JykKKworSlNPTl9SRVNVTFRT
X1RFU1RTX1RFTVBMQVRFID0gKAorICAgICciW1RFU1REQVRBX1RFU1RfTkFNRV0iOnsnCisgICAg
JyJyZXN1bHRzIjpbW1RFU1REQVRBX1RFU1RfUkVTVUxUU11dLCcKKyAgICAnInRpbWVzIjpbW1RF
U1REQVRBX1RFU1RfVElNRVNdXX0nKQorCitKU09OX1JFU1VMVFNfUFJFRklYID0gIkFERF9SRVNV
TFRTKCIKK0pTT05fUkVTVUxUU19TVUZGSVggPSAiKTsiCisKKworY2xhc3MgSnNvblJlc3VsdHNU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNl
bGYuX2J1aWxkZXIgPSAiV2Via2l0IgorCisgICAgZGVmIF9tYWtlX3Rlc3RfanNvbihzZWxmLCB0
ZXN0X2RhdGEpOgorICAgICAgICBpZiBub3QgdGVzdF9kYXRhOgorICAgICAgICAgICAgcmV0dXJu
IEpTT05fUkVTVUxUU19QUkVGSVggKyBKU09OX1JFU1VMVFNfU1VGRklYCisKKyAgICAgICAgKGJ1
aWxkcywgdGVzdHMpID0gdGVzdF9kYXRhCisgICAgICAgIGlmIG5vdCBidWlsZHMgb3Igbm90IHRl
c3RzOgorICAgICAgICAgICAgcmV0dXJuIEpTT05fUkVTVUxUU19QUkVGSVggKyBKU09OX1JFU1VM
VFNfU1VGRklYCisKKyAgICAgICAganNvbiA9IEpTT05fUkVTVUxUU19URU1QTEFURQorCisgICAg
ICAgIGNvdW50cyA9IFtdCisgICAgICAgIGJ1aWxkX251bWJlcnMgPSBbXQorICAgICAgICB3ZWJr
aXRfcmV2aXNpb24gPSBbXQorICAgICAgICBjaHJvbWVfcmV2aXNpb24gPSBbXQorICAgICAgICB0
aW1lcyA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICBjb3Vu
dHMuYXBwZW5kKEpTT05fUkVTVUxUU19DT1VOVFNfVEVNUExBVEUucmVwbGFjZSgiW1RFU1REQVRB
XSIsIGJ1aWxkKSkKKyAgICAgICAgICAgIGJ1aWxkX251bWJlcnMuYXBwZW5kKCIxMDAwJXMiICUg
YnVpbGQpCisgICAgICAgICAgICB3ZWJraXRfcmV2aXNpb24uYXBwZW5kKCIyMDAwJXMiICUgYnVp
bGQpCisgICAgICAgICAgICBjaHJvbWVfcmV2aXNpb24uYXBwZW5kKCIzMDAwJXMiICUgYnVpbGQp
CisgICAgICAgICAgICB0aW1lcy5hcHBlbmQoIjEwMDAwMCVzMDAwIiAlIGJ1aWxkKQorCisgICAg
ICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9DT1VOVFNdIiwgIiwiLmpvaW4oY291
bnRzKSkKKyAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RFU1REQVRBX0NPVU5UXSIsICIs
Ii5qb2luKGJ1aWxkcykpCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9C
VUlMRE5VTUJFUlNdIiwgIiwiLmpvaW4oYnVpbGRfbnVtYmVycykpCisgICAgICAgIGpzb24gPSBq
c29uLnJlcGxhY2UoIltURVNUREFUQV9XRUJLSVRSRVZJU0lPTl0iLCAiLCIuam9pbih3ZWJraXRf
cmV2aXNpb24pKQorICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfQ0hST01F
UkVWSVNJT05dIiwgIiwiLmpvaW4oY2hyb21lX3JldmlzaW9uKSkKKyAgICAgICAganNvbiA9IGpz
b24ucmVwbGFjZSgiW1RFU1REQVRBX1RJTUVTXSIsICIsIi5qb2luKHRpbWVzKSkKKworICAgICAg
ICBqc29uX3Rlc3RzID0gW10KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAg
ICB0ID0gSlNPTl9SRVNVTFRTX1RFU1RTX1RFTVBMQVRFLnJlcGxhY2UoIltURVNUREFUQV9URVNU
X05BTUVdIiwgdGVzdFswXSkKKyAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UoIltURVNUREFUQV9U
RVNUX1JFU1VMVFNdIiwgdGVzdFsxXSkKKyAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UoIltURVNU
REFUQV9URVNUX1RJTUVTXSIsIHRlc3RbMl0pCisgICAgICAgICAgICBqc29uX3Rlc3RzLmFwcGVu
ZCh0KQorCisgICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFUQV9URVNUU10iLCAi
LCIuam9pbihqc29uX3Rlc3RzKSkKKworICAgICAgICByZXR1cm4gSlNPTl9SRVNVTFRTX1BSRUZJ
WCArIGpzb24gKyBKU09OX1JFU1VMVFNfU1VGRklYCisKKyAgICBkZWYgX3Rlc3RfbWVyZ2Uoc2Vs
ZiwgYWdncmVnYXRlZF9kYXRhLCBpbmNyZW1lbnRhbF9kYXRhLCBleHBlY3RlZF9kYXRhKToKKyAg
ICAgICAgYWdncmVnYXRlZF9yZXN1bHRzID0gc2VsZi5fbWFrZV90ZXN0X2pzb24oYWdncmVnYXRl
ZF9kYXRhKQorICAgICAgICBpbmNyZW1lbnRhbF9yZXN1bHRzID0gc2VsZi5fbWFrZV90ZXN0X2pz
b24oaW5jcmVtZW50YWxfZGF0YSkKKyAgICAgICAgbWVyZ2VkX3Jlc3VsdHMgPSBKc29uUmVzdWx0
cy5tZXJnZShzZWxmLl9idWlsZGVyLAorICAgICAgICAgICAgYWdncmVnYXRlZF9yZXN1bHRzLCBp
bmNyZW1lbnRhbF9yZXN1bHRzLCBzb3J0X2tleXM9VHJ1ZSkKKworICAgICAgICBpZiBleHBlY3Rl
ZF9kYXRhOgorICAgICAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX21ha2VfdGVzdF9q
c29uKGV4cGVjdGVkX2RhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXJnZWRf
cmVzdWx0cywgZXhwZWN0ZWRfcmVzdWx0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UobWVyZ2VkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAg
ICAgICAgIyBFbXB0eSBpbmNyZW1lbnRhbCByZXN1bHRzIGpzb24uCisgICAgICAgICMgTm90aGlu
ZyB0byBtZXJnZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdn
cmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAi
WzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRh
bCByZXN1bHRzCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgIyBFeHBlY3Qgbm8gbWVy
Z2UgaGFwcGVucy4KKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgIyBObyBhY3R1YWwgaW5j
cmVtZW50YWwgdGVzdCByZXN1bHRzIChvbmx5IHByZWZpeCBhbmQgc3VmZml4KSB0byBtZXJnZS4K
KyAgICAgICAgIyBOb3RoaW5nIHRvIG1lcmdlLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAor
ICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJd
LCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAg
ICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbXSwgW10pLAorICAgICAg
ICAgICAgIyBFeHBlY3RlZCBubyBtZXJnZSBoYXBwZW5zLgorICAgICAgICAgICAgTm9uZSkKKwor
ICAgICAgICAjIE5vIGV4aXN0aW5nIGFnZ3JlZ2F0ZWQgcmVzdWx0cy4KKyAgICAgICAgIyBNZXJn
ZWQgcmVzdWx0cyA9PSBuZXcgaW5jcmVtZW50YWwgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5fdGVz
dF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICBO
b25lLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyIy
IiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAor
ICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwg
W1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pKQorCisgICAgICAg
ICMgU2luZ2xlIHRlc3QgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgSW5jcmVtZW50YWwgcmVz
dWx0cyBoYXMgdGhlIGxhdGVzdCBidWlsZCBhbmQgc2FtZSB0ZXN0IHJlc3VsdHMgZm9yCisgICAg
ICAgICMgdGhhdCBydW4uCisgICAgICAgICMgSW5zZXJ0IHRoZSBpbmNyZW1lbnRhbCByZXN1bHRz
IGF0IHRoZSBmaXJzdCBwbGFjZSBhbmQgc3VtIG51bWJlcgorICAgICAgICAjIG9mIHJ1bnMgZm9y
ICJQIiAoMjAwICsgMSkgdG8gZ2V0IG1lcmdlZCByZXN1bHRzLgorICAgICAgICBzZWxmLl90ZXN0
X21lcmdlKAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChb
IjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSks
CisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwg
W1siMDAxLmh0bWwiLCAiWzEsXCJQXCJdIiwgIlsxLFwiMFwiXSJdXSksCisgICAgICAgICAgICAj
IEV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5o
dG1sIiwgIlsyMDEsXCJQXCJdIiwgIlsyMDEsXCIwXCJdIl1dKSkKKworICAgICAgICAjIFNpbmds
ZSB0ZXN0IGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMgaGFz
IHRoZSBsYXRlc3QgYnVpbGQgYnV0IGRpZmZlcmVudCB0ZXN0IHJlc3VsdHMKKyAgICAgICAgIyBm
b3IgdGhhdCBydW4uCisgICAgICAgICMgSW5zZXJ0IHRoZSBpbmNyZW1lbnRhbCByZXN1bHRzIGF0
IHRoZSBmaXJzdCBwbGFjZS4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAg
ICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0
bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNy
ZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIl0sIFtbIjAwMS5odG1sIiwgIlsxLCBc
IklcIl0iLCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cwor
ICAgICAgICAgICAgKFsiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJJXCJdLFsy
MDAsXCJQXCJdIiwgIlsxLFwiMVwiXSxbMjAwLFwiMFwiXSJdXSkpCisKKyAgICAgICAgIyBTaW5n
bGUgdGVzdCBmb3Igc2luZ2xlIHJ1bi4KKyAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzIGhh
cyB0aGUgbGF0ZXN0IGJ1aWxkIGJ1dCBkaWZmZXJlbnQgdGVzdCByZXN1bHRzCisgICAgICAgICMg
Zm9yIHRoYXQgcnVuLgorICAgICAgICAjIFRoZSB0ZXN0ICJyZXN1bHRzIiBhbmQgInRpbWVzIiBu
ZWVkIHRvIGJlIGNvbnRpbnVvdXMsIHNvIHRoZSBvbGQKKyAgICAgICAgIyBbMTAsIkkiXSByZXN1
bHQgc2hvdWxkIGJlIGRyb3BwZWQgYmVjYXVzZSBhIG5ldyByZXN1bHQgb2Ygc2FtZSB0eXBlIFsx
LCJJIl0KKyAgICAgICAgIyBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiBbMjAwLCJQIl0uCisgICAg
ICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cwor
ICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdLFsxMCxc
IklcIl0iLCAiWzIwMCxcIjBcIl0sWzEwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEluY3Jl
bWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJJ
XCJdIiwgIlsxLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKKyAg
ICAgICAgICAgIChbIjMiLCAiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsxLFwiSVwiXSxbMjAw
LFwiUFwiXSIsICJbMSxcIjFcIl0sWzIwMCxcIjBcIl0iXV0pKQorCisgICAgICAgICMgTXVsdGlw
bGUgdGVzdHMgZm9yIHNpbmdsZSBydW4uCisgICAgICAgICMgQWxsIHRlc3RzIGhhdmUgaW5jcmVt
ZW50YWwgdXBkYXRlcy4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMg
QWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIiwgIjEiXSwgW1siMDAxLmh0bWwi
LCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwgWyIwMDIuaHRtbCIsICJbMTAwLFwiSVwi
XSIsICJbMTAwLFwiMVwiXSJdXSksCisgICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMK
KyAgICAgICAgICAgIChbIjMiXSwgW1siMDAxLmh0bWwiLCAiWzEsXCJQXCJdIiwgIlsxLFwiMFwi
XSJdLCBbIjAwMi5odG1sIiwgIlsxLFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAg
ICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJdLCBbWyIw
MDEuaHRtbCIsICJbMjAxLFwiUFwiXSIsICJbMjAxLFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsx
MDEsXCJJXCJdIiwgIlsxMDEsXCIxXCJdIl1dKSkKKworICAgICAgICAjIE11bHRpcGxlIHRlc3Rz
IGZvciBzaW5nbGUgcnVuLgorICAgICAgICAjIE5vdCBhbGwgdGVzdHMgaGF2ZSB1cGRhdGUuCisg
ICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCisgICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0
cworICAgICAgICAgICAgKFsiMiIsICIxIl0sIFtbIjAwMS5odG1sIiwgIlsyMDAsXCJQXCJdIiwg
IlsyMDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEwMCxcIklcIl0iLCAiWzEwMCxcIjFcIl0i
XV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyIz
Il0sIFtbIjAwMi5odG1sIiwgIlsxLFwiSVwiXSIsICJbMSxcIjFcIl0iXV0pLAorICAgICAgICAg
ICAgIyBFeHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjIiLCAiMSJdLCBbWyIw
MDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdLCBbIjAwMi5odG1sIiwgIlsx
MDEsXCJJXCJdIiwgIlsxMDEsXCIxXCJdIl1dKSkKKworICAgICAgICAjIFNpbmdsZSB0ZXN0IGZv
ciBtdWx0aXBsZSBydW5zLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAorICAgICAgICAgICAg
IyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAiMSJdLCBbWyIwMDEuaHRt
bCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAgICAgICAgICAjIEluY3Jl
bWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjQiLCAiMyJdLCBbWyIwMDEuaHRtbCIsICJb
MiwgXCJJXCJdIiwgIlsyLFwiMlwiXSJdXSksCisgICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3Vs
dHMKKyAgICAgICAgICAgIChbIjQiLCAiMyIsICIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIs
XCJJXCJdLFsyMDAsXCJQXCJdIiwgIlsyLFwiMlwiXSxbMjAwLFwiMFwiXSJdXSkpCisKKyAgICAg
ICAgIyBNdWx0aXBsZSB0ZXN0cyBmb3IgbXVsdGlwbGUgcnVucy4KKyAgICAgICAgc2VsZi5fdGVz
dF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAo
WyIyIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAiWzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXSwg
WyIwMDIuaHRtbCIsICJbMTAsXCJaXCJdIiwgIlsxMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAg
IyBJbmNyZW1lbnRhbCByZXN1bHRzCisgICAgICAgICAgICAoWyI0IiwgIjMiXSwgW1siMDAxLmh0
bWwiLCAiWzIsIFwiSVwiXSIsICJbMixcIjJcIl0iXSwgWyIwMDIuaHRtbCIsICJbMSxcIkNcIl0i
LCAiWzEsXCIxXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cworICAgICAg
ICAgICAgKFsiNCIsICIzIiwgIjIiLCAiMSJdLCBbWyIwMDEuaHRtbCIsICJbMixcIklcIl0sWzIw
MCxcIlBcIl0iLCAiWzIsXCIyXCJdLFsyMDAsXCIwXCJdIl0sIFsiMDAyLmh0bWwiLCAiWzEsXCJD
XCJdLFsxMCxcIlpcIl0iLCAiWzEsXCIxXCJdLFsxMCxcIjBcIl0iXV0pKQorCisgICAgICAgICMg
VGVzdCB0aGUgYnVpbGQgaW4gaW5jcmVtZW50YWwgcmVzdWx0cyBpcyBvbGRlciB0aGFuIHRoZSBt
b3N0IHJlY2VudAorICAgICAgICAjIGJ1aWxkIGluIGFnZ3JlZ2F0ZWQgcmVzdWx0cy4KKyAgICAg
ICAgIyBUaGUgaW5jcmVtZW50YWwgcmVzdWx0cyBzaG91bGQgYmUgZHJvcHBlZCBhbmQgbm8gbWVy
Z2UgaGFwcGVucy4KKyAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKKyAgICAgICAgICAgICMgQWdn
cmVnYXRlZCByZXN1bHRzCisgICAgICAgICAgICAoWyIzIiwgIjEiXSwgW1siMDAxLmh0bWwiLCAi
WzIwMCxcIlBcIl0iLCAiWzIwMCxcIjBcIl0iXV0pLAorICAgICAgICAgICAgIyBJbmNyZW1lbnRh
bCByZXN1bHRzCisgICAgICAgICAgICAoWyIyIl0sIFtbIjAwMS5odG1sIiwgIlsxLCBcIlBcIl0i
LCAiWzEsXCIwXCJdIl1dKSwKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgbm8gbWVyZ2UgaGFwcGVu
cy4KKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgIyBUZXN0IHRoZSBidWlsZCBpbiBpbmNy
ZW1lbnRhbCByZXN1bHRzIGlzIHNhbWUgYXMgdGhlIGJ1aWxkIGluCisgICAgICAgICMgYWdncmVn
YXRlZCByZXN1bHRzLgorICAgICAgICAjIFRoZSBpbmNyZW1lbnRhbCByZXN1bHRzIHNob3VsZCBi
ZSBkcm9wcGVkIGFuZCBubyBtZXJnZSBoYXBwZW5zLgorICAgICAgICBzZWxmLl90ZXN0X21lcmdl
KAorICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjIiLCAi
MSJdLCBbWyIwMDEuaHRtbCIsICJbMjAwLFwiUFwiXSIsICJbMjAwLFwiMFwiXSJdXSksCisgICAg
ICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKKyAgICAgICAgICAgIChbIjMiLCAiMiJdLCBb
WyIwMDEuaHRtbCIsICJbMiwgXCJQXCJdIiwgIlsyLFwiMFwiXSJdXSksCisgICAgICAgICAgICAj
IEV4cGVjdGVkIG5vIG1lcmdlIGhhcHBlbnMuCisgICAgICAgICAgICBOb25lKQorCitpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0c191bml0
dGVzdC5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBX
ZWJLaXRUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL3Rlc3RmaWxlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZpbGUucHkJKHJldmlz
aW9uIDY0NjU1KQorKysgV2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC90ZXN0Zmls
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBA
IC0xMyw3ICsxMyw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKICMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0yOSwxNiArMjksMTQgQEAKIGZyb20g
ZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwogCi1mcm9tIGdvb2dsZS5h
cHBlbmdpbmUuZXh0IGltcG9ydCBibG9ic3RvcmUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQg
aW1wb3J0IGRiCiAKK2Zyb20gbW9kZWwuZGF0YXN0b3JlZmlsZSBpbXBvcnQgRGF0YVN0b3JlRmls
ZQogCi1jbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CisKK2NsYXNzIFRlc3RGaWxlKERhdGFTdG9y
ZUZpbGUpOgogICAgIGJ1aWxkZXIgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgbmFtZSA9IGRi
LlN0cmluZ1Byb3BlcnR5KCkKICAgICB0ZXN0X3R5cGUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0g
ICAgYmxvYl9rZXkgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0gICAgZGF0ZSA9IGRiLkRhdGVUaW1l
UHJvcGVydHkoYXV0b19ub3dfYWRkPVRydWUpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYg
ZGVsZXRlX2ZpbGUoY2xzLCBrZXksIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbGltaXQpOgpA
QCAtNjMsNyArNjEsNyBAQCBjbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIHJldHVy
biBUcnVlCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZ2V0X2ZpbGVzKGNscywgYnVpbGRl
ciwgdGVzdF90eXBlLCBuYW1lLCBsaW1pdCk6CisgICAgZGVmIGdldF9maWxlcyhjbHMsIGJ1aWxk
ZXIsIHRlc3RfdHlwZSwgbmFtZSwgbG9hZF9kYXRhPVRydWUsIGxpbWl0PTEpOgogICAgICAgICBx
dWVyeSA9IFRlc3RGaWxlLmFsbCgpCiAgICAgICAgIGlmIGJ1aWxkZXI6CiAgICAgICAgICAgICBx
dWVyeSA9IHF1ZXJ5LmZpbHRlcigiYnVpbGRlciA9IiwgYnVpbGRlcikKQEAgLTcyLDUxICs3MCw1
NCBAQCBjbGFzcyBUZXN0RmlsZShkYi5Nb2RlbCk6CiAgICAgICAgIGlmIG5hbWU6CiAgICAgICAg
ICAgICBxdWVyeSA9IHF1ZXJ5LmZpbHRlcigibmFtZSA9IiwgbmFtZSkKIAotICAgICAgICByZXR1
cm4gcXVlcnkub3JkZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGZpbGVzID0gcXVl
cnkub3JkZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCisgICAgICAgIGlmIGxvYWRfZGF0YToKKyAg
ICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUubG9hZF9k
YXRhKCkKKworICAgICAgICByZXR1cm4gZmlsZXMKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBhZGRfZmlsZShjbHMsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgYmxvYl9pbmZvKToKKyAgICBkZWYg
YWRkX2ZpbGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIGRhdGEpOgogICAgICAgICBm
aWxlID0gVGVzdEZpbGUoKQogICAgICAgICBmaWxlLmJ1aWxkZXIgPSBidWlsZGVyCiAgICAgICAg
IGZpbGUudGVzdF90eXBlID0gdGVzdF90eXBlCi0gICAgICAgIGZpbGUubmFtZSA9IGJsb2JfaW5m
by5maWxlbmFtZQotICAgICAgICBmaWxlLmJsb2Jfa2V5ID0gc3RyKGJsb2JfaW5mby5rZXkoKSkK
LSAgICAgICAgZmlsZS5wdXQoKQorICAgICAgICBmaWxlLm5hbWUgPSBuYW1lCisKKyAgICAgICAg
aWYgbm90IGZpbGUuc2F2ZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAg
ICAgbG9nZ2luZy5pbmZvKAotICAgICAgICAgICAgIkZpbGUgc2F2ZWQsIGJ1aWxkZXI6ICVzLCB0
ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywgYmxvYiBrZXk6ICVzLiIsCi0gICAgICAgICAgICBidWls
ZGVyLCB0ZXN0X3R5cGUsIGZpbGUubmFtZSwgZmlsZS5ibG9iX2tleSkKKyAgICAgICAgICAgICJG
aWxlIHNhdmVkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGtleTogJXMu
IiwKKyAgICAgICAgICAgIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5k
YXRhX2tleXMpKQogCiAgICAgICAgIHJldHVybiBmaWxlCiAKICAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgdXBkYXRlX2ZpbGUoY2xzLCBidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbyk6Ci0g
ICAgICAgIGZpbGVzID0gY2xzLmdldF9maWxlcyhidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5m
by5maWxlbmFtZSwgMSkKKyAgICBkZWYgdXBkYXRlKGNscywgYnVpbGRlciwgdGVzdF90eXBlLCBu
YW1lLCBkYXRhKToKKyAgICAgICAgZmlsZXMgPSBjbHMuZ2V0X2ZpbGVzKGJ1aWxkZXIsIHRlc3Rf
dHlwZSwgbmFtZSkKICAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAgICAgICAgcmV0dXJuIGNs
cy5hZGRfZmlsZShidWlsZGVyLCB0ZXN0X3R5cGUsIGJsb2JfaW5mbykKKyAgICAgICAgICAgIHJl
dHVybiBjbHMuYWRkX2ZpbGUoYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBkYXRhKQogCiAgICAg
ICAgIGZpbGUgPSBmaWxlc1swXQotICAgICAgICBvbGRfYmxvYl9pbmZvID0gYmxvYnN0b3JlLkJs
b2JJbmZvLmdldChmaWxlLmJsb2Jfa2V5KQotICAgICAgICBpZiBvbGRfYmxvYl9pbmZvOgotICAg
ICAgICAgICAgb2xkX2Jsb2JfaW5mby5kZWxldGUoKQotCi0gICAgICAgIGZpbGUuYnVpbGRlciA9
IGJ1aWxkZXIKLSAgICAgICAgZmlsZS50ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKLSAgICAgICAgZmls
ZS5uYW1lID0gYmxvYl9pbmZvLmZpbGVuYW1lCi0gICAgICAgIGZpbGUuYmxvYl9rZXkgPSBzdHIo
YmxvYl9pbmZvLmtleSgpKQotICAgICAgICBmaWxlLmRhdGUgPSBkYXRldGltZS5ub3coKQotICAg
ICAgICBmaWxlLnB1dCgpCisgICAgICAgIGlmIG5vdCBmaWxlLnNhdmUoZGF0YSk6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgIGxvZ2dpbmcuaW5mbygKLSAgICAgICAgICAgICJG
aWxlIHJlcGxhY2VkLCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMsIGJsb2Ig
a2V5OiAlcy4iLAotICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlLm5hbWUsIGZp
bGUuYmxvYl9rZXkpCisgICAgICAgICAgICAiRmlsZSByZXBsYWNlZCwgYnVpbGRlcjogJXMsIHRl
c3RfdHlwZTogJXMsIG5hbWU6ICVzLCBkYXRhIGtleTogJXMuIiwKKyAgICAgICAgICAgIGJ1aWxk
ZXIsIHRlc3RfdHlwZSwgZmlsZS5uYW1lLCBzdHIoZmlsZS5kYXRhX2tleXMpKQogCiAgICAgICAg
IHJldHVybiBmaWxlCiAKLSAgICBkZWYgX2RlbGV0ZV9hbGwoc2VsZik6Ci0gICAgICAgIGlmIHNl
bGYuYmxvYl9rZXk6Ci0gICAgICAgICAgICBibG9iX2luZm8gPSBibG9ic3RvcmUuQmxvYkluZm8u
Z2V0KHNlbGYuYmxvYl9rZXkpCi0gICAgICAgICAgICBpZiBibG9iX2luZm86Ci0gICAgICAgICAg
ICAgICAgYmxvYl9pbmZvLmRlbGV0ZSgpCisgICAgZGVmIHNhdmUoc2VsZiwgZGF0YSk6CisgICAg
ICAgIGlmIG5vdCBzZWxmLnNhdmVfZGF0YShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgICAgIHNlbGYuZGF0ZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlbGYucHV0
KCkKIAorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZWxldGVfYWxsKHNlbGYpOgor
ICAgICAgICBzZWxmLmRlbGV0ZV9kYXRhKCkKICAgICAgICAgc2VsZi5kZWxldGUoKQpJbmRleDog
V2ViS2l0VG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3VwbG9h
ZGZvcm0uaHRtbAkocmV2aXNpb24gNjQ2NTUpCisrKyBXZWJLaXRUb29scy9UZXN0UmVzdWx0U2Vy
dmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4
LDkgQEAKICAgICAgICAgPHRkPjxpbnB1dCBjbGFzcz1pbnB1dHRleHQgdHlwZT0idGV4dCIgbmFt
ZT0idGVzdHR5cGUiIHZhbHVlPSIiLz48L3RkPgogICAgIDwvdHI+CiAgICAgPC90YWJsZT4KKyAg
ICA8YnI+CisgICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9ImNoZWNrYm94IiBuYW1l
PSJpbmNyZW1lbnRhbCI+SW5jcmVtZW50YWwgcmVzdWx0cywgbWVyZ2Ugd2l0aCBzZXJ2ZXIgZmls
ZS48L2Rpdj4KKyAgICA8YnI+CiAgICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9ImZp
bGUiIG5hbWU9ImZpbGUiIG11bHRpcGxlPjwvZGl2PgogICAgIDxicj4KICAgICA8ZGl2PjxpbnB1
dCBjbGFzcz1idXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIj48L2Rpdj4K
</data>

          </attachment>
      

    </bug>

</bugzilla>