<?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>156674</bug_id>
          
          <creation_ts>2016-04-17 06:08:53 -0700</creation_ts>
          <short_desc>Build tools should work when the /usr/bin/python is python3</short_desc>
          <delta_ts>2021-10-12 10:00:09 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=231587</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>189552</dependson>
          <blocked>184986</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Drew DeVault">sir</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboya</cc>
    
    <cc>annulen</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>lforschler</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mgorse</cc>
    
    <cc>mitya57</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>tpopela</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1184464</commentid>
    <comment_count>0</comment_count>
    <who name="Drew DeVault">sir</who>
    <bug_when>2016-04-17 06:08:53 -0700</bug_when>
    <thetext>The build tools fail when the default python is python 3. This is currently worked around by telling the user to change their environment:

https://trac.webkit.org/browser/trunk/Tools/gtk/install-dependencies#L324

A better solution is to either:

- Change the shebangs and such everywhere to #!/usr/bin/env python2, which should work on all systems
- Make the Python code work on both Python 2 and Python 3

Currently working on patches that use the first solution, and then will consider patches that work towards the second solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184891</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-04-18 20:56:40 -0700</bug_when>
    <thetext>FWIW, there is no python2 on OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404164</commentid>
    <comment_count>2</comment_count>
      <attachid>335141</attachid>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-03-06 14:38:30 -0800</bug_when>
    <thetext>Created attachment 335141
First pass

I needed to be able to build WebKit using python 3, so I made a patch (running 2to3 along with some manual changes).

In some cases, it wasn&apos;t clear to me whether files needed to be opened with &quot;wb&quot;, since they appear to be text, though I figured that the &quot;b&quot; might be there for a reason and left things as they were, though opening the file as text would allow a str to be passed to write().
Similarly, I&apos;m guessing that there&apos;s a better way to handle jsmin.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404210</commentid>
    <comment_count>3</comment_count>
      <attachid>335141</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-06 16:44:57 -0800</bug_when>
    <thetext>Comment on attachment 335141
First pass

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

Is SUSE dropping python2 early?

Anyway, I think this patch is good. Maintaining compatibility with both python2 and python3 is going to be painful, but it&apos;s obvious that we can&apos;t delay this transition much longer, and I assume Apple wants to stick with python2 for now.

&gt; Source/JavaScriptCore/generate-bytecode-files:230
&gt; +        #dowrite(bytecodeHFile, (cCopyrightMsg % bytecodeJSONFile)

This shouldn&apos;t be commented out!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404211</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-06 16:48:03 -0800</bug_when>
    <thetext>(In reply to Mike Gorse from comment #2)
&gt; In some cases, it wasn&apos;t clear to me whether files needed to be opened with
&gt; &quot;wb&quot;, since they appear to be text, though I figured that the &quot;b&quot; might be
&gt; there for a reason and left things as they were, though opening the file as
&gt; text would allow a str to be passed to write().

Should probably take the opportunity to switch to &quot;wb&quot;, indeed.

&gt; Similarly, I&apos;m guessing that there&apos;s a better way to handle jsmin.py.

I&apos;m not a python expert. Maybe Konstantin has some opinion on this. I&apos;m OK with uglifying the code in order to support both versions of python at the same time.

Anyway, I&apos;ll run this through the early warning service to see how the Mac and Windows bots react... it would be impressive if the first attempt doesn&apos;t break anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404214</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-06 16:49:50 -0800</bug_when>
    <thetext>Attachment 335141 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_model.py:159:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_model.py:159:  [BuiltinFunction.__lt__] Method should have &quot;self&quot; as first argument  [pylint/E0213] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:49:  [CppFrontendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:50:  [ObjCBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;should_generate_commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:48:  [ObjCFrontendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:56:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Source/JavaScriptCore/Scripts/generateYarrUnicodePropertyTables.py:96:  no spaces around keyword / parameter equals  [pep8/E251] [5]
ERROR: Source/JavaScriptCore/Scripts/generateYarrUnicodePropertyTables.py:220:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:54:  [ObjCProtocolTypeConversionsHeaderGenerator.domains_to_generate] Instance of &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos; has no &apos;should_generate_types_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:49:  [CppBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:346:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:48:  [CppBackendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_header.py:161:  [BuiltinsCombinedHeaderGenerator.generate_section_for_global_private_code_name_macro] Instance of &apos;BuiltinsCombinedHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
Total errors found: 13 in 39 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>1404230</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-06 17:23:07 -0800</bug_when>
    <thetext>You&apos;ll need to fix the EWS bots to not be red. First problem is:

Traceback (most recent call last):
  File &quot;JavaScriptCore/Scripts/generate-js-builtins.py&quot;, line 41, in &lt;module&gt;
    from builtins_model import *
ImportError: No module named builtins_model</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404237</commentid>
    <comment_count>7</comment_count>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-03-06 17:45:47 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)

&gt; Is SUSE dropping python2 early?

Not for openSUSE that I know of. For SLE 15, it will be part of the legacy module.

&gt; &gt; Source/JavaScriptCore/generate-bytecode-files:230
&gt; &gt; +        #dowrite(bytecodeHFile, (cCopyrightMsg % bytecodeJSONFile)
&gt; 
&gt; This shouldn&apos;t be commented out!

Thanks for catching that. I&apos;ve fixed it in my copy--I probably commented it out while debugging the syntax error and forgot to uncomment.

I need to research EWS--I&apos;d been testing against webkitgtk, but there are problems that I hadn&apos;t come across.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404747</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-08 09:06:06 -0800</bug_when>
    <thetext>The EWS is the bunch of green and red bubbles above the comments on this Bugzilla page. You want them to be green. :) You can attach new speculative patches to try to get closer to successful builds on macOS/iOS/Windows without needing to build for those platforms yourself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448187</commentid>
    <comment_count>9</comment_count>
      <attachid>346638</attachid>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-08-06 11:54:19 -0700</bug_when>
    <thetext>Created attachment 346638
Revised patch.

Rebased/updated. Fix erroneously-commented line to write out a copyright. Fixed a few style issues. Hoping I fixed the build on MacOS; renamed builtins to wkbuiltins to avoid a name conflict in python 3. This makes the patch larger than it should be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448303</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-08-06 17:09:19 -0700</bug_when>
    <thetext>Please also use Tools/Scripts/prepare-ChangeLog -b 156674 to generate appropriate ChangeLog entries</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451588</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-08-20 06:47:13 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #10)
&gt; Please also use Tools/Scripts/prepare-ChangeLog -b 156674 to generate
&gt; appropriate ChangeLog entries

And mark the patch with the r? cq? Bugzilla flags to request review and commit-queue, respectively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453211</commentid>
    <comment_count>12</comment_count>
      <attachid>347950</attachid>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-08-23 14:01:01 -0700</bug_when>
    <thetext>Created attachment 347950
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453253</commentid>
    <comment_count>13</comment_count>
      <attachid>347950</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-08-23 15:25:46 -0700</bug_when>
    <thetext>Comment on attachment 347950
Updated patch.

Hm, looks like none of the bots were able to apply the patch:

https://webkit-queues.webkit.org/results/8962750

Make sure to use &apos;git add&apos; to add all moved files to the patch before using &apos;webkit-patch upload&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453931</commentid>
    <comment_count>14</comment_count>
      <attachid>348154</attachid>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-08-27 09:51:12 -0700</bug_when>
    <thetext>Created attachment 348154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453932</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 09:53:36 -0700</bug_when>
    <thetext>Attachment 348154 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:41:  [BuiltinsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:45:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:49:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:66:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:69:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:94:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:98:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:108:  [BuiltinsWrapperHeaderGenerator.generate_accessors] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_wrapper_header.py:116:  [BuiltinsWrapperHeaderGenerator.generate_members] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_header.py:49:  [BuiltinsSeparateHeaderGenerator.macro_prefix] Instance of &apos;BuiltinsSeparateHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_header.py:53:  [BuiltinsSeparateHeaderGenerator.generate_output] Instance of &apos;BuiltinsSeparateHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_header.py:62:  [BuiltinsSeparateHeaderGenerator.generate_output] Instance of &apos;BuiltinsSeparateHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_header.py:74:  [BuiltinsSeparateHeaderGenerator.generate_output] Instance of &apos;BuiltinsSeparateHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_header.py:108:  [BuiltinsSeparateHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsSeparateHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_header.py:166:  [BuiltinsSeparateHeaderGenerator.generate_section_for_code_table_macro] Instance of &apos;BuiltinsSeparateHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_header.py:64:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_header.py:42:  [BuiltinsInternalsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_header.py:46:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_header.py:50:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_header.py:69:  [BuiltinsInternalsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:182:  [CppProtocolTypesImplementationGenerator._generate_builders_for_domain] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/generateYarrUnicodePropertyTables.py:96:  no spaces around keyword / parameter equals  [pep8/E251] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_implementation.py:49:  [BuiltinsSeparateImplementationGenerator.macro_prefix] Instance of &apos;BuiltinsSeparateImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_implementation.py:53:  [BuiltinsSeparateImplementationGenerator.generate_output] Instance of &apos;BuiltinsSeparateImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_implementation.py:62:  [BuiltinsSeparateImplementationGenerator.generate_output] Instance of &apos;BuiltinsSeparateImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_implementation.py:64:  [BuiltinsSeparateImplementationGenerator.generate_output] Instance of &apos;BuiltinsSeparateImplementationGenerator&apos; has no &apos;generate_primary_header_includes&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_implementation.py:70:  [BuiltinsSeparateImplementationGenerator.generate_output] Instance of &apos;BuiltinsSeparateImplementationGenerator&apos; has no &apos;generate_embedded_code_string_section_for_function&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_implementation.py:71:  [BuiltinsSeparateImplementationGenerator.generate_output] Instance of &apos;BuiltinsSeparateImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_implementation.py:73:  [BuiltinsSeparateImplementationGenerator.generate_output] Instance of &apos;BuiltinsSeparateImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_separate_implementation.py:112:  [BuiltinsSeparateImplementationGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsSeparateImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:45:  [BuiltinsCombinedImplementationGenerator.output_filename] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:49:  [BuiltinsCombinedImplementationGenerator.generate_output] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:50:  [BuiltinsCombinedImplementationGenerator.generate_output] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:54:  [BuiltinsCombinedImplementationGenerator.generate_output] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:56:  [BuiltinsCombinedImplementationGenerator.generate_output] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;generate_primary_header_includes&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:59:  [BuiltinsCombinedImplementationGenerator.generate_output] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:60:  [BuiltinsCombinedImplementationGenerator.generate_output] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;generate_embedded_code_string_section_for_function&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:61:  [BuiltinsCombinedImplementationGenerator.generate_output] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:63:  [BuiltinsCombinedImplementationGenerator.generate_output] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py:100:  [BuiltinsCombinedImplementationGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsCombinedImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:50:  [ObjCBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;should_generate_commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:42:  [BuiltinsInternalsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:46:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:50:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:52:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_primary_header_includes&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:82:  [BuiltinsInternalsWrapperImplementationGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generator.py:135:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:54:  [ObjCProtocolTypeConversionsHeaderGenerator.domains_to_generate] Instance of &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos; has no &apos;should_generate_types_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:49:  [CppBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:347:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:48:  [CppBackendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 52 in 56 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>1453933</commentid>
    <comment_count>16</comment_count>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-08-27 09:54:52 -0700</bug_when>
    <thetext>Used webkit-patch upload this time after running git add. Hoping that the bots will be able to apply it.
Also fixed a few PEP errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453935</commentid>
    <comment_count>17</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-08-27 09:57:49 -0700</bug_when>
    <thetext>IMO, this patch is hard to review because it&apos;s not clear where files are moved verbatimly and where they are modified. If there are any changes in moved files, it would be better to split patch in two parts: move stuff verbatimly, and then apply modifications.

(There are review systems which are able to track file renames and visualize modifications appropriately; unfortunately our tooling is inferior)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453943</commentid>
    <comment_count>18</comment_count>
    <who name="Drew DeVault">sir</who>
    <bug_when>2018-08-27 10:03:26 -0700</bug_when>
    <thetext>If you re-create the patch with `git format-patch -M&lt;n&gt;%` you can crank up &lt;n&gt; to adjust the rename detection threshold. It defaults to 50%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454058</commentid>
    <comment_count>19</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-08-27 13:34:19 -0700</bug_when>
    <thetext>Well a git-formatted patch probably won&apos;t work, because it&apos;s going to be applied with SVN, not git.

Anyway: thanks a bunch for working on this, Mike!

I agree with Konstantin that splitting out the renames into a separate bug is a good idea.

The style checker can be ignored in the rename bug, but in the bug for the code changes it will need to be placated.

You can click on the red EWS bubbles to see why the build is failing on Apple&apos;s ports. Looks like:

make: *** No rule to make target `JavaScriptCore/Scripts/builtins/__init__.py&apos;, needed by `JSCBuiltins.h&apos;.  Stop.
make: *** Waiting for unfinished jobs....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454060</commentid>
    <comment_count>20</comment_count>
    <who name="Drew DeVault">sir</who>
    <bug_when>2018-08-27 13:37:20 -0700</bug_when>
    <thetext>A git formatted patch will just make it easier to review, that&apos;s all :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454349</commentid>
    <comment_count>21</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-08-28 04:54:35 -0700</bug_when>
    <thetext>git formatted patch should work well with commit queue as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460975</commentid>
    <comment_count>22</comment_count>
      <attachid>350121</attachid>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-09-19 08:56:30 -0700</bug_when>
    <thetext>Created attachment 350121
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460978</commentid>
    <comment_count>23</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-19 08:59:46 -0700</bug_when>
    <thetext>Attachment 350121 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:49:  [CppFrontendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:50:  [ObjCBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;should_generate_commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:48:  [ObjCFrontendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:54:  [ObjCProtocolTypeConversionsHeaderGenerator.domains_to_generate] Instance of &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos; has no &apos;should_generate_types_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:49:  [CppBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:347:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_header.py:161:  [BuiltinsCombinedHeaderGenerator.generate_section_for_global_private_code_name_macro] Instance of &apos;BuiltinsCombinedHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
Total errors found: 7 in 45 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>1460982</commentid>
    <comment_count>24</comment_count>
      <attachid>350121</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-09-19 09:10:45 -0700</bug_when>
    <thetext>Comment on attachment 350121
Updated patch.

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

&gt; Source/JavaScriptCore/Scripts/cssmin.py:51
&gt; +        sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=&apos;UTF-8&apos;)

This is duplication of code above

&gt; Source/JavaScriptCore/Scripts/generate-js-builtins.py:50
&gt; +def doopen(file, mode):

do_open?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461052</commentid>
    <comment_count>25</comment_count>
      <attachid>350121</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-09-19 11:23:00 -0700</bug_when>
    <thetext>Comment on attachment 350121
Updated patch.

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

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:32
&gt; +from .models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks

Mac bots say:

ValueError: Attempted relative import in non-package

It&apos;s probably easier to test locally with python2 to make sure it still works there, rather than relying on the Mac bots to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461664</commentid>
    <comment_count>26</comment_count>
      <attachid>350303</attachid>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-09-20 19:17:31 -0700</bug_when>
    <thetext>Created attachment 350303
Updated patch.

It looks like the codegen directory is flattened on MacOS/IOS but not on gtk, so imports need to work in both cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461667</commentid>
    <comment_count>27</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-20 19:22:17 -0700</bug_when>
    <thetext>Attachment 350303 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:55:  [CppFrontendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:57:  [ObjCBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;should_generate_commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:54:  [ObjCFrontendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:60:  [ObjCProtocolTypeConversionsHeaderGenerator.domains_to_generate] Instance of &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos; has no &apos;should_generate_types_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:55:  [CppBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:353:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_header.py:161:  [BuiltinsCombinedHeaderGenerator.generate_section_for_global_private_code_name_macro] Instance of &apos;BuiltinsCombinedHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
Total errors found: 7 in 45 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>1461700</commentid>
    <comment_count>28</comment_count>
      <attachid>350303</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-09-20 20:39:46 -0700</bug_when>
    <thetext>Comment on attachment 350303
Updated patch.

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

OK, thanks!

The try/except imports are a bit yucky, but I guess that&apos;s what we&apos;re stuck with if we have XCode doing something different than CMake.

&gt; Source/JavaScriptCore/Scripts/wkbuiltins/builtins_model.py:159
&gt; +    def __lt__(self, other):
&gt; +        return self.function_name &lt; other.function_name

Why is it needed?

&gt; Source/JavaScriptCore/Scripts/wkbuiltins/builtins_model.py:309
&gt; +        return list(map(BuiltinFunction.fromString, functionStrings))

You&apos;ve done this in a couple other places. Why do you need to wrap the map in a list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461857</commentid>
    <comment_count>29</comment_count>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-09-21 08:39:38 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #28)
&gt; Comment on attachment 350303 [details]
&gt; Updated patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=350303&amp;action=review
&gt; 
&gt; OK, thanks!
&gt; 
&gt; The try/except imports are a bit yucky, but I guess that&apos;s what we&apos;re stuck
&gt; with if we have XCode doing something different than CMake.
&gt; 
&gt; &gt; Source/JavaScriptCore/Scripts/wkbuiltins/builtins_model.py:159
&gt; &gt; +    def __lt__(self, other):
&gt; &gt; +        return self.function_name &lt; other.function_name
&gt; 
&gt; Why is it needed?

I added that in order to get sort to work on python 3. http://python3porting.com/problems.html#comparisons

&gt; &gt; Source/JavaScriptCore/Scripts/wkbuiltins/builtins_model.py:309
&gt; &gt; +        return list(map(BuiltinFunction.fromString, functionStrings))
&gt; 
&gt; You&apos;ve done this in a couple other places. Why do you need to wrap the map
&gt; in a list?

Map returns an iterator in python 3, not a list as in python 2. Those lines were changed automatically when I ran 2to3, though, so it&apos;s possible that the wrapping isn&apos;t needed in every place where I have it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461879</commentid>
    <comment_count>30</comment_count>
      <attachid>350303</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-21 09:20:14 -0700</bug_when>
    <thetext>Comment on attachment 350303
Updated patch.

Clearing flags on attachment: 350303

Committed r236321: &lt;https://trac.webkit.org/changeset/236321&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461880</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-21 09:20:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461881</commentid>
    <comment_count>32</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-21 09:21:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/44682001&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461911</commentid>
    <comment_count>33</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2018-09-21 10:40:04 -0700</bug_when>
    <thetext>Looks like https://trac.webkit.org/changeset/236321/webkit

has caused a builtins-generators failure: https://build.webkit.org/builders/Apple%20Sierra%20Release%20WK1%20%28Tests%29/builds/12934

Log:
https://build.webkit.org/builders/Apple%20Sierra%20Release%20WK1%20%28Tests%29/builds/12934/steps/builtins-generator-tests/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461939</commentid>
    <comment_count>34</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-09-21 11:10:42 -0700</bug_when>
    <thetext>The only one test failure is caused by changed order of lines where order is not significant</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462033</commentid>
    <comment_count>35</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2018-09-21 13:06:34 -0700</bug_when>
    <thetext>Rebaselined tests using run-builtins-generator-tests --reset-results

Committed: https://trac.webkit.org/changeset/236351/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462663</commentid>
    <comment_count>36</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2018-09-24 03:19:46 -0700</bug_when>
    <thetext>It still fails to compile without python2 installed because of:

    find_package(PythonInterp 2.7.0 REQUIRED)

in Source/cmake/WebKitCommon.cmake

Mike, can you create a patch for that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462675</commentid>
    <comment_count>37</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2018-09-24 05:29:14 -0700</bug_when>
    <thetext>I also got this error:

Traceback (most recent call last):
  File &quot;/builddir/build/BUILD/webkitgtk-2.22.2/Source/JavaScriptCore/Scripts/generateYarrUnicodePropertyTables.py&quot;, line 953, in &lt;module&gt;
    propertyDataHFile.write(header)
TypeError: a bytes-like object is required, not &apos;str&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462693</commentid>
    <comment_count>38</comment_count>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-09-24 07:37:39 -0700</bug_when>
    <thetext>(In reply to Tomas Popela from comment #37)
&gt; I also got this error:
&gt; 
&gt; Traceback (most recent call last):
&gt;   File
&gt; &quot;/builddir/build/BUILD/webkitgtk-2.22.2/Source/JavaScriptCore/Scripts/
&gt; generateYarrUnicodePropertyTables.py&quot;, line 953, in &lt;module&gt;
&gt;     propertyDataHFile.write(header)
&gt; TypeError: a bytes-like object is required, not &apos;str&apos;

I wonder if you have the changes to that file in your build, since it has been moved upstream, along with hasher.py, so you would have needed to explicitly tell patch where to find it. Specifically, the header should now be opened with &quot;w&quot;, rather than &quot;wb&quot;.
If you do, in fact, have that change, then I&apos;m puzzled as to why python would be wanting a bytes object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463420</commentid>
    <comment_count>39</comment_count>
      <attachid>350816</attachid>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-09-25 17:17:14 -0700</bug_when>
    <thetext>Created attachment 350816
Patch for cmake to use its python module

Tomas, could you try this patch, for cmake? I see that PythonInterp is deprecated in favor of Python/Python2/Python3.
Also, is there a minimum version of cmake that we should support?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463421</commentid>
    <comment_count>40</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-09-25 17:22:16 -0700</bug_when>
    <thetext>We declare the minimum at the top of the toplevel CMakeLists.txt. Currently it&apos;s at 3.3. I think we can bump it as high as CMake 3.5 (the version in Ubuntu 16.04) as I assume that&apos;s old enough for other ports to depend on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463423</commentid>
    <comment_count>41</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-09-25 17:23:15 -0700</bug_when>
    <thetext>Best create a new bug for the new patch, and be sure to set the r? and cq? flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463433</commentid>
    <comment_count>42</comment_count>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-09-25 17:32:35 -0700</bug_when>
    <thetext>I just checked cmake 3.10.2, and it doesn&apos;t have those modules, so I suspect that my last patch would bump the requirement to 3.12.0.
Might be a good thing to do in the long term, but I guess we don&apos;t want to commit it right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463575</commentid>
    <comment_count>43</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2018-09-26 06:59:29 -0700</bug_when>
    <thetext>(In reply to Mike Gorse from comment #39)
&gt; Created attachment 350816 [details]
&gt; Patch for cmake to use its python module
&gt; 
&gt; Tomas, could you try this patch, for cmake? I see that PythonInterp is
&gt; deprecated in favor of Python/Python2/Python3.
&gt; Also, is there a minimum version of cmake that we should support?

As you already said later, I do have the cmake 3.11 here and the build fails because of the missing FindPython.cmake module. Requiring 3.12 is a NO-GO. We have to find a solution for the cmake &lt; 3.3 (or 3.5 if we raise the requirement).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464388</commentid>
    <comment_count>44</comment_count>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-09-28 08:46:13 -0700</bug_when>
    <thetext>I&apos;ve filed bug 190075 for the cmake issue.
It seems like we can just add
set(Python_ADDITIONAL_VERSIONS 3)
before the find_package line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466156</commentid>
    <comment_count>45</comment_count>
    <who name="Mike Gorse">mgorse</who>
    <bug_when>2018-10-03 12:53:57 -0700</bug_when>
    <thetext>I&apos;ve noticed that, if LANG and LC_TYPE are unset, then the build still fails with python 3. A few more changes are needed. Filed bug 190258.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466924</commentid>
    <comment_count>46</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2018-10-07 04:11:36 -0700</bug_when>
    <thetext>(In reply to Mike Gorse from comment #45)
&gt; I&apos;ve noticed that, if LANG and LC_TYPE are unset, then the build still fails
&gt; with python 3. A few more changes are needed. Filed bug 190258.

Python uses these flags to determine the file system encoding. In its absence, it assumes ASCII (which is never what you want). Therefore it&apos;s important that bots or any software running Python set it appropriately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466926</commentid>
    <comment_count>47</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2018-10-07 05:38:44 -0700</bug_when>
    <thetext>Also, even when you have WebKit in a full ASCII path, the default text file encoding is derived from these environment variables too; so it&apos;s very easy that a script fails while reading any file containing non ASCII characters e.g. contributors.json or the Changelog unless it does so in binary mode or with a explicit encoding (e.g. `file = io.open(&quot;path&quot;, &quot;r&quot;, encoding=&quot;UTF-8&quot;)`).

http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335141</attachid>
            <date>2018-03-06 14:38:30 -0800</date>
            <delta_ts>2018-08-06 11:54:19 -0700</delta_ts>
            <desc>First pass</desc>
            <filename>python3.patch</filename>
            <type>text/plain</type>
            <size>97398</size>
            <attacher name="Mike Gorse">mgorse</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dl
bmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIu
cHkJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1
aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weQkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDcgKzE1OCw3IEBACiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5l
cy5hcHBlbmQoIiNkZWZpbmUgJShtYWNyb1ByZWZpeClzX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElP
Tl9QUklWQVRFX0dMT0JBTF9OQU1FKG1hY3JvKSBcXCIgJSBhcmdzKQotICAgICAgICBmdW5jdGlv
bnMgPSBmaWx0ZXIobGFtYmRhIGZ1bmN0aW9uOiBmdW5jdGlvbi5pc19nbG9iYWxfcHJpdmF0ZSwg
c2VsZi5tb2RlbCgpLmFsbF9mdW5jdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25zID0gW2Z1bmN0
aW9uIGZvciBmdW5jdGlvbiBpbiBzZWxmLm1vZGVsKCkuYWxsX2Z1bmN0aW9ucygpIGlmIGZ1bmN0
aW9uLmlzX2dsb2JhbF9wcml2YXRlXQogICAgICAgICBmdW5jdGlvbnMuc29ydChrZXk9bGFtYmRh
IHg6IHguZnVuY3Rpb25fbmFtZSkKICAgICAgICAgZm9yIGZ1bmN0aW9uIGluIGZ1bmN0aW9uczoK
ICAgICAgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9o
ZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CShyZXZp
c2lvbiAyMjkzNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9i
dWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAKIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRl
ckdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1v
ZGVsKToKICAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0g
ICAgICAgIHNlbGYuaW50ZXJuYWxzID0gZmlsdGVyKGxhbWJkYSBvYmplY3Q6ICdpbnRlcm5hbCcg
aW4gb2JqZWN0LmFubm90YXRpb25zLCBtb2RlbC5vYmplY3RzKQorICAgICAgICBzZWxmLmludGVy
bmFscyA9IFtvYmplY3QgZm9yIG9iamVjdCBpbiBtb2RlbC5vYmplY3RzIGlmICdpbnRlcm5hbCcg
aW4gb2JqZWN0LmFubm90YXRpb25zXQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToK
ICAgICAgICAgcmV0dXJuICIlc0pTQnVpbHRpbkludGVybmFscy5oIiAlIHNlbGYubW9kZWwoKS5m
cmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2lt
cGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVu
dGF0aW9uLnB5CShyZXZpc2lvbiAyMjkzNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1l
bnRhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogY2xhc3MgQnVpbHRp
bnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0
b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CiAgICAgICAgIEJ1aWx0aW5zR2Vu
ZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQotICAgICAgICBzZWxmLmludGVybmFscyA9IGZp
bHRlcihsYW1iZGEgb2JqZWN0OiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0aW9ucywgbW9k
ZWwub2JqZWN0cykKKyAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBbb2JqZWN0IGZvciBvYmplY3Qg
aW4gbW9kZWwub2JqZWN0cyBpZiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0aW9uc10KIAog
ICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNKU0J1aWx0
aW5JbnRlcm5hbHMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNw
YWNlJykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0
aW5zX21vZGVsLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5CShyZXZpc2lvbiAyMjkzNDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19tb2RlbC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCByZQogaW1w
b3J0IG9zCitpbXBvcnQgc3lzCiAKIGZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWls
dGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKIApAQCAtMTU1LDYgKzE1Niw4IEBA
CiAKICAgICAgICAgcmV0dXJuIGludGVyZmFjZQogCisgICAgZGVmIF9fbHRfXyhhLGIpOgorICAg
ICAgICByZXR1cm4gYS5mdW5jdGlvbl9uYW1lIDwgYi5mdW5jdGlvbl9uYW1lCiAKIGNsYXNzIEJ1
aWx0aW5zQ29sbGVjdGlvbjoKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWV3b3JrX25hbWUp
OgpAQCAtMjEwLDcgKzIxMyw3IEBACiAKICAgICAgICAgcmVzdWx0ID0gW10KIAotICAgICAgICBm
b3Igb3duZXIsIHllYXJzIGluIG93bmVyX3RvX3llYXJzLml0ZW1zKCk6CisgICAgICAgIGZvciBv
d25lciwgeWVhcnMgaW4gbGlzdChvd25lcl90b195ZWFycy5pdGVtcygpKToKICAgICAgICAgICAg
IHNvcnRlZF95ZWFycyA9IGxpc3QoeWVhcnMpCiAgICAgICAgICAgICBzb3J0ZWRfeWVhcnMuc29y
dCgpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIlcyAlcyIgJSAoJywgJy5qb2luKHNvcnRl
ZF95ZWFycyksIG93bmVyKSkKQEAgLTMwMyw0ICszMDYsNCBAQAogICAgICAgICAgICAgZnVuY3Rp
b25Cb3VuZHMuYXBwZW5kKChzdGFydCwgZW5kKSkKIAogICAgICAgICBmdW5jdGlvblN0cmluZ3Mg
PSBbdGV4dFtzdGFydDplbmRdLnN0cmlwKCkgZm9yIChzdGFydCwgZW5kKSBpbiBmdW5jdGlvbkJv
dW5kc10KLSAgICAgICAgcmV0dXJuIG1hcChCdWlsdGluRnVuY3Rpb24uZnJvbVN0cmluZywgZnVu
Y3Rpb25TdHJpbmdzKQorICAgICAgICByZXR1cm4gbGlzdChtYXAoQnVpbHRpbkZ1bmN0aW9uLmZy
b21TdHJpbmcsIGZ1bmN0aW9uU3RyaW5ncykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9jc3NtaW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvY3NzbWluLnB5CShyZXZpc2lvbiAyMjkzNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9jc3NtaW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDQgKzQ2LDcgQEAKICAg
ICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDMgYW5kIHN5cy5zdGRpbi5lbmNvZGluZyAhPSAn
VVRGLTgnOgogICAgICAgICBpbXBvcnQgaW8KICAgICAgICAgc3lzLnN0ZGluID0gaW8uVGV4dElP
V3JhcHBlcihzeXMuc3RkaW4uYnVmZmVyLCBlbmNvZGluZz0nVVRGLTgnKQorICAgIGlmIHN5cy52
ZXJzaW9uX2luZm9bMF0gPT0gMyBhbmQgc3lzLnN0ZG91dC5lbmNvZGluZyAhPSAnVVRGLTgnOgor
ICAgICAgICBpbXBvcnQgaW8KKyAgICAgICAgc3lzLnN0ZG91dCA9IGlvLlRleHRJT1dyYXBwZXIo
c3lzLnN0ZG91dC5idWZmZXIsIGVuY29kaW5nPSdVVEYtOCcpCiAgICAgc3lzLnN0ZG91dC53cml0
ZShjc3NtaW5pZnkoc3lzLnN0ZGluLnJlYWQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQkocmV2aXNpb24g
MjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVp
bHRpbnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIGltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBvcworaW1wb3J0IHN5cwogCiBsb2dnaW5nLmJhc2lj
Q29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnLCBsZXZlbD1sb2dnaW5n
LkVSUk9SKQogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCkBAIC0zNywxNCArMzgs
MjYgQEAKIAogZnJvbSBsYXp5d3JpdGVyIGltcG9ydCBMYXp5RmlsZVdyaXRlcgogCi1mcm9tIGJ1
aWx0aW5zIGltcG9ydCAqCitmcm9tIGJ1aWx0aW5zX21vZGVsIGltcG9ydCAqCitmcm9tIGJ1aWx0
aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlciBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5l
cmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5l
cmF0ZV9zZXBhcmF0ZV9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVfc2Vw
YXJhdGVfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVfd3Jh
cHBlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3Jh
cHBlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKIAotCiBkZWYgY29uY2F0ZW5hdGVkX291dHB1
dF9maWxlbmFtZShidWlsdGluc19maWxlcywgZnJhbWV3b3JrX25hbWUsIGdlbmVyYXRlX29ubHlf
d3JhcHBlcl9maWxlcyk6CiAgICAgaWYgZ2VuZXJhdGVfb25seV93cmFwcGVyX2ZpbGVzOgogICAg
ICAgICByZXR1cm4gZnJhbWV3b3JrX25hbWUgKyAnSlNCdWlsdGlucy5oLXJlc3VsdCcKICAgICBy
ZXR1cm4gb3MucGF0aC5iYXNlbmFtZShidWlsdGluc19maWxlc1swXSkgKyAnLXJlc3VsdCcKIAor
ZGVmIGRvb3BlbihmaWxlLCBtb2RlKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yID09
IDI6CisgICAgICAgIHJldHVybiBvcGVuKGZpbGUsIG1vZGUpCisgICAgZWxzZToKKyAgICAgICAg
cmV0dXJuIG9wZW4oZmlsZSwgbW9kZSwgZW5jb2Rpbmc9IlVURi04IikKIAogZGVmIGdlbmVyYXRl
X2JpbmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGg9Tm9uZSwKQEAgLTU5
LDcgKzcyLDcgQEAKICAgICBtb2RlbCA9IEJ1aWx0aW5zQ29sbGVjdGlvbihmcmFtZXdvcmtfbmFt
ZT1mcmFtZXdvcmtfbmFtZSkKIAogICAgIGZvciBmaWxlcGF0aCBpbiBidWlsdGluc19maWxlczoK
LSAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIpIGFzIGZpbGU6CisgICAgICAgIHdpdGgg
ZG9vcGVuKGZpbGVwYXRoLCAiciIpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlX3RleHQgPSBm
aWxlLnJlYWQoKQogICAgICAgICAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxl
cGF0aCkKIApAQCAtMTQ2LDcgKzE1OSw3IEBACiAgICAgICAgIGZvciBmaWxlcGF0aCBpbiBvcy5s
aXN0ZGlyKGFyZ19vcHRpb25zLmlucHV0X2RpcmVjdG9yeSk6CiAgICAgICAgICAgICBpbnB1dF9m
aWxlcGF0aHMuYXBwZW5kKG9zLnBhdGguam9pbihhcmdfb3B0aW9ucy5pbnB1dF9kaXJlY3Rvcnks
IGZpbGVwYXRoKSkKIAotICAgIGlucHV0X2ZpbGVwYXRocyA9IHNvcnRlZChmaWx0ZXIobGFtYmRh
IG5hbWU6IGZubWF0Y2guZm5tYXRjaChuYW1lLCAnKi5qcycpLCBpbnB1dF9maWxlcGF0aHMpKQor
ICAgIGlucHV0X2ZpbGVwYXRocyA9IHNvcnRlZChbbmFtZSBmb3IgbmFtZSBpbiBpbnB1dF9maWxl
cGF0aHMgaWYgZm5tYXRjaC5mbm1hdGNoKG5hbWUsICcqLmpzJyldKQogCiAgICAgb3B0aW9ucyA9
IHsKICAgICAgICAgJ291dHB1dF9wYXRoJzogYXJnX29wdGlvbnMub3V0cHV0X2RpcmVjdG9yeSwK
QEAgLTE1OSw3ICsxNzIsNyBAQAogCiAgICAgbG9nLmRlYnVnKCJHZW5lcmF0aW5nIGNvZGUgZm9y
IGJ1aWx0aW5zLiIpCiAgICAgbG9nLmRlYnVnKCJQYXJzZWQgb3B0aW9uczoiKQotICAgIGZvciBv
cHRpb24sIHZhbHVlIGluIG9wdGlvbnMuaXRlbXMoKToKKyAgICBmb3Igb3B0aW9uLCB2YWx1ZSBp
biBsaXN0KG9wdGlvbnMuaXRlbXMoKSk6CiAgICAgICAgIGxvZy5kZWJ1ZygiICAgICVzOiAlcyIg
JSAob3B0aW9uLCB2YWx1ZSkpCiAgICAgbG9nLmRlYnVnKCIiKQogICAgIGxvZy5kZWJ1ZygiSW5w
dXQgZmlsZXM6IikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRl
WWFyclVuaWNvZGVQcm9wZXJ0eVRhYmxlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZVlhcnJVbmljb2RlUHJvcGVydHlUYWJsZXMucHkJKHJl
dmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRl
WWFyclVuaWNvZGVQcm9wZXJ0eVRhYmxlcy5weQkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAs
MTAgQEAKIAogZGVmIG9wZW5PckV4aXQocGF0aCwgbW9kZSk6CiAgICAgdHJ5OgotICAgICAgICBy
ZXR1cm4gb3BlbihwYXRoLCBtb2RlKQorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9y
ID09IDIgb3IgbW9kZSA9PSAid2IiIG9yIG1vZGUgPT0gInJiIjoKKyAgICAgICAgICAgIHJldHVy
biBvcGVuKHBhdGgsIG1vZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3Bl
bihwYXRoLCBtb2RlLCBlbmNvZGluZyA9ICJVVEYtOCIpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMg
ZToKICAgICAgICAgcHJpbnQoIkkvTyBlcnJvciBvcGVuaW5nIHswfSwgKHsxfSk6IHsyfSIuZm9y
bWF0KHBhdGgsIGUuZXJybm8sIGUuc3RyZXJyb3IpKQogICAgICAgICBleGl0KDEpCkBAIC0yMTQs
NyArMjE3LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gIiIKICAgICAgICAgcmV0dXJuIHNlbGYu
YWxpYXNUb1NjcmlwdFtuYW1lXQogCitkZWYgZG93cml0ZShmaWxlLCBzdHIpOgorICAgIGlmIHN5
cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgZmlsZS53cml0ZShzdHIpCisgICAg
ZWxzZToKKyAgICAgICAgZmlsZS53cml0ZShieXRlcyhzdHIsICJ1dGYtOCIpKQogCisKIGNsYXNz
IFByb3BlcnR5RGF0YToKICAgICBhbGxQcm9wZXJ0eURhdGEgPSBbXQogCkBAIC0zMjIsNyArMzMx
LDcgQEAKICAgICAgICAgaW5zZXJ0TG9jYXRpb24gPSBOb25lCiAgICAgICAgIGxvd0NvZGVQb2lu
dCA9IE5vbmUKICAgICAgICAgaGlnaENvZGVQb2ludCA9IE5vbmUKLSAgICAgICAgZm9yIGlkeCBp
biB4cmFuZ2UobGVuKG1hdGNoZXMpKToKKyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4obWF0
Y2hlcykpOgogICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaGVzW2lkeF0KICAgICAgICAgICAgIGlm
IGNvZGVQb2ludCA9PSBtYXRjaCArIDE6CiAgICAgICAgICAgICAgICAgbG93Q29kZVBvaW50ID0g
bWF0Y2gKQEAgLTM1MSwyMiArMzYwLDIyIEBACiAgICAgICAgICAgICBsb3dDb2RlUG9pbnQgPSBj
b2RlUG9pbnQKICAgICAgICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBjb2RlUG9pbnQKIAotICAgICAg
ICBmb3IgaWR4IGluIHhyYW5nZShsZW4ocmFuZ2VzKSk6Ci0gICAgICAgICAgICByYW5nZSA9IHJh
bmdlc1tpZHhdCi0gICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPj0gcmFuZ2VbMF0gYW5kIGhp
Z2hDb2RlUG9pbnQgPD0gcmFuZ2VbMV06CisgICAgICAgIGZvciBpZHggaW4gcmFuZ2UobGVuKHJh
bmdlcykpOgorICAgICAgICAgICAgY3VyX3JhbmdlID0gcmFuZ2VzW2lkeF0KKyAgICAgICAgICAg
IGlmIGxvd0NvZGVQb2ludCA+PSBjdXJfcmFuZ2VbMF0gYW5kIGhpZ2hDb2RlUG9pbnQgPD0gY3Vy
X3JhbmdlWzFdOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgaWYgbG93Q29k
ZVBvaW50IDw9IChyYW5nZVsxXSArIDEpIGFuZCBoaWdoQ29kZVBvaW50ID49IChyYW5nZVswXSAt
IDEpOgorICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50IDw9IChjdXJfcmFuZ2VbMV0gKyAxKSBh
bmQgaGlnaENvZGVQb2ludCA+PSAoY3VyX3JhbmdlWzBdIC0gMSk6CiAgICAgICAgICAgICAgICAg
d2hpbGUgaWR4IDwgbGVuKHJhbmdlcykgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gKHJhbmdlc1tpZHhd
WzBdIC0gMSk6Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VzW2lkeF0KLSAgICAg
ICAgICAgICAgICAgICAgbG93Q29kZVBvaW50ID0gbWluKGxvd0NvZGVQb2ludCwgcmFuZ2VbMF0p
Ci0gICAgICAgICAgICAgICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBtYXgoaGlnaENvZGVQb2ludCwg
cmFuZ2VbMV0pCisgICAgICAgICAgICAgICAgICAgIGN1cl9yYW5nZSA9IHJhbmdlc1tpZHhdCisg
ICAgICAgICAgICAgICAgICAgIGxvd0NvZGVQb2ludCA9IG1pbihsb3dDb2RlUG9pbnQsIGN1cl9y
YW5nZVswXSkKKyAgICAgICAgICAgICAgICAgICAgaGlnaENvZGVQb2ludCA9IG1heChoaWdoQ29k
ZVBvaW50LCBjdXJfcmFuZ2VbMV0pCiAgICAgICAgICAgICAgICAgICAgIGRlbCByYW5nZXNbaWR4
XQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvZGVQb2ludENvdW50ID0gc2VsZi5jb2RlUG9p
bnRDb3VudCAtIChyYW5nZVsxXSAtIHJhbmdlWzBdKSAtIDEKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgLSAoY3VyX3JhbmdlWzFd
IC0gY3VyX3JhbmdlWzBdKSAtIDEKIAogICAgICAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQoaWR4
LCAobG93Q29kZVBvaW50LCBoaWdoQ29kZVBvaW50KSkKICAgICAgICAgICAgICAgICBzZWxmLmNv
ZGVQb2ludENvdW50ID0gc2VsZi5jb2RlUG9pbnRDb3VudCArIChoaWdoQ29kZVBvaW50IC0gbG93
Q29kZVBvaW50KSArIDEKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGVsaWYg
aGlnaENvZGVQb2ludCA8IHJhbmdlWzBdOgorICAgICAgICAgICAgZWxpZiBoaWdoQ29kZVBvaW50
IDwgY3VyX3JhbmdlWzBdOgogICAgICAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCAhPSBoaWdo
Q29kZVBvaW50OgogICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgKGxvd0Nv
ZGVQb2ludCwgaGlnaENvZGVQb2ludCkpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZVBv
aW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50ICsgKGhpZ2hDb2RlUG9pbnQgLSBsb3dDb2Rl
UG9pbnQpICsgMQpAQCAtMzg0LDcgKzM5Myw3IEBACiAKICAgICBkZWYgYWRkUmFuZ2VVbm9yZGVy
ZWRGb3JNYXRjaGVzQW5kUmFuZ2VzKHNlbGYsIGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCwg
bWF0Y2hlcywgcmFuZ2VzKToKICAgICAgICAgaWYgbGVuKG1hdGNoZXMpIGFuZCBoaWdoQ29kZVBv
aW50ID49IG1hdGNoZXNbMF0gYW5kIGxvd0NvZGVQb2ludCA8PSBtYXRjaGVzWy0xXToKLSAgICAg
ICAgICAgIGZvciBpZHggaW4geHJhbmdlKGxlbihtYXRjaGVzKSk6CisgICAgICAgICAgICBmb3Ig
aWR4IGluIHJhbmdlKGxlbihtYXRjaGVzKSk6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBtYXRj
aGVzW2lkeF0KICAgICAgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gbWF0Y2ggYW5kIGhp
Z2hDb2RlUG9pbnQgPj0gbWF0Y2g6CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGlkeCA8IGxl
bihtYXRjaGVzKSBhbmQgaGlnaENvZGVQb2ludCA+PSBtYXRjaGVzW2lkeF06CkBAIC00MTQsMjIg
KzQyMywyMiBAQAogICAgICAgICAgICAgICAgIGVsaWYgaGlnaENvZGVQb2ludCA8IG1hdGNoOgog
ICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgIGZvciBpZHggaW4geHJhbmdlKGxl
bihyYW5nZXMpKToKLSAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VzW2lkeF0KLSAgICAgICAgICAg
IGlmIGxvd0NvZGVQb2ludCA+PSByYW5nZVswXSBhbmQgaGlnaENvZGVQb2ludCA8PSByYW5nZVsx
XToKKyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4ocmFuZ2VzKSk6CisgICAgICAgICAgICBj
dXJfcmFuZ2UgPSByYW5nZXNbaWR4XQorICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50ID49IGN1
cl9yYW5nZVswXSBhbmQgaGlnaENvZGVQb2ludCA8PSBjdXJfcmFuZ2VbMV06CiAgICAgICAgICAg
ICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gKHJhbmdlWzFdICsg
MSkgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gKHJhbmdlWzBdIC0gMSk6CisgICAgICAgICAgICBpZiBs
b3dDb2RlUG9pbnQgPD0gKGN1cl9yYW5nZVsxXSArIDEpIGFuZCBoaWdoQ29kZVBvaW50ID49IChj
dXJfcmFuZ2VbMF0gLSAxKToKICAgICAgICAgICAgICAgICB3aGlsZSBpZHggPCBsZW4ocmFuZ2Vz
KSBhbmQgaGlnaENvZGVQb2ludCA+PSAocmFuZ2VzW2lkeF1bMF0gLSAxKToKLSAgICAgICAgICAg
ICAgICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAgICAgICAgICAgICAgICBsb3dDb2Rl
UG9pbnQgPSBtaW4obG93Q29kZVBvaW50LCByYW5nZVswXSkKLSAgICAgICAgICAgICAgICAgICAg
aGlnaENvZGVQb2ludCA9IG1heChoaWdoQ29kZVBvaW50LCByYW5nZVsxXSkKKyAgICAgICAgICAg
ICAgICAgICAgY3VyX3JhbmdlID0gcmFuZ2VzW2lkeF0KKyAgICAgICAgICAgICAgICAgICAgbG93
Q29kZVBvaW50ID0gbWluKGxvd0NvZGVQb2ludCwgY3VyX3JhbmdlWzBdKQorICAgICAgICAgICAg
ICAgICAgICBoaWdoQ29kZVBvaW50ID0gbWF4KGhpZ2hDb2RlUG9pbnQsIGN1cl9yYW5nZVsxXSkK
ICAgICAgICAgICAgICAgICAgICAgZGVsIHJhbmdlc1tpZHhdCi0gICAgICAgICAgICAgICAgICAg
IHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50IC0gKHJhbmdlWzFdIC0g
cmFuZ2VbMF0pIC0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvZGVQb2ludENvdW50ID0g
c2VsZi5jb2RlUG9pbnRDb3VudCAtIChjdXJfcmFuZ2VbMV0gLSBjdXJfcmFuZ2VbMF0pIC0gMQog
CiAgICAgICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIChsb3dDb2RlUG9pbnQsIGhpZ2hD
b2RlUG9pbnQpKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNv
ZGVQb2ludENvdW50ICsgKGhpZ2hDb2RlUG9pbnQgLSBsb3dDb2RlUG9pbnQpICsgMQogICAgICAg
ICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZWxpZiBoaWdoQ29kZVBvaW50IDwgcmFuZ2Vb
MF06CisgICAgICAgICAgICBlbGlmIGhpZ2hDb2RlUG9pbnQgPCBjdXJfcmFuZ2VbMF06CiAgICAg
ICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIChsb3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9p
bnQpKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2lu
dENvdW50ICsgKGhpZ2hDb2RlUG9pbnQgLSBsb3dDb2RlUG9pbnQpICsgMQogICAgICAgICAgICAg
ICAgIHJldHVybgpAQCAtNDU5LDEzICs0NjgsMTMgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFk
ZFJhbmdlVW5vcmRlcmVkRm9yTWF0Y2hlc0FuZFJhbmdlcyhmaXJzdFVuaWNvZGVDb2RlUG9pbnQs
IGhpZ2hDb2RlUG9pbnQsIHNlbGYudW5pY29kZU1hdGNoZXMsIHNlbGYudW5pY29kZVJhbmdlcykK
IAogICAgIGRlZiByZW1vdmVNYXRjaEZyb21SYW5nZXMoc2VsZiwgY29kZVBvaW50LCByYW5nZXMp
OgotICAgICAgICBmb3IgaWR4IGluIHhyYW5nZShsZW4ocmFuZ2VzKSk6Ci0gICAgICAgICAgICBy
YW5nZSA9IHJhbmdlc1tpZHhdCi0gICAgICAgICAgICBpZiByYW5nZVswXSA8PSBjb2RlUG9pbnQg
YW5kIGNvZGVQb2ludCA8PSByYW5nZVsxXToKKyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4o
cmFuZ2VzKSk6CisgICAgICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNbaWR4XQorICAgICAgICAg
ICAgaWYgY3VyX3JhbmdlWzBdIDw9IGNvZGVQb2ludCBhbmQgY29kZVBvaW50IDw9IGN1cl9yYW5n
ZVsxXToKICAgICAgICAgICAgICAgICByYW5nZXMucG9wKGlkeCkKLSAgICAgICAgICAgICAgICBp
ZiByYW5nZVswXSA8IGNvZGVQb2ludCBhbmQgY29kZVBvaW50IDwgcmFuZ2VbMV06Ci0gICAgICAg
ICAgICAgICAgICAgIGxvd1JhbmdlID0gKHJhbmdlWzBdLCBjb2RlUG9pbnQgLSAxKQotICAgICAg
ICAgICAgICAgICAgICBoaWdoUmFuZ2UgPSAoY29kZVBvaW50ICsgMSwgcmFuZ2VbMV0pCisgICAg
ICAgICAgICAgICAgaWYgY3VyX3JhbmdlWzBdIDwgY29kZVBvaW50IGFuZCBjb2RlUG9pbnQgPCBj
dXJfcmFuZ2VbMV06CisgICAgICAgICAgICAgICAgICAgIGxvd1JhbmdlID0gKGN1cl9yYW5nZVsw
XSwgY29kZVBvaW50IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaGlnaFJhbmdlID0gKGNvZGVQ
b2ludCArIDEsIGN1cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAgICAgIyBTaW5jZSBsaXN0
Lmluc2VydCBpbnNlcnRzIGJlZm9yZSB0aGUgaW5kZXggZ2l2ZW4sIGhhbmRsZSB0aGUgaGlnaCBy
YW5nZSBmaXJzdAogICAgICAgICAgICAgICAgICAgICBpZiBoaWdoUmFuZ2VbMF0gPT0gaGlnaFJh
bmdlWzFdOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRNYXRjaFVub3JkZXJlZCho
aWdoUmFuZ2VbMF0pCkBAIC00NzYsMTQgKzQ4NSwxNCBAQAogICAgICAgICAgICAgICAgICAgICBl
bHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIGxvd1Jhbmdl
KQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHJhbmdlWzBd
ID09IGNvZGVQb2ludDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gKGNvZGVQb2lu
dCArIDEsIHJhbmdlWzFdKQorICAgICAgICAgICAgICAgICAgICBpZiBjdXJfcmFuZ2VbMF0gPT0g
Y29kZVBvaW50OgorICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3JhbmdlID0gKGNvZGVQb2lu
dCArIDEsIGN1cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJhbmdlID0gKHJhbmdlWzBdLCBjb2RlUG9pbnQgLSAxKQotICAgICAg
ICAgICAgICAgICAgICBpZiByYW5nZVswXSA9PSByYW5nZVsxXToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuYWRkTWF0Y2hVbm9yZGVyZWQocmFuZ2VbMF0pCisgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJfcmFuZ2UgPSAoY3VyX3JhbmdlWzBdLCBjb2RlUG9pbnQgLSAxKQorICAgICAg
ICAgICAgICAgICAgICBpZiBjdXJfcmFuZ2VbMF0gPT0gY3VyX3JhbmdlWzFdOgorICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5hZGRNYXRjaFVub3JkZXJlZChjdXJfcmFuZ2VbMF0pCiAgICAg
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5z
ZXJ0KGlkeCwgcmFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlk
eCwgY3VyX3JhbmdlKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxm
LmNvZGVQb2ludENvdW50IC0gMQogICAgICAgICAgICAgICAgIHJldHVybgogCkBAIC01MDUsMzgg
KzUxNCwzOCBAQAogICAgICAgICB2YWx1ZXNUaGlzTGluZSA9IDAKICAgICAgICAgZmlyc3RWYWx1
ZSA9IFRydWUKIAotICAgICAgICBmaWxlLndyaXRlKCJ7IikKKyAgICAgICAgZG93cml0ZShmaWxl
LCAieyIpCiAgICAgICAgIGZvciBlbGVtIGluIGRhdGFMaXN0OgogICAgICAgICAgICAgaWYgZmly
c3RWYWx1ZToKICAgICAgICAgICAgICAgICBmaXJzdFZhbHVlID0gRmFsc2UKICAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiLCAiKQorICAgICAgICAgICAgICAg
IGRvd3JpdGUoZmlsZSwgIiwgIikKICAgICAgICAgICAgIHZhbHVlc1RoaXNMaW5lID0gdmFsdWVz
VGhpc0xpbmUgKyAxCiAgICAgICAgICAgICBpZiB2YWx1ZXNUaGlzTGluZSA+IHZhbHVlc1Blckxp
bmU6Ci0gICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiXG4gICAgICAgICAgICAgICAgICIpCisg
ICAgICAgICAgICAgICAgZG93cml0ZShmaWxlLCAiXG4gICAgICAgICAgICAgICAgICIpCiAgICAg
ICAgICAgICAgICAgdmFsdWVzVGhpc0xpbmUgPSAxCiAgICAgICAgICAgICBmb3JtYXR0ZXIoZmls
ZSwgZWxlbSkKLSAgICAgICAgZmlsZS53cml0ZSgifSIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwg
In0iKQogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZSwgY29tbWFBZnRlcik6Ci0gICAgICAgIGZp
bGUud3JpdGUoInN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q2hhcmFjdGVyQ2xhc3M+IHt9KClcbnt7
XG4iLmZvcm1hdChzZWxmLmdldENyZWF0ZUZ1bmNOYW1lKCkpKQotICAgICAgICBmaWxlLndyaXRl
KCIgICAgLy8gTmFtZSA9IHt9LCBudW1iZXIgb2YgY29kZVBvaW50czoge31cbiIuZm9ybWF0KHNl
bGYubmFtZSwgc2VsZi5jb2RlUG9pbnRDb3VudCkpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICBh
dXRvIGNoYXJhY3RlckNsYXNzID0gc3RkOjptYWtlX3VuaXF1ZTxDaGFyYWN0ZXJDbGFzcz4oXG4i
KQotICAgICAgICBmaWxlLndyaXRlKCIgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVQ2hh
cjMyPigiKQotICAgICAgICBzZWxmLmR1bXBNYXRjaERhdGEoZmlsZSwgOCwgc2VsZi5tYXRjaGVz
LCBsYW1iZGEgZmlsZSwgbWF0Y2g6IChmaWxlLndyaXRlKCJ7MDowPSM0eH0iLmZvcm1hdChtYXRj
aCkpKSkKLSAgICAgICAgZmlsZS53cml0ZSgiKSxcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIiAg
ICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PENoYXJhY3RlclJhbmdlPigiKQotICAgICAgICBz
ZWxmLmR1bXBNYXRjaERhdGEoZmlsZSwgNCwgc2VsZi5yYW5nZXMsIGxhbWJkYSBmaWxlLCByYW5n
ZTogKGZpbGUud3JpdGUoInt7ezA6MD0jNHh9LCB7MTowPSM0eH19fSIuZm9ybWF0KHJhbmdlWzBd
LCByYW5nZVsxXSkpKSkKLSAgICAgICAgZmlsZS53cml0ZSgiKSxcbiIpCi0gICAgICAgIGZpbGUu
d3JpdGUoIiAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFyMzI+KCIpCi0gICAgICAg
IHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA4LCBzZWxmLnVuaWNvZGVNYXRjaGVzLCBsYW1iZGEg
ZmlsZSwgbWF0Y2g6IChmaWxlLndyaXRlKCJ7MDowPSM2eH0iLmZvcm1hdChtYXRjaCkpKSkKLSAg
ICAgICAgZmlsZS53cml0ZSgiKSxcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICAgICAgc3Rk
Ojppbml0aWFsaXplcl9saXN0PENoYXJhY3RlclJhbmdlPigiKQotICAgICAgICBzZWxmLmR1bXBN
YXRjaERhdGEoZmlsZSwgNCwgc2VsZi51bmljb2RlUmFuZ2VzLCBsYW1iZGEgZmlsZSwgcmFuZ2U6
IChmaWxlLndyaXRlKCJ7e3swOjA9IzZ4fSwgezE6MD0jNnh9fX0iLmZvcm1hdChyYW5nZVswXSwg
cmFuZ2VbMV0pKSkpCi0gICAgICAgIGZpbGUud3JpdGUoIikpO1xuIikKKyAgICAgICAgZG93cml0
ZShmaWxlLCAic3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDaGFyYWN0ZXJDbGFzcz4ge30oKVxue3tc
biIuZm9ybWF0KHNlbGYuZ2V0Q3JlYXRlRnVuY05hbWUoKSkpCisgICAgICAgIGRvd3JpdGUoZmls
ZSwgIiAgICAvLyBOYW1lID0ge30sIG51bWJlciBvZiBjb2RlUG9pbnRzOiB7fVxuIi5mb3JtYXQo
c2VsZi5uYW1lLCBzZWxmLmNvZGVQb2ludENvdW50KSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAi
ICAgIGF1dG8gY2hhcmFjdGVyQ2xhc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPENoYXJhY3RlckNsYXNz
PihcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICAgICAgc3RkOjppbml0aWFsaXplcl9s
aXN0PFVDaGFyMzI+KCIpCisgICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA4LCBzZWxm
Lm1hdGNoZXMsIGxhbWJkYSBmaWxlLCBtYXRjaDogKGRvd3JpdGUoZmlsZSwgInswOjA9IzR4fSIu
Zm9ybWF0KG1hdGNoKSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIpLFxuIikKKyAgICAgICAg
ZG93cml0ZShmaWxlLCAiICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2hhcmFjdGVyUmFu
Z2U+KCIpCisgICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA0LCBzZWxmLnJhbmdlcywg
bGFtYmRhIGZpbGUsIHJhbmdlOiAoZG93cml0ZShmaWxlLCAie3t7MDowPSM0eH0sIHsxOjA9IzR4
fX19Ii5mb3JtYXQocmFuZ2VbMF0sIHJhbmdlWzFdKSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUs
ICIpLFxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAgICAgICBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VUNoYXIzMj4oIikKKyAgICAgICAgc2VsZi5kdW1wTWF0Y2hEYXRhKGZpbGUsIDgsIHNl
bGYudW5pY29kZU1hdGNoZXMsIGxhbWJkYSBmaWxlLCBtYXRjaDogKGRvd3JpdGUoZmlsZSwgInsw
OjA9IzZ4fSIuZm9ybWF0KG1hdGNoKSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIpLFxuIikK
KyAgICAgICAgZG93cml0ZShmaWxlLCAiICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2hh
cmFjdGVyUmFuZ2U+KCIpCisgICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA0LCBzZWxm
LnVuaWNvZGVSYW5nZXMsIGxhbWJkYSBmaWxlLCByYW5nZTogKGRvd3JpdGUoZmlsZSwgInt7ezA6
MD0jNnh9LCB7MTowPSM2eH19fSIuZm9ybWF0KHJhbmdlWzBdLCByYW5nZVsxXSkpKSkKKyAgICAg
ICAgZG93cml0ZShmaWxlLCAiKSk7XG4iKQogCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICBjaGFy
YWN0ZXJDbGFzcy0+bV9oYXNOb25CTVBDaGFyYWN0ZXJzID0ge307XG4iLmZvcm1hdCgoImZhbHNl
IiwgInRydWUiKVtzZWxmLmhhc05vbkJNUENoYXJhY3RlcnNdKSkKLSAgICAgICAgZmlsZS53cml0
ZSgiICAgIHJldHVybiBjaGFyYWN0ZXJDbGFzcztcbn1cblxuIikKKyAgICAgICAgZG93cml0ZShm
aWxlLCAiICAgIGNoYXJhY3RlckNsYXNzLT5tX2hhc05vbkJNUENoYXJhY3RlcnMgPSB7fTtcbiIu
Zm9ybWF0KCgiZmFsc2UiLCAidHJ1ZSIpW3NlbGYuaGFzTm9uQk1QQ2hhcmFjdGVyc10pKQorICAg
ICAgICBkb3dyaXRlKGZpbGUsICIgICAgcmV0dXJuIGNoYXJhY3RlckNsYXNzO1xufVxuXG4iKQog
CiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGR1bXBBbGwoY2xzLCBmaWxlKToKQEAgLTU0Mywy
MSArNTUyLDIxIEBACiAgICAgICAgIGZvciBwcm9wZXJ0eURhdGEgaW4gY2xzLmFsbFByb3BlcnR5
RGF0YToKICAgICAgICAgICAgIHByb3BlcnR5RGF0YS5kdW1wKGZpbGUsIHByb3BlcnR5RGF0YSAh
PSBjbHMuYWxsUHJvcGVydHlEYXRhWy0xXSkKIAotICAgICAgICBmaWxlLndyaXRlKCJ0eXBlZGVm
IHN0ZDo6dW5pcXVlX3B0cjxDaGFyYWN0ZXJDbGFzcz4gKCpDcmVhdGVDaGFyYWN0ZXJDbGFzcyko
KTtcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoInN0YXRpYyBDcmVhdGVDaGFyYWN0ZXJDbGFzcyBj
cmVhdGVGdW5jdGlvbnNbe31dID0ge3tcbiAgICIuZm9ybWF0KGxlbihjbHMuYWxsUHJvcGVydHlE
YXRhKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgInR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPENo
YXJhY3RlckNsYXNzPiAoKkNyZWF0ZUNoYXJhY3RlckNsYXNzKSgpO1xuIikKKyAgICAgICAgZG93
cml0ZShmaWxlLCAic3RhdGljIENyZWF0ZUNoYXJhY3RlckNsYXNzIGNyZWF0ZUZ1bmN0aW9uc1t7
fV0gPSB7e1xuICAgIi5mb3JtYXQobGVuKGNscy5hbGxQcm9wZXJ0eURhdGEpKSkKICAgICAgICAg
ZnVuY3Rpb25zT25UaGlzTGluZSA9IDAKICAgICAgICAgZm9yIHByb3BlcnR5RGF0YSBpbiBjbHMu
YWxsUHJvcGVydHlEYXRhOgotICAgICAgICAgICAgZmlsZS53cml0ZSgiIHt9LCIuZm9ybWF0KHBy
b3BlcnR5RGF0YS5nZXRDcmVhdGVGdW5jTmFtZSgpKSkKKyAgICAgICAgICAgIGRvd3JpdGUoZmls
ZSwgIiB7fSwiLmZvcm1hdChwcm9wZXJ0eURhdGEuZ2V0Q3JlYXRlRnVuY05hbWUoKSkpCiAgICAg
ICAgICAgICBmdW5jdGlvbnNPblRoaXNMaW5lID0gZnVuY3Rpb25zT25UaGlzTGluZSArIDEKICAg
ICAgICAgICAgIGlmIGZ1bmN0aW9uc09uVGhpc0xpbmUgPT0gNDoKLSAgICAgICAgICAgICAgICBm
aWxlLndyaXRlKCJcbiAgICIpCisgICAgICAgICAgICAgICAgZG93cml0ZShmaWxlLCAiXG4gICAi
KQogICAgICAgICAgICAgICAgIGZ1bmN0aW9uc09uVGhpc0xpbmUgPSAwCiAKLSAgICAgICAgZmls
ZS53cml0ZSgifTtcblxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAifTtcblxuIikKIAogICAg
IEBjbGFzc21ldGhvZAogICAgIGRlZiBjcmVhdGVBbmREdW1wSGFzaFRhYmxlKHNlbGYsIGZpbGUs
IHByb3BlcnR5RGljdCwgdGFibGVQcmVmaXgpOgotICAgICAgICBwcm9wZXJ0eUtleXMgPSBwcm9w
ZXJ0eURpY3Qua2V5cygpCisgICAgICAgIHByb3BlcnR5S2V5cyA9IGxpc3QocHJvcGVydHlEaWN0
LmtleXMoKSkKICAgICAgICAgbnVtYmVyT2ZLZXlzID0gbGVuKHByb3BlcnR5S2V5cykKICAgICAg
ICAgaGFzaFNpemUgPSBjZWlsaW5nVG9Qb3dlck9mMihudW1iZXJPZktleXMgKiAyKQogICAgICAg
ICBoYXNoTWFzayA9IGhhc2hTaXplIC0gMQpAQCAtNTg3LDcgKzU5Niw3IEBACiAgICAgICAgICAg
ICBoYXNoVGFibGVbaGFzaF0gPSAobGVuKHZhbHVlVGFibGUpLCBOb25lKQogICAgICAgICAgICAg
dmFsdWVUYWJsZS5hcHBlbmQoKGtleSwga2V5VmFsdWVbMV0pKQogCi0gICAgICAgIGZpbGUud3Jp
dGUoInN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaEluZGV4IHt9VGFibGVJbmRleFt7fV0gPSB7e1xu
Ii5mb3JtYXQodGFibGVQcmVmaXgsIGxlbihoYXNoVGFibGUpKSkKKyAgICAgICAgZG93cml0ZShm
aWxlLCAic3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoSW5kZXgge31UYWJsZUluZGV4W3t9XSA9IHt7
XG4iLmZvcm1hdCh0YWJsZVByZWZpeCwgbGVuKGhhc2hUYWJsZSkpKQogCiAgICAgICAgIGZvciB0
YWJsZUluZGV4IGluIGhhc2hUYWJsZToKICAgICAgICAgICAgIHZhbHVlID0gLTEKQEAgLTU5Nywx
NyArNjA2LDE3IEBACiAgICAgICAgICAgICAgICAgaWYgdGFibGVJbmRleFsxXSBpcyBub3QgTm9u
ZToKICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRhYmxlSW5kZXhbMV0KIAotICAgICAgICAg
ICAgZmlsZS53cml0ZSgiICAgIHt7IHt9LCB7fSB9fSxcbiIuZm9ybWF0KHZhbHVlLCBuZXh0KSkK
KyAgICAgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICB7eyB7fSwge30gfX0sXG4iLmZvcm1hdCh2
YWx1ZSwgbmV4dCkpCiAKLSAgICAgICAgZmlsZS53cml0ZSgifTtcblxuIikKKyAgICAgICAgZG93
cml0ZShmaWxlLCAifTtcblxuIikKIAotICAgICAgICBmaWxlLndyaXRlKCJzdGF0aWMgY29uc3Qg
c3RydWN0IEhhc2hWYWx1ZSB7fVRhYmxlVmFsdWVbe31dID0ge3tcbiIuZm9ybWF0KHRhYmxlUHJl
Zml4LCBsZW4odmFsdWVUYWJsZSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJzdGF0aWMgY29u
c3Qgc3RydWN0IEhhc2hWYWx1ZSB7fVRhYmxlVmFsdWVbe31dID0ge3tcbiIuZm9ybWF0KHRhYmxl
UHJlZml4LCBsZW4odmFsdWVUYWJsZSkpKQogICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVUYWJs
ZToKLSAgICAgICAgICAgIGZpbGUud3JpdGUoIiAgICB7eyBcInt9XCIsIHt9IH19LFxuIi5mb3Jt
YXQodmFsdWVbMF0sIHZhbHVlWzFdKSkKLSAgICAgICAgZmlsZS53cml0ZSgifTtcblxuIikKKyAg
ICAgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICB7eyBcInt9XCIsIHt9IH19LFxuIi5mb3JtYXQo
dmFsdWVbMF0sIHZhbHVlWzFdKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAifTtcblxuIikKIAot
ICAgICAgICBmaWxlLndyaXRlKCJzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZSB7fUhhc2hU
YWJsZSA9IFxuIi5mb3JtYXQodGFibGVQcmVmaXgpKQotICAgICAgICBmaWxlLndyaXRlKCIgICAg
e3sge30sIHt9LCB7fVRhYmxlVmFsdWUsIHt9VGFibGVJbmRleCB9fTtcblxuIi5mb3JtYXQobGVu
KHZhbHVlVGFibGUpLCBoYXNoTWFzaywgdGFibGVQcmVmaXgsIHRhYmxlUHJlZml4KSkKKyAgICAg
ICAgZG93cml0ZShmaWxlLCAic3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGUge31IYXNoVGFi
bGUgPSBcbiIuZm9ybWF0KHRhYmxlUHJlZml4KSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAg
IHt7IHt9LCB7fSwge31UYWJsZVZhbHVlLCB7fVRhYmxlSW5kZXggfX07XG5cbiIuZm9ybWF0KGxl
bih2YWx1ZVRhYmxlKSwgaGFzaE1hc2ssIHRhYmxlUHJlZml4LCB0YWJsZVByZWZpeCkpCiAKIAog
Y2xhc3MgU2NyaXB0czoKQEAgLTc0MiwyMSArNzUxLDIxIEBACiAgICAgICAgICAgICAgICAgICAg
IGxvd0NvZGVQb2ludCA9IGludChjb2RlUG9pbnRzWzpkb3REb3RdLCAxNikKICAgICAgICAgICAg
ICAgICAgICAgaGlnaENvZGVQb2ludCA9IGludChjb2RlUG9pbnRzW2RvdERvdCArIDI6XSwgMTYp
CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eURhdGEuYWRkUmFuZ2UobG93Q29k
ZVBvaW50LCBoaWdoQ29kZVBvaW50KQotICAgICAgICAgICAgICAgICAgICBmb3IgY29kZVBvaW50
IGluIHhyYW5nZShsb3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQgKyAxKToKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIGNvZGVQb2ludCBpbiByYW5nZShsb3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9p
bnQgKyAxKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNjcmlwdEV4dGVuc3Rpb25Q
cm9wZXJ0eURhdGEucmVtb3ZlTWF0Y2goY29kZVBvaW50KQogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5oZXJpdGVkU2NyaXB0RXh0ZW5zaW9uUHJvcGVydHlEYXRhLnJlbW92ZU1hdGNoKGNvZGVQ
b2ludCkKIAogICAgICAgICAjIEZvciB0aGUgc2NyaXB0cyB0aGF0IGRvbid0IGhhdmUgYW55IGFk
ZGl0aW9uYWwgZXh0ZW5zaW9uIGNvZGVQb2ludHMsIGNvcHkgdGhlIHNjcmlwdAogICAgICAgICAj
IGRhdGEgdG8gdGhlIHNjcmlwdCBleHRlbnNpb24gd2l0aCB0aGUgc2FtZSBuYW1lCi0gICAgICAg
IGZvciBzY3JpcHROYW1lLCBwcm9wZXJ0eURhdGEgaW4gc2VsZi5zY3JpcHRzQnlOYW1lLml0ZXJp
dGVtcygpOgorICAgICAgICBmb3Igc2NyaXB0TmFtZSwgcHJvcGVydHlEYXRhIGluIHNlbGYuc2Ny
aXB0c0J5TmFtZS5pdGVtcygpOgogICAgICAgICAgICAgaWYgc2NyaXB0TmFtZSBub3QgaW4gc2Vs
Zi5zY3JpcHRFeHRlbnNpb25zQnlOYW1lOgogICAgICAgICAgICAgICAgIHNlbGYuc2NyaXB0RXh0
ZW5zaW9uc0J5TmFtZVtzY3JpcHROYW1lXSA9IHByb3BlcnR5RGF0YQogCiAgICAgZGVmIGR1bXAo
c2VsZiwgZmlsZSk6Ci0gICAgICAgIGZpbGUud3JpdGUoIi8vIFNjcmlwdHM6XG4iKQorICAgICAg
ICBkb3dyaXRlKGZpbGUsICIvLyBTY3JpcHRzOlxuIikKICAgICAgICAgUHJvcGVydHlEYXRhLmNy
ZWF0ZUFuZER1bXBIYXNoVGFibGUoZmlsZSwgc2VsZi5zY3JpcHRzQnlOYW1lLCAic2NyaXB0IikK
IAotICAgICAgICBmaWxlLndyaXRlKCIvLyBTY3JpcHRfRXh0ZW5zaW9uczpcbiIpCisgICAgICAg
IGRvd3JpdGUoZmlsZSwgIi8vIFNjcmlwdF9FeHRlbnNpb25zOlxuIikKICAgICAgICAgUHJvcGVy
dHlEYXRhLmNyZWF0ZUFuZER1bXBIYXNoVGFibGUoZmlsZSwgc2VsZi5zY3JpcHRFeHRlbnNpb25z
QnlOYW1lLCAic2NyaXB0RXh0ZW5zaW9uIikKIAogCkBAIC04NzcsNyArODg2LDcgQEAKICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eURhdGFzWzFdLmFkZFJhbmdlKHNlbGYubGFzdEFkZGVkQ29kZVBv
aW50ICsgMSwgTWF4VW5pY29kZSkKIAogICAgIGRlZiBkdW1wKHNlbGYsIGZpbGUpOgotICAgICAg
ICBmaWxlLndyaXRlKCIvLyBHZW5lcmFsX0NhdGVnb3J5OlxuIikKKyAgICAgICAgZG93cml0ZShm
aWxlLCAiLy8gR2VuZXJhbF9DYXRlZ29yeTpcbiIpCiAgICAgICAgIFByb3BlcnR5RGF0YS5jcmVh
dGVBbmREdW1wSGFzaFRhYmxlKGZpbGUsIHNlbGYucHJvcGVydHlEYXRhQnlDYXRlZ29yeSwgImdl
bmVyYWxDYXRlZ29yeSIpCiAKIApAQCAtOTIwLDcgKzkyOSw3IEBACiAgICAgICAgICAgICAgICAg
Y3VycmVudFByb3BlcnR5RGF0YS5hZGRSYW5nZShpbnQoY29kZVBvaW50c1s6ZG90RG90XSwgMTYp
LCBpbnQoY29kZVBvaW50c1tkb3REb3QgKyAyOl0sIDE2KSkKIAogICAgIGRlZiBkdW1wKHNlbGYs
IGZpbGUpOgotICAgICAgICBmaWxlLndyaXRlKCIvLyBiaW5hcnkgcHJvcGVydGllczpcbiIpCisg
ICAgICAgIGRvd3JpdGUoZmlsZSwgIi8vIGJpbmFyeSBwcm9wZXJ0aWVzOlxuIikKICAgICAgICAg
UHJvcGVydHlEYXRhLmNyZWF0ZUFuZER1bXBIYXNoVGFibGUoZmlsZSwgc2VsZi5wcm9wZXJ0eURh
dGFCeVByb3BlcnR5LCAiYmluYXJ5UHJvcGVydHkiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWlu
X18iOgpAQCAtOTUwLDcgKzk1OSw3IEBACiAKICAgICBwcm9wZXJ0eURhdGFIRmlsZSA9IG9wZW5P
ckV4aXQodW5pY29kZVByb2VydHlEYXRhSFBhdGgsICJ3YiIpCiAKLSAgICBwcm9wZXJ0eURhdGFI
RmlsZS53cml0ZShoZWFkZXIpCisgICAgZG93cml0ZShwcm9wZXJ0eURhdGFIRmlsZSwgaGVhZGVy
KQogCiAgICAgYWxpYXNlcy5wYXJzZVByb3BlcnR5QWxpYXNlc0ZpbGUocHJvcGVydHlBbGlhc2Vz
RmlsZSkKICAgICBhbGlhc2VzLnBhcnNlUHJvcGVydHlWYWx1ZUFsaWFzZXNGaWxlKHByb3BlcnR5
VmFsdWVBbGlhc2VzRmlsZSkKQEAgLTk3NCw2ICs5ODMsNiBAQAogICAgIGJpbmFyeVByb3BlcnR5
LmR1bXAocHJvcGVydHlEYXRhSEZpbGUpCiAgICAgc2NyaXB0cy5kdW1wKHByb3BlcnR5RGF0YUhG
aWxlKQogCi0gICAgcHJvcGVydHlEYXRhSEZpbGUud3JpdGUoZm9vdGVyKQorICAgIGRvd3JpdGUo
cHJvcGVydHlEYXRhSEZpbGUsIGZvb3RlcikKIAogICAgIGV4aXQoMCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2hhc2hlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9oYXNoZXIucHkJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2hhc2hlci5weQkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQAogICAgIGhhc2ggPSBzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZQogCiAgICAgc3Ry
TGVuZ3RoID0gbGVuKHN0cikKLSAgICBjaGFyYWN0ZXJQYWlycyA9IHN0ckxlbmd0aCAvIDIKKyAg
ICBjaGFyYWN0ZXJQYWlycyA9IGludChzdHJMZW5ndGggLyAyKQogICAgIHJlbWFpbmRlciA9IHN0
ckxlbmd0aCAmIDEKIAogICAgICMgTWFpbiBsb29wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9qc21pbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9qc21pbi5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvanNtaW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3OSwxMyBAQAog
ICAgICAgICBkZWYgd3JpdGUoY2hhcik6CiAgICAgICAgICAgICAjIGFsbCBvZiB0aGlzIGlzIHRv
IHN1cHBvcnQgbGl0ZXJhbCByZWd1bGFyIGV4cHJlc3Npb25zLgogICAgICAgICAgICAgIyBzaWdo
Ci0gICAgICAgICAgICBpZiBjaGFyIGluICdyZXR1cm4nOgorICAgICAgICAgICAgaWYgc3RyKGNo
YXIpIGluICdyZXR1cm4nOgogICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuX2J1ZiArPSBjaGFy
CiAgICAgICAgICAgICAgICAgc2VsZi5pc19yZXR1cm4gPSBzZWxmLnJldHVybl9idWYgPT0gJ3Jl
dHVybicKLSAgICAgICAgICAgIHNlbGYub3V0cy53cml0ZShjaGFyKQorICAgICAgICAgICAgaWYg
c3lzLnZlcnNpb25faW5mby5tYWpvciA9PSAyOgorICAgICAgICAgICAgICAgIHNlbGYub3V0cy53
cml0ZShjaGFyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm91dHMu
d3JpdGUoc3RyKGNoYXIpKQogICAgICAgICAgICAgaWYgc2VsZi5pc19yZXR1cm46CiAgICAgICAg
ICAgICAgICAgc2VsZi5yZXR1cm5fYnVmID0gJycKIApAQCAtMTE4LDggKzEyMSw4IEBACiAgICAg
ICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCiAgICAgICAgIGVsaWYgbm90IHByZXZpb3VzOgog
ICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgcHJldmlvdXMgPj0gJyEnOgotICAgICAg
ICAgICAgaWYgcHJldmlvdXMgaW4gIidcIiI6CisgICAgICAgIGVsaWYgc3RyKHByZXZpb3VzKSA+
PSAiISI6CisgICAgICAgICAgICBpZiBzdHIocHJldmlvdXMpIGluICInXCIiOgogICAgICAgICAg
ICAgICAgIGluX3F1b3RlID0gcHJldmlvdXMKICAgICAgICAgICAgIHdyaXRlKHByZXZpb3VzKQog
ICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0gcHJldmlvdXMKQEAgLTE2Niw3ICsxNjks
NyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBudW1zbGFzaGVzICUgMiA9PSAwOgogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSAnJwogICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGUoJycuam9pbihxdW90ZV9idWYpKQotICAgICAgICAgICAgZWxpZiBuZXh0MSBpbiAnXHJc
bic6CisgICAgICAgICAgICBlbGlmIHN0cihuZXh0MSkgaW4gJ1xyXG4nOgogICAgICAgICAgICAg
ICAgIGlmIHByZXZpb3VzX25vbl9zcGFjZSBpbiBuZXdsaW5lZW5kX3N0cmluZ3MgXAogICAgICAg
ICAgICAgICAgICAgICBvciBwcmV2aW91c19ub25fc3BhY2UgPiAnfic6CiAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIDE6CkBAIC0xNzksNyArMTgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3IgbmV4dDIgPiAnficgb3IgbmV4dDIgPT0gJy8nOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb19uZXdsaW5lID0gVHJ1ZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbGlmIG5leHQxIDwgJyEnIGFuZCBub3QgaW5f
cmU6CisgICAgICAgICAgICBlbGlmIHN0cihuZXh0MSkgPCAnIScgYW5kIG5vdCBpbl9yZToKICAg
ICAgICAgICAgICAgICBpZiAocHJldmlvdXNfbm9uX3NwYWNlIGluIHNwYWNlX3N0cmluZ3MgXAog
ICAgICAgICAgICAgICAgICAgICBvciBwcmV2aW91c19ub25fc3BhY2UgPiAnficpIFwKICAgICAg
ICAgICAgICAgICAgICAgYW5kIChuZXh0MiBpbiBzcGFjZV9zdHJpbmdzIG9yIG5leHQyID4gJ34n
KToKQEAgLTIxNyw3ICsyMjAsNyBAQAogICAgICAgICAgICAgICAgICAgICBkb19uZXdsaW5lID0g
RmFsc2UKIAogICAgICAgICAgICAgICAgIHdyaXRlKG5leHQxKQotICAgICAgICAgICAgICAgIGlm
IG5vdCBpbl9yZSBhbmQgbmV4dDEgaW4gIidcImAiOgorICAgICAgICAgICAgICAgIGlmIG5vdCBp
bl9yZSBhbmQgc3RyKG5leHQxKSBpbiAiJ1wiYCI6CiAgICAgICAgICAgICAgICAgICAgIGluX3F1
b3RlID0gbmV4dDEKICAgICAgICAgICAgICAgICAgICAgcXVvdGVfYnVmID0gW10KIApAQCAtMjI0
LDcgKzIyNyw3IEBACiAgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCiAgICAgICAgICAgICBu
ZXh0MSA9IG5leHQyCiAKLSAgICAgICAgICAgIGlmIHByZXZpb3VzID49ICchJzoKKyAgICAgICAg
ICAgIGlmIHN0cihwcmV2aW91cykgPj0gJyEnOgogICAgICAgICAgICAgICAgIHByZXZpb3VzX25v
bl9zcGFjZSA9IHByZXZpb3VzCiAKICAgICAgICAgICAgIGlmIHByZXZpb3VzID09ICdcXCc6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9tYWtlLWpzLWZpbGUtYXJyYXlzLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL21ha2UtanMtZmls
ZS1hcnJheXMucHkJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL21ha2UtanMtZmlsZS1hcnJheXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1
LDExIEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9u
UGFyc2VyCi1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IHN5cworaWYgc3lz
LnZlcnNpb25faW5mby5tYWpvciA9PSAyOgorICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmlu
Z0lPCitlbHNlOgorICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIGpzbWluIGltcG9y
dCBKYXZhc2NyaXB0TWluaWZ5CiAKIApAQCAtMzcsNyArNDEsNyBAQAogCiAKIGRlZiBjaHVuayhs
aXN0LCBjaHVua1NpemUpOgotICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4obGlzdCksIGNodW5r
U2l6ZSk6CisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGxpc3QpLCBjaHVua1NpemUpOgogICAg
ICAgICB5aWVsZCBsaXN0W2k6aSArIGNodW5rU2l6ZV0KIAogCkBAIC04NSw3ICs4OSw3IEBACiAg
ICAgICAgIHByaW50KCdleHRlcm4gY29uc3QgY2hhciB7MDpzfUphdmFTY3JpcHRbezE6ZH1dOycu
Zm9ybWF0KHZhcmlhYmxlTmFtZSwgc2l6ZSksIGZpbGU9aGVhZGVyRmlsZSkKICAgICAgICAgcHJp
bnQoJ2NvbnN0IGNoYXIgezA6c31KYXZhU2NyaXB0W3sxOmR9XSA9IHt7Jy5mb3JtYXQodmFyaWFi
bGVOYW1lLCBzaXplKSwgZmlsZT1zb3VyY2VGaWxlKQogCi0gICAgICAgIGNvZGVwb2ludHMgPSBt
YXAob3JkLCBjaGFyYWN0ZXJzKQorICAgICAgICBjb2RlcG9pbnRzID0gbGlzdChtYXAob3JkLCBj
aGFyYWN0ZXJzKSkKICAgICAgICAgZm9yIGNvZGVwb2ludENodW5rIGluIGNodW5rKGNvZGVwb2lu
dHMsIDE2KToKICAgICAgICAgICAgIHByaW50KCcgICAgezA6c30sJy5mb3JtYXQoJywnLmpvaW4o
bWFwKHN0cmluZ2lmeUNvZGVwb2ludCwgY29kZXBvaW50Q2h1bmspKSksIGZpbGU9c291cmNlRmls
ZSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRf
b3Bjb2RlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvdWRpczg2L3VkX29wY29kZS5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfb3Bjb2RlLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC01NTAsMTAgKzU1MCwxMCBAQAogICAgICAgICAgICAgZW50cmllcyA9IHRibC5lbnRyaWVz
KCkKICAgICAgICAgICAgIGZvciBrLCBlIGluIGVudHJpZXM6CiAgICAgICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShlLCBVZE9wY29kZVRhYmxlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5s
b2coIiVzICAgIHwtPCUwMng+ICVzIiAlIChpbmRlbnQsIGssIGUpKQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLmxvZygiJXMgICAgfC08JTAyeD4gJXMiICUgKGluZGVudCwgaW50KGspLCBlKSkK
ICAgICAgICAgICAgICAgICAgICAgcHJpbnRXYWxrKGUsIGluZGVudCArICIgICAgfCIpCiAgICAg
ICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGUsIFVkSW5zbkRlZik6Ci0gICAgICAgICAgICAg
ICAgICAgIHNlbGYubG9nKCIlcyAgICB8LTwlMDJ4PiAlcyIgJSAoaW5kZW50LCBrLCBlKSkKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5sb2coIiVzICAgIHwtPCUwMng+ICVzIiAlIChpbmRlbnQs
IGludChrKSwgZSkpCiAgICAgICAgIHByaW50V2FsayhzZWxmLnJvb3QpCiAKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRlLWJ5dGVjb2RlLWZpbGVzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0ZS1ieXRlY29kZS1maWxlcwkocmV2aXNpb24g
MjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRlLWJ5dGVjb2RlLWZpbGVz
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCwxMiBAQAogICAgICAgICBwcmludCgiSS9PIGVy
cm9yIG9wZW5pbmcgezB9LCAoezF9KTogezJ9Ii5mb3JtYXQocGF0aCwgZS5lcnJubywgZS5zdHJl
cnJvcikpCiAgICAgICAgIGV4aXQoMSkKIAorZGVmIGRvd3JpdGUoZmlsZSwgc3RyKToKKyAgICBp
ZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yID09IDI6CisgICAgICAgIGZpbGUud3JpdGUoc3RyKQor
ICAgIGVsc2U6CisgICAgICAgIGZpbGUud3JpdGUoYnl0ZXMoc3RyLCAidXRmLTgiKSkKKwogZGVm
IGhhc2hGaWxlKGZpbGUpOgogICAgIHNoYTEgPSBoYXNobGliLnNoYTEoKQogICAgIGZpbGUuc2Vl
aygwKQpAQCAtMTEyLDMxICsxMTgsMzEgQEAKIAogCiBkZWYgd3JpdGVJbnN0cnVjdGlvbkFjY2Vz
c29yKGJ5dGVjb2RlSEZpbGUsIHR5cGVOYW1lLCBuYW1lKToKLSAgICBieXRlY29kZUhGaWxlLndy
aXRlKCIgICAgezB9JiB7MX0oKSB7eyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8ezB9Kj4oJm1f
ezF9KTsgfX1cbiIuZm9ybWF0KHR5cGVOYW1lLCBuYW1lKSkKLSAgICBieXRlY29kZUhGaWxlLndy
aXRlKCIgICAgY29uc3QgezB9JiB7MX0oKSBjb25zdCB7eyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgezB9Kj4oJm1fezF9KTsgfX1cbiIuZm9ybWF0KHR5cGVOYW1lLCBuYW1lKSkKKyAg
ICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsICIgICAgezB9JiB7MX0oKSB7eyByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8ezB9Kj4oJm1fezF9KTsgfX1cbiIuZm9ybWF0KHR5cGVOYW1lLCBuYW1lKSkK
KyAgICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsICIgICAgY29uc3QgezB9JiB7MX0oKSBjb25zdCB7
eyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgezB9Kj4oJm1fezF9KTsgfX1cbiIuZm9y
bWF0KHR5cGVOYW1lLCBuYW1lKSkKIAogCiBkZWYgd3JpdGVJbnN0cnVjdGlvbk1lbWJlcihieXRl
Y29kZUhGaWxlLCB0eXBlTmFtZSwgbmFtZSk6Ci0gICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiICAg
IHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZih7MH0pLCBzaXplb2YoSW5zdHJ1Y3Rpb24pPjo6
dHlwZSBtX3sxfTtcbiIuZm9ybWF0KHR5cGVOYW1lLCBuYW1lKSkKKyAgICBkb3dyaXRlKGJ5dGVj
b2RlSEZpbGUsICIgICAgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKHswfSksIHNpemVvZihJ
bnN0cnVjdGlvbik+Ojp0eXBlIG1fezF9O1xuIi5mb3JtYXQodHlwZU5hbWUsIG5hbWUpKQogCiAK
IGRlZiB3cml0ZVN0cnVjdChieXRlY29kZUhGaWxlLCBieXRlY29kZSk6Ci0gICAgYnl0ZWNvZGVI
RmlsZS53cml0ZSgic3RydWN0IHswfSB7e1xuIi5mb3JtYXQodG9DcHAoYnl0ZWNvZGVbIm5hbWUi
XSkpKQotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoInB1YmxpYzpcbiIpCisgICAgZG93cml0ZShi
eXRlY29kZUhGaWxlLCAic3RydWN0IHswfSB7e1xuIi5mb3JtYXQodG9DcHAoYnl0ZWNvZGVbIm5h
bWUiXSkpKQorICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgInB1YmxpYzpcbiIpCiAKICAgICB3
cml0ZUluc3RydWN0aW9uQWNjZXNzb3IoYnl0ZWNvZGVIRmlsZSwgIk9wY29kZSIsICJvcGNvZGUi
KQogICAgIGZvciBvZmZzZXQgaW4gYnl0ZWNvZGVbIm9mZnNldHMiXToKLSAgICAgICAgZm9yIG5h
bWUsIHR5cGVOYW1lIGluIG9mZnNldC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHR5
cGVOYW1lIGluIG9mZnNldC5pdGVtcygpOgogICAgICAgICAgICAgd3JpdGVJbnN0cnVjdGlvbkFj
Y2Vzc29yKGJ5dGVjb2RlSEZpbGUsIHR5cGVOYW1lLCBuYW1lKQogCi0gICAgYnl0ZWNvZGVIRmls
ZS53cml0ZSgiXG5wcml2YXRlOlxuIikKLSAgICBieXRlY29kZUhGaWxlLndyaXRlKCIgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjtcblxuIikKKyAgICBkb3dyaXRlKGJ5dGVj
b2RlSEZpbGUsICJcbnByaXZhdGU6XG4iKQorICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yO1xuXG4iKQogCiAgICAgd3JpdGVJ
bnN0cnVjdGlvbk1lbWJlcihieXRlY29kZUhGaWxlLCAiT3Bjb2RlIiwgIm9wY29kZSIpCiAgICAg
Zm9yIG9mZnNldCBpbiBieXRlY29kZVsib2Zmc2V0cyJdOgotICAgICAgICBmb3IgbmFtZSwgdHlw
ZU5hbWUgaW4gb2Zmc2V0Lml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgbmFtZSwgdHlwZU5hbWUg
aW4gb2Zmc2V0Lml0ZW1zKCk6CiAgICAgICAgICAgICB3cml0ZUluc3RydWN0aW9uTWVtYmVyKGJ5
dGVjb2RlSEZpbGUsIHR5cGVOYW1lLCBuYW1lKQotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIn07
XG5cbiIpCisgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAifTtcblxuIikKIAogCiBpZiBfX25h
bWVfXyA9PSAiX19tYWluX18iOgpAQCAtMjIwLDI1ICsyMjYsMjUgQEAKICAgICAgICAgcHJpbnQo
IlVuZXhwZWN0ZWQgZXJyb3IgcGFyc2luZyB7MH06IHsxfSIuZm9ybWF0KGJ5dGVjb2RlSlNPTkZp
bGUsIHN5cy5leGNfaW5mbygpKSkKIAogICAgIGlmIGJ5dGVjb2RlSEZpbGVuYW1lOgotICAgICAg
ICBieXRlY29kZUhGaWxlLndyaXRlKGhGaWxlSGFzaFN0cmluZykKLSAgICAgICAgYnl0ZWNvZGVI
RmlsZS53cml0ZShjQ29weXJpZ2h0TXNnICUgYnl0ZWNvZGVKU09ORmlsZSkKLSAgICAgICAgYnl0
ZWNvZGVIRmlsZS53cml0ZSgiI3ByYWdtYSBvbmNlXG5cbiIpCisgICAgICAgIGRvd3JpdGUoYnl0
ZWNvZGVIRmlsZSwgaEZpbGVIYXNoU3RyaW5nKQorICAgICAgICAjZG93cml0ZShieXRlY29kZUhG
aWxlLCAoY0NvcHlyaWdodE1zZyAlIGJ5dGVjb2RlSlNPTkZpbGUpCisgICAgICAgIGRvd3JpdGUo
Ynl0ZWNvZGVIRmlsZSwgIiNwcmFnbWEgb25jZVxuXG4iKQogCiAgICAgaWYgYnl0ZWNvZGVTdHJ1
Y3RzSEZpbGVuYW1lOgotICAgICAgICBieXRlY29kZVN0cnVjdHNIRmlsZS53cml0ZShoRmlsZUhh
c2hTdHJpbmcpCi0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlLndyaXRlKGNDb3B5cmlnaHRN
c2cgJSBieXRlY29kZUpTT05GaWxlKQotICAgICAgICBieXRlY29kZVN0cnVjdHNIRmlsZS53cml0
ZSgiI3ByYWdtYSBvbmNlXG5cbiIpCi0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlLndyaXRl
KCIjaW5jbHVkZSBcIkluc3RydWN0aW9uLmhcIlxuIikKLSAgICAgICAgYnl0ZWNvZGVTdHJ1Y3Rz
SEZpbGUud3JpdGUoIlxuIikKKyAgICAgICAgZG93cml0ZShieXRlY29kZVN0cnVjdHNIRmlsZSwg
aEZpbGVIYXNoU3RyaW5nKQorICAgICAgICBkb3dyaXRlKGJ5dGVjb2RlU3RydWN0c0hGaWxlLCBj
Q29weXJpZ2h0TXNnICUgYnl0ZWNvZGVKU09ORmlsZSkKKyAgICAgICAgZG93cml0ZShieXRlY29k
ZVN0cnVjdHNIRmlsZSwgIiNwcmFnbWEgb25jZVxuXG4iKQorICAgICAgICBkb3dyaXRlKGJ5dGVj
b2RlU3RydWN0c0hGaWxlLCAiI2luY2x1ZGUgXCJJbnN0cnVjdGlvbi5oXCJcbiIpCisgICAgICAg
IGRvd3JpdGUoYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUsICJcbiIpCiAKICAgICBpZiBpbml0QVNNRmls
ZU5hbWU6Ci0gICAgICAgIGluaXRCeXRlY29kZXNGaWxlLndyaXRlKGFzbUZpbGVIYXNoU3RyaW5n
KQotICAgICAgICBpbml0Qnl0ZWNvZGVzRmlsZS53cml0ZShhc21Db3B5cmlnaHRNc2cgJSBieXRl
Y29kZUpTT05GaWxlKQorICAgICAgICBkb3dyaXRlKGluaXRCeXRlY29kZXNGaWxlLCBhc21GaWxl
SGFzaFN0cmluZykKKyAgICAgICAgZG93cml0ZShpbml0Qnl0ZWNvZGVzRmlsZSwgYXNtQ29weXJp
Z2h0TXNnICUgYnl0ZWNvZGVKU09ORmlsZSkKICAgICAgICAgaW5pdEFTTUJ5dGVjb2RlTnVtID0g
MAogCiAgICAgZm9yIHNlY3Rpb24gaW4gYnl0ZWNvZGVTZWN0aW9uczoKICAgICAgICAgaWYgYnl0
ZWNvZGVIRmlsZW5hbWUgYW5kIHNlY3Rpb25bJ2VtaXRJbkhGaWxlJ106Ci0gICAgICAgICAgICBi
eXRlY29kZUhGaWxlLndyaXRlKCIjZGVmaW5lIEZPUl9FQUNIX3swfV9JRChtYWNybykgXFxcbiIu
Zm9ybWF0KHNlY3Rpb25bIm1hY3JvTmFtZUNvbXBvbmVudCJdKSkKKyAgICAgICAgICAgIGRvd3Jp
dGUoYnl0ZWNvZGVIRmlsZSwgIiNkZWZpbmUgRk9SX0VBQ0hfezB9X0lEKG1hY3JvKSBcXFxuIi5m
b3JtYXQoc2VjdGlvblsibWFjcm9OYW1lQ29tcG9uZW50Il0pKQogICAgICAgICAgICAgZmlyc3RN
YWNybyA9IFRydWUKICAgICAgICAgICAgIGRlZmF1bHRMZW5ndGggPSAxCiAgICAgICAgICAgICBp
ZiAiZGVmYXVsdExlbmd0aCIgaW4gc2VjdGlvbjoKQEAgLTI0Nyw3ICsyNTMsNyBAQAogICAgICAg
ICAgICAgYnl0ZWNvZGVOdW0gPSAwCiAgICAgICAgICAgICBmb3IgYnl0ZWNvZGUgaW4gc2VjdGlv
blsiYnl0ZWNvZGVzIl06CiAgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0TWFjcm86Ci0gICAg
ICAgICAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiBcXFxuIikKKyAgICAgICAgICAg
ICAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiIFxcXG4iKQogCiAgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gZGVmYXVsdExlbmd0aAogICAgICAgICAgICAgICAgIGlmICJsZW5ndGgiIGlu
IGJ5dGVjb2RlOgpAQCAtMjU2LDE2ICsyNjIsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgIyBB
ZGQgb25lIGZvciB0aGUgb3Bjb2RlCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxlbihi
eXRlY29kZVsib2Zmc2V0cyJdKSArIDEKIAotICAgICAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUu
d3JpdGUoIiAgICBtYWNybyh7MH0sIHsxfSkiLmZvcm1hdChieXRlY29kZVsibmFtZSJdLCBsZW5n
dGgpKQorICAgICAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiAgICBtYWNybyh7
MH0sIHsxfSkiLmZvcm1hdChieXRlY29kZVsibmFtZSJdLCBsZW5ndGgpKQogICAgICAgICAgICAg
ICAgIGZpcnN0TWFjcm8gPSBGYWxzZQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlTnVtID0gYnl0
ZWNvZGVOdW0gKyAxCiAKLSAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIlxuXG4iKQot
ICAgICAgICAgICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiI2RlZmluZSBOVU1CRVJfT0ZfezB9X0lE
UyB7MX1cblxuIi5mb3JtYXQoc2VjdGlvblsibWFjcm9OYW1lQ29tcG9uZW50Il0sIGJ5dGVjb2Rl
TnVtKSkKKyAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIlxuXG4iKQorICAgICAg
ICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiI2RlZmluZSBOVU1CRVJfT0ZfezB9X0lEUyB7
MX1cblxuIi5mb3JtYXQoc2VjdGlvblsibWFjcm9OYW1lQ29tcG9uZW50Il0sIGJ5dGVjb2RlTnVt
KSkKIAogCiAgICAgICAgIGlmIGJ5dGVjb2RlU3RydWN0c0hGaWxlbmFtZSBhbmQgc2VjdGlvblsn
ZW1pdEluU3RydWN0c0ZpbGUnXToKLSAgICAgICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlLndy
aXRlKCJuYW1lc3BhY2UgSlNDIHtcblxuIikKKyAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVT
dHJ1Y3RzSEZpbGUsICJuYW1lc3BhY2UgSlNDIHtcblxuIikKIAogICAgICAgICAgICAgZm9yIGJ5
dGVjb2RlIGluIHNlY3Rpb25bImJ5dGVjb2RlcyJdOgogICAgICAgICAgICAgICAgIGlmIG5vdCAi
b2Zmc2V0cyIgaW4gYnl0ZWNvZGU6CkBAIC0yNzIsMTYgKzI3OCwxNiBAQAogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIHdyaXRlU3RydWN0KGJ5dGVjb2RlU3Ry
dWN0c0hGaWxlLCBieXRlY29kZSkKIAotICAgICAgICAgICAgYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUu
d3JpdGUoIn0gLy8gbmFtZXNwYWNlIEpTQyBcbiIpCisgICAgICAgICAgICBkb3dyaXRlKGJ5dGVj
b2RlU3RydWN0c0hGaWxlLCAifSAvLyBuYW1lc3BhY2UgSlNDIFxuIikKIAogICAgICAgICBpZiBi
eXRlY29kZUhGaWxlbmFtZSBhbmQgc2VjdGlvblsnZW1pdE9wY29kZUlEU3RyaW5nVmFsdWVzSW5I
RmlsZSddOgogICAgICAgICAgICAgYnl0ZWNvZGVOdW0gPSAwCiAgICAgICAgICAgICBmb3IgYnl0
ZWNvZGUgaW4gc2VjdGlvblsiYnl0ZWNvZGVzIl06Ci0gICAgICAgICAgICAgICAgYnl0ZWNvZGVI
RmlsZS53cml0ZSgiI2RlZmluZSB7MH1fdmFsdWVfc3RyaW5nIFwiezF9XCJcbiIuZm9ybWF0KGJ5
dGVjb2RlWyJuYW1lIl0sIGJ5dGVjb2RlTnVtKSkKKyAgICAgICAgICAgICAgICBkb3dyaXRlKGJ5
dGVjb2RlSEZpbGUsICIjZGVmaW5lIHswfV92YWx1ZV9zdHJpbmcgXCJ7MX1cIlxuIi5mb3JtYXQo
Ynl0ZWNvZGVbIm5hbWUiXSwgYnl0ZWNvZGVOdW0pKQogICAgICAgICAgICAgICAgIGZpcnN0TWFj
cm8gPSBGYWxzZQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlTnVtID0gYnl0ZWNvZGVOdW0gKyAx
CiAKLSAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIlxuIikgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIlxuIikgICAgICAgICAgICAKIAogICAg
ICAgICBpZiBpbml0QVNNRmlsZU5hbWUgYW5kIHNlY3Rpb25bJ2VtaXRJbkFTTUZpbGUnXToKICAg
ICAgICAgICAgIHByZWZpeCA9ICIiCkBAIC0yODgsNyArMjk0LDcgQEAKICAgICAgICAgICAgIGlm
ICJhc21QcmVmaXgiIGluIHNlY3Rpb246CiAgICAgICAgICAgICAgICAgcHJlZml4ID0gc2VjdGlv
blsiYXNtUHJlZml4Il0KICAgICAgICAgICAgIGZvciBieXRlY29kZSBpbiBzZWN0aW9uWyJieXRl
Y29kZXMiXToKLSAgICAgICAgICAgICAgICBpbml0Qnl0ZWNvZGVzRmlsZS53cml0ZSgic2V0RW50
cnlBZGRyZXNzKHswfSwgX3sxfXsyfSlcbiIuZm9ybWF0KGluaXRBU01CeXRlY29kZU51bSwgcHJl
Zml4LCBieXRlY29kZVsibmFtZSJdKSkKKyAgICAgICAgICAgICAgICBkb3dyaXRlKGluaXRCeXRl
Y29kZXNGaWxlLCAic2V0RW50cnlBZGRyZXNzKHswfSwgX3sxfXsyfSlcbiIuZm9ybWF0KGluaXRB
U01CeXRlY29kZU51bSwgcHJlZml4LCBieXRlY29kZVsibmFtZSJdKSkKICAgICAgICAgICAgICAg
ICBpbml0QVNNQnl0ZWNvZGVOdW0gPSBpbml0QVNNQnl0ZWNvZGVOdW0gKyAxCiAKICAgICBpZiBi
eXRlY29kZUhGaWxlbmFtZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5CShyZXZpc2lvbiAy
MjkzNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwyNSArMSwyNSBAQAogIyBSZXF1aXJl
ZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCiAK
LWZyb20gbW9kZWxzIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgKgotZnJvbSBjcHBf
Z2VuZXJhdG9yIGltcG9ydCAqCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCAqCitmcm9tIC5t
b2RlbHMgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgKgorZnJvbSAuY3BwX2dlbmVy
YXRvciBpbXBvcnQgKgorZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0ICoKIAotZnJvbSBnZW5l
cmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZy
b20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20g
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgot
ZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZy
b20gZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0
ICoKLWZyb20gZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlciBpbXBvcnQgKgotZnJv
bSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZy
b20gZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcyBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9v
YmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2Jq
Y19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJh
dGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpj
X2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVy
YXRlX29iamNfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVh
ZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNp
b25zX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20g
LmdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVy
YXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2Vu
ZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcyBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVf
b2JqY19jb25maWd1cmF0aW9uX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19j
b25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpj
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVy
YXRlX29iamNfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hl
YWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZl
cnNpb25zX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
X2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2NwcF9nZW5lcmF0b3IucHkJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDggKzI4LDggQEAKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUKIAotZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IHVjZmlyc3QsIEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1wb3J0
IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRU
eXBlLCBGcmFtZXdvcmtzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IHVjZmlyc3QsIEdlbmVyYXRv
cgorZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5
cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiBp
bXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0
b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSAuY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBzZWN0
aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5h
dGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKip0ZW1wbGF0ZV9h
cmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFw
KHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMp
KSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAo
c2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykg
aWYgX2ZdKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5B
bHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqdGVt
cGxhdGVfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTAg
QEAKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwotZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IEVu
dW1UeXBlCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gLmNw
cF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3Bw
VGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJv
bSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKIApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICByZXR1cm4gIiVzQmFja2VuZERpc3Bh
dGNoZXJzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihz
ZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBpbiBH
ZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5jb21tYW5kc19m
b3JfZG9tYWluKGRvbWFpbikpID4gMF0KIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
CiAgICAgICAgIHR5cGVkZWZzID0gWygnU3RyaW5nJywgJ0Vycm9yU3RyaW5nJyldCkBAIC02Miw4
ICs2Miw4IEBACiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
SGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAg
aWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdhbHRlcm5hdGVfZGlzcGF0Y2hlcnMn
LCBGYWxzZSk6CiAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYWx0
ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoZG9tYWlucykp
Ci0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZCht
YXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9t
YWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpCisgICAgICAgIHNlY3Rp
b25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWluLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCiAgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKIApAQCAtMTk4LDcg
KzE5OCw3IEBACiAgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRv
bWFpbikKICAgICAgICAgaWYgbGVuKGNvbW1hbmRzKSA+IDA6CiAgICAgICAgICAgICBkZWNsYXJh
dGlvbnMuYXBwZW5kKCdwcml2YXRlOicpCi0gICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQobWFw
KHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGNvbW1h
bmRzKSkKKyAgICAgICAgZGVjbGFyYXRpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kLCBjb21tYW5kcykpKQogCiAgICAg
ICAgIGRlY2xhcmF0aW9uX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFp
bi5kb21haW5fbmFtZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiBpbXBvcnQgc3Ry
aW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGlt
cG9ydCBDcHBHZW5lcmF0b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENw
cEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKLWZyb20gZ2VuZXJhdG9yIGltcG9y
dCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUKK2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuY3Bw
X2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBU
ZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9t
IC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQogCiBsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKIApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICByZXR1cm4gIiVz
QmFja2VuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVm
IGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRh
IGRvbWFpbjogbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAsIEdlbmVy
YXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gW2RvbWFpbiBm
b3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpIGlmIGxlbihz
ZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwXQogCiAgICAgZGVmIGdlbmVyYXRl
X291dHB1dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzID0gc2VsZi5fZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgi
XG4iLmpvaW4obWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3Jf
ZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQotICAgICAgICBzZWN0aW9ucy5l
eHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9k
b21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCiAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vi
c3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICJcblxuIi5qb2lu
KHNlY3Rpb25zKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CShyZXZpc2lvbiAy
MjkzNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDEwICszMCwxMCBAQAogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9t
IGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
Q3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1m
cm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKK2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENw
cEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlCiAKIGxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHJl
dHVybiAiJXNGcm9udGVuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAog
ICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVy
KGxhbWJkYSBkb21haW46IGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4gMCwg
R2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBbZG9t
YWluIGZvciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikgaWYg
bGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwXQogCiAgICAgZGVmIGdlbmVy
YXRlX291dHB1dChzZWxmKToKICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CkBAIC01Nyw3ICs1Nyw3
IEBACiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
Z2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
Ci0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAg
ICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKSkKICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQb3N0bHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICJcblxu
Ii5qb2luKHNlY3Rpb25zKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMCBAQAogaW1w
b3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRv
ciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zy
b20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgQ3BwVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAorZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKIAogbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcmV0
dXJuICIlc0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAK
ICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRl
cihsYW1iZGEgZG9tYWluOiBsZW4oc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAs
IEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gW2Rv
bWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpIGlm
IGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4gMF0KIAogICAgIGRlZiBnZW5l
cmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcl9hcmdzID0gewpAQCAtNTYsNyArNTYs
NyBAQAogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENw
cFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVy
YXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dl
bmVyYXRlKCkpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRl
cy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQogICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hl
YWRlci5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiBmcm9tIG9wZXJhdG9yIGltcG9y
dCBtZXRob2RjYWxsZXIKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGNwcF9n
ZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRl
cyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwotZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1U
eXBlLCBPYmplY3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBG
cmFtZXdvcmtzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20g
LmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
Q3BwVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAor
ZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgT2JqZWN0VHlwZSwgUHJpbWl0aXZlVHlwZSwg
QWxpYXNlZFR5cGUsIEFycmF5VHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKIApAQCAtNjIsOCArNjIsOCBAQAogICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoZG9tYWlucykpCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlZGVmcyhkb21haW5zKSkKICAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fY29uc3RhbnRfdmFsdWVfY29u
dmVyc2lvbl9tZXRob2RzKCkpCi0gICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5f
Z2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9z
ZWN0aW9ucykpCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBsaXN0KG1hcChzZWxmLl9nZW5l
cmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKFtzZWN0aW9uIGZvciBzZWN0aW9uIGluIGJ1aWxkZXJfc2VjdGlvbnMgaWYgbGVuKHNlY3Rp
b24pID4gMF0pCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJk
X2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoKSkKICAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKHNlbGYuX2dlbmVyYXRlX2RlY2xhcmF0aW9uc19mb3JfZW51bV9jb252ZXJzaW9uX21ldGhv
ZHMoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2NvbCcp
CkBAIC04Nyw4ICs4Nyw4IEBACiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgogICAg
ICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHNlbGYu
dHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pXQotICAgICAgICAgICAgb2JqZWN0
X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlw
ZSksIGRlY2xhcmF0aW9uX3R5cGVzKQotICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihs
YW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlw
ZXMpCisgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGluIGRlY2xh
cmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpXQorICAgICAgICAg
ICAgZW51bV90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpXQogICAgICAgICAgICAgc29ydGVkKG9iamVjdF90
eXBlcywga2V5PW1ldGhvZGNhbGxlcigncmF3X25hbWUnKSkKICAgICAgICAgICAgIHNvcnRlZChl
bnVtX3R5cGVzLCBrZXk9bWV0aG9kY2FsbGVyKCdyYXdfbmFtZScpKQogCkBAIC0xMTMsOCArMTEz
LDggQEAKICIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90
eXBlZGVmcyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2Vu
ZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMgPSBm
aWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAsIHNlY3Rpb25zKQorICAgICAgICBzZWN0
aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4sIGRvbWFp
bnMpKQorICAgICAgICBzZWN0aW9ucyA9IFt0ZXh0IGZvciB0ZXh0IGluIHNlY3Rpb25zIGlmIGxl
bih0ZXh0KSA+IDBdCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAgICAg
ICAgcmV0dXJuICcnCkBAIC0xMjUsOCArMTI1LDggQEAKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlw
ZWRlZnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICB0eXBlX2RlY2xhcmF0aW9u
cyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCi0gICAgICAgIHBy
aW1pdGl2ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVj
bC50eXBlLCBBbGlhc2VkVHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQotICAgICAgICBhcnJheV9k
ZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBlLCBB
cnJheVR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgcHJpbWl0aXZlX2RlY2xhcmF0
aW9ucyA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIGlzaW5zdGFuY2Uo
ZGVjbC50eXBlLCBBbGlhc2VkVHlwZSldCisgICAgICAgIGFycmF5X2RlY2xhcmF0aW9ucyA9IFtk
ZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIGlzaW5zdGFuY2UoZGVjbC50eXBl
LCBBcnJheVR5cGUpXQogICAgICAgICBpZiBsZW4ocHJpbWl0aXZlX2RlY2xhcmF0aW9ucykgPT0g
MCBhbmQgbGVuKGFycmF5X2RlY2xhcmF0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAn
JwogCkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBl
X2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVf
ZGVjbGFyYXRpb24sIGRvbWFpbikpCiAKLSAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRh
IHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIHNlY3Rpb25zKQorICAgICAgICBzZWN0aW9ucyA9
IFtzZWN0aW9uIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zIGlmIGxlbihzZWN0aW9uKSA+IDBdCiAg
ICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAnJwogCkBA
IC0yMDAsOSArMjAwLDkgQEAKICAgICAgICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRpb24udHlwZV9t
ZW1iZXJzKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCiAKLSAgICAgICAgZW51bV9tZW1i
ZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1U
eXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVycykKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVy
OiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykK
LSAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIu
aXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBlbnVt
X21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21l
bWJlcnMgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlw
ZS5pc19hbm9ueW1vdXNdCisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZvciBt
ZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5pc19v
cHRpb25hbF0KKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBp
biB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNfb3B0aW9uYWxdCiAg
ICAgICAgIG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUKIAogICAgICAg
ICBsaW5lcyA9IFtdCkBAIC0yNjEsNyArMjYxLDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUKIAotICAgICAgICBpbmRlbnRlZF9saW5l
cyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVt
X3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVtYmVyLnR5cGUpKQorICAgICAg
ICBpbmRlbnRlZF9saW5lcyA9IGxpc3QobWFwKGFwcGx5X2luZGVudGF0aW9uLCBzZWxmLl9nZW5l
cmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgZW51bV9t
ZW1iZXIudHlwZSkpKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVzKQog
CiAgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25hbWUs
IGVudW1fdHlwZSk6CkBAIC0yNzUsNyArMjc1LDcgQEAKIAogICAgIGRlZiBfZ2VuZXJhdGVfYnVp
bGRlcl9zdGF0ZV9lbnVtKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5lcyA9
IFtdCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90
IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAg
ICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJh
dGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5pc19vcHRpb25hbF0KICAgICAgICAgZW51
bV92YWx1ZXMgPSBbXQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0geycpCkBAIC0z
NDMsNyArMzQzLDcgQEAKIAogICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpOgogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICAgICAgZGVjbGFyYXRpb25zX3Rv
X2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNz
ZXJ0aW9ucyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgICAgIGRlY2xh
cmF0aW9uc190b19nZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25z
IGlmIHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSldCiAKICAgICAg
ICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToK
ICAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnM6CkBAIC0zOTIsOCArMzkyLDggQEAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxm
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKICAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0g
c2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKICAgICAgICAgICAgIGRl
Y2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9u
c10KLSAgICAgICAgICAgIG9iamVjdF90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5z
dGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKLSAgICAgICAgICAg
IGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAgICAgICAgb2JqZWN0X3R5cGVzID0gW190
eXBlIGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKV0KKyAgICAgICAgICAgIGVudW1fdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGlu
IGRlY2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKV0KICAgICAg
ICAgICAgIGlmIGxlbihvYmplY3RfdHlwZXMpICsgbGVuKGVudW1fdHlwZXMpID09IDA6CiAgICAg
ICAgICAgICAgICAgY29udGludWUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVu
dGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTAgQEAKIGZyb20gc3RyaW5nIGlt
cG9ydCBUZW1wbGF0ZQogZnJvbSBvcGVyYXRvciBpbXBvcnQgbWV0aG9kY2FsbGVyCiAKLWZyb20g
Y3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9t
IGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQg
QWxpYXNlZFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIE9iamVjdFR5cGUKK2Zyb20gLmNwcF9n
ZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IEFs
aWFzZWRUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCiAKIGxvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC02NSw4ICs2NSw4IEBACiAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZCgnbmFtZXNwYWNlIFByb3RvY29sIHsnKQogICAgICAgICBzZWN0aW9ucy5leHRl
bmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nX2FuZF9jb252ZXJzaW9uX21ldGhvZHMoZG9t
YWlucykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9vcGVuX2ZpZWxk
X25hbWVzKCkpCi0gICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVf
YnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZp
bHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9ucykp
CisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9idWls
ZGVyc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKFtzZWN0
aW9uIGZvciBzZWN0aW9uIGluIGJ1aWxkZXJfc2VjdGlvbnMgaWYgbGVuKHNlY3Rpb24pID4gMF0p
CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wnKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkltcGxlbWVudGF0aW9u
UG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAKQEAgLTEyOCw4ICsx
MjgsOCBAQAogCiAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluKGRvbWFpbikKICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVj
bC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQotICAgICAgICBvYmplY3RfdHlw
ZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwg
ZGVjbGFyYXRpb25fdHlwZXMpCi0gICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90
eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAg
ICAgICBvYmplY3RfdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGluIGRlY2xhcmF0aW9uX3R5cGVz
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpXQorICAgICAgICBlbnVtX3R5cGVzID0g
W190eXBlIGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSldCiAgICAgICAgIGlmIGxlbihvYmplY3RfdHlwZXMpICsgbGVuKGVudW1fdHlw
ZXMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKIApAQCAtMTU2LDggKzE1Niw4IEBACiAg
ICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2Ug
JXMgeycgJSBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChzZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKLSAgICAgICAgZW51bV9wYXJzZXJfc2Vj
dGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9yX2Rv
bWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2Vj
dGlvbjogbGVuKHNlY3Rpb24pID4gMCwgZW51bV9wYXJzZXJfc2VjdGlvbnMpKQorICAgICAgICBl
bnVtX3BhcnNlcl9zZWN0aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVy
c2lvbl9tZXRob2RzX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRl
bmQoW3NlY3Rpb24gZm9yIHNlY3Rpb24gaW4gZW51bV9wYXJzZXJfc2VjdGlvbnMgaWYgbGVuKHNl
Y3Rpb24pID4gMF0pCiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMToKICAgICAgICAgICAg
IHJldHVybiBbXSAgIyBObyBkZWNsYXJhdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgbmFtZXNwYWNl
LgogCkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBmb3Ig
ZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgogICAgICAgICAgICAgdHlwZV9k
ZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQot
ICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBH
ZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKSwgdHlwZV9kZWNsYXJhdGlv
bnMpOgorICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gW2RlY2wgZm9yIGRlY2wg
aW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKGRl
Y2wudHlwZSldOgogICAgICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5vcGVu
X2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJl
ciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJl
cl9uYW1lKToKICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0lu
c3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkK
QEAgLTE3OSw3ICsxNzksNyBAQAogICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHR5cGVfZGVj
bGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKLSAg
ICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxm
LnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9u
cykKKyAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gW2RlY2wgZm9yIGRlY2wgaW4g
dHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVj
bC50eXBlKV0KIAogICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNf
dG9fZ2VuZXJhdGU6CiAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJh
dGlvbi50eXBlX21lbWJlcnM6CkBAIC0yMDAsOCArMjAwLDggQEAKICAgICAgICAgcmV0dXJuIFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5Qcm90b2NvbE9iamVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRl
KE5vbmUsICoqYXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3Rf
ZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAgcmVxdWlyZWRf
bWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBv
YmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1iZXJz
ID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIg
Zm9yIG1lbWJlciBpbiBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIG5vdCBtZW1i
ZXIuaXNfb3B0aW9uYWxdCisgICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBbbWVtYmVyIGZvciBt
ZW1iZXIgaW4gb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNfb3B0
aW9uYWxdCiAgICAgICAgIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzID0gbm90IEdlbmVyYXRvci50
eXBlX2hhc19vcGVuX2ZpZWxkcyhvYmplY3RfZGVjbGFyYXRpb24udHlwZSkKICAgICAgICAgbGlu
ZXMgPSBbXQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pz
X2JhY2tlbmRfY29tbWFuZHMucHkJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29t
bWFuZHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKIGltcG9ydCBzdHJpbmcK
IGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorZnJv
bSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLmdlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gLm1v
ZGVscyBpbXBvcnQgRW51bVR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CiAKQEAgLTQ2LDE2ICs0NiwxNiBAQAogCiAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW4o
c2VsZiwgZG9tYWluKToKICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICBkb21haW5fZW51bV90eXBlcyA9
IGZpbHRlcihsYW1iZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwg
RW51bVR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgZG9tYWluX2VudW1fdHlwZXMg
PSBbZGVjbGFyYXRpb24gZm9yIGRlY2xhcmF0aW9uIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIGlz
aW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpXQogICAgICAgICByZXR1cm4gbGVu
KHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAgb3IgbGVuKHNlbGYuZXZlbnRz
X2Zvcl9kb21haW4oZG9tYWluKSkgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAwCiAK
ICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRl
cihzZWxmLnNob3VsZF9nZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkpCiAKICAgICBk
ZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlv
bnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVy
YXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5nZW5lcmF0ZV9k
b21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCiAgICAgICAgIHJldHVybiAiXG5c
biIuam9pbihzZWN0aW9ucykKIAogICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWlu
KToKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgY29tbWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zv
cl9kb21haW4oZG9tYWluKQogICAgICAgICBldmVudHMgPSBzZWxmLmV2ZW50c19mb3JfZG9tYWlu
KGRvbWFpbikKIAotICAgICAgICBoYXNfYXN5bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBj
b21tYW5kOiBjb21tYW5kLmlzX2FzeW5jLCBjb21tYW5kcykpCisgICAgICAgIGhhc19hc3luY19j
b21tYW5kcyA9IGFueShbY29tbWFuZC5pc19hc3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5kc10p
CiAgICAgICAgIGlmIGxlbihldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFpbilz
RGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJp
bmQoSW5zcGVjdG9yQmFja2VuZCwgIiUoZG9tYWluKXMiKTsnICUgYXJncykKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAK
IGltcG9ydCByZQogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
Ci1mcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBv
cnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuY3BwX2dlbmVyYXRv
ciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgor
ZnJvbSAubW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBv
cnQgT2JqQ0dlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgcmV0dXJuICcl
c0JhY2tlbmREaXNwYXRjaGVycy5oJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYg
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNo
b3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dl
bmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRl
cnMgPSBbCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlclBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25z
LmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3Jf
ZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYu
X2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykp
KQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5k
RGlzcGF0Y2hlckhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyMjkzNDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTEgKzMwLDExIEBACiBpbXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0
ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIEVu
dW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBv
cnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCi1m
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIC5tb2RlbHMgaW1wb3J0
IFByaW1pdGl2ZVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcworZnJvbSAu
b2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3IsIGpv
aW5fdHlwZV9hbmRfbmFtZQorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgcmV0dXJuICcl
c0JhY2tlbmREaXNwYXRjaGVycy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVm
IGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5z
aG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9n
ZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNv
bmRhcnlfaGVhZGVycyA9IFsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgc2VjdGlvbnMgPSBb
XQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfaW1w
bGVtZW50YXRpb25fZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21h
aW4sIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlv
bnMpCiAKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJh
bWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKIAotICAgICAgICAg
ICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6
IG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpj
X3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMp
CisgICAgICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycyBpZiBub3QgcGFyYW1ldGVy
LmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUo
cGFyYW1ldGVyLnR5cGUpXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJlZF9w
b2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJh
dG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFt
ZSkpCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgICAgICBpZiBvYmpjX2FycmF5X2Ns
YXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgoc2VsZi5vYmpjX3ByZWZpeCgpKToK
ICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAodmFyX25hbWUsIG9i
amNfYXJyYXlfY2xhc3MpKQogCi0gICAgICAgICAgICBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRl
cnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBP
YmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBj
b21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgb3B0aW9uYWxfcG9pbnRlcl9w
YXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnMgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5
cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAgICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAg
dmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVz
Iik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hl
YWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CShyZXZp
c2lvbiAyMjkzNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw5ICsyOSw5IEBACiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBvYmpjX2dl
bmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAu
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBP
YmpDR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weQko
cmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgot
ZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBs
YXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJh
dG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQkocmV2aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCAr
MjksMTAgQEAKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1m
cm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dl
bmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQg
Q3BwR2VuZXJhdG9yCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAor
ZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVt
cGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00NSw3ICs0
NSw3IEBACiAgICAgICAgIHJldHVybiAnJXNFdmVudERpc3BhdGNoZXJzLm1tJyAlIHNlbGYucHJv
dG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAg
ICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbiwg
R2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0
KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9y
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChz
ZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkBAIC02Miw3ICs2Miw3IEBACiAg
ICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBs
YXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRl
bmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkBAIC0xMDAsNyAr
MTAwLDcgQEAKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXIm
IHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOycpCiAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKIAotICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0
ZXIobGFtYmRhIHBhcmFtZXRlcjogbm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dl
bmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgZXZlbnQu
ZXZlbnRfcGFyYW1ldGVycykKKyAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0g
W3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMgaWYgbm90
IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9p
bnRlcl90eXBlKHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1
aXJlZF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5l
cmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCkBA
IC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlfY2xhc3MgYW5kIG9i
amNfYXJyYXlfY2xhc3Muc3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkpOgogICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5f
QVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAodmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQog
Ci0gICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1iZGEgcGFy
YW1ldGVyOiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9v
YmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMp
CisgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0ZXIgZm9yIHBh
cmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50
eXBlKV0KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRl
cnM6CiAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19v
YmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKIGltcG9ydCBz
dHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBv
cnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51
bVR5cGUsIFBsYXRmb3JtcwotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRv
ciwgam9pbl90eXBlX2FuZF9uYW1lCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RU
eXBlLCBFbnVtVHlwZSwgUGxhdGZvcm1zCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2Jq
Q0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBs
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNjAsOSArNjAsOSBAQAogICAg
ICAgICB9CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0g
ICAgICAgIHR5cGVfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19m
b3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBjb21tYW5kX2RvbWFpbnMgPSBmaWx0ZXIoc2Vs
Zi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAg
ZXZlbnRfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2Rv
bWFpbiwgZG9tYWlucykKKyAgICAgICAgdHlwZV9kb21haW5zID0gbGlzdChmaWx0ZXIoc2VsZi5z
aG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIGNvbW1h
bmRfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zv
cl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBldmVudF9kb21haW5zID0gbGlzdChmaWx0ZXIo
c2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4sIGRvbWFpbnMpKQogCiAgICAg
ICAgICMgRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzgyMjI+IFdlYiBJbnNwZWN0b3I6
IFJlZHVjZSB1bm5lY2Vzc2FyeSBlbnVtcy90eXBlcyBnZW5lcmF0ZWQgaW4gT2JqQyBQcm90b2Nv
bCBJbnRlcmZhY2VzCiAgICAgICAgICMgQ3VycmVudGx5IHdlIGdlbmVyYXRlIGVudW1zL3R5cGVz
IGZvciBhbGwgdHlwZXMgaW4gdGhlIHR5cGVfZG9tYWlucy4gRm9yIHRoZSBidWlsdC1pbgpAQCAt
NzIsMTQgKzcyLDE0IEBACiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihO
b25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlu
cykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1h
cChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucywgdHlwZV9kb21haW5zKSBpZiBf
Zl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9mb3JfcGxh
dGZvcm1zKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUs
IG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSkpKQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlw
ZXMsIHR5cGVfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihb
X2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSBpZiBf
Zl0pKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFw
KHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAKICAgICAgICAg
aWYgc2VsZi5nZXRfZ2VuZXJhdG9yX3NldHRpbmcoJ2dlbmVyYXRlX2JhY2tlbmQnLCBGYWxzZSk6
Ci0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1h
cChzZWxmLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scywgY29tbWFuZF9kb21haW5zKSkpKQot
ICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAo
c2VsZi5fZ2VuZXJhdGVfZXZlbnRfaW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykpKSkKKyAgICAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxm
Ll9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scywgY29tbWFuZF9kb21haW5zKSBpZiBfZl0pKQor
ICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFw
KHNlbGYuX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpIGlmIF9mXSkp
CiAKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSGVhZGVy
UG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSkpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihz
ZWN0aW9ucykKQEAgLTE3MSw4ICsxNzEsOCBAQAogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCct
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZDsnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9i
amVjdDsnKQogCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJl
cjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAg
ICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19v
cHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICByZXF1aXJlZF9tZW1i
ZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBu
b3QgbWVtYmVyLmlzX29wdGlvbmFsXQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gW21lbWJl
ciBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNfb3B0
aW9uYWxdCiAgICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6CiAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoZG9t
YWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycykpCiAgICAgICAgIGZvciBtZW1iZXIg
aW4gcmVxdWlyZWRfbWVtYmVyczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5CShyZXZpc2lvbiAyMjkzNDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2ludGVybmFsX2hlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksOSBAQAog
aW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gZ2VuZXJh
dG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpD
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBv
cnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dl
bmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
J2dsb2JhbCcpCiAKQEAgLTU1LDEyICs1NSwxMiBAQAogICAgICAgICAgICAgJ2luY2x1ZGVzJzog
J1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhlYWRl
cnMpXSksCiAgICAgICAgIH0KIAotICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKHNlbGYu
c2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKSkKKyAgICAgICAgZXZlbnRfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dl
bmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCiAK
ICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVt
cGxhdGVzLkdlbmVyaWNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1h
cChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcywgZXZl
bnRfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKFtfZiBm
b3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9pbnRl
cmZhY2VzLCBldmVudF9kb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5HZW5lcmljSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9u
cykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CShyZXZp
c2lvbiAyMjkzNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKIGltcG9ydCBzdHJpbmcKIGZyb20g
c3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
Ci1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcwotZnJv
bSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRl
cworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm1vZGVscyBpbXBvcnQg
RW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworZnJvbSAub2JqY19nZW5lcmF0b3IgaW1w
b3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
T2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHJldHVybiAn
JXNUeXBlQ29udmVyc2lvbnMuaCcgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91
bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0
ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkp
CiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBoZWFkZXJzID0gWwpA
QCAtNzAsNyArNzAsNyBAQAogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1Rl
bXBsYXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBs
YXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJTdGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkKICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9mb3Jf
cGxhdGZvcm1zKCkpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4
dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zLCBk
b21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVz
LlR5cGVDb252ZXJzaW9uc0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkJKHJl
dmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1l
bnRhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiBpbXBvcnQgc3Ry
aW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0
IEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUsIEFsaWFzZWRUeXBlLCBQcmltaXRpdmVUeXBlLCBGcmFtZXdvcmtzCi1mcm9tIG9iamNf
Z2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9t
IC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlw
ZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgUHJpbWl0aXZlVHlwZSwgRnJh
bWV3b3JrcworZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20g
Lm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBh
cyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC01MCw3ICs1MCw3IEBACiAgICAgICAgIHJldHVybiAnJXNUeXBlQ29udmVyc2lvbnMubW0nICUg
c2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYp
OgotICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9k
b21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1
cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2Vu
ZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291
dHB1dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJv
dG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsy
OSwxMCBAQAogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZy
b20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9y
dCBPYmplY3RUeXBlLCBFbnVtVHlwZSwgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBp
bXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRl
cworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLm1vZGVs
cyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIEZyYW1ld29ya3MKK2Zyb20gLm9iamNfZ2Vu
ZXJhdG9yIGltcG9ydCBPYmpDVHlwZUNhdGVnb3J5LCBPYmpDR2VuZXJhdG9yCitmcm9tIC5vYmpj
X2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2Jq
Q1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTEs
NyArNTEsNyBAQAogICAgICAgICByZXR1cm4gJyVzVHlwZXMubW0nICUgc2VsZi5wcm90b2NvbF9u
YW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1
cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIEdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIo
c2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAg
ICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIHNl
Y3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5z
ZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBs
ZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAg
ICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9u
cywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLmdlbmVy
YXRlX3R5cGVfaW1wbGVtZW50YXRpb25zLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihz
ZWN0aW9ucykKIApAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zv
cl9wYXlsb2FkKGRvbWFpbiwgZGVjbGFyYXRpb24pKQogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9wcm90b2NvbF9vYmplY3QoZG9tYWluLCBk
ZWNsYXJhdGlvbikpCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1l
bWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQor
ICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIGRlY2xhcmF0
aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAgICAgICBpZiBy
ZXF1aXJlZF9tZW1iZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9t
ZW1iZXJzKGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQpAQCAtMTY3LDcg
KzE2Nyw3IEBACiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAgICAgICByZXF1aXJlZF9wb2ludGVyX21lbWJl
cnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9p
bnRlcl90eXBlKG1lbWJlci50eXBlKSwgcmVxdWlyZWRfbWVtYmVycykKKyAgICAgICAgcmVxdWly
ZWRfcG9pbnRlcl9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJl
cnMgaWYgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKG1lbWJlci50eXBl
KV0KICAgICAgICAgaWYgcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzOgogICAgICAgICAgICAgZm9y
IG1lbWJlciBpbiByZXF1aXJlZF9wb2ludGVyX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgdmFy
X25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJl
ci5tZW1iZXJfbmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkJKHJldmlzaW9uIDIy
OTM0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogaW1wb3J0IHJl
CiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBv
cnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNl
ZFR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworZnJvbSAuZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSAubW9kZWxzIGltcG9y
dCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2Vk
VHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQogCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogICAgICMgVGhlc2UgbWV0aG9kcyBhcmUg
b3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgogICAgIGRlZiBub25fc3VwcGxlbWVudGFsX2RvbWFp
bnMoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbm90IGRvbWFp
bi5pc19zdXBwbGVtZW50YWwsIHNlbGYubW9kZWwoKS5kb21haW5zKQorICAgICAgICByZXR1cm4g
W2RvbWFpbiBmb3IgZG9tYWluIGluIHNlbGYubW9kZWwoKS5kb21haW5zIGlmIG5vdCBkb21haW4u
aXNfc3VwcGxlbWVudGFsXQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLm5vbl9zdXBwbGVtZW50YWxfZG9tYWlucygpCkBAIC0xNzYsNyAr
MTc2LDcgQEAKICAgICAgICAgZmllbGRzID0gc2V0KF9UWVBFU19XSVRIX09QRU5fRklFTERTLmdl
dCh0eXBlX2RlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSwgW10pKQogICAgICAgICBp
ZiBub3QgZmllbGRzOgogICAgICAgICAgICAgcmV0dXJuIHR5cGVfZGVjbGFyYXRpb24udHlwZV9t
ZW1iZXJzCi0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJl
cl9uYW1lIGluIGZpZWxkcywgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAg
IHJldHVybiBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJl
cnMgaWYgbWVtYmVyLm1lbWJlcl9uYW1lIGluIGZpZWxkc10KIAogICAgIGRlZiB0eXBlX25lZWRz
X3NoYXBlX2Fzc2VydGlvbnMoc2VsZiwgX3R5cGUpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihz
ZWxmLCAiX3R5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucyIpOgpAQCAtMTg5LDcgKzE4OSw3
IEBACiAgICAgIyBzZXQgb2YgdHlwZXMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSByZWdlbmVy
YXRlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIHRvCiAgICAgIyBHZW5lcmF0b3IudHlwZXNfbmVlZGlu
Z19zaGFwZV9hc3NlcnRpb25zKCkuCiAgICAgZGVmIGNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdf
c2hhcGVfYXNzZXJ0aW9ucyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgZG9tYWluX25hbWVzID0g
bWFwKGxhbWJkYSBkb21haW46IGRvbWFpbi5kb21haW5fbmFtZSwgZG9tYWlucykKKyAgICAgICAg
ZG9tYWluX25hbWVzID0gW2RvbWFpbi5kb21haW5fbmFtZSBmb3IgZG9tYWluIGluIGRvbWFpbnNd
CiAgICAgICAgIGxvZy5kZWJ1ZygiPiBDYWxjdWxhdGluZyB0eXBlcyB0aGF0IG5lZWQgc2hhcGUg
YXNzZXJ0aW9ucyAoZWxpZ2libGUgZG9tYWluczogJXMpIiAlICIsICIuam9pbihkb21haW5fbmFt
ZXMpKQogCiAgICAgICAgICMgTXV0YXRlcyB0aGUgcGFzc2VkLWluIHNldDsgdGhpcyBzaW1wbGlm
aWVzIGNoZWNrcyB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbi4KQEAgLTI0NSw3ICsyNDUs
NyBAQAogICAgICAgICBmb3IgX3R5cGUgaW4gYWxsX3R5cGVzOgogICAgICAgICAgICAgaWYgbm90
IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgICAgICBjb250aW51ZQot
ICAgICAgICAgICAgbWFwKHNlbGYuX2Fzc2lnbl9lbmNvZGluZ19mb3JfZW51bV92YWx1ZSwgX3R5
cGUuZW51bV92YWx1ZXMoKSkKKyAgICAgICAgICAgIGxpc3QobWFwKHNlbGYuX2Fzc2lnbl9lbmNv
ZGluZ19mb3JfZW51bV92YWx1ZSwgX3R5cGUuZW51bV92YWx1ZXMoKSkpCiAKICAgICBkZWYgX2Fz
c2lnbl9lbmNvZGluZ19mb3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKICAgICAgICAg
aWYgZW51bV92YWx1ZSBpbiBzZWxmLl9lbnVtX3ZhbHVlX2VuY29kaW5nczoKQEAgLTI3OSw3ICsy
NzksNyBAQAogICAgICAgICAgICAgcmV0dXJuIF9BTFdBWVNfU1BFQ0lBTENBU0VEX0VOVU1fVkFM
VUVfTE9PS1VQX1RBQkxFW21hdGNoLmdyb3VwKDEpLnVwcGVyKCldCiAKICAgICAgICAgIyBTcGxp
dCBvbiBoeXBoZW4sIGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBmb3JjZSB1cHBlcmNhc2luZyBv
ZiBhY3Jvbnltcy4KLSAgICAgICAgc3Vid29yZHMgPSBtYXAodWNmaXJzdCwgX0VOVU1fSURFTlRJ
RklFUl9SRU5BTUVfTUFQLmdldChlbnVtX3ZhbHVlLCBlbnVtX3ZhbHVlKS5zcGxpdCgnLScpKQor
ICAgICAgICBzdWJ3b3JkcyA9IGxpc3QobWFwKHVjZmlyc3QsIF9FTlVNX0lERU5USUZJRVJfUkVO
QU1FX01BUC5nZXQoZW51bV92YWx1ZSwgZW51bV92YWx1ZSkuc3BsaXQoJy0nKSkpCiAgICAgICAg
IHJldHVybiByZS5zdWIocmUuY29tcGlsZShyZWdleCwgcmUuSUdOT1JFQ0FTRSksIHJlcGxhY2VD
YWxsYmFjaywgIiIuam9pbihzdWJ3b3JkcykpCiAKICAgICBAc3RhdGljbWV0aG9kCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vbW9kZWxzLnB5CShyZXZpc2lvbiAyMjkzNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAKIAogCiBkZWYgZmluZF9kdXBsaWNhdGVzKGwpOgotICAgIHJldHVybiBb
a2V5IGZvciBrZXksIGNvdW50IGluIGNvbGxlY3Rpb25zLkNvdW50ZXIobCkuaXRlbXMoKSBpZiBj
b3VudCA+IDFdCisgICAgcmV0dXJuIFtrZXkgZm9yIGtleSwgY291bnQgaW4gbGlzdChjb2xsZWN0
aW9ucy5Db3VudGVyKGwpLml0ZW1zKCkpIGlmIGNvdW50ID4gMV0KIAogCiBfRlJBTUVXT1JLX0NP
TkZJR19NQVAgPSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQkocmV2
aXNpb24gMjI5MzQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDgg
QEAKICMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgbG9nZ2luZwot
ZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1w
b3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFz
ZWRUeXBlLCBGcmFtZXdvcmtzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTAsNyArNTAsNyBAQAogICAgICdpZCc6ICdpZGVu
dGlmaWVyJywgICMgUGFnZS5GcmFtZS5pZCwgUnVudGltZS5FeGVjdXRpb25Db250ZXh0RGVzY3Jp
cHRpb24uaWQsIERlYnVnZ2VyLkJyZWFrcG9pbnRBY3Rpb24uaWQKIH0KIAotX09CSkNfSURFTlRJ
RklFUl9SRVZFUlNFX1JFTkFNRV9NQVAgPSBkaWN0KCh2LCBrKSBmb3IgaywgdiBpbiBfT0JKQ19J
REVOVElGSUVSX1JFTkFNRV9NQVAuaXRlcml0ZW1zKCkpCitfT0JKQ19JREVOVElGSUVSX1JFVkVS
U0VfUkVOQU1FX01BUCA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIF9PQkpDX0lERU5USUZJRVJf
UkVOQU1FX01BUC5pdGVtcygpKQogCiAKIGNsYXNzIE9iakNUeXBlQ2F0ZWdvcnk6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc20ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtLnB5CShyZXZpc2lvbiAyMjkz
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc20ucHkJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgIyBXZSBuZWVkIHRvIGRvIHRoaXMg
YmVjYXVzZSBweXRob24gaXMgZHVtYiBhbmQgd29uJ3QgbGV0IG1lIHVzZSBzZWxmIGluIHRoZSBs
YW1iZGEsIHdoaWNoIGlzIHJpZGljdWxvdXMuCiAgICAgICAgIGlmIHJldCA9PSBOb25lOgogICAg
ICAgICAgICAgcmV0ID0gbGFtYmRhIG9wOiB7Im5hbWUiOiBvcCwgIm9wY29kZSI6IHNlbGYub3Bj
b2Rlc1tvcF19Ci0gICAgICAgIGZvciBvcCBpbiBzZWxmLm9wY29kZXMuaXRlcmtleXMoKToKKyAg
ICAgICAgZm9yIG9wIGluIHNlbGYub3Bjb2Rlcy5rZXlzKCk6CiAgICAgICAgICAgICBpZiBmaWx0
ZXIoc2VsZi5vcGNvZGVzW29wXSk6CiAgICAgICAgICAgICAgICAgeWllbGQgcmV0KG9wKQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9nZW5lcmF0ZVlhcnJDYW5vbmljYWxpemVV
bmljb2RlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL2dlbmVyYXRl
WWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lz
Ci1mcm9tIHNldHMgaW1wb3J0IFNldAogCiBoZWFkZXIgPSAiIiIvKgogKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNzgsMTEgKzc3LDIxIEBA
CiAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKICAgICAgICAgaWYgbm90
IG9zLnBhdGguaXNkaXIoZGlybmFtZSk6CiAgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1l
KQotICAgICAgICByZXR1cm4gb3BlbihwYXRoLCBtb2RlKQorICAgICAgICBpZiBzeXMudmVyc2lv
bl9pbmZvLm1ham9yID09IDIgb3IgbW9kZSA9PSAid2IiIG9yIG1vZGUgPT0gInJiIjoKKyAgICAg
ICAgICAgIHJldHVybiBvcGVuKHBhdGgsIG1vZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByZXR1cm4gb3BlbihwYXRoLCBtb2RlLCBlbmNvZGluZyA9ICJVVEYtOCIpCiAgICAgZXhjZXB0
IElPRXJyb3IgYXMgZToKLSAgICAgICAgcHJpbnQgIkkvTyBlcnJvciBvcGVuaW5nIHswfSwgKHsx
fSk6IHsyfSIuZm9ybWF0KHBhdGgsIGUuZXJybm8sIGUuc3RyZXJyb3IpCisgICAgICAgIHByaW50
KCJJL08gZXJyb3Igb3BlbmluZyB7MH0sICh7MX0pOiB7Mn0iLmZvcm1hdChwYXRoLCBlLmVycm5v
LCBlLnN0cmVycm9yKSkKICAgICAgICAgZXhpdCgxKQogCitkZWYgZG93cml0ZShmaWxlLCBzdHIp
OgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgZmlsZS53cml0
ZShzdHIpCisgICAgZWxzZToKKyAgICAgICAgZmlsZS53cml0ZShieXRlcyhzdHIsICJ1dGYtOCIp
KQorCisKIGNsYXNzIENhbm9uaWNhbGl6ZToKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAg
ICAgIHNlbGYuY2Fub25pY2FsR3JvdXBzID0ge307CkBAIC05Myw3ICsxMDIsNyBAQAogICAgICAg
ICBzZWxmLmNhbm9uaWNhbEdyb3Vwc1ttYXBwaW5nXS5hcHBlbmQoY29kZSkKICAgICAgICAgCiAg
ICAgZGVmIHJlYWRDYXNlRm9sZGluZyhzZWxmLCBmaWxlKToKLSAgICAgICAgY29kZXNTZWVuID0g
U2V0KCkKKyAgICAgICAgY29kZXNTZWVuID0gc2V0KCkKICAgICAgICAgZm9yIGxpbmUgaW4gZmls
ZToKICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNwbGl0KCcjJywgMSlbMF0KICAgICAgICAgICAg
IGxpbmUgPSBsaW5lLnJzdHJpcCgpCkBAIC0xNTcsMjYgKzE2NiwyNiBAQAogICAgICAgICAgICAg
c2V0ID0gY2hhcmFjdGVyU2V0c1tpXQogICAgICAgICAgICAgZm9yIGNoIGluIHNldDoKICAgICAg
ICAgICAgICAgICBjaGFyYWN0ZXJzID0gY2hhcmFjdGVycyArICIweHtjaGFyYWN0ZXI6MDR4fSwg
Ii5mb3JtYXQoY2hhcmFjdGVyPWNoKQotICAgICAgICAgICAgZmlsZS53cml0ZSgiY29uc3QgVUNo
YXIzMiB1bmljb2RlQ2hhcmFjdGVyU2V0e2luZGV4OmR9W10gPSB7eyB7Y2hhcmFjdGVyc30wIH19
O1xuIi5mb3JtYXQoaW5kZXg9aSwgY2hhcmFjdGVycz1jaGFyYWN0ZXJzKSkKKyAgICAgICAgICAg
IGRvd3JpdGUoZmlsZSwgImNvbnN0IFVDaGFyMzIgdW5pY29kZUNoYXJhY3RlclNldHtpbmRleDpk
fVtdID0ge3sge2NoYXJhY3RlcnN9MCB9fTtcbiIuZm9ybWF0KGluZGV4PWksIGNoYXJhY3RlcnM9
Y2hhcmFjdGVycykpCiAKLSAgICAgICAgZmlsZS53cml0ZSgiXG4iKQotICAgICAgICBmaWxlLndy
aXRlKCJzdGF0aWMgY29uc3Qgc2l6ZV90IFVOSUNPREVfQ0FOT05JQ0FMSVpBVElPTl9TRVRTID0g
e3NldENvdW50OmR9O1xuIi5mb3JtYXQoc2V0Q291bnQ9bGVuKGNoYXJhY3RlclNldHMpKSkKLSAg
ICAgICAgZmlsZS53cml0ZSgiY29uc3QgVUNoYXIzMiogY29uc3QgdW5pY29kZUNoYXJhY3RlclNl
dEluZm9bVU5JQ09ERV9DQU5PTklDQUxJWkFUSU9OX1NFVFNdID0ge1xuIikKKyAgICAgICAgZG93
cml0ZShmaWxlLCAiXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJzdGF0aWMgY29uc3Qgc2l6
ZV90IFVOSUNPREVfQ0FOT05JQ0FMSVpBVElPTl9TRVRTID0ge3NldENvdW50OmR9O1xuIi5mb3Jt
YXQoc2V0Q291bnQ9bGVuKGNoYXJhY3RlclNldHMpKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAi
Y29uc3QgVUNoYXIzMiogY29uc3QgdW5pY29kZUNoYXJhY3RlclNldEluZm9bVU5JQ09ERV9DQU5P
TklDQUxJWkFUSU9OX1NFVFNdID0ge1xuIikKIAogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4o
Y2hhcmFjdGVyU2V0cykpOgotICAgICAgICAgICAgZmlsZS53cml0ZSgiICAgIHVuaWNvZGVDaGFy
YWN0ZXJTZXR7c2V0TnVtYmVyOmR9LFxuIi5mb3JtYXQoc2V0TnVtYmVyPWkpKQorICAgICAgICAg
ICAgZG93cml0ZShmaWxlLCAiICAgIHVuaWNvZGVDaGFyYWN0ZXJTZXR7c2V0TnVtYmVyOmR9LFxu
Ii5mb3JtYXQoc2V0TnVtYmVyPWkpKQogCi0gICAgICAgIGZpbGUud3JpdGUoIn07XG4iKQotICAg
ICAgICBmaWxlLndyaXRlKCJcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoImNvbnN0IHNpemVfdCBV
TklDT0RFX0NBTk9OSUNBTElaQVRJT05fUkFOR0VTID0ge3JhbmdlQ291bnQ6ZH07XG4iLmZvcm1h
dChyYW5nZUNvdW50PWxlbihyYW5nZUluZm8pKSkKLSAgICAgICAgZmlsZS53cml0ZSgiY29uc3Qg
Q2Fub25pY2FsaXphdGlvblJhbmdlIHVuaWNvZGVSYW5nZUluZm9bVU5JQ09ERV9DQU5PTklDQUxJ
WkFUSU9OX1JBTkdFU10gPSB7XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJ9O1xuIikKKyAg
ICAgICAgZG93cml0ZShmaWxlLCAiXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJjb25zdCBz
aXplX3QgVU5JQ09ERV9DQU5PTklDQUxJWkFUSU9OX1JBTkdFUyA9IHtyYW5nZUNvdW50OmR9O1xu
Ii5mb3JtYXQocmFuZ2VDb3VudD1sZW4ocmFuZ2VJbmZvKSkpCisgICAgICAgIGRvd3JpdGUoZmls
ZSwgImNvbnN0IENhbm9uaWNhbGl6YXRpb25SYW5nZSB1bmljb2RlUmFuZ2VJbmZvW1VOSUNPREVf
Q0FOT05JQ0FMSVpBVElPTl9SQU5HRVNdID0ge1xuIikKIAogICAgICAgICBmb3IgaW5mbyBpbiBy
YW5nZUluZm86CiAgICAgICAgICAgICB0eXBlQW5kVmFsdWUgPSBpbmZvWyJ0eXBlIl0uc3BsaXQo
IjoiKQotICAgICAgICAgICAgZmlsZS53cml0ZSgiICAgIHt7IDB4e2JlZ2luOjA0eH0sIDB4e2Vu
ZDowNHh9LCAweHt2YWx1ZTowNHh9LCB7dHlwZX0gfX0sXG4iLmZvcm1hdChiZWdpbj1pbmZvWyJi
ZWdpbiJdLCBlbmQ9aW5mb1siZW5kIl0sIHZhbHVlPWludCh0eXBlQW5kVmFsdWVbMV0pLCB0eXBl
PXR5cGVBbmRWYWx1ZVswXSkpCisgICAgICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAge3sgMHh7
YmVnaW46MDR4fSwgMHh7ZW5kOjA0eH0sIDB4e3ZhbHVlOjA0eH0sIHt0eXBlfSB9fSxcbiIuZm9y
bWF0KGJlZ2luPWluZm9bImJlZ2luIl0sIGVuZD1pbmZvWyJlbmQiXSwgdmFsdWU9aW50KHR5cGVB
bmRWYWx1ZVsxXSksIHR5cGU9dHlwZUFuZFZhbHVlWzBdKSkKIAotICAgICAgICBmaWxlLndyaXRl
KCJ9O1xuIikKLSAgICAgICAgZmlsZS53cml0ZSgiXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUs
ICJ9O1xuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG4iKQogCiAgICAgICAgIAogaWYgX19u
YW1lX18gPT0gIl9fbWFpbl9fIjoKQEAgLTE5NCw5ICsyMDMsOSBAQAogICAgIGNhbm9uaWNhbGl6
ZSA9IENhbm9uaWNhbGl6ZSgpCiAgICAgY2Fub25pY2FsaXplLnJlYWRDYXNlRm9sZGluZyhjYXNl
Rm9sZGluZ1R4dEZpbGUpCiAKLSAgICBjYW5vbmljYWxpemVIRmlsZS53cml0ZShoZWFkZXIpOwor
ICAgIGRvd3JpdGUoY2Fub25pY2FsaXplSEZpbGUsIGhlYWRlcikKICAgICBjYW5vbmljYWxpemUu
Y3JlYXRlVGFibGVzKGNhbm9uaWNhbGl6ZUhGaWxlKQotICAgIGNhbm9uaWNhbGl6ZUhGaWxlLndy
aXRlKGZvb3Rlcik7CisgICAgZG93cml0ZShjYW5vbmljYWxpemVIRmlsZSwgZm9vdGVyKQogCiAg
ICAgY2FzZUZvbGRpbmdUeHRGaWxlLmNsb3NlKCkKICAgICBjYW5vbmljYWxpemVIRmlsZS5jbG9z
ZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NyZWF0ZS1odHRwLWhl
YWRlci1uYW1lLXRhYmxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3JlYXRlLWh0dHAtaGVhZGVyLW5hbWUtdGFibGUJKHJldmlzaW9uIDIyOTM0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3JlYXRlLWh0dHAtaGVhZGVyLW5hbWUt
dGFibGUJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKIGh0dHBfaGVhZGVyX25hbWVf
dG9faWQgPSB7IH0KIGh0dHBfaGVhZGVyX25hbWVzID0gW10KIAotZm9yIGxpbmUgaW4gaW5wdXRf
ZmlsZS54cmVhZGxpbmVzKCk6Citmb3IgbGluZSBpbiBpbnB1dF9maWxlOgogICAgIGh0dHBfaGVh
ZGVyX25hbWUgPSBsaW5lLnN0cmlwKCkKICAgICBpZiBub3QgaHR0cF9oZWFkZXJfbmFtZSBvciBo
dHRwX2hlYWRlcl9uYW1lWzoyXSA9PSAnLy8nOgogICAgICAgICBjb250aW51ZQpJbmRleDogU291
cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMu
cGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2Vy
LWludGVyZmFjZS1yZXNvdXJjZXMucGwJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDggQEAKIG15ICR0aHJlZWpzTGljZW5zZSA9IHJlYWRM
aWNlbnNlRmlsZShGaWxlOjpTcGVjLT5jYXRmaWxlKCR0aHJlZWpzUGF0aCwgJ0xJQ0VOU0UnKSk7
CiBtYWtlX3BhdGgoJHByb3RvY29sRGlyLCAkdGFyZ2V0UmVzb3VyY2VQYXRoKTsKIAorJHB5dGhv
biA9ICRFTlZ7IlBZVEhPTiJ9IGlmIGRlZmluZWQoJEVOVnsiUFlUSE9OIn0pOworCiAjIENvcHkg
b3ZlciBkeW5hbWljYWxseSBsb2FkZWQgZmlsZXMgZnJvbSBvdGhlciBmcmFtZXdvcmtzLCBldmVu
IGlmIHdlIGFyZW4ndCBjb21iaW5pbmcgcmVzb3VyY2VzLgogY29weShGaWxlOjpTcGVjLT5jYXRm
aWxlKCRFTlZ7J0pBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVInfSwgJ0luc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcycpLCBGaWxlOjpTcGVjLT5jYXRmaWxlKCRwcm90b2NvbERpciwg
J0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcycpKSBvciBkaWUgIkNvcHkgb2YgSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzIGZhaWxlZDogJCEiOwogCkluZGV4OiBTb3VyY2UvY21ha2UvV2Vi
S2l0Q29tbW9uLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9jbWFrZS9XZWJLaXRDb21tb24u
Y21ha2UJKHJldmlzaW9uIDIyOTM0MSkKKysrIFNvdXJjZS9jbWFrZS9XZWJLaXRDb21tb24uY21h
a2UJKHdvcmtpbmcgY29weSkKQEAgLTIxLDkgKzIxLDYgQEAKICAgICBmaW5kX3BhY2thZ2UoUGVy
bE1vZHVsZXMgQ09NUE9ORU5UUyBKU09OOjpQUCBSRVFVSVJFRCkKIAogICAgIGZpbmRfcGFja2Fn
ZShQeXRob25JbnRlcnAgMi43LjAgUkVRVUlSRUQpCi0gICAgaWYgKFBZVEhPTl9WRVJTSU9OX01B
Sk9SIEdSRUFURVIgMikKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUHl0aG9uIDIgaXMg
cmVxdWlyZWQsIGJ1dCBQeXRob24gJHtQWVRIT05fVkVSU0lPTl9NQUpPUn0gd2FzIGZvdW5kLiIp
Ci0gICAgZW5kaWYgKCkKIAogICAgICMgV2UgY2Fubm90IGNoZWNrIGZvciBSVUJZX0ZPVU5EIGJl
Y2F1c2UgaXQgaXMgc2V0IG9ubHkgd2hlbiB0aGUgZnVsbCBwYWNrYWdlIGlzIGluc3RhbGxlZCBh
bmQKICAgICAjIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgaXMgdGhlIGludGVycHJldGVyLiBVbmxp
a2UgUHl0aG9uLCBjbWFrZSBkb2VzIG5vdCBwcm92aWRlIGEgbWFjcm8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346638</attachid>
            <date>2018-08-06 11:54:19 -0700</date>
            <delta_ts>2018-08-23 14:01:01 -0700</delta_ts>
            <desc>Revised patch.</desc>
            <filename>python3.patch</filename>
            <type>text/plain</type>
            <size>187020</size>
            <attacher name="Mike Gorse">mgorse</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIzNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTM2LDcgKzEzNiw4IEBACiBzZXQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19TT1VSQ0VTX1BB
VEhTCiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX1NPVVJDRVNfRElSfS8qLnBsCiAgICAg
JHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX1NPVVJDRVNfRElSfS8qLnB5Ci0gICAgJHtKYXZhU2Ny
aXB0Q29yZV9TQ1JJUFRTX1NPVVJDRVNfRElSfS9idWlsdGlucy9idWlsdGlucyoucHkKKyAgICAk
e0phdmFTY3JpcHRDb3JlX1NDUklQVFNfU09VUkNFU19ESVJ9L3drYnVpbHRpbnMvYnVpbHRpbnMq
LnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX1NPVVJDRVNfRElSfS93a2J1aWx0aW5z
L3drYnVpbHRpbnMucHkKICkKIAogIyBGb3JjZSBKYXZhU2NyaXB0Q29yZSB0byBydW4gc2NyaXB0
cyBmcm9tIHRoZSBzYW1lIHN0YWdpbmcgcGF0aCBhcyBXZWJDb3JlLgpAQCAtMTA4NSw3ICsxMDg2
LDcgQEAKICMgSlNDQnVpbHRpbnMKIAogc2V0KEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTCi0g
ICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnMucHkKKyAgICAke0phdmFT
Y3JpcHRDb3JlX1NDUklQVFNfRElSfS93a2J1aWx0aW5zLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29y
ZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdG9yLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29y
ZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfbW9kZWwucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSfS9idWlsdGluc190ZW1wbGF0ZXMucHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2J1aWx0aW5zL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL19faW5pdF9fLnB5CShyZXZpc2lvbiAyMzQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9fX2luaXRfXy5w
eQkobm9uZXhpc3RlbnQpCkBAIC0xLDMgKzAsMCBAQAotIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRv
IHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCi0KLWZyb20gYnVpbHRpbnMg
aW1wb3J0ICoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1
aWx0aW5zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1
aWx0aW5zL2J1aWx0aW5zLnB5CShyZXZpc2lvbiAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlucy5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1
ICswLDAgQEAKLSMgVGhpcyBmaWxlIGlzIHVzZWQgdG8gc2ltdWxhdGUgdGhlIGJ1aWx0aW5zLyBk
aXJlY3Rvcnkgd2hlbiBnZW5lcmF0ZS1qcy1idWlsdGlucy5weQotIyBpcyBydW4gZnJvbSBKYXZh
U2NyaXB0Q29yZSBmcmFtZXdvcmsncyBwcml2YXRlIGhlYWRlcnMgZGlyZWN0b3J5LCB3aGljaCBp
cyBmbGF0dGVuZWQuCi0KLWZyb20gYnVpbHRpbnNfbW9kZWwgaW1wb3J0ICoKLWZyb20gYnVpbHRp
bnNfdGVtcGxhdGVzIGltcG9ydCAqCi0KLWZyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCAq
Ci1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlciBpbXBvcnQgKgotZnJvbSBi
dWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBi
dWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIgaW1wb3J0ICoKLWZyb20gYnVpbHRpbnNf
Z2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gYnVpbHRpbnNf
Z2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gYnVpbHRpbnNfZ2VuZXJhdGVf
d3JhcHBlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBidWlsdGluc19nZW5lcmF0ZV9p
bnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gYnVpbHRpbnNfZ2VuZXJhdGVf
aW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVk
X2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9i
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkJKHJldmlzaW9uIDIz
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3MSArMCww
IEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJl
Ci1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBidWls
dGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yCi1mcm9tIGJ1aWx0aW5zX3Rl
bXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0K
LWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJ1aWx0aW5zQ29t
YmluZWRIZWFkZXJHZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCk6Ci0gICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYs
IG1vZGVsKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJu
ICIlc0J1aWx0aW5zLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3Bh
Y2UnKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgYXJncyA9IHsK
LSAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmco
J25hbWVzcGFjZScpLAotICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdtYWNyb19wcmVmaXgnKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNl
Y3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5z
ZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRp
dFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1w
bGF0ZShUZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucygp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRv
cCkuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCku
b2JqZWN0czoKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rp
b25fZm9yX29iamVjdChvYmplY3QpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9zZWN0aW9uX2Zvcl9jb2RlX3RhYmxlX21hY3JvKCkpCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfbmFtZV9tYWNybygpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9nbG9iYWxfcHJpdmF0
ZV9jb2RlX25hbWVfbWFjcm8oKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5Db21iaW5lZEhlYWRlclN0YXRpY01hY3Jvcykuc3Vic3RpdHV0ZShhcmdzKSkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VCb3R0b20p
LnN1YnN0aXR1dGUoYXJncykpCi0KLSAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25z
KQotCi0gICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKHNlbGYpOgotICAgICAg
ICByZXR1cm4gIiIibmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7Ci1j
bGFzcyBWTTsKLQotZW51bSBjbGFzcyBDb25zdHJ1Y3RBYmlsaXR5IDogdW5zaWduZWQ7Ci19IiIi
Ci0KLSAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYsIG9iamVjdCk6Ci0g
ICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBvYmpl
Y3Qub2JqZWN0X25hbWUpCi0gICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLmdlbmVyYXRlX2V4dGVy
bnNfZm9yX29iamVjdChvYmplY3QpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiIpCi0gICAgICAg
IGxpbmVzLmV4dGVuZChzZWxmLmdlbmVyYXRlX21hY3Jvc19mb3Jfb2JqZWN0KG9iamVjdCkpCi0g
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfZXh0ZXJu
c19mb3Jfb2JqZWN0KHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIGxpbmVzID0gW10KLQotICAgICAg
ICBmb3IgZnVuY3Rpb24gaW4gb2JqZWN0LmZ1bmN0aW9uczoKLSAgICAgICAgICAgIGZ1bmN0aW9u
X2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2NvZGVOYW1lJzogQnVpbHRpbnNHZW5lcmF0b3Iu
bWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihmdW5jdGlvbikgKyAnQ29kZScsCi0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJleHRlcm4gY29uc3QgY2hhciogc18lKGNv
ZGVOYW1lKXM7Ci1leHRlcm4gY29uc3QgaW50IHNfJShjb2RlTmFtZSlzTGVuZ3RoOwotZXh0ZXJu
IGNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzXyUoY29kZU5hbWUpc0NvbnN0cnVjdEFiaWxp
dHk7IiIiICUgZnVuY3Rpb25fYXJncykKLQotICAgICAgICByZXR1cm4gbGluZXMKLQotICAgIGRl
ZiBnZW5lcmF0ZV9tYWNyb3NfZm9yX29iamVjdChzZWxmLCBvYmplY3QpOgotICAgICAgICBhcmdz
ID0gewotICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5z
ZXR0aW5nKCdtYWNyb19wcmVmaXgnKSwKLSAgICAgICAgICAgICdvYmplY3RNYWNybyc6IG9iamVj
dC5vYmplY3RfbmFtZS5yZXBsYWNlKCcuJywgJycpLnVwcGVyKCksCi0gICAgICAgIH0KLQotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3JvUHJl
Zml4KXNfRk9SRUFDSF8lKG9iamVjdE1hY3JvKXNfQlVJTFRJTl9EQVRBKG1hY3JvKSBcXCIgJSBh
cmdzKQotICAgICAgICBmb3IgZnVuY3Rpb24gaW4gb2JqZWN0LmZ1bmN0aW9uczoKLSAgICAgICAg
ICAgIGZ1bmN0aW9uX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2Z1bmNOYW1lJzogZnVuY3Rp
b24uZnVuY3Rpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAnbWFuZ2xlZE5hbWUnOiBCdWlsdGlu
c0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKSwKLSAgICAgICAgICAg
ICAgICAncGFyYW1Db3VudCc6IGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSwKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgbWFjcm8oJShmdW5jTmFtZSlzLCAl
KG1hbmdsZWROYW1lKXMsICUocGFyYW1Db3VudClkKSBcXCIgJSBmdW5jdGlvbl9hcmdzKQotICAg
ICAgICByZXR1cm4gbGluZXMKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9jb2RlX3Rh
YmxlX21hY3JvKHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ21hY3JvUHJl
Zml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdtYWNyb19wcmVmaXgnKSwKLSAg
ICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCIjZGVm
aW5lICUobWFjcm9QcmVmaXgpc19GT1JFQUNIX0JVSUxUSU5fQ09ERShtYWNybykgXFwiICUgYXJn
cykKLSAgICAgICAgZm9yIGZ1bmN0aW9uIGluIHNlbGYubW9kZWwoKS5hbGxfZnVuY3Rpb25zKCk6
Ci0gICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0gewotICAgICAgICAgICAgICAgICdmdW5jTmFt
ZSc6IGZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUsCi0gICAgICAgICAgICAgICAgJ292ZXJyaWRkZW5O
YW1lJzogZnVuY3Rpb24ub3ZlcnJpZGRlbl9uYW1lLAotICAgICAgICAgICAgICAgICdjb2RlTmFt
ZSc6IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yRnVuY3Rpb24oZnVuY3Rpb24pICsg
J0NvZGUnLAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBt
YWNybyglKGNvZGVOYW1lKXMsICUoZnVuY05hbWUpcywgJShvdmVycmlkZGVuTmFtZSlzLCBzXyUo
Y29kZU5hbWUpc0xlbmd0aCkgXFwiICUgZnVuY3Rpb25fYXJncykKLSAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9jb2RlX25hbWVf
bWFjcm8oc2VsZik6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbWFjcm9QcmVmaXgn
OiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpLAotICAgICAg
ICB9Ci0KLSAgICAgICAgaW50ZXJuYWxfZnVuY3Rpb25fbmFtZXMgPSBbZnVuY3Rpb24uZnVuY3Rp
b25fbmFtZSBmb3IgZnVuY3Rpb24gaW4gc2VsZi5tb2RlbCgpLmFsbF9pbnRlcm5hbF9mdW5jdGlv
bnMoKV0KLSAgICAgICAgaWYgbGVuKGludGVybmFsX2Z1bmN0aW9uX25hbWVzKSAhPSBsZW4oc2V0
KGludGVybmFsX2Z1bmN0aW9uX25hbWVzKSk6Ci0gICAgICAgICAgICBsb2cuZXJyb3IoIlRoZXJl
IGFyZSBzZXZlcmFsIGludGVybmFsIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUuIFByaXZh
dGUgaWRlbnRpZmllcnMgbWF5IGNsYXNoLiIpCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBsaW5lcy5hcHBlbmQoIiNkZWZpbmUgJShtYWNyb1ByZWZpeClzX0ZPUkVBQ0hfQlVJTFRJTl9G
VU5DVElPTl9OQU1FKG1hY3JvKSBcXCIgJSBhcmdzKQotICAgICAgICB1bmlxdWVfbmFtZXMgPSBs
aXN0KHNldChbZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSBmb3IgZnVuY3Rpb24gaW4gc2VsZi5tb2Rl
bCgpLmFsbF9mdW5jdGlvbnMoKV0pKQotICAgICAgICB1bmlxdWVfbmFtZXMuc29ydCgpCi0gICAg
ICAgIGZvciBmdW5jdGlvbl9uYW1lIGluIHVuaXF1ZV9uYW1lczoKLSAgICAgICAgICAgIGZ1bmN0
aW9uX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2Z1bmNOYW1lJzogZnVuY3Rpb25fbmFtZSwK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgbWFjcm8oJShm
dW5jTmFtZSlzKSBcXCIgJSBmdW5jdGlvbl9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQotCi0gICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9yX2dsb2JhbF9wcml2YXRlX2Nv
ZGVfbmFtZV9tYWNybyhzZWxmKToKLSAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICdtYWNy
b1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbWFjcm9fcHJlZml4Jyks
Ci0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgi
I2RlZmluZSAlKG1hY3JvUHJlZml4KXNfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX1BSSVZBVEVf
R0xPQkFMX05BTUUobWFjcm8pIFxcIiAlIGFyZ3MpCi0gICAgICAgIGZ1bmN0aW9ucyA9IGZpbHRl
cihsYW1iZGEgZnVuY3Rpb246IGZ1bmN0aW9uLmlzX2dsb2JhbF9wcml2YXRlLCBzZWxmLm1vZGVs
KCkuYWxsX2Z1bmN0aW9ucygpKQotICAgICAgICBmdW5jdGlvbnMuc29ydChrZXk9bGFtYmRhIHg6
IHguZnVuY3Rpb25fbmFtZSkKLSAgICAgICAgZm9yIGZ1bmN0aW9uIGluIGZ1bmN0aW9uczoKLSAg
ICAgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2Z1bmNOYW1lJzog
ZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAnY29kZU5hbWUnOiBCdWls
dGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKSwKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgbWFjcm8oJShmdW5jTmFtZSlz
LCAlKGNvZGVOYW1lKXMpIFxcIiAlIGZ1bmN0aW9uX2FyZ3MpCi0KLSAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkRlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICswLDAgIyMKLSoKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaW1wbGVtZW50YXRpb24u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMv
YnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDIz
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5CShub25leGlzdGVudCkKQEAgLTEs
MTAwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwot
aW1wb3J0IHJlCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQot
ZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yCi1mcm9tIGJ1
aWx0aW5zX21vZGVsIGltcG9ydCBGcmFtZXdvcmssIEZyYW1ld29ya3MKLWZyb20gYnVpbHRpbnNf
dGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMK
LQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgQnVpbHRpbnND
b21iaW5lZEltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgotICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCBtb2RlbCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiAiJXNCdWlsdGlucy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCduYW1lc3BhY2UnKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAg
ICAgYXJncyA9IHsKLSAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpLAotICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdtYWNyb19wcmVmaXgnKSwKLSAgICAgICAgfQot
Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxh
dGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX3ByaW1hcnlfaGVhZGVyX2luY2x1ZGVzKCkpCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMo
KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VU
b3ApLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBzZWxmLm1vZGVs
KCkuYWxsX2Z1bmN0aW9ucygpOgotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfZW1iZWRkZWRfY29kZV9zdHJpbmdfc2VjdGlvbl9mb3JfZnVuY3Rpb24oZnVuY3Rpb24p
KQotICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuSmF2YVNj
cmlwdENvcmU6Ci0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
LkNvbWJpbmVkSlNDSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3MpLnN1YnN0aXR1dGUoYXJncykp
Ci0gICAgICAgIGVsaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYkNv
cmU6Ci0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNvbWJp
bmVkV2ViQ29yZUltcGxlbWVudGF0aW9uU3RhdGljTWFjcm9zKS5zdWJzdGl0dXRlKGFyZ3MpKQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZUJvdHRv
bSkuc3Vic3RpdHV0ZShhcmdzKSkKLQotICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlv
bnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToK
LSAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImJ1aWx0aW5zL0J1aWx0
aW5FeGVjdXRhYmxlcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNj
cmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUi
LCAiaGVhcC9IZWFwSW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlw
dENvcmUiLCAicnVudGltZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIiksCi0gICAgICAg
ICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAg
ICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9KU0NlbGxJbmxpbmVzLmgi
KSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAg
ICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCIpLAot
ICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAg
ICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaCIpLAotICAg
ICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwK
LSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvVk0uaCIpLAotICAg
ICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwK
LSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSWRlbnRpZmllcklu
bGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3Jl
IiwgIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRp
bWUvSW50cmluc2ljLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgIF0KLQotICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRl
cl9pbmNsdWRlcykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlu
cy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CShyZXZpc2lvbiAyMzQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9p
bnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTMgKzAsMCBA
QAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMg
YXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUK
LQotZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yLCBXS19s
Y2ZpcnN0LCBXS191Y2ZpcnN0Ci1mcm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRp
bnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdl
bmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
KToKLSAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0gICAg
ICAgIHNlbGYuaW50ZXJuYWxzID0gZmlsdGVyKGxhbWJkYSBvYmplY3Q6ICdpbnRlcm5hbCcgaW4g
b2JqZWN0LmFubm90YXRpb25zLCBtb2RlbC5vYmplY3RzKQotCi0gICAgZGVmIG91dHB1dF9maWxl
bmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICIlc0pTQnVpbHRpbkludGVybmFscy5oIiAlIHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykKLQotICAgIGRlZiBnZW5l
cmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbmFtZXNw
YWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKLSAgICAg
ICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
VGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkKS5zdWJz
dGl0dXRlKGFyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNv
bmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkpCi0KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdCgpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vi
c3RpdHV0ZShhcmdzKSkKLQotICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0K
LSAgICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKLSAgICAg
ICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAgICAgICAgICAgKFsiV2ViQ29yZSJdLCAoIkphdmFT
Y3JpcHRDb3JlIiwgImhlYXAvV2Vha0lubGluZXMuaCIpKSwKLSAgICAgICAgICAgIChbIldlYkNv
cmUiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1ZNLmgiKSkKLSAgICAgICAgXQotICAg
ICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgotICAgICAgICAgICAgaGVhZGVyX2lu
Y2x1ZGVzLmFwcGVuZCgoWyJXZWJDb3JlIl0sICgiV2ViQ29yZSIsIG9iamVjdC5vYmplY3RfbmFt
ZSArICJCdWlsdGlucy5oIikpKQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5l
cmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKLQotICAgIGRlZiBn
ZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWyJjbGFz
cyBKU0RPTUdsb2JhbE9iamVjdDsiLAotICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAg
ICAgICAgImNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsiLAotICAgICAgICAgICAg
ICAgICAicHVibGljOiJdCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgZXhwbGljaXQgSlNC
dWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOyIpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX21ldGhvZHMoKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfYWNjZXNzb3JzKCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgicHJpdmF0ZToiKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9tZW1iZXJzKCkpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgifTsiKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVm
IGFjY2Vzc29yX25hbWUoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgcmV0dXJuIFdLX2xjZmlyc3Qo
b2JqZWN0Lm9iamVjdF9uYW1lKQotCi0gICAgZGVmIG1lbWJlcl9uYW1lKHNlbGYsIG9iamVjdCk6
Ci0gICAgICAgIHJldHVybiAibV8iICsgc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCkKLQotICAg
IGRlZiBtZW1iZXJfdHlwZShzZWxmLCBvYmplY3QpOgotICAgICAgICByZXR1cm4gV0tfdWNmaXJz
dChvYmplY3Qub2JqZWN0X25hbWUpICsgIkJ1aWx0aW5GdW5jdGlvbnMiCi0KLSAgICBkZWYgZ2Vu
ZXJhdGVfbWV0aG9kcyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIiIgotICAgIHZvaWQgdmlzaXQo
SlNDOjpTbG90VmlzaXRvciYpOwotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVj
dCYpOwotIiIiCi0KLSAgICBkZWYgZ2VuZXJhdGVfYWNjZXNzb3JzKHNlbGYpOgotICAgICAgICBs
aW5lcyA9IFtdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6Ci0gICAgICAg
ICAgICBhY2Nlc3NvciA9ICIgICAgJXMmICVzKCkgeyByZXR1cm4gJXM7IH0iICUgKHNlbGYubWVt
YmVyX3R5cGUob2JqZWN0KSwgc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCksIHNlbGYubWVtYmVy
X25hbWUob2JqZWN0KSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRv
ci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwg
YWNjZXNzb3IpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiIpCi0gICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfbWVtYmVycyhzZWxmKToKLSAgICAgICAg
bGluZXMgPSBbIiAgICBKU0M6OlZNJiBtX3ZtOyJdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2Vs
Zi5pbnRlcm5hbHM6Ci0gICAgICAgICAgICBtZW1iZXIgPSAiICAgICVzICVzOyIgJSAoc2VsZi5t
ZW1iZXJfdHlwZShvYmplY3QpLCBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkpCi0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5h
bm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIG1lbWJlcikpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9o
ZWFkZXIucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMSArMCwwICMj
Ci0qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2lt
cGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9p
bXBsZW1lbnRhdGlvbi5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1NiArMCwwIEBACi0jIS91c3Iv
YmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LQotaW1wb3J0IGxvZ2dpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGJ1
aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IsIFdLX2xjZmlyc3QsIFdL
X3VjZmlyc3QKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRv
clRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCi0KLQotY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6
Ci0gICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQotICAgICAg
ICBzZWxmLmludGVybmFscyA9IGZpbHRlcihsYW1iZGEgb2JqZWN0OiAnaW50ZXJuYWwnIGluIG9i
amVjdC5hbm5vdGF0aW9ucywgbW9kZWwub2JqZWN0cykKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5h
bWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXNKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIiAlIHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykKLQotICAgIGRlZiBnZW5l
cmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbmFtZXNw
YWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKLSAgICAg
ICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
VGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3ByaW1hcnlfaGVhZGVyX2luY2x1ZGVzKCkpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5j
bHVkZXMoKSkKLQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5h
bWVzcGFjZVRvcCkuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQot
Ci0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0
ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgotICAgICAgICBoZWFkZXJfaW5jbHVk
ZXMgPSBbCi0gICAgICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJXZWJD
b3JlIiwgIkpTRE9NR2xvYmFsT2JqZWN0LmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAg
ICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIldlYkNvcmUiXSwK
LSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImhlYXAvSGVhcElubGluZXMuaCIp
LAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAg
ICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgiKSwKLSAg
ICAgICAgICAgICksCi0gICAgICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAg
KCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgiKSwKLSAgICAg
ICAgICAgICksCi0gICAgICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJK
YXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCIpLAotICAgICAgICAg
ICAgKSwKLSAgICAgICAgXQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCi0KLSAgICBkZWYgZ2VuZXJh
dGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgotICAgICAgICBsaW5lcyA9IFtdCi0KLSAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfY29uc3RydWN0b3IoKSkKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfdmlzaXRfbWV0aG9kKCkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2luaXRpYWxpemVfbWV0aG9kKCkpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgYWNjZXNzb3JfbmFtZShzZWxmLCBvYmplY3QpOgot
ICAgICAgICByZXR1cm4gV0tfbGNmaXJzdChvYmplY3Qub2JqZWN0X25hbWUpCi0KLSAgICBkZWYg
bWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgcmV0dXJuICJtXyIgKyBzZWxmLmFj
Y2Vzc29yX25hbWUob2JqZWN0KQotCi0gICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9iamVjdCk6
Ci0gICAgICAgIHJldHVybiBXS191Y2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRp
bkZ1bmN0aW9ucyIKLQotICAgIGRlZiBnZW5lcmF0ZV9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAg
ICAgZ3VhcmRzID0gc2V0KFtvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpIGZv
ciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHMgaWYgJ2NvbmRpdGlvbmFsJyBpbiBvYmplY3QuYW5u
b3RhdGlvbnNdKQotICAgICAgICBsaW5lcyA9IFsiSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6
OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKSIsCi0gICAgICAgICAgICAg
ICAgICIgICAgOiBtX3ZtKHZtKSJdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5h
bHM6Ci0gICAgICAgICAgICBpbml0aWFsaXplciA9ICIgICAgLCAlcyhtX3ZtKSIgJSBzZWxmLm1l
bWJlcl9uYW1lKG9iamVjdCkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVy
YXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwn
KSwgaW5pdGlhbGl6ZXIpKQotICAgICAgICBsaW5lcy5hcHBlbmQoInsiKQotICAgICAgICBsaW5l
cy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odm0pOyIpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgi
fVxuIikKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBwcm9wZXJ0
eV9tYWNybyhzZWxmLCBvYmplY3QpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgiI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSkgXFwiKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoIiAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZv
KCBcXCIpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5G
dW5jdGlvbnMoKS4lc0J1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgJXMoKS5tXyMjbmFt
ZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpLCIgJSAoc2VsZi5hY2Nlc3Nvcl9uYW1l
KG9iamVjdCksIHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpKSkKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCIgICAgV0VCQ09SRV9GT1JFQUNIXyVzX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJF
X0dMT0JBTF9TVEFUSUMpIiAlIG9iamVjdC5vYmplY3RfbmFtZS51cHBlcigpKQotICAgICAgICBs
aW5lcy5hcHBlbmQoIiN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMiKQotICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIGdlbmVyYXRlX3Zpc2l0X21ldGhvZChzZWxm
KToKLSAgICAgICAgbGluZXMgPSBbInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZp
c2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIiwKLSAgICAgICAgICAgICAgICAgInsiXQot
ICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgotICAgICAgICAgICAgdmlzaXQg
PSAiICAgICVzLnZpc2l0KHZpc2l0b3IpOyIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQo
b2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgdmlzaXQpKQotICAgICAgICBs
aW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7IikKLSAgICAgICAgbGluZXMu
YXBwZW5kKCJ9XG4iKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVm
IF9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9iYWxzKHNlbGYpOgotICAgICAgICBsaW5l
cyA9IFsiICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsiLAotICAgICAgICAgICAgICAgICAiICAgIEpT
RE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0geyJd
Ci0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0
aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHNlbGYucHJvcGVydHlfbWFjcm8ob2JqZWN0KSkpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIH07IikKLSAgICAgICAgbGluZXMuYXBwZW5kKCIgICAg
Z2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xF
TkdUSChzdGF0aWNHbG9iYWxzKSk7IikKLSAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VE
X1BBUkFNKGNsaWVudERhdGEpOyIpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0K
LSAgICBkZWYgZ2VuZXJhdGVfaW5pdGlhbGl6ZV9tZXRob2Qoc2VsZik6Ci0gICAgICAgIGxpbmVz
ID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpIiwKLSAgICAgICAgICAgICAgICAieyIsCi0gICAgICAg
ICAgICAgICAgIiAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsiXQotCi0gICAgICAgIGZv
ciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6Ci0gICAgICAgICAgICBpbml0ID0gIiAgICAlcy5p
bml0KGdsb2JhbE9iamVjdCk7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3Qu
YW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBpbml0KSkKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCIiKQotCi0gICAgICAgIGd1YXJkcyA9IHNldChbb2JqZWN0LmFubm90YXRpb25zLmdldCgn
Y29uZGl0aW9uYWwnKSBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzIGlmICdjb25kaXRpb25h
bCcgaW4gb2JqZWN0LmFubm90YXRpb25zXSkKLSAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5z
R2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZCgiIHx8ICIuam9pbihndWFyZHMpLCBzZWxmLl9nZW5l
cmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9iYWxzKCkpKQotCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgifSIpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5l
cmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICswLDAgIyMKLSoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMv
YnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFy
YXRlX2hlYWRlci5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5CShu
b25leGlzdGVudCkKQEAgLTEsMTk4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwot
IyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0j
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ci1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKLQotZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5z
R2VuZXJhdG9yCi1mcm9tIGJ1aWx0aW5zX21vZGVsIGltcG9ydCBGcmFtZXdvcmtzCi1mcm9tIGJ1
aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVt
cGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJ1
aWx0aW5zU2VwYXJhdGVIZWFkZXJHZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgb2JqZWN0KToKLSAgICAgICAgQnVpbHRpbnNHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0gICAgICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0Ci0K
LSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVzQnVpbHRp
bnMuaCIgJSBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvck9iamVjdChzZWxmLm9iamVj
dCkKLQotICAgIGRlZiBtYWNyb19wcmVmaXgoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm1v
ZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpCi0KLSAgICBkZWYgZ2VuZXJh
dGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ25hbWVzcGFj
ZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyksCi0gICAgICAg
ICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1hY3JvX3ByZWZpeCgpLAotICAgICAgICAgICAgJ29i
amVjdE5hbWUnOiBzZWxmLm9iamVjdC5vYmplY3RfbmFtZSwKLSAgICAgICAgICAgICdvYmplY3RN
YWNybyc6IHNlbGYub2JqZWN0Lm9iamVjdF9uYW1lLnVwcGVyKCksCi0gICAgICAgIH0KLQotICAg
ICAgICBjb25kaXRpb25hbF9ndWFyZCA9IHNlbGYub2JqZWN0LmFubm90YXRpb25zLmdldCgnY29u
ZGl0aW9uYWwnKQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJk
KS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3Qg
Tm9uZToKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgiI2lmICVzIiAlIGNvbmRpdGlvbmFs
X2d1YXJkKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlf
aGVhZGVyX2luY2x1ZGVzKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2ZvcndhcmRfZGVjbGFyYXRpb25zKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuTmFtZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2VsZi5vYmplY3Qp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9jb2Rl
X3RhYmxlX21hY3JvKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3Nl
Y3Rpb25fZm9yX2NvZGVfbmFtZV9tYWNybygpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLlNlcGFyYXRlSGVhZGVyU3RhdGljTWFjcm9zKS5zdWJzdGl0dXRlKGFy
Z3MpKQotICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2Vi
Q29yZToKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuU2Vw
YXJhdGVIZWFkZXJXcmFwcGVyQm9pbGVycGxhdGUpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAg
ICAgICBpZiBzZWxmLm9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2ludGVybmFsJyk6Ci0gICAgICAg
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5TZXBhcmF0ZUhlYWRl
ckludGVybmFsRnVuY3Rpb25zQm9pbGVycGxhdGUpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJz
dGl0dXRlKGFyZ3MpKQotICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGNvbmRpdGlvbmFs
X2d1YXJkKQotCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgIGRl
ZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIi
Im5hbWVzcGFjZSBKU0MgewotY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwotfSIiIgotCi0gICAg
ZGVmIGdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6Ci0gICAgICAgIGhl
YWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAg
ICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmgiKSwKLSAgICAgICAgICAgICksCi0KLSAgICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAg
ICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImJ1aWx0aW5zL0J1aWx0aW5VdGlscy5o
IiksCi0gICAgICAgICAgICApLAotCi0gICAgICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAg
ICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL0lkZW50aWZpZXIuaCIpLAotICAg
ICAgICAgICAgKSwKLQotICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAg
ICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9KU0Z1bmN0aW9uLmgiKSwKLSAgICAgICAgICAg
ICksCi0gICAgICAgIF0KLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCi0KLSAgICBkZWYgZ2VuZXJh
dGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIGxpbmVzID0gW10K
LSAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBvYmplY3Qub2JqZWN0X25hbWUpCi0g
ICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLmdlbmVyYXRlX2V4dGVybnNfZm9yX29iamVjdChvYmpl
Y3QpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiIpCi0gICAgICAgIGxpbmVzLmV4dGVuZChzZWxm
LmdlbmVyYXRlX21hY3Jvc19mb3Jfb2JqZWN0KG9iamVjdCkpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgiIikKLSAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2VuZXJhdGVfZGVmaW5lc19mb3Jfb2Jq
ZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYg
Z2VuZXJhdGVfZXh0ZXJuc19mb3Jfb2JqZWN0KHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIGxpbmVz
ID0gW10KLQotICAgICAgICBmb3IgZnVuY3Rpb24gaW4gb2JqZWN0LmZ1bmN0aW9uczoKLSAgICAg
ICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2NvZGVOYW1lJzogQnVp
bHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihmdW5jdGlvbikgKyAnQ29kZScs
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJleHRlcm4gY29u
c3QgY2hhciogc18lKGNvZGVOYW1lKXM7Ci1leHRlcm4gY29uc3QgaW50IHNfJShjb2RlTmFtZSlz
TGVuZ3RoOwotZXh0ZXJuIGNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzXyUoY29kZU5hbWUp
c0NvbnN0cnVjdEFiaWxpdHk7IiIiICUgZnVuY3Rpb25fYXJncykKLQotICAgICAgICByZXR1cm4g
bGluZXMKLQotICAgIGRlZiBnZW5lcmF0ZV9tYWNyb3NfZm9yX29iamVjdChzZWxmLCBvYmplY3Qp
OgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tYWNy
b19wcmVmaXgoKSwKLSAgICAgICAgICAgICdvYmplY3RNYWNybyc6IG9iamVjdC5vYmplY3RfbmFt
ZS5yZXBsYWNlKCcuJywgJ18nKS51cHBlcigpLAotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoIiNkZWZpbmUgJShtYWNyb1ByZWZpeClzX0ZPUkVB
Q0hfJShvYmplY3RNYWNybylzX0JVSUxUSU5fREFUQShtYWNybykgXFwiICUgYXJncykKLSAgICAg
ICAgZm9yIGZ1bmN0aW9uIGluIG9iamVjdC5mdW5jdGlvbnM6Ci0gICAgICAgICAgICBmdW5jdGlv
bl9hcmdzID0gewotICAgICAgICAgICAgICAgICdmdW5jTmFtZSc6IGZ1bmN0aW9uLmZ1bmN0aW9u
X25hbWUsCi0gICAgICAgICAgICAgICAgJ21hbmdsZWROYW1lJzogQnVpbHRpbnNHZW5lcmF0b3Iu
bWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihmdW5jdGlvbiksCi0gICAgICAgICAgICAgICAgJ3BhcmFt
Q291bnQnOiBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycyksCi0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIG1hY3JvKCUoZnVuY05hbWUpcywgJShtYW5nbGVkTmFt
ZSlzLCAlKHBhcmFtQ291bnQpZCkgXFwiICUgZnVuY3Rpb25fYXJncykKLSAgICAgICAgcmV0dXJu
IGxpbmVzCi0KLSAgICBkZWYgZ2VuZXJhdGVfZGVmaW5lc19mb3Jfb2JqZWN0KHNlbGYsIG9iamVj
dCk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIGZ1bmN0aW9uIGluIG9iamVjdC5m
dW5jdGlvbnM6Ci0gICAgICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgICAgICdtYWNyb1By
ZWZpeCc6IHNlbGYubWFjcm9fcHJlZml4KCksCi0gICAgICAgICAgICAgICAgJ29iamVjdE1hY3Jv
Jzogb2JqZWN0Lm9iamVjdF9uYW1lLnJlcGxhY2UoJy4nLCAnXycpLnVwcGVyKCksCi0gICAgICAg
ICAgICAgICAgJ2Z1bmN0aW9uTWFjcm8nOiBmdW5jdGlvbi5mdW5jdGlvbl9uYW1lLnVwcGVyKCks
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNkZWZpbmUgJShtYWNy
b1ByZWZpeClzX0JVSUxUSU5fJShvYmplY3RNYWNybylzXyUoZnVuY3Rpb25NYWNybylzIDEiICUg
YXJncykKLQotICAgICAgICByZXR1cm4gbGluZXMKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9u
X2Zvcl9jb2RlX3RhYmxlX21hY3JvKHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAg
ICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdtYWNyb19w
cmVmaXgnKSwKLSAgICAgICAgICAgICdvYmplY3RNYWNybyc6IHNlbGYub2JqZWN0Lm9iamVjdF9u
YW1lLnVwcGVyKCksCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNfRk9SRUFDSF8lKG9iamVjdE1hY3Jv
KXNfQlVJTFRJTl9DT0RFKG1hY3JvKSBcXCIgJSBhcmdzKQotICAgICAgICBmb3IgZnVuY3Rpb24g
aW4gc2VsZi5vYmplY3QuZnVuY3Rpb25zOgotICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsK
LSAgICAgICAgICAgICAgICAnZnVuY05hbWUnOiBmdW5jdGlvbi5mdW5jdGlvbl9uYW1lLAotICAg
ICAgICAgICAgICAgICdvdmVycmlkZGVuTmFtZSc6IGZ1bmN0aW9uLm92ZXJyaWRkZW5fbmFtZSwK
LSAgICAgICAgICAgICAgICAnY29kZU5hbWUnOiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFt
ZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKSArICdDb2RlJywKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCIgICAgbWFjcm8oJShjb2RlTmFtZSlzLCAlKGZ1bmNOYW1lKXMs
ICUob3ZlcnJpZGRlbk5hbWUpcywgc18lKGNvZGVOYW1lKXNMZW5ndGgpIFxcIiAlIGZ1bmN0aW9u
X2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJh
dGVfc2VjdGlvbl9mb3JfY29kZV9uYW1lX21hY3JvKHNlbGYpOgotICAgICAgICBhcmdzID0gewot
ICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tYWNyb19wcmVmaXgoKSwKLSAgICAgICAg
ICAgICdvYmplY3RNYWNybyc6IHNlbGYub2JqZWN0Lm9iamVjdF9uYW1lLnVwcGVyKCksCi0gICAg
ICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmlu
ZSAlKG1hY3JvUHJlZml4KXNfRk9SRUFDSF8lKG9iamVjdE1hY3JvKXNfQlVJTFRJTl9GVU5DVElP
Tl9OQU1FKG1hY3JvKSBcXCIgJSBhcmdzKQotICAgICAgICB1bmlxdWVfbmFtZXMgPSBsaXN0KHNl
dChbZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSBmb3IgZnVuY3Rpb24gaW4gc2VsZi5vYmplY3QuZnVu
Y3Rpb25zXSkpCi0gICAgICAgIHVuaXF1ZV9uYW1lcy5zb3J0KCkKLSAgICAgICAgZm9yIGZ1bmN0
aW9uX25hbWUgaW4gdW5pcXVlX25hbWVzOgotICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsK
LSAgICAgICAgICAgICAgICAnZnVuY05hbWUnOiBmdW5jdGlvbl9uYW1lLAotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBtYWNybyglKGZ1bmNOYW1lKXMpIFxc
IiAlIGZ1bmN0aW9uX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9i
dWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBz
dm46ZXhlY3V0YWJsZQojIyAtMSArMCwwICMjCi0qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3Nl
cGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9p
bXBsZW1lbnRhdGlvbi5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDExMiArMCwwIEBACi0jIS91c3Iv
YmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCByZQotaW1wb3J0IHN0
cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gYnVpbHRpbnNfZ2VuZXJh
dG9yIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvciwgV0tfbGNmaXJzdAotZnJvbSBidWlsdGluc19t
b2RlbCBpbXBvcnQgRnJhbWV3b3JrLCBGcmFtZXdvcmtzCi1mcm9tIGJ1aWx0aW5zX3RlbXBsYXRl
cyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJ1aWx0aW5zU2VwYXJhdGVJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsLCBvYmplY3QpOgotICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCBtb2RlbCkKLSAgICAgICAgc2VsZi5vYmplY3QgPSBvYmplY3QKLQotICAgIGRl
ZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXNCdWlsdGlucy5jcHAi
ICUgQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JPYmplY3Qoc2VsZi5vYmplY3QpCi0K
LSAgICBkZWYgbWFjcm9fcHJlZml4KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgp
LmZyYW1ld29yay5zZXR0aW5nKCdtYWNyb19wcmVmaXgnKQotCi0gICAgZGVmIGdlbmVyYXRlX291
dHB1dChzZWxmKToKLSAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICduYW1lc3BhY2UnOiBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpLAotICAgICAgICAgICAg
J21hY3JvUHJlZml4Jzogc2VsZi5tYWNyb19wcmVmaXgoKSwKLSAgICAgICAgICAgICdvYmplY3RN
YWNybyc6IHNlbGYub2JqZWN0Lm9iamVjdF9uYW1lLnVwcGVyKCksCi0gICAgICAgICAgICAnb2Jq
ZWN0TmFtZUxDJzogV0tfbGNmaXJzdChzZWxmLm9iamVjdC5vYmplY3RfbmFtZSksCi0gICAgICAg
IH0KLQotICAgICAgICBjb25kaXRpb25hbF9ndWFyZCA9IHNlbGYub2JqZWN0LmFubm90YXRpb25z
LmdldCgnY29uZGl0aW9uYWwnKQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJn
cykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3ByaW1hcnlfaGVhZGVy
X2luY2x1ZGVzKCkpCi0gICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgot
ICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQp
Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJf
aW5jbHVkZXMoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5O
YW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBz
ZWxmLm9iamVjdC5mdW5jdGlvbnM6Ci0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9lbWJlZGRlZF9jb2RlX3N0cmluZ19zZWN0aW9uX2Zvcl9mdW5jdGlvbihmdW5jdGlv
bikpCi0gICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5KYXZh
U2NyaXB0Q29yZToKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuU2VwYXJhdGVKU0NJbXBsZW1lbnRhdGlvblN0YXRpY01hY3Jvcykuc3Vic3RpdHV0ZShhcmdz
KSkKLSAgICAgICAgZWxpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2Vi
Q29yZToKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuU2Vw
YXJhdGVXZWJDb3JlSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3MpLnN1YnN0aXR1dGUoYXJncykp
Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90
dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBu
b3QgTm9uZToKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgiI2VuZGlmIC8vICVzXG4iICUg
Y29uZGl0aW9uYWxfZ3VhcmQpCi0KLSAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25z
KQotCi0gICAgZGVmIGdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6Ci0g
ICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3Jl
Il0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJidWlsdGlucy9CdWlsdGlu
RXhlY3V0YWJsZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIkphdmFTY3Jp
cHRDb3JlIiwgIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwg
ImhlYXAvSGVhcElubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRD
b3JlIiwgInJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAg
ICAgICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAi
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAg
ICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50
aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAo
WyJKYXZhU2NyaXB0Q29yZSIsICJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2Ny
aXB0Q29yZSIsICJydW50aW1lL1ZNLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAo
WyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgImJpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRD
b3JlIiwgInJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAg
ICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAg
ICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSW50cmluc2ljLmgiKSwKLSAgICAgICAgICAg
ICksCi0gICAgICAgIF0KLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hl
YWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQkocmV2aXNpb24gMjM0NTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTkgKzAsMCBAQAot
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQot
ZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yLCBXS19sY2Zp
cnN0LCBXS191Y2ZpcnN0Ci1mcm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQotCi0KLWNsYXNzIEJ1aWx0aW5zV3JhcHBlckhlYWRlckdlbmVyYXRvcihCdWls
dGluc0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKLSAgICAgICAg
QnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0KLSAgICBkZWYgb3V0cHV0
X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVzSlNCdWlsdGlucy5oIiAlIHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykKLQotICAgIGRlZiBnZW5lcmF0
ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbmFtZXNwYWNl
Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKLSAgICAgICAg
fQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
Z2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkKS5zdWJzdGl0
dXRlKGFyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRh
cnlfaGVhZGVyX2luY2x1ZGVzKCkpCi0KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdCgpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vic3Rp
dHV0ZShhcmdzKSkKLQotICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAg
ICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKLSAgICAgICAg
aGVhZGVyX2luY2x1ZGVzID0gWwotICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAg
ICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9WTS5oIiksCi0gICAgICAgICAgICAp
LAotICAgICAgICBdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6
Ci0gICAgICAgICAgICBoZWFkZXJfaW5jbHVkZXMuYXBwZW5kKChbIldlYkNvcmUiXSwgKCJXZWJD
b3JlIiwgb2JqZWN0Lm9iamVjdF9uYW1lICsgIkJ1aWx0aW5zLmgiKSkpCi0KLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJf
aW5jbHVkZXMpKQotCi0gICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdChzZWxmKToK
LSAgICAgICAgbGluZXMgPSBbImNsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7IiwKLSAgICAgICAg
ICAgICAgICAgInB1YmxpYzoiXQotCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2NvbnN0cnVjdG9yKCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2FjY2Vz
c29ycygpKQotICAgICAgICBsaW5lcy5hcHBlbmQoInByaXZhdGU6IikKLSAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWVtYmVycygpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIn07
IikKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBhY2Nlc3Nvcl9u
YW1lKHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIHJldHVybiBXS19sY2ZpcnN0KG9iamVjdC5vYmpl
Y3RfbmFtZSkgKyAiQnVpbHRpbnMiCi0KLSAgICBkZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0
KToKLSAgICAgICAgcmV0dXJuICJtXyIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KQotCi0g
ICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIHJldHVybiBXS191Y2Zp
cnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbnNXcmFwcGVyIgotCi0gICAgZGVmIGdl
bmVyYXRlX2NvbnN0cnVjdG9yKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsiICAgIGV4cGxpY2l0
IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkiLAotICAgICAgICAgICAgICAgICAiICAg
ICAgICA6IG1fdm0odm0pIl0KLSAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2Jq
ZWN0czoKLSAgICAgICAgICAgIG1lbWJlcl9pbml0ID0gIiAgICAgICAgLCAlcygmbV92bSkiICUg
c2VsZi5tZW1iZXJfbmFtZShvYmplY3QpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRp
bnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRp
dGlvbmFsJyksIG1lbWJlcl9pbml0KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgeyIpCi0g
ICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6Ci0gICAgICAgICAgICBp
ZiBub3QgJ2ludGVybmFsJyBpbiBvYmplY3QuYW5ub3RhdGlvbnM6Ci0gICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgIGludGVybmFsX2V4cG9ydF9uYW1lcyA9ICIgICAgICAgICVz
LmV4cG9ydE5hbWVzKCk7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5u
b3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBpbnRlcm5hbF9leHBvcnRfbmFtZXMpKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoIiAgICB9XG4iKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQotCi0gICAgZGVmIGdlbmVyYXRlX2FjY2Vzc29ycyhzZWxmKToKLSAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgotICAgICAg
ICAgICAgYWNjZXNzb3IgPSAiICAgICVzJiAlcygpIHsgcmV0dXJuICVzOyB9IiAlIChzZWxmLm1l
bWJlcl90eXBlKG9iamVjdCksIHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpLCBzZWxmLm1lbWJl
cl9uYW1lKG9iamVjdCkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0
b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyks
IGFjY2Vzc29yKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIiKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQotCi0gICAgZGVmIGdlbmVyYXRlX21lbWJlcnMoc2VsZik6Ci0gICAgICAg
IGxpbmVzID0gWyIgICAgSlNDOjpWTSYgbV92bTsiXQotICAgICAgICBmb3Igb2JqZWN0IGluIHNl
bGYubW9kZWwoKS5vYmplY3RzOgotICAgICAgICAgICAgbWVtYmVyID0gIiAgICAlcyAlczsiICUg
KHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSwgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpKQotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChv
YmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBtZW1iZXIpKQotICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFk
ZXIucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMSArMCwwICMjCi0q
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50
YXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQkocmV2aXNp
b24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQkobm9uZXhpc3RlbnQpCkBA
IC0xLDYxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCi0KLWZyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dl
bmVyYXRvcgotZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKLQotCi1jbGFzcyBCdWlsdGluc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihCdWls
dGluc0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKLSAgICAgICAg
QnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0KLSAgICBkZWYgb3V0cHV0
X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVzSlNCdWlsdGlucy5jcHAiICUgc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKQotCi0gICAgZGVmIGdlbmVy
YXRlX291dHB1dChzZWxmKToKLSAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICduYW1lc3Bh
Y2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpLAotICAgICAg
ICB9Ci0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2Vs
Zi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKLQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3QoKSkKLQotICAg
ICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2Vj
dGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgotICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbXQotICAg
ICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgotICAgICAgICAgICAgaGVh
ZGVyX2luY2x1ZGVzLmFwcGVuZCgoWyJXZWJDb3JlIl0sICgiV2ViQ29yZSIsIG9iamVjdC5vYmpl
Y3RfbmFtZSArICJCdWlsdGlucy5jcHAiKSkpCi0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihz
ZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMv
YnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICswLDAgIyMKLSoKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRvci5weQkocmV2aXNpb24gMjM0
NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdG9yLnB5CShub25leGlzdGVudCkKQEAgLTEsMTgxICswLDAgQEAKLSMhL3Vzci9iaW4v
ZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgcmUK
LWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotaW1wb3J0IGpzb24KLQotZnJvbSBidWlsdGlu
c19tb2RlbCBpbXBvcnQgQnVpbHRpbkZ1bmN0aW9uLCBCdWlsdGluT2JqZWN0Ci1mcm9tIGJ1aWx0
aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0jIFRoZXNlIG1hdGNo
IFdLX2xjZmlyc3QgYW5kIFdLX3VjZmlyc3QgZGVmaW5lZCBpbiBDb2RlR2VuZXJhdG9yLnBtLgot
ZGVmIFdLX2xjZmlyc3Qoc3RyKToKLSAgICBzdHIgPSBzdHJbOjFdLmxvd2VyKCkgKyBzdHJbMTpd
Ci0gICAgc3RyID0gc3RyLnJlcGxhY2UoJ2RPTScsICdkb20nKQotICAgIHN0ciA9IHN0ci5yZXBs
YWNlKCd1UkwnLCAndXJsJykKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgnalMnLCAnanMnKQotICAg
IHN0ciA9IHN0ci5yZXBsYWNlKCd4TUwnLCAneG1sJykKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgn
eFNMVCcsICd4c2x0JykKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgnY1NTJywgJ2NzcycpCi0gICAg
c3RyID0gc3RyLnJlcGxhY2UoJ3JUQycsICdydGMnKQotICAgIHJldHVybiBzdHIKLQotZGVmIFdL
X3VjZmlyc3Qoc3RyKToKLSAgICBzdHIgPSBzdHJbOjFdLnVwcGVyKCkgKyBzdHJbMTpdCi0gICAg
c3RyID0gc3RyLnJlcGxhY2UoJ1htbCcsICdYTUwnKQotICAgIHN0ciA9IHN0ci5yZXBsYWNlKCdT
dmcnLCAnU1ZHJykKLSAgICByZXR1cm4gc3RyCi0KLWNsYXNzIEJ1aWx0aW5zR2VuZXJhdG9yOgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6Ci0gICAgICAgIHNlbGYuX21vZGVsID0gbW9k
ZWwKLQotICAgIGRlZiBtb2RlbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCi0K
LSAgICAjIFRoZXNlIG1ldGhvZHMgYXJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLQotICAg
IGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBvdXRw
dXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotCi0gICAgIyBTaGFyZWQgY29kZSBn
ZW5lcmF0aW9uIG1ldGhvZHMuCi0gICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6Ci0gICAg
ICAgIHJhd19saWNlbnNlID0gVGVtcGxhdGUoVGVtcGxhdGVzLkxpY2Vuc2VUZXh0KS5zdWJzdGl0
dXRlKE5vbmUpCi0gICAgICAgIGNvcHlyaWdodHMgPSBzZWxmLl9tb2RlbC5jb3B5cmlnaHRzKCkK
LSAgICAgICAgY29weXJpZ2h0cy5zb3J0KCkKLQotICAgICAgICBsaWNlbnNlX2Jsb2NrID0gW10K
LSAgICAgICAgbGljZW5zZV9ibG9jay5hcHBlbmQoIi8qIikKLSAgICAgICAgZm9yIGNvcHlyaWdo
dCBpbiBjb3B5cmlnaHRzOgotICAgICAgICAgICAgbGljZW5zZV9ibG9jay5hcHBlbmQoIiAqIENv
cHlyaWdodCAoYykgJXMiICUgY29weXJpZ2h0KQotICAgICAgICBpZiBsZW4oY29weXJpZ2h0cykg
PiAwOgotICAgICAgICAgICAgbGljZW5zZV9ibG9jay5hcHBlbmQoIiAqICIpCi0KLSAgICAgICAg
Zm9yIGxpbmUgaW4gcmF3X2xpY2Vuc2Uuc3BsaXQoJ1xuJyk6Ci0gICAgICAgICAgICBsaWNlbnNl
X2Jsb2NrLmFwcGVuZCgiICogIiArIGxpbmUpCi0KLSAgICAgICAgbGljZW5zZV9ibG9jay5hcHBl
bmQoIiAqLyIpCi0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaWNlbnNlX2Jsb2NrKQotCi0g
ICAgZGVmIGdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhzZWxmLCBlbnRyaWVzKToKLSAg
ICAgICAgaW5jbHVkZXMgPSBzZXQoKQotICAgICAgICBmb3IgZW50cnkgaW4gZW50cmllczoKLSAg
ICAgICAgICAgIChhbGxvd2VkX2ZyYW1ld29ya19uYW1lcywgZGF0YSkgPSBlbnRyeQotICAgICAg
ICAgICAgKGZyYW1ld29ya19uYW1lLCBoZWFkZXJfcGF0aCkgPSBkYXRhCi0KLSAgICAgICAgICAg
IGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSBub3QgaW4gYWxsb3dlZF9mcmFtZXdvcmtf
bmFtZXM6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsubmFtZSAhPSBmcmFtZXdvcmtfbmFtZToKLSAgICAgICAgICAgICAgICBp
bmNsdWRlcy5hZGQoIiNpbmNsdWRlIDwlcy8lcz4iICUgKGZyYW1ld29ya19uYW1lLCBvcy5wYXRo
LmJhc2VuYW1lKGhlYWRlcl9wYXRoKSkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIGluY2x1ZGVzLmFkZCgiI2luY2x1ZGUgXCIlc1wiIiAlIG9zLnBhdGguYmFzZW5hbWUoaGVh
ZGVyX3BhdGgpKQotCi0gICAgICAgIHJldHVybiBzb3J0ZWQobGlzdChpbmNsdWRlcykpCi0KLSAg
ICBkZWYgZ2VuZXJhdGVfcHJpbWFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6Ci0gICAgICAgIG5h
bWUsIF8gPSBvcy5wYXRoLnNwbGl0ZXh0KHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4oWwotICAgICAgICAgICAgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIs
Ci0gICAgICAgICAgICAiI2luY2x1ZGUgXCIlcy5oXCIiICUgbmFtZSwKLSAgICAgICAgXSkKLQot
ICAgIGRlZiBnZW5lcmF0ZV9lbWJlZGRlZF9jb2RlX3N0cmluZ19zZWN0aW9uX2Zvcl9mdW5jdGlv
bihzZWxmLCBmdW5jdGlvbik6Ci0gICAgICAgIHRleHQgPSBmdW5jdGlvbi5mdW5jdGlvbl9zb3Vy
Y2UKLSAgICAgICAgIyBXcmFwIGl0IGluIHBhcmVucyB0byBhdm9pZCBhZGRpbmcgdG8gZ2xvYmFs
IHNjb3BlLgotICAgICAgICB0ZXh0ID0gIihmdW5jdGlvbiAiICsgdGV4dFt0ZXh0LmluZGV4KCIo
Iik6XSArICIpIgotICAgICAgICBlbWJlZGRlZFNvdXJjZUxlbmd0aCA9IGxlbih0ZXh0KSArIDEg
ICMgRm9yIGV4dHJhIFxuLgotICAgICAgICAjIExhenkgd2F5IHRvIGVzY2FwZSBxdW90ZXMsIEkg
dGhpbms/Ci0gICAgICAgIHRleHRMaW5lcyA9IGpzb24uZHVtcHModGV4dClbMTotMV0uc3BsaXQo
IlxcbiIpCi0gICAgICAgICMgVGhpcyBsb29rcyBzY2FyeSBiZWNhdXNlIHdlIG5lZWQgdGhlIEpT
IHNvdXJjZSBpdHNlbGYgdG8gaGF2ZSBuZXdsaW5lcy4KLSAgICAgICAgZW1iZWRkZWRTb3VyY2Ug
PSAnXG4nLmpvaW4oWycgICAgIiVzXFxuIiBcXCcgJSBsaW5lIGZvciBsaW5lIGluIHRleHRMaW5l
c10pCi0KLSAgICAgICAgY29uc3RydWN0QWJpbGl0eSA9ICJDYW5ub3RDb25zdHJ1Y3QiCi0gICAg
ICAgIGlmIGZ1bmN0aW9uLmlzX2NvbnN0cnVjdG9yOgotICAgICAgICAgICAgY29uc3RydWN0QWJp
bGl0eSA9ICJDYW5Db25zdHJ1Y3QiCi0KLSAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICdj
b2RlTmFtZSc6IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yRnVuY3Rpb24oZnVuY3Rp
b24pICsgJ0NvZGUnLAotICAgICAgICAgICAgJ2VtYmVkZGVkU291cmNlJzogZW1iZWRkZWRTb3Vy
Y2UsCi0gICAgICAgICAgICAnZW1iZWRkZWRTb3VyY2VMZW5ndGgnOiBlbWJlZGRlZFNvdXJjZUxl
bmd0aCwKLSAgICAgICAgICAgICdjYW5Db25zdHJ1Y3QnOiBjb25zdHJ1Y3RBYmlsaXR5LAotICAg
ICAgICAgICAgJ2ludHJpbnNpYyc6IGZ1bmN0aW9uLmludHJpbnNpYwotICAgICAgICB9Ci0KLSAg
ICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoImNvbnN0IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eSBzXyUoY29kZU5hbWUpc0NvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OiUoY2FuQ29uc3RydWN0KXM7IiAlIGFyZ3MpOwotICAgICAgICBsaW5lcy5hcHBl
bmQoImNvbnN0IGludCBzXyUoY29kZU5hbWUpc0xlbmd0aCA9ICUoZW1iZWRkZWRTb3VyY2VMZW5n
dGgpZDsiICUgYXJncyk7Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgic3RhdGljIGNvbnN0IEpTQzo6
SW50cmluc2ljIHNfJShjb2RlTmFtZSlzSW50cmluc2ljID0gSlNDOjolKGludHJpbnNpYylzOyIg
JSBhcmdzKTsKLSAgICAgICAgbGluZXMuYXBwZW5kKCJjb25zdCBjaGFyKiBzXyUoY29kZU5hbWUp
cyA9XG4lKGVtYmVkZGVkU291cmNlKXNcbjsiICUgYXJncyk7Ci0gICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCi0KLSAgICAjIEhlbHBlciBtZXRob2RzLgotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiB3cmFwX3dpdGhfZ3VhcmQoZ3VhcmQsIHRleHQpOgotICAgICAgICBpZiBub3Qg
Z3VhcmQ6Ci0gICAgICAgICAgICByZXR1cm4gdGV4dAotICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KFsKLSAgICAgICAgICAgICcjaWYgJXMnICUgZ3VhcmQsCi0gICAgICAgICAgICB0ZXh0LAotICAg
ICAgICAgICAgJyNlbmRpZiAvLyAlcycgJSBndWFyZCwKLSAgICAgICAgXSkKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgbWFuZ2xlZE5hbWVGb3JPYmplY3Qob2JqZWN0KToKLSAgICAgICAg
aWYgbm90IGlzaW5zdGFuY2Uob2JqZWN0LCBCdWlsdGluT2JqZWN0KToKLSAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gbWFuZ2xlZE5hbWVGb3JP
YmplY3QoKSIpCi0KLSAgICAgICAgZGVmIHRvQ2FtZWwobWF0Y2gpOgotICAgICAgICAgICAgc3Ry
ID0gbWF0Y2guZ3JvdXAoMCkKLSAgICAgICAgICAgIHJldHVybiBzdHJbMV0udXBwZXIoKQotICAg
ICAgICByZXR1cm4gcmUuc3ViKHInXC5bYS16XScsIHRvQ2FtZWwsIG9iamVjdC5vYmplY3RfbmFt
ZSwgZmxhZ3M9cmUuSUdOT1JFQ0FTRSkKLQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBt
YW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2UoZnVuY3Rpb24sIEJ1aWx0aW5GdW5jdGlvbik6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIG1hbmdsZWROYW1lRm9yRnVuY3Rpb24oKSIp
Ci0KLSAgICAgICAgZnVuY3Rpb25fbmFtZSA9IFdLX3VjZmlyc3QoZnVuY3Rpb24uZnVuY3Rpb25f
bmFtZSkKLQotICAgICAgICBkZWYgdG9DYW1lbChtYXRjaCk6Ci0gICAgICAgICAgICBzdHIgPSBt
YXRjaC5ncm91cCgwKQotICAgICAgICAgICAgcmV0dXJuIHN0clsxXS51cHBlcigpCi0gICAgICAg
IGZ1bmN0aW9uX25hbWUgPSByZS5zdWIocidcLlthLXpdJywgdG9DYW1lbCwgZnVuY3Rpb25fbmFt
ZSwgZmxhZ3M9cmUuSUdOT1JFQ0FTRSkKLSAgICAgICAgaWYgZnVuY3Rpb24uaXNfY29uc3RydWN0
b3I6Ci0gICAgICAgICAgICBmdW5jdGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZSArICJDb25zdHJ1
Y3RvciIKLQotICAgICAgICBvYmplY3RfbmFtZSA9IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWRO
YW1lRm9yT2JqZWN0KGZ1bmN0aW9uLm9iamVjdCkKLSAgICAgICAgcmV0dXJuIFdLX2xjZmlyc3Qo
b2JqZWN0X25hbWUgKyBmdW5jdGlvbl9uYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkJKHJldmlz
aW9uIDIzNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1
aWx0aW5zX21vZGVsLnB5CShub25leGlzdGVudCkKQEAgLTEsMzA2ICswLDAgQEAKLSMhL3Vzci9i
aW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0j
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgb3MKLQotZnJvbSBidWlsdGlu
c190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRl
cwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotX0ZSQU1FV09SS19DT05G
SUdfTUFQID0gewotICAgICJKYXZhU2NyaXB0Q29yZSI6IHsKLSAgICAgICAgIm1hY3JvX3ByZWZp
eCI6ICJKU0MiLAotICAgICAgICAibmFtZXNwYWNlIjogIkpTQyIsCi0gICAgfSwKLSAgICAiV2Vi
Q29yZSI6IHsKLSAgICAgICAgIm1hY3JvX3ByZWZpeCI6ICJXRUJDT1JFIiwKLSAgICAgICAgIm5h
bWVzcGFjZSI6ICJXZWJDb3JlIiwKLSAgICB9LAotfQotCi1mdW5jdGlvbkhlYWRSZWdFeHAgPSBy
ZS5jb21waWxlKHIiKD86QFtcd3w9XFtcXSBcIlwuXStccypcbikqZnVuY3Rpb25ccytcdytccypc
KC4qP1wpIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQotZnVuY3Rpb25HbG9iYWxQcml2YXRl
UmVnRXhwID0gcmUuY29tcGlsZShyIi4qXkBnbG9iYWxQcml2YXRlIiwgcmUuTVVMVElMSU5FIHwg
cmUuRE9UQUxMKQotZnVuY3Rpb25JbnRyaW5zaWNSZWdFeHAgPSByZS5jb21waWxlKHIiLipeQGlu
dHJpbnNpYz0oXHcrKSIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLWZ1bmN0aW9uSXNDb25z
dHJ1Y3RvclJlZ0V4cCA9IHJlLmNvbXBpbGUociIuKl5AY29uc3RydWN0b3IiLCByZS5NVUxUSUxJ
TkUgfCByZS5ET1RBTEwpCi1mdW5jdGlvbklzR2V0dGVyUmVnRXhwID0gcmUuY29tcGlsZShyIi4q
XkBnZXR0ZXIiLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1mdW5jdGlvbk5hbWVSZWdFeHAg
PSByZS5jb21waWxlKHIiZnVuY3Rpb25ccysoXHcrKVxzKlwoIiwgcmUuTVVMVElMSU5FIHwgcmUu
RE9UQUxMKQotZnVuY3Rpb25PdmVycmlkZGVuTmFtZVJlZ0V4cCA9IHJlLmNvbXBpbGUociIuKl5A
b3ZlcnJpZGRlbk5hbWU9KFwiLitcIikkIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQotZnVu
Y3Rpb25QYXJhbWV0ZXJGaW5kZXIgPSByZS5jb21waWxlKHIiXmZ1bmN0aW9uXHMrKD86XHcrKVxz
KlwoKCg/OlxzKlx3Kyk/XHMqKD86XHMqLFxzKlx3KykqKT9ccypcKSIsIHJlLk1VTFRJTElORSB8
IHJlLkRPVEFMTCkKLQotbXVsdGlsaW5lQ29tbWVudFJlZ0V4cCA9IHJlLmNvbXBpbGUociJcL1wq
Lio/XCpcLyIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLXNpbmdsZUxpbmVDb21tZW50UmVn
RXhwID0gcmUuY29tcGlsZShyIlwvXC8uKj9cbiIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkK
LWtleVZhbHVlQW5ub3RhdGlvbkNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIiXlwvXC8gQChc
dyspPShbXj1dKz8pXG4iLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1mbGFnQW5ub3RhdGlv
bkNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIiXlwvXC8gQChcdyspW149XSo/XG4iLCByZS5N
VUxUSUxJTkUgfCByZS5ET1RBTEwpCi1saW5lV2l0aE9ubHlTaW5nbGVMaW5lQ29tbWVudFJlZ0V4
cCA9IHJlLmNvbXBpbGUociJeXHMqXC9cL1xuIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQot
bGluZVdpdGhUcmFpbGluZ1NpbmdsZUxpbmVDb21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIlxz
KlwvXC9cbiIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLWxlYWRpbmdXaGl0ZXNwYWNlUmVn
RXhwID0gcmUuY29tcGlsZShyIl4gKyIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLW11bHRp
cGxlRW1wdHlMaW5lc1JlZ0V4cCA9IHJlLmNvbXBpbGUociJcbnsyLH0iLCByZS5NVUxUSUxJTkUg
fCByZS5ET1RBTEwpCi0KLWNsYXNzIFBhcnNlRXhjZXB0aW9uKEV4Y2VwdGlvbik6Ci0gICAgcGFz
cwotCi0KLWNsYXNzIEZyYW1ld29yazoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0g
ICAgICAgIHNlbGYuX3NldHRpbmdzID0gX0ZSQU1FV09SS19DT05GSUdfTUFQW25hbWVdCi0gICAg
ICAgIHNlbGYubmFtZSA9IG5hbWUKLQotICAgIGRlZiBzZXR0aW5nKHNlbGYsIGtleSwgZGVmYXVs
dD0nJyk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9zZXR0aW5ncy5nZXQoa2V5LCBkZWZhdWx0KQot
Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBmcm9tU3RyaW5nKGZyYW1ld29ya1N0cmluZyk6
Ci0gICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiSmF2YVNjcmlwdENvcmUiOgotICAgICAg
ICAgICAgcmV0dXJuIEZyYW1ld29ya3MuSmF2YVNjcmlwdENvcmUKLQotICAgICAgICBpZiBmcmFt
ZXdvcmtTdHJpbmcgPT0gIldlYkNvcmUiOgotICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3Mu
V2ViQ29yZQotCi0gICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIGZyYW1ld29y
azogJXMiICUgZnJhbWV3b3JrU3RyaW5nKQotCi0KLWNsYXNzIEZyYW1ld29ya3M6Ci0gICAgSmF2
YVNjcmlwdENvcmUgPSBGcmFtZXdvcmsoIkphdmFTY3JpcHRDb3JlIikKLSAgICBXZWJDb3JlID0g
RnJhbWV3b3JrKCJXZWJDb3JlIikKLQotCi1jbGFzcyBCdWlsdGluT2JqZWN0OgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvYmplY3RfbmFtZSwgYW5ub3RhdGlvbnMsIGZ1bmN0aW9ucyk6Ci0gICAg
ICAgIHNlbGYub2JqZWN0X25hbWUgPSBvYmplY3RfbmFtZQotICAgICAgICBzZWxmLmFubm90YXRp
b25zID0gYW5ub3RhdGlvbnMKLSAgICAgICAgc2VsZi5mdW5jdGlvbnMgPSBmdW5jdGlvbnMKLSAg
ICAgICAgc2VsZi5jb2xsZWN0aW9uID0gTm9uZSAgIyBTZXQgYnkgdGhlIG93bmluZyBCdWlsdGlu
c0NvbGxlY3Rpb24KLQotICAgICAgICBmb3IgZnVuY3Rpb24gaW4gc2VsZi5mdW5jdGlvbnM6Ci0g
ICAgICAgICAgICBmdW5jdGlvbi5vYmplY3QgPSBzZWxmCi0KLQotY2xhc3MgQnVpbHRpbkZ1bmN0
aW9uOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jdGlvbl9uYW1lLCBmdW5jdGlvbl9zb3Vy
Y2UsIHBhcmFtZXRlcnMsIGlzX2NvbnN0cnVjdG9yLCBpc19nbG9iYWxfcHJpdmF0ZSwgaW50cmlu
c2ljLCBvdmVycmlkZGVuX25hbWUpOgotICAgICAgICBzZWxmLmZ1bmN0aW9uX25hbWUgPSBmdW5j
dGlvbl9uYW1lCi0gICAgICAgIHNlbGYuZnVuY3Rpb25fc291cmNlID0gZnVuY3Rpb25fc291cmNl
Ci0gICAgICAgIHNlbGYucGFyYW1ldGVycyA9IHBhcmFtZXRlcnMKLSAgICAgICAgc2VsZi5pc19j
b25zdHJ1Y3RvciA9IGlzX2NvbnN0cnVjdG9yCi0gICAgICAgIHNlbGYuaXNfZ2xvYmFsX3ByaXZh
dGUgPSBpc19nbG9iYWxfcHJpdmF0ZQotICAgICAgICBzZWxmLmludHJpbnNpYyA9IGludHJpbnNp
YwotICAgICAgICBzZWxmLm92ZXJyaWRkZW5fbmFtZSA9IG92ZXJyaWRkZW5fbmFtZQotICAgICAg
ICBzZWxmLm9iamVjdCA9IE5vbmUgICMgU2V0IGJ5IHRoZSBvd25pbmcgQnVpbHRpbk9iamVjdAot
Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBmcm9tU3RyaW5nKGZ1bmN0aW9uX3N0cmluZyk6
Ci0gICAgICAgIGZ1bmN0aW9uX3NvdXJjZSA9IG11bHRpbGluZUNvbW1lbnRSZWdFeHAuc3ViKCIi
LCBmdW5jdGlvbl9zdHJpbmcpCi0KLSAgICAgICAgaW50cmluc2ljID0gIk5vSW50cmluc2ljIgot
ICAgICAgICBpbnRyaW5zaWNNYXRjaCA9IGZ1bmN0aW9uSW50cmluc2ljUmVnRXhwLnNlYXJjaChm
dW5jdGlvbl9zb3VyY2UpCi0gICAgICAgIGlmIGludHJpbnNpY01hdGNoOgotICAgICAgICAgICAg
aW50cmluc2ljID0gaW50cmluc2ljTWF0Y2guZ3JvdXAoMSkKLSAgICAgICAgICAgIGZ1bmN0aW9u
X3NvdXJjZSA9IGZ1bmN0aW9uSW50cmluc2ljUmVnRXhwLnN1YigiIiwgZnVuY3Rpb25fc291cmNl
KQotCi0gICAgICAgIG92ZXJyaWRkZW5fbmFtZSA9IE5vbmUKLSAgICAgICAgb3ZlcnJpZGRlbk5h
bWVNYXRjaCA9IGZ1bmN0aW9uT3ZlcnJpZGRlbk5hbWVSZWdFeHAuc2VhcmNoKGZ1bmN0aW9uX3Nv
dXJjZSkKLSAgICAgICAgaWYgb3ZlcnJpZGRlbk5hbWVNYXRjaDoKLSAgICAgICAgICAgIG92ZXJy
aWRkZW5fbmFtZSA9IG92ZXJyaWRkZW5OYW1lTWF0Y2guZ3JvdXAoMSkKLSAgICAgICAgICAgIGZ1
bmN0aW9uX3NvdXJjZSA9IGZ1bmN0aW9uT3ZlcnJpZGRlbk5hbWVSZWdFeHAuc3ViKCIiLCBmdW5j
dGlvbl9zb3VyY2UpCi0KLSAgICAgICAgaWYgbm90IG9zLmdldGVudigiQ09ORklHVVJBVElPTiIs
ICJEZWJ1ZyIpLnN0YXJ0c3dpdGgoIkRlYnVnIik6Ci0gICAgICAgICAgICBmdW5jdGlvbl9zb3Vy
Y2UgPSBsaW5lV2l0aE9ubHlTaW5nbGVMaW5lQ29tbWVudFJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9u
X3NvdXJjZSkKLSAgICAgICAgICAgIGZ1bmN0aW9uX3NvdXJjZSA9IGxpbmVXaXRoVHJhaWxpbmdT
aW5nbGVMaW5lQ29tbWVudFJlZ0V4cC5zdWIoIlxuIiwgZnVuY3Rpb25fc291cmNlKQotICAgICAg
ICAgICAgZnVuY3Rpb25fc291cmNlID0gbGVhZGluZ1doaXRlc3BhY2VSZWdFeHAuc3ViKCIiLCBm
dW5jdGlvbl9zb3VyY2UpCi0gICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2UgPSBtdWx0aXBsZUVt
cHR5TGluZXNSZWdFeHAuc3ViKCJcbiIsIGZ1bmN0aW9uX3NvdXJjZSkKLQotICAgICAgICBmdW5j
dGlvbl9uYW1lID0gZnVuY3Rpb25OYW1lUmVnRXhwLmZpbmRhbGwoZnVuY3Rpb25fc291cmNlKVsw
XQotICAgICAgICBpc19jb25zdHJ1Y3RvciA9IGZ1bmN0aW9uSXNDb25zdHJ1Y3RvclJlZ0V4cC5t
YXRjaChmdW5jdGlvbl9zb3VyY2UpICE9IE5vbmUKLSAgICAgICAgaXNfZ2V0dGVyID0gZnVuY3Rp
b25Jc0dldHRlclJlZ0V4cC5tYXRjaChmdW5jdGlvbl9zb3VyY2UpICE9IE5vbmUKLSAgICAgICAg
aXNfZ2xvYmFsX3ByaXZhdGUgPSBmdW5jdGlvbkdsb2JhbFByaXZhdGVSZWdFeHAubWF0Y2goZnVu
Y3Rpb25fc291cmNlKSAhPSBOb25lCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbcy5zdHJpcCgpIGZv
ciBzIGluIGZ1bmN0aW9uUGFyYW1ldGVyRmluZGVyLmZpbmRhbGwoZnVuY3Rpb25fc291cmNlKVsw
XS5zcGxpdCgnLCcpXQotICAgICAgICBpZiBsZW4ocGFyYW1ldGVyc1swXSkgPT0gMDoKLSAgICAg
ICAgICAgIHBhcmFtZXRlcnMgPSBbXQotCi0gICAgICAgIGlmIGlzX2dldHRlciBhbmQgbm90IG92
ZXJyaWRkZW5fbmFtZToKLSAgICAgICAgICAgIG92ZXJyaWRkZW5fbmFtZSA9ICJcImdldCAlc1wi
IiAlIChmdW5jdGlvbl9uYW1lKQotCi0gICAgICAgIGlmIG5vdCBvdmVycmlkZGVuX25hbWU6Ci0g
ICAgICAgICAgICBvdmVycmlkZGVuX25hbWUgPSAic3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG51
bGxwdHIpIgotCi0gICAgICAgIHJldHVybiBCdWlsdGluRnVuY3Rpb24oZnVuY3Rpb25fbmFtZSwg
ZnVuY3Rpb25fc291cmNlLCBwYXJhbWV0ZXJzLCBpc19jb25zdHJ1Y3RvciwgaXNfZ2xvYmFsX3By
aXZhdGUsIGludHJpbnNpYywgb3ZlcnJpZGRlbl9uYW1lKQotCi0gICAgZGVmIF9fc3RyX18oc2Vs
Zik6Ci0gICAgICAgIGludGVyZmFjZSA9ICIlcyglcykiICUgKHNlbGYuZnVuY3Rpb25fbmFtZSwg
JywgJy5qb2luKHNlbGYucGFyYW1ldGVycykpCi0gICAgICAgIGlmIHNlbGYuaXNfY29uc3RydWN0
b3I6Ci0gICAgICAgICAgICBpbnRlcmZhY2UgPSBpbnRlcmZhY2UgKyAiIFtDb25zdHJ1Y3Rvcl0i
Ci0KLSAgICAgICAgcmV0dXJuIGludGVyZmFjZQotCi0KLWNsYXNzIEJ1aWx0aW5zQ29sbGVjdGlv
bjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWV3b3JrX25hbWUpOgotICAgICAgICBzZWxm
Ll9jb3B5cmlnaHRfbGluZXMgPSBzZXQoKQotICAgICAgICBzZWxmLm9iamVjdHMgPSBbXQotICAg
ICAgICBzZWxmLmZyYW1ld29yayA9IEZyYW1ld29yay5mcm9tU3RyaW5nKGZyYW1ld29ya19uYW1l
KQotICAgICAgICBsb2cuZGVidWcoIkNyZWF0ZWQgbmV3IEJ1aWx0aW5zIGNvbGxlY3Rpb24uIikK
LQotICAgIGRlZiBwYXJzZV9idWlsdGluc19maWxlKHNlbGYsIGZpbGVuYW1lLCB0ZXh0KToKLSAg
ICAgICAgbG9nLmRlYnVnKCJQYXJzaW5nIGJ1aWx0aW5zIGZpbGU6ICVzIiAlIGZpbGVuYW1lKQot
Ci0gICAgICAgIHBhcnNlZF9jb3B5cmlnaHRzID0gc2V0KHNlbGYuX3BhcnNlX2NvcHlyaWdodF9s
aW5lcyh0ZXh0KSkKLSAgICAgICAgc2VsZi5fY29weXJpZ2h0X2xpbmVzID0gc2VsZi5fY29weXJp
Z2h0X2xpbmVzLnVuaW9uKHBhcnNlZF9jb3B5cmlnaHRzKQotCi0gICAgICAgIGxvZy5kZWJ1Zygi
Rm91bmQgY29weXJpZ2h0IGxpbmVzOiIpCi0gICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2NvcHly
aWdodF9saW5lczoKLSAgICAgICAgICAgIGxvZy5kZWJ1ZyhsaW5lKQotICAgICAgICBsb2cuZGVi
dWcoIiIpCi0KLSAgICAgICAgb2JqZWN0X2Fubm90YXRpb25zID0gc2VsZi5fcGFyc2VfYW5ub3Rh
dGlvbnModGV4dCkKLQotICAgICAgICBvYmplY3RfbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4
dChvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSkKLSAgICAgICAgbG9nLmRlYnVnKCJQYXJzaW5n
IG9iamVjdDogJXMiICUgb2JqZWN0X25hbWUpCi0KLSAgICAgICAgcGFyc2VkX2Z1bmN0aW9ucyA9
IHNlbGYuX3BhcnNlX2Z1bmN0aW9ucyh0ZXh0KQotICAgICAgICBmb3IgZnVuY3Rpb24gaW4gcGFy
c2VkX2Z1bmN0aW9uczoKLSAgICAgICAgICAgIGZ1bmN0aW9uLm9iamVjdCA9IG9iamVjdF9uYW1l
Ci0KLSAgICAgICAgbG9nLmRlYnVnKCJQYXJzZWQgZnVuY3Rpb25zOiIpCi0gICAgICAgIGZvciBm
dW5jIGluIHBhcnNlZF9mdW5jdGlvbnM6Ci0gICAgICAgICAgICBsb2cuZGVidWcoZnVuYykKLSAg
ICAgICAgbG9nLmRlYnVnKCIiKQotCi0gICAgICAgIG5ld19vYmplY3QgPSBCdWlsdGluT2JqZWN0
KG9iamVjdF9uYW1lLCBvYmplY3RfYW5ub3RhdGlvbnMsIHBhcnNlZF9mdW5jdGlvbnMpCi0gICAg
ICAgIG5ld19vYmplY3QuY29sbGVjdGlvbiA9IHNlbGYKLSAgICAgICAgc2VsZi5vYmplY3RzLmFw
cGVuZChuZXdfb2JqZWN0KQotCi0gICAgZGVmIGNvcHlyaWdodHMoc2VsZik6Ci0gICAgICAgIG93
bmVyX3RvX3llYXJzID0gZGljdCgpCi0gICAgICAgIGNvcHlyaWdodFllYXJSZWdFeHAgPSByZS5j
b21waWxlKHIiKFxkezR9KVssIF17MCwyfSIpCi0gICAgICAgIG93bmVyU3RhcnRSZWdFeHAgPSBy
ZS5jb21waWxlKHIiW15cZCwgXSIpCi0KLSAgICAgICAgIyBSZXR1cm5zIGRlZHVwbGljYXRlZCBj
b3B5cmlnaHRzIGtleWVkIG9uIHRoZSBvd25lci4KLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5f
Y29weXJpZ2h0X2xpbmVzOgotICAgICAgICAgICAgeWVhcnMgPSBzZXQoY29weXJpZ2h0WWVhclJl
Z0V4cC5maW5kYWxsKGxpbmUpKQotICAgICAgICAgICAgb3duZXJJbmRleCA9IG93bmVyU3RhcnRS
ZWdFeHAuc2VhcmNoKGxpbmUpLnN0YXJ0KCkKLSAgICAgICAgICAgIG93bmVyID0gbGluZVtvd25l
ckluZGV4Ol0KLSAgICAgICAgICAgIGxvZy5kZWJ1ZygiRm91bmQgeWVhcnM6ICVzIGFuZCBvd25l
cjogJXMiICUgKHllYXJzLCBvd25lcikpCi0gICAgICAgICAgICBpZiBvd25lciBub3QgaW4gb3du
ZXJfdG9feWVhcnM6Ci0gICAgICAgICAgICAgICAgb3duZXJfdG9feWVhcnNbb3duZXJdID0gc2V0
KCkKLQotICAgICAgICAgICAgb3duZXJfdG9feWVhcnNbb3duZXJdID0gb3duZXJfdG9feWVhcnNb
b3duZXJdLnVuaW9uKHllYXJzKQotCi0gICAgICAgIHJlc3VsdCA9IFtdCi0KLSAgICAgICAgZm9y
IG93bmVyLCB5ZWFycyBpbiBvd25lcl90b195ZWFycy5pdGVtcygpOgotICAgICAgICAgICAgc29y
dGVkX3llYXJzID0gbGlzdCh5ZWFycykKLSAgICAgICAgICAgIHNvcnRlZF95ZWFycy5zb3J0KCkK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiVzICVzIiAlICgnLCAnLmpvaW4oc29ydGVkX3ll
YXJzKSwgb3duZXIpKQotCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBhbGxfZnVu
Y3Rpb25zKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICBmb3Igb2JqZWN0IGlu
IHNlbGYub2JqZWN0czoKLSAgICAgICAgICAgIHJlc3VsdC5leHRlbmQob2JqZWN0LmZ1bmN0aW9u
cykKLQotICAgICAgICByZXN1bHQuc29ydCgpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAg
IGRlZiBhbGxfaW50ZXJuYWxfZnVuY3Rpb25zKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBbXQot
ICAgICAgICBmb3Igb2JqZWN0IGluIFtvIGZvciBvIGluIHNlbGYub2JqZWN0cyBpZiAnaW50ZXJu
YWwnIGluIG8uYW5ub3RhdGlvbnNdOgotICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChvYmplY3Qu
ZnVuY3Rpb25zKQotCi0gICAgICAgIHJlc3VsdC5zb3J0KCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dAotCi0gICAgIyBQcml2YXRlIG1ldGhvZHMuCi0KLSAgICBkZWYgX3BhcnNlX2NvcHlyaWdodF9s
aW5lcyhzZWxmLCB0ZXh0KToKLSAgICAgICAgbGljZW5zZUJsb2NrID0gbXVsdGlsaW5lQ29tbWVu
dFJlZ0V4cC5maW5kYWxsKHRleHQpWzBdCi0gICAgICAgIGxpY2Vuc2VCbG9jayA9IGxpY2Vuc2VC
bG9ja1s6bGljZW5zZUJsb2NrLmluZGV4KCJSZWRpc3RyaWJ1dGlvbiIpXQotCi0gICAgICAgIGNv
cHlyaWdodExpbmVzID0gW1RlbXBsYXRlcy5EZWZhdWx0Q29weXJpZ2h0XQotICAgICAgICBmb3Ig
bGluZSBpbiBsaWNlbnNlQmxvY2suc3BsaXQoIlxuIik6Ci0gICAgICAgICAgICBsaW5lID0gbGlu
ZS5yZXBsYWNlKCIvKiIsICIiKQotICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiKi8i
LCAiIikKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIioiLCAiIikKLSAgICAgICAg
ICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIkNvcHlyaWdodCIsICIiKQotICAgICAgICAgICAgbGlu
ZSA9IGxpbmUucmVwbGFjZSgiY29weXJpZ2h0IiwgIiIpCi0gICAgICAgICAgICBsaW5lID0gbGlu
ZS5yZXBsYWNlKCIoQykiLCAiIikKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIihj
KSIsICIiKQotICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotCi0gICAgICAgICAgICBp
ZiBsZW4obGluZSkgPT0gMDoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAg
ICBjb3B5cmlnaHRMaW5lcy5hcHBlbmQobGluZSkKLQotICAgICAgICByZXR1cm4gY29weXJpZ2h0
TGluZXMKLQotICAgIGRlZiBfcGFyc2VfYW5ub3RhdGlvbnMoc2VsZiwgdGV4dCk6Ci0gICAgICAg
IGFubm90YXRpb25zID0ge30KLQotICAgICAgICBmb3IgbWF0Y2ggaW4ga2V5VmFsdWVBbm5vdGF0
aW9uQ29tbWVudFJlZ0V4cC5maW5kaXRlcih0ZXh0KToKLSAgICAgICAgICAgIChrZXksIHZhbHVl
KSA9IG1hdGNoLmdyb3VwKDEsIDIpCi0gICAgICAgICAgICBsb2cuZGVidWcoIkZvdW5kIGFubm90
YXRpb246ICclcycgPT4gJyVzJyIgJSAoa2V5LCB2YWx1ZSkpCi0gICAgICAgICAgICBpZiBrZXkg
aW4gYW5ub3RhdGlvbnM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIkR1
cGxpY2F0ZSBhbm5vdGF0aW9uIGZvdW5kOiAlcyIgJSBrZXkpCi0KLSAgICAgICAgICAgIGFubm90
YXRpb25zW2tleV0gPSB2YWx1ZQotCi0gICAgICAgIGZvciBtYXRjaCBpbiBmbGFnQW5ub3RhdGlv
bkNvbW1lbnRSZWdFeHAuZmluZGl0ZXIodGV4dCk6Ci0gICAgICAgICAgICBrZXkgPSBtYXRjaC5n
cm91cCgxKQotICAgICAgICAgICAgbG9nLmRlYnVnKCJGb3VuZCBhbm5vdGF0aW9uOiAnJXMnID0+
ICdUUlVFJyIgJSBrZXkpCi0gICAgICAgICAgICBpZiBrZXkgaW4gYW5ub3RhdGlvbnM6Ci0gICAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIkR1cGxpY2F0ZSBhbm5vdGF0aW9uIGZv
dW5kOiAlcyIgJSBrZXkpCi0KLSAgICAgICAgICAgIGFubm90YXRpb25zW2tleV0gPSBUcnVlCi0K
LSAgICAgICAgcmV0dXJuIGFubm90YXRpb25zCi0KLSAgICBkZWYgX3BhcnNlX2Z1bmN0aW9ucyhz
ZWxmLCB0ZXh0KToKLSAgICAgICAgdGV4dCA9IG11bHRpbGluZUNvbW1lbnRSZWdFeHAuc3ViKCIv
KiovIiwgc2luZ2xlTGluZUNvbW1lbnRSZWdFeHAuc3ViKCIvL1xuIiwgdGV4dCkpCi0KLSAgICAg
ICAgbWF0Y2hlcyA9IFtmdW5jIGZvciBmdW5jIGluIGZ1bmN0aW9uSGVhZFJlZ0V4cC5maW5kaXRl
cih0ZXh0KV0KLSAgICAgICAgZnVuY3Rpb25Cb3VuZHMgPSBbXQotICAgICAgICBzdGFydCA9IDAK
LSAgICAgICAgZW5kID0gMAotICAgICAgICBmb3IgbWF0Y2ggaW4gbWF0Y2hlczoKLSAgICAgICAg
ICAgIHN0YXJ0ID0gbWF0Y2guc3RhcnQoKQotICAgICAgICAgICAgaWYgc3RhcnQgPCBlbmQ6Ci0g
ICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGVuZCA9IG1hdGNoLmVuZCgpCi0g
ICAgICAgICAgICB3aGlsZSB0ZXh0W2VuZF0gIT0gJ3snOgotICAgICAgICAgICAgICAgIGVuZCA9
IGVuZCArIDEKLSAgICAgICAgICAgIGRlcHRoID0gMQotICAgICAgICAgICAgZW5kID0gZW5kICsg
MQotICAgICAgICAgICAgd2hpbGUgZGVwdGggPiAwOgotICAgICAgICAgICAgICAgIGlmIHRleHRb
ZW5kXSA9PSAneyc6Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoID0gZGVwdGggKyAxCi0gICAg
ICAgICAgICAgICAgZWxpZiB0ZXh0W2VuZF0gPT0gJ30nOgotICAgICAgICAgICAgICAgICAgICBk
ZXB0aCA9IGRlcHRoIC0gMQotICAgICAgICAgICAgICAgIGVuZCA9IGVuZCArIDEKLSAgICAgICAg
ICAgIGZ1bmN0aW9uQm91bmRzLmFwcGVuZCgoc3RhcnQsIGVuZCkpCi0KLSAgICAgICAgZnVuY3Rp
b25TdHJpbmdzID0gW3RleHRbc3RhcnQ6ZW5kXS5zdHJpcCgpIGZvciAoc3RhcnQsIGVuZCkgaW4g
ZnVuY3Rpb25Cb3VuZHNdCi0gICAgICAgIHJldHVybiBtYXAoQnVpbHRpbkZ1bmN0aW9uLmZyb21T
dHJpbmcsIGZ1bmN0aW9uU3RyaW5ncykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
RGVsZXRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTEgKzAsMCAjIwotKgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWls
dGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAy
MzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlu
c190ZW1wbGF0ZXMucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTYgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSMgQnVpbHRpbnMgZ2VuZXJhdG9yIHRlbXBsYXRlcywgd2hpY2ggY2FuIGJlIGZpbGxlZCB3aXRo
IHN0cmluZy5UZW1wbGF0ZS4KLQotCi1jbGFzcyBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlczoK
LQotICAgIERlZmF1bHRDb3B5cmlnaHQgPSAiMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIgotICAgIExpY2Vuc2VUZXh0ID0gKAotICAgICIiIlJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci1hcmUgbWV0OgotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi1BTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLVRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLVBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0iIiIpCi0KLSAgICBEb05vdEVkaXRX
YXJuaW5nID0gKAotICAgICIiIi8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMg
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMt
YnVpbHRpbnMucHkiIiIpCi0KLSAgICBIZWFkZXJJbmNsdWRlR3VhcmQgPSAoCi0gICAgIiIiI3By
YWdtYSBvbmNlIiIiKQotCi0gICAgTmFtZXNwYWNlVG9wID0gKAotICAgICIiIm5hbWVzcGFjZSAk
e25hbWVzcGFjZX0geyIiIikKLQotICAgIE5hbWVzcGFjZUJvdHRvbSA9ICgKLSAgICAiIiJ9IC8v
IG5hbWVzcGFjZSAke25hbWVzcGFjZX0iIiIpCi0KLSAgICBDb21iaW5lZEhlYWRlclN0YXRpY01h
Y3JvcyA9ICgKLSAgICAiIiIjZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IoY29kZU5h
bWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3VtZW50Q291bnQpIFxcCi0gICAg
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNHZW5lcmF0b3IoSlNDOjpWTSYpOwot
Ci0ke21hY3JvUHJlZml4fV9GT1JFQUNIX0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5fR0VO
RVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IiIiIpCi0KLSAgICBTZXBh
cmF0ZUhlYWRlclN0YXRpY01hY3JvcyA9ICgKLSAgICAiIiIjZGVmaW5lIERFQ0xBUkVfQlVJTFRJ
Tl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3Vt
ZW50Q291bnQpIFxcCi0gICAgSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNHZW5l
cmF0b3IoSlNDOjpWTSYpOwotCi0ke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99
X0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5fR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVf
QlVJTFRJTl9HRU5FUkFUT1IiIiIpCi0KLSAgICBDb21iaW5lZEpTQ0ltcGxlbWVudGF0aW9uU3Rh
dGljTWFjcm9zID0gKAotICAgICIiIgotI2RlZmluZSBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1Io
Y29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3VtZW50Q291bnQpIFxc
Ci1KU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJiB2
bSkgXFwKLXtcXAotICAgIHJldHVybiB2bS5idWlsdGluRXhlY3V0YWJsZXMoKS0+Y29kZU5hbWUj
I0V4ZWN1dGFibGUoKS0+bGluayh2bSwgdm0uYnVpbHRpbkV4ZWN1dGFibGVzKCktPmNvZGVOYW1l
IyNTb3VyY2UoKSwgc3RkOjpudWxsb3B0LCBzXyMjY29kZU5hbWUjI0ludHJpbnNpYyk7IFwKLX0K
LSR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVS
QVRPUikKLSN1bmRlZiBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IKLSIiIikKLQotICAgIFNlcGFy
YXRlSlNDSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3MgPSAoCi0gICAgIiIiCi0jZGVmaW5lIERF
RklORV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlkZGVu
TmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLUpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlKiBjb2RlTmFt
ZSMjR2VuZXJhdG9yKEpTQzo6Vk0mIHZtKSBcXAote1xcCi0gICAgcmV0dXJuIHZtLmJ1aWx0aW5F
eGVjdXRhYmxlcygpLT5jb2RlTmFtZSMjRXhlY3V0YWJsZSgpLT5saW5rKHZtLCB2bS5idWlsdGlu
RXhlY3V0YWJsZXMoKS0+Y29kZU5hbWUjI1NvdXJjZSgpLCBzdGQ6Om51bGxvcHQsIHNfIyNjb2Rl
TmFtZSMjSW50cmluc2ljKTsgXAotfQotJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1h
Y3JvfV9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQotI3VuZGVmIERFRklO
RV9CVUlMVElOX0dFTkVSQVRPUgotIiIiKQotCi0gICAgQ29tYmluZWRXZWJDb3JlSW1wbGVtZW50
YXRpb25TdGF0aWNNYWNyb3MgPSAoCi0gICAgICAgICIiIgotI2RlZmluZSBERUZJTkVfQlVJTFRJ
Tl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3Vt
ZW50Q291bnQpIFxcCi1KU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVyYXRv
cihKU0M6OlZNJiB2bSkgXFwKLXtcXAotICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0g
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsgXFwKLSAgICByZXR1
cm4gY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLiR7b2JqZWN0TmFtZUxDfUJ1aWx0aW5z
KCkuY29kZU5hbWUjI0V4ZWN1dGFibGUoKS0+bGluayh2bSwgY2xpZW50RGF0YS0+YnVpbHRpbkZ1
bmN0aW9ucygpLiR7b2JqZWN0TmFtZUxDfUJ1aWx0aW5zKCkuY29kZU5hbWUjI1NvdXJjZSgpLCBz
dGQ6Om51bGxvcHQsIHNfIyNjb2RlTmFtZSMjSW50cmluc2ljKTsgXFwKLX0KLSR7bWFjcm9QcmVm
aXh9X0ZPUkVBQ0hfQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKLSN1bmRl
ZiBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IKLSIiIikKLQotICAgIFNlcGFyYXRlV2ViQ29yZUlt
cGxlbWVudGF0aW9uU3RhdGljTWFjcm9zID0gKAotICAgICAgICAiIiIKLSNkZWZpbmUgREVGSU5F
X0JVSUxUSU5fR0VORVJBVE9SKGNvZGVOYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJyaWRkZW5OYW1l
LCBhcmd1bWVudENvdW50KSBcXAotSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNH
ZW5lcmF0b3IoSlNDOjpWTSYgdm0pIFxcCi17XFwKLSAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50
RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7IFxcCi0g
ICAgcmV0dXJuIGNsaWVudERhdGEtPmJ1aWx0aW5GdW5jdGlvbnMoKS4ke29iamVjdE5hbWVMQ31C
dWlsdGlucygpLmNvZGVOYW1lIyNFeGVjdXRhYmxlKCktPmxpbmsodm0sIGNsaWVudERhdGEtPmJ1
aWx0aW5GdW5jdGlvbnMoKS4ke29iamVjdE5hbWVMQ31CdWlsdGlucygpLmNvZGVOYW1lIyNTb3Vy
Y2UoKSwgc3RkOjpudWxsb3B0LCBzXyMjY29kZU5hbWUjI0ludHJpbnNpYyk7IFxcCi19Ci0ke21h
Y3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShERUZJTkVfQlVJ
TFRJTl9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SCi0iIiIpCi0K
LSAgICBTZXBhcmF0ZUhlYWRlcldyYXBwZXJCb2lsZXJwbGF0ZSA9ICgKLSAgICAiIiJjbGFzcyAk
e29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyIDogcHJpdmF0ZSBKU0M6OldlYWtIYW5kbGVPd25l
ciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5zV3JhcHBlcihK
U0M6OlZNKiB2bSkKLSAgICAgICAgOiBtX3ZtKCp2bSkKLSAgICAgICAgJHttYWNyb1ByZWZpeH1f
Rk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9OX05BTUUoSU5JVElBTElaRV9C
VUlMVElOX05BTUVTKQotI2RlZmluZSBJTklUSUFMSVpFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMo
bmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlkZGVuTmFtZSwgbGVuZ3RoKSAsIG1fIyNuYW1lIyNT
b3VyY2UoSlNDOjptYWtlU291cmNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKHNfIyNu
YW1lLCBsZW5ndGgpLCB7IH0pKQotICAgICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2Jq
ZWN0TWFjcm99X0JVSUxUSU5fQ09ERShJTklUSUFMSVpFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMp
Ci0jdW5kZWYgSU5JVElBTElaRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTCi0gICAgewotICAgIH0K
LQotI2RlZmluZSBFWFBPU0VfQlVJTFRJTl9FWEVDVVRBQkxFUyhuYW1lLCBmdW5jdGlvbk5hbWUs
IG92ZXJyaWRkZW5OYW1lLCBsZW5ndGgpIFxcCi0gICAgSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogbmFtZSMjRXhlY3V0YWJsZSgpOyBcXAotICAgIGNvbnN0IEpTQzo6U291cmNlQ29k
ZSYgbmFtZSMjU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV8jI25hbWUjI1NvdXJjZTsgfQotICAg
ICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9DT0RFKEVYUE9T
RV9CVUlMVElOX0VYRUNVVEFCTEVTKQotI3VuZGVmIEVYUE9TRV9CVUlMVElOX0VYRUNVVEFCTEVT
Ci0KLSAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVO
Q1RJT05fTkFNRShERUNMQVJFX0JVSUxUSU5fSURFTlRJRklFUl9BQ0NFU1NPUikKLQotICAgIHZv
aWQgZXhwb3J0TmFtZXMoKTsKLQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiBtX3ZtOwotCi0gICAg
JHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9OX05B
TUUoREVDTEFSRV9CVUlMVElOX05BTUVTKQotCi0jZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9TT1VS
Q0VfTUVNQkVSUyhuYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJyaWRkZW5OYW1lLCBsZW5ndGgpIFxc
Ci0gICAgSlNDOjpTb3VyY2VDb2RlIG1fIyNuYW1lIyNTb3VyY2U7XFwKLSAgICBKU0M6OldlYWs8
SlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV8jI25hbWUjI0V4ZWN1dGFibGU7Ci0g
ICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0NPREUoREVD
TEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQotI3VuZGVmIERFQ0xBUkVfQlVJTFRJTl9TT1VS
Q0VfTUVNQkVSUwotCi19OwotCi0jZGVmaW5lIERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTKG5h
bWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGxlbmd0aCkgXFwKLWlubGluZSBKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVy
OjpuYW1lIyNFeGVjdXRhYmxlKCkgXFwKLXtcXAotICAgIGlmICghbV8jI25hbWUjI0V4ZWN1dGFi
bGUpIHtcXAotICAgICAgICBKU0M6OklkZW50aWZpZXIgZXhlY3V0YWJsZU5hbWUgPSBmdW5jdGlv
bk5hbWUjI1B1YmxpY05hbWUoKTtcXAotICAgICAgICBpZiAob3ZlcnJpZGRlbk5hbWUpXFwKLSAg
ICAgICAgICAgIGV4ZWN1dGFibGVOYW1lID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZt
X3ZtLCBvdmVycmlkZGVuTmFtZSk7XFwKLSAgICAgICAgbV8jI25hbWUjI0V4ZWN1dGFibGUgPSBK
U0M6OldlYWs8SlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oSlNDOjpjcmVhdGVCdWls
dGluRXhlY3V0YWJsZShtX3ZtLCBtXyMjbmFtZSMjU291cmNlLCBleGVjdXRhYmxlTmFtZSwgc18j
I25hbWUjI0NvbnN0cnVjdEFiaWxpdHkpLCB0aGlzLCAmbV8jI25hbWUjI0V4ZWN1dGFibGUpO1xc
Ci0gICAgfVxcCi0gICAgcmV0dXJuIG1fIyNuYW1lIyNFeGVjdXRhYmxlLmdldCgpO1xcCi19Ci0k
e21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShERUZJTkVf
QlVJTFRJTl9FWEVDVVRBQkxFUykKLSN1bmRlZiBERUZJTkVfQlVJTFRJTl9FWEVDVVRBQkxFUwot
Ci1pbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyOjpleHBvcnROYW1lcygp
Ci17Ci0jZGVmaW5lIEVYUE9SVF9GVU5DVElPTl9OQU1FKG5hbWUpIG1fdm0ucHJvcGVydHlOYW1l
cy0+YXBwZW5kRXh0ZXJuYWxOYW1lKG5hbWUjI1B1YmxpY05hbWUoKSwgbmFtZSMjUHJpdmF0ZU5h
bWUoKSk7Ci0gICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElO
X0ZVTkNUSU9OX05BTUUoRVhQT1JUX0ZVTkNUSU9OX05BTUUpCi0jdW5kZWYgRVhQT1JUX0ZVTkNU
SU9OX05BTUUKLX0iIiIpCi0KLSAgICBTZXBhcmF0ZUhlYWRlckludGVybmFsRnVuY3Rpb25zQm9p
bGVycGxhdGUgPSAoCi0gICAgIiIiY2xhc3MgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnMg
ewotcHVibGljOgotICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zKEpT
Qzo6Vk0mIHZtKSA6IG1fdm0odm0pIHsgfQotCi0gICAgdm9pZCBpbml0KEpTQzo6SlNHbG9iYWxP
YmplY3QmKTsKLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLQotcHVibGljOgot
ICAgIEpTQzo6Vk0mIG1fdm07Ci0KLSNkZWZpbmUgREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1C
RVJTKGZ1bmN0aW9uTmFtZSkgXFwKLSAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rp
b24+IG1fIyNmdW5jdGlvbk5hbWUjI0Z1bmN0aW9uOwotICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVB
Q0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJTl9T
T1VSQ0VfTUVNQkVSUykKLSN1bmRlZiBERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMKLX07
Ci0KLWlubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjppbml0KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSNkZWZpbmUgRVhQT1JUX0ZVTkNUSU9O
KGNvZGVOYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJyaWRkZW5OYW1lLCBsZW5ndGgpXFwKLSAgICBt
XyMjZnVuY3Rpb25OYW1lIyNGdW5jdGlvbi5zZXQobV92bSwgJmdsb2JhbE9iamVjdCwgSlNDOjpK
U0Z1bmN0aW9uOjpjcmVhdGUobV92bSwgY29kZU5hbWUjI0dlbmVyYXRvcihtX3ZtKSwgJmdsb2Jh
bE9iamVjdCkpOwotICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJ
TFRJTl9DT0RFKEVYUE9SVF9GVU5DVElPTikKLSN1bmRlZiBFWFBPUlRfRlVOQ1RJT04KLX0KLQot
aW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0jZGVmaW5lIFZJU0lUX0ZVTkNUSU9OKG5hbWUpIHZpc2l0
b3IuYXBwZW5kKG1fIyNuYW1lIyNGdW5jdGlvbik7Ci0gICAgJHttYWNyb1ByZWZpeH1fRk9SRUFD
SF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9OX05BTUUoVklTSVRfRlVOQ1RJT04pCi0j
dW5kZWYgVklTSVRfRlVOQ1RJT04KLX0KLSIiIikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2Nzc21pbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9jc3NtaW4ucHkJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2Nzc21pbi5weQkod29ya2luZyBjb3B5KQpAQCAtNDYsNCArNDYsNyBAQAog
ICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMyBhbmQgc3lzLnN0ZGluLmVuY29kaW5nICE9
ICdVVEYtOCc6CiAgICAgICAgIGltcG9ydCBpbwogICAgICAgICBzeXMuc3RkaW4gPSBpby5UZXh0
SU9XcmFwcGVyKHN5cy5zdGRpbi5idWZmZXIsIGVuY29kaW5nPSdVVEYtOCcpCisgICAgaWYgc3lz
LnZlcnNpb25faW5mb1swXSA9PSAzIGFuZCBzeXMuc3Rkb3V0LmVuY29kaW5nICE9ICdVVEYtOCc6
CisgICAgICAgIGltcG9ydCBpbworICAgICAgICBzeXMuc3Rkb3V0ID0gaW8uVGV4dElPV3JhcHBl
cihzeXMuc3Rkb3V0LmJ1ZmZlciwgZW5jb2Rpbmc9J1VURi04JykKICAgICBzeXMuc3Rkb3V0Lndy
aXRlKGNzc21pbmlmeShzeXMuc3RkaW4ucmVhZCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CShyZXZpc2lv
biAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1i
dWlsdGlucy5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogaW1wb3J0IGxvZ2dp
bmcKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zCitpbXBvcnQgc3lzCiAKIGxvZ2dpbmcuYmFz
aWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dp
bmcuRVJST1IpCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKQEAgLTM3LDkgKzM4
LDggQEAKIAogZnJvbSBsYXp5d3JpdGVyIGltcG9ydCBMYXp5RmlsZVdyaXRlcgogCi1mcm9tIGJ1
aWx0aW5zIGltcG9ydCAqCitmcm9tIHdrYnVpbHRpbnMgaW1wb3J0ICoKIAotCiBkZWYgY29uY2F0
ZW5hdGVkX291dHB1dF9maWxlbmFtZShidWlsdGluc19maWxlcywgZnJhbWV3b3JrX25hbWUsIGdl
bmVyYXRlX29ubHlfd3JhcHBlcl9maWxlcyk6CiAgICAgaWYgZ2VuZXJhdGVfb25seV93cmFwcGVy
X2ZpbGVzOgogICAgICAgICByZXR1cm4gZnJhbWV3b3JrX25hbWUgKyAnSlNCdWlsdGlucy5oLXJl
c3VsdCcKQEAgLTQ2LDYgKzQ2LDEyIEBACiAgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUoYnVp
bHRpbnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnCiAKIAorZGVmIGRvb3BlbihmaWxlLCBtb2RlKToK
KyAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yID09IDI6CisgICAgICAgIHJldHVybiBvcGVu
KGZpbGUsIG1vZGUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG9wZW4oZmlsZSwgbW9kZSwg
ZW5jb2Rpbmc9IlVURi04IikKKwogZGVmIGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9idWlsdGluc19m
aWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0X3BhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uY2F0ZW5hdGVfb3V0cHV0PUZhbHNlLApAQCAtNTksNyArNjUsNyBAQAog
ICAgIG1vZGVsID0gQnVpbHRpbnNDb2xsZWN0aW9uKGZyYW1ld29ya19uYW1lPWZyYW1ld29ya19u
YW1lKQogCiAgICAgZm9yIGZpbGVwYXRoIGluIGJ1aWx0aW5zX2ZpbGVzOgotICAgICAgICB3aXRo
IG9wZW4oZmlsZXBhdGgsICJyIikgYXMgZmlsZToKKyAgICAgICAgd2l0aCBkb29wZW4oZmlsZXBh
dGgsICJyIikgYXMgZmlsZToKICAgICAgICAgICAgIGZpbGVfdGV4dCA9IGZpbGUucmVhZCgpCiAg
ICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVwYXRoKQogCkBAIC0x
NDYsNyArMTUyLDcgQEAKICAgICAgICAgZm9yIGZpbGVwYXRoIGluIG9zLmxpc3RkaXIoYXJnX29w
dGlvbnMuaW5wdXRfZGlyZWN0b3J5KToKICAgICAgICAgICAgIGlucHV0X2ZpbGVwYXRocy5hcHBl
bmQob3MucGF0aC5qb2luKGFyZ19vcHRpb25zLmlucHV0X2RpcmVjdG9yeSwgZmlsZXBhdGgpKQog
Ci0gICAgaW5wdXRfZmlsZXBhdGhzID0gc29ydGVkKGZpbHRlcihsYW1iZGEgbmFtZTogZm5tYXRj
aC5mbm1hdGNoKG5hbWUsICcqLmpzJyksIGlucHV0X2ZpbGVwYXRocykpCisgICAgaW5wdXRfZmls
ZXBhdGhzID0gc29ydGVkKFtuYW1lIGZvciBuYW1lIGluIGlucHV0X2ZpbGVwYXRocyBpZiBmbm1h
dGNoLmZubWF0Y2gobmFtZSwgJyouanMnKV0pCiAKICAgICBvcHRpb25zID0gewogICAgICAgICAn
b3V0cHV0X3BhdGgnOiBhcmdfb3B0aW9ucy5vdXRwdXRfZGlyZWN0b3J5LApAQCAtMTU5LDcgKzE2
NSw3IEBACiAKICAgICBsb2cuZGVidWcoIkdlbmVyYXRpbmcgY29kZSBmb3IgYnVpbHRpbnMuIikK
ICAgICBsb2cuZGVidWcoIlBhcnNlZCBvcHRpb25zOiIpCi0gICAgZm9yIG9wdGlvbiwgdmFsdWUg
aW4gb3B0aW9ucy5pdGVtcygpOgorICAgIGZvciBvcHRpb24sIHZhbHVlIGluIGxpc3Qob3B0aW9u
cy5pdGVtcygpKToKICAgICAgICAgbG9nLmRlYnVnKCIgICAgJXM6ICVzIiAlIChvcHRpb24sIHZh
bHVlKSkKICAgICBsb2cuZGVidWcoIiIpCiAgICAgbG9nLmRlYnVnKCJJbnB1dCBmaWxlczoiKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2Fs
aXplTGFuZ3VhZ2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHkJKHJldmlzaW9uIDIzNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlSW50bENhbm9uaWNhbGl6
ZUxhbmd1YWdlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSwxMyBAQAogICAgICAgICBw
cmludCgiSS9PIGVycm9yIG9wZW5pbmcgezB9LCAoezF9KTogezJ9Ii5mb3JtYXQocGF0aCwgZS5l
cnJubywgZS5zdHJlcnJvcikpCiAgICAgICAgIGV4aXQoMSkKIAorZGVmIGRvd3JpdGUoZmlsZSwg
c3RyKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yID09IDI6CisgICAgICAgIGZpbGUu
d3JpdGUoc3RyKQorICAgIGVsc2U6CisgICAgICAgIGZpbGUud3JpdGUoYnl0ZXMoc3RyLCAidXRm
LTgiKSkKIAorCiBjbGFzcyBTdWJ0YWdSZWdpc3RyeToKICAgICBkZWYgX19pbml0X18oc2VsZik6
CiAgICAgICAgIHNlbGYubGFuZ3VhZ2VNYXAgPSB7fQpAQCAtMTA5LDQzICsxMTUsNDMgQEAKIAog
ICAgIGRlZiBkdW1wKHNlbGYsIGZpbGUpOgogICAgICAgICBpZiBzZWxmLmZpbGVEYXRlOgotICAg
ICAgICAgICAgZmlsZS53cml0ZSgiLy8gbGFuZ3VhZ2Utc3VidGFnLXJlZ2lzdHJ5IGZpbGUgZGF0
ZToge31cbiIuZm9ybWF0KHNlbGYuZmlsZURhdGUpKQotICAgICAgICBmaWxlLndyaXRlKCJcbiNw
cmFnbWEgb25jZVxuIikKLSAgICAgICAgZmlsZS53cml0ZSgiXG4jaWYgRU5BQkxFKElOVEwpXG4i
KQotICAgICAgICBmaWxlLndyaXRlKCJcbm5hbWVzcGFjZSBKU0Mge1xuIikKKyAgICAgICAgICAg
IGRvd3JpdGUoZmlsZSwgIi8vIGxhbmd1YWdlLXN1YnRhZy1yZWdpc3RyeSBmaWxlIGRhdGU6IHt9
XG4iLmZvcm1hdChzZWxmLmZpbGVEYXRlKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG4jcHJh
Z21hIG9uY2VcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIlxuI2lmIEVOQUJMRShJTlRMKVxu
IikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG5uYW1lc3BhY2UgSlNDIHtcbiIpCiAgICAgICAg
IHNlbGYuZHVtcExvb2t1cChmaWxlLCAiaW50bFByZWZlcnJlZExhbmd1YWdlVGFnIiwgc2VsZi5s
YW5ndWFnZU1hcCkKICAgICAgICAgc2VsZi5kdW1wTG9va3VwKGZpbGUsICJpbnRsUHJlZmVycmVk
RXh0bGFuZ1RhZyIsIHNlbGYuZXh0bGFuZ01hcCkKICAgICAgICAgc2VsZi5kdW1wTG9va3VwKGZp
bGUsICJpbnRsUHJlZmVycmVkUmVnaW9uVGFnIiwgc2VsZi5yZWdpb25NYXApCiAgICAgICAgIHNl
bGYuZHVtcExvb2t1cChmaWxlLCAiaW50bFJlZHVuZGFudExhbmd1YWdlVGFnIiwgc2VsZi5yZWR1
bmRhbnRNYXApCiAgICAgICAgIHNlbGYuZHVtcExvb2t1cChmaWxlLCAiaW50bEdyYW5kZmF0aGVy
ZWRMYW5ndWFnZVRhZyIsIHNlbGYuZ3JhbmRmYXRoZXJlZE1hcCkKLSAgICAgICAgZmlsZS53cml0
ZSgiXG59IC8vIG5hbWVzcGFjZSBKU0NcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIlxuI2VuZGlm
IC8vIEVOQUJMRShJTlRMKVxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG59IC8vIG5hbWVz
cGFjZSBKU0NcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIlxuI2VuZGlmIC8vIEVOQUJMRShJ
TlRMKVxuIikKIAogICAgIGRlZiBkdW1wTG9va3VwKHNlbGYsIGZpbGUsIG5hbWUsIG1hcCk6Ci0g
ICAgICAgIGZpbGUud3JpdGUoIlxuc3RhdGljIFN0cmluZyB7fShjb25zdCBTdHJpbmcmIHRhZylc
bnt7XG4iLmZvcm1hdChuYW1lKSkKLSAgICAgICAgZmlsZS53cml0ZSgiICAgIC8vIHt9IHBvc3Np
YmxlIHJlcGxhY2VtZW50c1xuIi5mb3JtYXQobGVuKG1hcCkpKQorICAgICAgICBkb3dyaXRlKGZp
bGUsICJcbnN0YXRpYyBTdHJpbmcge30oY29uc3QgU3RyaW5nJiB0YWcpXG57e1xuIi5mb3JtYXQo
bmFtZSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICAvLyB7fSBwb3NzaWJsZSByZXBsYWNl
bWVudHNcbiIuZm9ybWF0KGxlbihtYXApKSkKICAgICAgICAgIyBXZSBjb3VsZCBwaWNrIHRoZSBs
b29rdXAgaW1wbGVtZW50YXRpb24gcGVyIG1hcCBpZiBkZXNpcmVkCiAgICAgICAgICMgQW5lY2Rv
dGFsIHBlcmY6IGlmID4gc3dpdGNoID4gaGFzaCAoc2xvd2VzdCkKICAgICAgICAgIyBDb2RlIGNv
bXBsZXhpdHk6IHN3aXRjaCA+IGlmID4gaGFzaCAobGVhc3QgY29tcGxleCkKICAgICAgICAgIyBB
bGdvIGNvbXBsZXhpdHk6IGlmID0gTyhOKSA+IHN3aXRjaCA+IE8obG9nIE4pID4gaGFzaCA9IE8o
MSkgKGxlYXN0IGNvbXBsZXgpCiAgICAgICAgIHNlbGYuZHVtcElmTG9va3VwKGZpbGUsIG5hbWUs
IG1hcCkKLSAgICAgICAgZmlsZS53cml0ZSgifVxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAi
fVxuIikKIAogICAgIGRlZiBkdW1wSGFzaExvb2t1cChzZWxmLCBmaWxlLCBuYW1lLCBtYXApOgot
ICAgICAgICBmaWxlLndyaXRlKCIgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+PiBjYWNoZTtcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYgbWFwID0gY2FjaGUuZ2V0KCk7XG4iKQotICAgICAgICBmaWxlLndy
aXRlKCIgICAgaWYgKFVOTElLRUxZKG1hcC5pc0VtcHR5KCkpKSB7XG4iKQorICAgICAgICBkb3dy
aXRlKGZpbGUsICIgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+PiBjYWNoZTtcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgbWFwID0gY2FjaGUuZ2V0KCk7XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUs
ICIgICAgaWYgKFVOTElLRUxZKG1hcC5pc0VtcHR5KCkpKSB7XG4iKQogICAgICAgICBlbnRyaWVz
ID0gWyIgICAgICAgIG1hcC5hZGQoXCJ7fVwiX3MsIFwie31cIl9zKTtcbiIuZm9ybWF0KGssIHYp
IGZvciBrLCB2IGluIG1hcC5pdGVtcygpXQogICAgICAgICBlbnRyaWVzLnNvcnQoKQotICAgICAg
ICBmaWxlLndyaXRlKCIiLmpvaW4oZW50cmllcykpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICB9
XG4iKQotICAgICAgICBmaWxlLndyaXRlKCIgICAgcmV0dXJuIG1hcC5nZXQodGFnKTtcbiIpCisg
ICAgICAgIGRvd3JpdGUoZmlsZSwgIiIuam9pbihlbnRyaWVzKSkKKyAgICAgICAgZG93cml0ZShm
aWxlICwiICAgIH1cbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICByZXR1cm4gbWFwLmdl
dCh0YWcpO1xuIikKIAogICAgIGRlZiBkdW1wSWZMb29rdXAoc2VsZiwgZmlsZSwgbmFtZSwgbWFw
KToKICAgICAgICAgZW50cmllcyA9IFsiICAgIGlmICh0YWcgPT0gXCJ7fVwiKVxuICAgICAgICBy
ZXR1cm4gXCJ7fVwiX3M7Ii5mb3JtYXQoaywgdikgZm9yIGssIHYgaW4gbWFwLml0ZW1zKCldCiAg
ICAgICAgIGVudHJpZXMuc29ydCgpCi0gICAgICAgIGZpbGUud3JpdGUoIlxuIi5qb2luKGVudHJp
ZXMpKQotICAgICAgICBmaWxlLndyaXRlKCJcbiAgICByZXR1cm4gU3RyaW5nKCk7XG4iKQorICAg
ICAgICBkb3dyaXRlKGZpbGUsICJcbiIuam9pbihlbnRyaWVzKSkKKyAgICAgICAgZG93cml0ZShm
aWxlLCAiXG4gICAgcmV0dXJuIFN0cmluZygpO1xuIikKIAogICAgIGRlZiBkdW1wU3dpdGNoTG9v
a3VwKHNlbGYsIGZpbGUsIG5hbWUsIG1hcCk6CiAgICAgICAgIHRyZWUgPSB7fQpAQCAtMTU3LDI1
ICsxNjMsMjUgQEAKICAgICAgICAgICAgICAgICBub2RlID0gbm9kZVtjaGFyXQogICAgICAgICAg
ICAgbm9kZVsidmFsdWUiXSA9IHYKICAgICAgICAgc2VsZi5kdW1wU3dpdGNoTG9va3VwVHJlZShm
aWxlLCB0cmVlLCAwKQotICAgICAgICBmaWxlLndyaXRlKCJcbiAgICByZXR1cm4gU3RyaW5nKCk7
XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJcbiAgICByZXR1cm4gU3RyaW5nKCk7XG4iKQog
CiAgICAgZGVmIGR1bXBTd2l0Y2hMb29rdXBUcmVlKHNlbGYsIGZpbGUsIHRyZWUsIGxldmVsKToK
ICAgICAgICAgaW5kZW50ID0gIiIubGp1c3QoKGxldmVsICsgMSkgKiA0KQogICAgICAgICBpZiAi
dmFsdWUiIGluIHRyZWU6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKGluZGVudCArICJpZiAodGFn
Lmxlbmd0aCgpID09IHt9KVxuIi5mb3JtYXQobGV2ZWwpKQotICAgICAgICAgICAgZmlsZS53cml0
ZShpbmRlbnQgKyAiICAgIHJldHVybiBcInt9XCJfcztcbiIuZm9ybWF0KHRyZWVbInZhbHVlIl0p
KQorICAgICAgICAgICAgZG93cml0ZShmaWxlLCBpbmRlbnQgKyAiaWYgKHRhZy5sZW5ndGgoKSA9
PSB7fSlcbiIuZm9ybWF0KGxldmVsKSkKKyAgICAgICAgICAgIGRvd3JpdGUoZmlsZSwgaW5kZW50
ICsgIiAgICByZXR1cm4gXCJ7fVwiX3M7XG4iLmZvcm1hdCh0cmVlWyJ2YWx1ZSJdKSkKICAgICAg
ICAgICAgIGRlbCB0cmVlWyJ2YWx1ZSJdCiAgICAgICAgIGtleXMgPSB0cmVlLmtleXMoKQogICAg
ICAgICBrZXlzLnNvcnQoKQogICAgICAgICBpZiBsZW4oa2V5cykgPT0gMDoKICAgICAgICAgICAg
IHJldHVybgotICAgICAgICBmaWxlLndyaXRlKGluZGVudCArICJzd2l0Y2ggKHRhZ1t7fV0pIHt7
XG4iLmZvcm1hdChsZXZlbCkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgaW5kZW50ICsgInN3aXRj
aCAodGFnW3t9XSkge3tcbiIuZm9ybWF0KGxldmVsKSkKICAgICAgICAgZm9yIGtleSBpbiBrZXlz
OgotICAgICAgICAgICAgZmlsZS53cml0ZShpbmRlbnQgKyAiY2FzZSB7fTpcbiIuZm9ybWF0KG9y
ZChrZXkpKSkKKyAgICAgICAgICAgIGRvd3JpdGUoZmlsZSwgaW5kZW50ICsgImNhc2Uge306XG4i
LmZvcm1hdChvcmQoa2V5KSkpCiAgICAgICAgICAgICBzZWxmLmR1bXBTd2l0Y2hMb29rdXBUcmVl
KGZpbGUsIHRyZWVba2V5XSwgbGV2ZWwgKyAxKQotICAgICAgICAgICAgZmlsZS53cml0ZShpbmRl
bnQgKyAiICAgIGJyZWFrO1xuIikKLSAgICAgICAgZmlsZS53cml0ZShpbmRlbnQgKyAiZGVmYXVs
dDogYnJlYWs7XG4iKQotICAgICAgICBmaWxlLndyaXRlKGluZGVudCArICJ9XG4iKQorICAgICAg
ICAgICAgZG93cml0ZShmaWxlLCBpbmRlbnQgKyAiICAgIGJyZWFrO1xuIikKKyAgICAgICAgZG93
cml0ZShmaWxlLCBpbmRlbnQgKyAiZGVmYXVsdDogYnJlYWs7XG4iKQorICAgICAgICBkb3dyaXRl
KGZpbGUsIGluZGVudCArICJ9XG4iKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CkBA
IC0xOTEsMTIgKzE5NywxMiBAQAogICAgIHJlZ2lzdHJ5RmlsZSA9IG9wZW5PckV4aXQocmVnaXN0
cnlQYXRoLCAiciIpCiAgICAgaW50bENhbm9uSEZpbGUgPSBvcGVuT3JFeGl0KGludGxDYW5vbkhQ
YXRoLCAid2IiKQogCi0gICAgaW50bENhbm9uSEZpbGUud3JpdGUoaGVhZGVyKQorICAgIGRvd3Jp
dGUoaW50bENhbm9uSEZpbGUsIGhlYWRlcikKIAogICAgIHJlZ2lzdHJ5ID0gU3VidGFnUmVnaXN0
cnkoKQogICAgIHJlZ2lzdHJ5LnBhcnNlKHJlZ2lzdHJ5RmlsZSkKICAgICByZWdpc3RyeS5kdW1w
KGludGxDYW5vbkhGaWxlKQogCi0gICAgaW50bENhbm9uSEZpbGUud3JpdGUoZm9vdGVyKQorICAg
IGRvd3JpdGUoaW50bENhbm9uSEZpbGUsIGZvb3RlcikKIAogICAgIGV4aXQoMCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlWWFyclVuaWNvZGVQcm9wZXJ0eVRh
Ymxlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5l
cmF0ZVlhcnJVbmljb2RlUHJvcGVydHlUYWJsZXMucHkJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlWWFyclVuaWNvZGVQcm9wZXJ0eVRh
Ymxlcy5weQkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsMTAgQEAKIAogZGVmIG9wZW5PckV4
aXQocGF0aCwgbW9kZSk6CiAgICAgdHJ5OgotICAgICAgICByZXR1cm4gb3BlbihwYXRoLCBtb2Rl
KQorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yID09IDIgb3IgbW9kZSA9PSAid2Ii
IG9yIG1vZGUgPT0gInJiIjoKKyAgICAgICAgICAgIHJldHVybiBvcGVuKHBhdGgsIG1vZGUpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3BlbihwYXRoLCBtb2RlLCBlbmNvZGlu
ZyA9ICJVVEYtOCIpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgcHJpbnQoIkkv
TyBlcnJvciBvcGVuaW5nIHswfSwgKHsxfSk6IHsyfSIuZm9ybWF0KHBhdGgsIGUuZXJybm8sIGUu
c3RyZXJyb3IpKQogICAgICAgICBleGl0KDEpCkBAIC0yMTUsNiArMjE4LDEzIEBACiAgICAgICAg
IHJldHVybiBzZWxmLmFsaWFzVG9TY3JpcHRbbmFtZV0KIAogCitkZWYgZG93cml0ZShmaWxlLCBz
dHIpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgZmlsZS53
cml0ZShzdHIpCisgICAgZWxzZToKKyAgICAgICAgZmlsZS53cml0ZShieXRlcyhzdHIsICJ1dGYt
OCIpKQorCisKIGNsYXNzIFByb3BlcnR5RGF0YToKICAgICBhbGxQcm9wZXJ0eURhdGEgPSBbXQog
CkBAIC0zMjIsNyArMzMyLDcgQEAKICAgICAgICAgaW5zZXJ0TG9jYXRpb24gPSBOb25lCiAgICAg
ICAgIGxvd0NvZGVQb2ludCA9IE5vbmUKICAgICAgICAgaGlnaENvZGVQb2ludCA9IE5vbmUKLSAg
ICAgICAgZm9yIGlkeCBpbiB4cmFuZ2UobGVuKG1hdGNoZXMpKToKKyAgICAgICAgZm9yIGlkeCBp
biByYW5nZShsZW4obWF0Y2hlcykpOgogICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaGVzW2lkeF0K
ICAgICAgICAgICAgIGlmIGNvZGVQb2ludCA9PSBtYXRjaCArIDE6CiAgICAgICAgICAgICAgICAg
bG93Q29kZVBvaW50ID0gbWF0Y2gKQEAgLTM1MSwyMiArMzYxLDIyIEBACiAgICAgICAgICAgICBs
b3dDb2RlUG9pbnQgPSBjb2RlUG9pbnQKICAgICAgICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBjb2Rl
UG9pbnQKIAotICAgICAgICBmb3IgaWR4IGluIHhyYW5nZShsZW4ocmFuZ2VzKSk6Ci0gICAgICAg
ICAgICByYW5nZSA9IHJhbmdlc1tpZHhdCi0gICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPj0g
cmFuZ2VbMF0gYW5kIGhpZ2hDb2RlUG9pbnQgPD0gcmFuZ2VbMV06CisgICAgICAgIGZvciBpZHgg
aW4gcmFuZ2UobGVuKHJhbmdlcykpOgorICAgICAgICAgICAgY3VyX3JhbmdlID0gcmFuZ2VzW2lk
eF0KKyAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA+PSBjdXJfcmFuZ2VbMF0gYW5kIGhpZ2hD
b2RlUG9pbnQgPD0gY3VyX3JhbmdlWzFdOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAg
ICAgICAgaWYgbG93Q29kZVBvaW50IDw9IChyYW5nZVsxXSArIDEpIGFuZCBoaWdoQ29kZVBvaW50
ID49IChyYW5nZVswXSAtIDEpOgorICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50IDw9IChjdXJf
cmFuZ2VbMV0gKyAxKSBhbmQgaGlnaENvZGVQb2ludCA+PSAoY3VyX3JhbmdlWzBdIC0gMSk6CiAg
ICAgICAgICAgICAgICAgd2hpbGUgaWR4IDwgbGVuKHJhbmdlcykgYW5kIGhpZ2hDb2RlUG9pbnQg
Pj0gKHJhbmdlc1tpZHhdWzBdIC0gMSk6Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gcmFu
Z2VzW2lkeF0KLSAgICAgICAgICAgICAgICAgICAgbG93Q29kZVBvaW50ID0gbWluKGxvd0NvZGVQ
b2ludCwgcmFuZ2VbMF0pCi0gICAgICAgICAgICAgICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBtYXgo
aGlnaENvZGVQb2ludCwgcmFuZ2VbMV0pCisgICAgICAgICAgICAgICAgICAgIGN1cl9yYW5nZSA9
IHJhbmdlc1tpZHhdCisgICAgICAgICAgICAgICAgICAgIGxvd0NvZGVQb2ludCA9IG1pbihsb3dD
b2RlUG9pbnQsIGN1cl9yYW5nZVswXSkKKyAgICAgICAgICAgICAgICAgICAgaGlnaENvZGVQb2lu
dCA9IG1heChoaWdoQ29kZVBvaW50LCBjdXJfcmFuZ2VbMV0pCiAgICAgICAgICAgICAgICAgICAg
IGRlbCByYW5nZXNbaWR4XQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvZGVQb2ludENvdW50
ID0gc2VsZi5jb2RlUG9pbnRDb3VudCAtIChyYW5nZVsxXSAtIHJhbmdlWzBdKSAtIDEKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQg
LSAoY3VyX3JhbmdlWzFdIC0gY3VyX3JhbmdlWzBdKSAtIDEKIAogICAgICAgICAgICAgICAgIHJh
bmdlcy5pbnNlcnQoaWR4LCAobG93Q29kZVBvaW50LCBoaWdoQ29kZVBvaW50KSkKICAgICAgICAg
ICAgICAgICBzZWxmLmNvZGVQb2ludENvdW50ID0gc2VsZi5jb2RlUG9pbnRDb3VudCArIChoaWdo
Q29kZVBvaW50IC0gbG93Q29kZVBvaW50KSArIDEKICAgICAgICAgICAgICAgICByZXR1cm4KLSAg
ICAgICAgICAgIGVsaWYgaGlnaENvZGVQb2ludCA8IHJhbmdlWzBdOgorICAgICAgICAgICAgZWxp
ZiBoaWdoQ29kZVBvaW50IDwgY3VyX3JhbmdlWzBdOgogICAgICAgICAgICAgICAgIGlmIGxvd0Nv
ZGVQb2ludCAhPSBoaWdoQ29kZVBvaW50OgogICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5z
ZXJ0KGlkeCwgKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCkpCiAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50ICsgKGhpZ2hDb2Rl
UG9pbnQgLSBsb3dDb2RlUG9pbnQpICsgMQpAQCAtMzg0LDcgKzM5NCw3IEBACiAKICAgICBkZWYg
YWRkUmFuZ2VVbm9yZGVyZWRGb3JNYXRjaGVzQW5kUmFuZ2VzKHNlbGYsIGxvd0NvZGVQb2ludCwg
aGlnaENvZGVQb2ludCwgbWF0Y2hlcywgcmFuZ2VzKToKICAgICAgICAgaWYgbGVuKG1hdGNoZXMp
IGFuZCBoaWdoQ29kZVBvaW50ID49IG1hdGNoZXNbMF0gYW5kIGxvd0NvZGVQb2ludCA8PSBtYXRj
aGVzWy0xXToKLSAgICAgICAgICAgIGZvciBpZHggaW4geHJhbmdlKGxlbihtYXRjaGVzKSk6Cisg
ICAgICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihtYXRjaGVzKSk6CiAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSBtYXRjaGVzW2lkeF0KICAgICAgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQg
PD0gbWF0Y2ggYW5kIGhpZ2hDb2RlUG9pbnQgPj0gbWF0Y2g6CiAgICAgICAgICAgICAgICAgICAg
IHdoaWxlIGlkeCA8IGxlbihtYXRjaGVzKSBhbmQgaGlnaENvZGVQb2ludCA+PSBtYXRjaGVzW2lk
eF06CkBAIC00MTQsMjIgKzQyNCwyMiBAQAogICAgICAgICAgICAgICAgIGVsaWYgaGlnaENvZGVQ
b2ludCA8IG1hdGNoOgogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgIGZvciBp
ZHggaW4geHJhbmdlKGxlbihyYW5nZXMpKToKLSAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VzW2lk
eF0KLSAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA+PSByYW5nZVswXSBhbmQgaGlnaENvZGVQ
b2ludCA8PSByYW5nZVsxXToKKyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4ocmFuZ2VzKSk6
CisgICAgICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNbaWR4XQorICAgICAgICAgICAgaWYgbG93
Q29kZVBvaW50ID49IGN1cl9yYW5nZVswXSBhbmQgaGlnaENvZGVQb2ludCA8PSBjdXJfcmFuZ2Vb
MV06CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQg
PD0gKHJhbmdlWzFdICsgMSkgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gKHJhbmdlWzBdIC0gMSk6Cisg
ICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gKGN1cl9yYW5nZVsxXSArIDEpIGFuZCBoaWdo
Q29kZVBvaW50ID49IChjdXJfcmFuZ2VbMF0gLSAxKToKICAgICAgICAgICAgICAgICB3aGlsZSBp
ZHggPCBsZW4ocmFuZ2VzKSBhbmQgaGlnaENvZGVQb2ludCA+PSAocmFuZ2VzW2lkeF1bMF0gLSAx
KToKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAgICAgICAg
ICAgICAgICBsb3dDb2RlUG9pbnQgPSBtaW4obG93Q29kZVBvaW50LCByYW5nZVswXSkKLSAgICAg
ICAgICAgICAgICAgICAgaGlnaENvZGVQb2ludCA9IG1heChoaWdoQ29kZVBvaW50LCByYW5nZVsx
XSkKKyAgICAgICAgICAgICAgICAgICAgY3VyX3JhbmdlID0gcmFuZ2VzW2lkeF0KKyAgICAgICAg
ICAgICAgICAgICAgbG93Q29kZVBvaW50ID0gbWluKGxvd0NvZGVQb2ludCwgY3VyX3JhbmdlWzBd
KQorICAgICAgICAgICAgICAgICAgICBoaWdoQ29kZVBvaW50ID0gbWF4KGhpZ2hDb2RlUG9pbnQs
IGN1cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAgICAgZGVsIHJhbmdlc1tpZHhdCi0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50
IC0gKHJhbmdlWzFdIC0gcmFuZ2VbMF0pIC0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNv
ZGVQb2ludENvdW50ID0gc2VsZi5jb2RlUG9pbnRDb3VudCAtIChjdXJfcmFuZ2VbMV0gLSBjdXJf
cmFuZ2VbMF0pIC0gMQogCiAgICAgICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIChsb3dD
b2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQpKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50
Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50ICsgKGhpZ2hDb2RlUG9pbnQgLSBsb3dDb2RlUG9p
bnQpICsgMQogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZWxpZiBoaWdoQ29k
ZVBvaW50IDwgcmFuZ2VbMF06CisgICAgICAgICAgICBlbGlmIGhpZ2hDb2RlUG9pbnQgPCBjdXJf
cmFuZ2VbMF06CiAgICAgICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIChsb3dDb2RlUG9p
bnQsIGhpZ2hDb2RlUG9pbnQpKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQg
PSBzZWxmLmNvZGVQb2ludENvdW50ICsgKGhpZ2hDb2RlUG9pbnQgLSBsb3dDb2RlUG9pbnQpICsg
MQogICAgICAgICAgICAgICAgIHJldHVybgpAQCAtNDU5LDEzICs0NjksMTMgQEAKICAgICAgICAg
ICAgICAgICBzZWxmLmFkZFJhbmdlVW5vcmRlcmVkRm9yTWF0Y2hlc0FuZFJhbmdlcyhmaXJzdFVu
aWNvZGVDb2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQsIHNlbGYudW5pY29kZU1hdGNoZXMsIHNlbGYu
dW5pY29kZVJhbmdlcykKIAogICAgIGRlZiByZW1vdmVNYXRjaEZyb21SYW5nZXMoc2VsZiwgY29k
ZVBvaW50LCByYW5nZXMpOgotICAgICAgICBmb3IgaWR4IGluIHhyYW5nZShsZW4ocmFuZ2VzKSk6
Ci0gICAgICAgICAgICByYW5nZSA9IHJhbmdlc1tpZHhdCi0gICAgICAgICAgICBpZiByYW5nZVsw
XSA8PSBjb2RlUG9pbnQgYW5kIGNvZGVQb2ludCA8PSByYW5nZVsxXToKKyAgICAgICAgZm9yIGlk
eCBpbiByYW5nZShsZW4ocmFuZ2VzKSk6CisgICAgICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNb
aWR4XQorICAgICAgICAgICAgaWYgY3VyX3JhbmdlWzBdIDw9IGNvZGVQb2ludCBhbmQgY29kZVBv
aW50IDw9IGN1cl9yYW5nZVsxXToKICAgICAgICAgICAgICAgICByYW5nZXMucG9wKGlkeCkKLSAg
ICAgICAgICAgICAgICBpZiByYW5nZVswXSA8IGNvZGVQb2ludCBhbmQgY29kZVBvaW50IDwgcmFu
Z2VbMV06Ci0gICAgICAgICAgICAgICAgICAgIGxvd1JhbmdlID0gKHJhbmdlWzBdLCBjb2RlUG9p
bnQgLSAxKQotICAgICAgICAgICAgICAgICAgICBoaWdoUmFuZ2UgPSAoY29kZVBvaW50ICsgMSwg
cmFuZ2VbMV0pCisgICAgICAgICAgICAgICAgaWYgY3VyX3JhbmdlWzBdIDwgY29kZVBvaW50IGFu
ZCBjb2RlUG9pbnQgPCBjdXJfcmFuZ2VbMV06CisgICAgICAgICAgICAgICAgICAgIGxvd1Jhbmdl
ID0gKGN1cl9yYW5nZVswXSwgY29kZVBvaW50IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaGln
aFJhbmdlID0gKGNvZGVQb2ludCArIDEsIGN1cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAg
ICAgIyBTaW5jZSBsaXN0Lmluc2VydCBpbnNlcnRzIGJlZm9yZSB0aGUgaW5kZXggZ2l2ZW4sIGhh
bmRsZSB0aGUgaGlnaCByYW5nZSBmaXJzdAogICAgICAgICAgICAgICAgICAgICBpZiBoaWdoUmFu
Z2VbMF0gPT0gaGlnaFJhbmdlWzFdOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRN
YXRjaFVub3JkZXJlZChoaWdoUmFuZ2VbMF0pCkBAIC00NzYsMTQgKzQ4NiwxNCBAQAogICAgICAg
ICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLmluc2Vy
dChpZHgsIGxvd1JhbmdlKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIHJhbmdlWzBdID09IGNvZGVQb2ludDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJh
bmdlID0gKGNvZGVQb2ludCArIDEsIHJhbmdlWzFdKQorICAgICAgICAgICAgICAgICAgICBpZiBj
dXJfcmFuZ2VbMF0gPT0gY29kZVBvaW50OgorICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3Jh
bmdlID0gKGNvZGVQb2ludCArIDEsIGN1cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gKHJhbmdlWzBdLCBjb2RlUG9p
bnQgLSAxKQotICAgICAgICAgICAgICAgICAgICBpZiByYW5nZVswXSA9PSByYW5nZVsxXToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkTWF0Y2hVbm9yZGVyZWQocmFuZ2VbMF0pCisg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJfcmFuZ2UgPSAoY3VyX3JhbmdlWzBdLCBjb2RlUG9p
bnQgLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiBjdXJfcmFuZ2VbMF0gPT0gY3VyX3Jhbmdl
WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRNYXRjaFVub3JkZXJlZChjdXJf
cmFuZ2VbMF0pCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgcmFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBy
YW5nZXMuaW5zZXJ0KGlkeCwgY3VyX3JhbmdlKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBv
aW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50IC0gMQogICAgICAgICAgICAgICAgIHJldHVy
bgogCkBAIC01MDUsMzggKzUxNSwzOCBAQAogICAgICAgICB2YWx1ZXNUaGlzTGluZSA9IDAKICAg
ICAgICAgZmlyc3RWYWx1ZSA9IFRydWUKIAotICAgICAgICBmaWxlLndyaXRlKCJ7IikKKyAgICAg
ICAgZG93cml0ZShmaWxlLCAieyIpCiAgICAgICAgIGZvciBlbGVtIGluIGRhdGFMaXN0OgogICAg
ICAgICAgICAgaWYgZmlyc3RWYWx1ZToKICAgICAgICAgICAgICAgICBmaXJzdFZhbHVlID0gRmFs
c2UKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiLCAiKQor
ICAgICAgICAgICAgICAgIGRvd3JpdGUoZmlsZSwgIiwgIikKICAgICAgICAgICAgIHZhbHVlc1Ro
aXNMaW5lID0gdmFsdWVzVGhpc0xpbmUgKyAxCiAgICAgICAgICAgICBpZiB2YWx1ZXNUaGlzTGlu
ZSA+IHZhbHVlc1BlckxpbmU6Ci0gICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiXG4gICAgICAg
ICAgICAgICAgICIpCisgICAgICAgICAgICAgICAgZG93cml0ZShmaWxlLCAiXG4gICAgICAgICAg
ICAgICAgICIpCiAgICAgICAgICAgICAgICAgdmFsdWVzVGhpc0xpbmUgPSAxCiAgICAgICAgICAg
ICBmb3JtYXR0ZXIoZmlsZSwgZWxlbSkKLSAgICAgICAgZmlsZS53cml0ZSgifSIpCisgICAgICAg
IGRvd3JpdGUoZmlsZSwgIn0iKQogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZSwgY29tbWFBZnRl
cik6Ci0gICAgICAgIGZpbGUud3JpdGUoInN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q2hhcmFjdGVy
Q2xhc3M+IHt9KClcbnt7XG4iLmZvcm1hdChzZWxmLmdldENyZWF0ZUZ1bmNOYW1lKCkpKQotICAg
ICAgICBmaWxlLndyaXRlKCIgICAgLy8gTmFtZSA9IHt9LCBudW1iZXIgb2YgY29kZVBvaW50czog
e31cbiIuZm9ybWF0KHNlbGYubmFtZSwgc2VsZi5jb2RlUG9pbnRDb3VudCkpCi0gICAgICAgIGZp
bGUud3JpdGUoIiAgICBhdXRvIGNoYXJhY3RlckNsYXNzID0gc3RkOjptYWtlX3VuaXF1ZTxDaGFy
YWN0ZXJDbGFzcz4oXG4iKQotICAgICAgICBmaWxlLndyaXRlKCIgICAgICAgIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxVQ2hhcjMyPigiKQotICAgICAgICBzZWxmLmR1bXBNYXRjaERhdGEoZmlsZSwg
OCwgc2VsZi5tYXRjaGVzLCBsYW1iZGEgZmlsZSwgbWF0Y2g6IChmaWxlLndyaXRlKCJ7MDowPSM0
eH0iLmZvcm1hdChtYXRjaCkpKSkKLSAgICAgICAgZmlsZS53cml0ZSgiKSxcbiIpCi0gICAgICAg
IGZpbGUud3JpdGUoIiAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PENoYXJhY3RlclJhbmdl
PigiKQotICAgICAgICBzZWxmLmR1bXBNYXRjaERhdGEoZmlsZSwgNCwgc2VsZi5yYW5nZXMsIGxh
bWJkYSBmaWxlLCByYW5nZTogKGZpbGUud3JpdGUoInt7ezA6MD0jNHh9LCB7MTowPSM0eH19fSIu
Zm9ybWF0KHJhbmdlWzBdLCByYW5nZVsxXSkpKSkKLSAgICAgICAgZmlsZS53cml0ZSgiKSxcbiIp
Ci0gICAgICAgIGZpbGUud3JpdGUoIiAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFy
MzI+KCIpCi0gICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA4LCBzZWxmLnVuaWNvZGVN
YXRjaGVzLCBsYW1iZGEgZmlsZSwgbWF0Y2g6IChmaWxlLndyaXRlKCJ7MDowPSM2eH0iLmZvcm1h
dChtYXRjaCkpKSkKLSAgICAgICAgZmlsZS53cml0ZSgiKSxcbiIpCi0gICAgICAgIGZpbGUud3Jp
dGUoIiAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PENoYXJhY3RlclJhbmdlPigiKQotICAg
ICAgICBzZWxmLmR1bXBNYXRjaERhdGEoZmlsZSwgNCwgc2VsZi51bmljb2RlUmFuZ2VzLCBsYW1i
ZGEgZmlsZSwgcmFuZ2U6IChmaWxlLndyaXRlKCJ7e3swOjA9IzZ4fSwgezE6MD0jNnh9fX0iLmZv
cm1hdChyYW5nZVswXSwgcmFuZ2VbMV0pKSkpCi0gICAgICAgIGZpbGUud3JpdGUoIikpO1xuIikK
KyAgICAgICAgZG93cml0ZShmaWxlLCAic3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDaGFyYWN0ZXJD
bGFzcz4ge30oKVxue3tcbiIuZm9ybWF0KHNlbGYuZ2V0Q3JlYXRlRnVuY05hbWUoKSkpCisgICAg
ICAgIGRvd3JpdGUoZmlsZSwgIiAgICAvLyBOYW1lID0ge30sIG51bWJlciBvZiBjb2RlUG9pbnRz
OiB7fVxuIi5mb3JtYXQoc2VsZi5uYW1lLCBzZWxmLmNvZGVQb2ludENvdW50KSkKKyAgICAgICAg
ZG93cml0ZShmaWxlLCAiICAgIGF1dG8gY2hhcmFjdGVyQ2xhc3MgPSBzdGQ6Om1ha2VfdW5pcXVl
PENoYXJhY3RlckNsYXNzPihcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICAgICAgc3Rk
Ojppbml0aWFsaXplcl9saXN0PFVDaGFyMzI+KCIpCisgICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0
YShmaWxlLCA4LCBzZWxmLm1hdGNoZXMsIGxhbWJkYSBmaWxlLCBtYXRjaDogKGRvd3JpdGUoZmls
ZSwgInswOjA9IzR4fSIuZm9ybWF0KG1hdGNoKSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIp
LFxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8Q2hhcmFjdGVyUmFuZ2U+KCIpCisgICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA0
LCBzZWxmLnJhbmdlcywgbGFtYmRhIGZpbGUsIHJhbmdlOiAoZG93cml0ZShmaWxlLCAie3t7MDow
PSM0eH0sIHsxOjA9IzR4fX19Ii5mb3JtYXQocmFuZ2VbMF0sIHJhbmdlWzFdKSkpKQorICAgICAg
ICBkb3dyaXRlKGZpbGUsICIpLFxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAgICAgICBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8VUNoYXIzMj4oIikKKyAgICAgICAgc2VsZi5kdW1wTWF0Y2hE
YXRhKGZpbGUsIDgsIHNlbGYudW5pY29kZU1hdGNoZXMsIGxhbWJkYSBmaWxlLCBtYXRjaDogKGRv
d3JpdGUoZmlsZSwgInswOjA9IzZ4fSIuZm9ybWF0KG1hdGNoKSkpKQorICAgICAgICBkb3dyaXRl
KGZpbGUsICIpLFxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAgICAgICBzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8Q2hhcmFjdGVyUmFuZ2U+KCIpCisgICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0
YShmaWxlLCA0LCBzZWxmLnVuaWNvZGVSYW5nZXMsIGxhbWJkYSBmaWxlLCByYW5nZTogKGRvd3Jp
dGUoZmlsZSwgInt7ezA6MD0jNnh9LCB7MTowPSM2eH19fSIuZm9ybWF0KHJhbmdlWzBdLCByYW5n
ZVsxXSkpKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAiKSk7XG4iKQogCi0gICAgICAgIGZpbGUu
d3JpdGUoIiAgICBjaGFyYWN0ZXJDbGFzcy0+bV9oYXNOb25CTVBDaGFyYWN0ZXJzID0ge307XG4i
LmZvcm1hdCgoImZhbHNlIiwgInRydWUiKVtzZWxmLmhhc05vbkJNUENoYXJhY3RlcnNdKSkKLSAg
ICAgICAgZmlsZS53cml0ZSgiICAgIHJldHVybiBjaGFyYWN0ZXJDbGFzcztcbn1cblxuIikKKyAg
ICAgICAgZG93cml0ZShmaWxlLCAiICAgIGNoYXJhY3RlckNsYXNzLT5tX2hhc05vbkJNUENoYXJh
Y3RlcnMgPSB7fTtcbiIuZm9ybWF0KCgiZmFsc2UiLCAidHJ1ZSIpW3NlbGYuaGFzTm9uQk1QQ2hh
cmFjdGVyc10pKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAgcmV0dXJuIGNoYXJhY3RlckNs
YXNzO1xufVxuXG4iKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGR1bXBBbGwoY2xzLCBm
aWxlKToKQEAgLTU0MywyMSArNTUzLDIxIEBACiAgICAgICAgIGZvciBwcm9wZXJ0eURhdGEgaW4g
Y2xzLmFsbFByb3BlcnR5RGF0YToKICAgICAgICAgICAgIHByb3BlcnR5RGF0YS5kdW1wKGZpbGUs
IHByb3BlcnR5RGF0YSAhPSBjbHMuYWxsUHJvcGVydHlEYXRhWy0xXSkKIAotICAgICAgICBmaWxl
LndyaXRlKCJ0eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxDaGFyYWN0ZXJDbGFzcz4gKCpDcmVhdGVD
aGFyYWN0ZXJDbGFzcykoKTtcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoInN0YXRpYyBDcmVhdGVD
aGFyYWN0ZXJDbGFzcyBjcmVhdGVGdW5jdGlvbnNbe31dID0ge3tcbiAgICIuZm9ybWF0KGxlbihj
bHMuYWxsUHJvcGVydHlEYXRhKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgInR5cGVkZWYgc3Rk
Ojp1bmlxdWVfcHRyPENoYXJhY3RlckNsYXNzPiAoKkNyZWF0ZUNoYXJhY3RlckNsYXNzKSgpO1xu
IikKKyAgICAgICAgZG93cml0ZShmaWxlLCAic3RhdGljIENyZWF0ZUNoYXJhY3RlckNsYXNzIGNy
ZWF0ZUZ1bmN0aW9uc1t7fV0gPSB7e1xuICAgIi5mb3JtYXQobGVuKGNscy5hbGxQcm9wZXJ0eURh
dGEpKSkKICAgICAgICAgZnVuY3Rpb25zT25UaGlzTGluZSA9IDAKICAgICAgICAgZm9yIHByb3Bl
cnR5RGF0YSBpbiBjbHMuYWxsUHJvcGVydHlEYXRhOgotICAgICAgICAgICAgZmlsZS53cml0ZSgi
IHt9LCIuZm9ybWF0KHByb3BlcnR5RGF0YS5nZXRDcmVhdGVGdW5jTmFtZSgpKSkKKyAgICAgICAg
ICAgIGRvd3JpdGUoZmlsZSwgIiB7fSwiLmZvcm1hdChwcm9wZXJ0eURhdGEuZ2V0Q3JlYXRlRnVu
Y05hbWUoKSkpCiAgICAgICAgICAgICBmdW5jdGlvbnNPblRoaXNMaW5lID0gZnVuY3Rpb25zT25U
aGlzTGluZSArIDEKICAgICAgICAgICAgIGlmIGZ1bmN0aW9uc09uVGhpc0xpbmUgPT0gNDoKLSAg
ICAgICAgICAgICAgICBmaWxlLndyaXRlKCJcbiAgICIpCisgICAgICAgICAgICAgICAgZG93cml0
ZShmaWxlLCAiXG4gICAiKQogICAgICAgICAgICAgICAgIGZ1bmN0aW9uc09uVGhpc0xpbmUgPSAw
CiAKLSAgICAgICAgZmlsZS53cml0ZSgifTtcblxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAi
fTtcblxuIikKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBjcmVhdGVBbmREdW1wSGFzaFRh
YmxlKHNlbGYsIGZpbGUsIHByb3BlcnR5RGljdCwgdGFibGVQcmVmaXgpOgotICAgICAgICBwcm9w
ZXJ0eUtleXMgPSBwcm9wZXJ0eURpY3Qua2V5cygpCisgICAgICAgIHByb3BlcnR5S2V5cyA9IGxp
c3QocHJvcGVydHlEaWN0LmtleXMoKSkKICAgICAgICAgbnVtYmVyT2ZLZXlzID0gbGVuKHByb3Bl
cnR5S2V5cykKICAgICAgICAgaGFzaFNpemUgPSBjZWlsaW5nVG9Qb3dlck9mMihudW1iZXJPZktl
eXMgKiAyKQogICAgICAgICBoYXNoTWFzayA9IGhhc2hTaXplIC0gMQpAQCAtNTg3LDcgKzU5Nyw3
IEBACiAgICAgICAgICAgICBoYXNoVGFibGVbaGFzaF0gPSAobGVuKHZhbHVlVGFibGUpLCBOb25l
KQogICAgICAgICAgICAgdmFsdWVUYWJsZS5hcHBlbmQoKGtleSwga2V5VmFsdWVbMV0pKQogCi0g
ICAgICAgIGZpbGUud3JpdGUoInN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaEluZGV4IHt9VGFibGVJ
bmRleFt7fV0gPSB7e1xuIi5mb3JtYXQodGFibGVQcmVmaXgsIGxlbihoYXNoVGFibGUpKSkKKyAg
ICAgICAgZG93cml0ZShmaWxlLCAic3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoSW5kZXgge31UYWJs
ZUluZGV4W3t9XSA9IHt7XG4iLmZvcm1hdCh0YWJsZVByZWZpeCwgbGVuKGhhc2hUYWJsZSkpKQog
CiAgICAgICAgIGZvciB0YWJsZUluZGV4IGluIGhhc2hUYWJsZToKICAgICAgICAgICAgIHZhbHVl
ID0gLTEKQEAgLTU5NywxNyArNjA3LDE3IEBACiAgICAgICAgICAgICAgICAgaWYgdGFibGVJbmRl
eFsxXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRhYmxlSW5kZXhb
MV0KIAotICAgICAgICAgICAgZmlsZS53cml0ZSgiICAgIHt7IHt9LCB7fSB9fSxcbiIuZm9ybWF0
KHZhbHVlLCBuZXh0KSkKKyAgICAgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICB7eyB7fSwge30g
fX0sXG4iLmZvcm1hdCh2YWx1ZSwgbmV4dCkpCiAKLSAgICAgICAgZmlsZS53cml0ZSgifTtcblxu
IikKKyAgICAgICAgZG93cml0ZShmaWxlLCAifTtcblxuIikKIAotICAgICAgICBmaWxlLndyaXRl
KCJzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hWYWx1ZSB7fVRhYmxlVmFsdWVbe31dID0ge3tcbiIu
Zm9ybWF0KHRhYmxlUHJlZml4LCBsZW4odmFsdWVUYWJsZSkpKQorICAgICAgICBkb3dyaXRlKGZp
bGUsICJzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hWYWx1ZSB7fVRhYmxlVmFsdWVbe31dID0ge3tc
biIuZm9ybWF0KHRhYmxlUHJlZml4LCBsZW4odmFsdWVUYWJsZSkpKQogICAgICAgICBmb3IgdmFs
dWUgaW4gdmFsdWVUYWJsZToKLSAgICAgICAgICAgIGZpbGUud3JpdGUoIiAgICB7eyBcInt9XCIs
IHt9IH19LFxuIi5mb3JtYXQodmFsdWVbMF0sIHZhbHVlWzFdKSkKLSAgICAgICAgZmlsZS53cml0
ZSgifTtcblxuIikKKyAgICAgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICB7eyBcInt9XCIsIHt9
IH19LFxuIi5mb3JtYXQodmFsdWVbMF0sIHZhbHVlWzFdKSkKKyAgICAgICAgZG93cml0ZShmaWxl
LCAifTtcblxuIikKIAotICAgICAgICBmaWxlLndyaXRlKCJzdGF0aWMgY29uc3Qgc3RydWN0IEhh
c2hUYWJsZSB7fUhhc2hUYWJsZSA9IFxuIi5mb3JtYXQodGFibGVQcmVmaXgpKQotICAgICAgICBm
aWxlLndyaXRlKCIgICAge3sge30sIHt9LCB7fVRhYmxlVmFsdWUsIHt9VGFibGVJbmRleCB9fTtc
blxuIi5mb3JtYXQobGVuKHZhbHVlVGFibGUpLCBoYXNoTWFzaywgdGFibGVQcmVmaXgsIHRhYmxl
UHJlZml4KSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAic3RhdGljIGNvbnN0IHN0cnVjdCBIYXNo
VGFibGUge31IYXNoVGFibGUgPSBcbiIuZm9ybWF0KHRhYmxlUHJlZml4KSkKKyAgICAgICAgZG93
cml0ZShmaWxlLCAiICAgIHt7IHt9LCB7fSwge31UYWJsZVZhbHVlLCB7fVRhYmxlSW5kZXggfX07
XG5cbiIuZm9ybWF0KGxlbih2YWx1ZVRhYmxlKSwgaGFzaE1hc2ssIHRhYmxlUHJlZml4LCB0YWJs
ZVByZWZpeCkpCiAKIAogY2xhc3MgU2NyaXB0czoKQEAgLTc0MiwyMSArNzUyLDIxIEBACiAgICAg
ICAgICAgICAgICAgICAgIGxvd0NvZGVQb2ludCA9IGludChjb2RlUG9pbnRzWzpkb3REb3RdLCAx
NikKICAgICAgICAgICAgICAgICAgICAgaGlnaENvZGVQb2ludCA9IGludChjb2RlUG9pbnRzW2Rv
dERvdCArIDI6XSwgMTYpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eURhdGEu
YWRkUmFuZ2UobG93Q29kZVBvaW50LCBoaWdoQ29kZVBvaW50KQotICAgICAgICAgICAgICAgICAg
ICBmb3IgY29kZVBvaW50IGluIHhyYW5nZShsb3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQgKyAx
KToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGNvZGVQb2ludCBpbiByYW5nZShsb3dDb2RlUG9p
bnQsIGhpZ2hDb2RlUG9pbnQgKyAxKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNj
cmlwdEV4dGVuc3Rpb25Qcm9wZXJ0eURhdGEucmVtb3ZlTWF0Y2goY29kZVBvaW50KQogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkU2NyaXB0RXh0ZW5zaW9uUHJvcGVydHlEYXRhLnJl
bW92ZU1hdGNoKGNvZGVQb2ludCkKIAogICAgICAgICAjIEZvciB0aGUgc2NyaXB0cyB0aGF0IGRv
bid0IGhhdmUgYW55IGFkZGl0aW9uYWwgZXh0ZW5zaW9uIGNvZGVQb2ludHMsIGNvcHkgdGhlIHNj
cmlwdAogICAgICAgICAjIGRhdGEgdG8gdGhlIHNjcmlwdCBleHRlbnNpb24gd2l0aCB0aGUgc2Ft
ZSBuYW1lCi0gICAgICAgIGZvciBzY3JpcHROYW1lLCBwcm9wZXJ0eURhdGEgaW4gc2VsZi5zY3Jp
cHRzQnlOYW1lLml0ZXJpdGVtcygpOgorICAgICAgICBmb3Igc2NyaXB0TmFtZSwgcHJvcGVydHlE
YXRhIGluIHNlbGYuc2NyaXB0c0J5TmFtZS5pdGVtcygpOgogICAgICAgICAgICAgaWYgc2NyaXB0
TmFtZSBub3QgaW4gc2VsZi5zY3JpcHRFeHRlbnNpb25zQnlOYW1lOgogICAgICAgICAgICAgICAg
IHNlbGYuc2NyaXB0RXh0ZW5zaW9uc0J5TmFtZVtzY3JpcHROYW1lXSA9IHByb3BlcnR5RGF0YQog
CiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZSk6Ci0gICAgICAgIGZpbGUud3JpdGUoIi8vIFNjcmlw
dHM6XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIvLyBTY3JpcHRzOlxuIikKICAgICAgICAg
UHJvcGVydHlEYXRhLmNyZWF0ZUFuZER1bXBIYXNoVGFibGUoZmlsZSwgc2VsZi5zY3JpcHRzQnlO
YW1lLCAic2NyaXB0IikKIAotICAgICAgICBmaWxlLndyaXRlKCIvLyBTY3JpcHRfRXh0ZW5zaW9u
czpcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIi8vIFNjcmlwdF9FeHRlbnNpb25zOlxuIikK
ICAgICAgICAgUHJvcGVydHlEYXRhLmNyZWF0ZUFuZER1bXBIYXNoVGFibGUoZmlsZSwgc2VsZi5z
Y3JpcHRFeHRlbnNpb25zQnlOYW1lLCAic2NyaXB0RXh0ZW5zaW9uIikKIAogCkBAIC04NzcsNyAr
ODg3LDcgQEAKICAgICAgICAgICAgICAgICBwcm9wZXJ0eURhdGFzWzFdLmFkZFJhbmdlKHNlbGYu
bGFzdEFkZGVkQ29kZVBvaW50ICsgMSwgTWF4VW5pY29kZSkKIAogICAgIGRlZiBkdW1wKHNlbGYs
IGZpbGUpOgotICAgICAgICBmaWxlLndyaXRlKCIvLyBHZW5lcmFsX0NhdGVnb3J5OlxuIikKKyAg
ICAgICAgZG93cml0ZShmaWxlLCAiLy8gR2VuZXJhbF9DYXRlZ29yeTpcbiIpCiAgICAgICAgIFBy
b3BlcnR5RGF0YS5jcmVhdGVBbmREdW1wSGFzaFRhYmxlKGZpbGUsIHNlbGYucHJvcGVydHlEYXRh
QnlDYXRlZ29yeSwgImdlbmVyYWxDYXRlZ29yeSIpCiAKIApAQCAtOTIwLDcgKzkzMCw3IEBACiAg
ICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5RGF0YS5hZGRSYW5nZShpbnQoY29kZVBvaW50
c1s6ZG90RG90XSwgMTYpLCBpbnQoY29kZVBvaW50c1tkb3REb3QgKyAyOl0sIDE2KSkKIAogICAg
IGRlZiBkdW1wKHNlbGYsIGZpbGUpOgotICAgICAgICBmaWxlLndyaXRlKCIvLyBiaW5hcnkgcHJv
cGVydGllczpcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIi8vIGJpbmFyeSBwcm9wZXJ0aWVz
OlxuIikKICAgICAgICAgUHJvcGVydHlEYXRhLmNyZWF0ZUFuZER1bXBIYXNoVGFibGUoZmlsZSwg
c2VsZi5wcm9wZXJ0eURhdGFCeVByb3BlcnR5LCAiYmluYXJ5UHJvcGVydHkiKQogCiBpZiBfX25h
bWVfXyA9PSAiX19tYWluX18iOgpAQCAtOTUwLDcgKzk2MCw3IEBACiAKICAgICBwcm9wZXJ0eURh
dGFIRmlsZSA9IG9wZW5PckV4aXQodW5pY29kZVByb2VydHlEYXRhSFBhdGgsICJ3YiIpCiAKLSAg
ICBwcm9wZXJ0eURhdGFIRmlsZS53cml0ZShoZWFkZXIpCisgICAgZG93cml0ZShwcm9wZXJ0eURh
dGFIRmlsZSwgaGVhZGVyKQogCiAgICAgYWxpYXNlcy5wYXJzZVByb3BlcnR5QWxpYXNlc0ZpbGUo
cHJvcGVydHlBbGlhc2VzRmlsZSkKICAgICBhbGlhc2VzLnBhcnNlUHJvcGVydHlWYWx1ZUFsaWFz
ZXNGaWxlKHByb3BlcnR5VmFsdWVBbGlhc2VzRmlsZSkKQEAgLTk3NCw2ICs5ODQsNiBAQAogICAg
IGJpbmFyeVByb3BlcnR5LmR1bXAocHJvcGVydHlEYXRhSEZpbGUpCiAgICAgc2NyaXB0cy5kdW1w
KHByb3BlcnR5RGF0YUhGaWxlKQogCi0gICAgcHJvcGVydHlEYXRhSEZpbGUud3JpdGUoZm9vdGVy
KQorICAgIGRvd3JpdGUocHJvcGVydHlEYXRhSEZpbGUsIGZvb3RlcikKIAogICAgIGV4aXQoMCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2hhc2hlci5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9oYXNoZXIucHkJKHJldmlzaW9uIDIz
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2hhc2hlci5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogICAgIGhhc2ggPSBzdHJpbmdIYXNoaW5nU3RhcnRW
YWx1ZQogCiAgICAgc3RyTGVuZ3RoID0gbGVuKHN0cikKLSAgICBjaGFyYWN0ZXJQYWlycyA9IHN0
ckxlbmd0aCAvIDIKKyAgICBjaGFyYWN0ZXJQYWlycyA9IGludChzdHJMZW5ndGggLyAyKQogICAg
IHJlbWFpbmRlciA9IHN0ckxlbmd0aCAmIDEKIAogICAgICMgTWFpbiBsb29wCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9qc21pbi5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy9qc21pbi5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvanNtaW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDEwICs3OSwxMyBAQAogICAgICAgICBkZWYgd3JpdGUoY2hhcik6CiAgICAgICAgICAgICAjIGFs
bCBvZiB0aGlzIGlzIHRvIHN1cHBvcnQgbGl0ZXJhbCByZWd1bGFyIGV4cHJlc3Npb25zLgogICAg
ICAgICAgICAgIyBzaWdoCi0gICAgICAgICAgICBpZiBjaGFyIGluICdyZXR1cm4nOgorICAgICAg
ICAgICAgaWYgc3RyKGNoYXIpIGluICdyZXR1cm4nOgogICAgICAgICAgICAgICAgIHNlbGYucmV0
dXJuX2J1ZiArPSBjaGFyCiAgICAgICAgICAgICAgICAgc2VsZi5pc19yZXR1cm4gPSBzZWxmLnJl
dHVybl9idWYgPT0gJ3JldHVybicKLSAgICAgICAgICAgIHNlbGYub3V0cy53cml0ZShjaGFyKQor
ICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mby5tYWpvciA9PSAyOgorICAgICAgICAgICAg
ICAgIHNlbGYub3V0cy53cml0ZShjaGFyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBzZWxmLm91dHMud3JpdGUoc3RyKGNoYXIpKQogICAgICAgICAgICAgaWYgc2VsZi5pc19y
ZXR1cm46CiAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5fYnVmID0gJycKIApAQCAtMTE4LDgg
KzEyMSw4IEBACiAgICAgICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCiAgICAgICAgIGVsaWYg
bm90IHByZXZpb3VzOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgcHJldmlvdXMg
Pj0gJyEnOgotICAgICAgICAgICAgaWYgcHJldmlvdXMgaW4gIidcIiI6CisgICAgICAgIGVsaWYg
c3RyKHByZXZpb3VzKSA+PSAiISI6CisgICAgICAgICAgICBpZiBzdHIocHJldmlvdXMpIGluICIn
XCIiOgogICAgICAgICAgICAgICAgIGluX3F1b3RlID0gcHJldmlvdXMKICAgICAgICAgICAgIHdy
aXRlKHByZXZpb3VzKQogICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0gcHJldmlvdXMK
QEAgLTE2Niw3ICsxNjksNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBudW1zbGFzaGVzICUg
MiA9PSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSAnJwogICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGUoJycuam9pbihxdW90ZV9idWYpKQotICAgICAgICAgICAgZWxp
ZiBuZXh0MSBpbiAnXHJcbic6CisgICAgICAgICAgICBlbGlmIHN0cihuZXh0MSkgaW4gJ1xyXG4n
OgogICAgICAgICAgICAgICAgIGlmIHByZXZpb3VzX25vbl9zcGFjZSBpbiBuZXdsaW5lZW5kX3N0
cmluZ3MgXAogICAgICAgICAgICAgICAgICAgICBvciBwcmV2aW91c19ub25fc3BhY2UgPiAnfic6
CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6CkBAIC0xNzksNyArMTgyLDcgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbmV4dDIgPiAnficgb3IgbmV4dDIgPT0gJy8n
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19uZXdsaW5lID0gVHJ1ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbGlmIG5leHQxIDwg
JyEnIGFuZCBub3QgaW5fcmU6CisgICAgICAgICAgICBlbGlmIHN0cihuZXh0MSkgPCAnIScgYW5k
IG5vdCBpbl9yZToKICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNfbm9uX3NwYWNlIGluIHNw
YWNlX3N0cmluZ3MgXAogICAgICAgICAgICAgICAgICAgICBvciBwcmV2aW91c19ub25fc3BhY2Ug
PiAnficpIFwKICAgICAgICAgICAgICAgICAgICAgYW5kIChuZXh0MiBpbiBzcGFjZV9zdHJpbmdz
IG9yIG5leHQyID4gJ34nKToKQEAgLTIxNyw3ICsyMjAsNyBAQAogICAgICAgICAgICAgICAgICAg
ICBkb19uZXdsaW5lID0gRmFsc2UKIAogICAgICAgICAgICAgICAgIHdyaXRlKG5leHQxKQotICAg
ICAgICAgICAgICAgIGlmIG5vdCBpbl9yZSBhbmQgbmV4dDEgaW4gIidcImAiOgorICAgICAgICAg
ICAgICAgIGlmIG5vdCBpbl9yZSBhbmQgc3RyKG5leHQxKSBpbiAiJ1wiYCI6CiAgICAgICAgICAg
ICAgICAgICAgIGluX3F1b3RlID0gbmV4dDEKICAgICAgICAgICAgICAgICAgICAgcXVvdGVfYnVm
ID0gW10KIApAQCAtMjI0LDcgKzIyNyw3IEBACiAgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQx
CiAgICAgICAgICAgICBuZXh0MSA9IG5leHQyCiAKLSAgICAgICAgICAgIGlmIHByZXZpb3VzID49
ICchJzoKKyAgICAgICAgICAgIGlmIHN0cihwcmV2aW91cykgPj0gJyEnOgogICAgICAgICAgICAg
ICAgIHByZXZpb3VzX25vbl9zcGFjZSA9IHByZXZpb3VzCiAKICAgICAgICAgICAgIGlmIHByZXZp
b3VzID09ICdcXCc6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9tYWtlLWpz
LWZpbGUtYXJyYXlzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL21ha2UtanMtZmlsZS1hcnJheXMucHkJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL21ha2UtanMtZmlsZS1hcnJheXMucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDExIEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogZnJvbSBvcHRwYXJz
ZSBpbXBvcnQgT3B0aW9uUGFyc2VyCi1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1w
b3J0IHN5cworaWYgc3lzLnZlcnNpb25faW5mby5tYWpvciA9PSAyOgorICAgIGZyb20gU3RyaW5n
SU8gaW1wb3J0IFN0cmluZ0lPCitlbHNlOgorICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBm
cm9tIGpzbWluIGltcG9ydCBKYXZhc2NyaXB0TWluaWZ5CiAKIApAQCAtMzcsNyArNDEsNyBAQAog
CiAKIGRlZiBjaHVuayhsaXN0LCBjaHVua1NpemUpOgotICAgIGZvciBpIGluIHhyYW5nZSgwLCBs
ZW4obGlzdCksIGNodW5rU2l6ZSk6CisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGxpc3QpLCBj
aHVua1NpemUpOgogICAgICAgICB5aWVsZCBsaXN0W2k6aSArIGNodW5rU2l6ZV0KIAogCkBAIC04
NSw3ICs4OSw3IEBACiAgICAgICAgIHByaW50KCdleHRlcm4gY29uc3QgY2hhciB7MDpzfUphdmFT
Y3JpcHRbezE6ZH1dOycuZm9ybWF0KHZhcmlhYmxlTmFtZSwgc2l6ZSksIGZpbGU9aGVhZGVyRmls
ZSkKICAgICAgICAgcHJpbnQoJ2NvbnN0IGNoYXIgezA6c31KYXZhU2NyaXB0W3sxOmR9XSA9IHt7
Jy5mb3JtYXQodmFyaWFibGVOYW1lLCBzaXplKSwgZmlsZT1zb3VyY2VGaWxlKQogCi0gICAgICAg
IGNvZGVwb2ludHMgPSBtYXAob3JkLCBjaGFyYWN0ZXJzKQorICAgICAgICBjb2RlcG9pbnRzID0g
bGlzdChtYXAob3JkLCBjaGFyYWN0ZXJzKSkKICAgICAgICAgZm9yIGNvZGVwb2ludENodW5rIGlu
IGNodW5rKGNvZGVwb2ludHMsIDE2KToKICAgICAgICAgICAgIHByaW50KCcgICAgezA6c30sJy5m
b3JtYXQoJywnLmpvaW4obWFwKHN0cmluZ2lmeUNvZGVwb2ludCwgY29kZXBvaW50Q2h1bmspKSks
IGZpbGU9c291cmNlRmlsZSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
d2tidWlsdGlucy9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL19faW5pdF9fLnB5CShyZXZpc2lvbiAyMzQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL19faW5pdF9fLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMyBAQAogIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJj
aCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCiAKLWZyb20gYnVpbHRpbnMgaW1wb3J0
ICoKK2Zyb20gd2tidWlsdGlucyBpbXBvcnQgKgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9i
dWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkJKHJldmlzaW9uIDIzNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJh
dGVfY29tYmluZWRfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAK
IAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1h
Y3JvUHJlZml4KXNfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX1BSSVZBVEVfR0xPQkFMX05BTUUo
bWFjcm8pIFxcIiAlIGFyZ3MpCi0gICAgICAgIGZ1bmN0aW9ucyA9IGZpbHRlcihsYW1iZGEgZnVu
Y3Rpb246IGZ1bmN0aW9uLmlzX2dsb2JhbF9wcml2YXRlLCBzZWxmLm1vZGVsKCkuYWxsX2Z1bmN0
aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMgPSBbZnVuY3Rpb24gZm9yIGZ1bmN0aW9uIGluIHNl
bGYubW9kZWwoKS5hbGxfZnVuY3Rpb25zKCkgaWYgZnVuY3Rpb24uaXNfZ2xvYmFsX3ByaXZhdGVd
CiAgICAgICAgIGZ1bmN0aW9ucy5zb3J0KGtleT1sYW1iZGEgeDogeC5mdW5jdGlvbl9uYW1lKQog
ICAgICAgICBmb3IgZnVuY3Rpb24gaW4gZnVuY3Rpb25zOgogICAgICAgICAgICAgZnVuY3Rpb25f
YXJncyA9IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMv
YnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaW1wbGVtZW50YXRpb24ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19n
ZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxz
X3dyYXBwZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBjbGFz
cyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0
b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CiAgICAgICAgIEJ1aWx0aW5zR2Vu
ZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQotICAgICAgICBzZWxmLmludGVybmFscyA9IGZp
bHRlcihsYW1iZGEgb2JqZWN0OiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0aW9ucywgbW9k
ZWwub2JqZWN0cykKKyAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBbb2JqZWN0IGZvciBvYmplY3Qg
aW4gbW9kZWwub2JqZWN0cyBpZiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0aW9uc10KIAog
ICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNKU0J1aWx0
aW5JbnRlcm5hbHMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFj
ZScpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDIz
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKICAgICBkZWYgX19pbml0
X18oc2VsZiwgbW9kZWwpOgogICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRfXyhzZWxm
LCBtb2RlbCkKLSAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBmaWx0ZXIobGFtYmRhIG9iamVjdDog
J2ludGVybmFsJyBpbiBvYmplY3QuYW5ub3RhdGlvbnMsIG1vZGVsLm9iamVjdHMpCisgICAgICAg
IHNlbGYuaW50ZXJuYWxzID0gW29iamVjdCBmb3Igb2JqZWN0IGluIG1vZGVsLm9iamVjdHMgaWYg
J2ludGVybmFsJyBpbiBvYmplY3QuYW5ub3RhdGlvbnNdCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVu
YW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzSlNCdWlsdGluSW50ZXJuYWxzLmNwcCIgJSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFy
YXRlX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9u
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5l
cmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdG9yLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMv
YnVpbHRpbnNfbW9kZWwucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19tb2RlbC5weQkocmV2aXNpb24gMjM0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19tb2RlbC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9y
dCByZQogaW1wb3J0IG9zCitpbXBvcnQgc3lzCiAKIGZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGlt
cG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKIApAQCAtMTU1LDYg
KzE1Niw4IEBACiAKICAgICAgICAgcmV0dXJuIGludGVyZmFjZQogCisgICAgZGVmIF9fbHRfXyhz
ZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmZ1bmN0aW9uX25hbWUgPCBvdGhlci5m
dW5jdGlvbl9uYW1lCiAKIGNsYXNzIEJ1aWx0aW5zQ29sbGVjdGlvbjoKICAgICBkZWYgX19pbml0
X18oc2VsZiwgZnJhbWV3b3JrX25hbWUpOgpAQCAtMjEwLDcgKzIxMyw3IEBACiAKICAgICAgICAg
cmVzdWx0ID0gW10KIAotICAgICAgICBmb3Igb3duZXIsIHllYXJzIGluIG93bmVyX3RvX3llYXJz
Lml0ZW1zKCk6CisgICAgICAgIGZvciBvd25lciwgeWVhcnMgaW4gbGlzdChvd25lcl90b195ZWFy
cy5pdGVtcygpKToKICAgICAgICAgICAgIHNvcnRlZF95ZWFycyA9IGxpc3QoeWVhcnMpCiAgICAg
ICAgICAgICBzb3J0ZWRfeWVhcnMuc29ydCgpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIl
cyAlcyIgJSAoJywgJy5qb2luKHNvcnRlZF95ZWFycyksIG93bmVyKSkKQEAgLTMwMyw0ICszMDYs
NCBAQAogICAgICAgICAgICAgZnVuY3Rpb25Cb3VuZHMuYXBwZW5kKChzdGFydCwgZW5kKSkKIAog
ICAgICAgICBmdW5jdGlvblN0cmluZ3MgPSBbdGV4dFtzdGFydDplbmRdLnN0cmlwKCkgZm9yIChz
dGFydCwgZW5kKSBpbiBmdW5jdGlvbkJvdW5kc10KLSAgICAgICAgcmV0dXJuIG1hcChCdWlsdGlu
RnVuY3Rpb24uZnJvbVN0cmluZywgZnVuY3Rpb25TdHJpbmdzKQorICAgICAgICByZXR1cm4gbGlz
dChtYXAoQnVpbHRpbkZ1bmN0aW9uLmZyb21TdHJpbmcsIGZ1bmN0aW9uU3RyaW5ncykpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBs
YXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL3drYnVpbHRpbnMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfb3Bjb2RlLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvdWRpczg2L3VkX29wY29kZS5weQkocmV2
aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlz
ODYvdWRfb3Bjb2RlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01NTAsMTAgKzU1MCwxMCBAQAogICAg
ICAgICAgICAgZW50cmllcyA9IHRibC5lbnRyaWVzKCkKICAgICAgICAgICAgIGZvciBrLCBlIGlu
IGVudHJpZXM6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBVZE9wY29kZVRhYmxl
KToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coIiVzICAgIHwtPCUwMng+ICVzIiAlIChp
bmRlbnQsIGssIGUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygiJXMgICAgfC08JTAy
eD4gJXMiICUgKGluZGVudCwgaW50KGspLCBlKSkKICAgICAgICAgICAgICAgICAgICAgcHJpbnRX
YWxrKGUsIGluZGVudCArICIgICAgfCIpCiAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNl
KGUsIFVkSW5zbkRlZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCIlcyAgICB8LTwl
MDJ4PiAlcyIgJSAoaW5kZW50LCBrLCBlKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2co
IiVzICAgIHwtPCUwMng+ICVzIiAlIChpbmRlbnQsIGludChrKSwgZSkpCiAgICAgICAgIHByaW50
V2FsayhzZWxmLnJvb3QpCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRl
LWJ5dGVjb2RlLWZpbGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5l
cmF0ZS1ieXRlY29kZS1maWxlcwkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRlLWJ5dGVjb2RlLWZpbGVzCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCwxMiBAQAogICAgICAgICBwcmludCgiSS9PIGVycm9yIG9wZW5pbmcgezB9LCAoezF9KTogezJ9
Ii5mb3JtYXQocGF0aCwgZS5lcnJubywgZS5zdHJlcnJvcikpCiAgICAgICAgIGV4aXQoMSkKIAor
ZGVmIGRvd3JpdGUoZmlsZSwgc3RyKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yID09
IDI6CisgICAgICAgIGZpbGUud3JpdGUoc3RyKQorICAgIGVsc2U6CisgICAgICAgIGZpbGUud3Jp
dGUoYnl0ZXMoc3RyLCAidXRmLTgiKSkKKwogZGVmIGhhc2hGaWxlKGZpbGUpOgogICAgIHNoYTEg
PSBoYXNobGliLnNoYTEoKQogICAgIGZpbGUuc2VlaygwKQpAQCAtMTEyLDMxICsxMTgsMzEgQEAK
IAogCiBkZWYgd3JpdGVJbnN0cnVjdGlvbkFjY2Vzc29yKGJ5dGVjb2RlSEZpbGUsIHR5cGVOYW1l
LCBuYW1lKToKLSAgICBieXRlY29kZUhGaWxlLndyaXRlKCIgICAgezB9JiB7MX0oKSB7eyByZXR1
cm4gKmJpdHdpc2VfY2FzdDx7MH0qPigmbV97MX0pOyB9fVxuIi5mb3JtYXQodHlwZU5hbWUsIG5h
bWUpKQotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiAgICBjb25zdCB7MH0mIHsxfSgpIGNvbnN0
IHt7IHJldHVybiAqYml0d2lzZV9jYXN0PGNvbnN0IHswfSo+KCZtX3sxfSk7IH19XG4iLmZvcm1h
dCh0eXBlTmFtZSwgbmFtZSkpCisgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiICAgIHswfSYg
ezF9KCkge3sgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8ezB9Kj4oJm1fezF9KTsgfX1cbiIuZm9ybWF0
KHR5cGVOYW1lLCBuYW1lKSkKKyAgICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsICIgICAgY29uc3Qg
ezB9JiB7MX0oKSBjb25zdCB7eyByZXR1cm4gKmJpdHdpc2VfY2FzdDxjb25zdCB7MH0qPigmbV97
MX0pOyB9fVxuIi5mb3JtYXQodHlwZU5hbWUsIG5hbWUpKQogCiAKIGRlZiB3cml0ZUluc3RydWN0
aW9uTWVtYmVyKGJ5dGVjb2RlSEZpbGUsIHR5cGVOYW1lLCBuYW1lKToKLSAgICBieXRlY29kZUhG
aWxlLndyaXRlKCIgICAgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKHswfSksIHNpemVvZihJ
bnN0cnVjdGlvbik+Ojp0eXBlIG1fezF9O1xuIi5mb3JtYXQodHlwZU5hbWUsIG5hbWUpKQotICAg
IGJ5dGVjb2RlSEZpbGUud3JpdGUoIiAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih7MH0pIDw9IHNp
emVvZihJbnN0cnVjdGlvbiksIFwiU2l6ZSBvZiB7MH0gc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFu
IGFuIEluc3RydWN0aW9uLlwiKTtcbiIuZm9ybWF0KHR5cGVOYW1lLCBuYW1lKSkKKyAgICBkb3dy
aXRlKGJ5dGVjb2RlSEZpbGUsICIgICAgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKHswfSks
IHNpemVvZihJbnN0cnVjdGlvbik+Ojp0eXBlIG1fezF9O1xuIi5mb3JtYXQodHlwZU5hbWUsIG5h
bWUpKQorICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
Zih7MH0pIDw9IHNpemVvZihJbnN0cnVjdGlvbiksIFwiU2l6ZSBvZiB7MH0gc2hvdWxkbid0IGJl
IGJpZ2dlciB0aGFuIGFuIEluc3RydWN0aW9uLlwiKTtcbiIuZm9ybWF0KHR5cGVOYW1lLCBuYW1l
KSkKIAogZGVmIHdyaXRlU3RydWN0KGJ5dGVjb2RlSEZpbGUsIGJ5dGVjb2RlKToKLSAgICBieXRl
Y29kZUhGaWxlLndyaXRlKCJzdHJ1Y3QgezB9IHt7XG4iLmZvcm1hdCh0b0NwcChieXRlY29kZVsi
bmFtZSJdKSkpCi0gICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgicHVibGljOlxuIikKKyAgICBkb3dy
aXRlKGJ5dGVjb2RlSEZpbGUsICJzdHJ1Y3QgezB9IHt7XG4iLmZvcm1hdCh0b0NwcChieXRlY29k
ZVsibmFtZSJdKSkpCisgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAicHVibGljOlxuIikKIAog
ICAgIHdyaXRlSW5zdHJ1Y3Rpb25BY2Nlc3NvcihieXRlY29kZUhGaWxlLCAiT3Bjb2RlIiwgIm9w
Y29kZSIpCiAgICAgZm9yIG9mZnNldCBpbiBieXRlY29kZVsib2Zmc2V0cyJdOgotICAgICAgICBm
b3IgbmFtZSwgdHlwZU5hbWUgaW4gb2Zmc2V0Lml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgbmFt
ZSwgdHlwZU5hbWUgaW4gb2Zmc2V0Lml0ZW1zKCk6CiAgICAgICAgICAgICB3cml0ZUluc3RydWN0
aW9uQWNjZXNzb3IoYnl0ZWNvZGVIRmlsZSwgdHlwZU5hbWUsIG5hbWUpCiAKLSAgICBieXRlY29k
ZUhGaWxlLndyaXRlKCJcbnByaXZhdGU6XG4iKQotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yO1xuXG4iKQorICAgIGRvd3JpdGUo
Ynl0ZWNvZGVIRmlsZSwgIlxucHJpdmF0ZTpcbiIpCisgICAgZG93cml0ZShieXRlY29kZUhGaWxl
LCAiICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7XG5cbiIpCiAKICAgICB3
cml0ZUluc3RydWN0aW9uTWVtYmVyKGJ5dGVjb2RlSEZpbGUsICJPcGNvZGUiLCAib3Bjb2RlIikK
ICAgICBmb3Igb2Zmc2V0IGluIGJ5dGVjb2RlWyJvZmZzZXRzIl06Ci0gICAgICAgIGZvciBuYW1l
LCB0eXBlTmFtZSBpbiBvZmZzZXQuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBuYW1lLCB0eXBl
TmFtZSBpbiBvZmZzZXQuaXRlbXMoKToKICAgICAgICAgICAgIHdyaXRlSW5zdHJ1Y3Rpb25NZW1i
ZXIoYnl0ZWNvZGVIRmlsZSwgdHlwZU5hbWUsIG5hbWUpCi0gICAgYnl0ZWNvZGVIRmlsZS53cml0
ZSgifTtcblxuIikKKyAgICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsICJ9O1xuXG4iKQogCiAKIGlm
IF9fbmFtZV9fID09ICJfX21haW5fXyI6CkBAIC0yMjAsMjUgKzIyNiwyNSBAQAogICAgICAgICBw
cmludCgiVW5leHBlY3RlZCBlcnJvciBwYXJzaW5nIHswfTogezF9Ii5mb3JtYXQoYnl0ZWNvZGVK
U09ORmlsZSwgc3lzLmV4Y19pbmZvKCkpKQogCiAgICAgaWYgYnl0ZWNvZGVIRmlsZW5hbWU6Ci0g
ICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoaEZpbGVIYXNoU3RyaW5nKQotICAgICAgICBieXRl
Y29kZUhGaWxlLndyaXRlKGNDb3B5cmlnaHRNc2cgJSBieXRlY29kZUpTT05GaWxlKQotICAgICAg
ICBieXRlY29kZUhGaWxlLndyaXRlKCIjcHJhZ21hIG9uY2VcblxuIikKKyAgICAgICAgZG93cml0
ZShieXRlY29kZUhGaWxlLCBoRmlsZUhhc2hTdHJpbmcpCisgICAgICAgIGRvd3JpdGUoYnl0ZWNv
ZGVIRmlsZSwgY0NvcHlyaWdodE1zZyAlIGJ5dGVjb2RlSlNPTkZpbGUpCisgICAgICAgIGRvd3Jp
dGUoYnl0ZWNvZGVIRmlsZSwgIiNwcmFnbWEgb25jZVxuXG4iKQogCiAgICAgaWYgYnl0ZWNvZGVT
dHJ1Y3RzSEZpbGVuYW1lOgotICAgICAgICBieXRlY29kZVN0cnVjdHNIRmlsZS53cml0ZShoRmls
ZUhhc2hTdHJpbmcpCi0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlLndyaXRlKGNDb3B5cmln
aHRNc2cgJSBieXRlY29kZUpTT05GaWxlKQotICAgICAgICBieXRlY29kZVN0cnVjdHNIRmlsZS53
cml0ZSgiI3ByYWdtYSBvbmNlXG5cbiIpCi0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlLndy
aXRlKCIjaW5jbHVkZSBcIkluc3RydWN0aW9uLmhcIlxuIikKLSAgICAgICAgYnl0ZWNvZGVTdHJ1
Y3RzSEZpbGUud3JpdGUoIlxuIikKKyAgICAgICAgZG93cml0ZShieXRlY29kZVN0cnVjdHNIRmls
ZSwgaEZpbGVIYXNoU3RyaW5nKQorICAgICAgICBkb3dyaXRlKGJ5dGVjb2RlU3RydWN0c0hGaWxl
LCBjQ29weXJpZ2h0TXNnICUgYnl0ZWNvZGVKU09ORmlsZSkKKyAgICAgICAgZG93cml0ZShieXRl
Y29kZVN0cnVjdHNIRmlsZSwgIiNwcmFnbWEgb25jZVxuXG4iKQorICAgICAgICBkb3dyaXRlKGJ5
dGVjb2RlU3RydWN0c0hGaWxlLCAiI2luY2x1ZGUgXCJJbnN0cnVjdGlvbi5oXCJcbiIpCisgICAg
ICAgIGRvd3JpdGUoYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUsICJcbiIpCiAKICAgICBpZiBpbml0QVNN
RmlsZU5hbWU6Ci0gICAgICAgIGluaXRCeXRlY29kZXNGaWxlLndyaXRlKGFzbUZpbGVIYXNoU3Ry
aW5nKQotICAgICAgICBpbml0Qnl0ZWNvZGVzRmlsZS53cml0ZShhc21Db3B5cmlnaHRNc2cgJSBi
eXRlY29kZUpTT05GaWxlKQorICAgICAgICBkb3dyaXRlKGluaXRCeXRlY29kZXNGaWxlLCBhc21G
aWxlSGFzaFN0cmluZykKKyAgICAgICAgZG93cml0ZShpbml0Qnl0ZWNvZGVzRmlsZSwgYXNtQ29w
eXJpZ2h0TXNnICUgYnl0ZWNvZGVKU09ORmlsZSkKICAgICAgICAgaW5pdEFTTUJ5dGVjb2RlTnVt
ID0gMAogCiAgICAgZm9yIHNlY3Rpb24gaW4gYnl0ZWNvZGVTZWN0aW9uczoKICAgICAgICAgaWYg
Ynl0ZWNvZGVIRmlsZW5hbWUgYW5kIHNlY3Rpb25bJ2VtaXRJbkhGaWxlJ106Ci0gICAgICAgICAg
ICBieXRlY29kZUhGaWxlLndyaXRlKCIjZGVmaW5lIEZPUl9FQUNIX3swfV9JRChtYWNybykgXFxc
biIuZm9ybWF0KHNlY3Rpb25bIm1hY3JvTmFtZUNvbXBvbmVudCJdKSkKKyAgICAgICAgICAgIGRv
d3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiNkZWZpbmUgRk9SX0VBQ0hfezB9X0lEKG1hY3JvKSBcXFxu
Ii5mb3JtYXQoc2VjdGlvblsibWFjcm9OYW1lQ29tcG9uZW50Il0pKQogICAgICAgICAgICAgZmly
c3RNYWNybyA9IFRydWUKICAgICAgICAgICAgIGRlZmF1bHRMZW5ndGggPSAxCiAgICAgICAgICAg
ICBpZiAiZGVmYXVsdExlbmd0aCIgaW4gc2VjdGlvbjoKQEAgLTI0Nyw3ICsyNTMsNyBAQAogICAg
ICAgICAgICAgYnl0ZWNvZGVOdW0gPSAwCiAgICAgICAgICAgICBmb3IgYnl0ZWNvZGUgaW4gc2Vj
dGlvblsiYnl0ZWNvZGVzIl06CiAgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0TWFjcm86Ci0g
ICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiBcXFxuIikKKyAgICAgICAg
ICAgICAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiIFxcXG4iKQogCiAgICAgICAgICAg
ICAgICAgbGVuZ3RoID0gZGVmYXVsdExlbmd0aAogICAgICAgICAgICAgICAgIGlmICJsZW5ndGgi
IGluIGJ5dGVjb2RlOgpAQCAtMjU2LDE2ICsyNjIsMTYgQEAKICAgICAgICAgICAgICAgICAgICAg
IyBBZGQgb25lIGZvciB0aGUgb3Bjb2RlCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxl
bihieXRlY29kZVsib2Zmc2V0cyJdKSArIDEKIAotICAgICAgICAgICAgICAgIGJ5dGVjb2RlSEZp
bGUud3JpdGUoIiAgICBtYWNybyh7MH0sIHsxfSkiLmZvcm1hdChieXRlY29kZVsibmFtZSJdLCBs
ZW5ndGgpKQorICAgICAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiAgICBtYWNy
byh7MH0sIHsxfSkiLmZvcm1hdChieXRlY29kZVsibmFtZSJdLCBsZW5ndGgpKQogICAgICAgICAg
ICAgICAgIGZpcnN0TWFjcm8gPSBGYWxzZQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlTnVtID0g
Ynl0ZWNvZGVOdW0gKyAxCiAKLSAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIlxuXG4i
KQotICAgICAgICAgICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiI2RlZmluZSBOVU1CRVJfT0ZfezB9
X0lEUyB7MX1cblxuIi5mb3JtYXQoc2VjdGlvblsibWFjcm9OYW1lQ29tcG9uZW50Il0sIGJ5dGVj
b2RlTnVtKSkKKyAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIlxuXG4iKQorICAg
ICAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiI2RlZmluZSBOVU1CRVJfT0ZfezB9X0lE
UyB7MX1cblxuIi5mb3JtYXQoc2VjdGlvblsibWFjcm9OYW1lQ29tcG9uZW50Il0sIGJ5dGVjb2Rl
TnVtKSkKIAogCiAgICAgICAgIGlmIGJ5dGVjb2RlU3RydWN0c0hGaWxlbmFtZSBhbmQgc2VjdGlv
blsnZW1pdEluU3RydWN0c0ZpbGUnXToKLSAgICAgICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxl
LndyaXRlKCJuYW1lc3BhY2UgSlNDIHtcblxuIikKKyAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNv
ZGVTdHJ1Y3RzSEZpbGUsICJuYW1lc3BhY2UgSlNDIHtcblxuIikKIAogICAgICAgICAgICAgZm9y
IGJ5dGVjb2RlIGluIHNlY3Rpb25bImJ5dGVjb2RlcyJdOgogICAgICAgICAgICAgICAgIGlmIG5v
dCAib2Zmc2V0cyIgaW4gYnl0ZWNvZGU6CkBAIC0yNzIsMTYgKzI3OCwxNiBAQAogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIHdyaXRlU3RydWN0KGJ5dGVjb2Rl
U3RydWN0c0hGaWxlLCBieXRlY29kZSkKIAotICAgICAgICAgICAgYnl0ZWNvZGVTdHJ1Y3RzSEZp
bGUud3JpdGUoIn0gLy8gbmFtZXNwYWNlIEpTQyBcbiIpCisgICAgICAgICAgICBkb3dyaXRlKGJ5
dGVjb2RlU3RydWN0c0hGaWxlLCAifSAvLyBuYW1lc3BhY2UgSlNDIFxuIikKIAogICAgICAgICBp
ZiBieXRlY29kZUhGaWxlbmFtZSBhbmQgc2VjdGlvblsnZW1pdE9wY29kZUlEU3RyaW5nVmFsdWVz
SW5IRmlsZSddOgogICAgICAgICAgICAgYnl0ZWNvZGVOdW0gPSAwCiAgICAgICAgICAgICBmb3Ig
Ynl0ZWNvZGUgaW4gc2VjdGlvblsiYnl0ZWNvZGVzIl06Ci0gICAgICAgICAgICAgICAgYnl0ZWNv
ZGVIRmlsZS53cml0ZSgiI2RlZmluZSB7MH1fdmFsdWVfc3RyaW5nIFwiezF9XCJcbiIuZm9ybWF0
KGJ5dGVjb2RlWyJuYW1lIl0sIGJ5dGVjb2RlTnVtKSkKKyAgICAgICAgICAgICAgICBkb3dyaXRl
KGJ5dGVjb2RlSEZpbGUsICIjZGVmaW5lIHswfV92YWx1ZV9zdHJpbmcgXCJ7MX1cIlxuIi5mb3Jt
YXQoYnl0ZWNvZGVbIm5hbWUiXSwgYnl0ZWNvZGVOdW0pKQogICAgICAgICAgICAgICAgIGZpcnN0
TWFjcm8gPSBGYWxzZQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlTnVtID0gYnl0ZWNvZGVOdW0g
KyAxCiAKLSAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIlxuIikgICAgICAgICAgICAK
KyAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIlxuIikgICAgICAgICAgICAKIAog
ICAgICAgICBpZiBpbml0QVNNRmlsZU5hbWUgYW5kIHNlY3Rpb25bJ2VtaXRJbkFTTUZpbGUnXToK
ICAgICAgICAgICAgIHByZWZpeCA9ICIiCkBAIC0yODgsNyArMjk0LDcgQEAKICAgICAgICAgICAg
IGlmICJhc21QcmVmaXgiIGluIHNlY3Rpb246CiAgICAgICAgICAgICAgICAgcHJlZml4ID0gc2Vj
dGlvblsiYXNtUHJlZml4Il0KICAgICAgICAgICAgIGZvciBieXRlY29kZSBpbiBzZWN0aW9uWyJi
eXRlY29kZXMiXToKLSAgICAgICAgICAgICAgICBpbml0Qnl0ZWNvZGVzRmlsZS53cml0ZSgic2V0
RW50cnlBZGRyZXNzKHswfSwgX3sxfXsyfSlcbiIuZm9ybWF0KGluaXRBU01CeXRlY29kZU51bSwg
cHJlZml4LCBieXRlY29kZVsibmFtZSJdKSkKKyAgICAgICAgICAgICAgICBkb3dyaXRlKGluaXRC
eXRlY29kZXNGaWxlLCAic2V0RW50cnlBZGRyZXNzKHswfSwgX3sxfXsyfSlcbiIuZm9ybWF0KGlu
aXRBU01CeXRlY29kZU51bSwgcHJlZml4LCBieXRlY29kZVsibmFtZSJdKSkKICAgICAgICAgICAg
ICAgICBpbml0QVNNQnl0ZWNvZGVOdW0gPSBpbml0QVNNQnl0ZWNvZGVOdW0gKyAxCiAKICAgICBp
ZiBieXRlY29kZUhGaWxlbmFtZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5CShyZXZpc2lv
biAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwyNSArMSwyNSBAQAogIyBSZXF1
aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVz
CiAKLWZyb20gbW9kZWxzIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgKgotZnJvbSBj
cHBfZ2VuZXJhdG9yIGltcG9ydCAqCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCAqCitmcm9t
IC5tb2RlbHMgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgKgorZnJvbSAuY3BwX2dl
bmVyYXRvciBpbXBvcnQgKgorZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0ICoKIAotZnJvbSBn
ZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoK
LWZyb20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZy
b20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQg
KgotZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoK
LWZyb20gZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1w
b3J0ICoKLWZyb20gZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlciBpbXBvcnQgKgot
ZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoK
LWZyb20gZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcyBpbXBvcnQgKgotZnJvbSBnZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2Vu
ZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9v
YmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVf
b2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdl
bmVyYXRlX29iamNfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfaW50ZXJuYWxf
aGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZl
cnNpb25zX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVf
Y29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX2NwcF9h
bHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRl
X2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zy
b20gLmdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdl
bmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAu
Z2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcyBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2Jq
Y19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJh
dGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2Jq
Y19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9v
YmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdl
bmVyYXRlX29iamNfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2ludGVybmFs
X2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2Nv
bnZlcnNpb25zX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90
eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2NwcF9nZW5lcmF0b3IucHkJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUKIAot
ZnJvbSBnZW5lcmF0b3IgaW1wb3J0IHVjZmlyc3QsIEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1w
b3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFz
ZWRUeXBlLCBGcmFtZXdvcmtzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IHVjZmlyc3QsIEdlbmVy
YXRvcgorZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBA
CiBpbXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGNwcF9nZW5l
cmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSAuY3BwX2dl
bmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRl
cyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwogCiBsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBz
ZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vu
c2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRl
cm5hdGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKip0ZW1wbGF0
ZV9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwg
bWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFp
bnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBt
YXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlu
cykgaWYgX2ZdKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRl
cy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
dGVtcGxhdGVfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAs
MTAgQEAKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9t
IGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwotZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0
IEVudW1UeXBlCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20g
LmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
Q3BwVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAor
ZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKIApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICByZXR1cm4gIiVzQmFja2VuZERp
c3BhdGNoZXJzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3Rv
X2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxl
bihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBp
biBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5jb21tYW5k
c19mb3JfZG9tYWluKGRvbWFpbikpID4gMF0KIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2Vs
Zik6CiAgICAgICAgIHR5cGVkZWZzID0gWygnU3RyaW5nJywgJ0Vycm9yU3RyaW5nJyldCkBAIC02
Miw4ICs2Miw4IEBACiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAg
ICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdhbHRlcm5hdGVfZGlzcGF0Y2hl
cnMnLCBGYWxzZSk6CiAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoZG9tYWlu
cykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwg
ZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0
ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpCisgICAgICAgIHNl
Y3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1w
bGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCiAgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKIApAQCAtMTk4
LDcgKzE5OCw3IEBACiAgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWlu
KGRvbWFpbikKICAgICAgICAgaWYgbGVuKGNvbW1hbmRzKSA+IDA6CiAgICAgICAgICAgICBkZWNs
YXJhdGlvbnMuYXBwZW5kKCdwcml2YXRlOicpCi0gICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQo
bWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGNv
bW1hbmRzKSkKKyAgICAgICAgZGVjbGFyYXRpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kLCBjb21tYW5kcykpKQogCiAg
ICAgICAgIGRlY2xhcmF0aW9uX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRv
bWFpbi5kb21haW5fbmFtZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiBpbXBvcnQg
c3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBjcHBfZ2VuZXJhdG9y
IGltcG9ydCBDcHBHZW5lcmF0b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0
IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKLWZyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBB
cnJheVR5cGUKK2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAu
Y3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBD
cHBUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citm
cm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQogCiBsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICByZXR1cm4g
IiVzQmFja2VuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAg
ZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFt
YmRhIGRvbWFpbjogbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAsIEdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gW2RvbWFp
biBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpIGlmIGxl
bihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwXQogCiAgICAgZGVmIGdlbmVy
YXRlX291dHB1dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzID0gc2VsZi5fZ2Vu
ZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpCkBAIC02NSw3ICs2NSw3IEBACiAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgiXG4iLmpvaW4obWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9m
b3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQotICAgICAgICBzZWN0aW9u
cy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25z
X2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCiAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICJcblxuIi5q
b2luKHNlY3Rpb25zKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CShyZXZpc2lv
biAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDEwICszMCwxMCBAQAogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1m
cm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0
Ci1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKK2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0
IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlCiAKIGxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAg
IHJldHVybiAiJXNGcm9udGVuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkK
IAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmls
dGVyKGxhbWJkYSBkb21haW46IGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4g
MCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBb
ZG9tYWluIGZvciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikg
aWYgbGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwXQogCiAgICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CkBAIC01Nyw3ICs1
Nyw3IEBACiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
Q3BwVGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQor
ICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKSkK
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQb3N0
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICJc
blxuIi5qb2luKHNlY3Rpb25zKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMCBAQAog
aW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dl
bmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0
VHlwZSwgQXJyYXlUeXBlCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IK
K2Zyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKIAogbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAg
cmV0dXJuICIlc0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgp
CiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZp
bHRlcihsYW1iZGEgZG9tYWluOiBsZW4oc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pKSA+
IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4g
W2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYp
IGlmIGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4gMF0KIAogICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcl9hcmdzID0gewpAQCAtNTYsNyAr
NTYsNyBAQAogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipo
ZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dl
bmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJh
dGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCkpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBs
YXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQogICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9w
cm90b2NvbF90eXBlc19oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVz
X2hlYWRlci5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiBmcm9tIG9wZXJhdG9yIGlt
cG9ydCBtZXRob2RjYWxsZXIKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwotZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IEVu
dW1UeXBlLCBPYmplY3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBl
LCBGcmFtZXdvcmtzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zy
b20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgQ3BwVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAorZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgT2JqZWN0VHlwZSwgUHJpbWl0aXZlVHlw
ZSwgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKIApAQCAtNjIsOCArNjIsOCBAQAogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoZG9tYWlucykpCiAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlZGVmcyhkb21haW5zKSkKICAg
ICAgICAgc2VjdGlvbnMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fY29uc3RhbnRfdmFsdWVf
Y29udmVyc2lvbl9tZXRob2RzKCkpCi0gICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2Vs
Zi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlv
bnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRl
cl9zZWN0aW9ucykpCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBsaXN0KG1hcChzZWxmLl9n
ZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKFtzZWN0aW9uIGZvciBzZWN0aW9uIGluIGJ1aWxkZXJfc2VjdGlvbnMgaWYgbGVuKHNl
Y3Rpb24pID4gMF0pCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3
YXJkX2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoKSkKICAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2RlY2xhcmF0aW9uc19mb3JfZW51bV9jb252ZXJzaW9uX21l
dGhvZHMoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bCcpCkBAIC04Nyw4ICs4Nyw4IEBACiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgog
ICAgICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHNl
bGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pXQotICAgICAgICAgICAgb2Jq
ZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQotICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRl
cihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25f
dHlwZXMpCisgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGluIGRl
Y2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpXQorICAgICAg
ICAgICAgZW51bV90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMg
aWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpXQogICAgICAgICAgICAgc29ydGVkKG9iamVj
dF90eXBlcywga2V5PW1ldGhvZGNhbGxlcigncmF3X25hbWUnKSkKICAgICAgICAgICAgIHNvcnRl
ZChlbnVtX3R5cGVzLCBrZXk9bWV0aG9kY2FsbGVyKCdyYXdfbmFtZScpKQogCkBAIC0xMTMsOCAr
MTEzLDggQEAKICIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV90eXBlZGVmcyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgc2VjdGlvbnMgPSBtYXAoc2VsZi5f
Z2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMg
PSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAsIHNlY3Rpb25zKQorICAgICAgICBz
ZWN0aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4sIGRv
bWFpbnMpKQorICAgICAgICBzZWN0aW9ucyA9IFt0ZXh0IGZvciB0ZXh0IGluIHNlY3Rpb25zIGlm
IGxlbih0ZXh0KSA+IDBdCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAg
ICAgICAgcmV0dXJuICcnCkBAIC0xMjUsOCArMTI1LDggQEAKIAogICAgIGRlZiBfZ2VuZXJhdGVf
dHlwZWRlZnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICB0eXBlX2RlY2xhcmF0
aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCi0gICAgICAg
IHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2Uo
ZGVjbC50eXBlLCBBbGlhc2VkVHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQotICAgICAgICBhcnJh
eV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBl
LCBBcnJheVR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgcHJpbWl0aXZlX2RlY2xh
cmF0aW9ucyA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIGlzaW5zdGFu
Y2UoZGVjbC50eXBlLCBBbGlhc2VkVHlwZSldCisgICAgICAgIGFycmF5X2RlY2xhcmF0aW9ucyA9
IFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIGlzaW5zdGFuY2UoZGVjbC50
eXBlLCBBcnJheVR5cGUpXQogICAgICAgICBpZiBsZW4ocHJpbWl0aXZlX2RlY2xhcmF0aW9ucykg
PT0gMCBhbmQgbGVuKGFycmF5X2RlY2xhcmF0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVy
biAnJwogCkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAgICAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5
cGVfZGVjbGFyYXRpb24sIGRvbWFpbikpCiAKLSAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFt
YmRhIHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIHNlY3Rpb25zKQorICAgICAgICBzZWN0aW9u
cyA9IFtzZWN0aW9uIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zIGlmIGxlbihzZWN0aW9uKSA+IDBd
CiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAnJwog
CkBAIC0yMDAsOSArMjAwLDkgQEAKICAgICAgICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCiAKLSAgICAgICAgZW51bV9t
ZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzLCB0eXBlX2RlY2xhcmF0aW9uLnR5
cGVfbWVtYmVycykKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVt
YmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cykKLSAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1i
ZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBl
bnVtX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnMgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIu
dHlwZS5pc19hbm9ueW1vdXNdCisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZv
ciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5p
c19vcHRpb25hbF0KKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJl
ciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNfb3B0aW9uYWxd
CiAgICAgICAgIG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUKIAogICAg
ICAgICBsaW5lcyA9IFtdCkBAIC0yNjEsNyArMjYxLDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUKIAotICAgICAgICBpbmRlbnRlZF9s
aW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9l
bnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVtYmVyLnR5cGUpKQorICAg
ICAgICBpbmRlbnRlZF9saW5lcyA9IGxpc3QobWFwKGFwcGx5X2luZGVudGF0aW9uLCBzZWxmLl9n
ZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgZW51
bV9tZW1iZXIudHlwZSkpKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVz
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25h
bWUsIGVudW1fdHlwZSk6CkBAIC0yNzUsNyArMjc1LDcgQEAKIAogICAgIGRlZiBfZ2VuZXJhdGVf
YnVpbGRlcl9zdGF0ZV9lbnVtKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5l
cyA9IFtdCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjog
bm90IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisg
ICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5pc19vcHRpb25hbF0KICAgICAgICAg
ZW51bV92YWx1ZXMgPSBbXQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0geycpCkBA
IC0zNDMsNyArMzQzLDcgQEAKIAogICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190
b19nZW5lcmF0ZSgpOgogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICAgICAgZGVjbGFyYXRpb25z
X3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVf
YXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgICAgIGRl
Y2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRp
b25zIGlmIHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSldCiAKICAg
ICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0
ZToKICAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50
eXBlX21lbWJlcnM6CkBAIC0zOTIsOCArMzkyLDggQEAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKICAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25z
ID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKICAgICAgICAgICAg
IGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0
aW9uc10KLSAgICAgICAgICAgIG9iamVjdF90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlz
aW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKLSAgICAgICAg
ICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAgICAgICAgb2JqZWN0X3R5cGVzID0g
W190eXBlIGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2luc3RhbmNlKF90eXBl
LCBPYmplY3RUeXBlKV0KKyAgICAgICAgICAgIGVudW1fdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBl
IGluIGRlY2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKV0KICAg
ICAgICAgICAgIGlmIGxlbihvYmplY3RfdHlwZXMpICsgbGVuKGVudW1fdHlwZXMpID09IDA6CiAg
ICAgICAgICAgICAgICAgY29udGludWUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVu
dGF0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTAgQEAKIGZyb20gc3RyaW5n
IGltcG9ydCBUZW1wbGF0ZQogZnJvbSBvcGVyYXRvciBpbXBvcnQgbWV0aG9kY2FsbGVyCiAKLWZy
b20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1m
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBv
cnQgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIE9iamVjdFR5cGUKK2Zyb20gLmNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20g
LmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0
IEFsaWFzZWRUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCiAKIGxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC02NSw4ICs2NSw4IEBACiAgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZCgnbmFtZXNwYWNlIFByb3RvY29sIHsnKQogICAgICAgICBzZWN0aW9ucy5l
eHRlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nX2FuZF9jb252ZXJzaW9uX21ldGhvZHMo
ZG9tYWlucykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9vcGVuX2Zp
ZWxkX25hbWVzKCkpCi0gICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJh
dGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5k
KGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9u
cykpCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9i
dWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKFtz
ZWN0aW9uIGZvciBzZWN0aW9uIGluIGJ1aWxkZXJfc2VjdGlvbnMgaWYgbGVuKHNlY3Rpb24pID4g
MF0pCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wnKQog
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkltcGxlbWVudGF0
aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAKQEAgLTEyOCw4
ICsxMjgsOCBAQAogCiAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBb
ZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQotICAgICAgICBvYmplY3Rf
dHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBl
KSwgZGVjbGFyYXRpb25fdHlwZXMpCi0gICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRh
IF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQor
ICAgICAgICBvYmplY3RfdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGluIGRlY2xhcmF0aW9uX3R5
cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpXQorICAgICAgICBlbnVtX3R5cGVz
ID0gW190eXBlIGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2luc3RhbmNlKF90
eXBlLCBFbnVtVHlwZSldCiAgICAgICAgIGlmIGxlbihvYmplY3RfdHlwZXMpICsgbGVuKGVudW1f
dHlwZXMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKIApAQCAtMTU2LDggKzE1Niw4IEBA
CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3Bh
Y2UgJXMgeycgJSBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmV4
dGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKLSAgICAgICAgZW51bV9wYXJzZXJf
c2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9y
X2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEg
c2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgZW51bV9wYXJzZXJfc2VjdGlvbnMpKQorICAgICAg
ICBlbnVtX3BhcnNlcl9zZWN0aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29u
dmVyc2lvbl9tZXRob2RzX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5l
eHRlbmQoW3NlY3Rpb24gZm9yIHNlY3Rpb24gaW4gZW51bV9wYXJzZXJfc2VjdGlvbnMgaWYgbGVu
KHNlY3Rpb24pID4gMF0pCiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMToKICAgICAgICAg
ICAgIHJldHVybiBbXSAgIyBObyBkZWNsYXJhdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgbmFtZXNw
YWNlLgogCkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBm
b3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgogICAgICAgICAgICAgdHlw
ZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWlu
KQotICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNs
OiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKSwgdHlwZV9kZWNsYXJh
dGlvbnMpOgorICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gW2RlY2wgZm9yIGRl
Y2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRz
KGRlY2wudHlwZSldOgogICAgICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5v
cGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1l
bWJlcl9uYW1lKToKICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihb
J0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUp
XSkKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2Rv
bWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHR5cGVf
ZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikK
LSAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBz
ZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0
aW9ucykKKyAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gW2RlY2wgZm9yIGRlY2wg
aW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMo
ZGVjbC50eXBlKV0KIAogICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlv
bnNfdG9fZ2VuZXJhdGU6CiAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnM6CkBAIC0yMDAsOCArMjAwLDggQEAKICAgICAgICAgcmV0dXJu
IFRlbXBsYXRlKENwcFRlbXBsYXRlcy5Qcm90b2NvbE9iamVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0
dXRlKE5vbmUsICoqYXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAgcmVxdWly
ZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFs
LCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1i
ZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2Rl
Y2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1i
ZXIgZm9yIG1lbWJlciBpbiBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIG5vdCBt
ZW1iZXIuaXNfb3B0aW9uYWxdCisgICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBbbWVtYmVyIGZv
ciBtZW1iZXIgaW4gb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNf
b3B0aW9uYWxdCiAgICAgICAgIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzID0gbm90IEdlbmVyYXRv
ci50eXBlX2hhc19vcGVuX2ZpZWxkcyhvYmplY3RfZGVjbGFyYXRpb24udHlwZSkKICAgICAgICAg
bGluZXMgPSBbXQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2pzX2JhY2tlbmRfY29tbWFuZHMucHkJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRf
Y29tbWFuZHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKIGltcG9ydCBzdHJp
bmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQor
ZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLmdlbmVyYXRv
cl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20g
Lm1vZGVscyBpbXBvcnQgRW51bVR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCiAKQEAgLTQ2LDE2ICs0NiwxNiBAQAogCiAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21h
aW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICBkb21haW5fZW51bV90eXBl
cyA9IGZpbHRlcihsYW1iZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlw
ZSwgRW51bVR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgZG9tYWluX2VudW1fdHlw
ZXMgPSBbZGVjbGFyYXRpb24gZm9yIGRlY2xhcmF0aW9uIGluIHR5cGVfZGVjbGFyYXRpb25zIGlm
IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpXQogICAgICAgICByZXR1cm4g
bGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAgb3IgbGVuKHNlbGYuZXZl
bnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAw
CiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZp
bHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkpCiAKICAg
ICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2Vj
dGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dl
bmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5nZW5lcmF0
ZV9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCiAgICAgICAgIHJldHVybiAi
XG5cbiIuam9pbihzZWN0aW9ucykKIAogICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9t
YWluKToKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgY29tbWFuZHMgPSBzZWxmLmNvbW1hbmRz
X2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICBldmVudHMgPSBzZWxmLmV2ZW50c19mb3JfZG9t
YWluKGRvbWFpbikKIAotICAgICAgICBoYXNfYXN5bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJk
YSBjb21tYW5kOiBjb21tYW5kLmlzX2FzeW5jLCBjb21tYW5kcykpCisgICAgICAgIGhhc19hc3lu
Y19jb21tYW5kcyA9IGFueShbY29tbWFuZC5pc19hc3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5k
c10pCiAgICAgICAgIGlmIGxlbihldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CiAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFp
bilzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
LmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIiUoZG9tYWluKXMiKTsnICUgYXJncykKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEg
QEAKIGltcG9ydCByZQogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dl
bmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yCi1mcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBp
bXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0
IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
cgorZnJvbSAubW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCitmcm9tIC5vYmpjX2dlbmVyYXRvciBp
bXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgcmV0dXJu
ICclc0JhY2tlbmREaXNwYXRjaGVycy5oJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBk
ZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxm
LnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxk
X2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhl
YWRlcnMgPSBbCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRl
clByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rp
b25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uc19m
b3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNl
bGYuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlu
cykpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyMzQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTEgKzMwLDExIEBACiBpbXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1w
bGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUs
IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBp
bXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1l
Ci1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBs
YXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5l
cmF0b3IKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIC5tb2RlbHMgaW1w
b3J0IFByaW1pdGl2ZVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcworZnJv
bSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3Is
IGpvaW5fdHlwZV9hbmRfbmFtZQorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgcmV0dXJu
ICclc0JhY2tlbmREaXNwYXRjaGVycy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAg
ZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoc2Vs
Zi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3Vs
ZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBz
ZWNvbmRhcnlfaGVhZGVycyA9IFsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgc2VjdGlvbnMg
PSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJf
aW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4
dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9k
b21haW4sIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2Vj
dGlvbnMpCiAKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9w
YXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKIAotICAgICAg
ICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0
ZXI6IG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9v
YmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnMpCisgICAgICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVy
IGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycyBpZiBub3QgcGFyYW1l
dGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5
cGUocGFyYW1ldGVyLnR5cGUpXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJl
ZF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2Vu
ZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJf
bmFtZSkpCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgICAgICBpZiBvYmpjX2FycmF5
X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgoc2VsZi5vYmpjX3ByZWZpeCgp
KToKICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAodmFyX25hbWUs
IG9iamNfYXJyYXlfY2xhc3MpKQogCi0gICAgICAgICAgICBvcHRpb25hbF9wb2ludGVyX3BhcmFt
ZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFu
ZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUp
LCBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgb3B0aW9uYWxfcG9pbnRl
cl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJu
X3BhcmFtZXRlcnMgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlz
X3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAgICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAg
ICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVy
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBA
IiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9u
X2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CShy
ZXZpc2lvbiAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBv
cnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBvYmpj
X2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJv
bSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9y
dCBPYmpDR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0
aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5w
eQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiBpbXBvcnQgc3RyaW5nCiBmcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
cgotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1Rl
bXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2Vu
ZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQkocmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MCArMjksMTAgQEAKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQog
Ci1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3Ig
aW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2Jq
Q0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBv
cnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAorZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpD
VGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00NSw3
ICs0NSw3IEBACiAgICAgICAgIHJldHVybiAnJXNFdmVudERpc3BhdGNoZXJzLm1tJyAlIHNlbGYu
cHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAg
ICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFp
biwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBs
aXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbiwgR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1
dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkBAIC02Miw3ICs2Miw3IEBA
CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1Rl
bXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5l
eHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNU
ZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkBAIC0xMDAs
NyArMTAwLDcgQEAKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgY29uc3QgRnJvbnRlbmRSb3V0
ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOycpCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKIAotICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBm
aWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogbm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2Jq
Q0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgZXZl
bnQuZXZlbnRfcGFyYW1ldGVycykKKyAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJz
ID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMgaWYg
bm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNf
cG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBy
ZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNH
ZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkp
CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlfY2xhc3MgYW5k
IG9iamNfYXJyYXlfY2xhc3Muc3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkpOgogICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVf
SU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAodmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3Mp
KQogCi0gICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1iZGEg
cGFyYW1ldGVyOiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlw
ZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnMpCisgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0ZXIgZm9y
IHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRl
ci50eXBlKV0KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFt
ZXRlcnM6CiAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90
b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFk
ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkJKHJldmlzaW9uIDIzNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKIGltcG9y
dCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBp
bXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwg
RW51bVR5cGUsIFBsYXRmb3JtcwotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVy
YXRvciwgam9pbl90eXBlX2FuZF9uYW1lCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBPYmpl
Y3RUeXBlLCBFbnVtVHlwZSwgUGxhdGZvcm1zCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQg
T2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwog
CiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNjAsOSArNjAsOSBAQAog
ICAgICAgICB9CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgp
Ci0gICAgICAgIHR5cGVfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBl
c19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBjb21tYW5kX2RvbWFpbnMgPSBmaWx0ZXIo
c2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAg
ICAgZXZlbnRfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9y
X2RvbWFpbiwgZG9tYWlucykKKyAgICAgICAgdHlwZV9kb21haW5zID0gbGlzdChmaWx0ZXIoc2Vs
Zi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIGNv
bW1hbmRfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRz
X2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBldmVudF9kb21haW5zID0gbGlzdChmaWx0
ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4sIGRvbWFpbnMpKQogCiAg
ICAgICAgICMgRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzgyMjI+IFdlYiBJbnNwZWN0
b3I6IFJlZHVjZSB1bm5lY2Vzc2FyeSBlbnVtcy90eXBlcyBnZW5lcmF0ZWQgaW4gT2JqQyBQcm90
b2NvbCBJbnRlcmZhY2VzCiAgICAgICAgICMgQ3VycmVudGx5IHdlIGdlbmVyYXRlIGVudW1zL3R5
cGVzIGZvciBhbGwgdHlwZXMgaW4gdGhlIHR5cGVfZG9tYWlucy4gRm9yIHRoZSBidWlsdC1pbgpA
QCAtNzIsMTQgKzcyLDE0IEBACiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUs
ICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRl
cihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9t
YWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGlu
IG1hcChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucywgdHlwZV9kb21haW5zKSBp
ZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9mb3Jf
cGxhdGZvcm1zKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5v
bmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSkpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVf
dHlwZXMsIHR5cGVfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9p
bihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSBp
ZiBfZl0pKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4g
bWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAKICAgICAg
ICAgaWYgc2VsZi5nZXRfZ2VuZXJhdG9yX3NldHRpbmcoJ2dlbmVyYXRlX2JhY2tlbmQnLCBGYWxz
ZSk6Ci0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUs
IG1hcChzZWxmLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scywgY29tbWFuZF9kb21haW5zKSkp
KQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBt
YXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfaW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykpKSkKKyAg
ICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChz
ZWxmLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scywgY29tbWFuZF9kb21haW5zKSBpZiBfZl0p
KQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKFtfZiBmb3IgX2YgaW4g
bWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpIGlmIF9m
XSkpCiAKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSGVh
ZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSkpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9p
bihzZWN0aW9ucykKQEAgLTE3MSw4ICsxNzEsOCBAQAogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdDsnKQogCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1l
bWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQot
ICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5p
c19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICByZXF1aXJlZF9t
ZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBp
ZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gW21l
bWJlciBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNf
b3B0aW9uYWxdCiAgICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6CiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMo
ZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycykpCiAgICAgICAgIGZvciBtZW1i
ZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5CShyZXZpc2lvbiAyMzQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksOSBA
QAogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1w
b3J0IE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBp
bXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2Jq
Q0dlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCiAKQEAgLTU1LDEyICs1NSwxMiBAQAogICAgICAgICAgICAgJ2luY2x1ZGVz
JzogJ1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhl
YWRlcnMpXSksCiAgICAgICAgIH0KIAotICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKHNl
bGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKSkKKyAgICAgICAgZXZlbnRfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxk
X2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkp
CiAKICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLkdlbmVyaWNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUs
IG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcywg
ZXZlbnRfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKFtf
ZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9p
bnRlcmZhY2VzLCBldmVudF9kb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5HZW5lcmljSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0
aW9ucykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CShy
ZXZpc2lvbiAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVy
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKIGltcG9ydCBzdHJpbmcKIGZy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yCi1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3Jtcwot
ZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBs
YXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm1vZGVscyBpbXBv
cnQgRW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworZnJvbSAub2JqY19nZW5lcmF0b3Ig
aW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHJldHVy
biAnJXNUeXBlQ29udmVyc2lvbnMuaCcgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVm
IGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5z
aG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5l
cmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBoZWFkZXJzID0g
WwpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2Jq
Q1RlbXBsYXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUs
ICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1Rl
bXBsYXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJTdGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkK
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9m
b3JfcGxhdGZvcm1zKCkpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJh
dGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25z
LmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25z
LCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxh
dGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVh
ZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkJ
KHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBs
ZW1lbnRhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiBpbXBvcnQg
c3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEFsaWFzZWRUeXBlLCBQcmltaXRpdmVUeXBlLCBGcmFtZXdvcmtzCi1mcm9tIG9i
amNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitm
cm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSAubW9kZWxzIGltcG9ydCBFbnVt
VHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgUHJpbWl0aXZlVHlwZSwg
RnJhbWV3b3JrcworZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zy
b20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQog
CkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHJldHVybiAnJXNUeXBlQ29udmVyc2lvbnMubW0n
ICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNl
bGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zv
cl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICBy
ZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwg
R2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRl
X291dHB1dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJv
dG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEw
ICsyOSwxMCBAQAogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAK
LWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGlt
cG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZSwgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRv
ciBpbXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBs
YXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLm1v
ZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIEZyYW1ld29ya3MKK2Zyb20gLm9iamNf
Z2VuZXJhdG9yIGltcG9ydCBPYmpDVHlwZUNhdGVnb3J5LCBPYmpDR2VuZXJhdG9yCitmcm9tIC5v
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
T2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAt
NTEsNyArNTEsNyBAQAogICAgICAgICByZXR1cm4gJyVzVHlwZXMubW0nICUgc2VsZi5wcm90b2Nv
bF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIEdlbmVy
YXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0
ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToK
ICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAg
IHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGlj
ZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5J
bXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0g
ICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0
aW9ucywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLmdl
bmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9p
bihzZWN0aW9ucykKIApAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9k
X2Zvcl9wYXlsb2FkKGRvbWFpbiwgZGVjbGFyYXRpb24pKQogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9wcm90b2NvbF9vYmplY3QoZG9tYWlu
LCBkZWNsYXJhdGlvbikpCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRh
IG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
KQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIGRlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAgICAgICBp
ZiByZXF1aXJlZF9tZW1iZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJl
ZF9tZW1iZXJzKGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQpAQCAtMTY3
LDcgKzE2Nyw3IEBACiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAgICAgICByZXF1aXJlZF9wb2ludGVyX21l
bWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNf
cG9pbnRlcl90eXBlKG1lbWJlci50eXBlKSwgcmVxdWlyZWRfbWVtYmVycykKKyAgICAgICAgcmVx
dWlyZWRfcG9pbnRlcl9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21l
bWJlcnMgaWYgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKG1lbWJlci50
eXBlKV0KICAgICAgICAgaWYgcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzOgogICAgICAgICAgICAg
Zm9yIG1lbWJlciBpbiByZXF1aXJlZF9wb2ludGVyX21lbWJlcnM6CiAgICAgICAgICAgICAgICAg
dmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1l
bWJlci5tZW1iZXJfbmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkJKHJldmlzaW9u
IDIzNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogaW1wb3J0
IHJlCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBp
bXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxp
YXNlZFR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworZnJvbSAuZ2VuZXJhdG9yX3RlbXBsYXRl
cyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSAubW9kZWxzIGlt
cG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlh
c2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQogCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogICAgICMgVGhlc2UgbWV0aG9kcyBh
cmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgogICAgIGRlZiBub25fc3VwcGxlbWVudGFsX2Rv
bWFpbnMoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbm90IGRv
bWFpbi5pc19zdXBwbGVtZW50YWwsIHNlbGYubW9kZWwoKS5kb21haW5zKQorICAgICAgICByZXR1
cm4gW2RvbWFpbiBmb3IgZG9tYWluIGluIHNlbGYubW9kZWwoKS5kb21haW5zIGlmIG5vdCBkb21h
aW4uaXNfc3VwcGxlbWVudGFsXQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6
CiAgICAgICAgIHJldHVybiBzZWxmLm5vbl9zdXBwbGVtZW50YWxfZG9tYWlucygpCkBAIC0xNzYs
NyArMTc2LDcgQEAKICAgICAgICAgZmllbGRzID0gc2V0KF9UWVBFU19XSVRIX09QRU5fRklFTERT
LmdldCh0eXBlX2RlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSwgW10pKQogICAgICAg
ICBpZiBub3QgZmllbGRzOgogICAgICAgICAgICAgcmV0dXJuIHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzCi0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLm1l
bWJlcl9uYW1lIGluIGZpZWxkcywgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAg
ICAgIHJldHVybiBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21l
bWJlcnMgaWYgbWVtYmVyLm1lbWJlcl9uYW1lIGluIGZpZWxkc10KIAogICAgIGRlZiB0eXBlX25l
ZWRzX3NoYXBlX2Fzc2VydGlvbnMoc2VsZiwgX3R5cGUpOgogICAgICAgICBpZiBub3QgaGFzYXR0
cihzZWxmLCAiX3R5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucyIpOgpAQCAtMTg5LDcgKzE4
OSw3IEBACiAgICAgIyBzZXQgb2YgdHlwZXMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSByZWdl
bmVyYXRlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIHRvCiAgICAgIyBHZW5lcmF0b3IudHlwZXNfbmVl
ZGluZ19zaGFwZV9hc3NlcnRpb25zKCkuCiAgICAgZGVmIGNhbGN1bGF0ZV90eXBlc19yZXF1aXJp
bmdfc2hhcGVfYXNzZXJ0aW9ucyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgZG9tYWluX25hbWVz
ID0gbWFwKGxhbWJkYSBkb21haW46IGRvbWFpbi5kb21haW5fbmFtZSwgZG9tYWlucykKKyAgICAg
ICAgZG9tYWluX25hbWVzID0gW2RvbWFpbi5kb21haW5fbmFtZSBmb3IgZG9tYWluIGluIGRvbWFp
bnNdCiAgICAgICAgIGxvZy5kZWJ1ZygiPiBDYWxjdWxhdGluZyB0eXBlcyB0aGF0IG5lZWQgc2hh
cGUgYXNzZXJ0aW9ucyAoZWxpZ2libGUgZG9tYWluczogJXMpIiAlICIsICIuam9pbihkb21haW5f
bmFtZXMpKQogCiAgICAgICAgICMgTXV0YXRlcyB0aGUgcGFzc2VkLWluIHNldDsgdGhpcyBzaW1w
bGlmaWVzIGNoZWNrcyB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbi4KQEAgLTI0NSw3ICsy
NDUsNyBAQAogICAgICAgICBmb3IgX3R5cGUgaW4gYWxsX3R5cGVzOgogICAgICAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgICAgICBjb250aW51
ZQotICAgICAgICAgICAgbWFwKHNlbGYuX2Fzc2lnbl9lbmNvZGluZ19mb3JfZW51bV92YWx1ZSwg
X3R5cGUuZW51bV92YWx1ZXMoKSkKKyAgICAgICAgICAgIGxpc3QobWFwKHNlbGYuX2Fzc2lnbl9l
bmNvZGluZ19mb3JfZW51bV92YWx1ZSwgX3R5cGUuZW51bV92YWx1ZXMoKSkpCiAKICAgICBkZWYg
X2Fzc2lnbl9lbmNvZGluZ19mb3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKICAgICAg
ICAgaWYgZW51bV92YWx1ZSBpbiBzZWxmLl9lbnVtX3ZhbHVlX2VuY29kaW5nczoKQEAgLTI3OSw3
ICsyNzksNyBAQAogICAgICAgICAgICAgcmV0dXJuIF9BTFdBWVNfU1BFQ0lBTENBU0VEX0VOVU1f
VkFMVUVfTE9PS1VQX1RBQkxFW21hdGNoLmdyb3VwKDEpLnVwcGVyKCldCiAKICAgICAgICAgIyBT
cGxpdCBvbiBoeXBoZW4sIGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBmb3JjZSB1cHBlcmNhc2lu
ZyBvZiBhY3Jvbnltcy4KLSAgICAgICAgc3Vid29yZHMgPSBtYXAodWNmaXJzdCwgX0VOVU1fSURF
TlRJRklFUl9SRU5BTUVfTUFQLmdldChlbnVtX3ZhbHVlLCBlbnVtX3ZhbHVlKS5zcGxpdCgnLScp
KQorICAgICAgICBzdWJ3b3JkcyA9IGxpc3QobWFwKHVjZmlyc3QsIF9FTlVNX0lERU5USUZJRVJf
UkVOQU1FX01BUC5nZXQoZW51bV92YWx1ZSwgZW51bV92YWx1ZSkuc3BsaXQoJy0nKSkpCiAgICAg
ICAgIHJldHVybiByZS5zdWIocmUuY29tcGlsZShyZWdleCwgcmUuSUdOT1JFQ0FTRSksIHJlcGxh
Y2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3JkcykpCiAKICAgICBAc3RhdGljbWV0aG9kCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vbW9kZWxzLnB5CShyZXZpc2lvbiAyMzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAKIAogCiBkZWYgZmluZF9kdXBsaWNhdGVzKGwpOgotICAgIHJldHVy
biBba2V5IGZvciBrZXksIGNvdW50IGluIGNvbGxlY3Rpb25zLkNvdW50ZXIobCkuaXRlbXMoKSBp
ZiBjb3VudCA+IDFdCisgICAgcmV0dXJuIFtrZXkgZm9yIGtleSwgY291bnQgaW4gbGlzdChjb2xs
ZWN0aW9ucy5Db3VudGVyKGwpLml0ZW1zKCkpIGlmIGNvdW50ID4gMV0KIAogCiBfRlJBTUVXT1JL
X0NPTkZJR19NQVAgPSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQko
cmV2aXNpb24gMjM0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0
LDggQEAKICMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgbG9nZ2lu
ZwotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMg
aW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFs
aWFzZWRUeXBlLCBGcmFtZXdvcmtzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTAsNyArNTAsNyBAQAogICAgICdpZCc6ICdp
ZGVudGlmaWVyJywgICMgUGFnZS5GcmFtZS5pZCwgUnVudGltZS5FeGVjdXRpb25Db250ZXh0RGVz
Y3JpcHRpb24uaWQsIERlYnVnZ2VyLkJyZWFrcG9pbnRBY3Rpb24uaWQKIH0KIAotX09CSkNfSURF
TlRJRklFUl9SRVZFUlNFX1JFTkFNRV9NQVAgPSBkaWN0KCh2LCBrKSBmb3IgaywgdiBpbiBfT0JK
Q19JREVOVElGSUVSX1JFTkFNRV9NQVAuaXRlcml0ZW1zKCkpCitfT0JKQ19JREVOVElGSUVSX1JF
VkVSU0VfUkVOQU1FX01BUCA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIF9PQkpDX0lERU5USUZJ
RVJfUkVOQU1FX01BUC5pdGVtcygpKQogCiAKIGNsYXNzIE9iakNUeXBlQ2F0ZWdvcnk6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc20ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtLnB5CShyZXZpc2lvbiAy
MzQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc20ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgIyBXZSBuZWVkIHRvIGRvIHRo
aXMgYmVjYXVzZSBweXRob24gaXMgZHVtYiBhbmQgd29uJ3QgbGV0IG1lIHVzZSBzZWxmIGluIHRo
ZSBsYW1iZGEsIHdoaWNoIGlzIHJpZGljdWxvdXMuCiAgICAgICAgIGlmIHJldCA9PSBOb25lOgog
ICAgICAgICAgICAgcmV0ID0gbGFtYmRhIG9wOiB7Im5hbWUiOiBvcCwgIm9wY29kZSI6IHNlbGYu
b3Bjb2Rlc1tvcF19Ci0gICAgICAgIGZvciBvcCBpbiBzZWxmLm9wY29kZXMuaXRlcmtleXMoKToK
KyAgICAgICAgZm9yIG9wIGluIHNlbGYub3Bjb2Rlcy5rZXlzKCk6CiAgICAgICAgICAgICBpZiBm
aWx0ZXIoc2VsZi5vcGNvZGVzW29wXSk6CiAgICAgICAgICAgICAgICAgeWllbGQgcmV0KG9wKQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9nZW5lcmF0ZVlhcnJDYW5vbmljYWxp
emVVbmljb2RlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL2dlbmVy
YXRlWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQg
c3lzCi1mcm9tIHNldHMgaW1wb3J0IFNldAogCiBoZWFkZXIgPSAiIiIvKgogKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNzgsMTEgKzc3LDIx
IEBACiAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKICAgICAgICAgaWYg
bm90IG9zLnBhdGguaXNkaXIoZGlybmFtZSk6CiAgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJu
YW1lKQotICAgICAgICByZXR1cm4gb3BlbihwYXRoLCBtb2RlKQorICAgICAgICBpZiBzeXMudmVy
c2lvbl9pbmZvLm1ham9yID09IDIgb3IgbW9kZSA9PSAid2IiIG9yIG1vZGUgPT0gInJiIjoKKyAg
ICAgICAgICAgIHJldHVybiBvcGVuKHBhdGgsIG1vZGUpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXR1cm4gb3BlbihwYXRoLCBtb2RlLCBlbmNvZGluZyA9ICJVVEYtOCIpCiAgICAgZXhj
ZXB0IElPRXJyb3IgYXMgZToKLSAgICAgICAgcHJpbnQgIkkvTyBlcnJvciBvcGVuaW5nIHswfSwg
KHsxfSk6IHsyfSIuZm9ybWF0KHBhdGgsIGUuZXJybm8sIGUuc3RyZXJyb3IpCisgICAgICAgIHBy
aW50KCJJL08gZXJyb3Igb3BlbmluZyB7MH0sICh7MX0pOiB7Mn0iLmZvcm1hdChwYXRoLCBlLmVy
cm5vLCBlLnN0cmVycm9yKSkKICAgICAgICAgZXhpdCgxKQogCitkZWYgZG93cml0ZShmaWxlLCBz
dHIpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgZmlsZS53
cml0ZShzdHIpCisgICAgZWxzZToKKyAgICAgICAgZmlsZS53cml0ZShieXRlcyhzdHIsICJ1dGYt
OCIpKQorCisKIGNsYXNzIENhbm9uaWNhbGl6ZToKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAg
ICAgICAgIHNlbGYuY2Fub25pY2FsR3JvdXBzID0ge307CkBAIC05Myw3ICsxMDIsNyBAQAogICAg
ICAgICBzZWxmLmNhbm9uaWNhbEdyb3Vwc1ttYXBwaW5nXS5hcHBlbmQoY29kZSkKICAgICAgICAg
CiAgICAgZGVmIHJlYWRDYXNlRm9sZGluZyhzZWxmLCBmaWxlKToKLSAgICAgICAgY29kZXNTZWVu
ID0gU2V0KCkKKyAgICAgICAgY29kZXNTZWVuID0gc2V0KCkKICAgICAgICAgZm9yIGxpbmUgaW4g
ZmlsZToKICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNwbGl0KCcjJywgMSlbMF0KICAgICAgICAg
ICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCkBAIC0xNTcsMjYgKzE2NiwyNiBAQAogICAgICAgICAg
ICAgc2V0ID0gY2hhcmFjdGVyU2V0c1tpXQogICAgICAgICAgICAgZm9yIGNoIGluIHNldDoKICAg
ICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gY2hhcmFjdGVycyArICIweHtjaGFyYWN0ZXI6MDR4
fSwgIi5mb3JtYXQoY2hhcmFjdGVyPWNoKQotICAgICAgICAgICAgZmlsZS53cml0ZSgiY29uc3Qg
VUNoYXIzMiB1bmljb2RlQ2hhcmFjdGVyU2V0e2luZGV4OmR9W10gPSB7eyB7Y2hhcmFjdGVyc30w
IH19O1xuIi5mb3JtYXQoaW5kZXg9aSwgY2hhcmFjdGVycz1jaGFyYWN0ZXJzKSkKKyAgICAgICAg
ICAgIGRvd3JpdGUoZmlsZSwgImNvbnN0IFVDaGFyMzIgdW5pY29kZUNoYXJhY3RlclNldHtpbmRl
eDpkfVtdID0ge3sge2NoYXJhY3RlcnN9MCB9fTtcbiIuZm9ybWF0KGluZGV4PWksIGNoYXJhY3Rl
cnM9Y2hhcmFjdGVycykpCiAKLSAgICAgICAgZmlsZS53cml0ZSgiXG4iKQotICAgICAgICBmaWxl
LndyaXRlKCJzdGF0aWMgY29uc3Qgc2l6ZV90IFVOSUNPREVfQ0FOT05JQ0FMSVpBVElPTl9TRVRT
ID0ge3NldENvdW50OmR9O1xuIi5mb3JtYXQoc2V0Q291bnQ9bGVuKGNoYXJhY3RlclNldHMpKSkK
LSAgICAgICAgZmlsZS53cml0ZSgiY29uc3QgVUNoYXIzMiogY29uc3QgdW5pY29kZUNoYXJhY3Rl
clNldEluZm9bVU5JQ09ERV9DQU5PTklDQUxJWkFUSU9OX1NFVFNdID0ge1xuIikKKyAgICAgICAg
ZG93cml0ZShmaWxlLCAiXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJzdGF0aWMgY29uc3Qg
c2l6ZV90IFVOSUNPREVfQ0FOT05JQ0FMSVpBVElPTl9TRVRTID0ge3NldENvdW50OmR9O1xuIi5m
b3JtYXQoc2V0Q291bnQ9bGVuKGNoYXJhY3RlclNldHMpKSkKKyAgICAgICAgZG93cml0ZShmaWxl
LCAiY29uc3QgVUNoYXIzMiogY29uc3QgdW5pY29kZUNoYXJhY3RlclNldEluZm9bVU5JQ09ERV9D
QU5PTklDQUxJWkFUSU9OX1NFVFNdID0ge1xuIikKIAogICAgICAgICBmb3IgaSBpbiByYW5nZShs
ZW4oY2hhcmFjdGVyU2V0cykpOgotICAgICAgICAgICAgZmlsZS53cml0ZSgiICAgIHVuaWNvZGVD
aGFyYWN0ZXJTZXR7c2V0TnVtYmVyOmR9LFxuIi5mb3JtYXQoc2V0TnVtYmVyPWkpKQorICAgICAg
ICAgICAgZG93cml0ZShmaWxlLCAiICAgIHVuaWNvZGVDaGFyYWN0ZXJTZXR7c2V0TnVtYmVyOmR9
LFxuIi5mb3JtYXQoc2V0TnVtYmVyPWkpKQogCi0gICAgICAgIGZpbGUud3JpdGUoIn07XG4iKQot
ICAgICAgICBmaWxlLndyaXRlKCJcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoImNvbnN0IHNpemVf
dCBVTklDT0RFX0NBTk9OSUNBTElaQVRJT05fUkFOR0VTID0ge3JhbmdlQ291bnQ6ZH07XG4iLmZv
cm1hdChyYW5nZUNvdW50PWxlbihyYW5nZUluZm8pKSkKLSAgICAgICAgZmlsZS53cml0ZSgiY29u
c3QgQ2Fub25pY2FsaXphdGlvblJhbmdlIHVuaWNvZGVSYW5nZUluZm9bVU5JQ09ERV9DQU5PTklD
QUxJWkFUSU9OX1JBTkdFU10gPSB7XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJ9O1xuIikK
KyAgICAgICAgZG93cml0ZShmaWxlLCAiXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJjb25z
dCBzaXplX3QgVU5JQ09ERV9DQU5PTklDQUxJWkFUSU9OX1JBTkdFUyA9IHtyYW5nZUNvdW50OmR9
O1xuIi5mb3JtYXQocmFuZ2VDb3VudD1sZW4ocmFuZ2VJbmZvKSkpCisgICAgICAgIGRvd3JpdGUo
ZmlsZSwgImNvbnN0IENhbm9uaWNhbGl6YXRpb25SYW5nZSB1bmljb2RlUmFuZ2VJbmZvW1VOSUNP
REVfQ0FOT05JQ0FMSVpBVElPTl9SQU5HRVNdID0ge1xuIikKIAogICAgICAgICBmb3IgaW5mbyBp
biByYW5nZUluZm86CiAgICAgICAgICAgICB0eXBlQW5kVmFsdWUgPSBpbmZvWyJ0eXBlIl0uc3Bs
aXQoIjoiKQotICAgICAgICAgICAgZmlsZS53cml0ZSgiICAgIHt7IDB4e2JlZ2luOjA0eH0sIDB4
e2VuZDowNHh9LCAweHt2YWx1ZTowNHh9LCB7dHlwZX0gfX0sXG4iLmZvcm1hdChiZWdpbj1pbmZv
WyJiZWdpbiJdLCBlbmQ9aW5mb1siZW5kIl0sIHZhbHVlPWludCh0eXBlQW5kVmFsdWVbMV0pLCB0
eXBlPXR5cGVBbmRWYWx1ZVswXSkpCisgICAgICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAge3sg
MHh7YmVnaW46MDR4fSwgMHh7ZW5kOjA0eH0sIDB4e3ZhbHVlOjA0eH0sIHt0eXBlfSB9fSxcbiIu
Zm9ybWF0KGJlZ2luPWluZm9bImJlZ2luIl0sIGVuZD1pbmZvWyJlbmQiXSwgdmFsdWU9aW50KHR5
cGVBbmRWYWx1ZVsxXSksIHR5cGU9dHlwZUFuZFZhbHVlWzBdKSkKIAotICAgICAgICBmaWxlLndy
aXRlKCJ9O1xuIikKLSAgICAgICAgZmlsZS53cml0ZSgiXG4iKQorICAgICAgICBkb3dyaXRlKGZp
bGUsICJ9O1xuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG4iKQogCiAgICAgICAgIAogaWYg
X19uYW1lX18gPT0gIl9fbWFpbl9fIjoKQEAgLTE5NCw5ICsyMDMsOSBAQAogICAgIGNhbm9uaWNh
bGl6ZSA9IENhbm9uaWNhbGl6ZSgpCiAgICAgY2Fub25pY2FsaXplLnJlYWRDYXNlRm9sZGluZyhj
YXNlRm9sZGluZ1R4dEZpbGUpCiAKLSAgICBjYW5vbmljYWxpemVIRmlsZS53cml0ZShoZWFkZXIp
OworICAgIGRvd3JpdGUoY2Fub25pY2FsaXplSEZpbGUsIGhlYWRlcikKICAgICBjYW5vbmljYWxp
emUuY3JlYXRlVGFibGVzKGNhbm9uaWNhbGl6ZUhGaWxlKQotICAgIGNhbm9uaWNhbGl6ZUhGaWxl
LndyaXRlKGZvb3Rlcik7CisgICAgZG93cml0ZShjYW5vbmljYWxpemVIRmlsZSwgZm9vdGVyKQog
CiAgICAgY2FzZUZvbGRpbmdUeHRGaWxlLmNsb3NlKCkKICAgICBjYW5vbmljYWxpemVIRmlsZS5j
bG9zZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjM0NTU1KQorKysgU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4NDksNyArMTg0
OSw3IEBACiApCiAKIHNldChCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUwotICAgICR7SmF2YVNj
cmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUn0vd2tidWlsdGlucy5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2J1aWx0aW5zX2dlbmVyYXRvci5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2J1aWx0aW5zX21vZGVsLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0v
YnVpbHRpbnNfdGVtcGxhdGVzLnB5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NyZWF0ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3JlYXRlLWh0dHAtaGVhZGVyLW5hbWUtdGFibGUJKHJl
dmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3JlYXRl
LWh0dHAtaGVhZGVyLW5hbWUtdGFibGUJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAK
IGh0dHBfaGVhZGVyX25hbWVfdG9faWQgPSB7IH0KIGh0dHBfaGVhZGVyX25hbWVzID0gW10KIAot
Zm9yIGxpbmUgaW4gaW5wdXRfZmlsZS54cmVhZGxpbmVzKCk6Citmb3IgbGluZSBpbiBpbnB1dF9m
aWxlOgogICAgIGh0dHBfaGVhZGVyX25hbWUgPSBsaW5lLnN0cmlwKCkKICAgICBpZiBub3QgaHR0
cF9oZWFkZXJfbmFtZSBvciBodHRwX2hlYWRlcl9uYW1lWzoyXSA9PSAnLy8nOgogICAgICAgICBj
b250aW51ZQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWlu
dGVyZmFjZS1yZXNvdXJjZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJ
L1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwJKHJldmlzaW9uIDIzNDU1
NSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2Ut
cmVzb3VyY2VzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNiArMTc2LDggQEAKIG15ICR0aHJl
ZWpzTGljZW5zZSA9IHJlYWRMaWNlbnNlRmlsZShGaWxlOjpTcGVjLT5jYXRmaWxlKCR0aHJlZWpz
UGF0aCwgJ0xJQ0VOU0UnKSk7CiBtYWtlX3BhdGgoJHByb3RvY29sRGlyLCAkdGFyZ2V0UmVzb3Vy
Y2VQYXRoKTsKIAorJHB5dGhvbiA9ICRFTlZ7IlBZVEhPTiJ9IGlmIGRlZmluZWQoJEVOVnsiUFlU
SE9OIn0pOworCiAjIENvcHkgb3ZlciBkeW5hbWljYWxseSBsb2FkZWQgZmlsZXMgZnJvbSBvdGhl
ciBmcmFtZXdvcmtzLCBldmVuIGlmIHdlIGFyZW4ndCBjb21iaW5pbmcgcmVzb3VyY2VzLgogY29w
eShGaWxlOjpTcGVjLT5jYXRmaWxlKCRFTlZ7J0pBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVS
U19ESVInfSwgJ0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcycpLCBGaWxlOjpTcGVjLT5jYXRm
aWxlKCRwcm90b2NvbERpciwgJ0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcycpKSBvciBkaWUg
IkNvcHkgb2YgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIGZhaWxlZDogJCEiOwogCkluZGV4
OiBTb3VyY2UvY21ha2UvV2ViS2l0Q29tbW9uLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9j
bWFrZS9XZWJLaXRDb21tb24uY21ha2UJKHJldmlzaW9uIDIzNDU1NSkKKysrIFNvdXJjZS9jbWFr
ZS9XZWJLaXRDb21tb24uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTIxLDkgKzIxLDYgQEAKICAg
ICBmaW5kX3BhY2thZ2UoUGVybE1vZHVsZXMgQ09NUE9ORU5UUyBKU09OOjpQUCBSRVFVSVJFRCkK
IAogICAgIGZpbmRfcGFja2FnZShQeXRob25JbnRlcnAgMi43LjAgUkVRVUlSRUQpCi0gICAgaWYg
KFBZVEhPTl9WRVJTSU9OX01BSk9SIEdSRUFURVIgMikKLSAgICAgICAgbWVzc2FnZShGQVRBTF9F
UlJPUiAiUHl0aG9uIDIgaXMgcmVxdWlyZWQsIGJ1dCBQeXRob24gJHtQWVRIT05fVkVSU0lPTl9N
QUpPUn0gd2FzIGZvdW5kLiIpCi0gICAgZW5kaWYgKCkKIAogICAgICMgV2UgY2Fubm90IGNoZWNr
IGZvciBSVUJZX0ZPVU5EIGJlY2F1c2UgaXQgaXMgc2V0IG9ubHkgd2hlbiB0aGUgZnVsbCBwYWNr
YWdlIGlzIGluc3RhbGxlZCBhbmQKICAgICAjIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgaXMgdGhl
IGludGVycHJldGVyLiBVbmxpa2UgUHl0aG9uLCBjbWFrZSBkb2VzIG5vdCBwcm92aWRlIGEgbWFj
cm8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>347950</attachid>
            <date>2018-08-23 14:01:01 -0700</date>
            <delta_ts>2018-08-27 09:51:05 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>python3.patch</filename>
            <type>text/plain</type>
            <size>196159</size>
            <attacher name="Mike Gorse">mgorse</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDIzNTIz
NykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE4LTA4
LTIzICBNaWtlIEdvcnNlICA8bWdvcnNlQHN1c2UuY29tPgorCisgICAgICAgIEJ1aWxkIHRvb2xz
IHNob3VsZCB3b3JrIHdoZW4gdGhlIC91c3IvYmluL3B5dGhvbiBpcyBweXRob24zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NzQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9X
ZWJLaXRDb21tb24uY21ha2U6IGJ1aWx0aW5zIC0+IHdrYnVpbHRpbnMsIHRvIGF2b2lkCisgICAg
ICAgICAgY29uZmxpY3Qgd2l0aCBidWlsdC1pbiBweXRob24gMyBwYWNrYWdlLgorCiAyMDE4LTA4
LTIyICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBb
TVNWQ10gU3RvcCBkaXNhYmxpbmcgL08yIGZlYXR1cmVzLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDggQEAKIHNl
dChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX1NPVVJDRVNfUEFUSFMKICAgICAke0phdmFTY3JpcHRD
b3JlX1NDUklQVFNfU09VUkNFU19ESVJ9LyoucGwKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQ
VFNfU09VUkNFU19ESVJ9LyoucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfU09VUkNF
U19ESVJ9L2J1aWx0aW5zL2J1aWx0aW5zKi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBU
U19TT1VSQ0VTX0RJUn0vd2tidWlsdGlucy9idWlsdGlucyoucHkKKyAgICAke0phdmFTY3JpcHRD
b3JlX1NDUklQVFNfU09VUkNFU19ESVJ9L3drYnVpbHRpbnMvd2tidWlsdGlucy5weQogKQogCiAj
IEZvcmNlIEphdmFTY3JpcHRDb3JlIHRvIHJ1biBzY3JpcHRzIGZyb20gdGhlIHNhbWUgc3RhZ2lu
ZyBwYXRoIGFzIFdlYkNvcmUuCkBAIC0xMDg1LDcgKzEwODYsNyBAQAogIyBKU0NCdWlsdGlucwog
CiBzZXQoQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMKLSAgICAke0phdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSfS9idWlsdGlucy5weQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9
L3drYnVpbHRpbnMucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlu
c19nZW5lcmF0b3IucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlu
c19tb2RlbC5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX3Rl
bXBsYXRlcy5weQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzUyNDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTE3IEBACisyMDE4LTA4LTIzICBNaWtlIEdvcnNlICA8bWdvcnNlQHN1c2UuY29tPgor
CisgICAgICAgIEJ1aWxkIHRvb2xzIHNob3VsZCB3b3JrIHdoZW4gdGhlIC91c3IvYmluL3B5dGhv
biBpcyBweXRob24zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTY2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFNjcmlwdHMvYnVpbHRpbnM6IFJlbW92
ZWQuCisgICAgICAgICogU2NyaXB0cy9jc3NtaW4ucHk6CisgICAgICAgICogU2NyaXB0cy9nZW5l
cmF0ZS1qcy1idWlsdGlucy5weToKKyAgICAgICAgKGRvb3Blbik6CisgICAgICAgIChnZW5lcmF0
ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMpOgorICAgICAgICAqIFNjcmlwdHMvZ2VuZXJh
dGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHk6CisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0
ZVlhcnJVbmljb2RlUHJvcGVydHlUYWJsZXMucHk6CisgICAgICAgICogU2NyaXB0cy9oYXNoZXIu
cHk6CisgICAgICAgIChzdHJpbmdIYXNoKToKKyAgICAgICAgKiBTY3JpcHRzL2pzbWluLnB5Ogor
ICAgICAgICAoSmF2YXNjcmlwdE1pbmlmeS5taW5pZnkud3JpdGUpOgorICAgICAgICAoSmF2YXNj
cmlwdE1pbmlmeSk6CisgICAgICAgIChKYXZhc2NyaXB0TWluaWZ5Lm1pbmlmeSk6CisgICAgICAg
ICogU2NyaXB0cy9tYWtlLWpzLWZpbGUtYXJyYXlzLnB5OgorICAgICAgICAoY2h1bmspOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogU2NyaXB0cy93a2J1aWx0aW5zOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy4KKyAgICAgICAgKiBTY3JpcHRz
L3drYnVpbHRpbnMvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93a2J1aWx0aW5zL2J1
aWx0aW5zLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2tidWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHk6CisgICAgICAgIChnZW5lcmF0ZV9zZWN0aW9u
X2Zvcl9nbG9iYWxfcHJpdmF0ZV9jb2RlX25hbWVfbWFjcm8pOgorICAgICAgICAqIFNjcmlwdHMv
d2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHk6
CisgICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IuX19pbml0
X18pOgorICAgICAgICAqIFNjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKEJ1aWx0aW5zSW50ZXJu
YWxzV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBT
Y3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHk6CisgICAgICAgIChCdWlsdGluRnVu
Y3Rpb24uX19sdF9fKToKKyAgICAgICAgKEJ1aWx0aW5zQ29sbGVjdGlvbi5jb3B5cmlnaHRzKToK
KyAgICAgICAgKEJ1aWx0aW5zQ29sbGVjdGlvbi5fcGFyc2VfZnVuY3Rpb25zKToKKyAgICAgICAg
KiBTY3JpcHRzL3drYnVpbHRpbnMvd2tidWlsdGlucy5weTogQ29waWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkuCisgICAgICAgICogZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9vcGNvZGUucHk6CisgICAgICAgIChVZE9wY29kZVRhYmxlcy5w
cHJpbnQucHJpbnRXYWxrKToKKyAgICAgICAgKiBnZW5lcmF0ZS1ieXRlY29kZS1maWxlczoKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5OgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAg
ICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9v
dXRwdXQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoQ3Bw
RnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAo
Q3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9w
cm90b2NvbF90eXBlc19oZWFkZXIucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1w
bGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9y
X2RvbWFpbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2VudW1fbWFwcGluZ19hbmRfY29udmVyc2lvbl9tZXRob2RzKToKKyAgICAg
ICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Bl
bl9maWVsZF9uYW1lcyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9y
X29iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5OgorICAgICAgICAoSlNCYWNrZW5kQ29t
bWFuZHNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbik6CisgICAgICAgIChKU0JhY2tl
bmRDb21tYW5kc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKEpTQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChKU0JhY2tl
bmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToK
KyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRv
bWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2Nr
X2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHk6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24u
cHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDRnJvbnRl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
Z2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk6CisgICAgICAgIChPYmpDSGVh
ZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZSk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weToKKyAgICAgICAgKE9i
akNJbnRlcm5hbEhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZl
cnNpb25zX2hlYWRlci5weToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hl
YWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
X2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlw
ZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9i
akNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToK
KyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJh
dGVfdHlwZV9pbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVt
YmVycyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHk6
CisgICAgICAgIChHZW5lcmF0b3Iubm9uX3N1cHBsZW1lbnRhbF9kb21haW5zKToKKyAgICAgICAg
KEdlbmVyYXRvci5vcGVuX2ZpZWxkcyk6CisgICAgICAgIChHZW5lcmF0b3IuY2FsY3VsYXRlX3R5
cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKToKKyAgICAgICAgKEdlbmVyYXRvci5fdHJh
dmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcyk6CisgICAgICAgIChHZW5lcmF0b3Iuc3R5bGl6
ZWRfbmFtZV9mb3JfZW51bV92YWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9tb2RlbHMucHk6CisgICAgICAgIChmaW5kX2R1cGxpY2F0ZXMpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHk6CisgICAgICAgICogd2Fz
bS9nZW5lcmF0ZVdhc20ucHk6CisgICAgICAgIChvcGNvZGVJdGVyYXRvcik6CisgICAgICAgICog
eWFyci9nZW5lcmF0ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlOgorCiAyMDE4LTA4LTIzICBNaWNo
YWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFlBUlI6IE5lZWQgdG8g
SklUIGNvbXBpbGUgYSBSZWdFeHAgYmVmb3JlIHVzaW5nIGNvbnRhaW5zTmVzdGVkU3VicGF0dGVy
bnMgZmxhZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvX19p
bml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVp
bHRpbnMvX19pbml0X18ucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2J1aWx0aW5zL19faW5pdF9fLnB5CShub25leGlzdGVudCkKQEAgLTEsMyAr
MCwwIEBACi0jIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZv
ciBtb2R1bGUgZmlsZXMKLQotZnJvbSBidWlsdGlucyBpbXBvcnQgKgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkJKHJldmlz
aW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1
aWx0aW5zLnB5CShub25leGlzdGVudCkKQEAgLTEsMTUgKzAsMCBAQAotIyBUaGlzIGZpbGUgaXMg
dXNlZCB0byBzaW11bGF0ZSB0aGUgYnVpbHRpbnMvIGRpcmVjdG9yeSB3aGVuIGdlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5Ci0jIGlzIHJ1biBmcm9tIEphdmFTY3JpcHRDb3JlIGZyYW1ld29yaydzIHBy
aXZhdGUgaGVhZGVycyBkaXJlY3RvcnksIHdoaWNoIGlzIGZsYXR0ZW5lZC4KLQotZnJvbSBidWls
dGluc19tb2RlbCBpbXBvcnQgKgotZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0ICoKLQot
ZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0ICoKLWZyb20gYnVpbHRpbnNfZ2VuZXJhdGVf
Y29tYmluZWRfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVk
X2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRl
X2hlYWRlciBpbXBvcnQgKgotZnJvbSBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgotZnJvbSBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlciBp
bXBvcnQgKgotZnJvbSBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uIGlt
cG9ydCAqCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlciBp
bXBvcnQgKgotZnJvbSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRl
X2NvbWJpbmVkX2hlYWRlci5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVy
LnB5CShub25leGlzdGVudCkKQEAgLTEsMTcxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhv
bgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0j
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLWltcG9ydCBzdHJpbmcKLWZyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVp
bHRpbnNHZW5lcmF0b3IKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dl
bmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
J2dsb2JhbCcpCi0KLQotY2xhc3MgQnVpbHRpbnNDb21iaW5lZEhlYWRlckdlbmVyYXRvcihCdWls
dGluc0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKLSAgICAgICAg
QnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0KLSAgICBkZWYgb3V0cHV0
X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVzQnVpbHRpbnMuaCIgJSBzZWxmLm1v
ZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpCi0KLSAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ25hbWVzcGFjZSc6
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyksCi0gICAgICAgICAg
ICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3By
ZWZpeCcpLAotICAgICAgICB9Ci0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdz
KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5IZWFkZXJJbmNs
dWRlR3VhcmQpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAg
ICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgotICAgICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KG9iamVjdCkpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfdGFi
bGVfbWFjcm8oKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlv
bl9mb3JfY29kZV9uYW1lX21hY3JvKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdl
bmVyYXRlX3NlY3Rpb25fZm9yX2dsb2JhbF9wcml2YXRlX2NvZGVfbmFtZV9tYWNybygpKQotICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNvbWJpbmVkSGVhZGVyU3Rh
dGljTWFjcm9zKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkKLQotICAg
ICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfZm9y
d2FyZF9kZWNsYXJhdGlvbnMoc2VsZik6Ci0gICAgICAgIHJldHVybiAiIiJuYW1lc3BhY2UgSlND
IHsKLWNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKLWNsYXNzIFZNOwotCi1lbnVtIGNsYXNzIENv
bnN0cnVjdEFiaWxpdHkgOiB1bnNpZ25lZDsKLX0iIiIKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0
aW9uX2Zvcl9vYmplY3Qoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIG9iamVjdC5vYmplY3RfbmFtZSkKLSAgICAgICAg
bGluZXMuZXh0ZW5kKHNlbGYuZ2VuZXJhdGVfZXh0ZXJuc19mb3Jfb2JqZWN0KG9iamVjdCkpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgiIikKLSAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2VuZXJh
dGVfbWFjcm9zX2Zvcl9vYmplY3Qob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKLQotICAgIGRlZiBnZW5lcmF0ZV9leHRlcm5zX2Zvcl9vYmplY3Qoc2VsZiwgb2JqZWN0
KToKLSAgICAgICAgbGluZXMgPSBbXQotCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBvYmplY3Qu
ZnVuY3Rpb25zOgotICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsKLSAgICAgICAgICAgICAg
ICAnY29kZU5hbWUnOiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1
bmN0aW9uKSArICdDb2RlJywKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCIiImV4dGVybiBjb25zdCBjaGFyKiBzXyUoY29kZU5hbWUpczsKLWV4dGVybiBjb25zdCBp
bnQgc18lKGNvZGVOYW1lKXNMZW5ndGg7Ci1leHRlcm4gY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmls
aXR5IHNfJShjb2RlTmFtZSlzQ29uc3RydWN0QWJpbGl0eTsiIiIgJSBmdW5jdGlvbl9hcmdzKQot
Ci0gICAgICAgIHJldHVybiBsaW5lcwotCi0gICAgZGVmIGdlbmVyYXRlX21hY3Jvc19mb3Jfb2Jq
ZWN0KHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbWFjcm9Q
cmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpLAot
ICAgICAgICAgICAgJ29iamVjdE1hY3JvJzogb2JqZWN0Lm9iamVjdF9uYW1lLnJlcGxhY2UoJy4n
LCAnJykudXBwZXIoKSwKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
bGluZXMuYXBwZW5kKCIjZGVmaW5lICUobWFjcm9QcmVmaXgpc19GT1JFQUNIXyUob2JqZWN0TWFj
cm8pc19CVUlMVElOX0RBVEEobWFjcm8pIFxcIiAlIGFyZ3MpCi0gICAgICAgIGZvciBmdW5jdGlv
biBpbiBvYmplY3QuZnVuY3Rpb25zOgotICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsKLSAg
ICAgICAgICAgICAgICAnZnVuY05hbWUnOiBmdW5jdGlvbi5mdW5jdGlvbl9uYW1lLAotICAgICAg
ICAgICAgICAgICdtYW5nbGVkTmFtZSc6IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9y
RnVuY3Rpb24oZnVuY3Rpb24pLAotICAgICAgICAgICAgICAgICdwYXJhbUNvdW50JzogbGVuKGZ1
bmN0aW9uLnBhcmFtZXRlcnMpLAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoIiAgICBtYWNybyglKGZ1bmNOYW1lKXMsICUobWFuZ2xlZE5hbWUpcywgJShwYXJhbUNv
dW50KWQpIFxcIiAlIGZ1bmN0aW9uX2FyZ3MpCi0gICAgICAgIHJldHVybiBsaW5lcwotCi0gICAg
ZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfdGFibGVfbWFjcm8oc2VsZik6Ci0gICAgICAg
IGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpLAotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoIiNkZWZpbmUgJShtYWNyb1ByZWZpeClzX0ZPUkVB
Q0hfQlVJTFRJTl9DT0RFKG1hY3JvKSBcXCIgJSBhcmdzKQotICAgICAgICBmb3IgZnVuY3Rpb24g
aW4gc2VsZi5tb2RlbCgpLmFsbF9mdW5jdGlvbnMoKToKLSAgICAgICAgICAgIGZ1bmN0aW9uX2Fy
Z3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2Z1bmNOYW1lJzogZnVuY3Rpb24uZnVuY3Rpb25fbmFt
ZSwKLSAgICAgICAgICAgICAgICAnb3ZlcnJpZGRlbk5hbWUnOiBmdW5jdGlvbi5vdmVycmlkZGVu
X25hbWUsCi0gICAgICAgICAgICAgICAgJ2NvZGVOYW1lJzogQnVpbHRpbnNHZW5lcmF0b3IubWFu
Z2xlZE5hbWVGb3JGdW5jdGlvbihmdW5jdGlvbikgKyAnQ29kZScsCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIG1hY3JvKCUoY29kZU5hbWUpcywgJShmdW5j
TmFtZSlzLCAlKG92ZXJyaWRkZW5OYW1lKXMsIHNfJShjb2RlTmFtZSlzTGVuZ3RoKSBcXCIgJSBm
dW5jdGlvbl9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVm
IGdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfbmFtZV9tYWNybyhzZWxmKToKLSAgICAgICAgYXJn
cyA9IHsKLSAgICAgICAgICAgICdtYWNyb1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
c2V0dGluZygnbWFjcm9fcHJlZml4JyksCi0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbF9m
dW5jdGlvbl9uYW1lcyA9IFtmdW5jdGlvbi5mdW5jdGlvbl9uYW1lIGZvciBmdW5jdGlvbiBpbiBz
ZWxmLm1vZGVsKCkuYWxsX2ludGVybmFsX2Z1bmN0aW9ucygpXQotICAgICAgICBpZiBsZW4oaW50
ZXJuYWxfZnVuY3Rpb25fbmFtZXMpICE9IGxlbihzZXQoaW50ZXJuYWxfZnVuY3Rpb25fbmFtZXMp
KToKLSAgICAgICAgICAgIGxvZy5lcnJvcigiVGhlcmUgYXJlIHNldmVyYWwgaW50ZXJuYWwgZnVu
Y3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZS4gUHJpdmF0ZSBpZGVudGlmaWVycyBtYXkgY2xhc2gu
IikKLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAl
KG1hY3JvUHJlZml4KXNfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX05BTUUobWFjcm8pIFxcIiAl
IGFyZ3MpCi0gICAgICAgIHVuaXF1ZV9uYW1lcyA9IGxpc3Qoc2V0KFtmdW5jdGlvbi5mdW5jdGlv
bl9uYW1lIGZvciBmdW5jdGlvbiBpbiBzZWxmLm1vZGVsKCkuYWxsX2Z1bmN0aW9ucygpXSkpCi0g
ICAgICAgIHVuaXF1ZV9uYW1lcy5zb3J0KCkKLSAgICAgICAgZm9yIGZ1bmN0aW9uX25hbWUgaW4g
dW5pcXVlX25hbWVzOgotICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsKLSAgICAgICAgICAg
ICAgICAnZnVuY05hbWUnOiBmdW5jdGlvbl9uYW1lLAotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoIiAgICBtYWNybyglKGZ1bmNOYW1lKXMpIFxcIiAlIGZ1bmN0aW9u
X2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJh
dGVfc2VjdGlvbl9mb3JfZ2xvYmFsX3ByaXZhdGVfY29kZV9uYW1lX21hY3JvKHNlbGYpOgotICAg
ICAgICBhcmdzID0gewotICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdtYWNyb19wcmVmaXgnKSwKLSAgICAgICAgfQotCi0gICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCIjZGVmaW5lICUobWFjcm9QcmVmaXgpc19G
T1JFQUNIX0JVSUxUSU5fRlVOQ1RJT05fUFJJVkFURV9HTE9CQUxfTkFNRShtYWNybykgXFwiICUg
YXJncykKLSAgICAgICAgZnVuY3Rpb25zID0gZmlsdGVyKGxhbWJkYSBmdW5jdGlvbjogZnVuY3Rp
b24uaXNfZ2xvYmFsX3ByaXZhdGUsIHNlbGYubW9kZWwoKS5hbGxfZnVuY3Rpb25zKCkpCi0gICAg
ICAgIGZ1bmN0aW9ucy5zb3J0KGtleT1sYW1iZGEgeDogeC5mdW5jdGlvbl9uYW1lKQotICAgICAg
ICBmb3IgZnVuY3Rpb24gaW4gZnVuY3Rpb25zOgotICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9
IHsKLSAgICAgICAgICAgICAgICAnZnVuY05hbWUnOiBmdW5jdGlvbi5mdW5jdGlvbl9uYW1lLAot
ICAgICAgICAgICAgICAgICdjb2RlTmFtZSc6IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1l
Rm9yRnVuY3Rpb24oZnVuY3Rpb24pLAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoIiAgICBtYWNybyglKGZ1bmNOYW1lKXMsICUoY29kZU5hbWUpcykgXFwiICUgZnVu
Y3Rpb25fYXJncykKLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmV4
ZWN1dGFibGUKIyMgLTEgKzAsMCAjIwotKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19n
ZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5l
ZF9pbXBsZW1lbnRhdGlvbi5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaW1wbGVt
ZW50YXRpb24ucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDAgKzAsMCBAQAotIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0j
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLWltcG9ydCBzdHJpbmcK
LWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBp
bXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IKLWZyb20gYnVpbHRpbnNfbW9kZWwgaW1wb3J0IEZyYW1l
d29yaywgRnJhbWV3b3JrcwotZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5z
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKLQotCi1jbGFzcyBCdWlsdGluc0NvbWJpbmVkSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6
Ci0gICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQotCi0gICAg
ZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICIlc0J1aWx0aW5zLmNw
cCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpCi0KLSAgICBk
ZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAg
J25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyks
Ci0gICAgICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRp
bmcoJ21hY3JvX3ByZWZpeCcpLAotICAgICAgICB9Ci0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vi
c3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfcHJp
bWFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpKQotICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRvcCkuc3Vic3RpdHV0ZShhcmdzKSkKLSAg
ICAgICAgZm9yIGZ1bmN0aW9uIGluIHNlbGYubW9kZWwoKS5hbGxfZnVuY3Rpb25zKCk6Ci0gICAg
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9lbWJlZGRlZF9jb2RlX3N0cmlu
Z19zZWN0aW9uX2Zvcl9mdW5jdGlvbihmdW5jdGlvbikpCi0gICAgICAgIGlmIHNlbGYubW9kZWwo
KS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZToKLSAgICAgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ29tYmluZWRKU0NJbXBsZW1lbnRhdGlv
blN0YXRpY01hY3Jvcykuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgZWxpZiBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2ViQ29yZToKLSAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ29tYmluZWRXZWJDb3JlSW1wbGVtZW50YXRpb25T
dGF0aWNNYWNyb3MpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQotCi0g
ICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV9z
ZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgotICAgICAgICBoZWFkZXJfaW5jbHVkZXMg
PSBbCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJdLAotICAgICAgICAgICAgICAgICgi
SmF2YVNjcmlwdENvcmUiLCAiYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmgiKSwKLSAgICAg
ICAgICAgICksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJDb3JlIl0sCi0g
ICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJoZWFwL0hlYXBJbmxpbmVzLmgiKSwK
LSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJDb3Jl
Il0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoWyJK
YXZhU2NyaXB0Q29yZSIsICJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0
Q29yZSIsICJydW50aW1lL0pTQ2VsbElubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAg
ICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwg
InJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAg
ICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVu
dGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAg
KFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNj
cmlwdENvcmUiLCAicnVudGltZS9WTS5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAg
KFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNj
cmlwdENvcmUiLCAicnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oIiksCi0gICAgICAgICAgICAp
LAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAg
ICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9JbnRyaW5zaWMuaCIpLAotICAgICAg
ICAgICAgKSwKLSAgICAgICAgXQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5l
cmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9o
ZWFkZXIucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5w
eQkobm9uZXhpc3RlbnQpCkBAIC0xLDExMyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24K
LSMKLSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dp
bmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRv
ciBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IsIFdLX2xjZmlyc3QsIFdLX3VjZmlyc3QKLWZyb20g
YnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3Mg
QnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9y
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgotICAgICAgICBCdWlsdGluc0dlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCkKLSAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBmaWx0
ZXIobGFtYmRhIG9iamVjdDogJ2ludGVybmFsJyBpbiBvYmplY3QuYW5ub3RhdGlvbnMsIG1vZGVs
Lm9iamVjdHMpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1
cm4gIiVzSlNCdWlsdGluSW50ZXJuYWxzLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCduYW1lc3BhY2UnKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAg
ICAgYXJncyA9IHsKLSAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpLAotICAgICAgICB9Ci0KLSAgICAgICAgc2VjdGlvbnMg
PSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2Fybmlu
Zykuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5IZWFkZXJJbmNsdWRlR3VhcmQpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkK
LQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRv
cCkuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfc2VjdGlvbl9mb3Jfb2JqZWN0KCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQotCi0gICAgICAg
IHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRh
cnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgotICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCi0g
ICAgICAgICAgICAoWyJXZWJDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUiLCAiaGVhcC9XZWFrSW5s
aW5lcy5oIikpLAotICAgICAgICAgICAgKFsiV2ViQ29yZSJdLCAoIkphdmFTY3JpcHRDb3JlIiwg
InJ1bnRpbWUvVk0uaCIpKQotICAgICAgICBdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5p
bnRlcm5hbHM6Ci0gICAgICAgICAgICBoZWFkZXJfaW5jbHVkZXMuYXBwZW5kKChbIldlYkNvcmUi
XSwgKCJXZWJDb3JlIiwgb2JqZWN0Lm9iamVjdF9uYW1lICsgIkJ1aWx0aW5zLmgiKSkpCi0KLSAg
ICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmll
cyhoZWFkZXJfaW5jbHVkZXMpKQotCi0gICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVj
dChzZWxmKToKLSAgICAgICAgbGluZXMgPSBbImNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OyIsCi0g
ICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAiY2xhc3MgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnMgeyIsCi0gICAgICAgICAgICAgICAgICJwdWJsaWM6Il0KLQotICAgICAg
ICBsaW5lcy5hcHBlbmQoIiAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhK
U0M6OlZNJik7IikKLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWV0aG9kcygp
KQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9hY2Nlc3NvcnMoKSkKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCJwcml2YXRlOiIpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdl
bmVyYXRlX21lbWJlcnMoKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCJ9OyIpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgYWNjZXNzb3JfbmFtZShzZWxmLCBvYmpl
Y3QpOgotICAgICAgICByZXR1cm4gV0tfbGNmaXJzdChvYmplY3Qub2JqZWN0X25hbWUpCi0KLSAg
ICBkZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgcmV0dXJuICJtXyIgKyBz
ZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KQotCi0gICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9i
amVjdCk6Ci0gICAgICAgIHJldHVybiBXS191Y2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAi
QnVpbHRpbkZ1bmN0aW9ucyIKLQotICAgIGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYpOgotICAg
ICAgICByZXR1cm4gIiIiCi0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7Ci0gICAg
dm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0iIiIKLQotICAgIGRlZiBnZW5l
cmF0ZV9hY2Nlc3NvcnMoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIG9i
amVjdCBpbiBzZWxmLmludGVybmFsczoKLSAgICAgICAgICAgIGFjY2Vzc29yID0gIiAgICAlcyYg
JXMoKSB7IHJldHVybiAlczsgfSIgJSAoc2VsZi5tZW1iZXJfdHlwZShvYmplY3QpLCBzZWxmLmFj
Y2Vzc29yX25hbWUob2JqZWN0KSwgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpKQotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3Qu
YW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBhY2Nlc3NvcikpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgiIikKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBn
ZW5lcmF0ZV9tZW1iZXJzKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsiICAgIEpTQzo6Vk0mIG1f
dm07Il0KLSAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKLSAgICAgICAgICAg
IG1lbWJlciA9ICIgICAgJXMgJXM7IiAlIChzZWxmLm1lbWJlcl90eXBlKG9iamVjdCksIHNlbGYu
bWVtYmVyX25hbWUob2JqZWN0KSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dl
bmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9u
YWwnKSwgbWVtYmVyKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICswLDAgIyMKLSoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMv
YnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkJKHJldmlzaW9u
IDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CShub25leGlz
dGVudCkKQEAgLTEsMTU2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5
cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBC
dWlsdGluc0dlbmVyYXRvciwgV0tfbGNmaXJzdCwgV0tfdWNmaXJzdAotZnJvbSBidWlsdGluc190
ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwot
Ci1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBCdWlsdGluc0lu
dGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKLSAgICAgICAgQnVpbHRpbnNHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0gICAgICAgIHNlbGYuaW50ZXJuYWxzID0gZmlsdGVy
KGxhbWJkYSBvYmplY3Q6ICdpbnRlcm5hbCcgaW4gb2JqZWN0LmFubm90YXRpb25zLCBtb2RlbC5v
YmplY3RzKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJu
ICIlc0pTQnVpbHRpbkludGVybmFscy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCduYW1lc3BhY2UnKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAg
ICAgYXJncyA9IHsKLSAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpLAotICAgICAgICB9Ci0KLSAgICAgICAgc2VjdGlvbnMg
PSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2Fybmlu
Zykuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfcHJpbWFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpKQotCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFy
Z3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9v
YmplY3QoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1l
c3BhY2VCb3R0b20pLnN1YnN0aXR1dGUoYXJncykpCi0KLSAgICAgICAgcmV0dXJuICJcblxuIi5q
b2luKHNlY3Rpb25zKQotCi0gICAgZGVmIGdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVk
ZXMoc2VsZik6Ci0gICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIldl
YkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIldlYkNvcmUiLCAiSlNET01HbG9iYWxPYmplY3Qu
aCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAg
ICAgICAgICAoIldlYkNvcmUiLCAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIiksCi0gICAgICAgICAg
ICApLAotICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNj
cmlwdENvcmUiLCAiaGVhcC9IZWFwSW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAg
ICAgICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAi
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAg
IChbIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChb
IldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICBdCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVh
ZGVyX2luY2x1ZGVzKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2Vs
Zik6Ci0gICAgICAgIGxpbmVzID0gW10KLQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9jb25zdHJ1Y3RvcigpKQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV92
aXNpdF9tZXRob2QoKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfaW5pdGlh
bGl6ZV9tZXRob2QoKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRl
ZiBhY2Nlc3Nvcl9uYW1lKHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIHJldHVybiBXS19sY2ZpcnN0
KG9iamVjdC5vYmplY3RfbmFtZSkKLQotICAgIGRlZiBtZW1iZXJfbmFtZShzZWxmLCBvYmplY3Qp
OgotICAgICAgICByZXR1cm4gIm1fIiArIHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpCi0KLSAg
ICBkZWYgbWVtYmVyX3R5cGUoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgcmV0dXJuIFdLX3VjZmly
c3Qob2JqZWN0Lm9iamVjdF9uYW1lKSArICJCdWlsdGluRnVuY3Rpb25zIgotCi0gICAgZGVmIGdl
bmVyYXRlX2NvbnN0cnVjdG9yKHNlbGYpOgotICAgICAgICBndWFyZHMgPSBzZXQoW29iamVjdC5h
bm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJykgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFs
cyBpZiAnY29uZGl0aW9uYWwnIGluIG9iamVjdC5hbm5vdGF0aW9uc10pCi0gICAgICAgIGxpbmVz
ID0gWyJKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlv
bnMoSlNDOjpWTSYgdm0pIiwKLSAgICAgICAgICAgICAgICAgIiAgICA6IG1fdm0odm0pIl0KLSAg
ICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKLSAgICAgICAgICAgIGluaXRpYWxp
emVyID0gIiAgICAsICVzKG1fdm0pIiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmpl
Y3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBpbml0aWFsaXplcikpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgieyIpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJB
TSh2bSk7IikKLSAgICAgICAgbGluZXMuYXBwZW5kKCJ9XG4iKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQotCi0gICAgZGVmIHByb3BlcnR5X21hY3JvKHNlbGYsIG9iamVjdCk6Ci0g
ICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCIjZGVmaW5lIERFQ0xBUkVf
R0xPQkFMX1NUQVRJQyhuYW1lKSBcXCIpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIEpTRE9N
R2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oIFxcIikKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCIgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLiVzQnVpbHRpbnMoKS5u
YW1lIyNQcml2YXRlTmFtZSgpLCAlcygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSksIiAlIChzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KSwgc2VsZi5hY2Nlc3Nvcl9u
YW1lKG9iamVjdCkpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBXRUJDT1JFX0ZPUkVBQ0hf
JXNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykiICUgb2JqZWN0
Lm9iamVjdF9uYW1lLnVwcGVyKCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiI3VuZGVmIERFQ0xB
UkVfR0xPQkFMX1NUQVRJQyIpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAg
ICBkZWYgZ2VuZXJhdGVfdmlzaXRfbWV0aG9kKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsidm9p
ZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikiLAotICAgICAgICAgICAgICAgICAieyJdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2Vs
Zi5pbnRlcm5hbHM6Ci0gICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQodmlzaXRvcik7
IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1
aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdj
b25kaXRpb25hbCcpLCB2aXNpdCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9Q
QVJBTSh2aXNpdG9yKTsiKQotICAgICAgICBsaW5lcy5hcHBlbmQoIn1cbiIpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2luaXRpYWxpemVfc3Rh
dGljX2dsb2JhbHMoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWyIgICAgSlNWTUNsaWVudERhdGEm
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihtX3ZtLmNsaWVudERh
dGEpOyIsCi0gICAgICAgICAgICAgICAgICIgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFBy
b3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7Il0KLSAgICAgICAgZm9yIG9iamVjdCBpbiBz
ZWxmLmludGVybmFsczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRv
ci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwg
c2VsZi5wcm9wZXJ0eV9tYWNybyhvYmplY3QpKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIgICAg
fTsiKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xv
YmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsiKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7IikKLSAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBnZW5lcmF0ZV9pbml0aWFs
aXplX21ldGhvZChzZWxmKToKLSAgICAgICAgbGluZXMgPSBbInZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCki
LAotICAgICAgICAgICAgICAgICJ7IiwKLSAgICAgICAgICAgICAgICAiICAgIFVOVVNFRF9QQVJB
TShnbG9iYWxPYmplY3QpOyJdCi0KLSAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFs
czoKLSAgICAgICAgICAgIGluaXQgPSAiICAgICVzLmluaXQoZ2xvYmFsT2JqZWN0KTsiICUgc2Vs
Zi5tZW1iZXJfbmFtZShvYmplY3QpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNH
ZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlv
bmFsJyksIGluaXQpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiIpCi0KLSAgICAgICAgZ3VhcmRz
ID0gc2V0KFtvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpIGZvciBvYmplY3Qg
aW4gc2VsZi5pbnRlcm5hbHMgaWYgJ2NvbmRpdGlvbmFsJyBpbiBvYmplY3QuYW5ub3RhdGlvbnNd
KQotICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJk
KCIgfHwgIi5qb2luKGd1YXJkcyksIHNlbGYuX2dlbmVyYXRlX2luaXRpYWxpemVfc3RhdGljX2ds
b2JhbHMoKSkpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCJ9IikKLSAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2lt
cGxlbWVudGF0aW9uLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTEg
KzAsMCAjIwotKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0
ZV9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5CShyZXZpc2lvbiAy
MzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxOTggKzAs
MCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0j
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQg
cmUKLWltcG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGJ1
aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IKLWZyb20gYnVpbHRpbnNf
bW9kZWwgaW1wb3J0IEZyYW1ld29ya3MKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBC
dWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgQnVpbHRpbnNTZXBhcmF0ZUhlYWRlckdlbmVy
YXRvcihCdWlsdGluc0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBv
YmplY3QpOgotICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCkK
LSAgICAgICAgc2VsZi5vYmplY3QgPSBvYmplY3QKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUo
c2VsZik6Ci0gICAgICAgIHJldHVybiAiJXNCdWlsdGlucy5oIiAlIEJ1aWx0aW5zR2VuZXJhdG9y
Lm1hbmdsZWROYW1lRm9yT2JqZWN0KHNlbGYub2JqZWN0KQotCi0gICAgZGVmIG1hY3JvX3ByZWZp
eChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
bWFjcm9fcHJlZml4JykKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAg
IGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKLSAgICAgICAgICAgICdtYWNyb1ByZWZpeCc6IHNlbGYu
bWFjcm9fcHJlZml4KCksCi0gICAgICAgICAgICAnb2JqZWN0TmFtZSc6IHNlbGYub2JqZWN0Lm9i
amVjdF9uYW1lLAotICAgICAgICAgICAgJ29iamVjdE1hY3JvJzogc2VsZi5vYmplY3Qub2JqZWN0
X25hbWUudXBwZXIoKSwKLSAgICAgICAgfQotCi0gICAgICAgIGNvbmRpdGlvbmFsX2d1YXJkID0g
c2VsZi5vYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpCi0KLSAgICAgICAgc2Vj
dGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0
V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKFRlbXBsYXRlcy5IZWFkZXJJbmNsdWRlR3VhcmQpLnN1YnN0aXR1dGUoYXJncykpCi0gICAg
ICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoKSkK
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3Ap
LnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X3NlY3Rpb25fZm9yX29iamVjdChzZWxmLm9iamVjdCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfdGFibGVfbWFjcm8oKSkKLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3JfY29kZV9uYW1lX21hY3Jv
KCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuU2VwYXJhdGVI
ZWFkZXJTdGF0aWNNYWNyb3MpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIGlmIHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJDb3JlOgotICAgICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5TZXBhcmF0ZUhlYWRlcldyYXBwZXJCb2lsZXJw
bGF0ZSkuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgICAgIGlmIHNlbGYub2JqZWN0LmFubm90
YXRpb25zLmdldCgnaW50ZXJuYWwnKToKLSAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLlNlcGFyYXRlSGVhZGVySW50ZXJuYWxGdW5jdGlvbnNCb2lsZXJw
bGF0ZSkuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5OYW1lc3BhY2VCb3R0b20pLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIGlm
IGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCIjZW5kaWYgLy8gJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCi0KLSAgICAgICAgcmV0dXJu
ICJcblxuIi5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfZGVjbGFy
YXRpb25zKHNlbGYpOgotICAgICAgICByZXR1cm4gIiIibmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBG
dW5jdGlvbkV4ZWN1dGFibGU7Ci19IiIiCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hl
YWRlcl9pbmNsdWRlcyhzZWxmKToKLSAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAgICAg
ICAgICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAi
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCIpLAotICAgICAgICAgICAgKSwK
LQotICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlw
dENvcmUiLCAiYnVpbHRpbnMvQnVpbHRpblV0aWxzLmgiKSwKLSAgICAgICAgICAgICksCi0KLSAg
ICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3Jl
IiwgInJ1bnRpbWUvSWRlbnRpZmllci5oIiksCi0gICAgICAgICAgICApLAotCi0gICAgICAgICAg
ICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50
aW1lL0pTRnVuY3Rpb24uaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgXQotCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVh
ZGVyX2luY2x1ZGVzKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2Vs
Ziwgb2JqZWN0KToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJy8q
ICVzICovJyAlIG9iamVjdC5vYmplY3RfbmFtZSkKLSAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYu
Z2VuZXJhdGVfZXh0ZXJuc19mb3Jfb2JqZWN0KG9iamVjdCkpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgiIikKLSAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2VuZXJhdGVfbWFjcm9zX2Zvcl9vYmpl
Y3Qob2JqZWN0KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIiKQotICAgICAgICBsaW5lcy5leHRl
bmQoc2VsZi5nZW5lcmF0ZV9kZWZpbmVzX2Zvcl9vYmplY3Qob2JqZWN0KSkKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBnZW5lcmF0ZV9leHRlcm5zX2Zvcl9vYmpl
Y3Qoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgbGluZXMgPSBbXQotCi0gICAgICAgIGZvciBmdW5j
dGlvbiBpbiBvYmplY3QuZnVuY3Rpb25zOgotICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsK
LSAgICAgICAgICAgICAgICAnY29kZU5hbWUnOiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFt
ZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKSArICdDb2RlJywKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCIiImV4dGVybiBjb25zdCBjaGFyKiBzXyUoY29kZU5hbWUpczsK
LWV4dGVybiBjb25zdCBpbnQgc18lKGNvZGVOYW1lKXNMZW5ndGg7Ci1leHRlcm4gY29uc3QgSlND
OjpDb25zdHJ1Y3RBYmlsaXR5IHNfJShjb2RlTmFtZSlzQ29uc3RydWN0QWJpbGl0eTsiIiIgJSBm
dW5jdGlvbl9hcmdzKQotCi0gICAgICAgIHJldHVybiBsaW5lcwotCi0gICAgZGVmIGdlbmVyYXRl
X21hY3Jvc19mb3Jfb2JqZWN0KHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAg
ICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1hY3JvX3ByZWZpeCgpLAotICAgICAgICAgICAg
J29iamVjdE1hY3JvJzogb2JqZWN0Lm9iamVjdF9uYW1lLnJlcGxhY2UoJy4nLCAnXycpLnVwcGVy
KCksCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNfRk9SRUFDSF8lKG9iamVjdE1hY3JvKXNfQlVJTFRJ
Tl9EQVRBKG1hY3JvKSBcXCIgJSBhcmdzKQotICAgICAgICBmb3IgZnVuY3Rpb24gaW4gb2JqZWN0
LmZ1bmN0aW9uczoKLSAgICAgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSB7Ci0gICAgICAgICAgICAg
ICAgJ2Z1bmNOYW1lJzogZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAn
bWFuZ2xlZE5hbWUnOiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1
bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAncGFyYW1Db3VudCc6IGxlbihmdW5jdGlvbi5wYXJh
bWV0ZXJzKSwKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAg
bWFjcm8oJShmdW5jTmFtZSlzLCAlKG1hbmdsZWROYW1lKXMsICUocGFyYW1Db3VudClkKSBcXCIg
JSBmdW5jdGlvbl9hcmdzKQotICAgICAgICByZXR1cm4gbGluZXMKLQotICAgIGRlZiBnZW5lcmF0
ZV9kZWZpbmVzX2Zvcl9vYmplY3Qoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBmb3IgZnVuY3Rpb24gaW4gb2JqZWN0LmZ1bmN0aW9uczoKLSAgICAgICAgICAgIGFy
Z3MgPSB7Ci0gICAgICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tYWNyb19wcmVmaXgo
KSwKLSAgICAgICAgICAgICAgICAnb2JqZWN0TWFjcm8nOiBvYmplY3Qub2JqZWN0X25hbWUucmVw
bGFjZSgnLicsICdfJykudXBwZXIoKSwKLSAgICAgICAgICAgICAgICAnZnVuY3Rpb25NYWNybyc6
IGZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUudXBwZXIoKSwKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNfQlVJTFRJTl8lKG9iamVj
dE1hY3JvKXNfJShmdW5jdGlvbk1hY3JvKXMgMSIgJSBhcmdzKQotCi0gICAgICAgIHJldHVybiBs
aW5lcwotCi0gICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfdGFibGVfbWFjcm8oc2Vs
Zik6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1v
ZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpLAotICAgICAgICAgICAgJ29i
amVjdE1hY3JvJzogc2VsZi5vYmplY3Qub2JqZWN0X25hbWUudXBwZXIoKSwKLSAgICAgICAgfQot
Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCIjZGVmaW5lICUobWFj
cm9QcmVmaXgpc19GT1JFQUNIXyUob2JqZWN0TWFjcm8pc19CVUlMVElOX0NPREUobWFjcm8pIFxc
IiAlIGFyZ3MpCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBzZWxmLm9iamVjdC5mdW5jdGlvbnM6
Ci0gICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0gewotICAgICAgICAgICAgICAgICdmdW5jTmFt
ZSc6IGZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUsCi0gICAgICAgICAgICAgICAgJ292ZXJyaWRkZW5O
YW1lJzogZnVuY3Rpb24ub3ZlcnJpZGRlbl9uYW1lLAotICAgICAgICAgICAgICAgICdjb2RlTmFt
ZSc6IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yRnVuY3Rpb24oZnVuY3Rpb24pICsg
J0NvZGUnLAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBt
YWNybyglKGNvZGVOYW1lKXMsICUoZnVuY05hbWUpcywgJShvdmVycmlkZGVuTmFtZSlzLCBzXyUo
Y29kZU5hbWUpc0xlbmd0aCkgXFwiICUgZnVuY3Rpb25fYXJncykKLSAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9jb2RlX25hbWVf
bWFjcm8oc2VsZik6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbWFjcm9QcmVmaXgn
OiBzZWxmLm1hY3JvX3ByZWZpeCgpLAotICAgICAgICAgICAgJ29iamVjdE1hY3JvJzogc2VsZi5v
YmplY3Qub2JqZWN0X25hbWUudXBwZXIoKSwKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgbGluZXMuYXBwZW5kKCIjZGVmaW5lICUobWFjcm9QcmVmaXgpc19GT1JFQUNI
XyUob2JqZWN0TWFjcm8pc19CVUlMVElOX0ZVTkNUSU9OX05BTUUobWFjcm8pIFxcIiAlIGFyZ3Mp
Ci0gICAgICAgIHVuaXF1ZV9uYW1lcyA9IGxpc3Qoc2V0KFtmdW5jdGlvbi5mdW5jdGlvbl9uYW1l
IGZvciBmdW5jdGlvbiBpbiBzZWxmLm9iamVjdC5mdW5jdGlvbnNdKSkKLSAgICAgICAgdW5pcXVl
X25hbWVzLnNvcnQoKQotICAgICAgICBmb3IgZnVuY3Rpb25fbmFtZSBpbiB1bmlxdWVfbmFtZXM6
Ci0gICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0gewotICAgICAgICAgICAgICAgICdmdW5jTmFt
ZSc6IGZ1bmN0aW9uX25hbWUsCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgiICAgIG1hY3JvKCUoZnVuY05hbWUpcykgXFwiICUgZnVuY3Rpb25fYXJncykKLSAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRl
X2hlYWRlci5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICswLDAg
IyMKLSoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1w
bGVtZW50YXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkJ
KHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5CShub25leGlz
dGVudCkKQEAgLTEsMTEyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5
cmlnaHQgKGMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0j
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBv
cnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKLQotZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJh
dG9yLCBXS19sY2ZpcnN0Ci1mcm9tIGJ1aWx0aW5zX21vZGVsIGltcG9ydCBGcmFtZXdvcmssIEZy
YW1ld29ya3MKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRv
clRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCi0KLQotY2xhc3MgQnVpbHRpbnNTZXBhcmF0ZUltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEJ1
aWx0aW5zR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIG9iamVjdCk6
Ci0gICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQotICAgICAg
ICBzZWxmLm9iamVjdCA9IG9iamVjdAotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToK
LSAgICAgICAgcmV0dXJuICIlc0J1aWx0aW5zLmNwcCIgJSBCdWlsdGluc0dlbmVyYXRvci5tYW5n
bGVkTmFtZUZvck9iamVjdChzZWxmLm9iamVjdCkKLQotICAgIGRlZiBtYWNyb19wcmVmaXgoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3Jv
X3ByZWZpeCcpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBhcmdz
ID0gewotICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0
dGluZygnbmFtZXNwYWNlJyksCi0gICAgICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1hY3Jv
X3ByZWZpeCgpLAotICAgICAgICAgICAgJ29iamVjdE1hY3JvJzogc2VsZi5vYmplY3Qub2JqZWN0
X25hbWUudXBwZXIoKSwKLSAgICAgICAgICAgICdvYmplY3ROYW1lTEMnOiBXS19sY2ZpcnN0KHNl
bGYub2JqZWN0Lm9iamVjdF9uYW1lKSwKLSAgICAgICAgfQotCi0gICAgICAgIGNvbmRpdGlvbmFs
X2d1YXJkID0gc2VsZi5vYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpCi0KLSAg
ICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0
ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
RG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuZ2VuZXJhdGVfcHJpbWFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKLSAgICAgICAgaWYg
Y29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoIiNpZiAlcyIgJSBjb25kaXRpb25hbF9ndWFyZCkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpKQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRvcCkuc3Vic3RpdHV0ZShh
cmdzKSkKLSAgICAgICAgZm9yIGZ1bmN0aW9uIGluIHNlbGYub2JqZWN0LmZ1bmN0aW9uczoKLSAg
ICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2VtYmVkZGVkX2NvZGVfc3Ry
aW5nX3NlY3Rpb25fZm9yX2Z1bmN0aW9uKGZ1bmN0aW9uKSkKLSAgICAgICAgaWYgc2VsZi5tb2Rl
bCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlOgotICAgICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5TZXBhcmF0ZUpTQ0ltcGxlbWVudGF0
aW9uU3RhdGljTWFjcm9zKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBlbGlmIHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJDb3JlOgotICAgICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5TZXBhcmF0ZVdlYkNvcmVJbXBsZW1lbnRhdGlv
blN0YXRpY01hY3Jvcykuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VCb3R0b20pLnN1YnN0aXR1dGUoYXJncykpCi0g
ICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCIjZW5kaWYgLy8gJXNcbiIgJSBjb25kaXRpb25hbF9ndWFyZCkKLQotICAg
ICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2Vj
b25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKLSAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0g
WwotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkph
dmFTY3JpcHRDb3JlIiwgImJ1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5oIiksCi0gICAgICAg
ICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAg
ICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAiaGVhcC9IZWFwSW5saW5lcy5oIiksCi0g
ICAgICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJd
LAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9KU0NlbGxJbmxp
bmVzLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAg
ICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAg
ICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaCIp
LAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNv
cmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvVk0uaCIp
LAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAg
ICAgICAoIldlYkNvcmUiLCAiYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oIiksCi0g
ICAgICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJd
LAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9JZGVudGlmaWVy
SW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVu
dGltZS9JbnRyaW5zaWMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgXQotCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVh
ZGVyX2luY2x1ZGVzKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dy
YXBwZXJfaGVhZGVyLnB5CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQko
bm9uZXhpc3RlbnQpCkBAIC0xLDExOSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMK
LSMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcK
LWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBp
bXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IsIFdLX2xjZmlyc3QsIFdLX3VjZmlyc3QKLWZyb20gYnVp
bHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1w
bGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgQnVp
bHRpbnNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwpOgotICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAg
IHJldHVybiAiJXNKU0J1aWx0aW5zLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCduYW1lc3BhY2UnKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAg
YXJncyA9IHsKLSAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ25hbWVzcGFjZScpLAotICAgICAgICB9Ci0KLSAgICAgICAgc2VjdGlvbnMgPSBb
XQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZyku
c3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5IZWFkZXJJbmNsdWRlR3VhcmQpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKLQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRvcCku
c3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
c2VjdGlvbl9mb3Jfb2JqZWN0KCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQotCi0gICAgICAgIHJl
dHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRhcnlf
aGVhZGVyX2luY2x1ZGVzKHNlbGYpOgotICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCi0gICAg
ICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIs
ICJydW50aW1lL1ZNLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgIF0KLSAgICAgICAgZm9y
IG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoKLSAgICAgICAgICAgIGhlYWRlcl9pbmNs
dWRlcy5hcHBlbmQoKFsiV2ViQ29yZSJdLCAoIldlYkNvcmUiLCBvYmplY3Qub2JqZWN0X25hbWUg
KyAiQnVpbHRpbnMuaCIpKSkKLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJh
dGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCi0KLSAgICBkZWYgZ2Vu
ZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsiY2xhc3Mg
SlNCdWlsdGluRnVuY3Rpb25zIHsiLAotICAgICAgICAgICAgICAgICAicHVibGljOiJdCi0KLSAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfY29uc3RydWN0b3IoKSkKLSAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfYWNjZXNzb3JzKCkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgicHJpdmF0ZToiKQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9tZW1i
ZXJzKCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgifTsiKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIGFjY2Vzc29yX25hbWUoc2VsZiwgb2JqZWN0KToKLSAgICAg
ICAgcmV0dXJuIFdLX2xjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1lKSArICJCdWlsdGlucyIKLQot
ICAgIGRlZiBtZW1iZXJfbmFtZShzZWxmLCBvYmplY3QpOgotICAgICAgICByZXR1cm4gIm1fIiAr
IHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpCi0KLSAgICBkZWYgbWVtYmVyX3R5cGUoc2VsZiwg
b2JqZWN0KToKLSAgICAgICAgcmV0dXJuIFdLX3VjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1lKSAr
ICJCdWlsdGluc1dyYXBwZXIiCi0KLSAgICBkZWYgZ2VuZXJhdGVfY29uc3RydWN0b3Ioc2VsZik6
Ci0gICAgICAgIGxpbmVzID0gWyIgICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6
Vk0mIHZtKSIsCi0gICAgICAgICAgICAgICAgICIgICAgICAgIDogbV92bSh2bSkiXQotICAgICAg
ICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgotICAgICAgICAgICAgbWVtYmVy
X2luaXQgPSAiICAgICAgICAsICVzKCZtX3ZtKSIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3Vh
cmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgbWVtYmVyX2luaXQpKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB7IikKLSAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxm
Lm1vZGVsKCkub2JqZWN0czoKLSAgICAgICAgICAgIGlmIG5vdCAnaW50ZXJuYWwnIGluIG9iamVj
dC5hbm5vdGF0aW9uczoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaW50
ZXJuYWxfZXhwb3J0X25hbWVzID0gIiAgICAgICAgJXMuZXhwb3J0TmFtZXMoKTsiICUgc2VsZi5t
ZW1iZXJfbmFtZShvYmplY3QpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5l
cmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFs
JyksIGludGVybmFsX2V4cG9ydF9uYW1lcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIH1c
biIpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVf
YWNjZXNzb3JzKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBvYmplY3Qg
aW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6Ci0gICAgICAgICAgICBhY2Nlc3NvciA9ICIgICAgJXMm
ICVzKCkgeyByZXR1cm4gJXM7IH0iICUgKHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSwgc2VsZi5h
Y2Nlc3Nvcl9uYW1lKG9iamVjdCksIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSkKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0
LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgYWNjZXNzb3IpKQotICAgICAgICBsaW5l
cy5hcHBlbmQoIiIpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYg
Z2VuZXJhdGVfbWVtYmVycyhzZWxmKToKLSAgICAgICAgbGluZXMgPSBbIiAgICBKU0M6OlZNJiBt
X3ZtOyJdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6Ci0gICAg
ICAgICAgICBtZW1iZXIgPSAiICAgICVzICVzOyIgJSAoc2VsZi5tZW1iZXJfdHlwZShvYmplY3Qp
LCBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVp
bHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2Nv
bmRpdGlvbmFsJyksIG1lbWJlcikpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlu
cy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6
IHN2bjpleGVjdXRhYmxlCiMjIC0xICswLDAgIyMKLSoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93
cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2lt
cGxlbWVudGF0aW9uLnB5CShub25leGlzdGVudCkKQEAgLTEsNjEgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0K
LWltcG9ydCBsb2dnaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBidWls
dGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yCi1mcm9tIGJ1aWx0aW5zX3Rl
bXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0K
LWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJ1aWx0aW5zV3Jh
cHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwpOgotICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAg
IHJldHVybiAiJXNKU0J1aWx0aW5zLmNwcCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRp
bmcoJ25hbWVzcGFjZScpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAg
ICBhcmdzID0gewotICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdv
cmsuc2V0dGluZygnbmFtZXNwYWNlJyksCi0gICAgICAgIH0KLQotICAgICAgICBzZWN0aW9ucyA9
IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5Eb05vdEVkaXRXYXJuaW5n
KS5zdWJzdGl0dXRlKGFyZ3MpKQotCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX3NlY3Rpb25fZm9yX29iamVjdCgpKQotCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihz
ZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2VsZik6Ci0g
ICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFtdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5t
b2RlbCgpLm9iamVjdHM6Ci0gICAgICAgICAgICBoZWFkZXJfaW5jbHVkZXMuYXBwZW5kKChbIldl
YkNvcmUiXSwgKCJXZWJDb3JlIiwgb2JqZWN0Lm9iamVjdF9uYW1lICsgIkJ1aWx0aW5zLmNwcCIp
KSkKLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJv
bV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVy
X2ltcGxlbWVudGF0aW9uLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTEgKzAsMCAjIwotKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0b3IucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0b3IucHkJKG5vbmV4aXN0ZW50
KQpAQCAtMSwxODEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdo
dCAoYykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHly
aWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgbG9n
Z2luZwotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCByZQotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBs
YXRlCi1pbXBvcnQganNvbgotCi1mcm9tIGJ1aWx0aW5zX21vZGVsIGltcG9ydCBCdWlsdGluRnVu
Y3Rpb24sIEJ1aWx0aW5PYmplY3QKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWls
dGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoJ2dsb2JhbCcpCi0KLSMgVGhlc2UgbWF0Y2ggV0tfbGNmaXJzdCBhbmQgV0tfdWNmaXJz
dCBkZWZpbmVkIGluIENvZGVHZW5lcmF0b3IucG0uCi1kZWYgV0tfbGNmaXJzdChzdHIpOgotICAg
IHN0ciA9IHN0cls6MV0ubG93ZXIoKSArIHN0clsxOl0KLSAgICBzdHIgPSBzdHIucmVwbGFjZSgn
ZE9NJywgJ2RvbScpCi0gICAgc3RyID0gc3RyLnJlcGxhY2UoJ3VSTCcsICd1cmwnKQotICAgIHN0
ciA9IHN0ci5yZXBsYWNlKCdqUycsICdqcycpCi0gICAgc3RyID0gc3RyLnJlcGxhY2UoJ3hNTCcs
ICd4bWwnKQotICAgIHN0ciA9IHN0ci5yZXBsYWNlKCd4U0xUJywgJ3hzbHQnKQotICAgIHN0ciA9
IHN0ci5yZXBsYWNlKCdjU1MnLCAnY3NzJykKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgnclRDJywg
J3J0YycpCi0gICAgcmV0dXJuIHN0cgotCi1kZWYgV0tfdWNmaXJzdChzdHIpOgotICAgIHN0ciA9
IHN0cls6MV0udXBwZXIoKSArIHN0clsxOl0KLSAgICBzdHIgPSBzdHIucmVwbGFjZSgnWG1sJywg
J1hNTCcpCi0gICAgc3RyID0gc3RyLnJlcGxhY2UoJ1N2ZycsICdTVkcnKQotICAgIHJldHVybiBz
dHIKLQotY2xhc3MgQnVpbHRpbnNHZW5lcmF0b3I6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1v
ZGVsKToKLSAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAotCi0gICAgZGVmIG1vZGVsKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKLQotICAgICMgVGhlc2UgbWV0aG9kcyBhcmUg
b3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAg
ICAgcGFzcwotCi0KLSAgICAjIFNoYXJlZCBjb2RlIGdlbmVyYXRpb24gbWV0aG9kcy4KLSAgICBk
ZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToKLSAgICAgICAgcmF3X2xpY2Vuc2UgPSBUZW1wbGF0
ZShUZW1wbGF0ZXMuTGljZW5zZVRleHQpLnN1YnN0aXR1dGUoTm9uZSkKLSAgICAgICAgY29weXJp
Z2h0cyA9IHNlbGYuX21vZGVsLmNvcHlyaWdodHMoKQotICAgICAgICBjb3B5cmlnaHRzLnNvcnQo
KQotCi0gICAgICAgIGxpY2Vuc2VfYmxvY2sgPSBbXQotICAgICAgICBsaWNlbnNlX2Jsb2NrLmFw
cGVuZCgiLyoiKQotICAgICAgICBmb3IgY29weXJpZ2h0IGluIGNvcHlyaWdodHM6Ci0gICAgICAg
ICAgICBsaWNlbnNlX2Jsb2NrLmFwcGVuZCgiICogQ29weXJpZ2h0IChjKSAlcyIgJSBjb3B5cmln
aHQpCi0gICAgICAgIGlmIGxlbihjb3B5cmlnaHRzKSA+IDA6Ci0gICAgICAgICAgICBsaWNlbnNl
X2Jsb2NrLmFwcGVuZCgiICogIikKLQotICAgICAgICBmb3IgbGluZSBpbiByYXdfbGljZW5zZS5z
cGxpdCgnXG4nKToKLSAgICAgICAgICAgIGxpY2Vuc2VfYmxvY2suYXBwZW5kKCIgKiAiICsgbGlu
ZSkKLQotICAgICAgICBsaWNlbnNlX2Jsb2NrLmFwcGVuZCgiICovIikKLQotICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpY2Vuc2VfYmxvY2spCi0KLSAgICBkZWYgZ2VuZXJhdGVfaW5jbHVkZXNf
ZnJvbV9lbnRyaWVzKHNlbGYsIGVudHJpZXMpOgotICAgICAgICBpbmNsdWRlcyA9IHNldCgpCi0g
ICAgICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzOgotICAgICAgICAgICAgKGFsbG93ZWRfZnJhbWV3
b3JrX25hbWVzLCBkYXRhKSA9IGVudHJ5Ci0gICAgICAgICAgICAoZnJhbWV3b3JrX25hbWUsIGhl
YWRlcl9wYXRoKSA9IGRhdGEKLQotICAgICAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5uYW1lIG5vdCBpbiBhbGxvd2VkX2ZyYW1ld29ya19uYW1lczoKLSAgICAgICAgICAgICAgICBj
b250aW51ZQotICAgICAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lICE9IGZy
YW1ld29ya19uYW1lOgotICAgICAgICAgICAgICAgIGluY2x1ZGVzLmFkZCgiI2luY2x1ZGUgPCVz
LyVzPiIgJSAoZnJhbWV3b3JrX25hbWUsIG9zLnBhdGguYmFzZW5hbWUoaGVhZGVyX3BhdGgpKSkK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaW5jbHVkZXMuYWRkKCIjaW5jbHVk
ZSBcIiVzXCIiICUgb3MucGF0aC5iYXNlbmFtZShoZWFkZXJfcGF0aCkpCi0KLSAgICAgICAgcmV0
dXJuIHNvcnRlZChsaXN0KGluY2x1ZGVzKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9wcmltYXJ5X2hl
YWRlcl9pbmNsdWRlcyhzZWxmKToKLSAgICAgICAgbmFtZSwgXyA9IG9zLnBhdGguc3BsaXRleHQo
c2VsZi5vdXRwdXRfZmlsZW5hbWUoKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihbCi0gICAg
ICAgICAgICAiI2luY2x1ZGUgXCJjb25maWcuaFwiIiwKLSAgICAgICAgICAgICIjaW5jbHVkZSBc
IiVzLmhcIiIgJSBuYW1lLAotICAgICAgICBdKQotCi0gICAgZGVmIGdlbmVyYXRlX2VtYmVkZGVk
X2NvZGVfc3RyaW5nX3NlY3Rpb25fZm9yX2Z1bmN0aW9uKHNlbGYsIGZ1bmN0aW9uKToKLSAgICAg
ICAgdGV4dCA9IGZ1bmN0aW9uLmZ1bmN0aW9uX3NvdXJjZQotICAgICAgICAjIFdyYXAgaXQgaW4g
cGFyZW5zIHRvIGF2b2lkIGFkZGluZyB0byBnbG9iYWwgc2NvcGUuCi0gICAgICAgIHRleHQgPSAi
KGZ1bmN0aW9uICIgKyB0ZXh0W3RleHQuaW5kZXgoIigiKTpdICsgIikiCi0gICAgICAgIGVtYmVk
ZGVkU291cmNlTGVuZ3RoID0gbGVuKHRleHQpICsgMSAgIyBGb3IgZXh0cmEgXG4uCi0gICAgICAg
ICMgTGF6eSB3YXkgdG8gZXNjYXBlIHF1b3RlcywgSSB0aGluaz8KLSAgICAgICAgdGV4dExpbmVz
ID0ganNvbi5kdW1wcyh0ZXh0KVsxOi0xXS5zcGxpdCgiXFxuIikKLSAgICAgICAgIyBUaGlzIGxv
b2tzIHNjYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0aGUgSlMgc291cmNlIGl0c2VsZiB0byBoYXZlIG5l
d2xpbmVzLgotICAgICAgICBlbWJlZGRlZFNvdXJjZSA9ICdcbicuam9pbihbJyAgICAiJXNcXG4i
IFxcJyAlIGxpbmUgZm9yIGxpbmUgaW4gdGV4dExpbmVzXSkKLQotICAgICAgICBjb25zdHJ1Y3RB
YmlsaXR5ID0gIkNhbm5vdENvbnN0cnVjdCIKLSAgICAgICAgaWYgZnVuY3Rpb24uaXNfY29uc3Ry
dWN0b3I6Ci0gICAgICAgICAgICBjb25zdHJ1Y3RBYmlsaXR5ID0gIkNhbkNvbnN0cnVjdCIKLQot
ICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ2NvZGVOYW1lJzogQnVpbHRpbnNHZW5lcmF0
b3IubWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihmdW5jdGlvbikgKyAnQ29kZScsCi0gICAgICAgICAg
ICAnZW1iZWRkZWRTb3VyY2UnOiBlbWJlZGRlZFNvdXJjZSwKLSAgICAgICAgICAgICdlbWJlZGRl
ZFNvdXJjZUxlbmd0aCc6IGVtYmVkZGVkU291cmNlTGVuZ3RoLAotICAgICAgICAgICAgJ2NhbkNv
bnN0cnVjdCc6IGNvbnN0cnVjdEFiaWxpdHksCi0gICAgICAgICAgICAnaW50cmluc2ljJzogZnVu
Y3Rpb24uaW50cmluc2ljCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgiY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfJShjb2RlTmFtZSlz
Q29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6JShjYW5Db25zdHJ1Y3Qp
czsiICUgYXJncyk7Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgiY29uc3QgaW50IHNfJShjb2RlTmFt
ZSlzTGVuZ3RoID0gJShlbWJlZGRlZFNvdXJjZUxlbmd0aClkOyIgJSBhcmdzKTsKLSAgICAgICAg
bGluZXMuYXBwZW5kKCJzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc18lKGNvZGVOYW1lKXNJ
bnRyaW5zaWMgPSBKU0M6OiUoaW50cmluc2ljKXM7IiAlIGFyZ3MpOwotICAgICAgICBsaW5lcy5h
cHBlbmQoImNvbnN0IGNoYXIqIHNfJShjb2RlTmFtZSlzID1cbiUoZW1iZWRkZWRTb3VyY2Upc1xu
OyIgJSBhcmdzKTsKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgICMgSGVs
cGVyIG1ldGhvZHMuCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHdyYXBfd2l0aF9ndWFy
ZChndWFyZCwgdGV4dCk6Ci0gICAgICAgIGlmIG5vdCBndWFyZDoKLSAgICAgICAgICAgIHJldHVy
biB0ZXh0Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oWwotICAgICAgICAgICAgJyNpZiAlcycg
JSBndWFyZCwKLSAgICAgICAgICAgIHRleHQsCi0gICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAl
IGd1YXJkLAotICAgICAgICBdKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBtYW5nbGVk
TmFtZUZvck9iamVjdChvYmplY3QpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvYmplY3Qs
IEJ1aWx0aW5PYmplY3QpOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJbnZhbGlkIGFy
Z3VtZW50IHBhc3NlZCB0byBtYW5nbGVkTmFtZUZvck9iamVjdCgpIikKLQotICAgICAgICBkZWYg
dG9DYW1lbChtYXRjaCk6Ci0gICAgICAgICAgICBzdHIgPSBtYXRjaC5ncm91cCgwKQotICAgICAg
ICAgICAgcmV0dXJuIHN0clsxXS51cHBlcigpCi0gICAgICAgIHJldHVybiByZS5zdWIocidcLlth
LXpdJywgdG9DYW1lbCwgb2JqZWN0Lm9iamVjdF9uYW1lLCBmbGFncz1yZS5JR05PUkVDQVNFKQot
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG1hbmdsZWROYW1lRm9yRnVuY3Rpb24oZnVu
Y3Rpb24pOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmdW5jdGlvbiwgQnVpbHRpbkZ1bmN0
aW9uKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBwYXNz
ZWQgdG8gbWFuZ2xlZE5hbWVGb3JGdW5jdGlvbigpIikKLQotICAgICAgICBmdW5jdGlvbl9uYW1l
ID0gV0tfdWNmaXJzdChmdW5jdGlvbi5mdW5jdGlvbl9uYW1lKQotCi0gICAgICAgIGRlZiB0b0Nh
bWVsKG1hdGNoKToKLSAgICAgICAgICAgIHN0ciA9IG1hdGNoLmdyb3VwKDApCi0gICAgICAgICAg
ICByZXR1cm4gc3RyWzFdLnVwcGVyKCkKLSAgICAgICAgZnVuY3Rpb25fbmFtZSA9IHJlLnN1Yihy
J1wuW2Etel0nLCB0b0NhbWVsLCBmdW5jdGlvbl9uYW1lLCBmbGFncz1yZS5JR05PUkVDQVNFKQot
ICAgICAgICBpZiBmdW5jdGlvbi5pc19jb25zdHJ1Y3RvcjoKLSAgICAgICAgICAgIGZ1bmN0aW9u
X25hbWUgPSBmdW5jdGlvbl9uYW1lICsgIkNvbnN0cnVjdG9yIgotCi0gICAgICAgIG9iamVjdF9u
YW1lID0gQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JPYmplY3QoZnVuY3Rpb24ub2Jq
ZWN0KQotICAgICAgICByZXR1cm4gV0tfbGNmaXJzdChvYmplY3RfbmFtZSArIGZ1bmN0aW9uX25h
bWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlu
c19tb2RlbC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9i
dWlsdGlucy9idWlsdGluc19tb2RlbC5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzMDYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHly
aWdodCAoYykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBv
cnQgcmUKLWltcG9ydCBvcwotCi1mcm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRp
bnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQotCi1fRlJBTUVXT1JLX0NPTkZJR19NQVAgPSB7Ci0gICAgIkphdmFTY3Jp
cHRDb3JlIjogewotICAgICAgICAibWFjcm9fcHJlZml4IjogIkpTQyIsCi0gICAgICAgICJuYW1l
c3BhY2UiOiAiSlNDIiwKLSAgICB9LAotICAgICJXZWJDb3JlIjogewotICAgICAgICAibWFjcm9f
cHJlZml4IjogIldFQkNPUkUiLAotICAgICAgICAibmFtZXNwYWNlIjogIldlYkNvcmUiLAotICAg
IH0sCi19Ci0KLWZ1bmN0aW9uSGVhZFJlZ0V4cCA9IHJlLmNvbXBpbGUociIoPzpAW1x3fD1cW1xd
IFwiXC5dK1xzKlxuKSpmdW5jdGlvblxzK1x3K1xzKlwoLio/XCkiLCByZS5NVUxUSUxJTkUgfCBy
ZS5ET1RBTEwpCi1mdW5jdGlvbkdsb2JhbFByaXZhdGVSZWdFeHAgPSByZS5jb21waWxlKHIiLipe
QGdsb2JhbFByaXZhdGUiLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1mdW5jdGlvbkludHJp
bnNpY1JlZ0V4cCA9IHJlLmNvbXBpbGUociIuKl5AaW50cmluc2ljPShcdyspIiwgcmUuTVVMVElM
SU5FIHwgcmUuRE9UQUxMKQotZnVuY3Rpb25Jc0NvbnN0cnVjdG9yUmVnRXhwID0gcmUuY29tcGls
ZShyIi4qXkBjb25zdHJ1Y3RvciIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLWZ1bmN0aW9u
SXNHZXR0ZXJSZWdFeHAgPSByZS5jb21waWxlKHIiLipeQGdldHRlciIsIHJlLk1VTFRJTElORSB8
IHJlLkRPVEFMTCkKLWZ1bmN0aW9uTmFtZVJlZ0V4cCA9IHJlLmNvbXBpbGUociJmdW5jdGlvblxz
KyhcdyspXHMqXCgiLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1mdW5jdGlvbk92ZXJyaWRk
ZW5OYW1lUmVnRXhwID0gcmUuY29tcGlsZShyIi4qXkBvdmVycmlkZGVuTmFtZT0oXCIuK1wiKSQi
LCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1mdW5jdGlvblBhcmFtZXRlckZpbmRlciA9IHJl
LmNvbXBpbGUociJeZnVuY3Rpb25ccysoPzpcdyspXHMqXCgoKD86XHMqXHcrKT9ccyooPzpccyos
XHMqXHcrKSopP1xzKlwpIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQotCi1tdWx0aWxpbmVD
b21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIlwvXCouKj9cKlwvIiwgcmUuTVVMVElMSU5FIHwg
cmUuRE9UQUxMKQotc2luZ2xlTGluZUNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIiXC9cLy4q
P1xuIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQota2V5VmFsdWVBbm5vdGF0aW9uQ29tbWVu
dFJlZ0V4cCA9IHJlLmNvbXBpbGUociJeXC9cLyBAKFx3Kyk9KFtePV0rPylcbiIsIHJlLk1VTFRJ
TElORSB8IHJlLkRPVEFMTCkKLWZsYWdBbm5vdGF0aW9uQ29tbWVudFJlZ0V4cCA9IHJlLmNvbXBp
bGUociJeXC9cLyBAKFx3KylbXj1dKj9cbiIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLWxp
bmVXaXRoT25seVNpbmdsZUxpbmVDb21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIl5ccypcL1wv
XG4iLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1saW5lV2l0aFRyYWlsaW5nU2luZ2xlTGlu
ZUNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIiXHMqXC9cL1xuIiwgcmUuTVVMVElMSU5FIHwg
cmUuRE9UQUxMKQotbGVhZGluZ1doaXRlc3BhY2VSZWdFeHAgPSByZS5jb21waWxlKHIiXiArIiwg
cmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQotbXVsdGlwbGVFbXB0eUxpbmVzUmVnRXhwID0gcmUu
Y29tcGlsZShyIlxuezIsfSIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLQotY2xhc3MgUGFy
c2VFeGNlcHRpb24oRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLQotY2xhc3MgRnJhbWV3b3JrOgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5fc2V0dGluZ3MgPSBf
RlJBTUVXT1JLX0NPTkZJR19NQVBbbmFtZV0KLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotCi0g
ICAgZGVmIHNldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PScnKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3NldHRpbmdzLmdldChrZXksIGRlZmF1bHQpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIGZyb21TdHJpbmcoZnJhbWV3b3JrU3RyaW5nKToKLSAgICAgICAgaWYgZnJhbWV3b3JrU3Ry
aW5nID09ICJKYXZhU2NyaXB0Q29yZSI6Ci0gICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5K
YXZhU2NyaXB0Q29yZQotCi0gICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiV2ViQ29yZSI6
Ci0gICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5XZWJDb3JlCi0KLSAgICAgICAgcmFpc2Ug
UGFyc2VFeGNlcHRpb24oIlVua25vd24gZnJhbWV3b3JrOiAlcyIgJSBmcmFtZXdvcmtTdHJpbmcp
Ci0KLQotY2xhc3MgRnJhbWV3b3JrczoKLSAgICBKYXZhU2NyaXB0Q29yZSA9IEZyYW1ld29yaygi
SmF2YVNjcmlwdENvcmUiKQotICAgIFdlYkNvcmUgPSBGcmFtZXdvcmsoIldlYkNvcmUiKQotCi0K
LWNsYXNzIEJ1aWx0aW5PYmplY3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iamVjdF9uYW1l
LCBhbm5vdGF0aW9ucywgZnVuY3Rpb25zKToKLSAgICAgICAgc2VsZi5vYmplY3RfbmFtZSA9IG9i
amVjdF9uYW1lCi0gICAgICAgIHNlbGYuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucwotICAgICAg
ICBzZWxmLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucwotICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBO
b25lICAjIFNldCBieSB0aGUgb3duaW5nIEJ1aWx0aW5zQ29sbGVjdGlvbgotCi0gICAgICAgIGZv
ciBmdW5jdGlvbiBpbiBzZWxmLmZ1bmN0aW9uczoKLSAgICAgICAgICAgIGZ1bmN0aW9uLm9iamVj
dCA9IHNlbGYKLQotCi1jbGFzcyBCdWlsdGluRnVuY3Rpb246Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGZ1bmN0aW9uX25hbWUsIGZ1bmN0aW9uX3NvdXJjZSwgcGFyYW1ldGVycywgaXNfY29uc3Ry
dWN0b3IsIGlzX2dsb2JhbF9wcml2YXRlLCBpbnRyaW5zaWMsIG92ZXJyaWRkZW5fbmFtZSk6Ci0g
ICAgICAgIHNlbGYuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWUKLSAgICAgICAgc2VsZi5m
dW5jdGlvbl9zb3VyY2UgPSBmdW5jdGlvbl9zb3VyY2UKLSAgICAgICAgc2VsZi5wYXJhbWV0ZXJz
ID0gcGFyYW1ldGVycwotICAgICAgICBzZWxmLmlzX2NvbnN0cnVjdG9yID0gaXNfY29uc3RydWN0
b3IKLSAgICAgICAgc2VsZi5pc19nbG9iYWxfcHJpdmF0ZSA9IGlzX2dsb2JhbF9wcml2YXRlCi0g
ICAgICAgIHNlbGYuaW50cmluc2ljID0gaW50cmluc2ljCi0gICAgICAgIHNlbGYub3ZlcnJpZGRl
bl9uYW1lID0gb3ZlcnJpZGRlbl9uYW1lCi0gICAgICAgIHNlbGYub2JqZWN0ID0gTm9uZSAgIyBT
ZXQgYnkgdGhlIG93bmluZyBCdWlsdGluT2JqZWN0Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIGZyb21TdHJpbmcoZnVuY3Rpb25fc3RyaW5nKToKLSAgICAgICAgZnVuY3Rpb25fc291cmNl
ID0gbXVsdGlsaW5lQ29tbWVudFJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3N0cmluZykKLQotICAg
ICAgICBpbnRyaW5zaWMgPSAiTm9JbnRyaW5zaWMiCi0gICAgICAgIGludHJpbnNpY01hdGNoID0g
ZnVuY3Rpb25JbnRyaW5zaWNSZWdFeHAuc2VhcmNoKGZ1bmN0aW9uX3NvdXJjZSkKLSAgICAgICAg
aWYgaW50cmluc2ljTWF0Y2g6Ci0gICAgICAgICAgICBpbnRyaW5zaWMgPSBpbnRyaW5zaWNNYXRj
aC5ncm91cCgxKQotICAgICAgICAgICAgZnVuY3Rpb25fc291cmNlID0gZnVuY3Rpb25JbnRyaW5z
aWNSZWdFeHAuc3ViKCIiLCBmdW5jdGlvbl9zb3VyY2UpCi0KLSAgICAgICAgb3ZlcnJpZGRlbl9u
YW1lID0gTm9uZQotICAgICAgICBvdmVycmlkZGVuTmFtZU1hdGNoID0gZnVuY3Rpb25PdmVycmlk
ZGVuTmFtZVJlZ0V4cC5zZWFyY2goZnVuY3Rpb25fc291cmNlKQotICAgICAgICBpZiBvdmVycmlk
ZGVuTmFtZU1hdGNoOgotICAgICAgICAgICAgb3ZlcnJpZGRlbl9uYW1lID0gb3ZlcnJpZGRlbk5h
bWVNYXRjaC5ncm91cCgxKQotICAgICAgICAgICAgZnVuY3Rpb25fc291cmNlID0gZnVuY3Rpb25P
dmVycmlkZGVuTmFtZVJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3NvdXJjZSkKLQotICAgICAgICBp
ZiBub3Qgb3MuZ2V0ZW52KCJDT05GSUdVUkFUSU9OIiwgIkRlYnVnIikuc3RhcnRzd2l0aCgiRGVi
dWciKToKLSAgICAgICAgICAgIGZ1bmN0aW9uX3NvdXJjZSA9IGxpbmVXaXRoT25seVNpbmdsZUxp
bmVDb21tZW50UmVnRXhwLnN1YigiIiwgZnVuY3Rpb25fc291cmNlKQotICAgICAgICAgICAgZnVu
Y3Rpb25fc291cmNlID0gbGluZVdpdGhUcmFpbGluZ1NpbmdsZUxpbmVDb21tZW50UmVnRXhwLnN1
YigiXG4iLCBmdW5jdGlvbl9zb3VyY2UpCi0gICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2UgPSBs
ZWFkaW5nV2hpdGVzcGFjZVJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3NvdXJjZSkKLSAgICAgICAg
ICAgIGZ1bmN0aW9uX3NvdXJjZSA9IG11bHRpcGxlRW1wdHlMaW5lc1JlZ0V4cC5zdWIoIlxuIiwg
ZnVuY3Rpb25fc291cmNlKQotCi0gICAgICAgIGZ1bmN0aW9uX25hbWUgPSBmdW5jdGlvbk5hbWVS
ZWdFeHAuZmluZGFsbChmdW5jdGlvbl9zb3VyY2UpWzBdCi0gICAgICAgIGlzX2NvbnN0cnVjdG9y
ID0gZnVuY3Rpb25Jc0NvbnN0cnVjdG9yUmVnRXhwLm1hdGNoKGZ1bmN0aW9uX3NvdXJjZSkgIT0g
Tm9uZQotICAgICAgICBpc19nZXR0ZXIgPSBmdW5jdGlvbklzR2V0dGVyUmVnRXhwLm1hdGNoKGZ1
bmN0aW9uX3NvdXJjZSkgIT0gTm9uZQotICAgICAgICBpc19nbG9iYWxfcHJpdmF0ZSA9IGZ1bmN0
aW9uR2xvYmFsUHJpdmF0ZVJlZ0V4cC5tYXRjaChmdW5jdGlvbl9zb3VyY2UpICE9IE5vbmUKLSAg
ICAgICAgcGFyYW1ldGVycyA9IFtzLnN0cmlwKCkgZm9yIHMgaW4gZnVuY3Rpb25QYXJhbWV0ZXJG
aW5kZXIuZmluZGFsbChmdW5jdGlvbl9zb3VyY2UpWzBdLnNwbGl0KCcsJyldCi0gICAgICAgIGlm
IGxlbihwYXJhbWV0ZXJzWzBdKSA9PSAwOgotICAgICAgICAgICAgcGFyYW1ldGVycyA9IFtdCi0K
LSAgICAgICAgaWYgaXNfZ2V0dGVyIGFuZCBub3Qgb3ZlcnJpZGRlbl9uYW1lOgotICAgICAgICAg
ICAgb3ZlcnJpZGRlbl9uYW1lID0gIlwiZ2V0ICVzXCIiICUgKGZ1bmN0aW9uX25hbWUpCi0KLSAg
ICAgICAgaWYgbm90IG92ZXJyaWRkZW5fbmFtZToKLSAgICAgICAgICAgIG92ZXJyaWRkZW5fbmFt
ZSA9ICJzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obnVsbHB0cikiCi0KLSAgICAgICAgcmV0dXJu
IEJ1aWx0aW5GdW5jdGlvbihmdW5jdGlvbl9uYW1lLCBmdW5jdGlvbl9zb3VyY2UsIHBhcmFtZXRl
cnMsIGlzX2NvbnN0cnVjdG9yLCBpc19nbG9iYWxfcHJpdmF0ZSwgaW50cmluc2ljLCBvdmVycmlk
ZGVuX25hbWUpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgaW50ZXJmYWNlID0g
IiVzKCVzKSIgJSAoc2VsZi5mdW5jdGlvbl9uYW1lLCAnLCAnLmpvaW4oc2VsZi5wYXJhbWV0ZXJz
KSkKLSAgICAgICAgaWYgc2VsZi5pc19jb25zdHJ1Y3RvcjoKLSAgICAgICAgICAgIGludGVyZmFj
ZSA9IGludGVyZmFjZSArICIgW0NvbnN0cnVjdG9yXSIKLQotICAgICAgICByZXR1cm4gaW50ZXJm
YWNlCi0KLQotY2xhc3MgQnVpbHRpbnNDb2xsZWN0aW9uOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBmcmFtZXdvcmtfbmFtZSk6Ci0gICAgICAgIHNlbGYuX2NvcHlyaWdodF9saW5lcyA9IHNldCgp
Ci0gICAgICAgIHNlbGYub2JqZWN0cyA9IFtdCi0gICAgICAgIHNlbGYuZnJhbWV3b3JrID0gRnJh
bWV3b3JrLmZyb21TdHJpbmcoZnJhbWV3b3JrX25hbWUpCi0gICAgICAgIGxvZy5kZWJ1ZygiQ3Jl
YXRlZCBuZXcgQnVpbHRpbnMgY29sbGVjdGlvbi4iKQotCi0gICAgZGVmIHBhcnNlX2J1aWx0aW5z
X2ZpbGUoc2VsZiwgZmlsZW5hbWUsIHRleHQpOgotICAgICAgICBsb2cuZGVidWcoIlBhcnNpbmcg
YnVpbHRpbnMgZmlsZTogJXMiICUgZmlsZW5hbWUpCi0KLSAgICAgICAgcGFyc2VkX2NvcHlyaWdo
dHMgPSBzZXQoc2VsZi5fcGFyc2VfY29weXJpZ2h0X2xpbmVzKHRleHQpKQotICAgICAgICBzZWxm
Ll9jb3B5cmlnaHRfbGluZXMgPSBzZWxmLl9jb3B5cmlnaHRfbGluZXMudW5pb24ocGFyc2VkX2Nv
cHlyaWdodHMpCi0KLSAgICAgICAgbG9nLmRlYnVnKCJGb3VuZCBjb3B5cmlnaHQgbGluZXM6IikK
LSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fY29weXJpZ2h0X2xpbmVzOgotICAgICAgICAgICAg
bG9nLmRlYnVnKGxpbmUpCi0gICAgICAgIGxvZy5kZWJ1ZygiIikKLQotICAgICAgICBvYmplY3Rf
YW5ub3RhdGlvbnMgPSBzZWxmLl9wYXJzZV9hbm5vdGF0aW9ucyh0ZXh0KQotCi0gICAgICAgIG9i
amVjdF9uYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZmlsZW5h
bWUpKQotICAgICAgICBsb2cuZGVidWcoIlBhcnNpbmcgb2JqZWN0OiAlcyIgJSBvYmplY3RfbmFt
ZSkKLQotICAgICAgICBwYXJzZWRfZnVuY3Rpb25zID0gc2VsZi5fcGFyc2VfZnVuY3Rpb25zKHRl
eHQpCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBwYXJzZWRfZnVuY3Rpb25zOgotICAgICAgICAg
ICAgZnVuY3Rpb24ub2JqZWN0ID0gb2JqZWN0X25hbWUKLQotICAgICAgICBsb2cuZGVidWcoIlBh
cnNlZCBmdW5jdGlvbnM6IikKLSAgICAgICAgZm9yIGZ1bmMgaW4gcGFyc2VkX2Z1bmN0aW9uczoK
LSAgICAgICAgICAgIGxvZy5kZWJ1ZyhmdW5jKQotICAgICAgICBsb2cuZGVidWcoIiIpCi0KLSAg
ICAgICAgbmV3X29iamVjdCA9IEJ1aWx0aW5PYmplY3Qob2JqZWN0X25hbWUsIG9iamVjdF9hbm5v
dGF0aW9ucywgcGFyc2VkX2Z1bmN0aW9ucykKLSAgICAgICAgbmV3X29iamVjdC5jb2xsZWN0aW9u
ID0gc2VsZgotICAgICAgICBzZWxmLm9iamVjdHMuYXBwZW5kKG5ld19vYmplY3QpCi0KLSAgICBk
ZWYgY29weXJpZ2h0cyhzZWxmKToKLSAgICAgICAgb3duZXJfdG9feWVhcnMgPSBkaWN0KCkKLSAg
ICAgICAgY29weXJpZ2h0WWVhclJlZ0V4cCA9IHJlLmNvbXBpbGUociIoXGR7NH0pWywgXXswLDJ9
IikKLSAgICAgICAgb3duZXJTdGFydFJlZ0V4cCA9IHJlLmNvbXBpbGUociJbXlxkLCBdIikKLQot
ICAgICAgICAjIFJldHVybnMgZGVkdXBsaWNhdGVkIGNvcHlyaWdodHMga2V5ZWQgb24gdGhlIG93
bmVyLgotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9jb3B5cmlnaHRfbGluZXM6Ci0gICAgICAg
ICAgICB5ZWFycyA9IHNldChjb3B5cmlnaHRZZWFyUmVnRXhwLmZpbmRhbGwobGluZSkpCi0gICAg
ICAgICAgICBvd25lckluZGV4ID0gb3duZXJTdGFydFJlZ0V4cC5zZWFyY2gobGluZSkuc3RhcnQo
KQotICAgICAgICAgICAgb3duZXIgPSBsaW5lW293bmVySW5kZXg6XQotICAgICAgICAgICAgbG9n
LmRlYnVnKCJGb3VuZCB5ZWFyczogJXMgYW5kIG93bmVyOiAlcyIgJSAoeWVhcnMsIG93bmVyKSkK
LSAgICAgICAgICAgIGlmIG93bmVyIG5vdCBpbiBvd25lcl90b195ZWFyczoKLSAgICAgICAgICAg
ICAgICBvd25lcl90b195ZWFyc1tvd25lcl0gPSBzZXQoKQotCi0gICAgICAgICAgICBvd25lcl90
b195ZWFyc1tvd25lcl0gPSBvd25lcl90b195ZWFyc1tvd25lcl0udW5pb24oeWVhcnMpCi0KLSAg
ICAgICAgcmVzdWx0ID0gW10KLQotICAgICAgICBmb3Igb3duZXIsIHllYXJzIGluIG93bmVyX3Rv
X3llYXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzb3J0ZWRfeWVhcnMgPSBsaXN0KHllYXJzKQot
ICAgICAgICAgICAgc29ydGVkX3llYXJzLnNvcnQoKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiJXMgJXMiICUgKCcsICcuam9pbihzb3J0ZWRfeWVhcnMpLCBvd25lcikpCi0KLSAgICAgICAg
cmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIGFsbF9mdW5jdGlvbnMoc2VsZik6Ci0gICAgICAgIHJl
c3VsdCA9IFtdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5vYmplY3RzOgotICAgICAgICAg
ICAgcmVzdWx0LmV4dGVuZChvYmplY3QuZnVuY3Rpb25zKQotCi0gICAgICAgIHJlc3VsdC5zb3J0
KCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIGFsbF9pbnRlcm5hbF9mdW5jdGlv
bnMoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAgIGZvciBvYmplY3QgaW4gW28g
Zm9yIG8gaW4gc2VsZi5vYmplY3RzIGlmICdpbnRlcm5hbCcgaW4gby5hbm5vdGF0aW9uc106Ci0g
ICAgICAgICAgICByZXN1bHQuZXh0ZW5kKG9iamVjdC5mdW5jdGlvbnMpCi0KLSAgICAgICAgcmVz
dWx0LnNvcnQoKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICAjIFByaXZhdGUgbWV0aG9k
cy4KLQotICAgIGRlZiBfcGFyc2VfY29weXJpZ2h0X2xpbmVzKHNlbGYsIHRleHQpOgotICAgICAg
ICBsaWNlbnNlQmxvY2sgPSBtdWx0aWxpbmVDb21tZW50UmVnRXhwLmZpbmRhbGwodGV4dClbMF0K
LSAgICAgICAgbGljZW5zZUJsb2NrID0gbGljZW5zZUJsb2NrWzpsaWNlbnNlQmxvY2suaW5kZXgo
IlJlZGlzdHJpYnV0aW9uIildCi0KLSAgICAgICAgY29weXJpZ2h0TGluZXMgPSBbVGVtcGxhdGVz
LkRlZmF1bHRDb3B5cmlnaHRdCi0gICAgICAgIGZvciBsaW5lIGluIGxpY2Vuc2VCbG9jay5zcGxp
dCgiXG4iKToKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIi8qIiwgIiIpCi0gICAg
ICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIqLyIsICIiKQotICAgICAgICAgICAgbGluZSA9
IGxpbmUucmVwbGFjZSgiKiIsICIiKQotICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgi
Q29weXJpZ2h0IiwgIiIpCi0gICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJjb3B5cmln
aHQiLCAiIikKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIihDKSIsICIiKQotICAg
ICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiKGMpIiwgIiIpCi0gICAgICAgICAgICBsaW5l
ID0gbGluZS5zdHJpcCgpCi0KLSAgICAgICAgICAgIGlmIGxlbihsaW5lKSA9PSAwOgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGNvcHlyaWdodExpbmVzLmFwcGVuZChs
aW5lKQotCi0gICAgICAgIHJldHVybiBjb3B5cmlnaHRMaW5lcwotCi0gICAgZGVmIF9wYXJzZV9h
bm5vdGF0aW9ucyhzZWxmLCB0ZXh0KToKLSAgICAgICAgYW5ub3RhdGlvbnMgPSB7fQotCi0gICAg
ICAgIGZvciBtYXRjaCBpbiBrZXlWYWx1ZUFubm90YXRpb25Db21tZW50UmVnRXhwLmZpbmRpdGVy
KHRleHQpOgotICAgICAgICAgICAgKGtleSwgdmFsdWUpID0gbWF0Y2guZ3JvdXAoMSwgMikKLSAg
ICAgICAgICAgIGxvZy5kZWJ1ZygiRm91bmQgYW5ub3RhdGlvbjogJyVzJyA9PiAnJXMnIiAlIChr
ZXksIHZhbHVlKSkKLSAgICAgICAgICAgIGlmIGtleSBpbiBhbm5vdGF0aW9uczoKLSAgICAgICAg
ICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiRHVwbGljYXRlIGFubm90YXRpb24gZm91bmQ6
ICVzIiAlIGtleSkKLQotICAgICAgICAgICAgYW5ub3RhdGlvbnNba2V5XSA9IHZhbHVlCi0KLSAg
ICAgICAgZm9yIG1hdGNoIGluIGZsYWdBbm5vdGF0aW9uQ29tbWVudFJlZ0V4cC5maW5kaXRlcih0
ZXh0KToKLSAgICAgICAgICAgIGtleSA9IG1hdGNoLmdyb3VwKDEpCi0gICAgICAgICAgICBsb2cu
ZGVidWcoIkZvdW5kIGFubm90YXRpb246ICclcycgPT4gJ1RSVUUnIiAlIGtleSkKLSAgICAgICAg
ICAgIGlmIGtleSBpbiBhbm5vdGF0aW9uczoKLSAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4
Y2VwdGlvbigiRHVwbGljYXRlIGFubm90YXRpb24gZm91bmQ6ICVzIiAlIGtleSkKLQotICAgICAg
ICAgICAgYW5ub3RhdGlvbnNba2V5XSA9IFRydWUKLQotICAgICAgICByZXR1cm4gYW5ub3RhdGlv
bnMKLQotICAgIGRlZiBfcGFyc2VfZnVuY3Rpb25zKHNlbGYsIHRleHQpOgotICAgICAgICB0ZXh0
ID0gbXVsdGlsaW5lQ29tbWVudFJlZ0V4cC5zdWIoIi8qKi8iLCBzaW5nbGVMaW5lQ29tbWVudFJl
Z0V4cC5zdWIoIi8vXG4iLCB0ZXh0KSkKLQotICAgICAgICBtYXRjaGVzID0gW2Z1bmMgZm9yIGZ1
bmMgaW4gZnVuY3Rpb25IZWFkUmVnRXhwLmZpbmRpdGVyKHRleHQpXQotICAgICAgICBmdW5jdGlv
bkJvdW5kcyA9IFtdCi0gICAgICAgIHN0YXJ0ID0gMAotICAgICAgICBlbmQgPSAwCi0gICAgICAg
IGZvciBtYXRjaCBpbiBtYXRjaGVzOgotICAgICAgICAgICAgc3RhcnQgPSBtYXRjaC5zdGFydCgp
Ci0gICAgICAgICAgICBpZiBzdGFydCA8IGVuZDoKLSAgICAgICAgICAgICAgICBjb250aW51ZQot
ICAgICAgICAgICAgZW5kID0gbWF0Y2guZW5kKCkKLSAgICAgICAgICAgIHdoaWxlIHRleHRbZW5k
XSAhPSAneyc6Ci0gICAgICAgICAgICAgICAgZW5kID0gZW5kICsgMQotICAgICAgICAgICAgZGVw
dGggPSAxCi0gICAgICAgICAgICBlbmQgPSBlbmQgKyAxCi0gICAgICAgICAgICB3aGlsZSBkZXB0
aCA+IDA6Ci0gICAgICAgICAgICAgICAgaWYgdGV4dFtlbmRdID09ICd7JzoKLSAgICAgICAgICAg
ICAgICAgICAgZGVwdGggPSBkZXB0aCArIDEKLSAgICAgICAgICAgICAgICBlbGlmIHRleHRbZW5k
XSA9PSAnfSc6Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoID0gZGVwdGggLSAxCi0gICAgICAg
ICAgICAgICAgZW5kID0gZW5kICsgMQotICAgICAgICAgICAgZnVuY3Rpb25Cb3VuZHMuYXBwZW5k
KChzdGFydCwgZW5kKSkKLQotICAgICAgICBmdW5jdGlvblN0cmluZ3MgPSBbdGV4dFtzdGFydDpl
bmRdLnN0cmlwKCkgZm9yIChzdGFydCwgZW5kKSBpbiBmdW5jdGlvbkJvdW5kc10KLSAgICAgICAg
cmV0dXJuIG1hcChCdWlsdGluRnVuY3Rpb24uZnJvbVN0cmluZywgZnVuY3Rpb25TdHJpbmdzKQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRp
bnMvYnVpbHRpbnNfbW9kZWwucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZXhlY3V0YWJsZQoj
IyAtMSArMCwwICMjCi0qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9i
dWlsdGluc190ZW1wbGF0ZXMucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDIxNiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJp
Z2h0IChjKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5
cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBCdWlsdGlucyBnZW5lcmF0b3IgdGVt
cGxhdGVzLCB3aGljaCBjYW4gYmUgZmlsbGVkIHdpdGggc3RyaW5nLlRlbXBsYXRlLgotCi0KLWNs
YXNzIEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzOgotCi0gICAgRGVmYXVsdENvcHlyaWdodCA9
ICIyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iCi0gICAgTGljZW5zZVRleHQg
PSAoCi0gICAgIiIiUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLVRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi1C
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi1DT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi1JTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSIiIikKLQotICAgIERvTm90RWRpdFdhcm5pbmcgPSAoCi0gICAgIiIiLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEph
dmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSIiIikKLQotICAgIEhl
YWRlckluY2x1ZGVHdWFyZCA9ICgKLSAgICAiIiIjcHJhZ21hIG9uY2UiIiIpCi0KLSAgICBOYW1l
c3BhY2VUb3AgPSAoCi0gICAgIiIibmFtZXNwYWNlICR7bmFtZXNwYWNlfSB7IiIiKQotCi0gICAg
TmFtZXNwYWNlQm90dG9tID0gKAotICAgICIiIn0gLy8gbmFtZXNwYWNlICR7bmFtZXNwYWNlfSIi
IikKLQotICAgIENvbWJpbmVkSGVhZGVyU3RhdGljTWFjcm9zID0gKAotICAgICIiIiNkZWZpbmUg
REVDTEFSRV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlk
ZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLSAgICBKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZSog
Y29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJik7Ci0KLSR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hf
QlVJTFRJTl9DT0RFKERFQ0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9C
VUlMVElOX0dFTkVSQVRPUiIiIikKLQotICAgIFNlcGFyYXRlSGVhZGVyU3RhdGljTWFjcm9zID0g
KAotICAgICIiIiNkZWZpbmUgREVDTEFSRV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVu
Y3Rpb25OYW1lLCBvdmVycmlkZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLSAgICBKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJik7Ci0KLSR7bWFj
cm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9DT0RFKERFQ0xBUkVfQlVJ
TFRJTl9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9CVUlMVElOX0dFTkVSQVRPUiIiIikKLQot
ICAgIENvbWJpbmVkSlNDSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3MgPSAoCi0gICAgIiIiCi0j
ZGVmaW5lIERFRklORV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBv
dmVycmlkZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLUpTQzo6RnVuY3Rpb25FeGVjdXRhYmxl
KiBjb2RlTmFtZSMjR2VuZXJhdG9yKEpTQzo6Vk0mIHZtKSBcXAote1xcCi0gICAgcmV0dXJuIHZt
LmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5jb2RlTmFtZSMjRXhlY3V0YWJsZSgpLT5saW5rKHZtLCB2
bS5idWlsdGluRXhlY3V0YWJsZXMoKS0+Y29kZU5hbWUjI1NvdXJjZSgpLCBzdGQ6Om51bGxvcHQs
IHNfIyNjb2RlTmFtZSMjSW50cmluc2ljKTsgXAotfQotJHttYWNyb1ByZWZpeH1fRk9SRUFDSF9C
VUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9CVUlM
VElOX0dFTkVSQVRPUgotIiIiKQotCi0gICAgU2VwYXJhdGVKU0NJbXBsZW1lbnRhdGlvblN0YXRp
Y01hY3JvcyA9ICgKLSAgICAiIiIKLSNkZWZpbmUgREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKGNv
ZGVOYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJyaWRkZW5OYW1lLCBhcmd1bWVudENvdW50KSBcXAot
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNHZW5lcmF0b3IoSlNDOjpWTSYgdm0p
IFxcCi17XFwKLSAgICByZXR1cm4gdm0uYnVpbHRpbkV4ZWN1dGFibGVzKCktPmNvZGVOYW1lIyNF
eGVjdXRhYmxlKCktPmxpbmsodm0sIHZtLmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5jb2RlTmFtZSMj
U291cmNlKCksIHN0ZDo6bnVsbG9wdCwgc18jI2NvZGVOYW1lIyNJbnRyaW5zaWMpOyBcCi19Ci0k
e21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShERUZJTkVf
QlVJTFRJTl9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SCi0iIiIp
Ci0KLSAgICBDb21iaW5lZFdlYkNvcmVJbXBsZW1lbnRhdGlvblN0YXRpY01hY3JvcyA9ICgKLSAg
ICAgICAgIiIiCi0jZGVmaW5lIERFRklORV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVu
Y3Rpb25OYW1lLCBvdmVycmlkZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLUpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlKiBjb2RlTmFtZSMjR2VuZXJhdG9yKEpTQzo6Vk0mIHZtKSBcXAote1xcCi0g
ICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOyBcXAotICAgIHJldHVybiBjbGllbnREYXRhLT5idWlsdGluRnVu
Y3Rpb25zKCkuJHtvYmplY3ROYW1lTEN9QnVpbHRpbnMoKS5jb2RlTmFtZSMjRXhlY3V0YWJsZSgp
LT5saW5rKHZtLCBjbGllbnREYXRhLT5idWlsdGluRnVuY3Rpb25zKCkuJHtvYmplY3ROYW1lTEN9
QnVpbHRpbnMoKS5jb2RlTmFtZSMjU291cmNlKCksIHN0ZDo6bnVsbG9wdCwgc18jI2NvZGVOYW1l
IyNJbnRyaW5zaWMpOyBcXAotfQotJHttYWNyb1ByZWZpeH1fRk9SRUFDSF9CVUlMVElOX0NPREUo
REVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9CVUlMVElOX0dFTkVSQVRP
UgotIiIiKQotCi0gICAgU2VwYXJhdGVXZWJDb3JlSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3Mg
PSAoCi0gICAgICAgICIiIgotI2RlZmluZSBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IoY29kZU5h
bWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3VtZW50Q291bnQpIFxcCi1KU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJiB2bSkgXFwK
LXtcXAotICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsgXFwKLSAgICByZXR1cm4gY2xpZW50RGF0YS0+YnVp
bHRpbkZ1bmN0aW9ucygpLiR7b2JqZWN0TmFtZUxDfUJ1aWx0aW5zKCkuY29kZU5hbWUjI0V4ZWN1
dGFibGUoKS0+bGluayh2bSwgY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLiR7b2JqZWN0
TmFtZUxDfUJ1aWx0aW5zKCkuY29kZU5hbWUjI1NvdXJjZSgpLCBzdGQ6Om51bGxvcHQsIHNfIyNj
b2RlTmFtZSMjSW50cmluc2ljKTsgXFwKLX0KLSR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmpl
Y3RNYWNyb31fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IKLSIiIikKLQotICAgIFNlcGFyYXRlSGVhZGVyV3JhcHBl
ckJvaWxlcnBsYXRlID0gKAotICAgICIiImNsYXNzICR7b2JqZWN0TmFtZX1CdWlsdGluc1dyYXBw
ZXIgOiBwcml2YXRlIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNp
dCAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyKEpTQzo6Vk0qIHZtKQotICAgICAgICA6IG1f
dm0oKnZtKQotICAgICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JV
SUxUSU5fRlVOQ1RJT05fTkFNRShJTklUSUFMSVpFX0JVSUxUSU5fTkFNRVMpCi0jZGVmaW5lIElO
SVRJQUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUyhuYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJy
aWRkZW5OYW1lLCBsZW5ndGgpICwgbV8jI25hbWUjI1NvdXJjZShKU0M6Om1ha2VTb3VyY2UoU3Ry
aW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoc18jI25hbWUsIGxlbmd0aCksIHsgfSkpCi0gICAg
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9DT0RFKElO
SVRJQUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUykKLSN1bmRlZiBJTklUSUFMSVpFX0JVSUxU
SU5fU09VUkNFX01FTUJFUlMKLSAgICB7Ci0gICAgfQotCi0jZGVmaW5lIEVYUE9TRV9CVUlMVElO
X0VYRUNVVEFCTEVTKG5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGxlbmd0aCkg
XFwKLSAgICBKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuYW1lIyNFeGVjdXRhYmxl
KCk7IFxcCi0gICAgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBuYW1lIyNTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtXyMjbmFtZSMjU291cmNlOyB9Ci0gICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8k
e29iamVjdE1hY3JvfV9CVUlMVElOX0NPREUoRVhQT1NFX0JVSUxUSU5fRVhFQ1VUQUJMRVMpCi0j
dW5kZWYgRVhQT1NFX0JVSUxUSU5fRVhFQ1VUQUJMRVMKLQotICAgICR7bWFjcm9QcmVmaXh9X0ZP
UkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJ
Tl9JREVOVElGSUVSX0FDQ0VTU09SKQotCi0gICAgdm9pZCBleHBvcnROYW1lcygpOwotCi1wcml2
YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0KLSAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7
b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0JVSUxUSU5fTkFNRVMp
Ci0KLSNkZWZpbmUgREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKG5hbWUsIGZ1bmN0aW9u
TmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGxlbmd0aCkgXFwKLSAgICBKU0M6OlNvdXJjZUNvZGUgbV8j
I25hbWUjI1NvdXJjZTtcXAotICAgIEpTQzo6V2VhazxKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlPiBtXyMjbmFtZSMjRXhlY3V0YWJsZTsKLSAgICAke21hY3JvUHJlZml4fV9GT1JFQUNI
XyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJF
UlMpCi0jdW5kZWYgREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTCi0KLX07Ci0KLSNkZWZp
bmUgREVGSU5FX0JVSUxUSU5fRVhFQ1VUQUJMRVMobmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlk
ZGVuTmFtZSwgbGVuZ3RoKSBcXAotaW5saW5lIEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqICR7b2JqZWN0TmFtZX1CdWlsdGluc1dyYXBwZXI6Om5hbWUjI0V4ZWN1dGFibGUoKSBcXAot
e1xcCi0gICAgaWYgKCFtXyMjbmFtZSMjRXhlY3V0YWJsZSkge1xcCi0gICAgICAgIEpTQzo6SWRl
bnRpZmllciBleGVjdXRhYmxlTmFtZSA9IGZ1bmN0aW9uTmFtZSMjUHVibGljTmFtZSgpO1xcCi0g
ICAgICAgIGlmIChvdmVycmlkZGVuTmFtZSlcXAotICAgICAgICAgICAgZXhlY3V0YWJsZU5hbWUg
PSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fdm0sIG92ZXJyaWRkZW5OYW1lKTtcXAot
ICAgICAgICBtXyMjbmFtZSMjRXhlY3V0YWJsZSA9IEpTQzo6V2VhazxKU0M6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlPihKU0M6OmNyZWF0ZUJ1aWx0aW5FeGVjdXRhYmxlKG1fdm0sIG1fIyNu
YW1lIyNTb3VyY2UsIGV4ZWN1dGFibGVOYW1lLCBzXyMjbmFtZSMjQ29uc3RydWN0QWJpbGl0eSks
IHRoaXMsICZtXyMjbmFtZSMjRXhlY3V0YWJsZSk7XFwKLSAgICB9XFwKLSAgICByZXR1cm4gbV8j
I25hbWUjI0V4ZWN1dGFibGUuZ2V0KCk7XFwKLX0KLSR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtv
YmplY3RNYWNyb31fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTKQotI3Vu
ZGVmIERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTCi0KLWlubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluc1dyYXBwZXI6OmV4cG9ydE5hbWVzKCkKLXsKLSNkZWZpbmUgRVhQT1JUX0ZVTkNU
SU9OX05BTUUobmFtZSkgbV92bS5wcm9wZXJ0eU5hbWVzLT5hcHBlbmRFeHRlcm5hbE5hbWUobmFt
ZSMjUHVibGljTmFtZSgpLCBuYW1lIyNQcml2YXRlTmFtZSgpKTsKLSAgICAke21hY3JvUHJlZml4
fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShFWFBPUlRfRlVO
Q1RJT05fTkFNRSkKLSN1bmRlZiBFWFBPUlRfRlVOQ1RJT05fTkFNRQotfSIiIikKLQotICAgIFNl
cGFyYXRlSGVhZGVySW50ZXJuYWxGdW5jdGlvbnNCb2lsZXJwbGF0ZSA9ICgKLSAgICAiIiJjbGFz
cyAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
JHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0pIDogbV92bSh2bSkgeyB9
Ci0KLSAgICB2b2lkIGluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgdmlzaXQo
SlNDOjpTbG90VmlzaXRvciYpOwotCi1wdWJsaWM6Ci0gICAgSlNDOjpWTSYgbV92bTsKLQotI2Rl
ZmluZSBERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMoZnVuY3Rpb25OYW1lKSBcXAotICAg
IEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV8jI2Z1bmN0aW9uTmFtZSMjRnVu
Y3Rpb247Ci0gICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElO
X0ZVTkNUSU9OX05BTUUoREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQotI3VuZGVmIERF
Q0xBUkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUwotfTsKLQotaW5saW5lIHZvaWQgJHtvYmplY3RO
YW1lfUJ1aWx0aW5GdW5jdGlvbnM6OmluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotI2RlZmluZSBFWFBPUlRfRlVOQ1RJT04oY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwg
b3ZlcnJpZGRlbk5hbWUsIGxlbmd0aClcXAotICAgIG1fIyNmdW5jdGlvbk5hbWUjI0Z1bmN0aW9u
LnNldChtX3ZtLCAmZ2xvYmFsT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShtX3ZtLCBj
b2RlTmFtZSMjR2VuZXJhdG9yKG1fdm0pLCAmZ2xvYmFsT2JqZWN0KSk7Ci0gICAgJHttYWNyb1By
ZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0NPREUoRVhQT1JUX0ZVTkNUSU9O
KQotI3VuZGVmIEVYUE9SVF9GVU5DVElPTgotfQotCi1pbmxpbmUgdm9pZCAke29iamVjdE5hbWV9
QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSNk
ZWZpbmUgVklTSVRfRlVOQ1RJT04obmFtZSkgdmlzaXRvci5hcHBlbmQobV8jI25hbWUjI0Z1bmN0
aW9uKTsKLSAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5f
RlVOQ1RJT05fTkFNRShWSVNJVF9GVU5DVElPTikKLSN1bmRlZiBWSVNJVF9GVU5DVElPTgotfQot
IiIiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvY3NzbWluLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2Nzc21pbi5weQkocmV2aXNp
b24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvY3NzbWluLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC00Niw0ICs0Niw3IEBACiAgICAgaWYgc3lzLnZlcnNpb25faW5mb1sw
XSA9PSAzIGFuZCBzeXMuc3RkaW4uZW5jb2RpbmcgIT0gJ1VURi04JzoKICAgICAgICAgaW1wb3J0
IGlvCiAgICAgICAgIHN5cy5zdGRpbiA9IGlvLlRleHRJT1dyYXBwZXIoc3lzLnN0ZGluLmJ1ZmZl
ciwgZW5jb2Rpbmc9J1VURi04JykKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDMgYW5k
IHN5cy5zdGRvdXQuZW5jb2RpbmcgIT0gJ1VURi04JzoKKyAgICAgICAgaW1wb3J0IGlvCisgICAg
ICAgIHN5cy5zdGRvdXQgPSBpby5UZXh0SU9XcmFwcGVyKHN5cy5zdGRvdXQuYnVmZmVyLCBlbmNv
ZGluZz0nVVRGLTgnKQogICAgIHN5cy5zdGRvdXQud3JpdGUoY3NzbWluaWZ5KHN5cy5zdGRpbi5y
ZWFkKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMt
YnVpbHRpbnMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9wdHBhcnNlCiBpbXBv
cnQgb3MKK2ltcG9ydCBzeXMKIAogbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxu
YW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikKIGxvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQpAQCAtMzcsOSArMzgsOCBAQAogCiBmcm9tIGxhenl3cml0ZXIg
aW1wb3J0IExhenlGaWxlV3JpdGVyCiAKLWZyb20gYnVpbHRpbnMgaW1wb3J0ICoKK2Zyb20gd2ti
dWlsdGlucyBpbXBvcnQgKgogCi0KIGRlZiBjb25jYXRlbmF0ZWRfb3V0cHV0X2ZpbGVuYW1lKGJ1
aWx0aW5zX2ZpbGVzLCBmcmFtZXdvcmtfbmFtZSwgZ2VuZXJhdGVfb25seV93cmFwcGVyX2ZpbGVz
KToKICAgICBpZiBnZW5lcmF0ZV9vbmx5X3dyYXBwZXJfZmlsZXM6CiAgICAgICAgIHJldHVybiBm
cmFtZXdvcmtfbmFtZSArICdKU0J1aWx0aW5zLmgtcmVzdWx0JwpAQCAtNDYsNiArNDYsMTIgQEAK
ICAgICByZXR1cm4gb3MucGF0aC5iYXNlbmFtZShidWlsdGluc19maWxlc1swXSkgKyAnLXJlc3Vs
dCcKIAogCitkZWYgZG9vcGVuKGZpbGUsIG1vZGUpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8u
bWFqb3IgPT0gMjoKKyAgICAgICAgcmV0dXJuIG9wZW4oZmlsZSwgbW9kZSkKKyAgICBlbHNlOgor
ICAgICAgICByZXR1cm4gb3BlbihmaWxlLCBtb2RlLCBlbmNvZGluZz0iVVRGLTgiKQorCiBkZWYg
Z2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKGJ1aWx0aW5zX2ZpbGVzPVtdLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0aD1Ob25l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9v
dXRwdXQ9RmFsc2UsCkBAIC01OSw3ICs2NSw3IEBACiAgICAgbW9kZWwgPSBCdWlsdGluc0NvbGxl
Y3Rpb24oZnJhbWV3b3JrX25hbWU9ZnJhbWV3b3JrX25hbWUpCiAKICAgICBmb3IgZmlsZXBhdGgg
aW4gYnVpbHRpbnNfZmlsZXM6Ci0gICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInIiKSBhcyBm
aWxlOgorICAgICAgICB3aXRoIGRvb3BlbihmaWxlcGF0aCwgInIiKSBhcyBmaWxlOgogICAgICAg
ICAgICAgZmlsZV90ZXh0ID0gZmlsZS5yZWFkKCkKICAgICAgICAgICAgIGZpbGVfbmFtZSA9IG9z
LnBhdGguYmFzZW5hbWUoZmlsZXBhdGgpCiAKQEAgLTE0Niw3ICsxNTIsNyBAQAogICAgICAgICBm
b3IgZmlsZXBhdGggaW4gb3MubGlzdGRpcihhcmdfb3B0aW9ucy5pbnB1dF9kaXJlY3RvcnkpOgog
ICAgICAgICAgICAgaW5wdXRfZmlsZXBhdGhzLmFwcGVuZChvcy5wYXRoLmpvaW4oYXJnX29wdGlv
bnMuaW5wdXRfZGlyZWN0b3J5LCBmaWxlcGF0aCkpCiAKLSAgICBpbnB1dF9maWxlcGF0aHMgPSBz
b3J0ZWQoZmlsdGVyKGxhbWJkYSBuYW1lOiBmbm1hdGNoLmZubWF0Y2gobmFtZSwgJyouanMnKSwg
aW5wdXRfZmlsZXBhdGhzKSkKKyAgICBpbnB1dF9maWxlcGF0aHMgPSBzb3J0ZWQoW25hbWUgZm9y
IG5hbWUgaW4gaW5wdXRfZmlsZXBhdGhzIGlmIGZubWF0Y2guZm5tYXRjaChuYW1lLCAnKi5qcycp
XSkKIAogICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICdvdXRwdXRfcGF0aCc6IGFyZ19vcHRpb25z
Lm91dHB1dF9kaXJlY3RvcnksCkBAIC0xNTksNyArMTY1LDcgQEAKIAogICAgIGxvZy5kZWJ1Zygi
R2VuZXJhdGluZyBjb2RlIGZvciBidWlsdGlucy4iKQogICAgIGxvZy5kZWJ1ZygiUGFyc2VkIG9w
dGlvbnM6IikKLSAgICBmb3Igb3B0aW9uLCB2YWx1ZSBpbiBvcHRpb25zLml0ZW1zKCk6CisgICAg
Zm9yIG9wdGlvbiwgdmFsdWUgaW4gbGlzdChvcHRpb25zLml0ZW1zKCkpOgogICAgICAgICBsb2cu
ZGVidWcoIiAgICAlczogJXMiICUgKG9wdGlvbiwgdmFsdWUpKQogICAgIGxvZy5kZWJ1ZygiIikK
ICAgICBsb2cuZGVidWcoIklucHV0IGZpbGVzOiIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5vbmljYWxpemVMYW5ndWFnZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5vbmljYWxp
emVMYW5ndWFnZS5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDEzIEBACiAgICAgICAgIHByaW50KCJJL08gZXJyb3Igb3BlbmluZyB7
MH0sICh7MX0pOiB7Mn0iLmZvcm1hdChwYXRoLCBlLmVycm5vLCBlLnN0cmVycm9yKSkKICAgICAg
ICAgZXhpdCgxKQogCitkZWYgZG93cml0ZShmaWxlLCBzdHIpOgorICAgIGlmIHN5cy52ZXJzaW9u
X2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgZmlsZS53cml0ZShzdHIpCisgICAgZWxzZToKKyAg
ICAgICAgZmlsZS53cml0ZShieXRlcyhzdHIsICJ1dGYtOCIpKQogCisKIGNsYXNzIFN1YnRhZ1Jl
Z2lzdHJ5OgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5sYW5ndWFnZU1h
cCA9IHt9CkBAIC0xMDksNDMgKzExNSw0MyBAQAogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZSk6
CiAgICAgICAgIGlmIHNlbGYuZmlsZURhdGU6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKCIvLyBs
YW5ndWFnZS1zdWJ0YWctcmVnaXN0cnkgZmlsZSBkYXRlOiB7fVxuIi5mb3JtYXQoc2VsZi5maWxl
RGF0ZSkpCi0gICAgICAgIGZpbGUud3JpdGUoIlxuI3ByYWdtYSBvbmNlXG4iKQotICAgICAgICBm
aWxlLndyaXRlKCJcbiNpZiBFTkFCTEUoSU5UTClcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIlxu
bmFtZXNwYWNlIEpTQyB7XG4iKQorICAgICAgICAgICAgZG93cml0ZShmaWxlLCAiLy8gbGFuZ3Vh
Z2Utc3VidGFnLXJlZ2lzdHJ5IGZpbGUgZGF0ZToge31cbiIuZm9ybWF0KHNlbGYuZmlsZURhdGUp
KQorICAgICAgICBkb3dyaXRlKGZpbGUsICJcbiNwcmFnbWEgb25jZVxuIikKKyAgICAgICAgZG93
cml0ZShmaWxlLCAiXG4jaWYgRU5BQkxFKElOVEwpXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUs
ICJcbm5hbWVzcGFjZSBKU0Mge1xuIikKICAgICAgICAgc2VsZi5kdW1wTG9va3VwKGZpbGUsICJp
bnRsUHJlZmVycmVkTGFuZ3VhZ2VUYWciLCBzZWxmLmxhbmd1YWdlTWFwKQogICAgICAgICBzZWxm
LmR1bXBMb29rdXAoZmlsZSwgImludGxQcmVmZXJyZWRFeHRsYW5nVGFnIiwgc2VsZi5leHRsYW5n
TWFwKQogICAgICAgICBzZWxmLmR1bXBMb29rdXAoZmlsZSwgImludGxQcmVmZXJyZWRSZWdpb25U
YWciLCBzZWxmLnJlZ2lvbk1hcCkKICAgICAgICAgc2VsZi5kdW1wTG9va3VwKGZpbGUsICJpbnRs
UmVkdW5kYW50TGFuZ3VhZ2VUYWciLCBzZWxmLnJlZHVuZGFudE1hcCkKICAgICAgICAgc2VsZi5k
dW1wTG9va3VwKGZpbGUsICJpbnRsR3JhbmRmYXRoZXJlZExhbmd1YWdlVGFnIiwgc2VsZi5ncmFu
ZGZhdGhlcmVkTWFwKQotICAgICAgICBmaWxlLndyaXRlKCJcbn0gLy8gbmFtZXNwYWNlIEpTQ1xu
IikKLSAgICAgICAgZmlsZS53cml0ZSgiXG4jZW5kaWYgLy8gRU5BQkxFKElOVEwpXG4iKQorICAg
ICAgICBkb3dyaXRlKGZpbGUsICJcbn0gLy8gbmFtZXNwYWNlIEpTQ1xuIikKKyAgICAgICAgZG93
cml0ZShmaWxlLCAiXG4jZW5kaWYgLy8gRU5BQkxFKElOVEwpXG4iKQogCiAgICAgZGVmIGR1bXBM
b29rdXAoc2VsZiwgZmlsZSwgbmFtZSwgbWFwKToKLSAgICAgICAgZmlsZS53cml0ZSgiXG5zdGF0
aWMgU3RyaW5nIHt9KGNvbnN0IFN0cmluZyYgdGFnKVxue3tcbiIuZm9ybWF0KG5hbWUpKQotICAg
ICAgICBmaWxlLndyaXRlKCIgICAgLy8ge30gcG9zc2libGUgcmVwbGFjZW1lbnRzXG4iLmZvcm1h
dChsZW4obWFwKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIlxuc3RhdGljIFN0cmluZyB7fShj
b25zdCBTdHJpbmcmIHRhZylcbnt7XG4iLmZvcm1hdChuYW1lKSkKKyAgICAgICAgZG93cml0ZShm
aWxlLCAiICAgIC8vIHt9IHBvc3NpYmxlIHJlcGxhY2VtZW50c1xuIi5mb3JtYXQobGVuKG1hcCkp
KQogICAgICAgICAjIFdlIGNvdWxkIHBpY2sgdGhlIGxvb2t1cCBpbXBsZW1lbnRhdGlvbiBwZXIg
bWFwIGlmIGRlc2lyZWQKICAgICAgICAgIyBBbmVjZG90YWwgcGVyZjogaWYgPiBzd2l0Y2ggPiBo
YXNoIChzbG93ZXN0KQogICAgICAgICAjIENvZGUgY29tcGxleGl0eTogc3dpdGNoID4gaWYgPiBo
YXNoIChsZWFzdCBjb21wbGV4KQogICAgICAgICAjIEFsZ28gY29tcGxleGl0eTogaWYgPSBPKE4p
ID4gc3dpdGNoID4gTyhsb2cgTikgPiBoYXNoID0gTygxKSAobGVhc3QgY29tcGxleCkKICAgICAg
ICAgc2VsZi5kdW1wSWZMb29rdXAoZmlsZSwgbmFtZSwgbWFwKQotICAgICAgICBmaWxlLndyaXRl
KCJ9XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJ9XG4iKQogCiAgICAgZGVmIGR1bXBIYXNo
TG9va3VwKHNlbGYsIGZpbGUsIG5hbWUsIG1hcCk6Ci0gICAgICAgIGZpbGUud3JpdGUoIiAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4+IGNhY2hlO1xuIikK
LSAgICAgICAgZmlsZS53cml0ZSgiICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBtYXAgPSBj
YWNoZS5nZXQoKTtcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICBpZiAoVU5MSUtFTFkobWFw
LmlzRW1wdHkoKSkpIHtcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4+IGNhY2hlO1xuIikKKyAgICAgICAg
ZG93cml0ZShmaWxlLCAiICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBtYXAgPSBjYWNoZS5n
ZXQoKTtcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICBpZiAoVU5MSUtFTFkobWFwLmlz
RW1wdHkoKSkpIHtcbiIpCiAgICAgICAgIGVudHJpZXMgPSBbIiAgICAgICAgbWFwLmFkZChcInt9
XCJfcywgXCJ7fVwiX3MpO1xuIi5mb3JtYXQoaywgdikgZm9yIGssIHYgaW4gbWFwLml0ZW1zKCld
CiAgICAgICAgIGVudHJpZXMuc29ydCgpCi0gICAgICAgIGZpbGUud3JpdGUoIiIuam9pbihlbnRy
aWVzKSkKLSAgICAgICAgZmlsZS53cml0ZSgiICAgIH1cbiIpCi0gICAgICAgIGZpbGUud3JpdGUo
IiAgICByZXR1cm4gbWFwLmdldCh0YWcpO1xuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiIi5q
b2luKGVudHJpZXMpKQorICAgICAgICBkb3dyaXRlKGZpbGUgLCIgICAgfVxuIikKKyAgICAgICAg
ZG93cml0ZShmaWxlLCAiICAgIHJldHVybiBtYXAuZ2V0KHRhZyk7XG4iKQogCiAgICAgZGVmIGR1
bXBJZkxvb2t1cChzZWxmLCBmaWxlLCBuYW1lLCBtYXApOgogICAgICAgICBlbnRyaWVzID0gWyIg
ICAgaWYgKHRhZyA9PSBcInt9XCIpXG4gICAgICAgIHJldHVybiBcInt9XCJfczsiLmZvcm1hdChr
LCB2KSBmb3IgaywgdiBpbiBtYXAuaXRlbXMoKV0KICAgICAgICAgZW50cmllcy5zb3J0KCkKLSAg
ICAgICAgZmlsZS53cml0ZSgiXG4iLmpvaW4oZW50cmllcykpCi0gICAgICAgIGZpbGUud3JpdGUo
IlxuICAgIHJldHVybiBTdHJpbmcoKTtcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIlxuIi5q
b2luKGVudHJpZXMpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJcbiAgICByZXR1cm4gU3RyaW5n
KCk7XG4iKQogCiAgICAgZGVmIGR1bXBTd2l0Y2hMb29rdXAoc2VsZiwgZmlsZSwgbmFtZSwgbWFw
KToKICAgICAgICAgdHJlZSA9IHt9CkBAIC0xNTcsMjUgKzE2MywyNSBAQAogICAgICAgICAgICAg
ICAgIG5vZGUgPSBub2RlW2NoYXJdCiAgICAgICAgICAgICBub2RlWyJ2YWx1ZSJdID0gdgogICAg
ICAgICBzZWxmLmR1bXBTd2l0Y2hMb29rdXBUcmVlKGZpbGUsIHRyZWUsIDApCi0gICAgICAgIGZp
bGUud3JpdGUoIlxuICAgIHJldHVybiBTdHJpbmcoKTtcbiIpCisgICAgICAgIGRvd3JpdGUoZmls
ZSwgIlxuICAgIHJldHVybiBTdHJpbmcoKTtcbiIpCiAKICAgICBkZWYgZHVtcFN3aXRjaExvb2t1
cFRyZWUoc2VsZiwgZmlsZSwgdHJlZSwgbGV2ZWwpOgogICAgICAgICBpbmRlbnQgPSAiIi5sanVz
dCgobGV2ZWwgKyAxKSAqIDQpCiAgICAgICAgIGlmICJ2YWx1ZSIgaW4gdHJlZToKLSAgICAgICAg
ICAgIGZpbGUud3JpdGUoaW5kZW50ICsgImlmICh0YWcubGVuZ3RoKCkgPT0ge30pXG4iLmZvcm1h
dChsZXZlbCkpCi0gICAgICAgICAgICBmaWxlLndyaXRlKGluZGVudCArICIgICAgcmV0dXJuIFwi
e31cIl9zO1xuIi5mb3JtYXQodHJlZVsidmFsdWUiXSkpCisgICAgICAgICAgICBkb3dyaXRlKGZp
bGUsIGluZGVudCArICJpZiAodGFnLmxlbmd0aCgpID09IHt9KVxuIi5mb3JtYXQobGV2ZWwpKQor
ICAgICAgICAgICAgZG93cml0ZShmaWxlLCBpbmRlbnQgKyAiICAgIHJldHVybiBcInt9XCJfcztc
biIuZm9ybWF0KHRyZWVbInZhbHVlIl0pKQogICAgICAgICAgICAgZGVsIHRyZWVbInZhbHVlIl0K
ICAgICAgICAga2V5cyA9IHRyZWUua2V5cygpCiAgICAgICAgIGtleXMuc29ydCgpCiAgICAgICAg
IGlmIGxlbihrZXlzKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZpbGUud3Jp
dGUoaW5kZW50ICsgInN3aXRjaCAodGFnW3t9XSkge3tcbiIuZm9ybWF0KGxldmVsKSkKKyAgICAg
ICAgZG93cml0ZShmaWxlLCBpbmRlbnQgKyAic3dpdGNoICh0YWdbe31dKSB7e1xuIi5mb3JtYXQo
bGV2ZWwpKQogICAgICAgICBmb3Iga2V5IGluIGtleXM6Ci0gICAgICAgICAgICBmaWxlLndyaXRl
KGluZGVudCArICJjYXNlIHt9OlxuIi5mb3JtYXQob3JkKGtleSkpKQorICAgICAgICAgICAgZG93
cml0ZShmaWxlLCBpbmRlbnQgKyAiY2FzZSB7fTpcbiIuZm9ybWF0KG9yZChrZXkpKSkKICAgICAg
ICAgICAgIHNlbGYuZHVtcFN3aXRjaExvb2t1cFRyZWUoZmlsZSwgdHJlZVtrZXldLCBsZXZlbCAr
IDEpCi0gICAgICAgICAgICBmaWxlLndyaXRlKGluZGVudCArICIgICAgYnJlYWs7XG4iKQotICAg
ICAgICBmaWxlLndyaXRlKGluZGVudCArICJkZWZhdWx0OiBicmVhaztcbiIpCi0gICAgICAgIGZp
bGUud3JpdGUoaW5kZW50ICsgIn1cbiIpCisgICAgICAgICAgICBkb3dyaXRlKGZpbGUsIGluZGVu
dCArICIgICAgYnJlYWs7XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsIGluZGVudCArICJkZWZh
dWx0OiBicmVhaztcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgaW5kZW50ICsgIn1cbiIpCiAK
IAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKQEAgLTE5MSwxMiArMTk3LDEyIEBACiAgICAg
cmVnaXN0cnlGaWxlID0gb3Blbk9yRXhpdChyZWdpc3RyeVBhdGgsICJyIikKICAgICBpbnRsQ2Fu
b25IRmlsZSA9IG9wZW5PckV4aXQoaW50bENhbm9uSFBhdGgsICJ3YiIpCiAKLSAgICBpbnRsQ2Fu
b25IRmlsZS53cml0ZShoZWFkZXIpCisgICAgZG93cml0ZShpbnRsQ2Fub25IRmlsZSwgaGVhZGVy
KQogCiAgICAgcmVnaXN0cnkgPSBTdWJ0YWdSZWdpc3RyeSgpCiAgICAgcmVnaXN0cnkucGFyc2Uo
cmVnaXN0cnlGaWxlKQogICAgIHJlZ2lzdHJ5LmR1bXAoaW50bENhbm9uSEZpbGUpCiAKLSAgICBp
bnRsQ2Fub25IRmlsZS53cml0ZShmb290ZXIpCisgICAgZG93cml0ZShpbnRsQ2Fub25IRmlsZSwg
Zm9vdGVyKQogCiAgICAgZXhpdCgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvZ2VuZXJhdGVZYXJyVW5pY29kZVByb3BlcnR5VGFibGVzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlWWFyclVuaWNvZGVQcm9wZXJ0eVRh
Ymxlcy5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvZ2VuZXJhdGVZYXJyVW5pY29kZVByb3BlcnR5VGFibGVzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC05MCw3ICs5MCwxMCBAQAogCiBkZWYgb3Blbk9yRXhpdChwYXRoLCBtb2RlKToKICAgICB0cnk6
Ci0gICAgICAgIHJldHVybiBvcGVuKHBhdGgsIG1vZGUpCisgICAgICAgIGlmIHN5cy52ZXJzaW9u
X2luZm8ubWFqb3IgPT0gMiBvciBtb2RlID09ICJ3YiIgb3IgbW9kZSA9PSAicmIiOgorICAgICAg
ICAgICAgcmV0dXJuIG9wZW4ocGF0aCwgbW9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJldHVybiBvcGVuKHBhdGgsIG1vZGUsIGVuY29kaW5nID0gIlVURi04IikKICAgICBleGNlcHQg
SU9FcnJvciBhcyBlOgogICAgICAgICBwcmludCgiSS9PIGVycm9yIG9wZW5pbmcgezB9LCAoezF9
KTogezJ9Ii5mb3JtYXQocGF0aCwgZS5lcnJubywgZS5zdHJlcnJvcikpCiAgICAgICAgIGV4aXQo
MSkKQEAgLTIxNSw2ICsyMTgsMTMgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuYWxpYXNUb1Njcmlw
dFtuYW1lXQogCiAKK2RlZiBkb3dyaXRlKGZpbGUsIHN0cik6CisgICAgaWYgc3lzLnZlcnNpb25f
aW5mby5tYWpvciA9PSAyOgorICAgICAgICBmaWxlLndyaXRlKHN0cikKKyAgICBlbHNlOgorICAg
ICAgICBmaWxlLndyaXRlKGJ5dGVzKHN0ciwgInV0Zi04IikpCisKKwogY2xhc3MgUHJvcGVydHlE
YXRhOgogICAgIGFsbFByb3BlcnR5RGF0YSA9IFtdCiAKQEAgLTMyMiw3ICszMzIsNyBAQAogICAg
ICAgICBpbnNlcnRMb2NhdGlvbiA9IE5vbmUKICAgICAgICAgbG93Q29kZVBvaW50ID0gTm9uZQog
ICAgICAgICBoaWdoQ29kZVBvaW50ID0gTm9uZQotICAgICAgICBmb3IgaWR4IGluIHhyYW5nZShs
ZW4obWF0Y2hlcykpOgorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihtYXRjaGVzKSk6CiAg
ICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbaWR4XQogICAgICAgICAgICAgaWYgY29kZVBvaW50
ID09IG1hdGNoICsgMToKICAgICAgICAgICAgICAgICBsb3dDb2RlUG9pbnQgPSBtYXRjaApAQCAt
MzUxLDIyICszNjEsMjIgQEAKICAgICAgICAgICAgIGxvd0NvZGVQb2ludCA9IGNvZGVQb2ludAog
ICAgICAgICAgICAgaGlnaENvZGVQb2ludCA9IGNvZGVQb2ludAogCi0gICAgICAgIGZvciBpZHgg
aW4geHJhbmdlKGxlbihyYW5nZXMpKToKLSAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VzW2lkeF0K
LSAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA+PSByYW5nZVswXSBhbmQgaGlnaENvZGVQb2lu
dCA8PSByYW5nZVsxXToKKyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4ocmFuZ2VzKSk6Cisg
ICAgICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNbaWR4XQorICAgICAgICAgICAgaWYgbG93Q29k
ZVBvaW50ID49IGN1cl9yYW5nZVswXSBhbmQgaGlnaENvZGVQb2ludCA8PSBjdXJfcmFuZ2VbMV06
CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPD0g
KHJhbmdlWzFdICsgMSkgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gKHJhbmdlWzBdIC0gMSk6CisgICAg
ICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gKGN1cl9yYW5nZVsxXSArIDEpIGFuZCBoaWdoQ29k
ZVBvaW50ID49IChjdXJfcmFuZ2VbMF0gLSAxKToKICAgICAgICAgICAgICAgICB3aGlsZSBpZHgg
PCBsZW4ocmFuZ2VzKSBhbmQgaGlnaENvZGVQb2ludCA+PSAocmFuZ2VzW2lkeF1bMF0gLSAxKToK
LSAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAgICAgICAgICAg
ICAgICBsb3dDb2RlUG9pbnQgPSBtaW4obG93Q29kZVBvaW50LCByYW5nZVswXSkKLSAgICAgICAg
ICAgICAgICAgICAgaGlnaENvZGVQb2ludCA9IG1heChoaWdoQ29kZVBvaW50LCByYW5nZVsxXSkK
KyAgICAgICAgICAgICAgICAgICAgY3VyX3JhbmdlID0gcmFuZ2VzW2lkeF0KKyAgICAgICAgICAg
ICAgICAgICAgbG93Q29kZVBvaW50ID0gbWluKGxvd0NvZGVQb2ludCwgY3VyX3JhbmdlWzBdKQor
ICAgICAgICAgICAgICAgICAgICBoaWdoQ29kZVBvaW50ID0gbWF4KGhpZ2hDb2RlUG9pbnQsIGN1
cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAgICAgZGVsIHJhbmdlc1tpZHhdCi0gICAgICAg
ICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50IC0g
KHJhbmdlWzFdIC0gcmFuZ2VbMF0pIC0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvZGVQ
b2ludENvdW50ID0gc2VsZi5jb2RlUG9pbnRDb3VudCAtIChjdXJfcmFuZ2VbMV0gLSBjdXJfcmFu
Z2VbMF0pIC0gMQogCiAgICAgICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIChsb3dDb2Rl
UG9pbnQsIGhpZ2hDb2RlUG9pbnQpKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291
bnQgPSBzZWxmLmNvZGVQb2ludENvdW50ICsgKGhpZ2hDb2RlUG9pbnQgLSBsb3dDb2RlUG9pbnQp
ICsgMQogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZWxpZiBoaWdoQ29kZVBv
aW50IDwgcmFuZ2VbMF06CisgICAgICAgICAgICBlbGlmIGhpZ2hDb2RlUG9pbnQgPCBjdXJfcmFu
Z2VbMF06CiAgICAgICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50ICE9IGhpZ2hDb2RlUG9pbnQ6
CiAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQoaWR4LCAobG93Q29kZVBvaW50LCBo
aWdoQ29kZVBvaW50KSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9
IHNlbGYuY29kZVBvaW50Q291bnQgKyAoaGlnaENvZGVQb2ludCAtIGxvd0NvZGVQb2ludCkgKyAx
CkBAIC0zODQsNyArMzk0LDcgQEAKIAogICAgIGRlZiBhZGRSYW5nZVVub3JkZXJlZEZvck1hdGNo
ZXNBbmRSYW5nZXMoc2VsZiwgbG93Q29kZVBvaW50LCBoaWdoQ29kZVBvaW50LCBtYXRjaGVzLCBy
YW5nZXMpOgogICAgICAgICBpZiBsZW4obWF0Y2hlcykgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gbWF0
Y2hlc1swXSBhbmQgbG93Q29kZVBvaW50IDw9IG1hdGNoZXNbLTFdOgotICAgICAgICAgICAgZm9y
IGlkeCBpbiB4cmFuZ2UobGVuKG1hdGNoZXMpKToKKyAgICAgICAgICAgIGZvciBpZHggaW4gcmFu
Z2UobGVuKG1hdGNoZXMpKToKICAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbaWR4XQog
ICAgICAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA8PSBtYXRjaCBhbmQgaGlnaENvZGVQb2lu
dCA+PSBtYXRjaDoKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgaWR4IDwgbGVuKG1hdGNoZXMp
IGFuZCBoaWdoQ29kZVBvaW50ID49IG1hdGNoZXNbaWR4XToKQEAgLTQxNCwyMiArNDI0LDIyIEBA
CiAgICAgICAgICAgICAgICAgZWxpZiBoaWdoQ29kZVBvaW50IDwgbWF0Y2g6CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrCiAKLSAgICAgICAgZm9yIGlkeCBpbiB4cmFuZ2UobGVuKHJhbmdlcykp
OgotICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAgICAgICAgaWYgbG93Q29k
ZVBvaW50ID49IHJhbmdlWzBdIGFuZCBoaWdoQ29kZVBvaW50IDw9IHJhbmdlWzFdOgorICAgICAg
ICBmb3IgaWR4IGluIHJhbmdlKGxlbihyYW5nZXMpKToKKyAgICAgICAgICAgIGN1cl9yYW5nZSA9
IHJhbmdlc1tpZHhdCisgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPj0gY3VyX3JhbmdlWzBd
IGFuZCBoaWdoQ29kZVBvaW50IDw9IGN1cl9yYW5nZVsxXToKICAgICAgICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA8PSAocmFuZ2VbMV0gKyAxKSBhbmQgaGln
aENvZGVQb2ludCA+PSAocmFuZ2VbMF0gLSAxKToKKyAgICAgICAgICAgIGlmIGxvd0NvZGVQb2lu
dCA8PSAoY3VyX3JhbmdlWzFdICsgMSkgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gKGN1cl9yYW5nZVsw
XSAtIDEpOgogICAgICAgICAgICAgICAgIHdoaWxlIGlkeCA8IGxlbihyYW5nZXMpIGFuZCBoaWdo
Q29kZVBvaW50ID49IChyYW5nZXNbaWR4XVswXSAtIDEpOgotICAgICAgICAgICAgICAgICAgICBy
YW5nZSA9IHJhbmdlc1tpZHhdCi0gICAgICAgICAgICAgICAgICAgIGxvd0NvZGVQb2ludCA9IG1p
bihsb3dDb2RlUG9pbnQsIHJhbmdlWzBdKQotICAgICAgICAgICAgICAgICAgICBoaWdoQ29kZVBv
aW50ID0gbWF4KGhpZ2hDb2RlUG9pbnQsIHJhbmdlWzFdKQorICAgICAgICAgICAgICAgICAgICBj
dXJfcmFuZ2UgPSByYW5nZXNbaWR4XQorICAgICAgICAgICAgICAgICAgICBsb3dDb2RlUG9pbnQg
PSBtaW4obG93Q29kZVBvaW50LCBjdXJfcmFuZ2VbMF0pCisgICAgICAgICAgICAgICAgICAgIGhp
Z2hDb2RlUG9pbnQgPSBtYXgoaGlnaENvZGVQb2ludCwgY3VyX3JhbmdlWzFdKQogICAgICAgICAg
ICAgICAgICAgICBkZWwgcmFuZ2VzW2lkeF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2Rl
UG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgLSAocmFuZ2VbMV0gLSByYW5nZVswXSkg
LSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQ
b2ludENvdW50IC0gKGN1cl9yYW5nZVsxXSAtIGN1cl9yYW5nZVswXSkgLSAxCiAKICAgICAgICAg
ICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCkp
CiAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291
bnQgKyAoaGlnaENvZGVQb2ludCAtIGxvd0NvZGVQb2ludCkgKyAxCiAgICAgICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgICAgICBlbGlmIGhpZ2hDb2RlUG9pbnQgPCByYW5nZVswXToKKyAgICAg
ICAgICAgIGVsaWYgaGlnaENvZGVQb2ludCA8IGN1cl9yYW5nZVswXToKICAgICAgICAgICAgICAg
ICByYW5nZXMuaW5zZXJ0KGlkeCwgKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCkpCiAgICAg
ICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgKyAo
aGlnaENvZGVQb2ludCAtIGxvd0NvZGVQb2ludCkgKyAxCiAgICAgICAgICAgICAgICAgcmV0dXJu
CkBAIC00NTksMTMgKzQ2OSwxMyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYWRkUmFuZ2VVbm9y
ZGVyZWRGb3JNYXRjaGVzQW5kUmFuZ2VzKGZpcnN0VW5pY29kZUNvZGVQb2ludCwgaGlnaENvZGVQ
b2ludCwgc2VsZi51bmljb2RlTWF0Y2hlcywgc2VsZi51bmljb2RlUmFuZ2VzKQogCiAgICAgZGVm
IHJlbW92ZU1hdGNoRnJvbVJhbmdlcyhzZWxmLCBjb2RlUG9pbnQsIHJhbmdlcyk6Ci0gICAgICAg
IGZvciBpZHggaW4geHJhbmdlKGxlbihyYW5nZXMpKToKLSAgICAgICAgICAgIHJhbmdlID0gcmFu
Z2VzW2lkeF0KLSAgICAgICAgICAgIGlmIHJhbmdlWzBdIDw9IGNvZGVQb2ludCBhbmQgY29kZVBv
aW50IDw9IHJhbmdlWzFdOgorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihyYW5nZXMpKToK
KyAgICAgICAgICAgIGN1cl9yYW5nZSA9IHJhbmdlc1tpZHhdCisgICAgICAgICAgICBpZiBjdXJf
cmFuZ2VbMF0gPD0gY29kZVBvaW50IGFuZCBjb2RlUG9pbnQgPD0gY3VyX3JhbmdlWzFdOgogICAg
ICAgICAgICAgICAgIHJhbmdlcy5wb3AoaWR4KQotICAgICAgICAgICAgICAgIGlmIHJhbmdlWzBd
IDwgY29kZVBvaW50IGFuZCBjb2RlUG9pbnQgPCByYW5nZVsxXToKLSAgICAgICAgICAgICAgICAg
ICAgbG93UmFuZ2UgPSAocmFuZ2VbMF0sIGNvZGVQb2ludCAtIDEpCi0gICAgICAgICAgICAgICAg
ICAgIGhpZ2hSYW5nZSA9IChjb2RlUG9pbnQgKyAxLCByYW5nZVsxXSkKKyAgICAgICAgICAgICAg
ICBpZiBjdXJfcmFuZ2VbMF0gPCBjb2RlUG9pbnQgYW5kIGNvZGVQb2ludCA8IGN1cl9yYW5nZVsx
XToKKyAgICAgICAgICAgICAgICAgICAgbG93UmFuZ2UgPSAoY3VyX3JhbmdlWzBdLCBjb2RlUG9p
bnQgLSAxKQorICAgICAgICAgICAgICAgICAgICBoaWdoUmFuZ2UgPSAoY29kZVBvaW50ICsgMSwg
Y3VyX3JhbmdlWzFdKQogICAgICAgICAgICAgICAgICAgICAjIFNpbmNlIGxpc3QuaW5zZXJ0IGlu
c2VydHMgYmVmb3JlIHRoZSBpbmRleCBnaXZlbiwgaGFuZGxlIHRoZSBoaWdoIHJhbmdlIGZpcnN0
CiAgICAgICAgICAgICAgICAgICAgIGlmIGhpZ2hSYW5nZVswXSA9PSBoaWdoUmFuZ2VbMV06CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZE1hdGNoVW5vcmRlcmVkKGhpZ2hSYW5nZVsw
XSkKQEAgLTQ3NiwxNCArNDg2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgbG93UmFuZ2UpCiAgICAgICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgcmFuZ2VbMF0gPT0gY29kZVBv
aW50OgotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSAoY29kZVBvaW50ICsgMSwgcmFu
Z2VbMV0pCisgICAgICAgICAgICAgICAgICAgIGlmIGN1cl9yYW5nZVswXSA9PSBjb2RlUG9pbnQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfcmFuZ2UgPSAoY29kZVBvaW50ICsgMSwgY3Vy
X3JhbmdlWzFdKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICAgICAgcmFuZ2UgPSAocmFuZ2VbMF0sIGNvZGVQb2ludCAtIDEpCi0gICAgICAgICAgICAgICAg
ICAgIGlmIHJhbmdlWzBdID09IHJhbmdlWzFdOgotICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5hZGRNYXRjaFVub3JkZXJlZChyYW5nZVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cl9yYW5nZSA9IChjdXJfcmFuZ2VbMF0sIGNvZGVQb2ludCAtIDEpCisgICAgICAgICAgICAgICAg
ICAgIGlmIGN1cl9yYW5nZVswXSA9PSBjdXJfcmFuZ2VbMV06CisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmFkZE1hdGNoVW5vcmRlcmVkKGN1cl9yYW5nZVswXSkKICAgICAgICAgICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQoaWR4LCBy
YW5nZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQoaWR4LCBjdXJfcmFu
Z2UpCiAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50
Q291bnQgLSAxCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKQEAgLTUwNSwzOCArNTE1LDM4IEBA
CiAgICAgICAgIHZhbHVlc1RoaXNMaW5lID0gMAogICAgICAgICBmaXJzdFZhbHVlID0gVHJ1ZQog
Ci0gICAgICAgIGZpbGUud3JpdGUoInsiKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJ7IikKICAg
ICAgICAgZm9yIGVsZW0gaW4gZGF0YUxpc3Q6CiAgICAgICAgICAgICBpZiBmaXJzdFZhbHVlOgog
ICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgPSBGYWxzZQogICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBmaWxlLndyaXRlKCIsICIpCisgICAgICAgICAgICAgICAgZG93cml0ZShm
aWxlLCAiLCAiKQogICAgICAgICAgICAgdmFsdWVzVGhpc0xpbmUgPSB2YWx1ZXNUaGlzTGluZSAr
IDEKICAgICAgICAgICAgIGlmIHZhbHVlc1RoaXNMaW5lID4gdmFsdWVzUGVyTGluZToKLSAgICAg
ICAgICAgICAgICBmaWxlLndyaXRlKCJcbiAgICAgICAgICAgICAgICAgIikKKyAgICAgICAgICAg
ICAgICBkb3dyaXRlKGZpbGUsICJcbiAgICAgICAgICAgICAgICAgIikKICAgICAgICAgICAgICAg
ICB2YWx1ZXNUaGlzTGluZSA9IDEKICAgICAgICAgICAgIGZvcm1hdHRlcihmaWxlLCBlbGVtKQot
ICAgICAgICBmaWxlLndyaXRlKCJ9IikKKyAgICAgICAgZG93cml0ZShmaWxlLCAifSIpCiAKICAg
ICBkZWYgZHVtcChzZWxmLCBmaWxlLCBjb21tYUFmdGVyKToKLSAgICAgICAgZmlsZS53cml0ZSgi
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDaGFyYWN0ZXJDbGFzcz4ge30oKVxue3tcbiIuZm9ybWF0
KHNlbGYuZ2V0Q3JlYXRlRnVuY05hbWUoKSkpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICAvLyBO
YW1lID0ge30sIG51bWJlciBvZiBjb2RlUG9pbnRzOiB7fVxuIi5mb3JtYXQoc2VsZi5uYW1lLCBz
ZWxmLmNvZGVQb2ludENvdW50KSkKLSAgICAgICAgZmlsZS53cml0ZSgiICAgIGF1dG8gY2hhcmFj
dGVyQ2xhc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPENoYXJhY3RlckNsYXNzPihcbiIpCi0gICAgICAg
IGZpbGUud3JpdGUoIiAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFyMzI+KCIpCi0g
ICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA4LCBzZWxmLm1hdGNoZXMsIGxhbWJkYSBm
aWxlLCBtYXRjaDogKGZpbGUud3JpdGUoInswOjA9IzR4fSIuZm9ybWF0KG1hdGNoKSkpKQotICAg
ICAgICBmaWxlLndyaXRlKCIpLFxuIikKLSAgICAgICAgZmlsZS53cml0ZSgiICAgICAgICBzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8Q2hhcmFjdGVyUmFuZ2U+KCIpCi0gICAgICAgIHNlbGYuZHVtcE1h
dGNoRGF0YShmaWxlLCA0LCBzZWxmLnJhbmdlcywgbGFtYmRhIGZpbGUsIHJhbmdlOiAoZmlsZS53
cml0ZSgie3t7MDowPSM0eH0sIHsxOjA9IzR4fX19Ii5mb3JtYXQocmFuZ2VbMF0sIHJhbmdlWzFd
KSkpKQotICAgICAgICBmaWxlLndyaXRlKCIpLFxuIikKLSAgICAgICAgZmlsZS53cml0ZSgiICAg
ICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VUNoYXIzMj4oIikKLSAgICAgICAgc2VsZi5kdW1w
TWF0Y2hEYXRhKGZpbGUsIDgsIHNlbGYudW5pY29kZU1hdGNoZXMsIGxhbWJkYSBmaWxlLCBtYXRj
aDogKGZpbGUud3JpdGUoInswOjA9IzZ4fSIuZm9ybWF0KG1hdGNoKSkpKQotICAgICAgICBmaWxl
LndyaXRlKCIpLFxuIikKLSAgICAgICAgZmlsZS53cml0ZSgiICAgICAgICBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8Q2hhcmFjdGVyUmFuZ2U+KCIpCi0gICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShm
aWxlLCA0LCBzZWxmLnVuaWNvZGVSYW5nZXMsIGxhbWJkYSBmaWxlLCByYW5nZTogKGZpbGUud3Jp
dGUoInt7ezA6MD0jNnh9LCB7MTowPSM2eH19fSIuZm9ybWF0KHJhbmdlWzBdLCByYW5nZVsxXSkp
KSkKLSAgICAgICAgZmlsZS53cml0ZSgiKSk7XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENoYXJhY3RlckNsYXNzPiB7fSgpXG57e1xuIi5mb3JtYXQo
c2VsZi5nZXRDcmVhdGVGdW5jTmFtZSgpKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAgIC8v
IE5hbWUgPSB7fSwgbnVtYmVyIG9mIGNvZGVQb2ludHM6IHt9XG4iLmZvcm1hdChzZWxmLm5hbWUs
IHNlbGYuY29kZVBvaW50Q291bnQpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAgYXV0byBj
aGFyYWN0ZXJDbGFzcyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2hhcmFjdGVyQ2xhc3M+KFxuIikKKyAg
ICAgICAgZG93cml0ZShmaWxlLCAiICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VUNoYXIz
Mj4oIikKKyAgICAgICAgc2VsZi5kdW1wTWF0Y2hEYXRhKGZpbGUsIDgsIHNlbGYubWF0Y2hlcywg
bGFtYmRhIGZpbGUsIG1hdGNoOiAoZG93cml0ZShmaWxlLCAiezA6MD0jNHh9Ii5mb3JtYXQobWF0
Y2gpKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiksXG4iKQorICAgICAgICBkb3dyaXRlKGZp
bGUsICIgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxDaGFyYWN0ZXJSYW5nZT4oIikKKyAg
ICAgICAgc2VsZi5kdW1wTWF0Y2hEYXRhKGZpbGUsIDQsIHNlbGYucmFuZ2VzLCBsYW1iZGEgZmls
ZSwgcmFuZ2U6IChkb3dyaXRlKGZpbGUsICJ7e3swOjA9IzR4fSwgezE6MD0jNHh9fX0iLmZvcm1h
dChyYW5nZVswXSwgcmFuZ2VbMV0pKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiksXG4iKQor
ICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVQ2hh
cjMyPigiKQorICAgICAgICBzZWxmLmR1bXBNYXRjaERhdGEoZmlsZSwgOCwgc2VsZi51bmljb2Rl
TWF0Y2hlcywgbGFtYmRhIGZpbGUsIG1hdGNoOiAoZG93cml0ZShmaWxlLCAiezA6MD0jNnh9Ii5m
b3JtYXQobWF0Y2gpKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiksXG4iKQorICAgICAgICBk
b3dyaXRlKGZpbGUsICIgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxDaGFyYWN0ZXJSYW5n
ZT4oIikKKyAgICAgICAgc2VsZi5kdW1wTWF0Y2hEYXRhKGZpbGUsIDQsIHNlbGYudW5pY29kZVJh
bmdlcywgbGFtYmRhIGZpbGUsIHJhbmdlOiAoZG93cml0ZShmaWxlLCAie3t7MDowPSM2eH0sIHsx
OjA9IzZ4fX19Ii5mb3JtYXQocmFuZ2VbMF0sIHJhbmdlWzFdKSkpKQorICAgICAgICBkb3dyaXRl
KGZpbGUsICIpKTtcbiIpCiAKLSAgICAgICAgZmlsZS53cml0ZSgiICAgIGNoYXJhY3RlckNsYXNz
LT5tX2hhc05vbkJNUENoYXJhY3RlcnMgPSB7fTtcbiIuZm9ybWF0KCgiZmFsc2UiLCAidHJ1ZSIp
W3NlbGYuaGFzTm9uQk1QQ2hhcmFjdGVyc10pKQotICAgICAgICBmaWxlLndyaXRlKCIgICAgcmV0
dXJuIGNoYXJhY3RlckNsYXNzO1xufVxuXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAg
Y2hhcmFjdGVyQ2xhc3MtPm1faGFzTm9uQk1QQ2hhcmFjdGVycyA9IHt9O1xuIi5mb3JtYXQoKCJm
YWxzZSIsICJ0cnVlIilbc2VsZi5oYXNOb25CTVBDaGFyYWN0ZXJzXSkpCisgICAgICAgIGRvd3Jp
dGUoZmlsZSwgIiAgICByZXR1cm4gY2hhcmFjdGVyQ2xhc3M7XG59XG5cbiIpCiAKICAgICBAY2xh
c3NtZXRob2QKICAgICBkZWYgZHVtcEFsbChjbHMsIGZpbGUpOgpAQCAtNTQzLDIxICs1NTMsMjEg
QEAKICAgICAgICAgZm9yIHByb3BlcnR5RGF0YSBpbiBjbHMuYWxsUHJvcGVydHlEYXRhOgogICAg
ICAgICAgICAgcHJvcGVydHlEYXRhLmR1bXAoZmlsZSwgcHJvcGVydHlEYXRhICE9IGNscy5hbGxQ
cm9wZXJ0eURhdGFbLTFdKQogCi0gICAgICAgIGZpbGUud3JpdGUoInR5cGVkZWYgc3RkOjp1bmlx
dWVfcHRyPENoYXJhY3RlckNsYXNzPiAoKkNyZWF0ZUNoYXJhY3RlckNsYXNzKSgpO1xuIikKLSAg
ICAgICAgZmlsZS53cml0ZSgic3RhdGljIENyZWF0ZUNoYXJhY3RlckNsYXNzIGNyZWF0ZUZ1bmN0
aW9uc1t7fV0gPSB7e1xuICAgIi5mb3JtYXQobGVuKGNscy5hbGxQcm9wZXJ0eURhdGEpKSkKKyAg
ICAgICAgZG93cml0ZShmaWxlLCAidHlwZWRlZiBzdGQ6OnVuaXF1ZV9wdHI8Q2hhcmFjdGVyQ2xh
c3M+ICgqQ3JlYXRlQ2hhcmFjdGVyQ2xhc3MpKCk7XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUs
ICJzdGF0aWMgQ3JlYXRlQ2hhcmFjdGVyQ2xhc3MgY3JlYXRlRnVuY3Rpb25zW3t9XSA9IHt7XG4g
ICAiLmZvcm1hdChsZW4oY2xzLmFsbFByb3BlcnR5RGF0YSkpKQogICAgICAgICBmdW5jdGlvbnNP
blRoaXNMaW5lID0gMAogICAgICAgICBmb3IgcHJvcGVydHlEYXRhIGluIGNscy5hbGxQcm9wZXJ0
eURhdGE6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKCIge30sIi5mb3JtYXQocHJvcGVydHlEYXRh
LmdldENyZWF0ZUZ1bmNOYW1lKCkpKQorICAgICAgICAgICAgZG93cml0ZShmaWxlLCAiIHt9LCIu
Zm9ybWF0KHByb3BlcnR5RGF0YS5nZXRDcmVhdGVGdW5jTmFtZSgpKSkKICAgICAgICAgICAgIGZ1
bmN0aW9uc09uVGhpc0xpbmUgPSBmdW5jdGlvbnNPblRoaXNMaW5lICsgMQogICAgICAgICAgICAg
aWYgZnVuY3Rpb25zT25UaGlzTGluZSA9PSA0OgotICAgICAgICAgICAgICAgIGZpbGUud3JpdGUo
IlxuICAgIikKKyAgICAgICAgICAgICAgICBkb3dyaXRlKGZpbGUsICJcbiAgICIpCiAgICAgICAg
ICAgICAgICAgZnVuY3Rpb25zT25UaGlzTGluZSA9IDAKIAotICAgICAgICBmaWxlLndyaXRlKCJ9
O1xuXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJ9O1xuXG4iKQogCiAgICAgQGNsYXNzbWV0
aG9kCiAgICAgZGVmIGNyZWF0ZUFuZER1bXBIYXNoVGFibGUoc2VsZiwgZmlsZSwgcHJvcGVydHlE
aWN0LCB0YWJsZVByZWZpeCk6Ci0gICAgICAgIHByb3BlcnR5S2V5cyA9IHByb3BlcnR5RGljdC5r
ZXlzKCkKKyAgICAgICAgcHJvcGVydHlLZXlzID0gbGlzdChwcm9wZXJ0eURpY3Qua2V5cygpKQog
ICAgICAgICBudW1iZXJPZktleXMgPSBsZW4ocHJvcGVydHlLZXlzKQogICAgICAgICBoYXNoU2l6
ZSA9IGNlaWxpbmdUb1Bvd2VyT2YyKG51bWJlck9mS2V5cyAqIDIpCiAgICAgICAgIGhhc2hNYXNr
ID0gaGFzaFNpemUgLSAxCkBAIC01ODcsNyArNTk3LDcgQEAKICAgICAgICAgICAgIGhhc2hUYWJs
ZVtoYXNoXSA9IChsZW4odmFsdWVUYWJsZSksIE5vbmUpCiAgICAgICAgICAgICB2YWx1ZVRhYmxl
LmFwcGVuZCgoa2V5LCBrZXlWYWx1ZVsxXSkpCiAKLSAgICAgICAgZmlsZS53cml0ZSgic3RhdGlj
IGNvbnN0IHN0cnVjdCBIYXNoSW5kZXgge31UYWJsZUluZGV4W3t9XSA9IHt7XG4iLmZvcm1hdCh0
YWJsZVByZWZpeCwgbGVuKGhhc2hUYWJsZSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJzdGF0
aWMgY29uc3Qgc3RydWN0IEhhc2hJbmRleCB7fVRhYmxlSW5kZXhbe31dID0ge3tcbiIuZm9ybWF0
KHRhYmxlUHJlZml4LCBsZW4oaGFzaFRhYmxlKSkpCiAKICAgICAgICAgZm9yIHRhYmxlSW5kZXgg
aW4gaGFzaFRhYmxlOgogICAgICAgICAgICAgdmFsdWUgPSAtMQpAQCAtNTk3LDE3ICs2MDcsMTcg
QEAKICAgICAgICAgICAgICAgICBpZiB0YWJsZUluZGV4WzFdIGlzIG5vdCBOb25lOgogICAgICAg
ICAgICAgICAgICAgICBuZXh0ID0gdGFibGVJbmRleFsxXQogCi0gICAgICAgICAgICBmaWxlLndy
aXRlKCIgICAge3sge30sIHt9IH19LFxuIi5mb3JtYXQodmFsdWUsIG5leHQpKQorICAgICAgICAg
ICAgZG93cml0ZShmaWxlLCAiICAgIHt7IHt9LCB7fSB9fSxcbiIuZm9ybWF0KHZhbHVlLCBuZXh0
KSkKIAotICAgICAgICBmaWxlLndyaXRlKCJ9O1xuXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUs
ICJ9O1xuXG4iKQogCi0gICAgICAgIGZpbGUud3JpdGUoInN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFz
aFZhbHVlIHt9VGFibGVWYWx1ZVt7fV0gPSB7e1xuIi5mb3JtYXQodGFibGVQcmVmaXgsIGxlbih2
YWx1ZVRhYmxlKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgInN0YXRpYyBjb25zdCBzdHJ1Y3Qg
SGFzaFZhbHVlIHt9VGFibGVWYWx1ZVt7fV0gPSB7e1xuIi5mb3JtYXQodGFibGVQcmVmaXgsIGxl
bih2YWx1ZVRhYmxlKSkpCiAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZVRhYmxlOgotICAgICAg
ICAgICAgZmlsZS53cml0ZSgiICAgIHt7IFwie31cIiwge30gfX0sXG4iLmZvcm1hdCh2YWx1ZVsw
XSwgdmFsdWVbMV0pKQotICAgICAgICBmaWxlLndyaXRlKCJ9O1xuXG4iKQorICAgICAgICAgICAg
ZG93cml0ZShmaWxlLCAiICAgIHt7IFwie31cIiwge30gfX0sXG4iLmZvcm1hdCh2YWx1ZVswXSwg
dmFsdWVbMV0pKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJ9O1xuXG4iKQogCi0gICAgICAgIGZp
bGUud3JpdGUoInN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHt9SGFzaFRhYmxlID0gXG4i
LmZvcm1hdCh0YWJsZVByZWZpeCkpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICB7eyB7fSwge30s
IHt9VGFibGVWYWx1ZSwge31UYWJsZUluZGV4IH19O1xuXG4iLmZvcm1hdChsZW4odmFsdWVUYWJs
ZSksIGhhc2hNYXNrLCB0YWJsZVByZWZpeCwgdGFibGVQcmVmaXgpKQorICAgICAgICBkb3dyaXRl
KGZpbGUsICJzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZSB7fUhhc2hUYWJsZSA9IFxuIi5m
b3JtYXQodGFibGVQcmVmaXgpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAge3sge30sIHt9
LCB7fVRhYmxlVmFsdWUsIHt9VGFibGVJbmRleCB9fTtcblxuIi5mb3JtYXQobGVuKHZhbHVlVGFi
bGUpLCBoYXNoTWFzaywgdGFibGVQcmVmaXgsIHRhYmxlUHJlZml4KSkKIAogCiBjbGFzcyBTY3Jp
cHRzOgpAQCAtNzQyLDIxICs3NTIsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgbG93Q29kZVBv
aW50ID0gaW50KGNvZGVQb2ludHNbOmRvdERvdF0sIDE2KQogICAgICAgICAgICAgICAgICAgICBo
aWdoQ29kZVBvaW50ID0gaW50KGNvZGVQb2ludHNbZG90RG90ICsgMjpdLCAxNikKICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFByb3BlcnR5RGF0YS5hZGRSYW5nZShsb3dDb2RlUG9pbnQsIGhp
Z2hDb2RlUG9pbnQpCi0gICAgICAgICAgICAgICAgICAgIGZvciBjb2RlUG9pbnQgaW4geHJhbmdl
KGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCArIDEpOgorICAgICAgICAgICAgICAgICAgICBm
b3IgY29kZVBvaW50IGluIHJhbmdlKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCArIDEpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2NyaXB0RXh0ZW5zdGlvblByb3BlcnR5RGF0
YS5yZW1vdmVNYXRjaChjb2RlUG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0
ZWRTY3JpcHRFeHRlbnNpb25Qcm9wZXJ0eURhdGEucmVtb3ZlTWF0Y2goY29kZVBvaW50KQogCiAg
ICAgICAgICMgRm9yIHRoZSBzY3JpcHRzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYWRkaXRpb25hbCBl
eHRlbnNpb24gY29kZVBvaW50cywgY29weSB0aGUgc2NyaXB0CiAgICAgICAgICMgZGF0YSB0byB0
aGUgc2NyaXB0IGV4dGVuc2lvbiB3aXRoIHRoZSBzYW1lIG5hbWUKLSAgICAgICAgZm9yIHNjcmlw
dE5hbWUsIHByb3BlcnR5RGF0YSBpbiBzZWxmLnNjcmlwdHNCeU5hbWUuaXRlcml0ZW1zKCk6Cisg
ICAgICAgIGZvciBzY3JpcHROYW1lLCBwcm9wZXJ0eURhdGEgaW4gc2VsZi5zY3JpcHRzQnlOYW1l
Lml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBzY3JpcHROYW1lIG5vdCBpbiBzZWxmLnNjcmlwdEV4
dGVuc2lvbnNCeU5hbWU6CiAgICAgICAgICAgICAgICAgc2VsZi5zY3JpcHRFeHRlbnNpb25zQnlO
YW1lW3NjcmlwdE5hbWVdID0gcHJvcGVydHlEYXRhCiAKICAgICBkZWYgZHVtcChzZWxmLCBmaWxl
KToKLSAgICAgICAgZmlsZS53cml0ZSgiLy8gU2NyaXB0czpcbiIpCisgICAgICAgIGRvd3JpdGUo
ZmlsZSwgIi8vIFNjcmlwdHM6XG4iKQogICAgICAgICBQcm9wZXJ0eURhdGEuY3JlYXRlQW5kRHVt
cEhhc2hUYWJsZShmaWxlLCBzZWxmLnNjcmlwdHNCeU5hbWUsICJzY3JpcHQiKQogCi0gICAgICAg
IGZpbGUud3JpdGUoIi8vIFNjcmlwdF9FeHRlbnNpb25zOlxuIikKKyAgICAgICAgZG93cml0ZShm
aWxlLCAiLy8gU2NyaXB0X0V4dGVuc2lvbnM6XG4iKQogICAgICAgICBQcm9wZXJ0eURhdGEuY3Jl
YXRlQW5kRHVtcEhhc2hUYWJsZShmaWxlLCBzZWxmLnNjcmlwdEV4dGVuc2lvbnNCeU5hbWUsICJz
Y3JpcHRFeHRlbnNpb24iKQogCiAKQEAgLTg3Nyw3ICs4ODcsNyBAQAogICAgICAgICAgICAgICAg
IHByb3BlcnR5RGF0YXNbMV0uYWRkUmFuZ2Uoc2VsZi5sYXN0QWRkZWRDb2RlUG9pbnQgKyAxLCBN
YXhVbmljb2RlKQogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZSk6Ci0gICAgICAgIGZpbGUud3Jp
dGUoIi8vIEdlbmVyYWxfQ2F0ZWdvcnk6XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIvLyBH
ZW5lcmFsX0NhdGVnb3J5OlxuIikKICAgICAgICAgUHJvcGVydHlEYXRhLmNyZWF0ZUFuZER1bXBI
YXNoVGFibGUoZmlsZSwgc2VsZi5wcm9wZXJ0eURhdGFCeUNhdGVnb3J5LCAiZ2VuZXJhbENhdGVn
b3J5IikKIAogCkBAIC05MjAsNyArOTMwLDcgQEAKICAgICAgICAgICAgICAgICBjdXJyZW50UHJv
cGVydHlEYXRhLmFkZFJhbmdlKGludChjb2RlUG9pbnRzWzpkb3REb3RdLCAxNiksIGludChjb2Rl
UG9pbnRzW2RvdERvdCArIDI6XSwgMTYpKQogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZSk6Ci0g
ICAgICAgIGZpbGUud3JpdGUoIi8vIGJpbmFyeSBwcm9wZXJ0aWVzOlxuIikKKyAgICAgICAgZG93
cml0ZShmaWxlLCAiLy8gYmluYXJ5IHByb3BlcnRpZXM6XG4iKQogICAgICAgICBQcm9wZXJ0eURh
dGEuY3JlYXRlQW5kRHVtcEhhc2hUYWJsZShmaWxlLCBzZWxmLnByb3BlcnR5RGF0YUJ5UHJvcGVy
dHksICJiaW5hcnlQcm9wZXJ0eSIpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CkBAIC05
NTAsNyArOTYwLDcgQEAKIAogICAgIHByb3BlcnR5RGF0YUhGaWxlID0gb3Blbk9yRXhpdCh1bmlj
b2RlUHJvZXJ0eURhdGFIUGF0aCwgIndiIikKIAotICAgIHByb3BlcnR5RGF0YUhGaWxlLndyaXRl
KGhlYWRlcikKKyAgICBkb3dyaXRlKHByb3BlcnR5RGF0YUhGaWxlLCBoZWFkZXIpCiAKICAgICBh
bGlhc2VzLnBhcnNlUHJvcGVydHlBbGlhc2VzRmlsZShwcm9wZXJ0eUFsaWFzZXNGaWxlKQogICAg
IGFsaWFzZXMucGFyc2VQcm9wZXJ0eVZhbHVlQWxpYXNlc0ZpbGUocHJvcGVydHlWYWx1ZUFsaWFz
ZXNGaWxlKQpAQCAtOTc0LDYgKzk4NCw2IEBACiAgICAgYmluYXJ5UHJvcGVydHkuZHVtcChwcm9w
ZXJ0eURhdGFIRmlsZSkKICAgICBzY3JpcHRzLmR1bXAocHJvcGVydHlEYXRhSEZpbGUpCiAKLSAg
ICBwcm9wZXJ0eURhdGFIRmlsZS53cml0ZShmb290ZXIpCisgICAgZG93cml0ZShwcm9wZXJ0eURh
dGFIRmlsZSwgZm9vdGVyKQogCiAgICAgZXhpdCgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvaGFzaGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2hhc2hlci5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvaGFzaGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBA
CiAgICAgaGFzaCA9IHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlCiAKICAgICBzdHJMZW5ndGggPSBs
ZW4oc3RyKQotICAgIGNoYXJhY3RlclBhaXJzID0gc3RyTGVuZ3RoIC8gMgorICAgIGNoYXJhY3Rl
clBhaXJzID0gaW50KHN0ckxlbmd0aCAvIDIpCiAgICAgcmVtYWluZGVyID0gc3RyTGVuZ3RoICYg
MQogCiAgICAgIyBNYWluIGxvb3AKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2pzbWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2pz
bWluLnB5CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy9qc21pbi5weQkod29ya2luZyBjb3B5KQpAQCAtNzksMTAgKzc5LDEzIEBACiAgICAgICAgIGRl
ZiB3cml0ZShjaGFyKToKICAgICAgICAgICAgICMgYWxsIG9mIHRoaXMgaXMgdG8gc3VwcG9ydCBs
aXRlcmFsIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAgICAgICAgICAgICAjIHNpZ2gKLSAgICAgICAg
ICAgIGlmIGNoYXIgaW4gJ3JldHVybic6CisgICAgICAgICAgICBpZiBzdHIoY2hhcikgaW4gJ3Jl
dHVybic6CiAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5fYnVmICs9IGNoYXIKICAgICAgICAg
ICAgICAgICBzZWxmLmlzX3JldHVybiA9IHNlbGYucmV0dXJuX2J1ZiA9PSAncmV0dXJuJwotICAg
ICAgICAgICAgc2VsZi5vdXRzLndyaXRlKGNoYXIpCisgICAgICAgICAgICBpZiBzeXMudmVyc2lv
bl9pbmZvLm1ham9yID09IDI6CisgICAgICAgICAgICAgICAgc2VsZi5vdXRzLndyaXRlKGNoYXIp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYub3V0cy53cml0ZShzdHIo
Y2hhcikpCiAgICAgICAgICAgICBpZiBzZWxmLmlzX3JldHVybjoKICAgICAgICAgICAgICAgICBz
ZWxmLnJldHVybl9idWYgPSAnJwogCkBAIC0xMTgsOCArMTIxLDggQEAKICAgICAgICAgICAgICAg
ICB3cml0ZShwcmV2aW91cykKICAgICAgICAgZWxpZiBub3QgcHJldmlvdXM6CiAgICAgICAgICAg
ICByZXR1cm4KLSAgICAgICAgZWxpZiBwcmV2aW91cyA+PSAnISc6Ci0gICAgICAgICAgICBpZiBw
cmV2aW91cyBpbiAiJ1wiIjoKKyAgICAgICAgZWxpZiBzdHIocHJldmlvdXMpID49ICIhIjoKKyAg
ICAgICAgICAgIGlmIHN0cihwcmV2aW91cykgaW4gIidcIiI6CiAgICAgICAgICAgICAgICAgaW5f
cXVvdGUgPSBwcmV2aW91cwogICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCiAgICAgICAgICAg
ICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91cwpAQCAtMTY2LDcgKzE2OSw3IEBACiAgICAg
ICAgICAgICAgICAgICAgIGlmIG51bXNsYXNoZXMgJSAyID09IDA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbl9xdW90ZSA9ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnJy5q
b2luKHF1b3RlX2J1ZikpCi0gICAgICAgICAgICBlbGlmIG5leHQxIGluICdcclxuJzoKKyAgICAg
ICAgICAgIGVsaWYgc3RyKG5leHQxKSBpbiAnXHJcbic6CiAgICAgICAgICAgICAgICAgaWYgcHJl
dmlvdXNfbm9uX3NwYWNlIGluIG5ld2xpbmVlbmRfc3RyaW5ncyBcCiAgICAgICAgICAgICAgICAg
ICAgIG9yIHByZXZpb3VzX25vbl9zcGFjZSA+ICd+JzoKICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgMToKQEAgLTE3OSw3ICsxODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvciBuZXh0MiA+ICd+JyBvciBuZXh0MiA9PSAnLyc6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvX25ld2xpbmUgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsKLSAgICAgICAgICAgIGVsaWYgbmV4dDEgPCAnIScgYW5kIG5vdCBpbl9yZToKKyAgICAg
ICAgICAgIGVsaWYgc3RyKG5leHQxKSA8ICchJyBhbmQgbm90IGluX3JlOgogICAgICAgICAgICAg
ICAgIGlmIChwcmV2aW91c19ub25fc3BhY2UgaW4gc3BhY2Vfc3RyaW5ncyBcCiAgICAgICAgICAg
ICAgICAgICAgIG9yIHByZXZpb3VzX25vbl9zcGFjZSA+ICd+JykgXAogICAgICAgICAgICAgICAg
ICAgICBhbmQgKG5leHQyIGluIHNwYWNlX3N0cmluZ3Mgb3IgbmV4dDIgPiAnficpOgpAQCAtMjE3
LDcgKzIyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUgPSBGYWxzZQogCiAg
ICAgICAgICAgICAgICAgd3JpdGUobmV4dDEpCi0gICAgICAgICAgICAgICAgaWYgbm90IGluX3Jl
IGFuZCBuZXh0MSBpbiAiJ1wiYCI6CisgICAgICAgICAgICAgICAgaWYgbm90IGluX3JlIGFuZCBz
dHIobmV4dDEpIGluICInXCJgIjoKICAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSBuZXh0
MQogICAgICAgICAgICAgICAgICAgICBxdW90ZV9idWYgPSBbXQogCkBAIC0yMjQsNyArMjI3LDcg
QEAKICAgICAgICAgICAgIHByZXZpb3VzID0gbmV4dDEKICAgICAgICAgICAgIG5leHQxID0gbmV4
dDIKIAotICAgICAgICAgICAgaWYgcHJldmlvdXMgPj0gJyEnOgorICAgICAgICAgICAgaWYgc3Ry
KHByZXZpb3VzKSA+PSAnISc6CiAgICAgICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0g
cHJldmlvdXMKIAogICAgICAgICAgICAgaWYgcHJldmlvdXMgPT0gJ1xcJzoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL21ha2UtanMtZmlsZS1hcnJheXMucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvbWFrZS1qcy1maWxlLWFycmF5cy5w
eQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvbWFr
ZS1qcy1maWxlLWFycmF5cy5weQkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsMTEgQEAKIGlt
cG9ydCBpbwogaW1wb3J0IG9zCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKLWZy
b20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgc3lzCitpZiBzeXMudmVyc2lvbl9p
bmZvLm1ham9yID09IDI6CisgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Vsc2U6
CisgICAgZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIGZyb20ganNtaW4gaW1wb3J0IEphdmFzY3Jp
cHRNaW5pZnkKIAogCkBAIC0zNyw3ICs0MSw3IEBACiAKIAogZGVmIGNodW5rKGxpc3QsIGNodW5r
U2l6ZSk6Ci0gICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihsaXN0KSwgY2h1bmtTaXplKToKKyAg
ICBmb3IgaSBpbiByYW5nZSgwLCBsZW4obGlzdCksIGNodW5rU2l6ZSk6CiAgICAgICAgIHlpZWxk
IGxpc3RbaTppICsgY2h1bmtTaXplXQogCiAKQEAgLTg1LDcgKzg5LDcgQEAKICAgICAgICAgcHJp
bnQoJ2V4dGVybiBjb25zdCBjaGFyIHswOnN9SmF2YVNjcmlwdFt7MTpkfV07Jy5mb3JtYXQodmFy
aWFibGVOYW1lLCBzaXplKSwgZmlsZT1oZWFkZXJGaWxlKQogICAgICAgICBwcmludCgnY29uc3Qg
Y2hhciB7MDpzfUphdmFTY3JpcHRbezE6ZH1dID0ge3snLmZvcm1hdCh2YXJpYWJsZU5hbWUsIHNp
emUpLCBmaWxlPXNvdXJjZUZpbGUpCiAKLSAgICAgICAgY29kZXBvaW50cyA9IG1hcChvcmQsIGNo
YXJhY3RlcnMpCisgICAgICAgIGNvZGVwb2ludHMgPSBsaXN0KG1hcChvcmQsIGNoYXJhY3RlcnMp
KQogICAgICAgICBmb3IgY29kZXBvaW50Q2h1bmsgaW4gY2h1bmsoY29kZXBvaW50cywgMTYpOgog
ICAgICAgICAgICAgcHJpbnQoJyAgICB7MDpzfSwnLmZvcm1hdCgnLCcuam9pbihtYXAoc3RyaW5n
aWZ5Q29kZXBvaW50LCBjb2RlcG9pbnRDaHVuaykpKSwgZmlsZT1zb3VyY2VGaWxlKQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL19faW5pdF9fLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvX19p
bml0X18ucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL3drYnVpbHRpbnMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzIEBA
CiAjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1
bGUgZmlsZXMKIAotZnJvbSBidWlsdGlucyBpbXBvcnQgKgorZnJvbSB3a2J1aWx0aW5zIGltcG9y
dCAqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVk
X2hlYWRlci5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiAgICAgICAgIGxpbmVzID0gW10KICAg
ICAgICAgbGluZXMuYXBwZW5kKCIjZGVmaW5lICUobWFjcm9QcmVmaXgpc19GT1JFQUNIX0JVSUxU
SU5fRlVOQ1RJT05fUFJJVkFURV9HTE9CQUxfTkFNRShtYWNybykgXFwiICUgYXJncykKLSAgICAg
ICAgZnVuY3Rpb25zID0gZmlsdGVyKGxhbWJkYSBmdW5jdGlvbjogZnVuY3Rpb24uaXNfZ2xvYmFs
X3ByaXZhdGUsIHNlbGYubW9kZWwoKS5hbGxfZnVuY3Rpb25zKCkpCisgICAgICAgIGZ1bmN0aW9u
cyA9IFtmdW5jdGlvbiBmb3IgZnVuY3Rpb24gaW4gc2VsZi5tb2RlbCgpLmFsbF9mdW5jdGlvbnMo
KSBpZiBmdW5jdGlvbi5pc19nbG9iYWxfcHJpdmF0ZV0KICAgICAgICAgZnVuY3Rpb25zLnNvcnQo
a2V5PWxhbWJkYSB4OiB4LmZ1bmN0aW9uX25hbWUpCiAgICAgICAgIGZvciBmdW5jdGlvbiBpbiBm
dW5jdGlvbnM6CiAgICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0gewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5l
ZF9pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQko
cmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBl
ckhlYWRlckdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6CiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsKToKICAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9k
ZWwpCi0gICAgICAgIHNlbGYuaW50ZXJuYWxzID0gZmlsdGVyKGxhbWJkYSBvYmplY3Q6ICdpbnRl
cm5hbCcgaW4gb2JqZWN0LmFubm90YXRpb25zLCBtb2RlbC5vYmplY3RzKQorICAgICAgICBzZWxm
LmludGVybmFscyA9IFtvYmplY3QgZm9yIG9iamVjdCBpbiBtb2RlbC5vYmplY3RzIGlmICdpbnRl
cm5hbCcgaW4gb2JqZWN0LmFubm90YXRpb25zXQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShz
ZWxmKToKICAgICAgICAgcmV0dXJuICIlc0pTQnVpbHRpbkludGVybmFscy5oIiAlIHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaW1wbGVtZW50YXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBl
cl9pbXBsZW1lbnRhdGlvbi5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3Jh
cHBlcl9pbXBsZW1lbnRhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAog
Y2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQnVp
bHRpbnNHZW5lcmF0b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CiAgICAgICAg
IEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQotICAgICAgICBzZWxmLmlu
dGVybmFscyA9IGZpbHRlcihsYW1iZGEgb2JqZWN0OiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5v
dGF0aW9ucywgbW9kZWwub2JqZWN0cykKKyAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBbb2JqZWN0
IGZvciBvYmplY3QgaW4gbW9kZWwub2JqZWN0cyBpZiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5v
dGF0aW9uc10KIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVy
biAiJXNKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0
dGluZygnbmFtZXNwYWNlJykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93
cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19tb2RlbC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X21vZGVsLnB5CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCiBpbXBvcnQgb3MKK2ltcG9ydCBz
eXMKIAogZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIFRlbXBsYXRlcwogCkBAIC0xNTUsNiArMTU2LDggQEAKIAogICAgICAgICByZXR1
cm4gaW50ZXJmYWNlCiAKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuZnVuY3Rpb25fbmFtZSA8IG90aGVyLmZ1bmN0aW9uX25hbWUKIAogY2xhc3MgQnVp
bHRpbnNDb2xsZWN0aW9uOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZXdvcmtfbmFtZSk6
CkBAIC0yMTAsNyArMjEzLDcgQEAKIAogICAgICAgICByZXN1bHQgPSBbXQogCi0gICAgICAgIGZv
ciBvd25lciwgeWVhcnMgaW4gb3duZXJfdG9feWVhcnMuaXRlbXMoKToKKyAgICAgICAgZm9yIG93
bmVyLCB5ZWFycyBpbiBsaXN0KG93bmVyX3RvX3llYXJzLml0ZW1zKCkpOgogICAgICAgICAgICAg
c29ydGVkX3llYXJzID0gbGlzdCh5ZWFycykKICAgICAgICAgICAgIHNvcnRlZF95ZWFycy5zb3J0
KCkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiVzICVzIiAlICgnLCAnLmpvaW4oc29ydGVk
X3llYXJzKSwgb3duZXIpKQpAQCAtMzAzLDQgKzMwNiw0IEBACiAgICAgICAgICAgICBmdW5jdGlv
bkJvdW5kcy5hcHBlbmQoKHN0YXJ0LCBlbmQpKQogCiAgICAgICAgIGZ1bmN0aW9uU3RyaW5ncyA9
IFt0ZXh0W3N0YXJ0OmVuZF0uc3RyaXAoKSBmb3IgKHN0YXJ0LCBlbmQpIGluIGZ1bmN0aW9uQm91
bmRzXQotICAgICAgICByZXR1cm4gbWFwKEJ1aWx0aW5GdW5jdGlvbi5mcm9tU3RyaW5nLCBmdW5j
dGlvblN0cmluZ3MpCisgICAgICAgIHJldHVybiBsaXN0KG1hcChCdWlsdGluRnVuY3Rpb24uZnJv
bVN0cmluZywgZnVuY3Rpb25TdHJpbmdzKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvd2tidWlsdGlucy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL3VkaXM4
Ni91ZF9vcGNvZGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fz
c2VtYmxlci91ZGlzODYvdWRfb3Bjb2RlLnB5CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9vcGNvZGUucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTU1MCwxMCArNTUwLDEwIEBACiAgICAgICAgICAgICBlbnRyaWVzID0gdGJsLmVu
dHJpZXMoKQogICAgICAgICAgICAgZm9yIGssIGUgaW4gZW50cmllczoKICAgICAgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKGUsIFVkT3Bjb2RlVGFibGUpOgotICAgICAgICAgICAgICAgICAgICBz
ZWxmLmxvZygiJXMgICAgfC08JTAyeD4gJXMiICUgKGluZGVudCwgaywgZSkpCisgICAgICAgICAg
ICAgICAgICAgIHNlbGYubG9nKCIlcyAgICB8LTwlMDJ4PiAlcyIgJSAoaW5kZW50LCBpbnQoayks
IGUpKQogICAgICAgICAgICAgICAgICAgICBwcmludFdhbGsoZSwgaW5kZW50ICsgIiAgICB8IikK
ICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZSwgVWRJbnNuRGVmKToKLSAgICAgICAg
ICAgICAgICAgICAgc2VsZi5sb2coIiVzICAgIHwtPCUwMng+ICVzIiAlIChpbmRlbnQsIGssIGUp
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygiJXMgICAgfC08JTAyeD4gJXMiICUgKGlu
ZGVudCwgaW50KGspLCBlKSkKICAgICAgICAgcHJpbnRXYWxrKHNlbGYucm9vdCkKIAogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdGUtYnl0ZWNvZGUtZmlsZXMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRlLWJ5dGVjb2RlLWZpbGVzCShyZXZp
c2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdGUtYnl0ZWNvZGUt
ZmlsZXMJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDEyIEBACiAgICAgICAgIHByaW50KCJJ
L08gZXJyb3Igb3BlbmluZyB7MH0sICh7MX0pOiB7Mn0iLmZvcm1hdChwYXRoLCBlLmVycm5vLCBl
LnN0cmVycm9yKSkKICAgICAgICAgZXhpdCgxKQogCitkZWYgZG93cml0ZShmaWxlLCBzdHIpOgor
ICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgZmlsZS53cml0ZShz
dHIpCisgICAgZWxzZToKKyAgICAgICAgZmlsZS53cml0ZShieXRlcyhzdHIsICJ1dGYtOCIpKQor
CiBkZWYgaGFzaEZpbGUoZmlsZSk6CiAgICAgc2hhMSA9IGhhc2hsaWIuc2hhMSgpCiAgICAgZmls
ZS5zZWVrKDApCkBAIC0xMTIsMzEgKzExOCwzMSBAQAogCiAKIGRlZiB3cml0ZUluc3RydWN0aW9u
QWNjZXNzb3IoYnl0ZWNvZGVIRmlsZSwgdHlwZU5hbWUsIG5hbWUpOgotICAgIGJ5dGVjb2RlSEZp
bGUud3JpdGUoIiAgICB7MH0mIHsxfSgpIHt7IHJldHVybiAqYml0d2lzZV9jYXN0PHswfSo+KCZt
X3sxfSk7IH19XG4iLmZvcm1hdCh0eXBlTmFtZSwgbmFtZSkpCi0gICAgYnl0ZWNvZGVIRmlsZS53
cml0ZSgiICAgIGNvbnN0IHswfSYgezF9KCkgY29uc3Qge3sgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8
Y29uc3QgezB9Kj4oJm1fezF9KTsgfX1cbiIuZm9ybWF0KHR5cGVOYW1lLCBuYW1lKSkKKyAgICBk
b3dyaXRlKGJ5dGVjb2RlSEZpbGUsICIgICAgezB9JiB7MX0oKSB7eyByZXR1cm4gKmJpdHdpc2Vf
Y2FzdDx7MH0qPigmbV97MX0pOyB9fVxuIi5mb3JtYXQodHlwZU5hbWUsIG5hbWUpKQorICAgIGRv
d3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiAgICBjb25zdCB7MH0mIHsxfSgpIGNvbnN0IHt7IHJldHVy
biAqYml0d2lzZV9jYXN0PGNvbnN0IHswfSo+KCZtX3sxfSk7IH19XG4iLmZvcm1hdCh0eXBlTmFt
ZSwgbmFtZSkpCiAKIAogZGVmIHdyaXRlSW5zdHJ1Y3Rpb25NZW1iZXIoYnl0ZWNvZGVIRmlsZSwg
dHlwZU5hbWUsIG5hbWUpOgotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiAgICBzdGQ6OmFsaWdu
ZWRfc3RvcmFnZTxzaXplb2YoezB9KSwgc2l6ZW9mKEluc3RydWN0aW9uKT46OnR5cGUgbV97MX07
XG4iLmZvcm1hdCh0eXBlTmFtZSwgbmFtZSkpCi0gICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKHswfSkgPD0gc2l6ZW9mKEluc3RydWN0aW9uKSwgXCJTaXpl
IG9mIHswfSBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4gYW4gSW5zdHJ1Y3Rpb24uXCIpO1xuIi5m
b3JtYXQodHlwZU5hbWUsIG5hbWUpKQorICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiAgICBz
dGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoezB9KSwgc2l6ZW9mKEluc3RydWN0aW9uKT46OnR5
cGUgbV97MX07XG4iLmZvcm1hdCh0eXBlTmFtZSwgbmFtZSkpCisgICAgZG93cml0ZShieXRlY29k
ZUhGaWxlLCAiICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHswfSkgPD0gc2l6ZW9mKEluc3RydWN0
aW9uKSwgXCJTaXplIG9mIHswfSBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4gYW4gSW5zdHJ1Y3Rp
b24uXCIpO1xuIi5mb3JtYXQodHlwZU5hbWUsIG5hbWUpKQogCiBkZWYgd3JpdGVTdHJ1Y3QoYnl0
ZWNvZGVIRmlsZSwgYnl0ZWNvZGUpOgotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoInN0cnVjdCB7
MH0ge3tcbiIuZm9ybWF0KHRvQ3BwKGJ5dGVjb2RlWyJuYW1lIl0pKSkKLSAgICBieXRlY29kZUhG
aWxlLndyaXRlKCJwdWJsaWM6XG4iKQorICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgInN0cnVj
dCB7MH0ge3tcbiIuZm9ybWF0KHRvQ3BwKGJ5dGVjb2RlWyJuYW1lIl0pKSkKKyAgICBkb3dyaXRl
KGJ5dGVjb2RlSEZpbGUsICJwdWJsaWM6XG4iKQogCiAgICAgd3JpdGVJbnN0cnVjdGlvbkFjY2Vz
c29yKGJ5dGVjb2RlSEZpbGUsICJPcGNvZGUiLCAib3Bjb2RlIikKICAgICBmb3Igb2Zmc2V0IGlu
IGJ5dGVjb2RlWyJvZmZzZXRzIl06Ci0gICAgICAgIGZvciBuYW1lLCB0eXBlTmFtZSBpbiBvZmZz
ZXQuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBuYW1lLCB0eXBlTmFtZSBpbiBvZmZzZXQuaXRl
bXMoKToKICAgICAgICAgICAgIHdyaXRlSW5zdHJ1Y3Rpb25BY2Nlc3NvcihieXRlY29kZUhGaWxl
LCB0eXBlTmFtZSwgbmFtZSkKIAotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIlxucHJpdmF0ZTpc
biIpCi0gICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7XG5cbiIpCisgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiXG5wcml2YXRl
OlxuIikKKyAgICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsICIgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjtcblxuIikKIAogICAgIHdyaXRlSW5zdHJ1Y3Rpb25NZW1iZXIoYnl0
ZWNvZGVIRmlsZSwgIk9wY29kZSIsICJvcGNvZGUiKQogICAgIGZvciBvZmZzZXQgaW4gYnl0ZWNv
ZGVbIm9mZnNldHMiXToKLSAgICAgICAgZm9yIG5hbWUsIHR5cGVOYW1lIGluIG9mZnNldC5pdGVy
aXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHR5cGVOYW1lIGluIG9mZnNldC5pdGVtcygpOgog
ICAgICAgICAgICAgd3JpdGVJbnN0cnVjdGlvbk1lbWJlcihieXRlY29kZUhGaWxlLCB0eXBlTmFt
ZSwgbmFtZSkKLSAgICBieXRlY29kZUhGaWxlLndyaXRlKCJ9O1xuXG4iKQorICAgIGRvd3JpdGUo
Ynl0ZWNvZGVIRmlsZSwgIn07XG5cbiIpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoK
QEAgLTIyMCwyNSArMjI2LDI1IEBACiAgICAgICAgIHByaW50KCJVbmV4cGVjdGVkIGVycm9yIHBh
cnNpbmcgezB9OiB7MX0iLmZvcm1hdChieXRlY29kZUpTT05GaWxlLCBzeXMuZXhjX2luZm8oKSkp
CiAKICAgICBpZiBieXRlY29kZUhGaWxlbmFtZToKLSAgICAgICAgYnl0ZWNvZGVIRmlsZS53cml0
ZShoRmlsZUhhc2hTdHJpbmcpCi0gICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoY0NvcHlyaWdo
dE1zZyAlIGJ5dGVjb2RlSlNPTkZpbGUpCi0gICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiNw
cmFnbWEgb25jZVxuXG4iKQorICAgICAgICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsIGhGaWxlSGFz
aFN0cmluZykKKyAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCBjQ29weXJpZ2h0TXNnICUg
Ynl0ZWNvZGVKU09ORmlsZSkKKyAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiI3ByYWdt
YSBvbmNlXG5cbiIpCiAKICAgICBpZiBieXRlY29kZVN0cnVjdHNIRmlsZW5hbWU6Ci0gICAgICAg
IGJ5dGVjb2RlU3RydWN0c0hGaWxlLndyaXRlKGhGaWxlSGFzaFN0cmluZykKLSAgICAgICAgYnl0
ZWNvZGVTdHJ1Y3RzSEZpbGUud3JpdGUoY0NvcHlyaWdodE1zZyAlIGJ5dGVjb2RlSlNPTkZpbGUp
Ci0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlLndyaXRlKCIjcHJhZ21hIG9uY2VcblxuIikK
LSAgICAgICAgYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUud3JpdGUoIiNpbmNsdWRlIFwiSW5zdHJ1Y3Rp
b24uaFwiXG4iKQotICAgICAgICBieXRlY29kZVN0cnVjdHNIRmlsZS53cml0ZSgiXG4iKQorICAg
ICAgICBkb3dyaXRlKGJ5dGVjb2RlU3RydWN0c0hGaWxlLCBoRmlsZUhhc2hTdHJpbmcpCisgICAg
ICAgIGRvd3JpdGUoYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUsIGNDb3B5cmlnaHRNc2cgJSBieXRlY29k
ZUpTT05GaWxlKQorICAgICAgICBkb3dyaXRlKGJ5dGVjb2RlU3RydWN0c0hGaWxlLCAiI3ByYWdt
YSBvbmNlXG5cbiIpCisgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUsICIjaW5j
bHVkZSBcIkluc3RydWN0aW9uLmhcIlxuIikKKyAgICAgICAgZG93cml0ZShieXRlY29kZVN0cnVj
dHNIRmlsZSwgIlxuIikKIAogICAgIGlmIGluaXRBU01GaWxlTmFtZToKLSAgICAgICAgaW5pdEJ5
dGVjb2Rlc0ZpbGUud3JpdGUoYXNtRmlsZUhhc2hTdHJpbmcpCi0gICAgICAgIGluaXRCeXRlY29k
ZXNGaWxlLndyaXRlKGFzbUNvcHlyaWdodE1zZyAlIGJ5dGVjb2RlSlNPTkZpbGUpCisgICAgICAg
IGRvd3JpdGUoaW5pdEJ5dGVjb2Rlc0ZpbGUsIGFzbUZpbGVIYXNoU3RyaW5nKQorICAgICAgICBk
b3dyaXRlKGluaXRCeXRlY29kZXNGaWxlLCBhc21Db3B5cmlnaHRNc2cgJSBieXRlY29kZUpTT05G
aWxlKQogICAgICAgICBpbml0QVNNQnl0ZWNvZGVOdW0gPSAwCiAKICAgICBmb3Igc2VjdGlvbiBp
biBieXRlY29kZVNlY3Rpb25zOgogICAgICAgICBpZiBieXRlY29kZUhGaWxlbmFtZSBhbmQgc2Vj
dGlvblsnZW1pdEluSEZpbGUnXToKLSAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiNk
ZWZpbmUgRk9SX0VBQ0hfezB9X0lEKG1hY3JvKSBcXFxuIi5mb3JtYXQoc2VjdGlvblsibWFjcm9O
YW1lQ29tcG9uZW50Il0pKQorICAgICAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiI2Rl
ZmluZSBGT1JfRUFDSF97MH1fSUQobWFjcm8pIFxcXG4iLmZvcm1hdChzZWN0aW9uWyJtYWNyb05h
bWVDb21wb25lbnQiXSkpCiAgICAgICAgICAgICBmaXJzdE1hY3JvID0gVHJ1ZQogICAgICAgICAg
ICAgZGVmYXVsdExlbmd0aCA9IDEKICAgICAgICAgICAgIGlmICJkZWZhdWx0TGVuZ3RoIiBpbiBz
ZWN0aW9uOgpAQCAtMjQ3LDcgKzI1Myw3IEBACiAgICAgICAgICAgICBieXRlY29kZU51bSA9IDAK
ICAgICAgICAgICAgIGZvciBieXRlY29kZSBpbiBzZWN0aW9uWyJieXRlY29kZXMiXToKICAgICAg
ICAgICAgICAgICBpZiBub3QgZmlyc3RNYWNybzoKLSAgICAgICAgICAgICAgICAgICAgYnl0ZWNv
ZGVIRmlsZS53cml0ZSgiIFxcXG4iKQorICAgICAgICAgICAgICAgICAgICBkb3dyaXRlKGJ5dGVj
b2RlSEZpbGUsICIgXFxcbiIpCiAKICAgICAgICAgICAgICAgICBsZW5ndGggPSBkZWZhdWx0TGVu
Z3RoCiAgICAgICAgICAgICAgICAgaWYgImxlbmd0aCIgaW4gYnl0ZWNvZGU6CkBAIC0yNTYsMTYg
KzI2MiwxNiBAQAogICAgICAgICAgICAgICAgICAgICAjIEFkZCBvbmUgZm9yIHRoZSBvcGNvZGUK
ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbGVuKGJ5dGVjb2RlWyJvZmZzZXRzIl0pICsg
MQogCi0gICAgICAgICAgICAgICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiICAgIG1hY3JvKHswfSwg
ezF9KSIuZm9ybWF0KGJ5dGVjb2RlWyJuYW1lIl0sIGxlbmd0aCkpCisgICAgICAgICAgICAgICAg
ZG93cml0ZShieXRlY29kZUhGaWxlLCAiICAgIG1hY3JvKHswfSwgezF9KSIuZm9ybWF0KGJ5dGVj
b2RlWyJuYW1lIl0sIGxlbmd0aCkpCiAgICAgICAgICAgICAgICAgZmlyc3RNYWNybyA9IEZhbHNl
CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVOdW0gPSBieXRlY29kZU51bSArIDEKIAotICAgICAg
ICAgICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiXG5cbiIpCi0gICAgICAgICAgICBieXRlY29kZUhG
aWxlLndyaXRlKCIjZGVmaW5lIE5VTUJFUl9PRl97MH1fSURTIHsxfVxuXG4iLmZvcm1hdChzZWN0
aW9uWyJtYWNyb05hbWVDb21wb25lbnQiXSwgYnl0ZWNvZGVOdW0pKQorICAgICAgICAgICAgZG93
cml0ZShieXRlY29kZUhGaWxlLCAiXG5cbiIpCisgICAgICAgICAgICBkb3dyaXRlKGJ5dGVjb2Rl
SEZpbGUsICIjZGVmaW5lIE5VTUJFUl9PRl97MH1fSURTIHsxfVxuXG4iLmZvcm1hdChzZWN0aW9u
WyJtYWNyb05hbWVDb21wb25lbnQiXSwgYnl0ZWNvZGVOdW0pKQogCiAKICAgICAgICAgaWYgYnl0
ZWNvZGVTdHJ1Y3RzSEZpbGVuYW1lIGFuZCBzZWN0aW9uWydlbWl0SW5TdHJ1Y3RzRmlsZSddOgot
ICAgICAgICAgICAgYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUud3JpdGUoIm5hbWVzcGFjZSBKU0Mge1xu
XG4iKQorICAgICAgICAgICAgZG93cml0ZShieXRlY29kZVN0cnVjdHNIRmlsZSwgIm5hbWVzcGFj
ZSBKU0Mge1xuXG4iKQogCiAgICAgICAgICAgICBmb3IgYnl0ZWNvZGUgaW4gc2VjdGlvblsiYnl0
ZWNvZGVzIl06CiAgICAgICAgICAgICAgICAgaWYgbm90ICJvZmZzZXRzIiBpbiBieXRlY29kZToK
QEAgLTI3MiwxNiArMjc4LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAg
ICAgICAgICAgICAgd3JpdGVTdHJ1Y3QoYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUsIGJ5dGVjb2RlKQog
Ci0gICAgICAgICAgICBieXRlY29kZVN0cnVjdHNIRmlsZS53cml0ZSgifSAvLyBuYW1lc3BhY2Ug
SlNDIFxuIikKKyAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUsICJ9IC8v
IG5hbWVzcGFjZSBKU0MgXG4iKQogCiAgICAgICAgIGlmIGJ5dGVjb2RlSEZpbGVuYW1lIGFuZCBz
ZWN0aW9uWydlbWl0T3Bjb2RlSURTdHJpbmdWYWx1ZXNJbkhGaWxlJ106CiAgICAgICAgICAgICBi
eXRlY29kZU51bSA9IDAKICAgICAgICAgICAgIGZvciBieXRlY29kZSBpbiBzZWN0aW9uWyJieXRl
Y29kZXMiXToKLSAgICAgICAgICAgICAgICBieXRlY29kZUhGaWxlLndyaXRlKCIjZGVmaW5lIHsw
fV92YWx1ZV9zdHJpbmcgXCJ7MX1cIlxuIi5mb3JtYXQoYnl0ZWNvZGVbIm5hbWUiXSwgYnl0ZWNv
ZGVOdW0pKQorICAgICAgICAgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiNkZWZpbmUg
ezB9X3ZhbHVlX3N0cmluZyBcInsxfVwiXG4iLmZvcm1hdChieXRlY29kZVsibmFtZSJdLCBieXRl
Y29kZU51bSkpCiAgICAgICAgICAgICAgICAgZmlyc3RNYWNybyA9IEZhbHNlCiAgICAgICAgICAg
ICAgICAgYnl0ZWNvZGVOdW0gPSBieXRlY29kZU51bSArIDEKIAotICAgICAgICAgICAgYnl0ZWNv
ZGVIRmlsZS53cml0ZSgiXG4iKSAgICAgICAgICAgIAorICAgICAgICAgICAgZG93cml0ZShieXRl
Y29kZUhGaWxlLCAiXG4iKSAgICAgICAgICAgIAogCiAgICAgICAgIGlmIGluaXRBU01GaWxlTmFt
ZSBhbmQgc2VjdGlvblsnZW1pdEluQVNNRmlsZSddOgogICAgICAgICAgICAgcHJlZml4ID0gIiIK
QEAgLTI4OCw3ICsyOTQsNyBAQAogICAgICAgICAgICAgaWYgImFzbVByZWZpeCIgaW4gc2VjdGlv
bjoKICAgICAgICAgICAgICAgICBwcmVmaXggPSBzZWN0aW9uWyJhc21QcmVmaXgiXQogICAgICAg
ICAgICAgZm9yIGJ5dGVjb2RlIGluIHNlY3Rpb25bImJ5dGVjb2RlcyJdOgotICAgICAgICAgICAg
ICAgIGluaXRCeXRlY29kZXNGaWxlLndyaXRlKCJzZXRFbnRyeUFkZHJlc3MoezB9LCBfezF9ezJ9
KVxuIi5mb3JtYXQoaW5pdEFTTUJ5dGVjb2RlTnVtLCBwcmVmaXgsIGJ5dGVjb2RlWyJuYW1lIl0p
KQorICAgICAgICAgICAgICAgIGRvd3JpdGUoaW5pdEJ5dGVjb2Rlc0ZpbGUsICJzZXRFbnRyeUFk
ZHJlc3MoezB9LCBfezF9ezJ9KVxuIi5mb3JtYXQoaW5pdEFTTUJ5dGVjb2RlTnVtLCBwcmVmaXgs
IGJ5dGVjb2RlWyJuYW1lIl0pKQogICAgICAgICAgICAgICAgIGluaXRBU01CeXRlY29kZU51bSA9
IGluaXRBU01CeXRlY29kZU51bSArIDEKIAogICAgIGlmIGJ5dGVjb2RlSEZpbGVuYW1lOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0
X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vX19pbml0X18ucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI1ICsxLDI1IEBACiAjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNo
IHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKIAotZnJvbSBtb2RlbHMgaW1wb3J0ICoK
LWZyb20gZ2VuZXJhdG9yIGltcG9ydCAqCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0ICoKLWZy
b20gb2JqY19nZW5lcmF0b3IgaW1wb3J0ICoKK2Zyb20gLm1vZGVscyBpbXBvcnQgKgorZnJvbSAu
Z2VuZXJhdG9yIGltcG9ydCAqCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCAqCitmcm9tIC5v
YmpjX2dlbmVyYXRvciBpbXBvcnQgKgogCi1mcm9tIGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX2NwcF9mcm9u
dGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9qc19iYWNrZW5k
X2NvbW1hbmRzIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25f
aGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19oZWFkZXIgaW1wb3J0
ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBn
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyIGltcG9ydCAqCi1m
cm9tIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlv
biBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVz
X2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1h
bmRzIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVh
ZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50
YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19oZWFkZXIgaW1wb3J0
ICoKK2Zyb20gLmdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9t
IC5nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyIGltcG9ydCAq
Citmcm9tIC5nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50
YXRpb24gaW1wb3J0ICoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQkocmV2
aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBA
QAogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCByZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgdWNm
aXJzdCwgR2VuZXJhdG9yCi1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0
VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKK2Zyb20g
LmdlbmVyYXRvciBpbXBvcnQgdWNmaXJzdCwgR2VuZXJhdG9yCitmcm9tIC5tb2RlbHMgaW1wb3J0
IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRU
eXBlLCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CShyZXZpc2lv
biAyMzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIGltcG9ydCByZQogZnJvbSBzdHJpbmcg
aW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9y
Ci1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKK2Zyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1w
bGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwn
KQogCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUHJl
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKnRlbXBsYXRlX2FyZ3MpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxl
cl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVh
ZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKip0ZW1wbGF0ZV9hcmdzKSkKICAgICAgICAg
cmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxMCBAQAogaW1wb3J0IHN0cmluZwogZnJv
bSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3Bw
R2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKK2Zyb20gLmNwcF9nZW5l
cmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1U
eXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00Niw3ICs0Niw3
IEBACiAgICAgICAgIHJldHVybiAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLnByb3Rv
Y29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFp
bihkb21haW4pKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAg
ICAgICByZXR1cm4gW2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpIGlmIGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAw
XQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgdHlwZWRlZnMgPSBb
KCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KQEAgLTYyLDggKzYyLDggQEAKICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ2FsdGVybmF0ZV9kaXNwYXRjaGVycycsIEZhbHNlKToKICAgICAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJk
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBk
b21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlv
bnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4sIGRvbWFpbnMpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNl
bGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMp
KSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQ
b3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJu
ICJcblxuIi5qb2luKHNlY3Rpb25zKQogCkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgY29t
bWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICBpZiBsZW4o
Y29tbWFuZHMpID4gMDoKICAgICAgICAgICAgIGRlY2xhcmF0aW9ucy5hcHBlbmQoJ3ByaXZhdGU6
JykKLSAgICAgICAgZGVjbGFyYXRpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCwgY29tbWFuZHMpKQorICAgICAgICBkZWNsYXJh
dGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRp
b25fZm9yX2NvbW1hbmQsIGNvbW1hbmRzKSkpCiAKICAgICAgICAgZGVjbGFyYXRpb25fYXJncyA9
IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyMzUyMzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwxMCArMjksMTAgQEAKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9y
dCBUZW1wbGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJv
bSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IENwcFRlbXBsYXRlcwotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAot
ZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorZnJvbSAuY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSAuZ2VuZXJh
dG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0
VHlwZSwgQXJyYXlUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC00NSw3ICs0NSw3IEBACiAgICAgICAgIHJldHVybiAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
IiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShz
ZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oc2VsZi5jb21t
YW5kc19mb3JfZG9tYWluKGRvbWFpbikpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZikpCisgICAgICAgIHJldHVybiBbZG9tYWluIGZvciBkb21haW4gaW4gR2VuZXJhdG9y
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikgaWYgbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFp
bihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAg
ICBzZWNvbmRhcnlfaW5jbHVkZXMgPSBzZWxmLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKCkKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
Z2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCJcbiIuam9pbihtYXAoc2VsZi5fZ2Vu
ZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190
b19nZW5lcmF0ZSgpKSkpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJh
dGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2Vu
ZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5z
X3RvX2dlbmVyYXRlKCkpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRl
bXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQogICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBA
CiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBjcHBf
Z2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKLWZyb20gZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVt
VHlwZQorZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20g
Lm1vZGVscyBpbXBvcnQgRW51bVR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcmV0dXJuICIlc0Zyb250ZW5kRGlzcGF0
Y2hlcnMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKHNl
bGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBpbiBHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5ldmVudHNfZm9yX2Rv
bWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAg
ICAgICBoZWFkZXJfYXJncyA9IHsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgc2VjdGlvbnMg
PSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUHJlbHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
LCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChs
aXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
LCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAy
MzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQkod29y
a2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmlu
ZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBDcHBUZW1wbGF0ZXMKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVj
Zmlyc3QKLWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKK2Zyb20gLmNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20g
LmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0
IE9iamVjdFR5cGUsIEFycmF5VHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKIApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICByZXR1cm4gIiVzRnJvbnRlbmREaXNwYXRj
aGVycy5jcHAiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihz
ZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBbZG9tYWluIGZvciBkb21haW4gaW4gR2Vu
ZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikgaWYgbGVuKHNlbGYuZXZlbnRzX2Zvcl9k
b21haW4oZG9tYWluKSkgPiAwXQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgIHNlY3Rpb25z
ID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQog
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkltcGxlbWVudGF0
aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2Vj
dGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
c19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rp
b25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQogICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAiXG5c
biIuam9pbihzZWN0aW9ucykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CShyZXZpc2lvbiAyMzUy
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMCArMzEsMTAgQEAKIGZyb20gb3BlcmF0b3IgaW1wb3J0IG1ldGhvZGNhbGxlcgogZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2Vu
ZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JU
ZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIFByaW1p
dGl2ZVR5cGUsIEFsaWFzZWRUeXBlLCBBcnJheVR5cGUsIEZyYW1ld29ya3MKK2Zyb20gLmNwcF9n
ZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IEVu
dW1UeXBlLCBPYmplY3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBl
LCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC02
Miw4ICs2Miw4IEBACiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3
YXJkX2RlY2xhcmF0aW9ucyhkb21haW5zKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX3R5cGVkZWZzKGRvbWFpbnMpKQogICAgICAgICBzZWN0aW9ucy5leHRlbmQoc2Vs
Zi5fZ2VuZXJhdGVfZW51bV9jb25zdGFudF92YWx1ZV9jb252ZXJzaW9uX21ldGhvZHMoKSkKLSAg
ICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3Jf
ZG9tYWluLCBkb21haW5zKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBz
ZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKKyAgICAgICAgYnVp
bGRlcl9zZWN0aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21h
aW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoW3NlY3Rpb24gZm9yIHNlY3Rp
b24gaW4gYnVpbGRlcl9zZWN0aW9ucyBpZiBsZW4oc2VjdGlvbikgPiAwXSkKICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5k
aW5nX3RyYWl0cygpKQogICAgICAgICBzZWN0aW9ucy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfZGVj
bGFyYXRpb25zX2Zvcl9lbnVtX2NvbnZlcnNpb25fbWV0aG9kcygpKQogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoJ30gLy8gbmFtZXNwYWNlIFByb3RvY29sJykKQEAgLTg3LDggKzg3LDggQEAKIAog
ICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CiAgICAgICAgICAgICBkZWNsYXJhdGlvbl90
eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3Jf
ZG9tYWluKGRvbWFpbildCi0gICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRh
IF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMp
Ci0gICAgICAgICAgICBlbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5j
ZShfdHlwZSwgRW51bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKKyAgICAgICAgICAgIG9iamVj
dF90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMgaWYgaXNpbnN0
YW5jZShfdHlwZSwgT2JqZWN0VHlwZSldCisgICAgICAgICAgICBlbnVtX3R5cGVzID0gW190eXBl
IGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSldCiAgICAgICAgICAgICBzb3J0ZWQob2JqZWN0X3R5cGVzLCBrZXk9bWV0aG9kY2FsbGVy
KCdyYXdfbmFtZScpKQogICAgICAgICAgICAgc29ydGVkKGVudW1fdHlwZXMsIGtleT1tZXRob2Rj
YWxsZXIoJ3Jhd19uYW1lJykpCiAKQEAgLTExMyw4ICsxMTMsOCBAQAogIiIiICUgJ1xuXG4nLmpv
aW4oc2VjdGlvbnMpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZzKHNlbGYsIGRvbWFpbnMp
OgotICAgICAgICBzZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9t
YWluLCBkb21haW5zKQotICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihsYW1iZGEgdGV4dDogbGVu
KHRleHQpID4gMCwgc2VjdGlvbnMpCisgICAgICAgIHNlY3Rpb25zID0gbGlzdChtYXAoc2VsZi5f
Z2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25z
ID0gW3RleHQgZm9yIHRleHQgaW4gc2VjdGlvbnMgaWYgbGVuKHRleHQpID4gMF0KIAogICAgICAg
ICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTEyNSw4
ICsxMjUsOCBAQAogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6CiAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluKGRvbWFpbikKLSAgICAgICAgcHJpbWl0aXZlX2RlY2xhcmF0aW9ucyA9
IGZpbHRlcihsYW1iZGEgZGVjbDogaXNpbnN0YW5jZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBlKSwg
dHlwZV9kZWNsYXJhdGlvbnMpCi0gICAgICAgIGFycmF5X2RlY2xhcmF0aW9ucyA9IGZpbHRlcihs
YW1iZGEgZGVjbDogaXNpbnN0YW5jZShkZWNsLnR5cGUsIEFycmF5VHlwZSksIHR5cGVfZGVjbGFy
YXRpb25zKQorICAgICAgICBwcmltaXRpdmVfZGVjbGFyYXRpb25zID0gW2RlY2wgZm9yIGRlY2wg
aW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgaXNpbnN0YW5jZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBl
KV0KKyAgICAgICAgYXJyYXlfZGVjbGFyYXRpb25zID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9k
ZWNsYXJhdGlvbnMgaWYgaXNpbnN0YW5jZShkZWNsLnR5cGUsIEFycmF5VHlwZSldCiAgICAgICAg
IGlmIGxlbihwcmltaXRpdmVfZGVjbGFyYXRpb25zKSA9PSAwIGFuZCBsZW4oYXJyYXlfZGVjbGFy
YXRpb25zKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCiAKQEAgLTE4Niw3ICsxODYsNyBA
QAogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2Jq
ZWN0VHlwZSk6CiAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKSkK
IAotICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24p
ID4gMCwgc2VjdGlvbnMpCisgICAgICAgIHNlY3Rpb25zID0gW3NlY3Rpb24gZm9yIHNlY3Rpb24g
aW4gc2VjdGlvbnMgaWYgbGVuKHNlY3Rpb24pID4gMF0KICAgICAgICAgaWYgbGVuKHNlY3Rpb25z
KSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCiAKQEAgLTIwMCw5ICsyMDAsOSBAQAogICAg
ICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6CiAgICAgICAg
ICAgICByZXR1cm4gJycKIAotICAgICAgICBlbnVtX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1l
bWJlcjogaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5p
c19hbm9ueW1vdXMsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICByZXF1
aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9u
YWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1i
ZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIGVudW1fbWVtYmVycyA9IFttZW1iZXIgZm9y
IG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBpc2luc3RhbmNlKG1l
bWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91c10KKyAgICAg
ICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0
aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQorICAgICAgICBvcHRp
b25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KICAgICAgICAgb2JqZWN0X25hbWUgPSB0
eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZQogCiAgICAgICAgIGxpbmVzID0gW10KQEAgLTI2MSw3
ICsyNjEsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gJyAg
ICAnICsgbGluZQogCi0gICAgICAgIGluZGVudGVkX2xpbmVzID0gbWFwKGFwcGx5X2luZGVudGF0
aW9uLCBzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX21lbWJlci5tZW1i
ZXJfbmFtZSwgZW51bV9tZW1iZXIudHlwZSkpCisgICAgICAgIGluZGVudGVkX2xpbmVzID0gbGlz
dChtYXAoYXBwbHlfaW5kZW50YXRpb24sIHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90
eXBlKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBlbnVtX21lbWJlci50eXBlKSkpCiAgICAgICAg
IHJldHVybiAnXG4nLmpvaW4oaW5kZW50ZWRfbGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX3N0
cnVjdF9mb3JfZW51bV90eXBlKHNlbGYsIGVudW1fbmFtZSwgZW51bV90eXBlKToKQEAgLTI3NSw3
ICsyNzUsNyBAQAogCiAgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyX3N0YXRlX2VudW0oc2VsZiwg
dHlwZV9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcmVxdWlyZWRf
bWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0
eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9
IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBu
b3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAgICAgICBlbnVtX3ZhbHVlcyA9IFtdCiAKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSB7JykKQEAgLTM0Myw3ICszNDMsNyBAQAogCiAgICAg
ICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6CiAgICAgICAgICAg
ICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihk
b21haW4pCi0gICAgICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFt
YmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIHR5
cGVfZGVjbGFyYXRpb25zKQorICAgICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0g
W2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50eXBlX25lZWRzX3No
YXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFy
YXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgogICAgICAgICAgICAgICAgIGZvciB0
eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKQEAgLTM5Miw4ICsz
OTIsOCBAQAogICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgp
OgogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVj
bC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQotICAgICAgICAgICAgb2JqZWN0
X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlw
ZSksIGRlY2xhcmF0aW9uX3R5cGVzKQotICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihs
YW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlw
ZXMpCisgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGluIGRlY2xh
cmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpXQorICAgICAgICAg
ICAgZW51bV90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpXQogICAgICAgICAgICAgaWYgbGVuKG9iamVjdF90
eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0gMDoKICAgICAgICAgICAgICAgICBjb250aW51ZQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyMzUyMzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDEwICszMCwxMCBAQAogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiBmcm9tIG9w
ZXJhdG9yIGltcG9ydCBtZXRob2RjYWxsZXIKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBD
cHBHZW5lcmF0b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5l
cmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9ydCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBl
LCBFbnVtVHlwZSwgT2JqZWN0VHlwZQorZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2Vu
ZXJhdG9yCitmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0
b3IsIHVjZmlyc3QKK2Zyb20gLm1vZGVscyBpbXBvcnQgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwg
RW51bVR5cGUsIE9iamVjdFR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CiAKQEAgLTY1LDggKzY1LDggQEAKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2Ug
UHJvdG9jb2wgeycpCiAgICAgICAgIHNlY3Rpb25zLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVt
X21hcHBpbmdfYW5kX2NvbnZlcnNpb25fbWV0aG9kcyhkb21haW5zKSkKICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoKSkKLSAgICAgICAgYnVp
bGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBk
b21haW5zKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBs
ZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKKyAgICAgICAgYnVpbGRlcl9zZWN0
aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4sIGRvbWFp
bnMpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoW3NlY3Rpb24gZm9yIHNlY3Rpb24gaW4gYnVp
bGRlcl9zZWN0aW9ucyBpZiBsZW4oc2VjdGlvbikgPiAwXSkKICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2NvbCcpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKIApAQCAtMTI4LDggKzEyOCw4IEBACiAKICAgICAgICAgdHlw
ZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWlu
KQogICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gdHlw
ZV9kZWNsYXJhdGlvbnNdCi0gICAgICAgIG9iamVjdF90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5
cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKLSAg
ICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUs
IEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgIG9iamVjdF90eXBlcyA9IFtf
dHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMgaWYgaXNpbnN0YW5jZShfdHlwZSwg
T2JqZWN0VHlwZSldCisgICAgICAgIGVudW1fdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGluIGRl
Y2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKV0KICAgICAgICAg
aWYgbGVuKG9iamVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0gMDoKICAgICAgICAgICAg
IHJldHVybiAnJwogCkBAIC0xNTYsOCArMTU2LDggQEAKICAgICAgICAgc2VjdGlvbnMgPSBbXQog
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIHNlbGYuaGVscGVyc19u
YW1lc3BhY2UoKSkKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1f
bWFwcGluZygpKQotICAgICAgICBlbnVtX3BhcnNlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5l
cmF0ZV9lbnVtX2NvbnZlcnNpb25fbWV0aG9kc19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAg
ICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAw
LCBlbnVtX3BhcnNlcl9zZWN0aW9ucykpCisgICAgICAgIGVudW1fcGFyc2VyX3NlY3Rpb25zID0g
bGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9yX2RvbWFp
biwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChbc2VjdGlvbiBmb3Igc2VjdGlv
biBpbiBlbnVtX3BhcnNlcl9zZWN0aW9ucyBpZiBsZW4oc2VjdGlvbikgPiAwXSkKICAgICAgICAg
aWYgbGVuKHNlY3Rpb25zKSA9PSAxOgogICAgICAgICAgICAgcmV0dXJuIFtdICAjIE5vIGRlY2xh
cmF0aW9ucyB0byBlbWl0LCBqdXN0IHRoZSBuYW1lc3BhY2UuCiAKQEAgLTE2OCw3ICsxNjgsNyBA
QAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5z
X3RvX2dlbmVyYXRlKCk6CiAgICAgICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlw
ZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCi0gICAgICAgICAgICBmb3IgdHlwZV9k
ZWNsYXJhdGlvbiBpbiBmaWx0ZXIobGFtYmRhIGRlY2w6IEdlbmVyYXRvci50eXBlX2hhc19vcGVu
X2ZpZWxkcyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucyk6CisgICAgICAgICAgICBmb3Ig
dHlwZV9kZWNsYXJhdGlvbiBpbiBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBp
ZiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKV06CiAgICAgICAgICAg
ICAgICAgb3Blbl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRp
b24pCiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZChvcGVuX21lbWJl
cnMsIGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgogICAgICAgICAgICAg
ICAgICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1Byb3RvY29sJywg
ZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwg
dWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQpAQCAtMTc5LDcgKzE3OSw3IEBACiAg
ICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAg
ICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICBkZWNsYXJhdGlvbnNfdG9f
Z2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3Nl
cnRpb25zKGRlY2wudHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICBkZWNsYXJhdGlv
bnNfdG9fZ2VuZXJhdGUgPSBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBz
ZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpXQogCiAgICAgICAgIGZv
ciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKICAgICAgICAg
ICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKQEAg
LTIwMCw4ICsyMDAsOCBAQAogICAgICAgICByZXR1cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLlBy
b3RvY29sT2JqZWN0UnVudGltZUNhc3QpLnN1YnN0aXR1dGUoTm9uZSwgKiphcmdzKQogCiAgICAg
ZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBvYmpl
Y3RfZGVjbGFyYXRpb24pOgotICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJk
YSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIG9iamVjdF9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnMpCi0gICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJl
cjogbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQor
ICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIG9iamVjdF9k
ZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5pc19vcHRpb25hbF0KKyAgICAg
ICAgb3B0aW9uYWxfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiBvYmplY3RfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KICAgICAgICAgc2hvdWxk
X2NvdW50X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKG9i
amVjdF9kZWNsYXJhdGlvbi50eXBlKQogICAgICAgICBsaW5lcyA9IFtdCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2Jh
Y2tlbmRfY29tbWFuZHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQko
cmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQkod29ya2luZyBjb3B5
KQpAQCAtMzAsOSArMzAsOSBAQAogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCiAKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20g
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRl
cwotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvciwgdWNmaXJzdAorZnJvbSAuZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZQog
CiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNDYsMTYgKzQ2LDE2IEBA
CiAKICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAg
ICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihk
b21haW4pCi0gICAgICAgIGRvbWFpbl9lbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBkZWNsYXJh
dGlvbjogaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSksIHR5cGVfZGVjbGFy
YXRpb25zKQorICAgICAgICBkb21haW5fZW51bV90eXBlcyA9IFtkZWNsYXJhdGlvbiBmb3IgZGVj
bGFyYXRpb24gaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50
eXBlLCBFbnVtVHlwZSldCiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5jb21tYW5kc19mb3JfZG9t
YWluKGRvbWFpbikpID4gMCBvciBsZW4oc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pKSA+
IDAgb3IgbGVuKGRvbWFpbl9lbnVtX3R5cGVzKSA+IDAKIAogICAgIGRlZiBkb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRl
X2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJl
dHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2Vs
Zik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
Z2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuZ2Vu
ZXJhdGVfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rp
b25zLmV4dGVuZChsaXN0KG1hcChzZWxmLmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCkpKSkKICAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQogCiAg
ICAgZGVmIGdlbmVyYXRlX2RvbWFpbihzZWxmLCBkb21haW4pOgpAQCAtNzAsNyArNzAsNyBAQAog
ICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCiAgICAg
ICAgIGV2ZW50cyA9IHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKQogCi0gICAgICAgIGhh
c19hc3luY19jb21tYW5kcyA9IGFueShtYXAobGFtYmRhIGNvbW1hbmQ6IGNvbW1hbmQuaXNfYXN5
bmMsIGNvbW1hbmRzKSkKKyAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55KFtjb21tYW5k
LmlzX2FzeW5jIGZvciBjb21tYW5kIGluIGNvbW1hbmRzXSkKICAgICAgICAgaWYgbGVuKGV2ZW50
cykgPiAwIG9yIGhhc19hc3luY19jb21tYW5kczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlciUoZG9tYWluKXNEaXNwYXRjaGVyID0gSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAi
JShkb21haW4pcyIpOycgJSBhcmdzKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogaW1wb3J0IHJlCiBmcm9tIHN0cmlu
ZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLWZyb20gbW9kZWxzIGltcG9ydCBG
cmFtZXdvcmtzCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9t
IG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBh
cyBPYmpDVGVtcGxhdGVzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IK
K2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIC5tb2RlbHMgaW1wb3J0IEZy
YW1ld29ya3MKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9t
IC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApA
QCAtNDcsNyArNDcsNyBAQAogICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLmgn
ICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNl
bGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRz
X2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAg
ICByZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2Rv
bWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgaGVhZGVycyA9IFsKQEAgLTY0LDcgKzY0LDcg
QEAKICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5l
cmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAg
ICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfb2JqY19oYW5kbGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyUG9zdGx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5c
bicuam9pbihzZWN0aW9ucykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKIGlt
cG9ydCByZQogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRv
ciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi1m
cm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBG
cmFtZXdvcmtzCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDVHlwZUNhdGVnb3J5LCBP
YmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2Zy
b20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IKK2Zyb20gLm1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgRW51bVR5
cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQg
T2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCitmcm9t
IC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApA
QCAtNDcsNyArNDcsNyBAQAogICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLm1t
JyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShz
ZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5k
c19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAg
ICAgcmV0dXJuIGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9k
b21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKSkKIAogICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwpAQCAt
NjUsNyArNjUsNyBAQAogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4
dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWlu
LCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVy
YXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbiwgZG9tYWlucykpKQogICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
CiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIApAQCAtMTE0LDcgKzExNCw3
IEBACiAgICAgICAgIGlmIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogCi0gICAgICAgICAgICByZXF1aXJlZF9wb2ludGVyX3Bh
cmFtZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogbm90IHBhcmFtZXRlci5pc19vcHRp
b25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRl
ci50eXBlKSwgY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykKKyAgICAgICAgICAgIHJlcXVpcmVk
X3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNH
ZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAg
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKICAg
ICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpj
X2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQogICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKQEAgLTEyMiw3ICsxMjIsNyBA
QAogICAgICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlfY2xhc3MgYW5kIG9iamNfYXJyYXlfY2xh
c3Muc3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkpOgogICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJB
WSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFtZSwgb2JqY19hcnJheV9jbGFzcykpCiAKLSAg
ICAgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1iZGEgcGFy
YW1ldGVyOiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9v
YmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnMpCisgICAgICAgICAgICBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVy
IGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycyBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShw
YXJhbWV0ZXIudHlwZSldCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIG9wdGlvbmFsX3Bv
aW50ZXJfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0
b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJf
bmFtZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
Y29uZmlndXJhdGlvbl9oZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAK
IGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2Vu
ZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRv
clRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gLm9i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBP
YmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5CShyZXZpc2lvbiAyMzUyMzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDkgKzI5LDkgQEAKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQog
Ci1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGlt
cG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
T2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3Ig
aW1wb3J0IEdlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0
b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRl
bXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMCBAQAogaW1wb3J0IHN0cmlu
ZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBv
cnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0
Ci1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVt
cGxhdGVzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gLmdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5vYmpjX2dlbmVyYXRvciBp
bXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcmV0dXJu
ICclc0V2ZW50RGlzcGF0Y2hlcnMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRl
ZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYu
c2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dl
bmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShz
ZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRh
cnlfaGVhZGVycyA9IFsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgc2VjdGlvbnMgPSBbXQog
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUHJl
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
cywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5l
cmF0ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucywgZG9tYWlucykpKQogICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBv
c3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4g
J1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXIt
PmZyb250ZW5kUm91dGVyKCk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAg
IHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1iZGEgcGFyYW1ldGVyOiBu
b3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19w
b2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBldmVudC5ldmVudF9wYXJhbWV0ZXJzKQorICAg
ICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0
ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVycyBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5
cGUpXQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVy
czoKICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29i
amNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUiglcywg
QCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAg
ICAgICAgICAgaWYgb2JqY19hcnJheV9jbGFzcyBhbmQgb2JqY19hcnJheV9jbGFzcy5zdGFydHN3
aXRoKHNlbGYub2JqY19wcmVmaXgoKSk6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWSglcywgWyVzIGNsYXNzXSk7
JyAlICh2YXJfbmFtZSwgb2JqY19hcnJheV9jbGFzcykpCiAKLSAgICAgICAgb3B0aW9uYWxfcG9p
bnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6IHBhcmFtZXRlci5pc19v
cHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFt
ZXRlci50eXBlKSwgZXZlbnQuZXZlbnRfcGFyYW1ldGVycykKKyAgICAgICAgb3B0aW9uYWxfcG9p
bnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50
X3BhcmFtZXRlcnMgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlz
X3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAgICAgICBmb3IgcGFy
YW1ldGVyIGluIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVyczoKICAgICAgICAgICAgIHZhcl9u
YW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9u
YW1lLCB2YXJfbmFtZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2hlYWRlci5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDEwICsyOSwxMCBAQAogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCiAKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QK
LWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZSwgUGxhdGZvcm1zCi1mcm9t
IG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUK
LWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIE9iakNUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1
Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlLCBQbGF0Zm9y
bXMKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVf
YW5kX25hbWUKK2Zyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVy
YXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQogCkBAIC02MCw5ICs2MCw5IEBACiAgICAgICAgIH0KIAogICAgICAgICBkb21h
aW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgdHlwZV9kb21haW5zID0g
ZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIGRvbWFpbnMpCi0g
ICAgICAgIGNvbW1hbmRfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21t
YW5kc19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVy
KHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBkb21haW5zKQorICAgICAg
ICB0eXBlX2RvbWFpbnMgPSBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19m
b3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgY29tbWFuZF9kb21haW5zID0gbGlzdChmaWx0
ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisg
ICAgICAgIGV2ZW50X2RvbWFpbnMgPSBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9l
dmVudHNfZm9yX2RvbWFpbiwgZG9tYWlucykpCiAKICAgICAgICAgIyBGSVhNRTogPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzEzODIyMj4gV2ViIEluc3BlY3RvcjogUmVkdWNlIHVubmVjZXNzYXJ5IGVu
dW1zL3R5cGVzIGdlbmVyYXRlZCBpbiBPYmpDIFByb3RvY29sIEludGVyZmFjZXMKICAgICAgICAg
IyBDdXJyZW50bHkgd2UgZ2VuZXJhdGUgZW51bXMvdHlwZXMgZm9yIGFsbCB0eXBlcyBpbiB0aGUg
dHlwZV9kb21haW5zLiBGb3IgdGhlIGJ1aWx0LWluCkBAIC03MiwxNCArNzIsMTQgQEAKICAgICAg
ICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9s
aWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVz
LkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0
ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucywgdHlwZV9kb21haW5zKSkpKQorICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2Zvcndh
cmRfZGVjbGFyYXRpb25zLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zvcl9wbGF0Zm9ybXMoKSkKLSAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2Vu
dW1zLCB0eXBlX2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4o
ZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlcywgdHlwZV9kb21haW5zKSkpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYu
X2dlbmVyYXRlX2VudW1zLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZXMs
IHR5cGVfZG9tYWlucykgaWYgX2ZdKSkKIAogICAgICAgICBpZiBzZWxmLmdldF9nZW5lcmF0b3Jf
c2V0dGluZygnZ2VuZXJhdGVfYmFja2VuZCcsIEZhbHNlKToKLSAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2NvbW1h
bmRfcHJvdG9jb2xzLCBjb21tYW5kX2RvbWFpbnMpKSkpCi0gICAgICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9p
bnRlcmZhY2VzLCBldmVudF9kb21haW5zKSkpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCdcblxuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2NvbW1hbmRfcHJv
dG9jb2xzLCBjb21tYW5kX2RvbWFpbnMpIGlmIF9mXSkpCisgICAgICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoJ1xuXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRf
aW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykgaWYgX2ZdKSkKIAogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5IZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShO
b25lKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQpAQCAtMTcxLDggKzE3
MSw4IEBACiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOycpCiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OycpCiAKLSAgICAgICAgcmVx
dWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlv
bmFsLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIG9wdGlvbmFsX21lbWJlcnMg
PSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLmlzX29wdGlvbmFsLCBkZWNsYXJhdGlvbi50
eXBlX21lbWJlcnMpCisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1i
ZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIG5vdCBtZW1iZXIuaXNfb3B0aW9uYWxd
CisgICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KICAgICAgICAgaWYgcmVx
dWlyZWRfbWVtYmVyczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9p
bml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1
aXJlZF9tZW1iZXJzKSkKICAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5h
bF9oZWFkZXIucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBv
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
T2JqQ1RlbXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QK
K2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1Rl
bXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTUsMTIg
KzU1LDEyIEBACiAgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICcg
KyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKICAgICAgICAgfQogCi0g
ICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRz
X2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKQorICAgICAgICBldmVudF9k
b21haW5zID0gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21h
aW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKIAogICAgICAgICBzZWN0aW9ucyA9IFtd
CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuR2VuZXJpY0hlYWRlclBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50
X2Rpc3BhdGNoZXJfcHJpdmF0ZV9pbnRlcmZhY2VzLCBldmVudF9kb21haW5zKSkpKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2Vu
ZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMp
IGlmIF9mXSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVz
LkdlbmVyaWNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
ICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
cHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEwICsyOSwxMCBAQAogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRl
CiAKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLWZyb20gbW9kZWxzIGltcG9ydCBF
bnVtVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9y
dCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2Jq
Q0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvcgorZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3Jrcywg
UGxhdGZvcm1zCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJv
bSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVz
IGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAK
QEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgcmV0dXJuICclc1R5cGVDb252ZXJzaW9ucy5oJyAl
IHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3Jf
ZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0
dXJuIGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIEdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9v
dXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcnMgPSBbCkBAIC03MCw3ICs3MCw3IEBACiAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9u
c0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hl
YWRlclN0YW5kYXJkKS5zdWJzdGl0dXRlKE5vbmUpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Zvcl9wbGF0Zm9ybXMoKSkKLSAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rp
b25zLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dl
bmVyYXRlX2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVy
UG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVy
biAnXG5cbicuam9pbihzZWN0aW9ucykKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZl
cnNpb25zX2ltcGxlbWVudGF0aW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlw
ZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxMCArMjgsMTAgQEAKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9y
dCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9tIG1vZGVs
cyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5cGUsIFBy
aW1pdGl2ZVR5cGUsIEZyYW1ld29ya3MKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNH
ZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yCitmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5
cGUsIEFsaWFzZWRUeXBlLCBQcmltaXRpdmVUeXBlLCBGcmFtZXdvcmtzCitmcm9tIC5vYmpjX2dl
bmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAg
ICAgcmV0dXJuICclc1R5cGVDb252ZXJzaW9ucy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQog
CiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0
ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNo
b3VsZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBz
ZWNvbmRhcnlfaGVhZGVycyA9IFsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiBpbXBvcnQgc3RyaW5n
CiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBl
LCBGcmFtZXdvcmtzCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDVHlwZUNhdGVnb3J5
LCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2Jq
Q0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBF
bnVtVHlwZSwgRnJhbWV3b3JrcworZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNUeXBl
Q2F0ZWdvcnksIE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHJl
dHVybiAnJXNUeXBlcy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRf
Z2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90
eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkpCiAK
ICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaGVhZGVy
cyA9IFsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vi
c3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1h
cChzZWxmLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zLCBkb21haW5zKSkKKyAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlv
bnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkBAIC05NSw3ICs5
NSw3IEBACiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3BheWxvYWQoZG9tYWluLCBkZWNs
YXJhdGlvbikpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9t
ZXRob2RfZm9yX3Byb3RvY29sX29iamVjdChkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAg
cmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29w
dGlvbmFsLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIHJlcXVpcmVkX21lbWJl
cnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIG5v
dCBtZW1iZXIuaXNfb3B0aW9uYWxdCiAgICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6CiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoZG9tYWluLCBkZWNsYXJh
dGlvbiwgcmVxdWlyZWRfbWVtYmVycykpCkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiBuaWw7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQogCi0gICAgICAgIHJlcXVpcmVkX3BvaW50ZXJfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVt
YmVyOiBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUobWVtYmVyLnR5cGUp
LCByZXF1aXJlZF9tZW1iZXJzKQorICAgICAgICByZXF1aXJlZF9wb2ludGVyX21lbWJlcnMgPSBb
bWVtYmVyIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVycyBpZiBPYmpDR2VuZXJhdG9yLmlz
X3R5cGVfb2JqY19wb2ludGVyX3R5cGUobWVtYmVyLnR5cGUpXQogICAgICAgICBpZiByZXF1aXJl
ZF9wb2ludGVyX21lbWJlcnM6CiAgICAgICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX3Bv
aW50ZXJfbWVtYmVyczoKICAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3Iu
aWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9y
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvci5weQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiBpbXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBU
ZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmpl
Y3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxh
dGZvcm1zCitmcm9tIC5nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgVGVtcGxhdGVzCitmcm9tIC5tb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVj
dFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQbGF0
Zm9ybXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTE0MCw3ICsx
NDAsNyBAQAogCiAgICAgIyBUaGVzZSBtZXRob2RzIGFyZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNz
ZXMuCiAgICAgZGVmIG5vbl9zdXBwbGVtZW50YWxfZG9tYWlucyhzZWxmKToKLSAgICAgICAgcmV0
dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBub3QgZG9tYWluLmlzX3N1cHBsZW1lbnRhbCwgc2Vs
Zi5tb2RlbCgpLmRvbWFpbnMpCisgICAgICAgIHJldHVybiBbZG9tYWluIGZvciBkb21haW4gaW4g
c2VsZi5tb2RlbCgpLmRvbWFpbnMgaWYgbm90IGRvbWFpbi5pc19zdXBwbGVtZW50YWxdCiAKICAg
ICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubm9u
X3N1cHBsZW1lbnRhbF9kb21haW5zKCkKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICBmaWVs
ZHMgPSBzZXQoX1RZUEVTX1dJVEhfT1BFTl9GSUVMRFMuZ2V0KHR5cGVfZGVjbGFyYXRpb24udHlw
ZS5xdWFsaWZpZWRfbmFtZSgpLCBbXSkpCiAgICAgICAgIGlmIG5vdCBmaWVsZHM6CiAgICAgICAg
ICAgICByZXR1cm4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMKLSAgICAgICAgcmV0dXJu
IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUgaW4gZmllbGRzLCB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmV0dXJuIFttZW1iZXIgZm9yIG1l
bWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIubWVtYmVyX25h
bWUgaW4gZmllbGRzXQogCiAgICAgZGVmIHR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhzZWxm
LCBfdHlwZSk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfdHlwZXNfbmVlZGluZ19z
aGFwZV9hc3NlcnRpb25zIik6CkBAIC0xODksNyArMTg5LDcgQEAKICAgICAjIHNldCBvZiB0eXBl
cyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHJlZ2VuZXJhdGVkIG9uIHN1YnNlcXVlbnQgY2Fs
bHMgdG8KICAgICAjIEdlbmVyYXRvci50eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMoKS4K
ICAgICBkZWYgY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKHNlbGYs
IGRvbWFpbnMpOgotICAgICAgICBkb21haW5fbmFtZXMgPSBtYXAobGFtYmRhIGRvbWFpbjogZG9t
YWluLmRvbWFpbl9uYW1lLCBkb21haW5zKQorICAgICAgICBkb21haW5fbmFtZXMgPSBbZG9tYWlu
LmRvbWFpbl9uYW1lIGZvciBkb21haW4gaW4gZG9tYWluc10KICAgICAgICAgbG9nLmRlYnVnKCI+
IENhbGN1bGF0aW5nIHR5cGVzIHRoYXQgbmVlZCBzaGFwZSBhc3NlcnRpb25zIChlbGlnaWJsZSBk
b21haW5zOiAlcykiICUgIiwgIi5qb2luKGRvbWFpbl9uYW1lcykpCiAKICAgICAgICAgIyBNdXRh
dGVzIHRoZSBwYXNzZWQtaW4gc2V0OyB0aGlzIHNpbXBsaWZpZXMgY2hlY2tzIHRvIHByZXZlbnQg
aW5maW5pdGUgcmVjdXJzaW9uLgpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgICAgIGZvciBfdHlw
ZSBpbiBhbGxfdHlwZXM6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBtYXAoc2VsZi5f
YXNzaWduX2VuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlLCBfdHlwZS5lbnVtX3ZhbHVlcygpKQorICAg
ICAgICAgICAgbGlzdChtYXAoc2VsZi5fYXNzaWduX2VuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlLCBf
dHlwZS5lbnVtX3ZhbHVlcygpKSkKIAogICAgIGRlZiBfYXNzaWduX2VuY29kaW5nX2Zvcl9lbnVt
X3ZhbHVlKHNlbGYsIGVudW1fdmFsdWUpOgogICAgICAgICBpZiBlbnVtX3ZhbHVlIGluIHNlbGYu
X2VudW1fdmFsdWVfZW5jb2RpbmdzOgpAQCAtMjc5LDcgKzI3OSw3IEBACiAgICAgICAgICAgICBy
ZXR1cm4gX0FMV0FZU19TUEVDSUFMQ0FTRURfRU5VTV9WQUxVRV9MT09LVVBfVEFCTEVbbWF0Y2gu
Z3JvdXAoMSkudXBwZXIoKV0KIAogICAgICAgICAjIFNwbGl0IG9uIGh5cGhlbiwgaW50cm9kdWNl
IGNhbWVsY2FzZSwgYW5kIGZvcmNlIHVwcGVyY2FzaW5nIG9mIGFjcm9ueW1zLgotICAgICAgICBz
dWJ3b3JkcyA9IG1hcCh1Y2ZpcnN0LCBfRU5VTV9JREVOVElGSUVSX1JFTkFNRV9NQVAuZ2V0KGVu
dW1fdmFsdWUsIGVudW1fdmFsdWUpLnNwbGl0KCctJykpCisgICAgICAgIHN1YndvcmRzID0gbGlz
dChtYXAodWNmaXJzdCwgX0VOVU1fSURFTlRJRklFUl9SRU5BTUVfTUFQLmdldChlbnVtX3ZhbHVl
LCBlbnVtX3ZhbHVlKS5zcGxpdCgnLScpKSkKICAgICAgICAgcmV0dXJuIHJlLnN1YihyZS5jb21w
aWxlKHJlZ2V4LCByZS5JR05PUkVDQVNFKSwgcmVwbGFjZUNhbGxiYWNrLCAiIi5qb2luKHN1Yndv
cmRzKSkKIAogICAgIEBzdGF0aWNtZXRob2QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkJKHJldmlz
aW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL21vZGVscy5weQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiAKIGRl
ZiBmaW5kX2R1cGxpY2F0ZXMobCk6Ci0gICAgcmV0dXJuIFtrZXkgZm9yIGtleSwgY291bnQgaW4g
Y29sbGVjdGlvbnMuQ291bnRlcihsKS5pdGVtcygpIGlmIGNvdW50ID4gMV0KKyAgICByZXR1cm4g
W2tleSBmb3Iga2V5LCBjb3VudCBpbiBsaXN0KGNvbGxlY3Rpb25zLkNvdW50ZXIobCkuaXRlbXMo
KSkgaWYgY291bnQgPiAxXQogCiAKIF9GUkFNRVdPUktfQ09ORklHX01BUCA9IHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJh
dG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRv
ci5weQkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBsb2dnaW5nCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2Jq
ZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKK2Zy
b20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1w
b3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFz
ZWRUeXBlLCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQog
CkBAIC01MCw3ICs1MCw3IEBACiAgICAgJ2lkJzogJ2lkZW50aWZpZXInLCAgIyBQYWdlLkZyYW1l
LmlkLCBSdW50aW1lLkV4ZWN1dGlvbkNvbnRleHREZXNjcmlwdGlvbi5pZCwgRGVidWdnZXIuQnJl
YWtwb2ludEFjdGlvbi5pZAogfQogCi1fT0JKQ19JREVOVElGSUVSX1JFVkVSU0VfUkVOQU1FX01B
UCA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIF9PQkpDX0lERU5USUZJRVJfUkVOQU1FX01BUC5p
dGVyaXRlbXMoKSkKK19PQkpDX0lERU5USUZJRVJfUkVWRVJTRV9SRU5BTUVfTUFQID0gZGljdCgo
diwgaykgZm9yIGssIHYgaW4gX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQLml0ZW1zKCkpCiAK
IAogY2xhc3MgT2JqQ1R5cGVDYXRlZ29yeToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2dlbmVyYXRlV2FzbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9nZW5lcmF0ZVdhc20ucHkJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbS5weQkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQAogICAgICAgICAjIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIHB5dGhvbiBpcyBkdW1i
IGFuZCB3b24ndCBsZXQgbWUgdXNlIHNlbGYgaW4gdGhlIGxhbWJkYSwgd2hpY2ggaXMgcmlkaWN1
bG91cy4KICAgICAgICAgaWYgcmV0ID09IE5vbmU6CiAgICAgICAgICAgICByZXQgPSBsYW1iZGEg
b3A6IHsibmFtZSI6IG9wLCAib3Bjb2RlIjogc2VsZi5vcGNvZGVzW29wXX0KLSAgICAgICAgZm9y
IG9wIGluIHNlbGYub3Bjb2Rlcy5pdGVya2V5cygpOgorICAgICAgICBmb3Igb3AgaW4gc2VsZi5v
cGNvZGVzLmtleXMoKToKICAgICAgICAgICAgIGlmIGZpbHRlcihzZWxmLm9wY29kZXNbb3BdKToK
ICAgICAgICAgICAgICAgICB5aWVsZCByZXQob3ApCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvZ2VuZXJhdGVZYXJyQ2Fub25pY2FsaXplVW5pY29k
ZQkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvZ2VuZXJh
dGVZYXJyQ2Fub25pY2FsaXplVW5pY29kZQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBA
QAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKLWZyb20gc2V0cyBpbXBvcnQgU2V0
CiAKIGhlYWRlciA9ICIiIi8qCiAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCkBAIC03OCwxMSArNzcsMjEgQEAKICAgICAgICAgZGlybmFtZSA9IG9z
LnBhdGguZGlybmFtZShwYXRoKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkaXJuYW1l
KToKICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCi0gICAgICAgIHJldHVybiBvcGVu
KHBhdGgsIG1vZGUpCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMiBvciBt
b2RlID09ICJ3YiIgb3IgbW9kZSA9PSAicmIiOgorICAgICAgICAgICAgcmV0dXJuIG9wZW4ocGF0
aCwgbW9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvcGVuKHBhdGgsIG1v
ZGUsIGVuY29kaW5nID0gIlVURi04IikKICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgotICAgICAg
ICBwcmludCAiSS9PIGVycm9yIG9wZW5pbmcgezB9LCAoezF9KTogezJ9Ii5mb3JtYXQocGF0aCwg
ZS5lcnJubywgZS5zdHJlcnJvcikKKyAgICAgICAgcHJpbnQoIkkvTyBlcnJvciBvcGVuaW5nIHsw
fSwgKHsxfSk6IHsyfSIuZm9ybWF0KHBhdGgsIGUuZXJybm8sIGUuc3RyZXJyb3IpKQogICAgICAg
ICBleGl0KDEpCiAKK2RlZiBkb3dyaXRlKGZpbGUsIHN0cik6CisgICAgaWYgc3lzLnZlcnNpb25f
aW5mby5tYWpvciA9PSAyOgorICAgICAgICBmaWxlLndyaXRlKHN0cikKKyAgICBlbHNlOgorICAg
ICAgICBmaWxlLndyaXRlKGJ5dGVzKHN0ciwgInV0Zi04IikpCisKKwogY2xhc3MgQ2Fub25pY2Fs
aXplOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5jYW5vbmljYWxHcm91
cHMgPSB7fTsKQEAgLTkzLDcgKzEwMiw3IEBACiAgICAgICAgIHNlbGYuY2Fub25pY2FsR3JvdXBz
W21hcHBpbmddLmFwcGVuZChjb2RlKQogICAgICAgICAKICAgICBkZWYgcmVhZENhc2VGb2xkaW5n
KHNlbGYsIGZpbGUpOgotICAgICAgICBjb2Rlc1NlZW4gPSBTZXQoKQorICAgICAgICBjb2Rlc1Nl
ZW4gPSBzZXQoKQogICAgICAgICBmb3IgbGluZSBpbiBmaWxlOgogICAgICAgICAgICAgbGluZSA9
IGxpbmUuc3BsaXQoJyMnLCAxKVswXQogICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkK
QEAgLTE1NywyNiArMTY2LDI2IEBACiAgICAgICAgICAgICBzZXQgPSBjaGFyYWN0ZXJTZXRzW2ld
CiAgICAgICAgICAgICBmb3IgY2ggaW4gc2V0OgogICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMg
PSBjaGFyYWN0ZXJzICsgIjB4e2NoYXJhY3RlcjowNHh9LCAiLmZvcm1hdChjaGFyYWN0ZXI9Y2gp
Ci0gICAgICAgICAgICBmaWxlLndyaXRlKCJjb25zdCBVQ2hhcjMyIHVuaWNvZGVDaGFyYWN0ZXJT
ZXR7aW5kZXg6ZH1bXSA9IHt7IHtjaGFyYWN0ZXJzfTAgfX07XG4iLmZvcm1hdChpbmRleD1pLCBj
aGFyYWN0ZXJzPWNoYXJhY3RlcnMpKQorICAgICAgICAgICAgZG93cml0ZShmaWxlLCAiY29uc3Qg
VUNoYXIzMiB1bmljb2RlQ2hhcmFjdGVyU2V0e2luZGV4OmR9W10gPSB7eyB7Y2hhcmFjdGVyc30w
IH19O1xuIi5mb3JtYXQoaW5kZXg9aSwgY2hhcmFjdGVycz1jaGFyYWN0ZXJzKSkKIAotICAgICAg
ICBmaWxlLndyaXRlKCJcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoInN0YXRpYyBjb25zdCBzaXpl
X3QgVU5JQ09ERV9DQU5PTklDQUxJWkFUSU9OX1NFVFMgPSB7c2V0Q291bnQ6ZH07XG4iLmZvcm1h
dChzZXRDb3VudD1sZW4oY2hhcmFjdGVyU2V0cykpKQotICAgICAgICBmaWxlLndyaXRlKCJjb25z
dCBVQ2hhcjMyKiBjb25zdCB1bmljb2RlQ2hhcmFjdGVyU2V0SW5mb1tVTklDT0RFX0NBTk9OSUNB
TElaQVRJT05fU0VUU10gPSB7XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJcbiIpCisgICAg
ICAgIGRvd3JpdGUoZmlsZSwgInN0YXRpYyBjb25zdCBzaXplX3QgVU5JQ09ERV9DQU5PTklDQUxJ
WkFUSU9OX1NFVFMgPSB7c2V0Q291bnQ6ZH07XG4iLmZvcm1hdChzZXRDb3VudD1sZW4oY2hhcmFj
dGVyU2V0cykpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJjb25zdCBVQ2hhcjMyKiBjb25zdCB1
bmljb2RlQ2hhcmFjdGVyU2V0SW5mb1tVTklDT0RFX0NBTk9OSUNBTElaQVRJT05fU0VUU10gPSB7
XG4iKQogCiAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjaGFyYWN0ZXJTZXRzKSk6Ci0gICAg
ICAgICAgICBmaWxlLndyaXRlKCIgICAgdW5pY29kZUNoYXJhY3RlclNldHtzZXROdW1iZXI6ZH0s
XG4iLmZvcm1hdChzZXROdW1iZXI9aSkpCisgICAgICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAg
dW5pY29kZUNoYXJhY3RlclNldHtzZXROdW1iZXI6ZH0sXG4iLmZvcm1hdChzZXROdW1iZXI9aSkp
CiAKLSAgICAgICAgZmlsZS53cml0ZSgifTtcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIlxuIikK
LSAgICAgICAgZmlsZS53cml0ZSgiY29uc3Qgc2l6ZV90IFVOSUNPREVfQ0FOT05JQ0FMSVpBVElP
Tl9SQU5HRVMgPSB7cmFuZ2VDb3VudDpkfTtcbiIuZm9ybWF0KHJhbmdlQ291bnQ9bGVuKHJhbmdl
SW5mbykpKQotICAgICAgICBmaWxlLndyaXRlKCJjb25zdCBDYW5vbmljYWxpemF0aW9uUmFuZ2Ug
dW5pY29kZVJhbmdlSW5mb1tVTklDT0RFX0NBTk9OSUNBTElaQVRJT05fUkFOR0VTXSA9IHtcbiIp
CisgICAgICAgIGRvd3JpdGUoZmlsZSwgIn07XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJc
biIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgImNvbnN0IHNpemVfdCBVTklDT0RFX0NBTk9OSUNB
TElaQVRJT05fUkFOR0VTID0ge3JhbmdlQ291bnQ6ZH07XG4iLmZvcm1hdChyYW5nZUNvdW50PWxl
bihyYW5nZUluZm8pKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAiY29uc3QgQ2Fub25pY2FsaXph
dGlvblJhbmdlIHVuaWNvZGVSYW5nZUluZm9bVU5JQ09ERV9DQU5PTklDQUxJWkFUSU9OX1JBTkdF
U10gPSB7XG4iKQogCiAgICAgICAgIGZvciBpbmZvIGluIHJhbmdlSW5mbzoKICAgICAgICAgICAg
IHR5cGVBbmRWYWx1ZSA9IGluZm9bInR5cGUiXS5zcGxpdCgiOiIpCi0gICAgICAgICAgICBmaWxl
LndyaXRlKCIgICAge3sgMHh7YmVnaW46MDR4fSwgMHh7ZW5kOjA0eH0sIDB4e3ZhbHVlOjA0eH0s
IHt0eXBlfSB9fSxcbiIuZm9ybWF0KGJlZ2luPWluZm9bImJlZ2luIl0sIGVuZD1pbmZvWyJlbmQi
XSwgdmFsdWU9aW50KHR5cGVBbmRWYWx1ZVsxXSksIHR5cGU9dHlwZUFuZFZhbHVlWzBdKSkKKyAg
ICAgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICB7eyAweHtiZWdpbjowNHh9LCAweHtlbmQ6MDR4
fSwgMHh7dmFsdWU6MDR4fSwge3R5cGV9IH19LFxuIi5mb3JtYXQoYmVnaW49aW5mb1siYmVnaW4i
XSwgZW5kPWluZm9bImVuZCJdLCB2YWx1ZT1pbnQodHlwZUFuZFZhbHVlWzFdKSwgdHlwZT10eXBl
QW5kVmFsdWVbMF0pKQogCi0gICAgICAgIGZpbGUud3JpdGUoIn07XG4iKQotICAgICAgICBmaWxl
LndyaXRlKCJcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIn07XG4iKQorICAgICAgICBkb3dy
aXRlKGZpbGUsICJcbiIpCiAKICAgICAgICAgCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpA
QCAtMTk0LDkgKzIwMyw5IEBACiAgICAgY2Fub25pY2FsaXplID0gQ2Fub25pY2FsaXplKCkKICAg
ICBjYW5vbmljYWxpemUucmVhZENhc2VGb2xkaW5nKGNhc2VGb2xkaW5nVHh0RmlsZSkKIAotICAg
IGNhbm9uaWNhbGl6ZUhGaWxlLndyaXRlKGhlYWRlcik7CisgICAgZG93cml0ZShjYW5vbmljYWxp
emVIRmlsZSwgaGVhZGVyKQogICAgIGNhbm9uaWNhbGl6ZS5jcmVhdGVUYWJsZXMoY2Fub25pY2Fs
aXplSEZpbGUpCi0gICAgY2Fub25pY2FsaXplSEZpbGUud3JpdGUoZm9vdGVyKTsKKyAgICBkb3dy
aXRlKGNhbm9uaWNhbGl6ZUhGaWxlLCBmb290ZXIpCiAKICAgICBjYXNlRm9sZGluZ1R4dEZpbGUu
Y2xvc2UoKQogICAgIGNhbm9uaWNhbGl6ZUhGaWxlLmNsb3NlKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTg1MCw3ICsxODUwLDcgQEAKICkKIAogc2V0KEJVSUxUSU5T
X0dFTkVSQVRPUl9TQ1JJUFRTCi0gICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVp
bHRpbnMucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS93a2J1aWx0aW5zLnB5
CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdG9yLnB5
CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfbW9kZWwucHkKICAg
ICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc190ZW1wbGF0ZXMucHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNTIzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE4LTA4LTIzICBNaWtlIEdvcnNl
ICA8bWdvcnNlQHN1c2UuY29tPgorCisgICAgICAgIEJ1aWxkIHRvb2xzIHNob3VsZCB3b3JrIHdo
ZW4gdGhlIC91c3IvYmluL3B5dGhvbiBpcyBweXRob24zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OiBidWlsdGlucy5weSAtPiB3a2J1aWx0aW5zLnB5CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jcmVhdGUtaHR0cC1oZWFkZXItbmFtZS10YWJsZToKKwogMjAx
OC0wOC0yMyAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTWVkaWFTdHJlYW1dIFN0b3JlIHZpZGVvIHByZXNldCBzaXplcyBpbiBhIG1hcApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jcmVhdGUtaHR0cC1oZWFkZXItbmFtZS10
YWJsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NyZWF0
ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlCShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NyZWF0ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiBodHRwX2hlYWRlcl9uYW1lX3RvX2lkID0geyB9
CiBodHRwX2hlYWRlcl9uYW1lcyA9IFtdCiAKLWZvciBsaW5lIGluIGlucHV0X2ZpbGUueHJlYWRs
aW5lcygpOgorZm9yIGxpbmUgaW4gaW5wdXRfZmlsZToKICAgICBodHRwX2hlYWRlcl9uYW1lID0g
bGluZS5zdHJpcCgpCiAgICAgaWYgbm90IGh0dHBfaGVhZGVyX25hbWUgb3IgaHR0cF9oZWFkZXJf
bmFtZVs6Ml0gPT0gJy8vJzoKICAgICAgICAgY29udGludWUKSW5kZXg6IFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0No
YW5nZUxvZwkocmV2aXNpb24gMjM1MjM3KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE4LTA4LTIzICBNaWtlIEdv
cnNlICA8bWdvcnNlQHN1c2UuY29tPgorCisgICAgICAgIEJ1aWxkIHRvb2xzIHNob3VsZCB3b3Jr
IHdoZW4gdGhlIC91c3IvYmluL3B5dGhvbiBpcyBweXRob24zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NzQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvY29weS11c2VyLWludGVyZmFj
ZS1yZXNvdXJjZXMucGw6CisKIDIwMTgtMDgtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBKU0NvbnRleHQgSW5zcGVjdG9yOiBTY3JpcHRzIG5vdCBz
aG93aW5nIHVwIGluIFJlc291cmNlcyB0YWIKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9T
Y3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2Vz
LnBsCShyZXZpc2lvbiAyMzUyMzcpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9j
b3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDYg
KzE3Niw4IEBACiBteSAkdGhyZWVqc0xpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmlsZTo6U3Bl
Yy0+Y2F0ZmlsZSgkdGhyZWVqc1BhdGgsICdMSUNFTlNFJykpOwogbWFrZV9wYXRoKCRwcm90b2Nv
bERpciwgJHRhcmdldFJlc291cmNlUGF0aCk7CiAKKyRweXRob24gPSAkRU5WeyJQWVRIT04ifSBp
ZiBkZWZpbmVkKCRFTlZ7IlBZVEhPTiJ9KTsKKwogIyBDb3B5IG92ZXIgZHluYW1pY2FsbHkgbG9h
ZGVkIGZpbGVzIGZyb20gb3RoZXIgZnJhbWV3b3JrcywgZXZlbiBpZiB3ZSBhcmVuJ3QgY29tYmlu
aW5nIHJlc291cmNlcy4KIGNvcHkoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkRU5WeydKQVZBU0NSSVBU
Q09SRV9QUklWQVRFX0hFQURFUlNfRElSJ30sICdJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMn
KSwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkcHJvdG9jb2xEaXIsICdJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMnKSkgb3IgZGllICJDb3B5IG9mIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyBm
YWlsZWQ6ICQhIjsKIApJbmRleDogU291cmNlL2NtYWtlL1dlYktpdENvbW1vbi5jbWFrZQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvY21ha2UvV2ViS2l0Q29tbW9uLmNtYWtlCShyZXZpc2lvbiAyMzUy
MzcpCisrKyBTb3VyY2UvY21ha2UvV2ViS2l0Q29tbW9uLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw5ICsyMSw2IEBACiAgICAgZmluZF9wYWNrYWdlKFBlcmxNb2R1bGVzIENPTVBPTkVOVFMg
SlNPTjo6UFAgUkVRVUlSRUQpCiAKICAgICBmaW5kX3BhY2thZ2UoUHl0aG9uSW50ZXJwIDIuNy4w
IFJFUVVJUkVEKQotICAgIGlmIChQWVRIT05fVkVSU0lPTl9NQUpPUiBHUkVBVEVSIDIpCi0gICAg
ICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlB5dGhvbiAyIGlzIHJlcXVpcmVkLCBidXQgUHl0aG9u
ICR7UFlUSE9OX1ZFUlNJT05fTUFKT1J9IHdhcyBmb3VuZC4iKQotICAgIGVuZGlmICgpCiAKICAg
ICAjIFdlIGNhbm5vdCBjaGVjayBmb3IgUlVCWV9GT1VORCBiZWNhdXNlIGl0IGlzIHNldCBvbmx5
IHdoZW4gdGhlIGZ1bGwgcGFja2FnZSBpcyBpbnN0YWxsZWQgYW5kCiAgICAgIyB0aGUgb25seSB0
aGluZyB3ZSBuZWVkIGlzIHRoZSBpbnRlcnByZXRlci4gVW5saWtlIFB5dGhvbiwgY21ha2UgZG9l
cyBub3QgcHJvdmlkZSBhIG1hY3JvCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348154</attachid>
            <date>2018-08-27 09:51:12 -0700</date>
            <delta_ts>2018-09-19 08:56:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156674-20180827115109.patch</filename>
            <type>text/plain</type>
            <size>285736</size>
            <attacher name="Mike Gorse">mgorse</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi43ZTViMmYyMWIzODFiYzA5
OGQ3MmI1N2QxNTE0MTQxMjNjODUxNzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMzcgQEAKKzIwMTgtMDgtMjcgIE1pa2UgR29yc2UgIDxtZ29yc2VAc3VzZS5jb20+CisK
KyAgICAgICAgQnVpbGQgdG9vbHMgc2hvdWxkIHdvcmsgd2hlbiB0aGUgL3Vzci9iaW4vcHl0aG9u
IGlzIHB5dGhvbjMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NjY3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6IGJ1aWx0aW5zIC0+IHdrYnVpbHRpbnMKKyAgICAgICAgKiBT
Y3JpcHRzL2Nzc21pbi5weToKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5z
LnB5OgorICAgICAgICAoZG9vcGVuKToKKyAgICAgICAgKGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9i
dWlsdGluc19maWxlcyk6CisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5vbmljYWxp
emVMYW5ndWFnZS5weToKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlWWFyclVuaWNvZGVQcm9w
ZXJ0eVRhYmxlcy5weToKKyAgICAgICAgKiBTY3JpcHRzL2hhc2hlci5weToKKyAgICAgICAgKHN0
cmluZ0hhc2gpOgorICAgICAgICAqIFNjcmlwdHMvanNtaW4ucHk6CisgICAgICAgIChKYXZhc2Ny
aXB0TWluaWZ5Lm1pbmlmeS53cml0ZSk6CisgICAgICAgIChKYXZhc2NyaXB0TWluaWZ5KToKKyAg
ICAgICAgKEphdmFzY3JpcHRNaW5pZnkubWluaWZ5KToKKyAgICAgICAgKiBTY3JpcHRzL21ha2Ut
anMtZmlsZS1hcnJheXMucHk6CisgICAgICAgIChjaHVuayk6CisgICAgICAgIChtYWluKToKKyAg
ICAgICAgKiBTY3JpcHRzL3drYnVpbHRpbnMvX19pbml0X18ucHk6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9fX2luaXRfXy5weS4KKyAgICAgICAg
KiBTY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnMucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlucy5weS4KKyAgICAgICAgKiBTY3Jp
cHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5OiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5LgorICAgICAgICAoQnVpbHRpbnNDb21iaW5lZEhl
YWRlckdlbmVyYXRvcik6CisgICAgICAgIChCdWlsdGluc0NvbWJpbmVkSGVhZGVyR2VuZXJhdG9y
Ll9faW5pdF9fKToKKyAgICAgICAgKEJ1aWx0aW5zQ29tYmluZWRIZWFkZXJHZW5lcmF0b3Iub3V0
cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJ1aWx0aW5zQ29tYmluZWRIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKEJ1aWx0aW5zQ29tYmluZWRIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMpOgorICAgICAgICAoRnVuY3Rpb25FeGVj
dXRhYmxlKToKKyAgICAgICAgKFZNKToKKyAgICAgICAgKENvbnN0cnVjdEFiaWxpdHkpOgorICAg
ICAgICAoZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KToKKyAgICAgICAgKGdlbmVyYXRlX2V4
dGVybnNfZm9yX29iamVjdCk6CisgICAgICAgIChnZW5lcmF0ZV9tYWNyb3NfZm9yX29iamVjdCk6
CisgICAgICAgIChnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9jb2RlX3RhYmxlX21hY3JvKToKKyAgICAg
ICAgKGdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfbmFtZV9tYWNybyk6CisgICAgICAgIChnZW5l
cmF0ZV9zZWN0aW9uX2Zvcl9nbG9iYWxfcHJpdmF0ZV9jb2RlX25hbWVfbWFjcm8pOgorICAgICAg
ICAqIFNjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1l
bnRhdGlvbi5weTogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1
aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5LgorICAg
ICAgICAoQnVpbHRpbnNDb21iaW5lZEltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAg
KEJ1aWx0aW5zQ29tYmluZWRJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAg
ICAgIChCdWlsdGluc0NvbWJpbmVkSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iub3V0cHV0X2ZpbGVu
YW1lKToKKyAgICAgICAgKEJ1aWx0aW5zQ29tYmluZWRJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5n
ZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQnVpbHRpbnNDb21iaW5lZEltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAq
IFNjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9o
ZWFkZXIucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkuCisgICAg
ICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IpOgorICAgICAgICAo
QnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAg
ICAgKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmVyYXRvci5vdXRwdXRfZmlsZW5h
bWUpOgorICAgICAgICAoQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yLmdl
bmVyYXRlX291dHB1dCk6CisgICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJH
ZW5lcmF0b3IuZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgIChC
dWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfc2VjdGlvbl9m
b3Jfb2JqZWN0KToKKyAgICAgICAgKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3QuSlNET01HbG9iYWxPYmplY3QpOgorICAg
ICAgICAoQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yLmFjY2Vzc29yX25h
bWUpOgorICAgICAgICAoQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yLm1l
bWJlcl9uYW1lKToKKyAgICAgICAgKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmVy
YXRvci5tZW1iZXJfdHlwZSk6CisgICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFk
ZXJHZW5lcmF0b3IuZ2VuZXJhdGVfbWV0aG9kcyk6CisgICAgICAgICogU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkuCisgICAg
ICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6Cisg
ICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
X2luaXRfXyk6CisgICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoQnVpbHRpbnNJbnRlcm5hbHNX
cmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAg
KEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQnVpbHRpbnNJbnRlcm5hbHNX
cmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0
KToKKyAgICAgICAgKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmFjY2Vzc29yX25hbWUpOgorICAgICAgICAoQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IubWVtYmVyX25hbWUpOgorICAgICAgICAoQnVpbHRpbnNJbnRl
cm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IubWVtYmVyX3R5cGUpOgorICAgICAg
ICAoQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJh
dGVfY29uc3RydWN0b3IpOgorICAgICAgICAoQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IucHJvcGVydHlfbWFjcm8pOgorICAgICAgICAoQnVpbHRpbnNJbnRl
cm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IucHJvcGVydHlfbWFjcm8uREVDTEFS
RV9HTE9CQUxfU1RBVElDKToKKyAgICAgICAgKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX3Zpc2l0X21ldGhvZCk6CisgICAgICAgIChCdWls
dGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaW5p
dGlhbGl6ZV9zdGF0aWNfZ2xvYmFscyk6CisgICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBw
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9pbml0aWFsaXplX21ldGhvZCk6Cisg
ICAgICAgICogU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hl
YWRlci5weTogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weS4KKyAgICAgICAgKEJ1aWx0
aW5zU2VwYXJhdGVIZWFkZXJHZW5lcmF0b3IpOgorICAgICAgICAoQnVpbHRpbnNTZXBhcmF0ZUhl
YWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChCdWlsdGluc1NlcGFyYXRlSGVhZGVy
R2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChCdWlsdGluc1NlcGFyYXRlSGVh
ZGVyR2VuZXJhdG9yLm1hY3JvX3ByZWZpeCk6CisgICAgICAgIChCdWlsdGluc1NlcGFyYXRlSGVh
ZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChCdWlsdGluc1NlcGFyYXRl
SGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAg
KEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChnZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKToKKyAgICAgICAgKGdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdCk6CisgICAg
ICAgIChnZW5lcmF0ZV9leHRlcm5zX2Zvcl9vYmplY3QpOgorICAgICAgICAoZ2VuZXJhdGVfbWFj
cm9zX2Zvcl9vYmplY3QpOgorICAgICAgICAoZ2VuZXJhdGVfZGVmaW5lc19mb3Jfb2JqZWN0KToK
KyAgICAgICAgKGdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfdGFibGVfbWFjcm8pOgorICAgICAg
ICAoZ2VuZXJhdGVfc2VjdGlvbl9mb3JfY29kZV9uYW1lX21hY3JvKToKKyAgICAgICAgKiBTY3Jp
cHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24u
cHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9i
dWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1lbnRhdGlvbi5weS4KKyAgICAgICAgKEJ1
aWx0aW5zU2VwYXJhdGVJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChCdWlsdGlu
c1NlcGFyYXRlSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoQnVp
bHRpbnNTZXBhcmF0ZUltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6Cisg
ICAgICAgIChCdWlsdGluc1NlcGFyYXRlSW1wbGVtZW50YXRpb25HZW5lcmF0b3IubWFjcm9fcHJl
Zml4KToKKyAgICAgICAgKEJ1aWx0aW5zU2VwYXJhdGVJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5n
ZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQnVpbHRpbnNTZXBhcmF0ZUltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAq
IFNjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weTog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5LgorICAgICAgICAoQnVpbHRpbnNXcmFwcGVy
SGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEJ1aWx0aW5zV3JhcHBlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgIChCdWlsdGluc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3Iub3V0
cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJ1aWx0aW5zV3JhcHBlckhlYWRlckdlbmVyYXRvci5n
ZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQnVpbHRpbnNXcmFwcGVySGVhZGVyR2VuZXJhdG9y
LmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQnVpbHRpbnNX
cmFwcGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdCk6CisgICAg
ICAgIChCdWlsdGluc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfc2VjdGlvbl9mb3Jf
b2JqZWN0LkpTQnVpbHRpbkZ1bmN0aW9ucyk6CisgICAgICAgIChCdWlsdGluc1dyYXBwZXJIZWFk
ZXJHZW5lcmF0b3IuYWNjZXNzb3JfbmFtZSk6CisgICAgICAgIChCdWlsdGluc1dyYXBwZXJIZWFk
ZXJHZW5lcmF0b3IubWVtYmVyX25hbWUpOgorICAgICAgICAoQnVpbHRpbnNXcmFwcGVySGVhZGVy
R2VuZXJhdG9yLm1lbWJlcl90eXBlKToKKyAgICAgICAgKEJ1aWx0aW5zV3JhcHBlckhlYWRlckdl
bmVyYXRvci5nZW5lcmF0ZV9jb25zdHJ1Y3Rvcik6CisgICAgICAgIChCdWlsdGluc1dyYXBwZXJI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfYWNjZXNzb3JzKToKKyAgICAgICAgKEJ1aWx0aW5zV3Jh
cHBlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9tZW1iZXJzKToKKyAgICAgICAgKiBTY3JpcHRz
L3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weTog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkuCisgICAgICAgIChCdWlsdGlu
c1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChCdWlsdGluc1dyYXBw
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChCdWlsdGluc1dy
YXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAo
QnVpbHRpbnNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToK
KyAgICAgICAgKEJ1aWx0aW5zV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRl
X3NlY3Rpb25fZm9yX29iamVjdCk6CisgICAgICAgICogU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRvci5weTogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRvci5weS4KKyAgICAgICAgKFdLX2xjZmlyc3Qp
OgorICAgICAgICAoV0tfdWNmaXJzdCk6CisgICAgICAgIChCdWlsdGluc0dlbmVyYXRvcik6Cisg
ICAgICAgIChCdWlsdGluc0dlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChCdWlsdGluc0dl
bmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCdWlsdGluc0dlbmVyYXRvci5nZW5lcmF0ZV9vdXRw
dXQpOgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAg
ICAgKEJ1aWx0aW5zR2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoQnVpbHRp
bnNHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToKKyAgICAgICAgKEJ1
aWx0aW5zR2VuZXJhdG9yLmdlbmVyYXRlX3ByaW1hcnlfaGVhZGVyX2luY2x1ZGVzKToKKyAgICAg
ICAgKEJ1aWx0aW5zR2VuZXJhdG9yLmdlbmVyYXRlX2VtYmVkZGVkX2NvZGVfc3RyaW5nX3NlY3Rp
b25fZm9yX2Z1bmN0aW9uKToKKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9n
dWFyZCk6CisgICAgICAgIChCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvck9iamVjdCk6
CisgICAgICAgIChCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvck9iamVjdC50b0NhbWVs
KToKKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yRnVuY3Rpb24pOgor
ICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JGdW5jdGlvbi50b0NhbWVs
KToKKyAgICAgICAgKiBTY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHk6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19t
b2RlbC5weS4KKyAgICAgICAgKFBhcnNlRXhjZXB0aW9uKToKKyAgICAgICAgKEZyYW1ld29yayk6
CisgICAgICAgIChGcmFtZXdvcmsuX19pbml0X18pOgorICAgICAgICAoRnJhbWV3b3JrLnNldHRp
bmcpOgorICAgICAgICAoRnJhbWV3b3JrLmZyb21TdHJpbmcpOgorICAgICAgICAoRnJhbWV3b3Jr
cyk6CisgICAgICAgIChCdWlsdGluT2JqZWN0KToKKyAgICAgICAgKEJ1aWx0aW5PYmplY3QuX19p
bml0X18pOgorICAgICAgICAoQnVpbHRpbkZ1bmN0aW9uKToKKyAgICAgICAgKEJ1aWx0aW5GdW5j
dGlvbi5fX2luaXRfXyk6CisgICAgICAgIChCdWlsdGluRnVuY3Rpb24uZnJvbVN0cmluZyk6Cisg
ICAgICAgIChCdWlsdGluRnVuY3Rpb24uX19zdHJfXyk6CisgICAgICAgIChCdWlsdGluRnVuY3Rp
b24uX19sdF9fKToKKyAgICAgICAgKEJ1aWx0aW5zQ29sbGVjdGlvbik6CisgICAgICAgIChCdWls
dGluc0NvbGxlY3Rpb24uX19pbml0X18pOgorICAgICAgICAoQnVpbHRpbnNDb2xsZWN0aW9uLnBh
cnNlX2J1aWx0aW5zX2ZpbGUpOgorICAgICAgICAoQnVpbHRpbnNDb2xsZWN0aW9uLmNvcHlyaWdo
dHMpOgorICAgICAgICAoQnVpbHRpbnNDb2xsZWN0aW9uLmFsbF9mdW5jdGlvbnMpOgorICAgICAg
ICAoQnVpbHRpbnNDb2xsZWN0aW9uLmFsbF9pbnRlcm5hbF9mdW5jdGlvbnMpOgorICAgICAgICAo
QnVpbHRpbnNDb2xsZWN0aW9uLl9wYXJzZV9jb3B5cmlnaHRfbGluZXMpOgorICAgICAgICAoQnVp
bHRpbnNDb2xsZWN0aW9uLl9wYXJzZV9hbm5vdGF0aW9ucyk6CisgICAgICAgIChCdWlsdGluc0Nv
bGxlY3Rpb24uX3BhcnNlX2Z1bmN0aW9ucyk6CisgICAgICAgICogU2NyaXB0cy93a2J1aWx0aW5z
L2J1aWx0aW5zX3RlbXBsYXRlcy5weTogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weS4KKyAgICAgICAgKEJ1aWx0
aW5zR2VuZXJhdG9yVGVtcGxhdGVzKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvdWRpczg2L3Vk
X29wY29kZS5weToKKyAgICAgICAgKFVkT3Bjb2RlVGFibGVzLnBwcmludC5wcmludFdhbGspOgor
ICAgICAgICAqIGdlbmVyYXRlLWJ5dGVjb2RlLWZpbGVzOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVf
b3V0cHV0KToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAg
ICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9v
dXRwdXQpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAg
KENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9t
YXBwaW5nX2FuZF9jb252ZXJzaW9uX21ldGhvZHMpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBl
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKToKKyAg
ICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVf
YnVpbGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9u
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tl
bmRfY29tbWFuZHMucHk6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5zaG91
bGRfZ2VuZXJhdGVfZG9tYWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9y
LmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9y
LmdlbmVyYXRlX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpD
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0JhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5n
ZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0
aW9uX2hlYWRlci5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgor
ICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9ldmVudCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2hlYWRlci5weToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuZ2VuZXJh
dGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3R5cGVf
aW50ZXJmYWNlKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfaW50ZXJuYWxfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0ludGVybmFsSGVhZGVyR2Vu
ZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5Ogor
ICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVh
ZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVt
ZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ1Byb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0
aW9uKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weToKKyAgICAgICAgKEdlbmVyYXRv
ci5ub25fc3VwcGxlbWVudGFsX2RvbWFpbnMpOgorICAgICAgICAoR2VuZXJhdG9yLm9wZW5fZmll
bGRzKToKKyAgICAgICAgKEdlbmVyYXRvci5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBl
X2Fzc2VydGlvbnMpOgorICAgICAgICAoR2VuZXJhdG9yLl90cmF2ZXJzZV9hbmRfYXNzaWduX2Vu
dW1fdmFsdWVzKToKKyAgICAgICAgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3Zh
bHVlKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weToKKyAg
ICAgICAgKGZpbmRfZHVwbGljYXRlcyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvci5weToKKyAgICAgICAgKiB3YXNtL2dlbmVyYXRlV2FzbS5weToK
KyAgICAgICAgKG9wY29kZUl0ZXJhdG9yKToKKyAgICAgICAgKiB5YXJyL2dlbmVyYXRlWWFyckNh
bm9uaWNhbGl6ZVVuaWNvZGU6CisKIDIwMTgtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2Vz
dXp1a2lAc2xvd3N0YXJ0Lm9yZz4KIAogICAgICAgICBbSlNDXSBBcnJheS5wcm90b3R5cGUucmV2
ZXJzZSBtb2RpZmllcyBKU0ltbXV0YWJsZUJ1dHRlcmZseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM3ODFhNTM1
NTI2YmVhOTVkMzhiMTg1ZjQ1OWIzZjFkMGE4MTJiNTkuLmI1YmRlYjNhNzJhYjgxMDc2YmRhYzFj
M2NmMDUzZTFjY2FkZDhiMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0wOC0y
NyAgTWlrZSBHb3JzZSAgPG1nb3JzZUBzdXNlLmNvbT4KKworICAgICAgICBCdWlsZCB0b29scyBz
aG91bGQgd29yayB3aGVuIHRoZSAvdXNyL2Jpbi9weXRob24gaXMgcHl0aG9uMworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2Njc0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BT
ISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogYnVpbHRpbnMgLT4gd2tidWlsdGlucwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3JlYXRlLWh0dHAtaGVhZGVyLW5hbWUtdGFibGU6
CisKIDIwMTgtMDgtMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBGaXggSU9TTUFDIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRl
eCA0MzRkMDNlM2QwNTliNzliODY2NTYzNTY2YzlkNjk1YzI0NGE3YTJkLi5kOTQ1MzQ5M2U3YTIx
MTZlZThkMTYzMGIyZDc3MmMzNDFhMjMyMGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxOC0wOC0yNyAgTWlrZSBHb3JzZSAgPG1nb3JzZUBzdXNlLmNvbT4K
KworICAgICAgICBCdWlsZCB0b29scyBzaG91bGQgd29yayB3aGVuIHRoZSAvdXNyL2Jpbi9weXRo
b24gaXMgcHl0aG9uMworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU2Njc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsOiBHZXQgcGF0
aCBvZiBweXRob24KKyAgICAgICAgZnJvbSAkUFlUSE9OIGlmIHNldC4KKwogMjAxOC0wOC0yMyAg
RGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogQ29sb3IgcGlja2VyOiBjYW4ndCBlbnRlciBkZWNpbWFsIG51bWJlcnMgZm9yIG9wYWNpdHkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBmYjFkMGNjNmIyNDZhN2E2YTVk
N2VjMDkyMTkyNzMyN2UxOTU5OTRiLi40MzgyYjI4NWU5ZWE3NzA1ZTU0M2UxN2QxNTY5ZDU5MmJm
MzY5NjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMzYsNyArMTM2
LDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NDUklQVFNfU09VUkNFU19ESVIgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS9TY3JpcHRzIikKIHNldChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX1NPVVJDRVNf
UEFUSFMKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfU09VUkNFU19ESVJ9LyoucGwKICAg
ICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfU09VUkNFU19ESVJ9LyoucHkKLSAgICAke0phdmFT
Y3JpcHRDb3JlX1NDUklQVFNfU09VUkNFU19ESVJ9L2J1aWx0aW5zL2J1aWx0aW5zKi5weQorICAg
ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19TT1VSQ0VTX0RJUn0vd2tidWlsdGlucy9idWlsdGlu
cyoucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfU09VUkNFU19ESVJ9L3drYnVpbHRp
bnMvd2tidWlsdGlucy5weQogKQogCiAjIEZvcmNlIEphdmFTY3JpcHRDb3JlIHRvIHJ1biBzY3Jp
cHRzIGZyb20gdGhlIHNhbWUgc3RhZ2luZyBwYXRoIGFzIFdlYkNvcmUuCkBAIC0xMDg2LDcgKzEw
ODcsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAjIEpTQ0J1aWx0aW5zCiAKIHNldChCVUlMVElO
U19HRU5FUkFUT1JfU0NSSVBUUwotICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1
aWx0aW5zLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vd2tidWlsdGlucy5w
eQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRvci5w
eQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX21vZGVsLnB5CiAg
ICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfdGVtcGxhdGVzLnB5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9fX2luaXRf
Xy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL19faW5pdF9fLnB5
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGZjYmE5ODFkOGY4ZGEwNzgxMzU4Y2Zl
NjRmYTFjNzgwNzRhMTYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL19faW5pdF9fLnB5
CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIFJlcXVpcmVkIGZvciBQeXRob24gdG8g
c2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKLQotZnJvbSBidWlsdGlucyBp
bXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRp
bnMvYnVpbHRpbnMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9i
dWlsdGlucy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhZmYyYjFjZmY0ZjI1
MzUwYjc2NThkZGE0OWMwYTUxMjNlOWMxNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9i
dWlsdGlucy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMgVGhpcyBmaWxlIGlz
IHVzZWQgdG8gc2ltdWxhdGUgdGhlIGJ1aWx0aW5zLyBkaXJlY3Rvcnkgd2hlbiBnZW5lcmF0ZS1q
cy1idWlsdGlucy5weQotIyBpcyBydW4gZnJvbSBKYXZhU2NyaXB0Q29yZSBmcmFtZXdvcmsncyBw
cml2YXRlIGhlYWRlcnMgZGlyZWN0b3J5LCB3aGljaCBpcyBmbGF0dGVuZWQuCi0KLWZyb20gYnVp
bHRpbnNfbW9kZWwgaW1wb3J0ICoKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCAqCi0K
LWZyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCAqCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRl
X2NvbWJpbmVkX2hlYWRlciBpbXBvcnQgKgotZnJvbSBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5l
ZF9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0
ZV9oZWFkZXIgaW1wb3J0ICoKLWZyb20gYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKLWZyb20gYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIg
aW1wb3J0ICoKLWZyb20gYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbiBp
bXBvcnQgKgotZnJvbSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIg
aW1wb3J0ICoKLWZyb20gYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJp
bmVkX2hlYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2RlMzU3Y2Q0Mzlj
ZWFmNDQ2NDI4ZTY4MTg4NDc4MDczYzAzYzQ5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlu
cy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkKKysrIC9kZXYvbnVsbApAQCAt
MSwxNzEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChj
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcK
LWltcG9ydCByZQotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0K
LWZyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvcgotZnJvbSBi
dWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRl
bXBsYXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBC
dWlsdGluc0NvbWJpbmVkSGVhZGVyR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgotICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCBtb2RlbCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiAiJXNCdWlsdGlucy5oIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygnbmFtZXNwYWNlJykKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAg
IGFyZ3MgPSB7Ci0gICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKLSAgICAgICAgICAgICdtYWNyb1ByZWZpeCc6IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbWFjcm9fcHJlZml4JyksCi0gICAgICAgIH0KLQot
ICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRl
cy5Eb05vdEVkaXRXYXJuaW5nKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkhlYWRlckluY2x1ZGVHdWFyZCkuc3Vic3RpdHV0ZShh
cmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfZm9yd2FyZF9kZWNs
YXJhdGlvbnMoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5O
YW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2Vs
Zi5tb2RlbCgpLm9iamVjdHM6Ci0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qob2JqZWN0KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3JfY29kZV90YWJsZV9tYWNybygpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9jb2RlX25hbWVfbWFjcm8o
KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3JfZ2xv
YmFsX3ByaXZhdGVfY29kZV9uYW1lX21hY3JvKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuQ29tYmluZWRIZWFkZXJTdGF0aWNNYWNyb3MpLnN1YnN0aXR1dGUo
YXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNw
YWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQotCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9p
bihzZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxm
KToKLSAgICAgICAgcmV0dXJuICIiIm5hbWVzcGFjZSBKU0MgewotY2xhc3MgRnVuY3Rpb25FeGVj
dXRhYmxlOwotY2xhc3MgVk07Ci0KLWVudW0gY2xhc3MgQ29uc3RydWN0QWJpbGl0eSA6IHVuc2ln
bmVkOwotfSIiIgotCi0gICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdChzZWxmLCBv
YmplY3QpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMg
Ki8nICUgb2JqZWN0Lm9iamVjdF9uYW1lKQotICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5nZW5l
cmF0ZV9leHRlcm5zX2Zvcl9vYmplY3Qob2JqZWN0KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIi
KQotICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5nZW5lcmF0ZV9tYWNyb3NfZm9yX29iamVjdChv
YmplY3QpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIGdlbmVy
YXRlX2V4dGVybnNfZm9yX29iamVjdChzZWxmLCBvYmplY3QpOgotICAgICAgICBsaW5lcyA9IFtd
Ci0KLSAgICAgICAgZm9yIGZ1bmN0aW9uIGluIG9iamVjdC5mdW5jdGlvbnM6Ci0gICAgICAgICAg
ICBmdW5jdGlvbl9hcmdzID0gewotICAgICAgICAgICAgICAgICdjb2RlTmFtZSc6IEJ1aWx0aW5z
R2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yRnVuY3Rpb24oZnVuY3Rpb24pICsgJ0NvZGUnLAotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiZXh0ZXJuIGNvbnN0IGNo
YXIqIHNfJShjb2RlTmFtZSlzOwotZXh0ZXJuIGNvbnN0IGludCBzXyUoY29kZU5hbWUpc0xlbmd0
aDsKLWV4dGVybiBjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc18lKGNvZGVOYW1lKXNDb25z
dHJ1Y3RBYmlsaXR5OyIiIiAlIGZ1bmN0aW9uX2FyZ3MpCi0KLSAgICAgICAgcmV0dXJuIGxpbmVz
Ci0KLSAgICBkZWYgZ2VuZXJhdGVfbWFjcm9zX2Zvcl9vYmplY3Qoc2VsZiwgb2JqZWN0KToKLSAg
ICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICdtYWNyb1ByZWZpeCc6IHNlbGYubW9kZWwoKS5m
cmFtZXdvcmsuc2V0dGluZygnbWFjcm9fcHJlZml4JyksCi0gICAgICAgICAgICAnb2JqZWN0TWFj
cm8nOiBvYmplY3Qub2JqZWN0X25hbWUucmVwbGFjZSgnLicsICcnKS51cHBlcigpLAotICAgICAg
ICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoIiNkZWZpbmUg
JShtYWNyb1ByZWZpeClzX0ZPUkVBQ0hfJShvYmplY3RNYWNybylzX0JVSUxUSU5fREFUQShtYWNy
bykgXFwiICUgYXJncykKLSAgICAgICAgZm9yIGZ1bmN0aW9uIGluIG9iamVjdC5mdW5jdGlvbnM6
Ci0gICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0gewotICAgICAgICAgICAgICAgICdmdW5jTmFt
ZSc6IGZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUsCi0gICAgICAgICAgICAgICAgJ21hbmdsZWROYW1l
JzogQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihmdW5jdGlvbiksCi0g
ICAgICAgICAgICAgICAgJ3BhcmFtQ291bnQnOiBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycyksCi0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIG1hY3JvKCUoZnVu
Y05hbWUpcywgJShtYW5nbGVkTmFtZSlzLCAlKHBhcmFtQ291bnQpZCkgXFwiICUgZnVuY3Rpb25f
YXJncykKLSAgICAgICAgcmV0dXJuIGxpbmVzCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9m
b3JfY29kZV90YWJsZV9tYWNybyhzZWxmKToKLSAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAg
ICdtYWNyb1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbWFjcm9fcHJl
Zml4JyksCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNfRk9SRUFDSF9CVUlMVElOX0NPREUobWFjcm8p
IFxcIiAlIGFyZ3MpCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBzZWxmLm1vZGVsKCkuYWxsX2Z1
bmN0aW9ucygpOgotICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsKLSAgICAgICAgICAgICAg
ICAnZnVuY05hbWUnOiBmdW5jdGlvbi5mdW5jdGlvbl9uYW1lLAotICAgICAgICAgICAgICAgICdv
dmVycmlkZGVuTmFtZSc6IGZ1bmN0aW9uLm92ZXJyaWRkZW5fbmFtZSwKLSAgICAgICAgICAgICAg
ICAnY29kZU5hbWUnOiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1
bmN0aW9uKSArICdDb2RlJywKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCIgICAgbWFjcm8oJShjb2RlTmFtZSlzLCAlKGZ1bmNOYW1lKXMsICUob3ZlcnJpZGRlbk5h
bWUpcywgc18lKGNvZGVOYW1lKXNMZW5ndGgpIFxcIiAlIGZ1bmN0aW9uX2FyZ3MpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jf
Y29kZV9uYW1lX21hY3JvKHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ21h
Y3JvUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdtYWNyb19wcmVmaXgn
KSwKLSAgICAgICAgfQotCi0gICAgICAgIGludGVybmFsX2Z1bmN0aW9uX25hbWVzID0gW2Z1bmN0
aW9uLmZ1bmN0aW9uX25hbWUgZm9yIGZ1bmN0aW9uIGluIHNlbGYubW9kZWwoKS5hbGxfaW50ZXJu
YWxfZnVuY3Rpb25zKCldCi0gICAgICAgIGlmIGxlbihpbnRlcm5hbF9mdW5jdGlvbl9uYW1lcykg
IT0gbGVuKHNldChpbnRlcm5hbF9mdW5jdGlvbl9uYW1lcykpOgotICAgICAgICAgICAgbG9nLmVy
cm9yKCJUaGVyZSBhcmUgc2V2ZXJhbCBpbnRlcm5hbCBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBu
YW1lLiBQcml2YXRlIGlkZW50aWZpZXJzIG1heSBjbGFzaC4iKQotCi0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgbGluZXMuYXBwZW5kKCIjZGVmaW5lICUobWFjcm9QcmVmaXgpc19GT1JFQUNI
X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShtYWNybykgXFwiICUgYXJncykKLSAgICAgICAgdW5pcXVl
X25hbWVzID0gbGlzdChzZXQoW2Z1bmN0aW9uLmZ1bmN0aW9uX25hbWUgZm9yIGZ1bmN0aW9uIGlu
IHNlbGYubW9kZWwoKS5hbGxfZnVuY3Rpb25zKCldKSkKLSAgICAgICAgdW5pcXVlX25hbWVzLnNv
cnQoKQotICAgICAgICBmb3IgZnVuY3Rpb25fbmFtZSBpbiB1bmlxdWVfbmFtZXM6Ci0gICAgICAg
ICAgICBmdW5jdGlvbl9hcmdzID0gewotICAgICAgICAgICAgICAgICdmdW5jTmFtZSc6IGZ1bmN0
aW9uX25hbWUsCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAg
IG1hY3JvKCUoZnVuY05hbWUpcykgXFwiICUgZnVuY3Rpb25fYXJncykKLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9nbG9iYWxf
cHJpdmF0ZV9jb2RlX25hbWVfbWFjcm8oc2VsZik6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAg
ICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3Jv
X3ByZWZpeCcpLAotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5l
cy5hcHBlbmQoIiNkZWZpbmUgJShtYWNyb1ByZWZpeClzX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElP
Tl9QUklWQVRFX0dMT0JBTF9OQU1FKG1hY3JvKSBcXCIgJSBhcmdzKQotICAgICAgICBmdW5jdGlv
bnMgPSBmaWx0ZXIobGFtYmRhIGZ1bmN0aW9uOiBmdW5jdGlvbi5pc19nbG9iYWxfcHJpdmF0ZSwg
c2VsZi5tb2RlbCgpLmFsbF9mdW5jdGlvbnMoKSkKLSAgICAgICAgZnVuY3Rpb25zLnNvcnQoa2V5
PWxhbWJkYSB4OiB4LmZ1bmN0aW9uX25hbWUpCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBmdW5j
dGlvbnM6Ci0gICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0gewotICAgICAgICAgICAgICAgICdm
dW5jTmFtZSc6IGZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUsCi0gICAgICAgICAgICAgICAgJ2NvZGVO
YW1lJzogQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihmdW5jdGlvbiks
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIG1hY3JvKCUo
ZnVuY05hbWUpcywgJShjb2RlTmFtZSlzKSBcXCIgJSBmdW5jdGlvbl9hcmdzKQotCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRh
dGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3ODc0ZGNhZDk0YjRhNmEyZmM3YzQxOGYwNGU2OWQxMzk1YzFlZGIwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxl
bWVudGF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLSMhL3Vzci9iaW4v
ZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgc3RyaW5n
Ci1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBidWlsdGluc19nZW5lcmF0b3Ig
aW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yCi1mcm9tIGJ1aWx0aW5zX21vZGVsIGltcG9ydCBGcmFt
ZXdvcmssIEZyYW1ld29ya3MKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGlu
c0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgQnVpbHRpbnNDb21iaW5lZEltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwp
OgotICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCkKLQotICAg
IGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXNCdWlsdGlucy5j
cHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKQotCi0gICAg
ZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAg
ICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScp
LAotICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCdtYWNyb19wcmVmaXgnKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10K
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1
YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3By
aW1hcnlfaGVhZGVyX2luY2x1ZGVzKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdl
bmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCi0g
ICAgICAgIGZvciBmdW5jdGlvbiBpbiBzZWxmLm1vZGVsKCkuYWxsX2Z1bmN0aW9ucygpOgotICAg
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfZW1iZWRkZWRfY29kZV9zdHJp
bmdfc2VjdGlvbl9mb3JfZnVuY3Rpb24oZnVuY3Rpb24pKQotICAgICAgICBpZiBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuSmF2YVNjcmlwdENvcmU6Ci0gICAgICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNvbWJpbmVkSlNDSW1wbGVtZW50YXRp
b25TdGF0aWNNYWNyb3MpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIGVsaWYgc2VsZi5tb2Rl
bCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYkNvcmU6Ci0gICAgICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNvbWJpbmVkV2ViQ29yZUltcGxlbWVudGF0aW9u
U3RhdGljTWFjcm9zKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkKLQot
ICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVf
c2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKLSAgICAgICAgaGVhZGVyX2luY2x1ZGVz
ID0gWwotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiXSwKLSAgICAgICAgICAgICAgICAo
IkphdmFTY3JpcHRDb3JlIiwgImJ1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5oIiksCi0gICAg
ICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAot
ICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAiaGVhcC9IZWFwSW5saW5lcy5oIiks
Ci0gICAgICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29y
ZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlw
dENvcmUiLCAicnVudGltZS9KU0NlbGxJbmxpbmVzLmgiKSwKLSAgICAgICAgICAgICksCi0gICAg
ICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIs
ICJydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAg
ICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1
bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFT
Y3JpcHRDb3JlIiwgInJ1bnRpbWUvVk0uaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFT
Y3JpcHRDb3JlIiwgInJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaCIpLAotICAgICAgICAgICAg
KSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKLSAgICAgICAg
ICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSW50cmluc2ljLmgiKSwKLSAgICAg
ICAgICAgICksCi0gICAgICAgIF0KLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2Vu
ZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0
ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIu
cHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDBiOTEzZGNmY2UwMzYxMGU0MDk2MDc1
YWE0NGEzZWUyYjQyMDM5Y2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEs
MTEzICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0j
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCi0KLWZyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVy
YXRvciwgV0tfbGNmaXJzdCwgV0tfdWNmaXJzdAotZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1w
b3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotCi1sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBw
ZXJIZWFkZXJHZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBtb2RlbCk6Ci0gICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1v
ZGVsKQotICAgICAgICBzZWxmLmludGVybmFscyA9IGZpbHRlcihsYW1iZGEgb2JqZWN0OiAnaW50
ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0aW9ucywgbW9kZWwub2JqZWN0cykKLQotICAgIGRlZiBv
dXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXNKU0J1aWx0aW5JbnRlcm5h
bHMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpCi0KLSAg
ICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAg
ICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNl
JyksCi0gICAgICAgIH0KLQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKFRlbXBsYXRlcy5Eb05vdEVkaXRXYXJuaW5nKS5zdWJzdGl0dXRlKGFyZ3MpKQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkhlYWRlckluY2x1ZGVH
dWFyZCkuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpKQotCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFyZ3MpKQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qo
KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VC
b3R0b20pLnN1YnN0aXR1dGUoYXJncykpCi0KLSAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNl
Y3Rpb25zKQotCi0gICAgZGVmIGdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2Vs
Zik6Ci0gICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIldlYkNvcmUi
XSwgKCJKYXZhU2NyaXB0Q29yZSIsICJoZWFwL1dlYWtJbmxpbmVzLmgiKSksCi0gICAgICAgICAg
ICAoWyJXZWJDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9WTS5oIikpCi0gICAg
ICAgIF0KLSAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKLSAgICAgICAgICAg
IGhlYWRlcl9pbmNsdWRlcy5hcHBlbmQoKFsiV2ViQ29yZSJdLCAoIldlYkNvcmUiLCBvYmplY3Qu
b2JqZWN0X25hbWUgKyAiQnVpbHRpbnMuaCIpKSkKLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCi0K
LSAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgotICAgICAgICBsaW5l
cyA9IFsiY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7IiwKLSAgICAgICAgICAgICAgICAgIiIsCi0g
ICAgICAgICAgICAgICAgICJjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7IiwKLSAg
ICAgICAgICAgICAgICAgInB1YmxpYzoiXQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIGV4
cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsiKQotICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9tZXRob2RzKCkpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX2FjY2Vzc29ycygpKQotICAgICAgICBsaW5lcy5hcHBlbmQoInByaXZh
dGU6IikKLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWVtYmVycygpKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoIn07IikKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
LQotICAgIGRlZiBhY2Nlc3Nvcl9uYW1lKHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIHJldHVybiBX
S19sY2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkKLQotICAgIGRlZiBtZW1iZXJfbmFtZShzZWxm
LCBvYmplY3QpOgotICAgICAgICByZXR1cm4gIm1fIiArIHNlbGYuYWNjZXNzb3JfbmFtZShvYmpl
Y3QpCi0KLSAgICBkZWYgbWVtYmVyX3R5cGUoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgcmV0dXJu
IFdLX3VjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1lKSArICJCdWlsdGluRnVuY3Rpb25zIgotCi0g
ICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6Ci0gICAgICAgIHJldHVybiAiIiIKLSAgICB2
b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUoSlNET01H
bG9iYWxPYmplY3QmKTsKLSIiIgotCi0gICAgZGVmIGdlbmVyYXRlX2FjY2Vzc29ycyhzZWxmKToK
LSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxz
OgotICAgICAgICAgICAgYWNjZXNzb3IgPSAiICAgICVzJiAlcygpIHsgcmV0dXJuICVzOyB9IiAl
IChzZWxmLm1lbWJlcl90eXBlKG9iamVjdCksIHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpLCBz
ZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRp
bnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRp
dGlvbmFsJyksIGFjY2Vzc29yKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIiKQotICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIGdlbmVyYXRlX21lbWJlcnMoc2VsZik6
Ci0gICAgICAgIGxpbmVzID0gWyIgICAgSlNDOjpWTSYgbV92bTsiXQotICAgICAgICBmb3Igb2Jq
ZWN0IGluIHNlbGYuaW50ZXJuYWxzOgotICAgICAgICAgICAgbWVtYmVyID0gIiAgICAlcyAlczsi
ICUgKHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSwgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpKQot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFy
ZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBtZW1iZXIpKQotICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlu
cy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTJiNGIyMDI1ZjIyZjYwYzcwMmI3MDI2M2Fj
MjQyOTA0NWRmMjgyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5l
cmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgL2Rldi9udWxsCkBA
IC0xLDE1NiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChj
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWZyb20gc3RyaW5nIGlt
cG9ydCBUZW1wbGF0ZQotCi1mcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVpbHRpbnNH
ZW5lcmF0b3IsIFdLX2xjZmlyc3QsIFdLX3VjZmlyc3QKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVz
IGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNX
cmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6Ci0gICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5p
dF9fKHNlbGYsIG1vZGVsKQotICAgICAgICBzZWxmLmludGVybmFscyA9IGZpbHRlcihsYW1iZGEg
b2JqZWN0OiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0aW9ucywgbW9kZWwub2JqZWN0cykK
LQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXNKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFt
ZXNwYWNlJykKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGFyZ3Mg
PSB7Ci0gICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCduYW1lc3BhY2UnKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0
aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3ByaW1h
cnlfaGVhZGVyX2luY2x1ZGVzKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKLQotICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRvcCkuc3Vic3RpdHV0ZShhcmdzKSkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KCkp
Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90
dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQotCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0
aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYp
OgotICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCi0gICAgICAgICAgICAoWyJXZWJDb3JlIl0s
Ci0gICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgIkpTRE9NR2xvYmFsT2JqZWN0LmgiKSwKLSAg
ICAgICAgICAgICksCi0gICAgICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAg
KCJXZWJDb3JlIiwgIldlYkNvcmVKU0NsaWVudERhdGEuaCIpLAotICAgICAgICAgICAgKSwKLSAg
ICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3Jl
IiwgImhlYXAvSGVhcElubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChb
IldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImhlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoWyJXZWJD
b3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL0pTQ0pT
VmFsdWVJbmxpbmVzLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoWyJXZWJDb3Jl
Il0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgXQotICAgICAgICByZXR1cm4g
J1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNs
dWRlcykpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgotICAg
ICAgICBsaW5lcyA9IFtdCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfY29u
c3RydWN0b3IoKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfdmlzaXRfbWV0
aG9kKCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2luaXRpYWxpemVfbWV0
aG9kKCkpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgYWNjZXNz
b3JfbmFtZShzZWxmLCBvYmplY3QpOgotICAgICAgICByZXR1cm4gV0tfbGNmaXJzdChvYmplY3Qu
b2JqZWN0X25hbWUpCi0KLSAgICBkZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0KToKLSAgICAg
ICAgcmV0dXJuICJtXyIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KQotCi0gICAgZGVmIG1l
bWJlcl90eXBlKHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIHJldHVybiBXS191Y2ZpcnN0KG9iamVj
dC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbkZ1bmN0aW9ucyIKLQotICAgIGRlZiBnZW5lcmF0ZV9j
b25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgZ3VhcmRzID0gc2V0KFtvYmplY3QuYW5ub3RhdGlv
bnMuZ2V0KCdjb25kaXRpb25hbCcpIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHMgaWYgJ2Nv
bmRpdGlvbmFsJyBpbiBvYmplY3QuYW5ub3RhdGlvbnNdKQotICAgICAgICBsaW5lcyA9IFsiSlNC
dWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6
Vk0mIHZtKSIsCi0gICAgICAgICAgICAgICAgICIgICAgOiBtX3ZtKHZtKSJdCi0gICAgICAgIGZv
ciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6Ci0gICAgICAgICAgICBpbml0aWFsaXplciA9ICIg
ICAgLCAlcyhtX3ZtKSIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkKLSAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90
YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgaW5pdGlhbGl6ZXIpKQotICAgICAgICBsaW5lcy5h
cHBlbmQoInsiKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odm0pOyIp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgifVxuIikKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKLQotICAgIGRlZiBwcm9wZXJ0eV9tYWNybyhzZWxmLCBvYmplY3QpOgotICAgICAgICBs
aW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSBERUNMQVJFX0dMT0JBTF9T
VEFUSUMobmFtZSkgXFwiKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBKU0RPTUdsb2JhbE9i
amVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcXCIpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiICAg
ICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS4lc0J1aWx0aW5zKCkubmFtZSMjUHJp
dmF0ZU5hbWUoKSwgJXMoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
LCIgJSAoc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCksIHNlbGYuYWNjZXNzb3JfbmFtZShvYmpl
Y3QpKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgV0VCQ09SRV9GT1JFQUNIXyVzX0JVSUxU
SU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpIiAlIG9iamVjdC5vYmplY3Rf
bmFtZS51cHBlcigpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiN1bmRlZiBERUNMQVJFX0dMT0JB
TF9TVEFUSUMiKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIGdl
bmVyYXRlX3Zpc2l0X21ldGhvZChzZWxmKToKLSAgICAgICAgbGluZXMgPSBbInZvaWQgSlNCdWls
dGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIiwK
LSAgICAgICAgICAgICAgICAgInsiXQotICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJu
YWxzOgotICAgICAgICAgICAgdmlzaXQgPSAiICAgICVzLnZpc2l0KHZpc2l0b3IpOyIgJSBzZWxm
Lm1lbWJlcl9uYW1lKG9iamVjdCkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dl
bmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9u
YWwnKSwgdmlzaXQpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7IikKLSAgICAgICAgbGluZXMuYXBwZW5kKCJ9XG4iKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9i
YWxzKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFsiICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsiLAot
ICAgICAgICAgICAgICAgICAiICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUlu
Zm8gc3RhdGljR2xvYmFsc1tdID0geyJdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRl
cm5hbHM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93
aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIHNlbGYucHJv
cGVydHlfbWFjcm8ob2JqZWN0KSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIH07IikKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCIgICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3Rh
dGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7IikKLSAgICAgICAg
bGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKGNsaWVudERhdGEpOyIpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfaW5pdGlhbGl6ZV9tZXRo
b2Qoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpIiwKLSAgICAg
ICAgICAgICAgICAieyIsCi0gICAgICAgICAgICAgICAgIiAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsiXQotCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6Ci0gICAg
ICAgICAgICBpbml0ID0gIiAgICAlcy5pbml0KGdsb2JhbE9iamVjdCk7IiAlIHNlbGYubWVtYmVy
X25hbWUob2JqZWN0KQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9y
LndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBp
bml0KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIiKQotCi0gICAgICAgIGd1YXJkcyA9IHNldChb
b2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSBmb3Igb2JqZWN0IGluIHNlbGYu
aW50ZXJuYWxzIGlmICdjb25kaXRpb25hbCcgaW4gb2JqZWN0LmFubm90YXRpb25zXSkKLSAgICAg
ICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZCgiIHx8ICIu
am9pbihndWFyZHMpLCBzZWxmLl9nZW5lcmF0ZV9pbml0aWFsaXplX3N0YXRpY19nbG9iYWxzKCkp
KQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgifSIpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlu
cy9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIu
cHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU4YzhmMmFjOGE2NDE1YTI5MWNmZjg4
OGNmMWY2ODBjMWQ2NjA0N2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAg
QEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJl
Ci1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBidWls
dGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yCi1mcm9tIGJ1aWx0aW5zX21v
ZGVsIGltcG9ydCBGcmFtZXdvcmtzCi1mcm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVp
bHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJ1aWx0aW5zU2VwYXJhdGVIZWFkZXJHZW5lcmF0
b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgb2Jq
ZWN0KToKLSAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0g
ICAgICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0Ci0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNl
bGYpOgotICAgICAgICByZXR1cm4gIiVzQnVpbHRpbnMuaCIgJSBCdWlsdGluc0dlbmVyYXRvci5t
YW5nbGVkTmFtZUZvck9iamVjdChzZWxmLm9iamVjdCkKLQotICAgIGRlZiBtYWNyb19wcmVmaXgo
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21h
Y3JvX3ByZWZpeCcpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBh
cmdzID0gewotICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
c2V0dGluZygnbmFtZXNwYWNlJyksCi0gICAgICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1h
Y3JvX3ByZWZpeCgpLAotICAgICAgICAgICAgJ29iamVjdE5hbWUnOiBzZWxmLm9iamVjdC5vYmpl
Y3RfbmFtZSwKLSAgICAgICAgICAgICdvYmplY3RNYWNybyc6IHNlbGYub2JqZWN0Lm9iamVjdF9u
YW1lLnVwcGVyKCksCi0gICAgICAgIH0KLQotICAgICAgICBjb25kaXRpb25hbF9ndWFyZCA9IHNl
bGYub2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKQotCi0gICAgICAgIHNlY3Rp
b25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdh
cm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAg
ICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgiI2lmICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQotICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkpCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKCkpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlVG9wKS5z
dWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9z
ZWN0aW9uX2Zvcl9vYmplY3Qoc2VsZi5vYmplY3QpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9jb2RlX3RhYmxlX21hY3JvKCkpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfbmFtZV9tYWNybygp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLlNlcGFyYXRlSGVh
ZGVyU3RhdGljTWFjcm9zKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBpZiBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2ViQ29yZToKLSAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuU2VwYXJhdGVIZWFkZXJXcmFwcGVyQm9pbGVycGxh
dGUpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgICAgICBpZiBzZWxmLm9iamVjdC5hbm5vdGF0
aW9ucy5nZXQoJ2ludGVybmFsJyk6Ci0gICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKFRlbXBsYXRlcy5TZXBhcmF0ZUhlYWRlckludGVybmFsRnVuY3Rpb25zQm9pbGVycGxh
dGUpLnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBpZiBj
b25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgiI2VuZGlmIC8vICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQotCi0gICAgICAgIHJldHVybiAi
XG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0
aW9ucyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIiIm5hbWVzcGFjZSBKU0MgewotY2xhc3MgRnVu
Y3Rpb25FeGVjdXRhYmxlOwotfSIiIgotCi0gICAgZGVmIGdlbmVyYXRlX3NlY29uZGFyeV9oZWFk
ZXJfaW5jbHVkZXMoc2VsZik6Ci0gICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAg
ICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImJ5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgiKSwKLSAgICAgICAgICAgICksCi0K
LSAgICAgICAgICAgIChbIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRD
b3JlIiwgImJ1aWx0aW5zL0J1aWx0aW5VdGlscy5oIiksCi0gICAgICAgICAgICApLAotCi0gICAg
ICAgICAgICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIs
ICJydW50aW1lL0lkZW50aWZpZXIuaCIpLAotICAgICAgICAgICAgKSwKLQotICAgICAgICAgICAg
KFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGlt
ZS9KU0Z1bmN0aW9uLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgIF0KLQotICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRl
cl9pbmNsdWRlcykpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYs
IG9iamVjdCk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAl
cyAqLycgJSBvYmplY3Qub2JqZWN0X25hbWUpCi0gICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLmdl
bmVyYXRlX2V4dGVybnNfZm9yX29iamVjdChvYmplY3QpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
IiIpCi0gICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLmdlbmVyYXRlX21hY3Jvc19mb3Jfb2JqZWN0
KG9iamVjdCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiIikKLSAgICAgICAgbGluZXMuZXh0ZW5k
KHNlbGYuZ2VuZXJhdGVfZGVmaW5lc19mb3Jfb2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfZXh0ZXJuc19mb3Jfb2JqZWN0
KHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIGxpbmVzID0gW10KLQotICAgICAgICBmb3IgZnVuY3Rp
b24gaW4gb2JqZWN0LmZ1bmN0aW9uczoKLSAgICAgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAgICAgJ2NvZGVOYW1lJzogQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVG
b3JGdW5jdGlvbihmdW5jdGlvbikgKyAnQ29kZScsCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiIiJleHRlcm4gY29uc3QgY2hhciogc18lKGNvZGVOYW1lKXM7Ci1l
eHRlcm4gY29uc3QgaW50IHNfJShjb2RlTmFtZSlzTGVuZ3RoOwotZXh0ZXJuIGNvbnN0IEpTQzo6
Q29uc3RydWN0QWJpbGl0eSBzXyUoY29kZU5hbWUpc0NvbnN0cnVjdEFiaWxpdHk7IiIiICUgZnVu
Y3Rpb25fYXJncykKLQotICAgICAgICByZXR1cm4gbGluZXMKLQotICAgIGRlZiBnZW5lcmF0ZV9t
YWNyb3NfZm9yX29iamVjdChzZWxmLCBvYmplY3QpOgotICAgICAgICBhcmdzID0gewotICAgICAg
ICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tYWNyb19wcmVmaXgoKSwKLSAgICAgICAgICAgICdv
YmplY3RNYWNybyc6IG9iamVjdC5vYmplY3RfbmFtZS5yZXBsYWNlKCcuJywgJ18nKS51cHBlcigp
LAotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQo
IiNkZWZpbmUgJShtYWNyb1ByZWZpeClzX0ZPUkVBQ0hfJShvYmplY3RNYWNybylzX0JVSUxUSU5f
REFUQShtYWNybykgXFwiICUgYXJncykKLSAgICAgICAgZm9yIGZ1bmN0aW9uIGluIG9iamVjdC5m
dW5jdGlvbnM6Ci0gICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0gewotICAgICAgICAgICAgICAg
ICdmdW5jTmFtZSc6IGZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUsCi0gICAgICAgICAgICAgICAgJ21h
bmdsZWROYW1lJzogQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihmdW5j
dGlvbiksCi0gICAgICAgICAgICAgICAgJ3BhcmFtQ291bnQnOiBsZW4oZnVuY3Rpb24ucGFyYW1l
dGVycyksCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIG1h
Y3JvKCUoZnVuY05hbWUpcywgJShtYW5nbGVkTmFtZSlzLCAlKHBhcmFtQ291bnQpZCkgXFwiICUg
ZnVuY3Rpb25fYXJncykKLSAgICAgICAgcmV0dXJuIGxpbmVzCi0KLSAgICBkZWYgZ2VuZXJhdGVf
ZGVmaW5lc19mb3Jfb2JqZWN0KHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAg
ICAgICAgZm9yIGZ1bmN0aW9uIGluIG9iamVjdC5mdW5jdGlvbnM6Ci0gICAgICAgICAgICBhcmdz
ID0gewotICAgICAgICAgICAgICAgICdtYWNyb1ByZWZpeCc6IHNlbGYubWFjcm9fcHJlZml4KCks
Ci0gICAgICAgICAgICAgICAgJ29iamVjdE1hY3JvJzogb2JqZWN0Lm9iamVjdF9uYW1lLnJlcGxh
Y2UoJy4nLCAnXycpLnVwcGVyKCksCi0gICAgICAgICAgICAgICAgJ2Z1bmN0aW9uTWFjcm8nOiBm
dW5jdGlvbi5mdW5jdGlvbl9uYW1lLnVwcGVyKCksCi0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoIiNkZWZpbmUgJShtYWNyb1ByZWZpeClzX0JVSUxUSU5fJShvYmplY3RN
YWNybylzXyUoZnVuY3Rpb25NYWNybylzIDEiICUgYXJncykKLQotICAgICAgICByZXR1cm4gbGlu
ZXMKLQotICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9jb2RlX3RhYmxlX21hY3JvKHNlbGYp
OgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tb2Rl
bCgpLmZyYW1ld29yay5zZXR0aW5nKCdtYWNyb19wcmVmaXgnKSwKLSAgICAgICAgICAgICdvYmpl
Y3RNYWNybyc6IHNlbGYub2JqZWN0Lm9iamVjdF9uYW1lLnVwcGVyKCksCi0gICAgICAgIH0KLQot
ICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3Jv
UHJlZml4KXNfRk9SRUFDSF8lKG9iamVjdE1hY3JvKXNfQlVJTFRJTl9DT0RFKG1hY3JvKSBcXCIg
JSBhcmdzKQotICAgICAgICBmb3IgZnVuY3Rpb24gaW4gc2VsZi5vYmplY3QuZnVuY3Rpb25zOgot
ICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnZnVuY05hbWUn
OiBmdW5jdGlvbi5mdW5jdGlvbl9uYW1lLAotICAgICAgICAgICAgICAgICdvdmVycmlkZGVuTmFt
ZSc6IGZ1bmN0aW9uLm92ZXJyaWRkZW5fbmFtZSwKLSAgICAgICAgICAgICAgICAnY29kZU5hbWUn
OiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKSArICdD
b2RlJywKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgbWFj
cm8oJShjb2RlTmFtZSlzLCAlKGZ1bmNOYW1lKXMsICUob3ZlcnJpZGRlbk5hbWUpcywgc18lKGNv
ZGVOYW1lKXNMZW5ndGgpIFxcIiAlIGZ1bmN0aW9uX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3JfY29kZV9uYW1lX21h
Y3JvKHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzog
c2VsZi5tYWNyb19wcmVmaXgoKSwKLSAgICAgICAgICAgICdvYmplY3RNYWNybyc6IHNlbGYub2Jq
ZWN0Lm9iamVjdF9uYW1lLnVwcGVyKCksCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtd
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNfRk9SRUFDSF8l
KG9iamVjdE1hY3JvKXNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKG1hY3JvKSBcXCIgJSBhcmdzKQot
ICAgICAgICB1bmlxdWVfbmFtZXMgPSBsaXN0KHNldChbZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSBm
b3IgZnVuY3Rpb24gaW4gc2VsZi5vYmplY3QuZnVuY3Rpb25zXSkpCi0gICAgICAgIHVuaXF1ZV9u
YW1lcy5zb3J0KCkKLSAgICAgICAgZm9yIGZ1bmN0aW9uX25hbWUgaW4gdW5pcXVlX25hbWVzOgot
ICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnZnVuY05hbWUn
OiBmdW5jdGlvbl9uYW1lLAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoIiAgICBtYWNybyglKGZ1bmNOYW1lKXMpIFxcIiAlIGZ1bmN0aW9uX2FyZ3MpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1lbnRh
dGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjZWQ5YTUzODY3ZDQyYmM4ODU2MmQyMDhiNDcyNGNmNmY2Njg0OTAwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxl
bWVudGF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLSMhL3Vzci9iaW4v
ZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgc3RyaW5n
Ci1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBidWlsdGluc19nZW5lcmF0b3Ig
aW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yLCBXS19sY2ZpcnN0Ci1mcm9tIGJ1aWx0aW5zX21vZGVs
IGltcG9ydCBGcmFtZXdvcmssIEZyYW1ld29ya3MKLWZyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGlt
cG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgQnVpbHRpbnNTZXBhcmF0ZUltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgbW9kZWwsIG9iamVjdCk6Ci0gICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9f
KHNlbGYsIG1vZGVsKQotICAgICAgICBzZWxmLm9iamVjdCA9IG9iamVjdAotCi0gICAgZGVmIG91
dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICIlc0J1aWx0aW5zLmNwcCIgJSBC
dWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvck9iamVjdChzZWxmLm9iamVjdCkKLQotICAg
IGRlZiBtYWNyb19wcmVmaXgoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJh
bWV3b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyksCi0gICAgICAgICAgICAnbWFj
cm9QcmVmaXgnOiBzZWxmLm1hY3JvX3ByZWZpeCgpLAotICAgICAgICAgICAgJ29iamVjdE1hY3Jv
Jzogc2VsZi5vYmplY3Qub2JqZWN0X25hbWUudXBwZXIoKSwKLSAgICAgICAgICAgICdvYmplY3RO
YW1lTEMnOiBXS19sY2ZpcnN0KHNlbGYub2JqZWN0Lm9iamVjdF9uYW1lKSwKLSAgICAgICAgfQot
Ci0gICAgICAgIGNvbmRpdGlvbmFsX2d1YXJkID0gc2VsZi5vYmplY3QuYW5ub3RhdGlvbnMuZ2V0
KCdjb25kaXRpb25hbCcpCi0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkK
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfcHJpbWFyeV9oZWFkZXJfaW5j
bHVkZXMoKSkKLSAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6Ci0gICAg
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoIiNpZiAlcyIgJSBjb25kaXRpb25hbF9ndWFyZCkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNs
dWRlcygpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVz
cGFjZVRvcCkuc3Vic3RpdHV0ZShhcmdzKSkKLSAgICAgICAgZm9yIGZ1bmN0aW9uIGluIHNlbGYu
b2JqZWN0LmZ1bmN0aW9uczoKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2VtYmVkZGVkX2NvZGVfc3RyaW5nX3NlY3Rpb25fZm9yX2Z1bmN0aW9uKGZ1bmN0aW9uKSkK
LSAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLkphdmFTY3Jp
cHRDb3JlOgotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5T
ZXBhcmF0ZUpTQ0ltcGxlbWVudGF0aW9uU3RhdGljTWFjcm9zKS5zdWJzdGl0dXRlKGFyZ3MpKQot
ICAgICAgICBlbGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJDb3Jl
OgotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5TZXBhcmF0
ZVdlYkNvcmVJbXBsZW1lbnRhdGlvblN0YXRpY01hY3Jvcykuc3Vic3RpdHV0ZShhcmdzKSkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VCb3R0b20p
LnN1YnN0aXR1dGUoYXJncykpCi0gICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCIjZW5kaWYgLy8gJXNcbiIgJSBjb25k
aXRpb25hbF9ndWFyZCkKLQotICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0K
LSAgICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKLSAgICAg
ICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiXSwK
LSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImJ1aWx0aW5zL0J1aWx0aW5FeGVj
dXRhYmxlcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAiaGVh
cC9IZWFwSW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNj
cmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUi
LCAicnVudGltZS9KU0NlbGxJbmxpbmVzLmgiKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAg
ICAoWyJXZWJDb3JlIl0sCi0gICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChb
IldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUv
SlNDSlNWYWx1ZUlubGluZXMuaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRD
b3JlIiwgInJ1bnRpbWUvVk0uaCIpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIChbIldl
YkNvcmUiXSwKLSAgICAgICAgICAgICAgICAoIldlYkNvcmUiLCAiYmluZGluZ3MvanMvV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKFsiSmF2YVNj
cmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUi
LCAicnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oIiksCi0gICAgICAgICAgICApLAotICAgICAg
ICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgi
SmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9JbnRyaW5zaWMuaCIpLAotICAgICAgICAgICAgKSwK
LSAgICAgICAgXQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNs
dWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJf
aGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDA0YWJlNTY3ODAzNzA4MDE5Njk5YjJhYzRjODgwNTIyZmRkODU0NjkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0j
IENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1m
cm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1w
b3J0IEJ1aWx0aW5zR2VuZXJhdG9yLCBXS19sY2ZpcnN0LCBXS191Y2ZpcnN0Ci1mcm9tIGJ1aWx0
aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJ1aWx0
aW5zV3JhcHBlckhlYWRlckdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG1vZGVsKToKLSAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18o
c2VsZiwgbW9kZWwpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gIiVzSlNCdWlsdGlucy5oIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
bmFtZXNwYWNlJykKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGFy
Z3MgPSB7Ci0gICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5z
ZXR0aW5nKCduYW1lc3BhY2UnKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10K
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1
YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuSGVhZGVySW5jbHVkZUd1YXJkKS5zdWJzdGl0dXRlKGFyZ3MpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkpCi0KLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1
YnN0aXR1dGUoYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3Nl
Y3Rpb25fZm9yX29iamVjdCgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkKLQotICAgICAgICByZXR1
cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hl
YWRlcl9pbmNsdWRlcyhzZWxmKToKLSAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAgICAg
ICAgICAgKFsiV2ViQ29yZSJdLAotICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAi
cnVudGltZS9WTS5oIiksCi0gICAgICAgICAgICApLAotICAgICAgICBdCi0gICAgICAgIGZvciBv
YmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6Ci0gICAgICAgICAgICBoZWFkZXJfaW5jbHVk
ZXMuYXBwZW5kKChbIldlYkNvcmUiXSwgKCJXZWJDb3JlIiwgb2JqZWN0Lm9iamVjdF9uYW1lICsg
IkJ1aWx0aW5zLmgiKSkpCi0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRl
X2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQotCi0gICAgZGVmIGdlbmVy
YXRlX3NlY3Rpb25fZm9yX29iamVjdChzZWxmKToKLSAgICAgICAgbGluZXMgPSBbImNsYXNzIEpT
QnVpbHRpbkZ1bmN0aW9ucyB7IiwKLSAgICAgICAgICAgICAgICAgInB1YmxpYzoiXQotCi0gICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2NvbnN0cnVjdG9yKCkpCi0gICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2FjY2Vzc29ycygpKQotICAgICAgICBsaW5lcy5hcHBl
bmQoInByaXZhdGU6IikKLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWVtYmVy
cygpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIn07IikKLSAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKLQotICAgIGRlZiBhY2Nlc3Nvcl9uYW1lKHNlbGYsIG9iamVjdCk6Ci0gICAgICAg
IHJldHVybiBXS19sY2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbnMiCi0KLSAg
ICBkZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgcmV0dXJuICJtXyIgKyBz
ZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KQotCi0gICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9i
amVjdCk6Ci0gICAgICAgIHJldHVybiBXS191Y2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAi
QnVpbHRpbnNXcmFwcGVyIgotCi0gICAgZGVmIGdlbmVyYXRlX2NvbnN0cnVjdG9yKHNlbGYpOgot
ICAgICAgICBsaW5lcyA9IFsiICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZN
JiB2bSkiLAotICAgICAgICAgICAgICAgICAiICAgICAgICA6IG1fdm0odm0pIl0KLSAgICAgICAg
Zm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoKLSAgICAgICAgICAgIG1lbWJlcl9p
bml0ID0gIiAgICAgICAgLCAlcygmbV92bSkiICUgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpCi0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJk
KG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIG1lbWJlcl9pbml0KSkKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCIgICAgeyIpCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5t
b2RlbCgpLm9iamVjdHM6Ci0gICAgICAgICAgICBpZiBub3QgJ2ludGVybmFsJyBpbiBvYmplY3Qu
YW5ub3RhdGlvbnM6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGludGVy
bmFsX2V4cG9ydF9uYW1lcyA9ICIgICAgICAgICVzLmV4cG9ydE5hbWVzKCk7IiAlIHNlbGYubWVt
YmVyX25hbWUob2JqZWN0KQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJh
dG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcp
LCBpbnRlcm5hbF9leHBvcnRfbmFtZXMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB9XG4i
KQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIGdlbmVyYXRlX2Fj
Y2Vzc29ycyhzZWxmKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3Igb2JqZWN0IGlu
IHNlbGYubW9kZWwoKS5vYmplY3RzOgotICAgICAgICAgICAgYWNjZXNzb3IgPSAiICAgICVzJiAl
cygpIHsgcmV0dXJuICVzOyB9IiAlIChzZWxmLm1lbWJlcl90eXBlKG9iamVjdCksIHNlbGYuYWNj
ZXNzb3JfbmFtZShvYmplY3QpLCBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkpCi0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5h
bm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIGFjY2Vzc29yKSkKLSAgICAgICAgbGluZXMu
YXBwZW5kKCIiKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIGdl
bmVyYXRlX21lbWJlcnMoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWyIgICAgSlNDOjpWTSYgbV92
bTsiXQotICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgotICAgICAg
ICAgICAgbWVtYmVyID0gIiAgICAlcyAlczsiICUgKHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSwg
c2VsZi5tZW1iZXJfbmFtZShvYmplY3QpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0
aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25k
aXRpb25hbCcpLCBtZW1iZXIpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwNTU5MTdmZGM4MmQzYzZjNjc1
OTE2YjA0ZWMwZjYxNDdjMzhlZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0x
LDYxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0j
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCi0KLWZyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVy
YXRvcgotZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIFRlbXBsYXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykK
LQotCi1jbGFzcyBCdWlsdGluc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihCdWlsdGlu
c0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKLSAgICAgICAgQnVp
bHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0KLSAgICBkZWYgb3V0cHV0X2Zp
bGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVzSlNCdWlsdGlucy5jcHAiICUgc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKQotCi0gICAgZGVmIGdlbmVyYXRl
X291dHB1dChzZWxmKToKLSAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICduYW1lc3BhY2Un
OiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpLAotICAgICAgICB9
Ci0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKLQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3QoKSkKLQotICAgICAg
ICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfc2VjdGlv
bl9mb3Jfb2JqZWN0KHNlbGYpOgotICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbXQotICAgICAg
ICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgotICAgICAgICAgICAgaGVhZGVy
X2luY2x1ZGVzLmFwcGVuZCgoWyJXZWJDb3JlIl0sICgiV2ViQ29yZSIsIG9iamVjdC5vYmplY3Rf
bmFtZSArICJCdWlsdGlucy5jcHAiKSkpCi0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxm
LmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdG9yLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjJlODBlYTM2
MWE5ZTIxNjk3MTBkM2JkNTdlNDJkYzBiZWU0YmZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBA
Ci0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MucGF0
aAotaW1wb3J0IHJlCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLWltcG9ydCBqc29uCi0K
LWZyb20gYnVpbHRpbnNfbW9kZWwgaW1wb3J0IEJ1aWx0aW5GdW5jdGlvbiwgQnVpbHRpbk9iamVj
dAotZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIFRlbXBsYXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQot
IyBUaGVzZSBtYXRjaCBXS19sY2ZpcnN0IGFuZCBXS191Y2ZpcnN0IGRlZmluZWQgaW4gQ29kZUdl
bmVyYXRvci5wbS4KLWRlZiBXS19sY2ZpcnN0KHN0cik6Ci0gICAgc3RyID0gc3RyWzoxXS5sb3dl
cigpICsgc3RyWzE6XQotICAgIHN0ciA9IHN0ci5yZXBsYWNlKCdkT00nLCAnZG9tJykKLSAgICBz
dHIgPSBzdHIucmVwbGFjZSgndVJMJywgJ3VybCcpCi0gICAgc3RyID0gc3RyLnJlcGxhY2UoJ2pT
JywgJ2pzJykKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgneE1MJywgJ3htbCcpCi0gICAgc3RyID0g
c3RyLnJlcGxhY2UoJ3hTTFQnLCAneHNsdCcpCi0gICAgc3RyID0gc3RyLnJlcGxhY2UoJ2NTUycs
ICdjc3MnKQotICAgIHN0ciA9IHN0ci5yZXBsYWNlKCdyVEMnLCAncnRjJykKLSAgICByZXR1cm4g
c3RyCi0KLWRlZiBXS191Y2ZpcnN0KHN0cik6Ci0gICAgc3RyID0gc3RyWzoxXS51cHBlcigpICsg
c3RyWzE6XQotICAgIHN0ciA9IHN0ci5yZXBsYWNlKCdYbWwnLCAnWE1MJykKLSAgICBzdHIgPSBz
dHIucmVwbGFjZSgnU3ZnJywgJ1NWRycpCi0gICAgcmV0dXJuIHN0cgotCi1jbGFzcyBCdWlsdGlu
c0dlbmVyYXRvcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgotICAgICAgICBzZWxm
Ll9tb2RlbCA9IG1vZGVsCi0KLSAgICBkZWYgbW9kZWwoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl9tb2RlbAotCi0gICAgIyBUaGVzZSBtZXRob2RzIGFyZSBvdmVycmlkZGVuIGJ5IHN1YmNs
YXNzZXMuCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBwYXNzCi0K
LSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICBwYXNzCi0KLQotICAgICMg
U2hhcmVkIGNvZGUgZ2VuZXJhdGlvbiBtZXRob2RzLgotICAgIGRlZiBnZW5lcmF0ZV9saWNlbnNl
KHNlbGYpOgotICAgICAgICByYXdfbGljZW5zZSA9IFRlbXBsYXRlKFRlbXBsYXRlcy5MaWNlbnNl
VGV4dCkuc3Vic3RpdHV0ZShOb25lKQotICAgICAgICBjb3B5cmlnaHRzID0gc2VsZi5fbW9kZWwu
Y29weXJpZ2h0cygpCi0gICAgICAgIGNvcHlyaWdodHMuc29ydCgpCi0KLSAgICAgICAgbGljZW5z
ZV9ibG9jayA9IFtdCi0gICAgICAgIGxpY2Vuc2VfYmxvY2suYXBwZW5kKCIvKiIpCi0gICAgICAg
IGZvciBjb3B5cmlnaHQgaW4gY29weXJpZ2h0czoKLSAgICAgICAgICAgIGxpY2Vuc2VfYmxvY2su
YXBwZW5kKCIgKiBDb3B5cmlnaHQgKGMpICVzIiAlIGNvcHlyaWdodCkKLSAgICAgICAgaWYgbGVu
KGNvcHlyaWdodHMpID4gMDoKLSAgICAgICAgICAgIGxpY2Vuc2VfYmxvY2suYXBwZW5kKCIgKiAi
KQotCi0gICAgICAgIGZvciBsaW5lIGluIHJhd19saWNlbnNlLnNwbGl0KCdcbicpOgotICAgICAg
ICAgICAgbGljZW5zZV9ibG9jay5hcHBlbmQoIiAqICIgKyBsaW5lKQotCi0gICAgICAgIGxpY2Vu
c2VfYmxvY2suYXBwZW5kKCIgKi8iKQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGljZW5z
ZV9ibG9jaykKLQotICAgIGRlZiBnZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoc2VsZiwg
ZW50cmllcyk6Ci0gICAgICAgIGluY2x1ZGVzID0gc2V0KCkKLSAgICAgICAgZm9yIGVudHJ5IGlu
IGVudHJpZXM6Ci0gICAgICAgICAgICAoYWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGRhdGEpID0g
ZW50cnkKLSAgICAgICAgICAgIChmcmFtZXdvcmtfbmFtZSwgaGVhZGVyX3BhdGgpID0gZGF0YQot
Ci0gICAgICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUgbm90IGluIGFsbG93
ZWRfZnJhbWV3b3JrX25hbWVzOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAg
ICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUgIT0gZnJhbWV3b3JrX25hbWU6Ci0gICAg
ICAgICAgICAgICAgaW5jbHVkZXMuYWRkKCIjaW5jbHVkZSA8JXMvJXM+IiAlIChmcmFtZXdvcmtf
bmFtZSwgb3MucGF0aC5iYXNlbmFtZShoZWFkZXJfcGF0aCkpKQotICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBpbmNsdWRlcy5hZGQoIiNpbmNsdWRlIFwiJXNcIiIgJSBvcy5wYXRo
LmJhc2VuYW1lKGhlYWRlcl9wYXRoKSkKLQotICAgICAgICByZXR1cm4gc29ydGVkKGxpc3QoaW5j
bHVkZXMpKQotCi0gICAgZGVmIGdlbmVyYXRlX3ByaW1hcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYp
OgotICAgICAgICBuYW1lLCBfID0gb3MucGF0aC5zcGxpdGV4dChzZWxmLm91dHB1dF9maWxlbmFt
ZSgpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKFsKLSAgICAgICAgICAgICIjaW5jbHVkZSBc
ImNvbmZpZy5oXCIiLAotICAgICAgICAgICAgIiNpbmNsdWRlIFwiJXMuaFwiIiAlIG5hbWUsCi0g
ICAgICAgIF0pCi0KLSAgICBkZWYgZ2VuZXJhdGVfZW1iZWRkZWRfY29kZV9zdHJpbmdfc2VjdGlv
bl9mb3JfZnVuY3Rpb24oc2VsZiwgZnVuY3Rpb24pOgotICAgICAgICB0ZXh0ID0gZnVuY3Rpb24u
ZnVuY3Rpb25fc291cmNlCi0gICAgICAgICMgV3JhcCBpdCBpbiBwYXJlbnMgdG8gYXZvaWQgYWRk
aW5nIHRvIGdsb2JhbCBzY29wZS4KLSAgICAgICAgdGV4dCA9ICIoZnVuY3Rpb24gIiArIHRleHRb
dGV4dC5pbmRleCgiKCIpOl0gKyAiKSIKLSAgICAgICAgZW1iZWRkZWRTb3VyY2VMZW5ndGggPSBs
ZW4odGV4dCkgKyAxICAjIEZvciBleHRyYSBcbi4KLSAgICAgICAgIyBMYXp5IHdheSB0byBlc2Nh
cGUgcXVvdGVzLCBJIHRoaW5rPwotICAgICAgICB0ZXh0TGluZXMgPSBqc29uLmR1bXBzKHRleHQp
WzE6LTFdLnNwbGl0KCJcXG4iKQotICAgICAgICAjIFRoaXMgbG9va3Mgc2NhcnkgYmVjYXVzZSB3
ZSBuZWVkIHRoZSBKUyBzb3VyY2UgaXRzZWxmIHRvIGhhdmUgbmV3bGluZXMuCi0gICAgICAgIGVt
YmVkZGVkU291cmNlID0gJ1xuJy5qb2luKFsnICAgICIlc1xcbiIgXFwnICUgbGluZSBmb3IgbGlu
ZSBpbiB0ZXh0TGluZXNdKQotCi0gICAgICAgIGNvbnN0cnVjdEFiaWxpdHkgPSAiQ2Fubm90Q29u
c3RydWN0IgotICAgICAgICBpZiBmdW5jdGlvbi5pc19jb25zdHJ1Y3RvcjoKLSAgICAgICAgICAg
IGNvbnN0cnVjdEFiaWxpdHkgPSAiQ2FuQ29uc3RydWN0IgotCi0gICAgICAgIGFyZ3MgPSB7Ci0g
ICAgICAgICAgICAnY29kZU5hbWUnOiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1
bmN0aW9uKGZ1bmN0aW9uKSArICdDb2RlJywKLSAgICAgICAgICAgICdlbWJlZGRlZFNvdXJjZSc6
IGVtYmVkZGVkU291cmNlLAotICAgICAgICAgICAgJ2VtYmVkZGVkU291cmNlTGVuZ3RoJzogZW1i
ZWRkZWRTb3VyY2VMZW5ndGgsCi0gICAgICAgICAgICAnY2FuQ29uc3RydWN0JzogY29uc3RydWN0
QWJpbGl0eSwKLSAgICAgICAgICAgICdpbnRyaW5zaWMnOiBmdW5jdGlvbi5pbnRyaW5zaWMKLSAg
ICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCJjb25z
dCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc18lKGNvZGVOYW1lKXNDb25zdHJ1Y3RBYmlsaXR5ID0g
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjolKGNhbkNvbnN0cnVjdClzOyIgJSBhcmdzKTsKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCJjb25zdCBpbnQgc18lKGNvZGVOYW1lKXNMZW5ndGggPSAlKGVtYmVk
ZGVkU291cmNlTGVuZ3RoKWQ7IiAlIGFyZ3MpOwotICAgICAgICBsaW5lcy5hcHBlbmQoInN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzXyUoY29kZU5hbWUpc0ludHJpbnNpYyA9IEpTQzo6JShp
bnRyaW5zaWMpczsiICUgYXJncyk7Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgiY29uc3QgY2hhciog
c18lKGNvZGVOYW1lKXMgPVxuJShlbWJlZGRlZFNvdXJjZSlzXG47IiAlIGFyZ3MpOwotICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgIyBIZWxwZXIgbWV0aG9kcy4KLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgd3JhcF93aXRoX2d1YXJkKGd1YXJkLCB0ZXh0KToKLSAg
ICAgICAgaWYgbm90IGd1YXJkOgotICAgICAgICAgICAgcmV0dXJuIHRleHQKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihbCi0gICAgICAgICAgICAnI2lmICVzJyAlIGd1YXJkLAotICAgICAgICAg
ICAgdGV4dCwKLSAgICAgICAgICAgICcjZW5kaWYgLy8gJXMnICUgZ3VhcmQsCi0gICAgICAgIF0p
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG1hbmdsZWROYW1lRm9yT2JqZWN0KG9iamVj
dCk6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iamVjdCwgQnVpbHRpbk9iamVjdCk6Ci0g
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIG1h
bmdsZWROYW1lRm9yT2JqZWN0KCkiKQotCi0gICAgICAgIGRlZiB0b0NhbWVsKG1hdGNoKToKLSAg
ICAgICAgICAgIHN0ciA9IG1hdGNoLmdyb3VwKDApCi0gICAgICAgICAgICByZXR1cm4gc3RyWzFd
LnVwcGVyKCkKLSAgICAgICAgcmV0dXJuIHJlLnN1YihyJ1wuW2Etel0nLCB0b0NhbWVsLCBvYmpl
Y3Qub2JqZWN0X25hbWUsIGZsYWdzPXJlLklHTk9SRUNBU0UpCi0KLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgbWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihmdW5jdGlvbik6Ci0gICAgICAgIGlm
IG5vdCBpc2luc3RhbmNlKGZ1bmN0aW9uLCBCdWlsdGluRnVuY3Rpb24pOgotICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBtYW5nbGVkTmFtZUZv
ckZ1bmN0aW9uKCkiKQotCi0gICAgICAgIGZ1bmN0aW9uX25hbWUgPSBXS191Y2ZpcnN0KGZ1bmN0
aW9uLmZ1bmN0aW9uX25hbWUpCi0KLSAgICAgICAgZGVmIHRvQ2FtZWwobWF0Y2gpOgotICAgICAg
ICAgICAgc3RyID0gbWF0Y2guZ3JvdXAoMCkKLSAgICAgICAgICAgIHJldHVybiBzdHJbMV0udXBw
ZXIoKQotICAgICAgICBmdW5jdGlvbl9uYW1lID0gcmUuc3ViKHInXC5bYS16XScsIHRvQ2FtZWws
IGZ1bmN0aW9uX25hbWUsIGZsYWdzPXJlLklHTk9SRUNBU0UpCi0gICAgICAgIGlmIGZ1bmN0aW9u
LmlzX2NvbnN0cnVjdG9yOgotICAgICAgICAgICAgZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25h
bWUgKyAiQ29uc3RydWN0b3IiCi0KLSAgICAgICAgb2JqZWN0X25hbWUgPSBCdWlsdGluc0dlbmVy
YXRvci5tYW5nbGVkTmFtZUZvck9iamVjdChmdW5jdGlvbi5vYmplY3QpCi0gICAgICAgIHJldHVy
biBXS19sY2ZpcnN0KG9iamVjdF9uYW1lICsgZnVuY3Rpb25fbmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA1MTljNWVlZTRjZGJjZGI1Yzk2OWQ1ZDgx
NThhMzI0YzM1ZmJhOGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfbW9k
ZWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9y
dCBsb2dnaW5nCi1pbXBvcnQgcmUKLWltcG9ydCBvcwotCi1mcm9tIGJ1aWx0aW5zX3RlbXBsYXRl
cyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi1fRlJBTUVXT1JLX0NPTkZJR19NQVAgPSB7
Ci0gICAgIkphdmFTY3JpcHRDb3JlIjogewotICAgICAgICAibWFjcm9fcHJlZml4IjogIkpTQyIs
Ci0gICAgICAgICJuYW1lc3BhY2UiOiAiSlNDIiwKLSAgICB9LAotICAgICJXZWJDb3JlIjogewot
ICAgICAgICAibWFjcm9fcHJlZml4IjogIldFQkNPUkUiLAotICAgICAgICAibmFtZXNwYWNlIjog
IldlYkNvcmUiLAotICAgIH0sCi19Ci0KLWZ1bmN0aW9uSGVhZFJlZ0V4cCA9IHJlLmNvbXBpbGUo
ciIoPzpAW1x3fD1cW1xdIFwiXC5dK1xzKlxuKSpmdW5jdGlvblxzK1x3K1xzKlwoLio/XCkiLCBy
ZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1mdW5jdGlvbkdsb2JhbFByaXZhdGVSZWdFeHAgPSBy
ZS5jb21waWxlKHIiLipeQGdsb2JhbFByaXZhdGUiLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwp
Ci1mdW5jdGlvbkludHJpbnNpY1JlZ0V4cCA9IHJlLmNvbXBpbGUociIuKl5AaW50cmluc2ljPShc
dyspIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQotZnVuY3Rpb25Jc0NvbnN0cnVjdG9yUmVn
RXhwID0gcmUuY29tcGlsZShyIi4qXkBjb25zdHJ1Y3RvciIsIHJlLk1VTFRJTElORSB8IHJlLkRP
VEFMTCkKLWZ1bmN0aW9uSXNHZXR0ZXJSZWdFeHAgPSByZS5jb21waWxlKHIiLipeQGdldHRlciIs
IHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLWZ1bmN0aW9uTmFtZVJlZ0V4cCA9IHJlLmNvbXBp
bGUociJmdW5jdGlvblxzKyhcdyspXHMqXCgiLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1m
dW5jdGlvbk92ZXJyaWRkZW5OYW1lUmVnRXhwID0gcmUuY29tcGlsZShyIi4qXkBvdmVycmlkZGVu
TmFtZT0oXCIuK1wiKSQiLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1mdW5jdGlvblBhcmFt
ZXRlckZpbmRlciA9IHJlLmNvbXBpbGUociJeZnVuY3Rpb25ccysoPzpcdyspXHMqXCgoKD86XHMq
XHcrKT9ccyooPzpccyosXHMqXHcrKSopP1xzKlwpIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxM
KQotCi1tdWx0aWxpbmVDb21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIlwvXCouKj9cKlwvIiwg
cmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQotc2luZ2xlTGluZUNvbW1lbnRSZWdFeHAgPSByZS5j
b21waWxlKHIiXC9cLy4qP1xuIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQota2V5VmFsdWVB
bm5vdGF0aW9uQ29tbWVudFJlZ0V4cCA9IHJlLmNvbXBpbGUociJeXC9cLyBAKFx3Kyk9KFtePV0r
PylcbiIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKLWZsYWdBbm5vdGF0aW9uQ29tbWVudFJl
Z0V4cCA9IHJlLmNvbXBpbGUociJeXC9cLyBAKFx3KylbXj1dKj9cbiIsIHJlLk1VTFRJTElORSB8
IHJlLkRPVEFMTCkKLWxpbmVXaXRoT25seVNpbmdsZUxpbmVDb21tZW50UmVnRXhwID0gcmUuY29t
cGlsZShyIl5ccypcL1wvXG4iLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCi1saW5lV2l0aFRy
YWlsaW5nU2luZ2xlTGluZUNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIiXHMqXC9cL1xuIiwg
cmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQotbGVhZGluZ1doaXRlc3BhY2VSZWdFeHAgPSByZS5j
b21waWxlKHIiXiArIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQotbXVsdGlwbGVFbXB0eUxp
bmVzUmVnRXhwID0gcmUuY29tcGlsZShyIlxuezIsfSIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFM
TCkKLQotY2xhc3MgUGFyc2VFeGNlcHRpb24oRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLQotY2xh
c3MgRnJhbWV3b3JrOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgc2Vs
Zi5fc2V0dGluZ3MgPSBfRlJBTUVXT1JLX0NPTkZJR19NQVBbbmFtZV0KLSAgICAgICAgc2VsZi5u
YW1lID0gbmFtZQotCi0gICAgZGVmIHNldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PScnKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX3NldHRpbmdzLmdldChrZXksIGRlZmF1bHQpCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIGZyb21TdHJpbmcoZnJhbWV3b3JrU3RyaW5nKToKLSAgICAgICAg
aWYgZnJhbWV3b3JrU3RyaW5nID09ICJKYXZhU2NyaXB0Q29yZSI6Ci0gICAgICAgICAgICByZXR1
cm4gRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZQotCi0gICAgICAgIGlmIGZyYW1ld29ya1N0cmlu
ZyA9PSAiV2ViQ29yZSI6Ci0gICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5XZWJDb3JlCi0K
LSAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlVua25vd24gZnJhbWV3b3JrOiAlcyIgJSBm
cmFtZXdvcmtTdHJpbmcpCi0KLQotY2xhc3MgRnJhbWV3b3JrczoKLSAgICBKYXZhU2NyaXB0Q29y
ZSA9IEZyYW1ld29yaygiSmF2YVNjcmlwdENvcmUiKQotICAgIFdlYkNvcmUgPSBGcmFtZXdvcmso
IldlYkNvcmUiKQotCi0KLWNsYXNzIEJ1aWx0aW5PYmplY3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIG9iamVjdF9uYW1lLCBhbm5vdGF0aW9ucywgZnVuY3Rpb25zKToKLSAgICAgICAgc2VsZi5v
YmplY3RfbmFtZSA9IG9iamVjdF9uYW1lCi0gICAgICAgIHNlbGYuYW5ub3RhdGlvbnMgPSBhbm5v
dGF0aW9ucwotICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucwotICAgICAgICBzZWxm
LmNvbGxlY3Rpb24gPSBOb25lICAjIFNldCBieSB0aGUgb3duaW5nIEJ1aWx0aW5zQ29sbGVjdGlv
bgotCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBzZWxmLmZ1bmN0aW9uczoKLSAgICAgICAgICAg
IGZ1bmN0aW9uLm9iamVjdCA9IHNlbGYKLQotCi1jbGFzcyBCdWlsdGluRnVuY3Rpb246Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmN0aW9uX25hbWUsIGZ1bmN0aW9uX3NvdXJjZSwgcGFyYW1l
dGVycywgaXNfY29uc3RydWN0b3IsIGlzX2dsb2JhbF9wcml2YXRlLCBpbnRyaW5zaWMsIG92ZXJy
aWRkZW5fbmFtZSk6Ci0gICAgICAgIHNlbGYuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWUK
LSAgICAgICAgc2VsZi5mdW5jdGlvbl9zb3VyY2UgPSBmdW5jdGlvbl9zb3VyY2UKLSAgICAgICAg
c2VsZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycwotICAgICAgICBzZWxmLmlzX2NvbnN0cnVjdG9y
ID0gaXNfY29uc3RydWN0b3IKLSAgICAgICAgc2VsZi5pc19nbG9iYWxfcHJpdmF0ZSA9IGlzX2ds
b2JhbF9wcml2YXRlCi0gICAgICAgIHNlbGYuaW50cmluc2ljID0gaW50cmluc2ljCi0gICAgICAg
IHNlbGYub3ZlcnJpZGRlbl9uYW1lID0gb3ZlcnJpZGRlbl9uYW1lCi0gICAgICAgIHNlbGYub2Jq
ZWN0ID0gTm9uZSAgIyBTZXQgYnkgdGhlIG93bmluZyBCdWlsdGluT2JqZWN0Ci0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIGZyb21TdHJpbmcoZnVuY3Rpb25fc3RyaW5nKToKLSAgICAgICAg
ZnVuY3Rpb25fc291cmNlID0gbXVsdGlsaW5lQ29tbWVudFJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9u
X3N0cmluZykKLQotICAgICAgICBpbnRyaW5zaWMgPSAiTm9JbnRyaW5zaWMiCi0gICAgICAgIGlu
dHJpbnNpY01hdGNoID0gZnVuY3Rpb25JbnRyaW5zaWNSZWdFeHAuc2VhcmNoKGZ1bmN0aW9uX3Nv
dXJjZSkKLSAgICAgICAgaWYgaW50cmluc2ljTWF0Y2g6Ci0gICAgICAgICAgICBpbnRyaW5zaWMg
PSBpbnRyaW5zaWNNYXRjaC5ncm91cCgxKQotICAgICAgICAgICAgZnVuY3Rpb25fc291cmNlID0g
ZnVuY3Rpb25JbnRyaW5zaWNSZWdFeHAuc3ViKCIiLCBmdW5jdGlvbl9zb3VyY2UpCi0KLSAgICAg
ICAgb3ZlcnJpZGRlbl9uYW1lID0gTm9uZQotICAgICAgICBvdmVycmlkZGVuTmFtZU1hdGNoID0g
ZnVuY3Rpb25PdmVycmlkZGVuTmFtZVJlZ0V4cC5zZWFyY2goZnVuY3Rpb25fc291cmNlKQotICAg
ICAgICBpZiBvdmVycmlkZGVuTmFtZU1hdGNoOgotICAgICAgICAgICAgb3ZlcnJpZGRlbl9uYW1l
ID0gb3ZlcnJpZGRlbk5hbWVNYXRjaC5ncm91cCgxKQotICAgICAgICAgICAgZnVuY3Rpb25fc291
cmNlID0gZnVuY3Rpb25PdmVycmlkZGVuTmFtZVJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3NvdXJj
ZSkKLQotICAgICAgICBpZiBub3Qgb3MuZ2V0ZW52KCJDT05GSUdVUkFUSU9OIiwgIkRlYnVnIiku
c3RhcnRzd2l0aCgiRGVidWciKToKLSAgICAgICAgICAgIGZ1bmN0aW9uX3NvdXJjZSA9IGxpbmVX
aXRoT25seVNpbmdsZUxpbmVDb21tZW50UmVnRXhwLnN1YigiIiwgZnVuY3Rpb25fc291cmNlKQot
ICAgICAgICAgICAgZnVuY3Rpb25fc291cmNlID0gbGluZVdpdGhUcmFpbGluZ1NpbmdsZUxpbmVD
b21tZW50UmVnRXhwLnN1YigiXG4iLCBmdW5jdGlvbl9zb3VyY2UpCi0gICAgICAgICAgICBmdW5j
dGlvbl9zb3VyY2UgPSBsZWFkaW5nV2hpdGVzcGFjZVJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3Nv
dXJjZSkKLSAgICAgICAgICAgIGZ1bmN0aW9uX3NvdXJjZSA9IG11bHRpcGxlRW1wdHlMaW5lc1Jl
Z0V4cC5zdWIoIlxuIiwgZnVuY3Rpb25fc291cmNlKQotCi0gICAgICAgIGZ1bmN0aW9uX25hbWUg
PSBmdW5jdGlvbk5hbWVSZWdFeHAuZmluZGFsbChmdW5jdGlvbl9zb3VyY2UpWzBdCi0gICAgICAg
IGlzX2NvbnN0cnVjdG9yID0gZnVuY3Rpb25Jc0NvbnN0cnVjdG9yUmVnRXhwLm1hdGNoKGZ1bmN0
aW9uX3NvdXJjZSkgIT0gTm9uZQotICAgICAgICBpc19nZXR0ZXIgPSBmdW5jdGlvbklzR2V0dGVy
UmVnRXhwLm1hdGNoKGZ1bmN0aW9uX3NvdXJjZSkgIT0gTm9uZQotICAgICAgICBpc19nbG9iYWxf
cHJpdmF0ZSA9IGZ1bmN0aW9uR2xvYmFsUHJpdmF0ZVJlZ0V4cC5tYXRjaChmdW5jdGlvbl9zb3Vy
Y2UpICE9IE5vbmUKLSAgICAgICAgcGFyYW1ldGVycyA9IFtzLnN0cmlwKCkgZm9yIHMgaW4gZnVu
Y3Rpb25QYXJhbWV0ZXJGaW5kZXIuZmluZGFsbChmdW5jdGlvbl9zb3VyY2UpWzBdLnNwbGl0KCcs
JyldCi0gICAgICAgIGlmIGxlbihwYXJhbWV0ZXJzWzBdKSA9PSAwOgotICAgICAgICAgICAgcGFy
YW1ldGVycyA9IFtdCi0KLSAgICAgICAgaWYgaXNfZ2V0dGVyIGFuZCBub3Qgb3ZlcnJpZGRlbl9u
YW1lOgotICAgICAgICAgICAgb3ZlcnJpZGRlbl9uYW1lID0gIlwiZ2V0ICVzXCIiICUgKGZ1bmN0
aW9uX25hbWUpCi0KLSAgICAgICAgaWYgbm90IG92ZXJyaWRkZW5fbmFtZToKLSAgICAgICAgICAg
IG92ZXJyaWRkZW5fbmFtZSA9ICJzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obnVsbHB0cikiCi0K
LSAgICAgICAgcmV0dXJuIEJ1aWx0aW5GdW5jdGlvbihmdW5jdGlvbl9uYW1lLCBmdW5jdGlvbl9z
b3VyY2UsIHBhcmFtZXRlcnMsIGlzX2NvbnN0cnVjdG9yLCBpc19nbG9iYWxfcHJpdmF0ZSwgaW50
cmluc2ljLCBvdmVycmlkZGVuX25hbWUpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAg
ICAgaW50ZXJmYWNlID0gIiVzKCVzKSIgJSAoc2VsZi5mdW5jdGlvbl9uYW1lLCAnLCAnLmpvaW4o
c2VsZi5wYXJhbWV0ZXJzKSkKLSAgICAgICAgaWYgc2VsZi5pc19jb25zdHJ1Y3RvcjoKLSAgICAg
ICAgICAgIGludGVyZmFjZSA9IGludGVyZmFjZSArICIgW0NvbnN0cnVjdG9yXSIKLQotICAgICAg
ICByZXR1cm4gaW50ZXJmYWNlCi0KLQotY2xhc3MgQnVpbHRpbnNDb2xsZWN0aW9uOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBmcmFtZXdvcmtfbmFtZSk6Ci0gICAgICAgIHNlbGYuX2NvcHlyaWdo
dF9saW5lcyA9IHNldCgpCi0gICAgICAgIHNlbGYub2JqZWN0cyA9IFtdCi0gICAgICAgIHNlbGYu
ZnJhbWV3b3JrID0gRnJhbWV3b3JrLmZyb21TdHJpbmcoZnJhbWV3b3JrX25hbWUpCi0gICAgICAg
IGxvZy5kZWJ1ZygiQ3JlYXRlZCBuZXcgQnVpbHRpbnMgY29sbGVjdGlvbi4iKQotCi0gICAgZGVm
IHBhcnNlX2J1aWx0aW5zX2ZpbGUoc2VsZiwgZmlsZW5hbWUsIHRleHQpOgotICAgICAgICBsb2cu
ZGVidWcoIlBhcnNpbmcgYnVpbHRpbnMgZmlsZTogJXMiICUgZmlsZW5hbWUpCi0KLSAgICAgICAg
cGFyc2VkX2NvcHlyaWdodHMgPSBzZXQoc2VsZi5fcGFyc2VfY29weXJpZ2h0X2xpbmVzKHRleHQp
KQotICAgICAgICBzZWxmLl9jb3B5cmlnaHRfbGluZXMgPSBzZWxmLl9jb3B5cmlnaHRfbGluZXMu
dW5pb24ocGFyc2VkX2NvcHlyaWdodHMpCi0KLSAgICAgICAgbG9nLmRlYnVnKCJGb3VuZCBjb3B5
cmlnaHQgbGluZXM6IikKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fY29weXJpZ2h0X2xpbmVz
OgotICAgICAgICAgICAgbG9nLmRlYnVnKGxpbmUpCi0gICAgICAgIGxvZy5kZWJ1ZygiIikKLQot
ICAgICAgICBvYmplY3RfYW5ub3RhdGlvbnMgPSBzZWxmLl9wYXJzZV9hbm5vdGF0aW9ucyh0ZXh0
KQotCi0gICAgICAgIG9iamVjdF9uYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGgu
YmFzZW5hbWUoZmlsZW5hbWUpKQotICAgICAgICBsb2cuZGVidWcoIlBhcnNpbmcgb2JqZWN0OiAl
cyIgJSBvYmplY3RfbmFtZSkKLQotICAgICAgICBwYXJzZWRfZnVuY3Rpb25zID0gc2VsZi5fcGFy
c2VfZnVuY3Rpb25zKHRleHQpCi0gICAgICAgIGZvciBmdW5jdGlvbiBpbiBwYXJzZWRfZnVuY3Rp
b25zOgotICAgICAgICAgICAgZnVuY3Rpb24ub2JqZWN0ID0gb2JqZWN0X25hbWUKLQotICAgICAg
ICBsb2cuZGVidWcoIlBhcnNlZCBmdW5jdGlvbnM6IikKLSAgICAgICAgZm9yIGZ1bmMgaW4gcGFy
c2VkX2Z1bmN0aW9uczoKLSAgICAgICAgICAgIGxvZy5kZWJ1ZyhmdW5jKQotICAgICAgICBsb2cu
ZGVidWcoIiIpCi0KLSAgICAgICAgbmV3X29iamVjdCA9IEJ1aWx0aW5PYmplY3Qob2JqZWN0X25h
bWUsIG9iamVjdF9hbm5vdGF0aW9ucywgcGFyc2VkX2Z1bmN0aW9ucykKLSAgICAgICAgbmV3X29i
amVjdC5jb2xsZWN0aW9uID0gc2VsZgotICAgICAgICBzZWxmLm9iamVjdHMuYXBwZW5kKG5ld19v
YmplY3QpCi0KLSAgICBkZWYgY29weXJpZ2h0cyhzZWxmKToKLSAgICAgICAgb3duZXJfdG9feWVh
cnMgPSBkaWN0KCkKLSAgICAgICAgY29weXJpZ2h0WWVhclJlZ0V4cCA9IHJlLmNvbXBpbGUociIo
XGR7NH0pWywgXXswLDJ9IikKLSAgICAgICAgb3duZXJTdGFydFJlZ0V4cCA9IHJlLmNvbXBpbGUo
ciJbXlxkLCBdIikKLQotICAgICAgICAjIFJldHVybnMgZGVkdXBsaWNhdGVkIGNvcHlyaWdodHMg
a2V5ZWQgb24gdGhlIG93bmVyLgotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9jb3B5cmlnaHRf
bGluZXM6Ci0gICAgICAgICAgICB5ZWFycyA9IHNldChjb3B5cmlnaHRZZWFyUmVnRXhwLmZpbmRh
bGwobGluZSkpCi0gICAgICAgICAgICBvd25lckluZGV4ID0gb3duZXJTdGFydFJlZ0V4cC5zZWFy
Y2gobGluZSkuc3RhcnQoKQotICAgICAgICAgICAgb3duZXIgPSBsaW5lW293bmVySW5kZXg6XQot
ICAgICAgICAgICAgbG9nLmRlYnVnKCJGb3VuZCB5ZWFyczogJXMgYW5kIG93bmVyOiAlcyIgJSAo
eWVhcnMsIG93bmVyKSkKLSAgICAgICAgICAgIGlmIG93bmVyIG5vdCBpbiBvd25lcl90b195ZWFy
czoKLSAgICAgICAgICAgICAgICBvd25lcl90b195ZWFyc1tvd25lcl0gPSBzZXQoKQotCi0gICAg
ICAgICAgICBvd25lcl90b195ZWFyc1tvd25lcl0gPSBvd25lcl90b195ZWFyc1tvd25lcl0udW5p
b24oeWVhcnMpCi0KLSAgICAgICAgcmVzdWx0ID0gW10KLQotICAgICAgICBmb3Igb3duZXIsIHll
YXJzIGluIG93bmVyX3RvX3llYXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzb3J0ZWRfeWVhcnMg
PSBsaXN0KHllYXJzKQotICAgICAgICAgICAgc29ydGVkX3llYXJzLnNvcnQoKQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiJXMgJXMiICUgKCcsICcuam9pbihzb3J0ZWRfeWVhcnMpLCBvd25l
cikpCi0KLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIGFsbF9mdW5jdGlvbnMoc2Vs
Zik6Ci0gICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5vYmpl
Y3RzOgotICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChvYmplY3QuZnVuY3Rpb25zKQotCi0gICAg
ICAgIHJlc3VsdC5zb3J0KCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIGFsbF9p
bnRlcm5hbF9mdW5jdGlvbnMoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAgIGZv
ciBvYmplY3QgaW4gW28gZm9yIG8gaW4gc2VsZi5vYmplY3RzIGlmICdpbnRlcm5hbCcgaW4gby5h
bm5vdGF0aW9uc106Ci0gICAgICAgICAgICByZXN1bHQuZXh0ZW5kKG9iamVjdC5mdW5jdGlvbnMp
Ci0KLSAgICAgICAgcmVzdWx0LnNvcnQoKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICAj
IFByaXZhdGUgbWV0aG9kcy4KLQotICAgIGRlZiBfcGFyc2VfY29weXJpZ2h0X2xpbmVzKHNlbGYs
IHRleHQpOgotICAgICAgICBsaWNlbnNlQmxvY2sgPSBtdWx0aWxpbmVDb21tZW50UmVnRXhwLmZp
bmRhbGwodGV4dClbMF0KLSAgICAgICAgbGljZW5zZUJsb2NrID0gbGljZW5zZUJsb2NrWzpsaWNl
bnNlQmxvY2suaW5kZXgoIlJlZGlzdHJpYnV0aW9uIildCi0KLSAgICAgICAgY29weXJpZ2h0TGlu
ZXMgPSBbVGVtcGxhdGVzLkRlZmF1bHRDb3B5cmlnaHRdCi0gICAgICAgIGZvciBsaW5lIGluIGxp
Y2Vuc2VCbG9jay5zcGxpdCgiXG4iKToKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2Uo
Ii8qIiwgIiIpCi0gICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIqLyIsICIiKQotICAg
ICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiKiIsICIiKQotICAgICAgICAgICAgbGluZSA9
IGxpbmUucmVwbGFjZSgiQ29weXJpZ2h0IiwgIiIpCi0gICAgICAgICAgICBsaW5lID0gbGluZS5y
ZXBsYWNlKCJjb3B5cmlnaHQiLCAiIikKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2Uo
IihDKSIsICIiKQotICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiKGMpIiwgIiIpCi0g
ICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0KLSAgICAgICAgICAgIGlmIGxlbihsaW5l
KSA9PSAwOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGNvcHlyaWdo
dExpbmVzLmFwcGVuZChsaW5lKQotCi0gICAgICAgIHJldHVybiBjb3B5cmlnaHRMaW5lcwotCi0g
ICAgZGVmIF9wYXJzZV9hbm5vdGF0aW9ucyhzZWxmLCB0ZXh0KToKLSAgICAgICAgYW5ub3RhdGlv
bnMgPSB7fQotCi0gICAgICAgIGZvciBtYXRjaCBpbiBrZXlWYWx1ZUFubm90YXRpb25Db21tZW50
UmVnRXhwLmZpbmRpdGVyKHRleHQpOgotICAgICAgICAgICAgKGtleSwgdmFsdWUpID0gbWF0Y2gu
Z3JvdXAoMSwgMikKLSAgICAgICAgICAgIGxvZy5kZWJ1ZygiRm91bmQgYW5ub3RhdGlvbjogJyVz
JyA9PiAnJXMnIiAlIChrZXksIHZhbHVlKSkKLSAgICAgICAgICAgIGlmIGtleSBpbiBhbm5vdGF0
aW9uczoKLSAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiRHVwbGljYXRlIGFu
bm90YXRpb24gZm91bmQ6ICVzIiAlIGtleSkKLQotICAgICAgICAgICAgYW5ub3RhdGlvbnNba2V5
XSA9IHZhbHVlCi0KLSAgICAgICAgZm9yIG1hdGNoIGluIGZsYWdBbm5vdGF0aW9uQ29tbWVudFJl
Z0V4cC5maW5kaXRlcih0ZXh0KToKLSAgICAgICAgICAgIGtleSA9IG1hdGNoLmdyb3VwKDEpCi0g
ICAgICAgICAgICBsb2cuZGVidWcoIkZvdW5kIGFubm90YXRpb246ICclcycgPT4gJ1RSVUUnIiAl
IGtleSkKLSAgICAgICAgICAgIGlmIGtleSBpbiBhbm5vdGF0aW9uczoKLSAgICAgICAgICAgICAg
ICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiRHVwbGljYXRlIGFubm90YXRpb24gZm91bmQ6ICVzIiAl
IGtleSkKLQotICAgICAgICAgICAgYW5ub3RhdGlvbnNba2V5XSA9IFRydWUKLQotICAgICAgICBy
ZXR1cm4gYW5ub3RhdGlvbnMKLQotICAgIGRlZiBfcGFyc2VfZnVuY3Rpb25zKHNlbGYsIHRleHQp
OgotICAgICAgICB0ZXh0ID0gbXVsdGlsaW5lQ29tbWVudFJlZ0V4cC5zdWIoIi8qKi8iLCBzaW5n
bGVMaW5lQ29tbWVudFJlZ0V4cC5zdWIoIi8vXG4iLCB0ZXh0KSkKLQotICAgICAgICBtYXRjaGVz
ID0gW2Z1bmMgZm9yIGZ1bmMgaW4gZnVuY3Rpb25IZWFkUmVnRXhwLmZpbmRpdGVyKHRleHQpXQot
ICAgICAgICBmdW5jdGlvbkJvdW5kcyA9IFtdCi0gICAgICAgIHN0YXJ0ID0gMAotICAgICAgICBl
bmQgPSAwCi0gICAgICAgIGZvciBtYXRjaCBpbiBtYXRjaGVzOgotICAgICAgICAgICAgc3RhcnQg
PSBtYXRjaC5zdGFydCgpCi0gICAgICAgICAgICBpZiBzdGFydCA8IGVuZDoKLSAgICAgICAgICAg
ICAgICBjb250aW51ZQotICAgICAgICAgICAgZW5kID0gbWF0Y2guZW5kKCkKLSAgICAgICAgICAg
IHdoaWxlIHRleHRbZW5kXSAhPSAneyc6Ci0gICAgICAgICAgICAgICAgZW5kID0gZW5kICsgMQot
ICAgICAgICAgICAgZGVwdGggPSAxCi0gICAgICAgICAgICBlbmQgPSBlbmQgKyAxCi0gICAgICAg
ICAgICB3aGlsZSBkZXB0aCA+IDA6Ci0gICAgICAgICAgICAgICAgaWYgdGV4dFtlbmRdID09ICd7
JzoKLSAgICAgICAgICAgICAgICAgICAgZGVwdGggPSBkZXB0aCArIDEKLSAgICAgICAgICAgICAg
ICBlbGlmIHRleHRbZW5kXSA9PSAnfSc6Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoID0gZGVw
dGggLSAxCi0gICAgICAgICAgICAgICAgZW5kID0gZW5kICsgMQotICAgICAgICAgICAgZnVuY3Rp
b25Cb3VuZHMuYXBwZW5kKChzdGFydCwgZW5kKSkKLQotICAgICAgICBmdW5jdGlvblN0cmluZ3Mg
PSBbdGV4dFtzdGFydDplbmRdLnN0cmlwKCkgZm9yIChzdGFydCwgZW5kKSBpbiBmdW5jdGlvbkJv
dW5kc10KLSAgICAgICAgcmV0dXJuIG1hcChCdWlsdGluRnVuY3Rpb24uZnJvbVN0cmluZywgZnVu
Y3Rpb25TdHJpbmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
YnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5MDdhNmQ3MTdjOTEwY2IwNzI5OTUwOWM2MWRmODQ2YTljNzAxZWZjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDIxNiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJp
Z2h0IChjKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5
cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBCdWlsdGlucyBnZW5lcmF0b3IgdGVt
cGxhdGVzLCB3aGljaCBjYW4gYmUgZmlsbGVkIHdpdGggc3RyaW5nLlRlbXBsYXRlLgotCi0KLWNs
YXNzIEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzOgotCi0gICAgRGVmYXVsdENvcHlyaWdodCA9
ICIyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iCi0gICAgTGljZW5zZVRleHQg
PSAoCi0gICAgIiIiUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLVRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi1C
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi1DT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi1JTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSIiIikKLQotICAgIERvTm90RWRpdFdhcm5pbmcgPSAoCi0gICAgIiIiLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEph
dmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSIiIikKLQotICAgIEhl
YWRlckluY2x1ZGVHdWFyZCA9ICgKLSAgICAiIiIjcHJhZ21hIG9uY2UiIiIpCi0KLSAgICBOYW1l
c3BhY2VUb3AgPSAoCi0gICAgIiIibmFtZXNwYWNlICR7bmFtZXNwYWNlfSB7IiIiKQotCi0gICAg
TmFtZXNwYWNlQm90dG9tID0gKAotICAgICIiIn0gLy8gbmFtZXNwYWNlICR7bmFtZXNwYWNlfSIi
IikKLQotICAgIENvbWJpbmVkSGVhZGVyU3RhdGljTWFjcm9zID0gKAotICAgICIiIiNkZWZpbmUg
REVDTEFSRV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlk
ZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLSAgICBKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZSog
Y29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJik7Ci0KLSR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hf
QlVJTFRJTl9DT0RFKERFQ0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9C
VUlMVElOX0dFTkVSQVRPUiIiIikKLQotICAgIFNlcGFyYXRlSGVhZGVyU3RhdGljTWFjcm9zID0g
KAotICAgICIiIiNkZWZpbmUgREVDTEFSRV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVu
Y3Rpb25OYW1lLCBvdmVycmlkZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLSAgICBKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJik7Ci0KLSR7bWFj
cm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9DT0RFKERFQ0xBUkVfQlVJ
TFRJTl9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9CVUlMVElOX0dFTkVSQVRPUiIiIikKLQot
ICAgIENvbWJpbmVkSlNDSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3MgPSAoCi0gICAgIiIiCi0j
ZGVmaW5lIERFRklORV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBv
dmVycmlkZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLUpTQzo6RnVuY3Rpb25FeGVjdXRhYmxl
KiBjb2RlTmFtZSMjR2VuZXJhdG9yKEpTQzo6Vk0mIHZtKSBcXAote1xcCi0gICAgcmV0dXJuIHZt
LmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5jb2RlTmFtZSMjRXhlY3V0YWJsZSgpLT5saW5rKHZtLCB2
bS5idWlsdGluRXhlY3V0YWJsZXMoKS0+Y29kZU5hbWUjI1NvdXJjZSgpLCBzdGQ6Om51bGxvcHQs
IHNfIyNjb2RlTmFtZSMjSW50cmluc2ljKTsgXAotfQotJHttYWNyb1ByZWZpeH1fRk9SRUFDSF9C
VUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9CVUlM
VElOX0dFTkVSQVRPUgotIiIiKQotCi0gICAgU2VwYXJhdGVKU0NJbXBsZW1lbnRhdGlvblN0YXRp
Y01hY3JvcyA9ICgKLSAgICAiIiIKLSNkZWZpbmUgREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKGNv
ZGVOYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJyaWRkZW5OYW1lLCBhcmd1bWVudENvdW50KSBcXAot
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNHZW5lcmF0b3IoSlNDOjpWTSYgdm0p
IFxcCi17XFwKLSAgICByZXR1cm4gdm0uYnVpbHRpbkV4ZWN1dGFibGVzKCktPmNvZGVOYW1lIyNF
eGVjdXRhYmxlKCktPmxpbmsodm0sIHZtLmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5jb2RlTmFtZSMj
U291cmNlKCksIHN0ZDo6bnVsbG9wdCwgc18jI2NvZGVOYW1lIyNJbnRyaW5zaWMpOyBcCi19Ci0k
e21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShERUZJTkVf
QlVJTFRJTl9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SCi0iIiIp
Ci0KLSAgICBDb21iaW5lZFdlYkNvcmVJbXBsZW1lbnRhdGlvblN0YXRpY01hY3JvcyA9ICgKLSAg
ICAgICAgIiIiCi0jZGVmaW5lIERFRklORV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVu
Y3Rpb25OYW1lLCBvdmVycmlkZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKLUpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlKiBjb2RlTmFtZSMjR2VuZXJhdG9yKEpTQzo6Vk0mIHZtKSBcXAote1xcCi0g
ICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOyBcXAotICAgIHJldHVybiBjbGllbnREYXRhLT5idWlsdGluRnVu
Y3Rpb25zKCkuJHtvYmplY3ROYW1lTEN9QnVpbHRpbnMoKS5jb2RlTmFtZSMjRXhlY3V0YWJsZSgp
LT5saW5rKHZtLCBjbGllbnREYXRhLT5idWlsdGluRnVuY3Rpb25zKCkuJHtvYmplY3ROYW1lTEN9
QnVpbHRpbnMoKS5jb2RlTmFtZSMjU291cmNlKCksIHN0ZDo6bnVsbG9wdCwgc18jI2NvZGVOYW1l
IyNJbnRyaW5zaWMpOyBcXAotfQotJHttYWNyb1ByZWZpeH1fRk9SRUFDSF9CVUlMVElOX0NPREUo
REVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9CVUlMVElOX0dFTkVSQVRP
UgotIiIiKQotCi0gICAgU2VwYXJhdGVXZWJDb3JlSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3Mg
PSAoCi0gICAgICAgICIiIgotI2RlZmluZSBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IoY29kZU5h
bWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3VtZW50Q291bnQpIFxcCi1KU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJiB2bSkgXFwK
LXtcXAotICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsgXFwKLSAgICByZXR1cm4gY2xpZW50RGF0YS0+YnVp
bHRpbkZ1bmN0aW9ucygpLiR7b2JqZWN0TmFtZUxDfUJ1aWx0aW5zKCkuY29kZU5hbWUjI0V4ZWN1
dGFibGUoKS0+bGluayh2bSwgY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLiR7b2JqZWN0
TmFtZUxDfUJ1aWx0aW5zKCkuY29kZU5hbWUjI1NvdXJjZSgpLCBzdGQ6Om51bGxvcHQsIHNfIyNj
b2RlTmFtZSMjSW50cmluc2ljKTsgXFwKLX0KLSR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmpl
Y3RNYWNyb31fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IKLSIiIikKLQotICAgIFNlcGFyYXRlSGVhZGVyV3JhcHBl
ckJvaWxlcnBsYXRlID0gKAotICAgICIiImNsYXNzICR7b2JqZWN0TmFtZX1CdWlsdGluc1dyYXBw
ZXIgOiBwcml2YXRlIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNp
dCAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyKEpTQzo6Vk0qIHZtKQotICAgICAgICA6IG1f
dm0oKnZtKQotICAgICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JV
SUxUSU5fRlVOQ1RJT05fTkFNRShJTklUSUFMSVpFX0JVSUxUSU5fTkFNRVMpCi0jZGVmaW5lIElO
SVRJQUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUyhuYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJy
aWRkZW5OYW1lLCBsZW5ndGgpICwgbV8jI25hbWUjI1NvdXJjZShKU0M6Om1ha2VTb3VyY2UoU3Ry
aW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoc18jI25hbWUsIGxlbmd0aCksIHsgfSkpCi0gICAg
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9DT0RFKElO
SVRJQUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUykKLSN1bmRlZiBJTklUSUFMSVpFX0JVSUxU
SU5fU09VUkNFX01FTUJFUlMKLSAgICB7Ci0gICAgfQotCi0jZGVmaW5lIEVYUE9TRV9CVUlMVElO
X0VYRUNVVEFCTEVTKG5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGxlbmd0aCkg
XFwKLSAgICBKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuYW1lIyNFeGVjdXRhYmxl
KCk7IFxcCi0gICAgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBuYW1lIyNTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtXyMjbmFtZSMjU291cmNlOyB9Ci0gICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8k
e29iamVjdE1hY3JvfV9CVUlMVElOX0NPREUoRVhQT1NFX0JVSUxUSU5fRVhFQ1VUQUJMRVMpCi0j
dW5kZWYgRVhQT1NFX0JVSUxUSU5fRVhFQ1VUQUJMRVMKLQotICAgICR7bWFjcm9QcmVmaXh9X0ZP
UkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJ
Tl9JREVOVElGSUVSX0FDQ0VTU09SKQotCi0gICAgdm9pZCBleHBvcnROYW1lcygpOwotCi1wcml2
YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0KLSAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7
b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0JVSUxUSU5fTkFNRVMp
Ci0KLSNkZWZpbmUgREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKG5hbWUsIGZ1bmN0aW9u
TmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGxlbmd0aCkgXFwKLSAgICBKU0M6OlNvdXJjZUNvZGUgbV8j
I25hbWUjI1NvdXJjZTtcXAotICAgIEpTQzo6V2VhazxKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlPiBtXyMjbmFtZSMjRXhlY3V0YWJsZTsKLSAgICAke21hY3JvUHJlZml4fV9GT1JFQUNI
XyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJF
UlMpCi0jdW5kZWYgREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTCi0KLX07Ci0KLSNkZWZp
bmUgREVGSU5FX0JVSUxUSU5fRVhFQ1VUQUJMRVMobmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlk
ZGVuTmFtZSwgbGVuZ3RoKSBcXAotaW5saW5lIEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqICR7b2JqZWN0TmFtZX1CdWlsdGluc1dyYXBwZXI6Om5hbWUjI0V4ZWN1dGFibGUoKSBcXAot
e1xcCi0gICAgaWYgKCFtXyMjbmFtZSMjRXhlY3V0YWJsZSkge1xcCi0gICAgICAgIEpTQzo6SWRl
bnRpZmllciBleGVjdXRhYmxlTmFtZSA9IGZ1bmN0aW9uTmFtZSMjUHVibGljTmFtZSgpO1xcCi0g
ICAgICAgIGlmIChvdmVycmlkZGVuTmFtZSlcXAotICAgICAgICAgICAgZXhlY3V0YWJsZU5hbWUg
PSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fdm0sIG92ZXJyaWRkZW5OYW1lKTtcXAot
ICAgICAgICBtXyMjbmFtZSMjRXhlY3V0YWJsZSA9IEpTQzo6V2VhazxKU0M6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlPihKU0M6OmNyZWF0ZUJ1aWx0aW5FeGVjdXRhYmxlKG1fdm0sIG1fIyNu
YW1lIyNTb3VyY2UsIGV4ZWN1dGFibGVOYW1lLCBzXyMjbmFtZSMjQ29uc3RydWN0QWJpbGl0eSks
IHRoaXMsICZtXyMjbmFtZSMjRXhlY3V0YWJsZSk7XFwKLSAgICB9XFwKLSAgICByZXR1cm4gbV8j
I25hbWUjI0V4ZWN1dGFibGUuZ2V0KCk7XFwKLX0KLSR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtv
YmplY3RNYWNyb31fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTKQotI3Vu
ZGVmIERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTCi0KLWlubGluZSB2b2lkICR7b2JqZWN0TmFt
ZX1CdWlsdGluc1dyYXBwZXI6OmV4cG9ydE5hbWVzKCkKLXsKLSNkZWZpbmUgRVhQT1JUX0ZVTkNU
SU9OX05BTUUobmFtZSkgbV92bS5wcm9wZXJ0eU5hbWVzLT5hcHBlbmRFeHRlcm5hbE5hbWUobmFt
ZSMjUHVibGljTmFtZSgpLCBuYW1lIyNQcml2YXRlTmFtZSgpKTsKLSAgICAke21hY3JvUHJlZml4
fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShFWFBPUlRfRlVO
Q1RJT05fTkFNRSkKLSN1bmRlZiBFWFBPUlRfRlVOQ1RJT05fTkFNRQotfSIiIikKLQotICAgIFNl
cGFyYXRlSGVhZGVySW50ZXJuYWxGdW5jdGlvbnNCb2lsZXJwbGF0ZSA9ICgKLSAgICAiIiJjbGFz
cyAke29iamVjdE5hbWV9QnVpbHRpbkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
JHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0pIDogbV92bSh2bSkgeyB9
Ci0KLSAgICB2b2lkIGluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgdmlzaXQo
SlNDOjpTbG90VmlzaXRvciYpOwotCi1wdWJsaWM6Ci0gICAgSlNDOjpWTSYgbV92bTsKLQotI2Rl
ZmluZSBERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMoZnVuY3Rpb25OYW1lKSBcXAotICAg
IEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV8jI2Z1bmN0aW9uTmFtZSMjRnVu
Y3Rpb247Ci0gICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElO
X0ZVTkNUSU9OX05BTUUoREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQotI3VuZGVmIERF
Q0xBUkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUwotfTsKLQotaW5saW5lIHZvaWQgJHtvYmplY3RO
YW1lfUJ1aWx0aW5GdW5jdGlvbnM6OmluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotI2RlZmluZSBFWFBPUlRfRlVOQ1RJT04oY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwg
b3ZlcnJpZGRlbk5hbWUsIGxlbmd0aClcXAotICAgIG1fIyNmdW5jdGlvbk5hbWUjI0Z1bmN0aW9u
LnNldChtX3ZtLCAmZ2xvYmFsT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShtX3ZtLCBj
b2RlTmFtZSMjR2VuZXJhdG9yKG1fdm0pLCAmZ2xvYmFsT2JqZWN0KSk7Ci0gICAgJHttYWNyb1By
ZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0NPREUoRVhQT1JUX0ZVTkNUSU9O
KQotI3VuZGVmIEVYUE9SVF9GVU5DVElPTgotfQotCi1pbmxpbmUgdm9pZCAke29iamVjdE5hbWV9
QnVpbHRpbkZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSNk
ZWZpbmUgVklTSVRfRlVOQ1RJT04obmFtZSkgdmlzaXRvci5hcHBlbmQobV8jI25hbWUjI0Z1bmN0
aW9uKTsKLSAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5f
RlVOQ1RJT05fTkFNRShWSVNJVF9GVU5DVElPTikKLSN1bmRlZiBWSVNJVF9GVU5DVElPTgotfQot
IiIiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvY3NzbWluLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvY3NzbWluLnB5CmluZGV4IGMzNGNkMDgx
Yjk0ZGFlY2FkYmMyOGM3YTI4MTZiMGMwYmQyM2MxNTYuLmM0YzhmMjlhZjhlY2NlNjc2OGQ0YmFj
MDg1NTY2N2ZjZDUwMzM2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL2Nzc21pbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9jc3NtaW4u
cHkKQEAgLTQ2LDQgKzQ2LDcgQEAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBpZiBz
eXMudmVyc2lvbl9pbmZvWzBdID09IDMgYW5kIHN5cy5zdGRpbi5lbmNvZGluZyAhPSAnVVRGLTgn
OgogICAgICAgICBpbXBvcnQgaW8KICAgICAgICAgc3lzLnN0ZGluID0gaW8uVGV4dElPV3JhcHBl
cihzeXMuc3RkaW4uYnVmZmVyLCBlbmNvZGluZz0nVVRGLTgnKQorICAgIGlmIHN5cy52ZXJzaW9u
X2luZm9bMF0gPT0gMyBhbmQgc3lzLnN0ZG91dC5lbmNvZGluZyAhPSAnVVRGLTgnOgorICAgICAg
ICBpbXBvcnQgaW8KKyAgICAgICAgc3lzLnN0ZG91dCA9IGlvLlRleHRJT1dyYXBwZXIoc3lzLnN0
ZG91dC5idWZmZXIsIGVuY29kaW5nPSdVVEYtOCcpCiAgICAgc3lzLnN0ZG91dC53cml0ZShjc3Nt
aW5pZnkoc3lzLnN0ZGluLnJlYWQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CmluZGV4IGMzZTQ5OGE5NWViMmFlZjVl
NmJmYmQ3NDA4ZTM5MjkzNmY3ODYwNDguLjUxYjEwMTY0OTIxOGM1NjY0NDkyNTBlZTBiY2FhOTYw
YTcxNWNiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dl
bmVyYXRlLWpzLWJ1aWx0aW5zLnB5CkBAIC0zMSwxNCArMzEsMTQgQEAgaW1wb3J0IGZubWF0Y2gK
IGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBvcworaW1wb3J0IHN5cwog
CiBsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMn
LCBsZXZlbD1sb2dnaW5nLkVSUk9SKQogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CiAKIGZyb20gbGF6eXdyaXRlciBpbXBvcnQgTGF6eUZpbGVXcml0ZXIKIAotZnJvbSBidWlsdGlu
cyBpbXBvcnQgKgotCitmcm9tIHdrYnVpbHRpbnMgaW1wb3J0ICoKIAogZGVmIGNvbmNhdGVuYXRl
ZF9vdXRwdXRfZmlsZW5hbWUoYnVpbHRpbnNfZmlsZXMsIGZyYW1ld29ya19uYW1lLCBnZW5lcmF0
ZV9vbmx5X3dyYXBwZXJfZmlsZXMpOgogICAgIGlmIGdlbmVyYXRlX29ubHlfd3JhcHBlcl9maWxl
czoKQEAgLTQ2LDYgKzQ2LDEyIEBAIGRlZiBjb25jYXRlbmF0ZWRfb3V0cHV0X2ZpbGVuYW1lKGJ1
aWx0aW5zX2ZpbGVzLCBmcmFtZXdvcmtfbmFtZSwgZ2VuZXJhdGVfb25seV93CiAgICAgcmV0dXJu
IG9zLnBhdGguYmFzZW5hbWUoYnVpbHRpbnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnCiAKIAorZGVm
IGRvb3BlbihmaWxlLCBtb2RlKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yID09IDI6
CisgICAgICAgIHJldHVybiBvcGVuKGZpbGUsIG1vZGUpCisgICAgZWxzZToKKyAgICAgICAgcmV0
dXJuIG9wZW4oZmlsZSwgbW9kZSwgZW5jb2Rpbmc9IlVURi04IikKKwogZGVmIGdlbmVyYXRlX2Jp
bmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGg9Tm9uZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVfb3V0cHV0PUZhbHNl
LApAQCAtNTksNyArNjUsNyBAQCBkZWYgZ2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5zX2Zp
bGVzKGJ1aWx0aW5zX2ZpbGVzPVtdLAogICAgIG1vZGVsID0gQnVpbHRpbnNDb2xsZWN0aW9uKGZy
YW1ld29ya19uYW1lPWZyYW1ld29ya19uYW1lKQogCiAgICAgZm9yIGZpbGVwYXRoIGluIGJ1aWx0
aW5zX2ZpbGVzOgotICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyIikgYXMgZmlsZToKKyAg
ICAgICAgd2l0aCBkb29wZW4oZmlsZXBhdGgsICJyIikgYXMgZmlsZToKICAgICAgICAgICAgIGZp
bGVfdGV4dCA9IGZpbGUucmVhZCgpCiAgICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmJh
c2VuYW1lKGZpbGVwYXRoKQogCkBAIC0xNDYsNyArMTUyLDcgQEAgaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKICAgICAgICAgZm9yIGZpbGVwYXRoIGluIG9zLmxpc3RkaXIoYXJnX29wdGlvbnMu
aW5wdXRfZGlyZWN0b3J5KToKICAgICAgICAgICAgIGlucHV0X2ZpbGVwYXRocy5hcHBlbmQob3Mu
cGF0aC5qb2luKGFyZ19vcHRpb25zLmlucHV0X2RpcmVjdG9yeSwgZmlsZXBhdGgpKQogCi0gICAg
aW5wdXRfZmlsZXBhdGhzID0gc29ydGVkKGZpbHRlcihsYW1iZGEgbmFtZTogZm5tYXRjaC5mbm1h
dGNoKG5hbWUsICcqLmpzJyksIGlucHV0X2ZpbGVwYXRocykpCisgICAgaW5wdXRfZmlsZXBhdGhz
ID0gc29ydGVkKFtuYW1lIGZvciBuYW1lIGluIGlucHV0X2ZpbGVwYXRocyBpZiBmbm1hdGNoLmZu
bWF0Y2gobmFtZSwgJyouanMnKV0pCiAKICAgICBvcHRpb25zID0gewogICAgICAgICAnb3V0cHV0
X3BhdGgnOiBhcmdfb3B0aW9ucy5vdXRwdXRfZGlyZWN0b3J5LApAQCAtMTU5LDcgKzE2NSw3IEBA
IGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAKICAgICBsb2cuZGVidWcoIkdlbmVyYXRpbmcg
Y29kZSBmb3IgYnVpbHRpbnMuIikKICAgICBsb2cuZGVidWcoIlBhcnNlZCBvcHRpb25zOiIpCi0g
ICAgZm9yIG9wdGlvbiwgdmFsdWUgaW4gb3B0aW9ucy5pdGVtcygpOgorICAgIGZvciBvcHRpb24s
IHZhbHVlIGluIGxpc3Qob3B0aW9ucy5pdGVtcygpKToKICAgICAgICAgbG9nLmRlYnVnKCIgICAg
JXM6ICVzIiAlIChvcHRpb24sIHZhbHVlKSkKICAgICBsb2cuZGVidWcoIiIpCiAgICAgbG9nLmRl
YnVnKCJJbnB1dCBmaWxlczoiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5vbmljYWxpemVMYW5ndWFnZS5weQppbmRl
eCA2OWYzYmU4MzdjY2VhZDNkMjBmOWI0NzZiMGZiMmEzODc2OTZmNmMwLi5iOWEwMjhhNjAwNGM3
ZWE3YjJlMGJiZDMxZTk0ZjU5Zjk4ZTQyMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5vbmljYWxpemVMYW5ndWFnZS5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5vbmljYWxpemVMYW5n
dWFnZS5weQpAQCAtNTAsNiArNTAsMTMgQEAgZGVmIG9wZW5PckV4aXQocGF0aCwgbW9kZSk6CiAg
ICAgICAgIGV4aXQoMSkKIAogCitkZWYgZG93cml0ZShmaWxlLCBzdHIpOgorICAgIGlmIHN5cy52
ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgZmlsZS53cml0ZShzdHIpCisgICAgZWxz
ZToKKyAgICAgICAgZmlsZS53cml0ZShieXRlcyhzdHIsICJ1dGYtOCIpKQorCisKIGNsYXNzIFN1
YnRhZ1JlZ2lzdHJ5OgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5sYW5n
dWFnZU1hcCA9IHt9CkBAIC0xMDksNDMgKzExNiw0MyBAQCBjbGFzcyBTdWJ0YWdSZWdpc3RyeToK
IAogICAgIGRlZiBkdW1wKHNlbGYsIGZpbGUpOgogICAgICAgICBpZiBzZWxmLmZpbGVEYXRlOgot
ICAgICAgICAgICAgZmlsZS53cml0ZSgiLy8gbGFuZ3VhZ2Utc3VidGFnLXJlZ2lzdHJ5IGZpbGUg
ZGF0ZToge31cbiIuZm9ybWF0KHNlbGYuZmlsZURhdGUpKQotICAgICAgICBmaWxlLndyaXRlKCJc
biNwcmFnbWEgb25jZVxuIikKLSAgICAgICAgZmlsZS53cml0ZSgiXG4jaWYgRU5BQkxFKElOVEwp
XG4iKQotICAgICAgICBmaWxlLndyaXRlKCJcbm5hbWVzcGFjZSBKU0Mge1xuIikKKyAgICAgICAg
ICAgIGRvd3JpdGUoZmlsZSwgIi8vIGxhbmd1YWdlLXN1YnRhZy1yZWdpc3RyeSBmaWxlIGRhdGU6
IHt9XG4iLmZvcm1hdChzZWxmLmZpbGVEYXRlKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG4j
cHJhZ21hIG9uY2VcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIlxuI2lmIEVOQUJMRShJTlRM
KVxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG5uYW1lc3BhY2UgSlNDIHtcbiIpCiAgICAg
ICAgIHNlbGYuZHVtcExvb2t1cChmaWxlLCAiaW50bFByZWZlcnJlZExhbmd1YWdlVGFnIiwgc2Vs
Zi5sYW5ndWFnZU1hcCkKICAgICAgICAgc2VsZi5kdW1wTG9va3VwKGZpbGUsICJpbnRsUHJlZmVy
cmVkRXh0bGFuZ1RhZyIsIHNlbGYuZXh0bGFuZ01hcCkKICAgICAgICAgc2VsZi5kdW1wTG9va3Vw
KGZpbGUsICJpbnRsUHJlZmVycmVkUmVnaW9uVGFnIiwgc2VsZi5yZWdpb25NYXApCiAgICAgICAg
IHNlbGYuZHVtcExvb2t1cChmaWxlLCAiaW50bFJlZHVuZGFudExhbmd1YWdlVGFnIiwgc2VsZi5y
ZWR1bmRhbnRNYXApCiAgICAgICAgIHNlbGYuZHVtcExvb2t1cChmaWxlLCAiaW50bEdyYW5kZmF0
aGVyZWRMYW5ndWFnZVRhZyIsIHNlbGYuZ3JhbmRmYXRoZXJlZE1hcCkKLSAgICAgICAgZmlsZS53
cml0ZSgiXG59IC8vIG5hbWVzcGFjZSBKU0NcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIlxuI2Vu
ZGlmIC8vIEVOQUJMRShJTlRMKVxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG59IC8vIG5h
bWVzcGFjZSBKU0NcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIlxuI2VuZGlmIC8vIEVOQUJM
RShJTlRMKVxuIikKIAogICAgIGRlZiBkdW1wTG9va3VwKHNlbGYsIGZpbGUsIG5hbWUsIG1hcCk6
Ci0gICAgICAgIGZpbGUud3JpdGUoIlxuc3RhdGljIFN0cmluZyB7fShjb25zdCBTdHJpbmcmIHRh
Zylcbnt7XG4iLmZvcm1hdChuYW1lKSkKLSAgICAgICAgZmlsZS53cml0ZSgiICAgIC8vIHt9IHBv
c3NpYmxlIHJlcGxhY2VtZW50c1xuIi5mb3JtYXQobGVuKG1hcCkpKQorICAgICAgICBkb3dyaXRl
KGZpbGUsICJcbnN0YXRpYyBTdHJpbmcge30oY29uc3QgU3RyaW5nJiB0YWcpXG57e1xuIi5mb3Jt
YXQobmFtZSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICAvLyB7fSBwb3NzaWJsZSByZXBs
YWNlbWVudHNcbiIuZm9ybWF0KGxlbihtYXApKSkKICAgICAgICAgIyBXZSBjb3VsZCBwaWNrIHRo
ZSBsb29rdXAgaW1wbGVtZW50YXRpb24gcGVyIG1hcCBpZiBkZXNpcmVkCiAgICAgICAgICMgQW5l
Y2RvdGFsIHBlcmY6IGlmID4gc3dpdGNoID4gaGFzaCAoc2xvd2VzdCkKICAgICAgICAgIyBDb2Rl
IGNvbXBsZXhpdHk6IHN3aXRjaCA+IGlmID4gaGFzaCAobGVhc3QgY29tcGxleCkKICAgICAgICAg
IyBBbGdvIGNvbXBsZXhpdHk6IGlmID0gTyhOKSA+IHN3aXRjaCA+IE8obG9nIE4pID4gaGFzaCA9
IE8oMSkgKGxlYXN0IGNvbXBsZXgpCiAgICAgICAgIHNlbGYuZHVtcElmTG9va3VwKGZpbGUsIG5h
bWUsIG1hcCkKLSAgICAgICAgZmlsZS53cml0ZSgifVxuIikKKyAgICAgICAgZG93cml0ZShmaWxl
LCAifVxuIikKIAogICAgIGRlZiBkdW1wSGFzaExvb2t1cChzZWxmLCBmaWxlLCBuYW1lLCBtYXAp
OgotICAgICAgICBmaWxlLndyaXRlKCIgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+PiBjYWNoZTtcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYgbWFwID0gY2FjaGUuZ2V0KCk7XG4iKQotICAgICAgICBmaWxl
LndyaXRlKCIgICAgaWYgKFVOTElLRUxZKG1hcC5pc0VtcHR5KCkpKSB7XG4iKQorICAgICAgICBk
b3dyaXRlKGZpbGUsICIgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+PiBjYWNoZTtcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYgbWFwID0gY2FjaGUuZ2V0KCk7XG4iKQorICAgICAgICBkb3dyaXRlKGZp
bGUsICIgICAgaWYgKFVOTElLRUxZKG1hcC5pc0VtcHR5KCkpKSB7XG4iKQogICAgICAgICBlbnRy
aWVzID0gWyIgICAgICAgIG1hcC5hZGQoXCJ7fVwiX3MsIFwie31cIl9zKTtcbiIuZm9ybWF0KGss
IHYpIGZvciBrLCB2IGluIG1hcC5pdGVtcygpXQogICAgICAgICBlbnRyaWVzLnNvcnQoKQotICAg
ICAgICBmaWxlLndyaXRlKCIiLmpvaW4oZW50cmllcykpCi0gICAgICAgIGZpbGUud3JpdGUoIiAg
ICB9XG4iKQotICAgICAgICBmaWxlLndyaXRlKCIgICAgcmV0dXJuIG1hcC5nZXQodGFnKTtcbiIp
CisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiIuam9pbihlbnRyaWVzKSkKKyAgICAgICAgZG93cml0
ZShmaWxlLCAiICAgIH1cbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICByZXR1cm4gbWFw
LmdldCh0YWcpO1xuIikKIAogICAgIGRlZiBkdW1wSWZMb29rdXAoc2VsZiwgZmlsZSwgbmFtZSwg
bWFwKToKICAgICAgICAgZW50cmllcyA9IFsiICAgIGlmICh0YWcgPT0gXCJ7fVwiKVxuICAgICAg
ICByZXR1cm4gXCJ7fVwiX3M7Ii5mb3JtYXQoaywgdikgZm9yIGssIHYgaW4gbWFwLml0ZW1zKCld
CiAgICAgICAgIGVudHJpZXMuc29ydCgpCi0gICAgICAgIGZpbGUud3JpdGUoIlxuIi5qb2luKGVu
dHJpZXMpKQotICAgICAgICBmaWxlLndyaXRlKCJcbiAgICByZXR1cm4gU3RyaW5nKCk7XG4iKQor
ICAgICAgICBkb3dyaXRlKGZpbGUsICJcbiIuam9pbihlbnRyaWVzKSkKKyAgICAgICAgZG93cml0
ZShmaWxlLCAiXG4gICAgcmV0dXJuIFN0cmluZygpO1xuIikKIAogICAgIGRlZiBkdW1wU3dpdGNo
TG9va3VwKHNlbGYsIGZpbGUsIG5hbWUsIG1hcCk6CiAgICAgICAgIHRyZWUgPSB7fQpAQCAtMTU3
LDI1ICsxNjQsMjUgQEAgY2xhc3MgU3VidGFnUmVnaXN0cnk6CiAgICAgICAgICAgICAgICAgbm9k
ZSA9IG5vZGVbY2hhcl0KICAgICAgICAgICAgIG5vZGVbInZhbHVlIl0gPSB2CiAgICAgICAgIHNl
bGYuZHVtcFN3aXRjaExvb2t1cFRyZWUoZmlsZSwgdHJlZSwgMCkKLSAgICAgICAgZmlsZS53cml0
ZSgiXG4gICAgcmV0dXJuIFN0cmluZygpO1xuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG4g
ICAgcmV0dXJuIFN0cmluZygpO1xuIikKIAogICAgIGRlZiBkdW1wU3dpdGNoTG9va3VwVHJlZShz
ZWxmLCBmaWxlLCB0cmVlLCBsZXZlbCk6CiAgICAgICAgIGluZGVudCA9ICIiLmxqdXN0KChsZXZl
bCArIDEpICogNCkKICAgICAgICAgaWYgInZhbHVlIiBpbiB0cmVlOgotICAgICAgICAgICAgZmls
ZS53cml0ZShpbmRlbnQgKyAiaWYgKHRhZy5sZW5ndGgoKSA9PSB7fSlcbiIuZm9ybWF0KGxldmVs
KSkKLSAgICAgICAgICAgIGZpbGUud3JpdGUoaW5kZW50ICsgIiAgICByZXR1cm4gXCJ7fVwiX3M7
XG4iLmZvcm1hdCh0cmVlWyJ2YWx1ZSJdKSkKKyAgICAgICAgICAgIGRvd3JpdGUoZmlsZSwgaW5k
ZW50ICsgImlmICh0YWcubGVuZ3RoKCkgPT0ge30pXG4iLmZvcm1hdChsZXZlbCkpCisgICAgICAg
ICAgICBkb3dyaXRlKGZpbGUsIGluZGVudCArICIgICAgcmV0dXJuIFwie31cIl9zO1xuIi5mb3Jt
YXQodHJlZVsidmFsdWUiXSkpCiAgICAgICAgICAgICBkZWwgdHJlZVsidmFsdWUiXQogICAgICAg
ICBrZXlzID0gdHJlZS5rZXlzKCkKICAgICAgICAga2V5cy5zb3J0KCkKICAgICAgICAgaWYgbGVu
KGtleXMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZmlsZS53cml0ZShpbmRl
bnQgKyAic3dpdGNoICh0YWdbe31dKSB7e1xuIi5mb3JtYXQobGV2ZWwpKQorICAgICAgICBkb3dy
aXRlKGZpbGUsIGluZGVudCArICJzd2l0Y2ggKHRhZ1t7fV0pIHt7XG4iLmZvcm1hdChsZXZlbCkp
CiAgICAgICAgIGZvciBrZXkgaW4ga2V5czoKLSAgICAgICAgICAgIGZpbGUud3JpdGUoaW5kZW50
ICsgImNhc2Uge306XG4iLmZvcm1hdChvcmQoa2V5KSkpCisgICAgICAgICAgICBkb3dyaXRlKGZp
bGUsIGluZGVudCArICJjYXNlIHt9OlxuIi5mb3JtYXQob3JkKGtleSkpKQogICAgICAgICAgICAg
c2VsZi5kdW1wU3dpdGNoTG9va3VwVHJlZShmaWxlLCB0cmVlW2tleV0sIGxldmVsICsgMSkKLSAg
ICAgICAgICAgIGZpbGUud3JpdGUoaW5kZW50ICsgIiAgICBicmVhaztcbiIpCi0gICAgICAgIGZp
bGUud3JpdGUoaW5kZW50ICsgImRlZmF1bHQ6IGJyZWFrO1xuIikKLSAgICAgICAgZmlsZS53cml0
ZShpbmRlbnQgKyAifVxuIikKKyAgICAgICAgICAgIGRvd3JpdGUoZmlsZSwgaW5kZW50ICsgIiAg
ICBicmVhaztcbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgaW5kZW50ICsgImRlZmF1bHQ6IGJy
ZWFrO1xuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCBpbmRlbnQgKyAifVxuIikKIAogCiBpZiBf
X25hbWVfXyA9PSAiX19tYWluX18iOgpAQCAtMTkxLDEyICsxOTgsMTIgQEAgaWYgX19uYW1lX18g
PT0gIl9fbWFpbl9fIjoKICAgICByZWdpc3RyeUZpbGUgPSBvcGVuT3JFeGl0KHJlZ2lzdHJ5UGF0
aCwgInIiKQogICAgIGludGxDYW5vbkhGaWxlID0gb3Blbk9yRXhpdChpbnRsQ2Fub25IUGF0aCwg
IndiIikKIAotICAgIGludGxDYW5vbkhGaWxlLndyaXRlKGhlYWRlcikKKyAgICBkb3dyaXRlKGlu
dGxDYW5vbkhGaWxlLCBoZWFkZXIpCiAKICAgICByZWdpc3RyeSA9IFN1YnRhZ1JlZ2lzdHJ5KCkK
ICAgICByZWdpc3RyeS5wYXJzZShyZWdpc3RyeUZpbGUpCiAgICAgcmVnaXN0cnkuZHVtcChpbnRs
Q2Fub25IRmlsZSkKIAotICAgIGludGxDYW5vbkhGaWxlLndyaXRlKGZvb3RlcikKKyAgICBkb3dy
aXRlKGludGxDYW5vbkhGaWxlLCBmb290ZXIpCiAKICAgICBleGl0KDApCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZVlhcnJVbmljb2RlUHJvcGVydHlU
YWJsZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZVlhcnJVbmlj
b2RlUHJvcGVydHlUYWJsZXMucHkKaW5kZXggZjhiYzY4MDVkNzBjMzFhZWI4ZDE1YjI0MWRmNTYw
N2MwNWI2MDdiOC4uYzYxYTc3MzU3NWM2NzkzYzQxODg4MzY3YmE5YmNkYmM4MmQyMjI2MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGVZYXJyVW5pY29k
ZVByb3BlcnR5VGFibGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dl
bmVyYXRlWWFyclVuaWNvZGVQcm9wZXJ0eVRhYmxlcy5weQpAQCAtOTAsNyArOTAsMTAgQEAgYWxp
YXNlcyA9IE5vbmUKIAogZGVmIG9wZW5PckV4aXQocGF0aCwgbW9kZSk6CiAgICAgdHJ5OgotICAg
ICAgICByZXR1cm4gb3BlbihwYXRoLCBtb2RlKQorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZv
Lm1ham9yID09IDIgb3IgbW9kZSA9PSAid2IiIG9yIG1vZGUgPT0gInJiIjoKKyAgICAgICAgICAg
IHJldHVybiBvcGVuKHBhdGgsIG1vZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1
cm4gb3BlbihwYXRoLCBtb2RlLCBlbmNvZGluZyA9ICJVVEYtOCIpCiAgICAgZXhjZXB0IElPRXJy
b3IgYXMgZToKICAgICAgICAgcHJpbnQoIkkvTyBlcnJvciBvcGVuaW5nIHswfSwgKHsxfSk6IHsy
fSIuZm9ybWF0KHBhdGgsIGUuZXJybm8sIGUuc3RyZXJyb3IpKQogICAgICAgICBleGl0KDEpCkBA
IC0yMTUsNiArMjE4LDEzIEBAIGNsYXNzIEFsaWFzZXM6CiAgICAgICAgIHJldHVybiBzZWxmLmFs
aWFzVG9TY3JpcHRbbmFtZV0KIAogCitkZWYgZG93cml0ZShmaWxlLCBzdHIpOgorICAgIGlmIHN5
cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgZmlsZS53cml0ZShzdHIpCisgICAg
ZWxzZToKKyAgICAgICAgZmlsZS53cml0ZShieXRlcyhzdHIsICJ1dGYtOCIpKQorCisKIGNsYXNz
IFByb3BlcnR5RGF0YToKICAgICBhbGxQcm9wZXJ0eURhdGEgPSBbXQogCkBAIC0zMjIsNyArMzMy
LDcgQEAgY2xhc3MgUHJvcGVydHlEYXRhOgogICAgICAgICBpbnNlcnRMb2NhdGlvbiA9IE5vbmUK
ICAgICAgICAgbG93Q29kZVBvaW50ID0gTm9uZQogICAgICAgICBoaWdoQ29kZVBvaW50ID0gTm9u
ZQotICAgICAgICBmb3IgaWR4IGluIHhyYW5nZShsZW4obWF0Y2hlcykpOgorICAgICAgICBmb3Ig
aWR4IGluIHJhbmdlKGxlbihtYXRjaGVzKSk6CiAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNb
aWR4XQogICAgICAgICAgICAgaWYgY29kZVBvaW50ID09IG1hdGNoICsgMToKICAgICAgICAgICAg
ICAgICBsb3dDb2RlUG9pbnQgPSBtYXRjaApAQCAtMzUxLDIyICszNjEsMjIgQEAgY2xhc3MgUHJv
cGVydHlEYXRhOgogICAgICAgICAgICAgbG93Q29kZVBvaW50ID0gY29kZVBvaW50CiAgICAgICAg
ICAgICBoaWdoQ29kZVBvaW50ID0gY29kZVBvaW50CiAKLSAgICAgICAgZm9yIGlkeCBpbiB4cmFu
Z2UobGVuKHJhbmdlcykpOgotICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAg
ICAgICAgaWYgbG93Q29kZVBvaW50ID49IHJhbmdlWzBdIGFuZCBoaWdoQ29kZVBvaW50IDw9IHJh
bmdlWzFdOgorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihyYW5nZXMpKToKKyAgICAgICAg
ICAgIGN1cl9yYW5nZSA9IHJhbmdlc1tpZHhdCisgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQg
Pj0gY3VyX3JhbmdlWzBdIGFuZCBoaWdoQ29kZVBvaW50IDw9IGN1cl9yYW5nZVsxXToKICAgICAg
ICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA8PSAocmFuZ2Vb
MV0gKyAxKSBhbmQgaGlnaENvZGVQb2ludCA+PSAocmFuZ2VbMF0gLSAxKToKKyAgICAgICAgICAg
IGlmIGxvd0NvZGVQb2ludCA8PSAoY3VyX3JhbmdlWzFdICsgMSkgYW5kIGhpZ2hDb2RlUG9pbnQg
Pj0gKGN1cl9yYW5nZVswXSAtIDEpOgogICAgICAgICAgICAgICAgIHdoaWxlIGlkeCA8IGxlbihy
YW5nZXMpIGFuZCBoaWdoQ29kZVBvaW50ID49IChyYW5nZXNbaWR4XVswXSAtIDEpOgotICAgICAg
ICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlc1tpZHhdCi0gICAgICAgICAgICAgICAgICAgIGxv
d0NvZGVQb2ludCA9IG1pbihsb3dDb2RlUG9pbnQsIHJhbmdlWzBdKQotICAgICAgICAgICAgICAg
ICAgICBoaWdoQ29kZVBvaW50ID0gbWF4KGhpZ2hDb2RlUG9pbnQsIHJhbmdlWzFdKQorICAgICAg
ICAgICAgICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNbaWR4XQorICAgICAgICAgICAgICAgICAg
ICBsb3dDb2RlUG9pbnQgPSBtaW4obG93Q29kZVBvaW50LCBjdXJfcmFuZ2VbMF0pCisgICAgICAg
ICAgICAgICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBtYXgoaGlnaENvZGVQb2ludCwgY3VyX3Jhbmdl
WzFdKQogICAgICAgICAgICAgICAgICAgICBkZWwgcmFuZ2VzW2lkeF0KLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgLSAocmFuZ2Vb
MV0gLSByYW5nZVswXSkgLSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291
bnQgPSBzZWxmLmNvZGVQb2ludENvdW50IC0gKGN1cl9yYW5nZVsxXSAtIGN1cl9yYW5nZVswXSkg
LSAxCiAKICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgKGxvd0NvZGVQb2ludCwg
aGlnaENvZGVQb2ludCkpCiAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNl
bGYuY29kZVBvaW50Q291bnQgKyAoaGlnaENvZGVQb2ludCAtIGxvd0NvZGVQb2ludCkgKyAxCiAg
ICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBlbGlmIGhpZ2hDb2RlUG9pbnQgPCBy
YW5nZVswXToKKyAgICAgICAgICAgIGVsaWYgaGlnaENvZGVQb2ludCA8IGN1cl9yYW5nZVswXToK
ICAgICAgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgIT0gaGlnaENvZGVQb2ludDoKICAgICAg
ICAgICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIChsb3dDb2RlUG9pbnQsIGhpZ2hDb2Rl
UG9pbnQpKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmNvZGVQb2ludENvdW50ID0gc2VsZi5j
b2RlUG9pbnRDb3VudCArIChoaWdoQ29kZVBvaW50IC0gbG93Q29kZVBvaW50KSArIDEKQEAgLTM4
NCw3ICszOTQsNyBAQCBjbGFzcyBQcm9wZXJ0eURhdGE6CiAKICAgICBkZWYgYWRkUmFuZ2VVbm9y
ZGVyZWRGb3JNYXRjaGVzQW5kUmFuZ2VzKHNlbGYsIGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2lu
dCwgbWF0Y2hlcywgcmFuZ2VzKToKICAgICAgICAgaWYgbGVuKG1hdGNoZXMpIGFuZCBoaWdoQ29k
ZVBvaW50ID49IG1hdGNoZXNbMF0gYW5kIGxvd0NvZGVQb2ludCA8PSBtYXRjaGVzWy0xXToKLSAg
ICAgICAgICAgIGZvciBpZHggaW4geHJhbmdlKGxlbihtYXRjaGVzKSk6CisgICAgICAgICAgICBm
b3IgaWR4IGluIHJhbmdlKGxlbihtYXRjaGVzKSk6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBt
YXRjaGVzW2lkeF0KICAgICAgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gbWF0Y2ggYW5k
IGhpZ2hDb2RlUG9pbnQgPj0gbWF0Y2g6CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGlkeCA8
IGxlbihtYXRjaGVzKSBhbmQgaGlnaENvZGVQb2ludCA+PSBtYXRjaGVzW2lkeF06CkBAIC00MTQs
MjIgKzQyNCwyMiBAQCBjbGFzcyBQcm9wZXJ0eURhdGE6CiAgICAgICAgICAgICAgICAgZWxpZiBo
aWdoQ29kZVBvaW50IDwgbWF0Y2g6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKLSAgICAg
ICAgZm9yIGlkeCBpbiB4cmFuZ2UobGVuKHJhbmdlcykpOgotICAgICAgICAgICAgcmFuZ2UgPSBy
YW5nZXNbaWR4XQotICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50ID49IHJhbmdlWzBdIGFuZCBo
aWdoQ29kZVBvaW50IDw9IHJhbmdlWzFdOgorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihy
YW5nZXMpKToKKyAgICAgICAgICAgIGN1cl9yYW5nZSA9IHJhbmdlc1tpZHhdCisgICAgICAgICAg
ICBpZiBsb3dDb2RlUG9pbnQgPj0gY3VyX3JhbmdlWzBdIGFuZCBoaWdoQ29kZVBvaW50IDw9IGN1
cl9yYW5nZVsxXToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGlmIGxvd0Nv
ZGVQb2ludCA8PSAocmFuZ2VbMV0gKyAxKSBhbmQgaGlnaENvZGVQb2ludCA+PSAocmFuZ2VbMF0g
LSAxKToKKyAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA8PSAoY3VyX3JhbmdlWzFdICsgMSkg
YW5kIGhpZ2hDb2RlUG9pbnQgPj0gKGN1cl9yYW5nZVswXSAtIDEpOgogICAgICAgICAgICAgICAg
IHdoaWxlIGlkeCA8IGxlbihyYW5nZXMpIGFuZCBoaWdoQ29kZVBvaW50ID49IChyYW5nZXNbaWR4
XVswXSAtIDEpOgotICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlc1tpZHhdCi0gICAg
ICAgICAgICAgICAgICAgIGxvd0NvZGVQb2ludCA9IG1pbihsb3dDb2RlUG9pbnQsIHJhbmdlWzBd
KQotICAgICAgICAgICAgICAgICAgICBoaWdoQ29kZVBvaW50ID0gbWF4KGhpZ2hDb2RlUG9pbnQs
IHJhbmdlWzFdKQorICAgICAgICAgICAgICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNbaWR4XQor
ICAgICAgICAgICAgICAgICAgICBsb3dDb2RlUG9pbnQgPSBtaW4obG93Q29kZVBvaW50LCBjdXJf
cmFuZ2VbMF0pCisgICAgICAgICAgICAgICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBtYXgoaGlnaENv
ZGVQb2ludCwgY3VyX3JhbmdlWzFdKQogICAgICAgICAgICAgICAgICAgICBkZWwgcmFuZ2VzW2lk
eF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBv
aW50Q291bnQgLSAocmFuZ2VbMV0gLSByYW5nZVswXSkgLSAxCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50IC0gKGN1cl9yYW5nZVsx
XSAtIGN1cl9yYW5nZVswXSkgLSAxCiAKICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlk
eCwgKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCkpCiAgICAgICAgICAgICAgICAgc2VsZi5j
b2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgKyAoaGlnaENvZGVQb2ludCAtIGxv
d0NvZGVQb2ludCkgKyAxCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBlbGlm
IGhpZ2hDb2RlUG9pbnQgPCByYW5nZVswXToKKyAgICAgICAgICAgIGVsaWYgaGlnaENvZGVQb2lu
dCA8IGN1cl9yYW5nZVswXToKICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgKGxv
d0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCkpCiAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9p
bnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgKyAoaGlnaENvZGVQb2ludCAtIGxvd0NvZGVQ
b2ludCkgKyAxCiAgICAgICAgICAgICAgICAgcmV0dXJuCkBAIC00NTksMTMgKzQ2OSwxMyBAQCBj
bGFzcyBQcm9wZXJ0eURhdGE6CiAgICAgICAgICAgICAgICAgc2VsZi5hZGRSYW5nZVVub3JkZXJl
ZEZvck1hdGNoZXNBbmRSYW5nZXMoZmlyc3RVbmljb2RlQ29kZVBvaW50LCBoaWdoQ29kZVBvaW50
LCBzZWxmLnVuaWNvZGVNYXRjaGVzLCBzZWxmLnVuaWNvZGVSYW5nZXMpCiAKICAgICBkZWYgcmVt
b3ZlTWF0Y2hGcm9tUmFuZ2VzKHNlbGYsIGNvZGVQb2ludCwgcmFuZ2VzKToKLSAgICAgICAgZm9y
IGlkeCBpbiB4cmFuZ2UobGVuKHJhbmdlcykpOgotICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNb
aWR4XQotICAgICAgICAgICAgaWYgcmFuZ2VbMF0gPD0gY29kZVBvaW50IGFuZCBjb2RlUG9pbnQg
PD0gcmFuZ2VbMV06CisgICAgICAgIGZvciBpZHggaW4gcmFuZ2UobGVuKHJhbmdlcykpOgorICAg
ICAgICAgICAgY3VyX3JhbmdlID0gcmFuZ2VzW2lkeF0KKyAgICAgICAgICAgIGlmIGN1cl9yYW5n
ZVswXSA8PSBjb2RlUG9pbnQgYW5kIGNvZGVQb2ludCA8PSBjdXJfcmFuZ2VbMV06CiAgICAgICAg
ICAgICAgICAgcmFuZ2VzLnBvcChpZHgpCi0gICAgICAgICAgICAgICAgaWYgcmFuZ2VbMF0gPCBj
b2RlUG9pbnQgYW5kIGNvZGVQb2ludCA8IHJhbmdlWzFdOgotICAgICAgICAgICAgICAgICAgICBs
b3dSYW5nZSA9IChyYW5nZVswXSwgY29kZVBvaW50IC0gMSkKLSAgICAgICAgICAgICAgICAgICAg
aGlnaFJhbmdlID0gKGNvZGVQb2ludCArIDEsIHJhbmdlWzFdKQorICAgICAgICAgICAgICAgIGlm
IGN1cl9yYW5nZVswXSA8IGNvZGVQb2ludCBhbmQgY29kZVBvaW50IDwgY3VyX3JhbmdlWzFdOgor
ICAgICAgICAgICAgICAgICAgICBsb3dSYW5nZSA9IChjdXJfcmFuZ2VbMF0sIGNvZGVQb2ludCAt
IDEpCisgICAgICAgICAgICAgICAgICAgIGhpZ2hSYW5nZSA9IChjb2RlUG9pbnQgKyAxLCBjdXJf
cmFuZ2VbMV0pCiAgICAgICAgICAgICAgICAgICAgICMgU2luY2UgbGlzdC5pbnNlcnQgaW5zZXJ0
cyBiZWZvcmUgdGhlIGluZGV4IGdpdmVuLCBoYW5kbGUgdGhlIGhpZ2ggcmFuZ2UgZmlyc3QKICAg
ICAgICAgICAgICAgICAgICAgaWYgaGlnaFJhbmdlWzBdID09IGhpZ2hSYW5nZVsxXToKICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkTWF0Y2hVbm9yZGVyZWQoaGlnaFJhbmdlWzBdKQpA
QCAtNDc2LDE0ICs0ODYsMTQgQEAgY2xhc3MgUHJvcGVydHlEYXRhOgogICAgICAgICAgICAgICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIGxv
d1JhbmdlKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHJh
bmdlWzBdID09IGNvZGVQb2ludDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gKGNv
ZGVQb2ludCArIDEsIHJhbmdlWzFdKQorICAgICAgICAgICAgICAgICAgICBpZiBjdXJfcmFuZ2Vb
MF0gPT0gY29kZVBvaW50OgorICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3JhbmdlID0gKGNv
ZGVQb2ludCArIDEsIGN1cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gKHJhbmdlWzBdLCBjb2RlUG9pbnQgLSAxKQot
ICAgICAgICAgICAgICAgICAgICBpZiByYW5nZVswXSA9PSByYW5nZVsxXToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuYWRkTWF0Y2hVbm9yZGVyZWQocmFuZ2VbMF0pCisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJfcmFuZ2UgPSAoY3VyX3JhbmdlWzBdLCBjb2RlUG9pbnQgLSAxKQor
ICAgICAgICAgICAgICAgICAgICBpZiBjdXJfcmFuZ2VbMF0gPT0gY3VyX3JhbmdlWzFdOgorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRNYXRjaFVub3JkZXJlZChjdXJfcmFuZ2VbMF0p
CiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYW5n
ZXMuaW5zZXJ0KGlkeCwgcmFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5z
ZXJ0KGlkeCwgY3VyX3JhbmdlKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQg
PSBzZWxmLmNvZGVQb2ludENvdW50IC0gMQogICAgICAgICAgICAgICAgIHJldHVybgogCkBAIC01
MDUsNTkgKzUxNSw1OSBAQCBjbGFzcyBQcm9wZXJ0eURhdGE6CiAgICAgICAgIHZhbHVlc1RoaXNM
aW5lID0gMAogICAgICAgICBmaXJzdFZhbHVlID0gVHJ1ZQogCi0gICAgICAgIGZpbGUud3JpdGUo
InsiKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJ7IikKICAgICAgICAgZm9yIGVsZW0gaW4gZGF0
YUxpc3Q6CiAgICAgICAgICAgICBpZiBmaXJzdFZhbHVlOgogICAgICAgICAgICAgICAgIGZpcnN0
VmFsdWUgPSBGYWxzZQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmaWxlLndy
aXRlKCIsICIpCisgICAgICAgICAgICAgICAgZG93cml0ZShmaWxlLCAiLCAiKQogICAgICAgICAg
ICAgdmFsdWVzVGhpc0xpbmUgPSB2YWx1ZXNUaGlzTGluZSArIDEKICAgICAgICAgICAgIGlmIHZh
bHVlc1RoaXNMaW5lID4gdmFsdWVzUGVyTGluZToKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRl
KCJcbiAgICAgICAgICAgICAgICAgIikKKyAgICAgICAgICAgICAgICBkb3dyaXRlKGZpbGUsICJc
biAgICAgICAgICAgICAgICAgIikKICAgICAgICAgICAgICAgICB2YWx1ZXNUaGlzTGluZSA9IDEK
ICAgICAgICAgICAgIGZvcm1hdHRlcihmaWxlLCBlbGVtKQotICAgICAgICBmaWxlLndyaXRlKCJ9
IikKKyAgICAgICAgZG93cml0ZShmaWxlLCAifSIpCiAKICAgICBkZWYgZHVtcChzZWxmLCBmaWxl
LCBjb21tYUFmdGVyKToKLSAgICAgICAgZmlsZS53cml0ZSgic3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxDaGFyYWN0ZXJDbGFzcz4ge30oKVxue3tcbiIuZm9ybWF0KHNlbGYuZ2V0Q3JlYXRlRnVuY05h
bWUoKSkpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICAvLyBOYW1lID0ge30sIG51bWJlciBvZiBj
b2RlUG9pbnRzOiB7fVxuIi5mb3JtYXQoc2VsZi5uYW1lLCBzZWxmLmNvZGVQb2ludENvdW50KSkK
LSAgICAgICAgZmlsZS53cml0ZSgiICAgIGF1dG8gY2hhcmFjdGVyQ2xhc3MgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENoYXJhY3RlckNsYXNzPihcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICAgICAg
c3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFyMzI+KCIpCi0gICAgICAgIHNlbGYuZHVtcE1hdGNo
RGF0YShmaWxlLCA4LCBzZWxmLm1hdGNoZXMsIGxhbWJkYSBmaWxlLCBtYXRjaDogKGZpbGUud3Jp
dGUoInswOjA9IzR4fSIuZm9ybWF0KG1hdGNoKSkpKQotICAgICAgICBmaWxlLndyaXRlKCIpLFxu
IikKLSAgICAgICAgZmlsZS53cml0ZSgiICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2hh
cmFjdGVyUmFuZ2U+KCIpCi0gICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA0LCBzZWxm
LnJhbmdlcywgbGFtYmRhIGZpbGUsIHJhbmdlOiAoZmlsZS53cml0ZSgie3t7MDowPSM0eH0sIHsx
OjA9IzR4fX19Ii5mb3JtYXQocmFuZ2VbMF0sIHJhbmdlWzFdKSkpKQotICAgICAgICBmaWxlLndy
aXRlKCIpLFxuIikKLSAgICAgICAgZmlsZS53cml0ZSgiICAgICAgICBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VUNoYXIzMj4oIikKLSAgICAgICAgc2VsZi5kdW1wTWF0Y2hEYXRhKGZpbGUsIDgsIHNl
bGYudW5pY29kZU1hdGNoZXMsIGxhbWJkYSBmaWxlLCBtYXRjaDogKGZpbGUud3JpdGUoInswOjA9
IzZ4fSIuZm9ybWF0KG1hdGNoKSkpKQotICAgICAgICBmaWxlLndyaXRlKCIpLFxuIikKLSAgICAg
ICAgZmlsZS53cml0ZSgiICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2hhcmFjdGVyUmFu
Z2U+KCIpCi0gICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA0LCBzZWxmLnVuaWNvZGVS
YW5nZXMsIGxhbWJkYSBmaWxlLCByYW5nZTogKGZpbGUud3JpdGUoInt7ezA6MD0jNnh9LCB7MTow
PSM2eH19fSIuZm9ybWF0KHJhbmdlWzBdLCByYW5nZVsxXSkpKSkKLSAgICAgICAgZmlsZS53cml0
ZSgiKSk7XG4iKQotCi0gICAgICAgIGZpbGUud3JpdGUoIiAgICBjaGFyYWN0ZXJDbGFzcy0+bV9o
YXNOb25CTVBDaGFyYWN0ZXJzID0ge307XG4iLmZvcm1hdCgoImZhbHNlIiwgInRydWUiKVtzZWxm
Lmhhc05vbkJNUENoYXJhY3RlcnNdKSkKLSAgICAgICAgZmlsZS53cml0ZSgiICAgIHJldHVybiBj
aGFyYWN0ZXJDbGFzcztcbn1cblxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAic3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxDaGFyYWN0ZXJDbGFzcz4ge30oKVxue3tcbiIuZm9ybWF0KHNlbGYuZ2V0
Q3JlYXRlRnVuY05hbWUoKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICAvLyBOYW1lID0g
e30sIG51bWJlciBvZiBjb2RlUG9pbnRzOiB7fVxuIi5mb3JtYXQoc2VsZi5uYW1lLCBzZWxmLmNv
ZGVQb2ludENvdW50KSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAgIGF1dG8gY2hhcmFjdGVy
Q2xhc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPENoYXJhY3RlckNsYXNzPihcbiIpCisgICAgICAgIGRv
d3JpdGUoZmlsZSwgIiAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFyMzI+KCIpCisg
ICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA4LCBzZWxmLm1hdGNoZXMsIGxhbWJkYSBm
aWxlLCBtYXRjaDogKGRvd3JpdGUoZmlsZSwgInswOjA9IzR4fSIuZm9ybWF0KG1hdGNoKSkpKQor
ICAgICAgICBkb3dyaXRlKGZpbGUsICIpLFxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAg
ICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2hhcmFjdGVyUmFuZ2U+KCIpCisgICAgICAgIHNl
bGYuZHVtcE1hdGNoRGF0YShmaWxlLCA0LCBzZWxmLnJhbmdlcywgbGFtYmRhIGZpbGUsIHJhbmdl
OiAoZG93cml0ZShmaWxlLCAie3t7MDowPSM0eH0sIHsxOjA9IzR4fX19Ii5mb3JtYXQocmFuZ2Vb
MF0sIHJhbmdlWzFdKSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIpLFxuIikKKyAgICAgICAg
ZG93cml0ZShmaWxlLCAiICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VUNoYXIzMj4oIikK
KyAgICAgICAgc2VsZi5kdW1wTWF0Y2hEYXRhKGZpbGUsIDgsIHNlbGYudW5pY29kZU1hdGNoZXMs
IGxhbWJkYSBmaWxlLCBtYXRjaDogKGRvd3JpdGUoZmlsZSwgInswOjA9IzZ4fSIuZm9ybWF0KG1h
dGNoKSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICIpLFxuIikKKyAgICAgICAgZG93cml0ZShm
aWxlLCAiICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2hhcmFjdGVyUmFuZ2U+KCIpCisg
ICAgICAgIHNlbGYuZHVtcE1hdGNoRGF0YShmaWxlLCA0LCBzZWxmLnVuaWNvZGVSYW5nZXMsIGxh
bWJkYSBmaWxlLCByYW5nZTogKGRvd3JpdGUoZmlsZSwgInt7ezA6MD0jNnh9LCB7MTowPSM2eH19
fSIuZm9ybWF0KHJhbmdlWzBdLCByYW5nZVsxXSkpKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAi
KSk7XG4iKQorCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICBjaGFyYWN0ZXJDbGFzcy0+bV9o
YXNOb25CTVBDaGFyYWN0ZXJzID0ge307XG4iLmZvcm1hdCgoImZhbHNlIiwgInRydWUiKVtzZWxm
Lmhhc05vbkJNUENoYXJhY3RlcnNdKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAiICAgIHJldHVy
biBjaGFyYWN0ZXJDbGFzcztcbn1cblxuIikKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBk
dW1wQWxsKGNscywgZmlsZSk6CiAgICAgICAgIGZvciBwcm9wZXJ0eURhdGEgaW4gY2xzLmFsbFBy
b3BlcnR5RGF0YToKICAgICAgICAgICAgIHByb3BlcnR5RGF0YS5kdW1wKGZpbGUsIHByb3BlcnR5
RGF0YSAhPSBjbHMuYWxsUHJvcGVydHlEYXRhWy0xXSkKIAotICAgICAgICBmaWxlLndyaXRlKCJ0
eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxDaGFyYWN0ZXJDbGFzcz4gKCpDcmVhdGVDaGFyYWN0ZXJD
bGFzcykoKTtcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoInN0YXRpYyBDcmVhdGVDaGFyYWN0ZXJD
bGFzcyBjcmVhdGVGdW5jdGlvbnNbe31dID0ge3tcbiAgICIuZm9ybWF0KGxlbihjbHMuYWxsUHJv
cGVydHlEYXRhKSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgInR5cGVkZWYgc3RkOjp1bmlxdWVf
cHRyPENoYXJhY3RlckNsYXNzPiAoKkNyZWF0ZUNoYXJhY3RlckNsYXNzKSgpO1xuIikKKyAgICAg
ICAgZG93cml0ZShmaWxlLCAic3RhdGljIENyZWF0ZUNoYXJhY3RlckNsYXNzIGNyZWF0ZUZ1bmN0
aW9uc1t7fV0gPSB7e1xuICAgIi5mb3JtYXQobGVuKGNscy5hbGxQcm9wZXJ0eURhdGEpKSkKICAg
ICAgICAgZnVuY3Rpb25zT25UaGlzTGluZSA9IDAKICAgICAgICAgZm9yIHByb3BlcnR5RGF0YSBp
biBjbHMuYWxsUHJvcGVydHlEYXRhOgotICAgICAgICAgICAgZmlsZS53cml0ZSgiIHt9LCIuZm9y
bWF0KHByb3BlcnR5RGF0YS5nZXRDcmVhdGVGdW5jTmFtZSgpKSkKKyAgICAgICAgICAgIGRvd3Jp
dGUoZmlsZSwgIiB7fSwiLmZvcm1hdChwcm9wZXJ0eURhdGEuZ2V0Q3JlYXRlRnVuY05hbWUoKSkp
CiAgICAgICAgICAgICBmdW5jdGlvbnNPblRoaXNMaW5lID0gZnVuY3Rpb25zT25UaGlzTGluZSAr
IDEKICAgICAgICAgICAgIGlmIGZ1bmN0aW9uc09uVGhpc0xpbmUgPT0gNDoKLSAgICAgICAgICAg
ICAgICBmaWxlLndyaXRlKCJcbiAgICIpCisgICAgICAgICAgICAgICAgZG93cml0ZShmaWxlLCAi
XG4gICAiKQogICAgICAgICAgICAgICAgIGZ1bmN0aW9uc09uVGhpc0xpbmUgPSAwCiAKLSAgICAg
ICAgZmlsZS53cml0ZSgifTtcblxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAifTtcblxuIikK
IAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBjcmVhdGVBbmREdW1wSGFzaFRhYmxlKHNlbGYs
IGZpbGUsIHByb3BlcnR5RGljdCwgdGFibGVQcmVmaXgpOgotICAgICAgICBwcm9wZXJ0eUtleXMg
PSBwcm9wZXJ0eURpY3Qua2V5cygpCisgICAgICAgIHByb3BlcnR5S2V5cyA9IGxpc3QocHJvcGVy
dHlEaWN0LmtleXMoKSkKICAgICAgICAgbnVtYmVyT2ZLZXlzID0gbGVuKHByb3BlcnR5S2V5cykK
ICAgICAgICAgaGFzaFNpemUgPSBjZWlsaW5nVG9Qb3dlck9mMihudW1iZXJPZktleXMgKiAyKQog
ICAgICAgICBoYXNoTWFzayA9IGhhc2hTaXplIC0gMQpAQCAtNTg3LDcgKzU5Nyw3IEBAIGNsYXNz
IFByb3BlcnR5RGF0YToKICAgICAgICAgICAgIGhhc2hUYWJsZVtoYXNoXSA9IChsZW4odmFsdWVU
YWJsZSksIE5vbmUpCiAgICAgICAgICAgICB2YWx1ZVRhYmxlLmFwcGVuZCgoa2V5LCBrZXlWYWx1
ZVsxXSkpCiAKLSAgICAgICAgZmlsZS53cml0ZSgic3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoSW5k
ZXgge31UYWJsZUluZGV4W3t9XSA9IHt7XG4iLmZvcm1hdCh0YWJsZVByZWZpeCwgbGVuKGhhc2hU
YWJsZSkpKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hJ
bmRleCB7fVRhYmxlSW5kZXhbe31dID0ge3tcbiIuZm9ybWF0KHRhYmxlUHJlZml4LCBsZW4oaGFz
aFRhYmxlKSkpCiAKICAgICAgICAgZm9yIHRhYmxlSW5kZXggaW4gaGFzaFRhYmxlOgogICAgICAg
ICAgICAgdmFsdWUgPSAtMQpAQCAtNTk3LDE3ICs2MDcsMTcgQEAgY2xhc3MgUHJvcGVydHlEYXRh
OgogICAgICAgICAgICAgICAgIGlmIHRhYmxlSW5kZXhbMV0gaXMgbm90IE5vbmU6CiAgICAgICAg
ICAgICAgICAgICAgIG5leHQgPSB0YWJsZUluZGV4WzFdCiAKLSAgICAgICAgICAgIGZpbGUud3Jp
dGUoIiAgICB7eyB7fSwge30gfX0sXG4iLmZvcm1hdCh2YWx1ZSwgbmV4dCkpCisgICAgICAgICAg
ICBkb3dyaXRlKGZpbGUsICIgICAge3sge30sIHt9IH19LFxuIi5mb3JtYXQodmFsdWUsIG5leHQp
KQogCi0gICAgICAgIGZpbGUud3JpdGUoIn07XG5cbiIpCisgICAgICAgIGRvd3JpdGUoZmlsZSwg
In07XG5cbiIpCiAKLSAgICAgICAgZmlsZS53cml0ZSgic3RhdGljIGNvbnN0IHN0cnVjdCBIYXNo
VmFsdWUge31UYWJsZVZhbHVlW3t9XSA9IHt7XG4iLmZvcm1hdCh0YWJsZVByZWZpeCwgbGVuKHZh
bHVlVGFibGUpKSkKKyAgICAgICAgZG93cml0ZShmaWxlLCAic3RhdGljIGNvbnN0IHN0cnVjdCBI
YXNoVmFsdWUge31UYWJsZVZhbHVlW3t9XSA9IHt7XG4iLmZvcm1hdCh0YWJsZVByZWZpeCwgbGVu
KHZhbHVlVGFibGUpKSkKICAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlVGFibGU6Ci0gICAgICAg
ICAgICBmaWxlLndyaXRlKCIgICAge3sgXCJ7fVwiLCB7fSB9fSxcbiIuZm9ybWF0KHZhbHVlWzBd
LCB2YWx1ZVsxXSkpCi0gICAgICAgIGZpbGUud3JpdGUoIn07XG5cbiIpCisgICAgICAgICAgICBk
b3dyaXRlKGZpbGUsICIgICAge3sgXCJ7fVwiLCB7fSB9fSxcbiIuZm9ybWF0KHZhbHVlWzBdLCB2
YWx1ZVsxXSkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIn07XG5cbiIpCiAKLSAgICAgICAgZmls
ZS53cml0ZSgic3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGUge31IYXNoVGFibGUgPSBcbiIu
Zm9ybWF0KHRhYmxlUHJlZml4KSkKLSAgICAgICAgZmlsZS53cml0ZSgiICAgIHt7IHt9LCB7fSwg
e31UYWJsZVZhbHVlLCB7fVRhYmxlSW5kZXggfX07XG5cbiIuZm9ybWF0KGxlbih2YWx1ZVRhYmxl
KSwgaGFzaE1hc2ssIHRhYmxlUHJlZml4LCB0YWJsZVByZWZpeCkpCisgICAgICAgIGRvd3JpdGUo
ZmlsZSwgInN0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHt9SGFzaFRhYmxlID0gXG4iLmZv
cm1hdCh0YWJsZVByZWZpeCkpCisgICAgICAgIGRvd3JpdGUoZmlsZSwgIiAgICB7eyB7fSwge30s
IHt9VGFibGVWYWx1ZSwge31UYWJsZUluZGV4IH19O1xuXG4iLmZvcm1hdChsZW4odmFsdWVUYWJs
ZSksIGhhc2hNYXNrLCB0YWJsZVByZWZpeCwgdGFibGVQcmVmaXgpKQogCiAKIGNsYXNzIFNjcmlw
dHM6CkBAIC03NDIsMjEgKzc1MiwyMSBAQCBjbGFzcyBTY3JpcHRzOgogICAgICAgICAgICAgICAg
ICAgICBsb3dDb2RlUG9pbnQgPSBpbnQoY29kZVBvaW50c1s6ZG90RG90XSwgMTYpCiAgICAgICAg
ICAgICAgICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBpbnQoY29kZVBvaW50c1tkb3REb3QgKyAyOl0s
IDE2KQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHlEYXRhLmFkZFJhbmdlKGxv
d0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCkKLSAgICAgICAgICAgICAgICAgICAgZm9yIGNvZGVQ
b2ludCBpbiB4cmFuZ2UobG93Q29kZVBvaW50LCBoaWdoQ29kZVBvaW50ICsgMSk6CisgICAgICAg
ICAgICAgICAgICAgIGZvciBjb2RlUG9pbnQgaW4gcmFuZ2UobG93Q29kZVBvaW50LCBoaWdoQ29k
ZVBvaW50ICsgMSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TY3JpcHRFeHRlbnN0
aW9uUHJvcGVydHlEYXRhLnJlbW92ZU1hdGNoKGNvZGVQb2ludCkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluaGVyaXRlZFNjcmlwdEV4dGVuc2lvblByb3BlcnR5RGF0YS5yZW1vdmVNYXRjaChj
b2RlUG9pbnQpCiAKICAgICAgICAgIyBGb3IgdGhlIHNjcmlwdHMgdGhhdCBkb24ndCBoYXZlIGFu
eSBhZGRpdGlvbmFsIGV4dGVuc2lvbiBjb2RlUG9pbnRzLCBjb3B5IHRoZSBzY3JpcHQKICAgICAg
ICAgIyBkYXRhIHRvIHRoZSBzY3JpcHQgZXh0ZW5zaW9uIHdpdGggdGhlIHNhbWUgbmFtZQotICAg
ICAgICBmb3Igc2NyaXB0TmFtZSwgcHJvcGVydHlEYXRhIGluIHNlbGYuc2NyaXB0c0J5TmFtZS5p
dGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHNjcmlwdE5hbWUsIHByb3BlcnR5RGF0YSBpbiBzZWxm
LnNjcmlwdHNCeU5hbWUuaXRlbXMoKToKICAgICAgICAgICAgIGlmIHNjcmlwdE5hbWUgbm90IGlu
IHNlbGYuc2NyaXB0RXh0ZW5zaW9uc0J5TmFtZToKICAgICAgICAgICAgICAgICBzZWxmLnNjcmlw
dEV4dGVuc2lvbnNCeU5hbWVbc2NyaXB0TmFtZV0gPSBwcm9wZXJ0eURhdGEKIAogICAgIGRlZiBk
dW1wKHNlbGYsIGZpbGUpOgotICAgICAgICBmaWxlLndyaXRlKCIvLyBTY3JpcHRzOlxuIikKKyAg
ICAgICAgZG93cml0ZShmaWxlLCAiLy8gU2NyaXB0czpcbiIpCiAgICAgICAgIFByb3BlcnR5RGF0
YS5jcmVhdGVBbmREdW1wSGFzaFRhYmxlKGZpbGUsIHNlbGYuc2NyaXB0c0J5TmFtZSwgInNjcmlw
dCIpCiAKLSAgICAgICAgZmlsZS53cml0ZSgiLy8gU2NyaXB0X0V4dGVuc2lvbnM6XG4iKQorICAg
ICAgICBkb3dyaXRlKGZpbGUsICIvLyBTY3JpcHRfRXh0ZW5zaW9uczpcbiIpCiAgICAgICAgIFBy
b3BlcnR5RGF0YS5jcmVhdGVBbmREdW1wSGFzaFRhYmxlKGZpbGUsIHNlbGYuc2NyaXB0RXh0ZW5z
aW9uc0J5TmFtZSwgInNjcmlwdEV4dGVuc2lvbiIpCiAKIApAQCAtODc3LDcgKzg4Nyw3IEBAIGNs
YXNzIEdlbmVyYWxDYXRlZ29yeToKICAgICAgICAgICAgICAgICBwcm9wZXJ0eURhdGFzWzFdLmFk
ZFJhbmdlKHNlbGYubGFzdEFkZGVkQ29kZVBvaW50ICsgMSwgTWF4VW5pY29kZSkKIAogICAgIGRl
ZiBkdW1wKHNlbGYsIGZpbGUpOgotICAgICAgICBmaWxlLndyaXRlKCIvLyBHZW5lcmFsX0NhdGVn
b3J5OlxuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiLy8gR2VuZXJhbF9DYXRlZ29yeTpcbiIp
CiAgICAgICAgIFByb3BlcnR5RGF0YS5jcmVhdGVBbmREdW1wSGFzaFRhYmxlKGZpbGUsIHNlbGYu
cHJvcGVydHlEYXRhQnlDYXRlZ29yeSwgImdlbmVyYWxDYXRlZ29yeSIpCiAKIApAQCAtOTIwLDcg
KzkzMCw3IEBAIGNsYXNzIEJpbmFyeVByb3BlcnR5OgogICAgICAgICAgICAgICAgIGN1cnJlbnRQ
cm9wZXJ0eURhdGEuYWRkUmFuZ2UoaW50KGNvZGVQb2ludHNbOmRvdERvdF0sIDE2KSwgaW50KGNv
ZGVQb2ludHNbZG90RG90ICsgMjpdLCAxNikpCiAKICAgICBkZWYgZHVtcChzZWxmLCBmaWxlKToK
LSAgICAgICAgZmlsZS53cml0ZSgiLy8gYmluYXJ5IHByb3BlcnRpZXM6XG4iKQorICAgICAgICBk
b3dyaXRlKGZpbGUsICIvLyBiaW5hcnkgcHJvcGVydGllczpcbiIpCiAgICAgICAgIFByb3BlcnR5
RGF0YS5jcmVhdGVBbmREdW1wSGFzaFRhYmxlKGZpbGUsIHNlbGYucHJvcGVydHlEYXRhQnlQcm9w
ZXJ0eSwgImJpbmFyeVByb3BlcnR5IikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKQEAg
LTk1MCw3ICs5NjAsNyBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogCiAgICAgcHJvcGVy
dHlEYXRhSEZpbGUgPSBvcGVuT3JFeGl0KHVuaWNvZGVQcm9lcnR5RGF0YUhQYXRoLCAid2IiKQog
Ci0gICAgcHJvcGVydHlEYXRhSEZpbGUud3JpdGUoaGVhZGVyKQorICAgIGRvd3JpdGUocHJvcGVy
dHlEYXRhSEZpbGUsIGhlYWRlcikKIAogICAgIGFsaWFzZXMucGFyc2VQcm9wZXJ0eUFsaWFzZXNG
aWxlKHByb3BlcnR5QWxpYXNlc0ZpbGUpCiAgICAgYWxpYXNlcy5wYXJzZVByb3BlcnR5VmFsdWVB
bGlhc2VzRmlsZShwcm9wZXJ0eVZhbHVlQWxpYXNlc0ZpbGUpCkBAIC05NzQsNiArOTg0LDYgQEAg
aWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBiaW5hcnlQcm9wZXJ0eS5kdW1wKHByb3Bl
cnR5RGF0YUhGaWxlKQogICAgIHNjcmlwdHMuZHVtcChwcm9wZXJ0eURhdGFIRmlsZSkKIAotICAg
IHByb3BlcnR5RGF0YUhGaWxlLndyaXRlKGZvb3RlcikKKyAgICBkb3dyaXRlKHByb3BlcnR5RGF0
YUhGaWxlLCBmb290ZXIpCiAKICAgICBleGl0KDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9oYXNoZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy9oYXNoZXIucHkKaW5kZXggY2YwMjkwYjVlNWU1ZjY2NDBiMzNkOGM0NDFkN2Q2ZjQ0ZDlkOGU4
OS4uZDliYTRkMGY5MGZiYzBmMTZkMTQxZmExOGE4ZmQxNzFlMTUxNGQ5MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvaGFzaGVyLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2hhc2hlci5weQpAQCAtMzYsNyArMzYsNyBAQCBkZWYgc3RyaW5n
SGFzaChzdHIpOgogICAgIGhhc2ggPSBzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZQogCiAgICAgc3Ry
TGVuZ3RoID0gbGVuKHN0cikKLSAgICBjaGFyYWN0ZXJQYWlycyA9IHN0ckxlbmd0aCAvIDIKKyAg
ICBjaGFyYWN0ZXJQYWlycyA9IGludChzdHJMZW5ndGggLyAyKQogICAgIHJlbWFpbmRlciA9IHN0
ckxlbmd0aCAmIDEKIAogICAgICMgTWFpbiBsb29wCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9qc21pbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2pzbWluLnB5CmluZGV4IDM3MjQxOGI0ZDJiMGEzYzZmYWMzNjI1MTdkNjlhYzljN2IwOTk2Njgu
LmZjNjQ3Yzc5ZjM3NDY0ODIwNjM2YWQ2ODNiOTYzODY2Y2QyMTA4MGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2pzbWluLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2pzbWluLnB5CkBAIC03OSwxMCArNzksMTMgQEAgY2xhc3MgSmF2YXNj
cmlwdE1pbmlmeShvYmplY3QpOgogICAgICAgICBkZWYgd3JpdGUoY2hhcik6CiAgICAgICAgICAg
ICAjIGFsbCBvZiB0aGlzIGlzIHRvIHN1cHBvcnQgbGl0ZXJhbCByZWd1bGFyIGV4cHJlc3Npb25z
LgogICAgICAgICAgICAgIyBzaWdoCi0gICAgICAgICAgICBpZiBjaGFyIGluICdyZXR1cm4nOgor
ICAgICAgICAgICAgaWYgc3RyKGNoYXIpIGluICdyZXR1cm4nOgogICAgICAgICAgICAgICAgIHNl
bGYucmV0dXJuX2J1ZiArPSBjaGFyCiAgICAgICAgICAgICAgICAgc2VsZi5pc19yZXR1cm4gPSBz
ZWxmLnJldHVybl9idWYgPT0gJ3JldHVybicKLSAgICAgICAgICAgIHNlbGYub3V0cy53cml0ZShj
aGFyKQorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mby5tYWpvciA9PSAyOgorICAgICAg
ICAgICAgICAgIHNlbGYub3V0cy53cml0ZShjaGFyKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBzZWxmLm91dHMud3JpdGUoc3RyKGNoYXIpKQogICAgICAgICAgICAgaWYgc2Vs
Zi5pc19yZXR1cm46CiAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5fYnVmID0gJycKIApAQCAt
MTE4LDggKzEyMSw4IEBAIGNsYXNzIEphdmFzY3JpcHRNaW5pZnkob2JqZWN0KToKICAgICAgICAg
ICAgICAgICB3cml0ZShwcmV2aW91cykKICAgICAgICAgZWxpZiBub3QgcHJldmlvdXM6CiAgICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgZWxpZiBwcmV2aW91cyA+PSAnISc6Ci0gICAgICAgICAg
ICBpZiBwcmV2aW91cyBpbiAiJ1wiIjoKKyAgICAgICAgZWxpZiBzdHIocHJldmlvdXMpID49ICIh
IjoKKyAgICAgICAgICAgIGlmIHN0cihwcmV2aW91cykgaW4gIidcIiI6CiAgICAgICAgICAgICAg
ICAgaW5fcXVvdGUgPSBwcmV2aW91cwogICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCiAgICAg
ICAgICAgICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91cwpAQCAtMTY2LDcgKzE2OSw3IEBA
IGNsYXNzIEphdmFzY3JpcHRNaW5pZnkob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgaWYg
bnVtc2xhc2hlcyAlIDIgPT0gMDoKICAgICAgICAgICAgICAgICAgICAgICAgIGluX3F1b3RlID0g
JycKICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCcnLmpvaW4ocXVvdGVfYnVmKSkKLSAg
ICAgICAgICAgIGVsaWYgbmV4dDEgaW4gJ1xyXG4nOgorICAgICAgICAgICAgZWxpZiBzdHIobmV4
dDEpIGluICdcclxuJzoKICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19ub25fc3BhY2UgaW4g
bmV3bGluZWVuZF9zdHJpbmdzIFwKICAgICAgICAgICAgICAgICAgICAgb3IgcHJldmlvdXNfbm9u
X3NwYWNlID4gJ34nOgogICAgICAgICAgICAgICAgICAgICB3aGlsZSAxOgpAQCAtMTc5LDcgKzE4
Miw3IEBAIGNsYXNzIEphdmFzY3JpcHRNaW5pZnkob2JqZWN0KToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3IgbmV4dDIgPiAnficgb3IgbmV4dDIgPT0gJy8nOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb19uZXdsaW5lID0gVHJ1ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbGlmIG5leHQxIDwgJyEnIGFuZCBub3Qg
aW5fcmU6CisgICAgICAgICAgICBlbGlmIHN0cihuZXh0MSkgPCAnIScgYW5kIG5vdCBpbl9yZToK
ICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNfbm9uX3NwYWNlIGluIHNwYWNlX3N0cmluZ3Mg
XAogICAgICAgICAgICAgICAgICAgICBvciBwcmV2aW91c19ub25fc3BhY2UgPiAnficpIFwKICAg
ICAgICAgICAgICAgICAgICAgYW5kIChuZXh0MiBpbiBzcGFjZV9zdHJpbmdzIG9yIG5leHQyID4g
J34nKToKQEAgLTIxNywxNCArMjIwLDE0IEBAIGNsYXNzIEphdmFzY3JpcHRNaW5pZnkob2JqZWN0
KToKICAgICAgICAgICAgICAgICAgICAgZG9fbmV3bGluZSA9IEZhbHNlCiAKICAgICAgICAgICAg
ICAgICB3cml0ZShuZXh0MSkKLSAgICAgICAgICAgICAgICBpZiBub3QgaW5fcmUgYW5kIG5leHQx
IGluICInXCJgIjoKKyAgICAgICAgICAgICAgICBpZiBub3QgaW5fcmUgYW5kIHN0cihuZXh0MSkg
aW4gIidcImAiOgogICAgICAgICAgICAgICAgICAgICBpbl9xdW90ZSA9IG5leHQxCiAgICAgICAg
ICAgICAgICAgICAgIHF1b3RlX2J1ZiA9IFtdCiAKICAgICAgICAgICAgIHByZXZpb3VzID0gbmV4
dDEKICAgICAgICAgICAgIG5leHQxID0gbmV4dDIKIAotICAgICAgICAgICAgaWYgcHJldmlvdXMg
Pj0gJyEnOgorICAgICAgICAgICAgaWYgc3RyKHByZXZpb3VzKSA+PSAnISc6CiAgICAgICAgICAg
ICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0gcHJldmlvdXMKIAogICAgICAgICAgICAgaWYgcHJl
dmlvdXMgPT0gJ1xcJzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L21ha2UtanMtZmlsZS1hcnJheXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9t
YWtlLWpzLWZpbGUtYXJyYXlzLnB5CmluZGV4IGMzN2NjMTJmMjJkNWJmOWU3OTQyYWZiMjM3N2Vl
ZDY3YThiZDNmN2IuLjg2MjRiZmU4ZGFmNmNjMjQ0YjViMTZhOGZhYzcxYzllZTA4MjAxNjUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL21ha2UtanMtZmlsZS1hcnJh
eXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvbWFrZS1qcy1maWxlLWFy
cmF5cy5weQpAQCAtMjUsNyArMjUsMTEgQEAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9m
dW5jdGlvbgogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlv
blBhcnNlcgotZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2lmIHN5
cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJp
bmdJTworZWxzZToKKyAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogZnJvbSBqc21pbiBpbXBv
cnQgSmF2YXNjcmlwdE1pbmlmeQogCiAKQEAgLTM3LDcgKzQxLDcgQEAgZGVmIHN0cmluZ2lmeUNv
ZGVwb2ludChjb2RlKToKIAogCiBkZWYgY2h1bmsobGlzdCwgY2h1bmtTaXplKToKLSAgICBmb3Ig
aSBpbiB4cmFuZ2UoMCwgbGVuKGxpc3QpLCBjaHVua1NpemUpOgorICAgIGZvciBpIGluIHJhbmdl
KDAsIGxlbihsaXN0KSwgY2h1bmtTaXplKToKICAgICAgICAgeWllbGQgbGlzdFtpOmkgKyBjaHVu
a1NpemVdCiAKIApAQCAtODUsNyArODksNyBAQCBkZWYgbWFpbigpOgogICAgICAgICBwcmludCgn
ZXh0ZXJuIGNvbnN0IGNoYXIgezA6c31KYXZhU2NyaXB0W3sxOmR9XTsnLmZvcm1hdCh2YXJpYWJs
ZU5hbWUsIHNpemUpLCBmaWxlPWhlYWRlckZpbGUpCiAgICAgICAgIHByaW50KCdjb25zdCBjaGFy
IHswOnN9SmF2YVNjcmlwdFt7MTpkfV0gPSB7eycuZm9ybWF0KHZhcmlhYmxlTmFtZSwgc2l6ZSks
IGZpbGU9c291cmNlRmlsZSkKIAotICAgICAgICBjb2RlcG9pbnRzID0gbWFwKG9yZCwgY2hhcmFj
dGVycykKKyAgICAgICAgY29kZXBvaW50cyA9IGxpc3QobWFwKG9yZCwgY2hhcmFjdGVycykpCiAg
ICAgICAgIGZvciBjb2RlcG9pbnRDaHVuayBpbiBjaHVuayhjb2RlcG9pbnRzLCAxNik6CiAgICAg
ICAgICAgICBwcmludCgnICAgIHswOnN9LCcuZm9ybWF0KCcsJy5qb2luKG1hcChzdHJpbmdpZnlD
b2RlcG9pbnQsIGNvZGVwb2ludENodW5rKSkpLCBmaWxlPXNvdXJjZUZpbGUpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvX19pbml0X18ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL19faW5pdF9fLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQ2ZjkzMjliMmI0ZTk3NTViYWZiNjI1ODcxMDRiMjZmMWYzNGQwMmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL19f
aW5pdF9fLnB5CkBAIC0wLDAgKzEsMyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJj
aCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKK2Zyb20gd2tidWlsdGlucyBpbXBv
cnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlu
cy9idWlsdGlucy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMv
YnVpbHRpbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTlhZmYyYjFjZmY0ZjI1MzUwYjc2NThkZGE0OWMwYTUx
MjNlOWMxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3drYnVpbHRpbnMvYnVpbHRpbnMucHkKQEAgLTAsMCArMSwxNSBAQAorIyBUaGlzIGZpbGUgaXMg
dXNlZCB0byBzaW11bGF0ZSB0aGUgYnVpbHRpbnMvIGRpcmVjdG9yeSB3aGVuIGdlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5CisjIGlzIHJ1biBmcm9tIEphdmFTY3JpcHRDb3JlIGZyYW1ld29yaydzIHBy
aXZhdGUgaGVhZGVycyBkaXJlY3RvcnksIHdoaWNoIGlzIGZsYXR0ZW5lZC4KKworZnJvbSBidWls
dGluc19tb2RlbCBpbXBvcnQgKgorZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0ICoKKwor
ZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVf
Y29tYmluZWRfaGVhZGVyIGltcG9ydCAqCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVk
X2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRl
X2hlYWRlciBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlciBp
bXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uIGlt
cG9ydCAqCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlciBp
bXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2Nv
bWJpbmVkX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWM2OTQ4MDNhZGJhYWMzZTZiYzQ4YWEyYTM0
Y2M4ZWZhY2VmMmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkKQEAg
LTAsMCArMSwxNzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMp
IDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
YykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQor
Citmcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IKK2Zyb20g
YnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3Mg
QnVpbHRpbnNDb21iaW5lZEhlYWRlckdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKKyAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19p
bml0X18oc2VsZiwgbW9kZWwpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gIiVzQnVpbHRpbnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRp
bmcoJ25hbWVzcGFjZScpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAg
ICBhcmdzID0geworICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdv
cmsuc2V0dGluZygnbmFtZXNwYWNlJyksCisgICAgICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxm
Lm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpLAorICAgICAgICB9CisK
KyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5IZWFkZXJJbmNsdWRlR3VhcmQpLnN1YnN0aXR1dGUo
YXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2ZvcndhcmRfZGVj
bGFyYXRpb25zKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
TmFtZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBmb3Igb2JqZWN0IGluIHNl
bGYubW9kZWwoKS5vYmplY3RzOgorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KG9iamVjdCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfdGFibGVfbWFjcm8oKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3JfY29kZV9uYW1lX21hY3Jv
KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX2ds
b2JhbF9wcml2YXRlX2NvZGVfbmFtZV9tYWNybygpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLkNvbWJpbmVkSGVhZGVyU3RhdGljTWFjcm9zKS5zdWJzdGl0dXRl
KGFyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVz
cGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAgICByZXR1cm4gIlxuXG4iLmpv
aW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoc2Vs
Zik6CisgICAgICAgIHJldHVybiAiIiJuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEZ1bmN0aW9uRXhl
Y3V0YWJsZTsKK2NsYXNzIFZNOworCitlbnVtIGNsYXNzIENvbnN0cnVjdEFiaWxpdHkgOiB1bnNp
Z25lZDsKK30iIiIKKworICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2VsZiwg
b2JqZWN0KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVz
ICovJyAlIG9iamVjdC5vYmplY3RfbmFtZSkKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2Vu
ZXJhdGVfZXh0ZXJuc19mb3Jfb2JqZWN0KG9iamVjdCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgi
IikKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2VuZXJhdGVfbWFjcm9zX2Zvcl9vYmplY3Qo
b2JqZWN0KSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5l
cmF0ZV9leHRlcm5zX2Zvcl9vYmplY3Qoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgbGluZXMgPSBb
XQorCisgICAgICAgIGZvciBmdW5jdGlvbiBpbiBvYmplY3QuZnVuY3Rpb25zOgorICAgICAgICAg
ICAgZnVuY3Rpb25fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnY29kZU5hbWUnOiBCdWlsdGlu
c0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKSArICdDb2RlJywKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiImV4dGVybiBjb25zdCBj
aGFyKiBzXyUoY29kZU5hbWUpczsKK2V4dGVybiBjb25zdCBpbnQgc18lKGNvZGVOYW1lKXNMZW5n
dGg7CitleHRlcm4gY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfJShjb2RlTmFtZSlzQ29u
c3RydWN0QWJpbGl0eTsiIiIgJSBmdW5jdGlvbl9hcmdzKQorCisgICAgICAgIHJldHVybiBsaW5l
cworCisgICAgZGVmIGdlbmVyYXRlX21hY3Jvc19mb3Jfb2JqZWN0KHNlbGYsIG9iamVjdCk6Cisg
ICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpLAorICAgICAgICAgICAgJ29iamVjdE1h
Y3JvJzogb2JqZWN0Lm9iamVjdF9uYW1lLnJlcGxhY2UoJy4nLCAnJykudXBwZXIoKSwKKyAgICAg
ICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCIjZGVmaW5l
ICUobWFjcm9QcmVmaXgpc19GT1JFQUNIXyUob2JqZWN0TWFjcm8pc19CVUlMVElOX0RBVEEobWFj
cm8pIFxcIiAlIGFyZ3MpCisgICAgICAgIGZvciBmdW5jdGlvbiBpbiBvYmplY3QuZnVuY3Rpb25z
OgorICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZnVuY05h
bWUnOiBmdW5jdGlvbi5mdW5jdGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICdtYW5nbGVkTmFt
ZSc6IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yRnVuY3Rpb24oZnVuY3Rpb24pLAor
ICAgICAgICAgICAgICAgICdwYXJhbUNvdW50JzogbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpLAor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBtYWNybyglKGZ1
bmNOYW1lKXMsICUobWFuZ2xlZE5hbWUpcywgJShwYXJhbUNvdW50KWQpIFxcIiAlIGZ1bmN0aW9u
X2FyZ3MpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25f
Zm9yX2NvZGVfdGFibGVfbWFjcm8oc2VsZik6CisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAg
ICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3By
ZWZpeCcpLAorICAgICAgICB9CisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5h
cHBlbmQoIiNkZWZpbmUgJShtYWNyb1ByZWZpeClzX0ZPUkVBQ0hfQlVJTFRJTl9DT0RFKG1hY3Jv
KSBcXCIgJSBhcmdzKQorICAgICAgICBmb3IgZnVuY3Rpb24gaW4gc2VsZi5tb2RlbCgpLmFsbF9m
dW5jdGlvbnMoKToKKyAgICAgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSB7CisgICAgICAgICAgICAg
ICAgJ2Z1bmNOYW1lJzogZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAn
b3ZlcnJpZGRlbk5hbWUnOiBmdW5jdGlvbi5vdmVycmlkZGVuX25hbWUsCisgICAgICAgICAgICAg
ICAgJ2NvZGVOYW1lJzogQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JGdW5jdGlvbihm
dW5jdGlvbikgKyAnQ29kZScsCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgiICAgIG1hY3JvKCUoY29kZU5hbWUpcywgJShmdW5jTmFtZSlzLCAlKG92ZXJyaWRkZW5O
YW1lKXMsIHNfJShjb2RlTmFtZSlzTGVuZ3RoKSBcXCIgJSBmdW5jdGlvbl9hcmdzKQorICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9y
X2NvZGVfbmFtZV9tYWNybyhzZWxmKToKKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICdt
YWNyb1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbWFjcm9fcHJlZml4
JyksCisgICAgICAgIH0KKworICAgICAgICBpbnRlcm5hbF9mdW5jdGlvbl9uYW1lcyA9IFtmdW5j
dGlvbi5mdW5jdGlvbl9uYW1lIGZvciBmdW5jdGlvbiBpbiBzZWxmLm1vZGVsKCkuYWxsX2ludGVy
bmFsX2Z1bmN0aW9ucygpXQorICAgICAgICBpZiBsZW4oaW50ZXJuYWxfZnVuY3Rpb25fbmFtZXMp
ICE9IGxlbihzZXQoaW50ZXJuYWxfZnVuY3Rpb25fbmFtZXMpKToKKyAgICAgICAgICAgIGxvZy5l
cnJvcigiVGhlcmUgYXJlIHNldmVyYWwgaW50ZXJuYWwgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUg
bmFtZS4gUHJpdmF0ZSBpZGVudGlmaWVycyBtYXkgY2xhc2guIikKKworICAgICAgICBsaW5lcyA9
IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNfRk9SRUFD
SF9CVUlMVElOX0ZVTkNUSU9OX05BTUUobWFjcm8pIFxcIiAlIGFyZ3MpCisgICAgICAgIHVuaXF1
ZV9uYW1lcyA9IGxpc3Qoc2V0KFtmdW5jdGlvbi5mdW5jdGlvbl9uYW1lIGZvciBmdW5jdGlvbiBp
biBzZWxmLm1vZGVsKCkuYWxsX2Z1bmN0aW9ucygpXSkpCisgICAgICAgIHVuaXF1ZV9uYW1lcy5z
b3J0KCkKKyAgICAgICAgZm9yIGZ1bmN0aW9uX25hbWUgaW4gdW5pcXVlX25hbWVzOgorICAgICAg
ICAgICAgZnVuY3Rpb25fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZnVuY05hbWUnOiBmdW5j
dGlvbl9uYW1lLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAg
ICBtYWNybyglKGZ1bmNOYW1lKXMpIFxcIiAlIGZ1bmN0aW9uX2FyZ3MpCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3JfZ2xvYmFs
X3ByaXZhdGVfY29kZV9uYW1lX21hY3JvKHNlbGYpOgorICAgICAgICBhcmdzID0geworICAgICAg
ICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdtYWNy
b19wcmVmaXgnKSwKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCIjZGVmaW5lICUobWFjcm9QcmVmaXgpc19GT1JFQUNIX0JVSUxUSU5fRlVOQ1RJ
T05fUFJJVkFURV9HTE9CQUxfTkFNRShtYWNybykgXFwiICUgYXJncykKKyAgICAgICAgZnVuY3Rp
b25zID0gW2Z1bmN0aW9uIGZvciBmdW5jdGlvbiBpbiBzZWxmLm1vZGVsKCkuYWxsX2Z1bmN0aW9u
cygpIGlmIGZ1bmN0aW9uLmlzX2dsb2JhbF9wcml2YXRlXQorICAgICAgICBmdW5jdGlvbnMuc29y
dChrZXk9bGFtYmRhIHg6IHguZnVuY3Rpb25fbmFtZSkKKyAgICAgICAgZm9yIGZ1bmN0aW9uIGlu
IGZ1bmN0aW9uczoKKyAgICAgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSB7CisgICAgICAgICAgICAg
ICAgJ2Z1bmNOYW1lJzogZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAn
Y29kZU5hbWUnOiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1bmN0
aW9uKSwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgbWFj
cm8oJShmdW5jTmFtZSlzLCAlKGNvZGVOYW1lKXMpIFxcIiAlIGZ1bmN0aW9uX2FyZ3MpCisKKyAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaW1w
bGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5z
L2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc4NzRkY2FkOTRiNGE2YTJmYzdjNDE4ZjA0ZTY5ZDEzOTVjMWVkYjAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dl
bmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTAwIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0
IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gYnVpbHRpbnNfZ2Vu
ZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvcgorZnJvbSBidWlsdGluc19tb2RlbCBpbXBv
cnQgRnJhbWV3b3JrLCBGcmFtZXdvcmtzCitmcm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQg
QnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJ1aWx0aW5zQ29tYmluZWRJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG1vZGVsKToKKyAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwp
CisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzQnVp
bHRpbnMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykK
KworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGFyZ3MgPSB7CisgICAg
ICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1l
c3BhY2UnKSwKKyAgICAgICAgICAgICdtYWNyb1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdv
cmsuc2V0dGluZygnbWFjcm9fcHJlZml4JyksCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9u
cyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5Eb05vdEVkaXRXYXJu
aW5nKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9wcmltYXJ5X2hlYWRlcl9pbmNsdWRlcygpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFy
Z3MpKQorICAgICAgICBmb3IgZnVuY3Rpb24gaW4gc2VsZi5tb2RlbCgpLmFsbF9mdW5jdGlvbnMo
KToKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2VtYmVkZGVkX2Nv
ZGVfc3RyaW5nX3NlY3Rpb25fZm9yX2Z1bmN0aW9uKGZ1bmN0aW9uKSkKKyAgICAgICAgaWYgc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlOgorICAgICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5Db21iaW5lZEpTQ0ltcGxl
bWVudGF0aW9uU3RhdGljTWFjcm9zKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBlbGlmIHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJDb3JlOgorICAgICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5Db21iaW5lZFdlYkNvcmVJbXBsZW1l
bnRhdGlvblN0YXRpY01hY3Jvcykuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VCb3R0b20pLnN1YnN0aXR1dGUoYXJn
cykpCisKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdl
bmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6CisgICAgICAgIGhlYWRlcl9p
bmNsdWRlcyA9IFsKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIl0sCisgICAgICAgICAg
ICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJidWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuaCIp
LAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNv
cmUiXSwKKyAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImhlYXAvSGVhcElubGlu
ZXMuaCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwg
IldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIkph
dmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oIiksCisgICAgICAgICAgICAp
LAorICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAorICAgICAgICAgICAgICAgICgiSmF2YVNjcmlw
dENvcmUiLCAicnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgiKSwKKyAgICAgICAgICAgICksCisg
ICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29y
ZSIsICJydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgiKSwKKyAgICAgICAgICAgICksCisgICAg
ICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAg
KCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1ZNLmgiKSwKKyAgICAgICAgICAgICksCisgICAg
ICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAg
KCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgiKSwKKyAgICAg
ICAgICAgICksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJDb3JlIl0sCisg
ICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL0ludHJpbnNpYy5oIiks
CisgICAgICAgICAgICApLAorICAgICAgICBdCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihz
ZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDI1NjEyMDIyMTczZTA0NTYxZDBiMzQyODNkZmFi
Njk1ODUyOGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIu
cHkKQEAgLTAsMCArMSwxMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmln
aHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWls
dGluc0dlbmVyYXRvciwgV0tfbGNmaXJzdCwgV0tfdWNmaXJzdAorZnJvbSBidWlsdGluc190ZW1w
bGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCits
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCdWlsdGluc0ludGVy
bmFsc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCk6CisgICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9f
KHNlbGYsIG1vZGVsKQorICAgICAgICBzZWxmLmludGVybmFscyA9IFtvYmplY3QgZm9yIG9iamVj
dCBpbiBtb2RlbC5vYmplY3RzIGlmICdpbnRlcm5hbCcgaW4gb2JqZWN0LmFubm90YXRpb25zXQor
CisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICIlc0pTQnVp
bHRpbkludGVybmFscy5oIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNw
YWNlJykKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGFyZ3MgPSB7
CisgICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCduYW1lc3BhY2UnKSwKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1
dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuSGVh
ZGVySW5jbHVkZUd1YXJkKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkpCisKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1
dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25f
Zm9yX29iamVjdCgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
Lk5hbWVzcGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAgICByZXR1cm4gIlxu
XG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9p
bmNsdWRlcyhzZWxmKToKKyAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWworICAgICAgICAgICAg
KFsiV2ViQ29yZSJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImhlYXAvV2Vha0lubGluZXMuaCIpKSwK
KyAgICAgICAgICAgIChbIldlYkNvcmUiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1ZN
LmgiKSkKKyAgICAgICAgXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgor
ICAgICAgICAgICAgaGVhZGVyX2luY2x1ZGVzLmFwcGVuZCgoWyJXZWJDb3JlIl0sICgiV2ViQ29y
ZSIsIG9iamVjdC5vYmplY3RfbmFtZSArICJCdWlsdGlucy5oIikpKQorCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2lu
Y2x1ZGVzKSkKKworICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2VsZik6Cisg
ICAgICAgIGxpbmVzID0gWyJjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsiLAorICAgICAgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgICAgICAgImNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zIHsiLAorICAgICAgICAgICAgICAgICAicHVibGljOiJdCisKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCIgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOyIp
CisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX21ldGhvZHMoKSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfYWNjZXNzb3JzKCkpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgicHJpdmF0ZToiKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9tZW1i
ZXJzKCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgifTsiKQorICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorCisgICAgZGVmIGFjY2Vzc29yX25hbWUoc2VsZiwgb2JqZWN0KToKKyAgICAg
ICAgcmV0dXJuIFdLX2xjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1lKQorCisgICAgZGVmIG1lbWJl
cl9uYW1lKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiAibV8iICsgc2VsZi5hY2Nlc3Nv
cl9uYW1lKG9iamVjdCkKKworICAgIGRlZiBtZW1iZXJfdHlwZShzZWxmLCBvYmplY3QpOgorICAg
ICAgICByZXR1cm4gV0tfdWNmaXJzdChvYmplY3Qub2JqZWN0X25hbWUpICsgIkJ1aWx0aW5GdW5j
dGlvbnMiCisKKyAgICBkZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgcmV0dXJu
ICIiIgorICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgaW5pdGlh
bGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOworIiIiCisKKyAgICBkZWYgZ2VuZXJhdGVfYWNjZXNz
b3JzKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2Vs
Zi5pbnRlcm5hbHM6CisgICAgICAgICAgICBhY2Nlc3NvciA9ICIgICAgJXMmICVzKCkgeyByZXR1
cm4gJXM7IH0iICUgKHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSwgc2VsZi5hY2Nlc3Nvcl9uYW1l
KG9iamVjdCksIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25z
LmdldCgnY29uZGl0aW9uYWwnKSwgYWNjZXNzb3IpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiIp
CisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfbWVt
YmVycyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbIiAgICBKU0M6OlZNJiBtX3ZtOyJdCisgICAg
ICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBtZW1iZXIgPSAi
ICAgICVzICVzOyIgJSAoc2VsZi5tZW1iZXJfdHlwZShvYmplY3QpLCBzZWxmLm1lbWJlcl9uYW1l
KG9iamVjdCkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3Jh
cF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIG1lbWJl
cikpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBs
ZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTgyNTA2N2E1NDI0ZjY2OTY5ZTU2NmZkNWZjZGE0
YTU5MzFmN2RmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1l
bnRhdGlvbi5weQpAQCAtMCwwICsxLDE1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisj
IENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitm
cm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1w
b3J0IEJ1aWx0aW5zR2VuZXJhdG9yLCBXS19sY2ZpcnN0LCBXS191Y2ZpcnN0Citmcm9tIGJ1aWx0
aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJ1aWx0
aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJh
dG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgorICAgICAgICBCdWlsdGluc0dl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCkKKyAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBb
b2JqZWN0IGZvciBvYmplY3QgaW4gbW9kZWwub2JqZWN0cyBpZiAnaW50ZXJuYWwnIGluIG9iamVj
dC5hbm5vdGF0aW9uc10KKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiAiJXNKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdv
cmsuc2V0dGluZygnbmFtZXNwYWNlJykKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
CisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgp
LmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKKyAgICAgICAgfQorCisgICAgICAgIHNl
Y3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5z
ZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRp
dFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX3ByaW1hcnlfaGVhZGVyX2luY2x1ZGVzKCkpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKworICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRvcCkuc3Vic3Rp
dHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlv
bl9mb3Jfb2JqZWN0KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQorCisgICAgICAgIHJldHVybiAi
XG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKHNlbGYpOgorICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCisgICAgICAgICAg
ICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgIkpTRE9NR2xvYmFs
T2JqZWN0LmgiKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisg
ICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgIldlYkNvcmVKU0NsaWVudERhdGEuaCIpLAorICAg
ICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAo
IkphdmFTY3JpcHRDb3JlIiwgImhlYXAvSGVhcElubGluZXMuaCIpLAorICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRD
b3JlIiwgImhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgiKSwKKyAgICAgICAgICAgICksCisgICAg
ICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIs
ICJydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgiKSwKKyAgICAgICAgICAgICksCisgICAgICAg
ICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJy
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgXQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRy
aWVzKGhlYWRlcl9pbmNsdWRlcykpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2Jq
ZWN0KHNlbGYpOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfY29uc3RydWN0b3IoKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfdmlzaXRfbWV0aG9kKCkpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2luaXRpYWxpemVfbWV0aG9kKCkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisK
KyAgICBkZWYgYWNjZXNzb3JfbmFtZShzZWxmLCBvYmplY3QpOgorICAgICAgICByZXR1cm4gV0tf
bGNmaXJzdChvYmplY3Qub2JqZWN0X25hbWUpCisKKyAgICBkZWYgbWVtYmVyX25hbWUoc2VsZiwg
b2JqZWN0KToKKyAgICAgICAgcmV0dXJuICJtXyIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0
KQorCisgICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBX
S191Y2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbkZ1bmN0aW9ucyIKKworICAg
IGRlZiBnZW5lcmF0ZV9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgZ3VhcmRzID0gc2V0KFtv
YmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpIGZvciBvYmplY3QgaW4gc2VsZi5p
bnRlcm5hbHMgaWYgJ2NvbmRpdGlvbmFsJyBpbiBvYmplY3QuYW5ub3RhdGlvbnNdKQorICAgICAg
ICBsaW5lcyA9IFsiSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zKEpTQzo6Vk0mIHZtKSIsCisgICAgICAgICAgICAgICAgICIgICAgOiBtX3ZtKHZt
KSJdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBp
bml0aWFsaXplciA9ICIgICAgLCAlcyhtX3ZtKSIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3Vh
cmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSwgaW5pdGlhbGl6ZXIpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoInsiKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVT
RURfUEFSQU0odm0pOyIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgifVxuIikKKyAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBwcm9wZXJ0eV9tYWNybyhzZWxmLCBvYmpl
Y3QpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSBE
RUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSkgXFwiKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAg
ICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcXCIpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgiICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS4lc0J1aWx0
aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgJXMoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkg
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpLCIgJSAoc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCksIHNlbGYuYWNj
ZXNzb3JfbmFtZShvYmplY3QpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgV0VCQ09SRV9G
T1JFQUNIXyVzX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpIiAl
IG9iamVjdC5vYmplY3RfbmFtZS51cHBlcigpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiN1bmRl
ZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMiKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQorCisgICAgZGVmIGdlbmVyYXRlX3Zpc2l0X21ldGhvZChzZWxmKToKKyAgICAgICAgbGluZXMg
PSBbInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0
b3ImIHZpc2l0b3IpIiwKKyAgICAgICAgICAgICAgICAgInsiXQorICAgICAgICBmb3Igb2JqZWN0
IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgdmlzaXQgPSAiICAgICVzLnZpc2l0KHZp
c2l0b3IpOyIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25z
LmdldCgnY29uZGl0aW9uYWwnKSwgdmlzaXQpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ9XG4iKQorICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9pbml0aWFs
aXplX3N0YXRpY19nbG9iYWxzKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsiICAgIEpTVk1DbGll
bnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5j
bGllbnREYXRhKTsiLAorICAgICAgICAgICAgICAgICAiICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpH
bG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0geyJdCisgICAgICAgIGZvciBvYmpl
Y3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNH
ZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlv
bmFsJyksIHNlbGYucHJvcGVydHlfbWFjcm8ob2JqZWN0KSkpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgiICAgIH07IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgZ2xvYmFsT2JqZWN0LmFkZFN0
YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxz
KSk7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgVU5VU0VEX1BBUkFNKGNsaWVudERhdGEp
OyIpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVf
aW5pdGlhbGl6ZV9tZXRob2Qoc2VsZik6CisgICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRp
bkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpIiwKKyAgICAgICAgICAgICAgICAieyIsCisgICAgICAgICAgICAgICAgIiAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsiXQorCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5p
bnRlcm5hbHM6CisgICAgICAgICAgICBpbml0ID0gIiAgICAlcy5pbml0KGdsb2JhbE9iamVjdCk7
IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1
aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdj
b25kaXRpb25hbCcpLCBpbml0KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIiKQorCisgICAgICAg
IGd1YXJkcyA9IHNldChbb2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKSBmb3Ig
b2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzIGlmICdjb25kaXRpb25hbCcgaW4gb2JqZWN0LmFubm90
YXRpb25zXSkKKyAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0
aF9ndWFyZCgiIHx8ICIuam9pbihndWFyZHMpLCBzZWxmLl9nZW5lcmF0ZV9pbml0aWFsaXplX3N0
YXRpY19nbG9iYWxzKCkpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgifSIpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJh
dGVfc2VwYXJhdGVfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4YzhmMmFjOGE2NDE1YTI5MWNmZjg4
OGNmMWY2ODBjMWQ2NjA0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5w
eQpAQCAtMCwwICsxLDE5OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdo
dCAoYykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1w
bGF0ZQorCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IK
K2Zyb20gYnVpbHRpbnNfbW9kZWwgaW1wb3J0IEZyYW1ld29ya3MKK2Zyb20gYnVpbHRpbnNfdGVt
cGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKwor
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQnVpbHRpbnNTZXBh
cmF0ZUhlYWRlckdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBvYmplY3QpOgorICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCkKKyAgICAgICAgc2VsZi5vYmplY3QgPSBvYmplY3QKKworICAgIGRlZiBv
dXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiJXNCdWlsdGlucy5oIiAlIEJ1
aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yT2JqZWN0KHNlbGYub2JqZWN0KQorCisgICAg
ZGVmIG1hY3JvX3ByZWZpeChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygnbWFjcm9fcHJlZml4JykKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6CisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKKyAgICAgICAgICAgICdtYWNy
b1ByZWZpeCc6IHNlbGYubWFjcm9fcHJlZml4KCksCisgICAgICAgICAgICAnb2JqZWN0TmFtZSc6
IHNlbGYub2JqZWN0Lm9iamVjdF9uYW1lLAorICAgICAgICAgICAgJ29iamVjdE1hY3JvJzogc2Vs
Zi5vYmplY3Qub2JqZWN0X25hbWUudXBwZXIoKSwKKyAgICAgICAgfQorCisgICAgICAgIGNvbmRp
dGlvbmFsX2d1YXJkID0gc2VsZi5vYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcp
CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5IZWFkZXJJbmNsdWRlR3VhcmQpLnN1YnN0aXR1
dGUoYXJncykpCisgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5j
bHVkZXMoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfZm9yd2FyZF9k
ZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRl
cy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdChzZWxmLm9iamVjdCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVfdGFibGVfbWFj
cm8oKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3Jf
Y29kZV9uYW1lX21hY3JvKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuU2VwYXJhdGVIZWFkZXJTdGF0aWNNYWNyb3MpLnN1YnN0aXR1dGUoYXJncykpCisgICAg
ICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJDb3JlOgorICAg
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5TZXBhcmF0ZUhlYWRl
cldyYXBwZXJCb2lsZXJwbGF0ZSkuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgICAgIGlmIHNl
bGYub2JqZWN0LmFubm90YXRpb25zLmdldCgnaW50ZXJuYWwnKToKKyAgICAgICAgICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLlNlcGFyYXRlSGVhZGVySW50ZXJuYWxG
dW5jdGlvbnNCb2lsZXJwbGF0ZSkuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VCb3R0b20pLnN1YnN0aXR1dGUoYXJn
cykpCisgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisK
KyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRl
X2ZvcndhcmRfZGVjbGFyYXRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gIiIibmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7Cit9IiIiCisKKyAgICBkZWYgZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKKyAgICAgICAgaGVhZGVyX2luY2x1
ZGVzID0gWworICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAorICAgICAgICAgICAgICAgICgiSmF2
YVNjcmlwdENvcmUiLCAiYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCIpLAor
ICAgICAgICAgICAgKSwKKworICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAorICAgICAgICAgICAg
ICAgICgiSmF2YVNjcmlwdENvcmUiLCAiYnVpbHRpbnMvQnVpbHRpblV0aWxzLmgiKSwKKyAgICAg
ICAgICAgICksCisKKyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAo
IkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSWRlbnRpZmllci5oIiksCisgICAgICAgICAgICAp
LAorCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2Ny
aXB0Q29yZSIsICJydW50aW1lL0pTRnVuY3Rpb24uaCIpLAorICAgICAgICAgICAgKSwKKyAgICAg
ICAgXQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19m
cm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKKworICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9u
X2Zvcl9vYmplY3Qoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBs
aW5lcy5hcHBlbmQoJy8qICVzICovJyAlIG9iamVjdC5vYmplY3RfbmFtZSkKKyAgICAgICAgbGlu
ZXMuZXh0ZW5kKHNlbGYuZ2VuZXJhdGVfZXh0ZXJuc19mb3Jfb2JqZWN0KG9iamVjdCkpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgiIikKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2VuZXJhdGVf
bWFjcm9zX2Zvcl9vYmplY3Qob2JqZWN0KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIiKQorICAg
ICAgICBsaW5lcy5leHRlbmQoc2VsZi5nZW5lcmF0ZV9kZWZpbmVzX2Zvcl9vYmplY3Qob2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV9l
eHRlcm5zX2Zvcl9vYmplY3Qoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgbGluZXMgPSBbXQorCisg
ICAgICAgIGZvciBmdW5jdGlvbiBpbiBvYmplY3QuZnVuY3Rpb25zOgorICAgICAgICAgICAgZnVu
Y3Rpb25fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnY29kZU5hbWUnOiBCdWlsdGluc0dlbmVy
YXRvci5tYW5nbGVkTmFtZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKSArICdDb2RlJywKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiImV4dGVybiBjb25zdCBjaGFyKiBz
XyUoY29kZU5hbWUpczsKK2V4dGVybiBjb25zdCBpbnQgc18lKGNvZGVOYW1lKXNMZW5ndGg7Citl
eHRlcm4gY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfJShjb2RlTmFtZSlzQ29uc3RydWN0
QWJpbGl0eTsiIiIgJSBmdW5jdGlvbl9hcmdzKQorCisgICAgICAgIHJldHVybiBsaW5lcworCisg
ICAgZGVmIGdlbmVyYXRlX21hY3Jvc19mb3Jfb2JqZWN0KHNlbGYsIG9iamVjdCk6CisgICAgICAg
IGFyZ3MgPSB7CisgICAgICAgICAgICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1hY3JvX3ByZWZpeCgp
LAorICAgICAgICAgICAgJ29iamVjdE1hY3JvJzogb2JqZWN0Lm9iamVjdF9uYW1lLnJlcGxhY2Uo
Jy4nLCAnXycpLnVwcGVyKCksCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNfRk9SRUFDSF8lKG9iamVj
dE1hY3JvKXNfQlVJTFRJTl9EQVRBKG1hY3JvKSBcXCIgJSBhcmdzKQorICAgICAgICBmb3IgZnVu
Y3Rpb24gaW4gb2JqZWN0LmZ1bmN0aW9uczoKKyAgICAgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSB7
CisgICAgICAgICAgICAgICAgJ2Z1bmNOYW1lJzogZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSwKKyAg
ICAgICAgICAgICAgICAnbWFuZ2xlZE5hbWUnOiBCdWlsdGluc0dlbmVyYXRvci5tYW5nbGVkTmFt
ZUZvckZ1bmN0aW9uKGZ1bmN0aW9uKSwKKyAgICAgICAgICAgICAgICAncGFyYW1Db3VudCc6IGxl
bihmdW5jdGlvbi5wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCIgICAgbWFjcm8oJShmdW5jTmFtZSlzLCAlKG1hbmdsZWROYW1lKXMsICUocGFy
YW1Db3VudClkKSBcXCIgJSBmdW5jdGlvbl9hcmdzKQorICAgICAgICByZXR1cm4gbGluZXMKKwor
ICAgIGRlZiBnZW5lcmF0ZV9kZWZpbmVzX2Zvcl9vYmplY3Qoc2VsZiwgb2JqZWN0KToKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZnVuY3Rpb24gaW4gb2JqZWN0LmZ1bmN0aW9uczoK
KyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2Vs
Zi5tYWNyb19wcmVmaXgoKSwKKyAgICAgICAgICAgICAgICAnb2JqZWN0TWFjcm8nOiBvYmplY3Qu
b2JqZWN0X25hbWUucmVwbGFjZSgnLicsICdfJykudXBwZXIoKSwKKyAgICAgICAgICAgICAgICAn
ZnVuY3Rpb25NYWNybyc6IGZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUudXBwZXIoKSwKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNf
QlVJTFRJTl8lKG9iamVjdE1hY3JvKXNfJShmdW5jdGlvbk1hY3JvKXMgMSIgJSBhcmdzKQorCisg
ICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9yX2NvZGVf
dGFibGVfbWFjcm8oc2VsZik6CisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnbWFjcm9Q
cmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ21hY3JvX3ByZWZpeCcpLAor
ICAgICAgICAgICAgJ29iamVjdE1hY3JvJzogc2VsZi5vYmplY3Qub2JqZWN0X25hbWUudXBwZXIo
KSwKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5k
KCIjZGVmaW5lICUobWFjcm9QcmVmaXgpc19GT1JFQUNIXyUob2JqZWN0TWFjcm8pc19CVUlMVElO
X0NPREUobWFjcm8pIFxcIiAlIGFyZ3MpCisgICAgICAgIGZvciBmdW5jdGlvbiBpbiBzZWxmLm9i
amVjdC5mdW5jdGlvbnM6CisgICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0geworICAgICAgICAg
ICAgICAgICdmdW5jTmFtZSc6IGZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUsCisgICAgICAgICAgICAg
ICAgJ292ZXJyaWRkZW5OYW1lJzogZnVuY3Rpb24ub3ZlcnJpZGRlbl9uYW1lLAorICAgICAgICAg
ICAgICAgICdjb2RlTmFtZSc6IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yRnVuY3Rp
b24oZnVuY3Rpb24pICsgJ0NvZGUnLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoIiAgICBtYWNybyglKGNvZGVOYW1lKXMsICUoZnVuY05hbWUpcywgJShvdmVycmlk
ZGVuTmFtZSlzLCBzXyUoY29kZU5hbWUpc0xlbmd0aCkgXFwiICUgZnVuY3Rpb25fYXJncykKKyAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9u
X2Zvcl9jb2RlX25hbWVfbWFjcm8oc2VsZik6CisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAg
ICAnbWFjcm9QcmVmaXgnOiBzZWxmLm1hY3JvX3ByZWZpeCgpLAorICAgICAgICAgICAgJ29iamVj
dE1hY3JvJzogc2VsZi5vYmplY3Qub2JqZWN0X25hbWUudXBwZXIoKSwKKyAgICAgICAgfQorCisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCIjZGVmaW5lICUobWFjcm9Q
cmVmaXgpc19GT1JFQUNIXyUob2JqZWN0TWFjcm8pc19CVUlMVElOX0ZVTkNUSU9OX05BTUUobWFj
cm8pIFxcIiAlIGFyZ3MpCisgICAgICAgIHVuaXF1ZV9uYW1lcyA9IGxpc3Qoc2V0KFtmdW5jdGlv
bi5mdW5jdGlvbl9uYW1lIGZvciBmdW5jdGlvbiBpbiBzZWxmLm9iamVjdC5mdW5jdGlvbnNdKSkK
KyAgICAgICAgdW5pcXVlX25hbWVzLnNvcnQoKQorICAgICAgICBmb3IgZnVuY3Rpb25fbmFtZSBp
biB1bmlxdWVfbmFtZXM6CisgICAgICAgICAgICBmdW5jdGlvbl9hcmdzID0geworICAgICAgICAg
ICAgICAgICdmdW5jTmFtZSc6IGZ1bmN0aW9uX25hbWUsCisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIG1hY3JvKCUoZnVuY05hbWUpcykgXFwiICUgZnVuY3Rp
b25fYXJncykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVf
c2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNlZDlhNTM4NjdkNDJiYzg4NTYyZDIwOGI0NzI0Y2Y2ZjY2ODQ5MDAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5z
L2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEs
MTEyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCByZQoraW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20g
YnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvciwgV0tfbGNmaXJzdAor
ZnJvbSBidWlsdGluc19tb2RlbCBpbXBvcnQgRnJhbWV3b3JrLCBGcmFtZXdvcmtzCitmcm9tIGJ1
aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVt
cGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJ1
aWx0aW5zU2VwYXJhdGVJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBvYmplY3QpOgorICAgICAgICBCdWlsdGlu
c0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCkKKyAgICAgICAgc2VsZi5vYmplY3QgPSBv
YmplY3QKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAi
JXNCdWlsdGlucy5jcHAiICUgQnVpbHRpbnNHZW5lcmF0b3IubWFuZ2xlZE5hbWVGb3JPYmplY3Qo
c2VsZi5vYmplY3QpCisKKyAgICBkZWYgbWFjcm9fcHJlZml4KHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdtYWNyb19wcmVmaXgnKQorCisgICAg
ZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAg
ICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScp
LAorICAgICAgICAgICAgJ21hY3JvUHJlZml4Jzogc2VsZi5tYWNyb19wcmVmaXgoKSwKKyAgICAg
ICAgICAgICdvYmplY3RNYWNybyc6IHNlbGYub2JqZWN0Lm9iamVjdF9uYW1lLnVwcGVyKCksCisg
ICAgICAgICAgICAnb2JqZWN0TmFtZUxDJzogV0tfbGNmaXJzdChzZWxmLm9iamVjdC5vYmplY3Rf
bmFtZSksCisgICAgICAgIH0KKworICAgICAgICBjb25kaXRpb25hbF9ndWFyZCA9IHNlbGYub2Jq
ZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKQorCisgICAgICAgIHNlY3Rpb25zID0g
W10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcp
LnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X3ByaW1hcnlfaGVhZGVyX2luY2x1ZGVzKCkpCisgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJk
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCIjaWYgJXMiICUgY29u
ZGl0aW9uYWxfZ3VhcmQpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3Nl
Y29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIGZv
ciBmdW5jdGlvbiBpbiBzZWxmLm9iamVjdC5mdW5jdGlvbnM6CisgICAgICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9lbWJlZGRlZF9jb2RlX3N0cmluZ19zZWN0aW9uX2Zvcl9m
dW5jdGlvbihmdW5jdGlvbikpCisgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMg
RnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZToKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuU2VwYXJhdGVKU0NJbXBsZW1lbnRhdGlvblN0YXRpY01hY3Jvcyku
c3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgZWxpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrIGlz
IEZyYW1ld29ya3MuV2ViQ29yZToKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuU2VwYXJhdGVXZWJDb3JlSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3MpLnN1
YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBpZiBjb25kaXRp
b25hbF9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgiI2Vu
ZGlmIC8vICVzXG4iICUgY29uZGl0aW9uYWxfZ3VhcmQpCisKKyAgICAgICAgcmV0dXJuICJcblxu
Ii5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5j
bHVkZXMoc2VsZik6CisgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKKyAgICAgICAgICAgIChb
IkphdmFTY3JpcHRDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJi
dWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuaCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIkph
dmFTY3JpcHRDb3JlIiwgImhlYXAvSGVhcElubGluZXMuaCIpLAorICAgICAgICAgICAgKSwKKyAg
ICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAg
ICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oIiksCisgICAgICAg
ICAgICApLAorICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAorICAgICAgICAgICAgICAgICgiSmF2
YVNjcmlwdENvcmUiLCAicnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgiKSwKKyAgICAgICAgICAg
ICksCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2Ny
aXB0Q29yZSIsICJydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgiKSwKKyAgICAgICAgICAgICks
CisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJDb3JlIl0sCisgICAgICAgICAg
ICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1ZNLmgiKSwKKyAgICAgICAgICAgICks
CisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwg
ImJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaCIpLAorICAgICAgICAgICAgKSwKKyAg
ICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAg
ICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaCIpLAorICAg
ICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiXSwK
KyAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSW50cmluc2ljLmgi
KSwKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKworICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQpuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wNGFiZTU2NzgwMzcwODAxOTY5OWIyYWM0Yzg4MDUyMmZkZDg1NDY5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQpAQCAtMCwwICsxLDExOSBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisKK2ltcG9ydCBsb2dnaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBi
dWlsdGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yLCBXS19sY2ZpcnN0LCBX
S191Y2ZpcnN0Citmcm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQorCisKK2NsYXNzIEJ1aWx0aW5zV3JhcHBlckhlYWRlckdlbmVyYXRvcihCdWlsdGluc0dl
bmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKKyAgICAgICAgQnVpbHRp
bnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVu
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzSlNCdWlsdGlucy5oIiAlIHNlbGYubW9kZWwo
KS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRw
dXQoc2VsZik6CisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnbmFtZXNwYWNlJzogc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKKyAgICAgICAgfQorCisg
ICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
LkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkKS5zdWJzdGl0dXRlKGFy
Z3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlfaGVh
ZGVyX2luY2x1ZGVzKCkpCisKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdCgpKQorICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShh
cmdzKSkKKworICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYg
Z2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKKyAgICAgICAgaGVhZGVy
X2luY2x1ZGVzID0gWworICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAorICAgICAgICAgICAgICAg
ICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGltZS9WTS5oIiksCisgICAgICAgICAgICApLAorICAg
ICAgICBdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6CisgICAg
ICAgICAgICBoZWFkZXJfaW5jbHVkZXMuYXBwZW5kKChbIldlYkNvcmUiXSwgKCJXZWJDb3JlIiwg
b2JqZWN0Lm9iamVjdF9uYW1lICsgIkJ1aWx0aW5zLmgiKSkpCisKKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVk
ZXMpKQorCisgICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdChzZWxmKToKKyAgICAg
ICAgbGluZXMgPSBbImNsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7IiwKKyAgICAgICAgICAgICAg
ICAgInB1YmxpYzoiXQorCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2NvbnN0
cnVjdG9yKCkpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2FjY2Vzc29ycygp
KQorICAgICAgICBsaW5lcy5hcHBlbmQoInByaXZhdGU6IikKKyAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfbWVtYmVycygpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIn07IikKKyAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBhY2Nlc3Nvcl9uYW1lKHNl
bGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBXS19sY2ZpcnN0KG9iamVjdC5vYmplY3RfbmFt
ZSkgKyAiQnVpbHRpbnMiCisKKyAgICBkZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0KToKKyAg
ICAgICAgcmV0dXJuICJtXyIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KQorCisgICAgZGVm
IG1lbWJlcl90eXBlKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBXS191Y2ZpcnN0KG9i
amVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbnNXcmFwcGVyIgorCisgICAgZGVmIGdlbmVyYXRl
X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsiICAgIGV4cGxpY2l0IEpTQnVp
bHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkiLAorICAgICAgICAgICAgICAgICAiICAgICAgICA6
IG1fdm0odm0pIl0KKyAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoK
KyAgICAgICAgICAgIG1lbWJlcl9pbml0ID0gIiAgICAgICAgLCAlcygmbV92bSkiICUgc2VsZi5t
ZW1iZXJfbmFtZShvYmplY3QpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5l
cmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFs
JyksIG1lbWJlcl9pbml0KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgeyIpCisgICAgICAg
IGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6CisgICAgICAgICAgICBpZiBub3Qg
J2ludGVybmFsJyBpbiBvYmplY3QuYW5ub3RhdGlvbnM6CisgICAgICAgICAgICAgICAgY29udGlu
dWUKKyAgICAgICAgICAgIGludGVybmFsX2V4cG9ydF9uYW1lcyA9ICIgICAgICAgICVzLmV4cG9y
dE5hbWVzKCk7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlv
bnMuZ2V0KCdjb25kaXRpb25hbCcpLCBpbnRlcm5hbF9leHBvcnRfbmFtZXMpKQorICAgICAgICBs
aW5lcy5hcHBlbmQoIiAgICB9XG4iKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQor
CisgICAgZGVmIGdlbmVyYXRlX2FjY2Vzc29ycyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQor
ICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgorICAgICAgICAgICAg
YWNjZXNzb3IgPSAiICAgICVzJiAlcygpIHsgcmV0dXJuICVzOyB9IiAlIChzZWxmLm1lbWJlcl90
eXBlKG9iamVjdCksIHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpLCBzZWxmLm1lbWJlcl9uYW1l
KG9iamVjdCkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3Jh
cF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIGFjY2Vz
c29yKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIiKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQorCisgICAgZGVmIGdlbmVyYXRlX21lbWJlcnMoc2VsZik6CisgICAgICAgIGxpbmVz
ID0gWyIgICAgSlNDOjpWTSYgbV92bTsiXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9k
ZWwoKS5vYmplY3RzOgorICAgICAgICAgICAgbWVtYmVyID0gIiAgICAlcyAlczsiICUgKHNlbGYu
bWVtYmVyX3R5cGUob2JqZWN0KSwgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3Qu
YW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBtZW1iZXIpKQorICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5l
cmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNTU5MTdmZGM4MmQz
YzZjNjc1OTE2YjA0ZWMwZjYxNDdjMzhlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJf
aW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSw2MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjCisjIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dn
aW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBidWlsdGluc19nZW5lcmF0
b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yCitmcm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBv
cnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJ1aWx0aW5zV3JhcHBlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbW9kZWwpOgorICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2Rl
bCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiJXNK
U0J1aWx0aW5zLmNwcCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFj
ZScpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBhcmdzID0gewor
ICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
bmFtZXNwYWNlJyksCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5Eb05vdEVkaXRXYXJuaW5nKS5zdWJzdGl0dXRl
KGFyZ3MpKQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25f
Zm9yX29iamVjdCgpKQorCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKwor
ICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2VsZik6CisgICAgICAgIGhlYWRl
cl9pbmNsdWRlcyA9IFtdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVj
dHM6CisgICAgICAgICAgICBoZWFkZXJfaW5jbHVkZXMuYXBwZW5kKChbIldlYkNvcmUiXSwgKCJX
ZWJDb3JlIiwgb2JqZWN0Lm9iamVjdF9uYW1lICsgIkJ1aWx0aW5zLmNwcCIpKSkKKworICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhl
YWRlcl9pbmNsdWRlcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdm
YzdhMTA0MWIzMDNmNDNiMzkyODc2ZWJmZDEwYmI4MmM2YjY5YWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVy
YXRvci5weQpAQCAtMCwwICsxLDE4MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENv
cHlyaWdodCAoYykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQorZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCitpbXBvcnQganNvbgorCitmcm9tIGJ1aWx0aW5zX21vZGVsIGltcG9ydCBCdWls
dGluRnVuY3Rpb24sIEJ1aWx0aW5PYmplY3QKK2Zyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9y
dCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworIyBUaGVzZSBtYXRjaCBXS19sY2ZpcnN0IGFuZCBX
S191Y2ZpcnN0IGRlZmluZWQgaW4gQ29kZUdlbmVyYXRvci5wbS4KK2RlZiBXS19sY2ZpcnN0KHN0
cik6CisgICAgc3RyID0gc3RyWzoxXS5sb3dlcigpICsgc3RyWzE6XQorICAgIHN0ciA9IHN0ci5y
ZXBsYWNlKCdkT00nLCAnZG9tJykKKyAgICBzdHIgPSBzdHIucmVwbGFjZSgndVJMJywgJ3VybCcp
CisgICAgc3RyID0gc3RyLnJlcGxhY2UoJ2pTJywgJ2pzJykKKyAgICBzdHIgPSBzdHIucmVwbGFj
ZSgneE1MJywgJ3htbCcpCisgICAgc3RyID0gc3RyLnJlcGxhY2UoJ3hTTFQnLCAneHNsdCcpCisg
ICAgc3RyID0gc3RyLnJlcGxhY2UoJ2NTUycsICdjc3MnKQorICAgIHN0ciA9IHN0ci5yZXBsYWNl
KCdyVEMnLCAncnRjJykKKyAgICByZXR1cm4gc3RyCisKKworZGVmIFdLX3VjZmlyc3Qoc3RyKToK
KyAgICBzdHIgPSBzdHJbOjFdLnVwcGVyKCkgKyBzdHJbMTpdCisgICAgc3RyID0gc3RyLnJlcGxh
Y2UoJ1htbCcsICdYTUwnKQorICAgIHN0ciA9IHN0ci5yZXBsYWNlKCdTdmcnLCAnU1ZHJykKKyAg
ICByZXR1cm4gc3RyCisKKworY2xhc3MgQnVpbHRpbnNHZW5lcmF0b3I6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsKToKKyAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAorCisgICAgZGVm
IG1vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgICMgVGhlc2Ug
bWV0aG9kcyBhcmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgorCisgICAgZGVmIGdlbmVyYXRl
X291dHB1dChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShz
ZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIyBTaGFyZWQgY29kZSBnZW5lcmF0aW9uIG1ldGhv
ZHMuCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAgICAgIHJhd19saWNlbnNl
ID0gVGVtcGxhdGUoVGVtcGxhdGVzLkxpY2Vuc2VUZXh0KS5zdWJzdGl0dXRlKE5vbmUpCisgICAg
ICAgIGNvcHlyaWdodHMgPSBzZWxmLl9tb2RlbC5jb3B5cmlnaHRzKCkKKyAgICAgICAgY29weXJp
Z2h0cy5zb3J0KCkKKworICAgICAgICBsaWNlbnNlX2Jsb2NrID0gW10KKyAgICAgICAgbGljZW5z
ZV9ibG9jay5hcHBlbmQoIi8qIikKKyAgICAgICAgZm9yIGNvcHlyaWdodCBpbiBjb3B5cmlnaHRz
OgorICAgICAgICAgICAgbGljZW5zZV9ibG9jay5hcHBlbmQoIiAqIENvcHlyaWdodCAoYykgJXMi
ICUgY29weXJpZ2h0KQorICAgICAgICBpZiBsZW4oY29weXJpZ2h0cykgPiAwOgorICAgICAgICAg
ICAgbGljZW5zZV9ibG9jay5hcHBlbmQoIiAqICIpCisKKyAgICAgICAgZm9yIGxpbmUgaW4gcmF3
X2xpY2Vuc2Uuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBsaWNlbnNlX2Jsb2NrLmFwcGVuZCgi
ICogIiArIGxpbmUpCisKKyAgICAgICAgbGljZW5zZV9ibG9jay5hcHBlbmQoIiAqLyIpCisKKyAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaWNlbnNlX2Jsb2NrKQorCisgICAgZGVmIGdlbmVyYXRl
X2luY2x1ZGVzX2Zyb21fZW50cmllcyhzZWxmLCBlbnRyaWVzKToKKyAgICAgICAgaW5jbHVkZXMg
PSBzZXQoKQorICAgICAgICBmb3IgZW50cnkgaW4gZW50cmllczoKKyAgICAgICAgICAgIChhbGxv
d2VkX2ZyYW1ld29ya19uYW1lcywgZGF0YSkgPSBlbnRyeQorICAgICAgICAgICAgKGZyYW1ld29y
a19uYW1lLCBoZWFkZXJfcGF0aCkgPSBkYXRhCisKKyAgICAgICAgICAgIGlmIHNlbGYubW9kZWwo
KS5mcmFtZXdvcmsubmFtZSBub3QgaW4gYWxsb3dlZF9mcmFtZXdvcmtfbmFtZXM6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
bmFtZSAhPSBmcmFtZXdvcmtfbmFtZToKKyAgICAgICAgICAgICAgICBpbmNsdWRlcy5hZGQoIiNp
bmNsdWRlIDwlcy8lcz4iICUgKGZyYW1ld29ya19uYW1lLCBvcy5wYXRoLmJhc2VuYW1lKGhlYWRl
cl9wYXRoKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluY2x1ZGVzLmFk
ZCgiI2luY2x1ZGUgXCIlc1wiIiAlIG9zLnBhdGguYmFzZW5hbWUoaGVhZGVyX3BhdGgpKQorCisg
ICAgICAgIHJldHVybiBzb3J0ZWQobGlzdChpbmNsdWRlcykpCisKKyAgICBkZWYgZ2VuZXJhdGVf
cHJpbWFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6CisgICAgICAgIG5hbWUsIF8gPSBvcy5wYXRo
LnNwbGl0ZXh0KHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpCisgICAgICAgIHJldHVybiAnXG4nLmpv
aW4oWworICAgICAgICAgICAgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIsCisgICAgICAgICAgICAi
I2luY2x1ZGUgXCIlcy5oXCIiICUgbmFtZSwKKyAgICAgICAgXSkKKworICAgIGRlZiBnZW5lcmF0
ZV9lbWJlZGRlZF9jb2RlX3N0cmluZ19zZWN0aW9uX2Zvcl9mdW5jdGlvbihzZWxmLCBmdW5jdGlv
bik6CisgICAgICAgIHRleHQgPSBmdW5jdGlvbi5mdW5jdGlvbl9zb3VyY2UKKyAgICAgICAgIyBX
cmFwIGl0IGluIHBhcmVucyB0byBhdm9pZCBhZGRpbmcgdG8gZ2xvYmFsIHNjb3BlLgorICAgICAg
ICB0ZXh0ID0gIihmdW5jdGlvbiAiICsgdGV4dFt0ZXh0LmluZGV4KCIoIik6XSArICIpIgorICAg
ICAgICBlbWJlZGRlZFNvdXJjZUxlbmd0aCA9IGxlbih0ZXh0KSArIDEgICMgRm9yIGV4dHJhIFxu
LgorICAgICAgICAjIExhenkgd2F5IHRvIGVzY2FwZSBxdW90ZXMsIEkgdGhpbms/CisgICAgICAg
IHRleHRMaW5lcyA9IGpzb24uZHVtcHModGV4dClbMTotMV0uc3BsaXQoIlxcbiIpCisgICAgICAg
ICMgVGhpcyBsb29rcyBzY2FyeSBiZWNhdXNlIHdlIG5lZWQgdGhlIEpTIHNvdXJjZSBpdHNlbGYg
dG8gaGF2ZSBuZXdsaW5lcy4KKyAgICAgICAgZW1iZWRkZWRTb3VyY2UgPSAnXG4nLmpvaW4oWycg
ICAgIiVzXFxuIiBcXCcgJSBsaW5lIGZvciBsaW5lIGluIHRleHRMaW5lc10pCisKKyAgICAgICAg
Y29uc3RydWN0QWJpbGl0eSA9ICJDYW5ub3RDb25zdHJ1Y3QiCisgICAgICAgIGlmIGZ1bmN0aW9u
LmlzX2NvbnN0cnVjdG9yOgorICAgICAgICAgICAgY29uc3RydWN0QWJpbGl0eSA9ICJDYW5Db25z
dHJ1Y3QiCisKKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICdjb2RlTmFtZSc6IEJ1aWx0
aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yRnVuY3Rpb24oZnVuY3Rpb24pICsgJ0NvZGUnLAor
ICAgICAgICAgICAgJ2VtYmVkZGVkU291cmNlJzogZW1iZWRkZWRTb3VyY2UsCisgICAgICAgICAg
ICAnZW1iZWRkZWRTb3VyY2VMZW5ndGgnOiBlbWJlZGRlZFNvdXJjZUxlbmd0aCwKKyAgICAgICAg
ICAgICdjYW5Db25zdHJ1Y3QnOiBjb25zdHJ1Y3RBYmlsaXR5LAorICAgICAgICAgICAgJ2ludHJp
bnNpYyc6IGZ1bmN0aW9uLmludHJpbnNpYworICAgICAgICB9CisKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBsaW5lcy5hcHBlbmQoImNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzXyUo
Y29kZU5hbWUpc0NvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OiUoY2Fu
Q29uc3RydWN0KXM7IiAlIGFyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiY29uc3QgaW50IHNf
JShjb2RlTmFtZSlzTGVuZ3RoID0gJShlbWJlZGRlZFNvdXJjZUxlbmd0aClkOyIgJSBhcmdzKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoInN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzXyUoY29k
ZU5hbWUpc0ludHJpbnNpYyA9IEpTQzo6JShpbnRyaW5zaWMpczsiICUgYXJncykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCJjb25zdCBjaGFyKiBzXyUoY29kZU5hbWUpcyA9XG4lKGVtYmVkZGVkU291
cmNlKXNcbjsiICUgYXJncykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAg
ICMgSGVscGVyIG1ldGhvZHMuCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHdyYXBfd2l0
aF9ndWFyZChndWFyZCwgdGV4dCk6CisgICAgICAgIGlmIG5vdCBndWFyZDoKKyAgICAgICAgICAg
IHJldHVybiB0ZXh0CisgICAgICAgIHJldHVybiAnXG4nLmpvaW4oWworICAgICAgICAgICAgJyNp
ZiAlcycgJSBndWFyZCwKKyAgICAgICAgICAgIHRleHQsCisgICAgICAgICAgICAnI2VuZGlmIC8v
ICVzJyAlIGd1YXJkLAorICAgICAgICBdKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBt
YW5nbGVkTmFtZUZvck9iamVjdChvYmplY3QpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShv
YmplY3QsIEJ1aWx0aW5PYmplY3QpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJbnZh
bGlkIGFyZ3VtZW50IHBhc3NlZCB0byBtYW5nbGVkTmFtZUZvck9iamVjdCgpIikKKworICAgICAg
ICBkZWYgdG9DYW1lbChtYXRjaCk6CisgICAgICAgICAgICBzdHIgPSBtYXRjaC5ncm91cCgwKQor
ICAgICAgICAgICAgcmV0dXJuIHN0clsxXS51cHBlcigpCisgICAgICAgIHJldHVybiByZS5zdWIo
cidcLlthLXpdJywgdG9DYW1lbCwgb2JqZWN0Lm9iamVjdF9uYW1lLCBmbGFncz1yZS5JR05PUkVD
QVNFKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtYW5nbGVkTmFtZUZvckZ1bmN0aW9u
KGZ1bmN0aW9uKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZnVuY3Rpb24sIEJ1aWx0aW5G
dW5jdGlvbik6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQg
cGFzc2VkIHRvIG1hbmdsZWROYW1lRm9yRnVuY3Rpb24oKSIpCisKKyAgICAgICAgZnVuY3Rpb25f
bmFtZSA9IFdLX3VjZmlyc3QoZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSkKKworICAgICAgICBkZWYg
dG9DYW1lbChtYXRjaCk6CisgICAgICAgICAgICBzdHIgPSBtYXRjaC5ncm91cCgwKQorICAgICAg
ICAgICAgcmV0dXJuIHN0clsxXS51cHBlcigpCisgICAgICAgIGZ1bmN0aW9uX25hbWUgPSByZS5z
dWIocidcLlthLXpdJywgdG9DYW1lbCwgZnVuY3Rpb25fbmFtZSwgZmxhZ3M9cmUuSUdOT1JFQ0FT
RSkKKyAgICAgICAgaWYgZnVuY3Rpb24uaXNfY29uc3RydWN0b3I6CisgICAgICAgICAgICBmdW5j
dGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZSArICJDb25zdHJ1Y3RvciIKKworICAgICAgICBvYmpl
Y3RfbmFtZSA9IEJ1aWx0aW5zR2VuZXJhdG9yLm1hbmdsZWROYW1lRm9yT2JqZWN0KGZ1bmN0aW9u
Lm9iamVjdCkKKyAgICAgICAgcmV0dXJuIFdLX2xjZmlyc3Qob2JqZWN0X25hbWUgKyBmdW5jdGlv
bl9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19tb2RlbC5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY0ZGE3NWQxNzRlNDcwMjNm
ZmEwNGUyZjc2OTBkZGUxMmUyMmYyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkKQEAgLTAsMCArMSwz
MTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgb3MK
K2ltcG9ydCBzeXMKKworZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKKworX0ZSQU1FV09SS19DT05GSUdfTUFQID0geworICAgICJKYXZhU2NyaXB0Q29y
ZSI6IHsKKyAgICAgICAgIm1hY3JvX3ByZWZpeCI6ICJKU0MiLAorICAgICAgICAibmFtZXNwYWNl
IjogIkpTQyIsCisgICAgfSwKKyAgICAiV2ViQ29yZSI6IHsKKyAgICAgICAgIm1hY3JvX3ByZWZp
eCI6ICJXRUJDT1JFIiwKKyAgICAgICAgIm5hbWVzcGFjZSI6ICJXZWJDb3JlIiwKKyAgICB9LAor
fQorCitmdW5jdGlvbkhlYWRSZWdFeHAgPSByZS5jb21waWxlKHIiKD86QFtcd3w9XFtcXSBcIlwu
XStccypcbikqZnVuY3Rpb25ccytcdytccypcKC4qP1wpIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9U
QUxMKQorZnVuY3Rpb25HbG9iYWxQcml2YXRlUmVnRXhwID0gcmUuY29tcGlsZShyIi4qXkBnbG9i
YWxQcml2YXRlIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQorZnVuY3Rpb25JbnRyaW5zaWNS
ZWdFeHAgPSByZS5jb21waWxlKHIiLipeQGludHJpbnNpYz0oXHcrKSIsIHJlLk1VTFRJTElORSB8
IHJlLkRPVEFMTCkKK2Z1bmN0aW9uSXNDb25zdHJ1Y3RvclJlZ0V4cCA9IHJlLmNvbXBpbGUociIu
Kl5AY29uc3RydWN0b3IiLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCitmdW5jdGlvbklzR2V0
dGVyUmVnRXhwID0gcmUuY29tcGlsZShyIi4qXkBnZXR0ZXIiLCByZS5NVUxUSUxJTkUgfCByZS5E
T1RBTEwpCitmdW5jdGlvbk5hbWVSZWdFeHAgPSByZS5jb21waWxlKHIiZnVuY3Rpb25ccysoXHcr
KVxzKlwoIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQorZnVuY3Rpb25PdmVycmlkZGVuTmFt
ZVJlZ0V4cCA9IHJlLmNvbXBpbGUociIuKl5Ab3ZlcnJpZGRlbk5hbWU9KFwiLitcIikkIiwgcmUu
TVVMVElMSU5FIHwgcmUuRE9UQUxMKQorZnVuY3Rpb25QYXJhbWV0ZXJGaW5kZXIgPSByZS5jb21w
aWxlKHIiXmZ1bmN0aW9uXHMrKD86XHcrKVxzKlwoKCg/OlxzKlx3Kyk/XHMqKD86XHMqLFxzKlx3
KykqKT9ccypcKSIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKKworbXVsdGlsaW5lQ29tbWVu
dFJlZ0V4cCA9IHJlLmNvbXBpbGUociJcL1wqLio/XCpcLyIsIHJlLk1VTFRJTElORSB8IHJlLkRP
VEFMTCkKK3NpbmdsZUxpbmVDb21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIlwvXC8uKj9cbiIs
IHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKK2tleVZhbHVlQW5ub3RhdGlvbkNvbW1lbnRSZWdF
eHAgPSByZS5jb21waWxlKHIiXlwvXC8gQChcdyspPShbXj1dKz8pXG4iLCByZS5NVUxUSUxJTkUg
fCByZS5ET1RBTEwpCitmbGFnQW5ub3RhdGlvbkNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIi
XlwvXC8gQChcdyspW149XSo/XG4iLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCitsaW5lV2l0
aE9ubHlTaW5nbGVMaW5lQ29tbWVudFJlZ0V4cCA9IHJlLmNvbXBpbGUociJeXHMqXC9cL1xuIiwg
cmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQorbGluZVdpdGhUcmFpbGluZ1NpbmdsZUxpbmVDb21t
ZW50UmVnRXhwID0gcmUuY29tcGlsZShyIlxzKlwvXC9cbiIsIHJlLk1VTFRJTElORSB8IHJlLkRP
VEFMTCkKK2xlYWRpbmdXaGl0ZXNwYWNlUmVnRXhwID0gcmUuY29tcGlsZShyIl4gKyIsIHJlLk1V
TFRJTElORSB8IHJlLkRPVEFMTCkKK211bHRpcGxlRW1wdHlMaW5lc1JlZ0V4cCA9IHJlLmNvbXBp
bGUociJcbnsyLH0iLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCisKKworY2xhc3MgUGFyc2VF
eGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgRnJhbWV3b3JrOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fc2V0dGluZ3MgPSBfRlJB
TUVXT1JLX0NPTkZJR19NQVBbbmFtZV0KKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAg
ZGVmIHNldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3NldHRpbmdzLmdldChrZXksIGRlZmF1bHQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGZyb21TdHJpbmcoZnJhbWV3b3JrU3RyaW5nKToKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5n
ID09ICJKYXZhU2NyaXB0Q29yZSI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5KYXZh
U2NyaXB0Q29yZQorCisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiV2ViQ29yZSI6Cisg
ICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5XZWJDb3JlCisKKyAgICAgICAgcmFpc2UgUGFy
c2VFeGNlcHRpb24oIlVua25vd24gZnJhbWV3b3JrOiAlcyIgJSBmcmFtZXdvcmtTdHJpbmcpCisK
KworY2xhc3MgRnJhbWV3b3JrczoKKyAgICBKYXZhU2NyaXB0Q29yZSA9IEZyYW1ld29yaygiSmF2
YVNjcmlwdENvcmUiKQorICAgIFdlYkNvcmUgPSBGcmFtZXdvcmsoIldlYkNvcmUiKQorCisKK2Ns
YXNzIEJ1aWx0aW5PYmplY3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iamVjdF9uYW1lLCBh
bm5vdGF0aW9ucywgZnVuY3Rpb25zKToKKyAgICAgICAgc2VsZi5vYmplY3RfbmFtZSA9IG9iamVj
dF9uYW1lCisgICAgICAgIHNlbGYuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucworICAgICAgICBz
ZWxmLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucworICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBOb25l
ICAjIFNldCBieSB0aGUgb3duaW5nIEJ1aWx0aW5zQ29sbGVjdGlvbgorCisgICAgICAgIGZvciBm
dW5jdGlvbiBpbiBzZWxmLmZ1bmN0aW9uczoKKyAgICAgICAgICAgIGZ1bmN0aW9uLm9iamVjdCA9
IHNlbGYKKworCitjbGFzcyBCdWlsdGluRnVuY3Rpb246CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGZ1bmN0aW9uX25hbWUsIGZ1bmN0aW9uX3NvdXJjZSwgcGFyYW1ldGVycywgaXNfY29uc3RydWN0
b3IsIGlzX2dsb2JhbF9wcml2YXRlLCBpbnRyaW5zaWMsIG92ZXJyaWRkZW5fbmFtZSk6CisgICAg
ICAgIHNlbGYuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWUKKyAgICAgICAgc2VsZi5mdW5j
dGlvbl9zb3VyY2UgPSBmdW5jdGlvbl9zb3VyY2UKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0g
cGFyYW1ldGVycworICAgICAgICBzZWxmLmlzX2NvbnN0cnVjdG9yID0gaXNfY29uc3RydWN0b3IK
KyAgICAgICAgc2VsZi5pc19nbG9iYWxfcHJpdmF0ZSA9IGlzX2dsb2JhbF9wcml2YXRlCisgICAg
ICAgIHNlbGYuaW50cmluc2ljID0gaW50cmluc2ljCisgICAgICAgIHNlbGYub3ZlcnJpZGRlbl9u
YW1lID0gb3ZlcnJpZGRlbl9uYW1lCisgICAgICAgIHNlbGYub2JqZWN0ID0gTm9uZSAgIyBTZXQg
YnkgdGhlIG93bmluZyBCdWlsdGluT2JqZWN0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGZyb21TdHJpbmcoZnVuY3Rpb25fc3RyaW5nKToKKyAgICAgICAgZnVuY3Rpb25fc291cmNlID0g
bXVsdGlsaW5lQ29tbWVudFJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3N0cmluZykKKworICAgICAg
ICBpbnRyaW5zaWMgPSAiTm9JbnRyaW5zaWMiCisgICAgICAgIGludHJpbnNpY01hdGNoID0gZnVu
Y3Rpb25JbnRyaW5zaWNSZWdFeHAuc2VhcmNoKGZ1bmN0aW9uX3NvdXJjZSkKKyAgICAgICAgaWYg
aW50cmluc2ljTWF0Y2g6CisgICAgICAgICAgICBpbnRyaW5zaWMgPSBpbnRyaW5zaWNNYXRjaC5n
cm91cCgxKQorICAgICAgICAgICAgZnVuY3Rpb25fc291cmNlID0gZnVuY3Rpb25JbnRyaW5zaWNS
ZWdFeHAuc3ViKCIiLCBmdW5jdGlvbl9zb3VyY2UpCisKKyAgICAgICAgb3ZlcnJpZGRlbl9uYW1l
ID0gTm9uZQorICAgICAgICBvdmVycmlkZGVuTmFtZU1hdGNoID0gZnVuY3Rpb25PdmVycmlkZGVu
TmFtZVJlZ0V4cC5zZWFyY2goZnVuY3Rpb25fc291cmNlKQorICAgICAgICBpZiBvdmVycmlkZGVu
TmFtZU1hdGNoOgorICAgICAgICAgICAgb3ZlcnJpZGRlbl9uYW1lID0gb3ZlcnJpZGRlbk5hbWVN
YXRjaC5ncm91cCgxKQorICAgICAgICAgICAgZnVuY3Rpb25fc291cmNlID0gZnVuY3Rpb25PdmVy
cmlkZGVuTmFtZVJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3NvdXJjZSkKKworICAgICAgICBpZiBu
b3Qgb3MuZ2V0ZW52KCJDT05GSUdVUkFUSU9OIiwgIkRlYnVnIikuc3RhcnRzd2l0aCgiRGVidWci
KToKKyAgICAgICAgICAgIGZ1bmN0aW9uX3NvdXJjZSA9IGxpbmVXaXRoT25seVNpbmdsZUxpbmVD
b21tZW50UmVnRXhwLnN1YigiIiwgZnVuY3Rpb25fc291cmNlKQorICAgICAgICAgICAgZnVuY3Rp
b25fc291cmNlID0gbGluZVdpdGhUcmFpbGluZ1NpbmdsZUxpbmVDb21tZW50UmVnRXhwLnN1Yigi
XG4iLCBmdW5jdGlvbl9zb3VyY2UpCisgICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2UgPSBsZWFk
aW5nV2hpdGVzcGFjZVJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3NvdXJjZSkKKyAgICAgICAgICAg
IGZ1bmN0aW9uX3NvdXJjZSA9IG11bHRpcGxlRW1wdHlMaW5lc1JlZ0V4cC5zdWIoIlxuIiwgZnVu
Y3Rpb25fc291cmNlKQorCisgICAgICAgIGZ1bmN0aW9uX25hbWUgPSBmdW5jdGlvbk5hbWVSZWdF
eHAuZmluZGFsbChmdW5jdGlvbl9zb3VyY2UpWzBdCisgICAgICAgIGlzX2NvbnN0cnVjdG9yID0g
ZnVuY3Rpb25Jc0NvbnN0cnVjdG9yUmVnRXhwLm1hdGNoKGZ1bmN0aW9uX3NvdXJjZSkgIT0gTm9u
ZQorICAgICAgICBpc19nZXR0ZXIgPSBmdW5jdGlvbklzR2V0dGVyUmVnRXhwLm1hdGNoKGZ1bmN0
aW9uX3NvdXJjZSkgIT0gTm9uZQorICAgICAgICBpc19nbG9iYWxfcHJpdmF0ZSA9IGZ1bmN0aW9u
R2xvYmFsUHJpdmF0ZVJlZ0V4cC5tYXRjaChmdW5jdGlvbl9zb3VyY2UpICE9IE5vbmUKKyAgICAg
ICAgcGFyYW1ldGVycyA9IFtzLnN0cmlwKCkgZm9yIHMgaW4gZnVuY3Rpb25QYXJhbWV0ZXJGaW5k
ZXIuZmluZGFsbChmdW5jdGlvbl9zb3VyY2UpWzBdLnNwbGl0KCcsJyldCisgICAgICAgIGlmIGxl
bihwYXJhbWV0ZXJzWzBdKSA9PSAwOgorICAgICAgICAgICAgcGFyYW1ldGVycyA9IFtdCisKKyAg
ICAgICAgaWYgaXNfZ2V0dGVyIGFuZCBub3Qgb3ZlcnJpZGRlbl9uYW1lOgorICAgICAgICAgICAg
b3ZlcnJpZGRlbl9uYW1lID0gIlwiZ2V0ICVzXCIiICUgKGZ1bmN0aW9uX25hbWUpCisKKyAgICAg
ICAgaWYgbm90IG92ZXJyaWRkZW5fbmFtZToKKyAgICAgICAgICAgIG92ZXJyaWRkZW5fbmFtZSA9
ICJzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obnVsbHB0cikiCisKKyAgICAgICAgcmV0dXJuIEJ1
aWx0aW5GdW5jdGlvbihmdW5jdGlvbl9uYW1lLCBmdW5jdGlvbl9zb3VyY2UsIHBhcmFtZXRlcnMs
IGlzX2NvbnN0cnVjdG9yLCBpc19nbG9iYWxfcHJpdmF0ZSwgaW50cmluc2ljLCBvdmVycmlkZGVu
X25hbWUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaW50ZXJmYWNlID0gIiVz
KCVzKSIgJSAoc2VsZi5mdW5jdGlvbl9uYW1lLCAnLCAnLmpvaW4oc2VsZi5wYXJhbWV0ZXJzKSkK
KyAgICAgICAgaWYgc2VsZi5pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgICAgIGludGVyZmFjZSA9
IGludGVyZmFjZSArICIgW0NvbnN0cnVjdG9yXSIKKworICAgICAgICByZXR1cm4gaW50ZXJmYWNl
CisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnVu
Y3Rpb25fbmFtZSA8IG90aGVyLmZ1bmN0aW9uX25hbWUKKworCitjbGFzcyBCdWlsdGluc0NvbGxl
Y3Rpb246CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1ld29ya19uYW1lKToKKyAgICAgICAg
c2VsZi5fY29weXJpZ2h0X2xpbmVzID0gc2V0KCkKKyAgICAgICAgc2VsZi5vYmplY3RzID0gW10K
KyAgICAgICAgc2VsZi5mcmFtZXdvcmsgPSBGcmFtZXdvcmsuZnJvbVN0cmluZyhmcmFtZXdvcmtf
bmFtZSkKKyAgICAgICAgbG9nLmRlYnVnKCJDcmVhdGVkIG5ldyBCdWlsdGlucyBjb2xsZWN0aW9u
LiIpCisKKyAgICBkZWYgcGFyc2VfYnVpbHRpbnNfZmlsZShzZWxmLCBmaWxlbmFtZSwgdGV4dCk6
CisgICAgICAgIGxvZy5kZWJ1ZygiUGFyc2luZyBidWlsdGlucyBmaWxlOiAlcyIgJSBmaWxlbmFt
ZSkKKworICAgICAgICBwYXJzZWRfY29weXJpZ2h0cyA9IHNldChzZWxmLl9wYXJzZV9jb3B5cmln
aHRfbGluZXModGV4dCkpCisgICAgICAgIHNlbGYuX2NvcHlyaWdodF9saW5lcyA9IHNlbGYuX2Nv
cHlyaWdodF9saW5lcy51bmlvbihwYXJzZWRfY29weXJpZ2h0cykKKworICAgICAgICBsb2cuZGVi
dWcoIkZvdW5kIGNvcHlyaWdodCBsaW5lczoiKQorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9j
b3B5cmlnaHRfbGluZXM6CisgICAgICAgICAgICBsb2cuZGVidWcobGluZSkKKyAgICAgICAgbG9n
LmRlYnVnKCIiKQorCisgICAgICAgIG9iamVjdF9hbm5vdGF0aW9ucyA9IHNlbGYuX3BhcnNlX2Fu
bm90YXRpb25zKHRleHQpCisKKyAgICAgICAgb2JqZWN0X25hbWUsIGV4dCA9IG9zLnBhdGguc3Bs
aXRleHQob3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIGxvZy5kZWJ1ZygiUGFy
c2luZyBvYmplY3Q6ICVzIiAlIG9iamVjdF9uYW1lKQorCisgICAgICAgIHBhcnNlZF9mdW5jdGlv
bnMgPSBzZWxmLl9wYXJzZV9mdW5jdGlvbnModGV4dCkKKyAgICAgICAgZm9yIGZ1bmN0aW9uIGlu
IHBhcnNlZF9mdW5jdGlvbnM6CisgICAgICAgICAgICBmdW5jdGlvbi5vYmplY3QgPSBvYmplY3Rf
bmFtZQorCisgICAgICAgIGxvZy5kZWJ1ZygiUGFyc2VkIGZ1bmN0aW9uczoiKQorICAgICAgICBm
b3IgZnVuYyBpbiBwYXJzZWRfZnVuY3Rpb25zOgorICAgICAgICAgICAgbG9nLmRlYnVnKGZ1bmMp
CisgICAgICAgIGxvZy5kZWJ1ZygiIikKKworICAgICAgICBuZXdfb2JqZWN0ID0gQnVpbHRpbk9i
amVjdChvYmplY3RfbmFtZSwgb2JqZWN0X2Fubm90YXRpb25zLCBwYXJzZWRfZnVuY3Rpb25zKQor
ICAgICAgICBuZXdfb2JqZWN0LmNvbGxlY3Rpb24gPSBzZWxmCisgICAgICAgIHNlbGYub2JqZWN0
cy5hcHBlbmQobmV3X29iamVjdCkKKworICAgIGRlZiBjb3B5cmlnaHRzKHNlbGYpOgorICAgICAg
ICBvd25lcl90b195ZWFycyA9IGRpY3QoKQorICAgICAgICBjb3B5cmlnaHRZZWFyUmVnRXhwID0g
cmUuY29tcGlsZShyIihcZHs0fSlbLCBdezAsMn0iKQorICAgICAgICBvd25lclN0YXJ0UmVnRXhw
ID0gcmUuY29tcGlsZShyIlteXGQsIF0iKQorCisgICAgICAgICMgUmV0dXJucyBkZWR1cGxpY2F0
ZWQgY29weXJpZ2h0cyBrZXllZCBvbiB0aGUgb3duZXIuCisgICAgICAgIGZvciBsaW5lIGluIHNl
bGYuX2NvcHlyaWdodF9saW5lczoKKyAgICAgICAgICAgIHllYXJzID0gc2V0KGNvcHlyaWdodFll
YXJSZWdFeHAuZmluZGFsbChsaW5lKSkKKyAgICAgICAgICAgIG93bmVySW5kZXggPSBvd25lclN0
YXJ0UmVnRXhwLnNlYXJjaChsaW5lKS5zdGFydCgpCisgICAgICAgICAgICBvd25lciA9IGxpbmVb
b3duZXJJbmRleDpdCisgICAgICAgICAgICBsb2cuZGVidWcoIkZvdW5kIHllYXJzOiAlcyBhbmQg
b3duZXI6ICVzIiAlICh5ZWFycywgb3duZXIpKQorICAgICAgICAgICAgaWYgb3duZXIgbm90IGlu
IG93bmVyX3RvX3llYXJzOgorICAgICAgICAgICAgICAgIG93bmVyX3RvX3llYXJzW293bmVyXSA9
IHNldCgpCisKKyAgICAgICAgICAgIG93bmVyX3RvX3llYXJzW293bmVyXSA9IG93bmVyX3RvX3ll
YXJzW293bmVyXS51bmlvbih5ZWFycykKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAg
IGZvciBvd25lciwgeWVhcnMgaW4gbGlzdChvd25lcl90b195ZWFycy5pdGVtcygpKToKKyAgICAg
ICAgICAgIHNvcnRlZF95ZWFycyA9IGxpc3QoeWVhcnMpCisgICAgICAgICAgICBzb3J0ZWRfeWVh
cnMuc29ydCgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIlcyAlcyIgJSAoJywgJy5qb2lu
KHNvcnRlZF95ZWFycyksIG93bmVyKSkKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBk
ZWYgYWxsX2Z1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9y
IG9iamVjdCBpbiBzZWxmLm9iamVjdHM6CisgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKG9iamVj
dC5mdW5jdGlvbnMpCisKKyAgICAgICAgcmVzdWx0LnNvcnQoKQorICAgICAgICByZXR1cm4gcmVz
dWx0CisKKyAgICBkZWYgYWxsX2ludGVybmFsX2Z1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgcmVz
dWx0ID0gW10KKyAgICAgICAgZm9yIG9iamVjdCBpbiBbbyBmb3IgbyBpbiBzZWxmLm9iamVjdHMg
aWYgJ2ludGVybmFsJyBpbiBvLmFubm90YXRpb25zXToKKyAgICAgICAgICAgIHJlc3VsdC5leHRl
bmQob2JqZWN0LmZ1bmN0aW9ucykKKworICAgICAgICByZXN1bHQuc29ydCgpCisgICAgICAgIHJl
dHVybiByZXN1bHQKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9wYXJzZV9j
b3B5cmlnaHRfbGluZXMoc2VsZiwgdGV4dCk6CisgICAgICAgIGxpY2Vuc2VCbG9jayA9IG11bHRp
bGluZUNvbW1lbnRSZWdFeHAuZmluZGFsbCh0ZXh0KVswXQorICAgICAgICBsaWNlbnNlQmxvY2sg
PSBsaWNlbnNlQmxvY2tbOmxpY2Vuc2VCbG9jay5pbmRleCgiUmVkaXN0cmlidXRpb24iKV0KKwor
ICAgICAgICBjb3B5cmlnaHRMaW5lcyA9IFtUZW1wbGF0ZXMuRGVmYXVsdENvcHlyaWdodF0KKyAg
ICAgICAgZm9yIGxpbmUgaW4gbGljZW5zZUJsb2NrLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAg
bGluZSA9IGxpbmUucmVwbGFjZSgiLyoiLCAiIikKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJl
cGxhY2UoIiovIiwgIiIpCisgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIqIiwgIiIp
CisgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJDb3B5cmlnaHQiLCAiIikKKyAgICAg
ICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoImNvcHlyaWdodCIsICIiKQorICAgICAgICAgICAg
bGluZSA9IGxpbmUucmVwbGFjZSgiKEMpIiwgIiIpCisgICAgICAgICAgICBsaW5lID0gbGluZS5y
ZXBsYWNlKCIoYykiLCAiIikKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKworICAg
ICAgICAgICAgaWYgbGVuKGxpbmUpID09IDA6CisgICAgICAgICAgICAgICAgY29udGludWUKKwor
ICAgICAgICAgICAgY29weXJpZ2h0TGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICAgICAgcmV0dXJu
IGNvcHlyaWdodExpbmVzCisKKyAgICBkZWYgX3BhcnNlX2Fubm90YXRpb25zKHNlbGYsIHRleHQp
OgorICAgICAgICBhbm5vdGF0aW9ucyA9IHt9CisKKyAgICAgICAgZm9yIG1hdGNoIGluIGtleVZh
bHVlQW5ub3RhdGlvbkNvbW1lbnRSZWdFeHAuZmluZGl0ZXIodGV4dCk6CisgICAgICAgICAgICAo
a2V5LCB2YWx1ZSkgPSBtYXRjaC5ncm91cCgxLCAyKQorICAgICAgICAgICAgbG9nLmRlYnVnKCJG
b3VuZCBhbm5vdGF0aW9uOiAnJXMnID0+ICclcyciICUgKGtleSwgdmFsdWUpKQorICAgICAgICAg
ICAgaWYga2V5IGluIGFubm90YXRpb25zOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJEdXBsaWNhdGUgYW5ub3RhdGlvbiBmb3VuZDogJXMiICUga2V5KQorCisgICAgICAg
ICAgICBhbm5vdGF0aW9uc1trZXldID0gdmFsdWUKKworICAgICAgICBmb3IgbWF0Y2ggaW4gZmxh
Z0Fubm90YXRpb25Db21tZW50UmVnRXhwLmZpbmRpdGVyKHRleHQpOgorICAgICAgICAgICAga2V5
ID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiRm91bmQgYW5ub3RhdGlv
bjogJyVzJyA9PiAnVFJVRSciICUga2V5KQorICAgICAgICAgICAgaWYga2V5IGluIGFubm90YXRp
b25zOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJEdXBsaWNhdGUgYW5u
b3RhdGlvbiBmb3VuZDogJXMiICUga2V5KQorCisgICAgICAgICAgICBhbm5vdGF0aW9uc1trZXld
ID0gVHJ1ZQorCisgICAgICAgIHJldHVybiBhbm5vdGF0aW9ucworCisgICAgZGVmIF9wYXJzZV9m
dW5jdGlvbnMoc2VsZiwgdGV4dCk6CisgICAgICAgIHRleHQgPSBtdWx0aWxpbmVDb21tZW50UmVn
RXhwLnN1YigiLyoqLyIsIHNpbmdsZUxpbmVDb21tZW50UmVnRXhwLnN1YigiLy9cbiIsIHRleHQp
KQorCisgICAgICAgIG1hdGNoZXMgPSBbZnVuYyBmb3IgZnVuYyBpbiBmdW5jdGlvbkhlYWRSZWdF
eHAuZmluZGl0ZXIodGV4dCldCisgICAgICAgIGZ1bmN0aW9uQm91bmRzID0gW10KKyAgICAgICAg
c3RhcnQgPSAwCisgICAgICAgIGVuZCA9IDAKKyAgICAgICAgZm9yIG1hdGNoIGluIG1hdGNoZXM6
CisgICAgICAgICAgICBzdGFydCA9IG1hdGNoLnN0YXJ0KCkKKyAgICAgICAgICAgIGlmIHN0YXJ0
IDwgZW5kOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbmQgPSBtYXRj
aC5lbmQoKQorICAgICAgICAgICAgd2hpbGUgdGV4dFtlbmRdICE9ICd7JzoKKyAgICAgICAgICAg
ICAgICBlbmQgPSBlbmQgKyAxCisgICAgICAgICAgICBkZXB0aCA9IDEKKyAgICAgICAgICAgIGVu
ZCA9IGVuZCArIDEKKyAgICAgICAgICAgIHdoaWxlIGRlcHRoID4gMDoKKyAgICAgICAgICAgICAg
ICBpZiB0ZXh0W2VuZF0gPT0gJ3snOgorICAgICAgICAgICAgICAgICAgICBkZXB0aCA9IGRlcHRo
ICsgMQorICAgICAgICAgICAgICAgIGVsaWYgdGV4dFtlbmRdID09ICd9JzoKKyAgICAgICAgICAg
ICAgICAgICAgZGVwdGggPSBkZXB0aCAtIDEKKyAgICAgICAgICAgICAgICBlbmQgPSBlbmQgKyAx
CisgICAgICAgICAgICBmdW5jdGlvbkJvdW5kcy5hcHBlbmQoKHN0YXJ0LCBlbmQpKQorCisgICAg
ICAgIGZ1bmN0aW9uU3RyaW5ncyA9IFt0ZXh0W3N0YXJ0OmVuZF0uc3RyaXAoKSBmb3IgKHN0YXJ0
LCBlbmQpIGluIGZ1bmN0aW9uQm91bmRzXQorICAgICAgICByZXR1cm4gbGlzdChtYXAoQnVpbHRp
bkZ1bmN0aW9uLmZyb21TdHJpbmcsIGZ1bmN0aW9uU3RyaW5ncykpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVt
cGxhdGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwN2E2ZDcxN2M5MTBjYjA3Mjk5NTA5YzYxZGY4NDZhOWM3
MDFlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93
a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQpAQCAtMCwwICsxLDIxNiBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyMgQnVpbHRpbnMgZ2VuZXJhdG9yIHRlbXBsYXRlcywgd2hpY2ggY2FuIGJlIGZpbGxlZCB3
aXRoIHN0cmluZy5UZW1wbGF0ZS4KKworCitjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRl
czoKKworICAgIERlZmF1bHRDb3B5cmlnaHQgPSAiMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIgorICAgIExpY2Vuc2VUZXh0ID0gKAorICAgICIiIlJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCitBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisiIiIpCisKKyAgICBEb05vdEVk
aXRXYXJuaW5nID0gKAorICAgICIiIi8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRp
bnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHkiIiIpCisKKyAgICBIZWFkZXJJbmNsdWRlR3VhcmQgPSAoCisgICAgIiIi
I3ByYWdtYSBvbmNlIiIiKQorCisgICAgTmFtZXNwYWNlVG9wID0gKAorICAgICIiIm5hbWVzcGFj
ZSAke25hbWVzcGFjZX0geyIiIikKKworICAgIE5hbWVzcGFjZUJvdHRvbSA9ICgKKyAgICAiIiJ9
IC8vIG5hbWVzcGFjZSAke25hbWVzcGFjZX0iIiIpCisKKyAgICBDb21iaW5lZEhlYWRlclN0YXRp
Y01hY3JvcyA9ICgKKyAgICAiIiIjZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IoY29k
ZU5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3VtZW50Q291bnQpIFxcCisg
ICAgSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNHZW5lcmF0b3IoSlNDOjpWTSYp
OworCiske21hY3JvUHJlZml4fV9GT1JFQUNIX0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5f
R0VORVJBVE9SKQorI3VuZGVmIERFQ0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IiIiIpCisKKyAgICBT
ZXBhcmF0ZUhlYWRlclN0YXRpY01hY3JvcyA9ICgKKyAgICAiIiIjZGVmaW5lIERFQ0xBUkVfQlVJ
TFRJTl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFy
Z3VtZW50Q291bnQpIFxcCisgICAgSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNH
ZW5lcmF0b3IoSlNDOjpWTSYpOworCiske21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFj
cm99X0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5fR0VORVJBVE9SKQorI3VuZGVmIERFQ0xB
UkVfQlVJTFRJTl9HRU5FUkFUT1IiIiIpCisKKyAgICBDb21iaW5lZEpTQ0ltcGxlbWVudGF0aW9u
U3RhdGljTWFjcm9zID0gKAorICAgICIiIgorI2RlZmluZSBERUZJTkVfQlVJTFRJTl9HRU5FUkFU
T1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3VtZW50Q291bnQp
IFxcCitKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZN
JiB2bSkgXFwKK3tcXAorICAgIHJldHVybiB2bS5idWlsdGluRXhlY3V0YWJsZXMoKS0+Y29kZU5h
bWUjI0V4ZWN1dGFibGUoKS0+bGluayh2bSwgdm0uYnVpbHRpbkV4ZWN1dGFibGVzKCktPmNvZGVO
YW1lIyNTb3VyY2UoKSwgc3RkOjpudWxsb3B0LCBzXyMjY29kZU5hbWUjI0ludHJpbnNpYyk7IFwK
K30KKyR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dF
TkVSQVRPUikKKyN1bmRlZiBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IKKyIiIikKKworICAgIFNl
cGFyYXRlSlNDSW1wbGVtZW50YXRpb25TdGF0aWNNYWNyb3MgPSAoCisgICAgIiIiCisjZGVmaW5l
IERFRklORV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlk
ZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXFwKK0pTQzo6RnVuY3Rpb25FeGVjdXRhYmxlKiBjb2Rl
TmFtZSMjR2VuZXJhdG9yKEpTQzo6Vk0mIHZtKSBcXAore1xcCisgICAgcmV0dXJuIHZtLmJ1aWx0
aW5FeGVjdXRhYmxlcygpLT5jb2RlTmFtZSMjRXhlY3V0YWJsZSgpLT5saW5rKHZtLCB2bS5idWls
dGluRXhlY3V0YWJsZXMoKS0+Y29kZU5hbWUjI1NvdXJjZSgpLCBzdGQ6Om51bGxvcHQsIHNfIyNj
b2RlTmFtZSMjSW50cmluc2ljKTsgXAorfQorJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVj
dE1hY3JvfV9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQorI3VuZGVmIERF
RklORV9CVUlMVElOX0dFTkVSQVRPUgorIiIiKQorCisgICAgQ29tYmluZWRXZWJDb3JlSW1wbGVt
ZW50YXRpb25TdGF0aWNNYWNyb3MgPSAoCisgICAgICAgICIiIgorI2RlZmluZSBERUZJTkVfQlVJ
TFRJTl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGFy
Z3VtZW50Q291bnQpIFxcCitKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVy
YXRvcihKU0M6OlZNJiB2bSkgXFwKK3tcXAorICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRh
ID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsgXFwKKyAgICBy
ZXR1cm4gY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLiR7b2JqZWN0TmFtZUxDfUJ1aWx0
aW5zKCkuY29kZU5hbWUjI0V4ZWN1dGFibGUoKS0+bGluayh2bSwgY2xpZW50RGF0YS0+YnVpbHRp
bkZ1bmN0aW9ucygpLiR7b2JqZWN0TmFtZUxDfUJ1aWx0aW5zKCkuY29kZU5hbWUjI1NvdXJjZSgp
LCBzdGQ6Om51bGxvcHQsIHNfIyNjb2RlTmFtZSMjSW50cmluc2ljKTsgXFwKK30KKyR7bWFjcm9Q
cmVmaXh9X0ZPUkVBQ0hfQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKKyN1
bmRlZiBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IKKyIiIikKKworICAgIFNlcGFyYXRlV2ViQ29y
ZUltcGxlbWVudGF0aW9uU3RhdGljTWFjcm9zID0gKAorICAgICAgICAiIiIKKyNkZWZpbmUgREVG
SU5FX0JVSUxUSU5fR0VORVJBVE9SKGNvZGVOYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJyaWRkZW5O
YW1lLCBhcmd1bWVudENvdW50KSBcXAorSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1l
IyNHZW5lcmF0b3IoSlNDOjpWTSYgdm0pIFxcCit7XFwKKyAgICBKU1ZNQ2xpZW50RGF0YSogY2xp
ZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7IFxc
CisgICAgcmV0dXJuIGNsaWVudERhdGEtPmJ1aWx0aW5GdW5jdGlvbnMoKS4ke29iamVjdE5hbWVM
Q31CdWlsdGlucygpLmNvZGVOYW1lIyNFeGVjdXRhYmxlKCktPmxpbmsodm0sIGNsaWVudERhdGEt
PmJ1aWx0aW5GdW5jdGlvbnMoKS4ke29iamVjdE5hbWVMQ31CdWlsdGlucygpLmNvZGVOYW1lIyNT
b3VyY2UoKSwgc3RkOjpudWxsb3B0LCBzXyMjY29kZU5hbWUjI0ludHJpbnNpYyk7IFxcCit9Cisk
e21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShERUZJTkVf
QlVJTFRJTl9HRU5FUkFUT1IpCisjdW5kZWYgREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SCisiIiIp
CisKKyAgICBTZXBhcmF0ZUhlYWRlcldyYXBwZXJCb2lsZXJwbGF0ZSA9ICgKKyAgICAiIiJjbGFz
cyAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyIDogcHJpdmF0ZSBKU0M6OldlYWtIYW5kbGVP
d25lciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5zV3JhcHBl
cihKU0M6OlZNKiB2bSkKKyAgICAgICAgOiBtX3ZtKCp2bSkKKyAgICAgICAgJHttYWNyb1ByZWZp
eH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9OX05BTUUoSU5JVElBTEla
RV9CVUlMVElOX05BTUVTKQorI2RlZmluZSBJTklUSUFMSVpFX0JVSUxUSU5fU09VUkNFX01FTUJF
UlMobmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlkZGVuTmFtZSwgbGVuZ3RoKSAsIG1fIyNuYW1l
IyNTb3VyY2UoSlNDOjptYWtlU291cmNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKHNf
IyNuYW1lLCBsZW5ndGgpLCB7IH0pKQorICAgICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7
b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShJTklUSUFMSVpFX0JVSUxUSU5fU09VUkNFX01FTUJF
UlMpCisjdW5kZWYgSU5JVElBTElaRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTCisgICAgeworICAg
IH0KKworI2RlZmluZSBFWFBPU0VfQlVJTFRJTl9FWEVDVVRBQkxFUyhuYW1lLCBmdW5jdGlvbk5h
bWUsIG92ZXJyaWRkZW5OYW1lLCBsZW5ndGgpIFxcCisgICAgSlNDOjpVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogbmFtZSMjRXhlY3V0YWJsZSgpOyBcXAorICAgIGNvbnN0IEpTQzo6U291cmNl
Q29kZSYgbmFtZSMjU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV8jI25hbWUjI1NvdXJjZTsgfQor
ICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9DT0RFKEVY
UE9TRV9CVUlMVElOX0VYRUNVVEFCTEVTKQorI3VuZGVmIEVYUE9TRV9CVUlMVElOX0VYRUNVVEFC
TEVTCisKKyAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5f
RlVOQ1RJT05fTkFNRShERUNMQVJFX0JVSUxUSU5fSURFTlRJRklFUl9BQ0NFU1NPUikKKworICAg
IHZvaWQgZXhwb3J0TmFtZXMoKTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworCisg
ICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9O
X05BTUUoREVDTEFSRV9CVUlMVElOX05BTUVTKQorCisjZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9T
T1VSQ0VfTUVNQkVSUyhuYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJyaWRkZW5OYW1lLCBsZW5ndGgp
IFxcCisgICAgSlNDOjpTb3VyY2VDb2RlIG1fIyNuYW1lIyNTb3VyY2U7XFwKKyAgICBKU0M6Oldl
YWs8SlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV8jI25hbWUjI0V4ZWN1dGFibGU7
CisgICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0NPREUo
REVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQorI3VuZGVmIERFQ0xBUkVfQlVJTFRJTl9T
T1VSQ0VfTUVNQkVSUworCit9OworCisjZGVmaW5lIERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVT
KG5hbWUsIGZ1bmN0aW9uTmFtZSwgb3ZlcnJpZGRlbk5hbWUsIGxlbmd0aCkgXFwKK2lubGluZSBK
U0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFw
cGVyOjpuYW1lIyNFeGVjdXRhYmxlKCkgXFwKK3tcXAorICAgIGlmICghbV8jI25hbWUjI0V4ZWN1
dGFibGUpIHtcXAorICAgICAgICBKU0M6OklkZW50aWZpZXIgZXhlY3V0YWJsZU5hbWUgPSBmdW5j
dGlvbk5hbWUjI1B1YmxpY05hbWUoKTtcXAorICAgICAgICBpZiAob3ZlcnJpZGRlbk5hbWUpXFwK
KyAgICAgICAgICAgIGV4ZWN1dGFibGVOYW1lID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZtX3ZtLCBvdmVycmlkZGVuTmFtZSk7XFwKKyAgICAgICAgbV8jI25hbWUjI0V4ZWN1dGFibGUg
PSBKU0M6OldlYWs8SlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oSlNDOjpjcmVhdGVC
dWlsdGluRXhlY3V0YWJsZShtX3ZtLCBtXyMjbmFtZSMjU291cmNlLCBleGVjdXRhYmxlTmFtZSwg
c18jI25hbWUjI0NvbnN0cnVjdEFiaWxpdHkpLCB0aGlzLCAmbV8jI25hbWUjI0V4ZWN1dGFibGUp
O1xcCisgICAgfVxcCisgICAgcmV0dXJuIG1fIyNuYW1lIyNFeGVjdXRhYmxlLmdldCgpO1xcCit9
Ciske21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JVSUxUSU5fQ09ERShERUZJ
TkVfQlVJTFRJTl9FWEVDVVRBQkxFUykKKyN1bmRlZiBERUZJTkVfQlVJTFRJTl9FWEVDVVRBQkxF
UworCitpbmxpbmUgdm9pZCAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyOjpleHBvcnROYW1l
cygpCit7CisjZGVmaW5lIEVYUE9SVF9GVU5DVElPTl9OQU1FKG5hbWUpIG1fdm0ucHJvcGVydHlO
YW1lcy0+YXBwZW5kRXh0ZXJuYWxOYW1lKG5hbWUjI1B1YmxpY05hbWUoKSwgbmFtZSMjUHJpdmF0
ZU5hbWUoKSk7CisgICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlM
VElOX0ZVTkNUSU9OX05BTUUoRVhQT1JUX0ZVTkNUSU9OX05BTUUpCisjdW5kZWYgRVhQT1JUX0ZV
TkNUSU9OX05BTUUKK30iIiIpCisKKyAgICBTZXBhcmF0ZUhlYWRlckludGVybmFsRnVuY3Rpb25z
Qm9pbGVycGxhdGUgPSAoCisgICAgIiIiY2xhc3MgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlv
bnMgeworcHVibGljOgorICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25z
KEpTQzo6Vk0mIHZtKSA6IG1fdm0odm0pIHsgfQorCisgICAgdm9pZCBpbml0KEpTQzo6SlNHbG9i
YWxPYmplY3QmKTsKKyAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKworcHVibGlj
OgorICAgIEpTQzo6Vk0mIG1fdm07CisKKyNkZWZpbmUgREVDTEFSRV9CVUlMVElOX1NPVVJDRV9N
RU1CRVJTKGZ1bmN0aW9uTmFtZSkgXFwKKyAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVu
Y3Rpb24+IG1fIyNmdW5jdGlvbk5hbWUjI0Z1bmN0aW9uOworICAgICR7bWFjcm9QcmVmaXh9X0ZP
UkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJ
Tl9TT1VSQ0VfTUVNQkVSUykKKyN1bmRlZiBERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMK
K307CisKK2lubGluZSB2b2lkICR7b2JqZWN0TmFtZX1CdWlsdGluRnVuY3Rpb25zOjppbml0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyNkZWZpbmUgRVhQT1JUX0ZVTkNU
SU9OKGNvZGVOYW1lLCBmdW5jdGlvbk5hbWUsIG92ZXJyaWRkZW5OYW1lLCBsZW5ndGgpXFwKKyAg
ICBtXyMjZnVuY3Rpb25OYW1lIyNGdW5jdGlvbi5zZXQobV92bSwgJmdsb2JhbE9iamVjdCwgSlND
OjpKU0Z1bmN0aW9uOjpjcmVhdGUobV92bSwgY29kZU5hbWUjI0dlbmVyYXRvcihtX3ZtKSwgJmds
b2JhbE9iamVjdCkpOworICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31f
QlVJTFRJTl9DT0RFKEVYUE9SVF9GVU5DVElPTikKKyN1bmRlZiBFWFBPUlRfRlVOQ1RJT04KK30K
KworaW5saW5lIHZvaWQgJHtvYmplY3ROYW1lfUJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisjZGVmaW5lIFZJU0lUX0ZVTkNUSU9OKG5hbWUpIHZp
c2l0b3IuYXBwZW5kKG1fIyNuYW1lIyNGdW5jdGlvbik7CisgICAgJHttYWNyb1ByZWZpeH1fRk9S
RUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9OX05BTUUoVklTSVRfRlVOQ1RJT04p
CisjdW5kZWYgVklTSVRfRlVOQ1RJT04KK30KKyIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvd2tidWlsdGlucy5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvd2tidWlsdGlucy5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OWFmZjJiMWNmZjRmMjUzNTBiNzY1OGRkYTQ5YzBhNTEyM2U5YzE0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy93a2J1aWx0aW5zLnB5
CkBAIC0wLDAgKzEsMTUgQEAKKyMgVGhpcyBmaWxlIGlzIHVzZWQgdG8gc2ltdWxhdGUgdGhlIGJ1
aWx0aW5zLyBkaXJlY3Rvcnkgd2hlbiBnZW5lcmF0ZS1qcy1idWlsdGlucy5weQorIyBpcyBydW4g
ZnJvbSBKYXZhU2NyaXB0Q29yZSBmcmFtZXdvcmsncyBwcml2YXRlIGhlYWRlcnMgZGlyZWN0b3J5
LCB3aGljaCBpcyBmbGF0dGVuZWQuCisKK2Zyb20gYnVpbHRpbnNfbW9kZWwgaW1wb3J0ICoKK2Zy
b20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCAqCisKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdG9y
IGltcG9ydCAqCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlciBpbXBvcnQg
KgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbiBpbXBvcnQg
KgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIgaW1wb3J0ICoKK2Zyb20g
YnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20g
YnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gYnVpbHRpbnNf
Z2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBidWlsdGluc19n
ZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvdWRpczg2L3VkX29wY29k
ZS5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvdWRpczg2L3VkX29wY29k
ZS5weQppbmRleCBmZTE4MzNkYzcxYjc0ZWY2NjZkMTFlZmU0ZjgyN2Q0OWY2ZTgyNDAyLi4zMGM5
ZjQzNmNkNjM3YTcxNTQ2NDUzZTI5YzA1MmQ4ZTM0ZjI5NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9vcGNvZGUucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfb3Bjb2RlLnB5CkBAIC01
NTAsMTAgKzU1MCwxMCBAQCBjbGFzcyBVZE9wY29kZVRhYmxlcyhvYmplY3QpOgogICAgICAgICAg
ICAgZW50cmllcyA9IHRibC5lbnRyaWVzKCkKICAgICAgICAgICAgIGZvciBrLCBlIGluIGVudHJp
ZXM6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBVZE9wY29kZVRhYmxlKToKLSAg
ICAgICAgICAgICAgICAgICAgc2VsZi5sb2coIiVzICAgIHwtPCUwMng+ICVzIiAlIChpbmRlbnQs
IGssIGUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygiJXMgICAgfC08JTAyeD4gJXMi
ICUgKGluZGVudCwgaW50KGspLCBlKSkKICAgICAgICAgICAgICAgICAgICAgcHJpbnRXYWxrKGUs
IGluZGVudCArICIgICAgfCIpCiAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGUsIFVk
SW5zbkRlZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCIlcyAgICB8LTwlMDJ4PiAl
cyIgJSAoaW5kZW50LCBrLCBlKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coIiVzICAg
IHwtPCUwMng+ICVzIiAlIChpbmRlbnQsIGludChrKSwgZSkpCiAgICAgICAgIHByaW50V2Fsayhz
ZWxmLnJvb3QpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRl
LWJ5dGVjb2RlLWZpbGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRlLWJ5dGVjb2Rl
LWZpbGVzCmluZGV4IGZhMjVmZDJlZjMxYmU0YzFlYjNjM2E1ODViZTUyOWQ2N2NmZWQ2ZDguLjNm
YmQxMmYzZmU4YjEyNGRiZDQ1ZGYyZTE1MGRjNDM0ZjE2NDU1NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0ZS1ieXRlY29kZS1maWxlcworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdGUtYnl0ZWNvZGUtZmlsZXMKQEAgLTk0LDYgKzk0LDEyIEBAIGRl
ZiBvcGVuT3JFeGl0KHBhdGgsIG1vZGUpOgogICAgICAgICBwcmludCgiSS9PIGVycm9yIG9wZW5p
bmcgezB9LCAoezF9KTogezJ9Ii5mb3JtYXQocGF0aCwgZS5lcnJubywgZS5zdHJlcnJvcikpCiAg
ICAgICAgIGV4aXQoMSkKIAorZGVmIGRvd3JpdGUoZmlsZSwgc3RyKToKKyAgICBpZiBzeXMudmVy
c2lvbl9pbmZvLm1ham9yID09IDI6CisgICAgICAgIGZpbGUud3JpdGUoc3RyKQorICAgIGVsc2U6
CisgICAgICAgIGZpbGUud3JpdGUoYnl0ZXMoc3RyLCAidXRmLTgiKSkKKwogZGVmIGhhc2hGaWxl
KGZpbGUpOgogICAgIHNoYTEgPSBoYXNobGliLnNoYTEoKQogICAgIGZpbGUuc2VlaygwKQpAQCAt
MTEyLDMxICsxMTgsMzEgQEAgZGVmIHRvQ3BwKG5hbWUpOgogCiAKIGRlZiB3cml0ZUluc3RydWN0
aW9uQWNjZXNzb3IoYnl0ZWNvZGVIRmlsZSwgdHlwZU5hbWUsIG5hbWUpOgotICAgIGJ5dGVjb2Rl
SEZpbGUud3JpdGUoIiAgICB7MH0mIHsxfSgpIHt7IHJldHVybiAqYml0d2lzZV9jYXN0PHswfSo+
KCZtX3sxfSk7IH19XG4iLmZvcm1hdCh0eXBlTmFtZSwgbmFtZSkpCi0gICAgYnl0ZWNvZGVIRmls
ZS53cml0ZSgiICAgIGNvbnN0IHswfSYgezF9KCkgY29uc3Qge3sgcmV0dXJuICpiaXR3aXNlX2Nh
c3Q8Y29uc3QgezB9Kj4oJm1fezF9KTsgfX1cbiIuZm9ybWF0KHR5cGVOYW1lLCBuYW1lKSkKKyAg
ICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsICIgICAgezB9JiB7MX0oKSB7eyByZXR1cm4gKmJpdHdp
c2VfY2FzdDx7MH0qPigmbV97MX0pOyB9fVxuIi5mb3JtYXQodHlwZU5hbWUsIG5hbWUpKQorICAg
IGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiAgICBjb25zdCB7MH0mIHsxfSgpIGNvbnN0IHt7IHJl
dHVybiAqYml0d2lzZV9jYXN0PGNvbnN0IHswfSo+KCZtX3sxfSk7IH19XG4iLmZvcm1hdCh0eXBl
TmFtZSwgbmFtZSkpCiAKIAogZGVmIHdyaXRlSW5zdHJ1Y3Rpb25NZW1iZXIoYnl0ZWNvZGVIRmls
ZSwgdHlwZU5hbWUsIG5hbWUpOgotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiAgICBzdGQ6OmFs
aWduZWRfc3RvcmFnZTxzaXplb2YoezB9KSwgc2l6ZW9mKEluc3RydWN0aW9uKT46OnR5cGUgbV97
MX07XG4iLmZvcm1hdCh0eXBlTmFtZSwgbmFtZSkpCi0gICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgi
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHswfSkgPD0gc2l6ZW9mKEluc3RydWN0aW9uKSwgXCJT
aXplIG9mIHswfSBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4gYW4gSW5zdHJ1Y3Rpb24uXCIpO1xu
Ii5mb3JtYXQodHlwZU5hbWUsIG5hbWUpKQorICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgIiAg
ICBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoezB9KSwgc2l6ZW9mKEluc3RydWN0aW9uKT46
OnR5cGUgbV97MX07XG4iLmZvcm1hdCh0eXBlTmFtZSwgbmFtZSkpCisgICAgZG93cml0ZShieXRl
Y29kZUhGaWxlLCAiICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHswfSkgPD0gc2l6ZW9mKEluc3Ry
dWN0aW9uKSwgXCJTaXplIG9mIHswfSBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4gYW4gSW5zdHJ1
Y3Rpb24uXCIpO1xuIi5mb3JtYXQodHlwZU5hbWUsIG5hbWUpKQogCiBkZWYgd3JpdGVTdHJ1Y3Qo
Ynl0ZWNvZGVIRmlsZSwgYnl0ZWNvZGUpOgotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoInN0cnVj
dCB7MH0ge3tcbiIuZm9ybWF0KHRvQ3BwKGJ5dGVjb2RlWyJuYW1lIl0pKSkKLSAgICBieXRlY29k
ZUhGaWxlLndyaXRlKCJwdWJsaWM6XG4iKQorICAgIGRvd3JpdGUoYnl0ZWNvZGVIRmlsZSwgInN0
cnVjdCB7MH0ge3tcbiIuZm9ybWF0KHRvQ3BwKGJ5dGVjb2RlWyJuYW1lIl0pKSkKKyAgICBkb3dy
aXRlKGJ5dGVjb2RlSEZpbGUsICJwdWJsaWM6XG4iKQogCiAgICAgd3JpdGVJbnN0cnVjdGlvbkFj
Y2Vzc29yKGJ5dGVjb2RlSEZpbGUsICJPcGNvZGUiLCAib3Bjb2RlIikKICAgICBmb3Igb2Zmc2V0
IGluIGJ5dGVjb2RlWyJvZmZzZXRzIl06Ci0gICAgICAgIGZvciBuYW1lLCB0eXBlTmFtZSBpbiBv
ZmZzZXQuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBuYW1lLCB0eXBlTmFtZSBpbiBvZmZzZXQu
aXRlbXMoKToKICAgICAgICAgICAgIHdyaXRlSW5zdHJ1Y3Rpb25BY2Nlc3NvcihieXRlY29kZUhG
aWxlLCB0eXBlTmFtZSwgbmFtZSkKIAotICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIlxucHJpdmF0
ZTpcbiIpCi0gICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7XG5cbiIpCisgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiXG5wcml2
YXRlOlxuIikKKyAgICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsICIgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjtcblxuIikKIAogICAgIHdyaXRlSW5zdHJ1Y3Rpb25NZW1iZXIo
Ynl0ZWNvZGVIRmlsZSwgIk9wY29kZSIsICJvcGNvZGUiKQogICAgIGZvciBvZmZzZXQgaW4gYnl0
ZWNvZGVbIm9mZnNldHMiXToKLSAgICAgICAgZm9yIG5hbWUsIHR5cGVOYW1lIGluIG9mZnNldC5p
dGVyaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHR5cGVOYW1lIGluIG9mZnNldC5pdGVtcygp
OgogICAgICAgICAgICAgd3JpdGVJbnN0cnVjdGlvbk1lbWJlcihieXRlY29kZUhGaWxlLCB0eXBl
TmFtZSwgbmFtZSkKLSAgICBieXRlY29kZUhGaWxlLndyaXRlKCJ9O1xuXG4iKQorICAgIGRvd3Jp
dGUoYnl0ZWNvZGVIRmlsZSwgIn07XG5cbiIpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9f
IjoKQEAgLTIyMCwyNSArMjI2LDI1IEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAg
ICAgIHByaW50KCJVbmV4cGVjdGVkIGVycm9yIHBhcnNpbmcgezB9OiB7MX0iLmZvcm1hdChieXRl
Y29kZUpTT05GaWxlLCBzeXMuZXhjX2luZm8oKSkpCiAKICAgICBpZiBieXRlY29kZUhGaWxlbmFt
ZToKLSAgICAgICAgYnl0ZWNvZGVIRmlsZS53cml0ZShoRmlsZUhhc2hTdHJpbmcpCi0gICAgICAg
IGJ5dGVjb2RlSEZpbGUud3JpdGUoY0NvcHlyaWdodE1zZyAlIGJ5dGVjb2RlSlNPTkZpbGUpCi0g
ICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiNwcmFnbWEgb25jZVxuXG4iKQorICAgICAgICBk
b3dyaXRlKGJ5dGVjb2RlSEZpbGUsIGhGaWxlSGFzaFN0cmluZykKKyAgICAgICAgZG93cml0ZShi
eXRlY29kZUhGaWxlLCBjQ29weXJpZ2h0TXNnICUgYnl0ZWNvZGVKU09ORmlsZSkKKyAgICAgICAg
ZG93cml0ZShieXRlY29kZUhGaWxlLCAiI3ByYWdtYSBvbmNlXG5cbiIpCiAKICAgICBpZiBieXRl
Y29kZVN0cnVjdHNIRmlsZW5hbWU6Ci0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlLndyaXRl
KGhGaWxlSGFzaFN0cmluZykKLSAgICAgICAgYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUud3JpdGUoY0Nv
cHlyaWdodE1zZyAlIGJ5dGVjb2RlSlNPTkZpbGUpCi0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hG
aWxlLndyaXRlKCIjcHJhZ21hIG9uY2VcblxuIikKLSAgICAgICAgYnl0ZWNvZGVTdHJ1Y3RzSEZp
bGUud3JpdGUoIiNpbmNsdWRlIFwiSW5zdHJ1Y3Rpb24uaFwiXG4iKQotICAgICAgICBieXRlY29k
ZVN0cnVjdHNIRmlsZS53cml0ZSgiXG4iKQorICAgICAgICBkb3dyaXRlKGJ5dGVjb2RlU3RydWN0
c0hGaWxlLCBoRmlsZUhhc2hTdHJpbmcpCisgICAgICAgIGRvd3JpdGUoYnl0ZWNvZGVTdHJ1Y3Rz
SEZpbGUsIGNDb3B5cmlnaHRNc2cgJSBieXRlY29kZUpTT05GaWxlKQorICAgICAgICBkb3dyaXRl
KGJ5dGVjb2RlU3RydWN0c0hGaWxlLCAiI3ByYWdtYSBvbmNlXG5cbiIpCisgICAgICAgIGRvd3Jp
dGUoYnl0ZWNvZGVTdHJ1Y3RzSEZpbGUsICIjaW5jbHVkZSBcIkluc3RydWN0aW9uLmhcIlxuIikK
KyAgICAgICAgZG93cml0ZShieXRlY29kZVN0cnVjdHNIRmlsZSwgIlxuIikKIAogICAgIGlmIGlu
aXRBU01GaWxlTmFtZToKLSAgICAgICAgaW5pdEJ5dGVjb2Rlc0ZpbGUud3JpdGUoYXNtRmlsZUhh
c2hTdHJpbmcpCi0gICAgICAgIGluaXRCeXRlY29kZXNGaWxlLndyaXRlKGFzbUNvcHlyaWdodE1z
ZyAlIGJ5dGVjb2RlSlNPTkZpbGUpCisgICAgICAgIGRvd3JpdGUoaW5pdEJ5dGVjb2Rlc0ZpbGUs
IGFzbUZpbGVIYXNoU3RyaW5nKQorICAgICAgICBkb3dyaXRlKGluaXRCeXRlY29kZXNGaWxlLCBh
c21Db3B5cmlnaHRNc2cgJSBieXRlY29kZUpTT05GaWxlKQogICAgICAgICBpbml0QVNNQnl0ZWNv
ZGVOdW0gPSAwCiAKICAgICBmb3Igc2VjdGlvbiBpbiBieXRlY29kZVNlY3Rpb25zOgogICAgICAg
ICBpZiBieXRlY29kZUhGaWxlbmFtZSBhbmQgc2VjdGlvblsnZW1pdEluSEZpbGUnXToKLSAgICAg
ICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiNkZWZpbmUgRk9SX0VBQ0hfezB9X0lEKG1hY3Jv
KSBcXFxuIi5mb3JtYXQoc2VjdGlvblsibWFjcm9OYW1lQ29tcG9uZW50Il0pKQorICAgICAgICAg
ICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiI2RlZmluZSBGT1JfRUFDSF97MH1fSUQobWFjcm8p
IFxcXG4iLmZvcm1hdChzZWN0aW9uWyJtYWNyb05hbWVDb21wb25lbnQiXSkpCiAgICAgICAgICAg
ICBmaXJzdE1hY3JvID0gVHJ1ZQogICAgICAgICAgICAgZGVmYXVsdExlbmd0aCA9IDEKICAgICAg
ICAgICAgIGlmICJkZWZhdWx0TGVuZ3RoIiBpbiBzZWN0aW9uOgpAQCAtMjQ3LDcgKzI1Myw3IEBA
IGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgICAgICAgICBieXRlY29kZU51bSA9IDAK
ICAgICAgICAgICAgIGZvciBieXRlY29kZSBpbiBzZWN0aW9uWyJieXRlY29kZXMiXToKICAgICAg
ICAgICAgICAgICBpZiBub3QgZmlyc3RNYWNybzoKLSAgICAgICAgICAgICAgICAgICAgYnl0ZWNv
ZGVIRmlsZS53cml0ZSgiIFxcXG4iKQorICAgICAgICAgICAgICAgICAgICBkb3dyaXRlKGJ5dGVj
b2RlSEZpbGUsICIgXFxcbiIpCiAKICAgICAgICAgICAgICAgICBsZW5ndGggPSBkZWZhdWx0TGVu
Z3RoCiAgICAgICAgICAgICAgICAgaWYgImxlbmd0aCIgaW4gYnl0ZWNvZGU6CkBAIC0yNTYsMzkg
KzI2MiwzOSBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICAgICAgICAgICAgICAg
ICAjIEFkZCBvbmUgZm9yIHRoZSBvcGNvZGUKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0g
bGVuKGJ5dGVjb2RlWyJvZmZzZXRzIl0pICsgMQogCi0gICAgICAgICAgICAgICAgYnl0ZWNvZGVI
RmlsZS53cml0ZSgiICAgIG1hY3JvKHswfSwgezF9KSIuZm9ybWF0KGJ5dGVjb2RlWyJuYW1lIl0s
IGxlbmd0aCkpCisgICAgICAgICAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiICAgIG1h
Y3JvKHswfSwgezF9KSIuZm9ybWF0KGJ5dGVjb2RlWyJuYW1lIl0sIGxlbmd0aCkpCiAgICAgICAg
ICAgICAgICAgZmlyc3RNYWNybyA9IEZhbHNlCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVOdW0g
PSBieXRlY29kZU51bSArIDEKIAotICAgICAgICAgICAgYnl0ZWNvZGVIRmlsZS53cml0ZSgiXG5c
biIpCi0gICAgICAgICAgICBieXRlY29kZUhGaWxlLndyaXRlKCIjZGVmaW5lIE5VTUJFUl9PRl97
MH1fSURTIHsxfVxuXG4iLmZvcm1hdChzZWN0aW9uWyJtYWNyb05hbWVDb21wb25lbnQiXSwgYnl0
ZWNvZGVOdW0pKQorICAgICAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiXG5cbiIpCisg
ICAgICAgICAgICBkb3dyaXRlKGJ5dGVjb2RlSEZpbGUsICIjZGVmaW5lIE5VTUJFUl9PRl97MH1f
SURTIHsxfVxuXG4iLmZvcm1hdChzZWN0aW9uWyJtYWNyb05hbWVDb21wb25lbnQiXSwgYnl0ZWNv
ZGVOdW0pKQogCiAKICAgICAgICAgaWYgYnl0ZWNvZGVTdHJ1Y3RzSEZpbGVuYW1lIGFuZCBzZWN0
aW9uWydlbWl0SW5TdHJ1Y3RzRmlsZSddOgotICAgICAgICAgICAgYnl0ZWNvZGVTdHJ1Y3RzSEZp
bGUud3JpdGUoIm5hbWVzcGFjZSBKU0Mge1xuXG4iKQorICAgICAgICAgICAgZG93cml0ZShieXRl
Y29kZVN0cnVjdHNIRmlsZSwgIm5hbWVzcGFjZSBKU0Mge1xuXG4iKQogCiAgICAgICAgICAgICBm
b3IgYnl0ZWNvZGUgaW4gc2VjdGlvblsiYnl0ZWNvZGVzIl06CiAgICAgICAgICAgICAgICAgaWYg
bm90ICJvZmZzZXRzIiBpbiBieXRlY29kZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUK
ICAgICAgICAgICAgICAgICB3cml0ZVN0cnVjdChieXRlY29kZVN0cnVjdHNIRmlsZSwgYnl0ZWNv
ZGUpCiAKLSAgICAgICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlLndyaXRlKCJ9IC8vIG5hbWVz
cGFjZSBKU0MgXG4iKQorICAgICAgICAgICAgZG93cml0ZShieXRlY29kZVN0cnVjdHNIRmlsZSwg
In0gLy8gbmFtZXNwYWNlIEpTQyBcbiIpCiAKICAgICAgICAgaWYgYnl0ZWNvZGVIRmlsZW5hbWUg
YW5kIHNlY3Rpb25bJ2VtaXRPcGNvZGVJRFN0cmluZ1ZhbHVlc0luSEZpbGUnXToKICAgICAgICAg
ICAgIGJ5dGVjb2RlTnVtID0gMAogICAgICAgICAgICAgZm9yIGJ5dGVjb2RlIGluIHNlY3Rpb25b
ImJ5dGVjb2RlcyJdOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlSEZpbGUud3JpdGUoIiNkZWZp
bmUgezB9X3ZhbHVlX3N0cmluZyBcInsxfVwiXG4iLmZvcm1hdChieXRlY29kZVsibmFtZSJdLCBi
eXRlY29kZU51bSkpCisgICAgICAgICAgICAgICAgZG93cml0ZShieXRlY29kZUhGaWxlLCAiI2Rl
ZmluZSB7MH1fdmFsdWVfc3RyaW5nIFwiezF9XCJcbiIuZm9ybWF0KGJ5dGVjb2RlWyJuYW1lIl0s
IGJ5dGVjb2RlTnVtKSkKICAgICAgICAgICAgICAgICBmaXJzdE1hY3JvID0gRmFsc2UKICAgICAg
ICAgICAgICAgICBieXRlY29kZU51bSA9IGJ5dGVjb2RlTnVtICsgMQogCi0gICAgICAgICAgICBi
eXRlY29kZUhGaWxlLndyaXRlKCJcbiIpICAgICAgICAgICAgCisgICAgICAgICAgICBkb3dyaXRl
KGJ5dGVjb2RlSEZpbGUsICJcbiIpICAgICAgICAgICAgCiAKICAgICAgICAgaWYgaW5pdEFTTUZp
bGVOYW1lIGFuZCBzZWN0aW9uWydlbWl0SW5BU01GaWxlJ106CiAgICAgICAgICAgICBwcmVmaXgg
PSAiIgogICAgICAgICAgICAgaWYgImFzbVByZWZpeCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAg
ICAgICBwcmVmaXggPSBzZWN0aW9uWyJhc21QcmVmaXgiXQogICAgICAgICAgICAgZm9yIGJ5dGVj
b2RlIGluIHNlY3Rpb25bImJ5dGVjb2RlcyJdOgotICAgICAgICAgICAgICAgIGluaXRCeXRlY29k
ZXNGaWxlLndyaXRlKCJzZXRFbnRyeUFkZHJlc3MoezB9LCBfezF9ezJ9KVxuIi5mb3JtYXQoaW5p
dEFTTUJ5dGVjb2RlTnVtLCBwcmVmaXgsIGJ5dGVjb2RlWyJuYW1lIl0pKQorICAgICAgICAgICAg
ICAgIGRvd3JpdGUoaW5pdEJ5dGVjb2Rlc0ZpbGUsICJzZXRFbnRyeUFkZHJlc3MoezB9LCBfezF9
ezJ9KVxuIi5mb3JtYXQoaW5pdEFTTUJ5dGVjb2RlTnVtLCBwcmVmaXgsIGJ5dGVjb2RlWyJuYW1l
Il0pKQogICAgICAgICAgICAgICAgIGluaXRBU01CeXRlY29kZU51bSA9IGluaXRBU01CeXRlY29k
ZU51bSArIDEKIAogICAgIGlmIGJ5dGVjb2RlSEZpbGVuYW1lOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5w
eQppbmRleCAzN2RiZTk0MzYzMzI4YjNlMDE2MGYwYmMwMTFmZWEwMWVjM2U4MzRlLi4xYTRhYzY5
ZGE0YjVmMWU5ZGQxN2YxYmM5MzcwOTMzM2Q3ZTI2YzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5w
eQpAQCAtMSwyNSArMSwyNSBAQAogIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlz
IGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCiAKLWZyb20gbW9kZWxzIGltcG9ydCAqCi1mcm9t
IGdlbmVyYXRvciBpbXBvcnQgKgotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCAqCi1mcm9tIG9i
amNfZ2VuZXJhdG9yIGltcG9ydCAqCitmcm9tIC5tb2RlbHMgaW1wb3J0ICoKK2Zyb20gLmdlbmVy
YXRvciBpbXBvcnQgKgorZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgKgorZnJvbSAub2JqY19n
ZW5lcmF0b3IgaW1wb3J0ICoKIAotZnJvbSBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfY3BwX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfanNfYmFja2VuZF9jb21t
YW5kcyBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRl
ciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfaGVhZGVyIGltcG9ydCAqCi1m
cm9tIGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJh
dGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlciBpbXBvcnQgKgotZnJvbSBn
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24gaW1w
b3J0ICoKK2Zyb20gLmdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19oZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcyBp
bXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGlt
cG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlciBp
bXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
IGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29iamNfaGVhZGVyIGltcG9ydCAqCitm
cm9tIC5nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJh
dGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlciBpbXBvcnQgKgorZnJv
bSAuZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9u
IGltcG9ydCAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQppbmRleCA1ZjJlOWM4NDYy
ZDgwMzIyZjVjYWI5NTU4ODFiOThhNWFhNTA4YjM0Li5hN2QyNzQ0ODExOTlhZjBlYzQyY2FiMDY0
ODFiNjI1OGYxMGEyN2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAgLTI4
LDggKzI4LDggQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUKIAot
ZnJvbSBnZW5lcmF0b3IgaW1wb3J0IHVjZmlyc3QsIEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1w
b3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFz
ZWRUeXBlLCBGcmFtZXdvcmtzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IHVjZmlyc3QsIEdlbmVy
YXRvcgorZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5CmluZGV4IGY2YmY4NmRhOTJhNGI2NWU5OGViMTA1YjljZTM2OTRkNGYxNWQ3ZDcu
LjI3NjlkZjg1NDJiZGRjZDY5ZjE0N2UwZTA1ODUxNzdjYTg2M2Y0ZGQgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJu
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTMwLDggKzMwLDggQEAgaW1wb3J0
IHN0cmluZwogaW1wb3J0IHJlCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBj
cHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20g
LmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKIAog
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTUyLDcgKzUyLDcgQEAgY2xh
c3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2Vs
Zi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShD
cHBUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqdGVtcGxhdGVfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpv
aW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19m
b3JfZG9tYWluLCBkb21haW5zKSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2lu
KFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4sIGRvbWFpbnMpIGlmIF9mXSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1w
bGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQb3N0bHVkZSkuc3Vi
c3RpdHV0ZShOb25lLCAqKnRlbXBsYXRlX2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpv
aW4oc2VjdGlvbnMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggMDc2OWM4YTI3YTk3
M2RjNWZlM2IxNzgwYzRkMzdkYWE4NGQ0ZWI3NC4uYzE0YWIxOGVmZjIzMzM0ODljMGFmMmE3ZmMx
ZjlkMWJiNzNlYzBjNSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTMwLDEwICszMCwx
MCBAQCBpbXBvcnQgcmUKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0
ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBs
YXRlcwotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2Rl
bHMgaW1wb3J0IEVudW1UeXBlCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKK2Zyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1w
bGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKIApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gIiVz
QmFja2VuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBk
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBk
b21haW46IGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIFtkb21haW4gZm9y
IGRvbWFpbiBpbiBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2Vs
Zi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikpID4gMF0KIAogICAgIGRlZiBnZW5lcmF0ZV9v
dXRwdXQoc2VsZik6CiAgICAgICAgIHR5cGVkZWZzID0gWygnU3RyaW5nJywgJ0Vycm9yU3RyaW5n
JyldCkBAIC02Miw4ICs2Miw4IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShD
cHBUZW1wbGF0ZXMuSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdz
KSkKICAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdhbHRlcm5hdGVf
ZGlzcGF0Y2hlcnMnLCBGYWxzZSk6CiAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfYWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFp
bnMoZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
aGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCi0gICAgICAgIHNlY3Rp
b25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9y
X2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxm
Ll9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpCisg
ICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykK
IApAQCAtMTk4LDcgKzE5OCw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19m
b3JfZG9tYWluKGRvbWFpbikKICAgICAgICAgaWYgbGVuKGNvbW1hbmRzKSA+IDA6CiAgICAgICAg
ICAgICBkZWNsYXJhdGlvbnMuYXBwZW5kKCdwcml2YXRlOicpCi0gICAgICAgIGRlY2xhcmF0aW9u
cy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2Nv
bW1hbmQsIGNvbW1hbmRzKSkKKyAgICAgICAgZGVjbGFyYXRpb25zLmV4dGVuZChsaXN0KG1hcChz
ZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kLCBjb21tYW5k
cykpKQogCiAgICAgICAgIGRlY2xhcmF0aW9uX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWlu
TmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CmluZGV4IGM1NThlZDRlZGIwMjJjY2ViOTI5ZjJiZTY0OTZiNGFhNDZiMWNiODIu
LjAzNGJkNzI4MjgyNTliYzg4ZDgzNzRjNWMzZDM4MDBlYmM3NGJlZDAgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMjksMTAgKzI5LDEwIEBAIGltcG9ydCBs
b2dnaW5nCiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJv
bSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKLWZy
b20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9y
dCBPYmplY3RUeXBlLCBBcnJheVR5cGUKK2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdl
bmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQog
CiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgIHJldHVybiAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYu
cHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAg
ICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oc2VsZi5jb21tYW5kc19mb3Jf
ZG9tYWluKGRvbWFpbikpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikp
CisgICAgICAgIHJldHVybiBbZG9tYWluIGZvciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZikgaWYgbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4p
KSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRh
cnlfaW5jbHVkZXMgPSBzZWxmLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkK
QEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoIlxuIi5qb2luKG1hcChzZWxmLl9nZW5l
cmF0ZV9oYW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCkpKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoKSkpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVt
cGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCiAgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CmluZGV4IDU5YmQ3NjY2MDk4MzAyZmVhMzNlYjU5NTM2MzBjYmFmMjY4
MTc0MjIuLjkwYmRiY2Q3NzY4M2MxYWYyN2JjMDZkOTNjOTk5Y2YyMjgzZjUxYmMgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTMwLDEwICszMCwxMCBAQCBpbXBvcnQgcmUKIGltcG9y
dCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0
b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwotZnJvbSBnZW5lcmF0b3Ig
aW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCitm
cm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gLmNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVz
Citmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAubW9kZWxz
IGltcG9ydCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApA
QCAtNDYsNyArNDYsNyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICIlc0Zyb250ZW5kRGlzcGF0Y2hlcnMu
aCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKHNlbGYuZXZl
bnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBpbiBHZW5lcmF0b3Iu
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5ldmVudHNfZm9yX2RvbWFpbihk
b21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBo
ZWFkZXJfYXJncyA9IHsKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zID0gW10K
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZCht
YXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdCht
YXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKICAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGI2OTY1ZjU3ZjNiZmY5YjM3
MmMyNzNjM2ViZTljN2E1YTZlOGQ5NTMuLjJjZmZkMmI4MjlkMjUxMGY0YzdlNTYwMDQ5ZmIyYjg4
ODRkYjRhYmYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBA
IC0yOSwxMCArMjksMTAgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzdHJpbmcKIGZyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIENwcFRlbXBsYXRlcwotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorZnJvbSAu
Y3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5jcHBfZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJv
bSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLm1vZGVscyBpbXBv
cnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQogCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiAiJXNGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRv
bWFpbjogbGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0b3Iu
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRv
bWFpbiBpbiBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5l
dmVudHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgogICAgICAgICBoZWFkZXJfYXJncyA9IHsKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3Mg
Q3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0
ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5l
cmF0ZSgpKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
SW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
ICAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpp
bmRleCA3NTQ4ZDYzMTQ1YWNkODFkOWE1MmUxMjFkOTEyN2E4ZTgwNDUzZTc4Li5mOTBjMTAwYWFj
ZDVmMGYxMjRlMDEwNzk3YjdkZWRjMGJhMzQ3ZDk5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKQEAgLTMx
LDEwICszMSwxMCBAQCBpbXBvcnQgc3RyaW5nCiBmcm9tIG9wZXJhdG9yIGltcG9ydCBtZXRob2Rj
YWxsZXIKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
Q3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwotZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmpl
Y3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBGcmFtZXdvcmtz
Citmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gLmNwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxh
dGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAubW9k
ZWxzIGltcG9ydCBFbnVtVHlwZSwgT2JqZWN0VHlwZSwgUHJpbWl0aXZlVHlwZSwgQWxpYXNlZFR5
cGUsIEFycmF5VHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKIApAQCAtNjIsOCArNjIsOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhkb21haW5zKSkKICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzKGRvbWFpbnMpKQogICAgICAgICBzZWN0aW9ucy5l
eHRlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb25zdGFudF92YWx1ZV9jb252ZXJzaW9uX21ldGhv
ZHMoKSkKLSAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWls
ZGVyc19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVy
KGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKKyAg
ICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJz
X2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoW3NlY3Rpb24g
Zm9yIHNlY3Rpb24gaW4gYnVpbGRlcl9zZWN0aW9ucyBpZiBsZW4oc2VjdGlvbikgPiAwXSkKICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25z
X2Zvcl9iaW5kaW5nX3RyYWl0cyhkb21haW5zKSkKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKHNl
bGYuX2dlbmVyYXRlX2RlY2xhcmF0aW9uc19mb3JfZW51bV9jb252ZXJzaW9uX21ldGhvZHMoZG9t
YWlucykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wn
KQpAQCAtODgsOCArODgsOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgogICAgICAg
ICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHNlbGYudHlw
ZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pXQotICAgICAgICAgICAgb2JqZWN0X3R5
cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSks
IGRlY2xhcmF0aW9uX3R5cGVzKQotICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1i
ZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMp
CisgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGluIGRlY2xhcmF0
aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpXQorICAgICAgICAgICAg
ZW51bV90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMgaWYgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpXQogICAgICAgICAgICAgc29ydGVkKG9iamVjdF90eXBl
cywga2V5PW1ldGhvZGNhbGxlcigncmF3X25hbWUnKSkKICAgICAgICAgICAgIHNvcnRlZChlbnVt
X3R5cGVzLCBrZXk9bWV0aG9kY2FsbGVyKCdyYXdfbmFtZScpKQogCkBAIC0xMTQsOCArMTE0LDgg
QEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgog
IiIiICUgJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZz
KHNlbGYsIGRvbWFpbnMpOgotICAgICAgICBzZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV90
eXBlZGVmc19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihs
YW1iZGEgdGV4dDogbGVuKHRleHQpID4gMCwgc2VjdGlvbnMpCisgICAgICAgIHNlY3Rpb25zID0g
bGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisg
ICAgICAgIHNlY3Rpb25zID0gW3RleHQgZm9yIHRleHQgaW4gc2VjdGlvbnMgaWYgbGVuKHRleHQp
ID4gMF0KIAogICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CiAgICAgICAgICAgICByZXR1
cm4gJycKQEAgLTEyNiw4ICsxMjYsOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5
cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICBwcmltaXRpdmVfZGVj
bGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNlKGRlY2wudHlwZSwgQWxp
YXNlZFR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKLSAgICAgICAgYXJyYXlfZGVjbGFyYXRpb25z
ID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNlKGRlY2wudHlwZSwgQXJyYXlUeXBlKSwg
dHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAgIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMgPSBbZGVj
bCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBpc2luc3RhbmNlKGRlY2wudHlwZSwg
QWxpYXNlZFR5cGUpXQorICAgICAgICBhcnJheV9kZWNsYXJhdGlvbnMgPSBbZGVjbCBmb3IgZGVj
bCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBpc2luc3RhbmNlKGRlY2wudHlwZSwgQXJyYXlUeXBl
KV0KICAgICAgICAgaWYgbGVuKHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMpID09IDAgYW5kIGxlbihh
cnJheV9kZWNsYXJhdGlvbnMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKIApAQCAtMTg3
LDcgKzE4Nyw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5
cGUsIE9iamVjdFR5cGUpOgogICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24sIGRv
bWFpbikpCiAKLSAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxlbihz
ZWN0aW9uKSA+IDAsIHNlY3Rpb25zKQorICAgICAgICBzZWN0aW9ucyA9IFtzZWN0aW9uIGZvciBz
ZWN0aW9uIGluIHNlY3Rpb25zIGlmIGxlbihzZWN0aW9uKSA+IDBdCiAgICAgICAgIGlmIGxlbihz
ZWN0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAnJwogCkBAIC0yMDEsOSArMjAxLDkg
QEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgog
ICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6CiAgICAg
ICAgICAgICByZXR1cm4gJycKIAotICAgICAgICBlbnVtX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRh
IG1lbWJlcjogaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlw
ZS5pc19hbm9ueW1vdXMsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBy
ZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0
aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9t
ZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9k
ZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIGVudW1fbWVtYmVycyA9IFttZW1iZXIg
Zm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBpc2luc3RhbmNl
KG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91c10KKyAg
ICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQorICAgICAgICBv
cHRpb25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KICAgICAgICAgb2JqZWN0X25hbWUg
PSB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZQogCiAgICAgICAgIGxpbmVzID0gW10KQEAgLTI2
Miw3ICsyNjIsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiAnICAg
ICcgKyBsaW5lCiAKLSAgICAgICAgaW5kZW50ZWRfbGluZXMgPSBtYXAoYXBwbHlfaW5kZW50YXRp
b24sIHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fbWVtYmVyLm1lbWJl
cl9uYW1lLCBlbnVtX21lbWJlci50eXBlKSkKKyAgICAgICAgaW5kZW50ZWRfbGluZXMgPSBsaXN0
KG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5
cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVtYmVyLnR5cGUpKSkKICAgICAgICAg
cmV0dXJuICdcbicuam9pbihpbmRlbnRlZF9saW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfc3Ry
dWN0X2Zvcl9lbnVtX3R5cGUoc2VsZiwgZW51bV9uYW1lLCBlbnVtX3R5cGUpOgpAQCAtMjc2LDcg
KzI3Niw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHNlbGYsIHR5cGVf
ZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHJlcXVpcmVkX21lbWJl
cnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9k
ZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVt
YmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1l
bWJlci5pc19vcHRpb25hbF0KICAgICAgICAgZW51bV92YWx1ZXMgPSBbXQogCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIGVudW0geycpCkBAIC0zNDQsNyArMzQ0LDcgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAgIGZvciBk
b21haW4gaW4gZG9tYWluczoKICAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50
eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKLSAgICAgICAgICAgIGRlY2xhcmF0
aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3No
YXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgdHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAgICAg
ICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xh
cmF0aW9ucyBpZiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpXQog
CiAgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2Vu
ZXJhdGU6CiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzOgpAQCAtMzkzLDggKzM5Myw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlw
ZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGRvbWFpbiBpbiBk
b21haW5zOgogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFy
YXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMg
PSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQotICAgICAgICAgICAg
b2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2Jq
ZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQotICAgICAgICAgICAgZW51bV90eXBlcyA9IGZp
bHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRp
b25fdHlwZXMpCisgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGlu
IGRlY2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpXQorICAg
ICAgICAgICAgZW51bV90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlw
ZXMgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpXQogICAgICAgICAgICAgaWYgbGVuKG9i
amVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0gMDoKICAgICAgICAgICAgICAgICBjb250
aW51ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNWU3YWVjMjNhZTZl
MjQ3MjcxZThkYzEwZDI5ZDc3MGM2M2E5ZWMyNy4uYWM4ZWM1YjcxMGNjM2RmYjU2ZGM5YWFmZjVj
ZTk0MDMwZTg1MDZhMiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzAs
MTAgKzMwLDEwIEBAIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQog
ZnJvbSBvcGVyYXRvciBpbXBvcnQgbWV0aG9kY2FsbGVyCiAKLWZyb20gY3BwX2dlbmVyYXRvciBp
bXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBD
cHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBv
cnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgQWxpYXNlZFR5cGUsIEFy
cmF5VHlwZSwgRW51bVR5cGUsIE9iamVjdFR5cGUKK2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0
IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IEFsaWFzZWRUeXBlLCBBcnJh
eVR5cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQogCkBAIC02NSw4ICs2NSw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
J25hbWVzcGFjZSBQcm90b2NvbCB7JykKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKHNlbGYuX2dl
bmVyYXRlX2VudW1fbWFwcGluZ19hbmRfY29udmVyc2lvbl9tZXRob2RzKGRvbWFpbnMpKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcygpKQot
ICAgICAgICBidWlsZGVyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zv
cl9kb21haW4sIGRvbWFpbnMpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFtYmRh
IHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQorICAgICAgICBi
dWlsZGVyX3NlY3Rpb25zID0gbGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2Rv
bWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChbc2VjdGlvbiBmb3Igc2Vj
dGlvbiBpbiBidWlsZGVyX3NlY3Rpb25zIGlmIGxlbihzZWN0aW9uKSA+IDBdKQogICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoJ30gLy8gbmFtZXNwYWNlIFByb3RvY29sJykKICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogCkBAIC0xMjgsOCArMTI4LDggQEAgY2xh
c3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6
CiAKICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oZG9tYWluKQogICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUg
Zm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnNdCi0gICAgICAgIG9iamVjdF90eXBlcyA9IGZp
bHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJh
dGlvbl90eXBlcykKLSAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgIG9i
amVjdF90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMgaWYgaXNp
bnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSldCisgICAgICAgIGVudW1fdHlwZXMgPSBbX3R5cGUg
Zm9yIF90eXBlIGluIGRlY2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKV0KICAgICAgICAgaWYgbGVuKG9iamVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0g
MDoKICAgICAgICAgICAgIHJldHVybiAnJwogCkBAIC0xNTYsOCArMTU2LDggQEAgY2xhc3MgQ3Bw
UHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAg
ICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgJXMg
eycgJSBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmV4dGVuZChz
ZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKLSAgICAgICAgZW51bV9wYXJzZXJfc2VjdGlv
bnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9yX2RvbWFp
biwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlv
bjogbGVuKHNlY3Rpb24pID4gMCwgZW51bV9wYXJzZXJfc2VjdGlvbnMpKQorICAgICAgICBlbnVt
X3BhcnNlcl9zZWN0aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lv
bl9tZXRob2RzX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQo
W3NlY3Rpb24gZm9yIHNlY3Rpb24gaW4gZW51bV9wYXJzZXJfc2VjdGlvbnMgaWYgbGVuKHNlY3Rp
b24pID4gMF0pCiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMToKICAgICAgICAgICAgIHJl
dHVybiBbXSAgIyBObyBkZWNsYXJhdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgbmFtZXNwYWNlLgog
CkBAIC0xNjgsNyArMTY4LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9y
IGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKICAgICAgICAgICAgIHR5cGVf
ZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikK
LSAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGZpbHRlcihsYW1iZGEgZGVjbDog
R2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKGRlY2wudHlwZSksIHR5cGVfZGVjbGFyYXRp
b25zKToKKyAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIFtkZWNsIGZvciBkZWNs
IGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhk
ZWNsLnR5cGUpXToKICAgICAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5lcmF0b3Iub3Bl
bl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1i
ZXIgaW4gc29ydGVkKG9wZW5fbWVtYmVycywga2V5PWxhbWJkYSBtZW1iZXI6IG1lbWJlci5tZW1i
ZXJfbmFtZSk6CiAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAnOjonLmpvaW4oWydJ
bnNwZWN0b3InLCAnUHJvdG9jb2wnLCBkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QodHlwZV9k
ZWNsYXJhdGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0p
CkBAIC0xNzksNyArMTc5LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3Jf
ZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgdHlw
ZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWlu
KQotICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6
IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIHR5cGVfZGVjbGFy
YXRpb25zKQorICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBbZGVjbCBmb3IgZGVj
bCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9u
cyhkZWNsLnR5cGUpXQogCiAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0
aW9uc190b19nZW5lcmF0ZToKICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKQEAgLTIwMCw4ICsyMDAsOCBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
cmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5Qcm90b2NvbE9iamVjdFJ1bnRpbWVDYXN0KS5z
dWJzdGl0dXRlKE5vbmUsICoqYXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAg
cmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29w
dGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25h
bF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgb2Jq
ZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9
IFttZW1iZXIgZm9yIG1lbWJlciBpbiBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlm
IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWxdCisgICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBbbWVt
YmVyIGZvciBtZW1iZXIgaW4gb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1i
ZXIuaXNfb3B0aW9uYWxdCiAgICAgICAgIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzID0gbm90IEdl
bmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhvYmplY3RfZGVjbGFyYXRpb24udHlwZSkKICAg
ICAgICAgbGluZXMgPSBbXQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
anNfYmFja2VuZF9jb21tYW5kcy5weQppbmRleCA5MzMwN2E4OTcyZDJjOWViNzBhN2IxMzQ3MGMz
OThiNmRkOWYxODZkLi45MDdiZjBjYTM4Y2ZmYWRiNmQ3ZDNhODc2YTYyZTZjMjdjOWU2NTE2IDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFu
ZHMucHkKQEAgLTMwLDkgKzMwLDkgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzdHJpbmcKIGZy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRl
bXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorZnJvbSAu
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLmdlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gLm1vZGVs
cyBpbXBvcnQgRW51bVR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAK
QEAgLTQ2LDE2ICs0NiwxNiBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5l
cmF0b3IpOgogCiAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToK
ICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4oZG9tYWluKQotICAgICAgICBkb21haW5fZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEg
ZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpLCB0eXBl
X2RlY2xhcmF0aW9ucykKKyAgICAgICAgZG9tYWluX2VudW1fdHlwZXMgPSBbZGVjbGFyYXRpb24g
Zm9yIGRlY2xhcmF0aW9uIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIGlzaW5zdGFuY2UoZGVjbGFy
YXRpb24udHlwZSwgRW51bVR5cGUpXQogICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29tbWFuZHNf
Zm9yX2RvbWFpbihkb21haW4pKSA+IDAgb3IgbGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9t
YWluKSkgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAwCiAKICAgICBkZWYgZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAg
ICAgICByZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0
cHV0KHNlbGYpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChz
ZWxmLmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAg
ICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5nZW5lcmF0ZV9kb21haW4sIHNlbGYuZG9t
YWluc190b19nZW5lcmF0ZSgpKSkpCiAgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9u
cykKIAogICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToKQEAgLTcwLDcgKzcw
LDcgQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAg
ICAgY29tbWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICBl
dmVudHMgPSBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikKIAotICAgICAgICBoYXNfYXN5
bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBjb21tYW5kOiBjb21tYW5kLmlzX2FzeW5jLCBj
b21tYW5kcykpCisgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShbY29tbWFuZC5pc19h
c3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5kc10pCiAgICAgICAgIGlmIGxlbihldmVudHMpID4g
MCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFpbilzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIiUoZG9t
YWluKXMiKTsnICUgYXJncykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDAwMzU3
NTY3ZThjZDc5N2YxYjFhOTQ1ZTFhZWJjODY5M2MwNGNkZTIuLjYxNDZkNzcyNmQxZTU3NTFhNmIy
MmE5M2EzN2Y2MzAwNmVjY2IyNjkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTMw
LDExICszMCwxMSBAQCBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9y
dCBUZW1wbGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1wb3J0IEZyYW1ld29y
a3MKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19n
ZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNU
ZW1wbGF0ZXMKK2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAu
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm1vZGVscyBpbXBvcnQgRnJhbWV3b3Jr
cworZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpD
VGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00Nyw3
ICs0Nyw3IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihPYmpD
R2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5oJyAlIHNl
bGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3Jf
ZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0
dXJuIGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4s
IEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKSkKIAogICAgIGRlZiBnZW5lcmF0
ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcnMgPSBbCkBAIC02NCw3ICs2NCw3IEBAIGNs
YXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToK
ICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVt
cGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAq
KmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0
ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAg
ICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicu
am9pbihzZWN0aW9ucykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQppbmRleCBhZDU2MTY1MTZiYjVkMjU4ZDdlZTQ2Zjc5YTdmZWY5N2NkYTZkNGEyLi5kOTllOWNj
N2U2NGRkNDA5YTk3MDI5MjM2ZWU2NTBlNGIzOGMyOGI0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzAsMTEgKzMwLDExIEBAIGltcG9ydCBzdHJpbmcK
IGltcG9ydCByZQogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
Ci1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBl
LCBGcmFtZXdvcmtzCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDVHlwZUNhdGVnb3J5
LCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUKLWZyb20gb2JqY19nZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMK
K2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuZ2VuZXJhdG9y
IGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgRW51
bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBv
cnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCitm
cm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykK
IApAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICclc0JhY2tlbmRE
aXNwYXRjaGVycy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRfZ2Vu
ZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9j
b21tYW5kc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkp
CiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaGVh
ZGVycyA9IFsKQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zID0g
W10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdz
KSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2lt
cGxlbWVudGF0aW9uX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRl
bmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9t
YWluLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVt
cGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rp
b25zKQogCkBAIC0xMTQsNyArMTE0LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGlmIGNvbW1hbmQu
cmV0dXJuX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQog
Ci0gICAgICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0ZXIobGFtYmRh
IHBhcmFtZXRlcjogbm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5p
c190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVycykKKyAgICAgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtw
YXJhbWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIG5v
dCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3Bv
aW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICB2YXJfbmFtZSA9
IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25h
bWUsIHZhcl9uYW1lKSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAg
ICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgo
c2VsZi5vYmpjX3ByZWZpeCgpKToKICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFz
c10pOycgJSAodmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQogCi0gICAgICAgICAgICBvcHRp
b25hbF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogcGFyYW1l
dGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5
cGUocGFyYW1ldGVyLnR5cGUpLCBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKQorICAgICAgICAg
ICAgb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVy
IGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFu
ZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUp
XQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRl
cnM6CiAgICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJf
dG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKICAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9o
ZWFkZXIucHkKaW5kZXggYTIzMmUyY2U0MzlhM2Q3NjNmYmZiOTRiOTE0YjZlN2RmZTQxYjcwYi4u
MDA0NDhiMGYwMmM4NDY0MDgyY2QzMjYwNDE2NTZmMDgzMWU3ZmU4OCAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19jb25maWd1cmF0aW9uX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVy
LnB5CkBAIC0yOSw5ICsyOSw5IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5nCiBmcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
cgotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1Rl
bXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2Vu
ZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1
cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0
aW9uLnB5CmluZGV4IDkxMGJjYmFiMTM1MGQwNzZlOTVlNTNkYzBhYjk4ZGM0N2IyYmNkMzQuLjk5
MzU4NzdhZWNlYzI1OGMyODFkMTFjYWYwYWNiYjc2Y2FiYWUxODIgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
Y29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25f
aW1wbGVtZW50YXRpb24ucHkKQEAgLTI5LDkgKzI5LDkgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9y
dCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBp
bXBvcnQgR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9y
Ci1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBs
YXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgor
ZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVt
cGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNjU0ZjliNGJmOGE0NDA2ZmY1
M2EwYjNkYjE3MGZkYTRkNDA2NzUxZC4uMGZlZmQ3YTZlZTI2MTdhMzcyMTdiMDE3ZWRhMzk0NGFm
YmJjMTQ3ZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpA
QCAtMjksMTAgKzI5LDEwIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5l
cmF0b3IKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gb2Jq
Y19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2Zy
b20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpD
R2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHJldHVy
biAnJXNFdmVudERpc3BhdGNoZXJzLm1tJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBk
ZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxm
LnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9n
ZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgc2Vjb25k
YXJ5X2hlYWRlcnMgPSBbCkBAIC02Miw3ICs2Miw3IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgc2Vj
dGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxl
bWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9ucywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1h
cChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucywgZG9tYWlu
cykpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBs
ZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAg
ICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKQEAgLTEwMCw3ICsxMDAsNyBAQCBj
bGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dl
bmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGNvbnN0IEZyb250ZW5kUm91dGVy
JiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsnKQogICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCiAKLSAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gZmls
dGVyKGxhbWJkYSBwYXJhbWV0ZXI6IG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNH
ZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnMpCisgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyA9
IFtwYXJhbWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzIGlmIG5v
dCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3Bv
aW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVx
dWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2Vu
ZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQpA
QCAtMTA4LDcgKzEwOCw3IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlf
Y2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Muc3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkp
OgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAodmFyX25hbWUsIG9iamNfYXJy
YXlfY2xhc3MpKQogCi0gICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZpbHRl
cihsYW1iZGEgcGFyYW1ldGVyOiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0
b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGV2ZW50LmV2ZW50
X3BhcmFtZXRlcnMpCisgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJh
bWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBl
KHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2lu
dGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRl
bnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQogICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQppbmRleCBhODM0M2U2ZTYzZWVk
NDliZGRlN2I1NzJhNWY3MTdmMjVkOGNkMWFjLi4wYTk5ZTJmNjhiYWE1NWNlYzA2M2MzMDViZWE0
ZDE1M2JiMzBhY2Q5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRl
ci5weQpAQCAtMjksMTAgKzI5LDEwIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5nCiBm
cm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlLCBQ
bGF0Zm9ybXMKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IsIGpvaW5f
dHlwZV9hbmRfbmFtZQotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9y
dCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51
bVR5cGUsIFBsYXRmb3JtcworZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0
b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTYwLDkgKzYwLDkgQEAgY2xhc3MgT2JqQ0hl
YWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgfQogCiAgICAgICAgIGRvbWFp
bnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICB0eXBlX2RvbWFpbnMgPSBm
aWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAg
ICAgICAgY29tbWFuZF9kb21haW5zID0gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1h
bmRzX2Zvcl9kb21haW4sIGRvbWFpbnMpCi0gICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIo
c2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAgICAg
IHR5cGVfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zv
cl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBjb21tYW5kX2RvbWFpbnMgPSBsaXN0KGZpbHRl
cihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAg
ICAgICAgZXZlbnRfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2
ZW50c19mb3JfZG9tYWluLCBkb21haW5zKSkKIAogICAgICAgICAjIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTM4MjIyPiBXZWIgSW5zcGVjdG9yOiBSZWR1Y2UgdW5uZWNlc3NhcnkgZW51
bXMvdHlwZXMgZ2VuZXJhdGVkIGluIE9iakMgUHJvdG9jb2wgSW50ZXJmYWNlcwogICAgICAgICAj
IEN1cnJlbnRseSB3ZSBnZW5lcmF0ZSBlbnVtcy90eXBlcyBmb3IgYWxsIHR5cGVzIGluIHRoZSB0
eXBlX2RvbWFpbnMuIEZvciB0aGUgYnVpbHQtaW4KQEAgLTcyLDE0ICs3MiwxNCBAQCBjbGFzcyBP
YmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucyA9IFtd
CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSGVhZGVyUHJlbHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFy
YXRpb25zLCB0eXBlX2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpv
aW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMs
IHR5cGVfZG9tYWlucykgaWYgX2ZdKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2VudW1fZm9yX3BsYXRmb3JtcygpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xu
Jy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bXMsIHR5cGVfZG9tYWlu
cykpKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFw
KHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bXMs
IHR5cGVfZG9tYWlucykgaWYgX2ZdKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9p
bihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlcywgdHlwZV9kb21haW5zKSBp
ZiBfZl0pKQogCiAgICAgICAgIGlmIHNlbGYuZ2V0X2dlbmVyYXRvcl9zZXR0aW5nKCdnZW5lcmF0
ZV9iYWNrZW5kJywgRmFsc2UpOgotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5q
b2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfY29tbWFuZF9wcm90b2NvbHMsIGNv
bW1hbmRfZG9tYWlucykpKSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9p
bihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMsIGV2ZW50
X2RvbWFpbnMpKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oW19m
IGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfY29tbWFuZF9wcm90b2NvbHMsIGNvbW1hbmRf
ZG9tYWlucykgaWYgX2ZdKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9p
bihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzLCBldmVu
dF9kb21haW5zKSBpZiBfZl0pKQogCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShP
YmpDVGVtcGxhdGVzLkhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUpKQogICAgICAgICBy
ZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCkBAIC0xNzEsOCArMTcxLDggQEAgY2xhc3MgT2Jq
Q0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7JykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpz
b25PYmplY3Q7JykKIAotICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBt
ZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykK
LSAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIu
aXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRf
bWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMg
aWYgbm90IG1lbWJlci5pc19vcHRpb25hbF0KKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IFtt
ZW1iZXIgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbWVtYmVyLmlz
X29wdGlvbmFsXQogICAgICAgICBpZiByZXF1aXJlZF9tZW1iZXJzOgogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJz
KGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQogICAgICAgICBmb3IgbWVt
YmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5CmluZGV4IGI2ZTRhZDVlOTE4YjMwZDQ3MGQ2
ZWQ5OWIxNjQyZTk2OTMyYjk0ZTMuLmJkNGQxZmMxMDc0YjAxZWVjMmY5NzZmODUzNDQ4OWQ1YzJk
MGFkNWQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50
ZXJuYWxfaGVhZGVyLnB5CkBAIC0yOSw5ICsyOSw5IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQg
c3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dl
bmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5l
cmF0b3IsIHVjZmlyc3QKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9y
Citmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1w
bGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKIApAQCAtNTUsMTIgKzU1LDEyIEBAIGNsYXNzIE9iakNJbnRlcm5hbEhlYWRlckdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNp
bXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAogICAgICAg
ICB9CiAKLSAgICAgICAgZXZlbnRfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0
ZV9ldmVudHNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpCisgICAgICAg
IGV2ZW50X2RvbWFpbnMgPSBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNf
Zm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQogCiAgICAgICAgIHNlY3Rp
b25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5HZW5lcmlj
SGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJh
dGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkp
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChz
ZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcywgZXZlbnRf
ZG9tYWlucykgaWYgX2ZdKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNU
ZW1wbGF0ZXMuR2VuZXJpY0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CmluZGV4IDg0Y2JkZGExNzczMTJjNmM2OTMz
M2U3YTBlZDFhNmFlNTRmZjljNGQuLjQ4MmU0ZWNjNWU3NmY1OWE2NzQwZTQzM2RmNWVmNjA4MGQy
YWZhNDkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQpAQCAtMjks
MTAgKzI5LDEwIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBt
b2RlbHMgaW1wb3J0IEVudW1UeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKLWZyb20gb2JqY19n
ZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2Zyb20g
LmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBl
LCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpD
R2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIApAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiAn
JXNUeXBlQ29udmVyc2lvbnMuaCcgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91
bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0
ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkp
CiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBoZWFkZXJzID0gWwpA
QCAtNzAsNyArNzAsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJH
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShP
YmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclN0YW5kYXJkKS5zdWJzdGl0dXRlKE5v
bmUpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJz
aW9uX2Zvcl9wbGF0Zm9ybXMoKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9n
ZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zLCBkb21haW5zKSkKKyAgICAgICAgc2Vj
dGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9mdW5j
dGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNU
ZW1wbGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwg
KipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9u
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5Cmlu
ZGV4IDQyOTNlM2JkODRjZjkzNzkzZjcxNWU4MmViMTZhMjU1NzMzZWE5ZjguLjY5NGY5ODQ2MWE5
ODhkZDA0M2E2N2QwMTVkYmIxYWU3MTdmNjAyMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xf
dHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5
cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTI4LDEwICsyOCwxMCBAQCBpbXBv
cnQgbG9nZ2luZwogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAK
LWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVt
VHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgUHJpbWl0aXZlVHlwZSwg
RnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJv
bSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20g
Lm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIFByaW1pdGl2ZVR5cGUsIEZyYW1ld29ya3MKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9y
dCBPYmpDR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xU
eXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAg
ICAgICAgcmV0dXJuICclc1R5cGVDb252ZXJzaW9ucy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUo
KQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBm
aWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxm
LnNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAg
ICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5
CmluZGV4IDBiYTU1ZWU4ZDQxOGFiZDU3YmIxMTlmMGRjM2Y0NDQ3MDRjOGQxMTcuLmJkNWYxMWU1
NGM2MWRkYjVjZWRiZjk4MGNkYWRiZmM5Y2YxMmRjOTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbi5weQpAQCAtMjksMTAgKzI5LDEwIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQg
c3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVu
dW1UeXBlLCBGcmFtZXdvcmtzCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDVHlwZUNh
dGVnb3J5LCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RU
eXBlLCBFbnVtVHlwZSwgRnJhbWV3b3JrcworZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9i
akNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNz
IE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiAnJXNUeXBlcy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAg
ICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIo
c2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3Vs
ZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNv
bmRhcnlfaGVhZGVycyA9IFsKQEAgLTc1LDcgKzc1LDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlw
ZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgc2VjdGlv
bnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkp
CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVu
dGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zLCBk
b21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuZ2VuZXJhdGVf
dHlwZV9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rp
b25zKQogCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2Rf
Zm9yX3BheWxvYWQoZG9tYWluLCBkZWNsYXJhdGlvbikpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3Byb3RvY29sX29iamVjdChkb21haW4s
IGRlY2xhcmF0aW9uKSkKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEg
bWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMp
CisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzIGlmIG5vdCBtZW1iZXIuaXNfb3B0aW9uYWxdCiAgICAgICAgIGlm
IHJlcXVpcmVkX21lbWJlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVk
X21lbWJlcnMoZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycykpCkBAIC0xNjcs
NyArMTY3LDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiBu
aWw7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIHJlcXVpcmVkX3BvaW50
ZXJfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBPYmpDR2VuZXJhdG9yLmlzX3R5cGVf
b2JqY19wb2ludGVyX3R5cGUobWVtYmVyLnR5cGUpLCByZXF1aXJlZF9tZW1iZXJzKQorICAgICAg
ICByZXF1aXJlZF9wb2ludGVyX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gcmVxdWly
ZWRfbWVtYmVycyBpZiBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUobWVt
YmVyLnR5cGUpXQogICAgICAgICBpZiByZXF1aXJlZF9wb2ludGVyX21lbWJlcnM6CiAgICAgICAg
ICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX3BvaW50ZXJfbWVtYmVyczoKICAgICAgICAgICAg
ICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZp
ZXIobWVtYmVyLm1lbWJlcl9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CmluZGV4IGVlZDIx
OGRjMmYwNTNhNjc3NTFjMmM5MzU2MzMxOTVkMzhkYmY4NWIuLmY1Y2Q4MTlhN2FmMjIyY2IwYjRh
YjFiMDFkYWMzOTQ4Mzk3Njk3YTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKQEAgLTI5LDgg
KzI5LDggQEAgaW1wb3J0IG9zLnBhdGgKIGltcG9ydCByZQogZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCiAKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVj
dFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQbGF0
Zm9ybXMKK2Zyb20gLmdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRl
cyBhcyBUZW1wbGF0ZXMKK2Zyb20gLm1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0
VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MsIFBsYXRm
b3JtcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtMTQwLDcgKzE0
MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKIAogICAgICMgVGhlc2UgbWV0aG9kcyBhcmUgb3ZlcnJp
ZGRlbiBieSBzdWJjbGFzc2VzLgogICAgIGRlZiBub25fc3VwcGxlbWVudGFsX2RvbWFpbnMoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbm90IGRvbWFpbi5pc19z
dXBwbGVtZW50YWwsIHNlbGYubW9kZWwoKS5kb21haW5zKQorICAgICAgICByZXR1cm4gW2RvbWFp
biBmb3IgZG9tYWluIGluIHNlbGYubW9kZWwoKS5kb21haW5zIGlmIG5vdCBkb21haW4uaXNfc3Vw
cGxlbWVudGFsXQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CiAgICAgICAg
IHJldHVybiBzZWxmLm5vbl9zdXBwbGVtZW50YWxfZG9tYWlucygpCkBAIC0xNzYsNyArMTc2LDcg
QEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBmaWVsZHMgPSBzZXQoX1RZUEVTX1dJVEhfT1BF
Tl9GSUVMRFMuZ2V0KHR5cGVfZGVjbGFyYXRpb24udHlwZS5xdWFsaWZpZWRfbmFtZSgpLCBbXSkp
CiAgICAgICAgIGlmIG5vdCBmaWVsZHM6CiAgICAgICAgICAgICByZXR1cm4gdHlwZV9kZWNsYXJh
dGlvbi50eXBlX21lbWJlcnMKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgbWVtYmVyOiBt
ZW1iZXIubWVtYmVyX25hbWUgaW4gZmllbGRzLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cykKKyAgICAgICAgcmV0dXJuIFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycyBpZiBtZW1iZXIubWVtYmVyX25hbWUgaW4gZmllbGRzXQogCiAgICAgZGVm
IHR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhzZWxmLCBfdHlwZSk6CiAgICAgICAgIGlmIG5v
dCBoYXNhdHRyKHNlbGYsICJfdHlwZXNfbmVlZGluZ19zaGFwZV9hc3NlcnRpb25zIik6CkBAIC0x
ODksNyArMTg5LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICMgc2V0IG9mIHR5cGVzIHdpbGwg
bm90IGJlIGF1dG9tYXRpY2FsbHkgcmVnZW5lcmF0ZWQgb24gc3Vic2VxdWVudCBjYWxscyB0bwog
ICAgICMgR2VuZXJhdG9yLnR5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucygpLgogICAgIGRl
ZiBjYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoc2VsZiwgZG9tYWlu
cyk6Ci0gICAgICAgIGRvbWFpbl9uYW1lcyA9IG1hcChsYW1iZGEgZG9tYWluOiBkb21haW4uZG9t
YWluX25hbWUsIGRvbWFpbnMpCisgICAgICAgIGRvbWFpbl9uYW1lcyA9IFtkb21haW4uZG9tYWlu
X25hbWUgZm9yIGRvbWFpbiBpbiBkb21haW5zXQogICAgICAgICBsb2cuZGVidWcoIj4gQ2FsY3Vs
YXRpbmcgdHlwZXMgdGhhdCBuZWVkIHNoYXBlIGFzc2VydGlvbnMgKGVsaWdpYmxlIGRvbWFpbnM6
ICVzKSIgJSAiLCAiLmpvaW4oZG9tYWluX25hbWVzKSkKIAogICAgICAgICAjIE11dGF0ZXMgdGhl
IHBhc3NlZC1pbiBzZXQ7IHRoaXMgc2ltcGxpZmllcyBjaGVja3MgdG8gcHJldmVudCBpbmZpbml0
ZSByZWN1cnNpb24uCkBAIC0yNDUsNyArMjQ1LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAg
ICBmb3IgX3R5cGUgaW4gYWxsX3R5cGVzOgogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
X3R5cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAg
bWFwKHNlbGYuX2Fzc2lnbl9lbmNvZGluZ19mb3JfZW51bV92YWx1ZSwgX3R5cGUuZW51bV92YWx1
ZXMoKSkKKyAgICAgICAgICAgIGxpc3QobWFwKHNlbGYuX2Fzc2lnbl9lbmNvZGluZ19mb3JfZW51
bV92YWx1ZSwgX3R5cGUuZW51bV92YWx1ZXMoKSkpCiAKICAgICBkZWYgX2Fzc2lnbl9lbmNvZGlu
Z19mb3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKICAgICAgICAgaWYgZW51bV92YWx1
ZSBpbiBzZWxmLl9lbnVtX3ZhbHVlX2VuY29kaW5nczoKQEAgLTI3OSw3ICsyNzksNyBAQCBjbGFz
cyBHZW5lcmF0b3I6CiAgICAgICAgICAgICByZXR1cm4gX0FMV0FZU19TUEVDSUFMQ0FTRURfRU5V
TV9WQUxVRV9MT09LVVBfVEFCTEVbbWF0Y2guZ3JvdXAoMSkudXBwZXIoKV0KIAogICAgICAgICAj
IFNwbGl0IG9uIGh5cGhlbiwgaW50cm9kdWNlIGNhbWVsY2FzZSwgYW5kIGZvcmNlIHVwcGVyY2Fz
aW5nIG9mIGFjcm9ueW1zLgotICAgICAgICBzdWJ3b3JkcyA9IG1hcCh1Y2ZpcnN0LCBfRU5VTV9J
REVOVElGSUVSX1JFTkFNRV9NQVAuZ2V0KGVudW1fdmFsdWUsIGVudW1fdmFsdWUpLnNwbGl0KCct
JykpCisgICAgICAgIHN1YndvcmRzID0gbGlzdChtYXAodWNmaXJzdCwgX0VOVU1fSURFTlRJRklF
Ul9SRU5BTUVfTUFQLmdldChlbnVtX3ZhbHVlLCBlbnVtX3ZhbHVlKS5zcGxpdCgnLScpKSkKICAg
ICAgICAgcmV0dXJuIHJlLnN1YihyZS5jb21waWxlKHJlZ2V4LCByZS5JR05PUkVDQVNFKSwgcmVw
bGFjZUNhbGxiYWNrLCAiIi5qb2luKHN1YndvcmRzKSkKIAogICAgIEBzdGF0aWNtZXRob2QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL21vZGVscy5weQppbmRleCBjYTkxZDcxYzdjNWNjMzlhMGYxYzcwMzcwOTcxODkzZTAzZWM5
ODdhLi5kMDliMjQyZjhiZmQxZjdkYmE4NDU1NmI3OTNiODQ3OGVkYzgwNTdjIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
bW9kZWxzLnB5CkBAIC0zNSw3ICszNSw3IEBAIGRlZiB1Y2ZpcnN0KHN0cik6CiAKIAogZGVmIGZp
bmRfZHVwbGljYXRlcyhsKToKLSAgICByZXR1cm4gW2tleSBmb3Iga2V5LCBjb3VudCBpbiBjb2xs
ZWN0aW9ucy5Db3VudGVyKGwpLml0ZW1zKCkgaWYgY291bnQgPiAxXQorICAgIHJldHVybiBba2V5
IGZvciBrZXksIGNvdW50IGluIGxpc3QoY29sbGVjdGlvbnMuQ291bnRlcihsKS5pdGVtcygpKSBp
ZiBjb3VudCA+IDFdCiAKIAogX0ZSQU1FV09SS19DT05GSUdfTUFQID0gewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5l
cmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvci5weQppbmRleCBlNTJmMzE1NDRjMTFmYjc2YzRiYWFjNjdlN2JhOTI3
MjI0MGNmY2Q3Li5lNGNlMDFmODFhYjNiNGZlOTM1Zjg2NzEyOWNhNTBiZGZmYjZhMzNkIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9v
YmpjX2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtMjQsOCArMjQsOCBAQAogIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBsb2dnaW5nCi1mcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0
aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZy
YW1ld29ya3MKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9t
IC5tb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51
bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQogCkBAIC01MCw3ICs1MCw3IEBAIF9PQkpDX0lERU5USUZJRVJfUkVOQU1FX01B
UCA9IHsKICAgICAnaWQnOiAnaWRlbnRpZmllcicsICAjIFBhZ2UuRnJhbWUuaWQsIFJ1bnRpbWUu
RXhlY3V0aW9uQ29udGV4dERlc2NyaXB0aW9uLmlkLCBEZWJ1Z2dlci5CcmVha3BvaW50QWN0aW9u
LmlkCiB9CiAKLV9PQkpDX0lERU5USUZJRVJfUkVWRVJTRV9SRU5BTUVfTUFQID0gZGljdCgodiwg
aykgZm9yIGssIHYgaW4gX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQLml0ZXJpdGVtcygpKQor
X09CSkNfSURFTlRJRklFUl9SRVZFUlNFX1JFTkFNRV9NQVAgPSBkaWN0KCh2LCBrKSBmb3Igaywg
diBpbiBfT0JKQ19JREVOVElGSUVSX1JFTkFNRV9NQVAuaXRlbXMoKSkKIAogCiBjbGFzcyBPYmpD
VHlwZUNhdGVnb3J5OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2Vu
ZXJhdGVXYXNtLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtLnB5
CmluZGV4IDE2ODg3ZWNmOTVlZmRkZjZiZjU0ZmViNWI3ZTc4NTU4ZWQyYTM3YTMuLmYwYjZiNThi
ZTQ4MWQxOTVmODZhNzU3NjkzYjNkNTM5NTYxYzE3NmEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbS5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9nZW5lcmF0ZVdhc20ucHkKQEAgLTcxLDcgKzcxLDcgQEAgY2xhc3MgV2FzbToKICAg
ICAgICAgIyBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBweXRob24gaXMgZHVtYiBhbmQgd29u
J3QgbGV0IG1lIHVzZSBzZWxmIGluIHRoZSBsYW1iZGEsIHdoaWNoIGlzIHJpZGljdWxvdXMuCiAg
ICAgICAgIGlmIHJldCA9PSBOb25lOgogICAgICAgICAgICAgcmV0ID0gbGFtYmRhIG9wOiB7Im5h
bWUiOiBvcCwgIm9wY29kZSI6IHNlbGYub3Bjb2Rlc1tvcF19Ci0gICAgICAgIGZvciBvcCBpbiBz
ZWxmLm9wY29kZXMuaXRlcmtleXMoKToKKyAgICAgICAgZm9yIG9wIGluIHNlbGYub3Bjb2Rlcy5r
ZXlzKCk6CiAgICAgICAgICAgICBpZiBmaWx0ZXIoc2VsZi5vcGNvZGVzW29wXSk6CiAgICAgICAg
ICAgICAgICAgeWllbGQgcmV0KG9wKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9nZW5lcmF0ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvZ2VuZXJhdGVZYXJyQ2Fub25pY2FsaXplVW5pY29kZQppbmRleCBhMTAzYmNk
ZjE2ZDIxMzE2OTMyNDM3ZjIwYWQzNDFkOGUwOGRhMDI0Li4wNTJiOWQxMTI1MDhiMjNiN2UxMTk0
NmQxOWEzMDc0OTk1NzhmNjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9nZW5lcmF0ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUKQEAgLTMxLDcgKzMxLDYg
QEAgaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cwotZnJv
bSBzZXRzIGltcG9ydCBTZXQKIAogaGVhZGVyID0gIiIiLyoKICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTc4LDExICs3NywyMSBAQCBkZWYg
b3Blbk9yRXhpdChwYXRoLCBtb2RlKToKICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFt
ZShwYXRoKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkaXJuYW1lKToKICAgICAgICAg
ICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCi0gICAgICAgIHJldHVybiBvcGVuKHBhdGgsIG1vZGUp
CisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMiBvciBtb2RlID09ICJ3YiIg
b3IgbW9kZSA9PSAicmIiOgorICAgICAgICAgICAgcmV0dXJuIG9wZW4ocGF0aCwgbW9kZSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvcGVuKHBhdGgsIG1vZGUsIGVuY29kaW5n
ID0gIlVURi04IikKICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgotICAgICAgICBwcmludCAiSS9P
IGVycm9yIG9wZW5pbmcgezB9LCAoezF9KTogezJ9Ii5mb3JtYXQocGF0aCwgZS5lcnJubywgZS5z
dHJlcnJvcikKKyAgICAgICAgcHJpbnQoIkkvTyBlcnJvciBvcGVuaW5nIHswfSwgKHsxfSk6IHsy
fSIuZm9ybWF0KHBhdGgsIGUuZXJybm8sIGUuc3RyZXJyb3IpKQogICAgICAgICBleGl0KDEpCiAK
K2RlZiBkb3dyaXRlKGZpbGUsIHN0cik6CisgICAgaWYgc3lzLnZlcnNpb25faW5mby5tYWpvciA9
PSAyOgorICAgICAgICBmaWxlLndyaXRlKHN0cikKKyAgICBlbHNlOgorICAgICAgICBmaWxlLndy
aXRlKGJ5dGVzKHN0ciwgInV0Zi04IikpCisKKwogY2xhc3MgQ2Fub25pY2FsaXplOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5jYW5vbmljYWxHcm91cHMgPSB7fTsKQEAg
LTkzLDcgKzEwMiw3IEBAIGNsYXNzIENhbm9uaWNhbGl6ZToKICAgICAgICAgc2VsZi5jYW5vbmlj
YWxHcm91cHNbbWFwcGluZ10uYXBwZW5kKGNvZGUpCiAgICAgICAgIAogICAgIGRlZiByZWFkQ2Fz
ZUZvbGRpbmcoc2VsZiwgZmlsZSk6Ci0gICAgICAgIGNvZGVzU2VlbiA9IFNldCgpCisgICAgICAg
IGNvZGVzU2VlbiA9IHNldCgpCiAgICAgICAgIGZvciBsaW5lIGluIGZpbGU6CiAgICAgICAgICAg
ICBsaW5lID0gbGluZS5zcGxpdCgnIycsIDEpWzBdCiAgICAgICAgICAgICBsaW5lID0gbGluZS5y
c3RyaXAoKQpAQCAtMTU3LDI2ICsxNjYsMjYgQEAgY2xhc3MgQ2Fub25pY2FsaXplOgogICAgICAg
ICAgICAgc2V0ID0gY2hhcmFjdGVyU2V0c1tpXQogICAgICAgICAgICAgZm9yIGNoIGluIHNldDoK
ICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gY2hhcmFjdGVycyArICIweHtjaGFyYWN0ZXI6
MDR4fSwgIi5mb3JtYXQoY2hhcmFjdGVyPWNoKQotICAgICAgICAgICAgZmlsZS53cml0ZSgiY29u
c3QgVUNoYXIzMiB1bmljb2RlQ2hhcmFjdGVyU2V0e2luZGV4OmR9W10gPSB7eyB7Y2hhcmFjdGVy
c30wIH19O1xuIi5mb3JtYXQoaW5kZXg9aSwgY2hhcmFjdGVycz1jaGFyYWN0ZXJzKSkKKyAgICAg
ICAgICAgIGRvd3JpdGUoZmlsZSwgImNvbnN0IFVDaGFyMzIgdW5pY29kZUNoYXJhY3RlclNldHtp
bmRleDpkfVtdID0ge3sge2NoYXJhY3RlcnN9MCB9fTtcbiIuZm9ybWF0KGluZGV4PWksIGNoYXJh
Y3RlcnM9Y2hhcmFjdGVycykpCiAKLSAgICAgICAgZmlsZS53cml0ZSgiXG4iKQotICAgICAgICBm
aWxlLndyaXRlKCJzdGF0aWMgY29uc3Qgc2l6ZV90IFVOSUNPREVfQ0FOT05JQ0FMSVpBVElPTl9T
RVRTID0ge3NldENvdW50OmR9O1xuIi5mb3JtYXQoc2V0Q291bnQ9bGVuKGNoYXJhY3RlclNldHMp
KSkKLSAgICAgICAgZmlsZS53cml0ZSgiY29uc3QgVUNoYXIzMiogY29uc3QgdW5pY29kZUNoYXJh
Y3RlclNldEluZm9bVU5JQ09ERV9DQU5PTklDQUxJWkFUSU9OX1NFVFNdID0ge1xuIikKKyAgICAg
ICAgZG93cml0ZShmaWxlLCAiXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJzdGF0aWMgY29u
c3Qgc2l6ZV90IFVOSUNPREVfQ0FOT05JQ0FMSVpBVElPTl9TRVRTID0ge3NldENvdW50OmR9O1xu
Ii5mb3JtYXQoc2V0Q291bnQ9bGVuKGNoYXJhY3RlclNldHMpKSkKKyAgICAgICAgZG93cml0ZShm
aWxlLCAiY29uc3QgVUNoYXIzMiogY29uc3QgdW5pY29kZUNoYXJhY3RlclNldEluZm9bVU5JQ09E
RV9DQU5PTklDQUxJWkFUSU9OX1NFVFNdID0ge1xuIikKIAogICAgICAgICBmb3IgaSBpbiByYW5n
ZShsZW4oY2hhcmFjdGVyU2V0cykpOgotICAgICAgICAgICAgZmlsZS53cml0ZSgiICAgIHVuaWNv
ZGVDaGFyYWN0ZXJTZXR7c2V0TnVtYmVyOmR9LFxuIi5mb3JtYXQoc2V0TnVtYmVyPWkpKQorICAg
ICAgICAgICAgZG93cml0ZShmaWxlLCAiICAgIHVuaWNvZGVDaGFyYWN0ZXJTZXR7c2V0TnVtYmVy
OmR9LFxuIi5mb3JtYXQoc2V0TnVtYmVyPWkpKQogCi0gICAgICAgIGZpbGUud3JpdGUoIn07XG4i
KQotICAgICAgICBmaWxlLndyaXRlKCJcbiIpCi0gICAgICAgIGZpbGUud3JpdGUoImNvbnN0IHNp
emVfdCBVTklDT0RFX0NBTk9OSUNBTElaQVRJT05fUkFOR0VTID0ge3JhbmdlQ291bnQ6ZH07XG4i
LmZvcm1hdChyYW5nZUNvdW50PWxlbihyYW5nZUluZm8pKSkKLSAgICAgICAgZmlsZS53cml0ZSgi
Y29uc3QgQ2Fub25pY2FsaXphdGlvblJhbmdlIHVuaWNvZGVSYW5nZUluZm9bVU5JQ09ERV9DQU5P
TklDQUxJWkFUSU9OX1JBTkdFU10gPSB7XG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJ9O1xu
IikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG4iKQorICAgICAgICBkb3dyaXRlKGZpbGUsICJj
b25zdCBzaXplX3QgVU5JQ09ERV9DQU5PTklDQUxJWkFUSU9OX1JBTkdFUyA9IHtyYW5nZUNvdW50
OmR9O1xuIi5mb3JtYXQocmFuZ2VDb3VudD1sZW4ocmFuZ2VJbmZvKSkpCisgICAgICAgIGRvd3Jp
dGUoZmlsZSwgImNvbnN0IENhbm9uaWNhbGl6YXRpb25SYW5nZSB1bmljb2RlUmFuZ2VJbmZvW1VO
SUNPREVfQ0FOT05JQ0FMSVpBVElPTl9SQU5HRVNdID0ge1xuIikKIAogICAgICAgICBmb3IgaW5m
byBpbiByYW5nZUluZm86CiAgICAgICAgICAgICB0eXBlQW5kVmFsdWUgPSBpbmZvWyJ0eXBlIl0u
c3BsaXQoIjoiKQotICAgICAgICAgICAgZmlsZS53cml0ZSgiICAgIHt7IDB4e2JlZ2luOjA0eH0s
IDB4e2VuZDowNHh9LCAweHt2YWx1ZTowNHh9LCB7dHlwZX0gfX0sXG4iLmZvcm1hdChiZWdpbj1p
bmZvWyJiZWdpbiJdLCBlbmQ9aW5mb1siZW5kIl0sIHZhbHVlPWludCh0eXBlQW5kVmFsdWVbMV0p
LCB0eXBlPXR5cGVBbmRWYWx1ZVswXSkpCisgICAgICAgICAgICBkb3dyaXRlKGZpbGUsICIgICAg
e3sgMHh7YmVnaW46MDR4fSwgMHh7ZW5kOjA0eH0sIDB4e3ZhbHVlOjA0eH0sIHt0eXBlfSB9fSxc
biIuZm9ybWF0KGJlZ2luPWluZm9bImJlZ2luIl0sIGVuZD1pbmZvWyJlbmQiXSwgdmFsdWU9aW50
KHR5cGVBbmRWYWx1ZVsxXSksIHR5cGU9dHlwZUFuZFZhbHVlWzBdKSkKIAotICAgICAgICBmaWxl
LndyaXRlKCJ9O1xuIikKLSAgICAgICAgZmlsZS53cml0ZSgiXG4iKQorICAgICAgICBkb3dyaXRl
KGZpbGUsICJ9O1xuIikKKyAgICAgICAgZG93cml0ZShmaWxlLCAiXG4iKQogCiAgICAgICAgIAog
aWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKQEAgLTE5NCw5ICsyMDMsOSBAQCBpZiBfX25hbWVf
XyA9PSAiX19tYWluX18iOgogICAgIGNhbm9uaWNhbGl6ZSA9IENhbm9uaWNhbGl6ZSgpCiAgICAg
Y2Fub25pY2FsaXplLnJlYWRDYXNlRm9sZGluZyhjYXNlRm9sZGluZ1R4dEZpbGUpCiAKLSAgICBj
YW5vbmljYWxpemVIRmlsZS53cml0ZShoZWFkZXIpOworICAgIGRvd3JpdGUoY2Fub25pY2FsaXpl
SEZpbGUsIGhlYWRlcikKICAgICBjYW5vbmljYWxpemUuY3JlYXRlVGFibGVzKGNhbm9uaWNhbGl6
ZUhGaWxlKQotICAgIGNhbm9uaWNhbGl6ZUhGaWxlLndyaXRlKGZvb3Rlcik7CisgICAgZG93cml0
ZShjYW5vbmljYWxpemVIRmlsZSwgZm9vdGVyKQogCiAgICAgY2FzZUZvbGRpbmdUeHRGaWxlLmNs
b3NlKCkKICAgICBjYW5vbmljYWxpemVIRmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGE5YzRhNWY0MzQ3MDQ2Y2RhY2ViYmY4YTFjYjM4MWEzZjUxNDg1NmQuLjMyZDRhZjY3MTE0
N2E5MDhkNWJiNzFjYmYyZDMzZjRhMmYxNmI5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0x
ODUwLDcgKzE4NTAsNyBAQCBzZXQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTCiApCiAKIHNldChC
VUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUwotICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2J1aWx0aW5zLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vd2tidWls
dGlucy5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVy
YXRvci5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX21vZGVs
LnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfdGVtcGxhdGVz
LnB5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NyZWF0ZS1o
dHRwLWhlYWRlci1uYW1lLXRhYmxlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
cmVhdGUtaHR0cC1oZWFkZXItbmFtZS10YWJsZQppbmRleCBlYTJiNzQzMzY0ODNiMDUwNjM4NzEz
ZmQ1MTczYTZiMDliOGQ2MDcwLi4wZGMxOWY2YmZmMzRjODliZmU4YzNkZWQyMGQ2ZTg4OWQxMTY3
Y2E1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NyZWF0ZS1o
dHRwLWhlYWRlci1uYW1lLXRhYmxlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3JlYXRlLWh0dHAtaGVhZGVyLW5hbWUtdGFibGUKQEAgLTQyLDcgKzQyLDcgQEAgaW5wdXRf
ZmlsZSA9IG9wZW4oaW5wdXRfcGF0aCkKIGh0dHBfaGVhZGVyX25hbWVfdG9faWQgPSB7IH0KIGh0
dHBfaGVhZGVyX25hbWVzID0gW10KIAotZm9yIGxpbmUgaW4gaW5wdXRfZmlsZS54cmVhZGxpbmVz
KCk6Citmb3IgbGluZSBpbiBpbnB1dF9maWxlOgogICAgIGh0dHBfaGVhZGVyX25hbWUgPSBsaW5l
LnN0cmlwKCkKICAgICBpZiBub3QgaHR0cF9oZWFkZXJfbmFtZSBvciBodHRwX2hlYWRlcl9uYW1l
WzoyXSA9PSAnLy8nOgogICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5w
bAppbmRleCBlYjMxMWM2ODRlMGFkZDBhMjMxNjA4ZDE1OWJhYjFlMjNlMjEyZmIzLi4wMGMzOGMx
ZjMxOWM4OTQzMWE3OTZlZTU1OWJlN2FiYjJkMDM2ZmU0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbAorKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291
cmNlcy5wbApAQCAtMTc2LDYgKzE3Niw4IEBAIG15ICRlc2xpbnRMaWNlbnNlID0gcmVhZExpY2Vu
c2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGVzbGludFBhdGgsICdMSUNFTlNFJykpCiBteSAk
dGhyZWVqc0xpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdGhy
ZWVqc1BhdGgsICdMSUNFTlNFJykpOwogbWFrZV9wYXRoKCRwcm90b2NvbERpciwgJHRhcmdldFJl
c291cmNlUGF0aCk7CiAKKyRweXRob24gPSAkRU5WeyJQWVRIT04ifSBpZiBkZWZpbmVkKCRFTlZ7
IlBZVEhPTiJ9KTsKKwogIyBDb3B5IG92ZXIgZHluYW1pY2FsbHkgbG9hZGVkIGZpbGVzIGZyb20g
b3RoZXIgZnJhbWV3b3JrcywgZXZlbiBpZiB3ZSBhcmVuJ3QgY29tYmluaW5nIHJlc291cmNlcy4K
IGNvcHkoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkRU5WeydKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hF
QURFUlNfRElSJ30sICdJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMnKSwgRmlsZTo6U3BlYy0+
Y2F0ZmlsZSgkcHJvdG9jb2xEaXIsICdJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMnKSkgb3Ig
ZGllICJDb3B5IG9mIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyBmYWlsZWQ6ICQhIjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdENvbW1vbi5jbWFrZSBiL1NvdXJjZS9jbWFr
ZS9XZWJLaXRDb21tb24uY21ha2UKaW5kZXggMzg0MzM3NGE4N2E5OGY4YWZiMDk3NWQ0ZmUxOTgx
MDIwYzIyNzE5Zi4uZDk5Zjc5ZTc4Y2I0MjFlYzVkNTI1Zjc0Zjk0NGFmZTk3ODE5NjQyZiAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdENvbW1vbi5jbWFrZQorKysgYi9Tb3VyY2UvY21h
a2UvV2ViS2l0Q29tbW9uLmNtYWtlCkBAIC0yMSw5ICsyMSw2IEBAIGlmIChOT1QgSEFTX1JVTl9X
RUJLSVRfQ09NTU9OKQogICAgIGZpbmRfcGFja2FnZShQZXJsTW9kdWxlcyBDT01QT05FTlRTIEpT
T046OlBQIFJFUVVJUkVEKQogCiAgICAgZmluZF9wYWNrYWdlKFB5dGhvbkludGVycCAyLjcuMCBS
RVFVSVJFRCkKLSAgICBpZiAoUFlUSE9OX1ZFUlNJT05fTUFKT1IgR1JFQVRFUiAyKQotICAgICAg
ICBtZXNzYWdlKEZBVEFMX0VSUk9SICJQeXRob24gMiBpcyByZXF1aXJlZCwgYnV0IFB5dGhvbiAk
e1BZVEhPTl9WRVJTSU9OX01BSk9SfSB3YXMgZm91bmQuIikKLSAgICBlbmRpZiAoKQogCiAgICAg
IyBXZSBjYW5ub3QgY2hlY2sgZm9yIFJVQllfRk9VTkQgYmVjYXVzZSBpdCBpcyBzZXQgb25seSB3
aGVuIHRoZSBmdWxsIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGFuZAogICAgICMgdGhlIG9ubHkgdGhp
bmcgd2UgbmVlZCBpcyB0aGUgaW50ZXJwcmV0ZXIuIFVubGlrZSBQeXRob24sIGNtYWtlIGRvZXMg
bm90IHByb3ZpZGUgYSBtYWNybwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmlu
ZGV4IDFmMmVhMmJhNjQ0NTFmNmY5NWMzZDdiZjc0Zjc4OTlmNTQxNzM3YWUuLjA1ZDMwZjczNmZm
ZGZmYzI0MDQwM2NiN2UyMzM1NjllMDQ5ZjkyNzMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysg
Yi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxOC0wOC0yNyAgTWlrZSBHb3JzZSAgPG1n
b3JzZUBzdXNlLmNvbT4KKworICAgICAgICBCdWlsZCB0b29scyBzaG91bGQgd29yayB3aGVuIHRo
ZSAvdXNyL2Jpbi9weXRob24gaXMgcHl0aG9uMworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2Njc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvV2ViS2l0Q29tbW9uLmNtYWtlOgor
CiAyMDE4LTA4LTI3ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCBidW1wIFdQRS9HVEsgdmVyc2lvbiBudW1iZXJzCg==
</data>
<flag name="review"
          id="365827"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
    <flag name="commit-queue"
          id="365828"
          type_id="3"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350121</attachid>
            <date>2018-09-19 08:56:30 -0700</date>
            <delta_ts>2018-09-20 19:17:31 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>python3.patch</filename>
            <type>text/plain</type>
            <size>98345</size>
            <attacher name="Mike Gorse">mgorse</attacher>
            
              <data encoding="base64">RnJvbSAwNGRiNTU3N2ZhYTkyNjNiMjFhNzI0NzkxODY5M2UxYTI4MjE3ODJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtlIEdvcnNlIDxtZ29yc2VAYWx1bS53cGkuZWR1PgpEYXRl
OiBXZWQsIDE5IFNlcCAyMDE4IDEwOjM2OjQ5IC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gU3VwcG9y
dCBidWlsZGluZyBvbiBweXRob24gMyAod2Via2l0IzE1NjY3NCkKCi0tLQogQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsrCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgfCAxMDkgKysrKysrKysrKysrKysrKysr
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9jc3NtaW4ucHkgICAgICAgfCAgIDMgKwog
Li4uL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgICAgICAgICAgIHwgIDEzICsrLQog
Li4uL2dlbmVyYXRlSW50bENhbm9uaWNhbGl6ZUxhbmd1YWdlLnB5ICAgICAgIHwgICAyICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9qc21pbi5weSAgICAgICAgfCAgMTkgKy0tCiAu
Li4vU2NyaXB0cy9tYWtlLWpzLWZpbGUtYXJyYXlzLnB5ICAgICAgICAgICAgfCAgMTAgKy0KIC4u
Li9TY3JpcHRzL3drYnVpbHRpbnMvX19pbml0X18ucHkgICAgICAgICAgICB8ICAgMiArLQogLi4u
L2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weSAgICAgIHwgICAyICstCiAuLi5s
dGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgfCAgIDIgKy0KIC4uLm5l
cmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSB8ICAgMiArLQogLi4uL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19tb2RlbC5weSAgICAgIHwgICA3ICstCiAuLi4vZGlz
YXNzZW1ibGVyL3VkaXM4Ni91ZF9vcGNvZGUucHkgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0ZS1ieXRlY29kZS1maWxlcyB8ICAxMCArLQogLi4uL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkgICAgIHwgIDQ0ICsrKy0tLS0KIC4uLi9z
Y3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weSAgICAgICAgICB8ICAgNCArLQogLi4uY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IHwgICA2ICstCiAuLi4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgfCAgMTYgKy0tCiAuLi5lX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgfCAgMTIgKy0KIC4uLmdlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSB8ICAxMiArLQogLi4uX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IHwgIDEyICstCiAuLi4vZ2VuZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSAgICAgfCAgNDQgKysrLS0tLQogLi4uZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IHwgIDI4ICsrLS0tCiAuLi4v
Y29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5ICAgfCAgMTQgKy0tCiAuLi5n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgfCAgMTQgKy0tCiAuLi5f
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgfCAgMTggKy0tCiAuLi4v
Z2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weSAgICAgfCAgIDYgKy0KIC4uLmVy
YXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSB8ICAgNiArLQogLi4ub2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IHwgIDE2ICstLQogLi4uL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weSAgIHwgIDI4ICsrLS0tCiAuLi4v
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSAgfCAgMTAgKy0KIC4uLmVf
b2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weSB8ICAxMiArLQogLi4ucm90
b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5IHwgIDEwICstCiAuLi5yYXRl
X29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgfCAgMTYgKy0tCiAuLi4vaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgICAgfCAgMTQgKy0tCiAuLi4vaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgICAgICAgfCAgIDIgKy0KIC4uLi9zY3Jp
cHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkgICAgICAgICB8ICAgNiArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtLnB5ICAgIHwgICAyICstCiAuLi4veWFyci9n
ZW5lcmF0ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlICAgICAgfCAgMTEgKy0KIC4uLi95YXJyL2dl
bmVyYXRlWWFyclVuaWNvZGVQcm9wZXJ0eVRhYmxlcy5weSB8ICA3MCArKysrKy0tLS0tLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvaGFzaGVyLnB5ICAgICAgICAgIHwgICAyICstCiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgfCAgMTEgKysKIC4uLi9u
ZXR3b3JrL2NyZWF0ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlICAgICB8ICAgMiArLQogU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyAgICAgICAgICAgICAgIHwgIDEwICsrCiAuLi4vU2Ny
aXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbCAgfCAgIDIgKwogU291cmNlL2Nt
YWtlL1dlYktpdENvbW1vbi5jbWFrZSAgICAgICAgICAgICAgIHwgICAzIC0KIDQ2IGZpbGVzIGNo
YW5nZWQsIDQwNyBpbnNlcnRpb25zKCspLCAyNTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
Q2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDhkYzA3Yjc5NDJhLi5kNzNjZDhiMjIxNSAxMDA2
NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE4
LTA5LTE5ICBNaWtlIEdvcnNlICA8bWdvcnNlQHN1c2UuY29tPgorCisgICAgICAgIEJ1aWxkIHRv
b2xzIHNob3VsZCB3b3JrIHdoZW4gdGhlIC91c3IvYmluL3B5dGhvbiBpcyBweXRob24zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFr
ZS9XZWJLaXRDb21tb24uY21ha2U6IEFsbG93IHB5dGhvbiAzLgorCiAyMDE4LTA5LTEyICBEYW4g
QmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlZCBzdm46aWdub3Jl
IGFmdGVyIHIyMzUzODEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4NmEwM2E1MjQ3OC4u
MjY1NzUyMDBjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAor
MjAxOC0wOS0xOSAgTWlrZSBHb3JzZSAgPG1nb3JzZUBzdXNlLmNvbT4KKworICAgICAgICBCdWls
ZCB0b29scyBzaG91bGQgd29yayB3aGVuIHRoZSAvdXNyL2Jpbi9weXRob24gaXMgcHl0aG9uMwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2Njc0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L2Nzc21pbi5weToKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ogor
ICAgICAgICAoZG9vcGVuKToKKyAgICAgICAgKGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9idWlsdGlu
c19maWxlcyk6CisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5vbmljYWxpemVMYW5n
dWFnZS5weToKKyAgICAgICAgKiBTY3JpcHRzL2pzbWluLnB5OgorICAgICAgICAoSmF2YXNjcmlw
dE1pbmlmeS5taW5pZnkud3JpdGUpOgorICAgICAgICAoSmF2YXNjcmlwdE1pbmlmeSk6CisgICAg
ICAgIChKYXZhc2NyaXB0TWluaWZ5Lm1pbmlmeSk6CisgICAgICAgICogU2NyaXB0cy9tYWtlLWpz
LWZpbGUtYXJyYXlzLnB5OgorICAgICAgICAoY2h1bmspOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogU2NyaXB0cy93a2J1aWx0aW5zL19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHk6CisgICAgICAg
IChnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9nbG9iYWxfcHJpdmF0ZV9jb2RlX25hbWVfbWFjcm8pOgor
ICAgICAgICAqIFNjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9oZWFkZXIucHk6CisgICAgICAgIChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFk
ZXJHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAqIFNjcmlwdHMvd2tidWlsdGlucy9idWls
dGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5p
dF9fKToKKyAgICAgICAgKiBTY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHk6Cisg
ICAgICAgIChCdWlsdGluRnVuY3Rpb24uX19sdF9fKToKKyAgICAgICAgKEJ1aWx0aW5zQ29sbGVj
dGlvbi5jb3B5cmlnaHRzKToKKyAgICAgICAgKEJ1aWx0aW5zQ29sbGVjdGlvbi5fcGFyc2VfZnVu
Y3Rpb25zKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvdWRpczg2L3VkX29wY29kZS5weToKKyAg
ICAgICAgKFVkT3Bjb2RlVGFibGVzLnBwcmludC5wcmludFdhbGspOgorICAgICAgICAqIGdlbmVy
YXRlLWJ5dGVjb2RlLWZpbGVzOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
X19pbml0X18ucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2Vu
ZXJhdG9yLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQ3Bw
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAg
ICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6Cisg
ICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAg
ICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weToKKyAgICAgICAg
KENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAg
ICAgKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2ZvcndhcmRfZGVj
bGFyYXRpb25zKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAg
ICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVt
X2NvbnZlcnNpb25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlw
ZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nX2FuZF9jb252
ZXJzaW9uX21ldGhvZHMpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKToKKyAgICAgICAgKENwcFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2Rv
bWFpbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHk6
CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9t
YWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUpOgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2RvbWFp
bik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpD
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRl
ci5weToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAg
ICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3R5cGVfaW50ZXJmYWNlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxf
aGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ1By
b3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUp
OgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yLmdl
bmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHk6Cisg
ICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAg
ICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2luaXRf
bWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvci5weToKKyAgICAgICAgKEdlbmVyYXRvci5ub25fc3VwcGxlbWVu
dGFsX2RvbWFpbnMpOgorICAgICAgICAoR2VuZXJhdG9yLm9wZW5fZmllbGRzKToKKyAgICAgICAg
KEdlbmVyYXRvci5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMpOgor
ICAgICAgICAoR2VuZXJhdG9yLl90cmF2ZXJzZV9hbmRfYXNzaWduX2VudW1fdmFsdWVzKToKKyAg
ICAgICAgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKToKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weToKKyAgICAgICAgKGZpbmRfZHVw
bGljYXRlcyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVy
YXRvci5weToKKyAgICAgICAgKiB3YXNtL2dlbmVyYXRlV2FzbS5weToKKyAgICAgICAgKG9wY29k
ZUl0ZXJhdG9yKToKKyAgICAgICAgKiB5YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVuaWNv
ZGU6CisgICAgICAgICogeWFyci9nZW5lcmF0ZVlhcnJVbmljb2RlUHJvcGVydHlUYWJsZXMucHk6
CisgICAgICAgICogeWFyci9oYXNoZXIucHk6CisgICAgICAgIChzdHJpbmdIYXNoKToKKwogMjAx
OC0wOS0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5zdXJl
IHRoYXQgRm9ySW5Db250ZXh0cyBhcmUgaW52YWxpZGF0ZWQgaWYgdGhlaXIgbG9vcCBsb2NhbCBp
cyBvdmVyLXdyaXR0ZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy9jc3NtaW4ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9jc3NtaW4ucHkKaW5k
ZXggYzM0Y2QwODFiOTQuLmM0YzhmMjlhZjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9jc3NtaW4ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvY3NzbWluLnB5CkBAIC00Niw0ICs0Niw3IEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6
CiAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAzIGFuZCBzeXMuc3RkaW4uZW5jb2Rpbmcg
IT0gJ1VURi04JzoKICAgICAgICAgaW1wb3J0IGlvCiAgICAgICAgIHN5cy5zdGRpbiA9IGlvLlRl
eHRJT1dyYXBwZXIoc3lzLnN0ZGluLmJ1ZmZlciwgZW5jb2Rpbmc9J1VURi04JykKKyAgICBpZiBz
eXMudmVyc2lvbl9pbmZvWzBdID09IDMgYW5kIHN5cy5zdGRvdXQuZW5jb2RpbmcgIT0gJ1VURi04
JzoKKyAgICAgICAgaW1wb3J0IGlvCisgICAgICAgIHN5cy5zdGRvdXQgPSBpby5UZXh0SU9XcmFw
cGVyKHN5cy5zdGRvdXQuYnVmZmVyLCBlbmNvZGluZz0nVVRGLTgnKQogICAgIHN5cy5zdGRvdXQu
d3JpdGUoY3NzbWluaWZ5KHN5cy5zdGRpbi5yZWFkKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQppbmRleCA0OGE5YmIw
NDljMS4uMGUwMDM2ODc5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CkBAIC0zMSw2ICszMSw3IEBAIGltcG9ydCBm
bm1hdGNoCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgb3MKK2ltcG9y
dCBzeXMKIAogbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVz
c2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQpAQCAtNDYsNiArNDcsMTIgQEAgZGVmIGNvbmNhdGVuYXRlZF9vdXRwdXRfZmlsZW5h
bWUoYnVpbHRpbnNfZmlsZXMsIGZyYW1ld29ya19uYW1lLCBnZW5lcmF0ZV9vbmx5X3cKICAgICBy
ZXR1cm4gb3MucGF0aC5iYXNlbmFtZShidWlsdGluc19maWxlc1swXSkgKyAnLXJlc3VsdCcKIAog
CitkZWYgZG9vcGVuKGZpbGUsIG1vZGUpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3Ig
PT0gMjoKKyAgICAgICAgcmV0dXJuIG9wZW4oZmlsZSwgbW9kZSkKKyAgICBlbHNlOgorICAgICAg
ICByZXR1cm4gb3BlbihmaWxlLCBtb2RlLCBlbmNvZGluZz0iVVRGLTgiKQorCiBkZWYgZ2VuZXJh
dGVfYmluZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKGJ1aWx0aW5zX2ZpbGVzPVtdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0aD1Ob25lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9vdXRwdXQ9
RmFsc2UsCkBAIC01OSw3ICs2Niw3IEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19mb3JfYnVpbHRp
bnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10sCiAgICAgbW9kZWwgPSBCdWlsdGluc0NvbGxlY3Rp
b24oZnJhbWV3b3JrX25hbWU9ZnJhbWV3b3JrX25hbWUpCiAKICAgICBmb3IgZmlsZXBhdGggaW4g
YnVpbHRpbnNfZmlsZXM6Ci0gICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInIiKSBhcyBmaWxl
OgorICAgICAgICB3aXRoIGRvb3BlbihmaWxlcGF0aCwgInIiKSBhcyBmaWxlOgogICAgICAgICAg
ICAgZmlsZV90ZXh0ID0gZmlsZS5yZWFkKCkKICAgICAgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBh
dGguYmFzZW5hbWUoZmlsZXBhdGgpCiAKQEAgLTE0Niw3ICsxNTMsNyBAQCBpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgogICAgICAgICBmb3IgZmlsZXBhdGggaW4gb3MubGlzdGRpcihhcmdfb3B0
aW9ucy5pbnB1dF9kaXJlY3RvcnkpOgogICAgICAgICAgICAgaW5wdXRfZmlsZXBhdGhzLmFwcGVu
ZChvcy5wYXRoLmpvaW4oYXJnX29wdGlvbnMuaW5wdXRfZGlyZWN0b3J5LCBmaWxlcGF0aCkpCiAK
LSAgICBpbnB1dF9maWxlcGF0aHMgPSBzb3J0ZWQoZmlsdGVyKGxhbWJkYSBuYW1lOiBmbm1hdGNo
LmZubWF0Y2gobmFtZSwgJyouanMnKSwgaW5wdXRfZmlsZXBhdGhzKSkKKyAgICBpbnB1dF9maWxl
cGF0aHMgPSBzb3J0ZWQoW25hbWUgZm9yIG5hbWUgaW4gaW5wdXRfZmlsZXBhdGhzIGlmIGZubWF0
Y2guZm5tYXRjaChuYW1lLCAnKi5qcycpXSkKIAogICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICdv
dXRwdXRfcGF0aCc6IGFyZ19vcHRpb25zLm91dHB1dF9kaXJlY3RvcnksCkBAIC0xNTksNyArMTY2
LDcgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKIAogICAgIGxvZy5kZWJ1ZygiR2VuZXJh
dGluZyBjb2RlIGZvciBidWlsdGlucy4iKQogICAgIGxvZy5kZWJ1ZygiUGFyc2VkIG9wdGlvbnM6
IikKLSAgICBmb3Igb3B0aW9uLCB2YWx1ZSBpbiBvcHRpb25zLml0ZW1zKCk6CisgICAgZm9yIG9w
dGlvbiwgdmFsdWUgaW4gbGlzdChvcHRpb25zLml0ZW1zKCkpOgogICAgICAgICBsb2cuZGVidWco
IiAgICAlczogJXMiICUgKG9wdGlvbiwgdmFsdWUpKQogICAgIGxvZy5kZWJ1ZygiIikKICAgICBs
b2cuZGVidWcoIklucHV0IGZpbGVzOiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5vbmljYWxpemVMYW5ndWFnZS5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlSW50bENhbm9uaWNhbGl6ZUxhbmd1YWdlLnB5
CmluZGV4IDY5ZjNiZTgzN2NjLi45NDliMGI2ZTc1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXpl
TGFuZ3VhZ2UucHkKQEAgLTE4OSw3ICsxODksNyBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18i
OgogICAgIGludGxDYW5vbkhQYXRoID0gYXJnc1sxXQogCiAgICAgcmVnaXN0cnlGaWxlID0gb3Bl
bk9yRXhpdChyZWdpc3RyeVBhdGgsICJyIikKLSAgICBpbnRsQ2Fub25IRmlsZSA9IG9wZW5PckV4
aXQoaW50bENhbm9uSFBhdGgsICJ3YiIpCisgICAgaW50bENhbm9uSEZpbGUgPSBvcGVuT3JFeGl0
KGludGxDYW5vbkhQYXRoLCAidyIpCiAKICAgICBpbnRsQ2Fub25IRmlsZS53cml0ZShoZWFkZXIp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2pzbWluLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvanNtaW4ucHkKaW5kZXggMzcyNDE4YjRkMmIu
LmZjNjQ3Yzc5ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9q
c21pbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9qc21pbi5weQpAQCAt
NzksMTAgKzc5LDEzIEBAIGNsYXNzIEphdmFzY3JpcHRNaW5pZnkob2JqZWN0KToKICAgICAgICAg
ZGVmIHdyaXRlKGNoYXIpOgogICAgICAgICAgICAgIyBhbGwgb2YgdGhpcyBpcyB0byBzdXBwb3J0
IGxpdGVyYWwgcmVndWxhciBleHByZXNzaW9ucy4KICAgICAgICAgICAgICMgc2lnaAotICAgICAg
ICAgICAgaWYgY2hhciBpbiAncmV0dXJuJzoKKyAgICAgICAgICAgIGlmIHN0cihjaGFyKSBpbiAn
cmV0dXJuJzoKICAgICAgICAgICAgICAgICBzZWxmLnJldHVybl9idWYgKz0gY2hhcgogICAgICAg
ICAgICAgICAgIHNlbGYuaXNfcmV0dXJuID0gc2VsZi5yZXR1cm5fYnVmID09ICdyZXR1cm4nCi0g
ICAgICAgICAgICBzZWxmLm91dHMud3JpdGUoY2hhcikKKyAgICAgICAgICAgIGlmIHN5cy52ZXJz
aW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLm91dHMud3JpdGUoY2hh
cikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5vdXRzLndyaXRlKHN0
cihjaGFyKSkKICAgICAgICAgICAgIGlmIHNlbGYuaXNfcmV0dXJuOgogICAgICAgICAgICAgICAg
IHNlbGYucmV0dXJuX2J1ZiA9ICcnCiAKQEAgLTExOCw4ICsxMjEsOCBAQCBjbGFzcyBKYXZhc2Ny
aXB0TWluaWZ5KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCiAgICAg
ICAgIGVsaWYgbm90IHByZXZpb3VzOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYg
cHJldmlvdXMgPj0gJyEnOgotICAgICAgICAgICAgaWYgcHJldmlvdXMgaW4gIidcIiI6CisgICAg
ICAgIGVsaWYgc3RyKHByZXZpb3VzKSA+PSAiISI6CisgICAgICAgICAgICBpZiBzdHIocHJldmlv
dXMpIGluICInXCIiOgogICAgICAgICAgICAgICAgIGluX3F1b3RlID0gcHJldmlvdXMKICAgICAg
ICAgICAgIHdyaXRlKHByZXZpb3VzKQogICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0g
cHJldmlvdXMKQEAgLTE2Niw3ICsxNjksNyBAQCBjbGFzcyBKYXZhc2NyaXB0TWluaWZ5KG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgICAgIGlmIG51bXNsYXNoZXMgJSAyID09IDA6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbl9xdW90ZSA9ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZSgnJy5qb2luKHF1b3RlX2J1ZikpCi0gICAgICAgICAgICBlbGlmIG5leHQxIGluICdcclxu
JzoKKyAgICAgICAgICAgIGVsaWYgc3RyKG5leHQxKSBpbiAnXHJcbic6CiAgICAgICAgICAgICAg
ICAgaWYgcHJldmlvdXNfbm9uX3NwYWNlIGluIG5ld2xpbmVlbmRfc3RyaW5ncyBcCiAgICAgICAg
ICAgICAgICAgICAgIG9yIHByZXZpb3VzX25vbl9zcGFjZSA+ICd+JzoKICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgMToKQEAgLTE3OSw3ICsxODIsNyBAQCBjbGFzcyBKYXZhc2NyaXB0TWluaWZ5
KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIG5leHQyID4gJ34n
IG9yIG5leHQyID09ICcvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fbmV3
bGluZSA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAg
ICAgZWxpZiBuZXh0MSA8ICchJyBhbmQgbm90IGluX3JlOgorICAgICAgICAgICAgZWxpZiBzdHIo
bmV4dDEpIDwgJyEnIGFuZCBub3QgaW5fcmU6CiAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3Vz
X25vbl9zcGFjZSBpbiBzcGFjZV9zdHJpbmdzIFwKICAgICAgICAgICAgICAgICAgICAgb3IgcHJl
dmlvdXNfbm9uX3NwYWNlID4gJ34nKSBcCiAgICAgICAgICAgICAgICAgICAgIGFuZCAobmV4dDIg
aW4gc3BhY2Vfc3RyaW5ncyBvciBuZXh0MiA+ICd+Jyk6CkBAIC0yMTcsMTQgKzIyMCwxNCBAQCBj
bGFzcyBKYXZhc2NyaXB0TWluaWZ5KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIGRvX25l
d2xpbmUgPSBGYWxzZQogCiAgICAgICAgICAgICAgICAgd3JpdGUobmV4dDEpCi0gICAgICAgICAg
ICAgICAgaWYgbm90IGluX3JlIGFuZCBuZXh0MSBpbiAiJ1wiYCI6CisgICAgICAgICAgICAgICAg
aWYgbm90IGluX3JlIGFuZCBzdHIobmV4dDEpIGluICInXCJgIjoKICAgICAgICAgICAgICAgICAg
ICAgaW5fcXVvdGUgPSBuZXh0MQogICAgICAgICAgICAgICAgICAgICBxdW90ZV9idWYgPSBbXQog
CiAgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCiAgICAgICAgICAgICBuZXh0MSA9IG5leHQy
CiAKLSAgICAgICAgICAgIGlmIHByZXZpb3VzID49ICchJzoKKyAgICAgICAgICAgIGlmIHN0cihw
cmV2aW91cykgPj0gJyEnOgogICAgICAgICAgICAgICAgIHByZXZpb3VzX25vbl9zcGFjZSA9IHBy
ZXZpb3VzCiAKICAgICAgICAgICAgIGlmIHByZXZpb3VzID09ICdcXCc6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9tYWtlLWpzLWZpbGUtYXJyYXlzLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvbWFrZS1qcy1maWxlLWFycmF5cy5weQppbmRleCBj
MzdjYzEyZjIyZC4uODYyNGJmZThkYWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL21ha2UtanMtZmlsZS1hcnJheXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvbWFrZS1qcy1maWxlLWFycmF5cy5weQpAQCAtMjUsNyArMjUsMTEgQEAgZnJv
bSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogaW1wb3J0IGlvCiBpbXBvcnQgb3MK
IGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgotZnJvbSBTdHJpbmdJTyBpbXBvcnQg
U3RyaW5nSU8KK2ltcG9ydCBzeXMKK2lmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAg
ICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZWxzZToKKyAgICBmcm9tIGlvIGltcG9y
dCBTdHJpbmdJTwogZnJvbSBqc21pbiBpbXBvcnQgSmF2YXNjcmlwdE1pbmlmeQogCiAKQEAgLTM3
LDcgKzQxLDcgQEAgZGVmIHN0cmluZ2lmeUNvZGVwb2ludChjb2RlKToKIAogCiBkZWYgY2h1bmso
bGlzdCwgY2h1bmtTaXplKToKLSAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKGxpc3QpLCBjaHVu
a1NpemUpOgorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihsaXN0KSwgY2h1bmtTaXplKToKICAg
ICAgICAgeWllbGQgbGlzdFtpOmkgKyBjaHVua1NpemVdCiAKIApAQCAtODUsNyArODksNyBAQCBk
ZWYgbWFpbigpOgogICAgICAgICBwcmludCgnZXh0ZXJuIGNvbnN0IGNoYXIgezA6c31KYXZhU2Ny
aXB0W3sxOmR9XTsnLmZvcm1hdCh2YXJpYWJsZU5hbWUsIHNpemUpLCBmaWxlPWhlYWRlckZpbGUp
CiAgICAgICAgIHByaW50KCdjb25zdCBjaGFyIHswOnN9SmF2YVNjcmlwdFt7MTpkfV0gPSB7eycu
Zm9ybWF0KHZhcmlhYmxlTmFtZSwgc2l6ZSksIGZpbGU9c291cmNlRmlsZSkKIAotICAgICAgICBj
b2RlcG9pbnRzID0gbWFwKG9yZCwgY2hhcmFjdGVycykKKyAgICAgICAgY29kZXBvaW50cyA9IGxp
c3QobWFwKG9yZCwgY2hhcmFjdGVycykpCiAgICAgICAgIGZvciBjb2RlcG9pbnRDaHVuayBpbiBj
aHVuayhjb2RlcG9pbnRzLCAxNik6CiAgICAgICAgICAgICBwcmludCgnICAgIHswOnN9LCcuZm9y
bWF0KCcsJy5qb2luKG1hcChzdHJpbmdpZnlDb2RlcG9pbnQsIGNvZGVwb2ludENodW5rKSkpLCBm
aWxlPXNvdXJjZUZpbGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL3drYnVpbHRpbnMvX19pbml0X18ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy93a2J1aWx0aW5zL19faW5pdF9fLnB5CmluZGV4IGQ2ZjkzMjliMmI0Li5mZmE4NDllYTViMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9fX2lu
aXRfXy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL19f
aW5pdF9fLnB5CkBAIC0xLDMgKzEsMyBAQAogIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJj
aCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCiAKLWZyb20gd2tidWlsdGlucyBpbXBv
cnQgKgorZnJvbSAud2tidWlsdGlucyBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9o
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRlci5weQppbmRleCBjZGUzNTdjZDQzOS4uZWFjNjk0
ODAzYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRf
aGVhZGVyLnB5CkBAIC0xNTgsNyArMTU4LDcgQEAgZXh0ZXJuIGNvbnN0IEpTQzo6Q29uc3RydWN0
QWJpbGl0eSBzXyUoY29kZU5hbWUpc0NvbnN0cnVjdEFiaWxpdHk7IiIiICUgZnVuY3Rpb24KIAog
ICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3Jv
UHJlZml4KXNfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX1BSSVZBVEVfR0xPQkFMX05BTUUobWFj
cm8pIFxcIiAlIGFyZ3MpCi0gICAgICAgIGZ1bmN0aW9ucyA9IGZpbHRlcihsYW1iZGEgZnVuY3Rp
b246IGZ1bmN0aW9uLmlzX2dsb2JhbF9wcml2YXRlLCBzZWxmLm1vZGVsKCkuYWxsX2Z1bmN0aW9u
cygpKQorICAgICAgICBmdW5jdGlvbnMgPSBbZnVuY3Rpb24gZm9yIGZ1bmN0aW9uIGluIHNlbGYu
bW9kZWwoKS5hbGxfZnVuY3Rpb25zKCkgaWYgZnVuY3Rpb24uaXNfZ2xvYmFsX3ByaXZhdGVdCiAg
ICAgICAgIGZ1bmN0aW9ucy5zb3J0KGtleT1sYW1iZGEgeDogeC5mdW5jdGlvbl9uYW1lKQogICAg
ICAgICBmb3IgZnVuY3Rpb24gaW4gZnVuY3Rpb25zOgogICAgICAgICAgICAgZnVuY3Rpb25fYXJn
cyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKaW5kZXggMGI5MTNkY2ZjZTAuLjgwMjU2MTIwMjIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0
aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFs
c193cmFwcGVyX2hlYWRlci5weQpAQCAtMzYsNyArMzYsNyBAQCBsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmVy
YXRvcihCdWlsdGluc0dlbmVyYXRvcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToK
ICAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0gICAgICAg
IHNlbGYuaW50ZXJuYWxzID0gZmlsdGVyKGxhbWJkYSBvYmplY3Q6ICdpbnRlcm5hbCcgaW4gb2Jq
ZWN0LmFubm90YXRpb25zLCBtb2RlbC5vYmplY3RzKQorICAgICAgICBzZWxmLmludGVybmFscyA9
IFtvYmplY3QgZm9yIG9iamVjdCBpbiBtb2RlbC5vYmplY3RzIGlmICdpbnRlcm5hbCcgaW4gb2Jq
ZWN0LmFubm90YXRpb25zXQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAg
ICAgcmV0dXJuICIlc0pTQnVpbHRpbkludGVybmFscy5oIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdv
cmsuc2V0dGluZygnbmFtZXNwYWNlJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
CmluZGV4IDUyYjRiMjAyNWYyLi4zOTgyNTA2N2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxl
bWVudGF0aW9uLnB5CkBAIC0zNiw3ICszNiw3IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQogY2xhc3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6
CiAgICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQotICAgICAg
ICBzZWxmLmludGVybmFscyA9IGZpbHRlcihsYW1iZGEgb2JqZWN0OiAnaW50ZXJuYWwnIGluIG9i
amVjdC5hbm5vdGF0aW9ucywgbW9kZWwub2JqZWN0cykKKyAgICAgICAgc2VsZi5pbnRlcm5hbHMg
PSBbb2JqZWN0IGZvciBvYmplY3QgaW4gbW9kZWwub2JqZWN0cyBpZiAnaW50ZXJuYWwnIGluIG9i
amVjdC5hbm5vdGF0aW9uc10KIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAg
ICAgIHJldHVybiAiJXNKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5CmluZGV4IDA1MTlj
NWVlZTRjLi4xZjQ5YTU1ZGRiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19tb2RlbC5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5CkBAIC0xNTUsNiArMTU1
LDkgQEAgY2xhc3MgQnVpbHRpbkZ1bmN0aW9uOgogCiAgICAgICAgIHJldHVybiBpbnRlcmZhY2UK
IAorICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5mdW5j
dGlvbl9uYW1lIDwgb3RoZXIuZnVuY3Rpb25fbmFtZQorCiAKIGNsYXNzIEJ1aWx0aW5zQ29sbGVj
dGlvbjoKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWV3b3JrX25hbWUpOgpAQCAtMjEwLDcg
KzIxMyw3IEBAIGNsYXNzIEJ1aWx0aW5zQ29sbGVjdGlvbjoKIAogICAgICAgICByZXN1bHQgPSBb
XQogCi0gICAgICAgIGZvciBvd25lciwgeWVhcnMgaW4gb3duZXJfdG9feWVhcnMuaXRlbXMoKToK
KyAgICAgICAgZm9yIG93bmVyLCB5ZWFycyBpbiBsaXN0KG93bmVyX3RvX3llYXJzLml0ZW1zKCkp
OgogICAgICAgICAgICAgc29ydGVkX3llYXJzID0gbGlzdCh5ZWFycykKICAgICAgICAgICAgIHNv
cnRlZF95ZWFycy5zb3J0KCkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiVzICVzIiAlICgn
LCAnLmpvaW4oc29ydGVkX3llYXJzKSwgb3duZXIpKQpAQCAtMzAzLDQgKzMwNiw0IEBAIGNsYXNz
IEJ1aWx0aW5zQ29sbGVjdGlvbjoKICAgICAgICAgICAgIGZ1bmN0aW9uQm91bmRzLmFwcGVuZCgo
c3RhcnQsIGVuZCkpCiAKICAgICAgICAgZnVuY3Rpb25TdHJpbmdzID0gW3RleHRbc3RhcnQ6ZW5k
XS5zdHJpcCgpIGZvciAoc3RhcnQsIGVuZCkgaW4gZnVuY3Rpb25Cb3VuZHNdCi0gICAgICAgIHJl
dHVybiBtYXAoQnVpbHRpbkZ1bmN0aW9uLmZyb21TdHJpbmcsIGZ1bmN0aW9uU3RyaW5ncykKKyAg
ICAgICAgcmV0dXJuIGxpc3QobWFwKEJ1aWx0aW5GdW5jdGlvbi5mcm9tU3RyaW5nLCBmdW5jdGlv
blN0cmluZ3MpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci91ZGlzODYvdWRfb3Bjb2RlLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci91ZGlzODYvdWRfb3Bjb2RlLnB5CmluZGV4IGZlMTgzM2RjNzFiLi4zMGM5ZjQzNmNkNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfb3Bj
b2RlLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvdWRpczg2L3Vk
X29wY29kZS5weQpAQCAtNTUwLDEwICs1NTAsMTAgQEAgY2xhc3MgVWRPcGNvZGVUYWJsZXMob2Jq
ZWN0KToKICAgICAgICAgICAgIGVudHJpZXMgPSB0YmwuZW50cmllcygpCiAgICAgICAgICAgICBm
b3IgaywgZSBpbiBlbnRyaWVzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgVWRP
cGNvZGVUYWJsZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCIlcyAgICB8LTwlMDJ4
PiAlcyIgJSAoaW5kZW50LCBrLCBlKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coIiVz
ICAgIHwtPCUwMng+ICVzIiAlIChpbmRlbnQsIGludChrKSwgZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHByaW50V2FsayhlLCBpbmRlbnQgKyAiICAgIHwiKQogICAgICAgICAgICAgICAgIGVsaWYg
aXNpbnN0YW5jZShlLCBVZEluc25EZWYpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygi
JXMgICAgfC08JTAyeD4gJXMiICUgKGluZGVudCwgaywgZSkpCisgICAgICAgICAgICAgICAgICAg
IHNlbGYubG9nKCIlcyAgICB8LTwlMDJ4PiAlcyIgJSAoaW5kZW50LCBpbnQoayksIGUpKQogICAg
ICAgICBwcmludFdhbGsoc2VsZi5yb290KQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0ZS1ieXRlY29kZS1maWxlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0ZS1ieXRlY29kZS1maWxlcwppbmRleCBmYTI1ZmQyZWYzMS4uNzgzOGVkM2ZlZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0ZS1ieXRlY29kZS1maWxlcwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdGUtYnl0ZWNvZGUtZmlsZXMKQEAgLTEy
Niw3ICsxMjYsNyBAQCBkZWYgd3JpdGVTdHJ1Y3QoYnl0ZWNvZGVIRmlsZSwgYnl0ZWNvZGUpOgog
CiAgICAgd3JpdGVJbnN0cnVjdGlvbkFjY2Vzc29yKGJ5dGVjb2RlSEZpbGUsICJPcGNvZGUiLCAi
b3Bjb2RlIikKICAgICBmb3Igb2Zmc2V0IGluIGJ5dGVjb2RlWyJvZmZzZXRzIl06Ci0gICAgICAg
IGZvciBuYW1lLCB0eXBlTmFtZSBpbiBvZmZzZXQuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBu
YW1lLCB0eXBlTmFtZSBpbiBvZmZzZXQuaXRlbXMoKToKICAgICAgICAgICAgIHdyaXRlSW5zdHJ1
Y3Rpb25BY2Nlc3NvcihieXRlY29kZUhGaWxlLCB0eXBlTmFtZSwgbmFtZSkKIAogICAgIGJ5dGVj
b2RlSEZpbGUud3JpdGUoIlxucHJpdmF0ZTpcbiIpCkBAIC0xMzQsNyArMTM0LDcgQEAgZGVmIHdy
aXRlU3RydWN0KGJ5dGVjb2RlSEZpbGUsIGJ5dGVjb2RlKToKIAogICAgIHdyaXRlSW5zdHJ1Y3Rp
b25NZW1iZXIoYnl0ZWNvZGVIRmlsZSwgIk9wY29kZSIsICJvcGNvZGUiKQogICAgIGZvciBvZmZz
ZXQgaW4gYnl0ZWNvZGVbIm9mZnNldHMiXToKLSAgICAgICAgZm9yIG5hbWUsIHR5cGVOYW1lIGlu
IG9mZnNldC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHR5cGVOYW1lIGluIG9mZnNl
dC5pdGVtcygpOgogICAgICAgICAgICAgd3JpdGVJbnN0cnVjdGlvbk1lbWJlcihieXRlY29kZUhG
aWxlLCB0eXBlTmFtZSwgbmFtZSkKICAgICBieXRlY29kZUhGaWxlLndyaXRlKCJ9O1xuXG4iKQog
CkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICAg
ICBleGl0KDApCiAKICAgICBpZiBieXRlY29kZUhGaWxlbmFtZToKLSAgICAgICAgYnl0ZWNvZGVI
RmlsZSA9IG9wZW5PckV4aXQoYnl0ZWNvZGVIRmlsZW5hbWUsICJ3YiIpCisgICAgICAgIGJ5dGVj
b2RlSEZpbGUgPSBvcGVuT3JFeGl0KGJ5dGVjb2RlSEZpbGVuYW1lLCAidyIpCiAKICAgICBpZiBi
eXRlY29kZVN0cnVjdHNIRmlsZW5hbWU6Ci0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlID0g
b3Blbk9yRXhpdChieXRlY29kZVN0cnVjdHNIRmlsZW5hbWUsICJ3YiIpCisgICAgICAgIGJ5dGVj
b2RlU3RydWN0c0hGaWxlID0gb3Blbk9yRXhpdChieXRlY29kZVN0cnVjdHNIRmlsZW5hbWUsICJ3
IikKIAogICAgIGlmIGluaXRBU01GaWxlTmFtZToKLSAgICAgICAgaW5pdEJ5dGVjb2Rlc0ZpbGUg
PSBvcGVuT3JFeGl0KGluaXRBU01GaWxlTmFtZSwgIndiIikKKyAgICAgICAgaW5pdEJ5dGVjb2Rl
c0ZpbGUgPSBvcGVuT3JFeGl0KGluaXRBU01GaWxlTmFtZSwgInciKQogCiAgICAgdHJ5OgogICAg
ICAgICBieXRlY29kZVNlY3Rpb25zID0ganNvbi5sb2FkKGJ5dGVjb2RlRmlsZSwgZW5jb2Rpbmcg
PSAidXRmLTgiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weQppbmRleCAzN2RiZTk0MzYzMy4uMWE0YWM2
OWRhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL19faW5pdF9fLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5CkBAIC0xLDI1ICsxLDI1IEBACiAjIFJlcXVp
cmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMK
IAotZnJvbSBtb2RlbHMgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCAqCi1mcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0ICoKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0ICoKK2Zyb20g
Lm1vZGVscyBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCAqCitmcm9tIC5jcHBfZ2Vu
ZXJhdG9yIGltcG9ydCAqCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgKgogCi1mcm9tIGdl
bmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgot
ZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJv
bSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAq
Ci1mcm9tIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgot
ZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBv
cnQgKgotZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyIGltcG9ydCAqCi1m
cm9tIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgot
ZnJvbSBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9v
YmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5l
cmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29i
amNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9v
YmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9o
ZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVy
c2lvbnNfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9j
b252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2Fs
dGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0
ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5l
cmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJv
bSAuZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5n
ZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0
ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpj
X2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29i
amNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29iamNfaW50ZXJuYWxf
aGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5
cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Iu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBf
Z2VuZXJhdG9yLnB5CmluZGV4IDVmMmU5Yzg0NjJkLi5hN2QyNzQ0ODExOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVy
YXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CkBAIC0yOCw4ICsyOCw4IEBAIGltcG9ydCBsb2dnaW5nCiBp
bXBvcnQgb3MucGF0aAogaW1wb3J0IHJlCiAKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCB1Y2ZpcnN0
LCBHZW5lcmF0b3IKLWZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBl
LCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcworZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCB1Y2ZpcnN0LCBHZW5lcmF0b3IKK2Zyb20gLm1vZGVscyBpbXBvcnQgUHJp
bWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUs
IEZyYW1ld29ya3MKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9h
bHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBmNmJmODZkYTkyYS4u
Mjc2OWRmODU0MmIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKQEAgLTMwLDggKzMwLDggQEAgaW1wb3J0IHN0cmluZwogaW1wb3J0IHJlCiBmcm9tIHN0cmlu
ZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRl
bXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCiAKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgc2VjdGlvbnMgPSBbXQog
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hl
cnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqdGVtcGxhdGVfYXJncykpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpIGlmIF9mXSkpCiAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlz
cGF0Y2hlcnNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKnRlbXBsYXRlX2FyZ3Mp
KQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggMDc2OWM4YTI3YTkuLmMxNGFiMThlZmYyIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQpAQCAtMzAsMTAgKzMwLDEwIEBAIGltcG9ydCByZQogaW1wb3J0IHN0cmluZwog
ZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQg
Q3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKK2Zyb20gLmNwcF9n
ZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gLmdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMgaW1wb3J0IEVu
dW1UeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00Niw3ICs0
Niw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgIHJldHVybiAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLnBy
b3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKHNlbGYuY29tbWFuZHNfZm9yX2Rv
bWFpbihkb21haW4pKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQor
ICAgICAgICByZXR1cm4gW2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3Rv
X2dlbmVyYXRlKHNlbGYpIGlmIGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkg
PiAwXQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgdHlwZWRlZnMg
PSBbKCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KQEAgLTYyLDggKzYyLDggQEAgY2xhc3MgQ3Bw
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJh
bWV3b3JrLnNldHRpbmcoJ2FsdGVybmF0ZV9kaXNwYXRjaGVycycsIEZhbHNlKToKICAgICAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3
YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
LCBkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2Vj
dGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4sIGRvbWFpbnMpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFw
KHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFp
bnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFk
ZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0
dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQogCkBAIC0xOTgsNyArMTk4LDcgQEAgY2xhc3MgQ3Bw
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
Y29tbWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICBpZiBs
ZW4oY29tbWFuZHMpID4gMDoKICAgICAgICAgICAgIGRlY2xhcmF0aW9ucy5hcHBlbmQoJ3ByaXZh
dGU6JykKLSAgICAgICAgZGVjbGFyYXRpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCwgY29tbWFuZHMpKQorICAgICAgICBkZWNs
YXJhdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQsIGNvbW1hbmRzKSkpCiAKICAgICAgICAgZGVjbGFyYXRpb25fYXJn
cyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYzU1OGVkNGVkYjAuLjAz
NGJkNzI4MjgyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAg
LTI5LDEwICsyOSwxMCBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJh
dG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1w
bGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1
Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCitmcm9tIC5j
cHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gLmNwcF9nZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9t
IC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAubW9kZWxzIGltcG9y
dCBPYmplY3RUeXBlLCBBcnJheVR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCiAKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gIiVzQmFja2Vu
ZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFp
bjogbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAsIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gW2RvbWFpbiBmb3IgZG9t
YWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpIGlmIGxlbihzZWxmLmNv
bW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwXQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1
dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzID0gc2VsZi5fZ2VuZXJhdGVfc2Vj
b25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpCkBAIC02NSw3ICs2NSw3IEBAIGNsYXNzIENwcEJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUHJlbHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCJcbiIuam9pbihtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zv
cl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCi0gICAgICAgIHNlY3Rpb25z
LmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9y
X2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5l
eHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNf
Zm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKSkKICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gIlxuXG4iLmpv
aW4oc2VjdGlvbnMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCA1OWJkNzY2NjA5
OC4uOTBiZGJjZDc3NjggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTMwLDEwICsz
MCwxMCBAQCBpbXBvcnQgcmUKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1w
bGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcwotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBt
b2RlbHMgaW1wb3J0IEVudW1UeXBlCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5l
cmF0b3IKK2Zyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JU
ZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
ciwgdWNmaXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBDcHBGcm9udGVu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJu
ICIlc0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAg
ZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFt
YmRhIGRvbWFpbjogbGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIFtkb21haW4g
Zm9yIGRvbWFpbiBpbiBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4o
c2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgogICAgICAgICBoZWFkZXJfYXJncyA9IHsKQEAgLTU3LDcgKzU3LDcgQEAg
Y2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6
CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVt
cGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0g
ICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAg
ICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKSkKICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQb3N0bHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICJcblxuIi5q
b2luKHNlY3Rpb25zKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CmluZGV4IGI2OTY1ZjU3ZjNiLi4yY2ZmZDJiODI5ZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTI5LDEwICsyOSwxMCBAQCBpbXBvcnQgbG9nZ2luZwog
aW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dl
bmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0
VHlwZSwgQXJyYXlUeXBlCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IK
K2Zyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAorZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKIAogbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ3Bw
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgcmV0dXJuICIlc0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYucHJvdG9j
b2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oc2VsZi5ldmVudHNfZm9yX2RvbWFpbihk
b21haW4pKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAg
ICByZXR1cm4gW2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpIGlmIGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4gMF0KIAog
ICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcl9hcmdzID0gewpA
QCAtNTYsNyArNTYsNyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZCht
YXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwg
c2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlz
dChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFp
biwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlv
bnMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJv
dG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDc1NDhkNjMxNDVhLi5hM2M5ODkxNDRiOCAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5CkBAIC0zMSwxMCArMzEsMTAgQEAgaW1wb3J0IHN0cmluZwogZnJvbSBv
cGVyYXRvciBpbXBvcnQgbWV0aG9kY2FsbGVyCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUK
IAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKLWZyb20gY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0
ZXMKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxz
IGltcG9ydCBFbnVtVHlwZSwgT2JqZWN0VHlwZSwgUHJpbWl0aXZlVHlwZSwgQWxpYXNlZFR5cGUs
IEFycmF5VHlwZSwgRnJhbWV3b3JrcworZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2Vu
ZXJhdG9yCitmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0
b3IsIHVjZmlyc3QKK2Zyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIFBy
aW1pdGl2ZVR5cGUsIEFsaWFzZWRUeXBlLCBBcnJheVR5cGUsIEZyYW1ld29ya3MKIAogbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTYyLDggKzYyLDggQEAgY2xhc3MgQ3Bw
UHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoZG9tYWlucykp
CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlZGVmcyhkb21haW5z
KSkKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fY29uc3RhbnRf
dmFsdWVfY29udmVyc2lvbl9tZXRob2RzKCkpCi0gICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBt
YXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwg
YnVpbGRlcl9zZWN0aW9ucykpCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBsaXN0KG1hcChz
ZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2Vj
dGlvbnMuZXh0ZW5kKFtzZWN0aW9uIGZvciBzZWN0aW9uIGluIGJ1aWxkZXJfc2VjdGlvbnMgaWYg
bGVuKHNlY3Rpb24pID4gMF0pCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoZG9tYWlucykpCiAgICAg
ICAgIHNlY3Rpb25zLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9kZWNsYXJhdGlvbnNfZm9yX2VudW1f
Y29udmVyc2lvbl9tZXRob2RzKGRvbWFpbnMpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ30g
Ly8gbmFtZXNwYWNlIFByb3RvY29sJykKQEAgLTg4LDggKzg4LDggQEAgY2xhc3MgQ3BwUHJvdG9j
b2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAgIGZvciBkb21h
aW4gaW4gZG9tYWluczoKICAgICAgICAgICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlw
ZSBmb3IgZGVjbCBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKV0K
LSAgICAgICAgICAgIG9iamVjdF90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFu
Y2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKLSAgICAgICAgICAgIGVu
dW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAgICAgICAgb2JqZWN0X3R5cGVzID0gW190eXBl
IGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmpl
Y3RUeXBlKV0KKyAgICAgICAgICAgIGVudW1fdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGluIGRl
Y2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKV0KICAgICAgICAg
ICAgIHNvcnRlZChvYmplY3RfdHlwZXMsIGtleT1tZXRob2RjYWxsZXIoJ3Jhd19uYW1lJykpCiAg
ICAgICAgICAgICBzb3J0ZWQoZW51bV90eXBlcywga2V5PW1ldGhvZGNhbGxlcigncmF3X25hbWUn
KSkKIApAQCAtMTE0LDggKzExNCw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQogCiAgICAg
ZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgc2VjdGlvbnMg
PSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAg
ICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAsIHNlY3Rpb25z
KQorICAgICAgICBzZWN0aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzX2Zv
cl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucyA9IFt0ZXh0IGZvciB0ZXh0IGlu
IHNlY3Rpb25zIGlmIGxlbih0ZXh0KSA+IDBdCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9
PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC0xMjYsOCArMTI2LDggQEAgY2xhc3MgQ3Bw
UHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIHR5cGVf
ZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikK
LSAgICAgICAgcHJpbWl0aXZlX2RlY2xhcmF0aW9ucyA9IGZpbHRlcihsYW1iZGEgZGVjbDogaXNp
bnN0YW5jZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBlKSwgdHlwZV9kZWNsYXJhdGlvbnMpCi0gICAg
ICAgIGFycmF5X2RlY2xhcmF0aW9ucyA9IGZpbHRlcihsYW1iZGEgZGVjbDogaXNpbnN0YW5jZShk
ZWNsLnR5cGUsIEFycmF5VHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICBwcmltaXRp
dmVfZGVjbGFyYXRpb25zID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYg
aXNpbnN0YW5jZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBlKV0KKyAgICAgICAgYXJyYXlfZGVjbGFy
YXRpb25zID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgaXNpbnN0YW5j
ZShkZWNsLnR5cGUsIEFycmF5VHlwZSldCiAgICAgICAgIGlmIGxlbihwcmltaXRpdmVfZGVjbGFy
YXRpb25zKSA9PSAwIGFuZCBsZW4oYXJyYXlfZGVjbGFyYXRpb25zKSA9PSAwOgogICAgICAgICAg
ICAgcmV0dXJuICcnCiAKQEAgLTE4Nyw3ICsxODcsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKICAgICAgICAgICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlv
bih0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pKQogCi0gICAgICAgIHNlY3Rpb25zID0gZmlsdGVy
KGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBzZWN0aW9ucykKKyAgICAgICAgc2Vj
dGlvbnMgPSBbc2VjdGlvbiBmb3Igc2VjdGlvbiBpbiBzZWN0aW9ucyBpZiBsZW4oc2VjdGlvbikg
PiAwXQogICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4g
JycKIApAQCAtMjAxLDkgKzIwMSw5IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCiAKLSAgICAgICAgZW51bV9t
ZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzLCB0eXBlX2RlY2xhcmF0aW9uLnR5
cGVfbWVtYmVycykKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVt
YmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cykKLSAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1i
ZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBl
bnVtX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnMgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIu
dHlwZS5pc19hbm9ueW1vdXNdCisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZv
ciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5p
c19vcHRpb25hbF0KKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJl
ciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNfb3B0aW9uYWxd
CiAgICAgICAgIG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUKIAogICAg
ICAgICBsaW5lcyA9IFtdCkBAIC0yNjIsNyArMjYyLDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBl
c0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgICAgICByZXR1cm4gJyAgICAnICsgbGluZQogCi0gICAgICAgIGluZGVudGVkX2xpbmVz
ID0gbWFwKGFwcGx5X2luZGVudGF0aW9uLCBzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1f
dHlwZShlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgZW51bV9tZW1iZXIudHlwZSkpCisgICAgICAg
IGluZGVudGVkX2xpbmVzID0gbGlzdChtYXAoYXBwbHlfaW5kZW50YXRpb24sIHNlbGYuX2dlbmVy
YXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBlbnVtX21l
bWJlci50eXBlKSkpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oaW5kZW50ZWRfbGluZXMpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKHNlbGYsIGVudW1fbmFtZSwg
ZW51bV90eXBlKToKQEAgLTI3Niw3ICsyNzYsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVh
ZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJf
c3RhdGVfZW51bShzZWxmLCB0eXBlX2RlY2xhcmF0aW9uKToKICAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1i
ZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBy
ZXF1aXJlZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzIGlmIG5vdCBtZW1iZXIuaXNfb3B0aW9uYWxdCiAgICAgICAgIGVudW1fdmFs
dWVzID0gW10KIAogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBlbnVtIHsnKQpAQCAtMzQ0LDcg
KzM0NCw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKIAogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CiAgICAgICAgICAgICB0eXBl
X2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4p
Ci0gICAgICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRl
Y2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIHR5cGVfZGVj
bGFyYXRpb25zKQorICAgICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gW2RlY2wg
Zm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fz
c2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24g
aW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgogICAgICAgICAgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKQEAgLTM5Myw4ICszOTMsOCBA
QCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKICAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRp
b25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKICAgICAgICAg
ICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiB0eXBlX2RlY2xh
cmF0aW9uc10KLSAgICAgICAgICAgIG9iamVjdF90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6
IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKLSAgICAg
ICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAgICAgICAgb2JqZWN0X3R5cGVz
ID0gW190eXBlIGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2luc3RhbmNlKF90
eXBlLCBPYmplY3RUeXBlKV0KKyAgICAgICAgICAgIGVudW1fdHlwZXMgPSBbX3R5cGUgZm9yIF90
eXBlIGluIGRlY2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKV0K
ICAgICAgICAgICAgIGlmIGxlbihvYmplY3RfdHlwZXMpICsgbGVuKGVudW1fdHlwZXMpID09IDA6
CiAgICAgICAgICAgICAgICAgY29udGludWUKIApAQCAtNDMyLDcgKzQzMiw3IEBAIGNsYXNzIENw
cFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9y
IGRvbWFpbiBpbiBkb21haW5zOgogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxm
LnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICAgICAgZGVjbGFy
YXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQot
ICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2Uo
X3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgICAgICBlbnVtX3R5
cGVzID0gbGlzdChmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSksIGRlY2xhcmF0aW9uX3R5cGVzKSkKIAogICAgICAgICAgICAgaWYgbGVuKGVudW1fdHlwZXMp
ID09IDA6CiAgICAgICAgICAgICAgICAgY29udGludWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQppbmRleCA1ZTdhZWMyM2FlNi4uYWM4ZWM1YjcxMGMgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHkKQEAgLTMwLDEwICszMCwxMCBAQCBpbXBvcnQgc3RyaW5nCiBmcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIGZyb20gb3BlcmF0b3IgaW1wb3J0IG1ldGhvZGNhbGxl
cgogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBjcHBfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBs
YXRlcwotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2Rl
bHMgaW1wb3J0IEFsaWFzZWRUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCitm
cm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gLmNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVz
Citmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAubW9kZWxz
IGltcG9ydCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgT2JqZWN0VHlwZQogCiBs
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNjUsOCArNjUsOCBAQCBjbGFz
cyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgUHJvdG9jb2wgeycpCiAgICAgICAg
IHNlY3Rpb25zLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmdfYW5kX2NvbnZlcnNp
b25fbWV0aG9kcyhkb21haW5zKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX29wZW5fZmllbGRfbmFtZXMoKSkKLSAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChz
ZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBzZWN0
aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWls
ZGVyX3NlY3Rpb25zKSkKKyAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IGxpc3QobWFwKHNlbGYu
X2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9u
cy5leHRlbmQoW3NlY3Rpb24gZm9yIHNlY3Rpb24gaW4gYnVpbGRlcl9zZWN0aW9ucyBpZiBsZW4o
c2VjdGlvbikgPiAwXSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbCcpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
SW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
IApAQCAtMTI4LDggKzEyOCw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0g
c2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKICAgICAgICAgZGVjbGFy
YXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQot
ICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90
eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCi0gICAgICAgIGVudW1fdHlwZXMg
PSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSksIGRlY2xh
cmF0aW9uX3R5cGVzKQorICAgICAgICBvYmplY3RfdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGlu
IGRlY2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpXQorICAg
ICAgICBlbnVtX3R5cGVzID0gW190eXBlIGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBp
ZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSldCiAgICAgICAgIGlmIGxlbihvYmplY3RfdHlw
ZXMpICsgbGVuKGVudW1fdHlwZXMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKIApAQCAt
MTU2LDggKzE1Niw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgc2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpKQog
ICAgICAgICBzZWN0aW9ucy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nKCkpCi0g
ICAgICAgIGVudW1fcGFyc2VyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29u
dmVyc2lvbl9tZXRob2RzX2Zvcl9kb21haW4sIGRvbWFpbnMpCi0gICAgICAgIHNlY3Rpb25zLmV4
dGVuZChmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIGVudW1fcGFyc2Vy
X3NlY3Rpb25zKSkKKyAgICAgICAgZW51bV9wYXJzZXJfc2VjdGlvbnMgPSBsaXN0KG1hcChzZWxm
Ll9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fbWV0aG9kc19mb3JfZG9tYWluLCBkb21haW5zKSkK
KyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKFtzZWN0aW9uIGZvciBzZWN0aW9uIGluIGVudW1fcGFy
c2VyX3NlY3Rpb25zIGlmIGxlbihzZWN0aW9uKSA+IDBdKQogICAgICAgICBpZiBsZW4oc2VjdGlv
bnMpID09IDE6CiAgICAgICAgICAgICByZXR1cm4gW10gICMgTm8gZGVjbGFyYXRpb25zIHRvIGVt
aXQsIGp1c3QgdGhlIG5hbWVzcGFjZS4KIApAQCAtMTY4LDcgKzE2OCw3IEBAIGNsYXNzIENwcFBy
b3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVy
YXRlKCk6CiAgICAgICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbihkb21haW4pCi0gICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlv
biBpbiBmaWx0ZXIobGFtYmRhIGRlY2w6IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhk
ZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucyk6CisgICAgICAgICAgICBmb3IgdHlwZV9kZWNs
YXJhdGlvbiBpbiBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBHZW5lcmF0
b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKV06CiAgICAgICAgICAgICAgICAgb3Bl
bl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24pCiAgICAg
ICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZChvcGVuX21lbWJlcnMsIGtleT1s
YW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgogICAgICAgICAgICAgICAgICAgICBm
aWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1Byb3RvY29sJywgZG9tYWluLmRv
bWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdWNmaXJzdCh0
eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQpAQCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNzIENwcFBy
b3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRl
ZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBz
ZWN0aW9ucyA9IFtdCiAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKLSAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVy
YXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9u
cyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgZGVjbGFyYXRpb25zX3Rv
X2dlbmVyYXRlID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50
eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAgICAgICBmb3IgdHlw
ZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CiAgICAgICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CkBAIC0yMDAs
OCArMjAwLDggQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuUHJv
dG9jb2xPYmplY3RSdW50aW1lQ2FzdCkuc3Vic3RpdHV0ZShOb25lLCAqKmFyZ3MpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVj
dF9kZWNsYXJhdGlvbik6Ci0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRh
IG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVycykKLSAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVy
OiBtZW1iZXIuaXNfb3B0aW9uYWwsIG9iamVjdF9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisg
ICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gb2JqZWN0X2Rl
Y2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQorICAgICAg
ICBvcHRpb25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIG9iamVjdF9kZWNsYXJh
dGlvbi50eXBlX21lbWJlcnMgaWYgbWVtYmVyLmlzX29wdGlvbmFsXQogICAgICAgICBzaG91bGRf
Y291bnRfcHJvcGVydGllcyA9IG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMob2Jq
ZWN0X2RlY2xhcmF0aW9uLnR5cGUpCiAgICAgICAgIGxpbmVzID0gW10KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
anNfYmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKaW5kZXggOTMz
MDdhODk3MmQuLjkwN2JmMGNhMzhjIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKQEAgLTMwLDkgKzMwLDkgQEAgaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9t
IGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxz
IGltcG9ydCBFbnVtVHlwZQorZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmly
c3QKK2Zyb20gLmdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBh
cyBUZW1wbGF0ZXMKK2Zyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUKIAogbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ2LDE2ICs0NiwxNiBAQCBjbGFzcyBKU0JhY2tl
bmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgZGVmIHNob3VsZF9nZW5lcmF0
ZV9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxm
LnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICBkb21haW5fZW51
bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRp
b24udHlwZSwgRW51bVR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgZG9tYWluX2Vu
dW1fdHlwZXMgPSBbZGVjbGFyYXRpb24gZm9yIGRlY2xhcmF0aW9uIGluIHR5cGVfZGVjbGFyYXRp
b25zIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpXQogICAgICAgICBy
ZXR1cm4gbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAgb3IgbGVuKHNl
bGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBl
cykgPiAwCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0
dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91
bGRfZ2VuZXJhdGVfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkp
CiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWN0aW9ucyA9IFtd
CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5z
X3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5n
ZW5lcmF0ZV9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCiAgICAgICAgIHJl
dHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKIAogICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2Vs
ZiwgZG9tYWluKToKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgY29tbWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9k
b21haW4oZG9tYWluKQogICAgICAgICBldmVudHMgPSBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRv
bWFpbikKIAotICAgICAgICBoYXNfYXN5bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBjb21t
YW5kOiBjb21tYW5kLmlzX2FzeW5jLCBjb21tYW5kcykpCisgICAgICAgIGhhc19hc3luY19jb21t
YW5kcyA9IGFueShbY29tbWFuZC5pc19hc3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5kc10pCiAg
ICAgICAgIGlmIGxlbihldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFpbilzRGlz
cGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQo
SW5zcGVjdG9yQmFja2VuZCwgIiUoZG9tYWluKXMiKTsnICUgYXJncykKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CmluZGV4IDAwMzU3NTY3ZThjLi42MTQ2ZDc3MjZkMSAxMDA3NTUKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQpAQCAtMzAsMTEgKzMwLDExIEBAIGltcG9ydCBzdHJpbmcKIGltcG9y
dCByZQogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBp
bXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9t
IG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2Jq
Q0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBv
cnQgQ3BwR2VuZXJhdG9yCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSAu
bW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2Jq
Q0dlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCiAKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gJyVzQmFj
a2VuZERpc3BhdGNoZXJzLmgnICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxk
X2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJh
dGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgaGVhZGVycyA9
IFsKQEAgLTY0LDcgKzY0LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQcmVs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5l
eHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9n
ZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKSkK
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
ICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGFkNTYxNjUxNmJiLi5kOTllOWNjN2U2NCAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTMwLDExICsz
MCwxMSBAQCBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1w
bGF0ZQogCi1mcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgotZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUs
IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBp
bXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1l
Ci1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBs
YXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5l
cmF0b3IKK2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIC5tb2RlbHMgaW1w
b3J0IFByaW1pdGl2ZVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcworZnJv
bSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3Is
IGpvaW5fdHlwZV9hbmRfbmFtZQorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgT2JqQ0JhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAg
ICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1l
KCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4g
ZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4sIEdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIo
c2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToK
ICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkBAIC02NSw3ICs2NSw3IEBAIGNsYXNzIE9i
akNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdl
bmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2Vs
Zi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluLCBkb21haW5zKSkK
KyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJf
aW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbiwgZG9tYWlucykpKQogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJl
dHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIApAQCAtMTE0LDcgKzExNCw3IEBAIGNsYXNzIE9i
akNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7JykKIAotICAgICAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJh
bWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6IG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIu
dHlwZSksIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpCisgICAgICAgICAgICByZXF1aXJlZF9w
b2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVycyBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2Vu
ZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAgICAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAg
ICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19p
ZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
JXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCkBAIC0xMjIsNyArMTIyLDcgQEAg
Y2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dl
bmVyYXRvcik6CiAgICAgICAgICAgICAgICAgaWYgb2JqY19hcnJheV9jbGFzcyBhbmQgb2JqY19h
cnJheV9jbGFzcy5zdGFydHN3aXRoKHNlbGYub2JqY19wcmVmaXgoKSk6CiAgICAgICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
X0lOX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKHZhcl9uYW1lLCBvYmpjX2FycmF5X2NsYXNz
KSkKIAotICAgICAgICAgICAgb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxh
bWJkYSBwYXJhbWV0ZXI6IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5p
c190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVycykKKyAgICAgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtw
YXJhbWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRl
cl90eXBlKHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0
aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2Jq
Q0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25h
bWUsIHZhcl9uYW1lKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CmluZGV4IGEyMzJlMmNlNDM5Li4wMDQ0OGIw
ZjAyYyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CkBAIC0yOSw5ICsyOSw5IEBAIGltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dl
bmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5l
cmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIC5v
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
T2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDkxMGJjYmFiMTM1Li45OTM1ODc3YWVj
ZSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMjksOSArMjksOSBAQCBp
bXBvcnQgbG9nZ2luZwogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRl
CiAKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3Ig
aW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2Zyb20gLmdlbmVyYXRv
ciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVy
YXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ds
b2JhbCcpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRl
eCA2NTRmOWI0YmY4YS4uMGZlZmQ3YTZlZTIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkKQEAgLTI5LDEwICsyOSwxMCBAQCBpbXBvcnQgbG9nZ2luZwogaW1w
b3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Ci1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9t
IG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBh
cyBPYmpDVGVtcGxhdGVzCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IK
K2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5vYmpjX2dl
bmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3Mg
T2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogICAgICAgICByZXR1cm4gJyVzRXZlbnREaXNwYXRjaGVycy5tbScgJSBzZWxmLnByb3Rv
Y29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4sIEdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChm
aWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2Vs
Zik6CiAgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwpAQCAtNjIsNyArNjIsNyBAQCBjbGFz
cyBPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
T2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipo
ZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQorICAgICAgICBzZWN0
aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KE9iakNUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAq
KmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkBA
IC0xMDAsNyArMTAwLDcgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBj
b25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVy
KCk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIHJlcXVpcmVkX3BvaW50
ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1iZGEgcGFyYW1ldGVyOiBub3QgcGFyYW1ldGVyLmlz
X29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFy
YW1ldGVyLnR5cGUpLCBldmVudC5ldmVudF9wYXJhbWV0ZXJzKQorICAgICAgICByZXF1aXJlZF9w
b2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZl
bnRfcGFyYW1ldGVycyBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJh
dG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAgICAgICBm
b3IgcGFyYW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKICAgICAgICAgICAg
IHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFy
X25hbWUsIHZhcl9uYW1lKSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBPYmpDRnJvbnRlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
ICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgo
c2VsZi5vYmpjX3ByZWZpeCgpKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUg
KHZhcl9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKIAotICAgICAgICBvcHRpb25hbF9wb2ludGVy
X3BhcmFtZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogcGFyYW1ldGVyLmlzX29wdGlv
bmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVy
LnR5cGUpLCBldmVudC5ldmVudF9wYXJhbWV0ZXJzKQorICAgICAgICBvcHRpb25hbF9wb2ludGVy
X3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFy
YW1ldGVycyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlw
ZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgdmFyX25hbWUg
PSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUs
IHZhcl9uYW1lKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkK
aW5kZXggYTgzNDNlNmU2M2UuLjBhOTllMmY2OGJhIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2hlYWRlci5weQpAQCAtMjksMTAgKzI5LDEwIEBAIGltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVj
dFR5cGUsIEVudW1UeXBlLCBQbGF0Zm9ybXMKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9i
akNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJv
bSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gLm1vZGVscyBpbXBv
cnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIFBsYXRmb3JtcworZnJvbSAub2JqY19nZW5lcmF0b3Ig
aW1wb3J0IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQorZnJvbSAub2JqY19nZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1w
bGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTYwLDkgKzYw
LDkgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAg
fQogCiAgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAg
ICB0eXBlX2RvbWFpbnMgPSBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2Rv
bWFpbiwgZG9tYWlucykKLSAgICAgICAgY29tbWFuZF9kb21haW5zID0gZmlsdGVyKHNlbGYuc2hv
dWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4sIGRvbWFpbnMpCi0gICAgICAgIGV2ZW50
X2RvbWFpbnMgPSBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4s
IGRvbWFpbnMpCisgICAgICAgIHR5cGVfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxk
X2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBjb21tYW5kX2Rv
bWFpbnMgPSBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9t
YWluLCBkb21haW5zKSkKKyAgICAgICAgZXZlbnRfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYu
c2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBkb21haW5zKSkKIAogICAgICAgICAj
IEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4MjIyPiBXZWIgSW5zcGVjdG9yOiBSZWR1
Y2UgdW5uZWNlc3NhcnkgZW51bXMvdHlwZXMgZ2VuZXJhdGVkIGluIE9iakMgUHJvdG9jb2wgSW50
ZXJmYWNlcwogICAgICAgICAjIEN1cnJlbnRseSB3ZSBnZW5lcmF0ZSBlbnVtcy90eXBlcyBmb3Ig
YWxsIHR5cGVzIGluIHRoZSB0eXBlX2RvbWFpbnMuIEZvciB0aGUgYnVpbHQtaW4KQEAgLTcyLDE0
ICs3MiwxNCBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAg
ICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0
ZXMuSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVy
YXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zLCB0eXBlX2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfZm9y
d2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlucykgaWYgX2ZdKSkKICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZm9yX3BsYXRmb3JtcygpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVf
ZW51bXMsIHR5cGVfZG9tYWlucykpKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9p
bihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpKSkp
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2Vs
Zi5fZ2VuZXJhdGVfZW51bXMsIHR5cGVfZG9tYWlucykgaWYgX2ZdKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV90eXBl
cywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQogCiAgICAgICAgIGlmIHNlbGYuZ2V0X2dlbmVyYXRv
cl9zZXR0aW5nKCdnZW5lcmF0ZV9iYWNrZW5kJywgRmFsc2UpOgotICAgICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfY29t
bWFuZF9wcm90b2NvbHMsIGNvbW1hbmRfZG9tYWlucykpKSkKLSAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50
X2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoJ1xuXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfY29tbWFuZF9w
cm90b2NvbHMsIGNvbW1hbmRfZG9tYWlucykgaWYgX2ZdKSkKKyAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG5cbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVu
dF9pbnRlcmZhY2VzLCBldmVudF9kb21haW5zKSBpZiBfZl0pKQogCiAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRl
KE5vbmUpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCkBAIC0xNzEsOCAr
MTcxLDggQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7JykKICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7JykKIAotICAgICAgICByZXF1aXJlZF9tZW1iZXJz
ID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0
aW9uLnR5cGVfbWVtYmVycykKLSAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1i
ZGEgbWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykK
KyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiBkZWNsYXJh
dGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5pc19vcHRpb25hbF0KKyAgICAgICAgb3B0
aW9uYWxfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21l
bWJlcnMgaWYgbWVtYmVyLmlzX29wdGlvbmFsXQogICAgICAgICBpZiByZXF1aXJlZF9tZW1iZXJz
OgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zv
cl9yZXF1aXJlZF9tZW1iZXJzKGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMp
KQogICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2ludGVybmFsX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5CmluZGV4IGI2
ZTRhZDVlOTE4Li5iZDRkMWZjMTA3NCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkKQEAgLTI5LDkgKzI5LDkgQEAgaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1m
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG9iamNfZ2VuZXJh
dG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitmcm9tIC5nZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSAub2JqY19nZW5lcmF0b3IgaW1w
b3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
T2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC01NSwxMiArNTUsMTIgQEAgY2xhc3MgT2JqQ0ludGVy
bmFsSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2luY2x1ZGVz
JzogJ1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhl
YWRlcnMpXSksCiAgICAgICAgIH0KIAotICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKHNl
bGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKSkKKyAgICAgICAgZXZlbnRfZG9tYWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxk
X2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkp
CiAKICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLkdlbmVyaWNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUs
IG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcywg
ZXZlbnRfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKFtf
ZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9p
bnRlcmZhY2VzLCBldmVudF9kb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5HZW5lcmljSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0
aW9ucykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKaW5kZXggODRj
YmRkYTE3NzMuLjQ4MmU0ZWNjNWU3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19o
ZWFkZXIucHkKQEAgLTI5LDEwICsyOSwxMCBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHN0cmlu
ZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBH
ZW5lcmF0b3IKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZv
cm1zCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpD
VGVtcGxhdGVzCitmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSAubW9kZWxz
IGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCitmcm9tIC5vYmpjX2dlbmVy
YXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgT2Jq
Q1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgog
ICAgICAgICByZXR1cm4gJyVzVHlwZUNvbnZlcnNpb25zLmgnICUgc2VsZi5wcm90b2NvbF9uYW1l
KCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4g
ZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIoc2Vs
Zi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAg
ICAgaGVhZGVycyA9IFsKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNv
bnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJQcmVs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJTdGFuZGFy
ZCkuc3Vic3RpdHV0ZShOb25lKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2VudW1fY29udmVyc2lvbl9mb3JfcGxhdGZvcm1zKCkpCi0gICAgICAgIHNlY3Rpb25zLmV4
dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlu
cykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVt
X2NvbnZlcnNpb25fZnVuY3Rpb25zLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclBvc3RsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpv
aW4oc2VjdGlvbnMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9u
c19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBs
ZW1lbnRhdGlvbi5weQppbmRleCA0MjkzZTNiZDg0Yy4uNjk0Zjk4NDYxYTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTI4LDEw
ICsyOCwxMCBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCiAKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLWZyb20gbW9k
ZWxzIGltcG9ydCBFbnVtVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwg
UHJpbWl0aXZlVHlwZSwgRnJhbWV3b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2Jq
Q0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBH
ZW5lcmF0b3IKK2Zyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIEFycmF5
VHlwZSwgQWxpYXNlZFR5cGUsIFByaW1pdGl2ZVR5cGUsIEZyYW1ld29ya3MKK2Zyb20gLm9iamNf
Z2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBs
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTAsNyArNTAsNyBAQCBjbGFz
cyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpD
R2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICclc1R5cGVDb252ZXJzaW9ucy5tbScgJSBzZWxm
LnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFp
biwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBs
aXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5CmluZGV4IDBiYTU1ZWU4ZDQxLi5iZDVmMTFlNTRjNiAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0yOSwxMCArMjksMTAgQEAgaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9t
IGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQg
T2JqZWN0VHlwZSwgRW51bVR5cGUsIEZyYW1ld29ya3MKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1w
b3J0IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMK
K2Zyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIC5tb2RlbHMg
aW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlLCBGcmFtZXdvcmtzCitmcm9tIC5vYmpjX2dlbmVy
YXRvciBpbXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvcgorZnJvbSAub2JqY19n
ZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNU
ZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTUxLDcg
KzUxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICclc1R5cGVzLm1tJyAlIHNlbGYucHJvdG9j
b2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGxpc3QoZmls
dGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
CiAgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwpAQCAtNzUsNyArNzUsNyBAQCBjbGFzcyBP
YmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgog
ICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuZ2VuZXJhdGVfdHlwZV9pbXBs
ZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAo
c2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9ucywgZG9tYWlucykpKQogICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCiAKQEAgLTk1LDcgKzk1LDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29s
VHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9pbml0X21ldGhvZF9mb3JfcGF5bG9hZChkb21haW4sIGRlY2xhcmF0aW9uKSkKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcHJvdG9jb2xf
b2JqZWN0KGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0g
ZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1l
bWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5pc19vcHRpb25h
bF0KICAgICAgICAgaWYgcmVxdWlyZWRfbWVtYmVyczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9pbml0X21ldGhv
ZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1i
ZXJzKSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcmV0dXJuIG5pbDsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKLSAgICAgICAg
cmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IE9iakNHZW5l
cmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShtZW1iZXIudHlwZSksIHJlcXVpcmVkX21l
bWJlcnMpCisgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1l
bWJlciBpbiByZXF1aXJlZF9tZW1iZXJzIGlmIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3Bv
aW50ZXJfdHlwZShtZW1iZXIudHlwZSldCiAgICAgICAgIGlmIHJlcXVpcmVkX3BvaW50ZXJfbWVt
YmVyczoKICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJz
OgogICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3Rv
X29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHkKaW5kZXggM2Y0OTY2YjQ4NDIuLmQ5Mzk2YWZjNTJlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9y
LnB5CkBAIC0yOSw4ICsyOSw4IEBAIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUKIGZyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRp
dmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJh
bWV3b3JrcywgUGxhdGZvcm1zCitmcm9tIC5nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIC5tb2RlbHMgaW1wb3J0IFByaW1pdGl2
ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFt
ZXdvcmtzLCBQbGF0Zm9ybXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAK
QEAgLTE0MSw3ICsxNDEsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAKICAgICAjIFRoZXNlIG1ldGhv
ZHMgYXJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KICAgICBkZWYgbm9uX3N1cHBsZW1lbnRh
bF9kb21haW5zKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IG5v
dCBkb21haW4uaXNfc3VwcGxlbWVudGFsLCBzZWxmLm1vZGVsKCkuZG9tYWlucykKKyAgICAgICAg
cmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBpbiBzZWxmLm1vZGVsKCkuZG9tYWlucyBpZiBub3Qg
ZG9tYWluLmlzX3N1cHBsZW1lbnRhbF0KIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNl
bGYpOgogICAgICAgICByZXR1cm4gc2VsZi5ub25fc3VwcGxlbWVudGFsX2RvbWFpbnMoKQpAQCAt
MTc3LDcgKzE3Nyw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgZmllbGRzID0gc2V0KF9U
WVBFU19XSVRIX09QRU5fRklFTERTLmdldCh0eXBlX2RlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVk
X25hbWUoKSwgW10pKQogICAgICAgICBpZiBub3QgZmllbGRzOgogICAgICAgICAgICAgcmV0dXJu
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzCi0gICAgICAgIHJldHVybiBmaWx0ZXIobGFt
YmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lIGluIGZpZWxkcywgdHlwZV9kZWNsYXJhdGlv
bi50eXBlX21lbWJlcnMpCisgICAgICAgIHJldHVybiBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbWVtYmVyLm1lbWJlcl9uYW1lIGluIGZpZWxk
c10KIAogICAgIGRlZiB0eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoc2VsZiwgX3R5cGUpOgog
ICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX3R5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0
aW9ucyIpOgpAQCAtMTkwLDcgKzE5MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAjIHNldCBv
ZiB0eXBlcyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHJlZ2VuZXJhdGVkIG9uIHN1YnNlcXVl
bnQgY2FsbHMgdG8KICAgICAjIEdlbmVyYXRvci50eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlv
bnMoKS4KICAgICBkZWYgY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25z
KHNlbGYsIGRvbWFpbnMpOgotICAgICAgICBkb21haW5fbmFtZXMgPSBtYXAobGFtYmRhIGRvbWFp
bjogZG9tYWluLmRvbWFpbl9uYW1lLCBkb21haW5zKQorICAgICAgICBkb21haW5fbmFtZXMgPSBb
ZG9tYWluLmRvbWFpbl9uYW1lIGZvciBkb21haW4gaW4gZG9tYWluc10KICAgICAgICAgbG9nLmRl
YnVnKCI+IENhbGN1bGF0aW5nIHR5cGVzIHRoYXQgbmVlZCBzaGFwZSBhc3NlcnRpb25zIChlbGln
aWJsZSBkb21haW5zOiAlcykiICUgIiwgIi5qb2luKGRvbWFpbl9uYW1lcykpCiAKICAgICAgICAg
IyBNdXRhdGVzIHRoZSBwYXNzZWQtaW4gc2V0OyB0aGlzIHNpbXBsaWZpZXMgY2hlY2tzIHRvIHBy
ZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uLgpAQCAtMjQ2LDcgKzI0Niw3IEBAIGNsYXNzIEdlbmVy
YXRvcjoKICAgICAgICAgZm9yIF90eXBlIGluIGFsbF90eXBlczoKICAgICAgICAgICAgIGlmIG5v
dCBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgY29udGludWUK
LSAgICAgICAgICAgIG1hcChzZWxmLl9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUsIF90
eXBlLmVudW1fdmFsdWVzKCkpCisgICAgICAgICAgICBsaXN0KG1hcChzZWxmLl9hc3NpZ25fZW5j
b2RpbmdfZm9yX2VudW1fdmFsdWUsIF90eXBlLmVudW1fdmFsdWVzKCkpKQogCiAgICAgZGVmIF9h
c3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoc2VsZiwgZW51bV92YWx1ZSk6CiAgICAgICAg
IGlmIGVudW1fdmFsdWUgaW4gc2VsZi5fZW51bV92YWx1ZV9lbmNvZGluZ3M6CkBAIC0yODAsNyAr
MjgwLDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgcmV0dXJuIF9BTFdBWVNfU1BF
Q0lBTENBU0VEX0VOVU1fVkFMVUVfTE9PS1VQX1RBQkxFW21hdGNoLmdyb3VwKDEpLnVwcGVyKCld
CiAKICAgICAgICAgIyBTcGxpdCBvbiBoeXBoZW4sIGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBm
b3JjZSB1cHBlcmNhc2luZyBvZiBhY3Jvbnltcy4KLSAgICAgICAgc3Vid29yZHMgPSBtYXAodWNm
aXJzdCwgX0VOVU1fSURFTlRJRklFUl9SRU5BTUVfTUFQLmdldChlbnVtX3ZhbHVlLCBlbnVtX3Zh
bHVlKS5zcGxpdCgnLScpKQorICAgICAgICBzdWJ3b3JkcyA9IGxpc3QobWFwKHVjZmlyc3QsIF9F
TlVNX0lERU5USUZJRVJfUkVOQU1FX01BUC5nZXQoZW51bV92YWx1ZSwgZW51bV92YWx1ZSkuc3Bs
aXQoJy0nKSkpCiAgICAgICAgIHJldHVybiByZS5zdWIocmUuY29tcGlsZShyZWdleCwgcmUuSUdO
T1JFQ0FTRSksIHJlcGxhY2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3JkcykpCiAKICAgICBAc3Rh
dGljbWV0aG9kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKaW5kZXggY2E5MWQ3MWM3YzUuLmQwOWIyNDJmOGJm
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9tb2RlbHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vbW9kZWxzLnB5CkBAIC0zNSw3ICszNSw3IEBAIGRlZiB1Y2ZpcnN0KHN0cik6
CiAKIAogZGVmIGZpbmRfZHVwbGljYXRlcyhsKToKLSAgICByZXR1cm4gW2tleSBmb3Iga2V5LCBj
b3VudCBpbiBjb2xsZWN0aW9ucy5Db3VudGVyKGwpLml0ZW1zKCkgaWYgY291bnQgPiAxXQorICAg
IHJldHVybiBba2V5IGZvciBrZXksIGNvdW50IGluIGxpc3QoY29sbGVjdGlvbnMuQ291bnRlcihs
KS5pdGVtcygpKSBpZiBjb3VudCA+IDFdCiAKIAogX0ZSQU1FV09SS19DT05GSUdfTUFQID0gewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vb2JqY19nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQppbmRleCBlNTJmMzE1NDRjMS4uZTRjZTAx
ZjgxYWIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CkBAIC0yNCw4ICsyNCw4
IEBACiAjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcK
LWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGlt
cG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlh
c2VkVHlwZSwgRnJhbWV3b3JrcworZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVj
Zmlyc3QKK2Zyb20gLm1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJy
YXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKIAogbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTUwLDcgKzUwLDcgQEAgX09CSkNfSURFTlRJRklF
Ul9SRU5BTUVfTUFQID0gewogICAgICdpZCc6ICdpZGVudGlmaWVyJywgICMgUGFnZS5GcmFtZS5p
ZCwgUnVudGltZS5FeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb24uaWQsIERlYnVnZ2VyLkJyZWFr
cG9pbnRBY3Rpb24uaWQKIH0KIAotX09CSkNfSURFTlRJRklFUl9SRVZFUlNFX1JFTkFNRV9NQVAg
PSBkaWN0KCh2LCBrKSBmb3IgaywgdiBpbiBfT0JKQ19JREVOVElGSUVSX1JFTkFNRV9NQVAuaXRl
cml0ZW1zKCkpCitfT0JKQ19JREVOVElGSUVSX1JFVkVSU0VfUkVOQU1FX01BUCA9IGRpY3QoKHYs
IGspIGZvciBrLCB2IGluIF9PQkpDX0lERU5USUZJRVJfUkVOQU1FX01BUC5pdGVtcygpKQogCiAK
IGNsYXNzIE9iakNUeXBlQ2F0ZWdvcnk6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9nZW5lcmF0ZVdhc20ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5l
cmF0ZVdhc20ucHkKaW5kZXggMTY4ODdlY2Y5NWUuLmYwYjZiNThiZTQ4IDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc20ucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtLnB5CkBAIC03MSw3ICs3MSw3IEBAIGNsYXNz
IFdhc206CiAgICAgICAgICMgV2UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2UgcHl0aG9uIGlzIGR1
bWIgYW5kIHdvbid0IGxldCBtZSB1c2Ugc2VsZiBpbiB0aGUgbGFtYmRhLCB3aGljaCBpcyByaWRp
Y3Vsb3VzLgogICAgICAgICBpZiByZXQgPT0gTm9uZToKICAgICAgICAgICAgIHJldCA9IGxhbWJk
YSBvcDogeyJuYW1lIjogb3AsICJvcGNvZGUiOiBzZWxmLm9wY29kZXNbb3BdfQotICAgICAgICBm
b3Igb3AgaW4gc2VsZi5vcGNvZGVzLml0ZXJrZXlzKCk6CisgICAgICAgIGZvciBvcCBpbiBzZWxm
Lm9wY29kZXMua2V5cygpOgogICAgICAgICAgICAgaWYgZmlsdGVyKHNlbGYub3Bjb2Rlc1tvcF0p
OgogICAgICAgICAgICAgICAgIHlpZWxkIHJldChvcCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvZ2VuZXJhdGVZYXJyQ2Fub25pY2FsaXplVW5pY29kZSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUKaW5k
ZXggYTEwM2JjZGYxNmQuLmI4OTc3Nzk1NzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9nZW5lcmF0ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUKQEAgLTMx
LDcgKzMxLDYgQEAgaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0
IHN5cwotZnJvbSBzZXRzIGltcG9ydCBTZXQKIAogaGVhZGVyID0gIiIiLyoKICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTgwLDcgKzc5LDcg
QEAgZGVmIG9wZW5PckV4aXQocGF0aCwgbW9kZSk6CiAgICAgICAgICAgICBvcy5tYWtlZGlycyhk
aXJuYW1lKQogICAgICAgICByZXR1cm4gb3BlbihwYXRoLCBtb2RlKQogICAgIGV4Y2VwdCBJT0Vy
cm9yIGFzIGU6Ci0gICAgICAgIHByaW50ICJJL08gZXJyb3Igb3BlbmluZyB7MH0sICh7MX0pOiB7
Mn0iLmZvcm1hdChwYXRoLCBlLmVycm5vLCBlLnN0cmVycm9yKQorICAgICAgICBwcmludCgiSS9P
IGVycm9yIG9wZW5pbmcgezB9LCAoezF9KTogezJ9Ii5mb3JtYXQocGF0aCwgZS5lcnJubywgZS5z
dHJlcnJvcikpCiAgICAgICAgIGV4aXQoMSkKIAogY2xhc3MgQ2Fub25pY2FsaXplOgpAQCAtOTMs
NyArOTIsNyBAQCBjbGFzcyBDYW5vbmljYWxpemU6CiAgICAgICAgIHNlbGYuY2Fub25pY2FsR3Jv
dXBzW21hcHBpbmddLmFwcGVuZChjb2RlKQogICAgICAgICAKICAgICBkZWYgcmVhZENhc2VGb2xk
aW5nKHNlbGYsIGZpbGUpOgotICAgICAgICBjb2Rlc1NlZW4gPSBTZXQoKQorICAgICAgICBjb2Rl
c1NlZW4gPSBzZXQoKQogICAgICAgICBmb3IgbGluZSBpbiBmaWxlOgogICAgICAgICAgICAgbGlu
ZSA9IGxpbmUuc3BsaXQoJyMnLCAxKVswXQogICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlw
KCkKQEAgLTE1NCw4ICsxNTMsOCBAQCBjbGFzcyBDYW5vbmljYWxpemU6CiAgICAgICAgIAogICAg
ICAgICBmb3IgaSBpbiByYW5nZShsZW4oY2hhcmFjdGVyU2V0cykpOgogICAgICAgICAgICAgY2hh
cmFjdGVycyA9ICIiCi0gICAgICAgICAgICBzZXQgPSBjaGFyYWN0ZXJTZXRzW2ldCi0gICAgICAg
ICAgICBmb3IgY2ggaW4gc2V0OgorICAgICAgICAgICAgY3VyX3NldCA9IGNoYXJhY3RlclNldHNb
aV0KKyAgICAgICAgICAgIGZvciBjaCBpbiBjdXJfc2V0OgogICAgICAgICAgICAgICAgIGNoYXJh
Y3RlcnMgPSBjaGFyYWN0ZXJzICsgIjB4e2NoYXJhY3RlcjowNHh9LCAiLmZvcm1hdChjaGFyYWN0
ZXI9Y2gpCiAgICAgICAgICAgICBmaWxlLndyaXRlKCJjb25zdCBVQ2hhcjMyIHVuaWNvZGVDaGFy
YWN0ZXJTZXR7aW5kZXg6ZH1bXSA9IHt7IHtjaGFyYWN0ZXJzfTAgfX07XG4iLmZvcm1hdChpbmRl
eD1pLCBjaGFyYWN0ZXJzPWNoYXJhY3RlcnMpKQogCkBAIC0xODksNyArMTg4LDcgQEAgaWYgX19u
YW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBjYXNlRm9sZGluZ1R4dFBhdGggPSBhcmdzWzBdCiAg
ICAgY2Fub25pY2FsaXplSFBhdGggPSBhcmdzWzFdCiAgICAgY2FzZUZvbGRpbmdUeHRGaWxlID0g
b3Blbk9yRXhpdChjYXNlRm9sZGluZ1R4dFBhdGgsICJyIikKLSAgICBjYW5vbmljYWxpemVIRmls
ZSA9IG9wZW5PckV4aXQoY2Fub25pY2FsaXplSFBhdGgsICJ3YiIpCisgICAgY2Fub25pY2FsaXpl
SEZpbGUgPSBvcGVuT3JFeGl0KGNhbm9uaWNhbGl6ZUhQYXRoLCAidyIpCiAKICAgICBjYW5vbmlj
YWxpemUgPSBDYW5vbmljYWxpemUoKQogICAgIGNhbm9uaWNhbGl6ZS5yZWFkQ2FzZUZvbGRpbmco
Y2FzZUZvbGRpbmdUeHRGaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvZ2VuZXJhdGVZYXJyVW5pY29kZVByb3BlcnR5VGFibGVzLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvZ2VuZXJhdGVZYXJyVW5pY29kZVByb3BlcnR5VGFibGVzLnB5CmluZGV4IGY4
YmM2ODA1ZDcwLi5jZWI1YzhmNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvZ2VuZXJhdGVZYXJyVW5pY29kZVByb3BlcnR5VGFibGVzLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL2dlbmVyYXRlWWFyclVuaWNvZGVQcm9wZXJ0eVRhYmxlcy5weQpA
QCAtMzIyLDcgKzMyMiw3IEBAIGNsYXNzIFByb3BlcnR5RGF0YToKICAgICAgICAgaW5zZXJ0TG9j
YXRpb24gPSBOb25lCiAgICAgICAgIGxvd0NvZGVQb2ludCA9IE5vbmUKICAgICAgICAgaGlnaENv
ZGVQb2ludCA9IE5vbmUKLSAgICAgICAgZm9yIGlkeCBpbiB4cmFuZ2UobGVuKG1hdGNoZXMpKToK
KyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4obWF0Y2hlcykpOgogICAgICAgICAgICAgbWF0
Y2ggPSBtYXRjaGVzW2lkeF0KICAgICAgICAgICAgIGlmIGNvZGVQb2ludCA9PSBtYXRjaCArIDE6
CiAgICAgICAgICAgICAgICAgbG93Q29kZVBvaW50ID0gbWF0Y2gKQEAgLTM1MSwyMiArMzUxLDIy
IEBAIGNsYXNzIFByb3BlcnR5RGF0YToKICAgICAgICAgICAgIGxvd0NvZGVQb2ludCA9IGNvZGVQ
b2ludAogICAgICAgICAgICAgaGlnaENvZGVQb2ludCA9IGNvZGVQb2ludAogCi0gICAgICAgIGZv
ciBpZHggaW4geHJhbmdlKGxlbihyYW5nZXMpKToKLSAgICAgICAgICAgIHJhbmdlID0gcmFuZ2Vz
W2lkeF0KLSAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA+PSByYW5nZVswXSBhbmQgaGlnaENv
ZGVQb2ludCA8PSByYW5nZVsxXToKKyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4ocmFuZ2Vz
KSk6CisgICAgICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNbaWR4XQorICAgICAgICAgICAgaWYg
bG93Q29kZVBvaW50ID49IGN1cl9yYW5nZVswXSBhbmQgaGlnaENvZGVQb2ludCA8PSBjdXJfcmFu
Z2VbMV06CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpZiBsb3dDb2RlUG9p
bnQgPD0gKHJhbmdlWzFdICsgMSkgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gKHJhbmdlWzBdIC0gMSk6
CisgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gKGN1cl9yYW5nZVsxXSArIDEpIGFuZCBo
aWdoQ29kZVBvaW50ID49IChjdXJfcmFuZ2VbMF0gLSAxKToKICAgICAgICAgICAgICAgICB3aGls
ZSBpZHggPCBsZW4ocmFuZ2VzKSBhbmQgaGlnaENvZGVQb2ludCA+PSAocmFuZ2VzW2lkeF1bMF0g
LSAxKToKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAgICAg
ICAgICAgICAgICBsb3dDb2RlUG9pbnQgPSBtaW4obG93Q29kZVBvaW50LCByYW5nZVswXSkKLSAg
ICAgICAgICAgICAgICAgICAgaGlnaENvZGVQb2ludCA9IG1heChoaWdoQ29kZVBvaW50LCByYW5n
ZVsxXSkKKyAgICAgICAgICAgICAgICAgICAgY3VyX3JhbmdlID0gcmFuZ2VzW2lkeF0KKyAgICAg
ICAgICAgICAgICAgICAgbG93Q29kZVBvaW50ID0gbWluKGxvd0NvZGVQb2ludCwgY3VyX3Jhbmdl
WzBdKQorICAgICAgICAgICAgICAgICAgICBoaWdoQ29kZVBvaW50ID0gbWF4KGhpZ2hDb2RlUG9p
bnQsIGN1cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAgICAgZGVsIHJhbmdlc1tpZHhdCi0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENv
dW50IC0gKHJhbmdlWzFdIC0gcmFuZ2VbMF0pIC0gMQorICAgICAgICAgICAgICAgICAgICBzZWxm
LmNvZGVQb2ludENvdW50ID0gc2VsZi5jb2RlUG9pbnRDb3VudCAtIChjdXJfcmFuZ2VbMV0gLSBj
dXJfcmFuZ2VbMF0pIC0gMQogCiAgICAgICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIChs
b3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQpKQogICAgICAgICAgICAgICAgIHNlbGYuY29kZVBv
aW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50ICsgKGhpZ2hDb2RlUG9pbnQgLSBsb3dDb2Rl
UG9pbnQpICsgMQogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZWxpZiBoaWdo
Q29kZVBvaW50IDwgcmFuZ2VbMF06CisgICAgICAgICAgICBlbGlmIGhpZ2hDb2RlUG9pbnQgPCBj
dXJfcmFuZ2VbMF06CiAgICAgICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50ICE9IGhpZ2hDb2Rl
UG9pbnQ6CiAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQoaWR4LCAobG93Q29kZVBv
aW50LCBoaWdoQ29kZVBvaW50KSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRD
b3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgKyAoaGlnaENvZGVQb2ludCAtIGxvd0NvZGVQb2lu
dCkgKyAxCkBAIC0zODQsNyArMzg0LDcgQEAgY2xhc3MgUHJvcGVydHlEYXRhOgogCiAgICAgZGVm
IGFkZFJhbmdlVW5vcmRlcmVkRm9yTWF0Y2hlc0FuZFJhbmdlcyhzZWxmLCBsb3dDb2RlUG9pbnQs
IGhpZ2hDb2RlUG9pbnQsIG1hdGNoZXMsIHJhbmdlcyk6CiAgICAgICAgIGlmIGxlbihtYXRjaGVz
KSBhbmQgaGlnaENvZGVQb2ludCA+PSBtYXRjaGVzWzBdIGFuZCBsb3dDb2RlUG9pbnQgPD0gbWF0
Y2hlc1stMV06Ci0gICAgICAgICAgICBmb3IgaWR4IGluIHhyYW5nZShsZW4obWF0Y2hlcykpOgor
ICAgICAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4obWF0Y2hlcykpOgogICAgICAgICAgICAg
ICAgIG1hdGNoID0gbWF0Y2hlc1tpZHhdCiAgICAgICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50
IDw9IG1hdGNoIGFuZCBoaWdoQ29kZVBvaW50ID49IG1hdGNoOgogICAgICAgICAgICAgICAgICAg
ICB3aGlsZSBpZHggPCBsZW4obWF0Y2hlcykgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gbWF0Y2hlc1tp
ZHhdOgpAQCAtNDE0LDIyICs0MTQsMjIgQEAgY2xhc3MgUHJvcGVydHlEYXRhOgogICAgICAgICAg
ICAgICAgIGVsaWYgaGlnaENvZGVQb2ludCA8IG1hdGNoOgogICAgICAgICAgICAgICAgICAgICBi
cmVhawogCi0gICAgICAgIGZvciBpZHggaW4geHJhbmdlKGxlbihyYW5nZXMpKToKLSAgICAgICAg
ICAgIHJhbmdlID0gcmFuZ2VzW2lkeF0KLSAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA+PSBy
YW5nZVswXSBhbmQgaGlnaENvZGVQb2ludCA8PSByYW5nZVsxXToKKyAgICAgICAgZm9yIGlkeCBp
biByYW5nZShsZW4ocmFuZ2VzKSk6CisgICAgICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNbaWR4
XQorICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50ID49IGN1cl9yYW5nZVswXSBhbmQgaGlnaENv
ZGVQb2ludCA8PSBjdXJfcmFuZ2VbMV06CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
ICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gKHJhbmdlWzFdICsgMSkgYW5kIGhpZ2hDb2RlUG9pbnQg
Pj0gKHJhbmdlWzBdIC0gMSk6CisgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gKGN1cl9y
YW5nZVsxXSArIDEpIGFuZCBoaWdoQ29kZVBvaW50ID49IChjdXJfcmFuZ2VbMF0gLSAxKToKICAg
ICAgICAgICAgICAgICB3aGlsZSBpZHggPCBsZW4ocmFuZ2VzKSBhbmQgaGlnaENvZGVQb2ludCA+
PSAocmFuZ2VzW2lkeF1bMF0gLSAxKToKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5n
ZXNbaWR4XQotICAgICAgICAgICAgICAgICAgICBsb3dDb2RlUG9pbnQgPSBtaW4obG93Q29kZVBv
aW50LCByYW5nZVswXSkKLSAgICAgICAgICAgICAgICAgICAgaGlnaENvZGVQb2ludCA9IG1heCho
aWdoQ29kZVBvaW50LCByYW5nZVsxXSkKKyAgICAgICAgICAgICAgICAgICAgY3VyX3JhbmdlID0g
cmFuZ2VzW2lkeF0KKyAgICAgICAgICAgICAgICAgICAgbG93Q29kZVBvaW50ID0gbWluKGxvd0Nv
ZGVQb2ludCwgY3VyX3JhbmdlWzBdKQorICAgICAgICAgICAgICAgICAgICBoaWdoQ29kZVBvaW50
ID0gbWF4KGhpZ2hDb2RlUG9pbnQsIGN1cl9yYW5nZVsxXSkKICAgICAgICAgICAgICAgICAgICAg
ZGVsIHJhbmdlc1tpZHhdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQg
PSBzZWxmLmNvZGVQb2ludENvdW50IC0gKHJhbmdlWzFdIC0gcmFuZ2VbMF0pIC0gMQorICAgICAg
ICAgICAgICAgICAgICBzZWxmLmNvZGVQb2ludENvdW50ID0gc2VsZi5jb2RlUG9pbnRDb3VudCAt
IChjdXJfcmFuZ2VbMV0gLSBjdXJfcmFuZ2VbMF0pIC0gMQogCiAgICAgICAgICAgICAgICAgcmFu
Z2VzLmluc2VydChpZHgsIChsb3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQpKQogICAgICAgICAg
ICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50ICsgKGhpZ2hD
b2RlUG9pbnQgLSBsb3dDb2RlUG9pbnQpICsgMQogICAgICAgICAgICAgICAgIHJldHVybgotICAg
ICAgICAgICAgZWxpZiBoaWdoQ29kZVBvaW50IDwgcmFuZ2VbMF06CisgICAgICAgICAgICBlbGlm
IGhpZ2hDb2RlUG9pbnQgPCBjdXJfcmFuZ2VbMF06CiAgICAgICAgICAgICAgICAgcmFuZ2VzLmlu
c2VydChpZHgsIChsb3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQpKQogICAgICAgICAgICAgICAg
IHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50ICsgKGhpZ2hDb2RlUG9p
bnQgLSBsb3dDb2RlUG9pbnQpICsgMQogICAgICAgICAgICAgICAgIHJldHVybgpAQCAtNDU5LDEz
ICs0NTksMTMgQEAgY2xhc3MgUHJvcGVydHlEYXRhOgogICAgICAgICAgICAgICAgIHNlbGYuYWRk
UmFuZ2VVbm9yZGVyZWRGb3JNYXRjaGVzQW5kUmFuZ2VzKGZpcnN0VW5pY29kZUNvZGVQb2ludCwg
aGlnaENvZGVQb2ludCwgc2VsZi51bmljb2RlTWF0Y2hlcywgc2VsZi51bmljb2RlUmFuZ2VzKQog
CiAgICAgZGVmIHJlbW92ZU1hdGNoRnJvbVJhbmdlcyhzZWxmLCBjb2RlUG9pbnQsIHJhbmdlcyk6
Ci0gICAgICAgIGZvciBpZHggaW4geHJhbmdlKGxlbihyYW5nZXMpKToKLSAgICAgICAgICAgIHJh
bmdlID0gcmFuZ2VzW2lkeF0KLSAgICAgICAgICAgIGlmIHJhbmdlWzBdIDw9IGNvZGVQb2ludCBh
bmQgY29kZVBvaW50IDw9IHJhbmdlWzFdOgorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihy
YW5nZXMpKToKKyAgICAgICAgICAgIGN1cl9yYW5nZSA9IHJhbmdlc1tpZHhdCisgICAgICAgICAg
ICBpZiBjdXJfcmFuZ2VbMF0gPD0gY29kZVBvaW50IGFuZCBjb2RlUG9pbnQgPD0gY3VyX3Jhbmdl
WzFdOgogICAgICAgICAgICAgICAgIHJhbmdlcy5wb3AoaWR4KQotICAgICAgICAgICAgICAgIGlm
IHJhbmdlWzBdIDwgY29kZVBvaW50IGFuZCBjb2RlUG9pbnQgPCByYW5nZVsxXToKLSAgICAgICAg
ICAgICAgICAgICAgbG93UmFuZ2UgPSAocmFuZ2VbMF0sIGNvZGVQb2ludCAtIDEpCi0gICAgICAg
ICAgICAgICAgICAgIGhpZ2hSYW5nZSA9IChjb2RlUG9pbnQgKyAxLCByYW5nZVsxXSkKKyAgICAg
ICAgICAgICAgICBpZiBjdXJfcmFuZ2VbMF0gPCBjb2RlUG9pbnQgYW5kIGNvZGVQb2ludCA8IGN1
cl9yYW5nZVsxXToKKyAgICAgICAgICAgICAgICAgICAgbG93UmFuZ2UgPSAoY3VyX3JhbmdlWzBd
LCBjb2RlUG9pbnQgLSAxKQorICAgICAgICAgICAgICAgICAgICBoaWdoUmFuZ2UgPSAoY29kZVBv
aW50ICsgMSwgY3VyX3JhbmdlWzFdKQogICAgICAgICAgICAgICAgICAgICAjIFNpbmNlIGxpc3Qu
aW5zZXJ0IGluc2VydHMgYmVmb3JlIHRoZSBpbmRleCBnaXZlbiwgaGFuZGxlIHRoZSBoaWdoIHJh
bmdlIGZpcnN0CiAgICAgICAgICAgICAgICAgICAgIGlmIGhpZ2hSYW5nZVswXSA9PSBoaWdoUmFu
Z2VbMV06CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZE1hdGNoVW5vcmRlcmVkKGhp
Z2hSYW5nZVswXSkKQEAgLTQ3NiwxNCArNDc2LDE0IEBAIGNsYXNzIFByb3BlcnR5RGF0YToKICAg
ICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5p
bnNlcnQoaWR4LCBsb3dSYW5nZSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgICAgICBpZiByYW5nZVswXSA9PSBjb2RlUG9pbnQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByYW5nZSA9IChjb2RlUG9pbnQgKyAxLCByYW5nZVsxXSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgY3VyX3JhbmdlWzBdID09IGNvZGVQb2ludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cl9yYW5nZSA9IChjb2RlUG9pbnQgKyAxLCBjdXJfcmFuZ2VbMV0pCiAgICAgICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IChyYW5nZVswXSwgY29k
ZVBvaW50IC0gMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgcmFuZ2VbMF0gPT0gcmFuZ2VbMV06
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZE1hdGNoVW5vcmRlcmVkKHJhbmdlWzBd
KQorICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3JhbmdlID0gKGN1cl9yYW5nZVswXSwgY29k
ZVBvaW50IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgY3VyX3JhbmdlWzBdID09IGN1cl9y
YW5nZVsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkTWF0Y2hVbm9yZGVyZWQo
Y3VyX3JhbmdlWzBdKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIHJhbmdlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmFuZ2VzLmluc2VydChpZHgsIGN1cl9yYW5nZSkKICAgICAgICAgICAgICAgICBzZWxmLmNv
ZGVQb2ludENvdW50ID0gc2VsZi5jb2RlUG9pbnRDb3VudCAtIDEKICAgICAgICAgICAgICAgICBy
ZXR1cm4KIApAQCAtNzQyLDEzICs3NDIsMTMgQEAgY2xhc3MgU2NyaXB0czoKICAgICAgICAgICAg
ICAgICAgICAgbG93Q29kZVBvaW50ID0gaW50KGNvZGVQb2ludHNbOmRvdERvdF0sIDE2KQogICAg
ICAgICAgICAgICAgICAgICBoaWdoQ29kZVBvaW50ID0gaW50KGNvZGVQb2ludHNbZG90RG90ICsg
MjpdLCAxNikKICAgICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5RGF0YS5hZGRSYW5n
ZShsb3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQpCi0gICAgICAgICAgICAgICAgICAgIGZvciBj
b2RlUG9pbnQgaW4geHJhbmdlKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCArIDEpOgorICAg
ICAgICAgICAgICAgICAgICBmb3IgY29kZVBvaW50IGluIHJhbmdlKGxvd0NvZGVQb2ludCwgaGln
aENvZGVQb2ludCArIDEpOgogICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2NyaXB0RXh0
ZW5zdGlvblByb3BlcnR5RGF0YS5yZW1vdmVNYXRjaChjb2RlUG9pbnQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmhlcml0ZWRTY3JpcHRFeHRlbnNpb25Qcm9wZXJ0eURhdGEucmVtb3ZlTWF0
Y2goY29kZVBvaW50KQogCiAgICAgICAgICMgRm9yIHRoZSBzY3JpcHRzIHRoYXQgZG9uJ3QgaGF2
ZSBhbnkgYWRkaXRpb25hbCBleHRlbnNpb24gY29kZVBvaW50cywgY29weSB0aGUgc2NyaXB0CiAg
ICAgICAgICMgZGF0YSB0byB0aGUgc2NyaXB0IGV4dGVuc2lvbiB3aXRoIHRoZSBzYW1lIG5hbWUK
LSAgICAgICAgZm9yIHNjcmlwdE5hbWUsIHByb3BlcnR5RGF0YSBpbiBzZWxmLnNjcmlwdHNCeU5h
bWUuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBzY3JpcHROYW1lLCBwcm9wZXJ0eURhdGEgaW4g
c2VsZi5zY3JpcHRzQnlOYW1lLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBzY3JpcHROYW1lIG5v
dCBpbiBzZWxmLnNjcmlwdEV4dGVuc2lvbnNCeU5hbWU6CiAgICAgICAgICAgICAgICAgc2VsZi5z
Y3JpcHRFeHRlbnNpb25zQnlOYW1lW3NjcmlwdE5hbWVdID0gcHJvcGVydHlEYXRhCiAKQEAgLTk0
OCw3ICs5NDgsNyBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogCiAgICAgYWxpYXNlcyA9
IEFsaWFzZXMoKQogCi0gICAgcHJvcGVydHlEYXRhSEZpbGUgPSBvcGVuT3JFeGl0KHVuaWNvZGVQ
cm9lcnR5RGF0YUhQYXRoLCAid2IiKQorICAgIHByb3BlcnR5RGF0YUhGaWxlID0gb3Blbk9yRXhp
dCh1bmljb2RlUHJvZXJ0eURhdGFIUGF0aCwgInciKQogCiAgICAgcHJvcGVydHlEYXRhSEZpbGUu
d3JpdGUoaGVhZGVyKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9o
YXNoZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9oYXNoZXIucHkKaW5kZXggY2Yw
MjkwYjVlNWUuLmQ5YmE0ZDBmOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9oYXNoZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvaGFzaGVyLnB5
CkBAIC0zNiw3ICszNiw3IEBAIGRlZiBzdHJpbmdIYXNoKHN0cik6CiAgICAgaGFzaCA9IHN0cmlu
Z0hhc2hpbmdTdGFydFZhbHVlCiAKICAgICBzdHJMZW5ndGggPSBsZW4oc3RyKQotICAgIGNoYXJh
Y3RlclBhaXJzID0gc3RyTGVuZ3RoIC8gMgorICAgIGNoYXJhY3RlclBhaXJzID0gaW50KHN0ckxl
bmd0aCAvIDIpCiAgICAgcmVtYWluZGVyID0gc3RyTGVuZ3RoICYgMQogCiAgICAgIyBNYWluIGxv
b3AKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA2OTRiNThmODZiZi4uZmNmZTk0OGRiODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxOC0wOS0xOSAgTWlrZSBHb3JzZSAgPG1nb3JzZUBzdXNlLmNvbT4K
KworICAgICAgICBCdWlsZCB0b29scyBzaG91bGQgd29yayB3aGVuIHRoZSAvdXNyL2Jpbi9weXRo
b24gaXMgcHl0aG9uMworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU2Njc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIChubyBiZWhhdmlvciBjaGFuZ2UpLgorCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jcmVhdGUtaHR0cC1oZWFkZXItbmFtZS10YWJsZTogcmVtb3ZlIHhyZWFk
bGluZXMuCisKIDIwMTgtMDktMTkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTiAocjIzNjAwNik6IE5ldyB3YWl0aW5nRm9yS2V5KCkgcmVxdWly
ZW1lbnQgYnJlYWtzIE1vZGVybiBFTUUgdGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NyZWF0ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jcmVhdGUtaHR0cC1oZWFkZXItbmFtZS10YWJsZQpp
bmRleCBmNWJlYjYzNzExMi4uNjQ3Y2RkODI0MmYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3JlYXRlLWh0dHAtaGVhZGVyLW5hbWUtdGFibGUKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jcmVhdGUtaHR0cC1oZWFkZXItbmFtZS10YWJs
ZQpAQCAtNDIsNyArNDIsNyBAQCBpbnB1dF9maWxlID0gb3BlbihpbnB1dF9wYXRoKQogaHR0cF9o
ZWFkZXJfbmFtZV90b19pZCA9IHsgfQogaHR0cF9oZWFkZXJfbmFtZXMgPSBbXQogCi1mb3IgbGlu
ZSBpbiBpbnB1dF9maWxlLnhyZWFkbGluZXMoKToKK2ZvciBsaW5lIGluIGlucHV0X2ZpbGU6CiAg
ICAgaHR0cF9oZWFkZXJfbmFtZSA9IGxpbmUuc3RyaXAoKQogICAgIGlmIG5vdCBodHRwX2hlYWRl
cl9uYW1lIG9yIGh0dHBfaGVhZGVyX25hbWVbOjJdID09ICcvLyc6CiAgICAgICAgIGNvbnRpbnVl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAwMzI4ZDgxMThiZi4uN2RiNmZiNWQxYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE4LTA5LTE5ICBNaWtl
IEdvcnNlICA8bWdvcnNlQHN1c2UuY29tPgorCisgICAgICAgIEJ1aWxkIHRvb2xzIHNob3VsZCB3
b3JrIHdoZW4gdGhlIC91c3IvYmluL3B5dGhvbiBpcyBweXRob24zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NzQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvY29weS11c2VyLWludGVy
ZmFjZS1yZXNvdXJjZXMucGw6IFVzZSAkUFlUSE9OIGlmIHNldAorICAgICAgICBpbiB0aGUgZW52
aXJvbm1lbnQuCisKIDIwMTgtMDktMTcgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGdlbmVyYXRlIENTU0tleXdvcmRDb21wbGV0aW9u
cyBmcm9tIGJhY2tlbmQgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
U2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbCBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCmluZGV4IGVi
MzExYzY4NGUwLi4wMGMzOGMxZjMxOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwKQEAg
LTE3Niw2ICsxNzYsOCBAQCBteSAkZXNsaW50TGljZW5zZSA9IHJlYWRMaWNlbnNlRmlsZShGaWxl
OjpTcGVjLT5jYXRmaWxlKCRlc2xpbnRQYXRoLCAnTElDRU5TRScpKQogbXkgJHRocmVlanNMaWNl
bnNlID0gcmVhZExpY2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJHRocmVlanNQYXRoLCAn
TElDRU5TRScpKTsKIG1ha2VfcGF0aCgkcHJvdG9jb2xEaXIsICR0YXJnZXRSZXNvdXJjZVBhdGgp
OwogCiskcHl0aG9uID0gJEVOVnsiUFlUSE9OIn0gaWYgZGVmaW5lZCgkRU5WeyJQWVRIT04ifSk7
CisKICMgQ29weSBvdmVyIGR5bmFtaWNhbGx5IGxvYWRlZCBmaWxlcyBmcm9tIG90aGVyIGZyYW1l
d29ya3MsIGV2ZW4gaWYgd2UgYXJlbid0IGNvbWJpbmluZyByZXNvdXJjZXMuCiBjb3B5KEZpbGU6
OlNwZWMtPmNhdGZpbGUoJEVOVnsnSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUid9
LCAnSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzJyksIEZpbGU6OlNwZWMtPmNhdGZpbGUoJHBy
b3RvY29sRGlyLCAnSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzJykpIG9yIGRpZSAiQ29weSBv
ZiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgZmFpbGVkOiAkISI7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9jbWFrZS9XZWJLaXRDb21tb24uY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0Q29t
bW9uLmNtYWtlCmluZGV4IGQ2NTk1NzdiNTkxLi5mZDhkOGRjZTc2NCAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL1dlYktpdENvbW1vbi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0Q29t
bW9uLmNtYWtlCkBAIC0yMSw5ICsyMSw2IEBAIGlmIChOT1QgSEFTX1JVTl9XRUJLSVRfQ09NTU9O
KQogICAgIGZpbmRfcGFja2FnZShQZXJsTW9kdWxlcyBDT01QT05FTlRTIEpTT046OlBQIFJFUVVJ
UkVEKQogCiAgICAgZmluZF9wYWNrYWdlKFB5dGhvbkludGVycCAyLjcuMCBSRVFVSVJFRCkKLSAg
ICBpZiAoUFlUSE9OX1ZFUlNJT05fTUFKT1IgR1JFQVRFUiAyKQotICAgICAgICBtZXNzYWdlKEZB
VEFMX0VSUk9SICJQeXRob24gMiBpcyByZXF1aXJlZCwgYnV0IFB5dGhvbiAke1BZVEhPTl9WRVJT
SU9OX01BSk9SfSB3YXMgZm91bmQuIikKLSAgICBlbmRpZiAoKQogCiAgICAgIyBXZSBjYW5ub3Qg
Y2hlY2sgZm9yIFJVQllfRk9VTkQgYmVjYXVzZSBpdCBpcyBzZXQgb25seSB3aGVuIHRoZSBmdWxs
IHBhY2thZ2UgaXMgaW5zdGFsbGVkIGFuZAogICAgICMgdGhlIG9ubHkgdGhpbmcgd2UgbmVlZCBp
cyB0aGUgaW50ZXJwcmV0ZXIuIFVubGlrZSBQeXRob24sIGNtYWtlIGRvZXMgbm90IHByb3ZpZGUg
YSBtYWNybwotLSAKMi4xOC4wCgo=
</data>
<flag name="review"
          id="367604"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
    <flag name="commit-queue"
          id="367605"
          type_id="3"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350303</attachid>
            <date>2018-09-20 19:17:31 -0700</date>
            <delta_ts>2018-09-21 09:20:14 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>python3.patch</filename>
            <type>text/plain</type>
            <size>103686</size>
            <attacher name="Mike Gorse">mgorse</attacher>
            
              <data encoding="base64">RnJvbSAzNzllZDdlNmYzMGFmZTMxMmYzNDQ5YjFiYmM3OGYzN2UxZjIzMTkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtlIEdvcnNlIDxtZ29yc2VAYWx1bS53cGkuZWR1PgpEYXRl
OiBXZWQsIDE5IFNlcCAyMDE4IDEwOjM2OjQ5IC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gU3VwcG9y
dCBidWlsZGluZyBvbiBweXRob24gMyAod2Via2l0IzE1NjY3NCkKCi0tLQogQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsrCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgfCAxMDkgKysrKysrKysrKysrKysrKysr
CiAuLi4vU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSAgICAgICAgICAgfCAgMTMgKyst
CiAuLi4vZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHkgICAgICAgfCAgIDIgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2pzbWluLnB5ICAgICAgICB8ICAxOSArLS0K
IC4uLi9TY3JpcHRzL21ha2UtanMtZmlsZS1hcnJheXMucHkgICAgICAgICAgICB8ICAxMCArLQog
Li4uL1NjcmlwdHMvd2tidWlsdGlucy9fX2luaXRfXy5weSAgICAgICAgICAgIHwgICAyICstCiAu
Li4vYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5ICAgICAgfCAgIDIgKy0KIC4u
Lmx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSB8ICAgMiArLQogLi4u
bmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IHwgICAyICstCiAuLi4v
U2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5ICAgICAgfCAgIDcgKy0KIC4uLi9k
aXNhc3NlbWJsZXIvdWRpczg2L3VkX29wY29kZS5weSAgICAgICAgICB8ICAgNCArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRlLWJ5dGVjb2RlLWZpbGVzIHwgIDEwICstCiAuLi4vaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weSAgICAgfCAgNDQgKysrLS0tLQogLi4u
L3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5ICAgICAgICAgIHwgICA4ICstCiAuLi5j
cHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgfCAgMTAgKy0KIC4uLi9n
ZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSB8ICAyMiArKy0tCiAuLi5l
X2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgfCAgMTggKystCiAuLi5n
ZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgfCAgMTggKystCiAuLi5f
Y3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgfCAgMTggKystCiAuLi4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSAgICAgfCAgNTAgKysrKy0tLS0K
IC4uLmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSB8ICAzNCArKyst
LS0KIC4uLi9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgICB8ICAxOSAr
LS0KIC4uLmdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSB8ICAyMSAr
Ky0tCiAuLi5fb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgfCAgMjUg
KystLQogLi4uL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkgICAgIHwgIDEx
ICstCiAuLi5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgfCAgMTEg
Ky0KIC4uLm9iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSB8ICAyMiAr
Ky0tCiAuLi4vc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5ICAgfCAgMzQg
KysrLS0tCiAuLi4vY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSAgfCAg
MTUgKystCiAuLi5lX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkgfCAg
MTggKystCiAuLi5yb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgfCAg
MTYgKystCiAuLi5yYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgfCAg
MjIgKystLQogLi4uL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5ICAgIHwg
IDE4ICstLQogLi4uL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5ICAgICAgIHwg
ICAyICstCiAuLi4vc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5ICAgICAgICAgfCAg
MTAgKy0KIC4uLi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgICB8ICAg
MiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtLnB5ICAgIHwgICAy
ICstCiAuLi4veWFyci9nZW5lcmF0ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlICAgICAgfCAgMTEg
Ky0KIC4uLi95YXJyL2dlbmVyYXRlWWFyclVuaWNvZGVQcm9wZXJ0eVRhYmxlcy5weSB8ICA3MCAr
KysrKy0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvaGFzaGVyLnB5ICAgICAgICAg
IHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
fCAgMTEgKysKIC4uLi9uZXR3b3JrL2NyZWF0ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlICAgICB8
ICAgMiArLQogU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyAgICAgICAgICAgICAgIHwg
IDEwICsrCiAuLi4vU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbCAgfCAg
IDIgKwogU291cmNlL2NtYWtlL1dlYktpdENvbW1vbi5jbWFrZSAgICAgICAgICAgICAgIHwgICAz
IC0KIDQ2IGZpbGVzIGNoYW5nZWQsIDUyMSBpbnNlcnRpb25zKCspLCAyNTEgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDFmOWQ5ZjQxZWJmLi5j
Y2JhYWM4MThiNyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyIEBACisyMDE4LTA5LTIwICBNaWtlIEdvcnNlICA8bWdvcnNlQHN1c2UuY29tPgorCisg
ICAgICAgIEJ1aWxkIHRvb2xzIHNob3VsZCB3b3JrIHdoZW4gdGhlIC91c3IvYmluL3B5dGhvbiBp
cyBweXRob24zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTY2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRDb21tb24uY21ha2U6IEFsbG93IHB5dGhvbiAzLgorCiAy
MDE4LTA5LTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgR1RLKyBsaWJyYXJ5IHZlcnNpb25zIGFmdGVyIHIy
MzUzNjIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4ODFmNjk5NWU4MC4uOWY1OTVjMmMz
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxOC0wOS0y
MCAgTWlrZSBHb3JzZSAgPG1nb3JzZUBzdXNlLmNvbT4KKworICAgICAgICBCdWlsZCB0b29scyBz
aG91bGQgd29yayB3aGVuIHRoZSAvdXNyL2Jpbi9weXRob24gaXMgcHl0aG9uMworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2Njc0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL2Nzc21pbi5w
eToKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5OgorICAgICAgICAo
ZG9fb3Blbik6CisgICAgICAgIChnZW5lcmF0ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMp
OgorICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHk6
CisgICAgICAgICogU2NyaXB0cy9qc21pbi5weToKKyAgICAgICAgKEphdmFzY3JpcHRNaW5pZnku
bWluaWZ5LndyaXRlKToKKyAgICAgICAgKEphdmFzY3JpcHRNaW5pZnkpOgorICAgICAgICAoSmF2
YXNjcmlwdE1pbmlmeS5taW5pZnkpOgorICAgICAgICAqIFNjcmlwdHMvbWFrZS1qcy1maWxlLWFy
cmF5cy5weToKKyAgICAgICAgKGNodW5rKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNj
cmlwdHMvd2tidWlsdGlucy9fX2luaXRfXy5weToKKyAgICAgICAgKiBTY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5OgorICAgICAgICAoZ2VuZXJh
dGVfc2VjdGlvbl9mb3JfZ2xvYmFsX3ByaXZhdGVfY29kZV9uYW1lX21hY3JvKToKKyAgICAgICAg
KiBTY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aGVhZGVyLnB5OgorICAgICAgICAoQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJh
dG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChCdWls
dGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6Cisg
ICAgICAgICogU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5OgorICAgICAgICAo
QnVpbHRpbkZ1bmN0aW9uLl9fbHRfXyk6CisgICAgICAgIChCdWlsdGluc0NvbGxlY3Rpb24uY29w
eXJpZ2h0cyk6CisgICAgICAgIChCdWlsdGluc0NvbGxlY3Rpb24uX3BhcnNlX2Z1bmN0aW9ucyk6
CisgICAgICAgICogZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9vcGNvZGUucHk6CisgICAgICAgIChV
ZE9wY29kZVRhYmxlcy5wcHJpbnQucHJpbnRXYWxrKToKKyAgICAgICAgKiBnZW5lcmF0ZS1ieXRl
Y29kZS1maWxlczoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9f
LnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5w
eToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChD
cHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAo
Q3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUp
OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJh
dGUpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHk6CisgICAgICAgIChDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChDcHBQ
cm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9u
cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJv
dG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcFBy
b3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9jb252ZXJz
aW9uX21ldGhvZHNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fbWFwcGluZ19hbmRfY29udmVyc2lvbl9t
ZXRob2RzKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgor
ICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5OgorICAgICAg
ICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbik6Cisg
ICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToK
KyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6Cisg
ICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9kb21haW4pOgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25f
aW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAg
ICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNGcm9udGVuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk6Cisg
ICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChP
YmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZSk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5w
eToKKyAgICAgICAgKE9iakNJbnRlcm5hbEhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90
b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5
cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAg
ICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9v
dXRwdXQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAo
T2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2Jq
Q1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2Vu
ZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChPYmpDUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9m
b3JfcmVxdWlyZWRfbWVtYmVycyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0b3IucHk6CisgICAgICAgIChHZW5lcmF0b3Iubm9uX3N1cHBsZW1lbnRhbF9kb21h
aW5zKToKKyAgICAgICAgKEdlbmVyYXRvci5vcGVuX2ZpZWxkcyk6CisgICAgICAgIChHZW5lcmF0
b3IuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKToKKyAgICAgICAg
KEdlbmVyYXRvci5fdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcyk6CisgICAgICAgIChH
ZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHk6CisgICAgICAgIChmaW5kX2R1cGxpY2F0ZXMp
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHk6
CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc20ucHk6CisgICAgICAgIChvcGNvZGVJdGVyYXRv
cik6CisgICAgICAgICogeWFyci9nZW5lcmF0ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlOgorICAg
ICAgICAqIHlhcnIvZ2VuZXJhdGVZYXJyVW5pY29kZVByb3BlcnR5VGFibGVzLnB5OgorICAgICAg
ICAqIHlhcnIvaGFzaGVyLnB5OgorICAgICAgICAoc3RyaW5nSGFzaCk6CisKIDIwMTgtMDktMjAg
IFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KIAogICAgICAgICBb
SlNDXSBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQgc2hvd3MgY29udGVudGlvbiBpZiB3
ZSBoYXZlIG1hbnkgSlNTdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKaW5kZXggNDhhOWJiMDQ5YzEuLmRkZTcyMjRh
ZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1q
cy1idWlsdGlucy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0
ZS1qcy1idWlsdGlucy5weQpAQCAtMzEsNiArMzEsNyBAQCBpbXBvcnQgZm5tYXRjaAogaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zCitpbXBvcnQgc3lzCiAKIGxvZ2dp
bmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVs
PWxvZ2dpbmcuRVJST1IpCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKQEAgLTQ2
LDYgKzQ3LDEyIEBAIGRlZiBjb25jYXRlbmF0ZWRfb3V0cHV0X2ZpbGVuYW1lKGJ1aWx0aW5zX2Zp
bGVzLCBmcmFtZXdvcmtfbmFtZSwgZ2VuZXJhdGVfb25seV93CiAgICAgcmV0dXJuIG9zLnBhdGgu
YmFzZW5hbWUoYnVpbHRpbnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnCiAKIAorZGVmIGRvX29wZW4o
ZmlsZSwgbW9kZSk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mby5tYWpvciA9PSAyOgorICAgICAg
ICByZXR1cm4gb3BlbihmaWxlLCBtb2RlKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBvcGVu
KGZpbGUsIG1vZGUsIGVuY29kaW5nPSJVVEYtOCIpCisKIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19m
b3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXRoPU5vbmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdGVuYXRlX291dHB1dD1GYWxzZSwKQEAgLTU5
LDcgKzY2LDcgQEAgZGVmIGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyhidWls
dGluc19maWxlcz1bXSwKICAgICBtb2RlbCA9IEJ1aWx0aW5zQ29sbGVjdGlvbihmcmFtZXdvcmtf
bmFtZT1mcmFtZXdvcmtfbmFtZSkKIAogICAgIGZvciBmaWxlcGF0aCBpbiBidWlsdGluc19maWxl
czoKLSAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIpIGFzIGZpbGU6CisgICAgICAgIHdp
dGggZG9fb3BlbihmaWxlcGF0aCwgInIiKSBhcyBmaWxlOgogICAgICAgICAgICAgZmlsZV90ZXh0
ID0gZmlsZS5yZWFkKCkKICAgICAgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUo
ZmlsZXBhdGgpCiAKQEAgLTE0Niw3ICsxNTMsNyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgogICAgICAgICBmb3IgZmlsZXBhdGggaW4gb3MubGlzdGRpcihhcmdfb3B0aW9ucy5pbnB1dF9k
aXJlY3RvcnkpOgogICAgICAgICAgICAgaW5wdXRfZmlsZXBhdGhzLmFwcGVuZChvcy5wYXRoLmpv
aW4oYXJnX29wdGlvbnMuaW5wdXRfZGlyZWN0b3J5LCBmaWxlcGF0aCkpCiAKLSAgICBpbnB1dF9m
aWxlcGF0aHMgPSBzb3J0ZWQoZmlsdGVyKGxhbWJkYSBuYW1lOiBmbm1hdGNoLmZubWF0Y2gobmFt
ZSwgJyouanMnKSwgaW5wdXRfZmlsZXBhdGhzKSkKKyAgICBpbnB1dF9maWxlcGF0aHMgPSBzb3J0
ZWQoW25hbWUgZm9yIG5hbWUgaW4gaW5wdXRfZmlsZXBhdGhzIGlmIGZubWF0Y2guZm5tYXRjaChu
YW1lLCAnKi5qcycpXSkKIAogICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICdvdXRwdXRfcGF0aCc6
IGFyZ19vcHRpb25zLm91dHB1dF9kaXJlY3RvcnksCkBAIC0xNTksNyArMTY2LDcgQEAgaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKIAogICAgIGxvZy5kZWJ1ZygiR2VuZXJhdGluZyBjb2RlIGZv
ciBidWlsdGlucy4iKQogICAgIGxvZy5kZWJ1ZygiUGFyc2VkIG9wdGlvbnM6IikKLSAgICBmb3Ig
b3B0aW9uLCB2YWx1ZSBpbiBvcHRpb25zLml0ZW1zKCk6CisgICAgZm9yIG9wdGlvbiwgdmFsdWUg
aW4gbGlzdChvcHRpb25zLml0ZW1zKCkpOgogICAgICAgICBsb2cuZGVidWcoIiAgICAlczogJXMi
ICUgKG9wdGlvbiwgdmFsdWUpKQogICAgIGxvZy5kZWJ1ZygiIikKICAgICBsb2cuZGVidWcoIklu
cHV0IGZpbGVzOiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9n
ZW5lcmF0ZUludGxDYW5vbmljYWxpemVMYW5ndWFnZS5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlSW50bENhbm9uaWNhbGl6ZUxhbmd1YWdlLnB5CmluZGV4IDY5ZjNi
ZTgzN2NjLi45NDliMGI2ZTc1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UucHkK
QEAgLTE4OSw3ICsxODksNyBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGludGxD
YW5vbkhQYXRoID0gYXJnc1sxXQogCiAgICAgcmVnaXN0cnlGaWxlID0gb3Blbk9yRXhpdChyZWdp
c3RyeVBhdGgsICJyIikKLSAgICBpbnRsQ2Fub25IRmlsZSA9IG9wZW5PckV4aXQoaW50bENhbm9u
SFBhdGgsICJ3YiIpCisgICAgaW50bENhbm9uSEZpbGUgPSBvcGVuT3JFeGl0KGludGxDYW5vbkhQ
YXRoLCAidyIpCiAKICAgICBpbnRsQ2Fub25IRmlsZS53cml0ZShoZWFkZXIpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2pzbWluLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvanNtaW4ucHkKaW5kZXggMzcyNDE4YjRkMmIuLmZjNjQ3Yzc5ZjM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9qc21pbi5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9qc21pbi5weQpAQCAtNzksMTAgKzc5LDEz
IEBAIGNsYXNzIEphdmFzY3JpcHRNaW5pZnkob2JqZWN0KToKICAgICAgICAgZGVmIHdyaXRlKGNo
YXIpOgogICAgICAgICAgICAgIyBhbGwgb2YgdGhpcyBpcyB0byBzdXBwb3J0IGxpdGVyYWwgcmVn
dWxhciBleHByZXNzaW9ucy4KICAgICAgICAgICAgICMgc2lnaAotICAgICAgICAgICAgaWYgY2hh
ciBpbiAncmV0dXJuJzoKKyAgICAgICAgICAgIGlmIHN0cihjaGFyKSBpbiAncmV0dXJuJzoKICAg
ICAgICAgICAgICAgICBzZWxmLnJldHVybl9idWYgKz0gY2hhcgogICAgICAgICAgICAgICAgIHNl
bGYuaXNfcmV0dXJuID0gc2VsZi5yZXR1cm5fYnVmID09ICdyZXR1cm4nCi0gICAgICAgICAgICBz
ZWxmLm91dHMud3JpdGUoY2hhcikKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFq
b3IgPT0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLm91dHMud3JpdGUoY2hhcikKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5vdXRzLndyaXRlKHN0cihjaGFyKSkKICAg
ICAgICAgICAgIGlmIHNlbGYuaXNfcmV0dXJuOgogICAgICAgICAgICAgICAgIHNlbGYucmV0dXJu
X2J1ZiA9ICcnCiAKQEAgLTExOCw4ICsxMjEsOCBAQCBjbGFzcyBKYXZhc2NyaXB0TWluaWZ5KG9i
amVjdCk6CiAgICAgICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCiAgICAgICAgIGVsaWYgbm90
IHByZXZpb3VzOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgcHJldmlvdXMgPj0g
JyEnOgotICAgICAgICAgICAgaWYgcHJldmlvdXMgaW4gIidcIiI6CisgICAgICAgIGVsaWYgc3Ry
KHByZXZpb3VzKSA+PSAiISI6CisgICAgICAgICAgICBpZiBzdHIocHJldmlvdXMpIGluICInXCIi
OgogICAgICAgICAgICAgICAgIGluX3F1b3RlID0gcHJldmlvdXMKICAgICAgICAgICAgIHdyaXRl
KHByZXZpb3VzKQogICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0gcHJldmlvdXMKQEAg
LTE2Niw3ICsxNjksNyBAQCBjbGFzcyBKYXZhc2NyaXB0TWluaWZ5KG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgICAgIGlmIG51bXNsYXNoZXMgJSAyID09IDA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbl9xdW90ZSA9ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnJy5qb2lu
KHF1b3RlX2J1ZikpCi0gICAgICAgICAgICBlbGlmIG5leHQxIGluICdcclxuJzoKKyAgICAgICAg
ICAgIGVsaWYgc3RyKG5leHQxKSBpbiAnXHJcbic6CiAgICAgICAgICAgICAgICAgaWYgcHJldmlv
dXNfbm9uX3NwYWNlIGluIG5ld2xpbmVlbmRfc3RyaW5ncyBcCiAgICAgICAgICAgICAgICAgICAg
IG9yIHByZXZpb3VzX25vbl9zcGFjZSA+ICd+JzoKICAgICAgICAgICAgICAgICAgICAgd2hpbGUg
MToKQEAgLTE3OSw3ICsxODIsNyBAQCBjbGFzcyBKYXZhc2NyaXB0TWluaWZ5KG9iamVjdCk6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIG5leHQyID4gJ34nIG9yIG5leHQyID09
ICcvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fbmV3bGluZSA9IFRydWUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxpZiBuZXh0
MSA8ICchJyBhbmQgbm90IGluX3JlOgorICAgICAgICAgICAgZWxpZiBzdHIobmV4dDEpIDwgJyEn
IGFuZCBub3QgaW5fcmU6CiAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzX25vbl9zcGFjZSBp
biBzcGFjZV9zdHJpbmdzIFwKICAgICAgICAgICAgICAgICAgICAgb3IgcHJldmlvdXNfbm9uX3Nw
YWNlID4gJ34nKSBcCiAgICAgICAgICAgICAgICAgICAgIGFuZCAobmV4dDIgaW4gc3BhY2Vfc3Ry
aW5ncyBvciBuZXh0MiA+ICd+Jyk6CkBAIC0yMTcsMTQgKzIyMCwxNCBAQCBjbGFzcyBKYXZhc2Ny
aXB0TWluaWZ5KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUgPSBGYWxz
ZQogCiAgICAgICAgICAgICAgICAgd3JpdGUobmV4dDEpCi0gICAgICAgICAgICAgICAgaWYgbm90
IGluX3JlIGFuZCBuZXh0MSBpbiAiJ1wiYCI6CisgICAgICAgICAgICAgICAgaWYgbm90IGluX3Jl
IGFuZCBzdHIobmV4dDEpIGluICInXCJgIjoKICAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUg
PSBuZXh0MQogICAgICAgICAgICAgICAgICAgICBxdW90ZV9idWYgPSBbXQogCiAgICAgICAgICAg
ICBwcmV2aW91cyA9IG5leHQxCiAgICAgICAgICAgICBuZXh0MSA9IG5leHQyCiAKLSAgICAgICAg
ICAgIGlmIHByZXZpb3VzID49ICchJzoKKyAgICAgICAgICAgIGlmIHN0cihwcmV2aW91cykgPj0g
JyEnOgogICAgICAgICAgICAgICAgIHByZXZpb3VzX25vbl9zcGFjZSA9IHByZXZpb3VzCiAKICAg
ICAgICAgICAgIGlmIHByZXZpb3VzID09ICdcXCc6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9tYWtlLWpzLWZpbGUtYXJyYXlzLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvbWFrZS1qcy1maWxlLWFycmF5cy5weQppbmRleCBjMzdjYzEyZjIyZC4u
ODYyNGJmZThkYWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL21h
a2UtanMtZmlsZS1hcnJheXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
bWFrZS1qcy1maWxlLWFycmF5cy5weQpAQCAtMjUsNyArMjUsMTEgQEAgZnJvbSBfX2Z1dHVyZV9f
IGltcG9ydCBwcmludF9mdW5jdGlvbgogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGZyb20gb3B0cGFy
c2UgaW1wb3J0IE9wdGlvblBhcnNlcgotZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2lt
cG9ydCBzeXMKK2lmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKKyAgICBmcm9tIFN0cmlu
Z0lPIGltcG9ydCBTdHJpbmdJTworZWxzZToKKyAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwog
ZnJvbSBqc21pbiBpbXBvcnQgSmF2YXNjcmlwdE1pbmlmeQogCiAKQEAgLTM3LDcgKzQxLDcgQEAg
ZGVmIHN0cmluZ2lmeUNvZGVwb2ludChjb2RlKToKIAogCiBkZWYgY2h1bmsobGlzdCwgY2h1bmtT
aXplKToKLSAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKGxpc3QpLCBjaHVua1NpemUpOgorICAg
IGZvciBpIGluIHJhbmdlKDAsIGxlbihsaXN0KSwgY2h1bmtTaXplKToKICAgICAgICAgeWllbGQg
bGlzdFtpOmkgKyBjaHVua1NpemVdCiAKIApAQCAtODUsNyArODksNyBAQCBkZWYgbWFpbigpOgog
ICAgICAgICBwcmludCgnZXh0ZXJuIGNvbnN0IGNoYXIgezA6c31KYXZhU2NyaXB0W3sxOmR9XTsn
LmZvcm1hdCh2YXJpYWJsZU5hbWUsIHNpemUpLCBmaWxlPWhlYWRlckZpbGUpCiAgICAgICAgIHBy
aW50KCdjb25zdCBjaGFyIHswOnN9SmF2YVNjcmlwdFt7MTpkfV0gPSB7eycuZm9ybWF0KHZhcmlh
YmxlTmFtZSwgc2l6ZSksIGZpbGU9c291cmNlRmlsZSkKIAotICAgICAgICBjb2RlcG9pbnRzID0g
bWFwKG9yZCwgY2hhcmFjdGVycykKKyAgICAgICAgY29kZXBvaW50cyA9IGxpc3QobWFwKG9yZCwg
Y2hhcmFjdGVycykpCiAgICAgICAgIGZvciBjb2RlcG9pbnRDaHVuayBpbiBjaHVuayhjb2RlcG9p
bnRzLCAxNik6CiAgICAgICAgICAgICBwcmludCgnICAgIHswOnN9LCcuZm9ybWF0KCcsJy5qb2lu
KG1hcChzdHJpbmdpZnlDb2RlcG9pbnQsIGNvZGVwb2ludENodW5rKSkpLCBmaWxlPXNvdXJjZUZp
bGUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRp
bnMvX19pbml0X18ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5z
L19faW5pdF9fLnB5CmluZGV4IGQ2ZjkzMjliMmI0Li5mZmE4NDllYTViMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9fX2luaXRfXy5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL19faW5pdF9fLnB5CkBA
IC0xLDMgKzEsMyBAQAogIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCiAKLWZyb20gd2tidWlsdGlucyBpbXBvcnQgKgorZnJvbSAu
d2tidWlsdGlucyBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9oZWFkZXIucHkgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRl
X2NvbWJpbmVkX2hlYWRlci5weQppbmRleCBjZGUzNTdjZDQzOS4uZWFjNjk0ODAzYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyLnB5CkBA
IC0xNTgsNyArMTU4LDcgQEAgZXh0ZXJuIGNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzXyUo
Y29kZU5hbWUpc0NvbnN0cnVjdEFiaWxpdHk7IiIiICUgZnVuY3Rpb24KIAogICAgICAgICBsaW5l
cyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSAlKG1hY3JvUHJlZml4KXNfRk9S
RUFDSF9CVUlMVElOX0ZVTkNUSU9OX1BSSVZBVEVfR0xPQkFMX05BTUUobWFjcm8pIFxcIiAlIGFy
Z3MpCi0gICAgICAgIGZ1bmN0aW9ucyA9IGZpbHRlcihsYW1iZGEgZnVuY3Rpb246IGZ1bmN0aW9u
LmlzX2dsb2JhbF9wcml2YXRlLCBzZWxmLm1vZGVsKCkuYWxsX2Z1bmN0aW9ucygpKQorICAgICAg
ICBmdW5jdGlvbnMgPSBbZnVuY3Rpb24gZm9yIGZ1bmN0aW9uIGluIHNlbGYubW9kZWwoKS5hbGxf
ZnVuY3Rpb25zKCkgaWYgZnVuY3Rpb24uaXNfZ2xvYmFsX3ByaXZhdGVdCiAgICAgICAgIGZ1bmN0
aW9ucy5zb3J0KGtleT1sYW1iZGEgeDogeC5mdW5jdGlvbl9uYW1lKQogICAgICAgICBmb3IgZnVu
Y3Rpb24gaW4gZnVuY3Rpb25zOgogICAgICAgICAgICAgZnVuY3Rpb25fYXJncyA9IHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBl
cl9oZWFkZXIucHkKaW5kZXggMGI5MTNkY2ZjZTAuLjgwMjU2MTIwMjIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRl
X2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hl
YWRlci5weQpAQCAtMzYsNyArMzYsNyBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKIGNsYXNzIEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmVyYXRvcihCdWlsdGlu
c0dlbmVyYXRvcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKICAgICAgICAgQnVp
bHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCi0gICAgICAgIHNlbGYuaW50ZXJu
YWxzID0gZmlsdGVyKGxhbWJkYSBvYmplY3Q6ICdpbnRlcm5hbCcgaW4gb2JqZWN0LmFubm90YXRp
b25zLCBtb2RlbC5vYmplY3RzKQorICAgICAgICBzZWxmLmludGVybmFscyA9IFtvYmplY3QgZm9y
IG9iamVjdCBpbiBtb2RlbC5vYmplY3RzIGlmICdpbnRlcm5hbCcgaW4gb2JqZWN0LmFubm90YXRp
b25zXQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICIl
c0pTQnVpbHRpbkludGVybmFscy5oIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
bmFtZXNwYWNlJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDUyYjRi
MjAyNWYyLi4zOTgyNTA2N2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBs
ZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5
CkBAIC0zNiw3ICszNiw3IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogY2xh
c3MgQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQnVpbHRp
bnNHZW5lcmF0b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CiAgICAgICAgIEJ1
aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQotICAgICAgICBzZWxmLmludGVy
bmFscyA9IGZpbHRlcihsYW1iZGEgb2JqZWN0OiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0
aW9ucywgbW9kZWwub2JqZWN0cykKKyAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBbb2JqZWN0IGZv
ciBvYmplY3QgaW4gbW9kZWwub2JqZWN0cyBpZiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0
aW9uc10KIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAi
JXNKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygnbmFtZXNwYWNlJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3drYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5CmluZGV4IDA1MTljNWVlZTRjLi4xZjQ5
YTU1ZGRiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc19tb2RlbC5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy93a2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5CkBAIC0xNTUsNiArMTU1LDkgQEAgY2xhc3Mg
QnVpbHRpbkZ1bmN0aW9uOgogCiAgICAgICAgIHJldHVybiBpbnRlcmZhY2UKIAorICAgIGRlZiBf
X2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5mdW5jdGlvbl9uYW1lIDwg
b3RoZXIuZnVuY3Rpb25fbmFtZQorCiAKIGNsYXNzIEJ1aWx0aW5zQ29sbGVjdGlvbjoKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgZnJhbWV3b3JrX25hbWUpOgpAQCAtMjEwLDcgKzIxMyw3IEBAIGNs
YXNzIEJ1aWx0aW5zQ29sbGVjdGlvbjoKIAogICAgICAgICByZXN1bHQgPSBbXQogCi0gICAgICAg
IGZvciBvd25lciwgeWVhcnMgaW4gb3duZXJfdG9feWVhcnMuaXRlbXMoKToKKyAgICAgICAgZm9y
IG93bmVyLCB5ZWFycyBpbiBsaXN0KG93bmVyX3RvX3llYXJzLml0ZW1zKCkpOgogICAgICAgICAg
ICAgc29ydGVkX3llYXJzID0gbGlzdCh5ZWFycykKICAgICAgICAgICAgIHNvcnRlZF95ZWFycy5z
b3J0KCkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiVzICVzIiAlICgnLCAnLmpvaW4oc29y
dGVkX3llYXJzKSwgb3duZXIpKQpAQCAtMzAzLDQgKzMwNiw0IEBAIGNsYXNzIEJ1aWx0aW5zQ29s
bGVjdGlvbjoKICAgICAgICAgICAgIGZ1bmN0aW9uQm91bmRzLmFwcGVuZCgoc3RhcnQsIGVuZCkp
CiAKICAgICAgICAgZnVuY3Rpb25TdHJpbmdzID0gW3RleHRbc3RhcnQ6ZW5kXS5zdHJpcCgpIGZv
ciAoc3RhcnQsIGVuZCkgaW4gZnVuY3Rpb25Cb3VuZHNdCi0gICAgICAgIHJldHVybiBtYXAoQnVp
bHRpbkZ1bmN0aW9uLmZyb21TdHJpbmcsIGZ1bmN0aW9uU3RyaW5ncykKKyAgICAgICAgcmV0dXJu
IGxpc3QobWFwKEJ1aWx0aW5GdW5jdGlvbi5mcm9tU3RyaW5nLCBmdW5jdGlvblN0cmluZ3MpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRf
b3Bjb2RlLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRf
b3Bjb2RlLnB5CmluZGV4IGZlMTgzM2RjNzFiLi4zMGM5ZjQzNmNkNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfb3Bjb2RlLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvdWRpczg2L3VkX29wY29kZS5weQpA
QCAtNTUwLDEwICs1NTAsMTAgQEAgY2xhc3MgVWRPcGNvZGVUYWJsZXMob2JqZWN0KToKICAgICAg
ICAgICAgIGVudHJpZXMgPSB0YmwuZW50cmllcygpCiAgICAgICAgICAgICBmb3IgaywgZSBpbiBl
bnRyaWVzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgVWRPcGNvZGVUYWJsZSk6
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCIlcyAgICB8LTwlMDJ4PiAlcyIgJSAoaW5k
ZW50LCBrLCBlKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coIiVzICAgIHwtPCUwMng+
ICVzIiAlIChpbmRlbnQsIGludChrKSwgZSkpCiAgICAgICAgICAgICAgICAgICAgIHByaW50V2Fs
ayhlLCBpbmRlbnQgKyAiICAgIHwiKQogICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShl
LCBVZEluc25EZWYpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygiJXMgICAgfC08JTAy
eD4gJXMiICUgKGluZGVudCwgaywgZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCIl
cyAgICB8LTwlMDJ4PiAlcyIgJSAoaW5kZW50LCBpbnQoayksIGUpKQogICAgICAgICBwcmludFdh
bGsoc2VsZi5yb290KQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5l
cmF0ZS1ieXRlY29kZS1maWxlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0ZS1ieXRl
Y29kZS1maWxlcwppbmRleCBmYTI1ZmQyZWYzMS4uNzgzOGVkM2ZlZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0ZS1ieXRlY29kZS1maWxlcworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdGUtYnl0ZWNvZGUtZmlsZXMKQEAgLTEyNiw3ICsxMjYsNyBA
QCBkZWYgd3JpdGVTdHJ1Y3QoYnl0ZWNvZGVIRmlsZSwgYnl0ZWNvZGUpOgogCiAgICAgd3JpdGVJ
bnN0cnVjdGlvbkFjY2Vzc29yKGJ5dGVjb2RlSEZpbGUsICJPcGNvZGUiLCAib3Bjb2RlIikKICAg
ICBmb3Igb2Zmc2V0IGluIGJ5dGVjb2RlWyJvZmZzZXRzIl06Ci0gICAgICAgIGZvciBuYW1lLCB0
eXBlTmFtZSBpbiBvZmZzZXQuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBuYW1lLCB0eXBlTmFt
ZSBpbiBvZmZzZXQuaXRlbXMoKToKICAgICAgICAgICAgIHdyaXRlSW5zdHJ1Y3Rpb25BY2Nlc3Nv
cihieXRlY29kZUhGaWxlLCB0eXBlTmFtZSwgbmFtZSkKIAogICAgIGJ5dGVjb2RlSEZpbGUud3Jp
dGUoIlxucHJpdmF0ZTpcbiIpCkBAIC0xMzQsNyArMTM0LDcgQEAgZGVmIHdyaXRlU3RydWN0KGJ5
dGVjb2RlSEZpbGUsIGJ5dGVjb2RlKToKIAogICAgIHdyaXRlSW5zdHJ1Y3Rpb25NZW1iZXIoYnl0
ZWNvZGVIRmlsZSwgIk9wY29kZSIsICJvcGNvZGUiKQogICAgIGZvciBvZmZzZXQgaW4gYnl0ZWNv
ZGVbIm9mZnNldHMiXToKLSAgICAgICAgZm9yIG5hbWUsIHR5cGVOYW1lIGluIG9mZnNldC5pdGVy
aXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHR5cGVOYW1lIGluIG9mZnNldC5pdGVtcygpOgog
ICAgICAgICAgICAgd3JpdGVJbnN0cnVjdGlvbk1lbWJlcihieXRlY29kZUhGaWxlLCB0eXBlTmFt
ZSwgbmFtZSkKICAgICBieXRlY29kZUhGaWxlLndyaXRlKCJ9O1xuXG4iKQogCkBAIC0yMDYsMTMg
KzIwNiwxMyBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICAgICBleGl0KDApCiAK
ICAgICBpZiBieXRlY29kZUhGaWxlbmFtZToKLSAgICAgICAgYnl0ZWNvZGVIRmlsZSA9IG9wZW5P
ckV4aXQoYnl0ZWNvZGVIRmlsZW5hbWUsICJ3YiIpCisgICAgICAgIGJ5dGVjb2RlSEZpbGUgPSBv
cGVuT3JFeGl0KGJ5dGVjb2RlSEZpbGVuYW1lLCAidyIpCiAKICAgICBpZiBieXRlY29kZVN0cnVj
dHNIRmlsZW5hbWU6Ci0gICAgICAgIGJ5dGVjb2RlU3RydWN0c0hGaWxlID0gb3Blbk9yRXhpdChi
eXRlY29kZVN0cnVjdHNIRmlsZW5hbWUsICJ3YiIpCisgICAgICAgIGJ5dGVjb2RlU3RydWN0c0hG
aWxlID0gb3Blbk9yRXhpdChieXRlY29kZVN0cnVjdHNIRmlsZW5hbWUsICJ3IikKIAogICAgIGlm
IGluaXRBU01GaWxlTmFtZToKLSAgICAgICAgaW5pdEJ5dGVjb2Rlc0ZpbGUgPSBvcGVuT3JFeGl0
KGluaXRBU01GaWxlTmFtZSwgIndiIikKKyAgICAgICAgaW5pdEJ5dGVjb2Rlc0ZpbGUgPSBvcGVu
T3JFeGl0KGluaXRBU01GaWxlTmFtZSwgInciKQogCiAgICAgdHJ5OgogICAgICAgICBieXRlY29k
ZVNlY3Rpb25zID0ganNvbi5sb2FkKGJ5dGVjb2RlRmlsZSwgZW5jb2RpbmcgPSAidXRmLTgiKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vX19pbml0X18ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9fX2luaXRfXy5weQppbmRleCAzN2RiZTk0MzYzMy4uMWE0YWM2OWRhNGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19f
aW5pdF9fLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL19faW5pdF9fLnB5CkBAIC0xLDI1ICsxLDI1IEBACiAjIFJlcXVpcmVkIGZvciBQeXRo
b24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKIAotZnJvbSBtb2Rl
bHMgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCAqCi1mcm9tIGNwcF9nZW5lcmF0b3Ig
aW1wb3J0ICoKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0ICoKK2Zyb20gLm1vZGVscyBpbXBv
cnQgKgorZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCAqCitmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9y
dCAqCitmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgKgogCi1mcm9tIGdlbmVyYXRlX2NwcF9h
bHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0
ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9j
cHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBn
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0
ZV9qc19iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX2Nv
bmZpZ3VyYXRpb25faGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfY29uZmlndXJh
dGlvbl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19o
ZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIgaW1wb3J0
ICoKLWZyb20gZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBv
cnQgKgotZnJvbSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVy
IGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19p
bXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVf
Y3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlciBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9qc19i
YWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2NvbmZp
Z3VyYXRpb25faGVhZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRp
b25faW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29iamNfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSAuZ2VuZXJhdGVfb2JqY19o
ZWFkZXIgaW1wb3J0ICoKK2Zyb20gLmdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyIGltcG9y
dCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uIGlt
cG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVh
ZGVyIGltcG9ydCAqCitmcm9tIC5nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lv
bnNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5
CmluZGV4IDVmMmU5Yzg0NjJkLi40ZTk4NzA1MTRkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2Vu
ZXJhdG9yLnB5CkBAIC0yOCw4ICsyOCwxMiBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zLnBh
dGgKIGltcG9ydCByZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgdWNmaXJzdCwgR2VuZXJhdG9y
Ci1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBl
LCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKK3RyeToKKyAgICBmcm9tIC5nZW5l
cmF0b3IgaW1wb3J0IHVjZmlyc3QsIEdlbmVyYXRvcgorICAgIGZyb20gLm1vZGVscyBpbXBvcnQg
UHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5
cGUsIEZyYW1ld29ya3MKK2V4Y2VwdCBWYWx1ZUVycm9yOgorICAgIGZyb20gZ2VuZXJhdG9yIGlt
cG9ydCB1Y2ZpcnN0LCBHZW5lcmF0b3IKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZl
VHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1l
d29ya3MKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5h
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBmNmJmODZkYTkyYS4uZTYyNzg4
MGUxMzMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAg
LTMwLDggKzMwLDEyIEBAIGltcG9ydCBzdHJpbmcKIGltcG9ydCByZQogZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1m
cm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgQ3BwVGVtcGxhdGVzCit0cnk6CisgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3Bw
R2VuZXJhdG9yCisgICAgZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2V4Y2VwdCBWYWx1ZUVycm9yOgorICAg
IGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCisgICAgZnJvbSBjcHBfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBs
YXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNTIsNyArNTYs
NyBAQCBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKip0ZW1wbGF0ZV9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFy
YXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgn
XG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykgaWYgX2ZdKSkKICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqdGVtcGxhdGVfYXJncykpCiAgICAgICAgIHJldHVybiAn
XG5cbicuam9pbihzZWN0aW9ucykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAwNzY5
YzhhMjdhOS4uZTNmZTRlMTAwNDIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zMCwx
MCArMzAsMTYgQEAgaW1wb3J0IHJlCiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKLWZyb20g
Y3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBD
cHBUZW1wbGF0ZXMKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZy
b20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQordHJ5OgorICAgIGZyb20gLmNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgorICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCisgICAgZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IEVudW1UeXBlCitleGNlcHQgVmFsdWVFcnJvcjoKKyAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1w
b3J0IENwcEdlbmVyYXRvcgorICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0
IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIGdlbmVyYXRv
ciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0CisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1U
eXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00Niw3ICs1Miw3
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgIHJldHVybiAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLnByb3Rv
Y29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFp
bihkb21haW4pKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAg
ICAgICByZXR1cm4gW2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpIGlmIGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAw
XQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgdHlwZWRlZnMgPSBb
KCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KQEAgLTYyLDggKzY4LDggQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ2FsdGVybmF0ZV9kaXNwYXRjaGVycycsIEZhbHNlKToKICAgICAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJk
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBk
b21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlv
bnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4sIGRvbWFpbnMpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNl
bGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMp
KSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQ
b3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJu
ICJcblxuIi5qb2luKHNlY3Rpb25zKQogCkBAIC0xOTgsNyArMjA0LDcgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgY29t
bWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICBpZiBsZW4o
Y29tbWFuZHMpID4gMDoKICAgICAgICAgICAgIGRlY2xhcmF0aW9ucy5hcHBlbmQoJ3ByaXZhdGU6
JykKLSAgICAgICAgZGVjbGFyYXRpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCwgY29tbWFuZHMpKQorICAgICAgICBkZWNsYXJh
dGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRp
b25fZm9yX2NvbW1hbmQsIGNvbW1hbmRzKSkpCiAKICAgICAgICAgZGVjbGFyYXRpb25fYXJncyA9
IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYzU1OGVkNGVkYjAuLmUyMGFh
ZjNmYTc4IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTI5
LDEwICsyOSwxNiBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcg
aW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9y
Ci1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2Zp
cnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCit0cnk6CisgICAg
ZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCisgICAgZnJvbSAuY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1w
bGF0ZXMKKyAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorICAg
IGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCitleGNlcHQgVmFsdWVF
cnJvcjoKKyAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorICAgIGZy
b20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBh
cyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2Zp
cnN0CisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQogCiBsb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNDUsNyArNTEsNyBAQCBjbGFzcyBD
cHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYucHJvdG9j
b2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oc2VsZi5jb21tYW5kc19mb3JfZG9tYWlu
KGRvbWFpbikpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAg
ICAgIHJldHVybiBbZG9tYWluIGZvciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoc2VsZikgaWYgbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDBd
CiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaW5j
bHVkZXMgPSBzZWxmLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkKQEAgLTY1
LDcgKzcxLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0
ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoIlxuIi5qb2luKG1hcChzZWxmLl9nZW5lcmF0ZV9o
YW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVy
YXRlKCkpKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKSkpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVz
LkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
CiAgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5CmluZGV4IDU5YmQ3NjY2MDk4Li41Y2Y3NDc4NTQzMyAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQpAQCAtMzAsMTAgKzMwLDE2IEBAIGltcG9ydCByZQogaW1wb3J0IHN0cmlu
ZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBv
cnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKK3RyeToKKyAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKKyAgICBmcm9tIC5jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Cisg
ICAgZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZQorZXhjZXB0IFZhbHVlRXJyb3I6CisgICAg
ZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKKyAgICBmcm9tIGNwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxh
dGVzCisgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorICAgIGZy
b20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKIApAQCAtNDYsNyArNTIsNyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICIlc0Zyb250ZW5kRGlz
cGF0Y2hlcnMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVu
KHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBpbiBH
ZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5ldmVudHNfZm9y
X2RvbWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgog
ICAgICAgICBoZWFkZXJfYXJncyA9IHsKQEAgLTU3LDcgKzYzLDcgQEAgY2xhc3MgQ3BwRnJvbnRl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rp
b25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkhlYWRlclBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25z
LmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRl
bmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKSkKICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGI2OTY1ZjU3
ZjNiLi45MDRkMjI3YTZlOSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKQEAgLTI5LDEwICsyOSwxNiBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHN0cmluZwog
ZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQg
Q3BwR2VuZXJhdG9yCi1mcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBl
Cit0cnk6CisgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCisgICAg
ZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRl
cyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAorICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCitl
eGNlcHQ6CisgICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKKyAgICBm
cm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgQ3BwVGVtcGxhdGVzCisgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKIAogbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTQ1LDcgKzUxLDcgQEAgY2xhc3Mg
Q3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgcmV0dXJuICIlc0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYucHJv
dG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAg
ICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oc2VsZi5ldmVudHNfZm9yX2RvbWFp
bihkb21haW4pKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAg
ICAgICByZXR1cm4gW2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpIGlmIGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4gMF0K
IAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcl9hcmdzID0g
ewpAQCAtNTYsNyArNjIsNyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFp
biwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQo
bGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2Rv
bWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKSkKICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2Vj
dGlvbnMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDc1NDhkNjMxNDVhLi44NDRhYTdkMzJjYyAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaGVhZGVyLnB5CkBAIC0zMSwxMCArMzEsMTYgQEAgaW1wb3J0IHN0cmluZwogZnJv
bSBvcGVyYXRvciBpbXBvcnQgbWV0aG9kY2FsbGVyCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxh
dGUKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKLWZyb20gY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1w
bGF0ZXMKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9k
ZWxzIGltcG9ydCBFbnVtVHlwZSwgT2JqZWN0VHlwZSwgUHJpbWl0aXZlVHlwZSwgQWxpYXNlZFR5
cGUsIEFycmF5VHlwZSwgRnJhbWV3b3JrcwordHJ5OgorICAgIGZyb20gLmNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgorICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCisgICAgZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IEVudW1UeXBlLCBPYmplY3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlU
eXBlLCBGcmFtZXdvcmtzCitleGNlcHQgVmFsdWVFcnJvcjoKKyAgICBmcm9tIGNwcF9nZW5lcmF0
b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIGdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0CisgICAgZnJvbSBtb2RlbHMgaW1wb3J0
IEVudW1UeXBlLCBPYmplY3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlU
eXBlLCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC02Miw4ICs2OCw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Zvcndh
cmRfZGVjbGFyYXRpb25zKGRvbWFpbnMpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfdHlwZWRlZnMoZG9tYWlucykpCiAgICAgICAgIHNlY3Rpb25zLmV4dGVuZChzZWxm
Ll9nZW5lcmF0ZV9lbnVtX2NvbnN0YW50X3ZhbHVlX2NvbnZlcnNpb25fbWV0aG9kcygpKQotICAg
ICAgICBidWlsZGVyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9k
b21haW4sIGRvbWFpbnMpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFtYmRhIHNl
Y3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQorICAgICAgICBidWls
ZGVyX3NlY3Rpb25zID0gbGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFp
biwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChbc2VjdGlvbiBmb3Igc2VjdGlv
biBpbiBidWlsZGVyX3NlY3Rpb25zIGlmIGxlbihzZWN0aW9uKSA+IDBdKQogICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRp
bmdfdHJhaXRzKGRvbWFpbnMpKQogICAgICAgICBzZWN0aW9ucy5leHRlbmQoc2VsZi5fZ2VuZXJh
dGVfZGVjbGFyYXRpb25zX2Zvcl9lbnVtX2NvbnZlcnNpb25fbWV0aG9kcyhkb21haW5zKSkKICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2NvbCcpCkBAIC04OCw4
ICs5NCw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKIAogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CiAgICAgICAgICAgICBkZWNs
YXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gc2VsZi50eXBlX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluKGRvbWFpbildCi0gICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0
ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRp
b25fdHlwZXMpCi0gICAgICAgICAgICBlbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTog
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKKyAgICAgICAg
ICAgIG9iamVjdF90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMg
aWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSldCisgICAgICAgICAgICBlbnVtX3R5cGVz
ID0gW190eXBlIGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2luc3RhbmNlKF90
eXBlLCBFbnVtVHlwZSldCiAgICAgICAgICAgICBzb3J0ZWQob2JqZWN0X3R5cGVzLCBrZXk9bWV0
aG9kY2FsbGVyKCdyYXdfbmFtZScpKQogICAgICAgICAgICAgc29ydGVkKGVudW1fdHlwZXMsIGtl
eT1tZXRob2RjYWxsZXIoJ3Jhd19uYW1lJykpCiAKQEAgLTExNCw4ICsxMjAsOCBAQCBjbGFzcyBD
cHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAiIiIgJSAnXG5c
bicuam9pbihzZWN0aW9ucykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnMoc2VsZiwgZG9t
YWlucyk6Ci0gICAgICAgIHNlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzX2Zv
cl9kb21haW4sIGRvbWFpbnMpCi0gICAgICAgIHNlY3Rpb25zID0gZmlsdGVyKGxhbWJkYSB0ZXh0
OiBsZW4odGV4dCkgPiAwLCBzZWN0aW9ucykKKyAgICAgICAgc2VjdGlvbnMgPSBsaXN0KG1hcChz
ZWxmLl9nZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2Vj
dGlvbnMgPSBbdGV4dCBmb3IgdGV4dCBpbiBzZWN0aW9ucyBpZiBsZW4odGV4dCkgPiAwXQogCiAg
ICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAnJwpAQCAt
MTI2LDggKzEzMiw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbihzZWxm
LCBkb21haW4pOgogICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbihkb21haW4pCi0gICAgICAgIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMg
PSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBlLCBBbGlhc2VkVHlwZSks
IHR5cGVfZGVjbGFyYXRpb25zKQotICAgICAgICBhcnJheV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIo
bGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBlLCBBcnJheVR5cGUpLCB0eXBlX2RlY2xh
cmF0aW9ucykKKyAgICAgICAgcHJpbWl0aXZlX2RlY2xhcmF0aW9ucyA9IFtkZWNsIGZvciBkZWNs
IGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIGlzaW5zdGFuY2UoZGVjbC50eXBlLCBBbGlhc2VkVHlw
ZSldCisgICAgICAgIGFycmF5X2RlY2xhcmF0aW9ucyA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVf
ZGVjbGFyYXRpb25zIGlmIGlzaW5zdGFuY2UoZGVjbC50eXBlLCBBcnJheVR5cGUpXQogICAgICAg
ICBpZiBsZW4ocHJpbWl0aXZlX2RlY2xhcmF0aW9ucykgPT0gMCBhbmQgbGVuKGFycmF5X2RlY2xh
cmF0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAnJwogCkBAIC0xODcsNyArMTkzLDcg
QEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0
VHlwZSk6CiAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Ns
YXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKSkKIAot
ICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4g
MCwgc2VjdGlvbnMpCisgICAgICAgIHNlY3Rpb25zID0gW3NlY3Rpb24gZm9yIHNlY3Rpb24gaW4g
c2VjdGlvbnMgaWYgbGVuKHNlY3Rpb24pID4gMF0KICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9
PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCiAKQEAgLTIwMSw5ICsyMDcsOSBAQCBjbGFzcyBD
cHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGlm
IGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykgPT0gMDoKICAgICAgICAgICAgIHJl
dHVybiAnJwogCi0gICAgICAgIGVudW1fbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBp
c2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255
bW91cywgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIHJlcXVpcmVkX21l
bWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBm
aWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycykKKyAgICAgICAgZW51bV9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVy
IGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzXQorICAgICAgICByZXF1
aXJlZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzIGlmIG5vdCBtZW1iZXIuaXNfb3B0aW9uYWxdCisgICAgICAgIG9wdGlvbmFsX21l
bWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJl
cnMgaWYgbWVtYmVyLmlzX29wdGlvbmFsXQogICAgICAgICBvYmplY3RfbmFtZSA9IHR5cGVfZGVj
bGFyYXRpb24udHlwZV9uYW1lCiAKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMjYyLDcgKzI2OCw3
IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUK
IAotICAgICAgICBpbmRlbnRlZF9saW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5f
Z2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVu
dW1fbWVtYmVyLnR5cGUpKQorICAgICAgICBpbmRlbnRlZF9saW5lcyA9IGxpc3QobWFwKGFwcGx5
X2luZGVudGF0aW9uLCBzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX21l
bWJlci5tZW1iZXJfbmFtZSwgZW51bV9tZW1iZXIudHlwZSkpKQogICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGluZGVudGVkX2xpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Vu
dW1fdHlwZShzZWxmLCBlbnVtX25hbWUsIGVudW1fdHlwZSk6CkBAIC0yNzYsNyArMjgyLDcgQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyX3N0YXRlX2VudW0oc2VsZiwgdHlwZV9kZWNsYXJhdGlv
bik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRl
cihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1l
bWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29w
dGlvbmFsXQogICAgICAgICBlbnVtX3ZhbHVlcyA9IFtdCiAKICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgZW51bSB7JykKQEAgLTM0NCw3ICszNTAsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBk
b21haW5zOgogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFy
YXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dl
bmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0
aW9ucyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgICAgIGRlY2xhcmF0
aW9uc190b19nZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlm
IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSldCiAKICAgICAgICAg
ICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKICAg
ICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21l
bWJlcnM6CkBAIC0zOTMsOCArMzk5LDggQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdl
bmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CiAg
ICAgICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9y
X2RvbWFpbihkb21haW4pCiAgICAgICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5
cGUgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnNdCi0gICAgICAgICAgICBvYmplY3RfdHlw
ZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwg
ZGVjbGFyYXRpb25fdHlwZXMpCi0gICAgICAgICAgICBlbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJk
YSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykK
KyAgICAgICAgICAgIG9iamVjdF90eXBlcyA9IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRp
b25fdHlwZXMgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSldCisgICAgICAgICAgICBl
bnVtX3R5cGVzID0gW190eXBlIGZvciBfdHlwZSBpbiBkZWNsYXJhdGlvbl90eXBlcyBpZiBpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSldCiAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVz
KSArIGxlbihlbnVtX3R5cGVzKSA9PSAwOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKQEAg
LTQzMiw3ICs0MzgsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKICAgICAgICAgICAg
IHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRv
bWFpbikKICAgICAgICAgICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVj
bCBpbiB0eXBlX2RlY2xhcmF0aW9uc10KLSAgICAgICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIo
bGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5
cGVzKQorICAgICAgICAgICAgZW51bV90eXBlcyA9IGxpc3QoZmlsdGVyKGxhbWJkYSBfdHlwZTog
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykpCiAKICAgICAg
ICAgICAgIGlmIGxlbihlbnVtX3R5cGVzKSA9PSAwOgogICAgICAgICAgICAgICAgIGNvbnRpbnVl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNWU3YWVjMjNhZTYuLjA4MDBk
MDVjM2JmIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0zMCwxMCArMzAs
MTYgQEAgaW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiBmcm9tIG9w
ZXJhdG9yIGltcG9ydCBtZXRob2RjYWxsZXIKIAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBD
cHBHZW5lcmF0b3IKLWZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5l
cmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9ydCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBl
LCBFbnVtVHlwZSwgT2JqZWN0VHlwZQordHJ5OgorICAgIGZyb20gLmNwcF9nZW5lcmF0b3IgaW1w
b3J0IENwcEdlbmVyYXRvcgorICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCisgICAgZnJvbSAuZ2VuZXJh
dG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEFs
aWFzZWRUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCitleGNlcHQgVmFsdWVF
cnJvcjoKKyAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorICAgIGZy
b20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBh
cyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2Zp
cnN0CisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEFsaWFzZWRUeXBlLCBBcnJheVR5cGUsIEVudW1U
eXBlLCBPYmplY3RUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC02NSw4ICs3MSw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSBQ
cm90b2NvbCB7JykKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1f
bWFwcGluZ19hbmRfY29udmVyc2lvbl9tZXRob2RzKGRvbWFpbnMpKQogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcygpKQotICAgICAgICBidWls
ZGVyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4sIGRv
bWFpbnMpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxl
bihzZWN0aW9uKSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQorICAgICAgICBidWlsZGVyX3NlY3Rp
b25zID0gbGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlu
cykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChbc2VjdGlvbiBmb3Igc2VjdGlvbiBpbiBidWls
ZGVyX3NlY3Rpb25zIGlmIGxlbihzZWN0aW9uKSA+IDBdKQogICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoJ30gLy8gbmFtZXNwYWNlIFByb3RvY29sJykKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGVhZGVyX2FyZ3MpKQogCkBAIC0xMjgsOCArMTM0LDggQEAgY2xhc3MgQ3BwUHJvdG9j
b2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAg
dHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9t
YWluKQogICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4g
dHlwZV9kZWNsYXJhdGlvbnNdCi0gICAgICAgIG9iamVjdF90eXBlcyA9IGZpbHRlcihsYW1iZGEg
X3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykK
LSAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgIG9iamVjdF90eXBlcyA9
IFtfdHlwZSBmb3IgX3R5cGUgaW4gZGVjbGFyYXRpb25fdHlwZXMgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgT2JqZWN0VHlwZSldCisgICAgICAgIGVudW1fdHlwZXMgPSBbX3R5cGUgZm9yIF90eXBlIGlu
IGRlY2xhcmF0aW9uX3R5cGVzIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKV0KICAgICAg
ICAgaWYgbGVuKG9iamVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0gMDoKICAgICAgICAg
ICAgIHJldHVybiAnJwogCkBAIC0xNTYsOCArMTYyLDggQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBl
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25z
ID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBzZWxmLmhl
bHBlcnNfbmFtZXNwYWNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmV4dGVuZChzZWxmLl9nZW5lcmF0
ZV9lbnVtX21hcHBpbmcoKSkKLSAgICAgICAgZW51bV9wYXJzZXJfc2VjdGlvbnMgPSBtYXAoc2Vs
Zi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9yX2RvbWFpbiwgZG9tYWlucykK
LSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rp
b24pID4gMCwgZW51bV9wYXJzZXJfc2VjdGlvbnMpKQorICAgICAgICBlbnVtX3BhcnNlcl9zZWN0
aW9ucyA9IGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9tZXRob2RzX2Zv
cl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoW3NlY3Rpb24gZm9y
IHNlY3Rpb24gaW4gZW51bV9wYXJzZXJfc2VjdGlvbnMgaWYgbGVuKHNlY3Rpb24pID4gMF0pCiAg
ICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMToKICAgICAgICAgICAgIHJldHVybiBbXSAgIyBO
byBkZWNsYXJhdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgbmFtZXNwYWNlLgogCkBAIC0xNjgsNyAr
MTc0LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGRvbWFpbiBpbiBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKICAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25z
ID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKLSAgICAgICAgICAg
IGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGZpbHRlcihsYW1iZGEgZGVjbDogR2VuZXJhdG9yLnR5
cGVfaGFzX29wZW5fZmllbGRzKGRlY2wudHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKToKKyAgICAg
ICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVj
bGFyYXRpb25zIGlmIEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpXToK
ICAgICAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5lcmF0b3Iub3Blbl9maWVsZHModHlw
ZV9kZWNsYXJhdGlvbikKICAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVk
KG9wZW5fbWVtYmVycywga2V5PWxhbWJkYSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6CiAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAn
UHJvdG9jb2wnLCBkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50
eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCkBAIC0xNzksNyAr
MTg1LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgdHlwZV9kZWNsYXJhdGlv
bnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICBk
ZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9u
ZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQorICAg
ICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2Rl
Y2xhcmF0aW9ucyBpZiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUp
XQogCiAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5l
cmF0ZToKICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5
cGVfbWVtYmVyczoKQEAgLTIwMCw4ICsyMDYsOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIFRlbXBs
YXRlKENwcFRlbXBsYXRlcy5Qcm90b2NvbE9iamVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRlKE5v
bmUsICoqYXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVj
bGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAgcmVxdWlyZWRfbWVt
YmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBvYmpl
Y3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0g
ZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0
aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9y
IG1lbWJlciBpbiBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIG5vdCBtZW1iZXIu
aXNfb3B0aW9uYWxdCisgICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1i
ZXIgaW4gb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNfb3B0aW9u
YWxdCiAgICAgICAgIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzID0gbm90IEdlbmVyYXRvci50eXBl
X2hhc19vcGVuX2ZpZWxkcyhvYmplY3RfZGVjbGFyYXRpb24udHlwZSkKICAgICAgICAgbGluZXMg
PSBbXQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9j
b21tYW5kcy5weQppbmRleCA5MzMwN2E4OTcyZC4uYTE1ZjI4OTJjMWUgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pz
X2JhY2tlbmRfY29tbWFuZHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQpAQCAtMzAs
OSArMzAsMTQgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGlt
cG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0
Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQordHJ5OgorICAgIGZyb20gLmdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0CisgICAgZnJvbSAuZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworICAgIGZyb20g
Lm1vZGVscyBpbXBvcnQgRW51bVR5cGUKK2V4Y2VwdCBWYWx1ZUVycm9yOgorICAgIGZyb20gZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKKyAgICBmcm9tIGdlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKyAgICBmcm9tIG1v
ZGVscyBpbXBvcnQgRW51bVR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CiAKQEAgLTQ2LDE2ICs1MSwxNiBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihH
ZW5lcmF0b3IpOgogCiAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWlu
KToKICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oZG9tYWluKQotICAgICAgICBkb21haW5fZW51bV90eXBlcyA9IGZpbHRlcihsYW1i
ZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpLCB0
eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgZG9tYWluX2VudW1fdHlwZXMgPSBbZGVjbGFyYXRp
b24gZm9yIGRlY2xhcmF0aW9uIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIGlzaW5zdGFuY2UoZGVj
bGFyYXRpb24udHlwZSwgRW51bVR5cGUpXQogICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29tbWFu
ZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAgb3IgbGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4o
ZG9tYWluKSkgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAwCiAKICAgICBkZWYgZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3Vs
ZF9nZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQor
ICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBH
ZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1h
cChzZWxmLmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAg
ICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5nZW5lcmF0ZV9kb21haW4sIHNlbGYu
ZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCiAgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0
aW9ucykKIAogICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToKQEAgLTcwLDcg
Kzc1LDcgQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAg
ICAgICAgY29tbWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAg
ICBldmVudHMgPSBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikKIAotICAgICAgICBoYXNf
YXN5bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBjb21tYW5kOiBjb21tYW5kLmlzX2FzeW5j
LCBjb21tYW5kcykpCisgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShbY29tbWFuZC5p
c19hc3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5kc10pCiAgICAgICAgIGlmIGxlbihldmVudHMp
ID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFpbilzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIiUo
ZG9tYWluKXMiKTsnICUgYXJncykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDAw
MzU3NTY3ZThjLi4wNTEyMmM2Y2FiZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAt
MzAsMTEgKzMwLDE4IEBAIGltcG9ydCBzdHJpbmcKIGltcG9ydCByZQogZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCiAKLWZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1m
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3
b3JrcwotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpj
X2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2Jq
Q1RlbXBsYXRlcwordHJ5OgorICAgIGZyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgorICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisgICAgZnJvbSAubW9k
ZWxzIGltcG9ydCBGcmFtZXdvcmtzCisgICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9i
akNHZW5lcmF0b3IKKyAgICBmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZXhjZXB0IFZhbHVlRXJyb3I6
CisgICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKKyAgICBmcm9tIGdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEZyYW1ld29y
a3MKKyAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCisgICAgZnJv
bSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApA
QCAtNDcsNyArNTQsNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMu
aCcgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFu
ZHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAg
ICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3Jf
ZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkpCiAKICAgICBkZWYg
Z2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBoZWFkZXJzID0gWwpAQCAtNjQsNyArNzEs
NyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
T2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5f
Z2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkK
KyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX29iamNfaGFu
ZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpKQogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlclBv
c3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4g
J1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkKaW5kZXggYWQ1NjE2NTE2YmIuLjc2OTA3YmFjNmQ5IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzAsMTEgKzMwLDE4IEBAIGltcG9ydCBz
dHJpbmcKIGltcG9ydCByZQogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gY3Bw
X2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yCi1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgRW51bVR5cGUsIEFsaWFz
ZWRUeXBlLCBGcmFtZXdvcmtzCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDVHlwZUNh
dGVnb3J5LCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUKLWZyb20gb2JqY19nZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1w
bGF0ZXMKK3RyeToKKyAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IK
KyAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorICAgIGZyb20gLm1vZGVscyBp
bXBvcnQgUHJpbWl0aXZlVHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCisg
ICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5l
cmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQorICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitleGNl
cHQgVmFsdWVFcnJvcjoKKyAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRv
cgorICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKKyAgICBmcm9tIG1vZGVscyBp
bXBvcnQgUHJpbWl0aXZlVHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCisg
ICAgZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVy
YXRvciwgam9pbl90eXBlX2FuZF9uYW1lCisgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNDcsNyArNTQsNyBAQCBjbGFzcyBP
YmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKICAgICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5tbScgJSBzZWxmLnByb3Rv
Y29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwg
R2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0
KGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKQEAgLTY1LDcgKzcyLDcgQEAg
Y2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dl
bmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlbHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5k
KG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4sIGRv
bWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJhdGVf
aGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluLCBkb21haW5zKSkpCiAgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAg
ICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkBAIC0xMTQsNyArMTIxLDcgQEAg
Y2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dl
bmVyYXRvcik6CiAgICAgICAgIGlmIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogCi0gICAgICAgICAgICByZXF1aXJlZF9wb2lu
dGVyX3BhcmFtZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBh
cmFtZXRlci50eXBlKSwgY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykKKyAgICAgICAgICAgIHJl
cXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBj
b21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5k
IE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSld
CiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVy
czoKICAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90
b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQogICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKQEAgLTEyMiw3ICsx
MjksNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFu
ZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgoc2VsZi5vYmpjX3ByZWZpeCgpKToKICAgICAg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAodmFyX25hbWUsIG9iamNfYXJy
YXlfY2xhc3MpKQogCi0gICAgICAgICAgICBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnMgPSBm
aWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2Vu
ZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0
ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnMgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2Jq
Y19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgdmFyX25h
bWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAl
ICh2YXJfbmFtZSwgdmFyX25hbWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hl
YWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkKaW5kZXggYTIzMmUyY2U0Mzku
LjZjM2RkNzY1MjM4IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkKQEAgLTI5LDkgKzI5LDE0IEBAIGltcG9y
dCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAot
ZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBv
cnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwordHJ5OgorICAgIGZyb20gLmdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisgICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNHZW5lcmF0b3IKKyAgICBmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0
IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworZXhjZXB0IFZhbHVlRXJy
b3I6CisgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorICAgIGZyb20gb2JqY19n
ZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKKyAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAK
IGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Nv
bmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVt
ZW50YXRpb24ucHkKaW5kZXggOTEwYmNiYWIxMzUuLjkyMmI2MDgxZjY3IDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0
aW9uX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0yOSw5ICsyOSwxNCBAQCBpbXBvcnQgbG9nZ2luZwog
aW1wb3J0IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gZ2VuZXJh
dG9yIGltcG9ydCBHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5l
cmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK3RyeToKKyAgICBmcm9tIC5nZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvcgorICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJh
dG9yCisgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2V4Y2VwdCBWYWx1ZUVycm9yOgorICAgIGZy
b20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKKyAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGlt
cG9ydCBPYmpDR2VuZXJhdG9yCisgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5CmluZGV4IDY1NGY5YjRiZjhhLi4zODEzOTVkYmU2MyAxMDA3NTUKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMjksMTAgKzI5LDE2IEBAIGlt
cG9ydCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUK
IAotZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9y
IGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9i
akNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK3RyeToKKyAgICBmcm9tIC5jcHBfZ2Vu
ZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKKyAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvciwgdWNmaXJzdAorICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2Vu
ZXJhdG9yCisgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2V4Y2VwdCBWYWx1ZUVycm9yOgorICAg
IGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCisgICAgZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1w
b3J0IE9iakNHZW5lcmF0b3IKKyAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC00NSw3ICs1MSw3IEBAIGNsYXNzIE9iakNGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAg
ICAgICAgcmV0dXJuICclc0V2ZW50RGlzcGF0Y2hlcnMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1l
KCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4g
ZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBHZW5lcmF0b3Iu
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGxpc3QoZmlsdGVyKHNl
bGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAg
ICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKQEAgLTYyLDcgKzY4LDcgQEAgY2xhc3MgT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgog
ICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25zLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25zLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVt
cGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIApAQCAtMTAwLDcg
KzEwNiw3IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOycpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFt
ZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogbm90IHBhcmFtZXRlci5pc19vcHRpb25h
bCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50
eXBlKSwgZXZlbnQuZXZlbnRfcGFyYW1ldGVycykKKyAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9w
YXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFt
ZXRlcnMgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190
eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICB2YXJfbmFt
ZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2
YXJfbmFtZSkpCkBAIC0xMDgsNyArMTE0LDcgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYg
b2JqY19hcnJheV9jbGFzcyBhbmQgb2JqY19hcnJheV9jbGFzcy5zdGFydHN3aXRoKHNlbGYub2Jq
Y19wcmVmaXgoKSk6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFt
ZSwgb2JqY19hcnJheV9jbGFzcykpCiAKLSAgICAgICAgb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0
ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQg
T2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwg
ZXZlbnQuZXZlbnRfcGFyYW1ldGVycykKKyAgICAgICAgb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0
ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19w
b2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIG9w
dGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVyczoKICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dl
bmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFt
ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CmluZGV4IGE4
MzQzZTZlNjNlLi5iNDdjYmNiMzllZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19oZWFkZXIucHkKQEAgLTI5LDEwICsyOSwxNiBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0
IHN0cmluZwogZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKLWZyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBF
bnVtVHlwZSwgUGxhdGZvcm1zCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJh
dG9yLCBqb2luX3R5cGVfYW5kX25hbWUKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK3RyeToKKyAgICBm
cm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorICAgIGZyb20gLm1vZGVs
cyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIFBsYXRmb3JtcworICAgIGZyb20gLm9iamNf
Z2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUKKyAgICBm
cm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgT2JqQ1RlbXBsYXRlcworZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmpl
Y3RUeXBlLCBFbnVtVHlwZSwgUGxhdGZvcm1zCisgICAgZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBv
cnQgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCisgICAgZnJvbSBvYmpjX2dlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBs
YXRlcwogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNjAsOSArNjYs
OSBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICB9
CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAg
IHR5cGVfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9t
YWluLCBkb21haW5zKQotICAgICAgICBjb21tYW5kX2RvbWFpbnMgPSBmaWx0ZXIoc2VsZi5zaG91
bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgZXZlbnRf
ZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbiwg
ZG9tYWlucykKKyAgICAgICAgdHlwZV9kb21haW5zID0gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRf
Z2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIGNvbW1hbmRfZG9t
YWlucyA9IGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21h
aW4sIGRvbWFpbnMpKQorICAgICAgICBldmVudF9kb21haW5zID0gbGlzdChmaWx0ZXIoc2VsZi5z
aG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4sIGRvbWFpbnMpKQogCiAgICAgICAgICMg
RklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzgyMjI+IFdlYiBJbnNwZWN0b3I6IFJlZHVj
ZSB1bm5lY2Vzc2FyeSBlbnVtcy90eXBlcyBnZW5lcmF0ZWQgaW4gT2JqQyBQcm90b2NvbCBJbnRl
cmZhY2VzCiAgICAgICAgICMgQ3VycmVudGx5IHdlIGdlbmVyYXRlIGVudW1zL3R5cGVzIGZvciBh
bGwgdHlwZXMgaW4gdGhlIHR5cGVfZG9tYWlucy4gRm9yIHRoZSBidWlsdC1pbgpAQCAtNzIsMTQg
Kzc4LDE0IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAg
ICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
bGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRl
cy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJh
dGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9mb3J3
YXJkX2RlY2xhcmF0aW9ucywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9mb3JfcGxhdGZvcm1zKCkpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9l
bnVtcywgdHlwZV9kb21haW5zKSkpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2lu
KGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZXMsIHR5cGVfZG9tYWlucykpKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxm
Ll9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQorICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVz
LCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAKICAgICAgICAgaWYgc2VsZi5nZXRfZ2VuZXJhdG9y
X3NldHRpbmcoJ2dlbmVyYXRlX2JhY2tlbmQnLCBGYWxzZSk6Ci0gICAgICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9jb21t
YW5kX3Byb3RvY29scywgY29tbWFuZF9kb21haW5zKSkpKQotICAgICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRf
aW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykpKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnXG5cbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9jb21tYW5kX3By
b3RvY29scywgY29tbWFuZF9kb21haW5zKSBpZiBfZl0pKQorICAgICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKCdcblxuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50
X2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpIGlmIF9mXSkpCiAKICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSkpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKQEAgLTE3MSw4ICsx
NzcsOCBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsnKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsnKQogCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMg
PSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJk
YSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQor
ICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIGRlY2xhcmF0
aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQorICAgICAgICBvcHRp
b25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVt
YmVycyBpZiBtZW1iZXIuaXNfb3B0aW9uYWxdCiAgICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6
CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9y
X3JlcXVpcmVkX21lbWJlcnMoZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycykp
CiAgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfaW50ZXJuYWxfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkKaW5kZXggYjZl
NGFkNWU5MTguLmE3MzM5ZDI5YjQzIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQpAQCAtMjksOSArMjksMTQgQEAgaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBzdHJpbmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1m
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG9iamNfZ2VuZXJh
dG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCit0cnk6CisgICAg
ZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKKyAgICBmcm9tIC5vYmpj
X2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorICAgIGZyb20gLm9iamNfZ2VuZXJhdG9y
X3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVz
CitleGNlcHQgVmFsdWVFcnJvcjoKKyAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0CisgICAgZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgor
ICAgIGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCiAKQEAgLTU1LDEyICs2MCwxMiBAQCBjbGFzcyBPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycj
aW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKICAgICAg
ICAgfQogCi0gICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJh
dGVfZXZlbnRzX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKQorICAgICAg
ICBldmVudF9kb21haW5zID0gbGlzdChmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRz
X2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKIAogICAgICAgICBzZWN0
aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuR2VuZXJp
Y0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVy
YXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9pbnRlcmZhY2VzLCBldmVudF9kb21haW5zKSkp
KQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAo
c2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVyZmFjZXMsIGV2ZW50
X2RvbWFpbnMpIGlmIF9mXSkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLkdlbmVyaWNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90
b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQppbmRleCA4NGNiZGRhMTc3My4uY2UxMmEz
YTFiYTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQpAQCAtMjks
MTAgKzI5LDE2IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5nCiBmcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBt
b2RlbHMgaW1wb3J0IEVudW1UeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKLWZyb20gb2JqY19n
ZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK3RyeToK
KyAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorICAgIGZyb20gLm1vZGVscyBp
bXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAgIGZyb20gLm9iamNfZ2Vu
ZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCisgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK2V4
Y2VwdCBWYWx1ZUVycm9yOgorICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKKyAg
ICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAg
IGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKKyAgICBmcm9tIG9iamNf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpD
VGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC01MSw3
ICs1Nyw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICclc1R5cGVDb252ZXJzaW9ucy5oJyAl
IHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3Jf
ZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0
dXJuIGxpc3QoZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIEdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9v
dXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcnMgPSBbCkBAIC03MCw3ICs3Niw3IEBAIGNsYXNz
IE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNv
bnZlcnNpb25zSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNvbnZl
cnNpb25zSGVhZGVyU3RhbmRhcmQpLnN1YnN0aXR1dGUoTm9uZSkpCiAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZm9yX3BsYXRmb3JtcygpKQot
ICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lv
bl9mdW5jdGlvbnMsIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAo
c2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlucykpKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5UeXBlQ29udmVyc2lv
bnNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAg
ICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5
cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNDI5M2UzYmQ4NGMuLjNkODRi
ZjA0YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVt
ZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVu
dGF0aW9uLnB5CkBAIC0yOCwxMCArMjgsMTYgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzdHJp
bmcKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yCi1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIEFycmF5
VHlwZSwgQWxpYXNlZFR5cGUsIFByaW1pdGl2ZVR5cGUsIEZyYW1ld29ya3MKLWZyb20gb2JqY19n
ZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKK3RyeToK
KyAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorICAgIGZyb20gLm1vZGVscyBp
bXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5cGUsIFByaW1p
dGl2ZVR5cGUsIEZyYW1ld29ya3MKKyAgICBmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2Jq
Q0dlbmVyYXRvcgorICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2Jq
Q0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCitleGNlcHQgVmFsdWVFcnJvcjoK
KyAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisgICAgZnJvbSBtb2RlbHMgaW1w
b3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEFsaWFzZWRUeXBlLCBQcmltaXRp
dmVUeXBlLCBGcmFtZXdvcmtzCisgICAgZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dl
bmVyYXRvcgorICAgIGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCiAKQEAgLTUwLDcgKzU2LDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNv
bnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
IHJldHVybiAnJXNUeXBlQ29udmVyc2lvbnMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAog
ICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVy
KHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gbGlzdChmaWx0ZXIoc2VsZi5zaG91
bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZikpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgc2Vj
b25kYXJ5X2hlYWRlcnMgPSBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRl
eCAwYmE1NWVlOGQ0MS4uOWNkOThkN2NkYTcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlw
ZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQpAQCAtMjksMTAgKzI5LDE2IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3RyaW5n
CiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvciwgdWNmaXJzdAotZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBl
LCBGcmFtZXdvcmtzCi1mcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDVHlwZUNhdGVnb3J5
LCBPYmpDR2VuZXJhdG9yCi1mcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2Jq
Q0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCit0cnk6CisgICAgZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IE9iamVjdFR5cGUsIEVudW1UeXBlLCBGcmFtZXdvcmtzCisgICAgZnJvbSAub2JqY19nZW5lcmF0
b3IgaW1wb3J0IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3IKKyAgICBmcm9tIC5vYmpj
X2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2Jq
Q1RlbXBsYXRlcworZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0
IEdlbmVyYXRvciwgdWNmaXJzdAorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBF
bnVtVHlwZSwgRnJhbWV3b3JrcworICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNU
eXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3IKKyAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKIGxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC01MSw3ICs1Nyw3IEBAIGNsYXNz
IE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiAnJXNUeXBlcy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAg
ICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIo
c2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBsaXN0KGZpbHRlcihzZWxmLnNob3Vs
ZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKSkpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNv
bmRhcnlfaGVhZGVycyA9IFsKQEAgLTc1LDcgKzgxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlw
ZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgc2VjdGlv
bnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkp
CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVu
dGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zLCBk
b21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuZ2VuZXJhdGVf
dHlwZV9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rp
b25zKQogCkBAIC05NSw3ICsxMDEsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9k
X2Zvcl9wYXlsb2FkKGRvbWFpbiwgZGVjbGFyYXRpb24pKQogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9wcm90b2NvbF9vYmplY3QoZG9tYWlu
LCBkZWNsYXJhdGlvbikpCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRh
IG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
KQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIGRlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAgICAgICBp
ZiByZXF1aXJlZF9tZW1iZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJl
ZF9tZW1iZXJzKGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQpAQCAtMTY3
LDcgKzE3Myw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4g
bmlsOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAgICAgICByZXF1aXJlZF9wb2lu
dGVyX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogT2JqQ0dlbmVyYXRvci5pc190eXBl
X29iamNfcG9pbnRlcl90eXBlKG1lbWJlci50eXBlKSwgcmVxdWlyZWRfbWVtYmVycykKKyAgICAg
ICAgcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHJlcXVp
cmVkX21lbWJlcnMgaWYgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKG1l
bWJlci50eXBlKV0KICAgICAgICAgaWYgcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzOgogICAgICAg
ICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9wb2ludGVyX21lbWJlcnM6CiAgICAgICAgICAg
ICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlm
aWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQppbmRleCAzZjQ5
NjZiNDg0Mi4uMWM5ODkyZDAxNTMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKQEAgLTI5LDgg
KzI5LDEyIEBAIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBU
ZW1wbGF0ZQogCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmpl
Y3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxh
dGZvcm1zCit0cnk6CisgICAgZnJvbSAuZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgUHJpbWl0
aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZy
YW1ld29ya3MsIFBsYXRmb3JtcworZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgZnJvbSBnZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCisgICAg
ZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwg
RW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKIAogbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTE0MSw3ICsxNDUsNyBAQCBjbGFzcyBHZW5l
cmF0b3I6CiAKICAgICAjIFRoZXNlIG1ldGhvZHMgYXJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nl
cy4KICAgICBkZWYgbm9uX3N1cHBsZW1lbnRhbF9kb21haW5zKHNlbGYpOgotICAgICAgICByZXR1
cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IG5vdCBkb21haW4uaXNfc3VwcGxlbWVudGFsLCBzZWxm
Lm1vZGVsKCkuZG9tYWlucykKKyAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBpbiBz
ZWxmLm1vZGVsKCkuZG9tYWlucyBpZiBub3QgZG9tYWluLmlzX3N1cHBsZW1lbnRhbF0KIAogICAg
IGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5ub25f
c3VwcGxlbWVudGFsX2RvbWFpbnMoKQpAQCAtMTc3LDcgKzE4MSw3IEBAIGNsYXNzIEdlbmVyYXRv
cjoKICAgICAgICAgZmllbGRzID0gc2V0KF9UWVBFU19XSVRIX09QRU5fRklFTERTLmdldCh0eXBl
X2RlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSwgW10pKQogICAgICAgICBpZiBub3Qg
ZmllbGRzOgogICAgICAgICAgICAgcmV0dXJuIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1l
IGluIGZpZWxkcywgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIHJldHVy
biBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYg
bWVtYmVyLm1lbWJlcl9uYW1lIGluIGZpZWxkc10KIAogICAgIGRlZiB0eXBlX25lZWRzX3NoYXBl
X2Fzc2VydGlvbnMoc2VsZiwgX3R5cGUpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAi
X3R5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucyIpOgpAQCAtMTkwLDcgKzE5NCw3IEBAIGNs
YXNzIEdlbmVyYXRvcjoKICAgICAjIHNldCBvZiB0eXBlcyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNh
bGx5IHJlZ2VuZXJhdGVkIG9uIHN1YnNlcXVlbnQgY2FsbHMgdG8KICAgICAjIEdlbmVyYXRvci50
eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMoKS4KICAgICBkZWYgY2FsY3VsYXRlX3R5cGVz
X3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKHNlbGYsIGRvbWFpbnMpOgotICAgICAgICBkb21h
aW5fbmFtZXMgPSBtYXAobGFtYmRhIGRvbWFpbjogZG9tYWluLmRvbWFpbl9uYW1lLCBkb21haW5z
KQorICAgICAgICBkb21haW5fbmFtZXMgPSBbZG9tYWluLmRvbWFpbl9uYW1lIGZvciBkb21haW4g
aW4gZG9tYWluc10KICAgICAgICAgbG9nLmRlYnVnKCI+IENhbGN1bGF0aW5nIHR5cGVzIHRoYXQg
bmVlZCBzaGFwZSBhc3NlcnRpb25zIChlbGlnaWJsZSBkb21haW5zOiAlcykiICUgIiwgIi5qb2lu
KGRvbWFpbl9uYW1lcykpCiAKICAgICAgICAgIyBNdXRhdGVzIHRoZSBwYXNzZWQtaW4gc2V0OyB0
aGlzIHNpbXBsaWZpZXMgY2hlY2tzIHRvIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uLgpAQCAt
MjQ2LDcgKzI1MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgZm9yIF90eXBlIGluIGFs
bF90eXBlczoKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6
CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIG1hcChzZWxmLl9hc3NpZ25f
ZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUsIF90eXBlLmVudW1fdmFsdWVzKCkpCisgICAgICAgICAg
ICBsaXN0KG1hcChzZWxmLl9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUsIF90eXBlLmVu
dW1fdmFsdWVzKCkpKQogCiAgICAgZGVmIF9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUo
c2VsZiwgZW51bV92YWx1ZSk6CiAgICAgICAgIGlmIGVudW1fdmFsdWUgaW4gc2VsZi5fZW51bV92
YWx1ZV9lbmNvZGluZ3M6CkBAIC0yODAsNyArMjg0LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAg
ICAgICAgICAgcmV0dXJuIF9BTFdBWVNfU1BFQ0lBTENBU0VEX0VOVU1fVkFMVUVfTE9PS1VQX1RB
QkxFW21hdGNoLmdyb3VwKDEpLnVwcGVyKCldCiAKICAgICAgICAgIyBTcGxpdCBvbiBoeXBoZW4s
IGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBmb3JjZSB1cHBlcmNhc2luZyBvZiBhY3Jvbnltcy4K
LSAgICAgICAgc3Vid29yZHMgPSBtYXAodWNmaXJzdCwgX0VOVU1fSURFTlRJRklFUl9SRU5BTUVf
TUFQLmdldChlbnVtX3ZhbHVlLCBlbnVtX3ZhbHVlKS5zcGxpdCgnLScpKQorICAgICAgICBzdWJ3
b3JkcyA9IGxpc3QobWFwKHVjZmlyc3QsIF9FTlVNX0lERU5USUZJRVJfUkVOQU1FX01BUC5nZXQo
ZW51bV92YWx1ZSwgZW51bV92YWx1ZSkuc3BsaXQoJy0nKSkpCiAgICAgICAgIHJldHVybiByZS5z
dWIocmUuY29tcGlsZShyZWdleCwgcmUuSUdOT1JFQ0FTRSksIHJlcGxhY2VDYWxsYmFjaywgIiIu
am9pbihzdWJ3b3JkcykpCiAKICAgICBAc3RhdGljbWV0aG9kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKaW5k
ZXggY2E5MWQ3MWM3YzUuLmQwOWIyNDJmOGJmIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5CkBAIC0zNSw3
ICszNSw3IEBAIGRlZiB1Y2ZpcnN0KHN0cik6CiAKIAogZGVmIGZpbmRfZHVwbGljYXRlcyhsKToK
LSAgICByZXR1cm4gW2tleSBmb3Iga2V5LCBjb3VudCBpbiBjb2xsZWN0aW9ucy5Db3VudGVyKGwp
Lml0ZW1zKCkgaWYgY291bnQgPiAxXQorICAgIHJldHVybiBba2V5IGZvciBrZXksIGNvdW50IGlu
IGxpc3QoY29sbGVjdGlvbnMuQ291bnRlcihsKS5pdGVtcygpKSBpZiBjb3VudCA+IDFdCiAKIAog
X0ZSQU1FV09SS19DT05GSUdfTUFQID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5w
eQppbmRleCBlNTJmMzE1NDRjMS4uMjVlMjVjNjc5NjggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNf
Z2VuZXJhdG9yLnB5CkBAIC0yNCw4ICsyNCwxMiBAQAogIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKIGltcG9ydCBsb2dnaW5nCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKK3RyeToKKyAg
ICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorICAgIGZyb20gLm1v
ZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlw
ZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKK2V4Y2VwdCBWYWx1ZUVycm9yOgorICAgIGZyb20g
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKKyAgICBmcm9tIG1vZGVscyBpbXBv
cnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNl
ZFR5cGUsIEZyYW1ld29ya3MKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAK
QEAgLTUwLDcgKzU0LDcgQEAgX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQID0gewogICAgICdp
ZCc6ICdpZGVudGlmaWVyJywgICMgUGFnZS5GcmFtZS5pZCwgUnVudGltZS5FeGVjdXRpb25Db250
ZXh0RGVzY3JpcHRpb24uaWQsIERlYnVnZ2VyLkJyZWFrcG9pbnRBY3Rpb24uaWQKIH0KIAotX09C
SkNfSURFTlRJRklFUl9SRVZFUlNFX1JFTkFNRV9NQVAgPSBkaWN0KCh2LCBrKSBmb3IgaywgdiBp
biBfT0JKQ19JREVOVElGSUVSX1JFTkFNRV9NQVAuaXRlcml0ZW1zKCkpCitfT0JKQ19JREVOVElG
SUVSX1JFVkVSU0VfUkVOQU1FX01BUCA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIF9PQkpDX0lE
RU5USUZJRVJfUkVOQU1FX01BUC5pdGVtcygpKQogCiAKIGNsYXNzIE9iakNUeXBlQ2F0ZWdvcnk6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQppbmRleCA1NzljMDE4MDFkMi4uNjhhNGE1MmI5ZGIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtNDksNyArNDks
NyBAQCB0cnk6CiAjIFdoZW4gY29weWluZyBnZW5lcmF0b3IgZmlsZXMgdG8gSmF2YVNjcmlwdENv
cmUncyBwcml2YXRlIGhlYWRlcnMgb24gTWFjLAogIyB0aGUgY29kZWdlbi8gbW9kdWxlIGRpcmVj
dG9yeSBpcyBmbGF0dGVuZWQuIFNvLCBpbXBvcnQgZGlyZWN0bHkuCiBleGNlcHQgSW1wb3J0RXJy
b3IgYXMgZToKLSAgICAjIGxvZy5lcnJvcihlKSAjIFVuY29tbWVudCB0aGlzIHRvIGRlYnVnIGVh
cmx5IGltcG9ydCBlcnJvcnMuCisgICAgI2xvZy5lcnJvcihlKSAjIFVuY29tbWVudCB0aGlzIHRv
IGRlYnVnIGVhcmx5IGltcG9ydCBlcnJvcnMuCiAgICAgaW1wb3J0IG1vZGVscwogICAgIGZyb20g
bW9kZWxzIGltcG9ydCAqCiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0ICoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbS5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbS5weQppbmRleCAxNjg4N2VjZjk1ZS4uZjBiNmI1
OGJlNDggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2Fz
bS5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc20ucHkKQEAg
LTcxLDcgKzcxLDcgQEAgY2xhc3MgV2FzbToKICAgICAgICAgIyBXZSBuZWVkIHRvIGRvIHRoaXMg
YmVjYXVzZSBweXRob24gaXMgZHVtYiBhbmQgd29uJ3QgbGV0IG1lIHVzZSBzZWxmIGluIHRoZSBs
YW1iZGEsIHdoaWNoIGlzIHJpZGljdWxvdXMuCiAgICAgICAgIGlmIHJldCA9PSBOb25lOgogICAg
ICAgICAgICAgcmV0ID0gbGFtYmRhIG9wOiB7Im5hbWUiOiBvcCwgIm9wY29kZSI6IHNlbGYub3Bj
b2Rlc1tvcF19Ci0gICAgICAgIGZvciBvcCBpbiBzZWxmLm9wY29kZXMuaXRlcmtleXMoKToKKyAg
ICAgICAgZm9yIG9wIGluIHNlbGYub3Bjb2Rlcy5rZXlzKCk6CiAgICAgICAgICAgICBpZiBmaWx0
ZXIoc2VsZi5vcGNvZGVzW29wXSk6CiAgICAgICAgICAgICAgICAgeWllbGQgcmV0KG9wKQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9nZW5lcmF0ZVlhcnJDYW5vbmlj
YWxpemVVbmljb2RlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvZ2VuZXJhdGVZYXJyQ2Fu
b25pY2FsaXplVW5pY29kZQppbmRleCBhMTAzYmNkZjE2ZC4uYjg5Nzc3OTU3NTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVu
aWNvZGUKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvZ2VuZXJhdGVZYXJyQ2Fub25p
Y2FsaXplVW5pY29kZQpAQCAtMzEsNyArMzEsNiBAQCBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBv
cwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCi1mcm9tIHNldHMgaW1wb3J0IFNldAogCiBoZWFkZXIg
PSAiIiIvKgogKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgpAQCAtODAsNyArNzksNyBAQCBkZWYgb3Blbk9yRXhpdChwYXRoLCBtb2RlKToKICAgICAg
ICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCiAgICAgICAgIHJldHVybiBvcGVuKHBhdGgsIG1v
ZGUpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKLSAgICAgICAgcHJpbnQgIkkvTyBlcnJvciBv
cGVuaW5nIHswfSwgKHsxfSk6IHsyfSIuZm9ybWF0KHBhdGgsIGUuZXJybm8sIGUuc3RyZXJyb3Ip
CisgICAgICAgIHByaW50KCJJL08gZXJyb3Igb3BlbmluZyB7MH0sICh7MX0pOiB7Mn0iLmZvcm1h
dChwYXRoLCBlLmVycm5vLCBlLnN0cmVycm9yKSkKICAgICAgICAgZXhpdCgxKQogCiBjbGFzcyBD
YW5vbmljYWxpemU6CkBAIC05Myw3ICs5Miw3IEBAIGNsYXNzIENhbm9uaWNhbGl6ZToKICAgICAg
ICAgc2VsZi5jYW5vbmljYWxHcm91cHNbbWFwcGluZ10uYXBwZW5kKGNvZGUpCiAgICAgICAgIAog
ICAgIGRlZiByZWFkQ2FzZUZvbGRpbmcoc2VsZiwgZmlsZSk6Ci0gICAgICAgIGNvZGVzU2VlbiA9
IFNldCgpCisgICAgICAgIGNvZGVzU2VlbiA9IHNldCgpCiAgICAgICAgIGZvciBsaW5lIGluIGZp
bGU6CiAgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgnIycsIDEpWzBdCiAgICAgICAgICAg
ICBsaW5lID0gbGluZS5yc3RyaXAoKQpAQCAtMTU0LDggKzE1Myw4IEBAIGNsYXNzIENhbm9uaWNh
bGl6ZToKICAgICAgICAgCiAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjaGFyYWN0ZXJTZXRz
KSk6CiAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gIiIKLSAgICAgICAgICAgIHNldCA9IGNoYXJh
Y3RlclNldHNbaV0KLSAgICAgICAgICAgIGZvciBjaCBpbiBzZXQ6CisgICAgICAgICAgICBjdXJf
c2V0ID0gY2hhcmFjdGVyU2V0c1tpXQorICAgICAgICAgICAgZm9yIGNoIGluIGN1cl9zZXQ6CiAg
ICAgICAgICAgICAgICAgY2hhcmFjdGVycyA9IGNoYXJhY3RlcnMgKyAiMHh7Y2hhcmFjdGVyOjA0
eH0sICIuZm9ybWF0KGNoYXJhY3Rlcj1jaCkKICAgICAgICAgICAgIGZpbGUud3JpdGUoImNvbnN0
IFVDaGFyMzIgdW5pY29kZUNoYXJhY3RlclNldHtpbmRleDpkfVtdID0ge3sge2NoYXJhY3RlcnN9
MCB9fTtcbiIuZm9ybWF0KGluZGV4PWksIGNoYXJhY3RlcnM9Y2hhcmFjdGVycykpCiAKQEAgLTE4
OSw3ICsxODgsNyBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGNhc2VGb2xkaW5n
VHh0UGF0aCA9IGFyZ3NbMF0KICAgICBjYW5vbmljYWxpemVIUGF0aCA9IGFyZ3NbMV0KICAgICBj
YXNlRm9sZGluZ1R4dEZpbGUgPSBvcGVuT3JFeGl0KGNhc2VGb2xkaW5nVHh0UGF0aCwgInIiKQot
ICAgIGNhbm9uaWNhbGl6ZUhGaWxlID0gb3Blbk9yRXhpdChjYW5vbmljYWxpemVIUGF0aCwgIndi
IikKKyAgICBjYW5vbmljYWxpemVIRmlsZSA9IG9wZW5PckV4aXQoY2Fub25pY2FsaXplSFBhdGgs
ICJ3IikKIAogICAgIGNhbm9uaWNhbGl6ZSA9IENhbm9uaWNhbGl6ZSgpCiAgICAgY2Fub25pY2Fs
aXplLnJlYWRDYXNlRm9sZGluZyhjYXNlRm9sZGluZ1R4dEZpbGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9nZW5lcmF0ZVlhcnJVbmljb2RlUHJvcGVydHlUYWJsZXMu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9nZW5lcmF0ZVlhcnJVbmljb2RlUHJvcGVy
dHlUYWJsZXMucHkKaW5kZXggZjhiYzY4MDVkNzAuLmNlYjVjOGY0ZjIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9nZW5lcmF0ZVlhcnJVbmljb2RlUHJvcGVydHlUYWJs
ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvZ2VuZXJhdGVZYXJyVW5pY29k
ZVByb3BlcnR5VGFibGVzLnB5CkBAIC0zMjIsNyArMzIyLDcgQEAgY2xhc3MgUHJvcGVydHlEYXRh
OgogICAgICAgICBpbnNlcnRMb2NhdGlvbiA9IE5vbmUKICAgICAgICAgbG93Q29kZVBvaW50ID0g
Tm9uZQogICAgICAgICBoaWdoQ29kZVBvaW50ID0gTm9uZQotICAgICAgICBmb3IgaWR4IGluIHhy
YW5nZShsZW4obWF0Y2hlcykpOgorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihtYXRjaGVz
KSk6CiAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbaWR4XQogICAgICAgICAgICAgaWYgY29k
ZVBvaW50ID09IG1hdGNoICsgMToKICAgICAgICAgICAgICAgICBsb3dDb2RlUG9pbnQgPSBtYXRj
aApAQCAtMzUxLDIyICszNTEsMjIgQEAgY2xhc3MgUHJvcGVydHlEYXRhOgogICAgICAgICAgICAg
bG93Q29kZVBvaW50ID0gY29kZVBvaW50CiAgICAgICAgICAgICBoaWdoQ29kZVBvaW50ID0gY29k
ZVBvaW50CiAKLSAgICAgICAgZm9yIGlkeCBpbiB4cmFuZ2UobGVuKHJhbmdlcykpOgotICAgICAg
ICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAgICAgICAgaWYgbG93Q29kZVBvaW50ID49
IHJhbmdlWzBdIGFuZCBoaWdoQ29kZVBvaW50IDw9IHJhbmdlWzFdOgorICAgICAgICBmb3IgaWR4
IGluIHJhbmdlKGxlbihyYW5nZXMpKToKKyAgICAgICAgICAgIGN1cl9yYW5nZSA9IHJhbmdlc1tp
ZHhdCisgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPj0gY3VyX3JhbmdlWzBdIGFuZCBoaWdo
Q29kZVBvaW50IDw9IGN1cl9yYW5nZVsxXToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAg
ICAgICAgIGlmIGxvd0NvZGVQb2ludCA8PSAocmFuZ2VbMV0gKyAxKSBhbmQgaGlnaENvZGVQb2lu
dCA+PSAocmFuZ2VbMF0gLSAxKToKKyAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA8PSAoY3Vy
X3JhbmdlWzFdICsgMSkgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gKGN1cl9yYW5nZVswXSAtIDEpOgog
ICAgICAgICAgICAgICAgIHdoaWxlIGlkeCA8IGxlbihyYW5nZXMpIGFuZCBoaWdoQ29kZVBvaW50
ID49IChyYW5nZXNbaWR4XVswXSAtIDEpOgotICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHJh
bmdlc1tpZHhdCi0gICAgICAgICAgICAgICAgICAgIGxvd0NvZGVQb2ludCA9IG1pbihsb3dDb2Rl
UG9pbnQsIHJhbmdlWzBdKQotICAgICAgICAgICAgICAgICAgICBoaWdoQ29kZVBvaW50ID0gbWF4
KGhpZ2hDb2RlUG9pbnQsIHJhbmdlWzFdKQorICAgICAgICAgICAgICAgICAgICBjdXJfcmFuZ2Ug
PSByYW5nZXNbaWR4XQorICAgICAgICAgICAgICAgICAgICBsb3dDb2RlUG9pbnQgPSBtaW4obG93
Q29kZVBvaW50LCBjdXJfcmFuZ2VbMF0pCisgICAgICAgICAgICAgICAgICAgIGhpZ2hDb2RlUG9p
bnQgPSBtYXgoaGlnaENvZGVQb2ludCwgY3VyX3JhbmdlWzFdKQogICAgICAgICAgICAgICAgICAg
ICBkZWwgcmFuZ2VzW2lkeF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3Vu
dCA9IHNlbGYuY29kZVBvaW50Q291bnQgLSAocmFuZ2VbMV0gLSByYW5nZVswXSkgLSAxCisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50
IC0gKGN1cl9yYW5nZVsxXSAtIGN1cl9yYW5nZVswXSkgLSAxCiAKICAgICAgICAgICAgICAgICBy
YW5nZXMuaW5zZXJ0KGlkeCwgKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCkpCiAgICAgICAg
ICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgKyAoaGln
aENvZGVQb2ludCAtIGxvd0NvZGVQb2ludCkgKyAxCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0g
ICAgICAgICAgICBlbGlmIGhpZ2hDb2RlUG9pbnQgPCByYW5nZVswXToKKyAgICAgICAgICAgIGVs
aWYgaGlnaENvZGVQb2ludCA8IGN1cl9yYW5nZVswXToKICAgICAgICAgICAgICAgICBpZiBsb3dD
b2RlUG9pbnQgIT0gaGlnaENvZGVQb2ludDoKICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLmlu
c2VydChpZHgsIChsb3dDb2RlUG9pbnQsIGhpZ2hDb2RlUG9pbnQpKQogICAgICAgICAgICAgICAg
ICAgICBzZWxmLmNvZGVQb2ludENvdW50ID0gc2VsZi5jb2RlUG9pbnRDb3VudCArIChoaWdoQ29k
ZVBvaW50IC0gbG93Q29kZVBvaW50KSArIDEKQEAgLTM4NCw3ICszODQsNyBAQCBjbGFzcyBQcm9w
ZXJ0eURhdGE6CiAKICAgICBkZWYgYWRkUmFuZ2VVbm9yZGVyZWRGb3JNYXRjaGVzQW5kUmFuZ2Vz
KHNlbGYsIGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCwgbWF0Y2hlcywgcmFuZ2VzKToKICAg
ICAgICAgaWYgbGVuKG1hdGNoZXMpIGFuZCBoaWdoQ29kZVBvaW50ID49IG1hdGNoZXNbMF0gYW5k
IGxvd0NvZGVQb2ludCA8PSBtYXRjaGVzWy0xXToKLSAgICAgICAgICAgIGZvciBpZHggaW4geHJh
bmdlKGxlbihtYXRjaGVzKSk6CisgICAgICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihtYXRj
aGVzKSk6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaGVzW2lkeF0KICAgICAgICAgICAg
ICAgICBpZiBsb3dDb2RlUG9pbnQgPD0gbWF0Y2ggYW5kIGhpZ2hDb2RlUG9pbnQgPj0gbWF0Y2g6
CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGlkeCA8IGxlbihtYXRjaGVzKSBhbmQgaGlnaENv
ZGVQb2ludCA+PSBtYXRjaGVzW2lkeF06CkBAIC00MTQsMjIgKzQxNCwyMiBAQCBjbGFzcyBQcm9w
ZXJ0eURhdGE6CiAgICAgICAgICAgICAgICAgZWxpZiBoaWdoQ29kZVBvaW50IDwgbWF0Y2g6CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKLSAgICAgICAgZm9yIGlkeCBpbiB4cmFuZ2UobGVu
KHJhbmdlcykpOgotICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAgICAgICAg
aWYgbG93Q29kZVBvaW50ID49IHJhbmdlWzBdIGFuZCBoaWdoQ29kZVBvaW50IDw9IHJhbmdlWzFd
OgorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihyYW5nZXMpKToKKyAgICAgICAgICAgIGN1
cl9yYW5nZSA9IHJhbmdlc1tpZHhdCisgICAgICAgICAgICBpZiBsb3dDb2RlUG9pbnQgPj0gY3Vy
X3JhbmdlWzBdIGFuZCBoaWdoQ29kZVBvaW50IDw9IGN1cl9yYW5nZVsxXToKICAgICAgICAgICAg
ICAgICByZXR1cm4KLSAgICAgICAgICAgIGlmIGxvd0NvZGVQb2ludCA8PSAocmFuZ2VbMV0gKyAx
KSBhbmQgaGlnaENvZGVQb2ludCA+PSAocmFuZ2VbMF0gLSAxKToKKyAgICAgICAgICAgIGlmIGxv
d0NvZGVQb2ludCA8PSAoY3VyX3JhbmdlWzFdICsgMSkgYW5kIGhpZ2hDb2RlUG9pbnQgPj0gKGN1
cl9yYW5nZVswXSAtIDEpOgogICAgICAgICAgICAgICAgIHdoaWxlIGlkeCA8IGxlbihyYW5nZXMp
IGFuZCBoaWdoQ29kZVBvaW50ID49IChyYW5nZXNbaWR4XVswXSAtIDEpOgotICAgICAgICAgICAg
ICAgICAgICByYW5nZSA9IHJhbmdlc1tpZHhdCi0gICAgICAgICAgICAgICAgICAgIGxvd0NvZGVQ
b2ludCA9IG1pbihsb3dDb2RlUG9pbnQsIHJhbmdlWzBdKQotICAgICAgICAgICAgICAgICAgICBo
aWdoQ29kZVBvaW50ID0gbWF4KGhpZ2hDb2RlUG9pbnQsIHJhbmdlWzFdKQorICAgICAgICAgICAg
ICAgICAgICBjdXJfcmFuZ2UgPSByYW5nZXNbaWR4XQorICAgICAgICAgICAgICAgICAgICBsb3dD
b2RlUG9pbnQgPSBtaW4obG93Q29kZVBvaW50LCBjdXJfcmFuZ2VbMF0pCisgICAgICAgICAgICAg
ICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBtYXgoaGlnaENvZGVQb2ludCwgY3VyX3JhbmdlWzFdKQog
ICAgICAgICAgICAgICAgICAgICBkZWwgcmFuZ2VzW2lkeF0KLSAgICAgICAgICAgICAgICAgICAg
c2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50Q291bnQgLSAocmFuZ2VbMV0gLSBy
YW5nZVswXSkgLSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBz
ZWxmLmNvZGVQb2ludENvdW50IC0gKGN1cl9yYW5nZVsxXSAtIGN1cl9yYW5nZVswXSkgLSAxCiAK
ICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgKGxvd0NvZGVQb2ludCwgaGlnaENv
ZGVQb2ludCkpCiAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29k
ZVBvaW50Q291bnQgKyAoaGlnaENvZGVQb2ludCAtIGxvd0NvZGVQb2ludCkgKyAxCiAgICAgICAg
ICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBlbGlmIGhpZ2hDb2RlUG9pbnQgPCByYW5nZVsw
XToKKyAgICAgICAgICAgIGVsaWYgaGlnaENvZGVQb2ludCA8IGN1cl9yYW5nZVswXToKICAgICAg
ICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2lu
dCkpCiAgICAgICAgICAgICAgICAgc2VsZi5jb2RlUG9pbnRDb3VudCA9IHNlbGYuY29kZVBvaW50
Q291bnQgKyAoaGlnaENvZGVQb2ludCAtIGxvd0NvZGVQb2ludCkgKyAxCiAgICAgICAgICAgICAg
ICAgcmV0dXJuCkBAIC00NTksMTMgKzQ1OSwxMyBAQCBjbGFzcyBQcm9wZXJ0eURhdGE6CiAgICAg
ICAgICAgICAgICAgc2VsZi5hZGRSYW5nZVVub3JkZXJlZEZvck1hdGNoZXNBbmRSYW5nZXMoZmly
c3RVbmljb2RlQ29kZVBvaW50LCBoaWdoQ29kZVBvaW50LCBzZWxmLnVuaWNvZGVNYXRjaGVzLCBz
ZWxmLnVuaWNvZGVSYW5nZXMpCiAKICAgICBkZWYgcmVtb3ZlTWF0Y2hGcm9tUmFuZ2VzKHNlbGYs
IGNvZGVQb2ludCwgcmFuZ2VzKToKLSAgICAgICAgZm9yIGlkeCBpbiB4cmFuZ2UobGVuKHJhbmdl
cykpOgotICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbaWR4XQotICAgICAgICAgICAgaWYgcmFu
Z2VbMF0gPD0gY29kZVBvaW50IGFuZCBjb2RlUG9pbnQgPD0gcmFuZ2VbMV06CisgICAgICAgIGZv
ciBpZHggaW4gcmFuZ2UobGVuKHJhbmdlcykpOgorICAgICAgICAgICAgY3VyX3JhbmdlID0gcmFu
Z2VzW2lkeF0KKyAgICAgICAgICAgIGlmIGN1cl9yYW5nZVswXSA8PSBjb2RlUG9pbnQgYW5kIGNv
ZGVQb2ludCA8PSBjdXJfcmFuZ2VbMV06CiAgICAgICAgICAgICAgICAgcmFuZ2VzLnBvcChpZHgp
Ci0gICAgICAgICAgICAgICAgaWYgcmFuZ2VbMF0gPCBjb2RlUG9pbnQgYW5kIGNvZGVQb2ludCA8
IHJhbmdlWzFdOgotICAgICAgICAgICAgICAgICAgICBsb3dSYW5nZSA9IChyYW5nZVswXSwgY29k
ZVBvaW50IC0gMSkKLSAgICAgICAgICAgICAgICAgICAgaGlnaFJhbmdlID0gKGNvZGVQb2ludCAr
IDEsIHJhbmdlWzFdKQorICAgICAgICAgICAgICAgIGlmIGN1cl9yYW5nZVswXSA8IGNvZGVQb2lu
dCBhbmQgY29kZVBvaW50IDwgY3VyX3JhbmdlWzFdOgorICAgICAgICAgICAgICAgICAgICBsb3dS
YW5nZSA9IChjdXJfcmFuZ2VbMF0sIGNvZGVQb2ludCAtIDEpCisgICAgICAgICAgICAgICAgICAg
IGhpZ2hSYW5nZSA9IChjb2RlUG9pbnQgKyAxLCBjdXJfcmFuZ2VbMV0pCiAgICAgICAgICAgICAg
ICAgICAgICMgU2luY2UgbGlzdC5pbnNlcnQgaW5zZXJ0cyBiZWZvcmUgdGhlIGluZGV4IGdpdmVu
LCBoYW5kbGUgdGhlIGhpZ2ggcmFuZ2UgZmlyc3QKICAgICAgICAgICAgICAgICAgICAgaWYgaGln
aFJhbmdlWzBdID09IGhpZ2hSYW5nZVsxXToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
YWRkTWF0Y2hVbm9yZGVyZWQoaGlnaFJhbmdlWzBdKQpAQCAtNDc2LDE0ICs0NzYsMTQgQEAgY2xh
c3MgUHJvcGVydHlEYXRhOgogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpZHgsIGxvd1JhbmdlKQogICAgICAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHJhbmdlWzBdID09IGNvZGVQb2ludDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gKGNvZGVQb2ludCArIDEsIHJhbmdlWzFdKQor
ICAgICAgICAgICAgICAgICAgICBpZiBjdXJfcmFuZ2VbMF0gPT0gY29kZVBvaW50OgorICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyX3JhbmdlID0gKGNvZGVQb2ludCArIDEsIGN1cl9yYW5nZVsx
XSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJh
bmdlID0gKHJhbmdlWzBdLCBjb2RlUG9pbnQgLSAxKQotICAgICAgICAgICAgICAgICAgICBpZiBy
YW5nZVswXSA9PSByYW5nZVsxXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkTWF0
Y2hVbm9yZGVyZWQocmFuZ2VbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfcmFuZ2Ug
PSAoY3VyX3JhbmdlWzBdLCBjb2RlUG9pbnQgLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiBj
dXJfcmFuZ2VbMF0gPT0gY3VyX3JhbmdlWzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5hZGRNYXRjaFVub3JkZXJlZChjdXJfcmFuZ2VbMF0pCiAgICAgICAgICAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgcmFuZ2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGlkeCwgY3VyX3JhbmdlKQogICAg
ICAgICAgICAgICAgIHNlbGYuY29kZVBvaW50Q291bnQgPSBzZWxmLmNvZGVQb2ludENvdW50IC0g
MQogICAgICAgICAgICAgICAgIHJldHVybgogCkBAIC03NDIsMTMgKzc0MiwxMyBAQCBjbGFzcyBT
Y3JpcHRzOgogICAgICAgICAgICAgICAgICAgICBsb3dDb2RlUG9pbnQgPSBpbnQoY29kZVBvaW50
c1s6ZG90RG90XSwgMTYpCiAgICAgICAgICAgICAgICAgICAgIGhpZ2hDb2RlUG9pbnQgPSBpbnQo
Y29kZVBvaW50c1tkb3REb3QgKyAyOl0sIDE2KQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50
UHJvcGVydHlEYXRhLmFkZFJhbmdlKGxvd0NvZGVQb2ludCwgaGlnaENvZGVQb2ludCkKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIGNvZGVQb2ludCBpbiB4cmFuZ2UobG93Q29kZVBvaW50LCBoaWdo
Q29kZVBvaW50ICsgMSk6CisgICAgICAgICAgICAgICAgICAgIGZvciBjb2RlUG9pbnQgaW4gcmFu
Z2UobG93Q29kZVBvaW50LCBoaWdoQ29kZVBvaW50ICsgMSk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb21tb25TY3JpcHRFeHRlbnN0aW9uUHJvcGVydHlEYXRhLnJlbW92ZU1hdGNoKGNvZGVQ
b2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZFNjcmlwdEV4dGVuc2lvblBy
b3BlcnR5RGF0YS5yZW1vdmVNYXRjaChjb2RlUG9pbnQpCiAKICAgICAgICAgIyBGb3IgdGhlIHNj
cmlwdHMgdGhhdCBkb24ndCBoYXZlIGFueSBhZGRpdGlvbmFsIGV4dGVuc2lvbiBjb2RlUG9pbnRz
LCBjb3B5IHRoZSBzY3JpcHQKICAgICAgICAgIyBkYXRhIHRvIHRoZSBzY3JpcHQgZXh0ZW5zaW9u
IHdpdGggdGhlIHNhbWUgbmFtZQotICAgICAgICBmb3Igc2NyaXB0TmFtZSwgcHJvcGVydHlEYXRh
IGluIHNlbGYuc2NyaXB0c0J5TmFtZS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHNjcmlwdE5h
bWUsIHByb3BlcnR5RGF0YSBpbiBzZWxmLnNjcmlwdHNCeU5hbWUuaXRlbXMoKToKICAgICAgICAg
ICAgIGlmIHNjcmlwdE5hbWUgbm90IGluIHNlbGYuc2NyaXB0RXh0ZW5zaW9uc0J5TmFtZToKICAg
ICAgICAgICAgICAgICBzZWxmLnNjcmlwdEV4dGVuc2lvbnNCeU5hbWVbc2NyaXB0TmFtZV0gPSBw
cm9wZXJ0eURhdGEKIApAQCAtOTQ4LDcgKzk0OCw3IEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5f
XyI6CiAKICAgICBhbGlhc2VzID0gQWxpYXNlcygpCiAKLSAgICBwcm9wZXJ0eURhdGFIRmlsZSA9
IG9wZW5PckV4aXQodW5pY29kZVByb2VydHlEYXRhSFBhdGgsICJ3YiIpCisgICAgcHJvcGVydHlE
YXRhSEZpbGUgPSBvcGVuT3JFeGl0KHVuaWNvZGVQcm9lcnR5RGF0YUhQYXRoLCAidyIpCiAKICAg
ICBwcm9wZXJ0eURhdGFIRmlsZS53cml0ZShoZWFkZXIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL2hhc2hlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L2hhc2hlci5weQppbmRleCBjZjAyOTBiNWU1ZS4uZDliYTRkMGY5MGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL2hhc2hlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9oYXNoZXIucHkKQEAgLTM2LDcgKzM2LDcgQEAgZGVmIHN0cmluZ0hhc2goc3Ry
KToKICAgICBoYXNoID0gc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUKIAogICAgIHN0ckxlbmd0aCA9
IGxlbihzdHIpCi0gICAgY2hhcmFjdGVyUGFpcnMgPSBzdHJMZW5ndGggLyAyCisgICAgY2hhcmFj
dGVyUGFpcnMgPSBpbnQoc3RyTGVuZ3RoIC8gMikKICAgICByZW1haW5kZXIgPSBzdHJMZW5ndGgg
JiAxCiAKICAgICAjIE1haW4gbG9vcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDkzY2ZhMDIwYWFhLi41ZDYyMWYw
ZDllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA5LTIwICBNaWtlIEdvcnNl
ICA8bWdvcnNlQHN1c2UuY29tPgorCisgICAgICAgIEJ1aWxkIHRvb2xzIHNob3VsZCB3b3JrIHdo
ZW4gdGhlIC91c3IvYmluL3B5dGhvbiBpcyBweXRob24zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKG5vIGJlaGF2aW9yIGNoYW5n
ZSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NyZWF0ZS1odHRwLWhlYWRlci1uYW1l
LXRhYmxlOiByZW1vdmUgeHJlYWRsaW5lcy4KKwogMjAxOC0wOS0yMCAgQmVuamFtaW4gUG91bGFp
biAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRvcHQgc2FmZS1hcmVhLWluc2V0
cyBvbiBJbWFnZURvY3VtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NyZWF0ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jcmVhdGUtaHR0cC1oZWFkZXItbmFtZS10YWJsZQppbmRleCBmNWJlYjYz
NzExMi4uNjQ3Y2RkODI0MmYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3JlYXRlLWh0dHAtaGVhZGVyLW5hbWUtdGFibGUKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jcmVhdGUtaHR0cC1oZWFkZXItbmFtZS10YWJsZQpAQCAtNDIsNyAr
NDIsNyBAQCBpbnB1dF9maWxlID0gb3BlbihpbnB1dF9wYXRoKQogaHR0cF9oZWFkZXJfbmFtZV90
b19pZCA9IHsgfQogaHR0cF9oZWFkZXJfbmFtZXMgPSBbXQogCi1mb3IgbGluZSBpbiBpbnB1dF9m
aWxlLnhyZWFkbGluZXMoKToKK2ZvciBsaW5lIGluIGlucHV0X2ZpbGU6CiAgICAgaHR0cF9oZWFk
ZXJfbmFtZSA9IGxpbmUuc3RyaXAoKQogICAgIGlmIG5vdCBodHRwX2hlYWRlcl9uYW1lIG9yIGh0
dHBfaGVhZGVyX25hbWVbOjJdID09ICcvLyc6CiAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L0NoYW5nZUxvZwppbmRleCBlNGMzMjlhZWU1MC4uNDRjNTIwMDE0ZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE4LTA5LTIwICBNaWtlIEdvcnNlICA8bWdv
cnNlQHN1c2UuY29tPgorCisgICAgICAgIEJ1aWxkIHRvb2xzIHNob3VsZCB3b3JrIHdoZW4gdGhl
IC91c3IvYmluL3B5dGhvbiBpcyBweXRob24zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJj
ZXMucGw6IFVzZSAkUFlUSE9OIGlmIHNldAorICAgICAgICBpbiB0aGUgZW52aXJvbm1lbnQuCisK
IDIwMTgtMDktMjAgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IHJlbW92ZSBWaXN1YWwgU3R5bGUgQ1NTIGRldGFpbHMgc2lkZWJhciBw
YW5lbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2Vy
LWludGVyZmFjZS1yZXNvdXJjZXMucGwgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9j
b3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbAppbmRleCBlYjMxMWM2ODRlMC4uMDBjMzhj
MWYzMTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNl
ci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3Jp
cHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCkBAIC0xNzYsNiArMTc2LDggQEAg
bXkgJGVzbGludExpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgk
ZXNsaW50UGF0aCwgJ0xJQ0VOU0UnKSkKIG15ICR0aHJlZWpzTGljZW5zZSA9IHJlYWRMaWNlbnNl
RmlsZShGaWxlOjpTcGVjLT5jYXRmaWxlKCR0aHJlZWpzUGF0aCwgJ0xJQ0VOU0UnKSk7CiBtYWtl
X3BhdGgoJHByb3RvY29sRGlyLCAkdGFyZ2V0UmVzb3VyY2VQYXRoKTsKIAorJHB5dGhvbiA9ICRF
TlZ7IlBZVEhPTiJ9IGlmIGRlZmluZWQoJEVOVnsiUFlUSE9OIn0pOworCiAjIENvcHkgb3ZlciBk
eW5hbWljYWxseSBsb2FkZWQgZmlsZXMgZnJvbSBvdGhlciBmcmFtZXdvcmtzLCBldmVuIGlmIHdl
IGFyZW4ndCBjb21iaW5pbmcgcmVzb3VyY2VzLgogY29weShGaWxlOjpTcGVjLT5jYXRmaWxlKCRF
TlZ7J0pBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVInfSwgJ0luc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcycpLCBGaWxlOjpTcGVjLT5jYXRmaWxlKCRwcm90b2NvbERpciwgJ0luc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcycpKSBvciBkaWUgIkNvcHkgb2YgSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzIGZhaWxlZDogJCEiOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvV2Vi
S2l0Q29tbW9uLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdENvbW1vbi5jbWFrZQppbmRleCBk
NjU5NTc3YjU5MS4uZmQ4ZDhkY2U3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRD
b21tb24uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdENvbW1vbi5jbWFrZQpAQCAtMjEs
OSArMjEsNiBAQCBpZiAoTk9UIEhBU19SVU5fV0VCS0lUX0NPTU1PTikKICAgICBmaW5kX3BhY2th
Z2UoUGVybE1vZHVsZXMgQ09NUE9ORU5UUyBKU09OOjpQUCBSRVFVSVJFRCkKIAogICAgIGZpbmRf
cGFja2FnZShQeXRob25JbnRlcnAgMi43LjAgUkVRVUlSRUQpCi0gICAgaWYgKFBZVEhPTl9WRVJT
SU9OX01BSk9SIEdSRUFURVIgMikKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUHl0aG9u
IDIgaXMgcmVxdWlyZWQsIGJ1dCBQeXRob24gJHtQWVRIT05fVkVSU0lPTl9NQUpPUn0gd2FzIGZv
dW5kLiIpCi0gICAgZW5kaWYgKCkKIAogICAgICMgV2UgY2Fubm90IGNoZWNrIGZvciBSVUJZX0ZP
VU5EIGJlY2F1c2UgaXQgaXMgc2V0IG9ubHkgd2hlbiB0aGUgZnVsbCBwYWNrYWdlIGlzIGluc3Rh
bGxlZCBhbmQKICAgICAjIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgaXMgdGhlIGludGVycHJldGVy
LiBVbmxpa2UgUHl0aG9uLCBjbWFrZSBkb2VzIG5vdCBwcm92aWRlIGEgbWFjcm8KLS0gCjIuMTgu
MAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350816</attachid>
            <date>2018-09-25 17:17:14 -0700</date>
            <delta_ts>2018-09-25 17:17:14 -0700</delta_ts>
            <desc>Patch for cmake to use its python module</desc>
            <filename>cmake.patch</filename>
            <type>text/plain</type>
            <size>25758</size>
            <attacher name="Mike Gorse">mgorse</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZTg2OTNiYjY1Ny4uMTI2
OTk4Y2U2OGMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAxOC0wOS0yNSAgTWlrZSBHb3JzZSAgPG1nb3JzZUBzdXNlLmNvbT4KKworICAg
ICAgICBCdWlsZCB0b29scyBzaG91bGQgd29yayB3aGVuIHRoZSAvdXNyL2Jpbi9weXRob24gaXMg
cHl0aG9uMworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU2Njc0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDY4MjAwMT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRD
b21tb24uY21ha2U6IFB5dGhvbkludGVycCAtPiBQeXRob24uCisgICAgICAgIFB5dGhvbkludGVy
cCBpcyBkZXByZWNhdGVkIGFuZCBtYXkgbm90IGZpbmQgUHl0aG9uIDMuCisKIDIwMTgtMDktMjEg
IFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KIAogICAgICAgICBb
SlNDXSBFbmFibGUgTExJbnQgQVNNIGludGVycHJldGVyIG9uIFg2NCBhbmQgQVJNNjQgaW4gbm9u
IEpJVCBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
MzM2MDlhNWNlMmMuLjIyYjhkNWQyN2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC0xNjgsNyArMTY4LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgIE9VVFBVVCAk
e0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L3VkaXM4Nl9pdGFiLmMgJHtERVJJ
VkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS91ZGlzODZfaXRhYi5oCiAgICAgREVQRU5E
UyAke1VESVNfR0VOX0RFUH0KICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0RFUklWRURfU09VUkNF
U19KQVZBU0NSSVBUQ09SRV9ESVJ9Ci0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5ICR7SkFW
QVNDUklQVENPUkVfRElSfS9kaXNhc3NlbWJsZXIvdWRpczg2L29wdGFibGUueG1sICR7REVSSVZF
RF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0KKyAgICBDT01NQU5EICR7UHl0aG9uX0VYRUNV
VEFCTEV9ICR7SkFWQVNDUklQVENPUkVfRElSfS9kaXNhc3NlbWJsZXIvdWRpczg2L3VkX2l0YWIu
cHkgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Rpc2Fzc2VtYmxlci91ZGlzODYvb3B0YWJsZS54bWwg
JHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfQogICAgIFZFUkJBVElNKQogCiBs
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9IRUFERVJTCkBAIC0yMDUsNyArMjA1LDcgQEAgYWRk
X2N1c3RvbV9jb21tYW5kKAogICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBU
Q09SRV9ESVJ9L0J5dGVjb2Rlcy5oICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vSW5pdEJ5dGVjb2Rlcy5hc20gJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElS
fS9CeXRlY29kZVN0cnVjdHMuaAogICAgIE1BSU5fREVQRU5ERU5DWSAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vZ2VuZXJhdGUtYnl0ZWNvZGUtZmlsZXMKICAgICBERVBFTkRTICR7SkFWQVNDUklQVENP
UkVfRElSfS9nZW5lcmF0ZS1ieXRlY29kZS1maWxlcyBieXRlY29kZS9CeXRlY29kZUxpc3QuanNv
bgotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2dlbmVyYXRlLWJ5dGVjb2RlLWZpbGVzIC0tYnl0ZWNvZGVzX2ggJHtERVJJVkVEX1NPVVJDRVNf
SkFWQVNDUklQVENPUkVfRElSfS9CeXRlY29kZXMuaCAtLWluaXRfYnl0ZWNvZGVzX2FzbSAke0RF
UklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luaXRCeXRlY29kZXMuYXNtIC0tYnl0
ZWNvZGVfc3RydWN0c19oICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vQnl0
ZWNvZGVTdHJ1Y3RzLmggJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5qc29uCisgICAgQ09NTUFORCAke1B5dGhvbl9FWEVDVVRBQkxFfSAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vZ2VuZXJhdGUtYnl0ZWNvZGUtZmlsZXMgLS1ieXRlY29kZXNfaCAke0RFUklWRURfU09V
UkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0J5dGVjb2Rlcy5oIC0taW5pdF9ieXRlY29kZXNfYXNt
ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5pdEJ5dGVjb2Rlcy5hc20g
LS1ieXRlY29kZV9zdHJ1Y3RzX2ggJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElS
fS9CeXRlY29kZVN0cnVjdHMuaCAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0Lmpzb24KICAgICBWRVJCQVRJTSkKIAogbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVf
SEVBREVSUwpAQCAtMzE1LDcgKzMxNSw3IEBAIG1hY3JvKEdFTkVSQVRFX1BZVEhPTiBfZ2VuZXJh
dG9yIF9hZGRpdGlvbmFsX2RlcHMgX2lucHV0IF9vdXRwdXQpCiAgICAgICAgIE9VVFBVVCAke19v
dXRwdXR9CiAgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke19nZW5lcmF0b3J9CiAgICAgICAgIERF
UEVORFMgJHtfaW5wdXR9ICR7X2FkZGl0aW9uYWxfZGVwc30KLSAgICAgICAgQ09NTUFORCAke1BZ
VEhPTl9FWEVDVVRBQkxFfSAke19nZW5lcmF0b3J9ICR7X2lucHV0fSAke19vdXRwdXR9CisgICAg
ICAgIENPTU1BTkQgJHtQeXRob25fRVhFQ1VUQUJMRX0gJHtfZ2VuZXJhdG9yfSAke19pbnB1dH0g
JHtfb3V0cHV0fQogICAgICAgICBWRVJCQVRJTSkKICAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0
Q29yZV9IRUFERVJTICR7X291dHB1dH0pCiAgICAgV0VCS0lUX0FERF9TT1VSQ0VfREVQRU5ERU5D
SUVTKCR7X2lucHV0fSAke19vdXRwdXR9KQpAQCAtOTYwLDcgKzk2MCw3IEBAIGZpbGUoTUFLRV9E
SVJFQ1RPUlkgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS95YXJyKQogYWRk
X2N1c3RvbV9jb21tYW5kKAogICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBU
Q09SRV9ESVJ9L3lhcnIvUmVnRXhwSml0VGFibGVzLmgKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3lhcnIvY3JlYXRlX3JlZ2V4X3RhYmxlcwotICAgIENP
TU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3lh
cnIvY3JlYXRlX3JlZ2V4X3RhYmxlcyAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9E
SVJ9L3lhcnIvUmVnRXhwSml0VGFibGVzLmgKKyAgICBDT01NQU5EICR7UHl0aG9uX0VYRUNVVEFC
TEV9ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS95YXJyL2NyZWF0ZV9yZWdleF90YWJsZXMg
JHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS95YXJyL1JlZ0V4cEppdFRhYmxl
cy5oCiAgICAgVkVSQkFUSU0pCiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9IRUFERVJTICR7
REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0veWFyci9SZWdFeHBKaXRUYWJsZXMu
aCkKIFdFQktJVF9BRERfU09VUkNFX0RFUEVOREVOQ0lFUygke0NNQUtFX0NVUlJFTlRfU09VUkNF
X0RJUn0veWFyci9ZYXJyUGF0dGVybi5jcHAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENP
UkVfRElSfS95YXJyL1JlZ0V4cEppdFRhYmxlcy5oKQpAQCAtOTY5LDcgKzk2OSw3IEBAIGFkZF9j
dXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENP
UkVfRElSfS95YXJyL1VuaWNvZGVQYXR0ZXJuVGFibGVzLmgKICAgICBNQUlOX0RFUEVOREVOQ1kg
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3lhcnIvZ2VuZXJhdGVZYXJyVW5pY29kZVByb3BlcnR5VGFi
bGVzLnB5CiAgICAgREVQRU5EUyAke0pBVkFTQ1JJUFRDT1JFX0RJUn0veWFyci9oYXNoZXIucHkg
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3VjZC9EZXJpdmVkQmluYXJ5UHJvcGVydGllcy50eHQgJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L3VjZC9EZXJpdmVkQ29yZVByb3BlcnRpZXMudHh0ICR7SkFWQVND
UklQVENPUkVfRElSfS91Y2QvRGVyaXZlZE5vcm1hbGl6YXRpb25Qcm9wcy50eHQgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L3VjZC9Qcm9wTGlzdC50eHQgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3VjZC9Q
cm9wZXJ0eUFsaWFzZXMudHh0ICR7SkFWQVNDUklQVENPUkVfRElSfS91Y2QvUHJvcGVydHlWYWx1
ZUFsaWFzZXMudHh0ICR7SkFWQVNDUklQVENPUkVfRElSfS91Y2QvU2NyaXB0RXh0ZW5zaW9ucy50
eHQgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3VjZC9TY3JpcHRzLnR4dCAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vdWNkL1VuaWNvZGVEYXRhLnR4dCAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vdWNkL2Vtb2pp
LWRhdGEudHh0Ci0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke0pBVkFTQ1JJUFRD
T1JFX0RJUn0veWFyci9nZW5lcmF0ZVlhcnJVbmljb2RlUHJvcGVydHlUYWJsZXMucHkgJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L3VjZCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9
L3lhcnIvVW5pY29kZVBhdHRlcm5UYWJsZXMuaAorICAgIENPTU1BTkQgJHtQeXRob25fRVhFQ1VU
QUJMRX0gJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3lhcnIvZ2VuZXJhdGVZYXJyVW5pY29kZVByb3Bl
cnR5VGFibGVzLnB5ICR7SkFWQVNDUklQVENPUkVfRElSfS91Y2QgJHtERVJJVkVEX1NPVVJDRVNf
SkFWQVNDUklQVENPUkVfRElSfS95YXJyL1VuaWNvZGVQYXR0ZXJuVGFibGVzLmgKICAgICBWRVJC
QVRJTSkKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0hFQURFUlMgJHtERVJJVkVEX1NPVVJD
RVNfSkFWQVNDUklQVENPUkVfRElSfS95YXJyL1VuaWNvZGVQYXR0ZXJuVGFibGVzLmgpCiBXRUJL
SVRfQUREX1NPVVJDRV9ERVBFTkRFTkNJRVMoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3lh
cnIvVW5pY29kZVBhdHRlcm5UYWJsZXMuY3BwICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRD
T1JFX0RJUn0veWFyci9Vbmljb2RlUGF0dGVyblRhYmxlcy5oKQpAQCAtOTc4LDcgKzk3OCw3IEBA
IGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVND
UklQVENPUkVfRElSfS95YXJyL1lhcnJDYW5vbmljYWxpemVVbmljb2RlLmNwcAogICAgIE1BSU5f
REVQRU5ERU5DWSAke0pBVkFTQ1JJUFRDT1JFX0RJUn0veWFyci9nZW5lcmF0ZVlhcnJDYW5vbmlj
YWxpemVVbmljb2RlCiAgICAgREVQRU5EUyAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vdWNkL0Nhc2VG
b2xkaW5nLnR4dAotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L3lhcnIvZ2VuZXJhdGVZYXJyQ2Fub25pY2FsaXplVW5pY29kZSAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vdWNkL0Nhc2VGb2xkaW5nLnR4dCAke0RFUklWRURfU09VUkNFU19KQVZBU0NS
SVBUQ09SRV9ESVJ9L3lhcnIvWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUuY3BwCisgICAgQ09NTUFO
RCAke1B5dGhvbl9FWEVDVVRBQkxFfSAke0pBVkFTQ1JJUFRDT1JFX0RJUn0veWFyci9nZW5lcmF0
ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlICR7SkFWQVNDUklQVENPUkVfRElSfS91Y2QvQ2FzZUZv
bGRpbmcudHh0ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0veWFyci9ZYXJy
Q2Fub25pY2FsaXplVW5pY29kZS5jcHAKICAgICBWRVJCQVRJTSkKIAogI0dFTkVSQVRPUjogIklu
dGxDYW5vbmljYWxpemVMYW5ndWFnZS5oIjogdGFibGVzIHVzZWQgYnkgSW50bApAQCAtOTg2LDcg
Kzk4Niw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJD
RVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UuaAogICAgIE1B
SU5fREVQRU5ERU5DWSAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vU2NyaXB0cy9nZW5lcmF0ZUludGxD
YW5vbmljYWxpemVMYW5ndWFnZS5weQogICAgIERFUEVORFMgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L3VjZC9sYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnkudHh0Ci0gICAgQ09NTUFORCAke1BZVEhPTl9F
WEVDVVRBQkxFfSAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vU2NyaXB0cy9nZW5lcmF0ZUludGxDYW5v
bmljYWxpemVMYW5ndWFnZS5weSAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vdWNkL2xhbmd1YWdlLXN1
YnRhZy1yZWdpc3RyeS50eHQgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9J
bnRsQ2Fub25pY2FsaXplTGFuZ3VhZ2UuaAorICAgIENPTU1BTkQgJHtQeXRob25fRVhFQ1VUQUJM
RX0gJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L1NjcmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXpl
TGFuZ3VhZ2UucHkgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3VjZC9sYW5ndWFnZS1zdWJ0YWctcmVn
aXN0cnkudHh0ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW50bENhbm9u
aWNhbGl6ZUxhbmd1YWdlLmgKICAgICBWRVJCQVRJTSkKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRD
b3JlX0hFQURFUlMgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnRsQ2Fu
b25pY2FsaXplTGFuZ3VhZ2UuaCkKIFdFQktJVF9BRERfU09VUkNFX0RFUEVOREVOQ0lFUygke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcnVudGltZS9JbnRsT2JqZWN0LmNwcCAke0RFUklWRURf
U09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0ludGxDYW5vbmljYWxpemVMYW5ndWFnZS5oKQpA
QCAtOTk2LDcgKzk5Niw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9LZXl3b3JkTG9va3VwLmgKICAgICBNQUlO
X0RFUEVOREVOQ1kgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0tleXdvcmRMb29rdXBHZW5l
cmF0b3IucHkKICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYXJzZXIv
S2V5d29yZHMudGFibGUKLSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7Q01BS0Vf
Q1VSUkVOVF9TT1VSQ0VfRElSfS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS9wYXJzZXIvS2V5d29yZHMudGFibGUgPiAke0RFUklWRURfU09VUkNF
U19KQVZBU0NSSVBUQ09SRV9ESVJ9L0tleXdvcmRMb29rdXAuaAorICAgIENPTU1BTkQgJHtQeXRo
b25fRVhFQ1VUQUJMRX0gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0tleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BhcnNlci9LZXl3b3Jkcy50
YWJsZSA+ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vS2V5d29yZExvb2t1
cC5oCiAgICAgVkVSQkFUSU0pCiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9IRUFERVJTICR7
REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vS2V5d29yZExvb2t1cC5oKQogV0VC
S0lUX0FERF9TT1VSQ0VfREVQRU5ERU5DSUVTKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9w
YXJzZXIvTGV4ZXIuY3BwICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vS2V5
d29yZExvb2t1cC5oKQpAQCAtMTA2OSw3ICsxMDY5LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAog
ICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0NvbWJpbmVk
RG9tYWlucy5qc29uCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7SmF2YVNjcmlwdENvcmVfU0NSSVBU
U19ESVJ9L2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5CiAgICAgREVQRU5EUyAk
e0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9ET01BSU5TfQotICAgIENPTU1BTkQgJHtQWVRIT05f
RVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtY29tYmlu
ZWQtaW5zcGVjdG9yLWpzb24ucHkgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfRE9NQUlOU30g
PiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0NvbWJpbmVkRG9tYWlucy5q
c29uCisgICAgQ09NTUFORCAke1B5dGhvbl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSfS9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSAke0phdmFTY3Jp
cHRDb3JlX0lOU1BFQ1RPUl9ET01BSU5TfSA+ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRD
T1JFX0RJUn0vQ29tYmluZWREb21haW5zLmpzb24KICAgICBWRVJCQVRJTSkKIAogIyBJbnNwZWN0
b3IgQmFja2VuZCBEaXNwYXRjaGVycywgRnJvbnRlbmQgRGlzcGF0Y2hlcnMsIFR5cGUgQnVpbGRl
cnMKQEAgLTEwODUsNyArMTA4NSw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAgICAg
JHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VT
X0pBVkFTQ1JJUFRDT1JFX0RJUn0vQ29tYmluZWREb21haW5zLmpzb24KICAgICBERVBFTkRTICR7
SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFN9Ci0gICAgQ09NTUFORCAk
e1BZVEhPTl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJ
Un0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tb3V0cHV0RGlyICIk
e0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvciIgLS1mcmFtZXdv
cmsgSmF2YVNjcmlwdENvcmUgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9D
b21iaW5lZERvbWFpbnMuanNvbgorICAgIENPTU1BTkQgJHtQeXRob25fRVhFQ1VUQUJMRX0gJHtK
YXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weSAtLW91dHB1dERpciAiJHtERVJJVkVEX1NPVVJDRVNfSkFWQVND
UklQVENPUkVfRElSfS9pbnNwZWN0b3IiIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlICR7REVS
SVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vQ29tYmluZWREb21haW5zLmpzb24KICAg
ICBWRVJCQVRJTSkKIAogIyBKU0NCdWlsdGlucwpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAgYWRkX2N1
c3RvbV9jb21tYW5kKAogICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L0pTQ0J1aWx0aW5zLmNwcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9E
SVJ9L0pTQ0J1aWx0aW5zLmgKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKICAgICBERVBFTkRTICR7SmF2YVNj
cmlwdENvcmVfQlVJTFRJTlNfU09VUkNFU30gJHtCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUU30K
LSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBU
U19ESVJ9L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5IC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3Jl
IC0tb3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9
IC0tY29tYmluZWQgJHtKYXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTfQorICAgIENPTU1B
TkQgJHtQeXRob25fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2Vu
ZXJhdGUtanMtYnVpbHRpbnMucHkgLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgLS1vdXRwdXQt
ZGlyZWN0b3J5ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0gLS1jb21iaW5l
ZCAke0phdmFTY3JpcHRDb3JlX0JVSUxUSU5TX1NPVVJDRVN9CiAgICAgVkVSQkFUSU0pCiAKIGxp
c3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0hFQURFUlMKQEAgLTExNzcsNyArMTE3Nyw3IEBAIGFk
ZF9jdXN0b21fY29tbWFuZCgKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwogICAgIERFUEVORFMgJHtKYXZh
U2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0veHhkLnBsICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2pzbWluLnB5CiAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gIi8vIyBz
b3VyY2VVUkw9X19JbmplY3RlZFNjcmlwdF9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyIgPiAke0RF
UklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luamVjdGVkU2NyaXB0U291cmNlLm1p
bi5qcwotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUn0vanNtaW4ucHkgPCAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0U291cmNlLmpzID4+ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JF
X0RJUn0vSW5qZWN0ZWRTY3JpcHRTb3VyY2UubWluLmpzCisgICAgQ09NTUFORCAke1B5dGhvbl9F
WEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9qc21pbi5weSA8ICR7SkFW
QVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgPj4gJHtE
RVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbmplY3RlZFNjcmlwdFNvdXJjZS5t
aW4uanMKICAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSfS94eGQucGwgSW5qZWN0ZWRTY3JpcHRTb3VyY2VfanMgJHtERVJJVkVEX1NPVVJD
RVNfSkFWQVNDUklQVENPUkVfRElSfS9JbmplY3RlZFNjcmlwdFNvdXJjZS5taW4uanMgJHtERVJJ
VkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbmplY3RlZFNjcmlwdFNvdXJjZS5oCiAg
ICAgVkVSQkFUSU0pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDI0ZTMyMDVmNzBlLi4w
NmI3NjZiMDcwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTgtMDktMjUgIE1pa2UgR29yc2UgIDxtZ29yc2VAc3VzZS5jb20+CisKKyAgICAgICAgQnVpbGQg
dG9vbHMgc2hvdWxkIHdvcmsgd2hlbiB0aGUgL3Vzci9iaW4vcHl0aG9uIGlzIHB5dGhvbjMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjY3NAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNDQ2ODIwMDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogUFlUSE9OX0VYRUNVVEFC
TEUgLT4gUHl0aG9uX0VYRUNVVEFCTEUuCisKIDIwMTgtMDktMjUgIEpvc2VwaCBQZWNvcmFybyAg
PHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdHJpY3RlciBi
bG9jayBzeW50YXggaW4gZ2VuZXJhdGVkIE9iakMgcHJvdG9jb2wgaW50ZXJmYWNlcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBkOTZhMGUzYzk2My4uZTdhYjZiNDFjOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xNjY5LDcgKzE2NjksNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgTUFJ
Tl9ERVBFTkRFTkNZIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sCiAgICAgREVQ
RU5EUyAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS94eGQucGwgJHtKYXZhU2NyaXB0Q29y
ZV9TQ1JJUFRTX0RJUn0vaW5saW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMu
cHkKICAgICBERVBFTkRTIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5jc3MgaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXlQYWdlLmpzCi0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRB
QkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9pbmxpbmUtYW5kLW1pbmlmeS1zdHls
ZXNoZWV0cy1hbmQtc2NyaXB0cy5weSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9y
T3ZlcmxheVBhZ2UuaHRtbCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9y
T3ZlcmxheVBhZ2UuY29tYmluZWQuaHRtbAorICAgIENPTU1BTkQgJHtQeXRob25fRVhFQ1VUQUJM
RX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vaW5saW5lLWFuZC1taW5pZnktc3R5bGVz
aGVldHMtYW5kLXNjcmlwdHMucHkgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXlQYWdlLmh0bWwgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rvck92
ZXJsYXlQYWdlLmNvbWJpbmVkLmh0bWwKICAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAk
e0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS94eGQucGwgSW5zcGVjdG9yT3ZlcmxheVBhZ2Vf
aHRtbCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yT3ZlcmxheVBhZ2Uu
Y29tYmluZWQuaHRtbCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yT3Zl
cmxheVBhZ2UuaAogICAgIFZFUkJBVElNKQogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JPdmVybGF5UGFnZS5oKQpAQCAt
MTY4MSw3ICsxNjgxLDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgIE1BSU5fREVQRU5ERU5D
WSBpbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMKICAgICBERVBFTkRTICR7
SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L3h4ZC5wbCAke0phdmFTY3JpcHRDb3JlX1NDUklQ
VFNfRElSfS9qc21pbi5weQogICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICIv
LyMgc291cmNlVVJMPV9fSW5qZWN0ZWRTY3JpcHRfQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2Uu
anMiID4gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0NvbW1hbmRMaW5lQVBJTW9kdWxl
U291cmNlLm1pbi5qcwotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2Ny
aXB0Q29yZV9TQ1JJUFRTX0RJUn0vanNtaW4ucHkgPCAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMgPj4gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9L0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLm1pbi5qcworICAgIENPTU1BTkQgJHtQ
eXRob25fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vanNtaW4ucHkg
PCAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMg
Pj4gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0NvbW1hbmRMaW5lQVBJTW9kdWxlU291
cmNlLm1pbi5qcwogICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVJ9L3h4ZC5wbCBDb21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZV9qcyAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UubWlu
LmpzICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9Db21tYW5kTGluZUFQSU1vZHVsZVNv
dXJjZS5oCiAgICAgVkVSQkFUSU0pCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmgpCkBA
IC0xNzA1LDcgKzE3MDUsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgT1VUUFVUICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9YTUxWaWV3ZXJDU1MuaCAke0RFUklWRURfU09VUkNF
U19XRUJDT1JFX0RJUn0vWE1MVmlld2VyLm1pbi5jc3MKICAgICBNQUlOX0RFUEVOREVOQ1kgeG1s
L1hNTFZpZXdlci5jc3MKICAgICBERVBFTkRTICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9
L3h4ZC5wbCAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9jc3NtaW4ucHkKLSAgICBDT01N
QU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2Nz
c21pbi5weSA8ICR7V0VCQ09SRV9ESVJ9L3htbC9YTUxWaWV3ZXIuY3NzID4gJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L1hNTFZpZXdlci5taW4uY3NzCisgICAgQ09NTUFORCAke1B5dGhv
bl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9jc3NtaW4ucHkgPCAk
e1dFQkNPUkVfRElSfS94bWwvWE1MVmlld2VyLmNzcyA+ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNP
UkVfRElSfS9YTUxWaWV3ZXIubWluLmNzcwogICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9
ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L3h4ZC5wbCBYTUxWaWV3ZXJfY3NzICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9YTUxWaWV3ZXIubWluLmNzcyAke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0vWE1MVmlld2VyQ1NTLmgKICAgICBWRVJCQVRJTSkKIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vWE1MVmll
d2VyQ1NTLmgpCkBAIC0xNzE1LDcgKzE3MTUsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAg
T1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9YTUxWaWV3ZXJKUy5oICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9YTUxWaWV3ZXIubWluLmpzCiAgICAgTUFJTl9ERVBF
TkRFTkNZIHhtbC9YTUxWaWV3ZXIuanMKICAgICBERVBFTkRTICR7SmF2YVNjcmlwdENvcmVfU0NS
SVBUU19ESVJ9L3h4ZC5wbCAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9qc21pbi5weQot
ICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRT
X0RJUn0vanNtaW4ucHkgPCAke1dFQkNPUkVfRElSfS94bWwvWE1MVmlld2VyLmpzID4gJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1hNTFZpZXdlci5taW4uanMKKyAgICBDT01NQU5EICR7
UHl0aG9uX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2pzbWluLnB5
IDwgJHtXRUJDT1JFX0RJUn0veG1sL1hNTFZpZXdlci5qcyA+ICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS9YTUxWaWV3ZXIubWluLmpzCiAgICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJM
RX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0veHhkLnBsIFhNTFZpZXdlcl9qcyAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vWE1MVmlld2VyLm1pbi5qcyAke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0vWE1MVmlld2VySlMuaAogICAgIFZFUkJBVElNKQogbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9YTUxWaWV3
ZXJKUy5oKQpAQCAtMTcyNSw3ICsxNzI1LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgIE9V
VFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSFRNTEVudGl0eVRhYmxlLmNwcAog
ICAgIE1BSU5fREVQRU5ERU5DWSAke1dFQkNPUkVfRElSfS9odG1sL3BhcnNlci9IVE1MRW50aXR5
TmFtZXMuaW4KICAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2h0bWwvcGFyc2VyL2NyZWF0ZS1o
dG1sLWVudGl0eS10YWJsZQotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXRUJD
T1JFX0RJUn0vaHRtbC9wYXJzZXIvY3JlYXRlLWh0bWwtZW50aXR5LXRhYmxlIC1vICR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9IVE1MRW50aXR5VGFibGUuY3BwICR7V0VCQ09SRV9ESVJ9
L2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlOYW1lcy5pbgorICAgIENPTU1BTkQgJHtQeXRob25fRVhF
Q1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vaHRtbC9wYXJzZXIvY3JlYXRlLWh0bWwtZW50aXR5LXRh
YmxlIC1vICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9IVE1MRW50aXR5VGFibGUuY3Bw
ICR7V0VCQ09SRV9ESVJ9L2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlOYW1lcy5pbgogICAgIFZFUkJB
VElNKQogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNP
UkVfRElSfS9IVE1MRW50aXR5VGFibGUuY3BwKQogCkBAIC0xNzM1LDcgKzE3MzUsNyBAQCBhZGRf
Y3VzdG9tX2NvbW1hbmQoCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL25ldHdvcmsvSFRUUEhlYWRlck5hbWVzLmluCiAgICAgREVQRU5EUyAke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL2NyZWF0ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlCiAgICAgV09S
S0lOR19ESVJFQ1RPUlkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9Ci0gICAgQ09NTUFO
RCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL2Ny
ZWF0ZS1odHRwLWhlYWRlci1uYW1lLXRhYmxlICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdv
cmsvSFRUUEhlYWRlck5hbWVzLmluICIke0dQRVJGX0VYRUNVVEFCTEV9IgorICAgIENPTU1BTkQg
JHtQeXRob25fRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9jcmVh
dGUtaHR0cC1oZWFkZXItbmFtZS10YWJsZSAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBIZWFkZXJOYW1lcy5pbiAiJHtHUEVSRl9FWEVDVVRBQkxFfSIKICAgICBWRVJCQVRJTSkK
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vSFRUUEhlYWRlck5hbWVzLmNwcCkKIApAQCAtMTc3Miw3ICsxNzcyLDcgQEAgYWRkX2N1c3Rv
bV9jb21tYW5kKAogICAgIE1BSU5fREVQRU5ERU5DWSAke1dFQkNPUkVfRElSfS9jc3MvU2VsZWN0
b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmluCiAgICAgREVQRU5EUyAk
e1dFQkNPUkVfRElSfS9jc3MvbWFrZVNlbGVjdG9yUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5
RWxlbWVudE1hcC5weQogICAgIFdPUktJTkdfRElSRUNUT1JZICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfQotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJ
Un0vY3NzL21ha2VTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAu
cHkgJHtXRUJDT1JFX0RJUn0vY3NzL1NlbGVjdG9yUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5
RWxlbWVudE1hcC5pbiAiJHtHUEVSRl9FWEVDVVRBQkxFfSIgIiR7RkVBVFVSRV9ERUZJTkVTX1dJ
VEhfU1BBQ0VfU0VQQVJBVE9SfSIKKyAgICBDT01NQU5EICR7UHl0aG9uX0VYRUNVVEFCTEV9ICR7
V0VCQ09SRV9ESVJ9L2Nzcy9tYWtlU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlF
bGVtZW50TWFwLnB5ICR7V0VCQ09SRV9ESVJ9L2Nzcy9TZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29t
cGF0aWJpbGl0eUVsZW1lbnRNYXAuaW4gIiR7R1BFUkZfRVhFQ1VUQUJMRX0iICIke0ZFQVRVUkVf
REVGSU5FU19XSVRIX1NQQUNFX1NFUEFSQVRPUn0iCiAgICAgVkVSQkFUSU0pCiBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1NlbGVjdG9y
UHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5jcHApCiBhZGRfY3VzdG9tX2Nv
bW1hbmQoCkBAIC0xNzgwLDcgKzE3ODAsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgTUFJ
Tl9ERVBFTkRFTkNZICR7V0VCQ09SRV9ESVJ9L2Nzcy9TZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBl
TWFwLmluCiAgICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9jc3MvbWFrZVNlbGVjdG9yUHNldWRv
RWxlbWVudHNNYXAucHkKICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0KLSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V0VCQ09SRV9E
SVJ9L2Nzcy9tYWtlU2VsZWN0b3JQc2V1ZG9FbGVtZW50c01hcC5weSAke1dFQkNPUkVfRElSfS9j
c3MvU2VsZWN0b3JQc2V1ZG9FbGVtZW50VHlwZU1hcC5pbiAiJHtHUEVSRl9FWEVDVVRBQkxFfSIg
IiR7RkVBVFVSRV9ERUZJTkVTX1dJVEhfU1BBQ0VfU0VQQVJBVE9SfSIKKyAgICBDT01NQU5EICR7
UHl0aG9uX0VYRUNVVEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2Nzcy9tYWtlU2VsZWN0b3JQc2V1ZG9F
bGVtZW50c01hcC5weSAke1dFQkNPUkVfRElSfS9jc3MvU2VsZWN0b3JQc2V1ZG9FbGVtZW50VHlw
ZU1hcC5pbiAiJHtHUEVSRl9FWEVDVVRBQkxFfSIgIiR7RkVBVFVSRV9ERUZJTkVTX1dJVEhfU1BB
Q0VfU0VQQVJBVE9SfSIKICAgICBWRVJCQVRJTSkKIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU2VsZWN0b3JQc2V1ZG9FbGVtZW50VHlw
ZU1hcC5jcHApCiAKQEAgLTE4OTcsNyArMTg5Nyw3IEBAIGZvcmVhY2ggKF9idWlsdGluU291cmNl
ICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfSkKICAgICAgICAgICAgICAgICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmgKICAgICAgICAgTUFJ
Tl9ERVBFTkRFTkNZICR7X2J1aWx0aW5Tb3VyY2V9CiAgICAgICAgIERFUEVORFMgJHtCVUlMVElO
U19HRU5FUkFUT1JfU0NSSVBUU30KLSAgICAgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxF
fSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSAt
LWZyYW1ld29yayBXZWJDb3JlIC0tb3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0gJHtfYnVpbHRpblNvdXJjZX0KKyAgICAgICAgQ09NTUFORCAke1B5dGhvbl9F
WEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1qcy1idWls
dGlucy5weSAtLWZyYW1ld29yayBXZWJDb3JlIC0tb3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0gJHtfYnVpbHRpblNvdXJjZX0KICAgICAgICAgVkVSQkFUSU0p
CiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX0JVSUxUSU5fSEVBREVSUyAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oKQogZW5kZm9y
ZWFjaCAoKQpAQCAtMTkwOSw3ICsxOTA5LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAg
ICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5oCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfQog
ICAgIERFUEVORFMgJHtCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUU30gJHtXZWJDb3JlX0RFUklW
RURfQlVJTFRJTl9IRUFERVJTfQotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS13cmFw
cGVycy1vbmx5IC0tZnJhbWV3b3JrIFdlYkNvcmUgLS1vdXRwdXQtZGlyZWN0b3J5ICR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfSAke1dlYkNvcmVfQlVJTFRJTlNfU09VUkNFU30KKyAgICBD
T01NQU5EICR7UHl0aG9uX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5IC0td3JhcHBlcnMtb25seSAtLWZyYW1ld29yayBXZWJD
b3JlIC0tb3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0gJHtX
ZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVN9CiAgICAgVkVSQkFUSU0pCiBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29yZUpT
QnVpbHRpbnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzAyNmJiYTMwOWEuLmIwMjFmM2IyZmI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMDktMjUgIE1pa2UgR29yc2UgIDxtZ29yc2VA
c3VzZS5jb20+CisKKyAgICAgICAgQnVpbGQgdG9vbHMgc2hvdWxkIHdvcmsgd2hlbiB0aGUgL3Vz
ci9iaW4vcHl0aG9uIGlzIHB5dGhvbjMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NjY3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDQ2ODIwMDE+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIChubyBiZWhhdmlvciBjaGFuZ2UpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
IFBZVEhPTl9FWEVDVVRBQkxFIC0+IFB5dGhvbl9FWEVDVVRBQkxFLgorCiAyMDE4LTA5LTI1ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEZp
eCB0aGUgb3BlbiBzb3VyY2UgaU9TIDEyIGJ1aWxkIGFmdGVyIHIyMzY0NDUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0CmluZGV4IDcxZWEyMzBjZmE2Li43Y2IwOGI1MDI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBA
IC0zMzQsOCArMzM0LDggQEAgbWFjcm8oR0VORVJBVEVfTUVTU0FHRV9TT1VSQ0VTIF9vdXRwdXRf
c291cmNlIF9pbnB1dF9maWxlcykKICAgICAgICAgICAgICAgICAgICAgJHtXRUJLSVRfRElSfS9T
Y3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQogICAgICAgICAgICAgICAgICAgICAke1dFQktJVF9E
SVJ9L1NjcmlwdHMvd2Via2l0L21vZGVsLnB5CiAgICAgICAgICAgICAgICAgICAgICR7V0VCS0lU
X0RJUn0vU2NyaXB0cy93ZWJraXQvcGFyc2VyLnB5Ci0gICAgICAgICAgICBDT01NQU5EICR7UFlU
SE9OX0VYRUNVVEFCTEV9ICR7V0VCS0lUX0RJUn0vU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlLXJl
Y2VpdmVyLnB5ICR7X2ZpbGV9ID4gJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUX0RJUn0vJHtfbmFt
ZX1NZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAgICAgICAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNV
VEFCTEV9ICR7V0VCS0lUX0RJUn0vU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlcy1oZWFkZXIucHkg
JHtfZmlsZX0gPiAke0RFUklWRURfU09VUkNFU19XRUJLSVRfRElSfS8ke19uYW1lfU1lc3NhZ2Vz
LmgKKyAgICAgICAgICAgIENPTU1BTkQgJHtQeXRob25fRVhFQ1VUQUJMRX0gJHtXRUJLSVRfRElS
fS9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2UtcmVjZWl2ZXIucHkgJHtfZmlsZX0gPiAke0RFUklW
RURfU09VUkNFU19XRUJLSVRfRElSfS8ke19uYW1lfU1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICAg
ICAgICAgIENPTU1BTkQgJHtQeXRob25fRVhFQ1VUQUJMRX0gJHtXRUJLSVRfRElSfS9TY3JpcHRz
L2dlbmVyYXRlLW1lc3NhZ2VzLWhlYWRlci5weSAke19maWxlfSA+ICR7REVSSVZFRF9TT1VSQ0VT
X1dFQktJVF9ESVJ9LyR7X25hbWV9TWVzc2FnZXMuaAogICAgICAgICAgICAgV09SS0lOR19ESVJF
Q1RPUlkgJHtXRUJLSVRfRElSfQogICAgICAgICAgICAgVkVSQkFUSU0pCiAKQEAgLTM2Nyw3ICsz
NjcsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VT
X1dFQktJVF9ESVJ9L0F1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlcnMuaCAke0RFUklWRURfU09V
UkNFU19XRUJLSVRfRElSfS9BdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJzLmNwcCAke0RFUklW
RURfU09VUkNFU19XRUJLSVRfRElSfS9BdXRvbWF0aW9uUHJvdG9jb2xPYmplY3RzLmggJHtERVJJ
VkVEX1NPVVJDRVNfV0VCS0lUX0RJUn0vQXV0b21hdGlvblByb3RvY29sT2JqZWN0cy5jcHAgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCS0lUX0RJUn0vQXV0b21hdGlvbkZyb250ZW5kRGlzcGF0Y2hlcnMu
aCAke0RFUklWRURfU09VUkNFU19XRUJLSVRfRElSfS9BdXRvbWF0aW9uRnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtXZWJLaXRfQVVUT01BVElPTl9QUk9UT0NP
TF9HRU5FUkFUT1JfSU5QVVRTfQogICAgIERFUEVORFMgJHtXZWJLaXRfQVVUT01BVElPTl9QUk9U
T0NPTF9HRU5FUkFUT1JfU0NSSVBUU30KLSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9
ICR7UFJPVE9DT0xfR0VORVJBVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkgLS1vdXRwdXREaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVF9E
SVJ9IiAtLWZyYW1ld29yayBXZWJLaXQgJHtXZWJLaXRfQVVUT01BVElPTl9QUk9UT0NPTF9HRU5F
UkFUT1JfRVhUUkFfRkxBR1N9IC0tYmFja2VuZCAke1dlYktpdF9BVVRPTUFUSU9OX1BST1RPQ09M
X0dFTkVSQVRPUl9JTlBVVFN9CisgICAgQ09NTUFORCAke1B5dGhvbl9FWEVDVVRBQkxFfSAke1BS
T1RPQ09MX0dFTkVSQVRPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19XRUJLSVRfRElSfSIg
LS1mcmFtZXdvcmsgV2ViS2l0ICR7V2ViS2l0X0FVVE9NQVRJT05fUFJPVE9DT0xfR0VORVJBVE9S
X0VYVFJBX0ZMQUdTfSAtLWJhY2tlbmQgJHtXZWJLaXRfQVVUT01BVElPTl9QUk9UT0NPTF9HRU5F
UkFUT1JfSU5QVVRTfQogICAgIFZFUkJBVElNKQogCiBsaXN0KEFQUEVORCBXZWJLaXRfSEVBREVS
UwpAQCAtMzg3LDcgKzM4Nyw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBNQUlOX0RFUEVO
REVOQ1kgJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb25Qcm94eS5qcwogICAgIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0v
eHhkLnBsICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2pzbWluLnB5CiAgICAgQ09NTUFO
RCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gIi8vIyBzb3VyY2VVUkw9X19JbmplY3RlZFNjcmlw
dF9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmpzIiA+ICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJ
VF9ESVJ9L1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkubWluLmpzCi0gICAgQ09NTUFORCAke1BZ
VEhPTl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9qc21pbi5weSA8
ICR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHkuanMgPj4gJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUX0RJUn0vV2ViQXV0b21hdGlvblNl
c3Npb25Qcm94eS5taW4uanMKKyAgICBDT01NQU5EICR7UHl0aG9uX0VYRUNVVEFCTEV9ICR7SmF2
YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2pzbWluLnB5IDwgJHtXRUJLSVRfRElSfS9XZWJQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5qcyA+PiAke0RFUklWRURf
U09VUkNFU19XRUJLSVRfRElSfS9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Lm1pbi5qcwogICAg
IENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9
L3h4ZC5wbCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5U2NyaXB0U291cmNlICR7REVSSVZFRF9T
T1VSQ0VTX1dFQktJVF9ESVJ9L1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkubWluLmpzICR7REVS
SVZFRF9TT1VSQ0VTX1dFQktJVF9ESVJ9L1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHlTY3JpcHRT
b3VyY2UuaAogICAgIFZFUkJBVElNKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdhNTUyYmQ5MmFmLi5kZTU2OTA3
N2FlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOC0wOS0yNSAgTWlrZSBHb3JzZSAg
PG1nb3JzZUBzdXNlLmNvbT4KKworICAgICAgICBCdWlsZCB0b29scyBzaG91bGQgd29yayB3aGVu
IHRoZSAvdXNyL2Jpbi9weXRob24gaXMgcHl0aG9uMworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2Njc0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80
NDY4MjAwMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OiBQWVRIT05fRVhFQ1VUQUJMRSAtPiBQeXRob25fRVhFQ1VUQUJM
RS4KKwogMjAxOC0wOS0yNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVJUHJvY2VzcyBzaG91bGQgcHJvY2VzcyBpbmNvbWluZyBzeW5jIElQQyBmcm9tIFdlYlBy
b2Nlc3Mgd2hlbiB3YWl0aW5nIGZvciBhIHN5bmMgSVBDIHJlcGx5IGZyb20gaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRDb21tb24uY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0
Q29tbW9uLmNtYWtlCmluZGV4IGZkOGQ4ZGNlNzY0Li5hNjNlZTQ0MTg5NyAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlL1dlYktpdENvbW1vbi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0
Q29tbW9uLmNtYWtlCkBAIC0yMCw3ICsyMCw3IEBAIGlmIChOT1QgSEFTX1JVTl9XRUJLSVRfQ09N
TU9OKQogICAgIGZpbmRfcGFja2FnZShQZXJsIDUuMTAuMCBSRVFVSVJFRCkKICAgICBmaW5kX3Bh
Y2thZ2UoUGVybE1vZHVsZXMgQ09NUE9ORU5UUyBKU09OOjpQUCBSRVFVSVJFRCkKIAotICAgIGZp
bmRfcGFja2FnZShQeXRob25JbnRlcnAgMi43LjAgUkVRVUlSRUQpCisgICAgZmluZF9wYWNrYWdl
KFB5dGhvbiAyLjcuMCBSRVFVSVJFRCkKIAogICAgICMgV2UgY2Fubm90IGNoZWNrIGZvciBSVUJZ
X0ZPVU5EIGJlY2F1c2UgaXQgaXMgc2V0IG9ubHkgd2hlbiB0aGUgZnVsbCBwYWNrYWdlIGlzIGlu
c3RhbGxlZCBhbmQKICAgICAjIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgaXMgdGhlIGludGVycHJl
dGVyLiBVbmxpa2UgUHl0aG9uLCBjbWFrZSBkb2VzIG5vdCBwcm92aWRlIGEgbWFjcm8K
</data>

          </attachment>
      

    </bug>

</bugzilla>