<?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>99588</bug_id>
          
          <creation_ts>2012-10-17 05:16:26 -0700</creation_ts>
          <short_desc>Use forwarder2 in Chrome for Android layout tests.</short_desc>
          <delta_ts>2013-04-08 11:11:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Android</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="felipe">felipeg</reporter>
          <assigned_to name="Philippe Liard">pliard</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>pasko</cc>
    
    <cc>peter</cc>
    
    <cc>pliard</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>744175</commentid>
    <comment_count>0</comment_count>
    <who name="felipe">felipeg</who>
    <bug_when>2012-10-17 05:16:26 -0700</bug_when>
    <thetext>Use the new forwarder2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748445</commentid>
    <comment_count>1</comment_count>
      <attachid>170105</attachid>
    <who name="felipe">felipeg</who>
    <bug_when>2012-10-23 03:07:40 -0700</bug_when>
    <thetext>Created attachment 170105
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748511</commentid>
    <comment_count>2</comment_count>
      <attachid>170105</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 05:00:09 -0700</bug_when>
    <thetext>Comment on attachment 170105
Patch

Attachment 170105 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14500500</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749531</commentid>
    <comment_count>3</comment_count>
      <attachid>170105</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-10-24 04:34:20 -0700</bug_when>
    <thetext>Comment on attachment 170105
Patch

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

Hi Felipe, thank you for the patch! Here are some comments.

Dirk, Adam, I proposed moving the AndroidCommands and Forwarder classes to separate files, as these will be shared for running w_u_t and TWA as well, and this file is becoming way too bloated. But I&apos;m not sure where it should be.

&gt; Tools/ChangeLog:1
&gt; +2012-10-23  Felipe Goldstein  &lt;felipeg@google.com&gt;

nit: Your Bugzilla account says @chromium.org.

&gt; Tools/ChangeLog:3
&gt; +        Use the new forwarder2

I&apos;m afraid that the rest of the WebKit community won&apos;t know what &quot;forwarder2&quot; is: it&apos;s a highly Android-specific term. In general, for platform specific code such as this, we&apos;d use a prefix such as [Chromium] to tell other vendors that this doesn&apos;t concern their ports. Maybe a title such as &quot;[Chromium] Use the new forwarder2 for running layout tests on Android&quot; would work better?

&gt; Tools/ChangeLog:5
&gt; +

The &quot;Reviewed by NOBODY (OOPS!).&quot; line needs to be here.
Furthermore, commit messages in WebKit tend to be quite verbose. Could you add one or two paragraphs explaining *why* we are switching to forwarder2?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:33
&gt; +import pexpect

I don&apos;t think we can rely on the pexpect library to be available on all ports, as the cr-linux failure indicates. Chromium has the dependency in third_party/pexpect for that reason, and loads it through this file: src/build/android/pylib/pexpect.py. Since it&apos;s MIT licensed and WebKit only accepts LGPL and BST, maybe it&apos;s an option to pull it in through Tools/Scripts/webkitpy/thirdparty/__init__.py?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:166
&gt; +        &apos;mac&apos;,

This seems unintentional, Chromium no longer falls back to mac baselines.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:345
&gt; +class AndroidCommands():

nit: inherit from object? Other classes seem to do that.

I think it&apos;d be worthwhile to split AndroidCommands (and forwarder?) to their own files, removing all code related to them from this file. We&apos;ll also need to use them in order to be able to run webkit_unit_tests and TestWebKitAPI. I&apos;m not entirely sure about the ideal directory, maybe Tools/Scripts/webkitpy/common/system/? One worry I have here is that the forwarder is only available for Chromium, which kind of would be a layering violation there...

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:354
&gt; +    def push_md5sum(self):

Should we maybe have a setup_device() method which also executes _setup_performance (and, maybe, a teardown_device() method for _teardown_performance)? Removing all device-logic from the ChromiumAndroidDriver seems preferable. We may be able to address this in later patches..

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:398
&gt; +        return self._port

The Forwarder class only needs the path to the forwarders, exposing the whole Port seems a bit excessive.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:414
&gt; +    _TIMEOUT_SECS = 30

The mixture between global constants and class-local ones is a bit strange. Is there a reason we have both?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:419
&gt; +        Works like adb forward, but in reverse.

I think it&apos;d be fine to remove this line, as 417 already covers what it does.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:422
&gt; +            adb: Instance of AndroidCommands for talking to the device.

nit: the argument is named android_cmd.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:423
&gt; +            port_pairs: A list of tuples (device_port, host_port) to forward. Note

nit: worker_number is missing. Maybe we should remove the argument explanation altogether?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:448
&gt; +        forward_string = [&apos;%d:%d:%s&apos; %

nit: this would fit on a single line.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:450
&gt; +        logging.info(&apos;Forwarding ports: %s&apos;, forward_string)

Should this be str(forward_string)?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:454
&gt; +        # TODO(felipeg): Rather than using a blocking kill() here, the device

nit: WebKit uses unattributed FIXMEs.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:518
&gt; +                logging.info(&quot;Forwarding device port: %d to host port: %d.&quot; %

nit: this could fit on one line (no line length limits).

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:525
&gt; +                raise Exception(&apos;Failed to forward port %d to %d&apos; % (device_port,

nit: dito.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:530
&gt; +                raise Exception(&apos;Unexpected EOF while trying to forward ports %s&apos; %

nit: dito.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:542
&gt; +        self._android_cmd.run_host_command([&apos;pkill&apos;, &apos;-f&apos;, host_pattern])

pkill and pgrep are not available on Mac systems.. Ideally we&apos;d be able to run layout tests on any platform, not just Linux. Not a huge issue now, though.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:545
&gt; +        while not self._android_cmd.run_host_command([&apos;pgrep&apos;, &apos;-f&apos;, host_pattern]) and (

Not splitting the line would make this more readable.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:550
&gt; +                raise Exception(&apos;Timed out while killing &apos; + host_pattern)

nit: indenting.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:560
&gt; +        while self._android_cmd.run_adb_command([&apos;shell&apos;, &apos;ps&apos;]).find(

Not splitting the line would make this more readable.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:565
&gt; +                raise Exception(&apos;Timed out while killing device_forwarder.&apos;)

nit: indenting.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:579
&gt; +        &quot;&quot;&quot;Get the device port that corresponds to a given host port.&quot;&quot;&quot;

We don&apos;t need this comment, the name already describes it :-).

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:583
&gt; +        &quot;&quot;&quot;Terminate the forwarder process.&quot;&quot;&quot;

We don&apos;t need this comment, the name already describes it :-).

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:602
&gt; +        self._android = AndroidCommands(port, worker_number)

The AndroidCommands instance is named &quot;_android_cmd&quot; in the Forwarder class, but &quot;_android&quot; here. Being more verbose is a good thing, so I&apos;d prefer using &quot;_android_cmd&quot; (or maybe even &quot;_android_commands&quot;) for both.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:780
&gt; +        self._forwarder = Forwarder(self._android, self._worker_number, port_pairs, &apos;127.0.0.1&apos;)

Should there be a try/catch here in case the Forwarder.__init__ throws?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749787</commentid>
    <comment_count>4</comment_count>
      <attachid>170105</attachid>
    <who name="felipe">felipeg</who>
    <bug_when>2012-10-24 10:27:04 -0700</bug_when>
    <thetext>Comment on attachment 170105
Patch

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

&gt;&gt; Tools/ChangeLog:1
&gt;&gt; +2012-10-23  Felipe Goldstein  &lt;felipeg@google.com&gt;
&gt; 
&gt; nit: Your Bugzilla account says @chromium.org.

done

&gt;&gt; Tools/ChangeLog:3
&gt;&gt; +        Use the new forwarder2
&gt; 
&gt; I&apos;m afraid that the rest of the WebKit community won&apos;t know what &quot;forwarder2&quot; is: it&apos;s a highly Android-specific term. In general, for platform specific code such as this, we&apos;d use a prefix such as [Chromium] to tell other vendors that this doesn&apos;t concern their ports. Maybe a title such as &quot;[Chromium] Use the new forwarder2 for running layout tests on Android&quot; would work better?

done

&gt;&gt; Tools/ChangeLog:5
&gt;&gt; +
&gt; 
&gt; The &quot;Reviewed by NOBODY (OOPS!).&quot; line needs to be here.
&gt; Furthermore, commit messages in WebKit tend to be quite verbose. Could you add one or two paragraphs explaining *why* we are switching to forwarder2?

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:33
&gt;&gt; +import pexpect
&gt; 
&gt; I don&apos;t think we can rely on the pexpect library to be available on all ports, as the cr-linux failure indicates. Chromium has the dependency in third_party/pexpect for that reason, and loads it through this file: src/build/android/pylib/pexpect.py. Since it&apos;s MIT licensed and WebKit only accepts LGPL and BST, maybe it&apos;s an option to pull it in through Tools/Scripts/webkitpy/thirdparty/__init__.py?

dpne

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:166
&gt;&gt; +        &apos;mac&apos;,
&gt; 
&gt; This seems unintentional, Chromium no longer falls back to mac baselines.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:345
&gt;&gt; +class AndroidCommands():
&gt; 
&gt; nit: inherit from object? Other classes seem to do that.
&gt; 
&gt; I think it&apos;d be worthwhile to split AndroidCommands (and forwarder?) to their own files, removing all code related to them from this file. We&apos;ll also need to use them in order to be able to run webkit_unit_tests and TestWebKitAPI. I&apos;m not entirely sure about the ideal directory, maybe Tools/Scripts/webkitpy/common/system/? One worry I have here is that the forwarder is only available for Chromium, which kind of would be a layering violation there...

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:354
&gt;&gt; +    def push_md5sum(self):
&gt; 
&gt; Should we maybe have a setup_device() method which also executes _setup_performance (and, maybe, a teardown_device() method for _teardown_performance)? Removing all device-logic from the ChromiumAndroidDriver seems preferable. We may be able to address this in later patches..

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:398
&gt;&gt; +        return self._port
&gt; 
&gt; The Forwarder class only needs the path to the forwarders, exposing the whole Port seems a bit excessive.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:414
&gt;&gt; +    _TIMEOUT_SECS = 30
&gt; 
&gt; The mixture between global constants and class-local ones is a bit strange. Is there a reason we have both?

I dont like the global constants. It has no reason be global, but I didn&apos;t want to change that, and since this is the pattern I found in the file, I will keep it and move my local constants to the global namespace.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:419
&gt;&gt; +        Works like adb forward, but in reverse.
&gt; 
&gt; I think it&apos;d be fine to remove this line, as 417 already covers what it does.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:422
&gt;&gt; +            adb: Instance of AndroidCommands for talking to the device.
&gt; 
&gt; nit: the argument is named android_cmd.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:423
&gt;&gt; +            port_pairs: A list of tuples (device_port, host_port) to forward. Note
&gt; 
&gt; nit: worker_number is missing. Maybe we should remove the argument explanation altogether?

The argument explanation came from Chromium code style requirement. Should I remove ?

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:448
&gt;&gt; +        forward_string = [&apos;%d:%d:%s&apos; %
&gt; 
&gt; nit: this would fit on a single line.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:450
&gt;&gt; +        logging.info(&apos;Forwarding ports: %s&apos;, forward_string)
&gt; 
&gt; Should this be str(forward_string)?

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:454
&gt;&gt; +        # TODO(felipeg): Rather than using a blocking kill() here, the device
&gt; 
&gt; nit: WebKit uses unattributed FIXMEs.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:518
&gt;&gt; +                logging.info(&quot;Forwarding device port: %d to host port: %d.&quot; %
&gt; 
&gt; nit: this could fit on one line (no line length limits).

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:525
&gt;&gt; +                raise Exception(&apos;Failed to forward port %d to %d&apos; % (device_port,
&gt; 
&gt; nit: dito.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:530
&gt;&gt; +                raise Exception(&apos;Unexpected EOF while trying to forward ports %s&apos; %
&gt; 
&gt; nit: dito.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:542
&gt;&gt; +        self._android_cmd.run_host_command([&apos;pkill&apos;, &apos;-f&apos;, host_pattern])
&gt; 
&gt; pkill and pgrep are not available on Mac systems.. Ideally we&apos;d be able to run layout tests on any platform, not just Linux. Not a huge issue now, though.

But I thought this was meant to be used with android.
The file is called chromium_android.py and everything is related to running the tests on android devices, which should happen on linux.
If we try to run it from a Mac or Windows we have a much bigger problem. For example, the forwarder binary only works on linux.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:545
&gt;&gt; +        while not self._android_cmd.run_host_command([&apos;pgrep&apos;, &apos;-f&apos;, host_pattern]) and (
&gt; 
&gt; Not splitting the line would make this more readable.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:550
&gt;&gt; +                raise Exception(&apos;Timed out while killing &apos; + host_pattern)
&gt; 
&gt; nit: indenting.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:560
&gt;&gt; +        while self._android_cmd.run_adb_command([&apos;shell&apos;, &apos;ps&apos;]).find(
&gt; 
&gt; Not splitting the line would make this more readable.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:565
&gt;&gt; +                raise Exception(&apos;Timed out while killing device_forwarder.&apos;)
&gt; 
&gt; nit: indenting.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:579
&gt;&gt; +        &quot;&quot;&quot;Get the device port that corresponds to a given host port.&quot;&quot;&quot;
&gt; 
&gt; We don&apos;t need this comment, the name already describes it :-).

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:583
&gt;&gt; +        &quot;&quot;&quot;Terminate the forwarder process.&quot;&quot;&quot;
&gt; 
&gt; We don&apos;t need this comment, the name already describes it :-).

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:602
&gt;&gt; +        self._android = AndroidCommands(port, worker_number)
&gt; 
&gt; The AndroidCommands instance is named &quot;_android_cmd&quot; in the Forwarder class, but &quot;_android&quot; here. Being more verbose is a good thing, so I&apos;d prefer using &quot;_android_cmd&quot; (or maybe even &quot;_android_commands&quot;) for both.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:780
&gt;&gt; +        self._forwarder = Forwarder(self._android, self._worker_number, port_pairs, &apos;127.0.0.1&apos;)
&gt; 
&gt; Should there be a try/catch here in case the Forwarder.__init__ throws?

The exceptions from the __init__ in the Forwarder are quite clear and it is preferred to fail and show the exception from there instead of catching it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749788</commentid>
    <comment_count>5</comment_count>
      <attachid>170423</attachid>
    <who name="felipe">felipeg</who>
    <bug_when>2012-10-24 10:27:38 -0700</bug_when>
    <thetext>Created attachment 170423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749798</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 10:31:00 -0700</bug_when>
    <thetext>Attachment 170423 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy...&quot; exit_code: 1
Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:423:  indentation is not a multiple of four  [pep8/E111] [5]
Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:426:  indentation is not a multiple of four  [pep8/E111] [5]
Total errors found: 2 in 3 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>749882</commentid>
    <comment_count>7</comment_count>
      <attachid>170423</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-10-24 11:56:31 -0700</bug_when>
    <thetext>Comment on attachment 170423
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:42
&gt; +import webkitpy.thirdparty.autoinstalled.pexepct as pexpect

Why not &apos;from webkitpy.thirdparty.autoinstalled import pexpect&apos; like the other import statements?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:78
&gt; +FORWARD_PORTS = [8000, 8080, 8443, 8880, 9323]

Use a tuple instead of a list since this is a constant.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:348
&gt; +class AndroidCommands(Object):

Object? I think you mean object.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:353
&gt; +        self._original_governors = {}

Maybe _original_governors_file_contents?  It wasn&apos;t obvious to me what this dictionary is for.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:368
&gt; +        # Disable CPU scaling and drop ram cache to reduce noise in tests

Nit: Please end the sentence with a period.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:416
&gt; +        result = self._port._executive.run_command(cmd, error_handler=error_handler, return_exit_code=return_exit_code)
&gt; +        return result

Nit: Maybe return directly and remove the temp variable?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:450
&gt; +            port_pairs: A list of tuples (device_port, host_port) to forward. Note
&gt; +                        that you can specify 0 as a device_port, in which case a
&gt; +                        port will by dynamically assigned on the device. You can
&gt; +                        get the number of the assigned port using the
&gt; +                        device_port_for_host_port method.

Rather than passing in a list of tuples, can you make a small class for device port and host port and pass in a list of the class? E.g.,

class Ports(object):
    def __init__(device_port, host_port):
        self.device_port = device_port
        self.host_port = host_port

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:458
&gt; +        self._host_to_device_port_map = dict()

Nit: Why dict() rather than {}?  You use {} above.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:473
&gt; +        timeout_sec = 5

This looks like a constant. Maybe name it TIMEOUT_SECONDS or KILL_TIMEOUT_SECONDS?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:505
&gt; +            # Failure

I would remove this comment.  It seems obvious from the exception being raised.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:522
&gt; +        self._host_process = pexpect.spawn(self._host_forwarder_path,
&gt; +                                           [&apos;--adb_port=%s&apos; % (
&gt; +                                               self._host_adb_control_port)] +
&gt; +                                           forward_string)

The wrapping makes this hard for me to read. Maybe put it on a single line (WebKit doesn&apos;t have an 80 col limit) or just do a 4 space indent rather than trying to align with the open paren.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:536
&gt; +                # Success

I would remove this comment. It seems obvious from the lack of exception being raised.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:542
&gt; +                # Failure

I would remove this comment.  It seems obvious from the exception being raised.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:563
&gt; +        elapsed = 0
&gt; +        wait_period = 0.1

Nit: elapsed_seconds and wait_period_seconds.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:577
&gt; +        elapsed = 0
&gt; +        wait_period = 0.1

Nit: elapsed_seconds and wait_period_seconds.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:599
&gt; +    def close(self):
&gt; +        self._close_process()

Do we need both close and _close_process?  I would just have a single close_process.

&gt; Tools/Scripts/webkitpy/thirdparty/__init__.py:96
&gt; +    def _install_pexpect(self):
&gt; +        return self._install(&quot;http://pexpect.sourceforge.net/pexpect-2.3.tar.gz&quot;,
&gt; +                             &quot;pexpect-2.3&quot;)

It looks like pexpect is MIT licensed: http://www.noah.org/wiki/Pexpect#License
That means we can just check in the files rather than using autoinstall.  It&apos;ll be much less flaky to check the files in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749885</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-10-24 11:58:37 -0700</bug_when>
    <thetext>Maybe land pexpect as a separate change first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750614</commentid>
    <comment_count>9</comment_count>
      <attachid>170423</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-10-25 03:25:45 -0700</bug_when>
    <thetext>Comment on attachment 170423
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/thirdparty/__init__.py:96
&gt;&gt; +                             &quot;pexpect-2.3&quot;)
&gt; 
&gt; It looks like pexpect is MIT licensed: http://www.noah.org/wiki/Pexpect#License
&gt; That means we can just check in the files rather than using autoinstall.  It&apos;ll be much less flaky to check the files in.

I thought that we could only check code licensed with BSD or LGPL 2.1 in. Is this documented somewhere? It would indeed be easier if we can check the pexpect library in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750619</commentid>
    <comment_count>10</comment_count>
      <attachid>170600</attachid>
    <who name="felipe">felipeg</who>
    <bug_when>2012-10-25 03:38:50 -0700</bug_when>
    <thetext>Created attachment 170600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750620</commentid>
    <comment_count>11</comment_count>
      <attachid>170423</attachid>
    <who name="felipe">felipeg</who>
    <bug_when>2012-10-25 03:39:39 -0700</bug_when>
    <thetext>Comment on attachment 170423
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:42
&gt;&gt; +import webkitpy.thirdparty.autoinstalled.pexepct as pexpect
&gt; 
&gt; Why not &apos;from webkitpy.thirdparty.autoinstalled import pexpect&apos; like the other import statements?

done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:78
&gt;&gt; +FORWARD_PORTS = [8000, 8080, 8443, 8880, 9323]
&gt; 
&gt; Use a tuple instead of a list since this is a constant.

Done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:348
&gt;&gt; +class AndroidCommands(Object):
&gt; 
&gt; Object? I think you mean object.

Done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:353
&gt;&gt; +        self._original_governors = {}
&gt; 
&gt; Maybe _original_governors_file_contents?  It wasn&apos;t obvious to me what this dictionary is for.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:368
&gt;&gt; +        # Disable CPU scaling and drop ram cache to reduce noise in tests
&gt; 
&gt; Nit: Please end the sentence with a period.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:416
&gt;&gt; +        return result
&gt; 
&gt; Nit: Maybe return directly and remove the temp variable?

dpne

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:423
&gt;&gt; +      return self._port._path_to_device_forwarder()
&gt; 
&gt; indentation is not a multiple of four  [pep8/E111] [5]

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:426
&gt;&gt; +      return self._port._path_to_host_forwarder()
&gt; 
&gt; indentation is not a multiple of four  [pep8/E111] [5]

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:450
&gt;&gt; +                        device_port_for_host_port method.
&gt; 
&gt; Rather than passing in a list of tuples, can you make a small class for device port and host port and pass in a list of the class? E.g.,
&gt; 
&gt; class Ports(object):
&gt;     def __init__(device_port, host_port):
&gt;         self.device_port = device_port
&gt;         self.host_port = host_port

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:458
&gt;&gt; +        self._host_to_device_port_map = dict()
&gt; 
&gt; Nit: Why dict() rather than {}?  You use {} above.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:473
&gt;&gt; +        timeout_sec = 5
&gt; 
&gt; This looks like a constant. Maybe name it TIMEOUT_SECONDS or KILL_TIMEOUT_SECONDS?

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:505
&gt;&gt; +            # Failure
&gt; 
&gt; I would remove this comment.  It seems obvious from the exception being raised.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:522
&gt;&gt; +                                           forward_string)
&gt; 
&gt; The wrapping makes this hard for me to read. Maybe put it on a single line (WebKit doesn&apos;t have an 80 col limit) or just do a 4 space indent rather than trying to align with the open paren.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:536
&gt;&gt; +                # Success
&gt; 
&gt; I would remove this comment. It seems obvious from the lack of exception being raised.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:542
&gt;&gt; +                # Failure
&gt; 
&gt; I would remove this comment.  It seems obvious from the exception being raised.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:563
&gt;&gt; +        wait_period = 0.1
&gt; 
&gt; Nit: elapsed_seconds and wait_period_seconds.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:577
&gt;&gt; +        wait_period = 0.1
&gt; 
&gt; Nit: elapsed_seconds and wait_period_seconds.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:599
&gt;&gt; +        self._close_process()
&gt; 
&gt; Do we need both close and _close_process?  I would just have a single close_process.

done

&gt;&gt;&gt; Tools/Scripts/webkitpy/thirdparty/__init__.py:96
&gt;&gt;&gt; +                             &quot;pexpect-2.3&quot;)
&gt;&gt; 
&gt;&gt; It looks like pexpect is MIT licensed: http://www.noah.org/wiki/Pexpect#License
&gt;&gt; That means we can just check in the files rather than using autoinstall.  It&apos;ll be much less flaky to check the files in.
&gt; 
&gt; I thought that we could only check code licensed with BSD or LGPL 2.1 in. Is this documented somewhere? It would indeed be easier if we can check the pexpect library in.

Ok,
How should I do that ?
Should I make a separate CL ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750641</commentid>
    <comment_count>12</comment_count>
      <attachid>170600</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 03:57:22 -0700</bug_when>
    <thetext>Comment on attachment 170600
Patch

Attachment 170600 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14559587</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750647</commentid>
    <comment_count>13</comment_count>
      <attachid>170600</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-10-25 04:04:07 -0700</bug_when>
    <thetext>Comment on attachment 170600
Patch

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

Thanks Felipe! A few more comments.

&gt; Tools/ChangeLog:8
&gt; +        Itâs currently not possible to run the Clank test suite on

nit: It&apos;s.

&quot;Clank&quot;? I&apos;m fairly sure you mean WebKit&apos;s layout tests..

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:42
&gt; +from webkitpy.thirdparty.autoinstalled import pexepct

s/pexepct/pexpect. Please be sure to test the change locally as well.

&gt; Tools/Scripts/webkitpy/thirdparty/__init__.py:77
&gt; +        if &apos;.pexpect&apos; in fullname:

Assuming we can indeed land MIT code, it should be fine to add the pexpect library in Tools/Scripts/webkitpy/thirdparty/ directly. This should be done in a separate change, however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750940</commentid>
    <comment_count>14</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-10-25 09:53:04 -0700</bug_when>
    <thetext>https://lists.webkit.org/pipermail/webkit-dev/2010-January/011406.html

Please make a new bug and attach the patch for pexpect to it. The bug could block this bug.

Also, did you run test-webkitpy?  You should also be adding some unittests for your new classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754433</commentid>
    <comment_count>15</comment_count>
      <attachid>171471</attachid>
    <who name="felipe">felipeg</who>
    <bug_when>2012-10-30 09:29:10 -0700</bug_when>
    <thetext>Created attachment 171471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755374</commentid>
    <comment_count>16</comment_count>
      <attachid>171471</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-10-31 09:32:44 -0700</bug_when>
    <thetext>Comment on attachment 171471
Patch

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

Thanks for the updated patch, Felipe! Be sure to reply to Tony&apos;s remarks in comment 14 as well.

&gt; Tools/ChangeLog:6
&gt; +        &quot;Reviewed by NOBODY (OOPS!).&quot;

nit: no need for the quotes here :).

&gt; Tools/ChangeLog:8
&gt; +        Itâs currently not possible to run the Clank test suite on

Clank?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:88
&gt; +FORWARDER_TIMEOUT_SECS = 30

nit: Should we place this line after line 84 for additional clarity?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:451
&gt; +    _TIMEOUT = 3

nit: Other constants don&apos;t have the underscore prefix, I&apos;d prefer if we could stay consistent here.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:455
&gt; +        self._port = android_port

self._port is not used elsewhere in this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756330</commentid>
    <comment_count>17</comment_count>
    <who name="felipe">felipeg</who>
    <bug_when>2012-11-01 09:17:19 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; https://lists.webkit.org/pipermail/webkit-dev/2010-January/011406.html
&gt; 
&gt; Please make a new bug and attach the patch for pexpect to it. The bug could block this bug.
&gt; 
&gt; Also, did you run test-webkitpy?  You should also be adding some unittests for your new classes.

Hey tony I gave up with the pexpect.
I did run the test-webkitpy, all passes.
I did not added unittests to my classes because those classes will be radically changed soon.
Pliard@ is working on a patch on Chromium that will change the way we use the Forwarder2 and the python scripts will be way much simpler than they are now.
Once he makes it on Chromium, he will also need to change it here.
My change is just a step so we can move on while he works on his change in chromium.
Please let me know if you think I should add the unittests now or if we can wait for pliard@ changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756332</commentid>
    <comment_count>18</comment_count>
      <attachid>171471</attachid>
    <who name="felipe">felipeg</who>
    <bug_when>2012-11-01 09:18:15 -0700</bug_when>
    <thetext>Comment on attachment 171471
Patch

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

&gt;&gt; Tools/ChangeLog:6
&gt;&gt; +        &quot;Reviewed by NOBODY (OOPS!).&quot;
&gt; 
&gt; nit: no need for the quotes here :).

done

&gt;&gt; Tools/ChangeLog:8
&gt;&gt; +        Itâs currently not possible to run the Clank test suite on
&gt; 
&gt; Clank?

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:88
&gt;&gt; +FORWARDER_TIMEOUT_SECS = 30
&gt; 
&gt; nit: Should we place this line after line 84 for additional clarity?

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:451
&gt;&gt; +    _TIMEOUT = 3
&gt; 
&gt; nit: Other constants don&apos;t have the underscore prefix, I&apos;d prefer if we could stay consistent here.

done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:455
&gt;&gt; +        self._port = android_port
&gt; 
&gt; self._port is not used elsewhere in this class.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756335</commentid>
    <comment_count>19</comment_count>
      <attachid>171871</attachid>
    <who name="felipe">felipeg</who>
    <bug_when>2012-11-01 09:21:49 -0700</bug_when>
    <thetext>Created attachment 171871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759468</commentid>
    <comment_count>20</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-11-06 02:57:03 -0800</bug_when>
    <thetext>Tony, could you take another look please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761664</commentid>
    <comment_count>21</comment_count>
    <who name="felipe">felipeg</who>
    <bug_when>2012-11-08 04:55:28 -0800</bug_when>
    <thetext>Ping ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762284</commentid>
    <comment_count>22</comment_count>
      <attachid>171871</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-08 16:09:35 -0800</bug_when>
    <thetext>Comment on attachment 171871
Patch

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

Sorry, just got back from vacation.  Feel free to ask someone else for a review if I don&apos;t respond in a day.

Overall this seems fine, but I suspect the code will break if you don&apos;t add unit tests.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:228
&gt;          result = super(ChromiumAndroidPort, self).check_build(needs_http)
&gt;          result = self._check_file_exists(self._path_to_md5sum(), &apos;md5sum utility&apos;) and result
&gt; -        result = self._check_file_exists(self._path_to_forwarder(), &apos;forwarder utility&apos;) and result
&gt; +        result = self._check_file_exists(self._path_to_device_forwarder(), &apos;device_forwarder utility&apos;) and result
&gt; +        result = self._check_file_exists(self._path_to_host_forwarder(), &apos;host_forwarder utility&apos;) and result

Nit: I would probably merge these lines.
result = (super(...)
    and self._check_file_exists(...)
    and self._check_file_exists(...)
    ...)

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:487
&gt; +            failure_m = failure_re.match(line)

Nit: failure_m -&gt; failure_match

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:491
&gt; +            success_m = success_re.match(line)

Nit: success_m -&gt; success_match

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:501
&gt; +    def close(self):
&gt; +        self._process.stop(0.0)

This is OK, but it would be cleaner to use __enter__ and __exit__ to start/stop the process and use the &apos;with&apos; statement in the calling code.  Then you wouldn&apos;t need to manually remember to call close() everywhere.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:629
&gt; +        output = self._android_cmd.run_host_command([&apos;lsof&apos;, &apos;-nPi:%d&apos; % host_port], ignore_error=True, return_exit_code=False)

I guess this is OK, but it requires that lsof is installed.  I assume you verified this was the case on our bots?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:639
&gt; +        self._android_cmd.run_host_command([&apos;pkill&apos;, &apos;-f&apos;, host_pattern])

Same comment about pkill and pgrep (procps package) as for lsof.  Maybe these are installed with the other android specific dependencies?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782490</commentid>
    <comment_count>23</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-04 05:50:48 -0800</bug_when>
    <thetext>Quick update on this guys: Felipe&apos;s patch didn&apos;t land since we significantly changed on the Chromium side the way forwarder2&apos;s setup/tear down happens.

I&apos;m going to upload a new patch (attached to this bug if this is ok) compatible with the latest version of forwarder2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782498</commentid>
    <comment_count>24</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-12-04 06:07:10 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Quick update on this guys: Felipe&apos;s patch didn&apos;t land since we significantly changed on the Chromium side the way forwarder2&apos;s setup/tear down happens.
&gt; 
&gt; I&apos;m going to upload a new patch (attached to this bug if this is ok) compatible with the latest version of forwarder2.

If the approach changed significantly from Felipe&apos;s approach, it may be easier to open a new bug considering the rest of the discussion on this thread won&apos;t be relevant anymore. I don&apos;t have a strong preference, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782501</commentid>
    <comment_count>25</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-04 06:32:34 -0800</bug_when>
    <thetext>I think this should be pretty close to Felipe&apos;s patch from a design perspective (e.g. separate AndroidCommands class).
I think we could keep this bug but let me know if you feel strongly after you looked at my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782503</commentid>
    <comment_count>26</comment_count>
      <attachid>177474</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-04 06:39:13 -0800</bug_when>
    <thetext>Created attachment 177474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782546</commentid>
    <comment_count>27</comment_count>
      <attachid>177474</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-12-04 08:01:25 -0800</bug_when>
    <thetext>Comment on attachment 177474
Patch

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

Thanks for the patch, Philippe! I left comments inline.

&gt; Tools/ChangeLog:3
&gt; +        Use forwarder2 in Chrome for Android layout tests.

Please also update the bug&apos;s title to reflect this change.

&gt; Tools/ChangeLog:5
&gt; +

Please add a description to the ChangeLog. Why is this change necessary? What kind of impact on functionality does it have, etcetera.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:114
&gt; +            self._port.pre_sharding_init()

Can we stop the host forwarder as part of Port.setup_test_run()? The consequence would be that it won&apos;t be run separately for the failed tests&apos; second run.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:377
&gt; +        self._adb_command = [&apos;adb&apos;, &apos;-s&apos;, device_serial]

Did you rebase before uploading this change? We no longer require &apos;adb&apos; to be in the path, and a utility method was added to get the path to use (ChromiumAndroidDriver.path_to_adb()).

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:384
&gt; +                raise AssertionError(&apos;Could not push md5sum to device&apos;)

nit: to THE device.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:389
&gt; +    def run_command(self, cmd):

This is only used in the AndroidCommands class, you should prefix it with _ to indicate visibility.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:391
&gt; +        process = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)

You should use the host&apos;s executive here.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:396
&gt; +        _log.debug(&apos;Run adb result: &apos; + str(output[:80]))

The worry I have here is that the current logging output includes the device&apos;s serial for the output. We&apos;d loose that coverage here.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:414
&gt; +                self.run_command([&apos;%s_host&apos; % self._md5sum_path, host_file]))

Would it be worth to assert for making sure that _md5sum_path has been setup (i.e. setup_md5sum() must have been invoked)?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:427
&gt; +    DEVICE_FORWARDER_PATH = &apos;/data/local/tmp/device_forwarder&apos;

Could we just append &quot;device_forwarder&quot; to DEVICE_SOURCE_ROOT_DIR?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:432
&gt; +        self._device_forwarder_path = path_builder(&apos;device_forwarder&apos;)

Since there also is Forwarder.DEVICE_FORWARDER_PATH, I&apos;d prefer to clarify here that it&apos;s the host path.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:433
&gt; +        self._host_forwarder_path = path_builder(&apos;host_forwarder&apos;)

For consistency&apos;s sake, maybe invoke Forwarder.path_to_{device,host}_forwarder()?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:439
&gt; +        _log.debug(&apos;Killing host daemon &apos;)

nit: ends with a space.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:447
&gt; +        _log.debug(&apos;Killing device daemon &apos;)

nit: ends with a space.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:451
&gt; +                &apos;%s shell %s kill-server&apos; % (Forwarder._get_adb_command_string(android_cmd), Forwarder.DEVICE_FORWARDER_PATH))

It wouldn&apos;t be hard to convert either of the calls to _run_shell_command_and_get_exit_code() to use a list of arguments instead of a string, while removing the need for Forwarder._get_adb_command_string().

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:453
&gt; +            raise AssertionError(&apos;Could not kill device_forwarder:\n%s&apos; % output)

nit: You print output on a new line here, but not in the other error messages (lines 474, 479, 485).

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:456
&gt; +        assert(FORWARDER_CONTROL_PORT_BEGIN + worker_number &lt; Forwarder.ADB_CONTROL_PORT)

nit: no need for the parenthesis.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:458
&gt; +        adb_control_port = self._worker_number_to_adb_control_port_map.get(worker_number)

adb_control_port is something entirely different than Forwarder.ADB_CONTROL_PORT. Could you please use a clearer name?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:465
&gt; +        self._android_cmd.push_file_if_needed(self._device_forwarder_path, Forwarder.DEVICE_FORWARDER_PATH)

Again: distinguishing between the names for host and device paths would make this significantly clearer.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:466
&gt; +        # Command format: &lt;ADB port&gt;:&lt;Device port&gt;:&lt;Host port&gt;:&lt;Host address&gt;

nit: could you add a blank line before this command and lowercase the parts (/s/Device/device etc)? That&apos;d make it a lot easier to read.
&quot;ADB port&quot; should probably read &quot;ADB control port&quot;.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:471
&gt; +                        Forwarder._get_adb_command_string(self._android_cmd), adb_control_port, Forwarder.ADB_CONTROL_PORT)

You seem to indent continuations with either four, eight or an arbitrary amount of spaces. There is no line length limit in WebKit, if you do decide to wrap a line (for example, to improve readability), please indent with four spaces.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:489
&gt; +        while port &lt; FORWARDER_CONTROL_PORT_END and self._is_port_used(port):

Theoretically, with a thousand control ports, we&apos;d open the /proc/net/tcp an equal amount of times. Since _is_port_used() is only used for this purpose, wouldn&apos;t it be easier to read /proc/net/tcp once and then find the first available port between [FORWARDER_CONTROL_PORT_BEGIN + worker_number, FORWARDER_CONTROL_PORT_END]?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:497
&gt; +        for line in open(&apos;/proc/net/tcp&apos;).xreadlines():

Instead of just calling open(), could we go through webkitpy.common.system.filesystem?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:506
&gt; +                _log.debug(&apos;  Port %d is used.&apos; % host_port)

nit: Why are these outputs indented?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:516
&gt; +    def _run_shell_command_and_get_exit_code(cmd):

Since Executive.run_command() knows both the output and exit code, it would be a lot easier to add an return_exit_code_and_output argument. That&apos;d be three lines of code, as opposed to bypassing the entire executive.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:749
&gt; +        forwarder = Forwarder(self._port._build_path, self._android_cmd)

Is forwarder intentionally not being stored?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:750
&gt; +        forwarder.setup_redirections(self._worker_number, [(port, port) for port in FORWARD_PORTS], &apos;127.0.0.1&apos;)

If host_address is always 127.0.0.1 we shouldn&apos;t pass it as an argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782600</commentid>
    <comment_count>28</comment_count>
      <attachid>171871</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-12-04 09:20:23 -0800</bug_when>
    <thetext>Comment on attachment 171871
Patch

Marking Felipe&apos;s patch as obsolete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783662</commentid>
    <comment_count>29</comment_count>
      <attachid>177729</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-05 04:57:29 -0800</bug_when>
    <thetext>Created attachment 177729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783665</commentid>
    <comment_count>30</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-05 04:59:03 -0800</bug_when>
    <thetext>Hi Peter, thanks for the quick review and the relevant comments! Let me double check that my patch is aligned with my replies to your comments before I publish them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783670</commentid>
    <comment_count>31</comment_count>
      <attachid>177474</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-05 05:10:17 -0800</bug_when>
    <thetext>Comment on attachment 177474
Patch

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

&gt;&gt; Tools/ChangeLog:3
&gt;&gt; +        Use forwarder2 in Chrome for Android layout tests.
&gt; 
&gt; Please also update the bug&apos;s title to reflect this change.

I will see if Felipe can do it. I don&apos;t think I can given that he created the bug.

&gt;&gt; Tools/ChangeLog:5
&gt;&gt; +
&gt; 
&gt; Please add a description to the ChangeLog. Why is this change necessary? What kind of impact on functionality does it have, etcetera.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:114
&gt;&gt; +            self._port.pre_sharding_init()
&gt; 
&gt; Can we stop the host forwarder as part of Port.setup_test_run()? The consequence would be that it won&apos;t be run separately for the failed tests&apos; second run.

Nice, thanks. I wasn&apos;t aware of this method. My only constraint was to kill the host daemon only once before sharding happens.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:377
&gt;&gt; +        self._adb_command = [&apos;adb&apos;, &apos;-s&apos;, device_serial]
&gt; 
&gt; Did you rebase before uploading this change? We no longer require &apos;adb&apos; to be in the path, and a utility method was added to get the path to use (ChromiumAndroidDriver.path_to_adb()).

Done. Good catch.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:384
&gt;&gt; +                raise AssertionError(&apos;Could not push md5sum to device&apos;)
&gt; 
&gt; nit: to THE device.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:389
&gt;&gt; +    def run_command(self, cmd):
&gt; 
&gt; This is only used in the AndroidCommands class, you should prefix it with _ to indicate visibility.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:391
&gt;&gt; +        process = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
&gt; 
&gt; You should use the host&apos;s executive here.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:396
&gt;&gt; +        _log.debug(&apos;Run adb result: &apos; + str(output[:80]))
&gt; 
&gt; The worry I have here is that the current logging output includes the device&apos;s serial for the output. We&apos;d loose that coverage here.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:414
&gt;&gt; +                self.run_command([&apos;%s_host&apos; % self._md5sum_path, host_file]))
&gt; 
&gt; Would it be worth to assert for making sure that _md5sum_path has been setup (i.e. setup_md5sum() must have been invoked)?

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:427
&gt;&gt; +    DEVICE_FORWARDER_PATH = &apos;/data/local/tmp/device_forwarder&apos;
&gt; 
&gt; Could we just append &quot;device_forwarder&quot; to DEVICE_SOURCE_ROOT_DIR?

Done. Good point.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:432
&gt;&gt; +        self._device_forwarder_path = path_builder(&apos;device_forwarder&apos;)
&gt; 
&gt; Since there also is Forwarder.DEVICE_FORWARDER_PATH, I&apos;d prefer to clarify here that it&apos;s the host path.

Done. I renamed path_builder to host_path_builder.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:433
&gt;&gt; +        self._host_forwarder_path = path_builder(&apos;host_forwarder&apos;)
&gt; 
&gt; For consistency&apos;s sake, maybe invoke Forwarder.path_to_{device,host}_forwarder()?

Done. Good point.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:439
&gt;&gt; +        _log.debug(&apos;Killing host daemon &apos;)
&gt; 
&gt; nit: ends with a space.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:447
&gt;&gt; +        _log.debug(&apos;Killing device daemon &apos;)
&gt; 
&gt; nit: ends with a space.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:451
&gt;&gt; +                &apos;%s shell %s kill-server&apos; % (Forwarder._get_adb_command_string(android_cmd), Forwarder.DEVICE_FORWARDER_PATH))
&gt; 
&gt; It wouldn&apos;t be hard to convert either of the calls to _run_shell_command_and_get_exit_code() to use a list of arguments instead of a string, while removing the need for Forwarder._get_adb_command_string().

Done. Good point.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:453
&gt;&gt; +            raise AssertionError(&apos;Could not kill device_forwarder:\n%s&apos; % output)
&gt; 
&gt; nit: You print output on a new line here, but not in the other error messages (lines 474, 479, 485).

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:456
&gt;&gt; +        assert(FORWARDER_CONTROL_PORT_BEGIN + worker_number &lt; Forwarder.ADB_CONTROL_PORT)
&gt; 
&gt; nit: no need for the parenthesis.

Done. I removed this assert.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:458
&gt;&gt; +        adb_control_port = self._worker_number_to_adb_control_port_map.get(worker_number)
&gt; 
&gt; adb_control_port is something entirely different than Forwarder.ADB_CONTROL_PORT. Could you please use a clearer name?

Done. Indeed.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:465
&gt;&gt; +        self._android_cmd.push_file_if_needed(self._device_forwarder_path, Forwarder.DEVICE_FORWARDER_PATH)
&gt; 
&gt; Again: distinguishing between the names for host and device paths would make this significantly clearer.

I noticed that I forgot to address this point. I will come back to it in a next patch set.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:466
&gt;&gt; +        # Command format: &lt;ADB port&gt;:&lt;Device port&gt;:&lt;Host port&gt;:&lt;Host address&gt;
&gt; 
&gt; nit: could you add a blank line before this command and lowercase the parts (/s/Device/device etc)? That&apos;d make it a lot easier to read.
&gt; &quot;ADB port&quot; should probably read &quot;ADB control port&quot;.

Done. I also moved this part to a more appropriate place (right before it&apos;s used).

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:471
&gt;&gt; +                        Forwarder._get_adb_command_string(self._android_cmd), adb_control_port, Forwarder.ADB_CONTROL_PORT)
&gt; 
&gt; You seem to indent continuations with either four, eight or an arbitrary amount of spaces. There is no line length limit in WebKit, if you do decide to wrap a line (for example, to improve readability), please indent with four spaces.

Indeed, thanks.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:489
&gt;&gt; +        while port &lt; FORWARDER_CONTROL_PORT_END and self._is_port_used(port):
&gt; 
&gt; Theoretically, with a thousand control ports, we&apos;d open the /proc/net/tcp an equal amount of times. Since _is_port_used() is only used for this purpose, wouldn&apos;t it be easier to read /proc/net/tcp once and then find the first available port between [FORWARDER_CONTROL_PORT_BEGIN + worker_number, FORWARDER_CONTROL_PORT_END]?

Good point. Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:497
&gt;&gt; +        for line in open(&apos;/proc/net/tcp&apos;).xreadlines():
&gt; 
&gt; Instead of just calling open(), could we go through webkitpy.common.system.filesystem?

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:506
&gt;&gt; +                _log.debug(&apos;  Port %d is used.&apos; % host_port)
&gt; 
&gt; nit: Why are these outputs indented?

No obvious reason. This was taken from Chromium.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:516
&gt;&gt; +    def _run_shell_command_and_get_exit_code(cmd):
&gt; 
&gt; Since Executive.run_command() knows both the output and exit code, it would be a lot easier to add an return_exit_code_and_output argument. That&apos;d be three lines of code, as opposed to bypassing the entire executive.

Good point. Note that I still need the &apos;; echo *$?&apos; trick used below since adb shell doesn&apos;t return the exit code from the command which was run on the device.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:749
&gt;&gt; +        forwarder = Forwarder(self._port._build_path, self._android_cmd)
&gt; 
&gt; Is forwarder intentionally not being stored?

Yes we don&apos;t need to store it. I can make setup_redirections a static method if you prefer. What do you think?

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:750
&gt;&gt; +        forwarder.setup_redirections(self._worker_number, [(port, port) for port in FORWARD_PORTS], &apos;127.0.0.1&apos;)
&gt; 
&gt; If host_address is always 127.0.0.1 we shouldn&apos;t pass it as an argument.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783671</commentid>
    <comment_count>32</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-05 05:10:59 -0800</bug_when>
    <thetext>I&apos;m going to upload another patch after I did a rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783682</commentid>
    <comment_count>33</comment_count>
      <attachid>177733</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-05 05:49:29 -0800</bug_when>
    <thetext>Created attachment 177733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783687</commentid>
    <comment_count>34</comment_count>
    <who name="felipe">felipeg</who>
    <bug_when>2012-12-05 06:00:33 -0800</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784066</commentid>
    <comment_count>35</comment_count>
      <attachid>177733</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-05 13:30:02 -0800</bug_when>
    <thetext>Comment on attachment 177733
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/executive.py:388
&gt; +                    return_exit_code_and_output=False,

Is this necessary?  Would it be sufficient to include an error_handler?  The error_handler gets both the exit_code and the output and will always be called before |run_command| returns the output.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:33
&gt; +import sets

Nit: This appears to be unused (and should be unnecessary because of the built-in &quot;set&quot; type).

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:450
&gt; +        (exit_code, output) = Forwarder._run_shell_command_and_get_exit_code(

Nit: No () on the left side, although if you use an error handler, I don&apos;t think you need to check the return value at all.  Same with the other calls to _run_adb_shell_command_and_get_exit_code below.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:521
&gt; +    @staticmethod
&gt; +    def _run_adb_shell_command_and_get_exit_code(command_executor, android_cmd, cmd_array):
&gt; +        # Note that the extra &apos;*&apos; character below is used to handle the case where the process&apos; output is not newline terminated.

Can we add some unit tests for this function?  It looks pretty fragile.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:528
&gt; +        if status_separator_pos == 0:

Nit: if not status_separator_pos:

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:563
&gt; +        self._android_cmd = AndroidCommands(

Nit: android_cmd -&gt; android_commands. We don&apos;t normally use abbreviations for variable names in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787107</commentid>
    <comment_count>36</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-10 01:52:20 -0800</bug_when>
    <thetext>Thanks Tony for the review. I will address your comments in the next few days. I&apos;m busy right now with some P1 bugs and sheriffing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788891</commentid>
    <comment_count>37</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-11 15:52:29 -0800</bug_when>
    <thetext>I wrote this up last night on a whim:
https://github.com/eseidel/webkit/compare/device_connection

We should combine our efforts!  I was not aware of your patch at the time.  Note that the tip of that branch does not work, as I was not aware of the md5sum dependency.  Having DeviceConnection know how to push md5sum onto the device would be a layering violtion (since DeviceConnection shouldn&apos;t need to know about chromium build locations).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792715</commentid>
    <comment_count>38</comment_count>
      <attachid>179740</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-17 07:44:35 -0800</bug_when>
    <thetext>Created attachment 179740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792716</commentid>
    <comment_count>39</comment_count>
      <attachid>177733</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-17 07:45:07 -0800</bug_when>
    <thetext>Comment on attachment 177733
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:388
&gt;&gt; +                    return_exit_code_and_output=False,
&gt; 
&gt; Is this necessary?  Would it be sufficient to include an error_handler?  The error_handler gets both the exit_code and the output and will always be called before |run_command| returns the output.

Indeed I didn&apos;t get that ScriptError was wrapping all the necessary information.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:33
&gt;&gt; +import sets
&gt; 
&gt; Nit: This appears to be unused (and should be unnecessary because of the built-in &quot;set&quot; type).

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:450
&gt;&gt; +        (exit_code, output) = Forwarder._run_shell_command_and_get_exit_code(
&gt; 
&gt; Nit: No () on the left side, although if you use an error handler, I don&apos;t think you need to check the return value at all.  Same with the other calls to _run_adb_shell_command_and_get_exit_code below.

The error handler used with partial application does the trick indeed in a much nicer way.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:521
&gt;&gt; +        # Note that the extra &apos;*&apos; character below is used to handle the case where the process&apos; output is not newline terminated.
&gt; 
&gt; Can we add some unit tests for this function?  It looks pretty fragile.

We have been using it for quite a while in Chromium. I&apos;m not very familiar with testing in Python/WebKit to be honest.
I think we will be notified early enough if it fails :)

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:528
&gt;&gt; +        if status_separator_pos == 0:
&gt; 
&gt; Nit: if not status_separator_pos:

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:563
&gt;&gt; +        self._android_cmd = AndroidCommands(
&gt; 
&gt; Nit: android_cmd -&gt; android_commands. We don&apos;t normally use abbreviations for variable names in WebKit.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792801</commentid>
    <comment_count>40</comment_count>
      <attachid>179740</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-17 09:46:46 -0800</bug_when>
    <thetext>Comment on attachment 179740
Patch

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

This looks much better.  Thanks!

&gt; Tools/ChangeLog:40
&gt; +        * DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
&gt; +        * Scripts/webkitpy/common/system/executive.py:
&gt; +        (Executive.run_command):
&gt; +        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
&gt; +        (ChromiumAndroidPort.setup_test_run):
&gt; +        (ChromiumAndroidPort.check_build):
&gt; +        (ChromiumAndroidPort.path_to_host_forwarder):
&gt; +        (ChromiumAndroidPort):
&gt; +        (ChromiumAndroidPort.path_to_device_forwarder):

Please regenerate the ChangeLog.  You can run prepare-ChangeLog to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792830</commentid>
    <comment_count>41</comment_count>
      <attachid>179740</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-17 10:32:25 -0800</bug_when>
    <thetext>Comment on attachment 179740
Patch

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

Have to run, more comments soon.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:498
&gt; +    def setup_md5sum(self):
&gt; +        self._md5sum_path = self._path_builder(MD5SUM_DEVICE_FILE_NAME)
&gt; +        if not self.file_exists_on_device(MD5SUM_DEVICE_PATH):
&gt; +            if not self.push_to_device(self._md5sum_path, MD5SUM_DEVICE_PATH):
&gt; +                raise AssertionError(&apos;Could not push md5sum to the device&apos;)

Seems these paths should be members of this class, if this information is going to be used here?  Or passed in from teh chromium port?  I had trouble with this layering in my attempt at this too.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:501
&gt; +    def get_adb_command(self):
&gt; +        return self._adb_command

WebKit style doesn&apos;t normally use get_ for getters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793016</commentid>
    <comment_count>42</comment_count>
      <attachid>179740</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-17 14:01:44 -0800</bug_when>
    <thetext>Comment on attachment 179740
Patch

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

I think you and I should compare notes.  Are you reachable on #webkit?  I&apos;m eseidel there.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:39
&gt; +from webkitpy.common.system.filesystem import FileSystem

Including this is rarely correct. :)

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:529
&gt; +        assert os.path.exists(host_file)

Please try to use filesystem.exists instead of os.path.exists so you can mock/unittest your funtions more easily.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:547
&gt; +class Forwarder:

All classes should inherit from object in modern python. :)  (At least that&apos;s my understanding.)

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:570
&gt; +    @staticmethod
&gt; +    def kill_host_daemon(command_executor, host_path_builder):

Do you reall want these static?  I find @staticmethod to be deceptive in python.  Intially I think &quot;oh, this doesn&apos;t need any members&quot; so I make something static... and then I realize it&apos;s not easily mockable and cry.  Even @classmethods are more mockable than statics. :)

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:624
&gt; +        for line in FileSystem().open_text_file_for_reading(&apos;/proc/net/tcp&apos;).xreadlines():

Bad.  This makes this method unmockable.  Are you sure you can&apos;t pass in a filesystem or Host?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:651
&gt; +    @staticmethod

Generally I&apos;ve found a single shared instance works out better than a bunch of static methods.  You could split these off into a singleton if that would work better?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:774
&gt; +        install_result = self._android_commands.run_adb_command([&apos;install&apos;, drt_host_path])

In my version of this I named this DeviceConnection with the idea that we might some day make it generic not just for android.  That may have been over-design on my part.  But I do think the idea of teaching a &quot;hosted&quot; driver how to talk to the target is generic and not necessarily specific to ADB or android.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:914
&gt; +        forwarder = Forwarder(self._port._executive.run_command, self._port._build_path, self._android_commands)

Why not just pass it an executive instead of a run_command method pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793546</commentid>
    <comment_count>43</comment_count>
      <attachid>179921</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-18 04:40:28 -0800</bug_when>
    <thetext>Created attachment 179921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793551</commentid>
    <comment_count>44</comment_count>
      <attachid>179740</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-18 04:53:23 -0800</bug_when>
    <thetext>Comment on attachment 179740
Patch

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

&gt;&gt; Tools/ChangeLog:40
&gt;&gt; +        (ChromiumAndroidPort.path_to_device_forwarder):
&gt; 
&gt; Please regenerate the ChangeLog.  You can run prepare-ChangeLog to do that.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:39
&gt;&gt; +from webkitpy.common.system.filesystem import FileSystem
&gt; 
&gt; Including this is rarely correct. :)

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:498
&gt;&gt; +                raise AssertionError(&apos;Could not push md5sum to the device&apos;)
&gt; 
&gt; Seems these paths should be members of this class, if this information is going to be used here?  Or passed in from teh chromium port?  I had trouble with this layering in my attempt at this too.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:501
&gt;&gt; +        return self._adb_command
&gt; 
&gt; WebKit style doesn&apos;t normally use get_ for getters.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:529
&gt;&gt; +        assert os.path.exists(host_file)
&gt; 
&gt; Please try to use filesystem.exists instead of os.path.exists so you can mock/unittest your funtions more easily.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:547
&gt;&gt; +class Forwarder:
&gt; 
&gt; All classes should inherit from object in modern python. :)  (At least that&apos;s my understanding.)

Done. I&apos;m still pretty new to Python :)

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:570
&gt;&gt; +    def kill_host_daemon(command_executor, host_path_builder):
&gt; 
&gt; Do you reall want these static?  I find @staticmethod to be deceptive in python.  Intially I think &quot;oh, this doesn&apos;t need any members&quot; so I make something static... and then I realize it&apos;s not easily mockable and cry.  Even @classmethods are more mockable than statics. :)

I&apos;m concerned about the maintenance cost. I would like to keep this consistent with the Forwarder class in Chromium at least from the design perspective if that&apos;s ok with you.

We can still improve things later on in a follow up when we also start really benefiting from mocking. It seems to me that this is a bit premature for now since this is not unit tested yet.

To be honest I also would like to get this in soon so that I don&apos;t have to deal with nasty rebases anymore :)

Thanks for sharing your experience anyway. This will be useful later on.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:624
&gt;&gt; +        for line in FileSystem().open_text_file_for_reading(&apos;/proc/net/tcp&apos;).xreadlines():
&gt; 
&gt; Bad.  This makes this method unmockable.  Are you sure you can&apos;t pass in a filesystem or Host?

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:651
&gt;&gt; +    @staticmethod
&gt; 
&gt; Generally I&apos;ve found a single shared instance works out better than a bunch of static methods.  You could split these off into a singleton if that would work better?

See my reply to your comment line 570.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:774
&gt;&gt; +        install_result = self._android_commands.run_adb_command([&apos;install&apos;, drt_host_path])
&gt; 
&gt; In my version of this I named this DeviceConnection with the idea that we might some day make it generic not just for android.  That may have been over-design on my part.  But I do think the idea of teaching a &quot;hosted&quot; driver how to talk to the target is generic and not necessarily specific to ADB or android.

I agree with you although I think this is a bit premature for now :)

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:914
&gt;&gt; +        forwarder = Forwarder(self._port._executive.run_command, self._port._build_path, self._android_commands)
&gt; 
&gt; Why not just pass it an executive instead of a run_command method pointer?

I&apos;m injecting only what Forwarder actually needs. It doesn&apos;t need to know about executive and this should also make mocking easier since you seem to like it (I can see why) :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793552</commentid>
    <comment_count>45</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-18 04:53:52 -0800</bug_when>
    <thetext>Thanks Eric!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794498</commentid>
    <comment_count>46</comment_count>
      <attachid>179921</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-12-19 03:57:26 -0800</bug_when>
    <thetext>Comment on attachment 179921
Patch

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

Hi Philippe, a few more comments. I tested your patch and verified that it works both for layout tests and for performance tests. Thanks!

For reference&apos;s sake, when are you going on holiday?

&gt; Tools/ChangeLog:5
&gt; +

This needs the &quot;Reviewed by NOBODY (OOPS!).&quot; line, otherwise it won&apos;t be able to pass through the commit queue.

&gt; Tools/ChangeLog:-397
&gt; -

Accidental change?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:679
&gt; +            self._port.host.filesystem, self._port._executive.run_command, self._adb_command(), self._port._build_path, self._log_debug)

This means that it&apos;ll be required for the user to either have &quot;adb&quot; installed or have a Chromium WebKit checkout if they want to instantiate ChromiumAndroidDriver. This is why the _adb_command_base property exists, so it can be determined lazily.

Can we remove ChromiumAndroidDriver._adb_command() and ChromiumAndroidDriver._adb_command_base altogether and move this logic to AndroidCommands?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:730
&gt; +        self._android_commands.setup_md5sum()

Regarding Eric&apos;s plans to have a more generic DeviceConnection class, it may make sense to have an intermediate class to encapsulate md5sum/push_if_needed... Not sure, something to address later, though I agree Eric&apos;s abstraction is cleaner.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:759
&gt; +    def _push_data_if_needed(self):

Can we perhaps just call these in _setup_test()? It doesn&apos;t really add much to have a separate method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794510</commentid>
    <comment_count>47</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-12-19 04:29:08 -0800</bug_when>
    <thetext>Also, please run the webkitpy unit tests. You can do so by typing:
$ Tools/Scripts/test-webkitpy

I&apos;m seeing the following error:


[446/1615] webkitpy.layout_tests.port.chromium_android_unittest.AndroidPerfTest.test_perf_output_regexp erred:
  Traceback (most recent call last):
    File &quot;/b/WebKit/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py&quot;, line 312, in test_perf_output_regexp
      profiler = chromium_android.AndroidPerf(host, &apos;/bin/executable&apos;, &apos;/tmp/output&apos;, &apos;adb-path&apos;, &apos;device-serial&apos;, &apos;foo&apos;)
    File &quot;/b/WebKit/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py&quot;, line 379, in __init__
      self._device_serial = device_serial
  NameError: global name &apos;device_serial&apos; is not defined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794529</commentid>
    <comment_count>48</comment_count>
      <attachid>180136</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-19 04:56:56 -0800</bug_when>
    <thetext>Created attachment 180136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794530</commentid>
    <comment_count>49</comment_count>
      <attachid>179921</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-19 04:58:13 -0800</bug_when>
    <thetext>Comment on attachment 179921
Patch

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

&gt;&gt; Tools/ChangeLog:5
&gt;&gt; +
&gt; 
&gt; This needs the &quot;Reviewed by NOBODY (OOPS!).&quot; line, otherwise it won&apos;t be able to pass through the commit queue.

Done.

&gt;&gt; Tools/ChangeLog:-397
&gt;&gt; -
&gt; 
&gt; Accidental change?

Good catch.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:679
&gt;&gt; +            self._port.host.filesystem, self._port._executive.run_command, self._adb_command(), self._port._build_path, self._log_debug)
&gt; 
&gt; This means that it&apos;ll be required for the user to either have &quot;adb&quot; installed or have a Chromium WebKit checkout if they want to instantiate ChromiumAndroidDriver. This is why the _adb_command_base property exists, so it can be determined lazily.
&gt; 
&gt; Can we remove ChromiumAndroidDriver._adb_command() and ChromiumAndroidDriver._adb_command_base altogether and move this logic to AndroidCommands?

Good catch!

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:730
&gt;&gt; +        self._android_commands.setup_md5sum()
&gt; 
&gt; Regarding Eric&apos;s plans to have a more generic DeviceConnection class, it may make sense to have an intermediate class to encapsulate md5sum/push_if_needed... Not sure, something to address later, though I agree Eric&apos;s abstraction is cleaner.

I will address this later.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:759
&gt;&gt; +    def _push_data_if_needed(self):
&gt; 
&gt; Can we perhaps just call these in _setup_test()? It doesn&apos;t really add much to have a separate method.

Indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794533</commentid>
    <comment_count>50</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-12-19 04:59:11 -0800</bug_when>
    <thetext>FYI, the last patch also fixes the error you mentioned in comment #47.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802222</commentid>
    <comment_count>51</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2013-01-08 05:30:02 -0800</bug_when>
    <thetext>Eric, can you please take another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804154</commentid>
    <comment_count>52</comment_count>
      <attachid>180136</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-10 01:09:59 -0800</bug_when>
    <thetext>Comment on attachment 180136
Patch

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

I think this is better than what we have, but I don&apos;t entirely agree with the AndroidCommands design.  Since mostly I think you&apos;re just tryihng to move us off of the deprecated forwarder and onto forwarder2 (which sounds like a good thing!) the AndroidCommands stuff is largely unrelated (but waaaay overdue).  I&apos;ll see if I can come up with a working alternative tomrorow and rebase your patch on top of it for you.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:499
&gt; +    def setup_md5sum(self):
&gt; +        self._md5sum_path = self._path_builder(AndroidCommands.MD5SUM_DEVICE_FILE_NAME)
&gt; +        if not self.file_exists_on_device(AndroidCommands.MD5SUM_DEVICE_PATH):
&gt; +            if not self.push_to_device(self._md5sum_path, AndroidCommands.MD5SUM_DEVICE_PATH):
&gt; +                raise AssertionError(&apos;Could not push md5sum to the device&apos;)

I don&apos;t see why we&apos;re even installing md5 on the device.  Doesn&apos;t the device have something which can already produce an md5?

The whole Md5 thing is a layer on top of this commands object IMO.  Its unfortunate that it&apos;s tied in this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817667</commentid>
    <comment_count>53</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2013-01-28 03:19:14 -0800</bug_when>
    <thetext>Android doesn&apos;t provide any sort of file hashing command unfortunately. That&apos;s why we have to push our own.

If Forwarder is a separate class, then it has to receive an object like AndroidCommands to be able to talk to the device.
The other alternative would have been not to introduce any new class (which seems more than reasonable to me). I don&apos;t think having a separate AndroidCommands class is totally ugly to be honest (it didn&apos;t shock previous reviewers at least :)). md5sum is only an implementation detail used to push files to the device (which can be seen as a command). I don&apos;t think having the file push functionality in a separate layer/class would bring us anything for now.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817771</commentid>
    <comment_count>54</comment_count>
      <attachid>180136</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-28 08:31:51 -0800</bug_when>
    <thetext>Comment on attachment 180136
Patch

I don&apos;t 100% agree with the design, but I clearly have not found time for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817872</commentid>
    <comment_count>55</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2013-01-28 10:55:00 -0800</bug_when>
    <thetext>Thanks Eric. I will do a rebase and upload an updated patch.

Cheers,
Philippe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870946</commentid>
    <comment_count>56</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2013-04-08 11:11:54 -0700</bug_when>
    <thetext>Resolving as WontFix given that Chromium moved to Blink.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170105</attachid>
            <date>2012-10-23 03:07:40 -0700</date>
            <delta_ts>2012-10-24 10:27:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121023120617.patch</filename>
            <type>text/plain</type>
            <size>36449</size>
            <attacher name="felipe">felipeg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMTg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzM5N2U0NmFlZmVmMjFjNWE0OWIxNTJmOWRmMjc0NmEz
OGFlNjBmMS4uYWQ1NmY4MDM2MmJkN2FjMzg2NmFiMjUxMDVhOTgxMjY2MTFlYjk1NCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUz
IEBACisyMDEyLTEwLTIzICBGZWxpcGUgR29sZHN0ZWluICA8ZmVsaXBlZ0Bnb29nbGUuY29tPgor
CisgICAgICAgIFVzZSB0aGUgbmV3IGZvcndhcmRlcjIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTg4CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWRQb3J0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuY2hlY2tfYnVp
bGQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5fcGF0aF90b19kZXZpY2VfZm9yd2Fy
ZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3BhdGhfdG9faG9zdF9mb3J3YXJk
ZXIpOgorICAgICAgICAobG9nX2Vycm9yKToKKyAgICAgICAgKGxvZ19kZWJ1Zyk6CisgICAgICAg
IChBbmRyb2lkQ29tbWFuZHMpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLl9faW5pdF9fKToK
KyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5nZXRfZGV2aWNlX3NlcmlhbCk6CisgICAgICAgIChB
bmRyb2lkQ29tbWFuZHMucHVzaF9tZDVzdW0pOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1
c2hfZmlsZV9pZl9uZWVkZWQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnJ1bl9hZGJfY29t
bWFuZCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMucnVuX2hvc3RfY29tbWFuZCk6CisgICAg
ICAgIChBbmRyb2lkQ29tbWFuZHMuZmlsZV9leGlzdHNfb25fZGV2aWNlKToKKyAgICAgICAgKEFu
ZHJvaWRDb21tYW5kcy5nZXRfcG9ydCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuX3B1c2hf
dG9fZGV2aWNlKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5fZXh0cmFjdF9oYXNoZXNfZnJv
bV9tZDVzdW1fb3V0cHV0KToKKyAgICAgICAgKEZvcndhcmRlcik6CisgICAgICAgIChGb3J3YXJk
ZXIuX19pbml0X18pOgorICAgICAgICAoRm9yd2FyZGVyLl9raWxsX2hvc3RfZm9yd2FyZGVyX2Js
b2NraW5nKToKKyAgICAgICAgKEZvcndhcmRlci5fa2lsbF9kZXZpY2VfZm9yd2FyZGVyX2Jsb2Nr
aW5nKToKKyAgICAgICAgKEZvcndhcmRlci5fY2xvc2VfcHJvY2Vzcyk6CisgICAgICAgIChGb3J3
YXJkZXIuZGV2aWNlX3BvcnRfZm9yX2hvc3RfcG9ydCk6CisgICAgICAgIChGb3J3YXJkZXIuY2xv
c2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAg
KENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF9kYXRhX2lmX25lZWRlZCk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3Rlc3QpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLl9hYm9ydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1c2hf
ZXhlY3V0YWJsZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1c2hfZm9udHMp
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNoX3Rlc3RfcmVzb3VyY2VzKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc2V0dXBfcGVyZm9ybWFuY2UpOgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl90ZWFyZG93bl9wZXJmb3JtYW5jZSk6CisgICAg
ICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2NvbW1hbmRfd3JhcHBlcik6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIuX2dldF9sYXN0X3N0YWNrdHJhY2UpOgorICAgICAgICAoQ2hy
b21pdW1BbmRyb2lkRHJpdmVyLl9nZXRfbG9nY2F0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9p
ZERyaXZlci5jbWRfbGluZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2FsbF9w
aXBlc19jcmVhdGVkKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcmVtb3ZlX2Fs
bF9waXBlcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0KToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2UuZGVhZGxvY2tfZGV0ZWN0b3IpOgorICAgICAgICAo
Q2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0b3ApOgorCiAyMDEyLTEwLTIzICBTaW1vbiBQZW5hICA8
c3BlbmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGRpbmcgbXlzZWxmIGFz
IGNvbW1pdHRlci4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQppbmRleCA2Mzg5ZmViNjM1N2NlM2Nj
NDkwYzAyYzY5MmM1ZmY4MWQ2NzdhNDk2Li4wOGJkMGYzMTU5OGFkOTQyZGQ0ZjBkZGY3NDExMWY0
YTA3ZDA2ZTcyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CkBAIC0zMCw2ICszMCw3IEBACiBp
bXBvcnQgY29weQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcworaW1wb3J0IHBleHBlY3QKIGlt
cG9ydCByZQogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aHJlYWRpbmcKQEAgLTU0LDcgKzU1
LDcgQEAgQ09NTUFORF9MSU5FX0ZJTEUgPSBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9t
ZS1uYXRpdmUtdGVzdHMtY29tbWFuZC1saW5lJwogIyBJZiBjaGFuZ2UgdGhpcywgbXVzdCBhbHNv
IGNoYW5nZSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNw
cAogIyBhbmQgQ2hyb21pdW0ncyB3ZWJraXQvc3VwcG9ydC9wbGF0Zm9ybV9zdXBwb3J0X2FuZHJv
aWQuY2MuCiBERVZJQ0VfRFJUX0RJUiA9IERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnZHJ0LycK
LURFVklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklDRV9EUlRfRElSICsgJ2ZvcndhcmRlcicKK0RF
VklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklDRV9EUlRfRElSICsgJ2RldmljZV9mb3J3YXJkZXIn
CiAKICMgUGF0aCBvbiB0aGUgZGV2aWNlIHdoZXJlIHRoZSB0ZXN0IGZyYW1ld29yayB3aWxsIGNy
ZWF0ZSB0aGUgZmlmbyBwaXBlcy4KIERFVklDRV9GSUZPX1BBVEggPSAnL2RhdGEvZGF0YS9vcmcu
Y2hyb21pdW0ubmF0aXZlX3Rlc3QvZmlsZXMvJwpAQCAtNzQsNyArNzUsMTIgQEAgVEVTVF9QQVRI
X1BSRUZJWCA9ICcvYWxsLXRlc3RzJwogIyA4MDAwLCA4MDgwIGFuZCA4NDQzIGFyZSBmb3IgaHR0
cC9odHRwcyB0ZXN0cy4KICMgODg4MCBhbmQgOTMyMyBhcmUgZm9yIHdlYnNvY2tldCB0ZXN0cwog
IyAoc2VlIGh0dHBfc2VydmVyLnB5LCBhcGFjaGVfaHR0cF9zZXJ2ZXIucHkgYW5kIHdlYnNvY2tl
dF9zZXJ2ZXIucHkpLgotRk9SV0FSRF9QT1JUUyA9ICc4MDAwIDgwODAgODQ0MyA4ODgwIDkzMjMn
CitGT1JXQVJEX1BPUlRTID0gWzgwMDAsIDgwODAsIDg0NDMsIDg4ODAsIDkzMjNdCisKKyMgV2Ug
cnVuIG9uZSBGb3J3YXJkZXIgcGVyIGRldmljZSAvIHdvcmtlciwgYW5kIHdlIG5lZWQgdG8gYWxs
b2NhdGUgb25lIGNvbnRyb2wKKyMgcG9ydCBmb3IgZWFjaCBGb3J3YXJkZXIuIFRoZXNlIGNvbnN0
YW50cyBkZWZpbmUgdGhlIHJhbmdlIG9mIHBvcnRzIHdlIGNhbiB1c2UuCitGT1JXQVJERVJfQ09O
VFJPTF9QT1JUX0JFR0lOID0gMjAwMDAKK0ZPUldBUkRFUl9DT05UUk9MX1BPUlRfRU5EID0gMjEw
MDAKIAogTVNfVFJVRVRZUEVfRk9OVFNfRElSID0gJy91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
bXN0dGNvcmVmb250cy8nCiBNU19UUlVFVFlQRV9GT05UU19QQUNLQUdFID0gJ3R0Zi1tc2NvcmVm
b250cy1pbnN0YWxsZXInCkBAIC0xNTcsNiArMTYzLDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lk
UG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICAnY2hyb21pdW0tbGludXgnLAog
ICAgICAgICAnY2hyb21pdW0td2luJywKICAgICAgICAgJ2Nocm9taXVtJywKKyAgICAgICAgJ21h
YycsCiAgICAgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKipr
d2FyZ3MpOgpAQCAtMjA0LDcgKzIxMSw4IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hy
b21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0
cCk6CiAgICAgICAgIHJlc3VsdCA9IHN1cGVyKENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLmNo
ZWNrX2J1aWxkKG5lZWRzX2h0dHApCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVf
ZXhpc3RzKHNlbGYuX3BhdGhfdG9fbWQ1c3VtKCksICdtZDVzdW0gdXRpbGl0eScpIGFuZCByZXN1
bHQKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5fcGF0aF90
b19mb3J3YXJkZXIoKSwgJ2ZvcndhcmRlciB1dGlsaXR5JykgYW5kIHJlc3VsdAorICAgICAgICBy
ZXN1bHQgPSBzZWxmLl9jaGVja19maWxlX2V4aXN0cyhzZWxmLl9wYXRoX3RvX2RldmljZV9mb3J3
YXJkZXIoKSwgJ2RldmljZV9mb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKKyAgICAgICAg
cmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5fcGF0aF90b19ob3N0X2Zvcndh
cmRlcigpLCAnaG9zdF9mb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKICAgICAgICAgaWYg
bm90IHJlc3VsdDoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZvciBjb21wbGV0ZSBBbmRyb2lk
IGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNlIHNlZTonKQogICAgICAgICAgICAgX2xvZy5lcnJv
cignJykKQEAgLTI3OCw4ICsyODYsMTEgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJv
bWl1bS5DaHJvbWl1bVBvcnQpOgogICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6CiAgICAg
ICAgIHJldHVybiBOb25lCiAKLSAgICBkZWYgX3BhdGhfdG9fZm9yd2FyZGVyKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnZm9yd2FyZGVyJykKKyAgICBkZWYgX3BhdGhf
dG9fZGV2aWNlX2ZvcndhcmRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3Bh
dGgoJ2RldmljZV9mb3J3YXJkZXInKQorCisgICAgZGVmIF9wYXRoX3RvX2hvc3RfZm9yd2FyZGVy
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnaG9zdF9mb3J3YXJkZXIn
KQogCiAgICAgZGVmIF9wYXRoX3RvX21kNXN1bShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYu
X2J1aWxkX3BhdGgoTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUpCkBAIC0zMjMsNiArMzM0LDI1NiBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAg
ICAgIHJldHVybiBkZXZpY2VzW3dvcmtlcl9udW1iZXJdCiAKIAorZGVmIGxvZ19lcnJvcihkZXZp
Y2Vfc2VyaWFsLCBtZXNzYWdlKToKKyAgICBfbG9nLmVycm9yKCdbJXNdICVzJyAlIChkZXZpY2Vf
c2VyaWFsLCBtZXNzYWdlKSkKKworCitkZWYgbG9nX2RlYnVnKGRldmljZV9zZXJpYWwsIG1lc3Nh
Z2UpOgorICAgIF9sb2cuZGVidWcoJ1slc10gJXMnICUgKGRldmljZV9zZXJpYWwsIG1lc3NhZ2Up
KQorCisKK2NsYXNzIEFuZHJvaWRDb21tYW5kcygpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAg
c2VsZi5fZGV2aWNlX3NlcmlhbCA9IHNlbGYuX3BvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKHdvcmtl
cl9udW1iZXIpCisgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMnLCBzZWxm
Ll9kZXZpY2Vfc2VyaWFsXQorCisgICAgZGVmIGdldF9kZXZpY2Vfc2VyaWFsKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fZGV2aWNlX3NlcmlhbAorCisgICAgZGVmIHB1c2hfbWQ1c3VtKHNl
bGYpOgorICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9IHNlbGYuX3BvcnQuX3BhdGhfdG9fbWQ1
c3VtKCkKKyAgICAgICAgaWYgbm90IHNlbGYuZmlsZV9leGlzdHNfb25fZGV2aWNlKE1ENVNVTV9E
RVZJQ0VfUEFUSCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcHVzaF90b19kZXZpY2Uoc2Vs
Zi5fbWQ1c3VtX3BhdGgsIE1ENVNVTV9ERVZJQ0VfUEFUSCk6CisgICAgICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBwdXNoIG1kNXN1bSB0byBkZXZpY2UnKQorCisg
ICAgZGVmIHB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZiwgaG9zdF9maWxlLCBkZXZpY2VfZmlsZSk6
CisgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhob3N0X2ZpbGUpCisgICAgICAgIGRldmlj
ZV9oYXNoZXMgPSBzZWxmLl9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQoCisgICAg
ICAgICAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmV4ZWN1dGl2ZS5wb3BlbihzZWxmLl9hZGJfY29t
bWFuZCArIFsnc2hlbGwnLCBNRDVTVU1fREVWSUNFX1BBVEgsIGRldmljZV9maWxlXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9j
ZXNzLlBJUEUpLnN0ZG91dCkKKyAgICAgICAgaG9zdF9oYXNoZXMgPSBzZWxmLl9leHRyYWN0X2hh
c2hlc19mcm9tX21kNXN1bV9vdXRwdXQoCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5ob3N0
LmV4ZWN1dGl2ZS5wb3BlbihhcmdzPVsnJXNfaG9zdCcgJSBzZWxmLl9tZDVzdW1fcGF0aCwgaG9z
dF9maWxlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dCkKKyAgICAgICAgaWYgaG9zdF9oYXNoZXMg
YW5kIGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6CisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgc2VsZi5fcHVzaF90b19kZXZpY2UoaG9zdF9maWxlLCBkZXZpY2VfZmlsZSkKKworICAg
IGRlZiBydW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgorICAg
ICAgICBsb2dfZGVidWcoc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1J1biBhZGIgY29tbWFuZDogJyAr
IHN0cihjbWQpKQorICAgICAgICBpZiBpZ25vcmVfZXJyb3I6CisgICAgICAgICAgICBlcnJvcl9o
YW5kbGVyID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcgorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IE5vbmUKKyAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYuX2FkYl9jb21tYW5kICsgY21kLCBl
cnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCisgICAgICAgICMgTGltaXQgdGhlIGxlbmd0aCB0
byBhdm9pZCB0b28gdmVyYm9zZSBvdXRwdXQgb2YgY29tbWFuZHMgbGlrZSAnYWRiIGxvZ2NhdCcg
YW5kICdjYXQgL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmUwMScKKyAgICAgICAgIyB3aG9zZSBv
dXRwdXRzIGFyZSBub3JtYWxseSBwcmludGVkIGluIGxhdGVyIGxvZ3MuCisgICAgICAgIGxvZ19k
ZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUnVuIGFkYiByZXN1bHQ6ICcgKyByZXN1bHRbOjgw
XSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHJ1bl9ob3N0X2NvbW1hbmQoc2Vs
ZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6CisgICAg
ICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUnVuIGhvc3QgY29tbWFuZDogJyAr
IHN0cihjbWQpKQorICAgICAgICBpZiBpZ25vcmVfZXJyb3I6CisgICAgICAgICAgICBlcnJvcl9o
YW5kbGVyID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcgorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IE5vbmUKKyAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9o
YW5kbGVyLCByZXR1cm5fZXhpdF9jb2RlPXJldHVybl9leGl0X2NvZGUpCisgICAgICAgIHJldHVy
biByZXN1bHQKKworICAgIGRlZiBmaWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxl
X3BhdGgpOgorICAgICAgICBhc3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCisg
ICAgICAgIHJldHVybiBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9m
aWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCisKKyAgICBkZWYgZ2V0X3BvcnQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0CisKKyAgICBkZWYgX3B1c2hfdG9fZGV2
aWNlKHNlbGYsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGgsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Cisg
ICAgICAgIHJldHVybiBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3B1c2gnLCBob3N0X3BhdGgsIGRl
dmljZV9wYXRoXSwgaWdub3JlX2Vycm9yKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBf
ZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgorICAgICAg
ICBhc3NlcnQgbWQ1c3VtX291dHB1dAorICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylb
MF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291dHB1dF0KKworCitjbGFzcyBGb3J3YXJkZXIob2JqZWN0
KToKKyAgICAiIiJDbGFzcyB0byBtYW5hZ2UgcG9ydCBmb3J3YXJkcyBmcm9tIHRoZSBkZXZpY2Ug
dG8gdGhlIGhvc3QuIiIiCisKKyAgICAjIFVuaXggQWJzdHJhY3Qgc29ja2V0IHBhdGg6CisgICAg
X0RFVklDRV9BREJfQ09OVFJPTF9QT1JUID0gJ2Nocm9tZV9kZXZpY2VfZm9yd2FyZGVyJworICAg
IF9USU1FT1VUX1NFQ1MgPSAzMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFuZHJvaWRfY21k
LCB3b3JrZXJfbnVtYmVyLCBwb3J0X3BhaXJzLCBob3N0X25hbWUpOgorICAgICAgICAiIiJGb3J3
YXJkcyBUQ1AgcG9ydHMgb24gdGhlIGRldmljZSBiYWNrIHRvIHRoZSBob3N0LgorCisgICAgICAg
IFdvcmtzIGxpa2UgYWRiIGZvcndhcmQsIGJ1dCBpbiByZXZlcnNlLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBhZGI6IEluc3RhbmNlIG9mIEFuZHJvaWRDb21tYW5kcyBmb3IgdGFsa2lu
ZyB0byB0aGUgZGV2aWNlLgorICAgICAgICAgICAgcG9ydF9wYWlyczogQSBsaXN0IG9mIHR1cGxl
cyAoZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCkgdG8gZm9yd2FyZC4gTm90ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgdGhhdCB5b3UgY2FuIHNwZWNpZnkgMCBhcyBhIGRldmljZV9wb3J0LCBpbiB3
aGljaCBjYXNlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgd2lsbCBieSBkeW5hbWlj
YWxseSBhc3NpZ25lZCBvbiB0aGUgZGV2aWNlLiBZb3UgY2FuCisgICAgICAgICAgICAgICAgICAg
ICAgICBnZXQgdGhlIG51bWJlciBvZiB0aGUgYXNzaWduZWQgcG9ydCB1c2luZyB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRldmljZV9wb3J0X2Zvcl9ob3N0X3BvcnQgbWV0aG9kLgorICAg
ICAgICAgICAgaG9zdF9uYW1lOiBBZGRyZXNzIHRvIGZvcndhcmQgdG8sIG11c3QgYmUgYWRkcmVz
c2FibGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgaG9zdCBtYWNoaW5lLiBVc3Vh
bGx5IHVzZSBsb29wYmFjayAnMTI3LjAuMC4xJy4KKworICAgICAgICBSYWlzZXM6CisgICAgICAg
ICAgICBFeGNlcHRpb24gb24gZmFpbHVyZSB0byBmb3J3YXJkIHRoZSBwb3J0LgorICAgICAgICAi
IiIKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQgPSBhbmRyb2lkX2NtZAorICAgICAgICBzZWxm
Ll9ob3N0X3RvX2RldmljZV9wb3J0X21hcCA9IGRpY3QoKQorICAgICAgICBzZWxmLl9ob3N0X3By
b2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2RldmljZV9wcm9jZXNzID0gTm9uZQorICAgICAg
ICBzZWxmLl9hZGJfZm9yd2FyZF9wcm9jZXNzID0gTm9uZQorCisgICAgICAgIGFzc2VydChGT1JX
QVJERVJfQ09OVFJPTF9QT1JUX0JFR0lOICsgd29ya2VyX251bWJlciA8IEZPUldBUkRFUl9DT05U
Uk9MX1BPUlRfRU5EKQorICAgICAgICBzZWxmLl9ob3N0X2FkYl9jb250cm9sX3BvcnQgPSBGT1JX
QVJERVJfQ09OVFJPTF9QT1JUX0JFR0lOICsgd29ya2VyX251bWJlcgorCisgICAgICAgIHNlbGYu
X2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoCisgICAgICAgICAgICBzZWxmLl9hbmRy
b2lkX2NtZC5nZXRfcG9ydCgpLl9wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKSwKKyAgICAgICAg
ICAgIERFVklDRV9GT1JXQVJERVJfUEFUSCkKKyAgICAgICAgc2VsZi5faG9zdF9mb3J3YXJkZXJf
cGF0aCA9IHNlbGYuX2FuZHJvaWRfY21kLmdldF9wb3J0KCkuX3BhdGhfdG9faG9zdF9mb3J3YXJk
ZXIoKQorCisgICAgICAgIGZvcndhcmRfc3RyaW5nID0gWyclZDolZDolcycgJQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAoZGV2aWNlLCBob3N0LCBob3N0X25hbWUpIGZvciBkZXZpY2UsIGhv
c3QgaW4gcG9ydF9wYWlyc10KKyAgICAgICAgbG9nZ2luZy5pbmZvKCdGb3J3YXJkaW5nIHBvcnRz
OiAlcycsIGZvcndhcmRfc3RyaW5nKQorICAgICAgICB0aW1lb3V0X3NlYyA9IDUKKyAgICAgICAg
aG9zdF9wYXR0ZXJuID0gJ2hvc3RfZm9yd2FyZGVyLionICsgJyAnLmpvaW4oZm9yd2FyZF9zdHJp
bmcpCisKKyAgICAgICAgIyBUT0RPKGZlbGlwZWcpOiBSYXRoZXIgdGhhbiB1c2luZyBhIGJsb2Nr
aW5nIGtpbGwoKSBoZXJlLCB0aGUgZGV2aWNlCisgICAgICAgICMgZm9yd2FyZGVyIGNvdWxkIHRy
eSB0byBiaW5kIHRoZSBVbml4IERvbWFpbiBTb2NrZXQgdW50aWwgaXQgc3VjY2VlZHMgb3IKKyAg
ICAgICAgIyB3aGlsZSBpdCBmYWlscyBiZWNhdXNlIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBib3Vu
ZCAod2l0aCBhcHByb3ByaWF0ZQorICAgICAgICAjIHRpbWVvdXQgaGFuZGxpbmcgb2J2aW91c2x5
KS4KKyAgICAgICAgc2VsZi5fa2lsbF9ob3N0X2ZvcndhcmRlcl9ibG9ja2luZyhob3N0X3BhdHRl
cm4sIHRpbWVvdXRfc2VjKQorICAgICAgICBzZWxmLl9raWxsX2RldmljZV9mb3J3YXJkZXJfYmxv
Y2tpbmcodGltZW91dF9zZWMpCisKKyAgICAgICAgc2VsZi5fYWRiX2ZvcndhcmRfcHJvY2VzcyA9
IHBleHBlY3Quc3Bhd24oCisgICAgICAgICAgICAnYWRiJywgWyctcycsCisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLmdldF9kZXZpY2Vfc2VyaWFsKCksCisgICAgICAgICAg
ICAgICAgICAgICdmb3J3YXJkJywKKyAgICAgICAgICAgICAgICAgICAgJ3RjcDolcycgJSBzZWxm
Ll9ob3N0X2FkYl9jb250cm9sX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICdsb2NhbGFic3Ry
YWN0OiVzJyAlIEZvcndhcmRlci5fREVWSUNFX0FEQl9DT05UUk9MX1BPUlRdKQorICAgICAgICBz
ZWxmLl9kZXZpY2VfcHJvY2VzcyA9IHBleHBlY3Quc3Bhd24oCisgICAgICAgICAgICAnYWRiJywg
WyctcycsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLmdldF9kZXZpY2Vf
c2VyaWFsKCksCisgICAgICAgICAgICAgICAgICAgICdzaGVsbCcsCisgICAgICAgICAgICAgICAg
ICAgICclcyAtRCAtLWFkYl9zb2NrPSVzJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIERF
VklDRV9GT1JXQVJERVJfUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcndhcmRlci5f
REVWSUNFX0FEQl9DT05UUk9MX1BPUlQpXSkKKworICAgICAgICBkZXZpY2Vfc3VjY2Vzc19yZSA9
IHJlLmNvbXBpbGUoJ1N0YXJ0aW5nIERldmljZSBGb3J3YXJkZXIuJykKKyAgICAgICAgZGV2aWNl
X2ZhaWx1cmVfcmUgPSByZS5jb21waWxlKCcuKjpFUlJPUjooLiopJykKKyAgICAgICAgaW5kZXgg
PSBzZWxmLl9kZXZpY2VfcHJvY2Vzcy5leHBlY3QoW2RldmljZV9zdWNjZXNzX3JlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX2ZhaWx1cmVfcmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXhwZWN0LkVP
RiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBleHBlY3Qu
VElNRU9VVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZv
cndhcmRlci5fVElNRU9VVF9TRUNTKQorICAgICAgICBpZiBpbmRleCA9PSAxOgorICAgICAgICAg
ICAgIyBGYWlsdXJlCisgICAgICAgICAgICBlcnJvcl9tc2cgPSBzdHIoc2VsZi5fZGV2aWNlX3By
b2Nlc3MubWF0Y2guZ3JvdXAoMSkpCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKHNlbGYuX2Rl
dmljZV9wcm9jZXNzLmJlZm9yZSkKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3Byb2Nlc3MoKQor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgRGV2aWNlIEZvcndh
cmRlciB3aXRoIEVycm9yOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X21zZykKKyAgICAgICAgZWxpZiBpbmRleCA9PSAyOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJv
cihzZWxmLl9kZXZpY2VfcHJvY2Vzcy5iZWZvcmUpCisgICAgICAgICAgICBzZWxmLl9jbG9zZV9w
cm9jZXNzKCkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5leHBlY3RlZCBFT0Ygd2hp
bGUgdHJ5aW5nIHRvIHN0YXJ0IERldmljZSBGb3J3YXJkZXIuJykKKyAgICAgICAgZWxpZiBpbmRl
eCA9PSAzOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihzZWxmLl9kZXZpY2VfcHJvY2Vzcy5i
ZWZvcmUpCisgICAgICAgICAgICBzZWxmLl9jbG9zZV9wcm9jZXNzKCkKKyAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignVGltZW91dCB3aGlsZSB0cnlpbmcgc3RhcnQgRGV2aWNlIEZvcndhcmRl
cicpCisgICAgICAgIHNlbGYuX2hvc3RfcHJvY2VzcyA9IHBleHBlY3Quc3Bhd24oc2VsZi5faG9z
dF9mb3J3YXJkZXJfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbJy0tYWRiX3BvcnQ9JXMnICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9ob3N0X2FkYl9jb250cm9sX3BvcnQpXSArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9zdHJpbmcpCisKKyAg
ICAgICAgIyBSZWFkIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgdG8gZGV0ZXJtaW5lIHdoaWNo
IGRldmljZSBwb3J0cyB3aGVyZQorICAgICAgICAjIGZvcndhcmRlZCB0byB3aGljaCBob3N0IHBv
cnRzIChuZWNlc3NhcnkgaWYKKyAgICAgICAgaG9zdF9zdWNjZXNzX3JlID0gcmUuY29tcGlsZSgn
Rm9yd2FyZGluZyBkZXZpY2UgcG9ydCAoXGQrKSB0byBob3N0IChcZCspOicpCisgICAgICAgIGhv
c3RfZmFpbHVyZV9yZSA9IHJlLmNvbXBpbGUoJ0NvdWxkblwndCBzdGFydCBmb3J3YXJkZXIgc2Vy
dmVyIGZvciBwb3J0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3Bl
YzogKFxkKyk6KFxkKyknKQorICAgICAgICBmb3IgcGFpciBpbiBwb3J0X3BhaXJzOgorICAgICAg
ICAgICAgaW5kZXggPSBzZWxmLl9ob3N0X3Byb2Nlc3MuZXhwZWN0KFtob3N0X3N1Y2Nlc3NfcmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZmFp
bHVyZV9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGV4cGVjdC5FT0YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBleHBlY3QuVElNRU9VVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRm9yd2FyZGVyLl9USU1FT1VUX1NFQ1MpCisgICAgICAgICAgICBpZiBpbmRl
eCA9PSAwOgorICAgICAgICAgICAgICAgICMgU3VjY2VzcworICAgICAgICAgICAgICAgIGRldmlj
ZV9wb3J0ID0gaW50KHNlbGYuX2hvc3RfcHJvY2Vzcy5tYXRjaC5ncm91cCgxKSkKKyAgICAgICAg
ICAgICAgICBob3N0X3BvcnQgPSBpbnQoc2VsZi5faG9zdF9wcm9jZXNzLm1hdGNoLmdyb3VwKDIp
KQorICAgICAgICAgICAgICAgIHNlbGYuX2hvc3RfdG9fZGV2aWNlX3BvcnRfbWFwW2hvc3RfcG9y
dF0gPSBkZXZpY2VfcG9ydAorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiRm9yd2FyZGlu
ZyBkZXZpY2UgcG9ydDogJWQgdG8gaG9zdCBwb3J0OiAlZC4iICUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGRldmljZV9wb3J0LCBob3N0X3BvcnQpKQorICAgICAgICAgICAgZWxpZiBp
bmRleCA9PSAxOgorICAgICAgICAgICAgICAgICMgRmFpbHVyZQorICAgICAgICAgICAgICAgIGRl
dmljZV9wb3J0ID0gaW50KHNlbGYuX2hvc3RfcHJvY2Vzcy5tYXRjaC5ncm91cCgxKSkKKyAgICAg
ICAgICAgICAgICBob3N0X3BvcnQgPSBpbnQoc2VsZi5faG9zdF9wcm9jZXNzLm1hdGNoLmdyb3Vw
KDIpKQorICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3Byb2Nlc3MoKQorICAgICAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIGZvcndhcmQgcG9ydCAlZCB0byAlZCcgJSAo
ZGV2aWNlX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0X3BvcnQpKQorICAgICAgICAgICAgZWxpZiBp
bmRleCA9PSAyOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Ioc2VsZi5faG9zdF9wcm9j
ZXNzLmJlZm9yZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jbG9zZV9wcm9jZXNzKCkKKyAgICAg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgRU9GIHdoaWxlIHRyeWluZyB0
byBmb3J3YXJkIHBvcnRzICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cnRfcGFpcnMpCisgICAgICAgICAgICBlbGlmIGluZGV4ID09IDM6CisgICAgICAgICAgICAgICAg
bG9nZ2luZy5lcnJvcihzZWxmLl9ob3N0X3Byb2Nlc3MuYmVmb3JlKQorICAgICAgICAgICAgICAg
IHNlbGYuX2Nsb3NlX3Byb2Nlc3MoKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbign
VGltZW91dCB3aGlsZSB0cnlpbmcgdG8gZm9yd2FyZCBwb3J0cyAlcycgJSBwb3J0X3BhaXJzKQor
CisgICAgZGVmIF9raWxsX2hvc3RfZm9yd2FyZGVyX2Jsb2NraW5nKHNlbGYsIGhvc3RfcGF0dGVy
biwgdGltZW91dF9zZWMpOgorICAgICAgICAiIiJLaWxscyBhbnkgZXhpc3RpbmcgaG9zdCBmb3J3
YXJkZXJzIHVzaW5nIHRoZSBwcm92aWRlZCBwYXR0ZXJuLgorCisgICAgICAgIE5vdGUgdGhhdCB0
aGlzIHdhaXRzIHVudGlsIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuCisgICAgICAgICIiIgorICAg
ICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5faG9zdF9jb21tYW5kKFsncGtpbGwnLCAnLWYnLCBo
b3N0X3BhdHRlcm5dKQorICAgICAgICBlbGFwc2VkID0gMAorICAgICAgICB3YWl0X3BlcmlvZCA9
IDAuMQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2hvc3RfY29tbWFu
ZChbJ3BncmVwJywgJy1mJywgaG9zdF9wYXR0ZXJuXSkgYW5kICgKKyAgICAgICAgICAgICAgICBl
bGFwc2VkIDwgdGltZW91dF9zZWMpOgorICAgICAgICAgICAgdGltZS5zbGVlcCh3YWl0X3Blcmlv
ZCkKKyAgICAgICAgICAgIGVsYXBzZWQgKz0gd2FpdF9wZXJpb2QKKyAgICAgICAgaWYgZWxhcHNl
ZCA+PSB0aW1lb3V0X3NlYzoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVk
IG91dCB3aGlsZSBraWxsaW5nICcgKyBob3N0X3BhdHRlcm4pCisKKyAgICBkZWYgX2tpbGxfZGV2
aWNlX2ZvcndhcmRlcl9ibG9ja2luZyhzZWxmLCB0aW1lb3V0X3NlYyk6CisgICAgICAgICIiIktp
bGxzIGFueSBleGlzdGluZyBkZXZpY2UgZm9yd2FyZGVycy4KKworICAgICAgICBOb3RlIHRoYXQg
dGhpcyB3YWl0cyB1bnRpbCB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzLgorICAgICAgICAiIiIKKyAg
ICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAna2lsbGFs
bCcsICdkZXZpY2VfZm9yd2FyZGVyJ10pCisgICAgICAgIGVsYXBzZWQgPSAwCisgICAgICAgIHdh
aXRfcGVyaW9kID0gMC4xCisgICAgICAgIHdoaWxlIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pLmZpbmQoCisgICAgICAgICAgICAnZGV2aWNlX2Zvcndh
cmRlcicpID49IDAgYW5kIChlbGFwc2VkIDwgdGltZW91dF9zZWMpOgorICAgICAgICAgICAgdGlt
ZS5zbGVlcCh3YWl0X3BlcmlvZCkKKyAgICAgICAgICAgIGVsYXBzZWQgKz0gd2FpdF9wZXJpb2QK
KyAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0X3NlYzoKKyAgICAgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oJ1RpbWVkIG91dCB3aGlsZSBraWxsaW5nIGRldmljZV9mb3J3YXJkZXIuJykK
KworICAgIGRlZiBfY2xvc2VfcHJvY2VzcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faG9zdF9w
cm9jZXNzOgorICAgICAgICAgICAgc2VsZi5faG9zdF9wcm9jZXNzLmNsb3NlKCkKKyAgICAgICAg
aWYgc2VsZi5fZGV2aWNlX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2Vz
cy5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuX2FkYl9mb3J3YXJkX3Byb2Nlc3M6CisgICAgICAg
ICAgICBzZWxmLl9hZGJfZm9yd2FyZF9wcm9jZXNzLmNsb3NlKCkKKyAgICAgICAgc2VsZi5faG9z
dF9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2VzcyA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fYWRiX2ZvcndhcmRfcHJvY2VzcyA9IE5vbmUKKworICAgIGRlZiBkZXZpY2Vf
cG9ydF9mb3JfaG9zdF9wb3J0KHNlbGYsIGhvc3RfcG9ydCk6CisgICAgICAgICIiIkdldCB0aGUg
ZGV2aWNlIHBvcnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGdpdmVuIGhvc3QgcG9ydC4iIiIKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2hvc3RfdG9fZGV2aWNlX3BvcnRfbWFwLmdldChob3N0X3BvcnQp
CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIlRlcm1pbmF0ZSB0aGUgZm9yd2Fy
ZGVyIHByb2Nlc3MuIiIiCisgICAgICAgIHNlbGYuX2Nsb3NlX3Byb2Nlc3MoKQorCisKIGNsYXNz
IENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2Up
OgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9faW5pdF9fKHBv
cnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQpAQCAtMzMyLDIyICs1
OTMsMjAgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAg
ICAgICBzZWxmLl9lcnJfZmlmb19wYXRoID0gREVWSUNFX0ZJRk9fUEFUSCArICdzdGRlcnIuZmlm
bycKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3By
b2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2ZvcndhcmRlciA9IE5vbmUKICAgICAgICAgc2Vs
Zi5faGFzX3NldHVwID0gRmFsc2UKICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzID0g
e30KICAgICAgICAgc2VsZi5fZGV2aWNlX3NlcmlhbCA9IHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFs
KHdvcmtlcl9udW1iZXIpCiAgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMn
LCBzZWxmLl9kZXZpY2Vfc2VyaWFsXQorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29y
a2VyX251bWJlcgorICAgICAgICBzZWxmLl9hbmRyb2lkID0gQW5kcm9pZENvbW1hbmRzKHBvcnQs
IHdvcmtlcl9udW1iZXIpCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5f
dGVhcmRvd25fcGVyZm9ybWFuY2UoKQogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2
ZXIsIHNlbGYpLl9fZGVsX18oKQogCi0gICAgZGVmIF9zZXR1cF9tZDVzdW1fYW5kX3B1c2hfZGF0
YV9pZl9uZWVkZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuX21kNXN1bV9wYXRoID0gc2VsZi5fcG9y
dC5fcGF0aF90b19tZDVzdW0oKQotICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25f
ZGV2aWNlKE1ENVNVTV9ERVZJQ0VfUEFUSCk6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fcHVz
aF90b19kZXZpY2Uoc2VsZi5fbWQ1c3VtX3BhdGgsIE1ENVNVTV9ERVZJQ0VfUEFUSCk6Ci0gICAg
ICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBwdXNoIG1kNXN1bSB0
byBkZXZpY2UnKQotCisgICAgZGVmIF9wdXNoX2RhdGFfaWZfbmVlZGVkKHNlbGYpOgorICAgICAg
ICBzZWxmLl9hbmRyb2lkLnB1c2hfbWQ1c3VtKCkKICAgICAgICAgc2VsZi5fcHVzaF9leGVjdXRh
YmxlKCkKICAgICAgICAgc2VsZi5fcHVzaF9mb250cygpCiAgICAgICAgIHNlbGYuX3B1c2hfdGVz
dF9yZXNvdXJjZXMoKQpAQCAtMzU2LDEwMyArNjE1LDc0IEBAIGNsYXNzIENocm9taXVtQW5kcm9p
ZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgaWYgc2VsZi5faGFzX3NldHVwOgogICAg
ICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi5fc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2Rh
dGFfaWZfbmVlZGVkKCkKKyAgICAgICAgc2VsZi5fcHVzaF9kYXRhX2lmX25lZWRlZCgpCiAgICAg
ICAgIHNlbGYuX2hhc19zZXR1cCA9IFRydWUKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5k
KFsncm9vdCddKQorICAgICAgICBzZWxmLl9hbmRyb2lkLnJ1bl9hZGJfY29tbWFuZChbJ3Jvb3Qn
XSkKICAgICAgICAgc2VsZi5fc2V0dXBfcGVyZm9ybWFuY2UoKQogICAgICAgICAjIFJlcXVpcmVk
IGJ5IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyRmlsZVBhdGgoKS4KICAgICAgICAg
IyBPdGhlciBkaXJlY3RvcmllcyB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBhZGIg
cHVzaC4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAn
LXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZSddKQorICAgICAgICBzZWxmLl9h
bmRyb2lkLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX1NP
VVJDRV9ST09UX0RJUiArICdjaHJvbWUnXSkKIAogICAgICAgICAjIEFsbG93IHRoZSBEdW1wUmVu
ZGVyVHJlZSBhcHAgdG8gZnVsbHkgYWNjZXNzIHRoZSBkaXJlY3RvcnkuCiAgICAgICAgICMgVGhl
IG5hdGl2ZSBjb2RlIG5lZWRzIHRoZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxl
cyBhbmQgY3JlYXRlIHBpcGVzIGhlcmUuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX0RSVF9ESVJdKQotICAgICAgICBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0p
CisgICAgICAgIHNlbGYuX2FuZHJvaWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXIn
LCAnLXAnLCBERVZJQ0VfRFJUX0RJUl0pCisgICAgICAgIHNlbGYuX2FuZHJvaWQucnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAnY2htb2QnLCAnNzc3JywgREVWSUNFX0RSVF9ESVJdKQogCiAgICAg
ICAgICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hlIGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0
IHJ1bi4KICAgICAgICAgIyBUaGlzIGlzIGxpa2Ugd2hhdCdzIGRvbmUgaW4gQ2hyb21pdW1Qb3J0
LnNldHVwX3Rlc3RfcnVuIGJ1dCBvbiB0aGUgZGV2aWNlLgotICAgICAgICBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdybScsICctcicsIERSVF9BUFBfQ0FDSEVfRElSXSkKLQotICAg
IGRlZiBfbG9nX2Vycm9yKHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICBfbG9nLmVycm9yKCdbJXNd
ICVzJyAlIChzZWxmLl9kZXZpY2Vfc2VyaWFsLCBtZXNzYWdlKSkKLQotICAgIGRlZiBfbG9nX2Rl
YnVnKHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICBfbG9nLmRlYnVnKCdbJXNdICVzJyAlIChzZWxm
Ll9kZXZpY2Vfc2VyaWFsLCBtZXNzYWdlKSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZC5ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdybScsICctcicsIERSVF9BUFBfQ0FDSEVfRElSXSkKIAogICAg
IGRlZiBfYWJvcnQoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9y
KCdbJXNdICVzJyAlIChzZWxmLl9kZXZpY2Vfc2VyaWFsLCBtZXNzYWdlKSkKIAotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgX2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dChtZDVz
dW1fb3V0cHV0KToKLSAgICAgICAgYXNzZXJ0IG1kNXN1bV9vdXRwdXQKLSAgICAgICAgcmV0dXJu
IFtsaW5lLnNwbGl0KCcgICcpWzBdIGZvciBsaW5lIGluIG1kNXN1bV9vdXRwdXRdCi0KLSAgICBk
ZWYgX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZiwgaG9zdF9maWxlLCBkZXZpY2VfZmlsZSk6Ci0g
ICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhob3N0X2ZpbGUpCi0gICAgICAgIGRldmljZV9o
YXNoZXMgPSBzZWxmLl9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQoCi0gICAgICAg
ICAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmV4ZWN1dGl2ZS5wb3BlbihzZWxmLl9hZGJfY29tbWFu
ZCArIFsnc2hlbGwnLCBNRDVTVU1fREVWSUNFX1BBVEgsIGRldmljZV9maWxlXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNz
LlBJUEUpLnN0ZG91dCkKLSAgICAgICAgaG9zdF9oYXNoZXMgPSBzZWxmLl9leHRyYWN0X2hhc2hl
c19mcm9tX21kNXN1bV9vdXRwdXQoCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmV4
ZWN1dGl2ZS5wb3BlbihhcmdzPVsnJXNfaG9zdCcgJSBzZWxmLl9tZDVzdW1fcGF0aCwgaG9zdF9m
aWxlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dCkKLSAgICAgICAgaWYgaG9zdF9oYXNoZXMgYW5k
IGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAg
ICAgc2VsZi5fcHVzaF90b19kZXZpY2UoaG9zdF9maWxlLCBkZXZpY2VfZmlsZSkKLQogICAgIGRl
ZiBfcHVzaF9leGVjdXRhYmxlKHNlbGYpOgotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVl
ZGVkKHNlbGYuX3BvcnQuX3BhdGhfdG9fZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFU
SCkKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9w
YXRoKCdEdW1wUmVuZGVyVHJlZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRy
ZWUucGFrJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAn
RHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25l
ZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERF
VklDRV9EUlRfRElSICsgJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKQotICAgICAgICBzZWxmLl9w
dXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJh
Y2tfZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMu
eG1sJykKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQ
UF9QQUNLQUdFXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNl
bGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlLnBhaycpLCBERVZJQ0VfRFJUX0RJ
UiArICdEdW1wUmVuZGVyVHJlZS5wYWsnKQorICAgICAgICBzZWxmLl9hbmRyb2lkLnB1c2hfZmls
ZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVfcmVzb3Vy
Y2VzJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpCisgICAg
ICAgIHNlbGYuX2FuZHJvaWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9w
YXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRf
bWFpbl9mb250cy54bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lkLnB1c2hfZmlsZV9pZl9uZWVk
ZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKSwg
REVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKQorICAgICAgICBz
ZWxmLl9hbmRyb2lkLnJ1bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FH
RV0pCiAgICAgICAgIGRydF9ob3N0X3BhdGggPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigp
Ci0gICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnaW5zdGFs
bCcsIGRydF9ob3N0X3BhdGhdKQorICAgICAgICBpbnN0YWxsX3Jlc3VsdCA9IHNlbGYuX2FuZHJv
aWQucnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQogICAgICAgICBp
ZiBpbnN0YWxsX3Jlc3VsdC5maW5kKCdTdWNjZXNzJykgPT0gLTE6CiAgICAgICAgICAgICBzZWxm
Ll9hYm9ydCgnRmFpbGVkIHRvIGluc3RhbGwgJXMgb250byBkZXZpY2U6ICVzJyAlIChkcnRfaG9z
dF9wYXRoLCBpbnN0YWxsX3Jlc3VsdCkpCiAKICAgICBkZWYgX3B1c2hfZm9udHMoc2VsZik6Ci0g
ICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnUHVzaGluZyBmb250cycpCisgICAgICAgIGxvZ19kZWJ1
ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUHVzaGluZyBmb250cycpCiAgICAgICAgIHBhdGhfdG9f
YWhlbV9mb250ID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnQUhFTV9fX18uVFRGJykKLSAgICAg
ICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVWSUNFX0ZP
TlRTX0RJUiArICdBSEVNX19fXy5UVEYnKQorICAgICAgICBzZWxmLl9hbmRyb2lkLnB1c2hfZmls
ZV9pZl9uZWVkZWQocGF0aF90b19haGVtX2ZvbnQsIERFVklDRV9GT05UU19ESVIgKyAnQUhFTV9f
X18uVFRGJykKICAgICAgICAgZm9yIChob3N0X2RpcnMsIGZvbnRfZmlsZSwgcGFja2FnZSkgaW4g
SE9TVF9GT05UX0ZJTEVTOgogICAgICAgICAgICAgZm9yIGhvc3RfZGlyIGluIGhvc3RfZGlyczoK
ICAgICAgICAgICAgICAgICBob3N0X2ZvbnRfcGF0aCA9IGhvc3RfZGlyICsgZm9udF9maWxlCiAg
ICAgICAgICAgICAgICAgaWYgc2VsZi5fcG9ydC5fY2hlY2tfZmlsZV9leGlzdHMoaG9zdF9mb250
X3BhdGgsICcnLCBsb2dnaW5nPUZhbHNlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHVz
aF9maWxlX2lmX25lZWRlZChob3N0X2ZvbnRfcGF0aCwgREVWSUNFX0ZPTlRTX0RJUiArIGZvbnRf
ZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZC5wdXNoX2ZpbGVfaWZfbmVl
ZGVkKGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElSICsgZm9udF9maWxlKQogCiAgICAg
ZGVmIF9wdXNoX3Rlc3RfcmVzb3VyY2VzKHNlbGYpOgotICAgICAgICBzZWxmLl9sb2dfZGVidWco
J1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQorICAgICAgICBsb2dfZGVidWcoc2VsZi5fZGV2aWNl
X3NlcmlhbCwgJ1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBmb3IgcmVzb3VyY2Ug
aW4gVEVTVF9SRVNPVVJDRVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfZmlsZV9p
Zl9uZWVkZWQoc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnLycgKyByZXNvdXJjZSwg
REVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyByZXNvdXJjZSkKLQotICAgIGRlZiBfcnVuX2FkYl9j
b21tYW5kKHNlbGYsIGNtZCwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgc2VsZi5fbG9n
X2RlYnVnKCdSdW4gYWRiIGNvbW1hbmQ6ICcgKyBzdHIoY21kKSkKLSAgICAgICAgaWYgaWdub3Jl
X2Vycm9yOgotICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IHNlbGYuX3BvcnQuX2V4ZWN1dGl2
ZS5pZ25vcmVfZXJyb3IKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVycm9yX2hhbmRsZXIg
PSBOb25lCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChzZWxmLl9hZGJfY29tbWFuZCArIGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQot
ICAgICAgICAjIExpbWl0IHRoZSBsZW5ndGggdG8gYXZvaWQgdG9vIHZlcmJvc2Ugb3V0cHV0IG9m
IGNvbW1hbmRzIGxpa2UgJ2FkYiBsb2djYXQnIGFuZCAnY2F0IC9kYXRhL3RvbWJzdG9uZXMvdG9t
YnN0b25lMDEnCi0gICAgICAgICMgd2hvc2Ugb3V0cHV0cyBhcmUgbm9ybWFsbHkgcHJpbnRlZCBp
biBsYXRlciBsb2dzLgotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1J1biBhZGIgcmVzdWx0OiAn
ICsgcmVzdWx0Wzo4MF0pCi0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIHNlbGYu
X2FuZHJvaWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIo
KSArICcvJyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJlc291cmNlKQog
Ci0gICAgZGVmIF9saW5rX2RldmljZV9maWxlKHNlbGYsIGZyb21fZmlsZSwgdG9fZmlsZSwgaWdu
b3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgIyBybSB0b19maWxlIGZpcnN0IHRvIG1ha2Ugc3Vy
ZSB0aGF0IGxuIHN1Y2NlZWRzLgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdybScsIHRvX2ZpbGVdLCBpZ25vcmVfZXJyb3IpCi0gICAgICAgIHJldHVybiBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdsbicsICctcycsIGZyb21fZmlsZSwgdG9fZmlsZV0s
IGlnbm9yZV9lcnJvcikKKyAgICBkZWYgX3NldHVwX3BlcmZvcm1hbmNlKHNlbGYpOgorICAgICAg
ICAjIERpc2FibGUgQ1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFtIGNhY2hlIHRvIHJlZHVjZSBub2lz
ZSBpbiB0ZXN0cworICAgICAgICBpZiBub3Qgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzOgorICAg
ICAgICAgICAgZ292ZXJub3JfZmlsZXMgPSBzZWxmLl9hbmRyb2lkLnJ1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCisgICAgICAgICAgICBp
ZiBnb3Zlcm5vcl9maWxlcy5maW5kKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgPT0gLTE6
CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZ292ZXJub3JfZmlsZXMuc3BsaXQoKToKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzW2ZpbGVdID0gc2VsZi5f
YW5kcm9pZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSkuc3RyaXAoKQor
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2VjaG8nLCAncGVyZm9ybWFuY2UnLCAnPicsIGZpbGVdKQogCi0gICAgZGVmIF9wdXNoX3Rv
X2RldmljZShzZWxmLCBob3N0X3BhdGgsIGRldmljZV9wYXRoLCBpZ25vcmVfZXJyb3I9RmFsc2Up
OgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncHVzaCcsIGhvc3RfcGF0
aCwgZGV2aWNlX3BhdGhdLCBpZ25vcmVfZXJyb3IpCisgICAgZGVmIF90ZWFyZG93bl9wZXJmb3Jt
YW5jZShzZWxmKToKKyAgICAgICAgZm9yIGZpbGUsIG9yaWdpbmFsX2NvbnRlbnQgaW4gc2VsZi5f
b3JpZ2luYWxfZ292ZXJub3JzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLl9hbmRyb2lkLnJ1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCBvcmlnaW5hbF9jb250ZW50LCAnPicsIGZp
bGVdKQorICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnMgPSB7fQogCi0gICAgZGVmIF9w
dWxsX2Zyb21fZGV2aWNlKHNlbGYsIGRldmljZV9wYXRoLCBob3N0X3BhdGgsIGlnbm9yZV9lcnJv
cj1GYWxzZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydwdWxsJywg
ZGV2aWNlX3BhdGgsIGhvc3RfcGF0aF0sIGlnbm9yZV9lcnJvcikKKyAgICBkZWYgX2NvbW1hbmRf
d3JhcHBlcihjbHMsIHdyYXBwZXJfb3B0aW9uKToKKyAgICAgICAgIyBJZ25vcmUgY29tbWFuZCB3
cmFwcGVyIHdoaWNoIGlzIG5vdCBhcHBsaWNhYmxlIG9uIEFuZHJvaWQuCisgICAgICAgIHJldHVy
biBbXQogCiAgICAgZGVmIF9nZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYpOgotICAgICAgICB0b21i
c3RvbmVzID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCAnLW4nLCAnL2Rh
dGEvdG9tYnN0b25lcyddKQorICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5fYW5kcm9pZC5ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsICctbicsICcvZGF0YS90b21ic3RvbmVzJ10pCiAg
ICAgICAgIGlmIG5vdCB0b21ic3RvbmVzIG9yIHRvbWJzdG9uZXMuc3RhcnRzd2l0aCgnL2RhdGEv
dG9tYnN0b25lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpOgotICAgICAgICAgICAgc2Vs
Zi5fbG9nX2Vycm9yKCdEUlQgY3Jhc2hlZCwgYnV0IG5vIHRvbWJzdG9uZSBmb3VuZCEnKQorICAg
ICAgICAgICAgbG9nX2Vycm9yKHNlbGYuX2RldmljZV9zZXJpYWwsICdEUlQgY3Jhc2hlZCwgYnV0
IG5vIHRvbWJzdG9uZSBmb3VuZCEnKQogICAgICAgICAgICAgcmV0dXJuICcnCiAgICAgICAgIHRv
bWJzdG9uZXMgPSB0b21ic3RvbmVzLnJzdHJpcCgpLnNwbGl0KCdcbicpCiAgICAgICAgIGxhc3Rf
dG9tYnN0b25lID0gdG9tYnN0b25lc1swXS5zcGxpdCgpCkBAIC00NzEsMjggKzcwMSwxMCBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgc3Rh
Y2sgdHJhY2UgaW50byBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCwgaWYgbmVlZGVkLgogICAgICAg
ICAjIEl0IHRha2VzIGEgbG9uZyB0aW1lLCBzbyBkb24ndCBkbyBpdCBoZXJlLgogICAgICAgICBy
ZXR1cm4gJyVzXG4lcycgJSAoJyAnLmpvaW4obGFzdF90b21ic3RvbmUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9k
YXRhL3RvbWJzdG9uZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9hbmRyb2lkLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcs
ICcvZGF0YS90b21ic3RvbmVzLycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQogCiAgICAgZGVmIF9n
ZXRfbG9nY2F0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
bG9nY2F0JywgJy1kJywgJy12JywgJ3RocmVhZHRpbWUnXSkKLQotICAgIGRlZiBfc2V0dXBfcGVy
Zm9ybWFuY2Uoc2VsZik6Ci0gICAgICAgICMgRGlzYWJsZSBDUFUgc2NhbGluZyBhbmQgZHJvcCBy
YW0gY2FjaGUgdG8gcmVkdWNlIG5vaXNlIGluIHRlc3RzCi0gICAgICAgIGlmIG5vdCBzZWxmLl9v
cmlnaW5hbF9nb3Zlcm5vcnM6Ci0gICAgICAgICAgICBnb3Zlcm5vcl9maWxlcyA9IHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0p
Ci0gICAgICAgICAgICBpZiBnb3Zlcm5vcl9maWxlcy5maW5kKCdObyBzdWNoIGZpbGUgb3IgZGly
ZWN0b3J5JykgPT0gLTE6Ci0gICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZ292ZXJub3JfZmls
ZXMuc3BsaXQoKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3Jz
W2ZpbGVdID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgZmlsZV0pLnN0
cmlwKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnZWNobycsICdwZXJmb3JtYW5jZScsICc+JywgZmlsZV0pCi0KLSAgICBkZWYgX3RlYXJkb3du
X3BlcmZvcm1hbmNlKHNlbGYpOgotICAgICAgICBmb3IgZmlsZSwgb3JpZ2luYWxfY29udGVudCBp
biBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCBvcmlnaW5hbF9jb250ZW50LCAnPicsIGZp
bGVdKQotICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnMgPSB7fQotCi0gICAgZGVmIF9j
b21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29wdGlvbik6Ci0gICAgICAgICMgSWdub3JlIGNv
bW1hbmQgd3JhcHBlciB3aGljaCBpcyBub3QgYXBwbGljYWJsZSBvbiBBbmRyb2lkLgotICAgICAg
ICByZXR1cm4gW10KKyAgICAgICAgcmV0dXJuIHNlbGYuX2FuZHJvaWQucnVuX2FkYl9jb21tYW5k
KFsnbG9nY2F0JywgJy1kJywgJy12JywgJ3RocmVhZHRpbWUnXSkKIAogICAgIGRlZiBfZ2V0X2Ny
YXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CiAgICAgICAgIGlmIG5v
dCBzdGRvdXQ6CkBAIC01MDgsMTAgKzcyMCw2IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZl
cihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgIyBUaGUgY29tbWFuZCBsaW5lIHBhc3NlZCB0byB0
aGUgRFJUIHByb2Nlc3MgaXMgcmV0dXJuZWQgYnkgX2RydF9jbWRfbGluZSgpIGluc3RlYWQuCiAg
ICAgICAgIHJldHVybiBzZWxmLl9hZGJfY29tbWFuZCArIFsnc2hlbGwnXQogCi0gICAgZGVmIF9m
aWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxlX3BhdGgpOgotICAgICAgICBhc3Nl
cnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCi0gICAgICAgIHJldHVybiBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9
PSBmdWxsX2ZpbGVfcGF0aAotCiAgICAgZGVmIF9kcnRfY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVz
dHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICByZXR1cm4gZHJpdmVyLkRyaXZlci5jbWRfbGlu
ZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykgKyBbJy0tY3JlYXRlLXN0ZGluLWZp
Zm8nLCAnLS1zZXBhcmF0ZS1zdGRlcnItZmlmbyddCiAKQEAgLTUyNCwxNyArNzMyLDE3IEBAIGNs
YXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgcmV0dXJu
IEZhbHNlCiAKICAgICBkZWYgX2FsbF9waXBlc19jcmVhdGVkKHNlbGYpOgotICAgICAgICByZXR1
cm4gKHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAot
ICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlm
b19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisgICAgICAgIHJldHVybiAoc2VsZi5fYW5kcm9pZC5maWxl
X2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAg
ICBzZWxmLl9hbmRyb2lkLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRo
KSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkLmZpbGVfZXhpc3RzX29uX2Rldmlj
ZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKIAogICAgIGRlZiBfcmVtb3ZlX2FsbF9waXBlcyhzZWxm
KToKICAgICAgICAgZm9yIGZpbGUgaW4gW3NlbGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0X2Zp
Zm9fcGF0aCwgc2VsZi5fZXJyX2ZpZm9fcGF0aF06Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdybScsIGZpbGVdKQorICAgICAgICAgICAgc2VsZi5fYW5kcm9p
ZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIGZpbGVdKQogCi0gICAgICAgIHJldHVy
biAobm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFu
ZAotICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5f
b3V0X2ZpZm9fcGF0aCkgYW5kCi0gICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3Rz
X29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKKyAgICAgICAgcmV0dXJuIChub3Qgc2Vs
Zi5fYW5kcm9pZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQK
KyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fYW5kcm9pZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuX2FuZHJv
aWQuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKQogCiAgICAgZGVm
IHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCwgc3RvcF93aGVuX2RvbmUpOgogICAgICAgICBi
YXNlID0gc2VsZi5fcG9ydC5sb29rdXBfdmlydHVhbF90ZXN0X2Jhc2UoZHJpdmVyX2lucHV0LnRl
c3RfbmFtZSkKQEAgLTU1OSw3ICs3NjcsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIo
ZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIGZvciByZXRyaWVzIGluIHJhbmdlKDMpOgogICAgICAg
ICAgICAgaWYgc2VsZi5fc3RhcnRfb25jZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLl9sb2dfZXJyb3IoJ0ZhaWxl
ZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gUmV0cmllcz0lZC4gTG9nOiVz
JyAlIChyZXRyaWVzLCBzZWxmLl9nZXRfbG9nY2F0KCkpKQorICAgICAgICAgICAgbG9nX2Vycm9y
KHNlbGYuX2RldmljZV9zZXJpYWwsICdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBw
bGljYXRpb24uIFJldHJpZXM9JWQuIExvZzolcycgJSAocmV0cmllcywgc2VsZi5fZ2V0X2xvZ2Nh
dCgpKSkKICAgICAgICAgICAgIHNlbGYuc3RvcCgpCiAgICAgICAgICAgICB0aW1lLnNsZWVwKDIp
CiAgICAgICAgIHNlbGYuX2Fib3J0KCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBw
bGljYXRpb24gbXVsdGlwbGUgdGltZXMuIEdpdmUgdXAuJykKQEAgLTU2NywxNiArNzc1LDE0IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICBkZWYgX3N0
YXJ0X29uY2Uoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICBzdXBl
cihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9zdGFydChwaXhlbF90ZXN0cywgcGVyX3Rl
c3RfYXJncykKIAotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1N0YXJ0aW5nIGZvcndhcmRlcicp
Ci0gICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3By
b2Nlc3NfY29uc3RydWN0b3IoCi0gICAgICAgICAgICBzZWxmLl9wb3J0LCAnRm9yd2FyZGVyJywg
c2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJyVzIC1EICVzJyAlIChERVZJQ0VfRk9SV0FS
REVSX1BBVEgsIEZPUldBUkRfUE9SVFMpXSkKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nl
c3Muc3RhcnQoKQotCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICct
YyddKQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBz
ZWxmLl9jbWRfbGluZSArIFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKLSAgICAgICAgc3RhcnRf
cmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnc3RhcnQnLCAn
LWUnLCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNUSVZJVFlfRlVMTF9OQU1FXSkKKyAg
ICAgICAgcG9ydF9wYWlycyA9IFsocG9ydCwgcG9ydCkgZm9yIHBvcnQgaW4gRk9SV0FSRF9QT1JU
U10KKyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdQeXRob24gc2NyaXB0
IGlzIHN0YXJ0aW5nIGZvcndhcmRlciBmb3IgcG9ydHM6ICcgKyBzdHIocG9ydF9wYWlycykpCisg
ICAgICAgIHNlbGYuX2ZvcndhcmRlciA9IEZvcndhcmRlcihzZWxmLl9hbmRyb2lkLCBzZWxmLl93
b3JrZXJfbnVtYmVyLCBwb3J0X3BhaXJzLCAnMTI3LjAuMC4xJykKKyAgICAgICAgc2VsZi5fYW5k
cm9pZC5ydW5fYWRiX2NvbW1hbmQoWydsb2djYXQnLCAnLWMnXSkKKyAgICAgICAgc2VsZi5fYW5k
cm9pZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxmLl9jbWRfbGluZSAr
IFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKKyAgICAgICAgc3RhcnRfcmVzdWx0ID0gc2VsZi5f
YW5kcm9pZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScsICdS
dW5JblN1YlRocmVhZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVdKQogICAgICAgICBp
ZiBzdGFydF9yZXN1bHQuZmluZCgnRXhjZXB0aW9uJykgIT0gLTE6Ci0gICAgICAgICAgICBzZWxm
Ll9sb2dfZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4g
RXhjZXB0aW9uOlxuJyArIHN0YXJ0X3Jlc3VsdCkKKyAgICAgICAgICAgIGxvZ19lcnJvcihzZWxm
Ll9kZXZpY2Vfc2VyaWFsLCAnRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0
aW9uLiBFeGNlcHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCiAKICAgICAgICAgaWYgbm90IENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3Rp
bWVvdXQoc2VsZi5fYWxsX3BpcGVzX2NyZWF0ZWQsIERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VD
Uyk6CkBAIC01ODYsMjEgKzc5MiwyMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJp
dmVyLkRyaXZlcik6CiAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyBEUlRfU1RBUlRf
U1RPUF9USU1FT1VUX1NFQ1MKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQog
ICAgICAgICBzZWxmLl9yZWFkX3Byb21wdChkZWFkbGluZSkKLSAgICAgICAgc2VsZi5fbG9nX2Rl
YnVnKCdJbnRlcmFjdGl2ZSBzaGVsbCBzdGFydGVkJykKKyAgICAgICAgbG9nX2RlYnVnKHNlbGYu
X2RldmljZV9zZXJpYWwsICdJbnRlcmFjdGl2ZSBzaGVsbCBzdGFydGVkJykKIAogICAgICAgICAj
IFN0YXJ0IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIHN0ZG91dCBmaWZvIG9mIHRoZSBEdW1w
UmVuZGVyVHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KLSAgICAgICAgc2VsZi5fbG9nX2Rl
YnVnKCdSZWRpcmVjdGluZyBzdGRvdXQgdG8gJyArIHNlbGYuX291dF9maWZvX3BhdGgpCisgICAg
ICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUmVkaXJlY3Rpbmcgc3Rkb3V0IHRv
ICcgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9j
ZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IoCiAgICAgICAgICAg
ICBzZWxmLl9wb3J0LCAnUmVhZFN0ZG91dCcsIHNlbGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcs
ICdjYXQnLCBzZWxmLl9vdXRfZmlmb19wYXRoXSkKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRf
cHJvY2Vzcy5zdGFydCgpCiAKICAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9t
IHRoZSBzdGRlcnIgZmlmbyBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBz
dGRvdXQuCi0gICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnUmVkaXJlY3Rpbmcgc3RkZXJyIHRvICcg
KyBzZWxmLl9lcnJfZmlmb19wYXRoKQorICAgICAgICBsb2dfZGVidWcoc2VsZi5fZGV2aWNlX3Nl
cmlhbCwgJ1JlZGlyZWN0aW5nIHN0ZGVyciB0byAnICsgc2VsZi5fZXJyX2ZpZm9fcGF0aCkKICAg
ICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3NlcnZlcl9wcm9j
ZXNzX2NvbnN0cnVjdG9yKAogICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRlcnInLCBz
ZWxmLl9hZGJfY29tbWFuZCArIFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJyX2ZpZm9fcGF0aF0p
CiAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3Muc3RhcnQoKQogCi0gICAgICAgIHNl
bGYuX2xvZ19kZWJ1ZygnUmVkaXJlY3Rpbmcgc3RkaW4gdG8gJyArIHNlbGYuX2luX2ZpZm9fcGF0
aCkKKyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdSZWRpcmVjdGluZyBz
dGRpbiB0byAnICsgc2VsZi5faW5fZmlmb19wYXRoKQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJv
Y2Vzcy53cml0ZSgnY2F0ID4lc1xuJyAlIHNlbGYuX2luX2ZpZm9fcGF0aCkKIAogICAgICAgICAj
IENvbWJpbmUgdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHBpcGVzIGludG8gc2VsZi5fc2VydmVyX3By
b2Nlc3MuCkBAIC02MTIsNyArODE4LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRy
aXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgICAgICMgcmVhZGluZy93cml0aW5nIHRoZSBmaWZv
LiBLaWxsIHRoZSBmaWZvIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgdG8gbGV0IHRoZQogICAg
ICAgICAgICAgICAgICMgbWFpbiB0aHJlYWQgZXNjYXBlIGZyb20gdGhlIGRlYWRsb2NrZWQgc3Rh
dGUuIEFmdGVyIHRoYXQsIHRoZSBtYWluIHRocmVhZCB3aWxsCiAgICAgICAgICAgICAgICAgIyB0
cmVhdCB0aGlzIGFzIGEgY3Jhc2guCi0gICAgICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdE
ZWFkbG9jayBkZXRlY3RlZC4gUHJvY2Vzc2VzIGtpbGxlZC4nKQorICAgICAgICAgICAgICAgIGxv
Z19lcnJvcihzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnRGVhZGxvY2sgZGV0ZWN0ZWQuIFByb2Nlc3Nl
cyBraWxsZWQuJykKICAgICAgICAgICAgICAgICBmb3IgaSBpbiBwcm9jZXNzZXM6CiAgICAgICAg
ICAgICAgICAgICAgIGkua2lsbCgpCiAKQEAgLTYzOCw3ICs4NDQsNyBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQog
CiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQorICAgICAgICBzZWxm
Ll9hbmRyb2lkLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBE
UlRfQVBQX1BBQ0tBR0VdKQogCiAgICAgICAgIGlmIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3M6
CiAgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLmtpbGwoKQpAQCAtNjUwLDkg
Kzg1Niw5IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKIAog
ICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnN0b3AoKQogCi0gICAg
ICAgIGlmIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzOgotICAgICAgICAgICAgc2VsZi5fZm9yd2Fy
ZGVyX3Byb2Nlc3Mua2lsbCgpCi0gICAgICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2VzcyA9
IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fZm9yd2FyZGVyOgorICAgICAgICAgICAgc2VsZi5fZm9y
d2FyZGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlciA9IE5vbmUKIAogICAg
ICAgICBpZiBzZWxmLl9oYXNfc2V0dXA6CiAgICAgICAgICAgICBpZiBub3QgQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLl9sb29wX3dpdGhfdGltZW91dChzZWxmLl9yZW1vdmVfYWxsX3BpcGVzLCBEUlRf
U1RBUlRfU1RPUF9USU1FT1VUX1NFQ1MpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170423</attachid>
            <date>2012-10-24 10:27:38 -0700</date>
            <delta_ts>2012-10-25 03:39:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121024192612.patch</filename>
            <type>text/plain</type>
            <size>38235</size>
            <attacher name="felipe">felipeg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMTg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzM5N2U0NmFlZmVmMjFjNWE0OWIxNTJmOWRmMjc0NmEz
OGFlNjBmMS4uZWYzMWFlNGM2Njg1ZGU0NWQzMzUzYmNhMmQwYjQwMGIyODA1YWVmMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDEyLTEwLTIzICBGZWxpcGUgR29sZHN0ZWluICA8ZmVsaXBlZ0BjaHJvbWl1bS5jb20+
CisKKyAgICAgICAgW0Nocm9taXVtXSBVc2UgdGhlIG5ldyBmb3J3YXJkZXIyIGZvciBydW5uaW5n
IGxheW91dCB0ZXN0cyBvbiBBbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05OTU4OAorCisgICAgICAgICJSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4iCisKKyAgICAgICAgSXTigJlzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gcnVuIHRo
ZSBDbGFuayB0ZXN0IHN1aXRlIG9uCisgICAgICAgIHByb2R1Y3Rpb24gZGV2aWNlcywgaS5lLiBu
b24tcm9vdGVkIHN5c3RlbSBpbWFnZXMgdGhhdCBhcmUgdXNlZCBieQorICAgICAgICBvdXIgdXNl
cnMsIHNpbmNlIHdlIGN1cnJlbnRseSB1c2UgYSBwcm9ncmFtIGNhbGxlZCAiZm9yd2FyZGVyIgor
ICAgICAgICB3aGljaCBtYWtlcyB1c2Ugb2YgYW4gYWRiIGhhY2sgb25seSBhdmFpbGFibGUgaW4g
cm9vdGVkIGRldmljZXMuCisgICAgICAgIFRoZSBmb3dhcmRlcjIgc29sdmVzIHRoaXMgcHJvYmxl
bS4gIFRoZSBmb3J3YXJkZXIgaXMgYSB3YXkgdG8KKyAgICAgICAgZm9yd2FyZCBUQ1AgY29ubmVj
dGlvbnMgZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBob3N0IHRocm91Z2ggdGhlCisgICAgICAgIGFk
YiBVU0IgY29ubmVjdGlvbiwgdG8gYmUgdXNlZCBpbiB0ZXN0aW5nLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5OgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0
LmNoZWNrX2J1aWxkKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3BhdGhfdG9fZGV2
aWNlX2ZvcndhcmRlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9wYXRoX3RvX2hv
c3RfZm9yd2FyZGVyKToKKyAgICAgICAgKGxvZ19lcnJvcik6CisgICAgICAgIChsb2dfZGVidWcp
OgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5f
X2luaXRfXyk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuZ2V0X2RldmljZV9zZXJpYWwpOgor
ICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1c2hfbWQ1c3VtKToKKyAgICAgICAgKEFuZHJvaWRD
b21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVkKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5y
dW5fYWRiX2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnJ1bl9ob3N0X2NvbW1h
bmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2RldmljZSk6Cisg
ICAgICAgIChBbmRyb2lkQ29tbWFuZHMuZ2V0X3BvcnQpOgorICAgICAgICAoQW5kcm9pZENvbW1h
bmRzLl9wdXNoX3RvX2RldmljZSk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuX2V4dHJhY3Rf
aGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCk6CisgICAgICAgIChGb3J3YXJkZXIpOgorICAgICAg
ICAoRm9yd2FyZGVyLl9faW5pdF9fKToKKyAgICAgICAgKEZvcndhcmRlci5fa2lsbF9ob3N0X2Zv
cndhcmRlcl9ibG9ja2luZyk6CisgICAgICAgIChGb3J3YXJkZXIuX2tpbGxfZGV2aWNlX2Zvcndh
cmRlcl9ibG9ja2luZyk6CisgICAgICAgIChGb3J3YXJkZXIuX2Nsb3NlX3Byb2Nlc3MpOgorICAg
ICAgICAoRm9yd2FyZGVyLmRldmljZV9wb3J0X2Zvcl9ob3N0X3BvcnQpOgorICAgICAgICAoRm9y
d2FyZGVyLmNsb3NlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2luaXRfXyk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1c2hfZGF0YV9pZl9uZWVkZWQpOgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zZXR1cF90ZXN0KToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5fYWJvcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9wdXNoX2V4ZWN1dGFibGUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9w
dXNoX2ZvbnRzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF90ZXN0X3Jl
c291cmNlcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3BlcmZvcm1h
bmNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fdGVhcmRvd25fcGVyZm9ybWFu
Y2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9jb21tYW5kX3dyYXBwZXIpOgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9nZXRfbGFzdF9zdGFja3RyYWNlKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2xvZ2NhdCk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9hbGxfcGlwZXNfY3JlYXRlZCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X3JlbW92ZV9hbGxfcGlwZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFy
dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2UpOgorICAgICAg
ICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydF9vbmNlLmRlYWRsb2NrX2RldGVjdG9yKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5zdG9wKToKKwogMjAxMi0xMC0yMyAgU2lt
b24gUGVuYSAgPHNwZW5hQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQWRkaW5n
IG15c2VsZiBhcyBjb21taXR0ZXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKaW5kZXggNjM4OWZl
YjYzNTdjZTNjYzQ5MGMwMmM2OTJjNWZmODFkNjc3YTQ5Ni4uYmM1NmNhMTA3NjViYTM3ZjUzNDM1
YzkyNDM0ODM5YTE3YzMzZDhjNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQpAQCAtMzksNiAr
MzksNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bQog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcworaW1wb3J0IHdlYmtpdHB5LnRoaXJk
cGFydHkuYXV0b2luc3RhbGxlZC5wZXhlcGN0IGFzIHBleHBlY3QKIAogCiBfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC01NCw3ICs1NSw3IEBAIENPTU1BTkRfTElORV9GSUxF
ID0gREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJvbWUtbmF0aXZlLXRlc3RzLWNvbW1hbmQt
bGluZScKICMgSWYgY2hhbmdlIHRoaXMsIG11c3QgYWxzbyBjaGFuZ2UgVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKICMgYW5kIENocm9taXVtJ3Mgd2Vi
a2l0L3N1cHBvcnQvcGxhdGZvcm1fc3VwcG9ydF9hbmRyb2lkLmNjLgogREVWSUNFX0RSVF9ESVIg
PSBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2RydC8nCi1ERVZJQ0VfRk9SV0FSREVSX1BBVEgg
PSBERVZJQ0VfRFJUX0RJUiArICdmb3J3YXJkZXInCitERVZJQ0VfRk9SV0FSREVSX1BBVEggPSBE
RVZJQ0VfRFJUX0RJUiArICdkZXZpY2VfZm9yd2FyZGVyJwogCiAjIFBhdGggb24gdGhlIGRldmlj
ZSB3aGVyZSB0aGUgdGVzdCBmcmFtZXdvcmsgd2lsbCBjcmVhdGUgdGhlIGZpZm8gcGlwZXMuCiBE
RVZJQ0VfRklGT19QQVRIID0gJy9kYXRhL2RhdGEvb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0L2Zp
bGVzLycKQEAgLTc0LDcgKzc1LDE2IEBAIFRFU1RfUEFUSF9QUkVGSVggPSAnL2FsbC10ZXN0cycK
ICMgODAwMCwgODA4MCBhbmQgODQ0MyBhcmUgZm9yIGh0dHAvaHR0cHMgdGVzdHMuCiAjIDg4ODAg
YW5kIDkzMjMgYXJlIGZvciB3ZWJzb2NrZXQgdGVzdHMKICMgKHNlZSBodHRwX3NlcnZlci5weSwg
YXBhY2hlX2h0dHBfc2VydmVyLnB5IGFuZCB3ZWJzb2NrZXRfc2VydmVyLnB5KS4KLUZPUldBUkRf
UE9SVFMgPSAnODAwMCA4MDgwIDg0NDMgODg4MCA5MzIzJworRk9SV0FSRF9QT1JUUyA9IFs4MDAw
LCA4MDgwLCA4NDQzLCA4ODgwLCA5MzIzXQorCisjIFdlIHJ1biBvbmUgRm9yd2FyZGVyIHBlciBk
ZXZpY2UgLyB3b3JrZXIsIGFuZCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZSBjb250cm9sCisjIHBv
cnQgZm9yIGVhY2ggRm9yd2FyZGVyLiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSByYW5nZSBv
ZiBwb3J0cyB3ZSBjYW4gdXNlLgorRk9SV0FSREVSX0NPTlRST0xfUE9SVF9CRUdJTiA9IDIwMDAw
CitGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VORCA9IDIxMDAwCisKKyMgVW5peCBBYnN0cmFjdCBz
b2NrZXQgcGF0aDoKK0RFVklDRV9BREJfQ09OVFJPTF9QT1JUID0gJ2Nocm9tZV9kZXZpY2VfZm9y
d2FyZGVyJworRk9SV0FSREVSX1RJTUVPVVRfU0VDUyA9IDMwCiAKIE1TX1RSVUVUWVBFX0ZPTlRT
X0RJUiA9ICcvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvJwogTVNfVFJV
RVRZUEVfRk9OVFNfUEFDS0FHRSA9ICd0dGYtbXNjb3JlZm9udHMtaW5zdGFsbGVyJwpAQCAtMjA0
LDcgKzIxNCw4IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Q
b3J0KToKICAgICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAgIHJl
c3VsdCA9IHN1cGVyKENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLmNoZWNrX2J1aWxkKG5lZWRz
X2h0dHApCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYuX3Bh
dGhfdG9fbWQ1c3VtKCksICdtZDVzdW0gdXRpbGl0eScpIGFuZCByZXN1bHQKLSAgICAgICAgcmVz
dWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5fcGF0aF90b19mb3J3YXJkZXIoKSwg
J2ZvcndhcmRlciB1dGlsaXR5JykgYW5kIHJlc3VsdAorICAgICAgICByZXN1bHQgPSBzZWxmLl9j
aGVja19maWxlX2V4aXN0cyhzZWxmLl9wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKSwgJ2Rldmlj
ZV9mb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5f
Y2hlY2tfZmlsZV9leGlzdHMoc2VsZi5fcGF0aF90b19ob3N0X2ZvcndhcmRlcigpLCAnaG9zdF9m
b3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKICAgICAgICAgaWYgbm90IHJlc3VsdDoKICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZvciBjb21wbGV0ZSBBbmRyb2lkIGJ1aWxkIHJlcXVpcmVt
ZW50cywgcGxlYXNlIHNlZTonKQogICAgICAgICAgICAgX2xvZy5lcnJvcignJykKQEAgLTI3OCw4
ICsyODksMTEgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBv
cnQpOgogICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25l
CiAKLSAgICBkZWYgX3BhdGhfdG9fZm9yd2FyZGVyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5fYnVpbGRfcGF0aCgnZm9yd2FyZGVyJykKKyAgICBkZWYgX3BhdGhfdG9fZGV2aWNlX2Zvcndh
cmRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2RldmljZV9mb3J3
YXJkZXInKQorCisgICAgZGVmIF9wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnaG9zdF9mb3J3YXJkZXInKQogCiAgICAgZGVmIF9w
YXRoX3RvX21kNXN1bShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoTUQ1
U1VNX0RFVklDRV9GSUxFX05BTUUpCkBAIC0zMjMsNiArMzM3LDI2OSBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIHJldHVybiBkZXZp
Y2VzW3dvcmtlcl9udW1iZXJdCiAKIAorZGVmIGxvZ19lcnJvcihkZXZpY2Vfc2VyaWFsLCBtZXNz
YWdlKToKKyAgICBfbG9nLmVycm9yKCdbJXNdICVzJyAlIChkZXZpY2Vfc2VyaWFsLCBtZXNzYWdl
KSkKKworCitkZWYgbG9nX2RlYnVnKGRldmljZV9zZXJpYWwsIG1lc3NhZ2UpOgorICAgIF9sb2cu
ZGVidWcoJ1slc10gJXMnICUgKGRldmljZV9zZXJpYWwsIG1lc3NhZ2UpKQorCisKK2NsYXNzIEFu
ZHJvaWRDb21tYW5kcyhPYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3Jr
ZXJfbnVtYmVyKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZGV2
aWNlX3NlcmlhbCA9IHNlbGYuX3BvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKHdvcmtlcl9udW1iZXIp
CisgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMnLCBzZWxmLl9kZXZpY2Vf
c2VyaWFsXQorICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnMgPSB7fQorCisgICAgZGVm
IF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuX3RlYXJkb3duX3BlcmZvcm1hbmNlKCkKKwor
ICAgIGRlZiBnZXRfZGV2aWNlX3NlcmlhbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rl
dmljZV9zZXJpYWwKKworICAgIGRlZiBfcHVzaF9tZDVzdW0oc2VsZik6CisgICAgICAgIHNlbGYu
X21kNXN1bV9wYXRoID0gc2VsZi5fcG9ydC5fcGF0aF90b19tZDVzdW0oKQorICAgICAgICBpZiBu
b3Qgc2VsZi5maWxlX2V4aXN0c19vbl9kZXZpY2UoTUQ1U1VNX0RFVklDRV9QQVRIKToKKyAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9tZDVzdW1fcGF0aCwgTUQ1
U1VNX0RFVklDRV9QQVRIKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcign
Q291bGQgbm90IHB1c2ggbWQ1c3VtIHRvIGRldmljZScpCisKKyAgICBkZWYgX3NldHVwX3BlcmZv
cm1hbmNlKHNlbGYpOgorICAgICAgICAjIERpc2FibGUgQ1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFt
IGNhY2hlIHRvIHJlZHVjZSBub2lzZSBpbiB0ZXN0cworICAgICAgICBpZiBub3Qgc2VsZi5fb3Jp
Z2luYWxfZ292ZXJub3JzOgorICAgICAgICAgICAgZ292ZXJub3JfZmlsZXMgPSBzZWxmLnJ1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCisg
ICAgICAgICAgICBpZiBnb3Zlcm5vcl9maWxlcy5maW5kKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0
b3J5JykgPT0gLTE6CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZ292ZXJub3JfZmlsZXMu
c3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzW2Zp
bGVdID0gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSkuc3RyaXAo
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2Vj
aG8nLCAncGVyZm9ybWFuY2UnLCAnPicsIGZpbGVdKQorCisgICAgZGVmIF90ZWFyZG93bl9wZXJm
b3JtYW5jZShzZWxmKToKKyAgICAgICAgZm9yIGZpbGUsIG9yaWdpbmFsX2NvbnRlbnQgaW4gc2Vs
Zi5fb3JpZ2luYWxfZ292ZXJub3JzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLnJ1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCBvcmlnaW5hbF9jb250ZW50LCAnPicsIGZpbGVdKQor
ICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnMgPSB7fQorCisgICAgZGVmIHNldHVwX2Rl
dmljZShzZWxmKToKKyAgICAgICAgc2VsZi5fcHVzaF9tZDVzdW0oKQorICAgICAgICBzZWxmLl9z
ZXR1cF9wZXJmb3JtYW5jZSgpCisKKyAgICBkZWYgcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLCBo
b3N0X2ZpbGUsIGRldmljZV9maWxlKToKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGhv
c3RfZmlsZSkKKyAgICAgICAgZGV2aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJhY3RfaGFzaGVzX2Zy
b21fbWQ1c3VtX291dHB1dCgKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZXhlY3V0
aXZlLnBvcGVuKHNlbGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsIE1ENVNVTV9ERVZJQ0VfUEFU
SCwgZGV2aWNlX2ZpbGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQorICAgICAgICBob3N0X2hh
c2hlcyA9IHNlbGYuX2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKKyAgICAgICAg
ICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKGFyZ3M9Wyclc19ob3N0JyAl
IHNlbGYuX21kNXN1bV9wYXRoLCBob3N0X2ZpbGVdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQor
ICAgICAgICBpZiBob3N0X2hhc2hlcyBhbmQgZGV2aWNlX2hhc2hlcyA9PSBob3N0X2hhc2hlczoK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShob3N0X2Zp
bGUsIGRldmljZV9maWxlKQorCisgICAgZGVmIHJ1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQsIGln
bm9yZV9lcnJvcj1GYWxzZSk6CisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFs
LCAnUnVuIGFkYiBjb21tYW5kOiAnICsgc3RyKGNtZCkpCisgICAgICAgIGlmIGlnbm9yZV9lcnJv
cjoKKyAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuaWdu
b3JlX2Vycm9yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gTm9u
ZQorICAgICAgICByZXN1bHQgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoc2Vs
Zi5fYWRiX2NvbW1hbmQgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKKyAgICAg
ICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBvZiBjb21t
YW5kcyBsaWtlICdhZGIgbG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9u
ZTAxJworICAgICAgICAjIHdob3NlIG91dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQgaW4gbGF0
ZXIgbG9ncy4KKyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdSdW4gYWRi
IHJlc3VsdDogJyArIHJlc3VsdFs6ODBdKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBk
ZWYgcnVuX2hvc3RfY29tbWFuZChzZWxmLCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSwgcmV0dXJu
X2V4aXRfY29kZT1UcnVlKToKKyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWws
ICdSdW4gaG9zdCBjb21tYW5kOiAnICsgc3RyKGNtZCkpCisgICAgICAgIGlmIGlnbm9yZV9lcnJv
cjoKKyAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuaWdu
b3JlX2Vycm9yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gTm9u
ZQorICAgICAgICByZXN1bHQgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoY21k
LCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIsIHJldHVybl9leGl0X2NvZGU9cmV0dXJuX2V4
aXRfY29kZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGZpbGVfZXhpc3RzX29u
X2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CisgICAgICAgIGFzc2VydCBmdWxsX2ZpbGVf
cGF0aC5zdGFydHN3aXRoKCcvJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3Bh
dGgKKworICAgIGRlZiBwYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKToKKyAgICAgIHJldHVybiBz
ZWxmLl9wb3J0Ll9wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKQorCisgICAgZGVmIHBhdGhfdG9f
aG9zdF9mb3J3YXJkZXIoKToKKyAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9wYXRoX3RvX2hvc3Rf
Zm9yd2FyZGVyKCkKKworICAgIGRlZiBfcHVzaF90b19kZXZpY2Uoc2VsZiwgaG9zdF9wYXRoLCBk
ZXZpY2VfcGF0aCwgaWdub3JlX2Vycm9yPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVu
X2FkYl9jb21tYW5kKFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGhdLCBpZ25vcmVfZXJy
b3IpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9leHRyYWN0X2hhc2hlc19mcm9tX21k
NXN1bV9vdXRwdXQobWQ1c3VtX291dHB1dCk6CisgICAgICAgIGFzc2VydCBtZDVzdW1fb3V0cHV0
CisgICAgICAgIHJldHVybiBbbGluZS5zcGxpdCgnICAnKVswXSBmb3IgbGluZSBpbiBtZDVzdW1f
b3V0cHV0XQorCisKK2NsYXNzIEZvcndhcmRlcihvYmplY3QpOgorICAgICIiIkNsYXNzIHRvIG1h
bmFnZSBwb3J0IGZvcndhcmRzIGZyb20gdGhlIGRldmljZSB0byB0aGUgaG9zdC4iIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBhbmRyb2lkX2NtZCwgd29ya2VyX251bWJlciwgcG9ydF9wYWly
cywgaG9zdF9uYW1lKToKKyAgICAgICAgIiIiRm9yd2FyZHMgVENQIHBvcnRzIG9uIHRoZSBkZXZp
Y2UgYmFjayB0byB0aGUgaG9zdC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYW5kcm9p
ZF9jbWQ6IEluc3RhbmNlIG9mIEFuZHJvaWRDb21tYW5kcy4KKyAgICAgICAgICAgIHdvcmtlcl9u
dW1iZXI6IEludGVnZXIsIHdvcmtlciBudW1iZXIuCisgICAgICAgICAgICBwb3J0X3BhaXJzOiBB
IGxpc3Qgb2YgdHVwbGVzIChkZXZpY2VfcG9ydCwgaG9zdF9wb3J0KSB0byBmb3J3YXJkLiBOb3Rl
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSBjYW4gc3BlY2lmeSAwIGFzIGEgZGV2
aWNlX3BvcnQsIGluIHdoaWNoIGNhc2UgYQorICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCB3
aWxsIGJ5IGR5bmFtaWNhbGx5IGFzc2lnbmVkIG9uIHRoZSBkZXZpY2UuIFlvdSBjYW4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdldCB0aGUgbnVtYmVyIG9mIHRoZSBhc3NpZ25lZCBwb3J0IHVz
aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX3BvcnRfZm9yX2hvc3RfcG9y
dCBtZXRob2QuCisgICAgICAgICAgICBob3N0X25hbWU6IEFkZHJlc3MgdG8gZm9yd2FyZCB0bywg
bXVzdCBiZSBhZGRyZXNzYWJsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBob3N0
IG1hY2hpbmUuIFVzdWFsbHkgdXNlIGxvb3BiYWNrICcxMjcuMC4wLjEnLgorCisgICAgICAgIFJh
aXNlczoKKyAgICAgICAgICAgIEV4Y2VwdGlvbiBvbiBmYWlsdXJlIHRvIGZvcndhcmQgdGhlIHBv
cnQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZCA9IGFuZHJvaWRfY21k
CisgICAgICAgIHNlbGYuX2hvc3RfdG9fZGV2aWNlX3BvcnRfbWFwID0gZGljdCgpCisgICAgICAg
IHNlbGYuX2hvc3RfcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZGV2aWNlX3Byb2Nlc3Mg
PSBOb25lCisgICAgICAgIHNlbGYuX2FkYl9mb3J3YXJkX3Byb2Nlc3MgPSBOb25lCisKKyAgICAg
ICAgYXNzZXJ0KEZPUldBUkRFUl9DT05UUk9MX1BPUlRfQkVHSU4gKyB3b3JrZXJfbnVtYmVyIDwg
Rk9SV0FSREVSX0NPTlRST0xfUE9SVF9FTkQpCisgICAgICAgIHNlbGYuX2hvc3RfYWRiX2NvbnRy
b2xfcG9ydCA9IEZPUldBUkRFUl9DT05UUk9MX1BPUlRfQkVHSU4gKyB3b3JrZXJfbnVtYmVyCisK
KyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZCgKKyAgICAgICAg
ICAgIHNlbGYuX2FuZHJvaWRfY21kLnBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcigpLAorICAgICAg
ICAgICAgREVWSUNFX0ZPUldBUkRFUl9QQVRIKQorICAgICAgICBzZWxmLl9ob3N0X2ZvcndhcmRl
cl9wYXRoID0gc2VsZi5fYW5kcm9pZF9jbWQucGF0aF90b19ob3N0X2ZvcndhcmRlcigpCisKKyAg
ICAgICAgZm9yd2FyZF9zdHJpbmcgPSBbJyVkOiVkOiVzJyAlIChkZXZpY2UsIGhvc3QsIGhvc3Rf
bmFtZSkgZm9yIGRldmljZSwgaG9zdCBpbiBwb3J0X3BhaXJzXQorICAgICAgICBsb2dnaW5nLmlu
Zm8oJ0ZvcndhcmRpbmcgcG9ydHM6ICVzJywgc3RyKGZvcndhcmRfc3RyaW5nKSkKKyAgICAgICAg
dGltZW91dF9zZWMgPSA1CisgICAgICAgIGhvc3RfcGF0dGVybiA9ICdob3N0X2ZvcndhcmRlci4q
JyArICcgJy5qb2luKGZvcndhcmRfc3RyaW5nKQorCisgICAgICAgICMgRklYTUU6IFJhdGhlciB0
aGFuIHVzaW5nIGEgYmxvY2tpbmcga2lsbCgpIGhlcmUsIHRoZSBkZXZpY2UKKyAgICAgICAgIyBm
b3J3YXJkZXIgY291bGQgdHJ5IHRvIGJpbmQgdGhlIFVuaXggRG9tYWluIFNvY2tldCB1bnRpbCBp
dCBzdWNjZWVkcyBvcgorICAgICAgICAjIHdoaWxlIGl0IGZhaWxzIGJlY2F1c2UgdGhlIHNvY2tl
dCBpcyBhbHJlYWR5IGJvdW5kICh3aXRoIGFwcHJvcHJpYXRlCisgICAgICAgICMgdGltZW91dCBo
YW5kbGluZyBvYnZpb3VzbHkpLgorICAgICAgICBzZWxmLl9raWxsX2hvc3RfZm9yd2FyZGVyX2Js
b2NraW5nKGhvc3RfcGF0dGVybiwgdGltZW91dF9zZWMpCisgICAgICAgIHNlbGYuX2tpbGxfZGV2
aWNlX2ZvcndhcmRlcl9ibG9ja2luZyh0aW1lb3V0X3NlYykKKworICAgICAgICBzZWxmLl9hZGJf
Zm9yd2FyZF9wcm9jZXNzID0gcGV4cGVjdC5zcGF3bigKKyAgICAgICAgICAgICdhZGInLCBbJy1z
JywKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQuZ2V0X2RldmljZV9zZXJp
YWwoKSwKKyAgICAgICAgICAgICAgICAgICAgJ2ZvcndhcmQnLAorICAgICAgICAgICAgICAgICAg
ICAndGNwOiVzJyAlIHNlbGYuX2hvc3RfYWRiX2NvbnRyb2xfcG9ydCwKKyAgICAgICAgICAgICAg
ICAgICAgJ2xvY2FsYWJzdHJhY3Q6JXMnICUgREVWSUNFX0FEQl9DT05UUk9MX1BPUlRdKQorICAg
ICAgICBzZWxmLl9kZXZpY2VfcHJvY2VzcyA9IHBleHBlY3Quc3Bhd24oCisgICAgICAgICAgICAn
YWRiJywgWyctcycsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLmdldF9k
ZXZpY2Vfc2VyaWFsKCksCisgICAgICAgICAgICAgICAgICAgICdzaGVsbCcsCisgICAgICAgICAg
ICAgICAgICAgICclcyAtRCAtLWFkYl9zb2NrPSVzJyAlICgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIERFVklDRV9GT1JXQVJERVJfUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgIERFVklD
RV9BREJfQ09OVFJPTF9QT1JUKV0pCisKKyAgICAgICAgZGV2aWNlX3N1Y2Nlc3NfcmUgPSByZS5j
b21waWxlKCdTdGFydGluZyBEZXZpY2UgRm9yd2FyZGVyLicpCisgICAgICAgIGRldmljZV9mYWls
dXJlX3JlID0gcmUuY29tcGlsZSgnLio6RVJST1I6KC4qKScpCisgICAgICAgIGluZGV4ID0gc2Vs
Zi5fZGV2aWNlX3Byb2Nlc3MuZXhwZWN0KFtkZXZpY2Vfc3VjY2Vzc19yZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9mYWlsdXJlX3JlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGV4cGVjdC5FT0YsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXhwZWN0LlRJTUVP
VVRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JXQVJE
RVJfVElNRU9VVF9TRUNTKQorICAgICAgICBpZiBpbmRleCA9PSAxOgorICAgICAgICAgICAgIyBG
YWlsdXJlCisgICAgICAgICAgICBlcnJvcl9tc2cgPSBzdHIoc2VsZi5fZGV2aWNlX3Byb2Nlc3Mu
bWF0Y2guZ3JvdXAoMSkpCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKHNlbGYuX2RldmljZV9w
cm9jZXNzLmJlZm9yZSkKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3Byb2Nlc3MoKQorICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgRGV2aWNlIEZvcndhcmRlciB3
aXRoIEVycm9yOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZykK
KyAgICAgICAgZWxpZiBpbmRleCA9PSAyOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihzZWxm
Ll9kZXZpY2VfcHJvY2Vzcy5iZWZvcmUpCisgICAgICAgICAgICBzZWxmLl9jbG9zZV9wcm9jZXNz
KCkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5leHBlY3RlZCBFT0Ygd2hpbGUgdHJ5
aW5nIHRvIHN0YXJ0IERldmljZSBGb3J3YXJkZXIuJykKKyAgICAgICAgZWxpZiBpbmRleCA9PSAz
OgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihzZWxmLl9kZXZpY2VfcHJvY2Vzcy5iZWZvcmUp
CisgICAgICAgICAgICBzZWxmLl9jbG9zZV9wcm9jZXNzKCkKKyAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbignVGltZW91dCB3aGlsZSB0cnlpbmcgc3RhcnQgRGV2aWNlIEZvcndhcmRlcicpCisg
ICAgICAgIHNlbGYuX2hvc3RfcHJvY2VzcyA9IHBleHBlY3Quc3Bhd24oc2VsZi5faG9zdF9mb3J3
YXJkZXJfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
Jy0tYWRiX3BvcnQ9JXMnICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9ob3N0X2FkYl9jb250cm9sX3BvcnQpXSArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9zdHJpbmcpCisKKyAgICAgICAg
IyBSZWFkIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgdG8gZGV0ZXJtaW5lIHdoaWNoIGRldmlj
ZSBwb3J0cyB3aGVyZQorICAgICAgICAjIGZvcndhcmRlZCB0byB3aGljaCBob3N0IHBvcnRzIChu
ZWNlc3NhcnkgaWYKKyAgICAgICAgaG9zdF9zdWNjZXNzX3JlID0gcmUuY29tcGlsZSgnRm9yd2Fy
ZGluZyBkZXZpY2UgcG9ydCAoXGQrKSB0byBob3N0IChcZCspOicpCisgICAgICAgIGhvc3RfZmFp
bHVyZV9yZSA9IHJlLmNvbXBpbGUoJ0NvdWxkblwndCBzdGFydCBmb3J3YXJkZXIgc2VydmVyIGZv
ciBwb3J0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlYzogKFxk
Kyk6KFxkKyknKQorICAgICAgICBmb3IgcGFpciBpbiBwb3J0X3BhaXJzOgorICAgICAgICAgICAg
aW5kZXggPSBzZWxmLl9ob3N0X3Byb2Nlc3MuZXhwZWN0KFtob3N0X3N1Y2Nlc3NfcmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZmFpbHVyZV9y
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGV4cGVj
dC5FT0YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBl
eHBlY3QuVElNRU9VVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRk9SV0FSREVSX1RJTUVPVVRfU0VDUykKKyAgICAgICAgICAgIGlmIGluZGV4ID09IDA6
CisgICAgICAgICAgICAgICAgIyBTdWNjZXNzCisgICAgICAgICAgICAgICAgZGV2aWNlX3BvcnQg
PSBpbnQoc2VsZi5faG9zdF9wcm9jZXNzLm1hdGNoLmdyb3VwKDEpKQorICAgICAgICAgICAgICAg
IGhvc3RfcG9ydCA9IGludChzZWxmLl9ob3N0X3Byb2Nlc3MubWF0Y2guZ3JvdXAoMikpCisgICAg
ICAgICAgICAgICAgc2VsZi5faG9zdF90b19kZXZpY2VfcG9ydF9tYXBbaG9zdF9wb3J0XSA9IGRl
dmljZV9wb3J0CisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJGb3J3YXJkaW5nIGRldmlj
ZSBwb3J0OiAlZCB0byBob3N0IHBvcnQ6ICVkLiIgJSAoZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCkp
CisgICAgICAgICAgICBlbGlmIGluZGV4ID09IDE6CisgICAgICAgICAgICAgICAgIyBGYWlsdXJl
CisgICAgICAgICAgICAgICAgZGV2aWNlX3BvcnQgPSBpbnQoc2VsZi5faG9zdF9wcm9jZXNzLm1h
dGNoLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGhvc3RfcG9ydCA9IGludChzZWxmLl9ob3N0
X3Byb2Nlc3MubWF0Y2guZ3JvdXAoMikpCisgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2VfcHJv
Y2VzcygpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gZm9yd2Fy
ZCBwb3J0ICVkIHRvICVkJyAlIChkZXZpY2VfcG9ydCwgaG9zdF9wb3J0KSkKKyAgICAgICAgICAg
IGVsaWYgaW5kZXggPT0gMjoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKHNlbGYuX2hv
c3RfcHJvY2Vzcy5iZWZvcmUpCisgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2VfcHJvY2Vzcygp
CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVkIEVPRiB3aGlsZSB0
cnlpbmcgdG8gZm9yd2FyZCBwb3J0cyAlcycgJSBwb3J0X3BhaXJzKQorICAgICAgICAgICAgZWxp
ZiBpbmRleCA9PSAzOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Ioc2VsZi5faG9zdF9w
cm9jZXNzLmJlZm9yZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jbG9zZV9wcm9jZXNzKCkKKyAg
ICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVvdXQgd2hpbGUgdHJ5aW5nIHRvIGZv
cndhcmQgcG9ydHMgJXMnICUgcG9ydF9wYWlycykKKworICAgIGRlZiBfa2lsbF9ob3N0X2Zvcndh
cmRlcl9ibG9ja2luZyhzZWxmLCBob3N0X3BhdHRlcm4sIHRpbWVvdXRfc2VjKToKKyAgICAgICAg
IiIiS2lsbHMgYW55IGV4aXN0aW5nIGhvc3QgZm9yd2FyZGVycyB1c2luZyB0aGUgcHJvdmlkZWQg
cGF0dGVybi4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyB3YWl0cyB1bnRpbCB0aGUgcHJvY2Vz
cyB0ZXJtaW5hdGVzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVu
X2hvc3RfY29tbWFuZChbJ3BraWxsJywgJy1mJywgaG9zdF9wYXR0ZXJuXSkKKyAgICAgICAgZWxh
cHNlZCA9IDAKKyAgICAgICAgd2FpdF9wZXJpb2QgPSAwLjEKKyAgICAgICAgd2hpbGUgbm90IHNl
bGYuX2FuZHJvaWRfY21kLnJ1bl9ob3N0X2NvbW1hbmQoWydwZ3JlcCcsICctZicsIGhvc3RfcGF0
dGVybl0pIGFuZCAoZWxhcHNlZCA8IHRpbWVvdXRfc2VjKToKKyAgICAgICAgICAgIHRpbWUuc2xl
ZXAod2FpdF9wZXJpb2QpCisgICAgICAgICAgICBlbGFwc2VkICs9IHdhaXRfcGVyaW9kCisgICAg
ICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dF9zZWM6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oJ1RpbWVkIG91dCB3aGlsZSBraWxsaW5nICcgKyBob3N0X3BhdHRlcm4pCisKKyAgICBkZWYg
X2tpbGxfZGV2aWNlX2ZvcndhcmRlcl9ibG9ja2luZyhzZWxmLCB0aW1lb3V0X3NlYyk6CisgICAg
ICAgICIiIktpbGxzIGFueSBleGlzdGluZyBkZXZpY2UgZm9yd2FyZGVycy4KKworICAgICAgICBO
b3RlIHRoYXQgdGhpcyB3YWl0cyB1bnRpbCB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzLgorICAgICAg
ICAiIiIKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAna2lsbGFsbCcsICdkZXZpY2VfZm9yd2FyZGVyJ10pCisgICAgICAgIGVsYXBzZWQgPSAwCisg
ICAgICAgIHdhaXRfcGVyaW9kID0gMC4xCisgICAgICAgIHdoaWxlIHNlbGYuX2FuZHJvaWRfY21k
LnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pLmZpbmQoJ2RldmljZV9mb3J3YXJkZXIn
KSA+PSAwIGFuZCAoZWxhcHNlZCA8IHRpbWVvdXRfc2VjKToKKyAgICAgICAgICAgIHRpbWUuc2xl
ZXAod2FpdF9wZXJpb2QpCisgICAgICAgICAgICBlbGFwc2VkICs9IHdhaXRfcGVyaW9kCisgICAg
ICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dF9zZWM6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oJ1RpbWVkIG91dCB3aGlsZSBraWxsaW5nIGRldmljZV9mb3J3YXJkZXIuJykKKworICAgIGRl
ZiBfY2xvc2VfcHJvY2VzcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faG9zdF9wcm9jZXNzOgor
ICAgICAgICAgICAgc2VsZi5faG9zdF9wcm9jZXNzLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5f
ZGV2aWNlX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2Vzcy5jbG9zZSgp
CisgICAgICAgIGlmIHNlbGYuX2FkYl9mb3J3YXJkX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxm
Ll9hZGJfZm9yd2FyZF9wcm9jZXNzLmNsb3NlKCkKKyAgICAgICAgc2VsZi5faG9zdF9wcm9jZXNz
ID0gTm9uZQorICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5fYWRiX2ZvcndhcmRfcHJvY2VzcyA9IE5vbmUKKworICAgIGRlZiBkZXZpY2VfcG9ydF9mb3Jf
aG9zdF9wb3J0KHNlbGYsIGhvc3RfcG9ydCk6CisgICAgICAgIHJldHVybiBzZWxmLl9ob3N0X3Rv
X2RldmljZV9wb3J0X21hcC5nZXQoaG9zdF9wb3J0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgor
ICAgICAgICBzZWxmLl9jbG9zZV9wcm9jZXNzKCkKKworCisKIGNsYXNzIENocm9taXVtQW5kcm9p
ZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgd29y
a2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2UpOgogICAgICAgICBzdXBl
cihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIHdvcmtlcl9udW1i
ZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQpAQCAtMzMyLDIyICs2MDksMTcgQEAgY2xhc3Mg
Q2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzZWxmLl9lcnJf
Zmlmb19wYXRoID0gREVWSUNFX0ZJRk9fUEFUSCArICdzdGRlcnIuZmlmbycKICAgICAgICAgc2Vs
Zi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJf
cHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25lCisg
ICAgICAgIHNlbGYuX2ZvcndhcmRlciA9IE5vbmUKICAgICAgICAgc2VsZi5faGFzX3NldHVwID0g
RmFsc2UKLSAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzID0ge30KICAgICAgICAgc2Vs
Zi5fZGV2aWNlX3NlcmlhbCA9IHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKHdvcmtlcl9udW1iZXIp
CiAgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMnLCBzZWxmLl9kZXZpY2Vf
c2VyaWFsXQorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAg
ICAgICBzZWxmLl9hbmRyb2lkX2NtZCA9IEFuZHJvaWRDb21tYW5kcyhwb3J0LCB3b3JrZXJfbnVt
YmVyKQogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX3RlYXJkb3duX3Bl
cmZvcm1hbmNlKCkKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5f
X2RlbF9fKCkKIAotICAgIGRlZiBfc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2RhdGFfaWZfbmVlZGVk
KHNlbGYpOgotICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9IHNlbGYuX3BvcnQuX3BhdGhfdG9f
bWQ1c3VtKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShNRDVT
VU1fREVWSUNFX1BBVEgpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX3B1c2hfdG9fZGV2aWNl
KHNlbGYuX21kNXN1bV9wYXRoLCBNRDVTVU1fREVWSUNFX1BBVEgpOgotICAgICAgICAgICAgICAg
IHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgcHVzaCBtZDVzdW0gdG8gZGV2aWNlJykK
LQorICAgIGRlZiBfcHVzaF9kYXRhX2lmX25lZWRlZChzZWxmKToKICAgICAgICAgc2VsZi5fcHVz
aF9leGVjdXRhYmxlKCkKICAgICAgICAgc2VsZi5fcHVzaF9mb250cygpCiAgICAgICAgIHNlbGYu
X3B1c2hfdGVzdF9yZXNvdXJjZXMoKQpAQCAtMzU2LDEwMyArNjI4LDYwIEBAIGNsYXNzIENocm9t
aXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgaWYgc2VsZi5faGFzX3Nl
dHVwOgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi5fc2V0dXBfbWQ1c3VtX2Fu
ZF9wdXNoX2RhdGFfaWZfbmVlZGVkKCkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQuc2V0dXBf
ZGV2aWNlKCkKKyAgICAgICAgc2VsZi5fcHVzaF9kYXRhX2lmX25lZWRlZCgpCiAgICAgICAgIHNl
bGYuX2hhc19zZXR1cCA9IFRydWUKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncm9v
dCddKQotICAgICAgICBzZWxmLl9zZXR1cF9wZXJmb3JtYW5jZSgpCisgICAgICAgIHNlbGYuX2Fu
ZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3Jvb3QnXSkKICAgICAgICAgIyBSZXF1aXJlZCBi
eSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpckZpbGVQYXRoKCkuCiAgICAgICAgICMg
T3RoZXIgZGlyZWN0b3JpZXMgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWRiIHB1
c2guCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1w
JywgREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJvbWUnXSkKKyAgICAgICAgc2VsZi5fYW5k
cm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0Vf
U09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZSddKQogCiAgICAgICAgICMgQWxsb3cgdGhlIER1bXBS
ZW5kZXJUcmVlIGFwcCB0byBmdWxseSBhY2Nlc3MgdGhlIGRpcmVjdG9yeS4KICAgICAgICAgIyBU
aGUgbmF0aXZlIGNvZGUgbmVlZHMgdGhlIHBlcm1pc3Npb24gdG8gd3JpdGUgdGVtcG9yYXJ5IGZp
bGVzIGFuZCBjcmVhdGUgcGlwZXMgaGVyZS4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfRFJUX0RJUl0pCi0gICAgICAgIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9EUlRfRElS
XSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
bWtkaXInLCAnLXAnLCBERVZJQ0VfRFJUX0RJUl0pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21k
LnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9EUlRfRElS
XSkKIAogICAgICAgICAjIERlbGV0ZSB0aGUgZGlzayBjYWNoZSBpZiBhbnkgdG8gZW5zdXJlIGEg
Y2xlYW4gdGVzdCBydW4uCiAgICAgICAgICMgVGhpcyBpcyBsaWtlIHdoYXQncyBkb25lIGluIENo
cm9taXVtUG9ydC5zZXR1cF90ZXN0X3J1biBidXQgb24gdGhlIGRldmljZS4KLSAgICAgICAgc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCAnLXInLCBEUlRfQVBQX0NBQ0hFX0RJ
Ul0pCi0KLSAgICBkZWYgX2xvZ19lcnJvcihzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgX2xvZy5l
cnJvcignWyVzXSAlcycgJSAoc2VsZi5fZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSkpCi0KLSAgICBk
ZWYgX2xvZ19kZWJ1ZyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgX2xvZy5kZWJ1ZygnWyVzXSAl
cycgJSAoc2VsZi5fZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSkpCisgICAgICAgIHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNI
RV9ESVJdKQogCiAgICAgZGVmIF9hYm9ydChzZWxmLCBtZXNzYWdlKToKICAgICAgICAgcmFpc2Ug
QXNzZXJ0aW9uRXJyb3IoJ1slc10gJXMnICUgKHNlbGYuX2RldmljZV9zZXJpYWwsIG1lc3NhZ2Up
KQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVz
dW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgotICAgICAgICBhc3NlcnQgbWQ1c3VtX291dHB1dAot
ICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291
dHB1dF0KLQotICAgIGRlZiBfcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRl
dmljZV9maWxlKToKLSAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGhvc3RfZmlsZSkKLSAg
ICAgICAgZGV2aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291
dHB1dCgKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKHNl
bGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsIE1ENVNVTV9ERVZJQ0VfUEFUSCwgZGV2aWNlX2Zp
bGVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
b3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQotICAgICAgICBob3N0X2hhc2hlcyA9IHNlbGYu
X2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKLSAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKGFyZ3M9Wyclc19ob3N0JyAlIHNlbGYuX21kNXN1
bV9wYXRoLCBob3N0X2ZpbGVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQotICAgICAgICBpZiBo
b3N0X2hhc2hlcyBhbmQgZGV2aWNlX2hhc2hlcyA9PSBob3N0X2hhc2hlczoKLSAgICAgICAgICAg
IHJldHVybgotICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShob3N0X2ZpbGUsIGRldmljZV9m
aWxlKQotCiAgICAgZGVmIF9wdXNoX2V4ZWN1dGFibGUoc2VsZik6Ci0gICAgICAgIHNlbGYuX3B1
c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fcGF0aF90b19mb3J3YXJkZXIoKSwgREVWSUNF
X0ZPUldBUkRFUl9QQVRIKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYu
X3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlLnBhaycpLCBERVZJQ0VfRFJUX0RJUiAr
ICdEdW1wUmVuZGVyVHJlZS5wYWsnKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVk
KHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpLCBERVZJ
Q0VfRFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKQotICAgICAgICBzZWxmLl9w
dXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfbWFpbl9m
b250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpCi0g
ICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgn
YW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9m
YWxsYmFja19mb250cy54bWwnKQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWyd1bmlu
c3RhbGwnLCBEUlRfQVBQX1BBQ0tBR0VdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNo
X2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlLnBh
aycpLCBERVZJQ0VfRFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZS5wYWsnKQorICAgICAgICBzZWxm
Ll9hbmRyb2lkX2NtZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgo
J0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpLCBERVZJQ0VfRFJUX0RJUiArICdEdW1wUmVuZGVy
VHJlZV9yZXNvdXJjZXMnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNoX2ZpbGVfaWZf
bmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKSwg
REVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpCisgICAgICAgIHNlbGYu
X2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgn
YW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9m
YWxsYmFja19mb250cy54bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2Nv
bW1hbmQoWyd1bmluc3RhbGwnLCBEUlRfQVBQX1BBQ0tBR0VdKQogICAgICAgICBkcnRfaG9zdF9w
YXRoID0gc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKQotICAgICAgICBpbnN0YWxsX3Jlc3Vs
dCA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2luc3RhbGwnLCBkcnRfaG9zdF9wYXRoXSkKKyAg
ICAgICAgaW5zdGFsbF9yZXN1bHQgPSBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQo
WydpbnN0YWxsJywgZHJ0X2hvc3RfcGF0aF0pCiAgICAgICAgIGlmIGluc3RhbGxfcmVzdWx0LmZp
bmQoJ1N1Y2Nlc3MnKSA9PSAtMToKICAgICAgICAgICAgIHNlbGYuX2Fib3J0KCdGYWlsZWQgdG8g
aW5zdGFsbCAlcyBvbnRvIGRldmljZTogJXMnICUgKGRydF9ob3N0X3BhdGgsIGluc3RhbGxfcmVz
dWx0KSkKIAogICAgIGRlZiBfcHVzaF9mb250cyhzZWxmKToKLSAgICAgICAgc2VsZi5fbG9nX2Rl
YnVnKCdQdXNoaW5nIGZvbnRzJykKKyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJp
YWwsICdQdXNoaW5nIGZvbnRzJykKICAgICAgICAgcGF0aF90b19haGVtX2ZvbnQgPSBzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKCdBSEVNX19fXy5UVEYnKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVf
aWZfbmVlZGVkKHBhdGhfdG9fYWhlbV9mb250LCBERVZJQ0VfRk9OVFNfRElSICsgJ0FIRU1fX19f
LlRURicpCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQocGF0
aF90b19haGVtX2ZvbnQsIERFVklDRV9GT05UU19ESVIgKyAnQUhFTV9fX18uVFRGJykKICAgICAg
ICAgZm9yIChob3N0X2RpcnMsIGZvbnRfZmlsZSwgcGFja2FnZSkgaW4gSE9TVF9GT05UX0ZJTEVT
OgogICAgICAgICAgICAgZm9yIGhvc3RfZGlyIGluIGhvc3RfZGlyczoKICAgICAgICAgICAgICAg
ICBob3N0X2ZvbnRfcGF0aCA9IGhvc3RfZGlyICsgZm9udF9maWxlCiAgICAgICAgICAgICAgICAg
aWYgc2VsZi5fcG9ydC5fY2hlY2tfZmlsZV9leGlzdHMoaG9zdF9mb250X3BhdGgsICcnLCBsb2dn
aW5nPUZhbHNlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRl
ZChob3N0X2ZvbnRfcGF0aCwgREVWSUNFX0ZPTlRTX0RJUiArIGZvbnRfZmlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChob3N0X2Zv
bnRfcGF0aCwgREVWSUNFX0ZPTlRTX0RJUiArIGZvbnRfZmlsZSkKIAogICAgIGRlZiBfcHVzaF90
ZXN0X3Jlc291cmNlcyhzZWxmKToKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdQdXNoaW5nIHRl
c3QgcmVzb3VyY2VzJykKKyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdQ
dXNoaW5nIHRlc3QgcmVzb3VyY2VzJykKICAgICAgICAgZm9yIHJlc291cmNlIGluIFRFU1RfUkVT
T1VSQ0VTX1RPX1BVU0g6Ci0gICAgICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNl
bGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgJy8nICsgcmVzb3VyY2UsIERFVklDRV9MQVlP
VVRfVEVTVFNfRElSICsgcmVzb3VyY2UpCisgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5w
dXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgJy8nICsg
cmVzb3VyY2UsIERFVklDRV9MQVlPVVRfVEVTVFNfRElSICsgcmVzb3VyY2UpCiAKLSAgICBkZWYg
X3J1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Ci0gICAgICAg
IHNlbGYuX2xvZ19kZWJ1ZygnUnVuIGFkYiBjb21tYW5kOiAnICsgc3RyKGNtZCkpCi0gICAgICAg
IGlmIGlnbm9yZV9lcnJvcjoKLSAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBzZWxmLl9wb3J0
Ll9leGVjdXRpdmUuaWdub3JlX2Vycm9yCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlcnJv
cl9oYW5kbGVyID0gTm9uZQotICAgICAgICByZXN1bHQgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUu
cnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3Jf
aGFuZGxlcikKLSAgICAgICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJib3Nl
IG91dHB1dCBvZiBjb21tYW5kcyBsaWtlICdhZGIgbG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90b21i
c3RvbmVzL3RvbWJzdG9uZTAxJwotICAgICAgICAjIHdob3NlIG91dHB1dHMgYXJlIG5vcm1hbGx5
IHByaW50ZWQgaW4gbGF0ZXIgbG9ncy4KLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdSdW4gYWRi
IHJlc3VsdDogJyArIHJlc3VsdFs6ODBdKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBk
ZWYgX2xpbmtfZGV2aWNlX2ZpbGUoc2VsZiwgZnJvbV9maWxlLCB0b19maWxlLCBpZ25vcmVfZXJy
b3I9RmFsc2UpOgotICAgICAgICAjIHJtIHRvX2ZpbGUgZmlyc3QgdG8gbWFrZSBzdXJlIHRoYXQg
bG4gc3VjY2VlZHMuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3Jt
JywgdG9fZmlsZV0sIGlnbm9yZV9lcnJvcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2xuJywgJy1zJywgZnJvbV9maWxlLCB0b19maWxlXSwgaWdub3Jl
X2Vycm9yKQotCi0gICAgZGVmIF9wdXNoX3RvX2RldmljZShzZWxmLCBob3N0X3BhdGgsIGRldmlj
ZV9wYXRoLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2Fk
Yl9jb21tYW5kKFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGhdLCBpZ25vcmVfZXJyb3Ip
Ci0KLSAgICBkZWYgX3B1bGxfZnJvbV9kZXZpY2Uoc2VsZiwgZGV2aWNlX3BhdGgsIGhvc3RfcGF0
aCwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29t
bWFuZChbJ3B1bGwnLCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoXSwgaWdub3JlX2Vycm9yKQorICAg
IGRlZiBfY29tbWFuZF93cmFwcGVyKGNscywgd3JhcHBlcl9vcHRpb24pOgorICAgICAgICAjIEln
bm9yZSBjb21tYW5kIHdyYXBwZXIgd2hpY2ggaXMgbm90IGFwcGxpY2FibGUgb24gQW5kcm9pZC4K
KyAgICAgICAgcmV0dXJuIFtdCiAKICAgICBkZWYgX2dldF9sYXN0X3N0YWNrdHJhY2Uoc2VsZik6
Ci0gICAgICAgIHRvbWJzdG9uZXMgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICds
cycsICctbicsICcvZGF0YS90b21ic3RvbmVzJ10pCisgICAgICAgIHRvbWJzdG9uZXMgPSBzZWxm
Ll9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsICctbicsICcvZGF0
YS90b21ic3RvbmVzJ10pCiAgICAgICAgIGlmIG5vdCB0b21ic3RvbmVzIG9yIHRvbWJzdG9uZXMu
c3RhcnRzd2l0aCgnL2RhdGEvdG9tYnN0b25lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScp
OgotICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdEUlQgY3Jhc2hlZCwgYnV0IG5vIHRvbWJz
dG9uZSBmb3VuZCEnKQorICAgICAgICAgICAgbG9nX2Vycm9yKHNlbGYuX2RldmljZV9zZXJpYWws
ICdEUlQgY3Jhc2hlZCwgYnV0IG5vIHRvbWJzdG9uZSBmb3VuZCEnKQogICAgICAgICAgICAgcmV0
dXJuICcnCiAgICAgICAgIHRvbWJzdG9uZXMgPSB0b21ic3RvbmVzLnJzdHJpcCgpLnNwbGl0KCdc
bicpCiAgICAgICAgIGxhc3RfdG9tYnN0b25lID0gdG9tYnN0b25lc1swXS5zcGxpdCgpCkBAIC00
NzEsMjggKzcwMCwxMCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZl
cik6CiAgICAgICAgICMgc3RhY2sgdHJhY2UgaW50byBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCwg
aWYgbmVlZGVkLgogICAgICAgICAjIEl0IHRha2VzIGEgbG9uZyB0aW1lLCBzbyBkb24ndCBkbyBp
dCBoZXJlLgogICAgICAgICByZXR1cm4gJyVzXG4lcycgJSAoJyAnLmpvaW4obGFzdF90b21ic3Rv
bmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
c2hlbGwnLCAnY2F0JywgJy9kYXRhL3RvbWJzdG9uZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdjYXQnLCAnL2RhdGEvdG9tYnN0b25lcy8nICsgbGFzdF90b21ic3Rv
bmVbNl1dKSkKIAogICAgIGRlZiBfZ2V0X2xvZ2NhdChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctZCcsICctdicsICd0aHJlYWR0aW1lJ10p
Ci0KLSAgICBkZWYgX3NldHVwX3BlcmZvcm1hbmNlKHNlbGYpOgotICAgICAgICAjIERpc2FibGUg
Q1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFtIGNhY2hlIHRvIHJlZHVjZSBub2lzZSBpbiB0ZXN0cwot
ICAgICAgICBpZiBub3Qgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzOgotICAgICAgICAgICAgZ292
ZXJub3JfZmlsZXMgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIFNDQUxJ
TkdfR09WRVJOT1JTX1BBVFRFUk5dKQotICAgICAgICAgICAgaWYgZ292ZXJub3JfZmlsZXMuZmlu
ZCgnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpID09IC0xOgotICAgICAgICAgICAgICAgIGZv
ciBmaWxlIGluIGdvdmVybm9yX2ZpbGVzLnNwbGl0KCk6Ci0gICAgICAgICAgICAgICAgICAgIHNl
bGYuX29yaWdpbmFsX2dvdmVybm9yc1tmaWxlXSA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2NhdCcsIGZpbGVdKS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCAncGVyZm9ybWFuY2UnLCAnPicsIGZpbGVd
KQotCi0gICAgZGVmIF90ZWFyZG93bl9wZXJmb3JtYW5jZShzZWxmKToKLSAgICAgICAgZm9yIGZp
bGUsIG9yaWdpbmFsX2NvbnRlbnQgaW4gc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzLml0ZW1zKCk6
Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgb3Jp
Z2luYWxfY29udGVudCwgJz4nLCBmaWxlXSkKLSAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJu
b3JzID0ge30KLQotICAgIGRlZiBfY29tbWFuZF93cmFwcGVyKGNscywgd3JhcHBlcl9vcHRpb24p
OgotICAgICAgICAjIElnbm9yZSBjb21tYW5kIHdyYXBwZXIgd2hpY2ggaXMgbm90IGFwcGxpY2Fi
bGUgb24gQW5kcm9pZC4KLSAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHJldHVybiBzZWxmLl9h
bmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydsb2djYXQnLCAnLWQnLCAnLXYnLCAndGhyZWFk
dGltZSddKQogCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIHN0ZG91dCwgc3RkZXJyLCBu
ZXdlcl90aGFuKToKICAgICAgICAgaWYgbm90IHN0ZG91dDoKQEAgLTUwOCwxMCArNzE5LDYgQEAg
Y2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAjIFRo
ZSBjb21tYW5kIGxpbmUgcGFzc2VkIHRvIHRoZSBEUlQgcHJvY2VzcyBpcyByZXR1cm5lZCBieSBf
ZHJ0X2NtZF9saW5lKCkgaW5zdGVhZC4KICAgICAgICAgcmV0dXJuIHNlbGYuX2FkYl9jb21tYW5k
ICsgWydzaGVsbCddCiAKLSAgICBkZWYgX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBmdWxs
X2ZpbGVfcGF0aCk6Ci0gICAgICAgIGFzc2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRoKCcv
JykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywg
ZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCi0KICAgICBkZWYgX2Ry
dF9jbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CiAgICAgICAgIHJl
dHVybiBkcml2ZXIuRHJpdmVyLmNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9h
cmdzKSArIFsnLS1jcmVhdGUtc3RkaW4tZmlmbycsICctLXNlcGFyYXRlLXN0ZGVyci1maWZvJ10K
IApAQCAtNTI0LDE3ICs3MzEsMTcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZl
ci5Ecml2ZXIpOgogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBfYWxsX3BpcGVzX2Ny
ZWF0ZWQoc2VsZik6Ci0gICAgICAgIHJldHVybiAoc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNl
KHNlbGYuX2luX2ZpZm9fcGF0aCkgYW5kCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9leGlz
dHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAotICAgICAgICAgICAgICAgIHNl
bGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKKyAgICAgICAg
cmV0dXJuIChzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5f
Zmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4
aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAg
c2VsZi5fYW5kcm9pZF9jbWQuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3Bh
dGgpKQogCiAgICAgZGVmIF9yZW1vdmVfYWxsX3BpcGVzKHNlbGYpOgogICAgICAgICBmb3IgZmls
ZSBpbiBbc2VsZi5faW5fZmlmb19wYXRoLCBzZWxmLl9vdXRfZmlmb19wYXRoLCBzZWxmLl9lcnJf
Zmlmb19wYXRoXToKLSAgICAgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywg
J3JtJywgZmlsZV0pCisgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1h
bmQoWydzaGVsbCcsICdybScsIGZpbGVdKQogCi0gICAgICAgIHJldHVybiAobm90IHNlbGYuX2Zp
bGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAotICAgICAgICAgICAg
ICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkg
YW5kCi0gICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxm
Ll9lcnJfZmlmb19wYXRoKSkKKyAgICAgICAgcmV0dXJuIChub3Qgc2VsZi5fYW5kcm9pZF9jbWQu
ZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAg
ICAgICAgbm90IHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9v
dXRfZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fYW5kcm9pZF9jbWQu
ZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKQogCiAgICAgZGVmIHJ1
bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCwgc3RvcF93aGVuX2RvbmUpOgogICAgICAgICBiYXNl
ID0gc2VsZi5fcG9ydC5sb29rdXBfdmlydHVhbF90ZXN0X2Jhc2UoZHJpdmVyX2lucHV0LnRlc3Rf
bmFtZSkKQEAgLTU1OSw3ICs3NjYsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJp
dmVyLkRyaXZlcik6CiAgICAgICAgIGZvciByZXRyaWVzIGluIHJhbmdlKDMpOgogICAgICAgICAg
ICAgaWYgc2VsZi5fc3RhcnRfb25jZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLl9sb2dfZXJyb3IoJ0ZhaWxlZCB0
byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gUmV0cmllcz0lZC4gTG9nOiVzJyAl
IChyZXRyaWVzLCBzZWxmLl9nZXRfbG9nY2F0KCkpKQorICAgICAgICAgICAgbG9nX2Vycm9yKHNl
bGYuX2RldmljZV9zZXJpYWwsICdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGlj
YXRpb24uIFJldHJpZXM9JWQuIExvZzolcycgJSAocmV0cmllcywgc2VsZi5fZ2V0X2xvZ2NhdCgp
KSkKICAgICAgICAgICAgIHNlbGYuc3RvcCgpCiAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpCiAg
ICAgICAgIHNlbGYuX2Fib3J0KCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGlj
YXRpb24gbXVsdGlwbGUgdGltZXMuIEdpdmUgdXAuJykKQEAgLTU2NywxNiArNzc0LDE0IEBAIGNs
YXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICBkZWYgX3N0YXJ0
X29uY2Uoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICBzdXBlcihD
aHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9zdGFydChwaXhlbF90ZXN0cywgcGVyX3Rlc3Rf
YXJncykKIAotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1N0YXJ0aW5nIGZvcndhcmRlcicpCi0g
ICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IoCi0gICAgICAgICAgICBzZWxmLl9wb3J0LCAnRm9yd2FyZGVyJywgc2Vs
Zi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJyVzIC1EICVzJyAlIChERVZJQ0VfRk9SV0FSREVS
X1BBVEgsIEZPUldBUkRfUE9SVFMpXSkKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3Mu
c3RhcnQoKQotCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYydd
KQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxm
Ll9jbWRfbGluZSArIFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKLSAgICAgICAgc3RhcnRfcmVz
dWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnc3RhcnQnLCAnLWUn
LCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNUSVZJVFlfRlVMTF9OQU1FXSkKKyAgICAg
ICAgcG9ydF9wYWlycyA9IFsocG9ydCwgcG9ydCkgZm9yIHBvcnQgaW4gRk9SV0FSRF9QT1JUU10K
KyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdQeXRob24gc2NyaXB0IGlz
IHN0YXJ0aW5nIGZvcndhcmRlciBmb3IgcG9ydHM6ICcgKyBzdHIocG9ydF9wYWlycykpCisgICAg
ICAgIHNlbGYuX2ZvcndhcmRlciA9IEZvcndhcmRlcihzZWxmLl9hbmRyb2lkX2NtZCwgc2VsZi5f
d29ya2VyX251bWJlciwgcG9ydF9wYWlycywgJzEyNy4wLjAuMScpCisgICAgICAgIHNlbGYuX2Fu
ZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQorICAgICAgICBzZWxm
Ll9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxmLl9j
bWRfbGluZSArIFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKKyAgICAgICAgc3RhcnRfcmVzdWx0
ID0gc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnc3Rh
cnQnLCAnLWUnLCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNUSVZJVFlfRlVMTF9OQU1F
XSkKICAgICAgICAgaWYgc3RhcnRfcmVzdWx0LmZpbmQoJ0V4Y2VwdGlvbicpICE9IC0xOgotICAg
ICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUg
YXBwbGljYXRpb24uIEV4Y2VwdGlvbjpcbicgKyBzdGFydF9yZXN1bHQpCisgICAgICAgICAgICBs
b2dfZXJyb3Ioc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVy
VHJlZSBhcHBsaWNhdGlvbi4gRXhjZXB0aW9uOlxuJyArIHN0YXJ0X3Jlc3VsdCkKICAgICAgICAg
ICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIGlmIG5vdCBDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X2xvb3Bfd2l0aF90aW1lb3V0KHNlbGYuX2FsbF9waXBlc19jcmVhdGVkLCBEUlRfU1RBUlRfU1RP
UF9USU1FT1VUX1NFQ1MpOgpAQCAtNTg2LDIxICs3OTEsMjEgQEAgY2xhc3MgQ2hyb21pdW1BbmRy
b2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgp
ICsgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9j
ZXNzLnN0YXJ0KCkKICAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoZGVhZGxpbmUpCi0gICAgICAg
IHNlbGYuX2xvZ19kZWJ1ZygnSW50ZXJhY3RpdmUgc2hlbGwgc3RhcnRlZCcpCisgICAgICAgIGxv
Z19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnSW50ZXJhY3RpdmUgc2hlbGwgc3RhcnRlZCcp
CiAKICAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9tIHRoZSBzdGRvdXQgZmlm
byBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBzdGRvdXQuCi0gICAgICAg
IHNlbGYuX2xvZ19kZWJ1ZygnUmVkaXJlY3Rpbmcgc3Rkb3V0IHRvICcgKyBzZWxmLl9vdXRfZmlm
b19wYXRoKQorICAgICAgICBsb2dfZGVidWcoc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1JlZGlyZWN0
aW5nIHN0ZG91dCB0byAnICsgc2VsZi5fb3V0X2ZpZm9fcGF0aCkKICAgICAgICAgc2VsZi5fcmVh
ZF9zdGRvdXRfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9y
KAogICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRvdXQnLCBzZWxmLl9hZGJfY29tbWFu
ZCArIFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fb3V0X2ZpZm9fcGF0aF0pCiAgICAgICAgIHNlbGYu
X3JlYWRfc3Rkb3V0X3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgICAgICMgU3RhcnQgYSBwcm9jZXNz
IHRvIHJlYWQgZnJvbSB0aGUgc3RkZXJyIGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCBh
bmQgcHJpbnQgdG8gc3Rkb3V0LgotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1JlZGlyZWN0aW5n
IHN0ZGVyciB0byAnICsgc2VsZi5fZXJyX2ZpZm9fcGF0aCkKKyAgICAgICAgbG9nX2RlYnVnKHNl
bGYuX2RldmljZV9zZXJpYWwsICdSZWRpcmVjdGluZyBzdGRlcnIgdG8gJyArIHNlbGYuX2Vycl9m
aWZvX3BhdGgpCiAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0
Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcigKICAgICAgICAgICAgIHNlbGYuX3BvcnQsICdS
ZWFkU3RkZXJyJywgc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJ2NhdCcsIHNlbGYuX2Vy
cl9maWZvX3BhdGhdKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzLnN0YXJ0KCkK
IAotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZGluIHRvICcgKyBzZWxm
Ll9pbl9maWZvX3BhdGgpCisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAn
UmVkaXJlY3Rpbmcgc3RkaW4gdG8gJyArIHNlbGYuX2luX2ZpZm9fcGF0aCkKICAgICAgICAgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3Mud3JpdGUoJ2NhdCA+JXNcbicgJSBzZWxmLl9pbl9maWZvX3BhdGgp
CiAKICAgICAgICAgIyBDb21iaW5lIHRoZSBzdGRvdXQgYW5kIHN0ZGVyciBwaXBlcyBpbnRvIHNl
bGYuX3NlcnZlcl9wcm9jZXNzLgpAQCAtNjEyLDcgKzgxNyw3IEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgICAgICAgICAjIHJlYWRpbmcvd3Jp
dGluZyB0aGUgZmlmby4gS2lsbCB0aGUgZmlmbyByZWFkaW5nL3dyaXRpbmcgcHJvY2Vzc2VzIHRv
IGxldCB0aGUKICAgICAgICAgICAgICAgICAjIG1haW4gdGhyZWFkIGVzY2FwZSBmcm9tIHRoZSBk
ZWFkbG9ja2VkIHN0YXRlLiBBZnRlciB0aGF0LCB0aGUgbWFpbiB0aHJlYWQgd2lsbAogICAgICAg
ICAgICAgICAgICMgdHJlYXQgdGhpcyBhcyBhIGNyYXNoLgotICAgICAgICAgICAgICAgIHNlbGYu
X2xvZ19lcnJvcignRGVhZGxvY2sgZGV0ZWN0ZWQuIFByb2Nlc3NlcyBraWxsZWQuJykKKyAgICAg
ICAgICAgICAgICBsb2dfZXJyb3Ioc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ0RlYWRsb2NrIGRldGVj
dGVkLiBQcm9jZXNzZXMga2lsbGVkLicpCiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcHJvY2Vz
c2VzOgogICAgICAgICAgICAgICAgICAgICBpLmtpbGwoKQogCkBAIC02MzgsNyArODQzLDcgQEAg
Y2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAg
cmV0dXJuIFRydWUKIAogICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1zdG9wJywgRFJUX0FQUF9QQUNLQUdFXSkK
KyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0n
LCAnZm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCiAKICAgICAgICAgaWYgc2VsZi5fcmVh
ZF9zdGRvdXRfcHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3Mu
a2lsbCgpCkBAIC02NTAsOSArODU1LDkgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRy
aXZlci5Ecml2ZXIpOgogCiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2Vs
Zikuc3RvcCgpCiAKLSAgICAgICAgaWYgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3M6Ci0gICAgICAg
ICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2Vzcy5raWxsKCkKLSAgICAgICAgICAgIHNlbGYuX2Zv
cndhcmRlcl9wcm9jZXNzID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9mb3J3YXJkZXI6CisgICAg
ICAgICAgICBzZWxmLl9mb3J3YXJkZXIuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fZm9yd2Fy
ZGVyID0gTm9uZQogCiAgICAgICAgIGlmIHNlbGYuX2hhc19zZXR1cDoKICAgICAgICAgICAgIGlm
IG5vdCBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2xvb3Bfd2l0aF90aW1lb3V0KHNlbGYuX3JlbW92
ZV9hbGxfcGlwZXMsIERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUyk6CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKaW5kZXggMTdhZTYyYTA3ZWI3NGMx
YzdmZmY1ODkyMWZhYzBlYWVlZjkyOWRkYS4uZWY1OGRlMDY4ZDQ4YTQ2MjEyZWY2OTI2OWRhODEz
MmY2YjExZGQwOSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L19faW5pdF9fLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2lu
aXRfXy5weQpAQCAtNzQsNiArNzQsOCBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2Jq
ZWN0KToKICAgICAgICAgIyBvcmRlciBmb3IgYXV0b2luc3RhbGxfZXZlcnl0aGluZygpLCBiZWxv
dywgdG8gd29yayBwcm9wZXJseS4KICAgICAgICAgaWYgJy5tZWNoYW5pemUnIGluIGZ1bGxuYW1l
OgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9tZWNoYW5pemUoKQorICAgICAgICBpZiAnLnBl
eHBlY3QnIGluIGZ1bGxuYW1lOgorICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9wZXhwZWN0KCkK
ICAgICAgICAgZWxpZiAnLnBlcDgnIGluIGZ1bGxuYW1lOgogICAgICAgICAgICAgc2VsZi5faW5z
dGFsbF9wZXA4KCkKICAgICAgICAgZWxpZiAnLnB5bGludCcgaW4gZnVsbG5hbWU6CkBAIC04OSw2
ICs5MSwxMCBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAg
ZWxpZiAnLndlYnBhZ2VyZXBsYXknIGluIGZ1bGxuYW1lOgogICAgICAgICAgICAgc2VsZi5faW5z
dGFsbF93ZWJwYWdlcmVwbGF5KCkKIAorICAgIGRlZiBfaW5zdGFsbF9wZXhwZWN0KHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5faW5zdGFsbCgiaHR0cDovL3BleHBlY3Quc291cmNlZm9yZ2Uu
bmV0L3BleHBlY3QtMi4zLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
ZXhwZWN0LTIuMyIpCisKICAgICBkZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgogICAgICAg
ICByZXR1cm4gc2VsZi5faW5zdGFsbCgiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9z
b3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMi41LnRhci5neiIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJtZWNoYW5pemUtMC4yLjUvbWVjaGFuaXplIikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170600</attachid>
            <date>2012-10-25 03:38:50 -0700</date>
            <delta_ts>2012-10-30 09:29:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121025123723.patch</filename>
            <type>text/plain</type>
            <size>38320</size>
            <attacher name="felipe">felipeg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMTg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzM5N2U0NmFlZmVmMjFjNWE0OWIxNTJmOWRmMjc0NmEz
OGFlNjBmMS4uZWYzMWFlNGM2Njg1ZGU0NWQzMzUzYmNhMmQwYjQwMGIyODA1YWVmMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDEyLTEwLTIzICBGZWxpcGUgR29sZHN0ZWluICA8ZmVsaXBlZ0BjaHJvbWl1bS5jb20+
CisKKyAgICAgICAgW0Nocm9taXVtXSBVc2UgdGhlIG5ldyBmb3J3YXJkZXIyIGZvciBydW5uaW5n
IGxheW91dCB0ZXN0cyBvbiBBbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05OTU4OAorCisgICAgICAgICJSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4iCisKKyAgICAgICAgSXTigJlzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gcnVuIHRo
ZSBDbGFuayB0ZXN0IHN1aXRlIG9uCisgICAgICAgIHByb2R1Y3Rpb24gZGV2aWNlcywgaS5lLiBu
b24tcm9vdGVkIHN5c3RlbSBpbWFnZXMgdGhhdCBhcmUgdXNlZCBieQorICAgICAgICBvdXIgdXNl
cnMsIHNpbmNlIHdlIGN1cnJlbnRseSB1c2UgYSBwcm9ncmFtIGNhbGxlZCAiZm9yd2FyZGVyIgor
ICAgICAgICB3aGljaCBtYWtlcyB1c2Ugb2YgYW4gYWRiIGhhY2sgb25seSBhdmFpbGFibGUgaW4g
cm9vdGVkIGRldmljZXMuCisgICAgICAgIFRoZSBmb3dhcmRlcjIgc29sdmVzIHRoaXMgcHJvYmxl
bS4gIFRoZSBmb3J3YXJkZXIgaXMgYSB3YXkgdG8KKyAgICAgICAgZm9yd2FyZCBUQ1AgY29ubmVj
dGlvbnMgZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBob3N0IHRocm91Z2ggdGhlCisgICAgICAgIGFk
YiBVU0IgY29ubmVjdGlvbiwgdG8gYmUgdXNlZCBpbiB0ZXN0aW5nLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5OgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0
LmNoZWNrX2J1aWxkKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3BhdGhfdG9fZGV2
aWNlX2ZvcndhcmRlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9wYXRoX3RvX2hv
c3RfZm9yd2FyZGVyKToKKyAgICAgICAgKGxvZ19lcnJvcik6CisgICAgICAgIChsb2dfZGVidWcp
OgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5f
X2luaXRfXyk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuZ2V0X2RldmljZV9zZXJpYWwpOgor
ICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1c2hfbWQ1c3VtKToKKyAgICAgICAgKEFuZHJvaWRD
b21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVkKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5y
dW5fYWRiX2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnJ1bl9ob3N0X2NvbW1h
bmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2RldmljZSk6Cisg
ICAgICAgIChBbmRyb2lkQ29tbWFuZHMuZ2V0X3BvcnQpOgorICAgICAgICAoQW5kcm9pZENvbW1h
bmRzLl9wdXNoX3RvX2RldmljZSk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuX2V4dHJhY3Rf
aGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCk6CisgICAgICAgIChGb3J3YXJkZXIpOgorICAgICAg
ICAoRm9yd2FyZGVyLl9faW5pdF9fKToKKyAgICAgICAgKEZvcndhcmRlci5fa2lsbF9ob3N0X2Zv
cndhcmRlcl9ibG9ja2luZyk6CisgICAgICAgIChGb3J3YXJkZXIuX2tpbGxfZGV2aWNlX2Zvcndh
cmRlcl9ibG9ja2luZyk6CisgICAgICAgIChGb3J3YXJkZXIuX2Nsb3NlX3Byb2Nlc3MpOgorICAg
ICAgICAoRm9yd2FyZGVyLmRldmljZV9wb3J0X2Zvcl9ob3N0X3BvcnQpOgorICAgICAgICAoRm9y
d2FyZGVyLmNsb3NlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2luaXRfXyk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1c2hfZGF0YV9pZl9uZWVkZWQpOgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zZXR1cF90ZXN0KToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5fYWJvcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9wdXNoX2V4ZWN1dGFibGUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9w
dXNoX2ZvbnRzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF90ZXN0X3Jl
c291cmNlcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3BlcmZvcm1h
bmNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fdGVhcmRvd25fcGVyZm9ybWFu
Y2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9jb21tYW5kX3dyYXBwZXIpOgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9nZXRfbGFzdF9zdGFja3RyYWNlKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2xvZ2NhdCk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9hbGxfcGlwZXNfY3JlYXRlZCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X3JlbW92ZV9hbGxfcGlwZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFy
dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2UpOgorICAgICAg
ICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydF9vbmNlLmRlYWRsb2NrX2RldGVjdG9yKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5zdG9wKToKKwogMjAxMi0xMC0yMyAgU2lt
b24gUGVuYSAgPHNwZW5hQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQWRkaW5n
IG15c2VsZiBhcyBjb21taXR0ZXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKaW5kZXggNjM4OWZl
YjYzNTdjZTNjYzQ5MGMwMmM2OTJjNWZmODFkNjc3YTQ5Ni4uMDRlZWNhMDhmYzUxMDIyM2E4ODUy
ZGQxMThmMmM0YzlkNDZlYzM1OCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQpAQCAtMzksNiAr
MzksNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bQog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcworZnJvbSB3ZWJraXRweS50aGlyZHBh
cnR5LmF1dG9pbnN0YWxsZWQgaW1wb3J0IHBleGVwY3QKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCkBAIC01NCw3ICs1NSw3IEBAIENPTU1BTkRfTElORV9GSUxFID0gREVW
SUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJvbWUtbmF0aXZlLXRlc3RzLWNvbW1hbmQtbGluZScK
ICMgSWYgY2hhbmdlIHRoaXMsIG11c3QgYWxzbyBjaGFuZ2UgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKICMgYW5kIENocm9taXVtJ3Mgd2Via2l0L3N1
cHBvcnQvcGxhdGZvcm1fc3VwcG9ydF9hbmRyb2lkLmNjLgogREVWSUNFX0RSVF9ESVIgPSBERVZJ
Q0VfU09VUkNFX1JPT1RfRElSICsgJ2RydC8nCi1ERVZJQ0VfRk9SV0FSREVSX1BBVEggPSBERVZJ
Q0VfRFJUX0RJUiArICdmb3J3YXJkZXInCitERVZJQ0VfRk9SV0FSREVSX1BBVEggPSBERVZJQ0Vf
RFJUX0RJUiArICdkZXZpY2VfZm9yd2FyZGVyJwogCiAjIFBhdGggb24gdGhlIGRldmljZSB3aGVy
ZSB0aGUgdGVzdCBmcmFtZXdvcmsgd2lsbCBjcmVhdGUgdGhlIGZpZm8gcGlwZXMuCiBERVZJQ0Vf
RklGT19QQVRIID0gJy9kYXRhL2RhdGEvb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0L2ZpbGVzLycK
QEAgLTc0LDcgKzc1LDE4IEBAIFRFU1RfUEFUSF9QUkVGSVggPSAnL2FsbC10ZXN0cycKICMgODAw
MCwgODA4MCBhbmQgODQ0MyBhcmUgZm9yIGh0dHAvaHR0cHMgdGVzdHMuCiAjIDg4ODAgYW5kIDkz
MjMgYXJlIGZvciB3ZWJzb2NrZXQgdGVzdHMKICMgKHNlZSBodHRwX3NlcnZlci5weSwgYXBhY2hl
X2h0dHBfc2VydmVyLnB5IGFuZCB3ZWJzb2NrZXRfc2VydmVyLnB5KS4KLUZPUldBUkRfUE9SVFMg
PSAnODAwMCA4MDgwIDg0NDMgODg4MCA5MzIzJworRk9SV0FSRF9QT1JUUyA9ICg4MDAwLCA4MDgw
LCA4NDQzLCA4ODgwLCA5MzIzKQorCisjIFdlIHJ1biBvbmUgRm9yd2FyZGVyIHBlciBkZXZpY2Ug
LyB3b3JrZXIsIGFuZCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZSBjb250cm9sCisjIHBvcnQgZm9y
IGVhY2ggRm9yd2FyZGVyLiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSByYW5nZSBvZiBwb3J0
cyB3ZSBjYW4gdXNlLgorRk9SV0FSREVSX0NPTlRST0xfUE9SVF9CRUdJTiA9IDIwMDAwCitGT1JX
QVJERVJfQ09OVFJPTF9QT1JUX0VORCA9IDIxMDAwCisKK0ZPUldBUkRFUl9LSUxMX1RJTUVPVVRf
U0VDID0gNQorCisjIFVuaXggQWJzdHJhY3Qgc29ja2V0IHBhdGg6CitERVZJQ0VfQURCX0NPTlRS
T0xfUE9SVCA9ICdjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcicKK0ZPUldBUkRFUl9USU1FT1VUX1NF
Q1MgPSAzMAogCiBNU19UUlVFVFlQRV9GT05UU19ESVIgPSAnL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzLycKIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0UgPSAndHRmLW1z
Y29yZWZvbnRzLWluc3RhbGxlcicKQEAgLTIwNCw3ICsyMTYsOCBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgZGVmIGNoZWNrX2J1aWxkKHNl
bGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXN1bHQgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWRQ
b3J0LCBzZWxmKS5jaGVja19idWlsZChuZWVkc19odHRwKQogICAgICAgICByZXN1bHQgPSBzZWxm
Ll9jaGVja19maWxlX2V4aXN0cyhzZWxmLl9wYXRoX3RvX21kNXN1bSgpLCAnbWQ1c3VtIHV0aWxp
dHknKSBhbmQgcmVzdWx0Ci0gICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3Rz
KHNlbGYuX3BhdGhfdG9fZm9yd2FyZGVyKCksICdmb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1
bHQKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5fcGF0aF90
b19kZXZpY2VfZm9yd2FyZGVyKCksICdkZXZpY2VfZm9yd2FyZGVyIHV0aWxpdHknKSBhbmQgcmVz
dWx0CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYuX3BhdGhf
dG9faG9zdF9mb3J3YXJkZXIoKSwgJ2hvc3RfZm9yd2FyZGVyIHV0aWxpdHknKSBhbmQgcmVzdWx0
CiAgICAgICAgIGlmIG5vdCByZXN1bHQ6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCdGb3IgY29t
cGxldGUgQW5kcm9pZCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSBzZWU6JykKICAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJycpCkBAIC0yNzgsOCArMjkxLDExIEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBkZWYgX3BhdGhfdG9faGVscGVy
KHNlbGYpOgogICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgZGVmIF9wYXRoX3RvX2ZvcndhcmRl
cihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2ZvcndhcmRlcicpCisg
ICAgZGVmIF9wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9idWlsZF9wYXRoKCdkZXZpY2VfZm9yd2FyZGVyJykKKworICAgIGRlZiBfcGF0aF90b19o
b3N0X2ZvcndhcmRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2hv
c3RfZm9yd2FyZGVyJykKIAogICAgIGRlZiBfcGF0aF90b19tZDVzdW0oc2VsZik6CiAgICAgICAg
IHJldHVybiBzZWxmLl9idWlsZF9wYXRoKE1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FKQpAQCAtMzIz
LDYgKzMzOSwyNjcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1
bVBvcnQpOgogICAgICAgICByZXR1cm4gZGV2aWNlc1t3b3JrZXJfbnVtYmVyXQogCiAKK2RlZiBs
b2dfZXJyb3IoZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSk6CisgICAgX2xvZy5lcnJvcignWyVzXSAl
cycgJSAoZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSkpCisKKworZGVmIGxvZ19kZWJ1ZyhkZXZpY2Vf
c2VyaWFsLCBtZXNzYWdlKToKKyAgICBfbG9nLmRlYnVnKCdbJXNdICVzJyAlIChkZXZpY2Vfc2Vy
aWFsLCBtZXNzYWdlKSkKKworCitjbGFzcyBBbmRyb2lkQ29tbWFuZHMob2JqZWN0KToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlcik6CisgICAgICAgIHNlbGYuX3Bv
cnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBzZWxmLl9wb3J0Ll9nZXRf
ZGV2aWNlX3NlcmlhbCh3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCA9
IFsnYWRiJywgJy1zJywgc2VsZi5fZGV2aWNlX3NlcmlhbF0KKyAgICAgICAgc2VsZi5fb3JpZ2lu
YWxfZ292ZXJub3JzX2ZpbGVfY29udGVudHMgPSB7fQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6
CisgICAgICAgIHNlbGYuX3RlYXJkb3duX3BlcmZvcm1hbmNlKCkKKworICAgIGRlZiBnZXRfZGV2
aWNlX3NlcmlhbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RldmljZV9zZXJpYWwKKwor
ICAgIGRlZiBfcHVzaF9tZDVzdW0oc2VsZik6CisgICAgICAgIHNlbGYuX21kNXN1bV9wYXRoID0g
c2VsZi5fcG9ydC5fcGF0aF90b19tZDVzdW0oKQorICAgICAgICBpZiBub3Qgc2VsZi5maWxlX2V4
aXN0c19vbl9kZXZpY2UoTUQ1U1VNX0RFVklDRV9QQVRIKToKKyAgICAgICAgICAgIGlmIG5vdCBz
ZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9tZDVzdW1fcGF0aCwgTUQ1U1VNX0RFVklDRV9QQVRI
KToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IHB1c2gg
bWQ1c3VtIHRvIGRldmljZScpCisKKyAgICBkZWYgX3NldHVwX3BlcmZvcm1hbmNlKHNlbGYpOgor
ICAgICAgICAjIERpc2FibGUgQ1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFtIGNhY2hlIHRvIHJlZHVj
ZSBub2lzZSBpbiB0ZXN0cy4KKyAgICAgICAgaWYgbm90IHNlbGYuX29yaWdpbmFsX2dvdmVybm9y
c19maWxlX2NvbnRlbnRzOgorICAgICAgICAgICAgZ292ZXJub3JfZmlsZXMgPSBzZWxmLnJ1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCisg
ICAgICAgICAgICBpZiBnb3Zlcm5vcl9maWxlcy5maW5kKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0
b3J5JykgPT0gLTE6CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZ292ZXJub3JfZmlsZXMu
c3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzX2Zp
bGVfY29udGVudHNbZmlsZV0gPSBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcs
IGZpbGVdKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnZWNobycsICdwZXJmb3JtYW5jZScsICc+JywgZmlsZV0pCisKKyAgICBkZWYg
X3RlYXJkb3duX3BlcmZvcm1hbmNlKHNlbGYpOgorICAgICAgICBmb3IgZmlsZSwgb3JpZ2luYWxf
Y29udGVudCBpbiBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnNfZmlsZV9jb250ZW50cy5pdGVtcygp
OgorICAgICAgICAgICAgc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgb3Jp
Z2luYWxfY29udGVudCwgJz4nLCBmaWxlXSkKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJu
b3JzX2ZpbGVfY29udGVudHMgPSB7fQorCisgICAgZGVmIHNldHVwX2RldmljZShzZWxmKToKKyAg
ICAgICAgc2VsZi5fcHVzaF9tZDVzdW0oKQorICAgICAgICBzZWxmLl9zZXR1cF9wZXJmb3JtYW5j
ZSgpCisKKyAgICBkZWYgcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRldmlj
ZV9maWxlKToKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGhvc3RfZmlsZSkKKyAgICAg
ICAgZGV2aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1
dCgKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYu
X2FkYl9jb21tYW5kICsgWydzaGVsbCcsIE1ENVNVTV9ERVZJQ0VfUEFUSCwgZGV2aWNlX2ZpbGVd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0
PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQorICAgICAgICBob3N0X2hhc2hlcyA9IHNlbGYuX2V4
dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKKyAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKGFyZ3M9Wyclc19ob3N0JyAlIHNlbGYuX21kNXN1bV9w
YXRoLCBob3N0X2ZpbGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQorICAgICAgICBpZiBob3N0
X2hhc2hlcyBhbmQgZGV2aWNlX2hhc2hlcyA9PSBob3N0X2hhc2hlczoKKyAgICAgICAgICAgIHJl
dHVybgorICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShob3N0X2ZpbGUsIGRldmljZV9maWxl
KQorCisgICAgZGVmIHJ1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxz
ZSk6CisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUnVuIGFkYiBjb21t
YW5kOiAnICsgc3RyKGNtZCkpCisgICAgICAgIGlmIGlnbm9yZV9lcnJvcjoKKyAgICAgICAgICAg
IGVycm9yX2hhbmRsZXIgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuaWdub3JlX2Vycm9yCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gTm9uZQorICAgICAgICByZXN1
bHQgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQg
KyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKKyAgICAgICAgIyBMaW1pdCB0aGUg
bGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBvZiBjb21tYW5kcyBsaWtlICdhZGIg
bG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZTAxJworICAgICAgICAj
IHdob3NlIG91dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQgaW4gbGF0ZXIgbG9ncy4KKyAgICAg
ICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdSdW4gYWRiIHJlc3VsdDogJyArIHJl
c3VsdFs6ODBdKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcnVuX2hvc3RfY29t
bWFuZChzZWxmLCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSwgcmV0dXJuX2V4aXRfY29kZT1UcnVl
KToKKyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdSdW4gaG9zdCBjb21t
YW5kOiAnICsgc3RyKGNtZCkpCisgICAgICAgIGlmIGlnbm9yZV9lcnJvcjoKKyAgICAgICAgICAg
IGVycm9yX2hhbmRsZXIgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuaWdub3JlX2Vycm9yCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gTm9uZQorICAgICAgICByZXR1
cm4gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCwgZXJyb3JfaGFuZGxlcj1l
cnJvcl9oYW5kbGVyLCByZXR1cm5fZXhpdF9jb2RlPXJldHVybl9leGl0X2NvZGUpCisKKyAgICBk
ZWYgZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToKKyAgICAgICAg
YXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQorICAgICAgICByZXR1cm4gc2Vs
Zi5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAo
KSA9PSBmdWxsX2ZpbGVfcGF0aAorCisgICAgZGVmIHBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcigp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fcGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKCkK
KworICAgIGRlZiBwYXRoX3RvX2hvc3RfZm9yd2FyZGVyKCk6CisgICAgICAgIHJldHVybiBzZWxm
Ll9wb3J0Ll9wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKCkKKworICAgIGRlZiBfcHVzaF90b19kZXZp
Y2Uoc2VsZiwgaG9zdF9wYXRoLCBkZXZpY2VfcGF0aCwgaWdub3JlX2Vycm9yPUZhbHNlKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYucnVuX2FkYl9jb21tYW5kKFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2
aWNlX3BhdGhdLCBpZ25vcmVfZXJyb3IpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9l
eHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQobWQ1c3VtX291dHB1dCk6CisgICAgICAg
IGFzc2VydCBtZDVzdW1fb3V0cHV0CisgICAgICAgIHJldHVybiBbbGluZS5zcGxpdCgnICAnKVsw
XSBmb3IgbGluZSBpbiBtZDVzdW1fb3V0cHV0XQorCisKK2NsYXNzIFBvcnRzKG9iamVjdCk6Cisg
ICAgZGVmIF9faW5pdF9fKGRldmljZV9wb3J0LCBob3N0X3BvcnQpOgorICAgICAgICBzZWxmLmRl
dmljZV9wb3J0ID0gZGV2aWNlX3BvcnQKKyAgICAgICAgc2VsZi5ob3N0X3BvcnQgPSBob3N0X3Bv
cnQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyglZCwgJWQpJyAl
IChzZWxmLmRldmljZV9wb3J0LCBzZWxmLmhvc3RfcG9ydCkKKworCitjbGFzcyBGb3J3YXJkZXIo
b2JqZWN0KToKKyAgICAiIiJDbGFzcyB0byBtYW5hZ2UgcG9ydCBmb3J3YXJkcyBmcm9tIHRoZSBk
ZXZpY2UgdG8gdGhlIGhvc3QuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYW5kcm9pZF9j
bWQsIHdvcmtlcl9udW1iZXIsIHBvcnRfcGFpcnMsIGhvc3RfbmFtZSk6CisgICAgICAgICIiIkZv
cndhcmRzIFRDUCBwb3J0cyBvbiB0aGUgZGV2aWNlIGJhY2sgdG8gdGhlIGhvc3QuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICAgIGFuZHJvaWRfY21kOiBJbnN0YW5jZSBvZiBBbmRyb2lkQ29t
bWFuZHMuCisgICAgICAgICAgICB3b3JrZXJfbnVtYmVyOiBJbnRlZ2VyLCB3b3JrZXIgbnVtYmVy
LgorICAgICAgICAgICAgcG9ydF9wYWlyczogQSBsaXN0IG9mIFBvcnRzIHRvIGZvcndhcmQuIE5v
dGUgdGhhdCB5b3UgY2FuIHNwZWNpZnkgMAorICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSBk
ZXZpY2VfcG9ydCwgaW4gd2hpY2ggY2FzZSBhIHBvcnQgd2lsbCBieQorICAgICAgICAgICAgICAg
ICAgICAgICAgZHluYW1pY2FsbHkgYXNzaWduZWQgb24gdGhlIGRldmljZS4gWW91IGNhbiBnZXQg
dGhlCisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGhlIGFzc2lnbmVkIHBvcnQg
dXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VfcG9ydF9mb3JfaG9zdF9w
b3J0IG1ldGhvZC4KKyAgICAgICAgICAgIGhvc3RfbmFtZTogQWRkcmVzcyB0byBmb3J3YXJkIHRv
LCBtdXN0IGJlIGFkZHJlc3NhYmxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGhv
c3QgbWFjaGluZS4gVXN1YWxseSB1c2UgbG9vcGJhY2sgJzEyNy4wLjAuMScuCisKKyAgICAgICAg
UmFpc2VzOgorICAgICAgICAgICAgRXhjZXB0aW9uIG9uIGZhaWx1cmUgdG8gZm9yd2FyZCB0aGUg
cG9ydC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kID0gYW5kcm9pZF9j
bWQKKyAgICAgICAgc2VsZi5faG9zdF90b19kZXZpY2VfcG9ydF9tYXAgPSB7fQorICAgICAgICBz
ZWxmLl9ob3N0X3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2RldmljZV9wcm9jZXNzID0g
Tm9uZQorICAgICAgICBzZWxmLl9hZGJfZm9yd2FyZF9wcm9jZXNzID0gTm9uZQorCisgICAgICAg
IGFzc2VydChGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0JFR0lOICsgd29ya2VyX251bWJlciA8IEZP
UldBUkRFUl9DT05UUk9MX1BPUlRfRU5EKQorICAgICAgICBzZWxmLl9ob3N0X2FkYl9jb250cm9s
X3BvcnQgPSBGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0JFR0lOICsgd29ya2VyX251bWJlcgorCisg
ICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoCisgICAgICAgICAg
ICBzZWxmLl9hbmRyb2lkX2NtZC5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKSwKKyAgICAgICAg
ICAgIERFVklDRV9GT1JXQVJERVJfUEFUSCkKKyAgICAgICAgc2VsZi5faG9zdF9mb3J3YXJkZXJf
cGF0aCA9IHNlbGYuX2FuZHJvaWRfY21kLnBhdGhfdG9faG9zdF9mb3J3YXJkZXIoKQorCisgICAg
ICAgIGZvcndhcmRfc3RyaW5nID0gWyclZDolZDolcycgJSAocGFpci5kZXZpY2VfcG9ydCwgcGFp
ci5ob3N0X3BvcnQsIGhvc3RfbmFtZSkgZm9yIHBhaXIgaW4gcG9ydF9wYWlyc10KKyAgICAgICAg
bG9nZ2luZy5pbmZvKCdGb3J3YXJkaW5nIHBvcnRzOiAlcycsIHN0cihmb3J3YXJkX3N0cmluZykp
CisgICAgICAgIGhvc3RfcGF0dGVybiA9ICdob3N0X2ZvcndhcmRlci4qJyArICcgJy5qb2luKGZv
cndhcmRfc3RyaW5nKQorCisgICAgICAgICMgRklYTUU6IFJhdGhlciB0aGFuIHVzaW5nIGEgYmxv
Y2tpbmcga2lsbCgpIGhlcmUsIHRoZSBkZXZpY2UKKyAgICAgICAgIyBmb3J3YXJkZXIgY291bGQg
dHJ5IHRvIGJpbmQgdGhlIFVuaXggRG9tYWluIFNvY2tldCB1bnRpbCBpdCBzdWNjZWVkcyBvcgor
ICAgICAgICAjIHdoaWxlIGl0IGZhaWxzIGJlY2F1c2UgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGJv
dW5kICh3aXRoIGFwcHJvcHJpYXRlCisgICAgICAgICMgdGltZW91dCBoYW5kbGluZyBvYnZpb3Vz
bHkpLgorICAgICAgICBzZWxmLl9raWxsX2hvc3RfZm9yd2FyZGVyX2Jsb2NraW5nKGhvc3RfcGF0
dGVybiwgRk9SV0FSREVSX0tJTExfVElNRU9VVF9TRUMpCisgICAgICAgIHNlbGYuX2tpbGxfZGV2
aWNlX2ZvcndhcmRlcl9ibG9ja2luZyhGT1JXQVJERVJfS0lMTF9USU1FT1VUX1NFQykKKworICAg
ICAgICBzZWxmLl9hZGJfZm9yd2FyZF9wcm9jZXNzID0gcGV4cGVjdC5zcGF3bigKKyAgICAgICAg
ICAgICdhZGInLCBbJy1zJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQu
Z2V0X2RldmljZV9zZXJpYWwoKSwKKyAgICAgICAgICAgICAgICAgICAgJ2ZvcndhcmQnLAorICAg
ICAgICAgICAgICAgICAgICAndGNwOiVzJyAlIHNlbGYuX2hvc3RfYWRiX2NvbnRyb2xfcG9ydCwK
KyAgICAgICAgICAgICAgICAgICAgJ2xvY2FsYWJzdHJhY3Q6JXMnICUgREVWSUNFX0FEQl9DT05U
Uk9MX1BPUlRdKQorICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2VzcyA9IHBleHBlY3Quc3Bhd24o
CisgICAgICAgICAgICAnYWRiJywgWyctcycsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fu
ZHJvaWRfY21kLmdldF9kZXZpY2Vfc2VyaWFsKCksCisgICAgICAgICAgICAgICAgICAgICdzaGVs
bCcsCisgICAgICAgICAgICAgICAgICAgICclcyAtRCAtLWFkYl9zb2NrPSVzJyAlICgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIERFVklDRV9GT1JXQVJERVJfUEFUSCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIERFVklDRV9BREJfQ09OVFJPTF9QT1JUKV0pCisKKyAgICAgICAgZGV2aWNlX3N1
Y2Nlc3NfcmUgPSByZS5jb21waWxlKCdTdGFydGluZyBEZXZpY2UgRm9yd2FyZGVyLicpCisgICAg
ICAgIGRldmljZV9mYWlsdXJlX3JlID0gcmUuY29tcGlsZSgnLio6RVJST1I6KC4qKScpCisgICAg
ICAgIGluZGV4ID0gc2VsZi5fZGV2aWNlX3Byb2Nlc3MuZXhwZWN0KFtkZXZpY2Vfc3VjY2Vzc19y
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9m
YWlsdXJlX3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGV4cGVjdC5FT0YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwZXhwZWN0LlRJTUVPVVRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGT1JXQVJERVJfVElNRU9VVF9TRUNTKQorICAgICAgICBpZiBpbmRleCA9PSAxOgor
ICAgICAgICAgICAgZXJyb3JfbXNnID0gc3RyKHNlbGYuX2RldmljZV9wcm9jZXNzLm1hdGNoLmdy
b3VwKDEpKQorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihzZWxmLl9kZXZpY2VfcHJvY2Vzcy5i
ZWZvcmUpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbignRmFpbGVkIHRvIHN0YXJ0IERldmljZSBGb3J3YXJkZXIgd2l0aCBFcnJvcjogJXMnICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cpCisgICAgICAgIGVsaWYgaW5k
ZXggPT0gMjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Ioc2VsZi5fZGV2aWNlX3Byb2Nlc3Mu
YmVmb3JlKQorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oJ1VuZXhwZWN0ZWQgRU9GIHdoaWxlIHRyeWluZyB0byBzdGFydCBEZXZpY2UgRm9yd2Fy
ZGVyLicpCisgICAgICAgIGVsaWYgaW5kZXggPT0gMzoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJy
b3Ioc2VsZi5fZGV2aWNlX3Byb2Nlc3MuYmVmb3JlKQorICAgICAgICAgICAgc2VsZi5jbG9zZSgp
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVvdXQgd2hpbGUgdHJ5aW5nIHN0YXJ0
IERldmljZSBGb3J3YXJkZXInKQorICAgICAgICBzZWxmLl9ob3N0X3Byb2Nlc3MgPSBwZXhwZWN0
LnNwYXduKHNlbGYuX2hvc3RfZm9yd2FyZGVyX3BhdGgsIFsnLS1hZGJfcG9ydD0lcycgJSAoc2Vs
Zi5faG9zdF9hZGJfY29udHJvbF9wb3J0KV0gKyBmb3J3YXJkX3N0cmluZykKKworICAgICAgICAj
IFJlYWQgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCB0byBkZXRlcm1pbmUgd2hpY2ggZGV2aWNl
IHBvcnRzIHdoZXJlCisgICAgICAgICMgZm9yd2FyZGVkIHRvIHdoaWNoIGhvc3QgcG9ydHMgKG5l
Y2Vzc2FyeSBpZgorICAgICAgICBob3N0X3N1Y2Nlc3NfcmUgPSByZS5jb21waWxlKCdGb3J3YXJk
aW5nIGRldmljZSBwb3J0IChcZCspIHRvIGhvc3QgKFxkKyk6JykKKyAgICAgICAgaG9zdF9mYWls
dXJlX3JlID0gcmUuY29tcGlsZSgnQ291bGRuXCd0IHN0YXJ0IGZvcndhcmRlciBzZXJ2ZXIgZm9y
IHBvcnQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjOiAoXGQr
KTooXGQrKScpCisgICAgICAgIGZvciBwYWlyIGluIHBvcnRfcGFpcnM6CisgICAgICAgICAgICBp
bmRleCA9IHNlbGYuX2hvc3RfcHJvY2Vzcy5leHBlY3QoW2hvc3Rfc3VjY2Vzc19yZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9mYWlsdXJlX3Jl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXhwZWN0
LkVPRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGV4
cGVjdC5USU1FT1VUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGT1JXQVJERVJfVElNRU9VVF9TRUNTKQorICAgICAgICAgICAgaWYgaW5kZXggPT0gMDoK
KyAgICAgICAgICAgICAgICBkZXZpY2VfcG9ydCA9IGludChzZWxmLl9ob3N0X3Byb2Nlc3MubWF0
Y2guZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgaG9zdF9wb3J0ID0gaW50KHNlbGYuX2hvc3Rf
cHJvY2Vzcy5tYXRjaC5ncm91cCgyKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9ob3N0X3RvX2Rl
dmljZV9wb3J0X21hcFtob3N0X3BvcnRdID0gZGV2aWNlX3BvcnQKKyAgICAgICAgICAgICAgICBs
b2dnaW5nLmluZm8oIkZvcndhcmRpbmcgZGV2aWNlIHBvcnQ6ICVkIHRvIGhvc3QgcG9ydDogJWQu
IiAlIChkZXZpY2VfcG9ydCwgaG9zdF9wb3J0KSkKKyAgICAgICAgICAgIGVsaWYgaW5kZXggPT0g
MToKKyAgICAgICAgICAgICAgICBkZXZpY2VfcG9ydCA9IGludChzZWxmLl9ob3N0X3Byb2Nlc3Mu
bWF0Y2guZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgaG9zdF9wb3J0ID0gaW50KHNlbGYuX2hv
c3RfcHJvY2Vzcy5tYXRjaC5ncm91cCgyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkK
KyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBmb3J3YXJkIHBvcnQg
JWQgdG8gJWQnICUgKGRldmljZV9wb3J0LCBob3N0X3BvcnQpKQorICAgICAgICAgICAgZWxpZiBp
bmRleCA9PSAyOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Ioc2VsZi5faG9zdF9wcm9j
ZXNzLmJlZm9yZSkKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgRU9GIHdoaWxlIHRyeWluZyB0byBmb3J3YXJk
IHBvcnRzICVzJyAlIHBvcnRfcGFpcnMpCisgICAgICAgICAgICBlbGlmIGluZGV4ID09IDM6Cisg
ICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihzZWxmLl9ob3N0X3Byb2Nlc3MuYmVmb3JlKQor
ICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbignVGltZW91dCB3aGlsZSB0cnlpbmcgdG8gZm9yd2FyZCBwb3J0cyAlcycgJSBwb3J0X3Bh
aXJzKQorCisgICAgZGVmIF9raWxsX2hvc3RfZm9yd2FyZGVyX2Jsb2NraW5nKHNlbGYsIGhvc3Rf
cGF0dGVybiwgdGltZW91dF9zZWMpOgorICAgICAgICAiIiJLaWxscyBhbnkgZXhpc3RpbmcgaG9z
dCBmb3J3YXJkZXJzIHVzaW5nIHRoZSBwcm92aWRlZCBwYXR0ZXJuLgorCisgICAgICAgIE5vdGUg
dGhhdCB0aGlzIHdhaXRzIHVudGlsIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuCisgICAgICAgICIi
IgorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5faG9zdF9jb21tYW5kKFsncGtpbGwnLCAn
LWYnLCBob3N0X3BhdHRlcm5dKQorICAgICAgICBlbGFwc2VkX3NlY29uZHMgPSAwCisgICAgICAg
IHdhaXRfcGVyaW9kX3NlY29uZHMgPSAwLjEKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9ob3N0X2NvbW1hbmQoWydwZ3JlcCcsICctZicsIGhvc3RfcGF0dGVybl0pIGFu
ZCAoZWxhcHNlZF9zZWNvbmRzIDwgdGltZW91dF9zZWMpOgorICAgICAgICAgICAgdGltZS5zbGVl
cCh3YWl0X3BlcmlvZF9zZWNvbmRzKQorICAgICAgICAgICAgZWxhcHNlZF9zZWNvbmRzICs9IHdh
aXRfcGVyaW9kX3NlY29uZHMKKyAgICAgICAgaWYgZWxhcHNlZF9zZWNvbmRzID49IHRpbWVvdXRf
c2VjOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2hpbGUga2lsbGlu
ZyAnICsgaG9zdF9wYXR0ZXJuKQorCisgICAgZGVmIF9raWxsX2RldmljZV9mb3J3YXJkZXJfYmxv
Y2tpbmcoc2VsZiwgdGltZW91dF9zZWMpOgorICAgICAgICAiIiJLaWxscyBhbnkgZXhpc3Rpbmcg
ZGV2aWNlIGZvcndhcmRlcnMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgd2FpdHMgdW50aWwg
dGhlIHByb2Nlc3MgdGVybWluYXRlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2tpbGxhbGwnLCAnZGV2aWNlX2Zvcndh
cmRlciddKQorICAgICAgICBlbGFwc2VkX3NlY29uZHMgPSAwCisgICAgICAgIHdhaXRfcGVyaW9k
X3NlY29uZHMgPSAwLjEKKyAgICAgICAgd2hpbGUgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAncHMnXSkuZmluZCgnZGV2aWNlX2ZvcndhcmRlcicpID49IDAgYW5k
IChlbGFwc2VkX3NlY29uZHMgPCB0aW1lb3V0X3NlYyk6CisgICAgICAgICAgICB0aW1lLnNsZWVw
KHdhaXRfcGVyaW9kX3NlY29uZHMpCisgICAgICAgICAgICBlbGFwc2VkX3NlY29uZHMgKz0gd2Fp
dF9wZXJpb2Rfc2Vjb25kcworICAgICAgICBpZiBlbGFwc2VkX3NlY29uZHMgPj0gdGltZW91dF9z
ZWM6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVkIG91dCB3aGlsZSBraWxsaW5n
IGRldmljZV9mb3J3YXJkZXIuJykKKworICAgIGRlZiBkZXZpY2VfcG9ydF9mb3JfaG9zdF9wb3J0
KHNlbGYsIGhvc3RfcG9ydCk6CisgICAgICAgIHJldHVybiBzZWxmLl9ob3N0X3RvX2RldmljZV9w
b3J0X21hcC5nZXQoaG9zdF9wb3J0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLl9ob3N0X3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9ob3N0X3Byb2Nlc3MuY2xv
c2UoKQorICAgICAgICBpZiBzZWxmLl9kZXZpY2VfcHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYu
X2RldmljZV9wcm9jZXNzLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5fYWRiX2ZvcndhcmRfcHJv
Y2VzczoKKyAgICAgICAgICAgIHNlbGYuX2FkYl9mb3J3YXJkX3Byb2Nlc3MuY2xvc2UoKQorICAg
ICAgICBzZWxmLl9ob3N0X3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2RldmljZV9wcm9j
ZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9hZGJfZm9yd2FyZF9wcm9jZXNzID0gTm9uZQorCisK
KwogY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91
dD1GYWxzZSk6CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX19p
bml0X18ocG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQpCkBAIC0z
MzIsMjIgKzYwOSwxNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZl
cik6CiAgICAgICAgIHNlbGYuX2Vycl9maWZvX3BhdGggPSBERVZJQ0VfRklGT19QQVRIICsgJ3N0
ZGVyci5maWZvJwogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzID0gTm9uZQogICAg
ICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9uZQotICAgICAgICBzZWxmLl9mb3J3
YXJkZXJfcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZm9yd2FyZGVyID0gTm9uZQogICAg
ICAgICBzZWxmLl9oYXNfc2V0dXAgPSBGYWxzZQotICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zl
cm5vcnMgPSB7fQogICAgICAgICBzZWxmLl9kZXZpY2Vfc2VyaWFsID0gcG9ydC5fZ2V0X2Rldmlj
ZV9zZXJpYWwod29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fYWRiX2NvbW1hbmQgPSBbJ2Fk
YicsICctcycsIHNlbGYuX2RldmljZV9zZXJpYWxdCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1i
ZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kID0gQW5kcm9pZENv
bW1hbmRzKHBvcnQsIHdvcmtlcl9udW1iZXIpCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAg
ICAgICAgc2VsZi5fdGVhcmRvd25fcGVyZm9ybWFuY2UoKQogICAgICAgICBzdXBlcihDaHJvbWl1
bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9fZGVsX18oKQogCi0gICAgZGVmIF9zZXR1cF9tZDVzdW1f
YW5kX3B1c2hfZGF0YV9pZl9uZWVkZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuX21kNXN1bV9wYXRo
ID0gc2VsZi5fcG9ydC5fcGF0aF90b19tZDVzdW0oKQotICAgICAgICBpZiBub3Qgc2VsZi5fZmls
ZV9leGlzdHNfb25fZGV2aWNlKE1ENVNVTV9ERVZJQ0VfUEFUSCk6Ci0gICAgICAgICAgICBpZiBu
b3Qgc2VsZi5fcHVzaF90b19kZXZpY2Uoc2VsZi5fbWQ1c3VtX3BhdGgsIE1ENVNVTV9ERVZJQ0Vf
UEFUSCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBw
dXNoIG1kNXN1bSB0byBkZXZpY2UnKQotCisgICAgZGVmIF9wdXNoX2RhdGFfaWZfbmVlZGVkKHNl
bGYpOgogICAgICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQogICAgICAgICBzZWxmLl9wdXNo
X2ZvbnRzKCkKICAgICAgICAgc2VsZi5fcHVzaF90ZXN0X3Jlc291cmNlcygpCkBAIC0zNTYsMTAz
ICs2MjgsNjAgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgog
ICAgICAgICBpZiBzZWxmLl9oYXNfc2V0dXA6CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAg
ICBzZWxmLl9zZXR1cF9tZDVzdW1fYW5kX3B1c2hfZGF0YV9pZl9uZWVkZWQoKQorICAgICAgICBz
ZWxmLl9hbmRyb2lkX2NtZC5zZXR1cF9kZXZpY2UoKQorICAgICAgICBzZWxmLl9wdXNoX2RhdGFf
aWZfbmVlZGVkKCkKICAgICAgICAgc2VsZi5faGFzX3NldHVwID0gVHJ1ZQotICAgICAgICBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydyb290J10pCi0gICAgICAgIHNlbGYuX3NldHVwX3BlcmZvcm1h
bmNlKCkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsncm9vdCdd
KQogICAgICAgICAjIFJlcXVpcmVkIGJ5IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGly
RmlsZVBhdGgoKS4KICAgICAgICAgIyBPdGhlciBkaXJlY3RvcmllcyB3aWxsIGJlIGNyZWF0ZWQg
YXV0b21hdGljYWxseSBieSBhZGIgcHVzaC4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9t
ZSddKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hyb21lJ10pCiAKICAg
ICAgICAgIyBBbGxvdyB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIHRvIGZ1bGx5IGFjY2VzcyB0aGUg
ZGlyZWN0b3J5LgogICAgICAgICAjIFRoZSBuYXRpdmUgY29kZSBuZWVkcyB0aGUgcGVybWlzc2lv
biB0byB3cml0ZSB0ZW1wb3JhcnkgZmlsZXMgYW5kIGNyZWF0ZSBwaXBlcyBoZXJlLgotICAgICAg
ICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9E
UlRfRElSXSkKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2htb2Qn
LCAnNzc3JywgREVWSUNFX0RSVF9ESVJdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9EUlRfRElSXSkKKyAg
ICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2htb2Qn
LCAnNzc3JywgREVWSUNFX0RSVF9ESVJdKQogCiAgICAgICAgICMgRGVsZXRlIHRoZSBkaXNrIGNh
Y2hlIGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1bi4KICAgICAgICAgIyBUaGlzIGlz
IGxpa2Ugd2hhdCdzIGRvbmUgaW4gQ2hyb21pdW1Qb3J0LnNldHVwX3Rlc3RfcnVuIGJ1dCBvbiB0
aGUgZGV2aWNlLgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScs
ICctcicsIERSVF9BUFBfQ0FDSEVfRElSXSkKLQotICAgIGRlZiBfbG9nX2Vycm9yKHNlbGYsIG1l
c3NhZ2UpOgotICAgICAgICBfbG9nLmVycm9yKCdbJXNdICVzJyAlIChzZWxmLl9kZXZpY2Vfc2Vy
aWFsLCBtZXNzYWdlKSkKLQotICAgIGRlZiBfbG9nX2RlYnVnKHNlbGYsIG1lc3NhZ2UpOgotICAg
ICAgICBfbG9nLmRlYnVnKCdbJXNdICVzJyAlIChzZWxmLl9kZXZpY2Vfc2VyaWFsLCBtZXNzYWdl
KSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
cm0nLCAnLXInLCBEUlRfQVBQX0NBQ0hFX0RJUl0pCiAKICAgICBkZWYgX2Fib3J0KHNlbGYsIG1l
c3NhZ2UpOgogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignWyVzXSAlcycgJSAoc2VsZi5f
ZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSkpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9l
eHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQobWQ1c3VtX291dHB1dCk6Ci0gICAgICAg
IGFzc2VydCBtZDVzdW1fb3V0cHV0Ci0gICAgICAgIHJldHVybiBbbGluZS5zcGxpdCgnICAnKVsw
XSBmb3IgbGluZSBpbiBtZDVzdW1fb3V0cHV0XQotCi0gICAgZGVmIF9wdXNoX2ZpbGVfaWZfbmVl
ZGVkKHNlbGYsIGhvc3RfZmlsZSwgZGV2aWNlX2ZpbGUpOgotICAgICAgICBhc3NlcnQgb3MucGF0
aC5leGlzdHMoaG9zdF9maWxlKQotICAgICAgICBkZXZpY2VfaGFzaGVzID0gc2VsZi5fZXh0cmFj
dF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQu
aG9zdC5leGVjdXRpdmUucG9wZW4oc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgTUQ1U1VN
X0RFVklDRV9QQVRILCBkZXZpY2VfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQpCi0gICAg
ICAgIGhvc3RfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0
KAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5leGVjdXRpdmUucG9wZW4oYXJncz1b
JyVzX2hvc3QnICUgc2VsZi5fbWQ1c3VtX3BhdGgsIGhvc3RfZmlsZV0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBF
KS5zdGRvdXQpCi0gICAgICAgIGlmIGhvc3RfaGFzaGVzIGFuZCBkZXZpY2VfaGFzaGVzID09IGhv
c3RfaGFzaGVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2
aWNlKGhvc3RfZmlsZSwgZGV2aWNlX2ZpbGUpCi0KICAgICBkZWYgX3B1c2hfZXhlY3V0YWJsZShz
ZWxmKToKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9wYXRo
X3RvX2ZvcndhcmRlcigpLCBERVZJQ0VfRk9SV0FSREVSX1BBVEgpCi0gICAgICAgIHNlbGYuX3B1
c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWUu
cGFrJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnBhaycpCi0gICAgICAgIHNl
bGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRl
clRyZWVfcmVzb3VyY2VzJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291
cmNlcycpCi0gICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVp
bGRfcGF0aCgnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRy
b2lkX21haW5fZm9udHMueG1sJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChz
ZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpLCBERVZJ
Q0VfRFJUX0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpCi0gICAgICAgIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FHRV0pCisgICAgICAg
IHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRf
cGF0aCgnRHVtcFJlbmRlclRyZWUucGFrJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJU
cmVlLnBhaycpCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQo
c2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJyksIERFVklD
RV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpCisgICAgICAgIHNlbGYuX2Fu
ZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5k
cm9pZF9tYWluX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX21haW5fZm9u
dHMueG1sJykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChz
ZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpLCBERVZJ
Q0VfRFJUX0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpCisgICAgICAgIHNlbGYu
X2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FH
RV0pCiAgICAgICAgIGRydF9ob3N0X3BhdGggPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigp
Ci0gICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnaW5zdGFs
bCcsIGRydF9ob3N0X3BhdGhdKQorICAgICAgICBpbnN0YWxsX3Jlc3VsdCA9IHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ2luc3RhbGwnLCBkcnRfaG9zdF9wYXRoXSkKICAgICAg
ICAgaWYgaW5zdGFsbF9yZXN1bHQuZmluZCgnU3VjY2VzcycpID09IC0xOgogICAgICAgICAgICAg
c2VsZi5fYWJvcnQoJ0ZhaWxlZCB0byBpbnN0YWxsICVzIG9udG8gZGV2aWNlOiAlcycgJSAoZHJ0
X2hvc3RfcGF0aCwgaW5zdGFsbF9yZXN1bHQpKQogCiAgICAgZGVmIF9wdXNoX2ZvbnRzKHNlbGYp
OgotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1B1c2hpbmcgZm9udHMnKQorICAgICAgICBsb2df
ZGVidWcoc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1B1c2hpbmcgZm9udHMnKQogICAgICAgICBwYXRo
X3RvX2FoZW1fZm9udCA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0FIRU1fX19fLlRURicpCi0g
ICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQocGF0aF90b19haGVtX2ZvbnQsIERFVklD
RV9GT05UU19ESVIgKyAnQUhFTV9fX18uVFRGJykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQu
cHVzaF9maWxlX2lmX25lZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVWSUNFX0ZPTlRTX0RJUiAr
ICdBSEVNX19fXy5UVEYnKQogICAgICAgICBmb3IgKGhvc3RfZGlycywgZm9udF9maWxlLCBwYWNr
YWdlKSBpbiBIT1NUX0ZPTlRfRklMRVM6CiAgICAgICAgICAgICBmb3IgaG9zdF9kaXIgaW4gaG9z
dF9kaXJzOgogICAgICAgICAgICAgICAgIGhvc3RfZm9udF9wYXRoID0gaG9zdF9kaXIgKyBmb250
X2ZpbGUKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9wb3J0Ll9jaGVja19maWxlX2V4aXN0cyho
b3N0X2ZvbnRfcGF0aCwgJycsIGxvZ2dpbmc9RmFsc2UpOgotICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElS
ICsgZm9udF9maWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNo
X2ZpbGVfaWZfbmVlZGVkKGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElSICsgZm9udF9m
aWxlKQogCiAgICAgZGVmIF9wdXNoX3Rlc3RfcmVzb3VyY2VzKHNlbGYpOgotICAgICAgICBzZWxm
Ll9sb2dfZGVidWcoJ1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQorICAgICAgICBsb2dfZGVidWco
c2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBm
b3IgcmVzb3VyY2UgaW4gVEVTVF9SRVNPVVJDRVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYu
X3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnLycg
KyByZXNvdXJjZSwgREVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyByZXNvdXJjZSkKKyAgICAgICAg
ICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5sYXlv
dXRfdGVzdHNfZGlyKCkgKyAnLycgKyByZXNvdXJjZSwgREVWSUNFX0xBWU9VVF9URVNUU19ESVIg
KyByZXNvdXJjZSkKIAotICAgIGRlZiBfcnVuX2FkYl9jb21tYW5kKHNlbGYsIGNtZCwgaWdub3Jl
X2Vycm9yPUZhbHNlKToKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdSdW4gYWRiIGNvbW1hbmQ6
ICcgKyBzdHIoY21kKSkKLSAgICAgICAgaWYgaWdub3JlX2Vycm9yOgotICAgICAgICAgICAgZXJy
b3JfaGFuZGxlciA9IHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBOb25lCi0gICAgICAgIHJlc3VsdCA9
IHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCArIGNt
ZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQotICAgICAgICAjIExpbWl0IHRoZSBsZW5n
dGggdG8gYXZvaWQgdG9vIHZlcmJvc2Ugb3V0cHV0IG9mIGNvbW1hbmRzIGxpa2UgJ2FkYiBsb2dj
YXQnIGFuZCAnY2F0IC9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lMDEnCi0gICAgICAgICMgd2hv
c2Ugb3V0cHV0cyBhcmUgbm9ybWFsbHkgcHJpbnRlZCBpbiBsYXRlciBsb2dzLgotICAgICAgICBz
ZWxmLl9sb2dfZGVidWcoJ1J1biBhZGIgcmVzdWx0OiAnICsgcmVzdWx0Wzo4MF0pCi0gICAgICAg
IHJldHVybiByZXN1bHQKLQotICAgIGRlZiBfbGlua19kZXZpY2VfZmlsZShzZWxmLCBmcm9tX2Zp
bGUsIHRvX2ZpbGUsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Ci0gICAgICAgICMgcm0gdG9fZmlsZSBm
aXJzdCB0byBtYWtlIHN1cmUgdGhhdCBsbiBzdWNjZWVkcy4KLSAgICAgICAgc2VsZi5fcnVuX2Fk
Yl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCB0b19maWxlXSwgaWdub3JlX2Vycm9yKQotICAgICAg
ICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbG4nLCAnLXMnLCBmcm9t
X2ZpbGUsIHRvX2ZpbGVdLCBpZ25vcmVfZXJyb3IpCi0KLSAgICBkZWYgX3B1c2hfdG9fZGV2aWNl
KHNlbGYsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGgsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydwdXNoJywgaG9zdF9wYXRoLCBkZXZp
Y2VfcGF0aF0sIGlnbm9yZV9lcnJvcikKLQotICAgIGRlZiBfcHVsbF9mcm9tX2RldmljZShzZWxm
LCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncHVsbCcsIGRldmljZV9wYXRoLCBob3N0X3Bh
dGhdLCBpZ25vcmVfZXJyb3IpCisgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVy
X29wdGlvbik6CisgICAgICAgICMgSWdub3JlIGNvbW1hbmQgd3JhcHBlciB3aGljaCBpcyBub3Qg
YXBwbGljYWJsZSBvbiBBbmRyb2lkLgorICAgICAgICByZXR1cm4gW10KIAogICAgIGRlZiBfZ2V0
X2xhc3Rfc3RhY2t0cmFjZShzZWxmKToKLSAgICAgICAgdG9tYnN0b25lcyA9IHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgJy1uJywgJy9kYXRhL3RvbWJzdG9uZXMnXSkKKyAg
ICAgICAgdG9tYnN0b25lcyA9IHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2xzJywgJy1uJywgJy9kYXRhL3RvbWJzdG9uZXMnXSkKICAgICAgICAgaWYgbm90IHRv
bWJzdG9uZXMgb3IgdG9tYnN0b25lcy5zdGFydHN3aXRoKCcvZGF0YS90b21ic3RvbmVzOiBObyBz
dWNoIGZpbGUgb3IgZGlyZWN0b3J5Jyk6Ci0gICAgICAgICAgICBzZWxmLl9sb2dfZXJyb3IoJ0RS
VCBjcmFzaGVkLCBidXQgbm8gdG9tYnN0b25lIGZvdW5kIScpCisgICAgICAgICAgICBsb2dfZXJy
b3Ioc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ0RSVCBjcmFzaGVkLCBidXQgbm8gdG9tYnN0b25lIGZv
dW5kIScpCiAgICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgdG9tYnN0b25lcyA9IHRvbWJz
dG9uZXMucnN0cmlwKCkuc3BsaXQoJ1xuJykKICAgICAgICAgbGFzdF90b21ic3RvbmUgPSB0b21i
c3RvbmVzWzBdLnNwbGl0KCkKQEAgLTQ3MSwyOCArNzAwLDEwIEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgIyBzdGFjayB0cmFjZSBpbnRvIGEg
aHVtYW4gcmVhZGFibGUgZm9ybWF0LCBpZiBuZWVkZWQuCiAgICAgICAgICMgSXQgdGFrZXMgYSBs
b25nIHRpbWUsIHNvIGRvbid0IGRvIGl0IGhlcmUuCiAgICAgICAgIHJldHVybiAnJXNcbiVzJyAl
ICgnICcuam9pbihsYXN0X3RvbWJzdG9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCAnL2RhdGEvdG9tYnN0b25lcy8n
ICsgbGFzdF90b21ic3RvbmVbNl1dKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsICcvZGF0YS90b21i
c3RvbmVzLycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQogCiAgICAgZGVmIF9nZXRfbG9nY2F0KHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1k
JywgJy12JywgJ3RocmVhZHRpbWUnXSkKLQotICAgIGRlZiBfc2V0dXBfcGVyZm9ybWFuY2Uoc2Vs
Zik6Ci0gICAgICAgICMgRGlzYWJsZSBDUFUgc2NhbGluZyBhbmQgZHJvcCByYW0gY2FjaGUgdG8g
cmVkdWNlIG5vaXNlIGluIHRlc3RzCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcmlnaW5hbF9nb3Zl
cm5vcnM6Ci0gICAgICAgICAgICBnb3Zlcm5vcl9maWxlcyA9IHNlbGYuX3J1bl9hZGJfY29tbWFu
ZChbJ3NoZWxsJywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCi0gICAgICAgICAg
ICBpZiBnb3Zlcm5vcl9maWxlcy5maW5kKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgPT0g
LTE6Ci0gICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZ292ZXJub3JfZmlsZXMuc3BsaXQoKToK
LSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzW2ZpbGVdID0gc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgZmlsZV0pLnN0cmlwKCkKLSAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobycsICdw
ZXJmb3JtYW5jZScsICc+JywgZmlsZV0pCi0KLSAgICBkZWYgX3RlYXJkb3duX3BlcmZvcm1hbmNl
KHNlbGYpOgotICAgICAgICBmb3IgZmlsZSwgb3JpZ2luYWxfY29udGVudCBpbiBzZWxmLl9vcmln
aW5hbF9nb3Zlcm5vcnMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFu
ZChbJ3NoZWxsJywgJ2VjaG8nLCBvcmlnaW5hbF9jb250ZW50LCAnPicsIGZpbGVdKQotICAgICAg
ICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnMgPSB7fQotCi0gICAgZGVmIF9jb21tYW5kX3dyYXBw
ZXIoY2xzLCB3cmFwcGVyX29wdGlvbik6Ci0gICAgICAgICMgSWdub3JlIGNvbW1hbmQgd3JhcHBl
ciB3aGljaCBpcyBub3QgYXBwbGljYWJsZSBvbiBBbmRyb2lkLgotICAgICAgICByZXR1cm4gW10K
KyAgICAgICAgcmV0dXJuIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ2xvZ2Nh
dCcsICctZCcsICctdicsICd0aHJlYWR0aW1lJ10pCiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2co
c2VsZiwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgogICAgICAgICBpZiBub3Qgc3Rkb3V0
OgpAQCAtNTA4LDEwICs3MTksNiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6CiAgICAgICAgICMgVGhlIGNvbW1hbmQgbGluZSBwYXNzZWQgdG8gdGhlIERSVCBw
cm9jZXNzIGlzIHJldHVybmVkIGJ5IF9kcnRfY21kX2xpbmUoKSBpbnN0ZWFkLgogICAgICAgICBy
ZXR1cm4gc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJ10KIAotICAgIGRlZiBfZmlsZV9leGlz
dHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToKLSAgICAgICAgYXNzZXJ0IGZ1bGxf
ZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9m
aWxlX3BhdGgKLQogICAgIGRlZiBfZHJ0X2NtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJf
dGVzdF9hcmdzKToKICAgICAgICAgcmV0dXJuIGRyaXZlci5Ecml2ZXIuY21kX2xpbmUoc2VsZiwg
cGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyctLWNyZWF0ZS1zdGRpbi1maWZvJywgJy0t
c2VwYXJhdGUtc3RkZXJyLWZpZm8nXQogCkBAIC01MjQsMTcgKzczMSwxNyBAQCBjbGFzcyBDaHJv
bWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHJldHVybiBGYWxzZQog
CiAgICAgZGVmIF9hbGxfcGlwZXNfY3JlYXRlZChzZWxmKToKLSAgICAgICAgcmV0dXJuIChzZWxm
Ll9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKLSAgICAgICAg
ICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkg
YW5kCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vy
cl9maWZvX3BhdGgpKQorICAgICAgICByZXR1cm4gKHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhp
c3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIHNl
bGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRo
KSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9k
ZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCiAKICAgICBkZWYgX3JlbW92ZV9hbGxfcGlwZXMo
c2VsZik6CiAgICAgICAgIGZvciBmaWxlIGluIFtzZWxmLl9pbl9maWZvX3BhdGgsIHNlbGYuX291
dF9maWZvX3BhdGgsIHNlbGYuX2Vycl9maWZvX3BhdGhdOgotICAgICAgICAgICAgc2VsZi5fcnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCBmaWxlXSkKKyAgICAgICAgICAgIHNlbGYuX2Fu
ZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgZmlsZV0pCiAKLSAgICAg
ICAgcmV0dXJuIChub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9f
cGF0aCkgYW5kCi0gICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2Rldmlj
ZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmls
ZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKQorICAgICAgICByZXR1cm4g
KG5vdCBzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlm
b19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fYW5kcm9pZF9jbWQuZmlsZV9l
eGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAg
IG5vdCBzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2Zp
Zm9fcGF0aCkpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0LCBzdG9wX3do
ZW5fZG9uZSk6CiAgICAgICAgIGJhc2UgPSBzZWxmLl9wb3J0Lmxvb2t1cF92aXJ0dWFsX3Rlc3Rf
YmFzZShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQpAQCAtNTU5LDcgKzc2Niw3IEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgZm9yIHJldHJpZXMg
aW4gcmFuZ2UoMyk6CiAgICAgICAgICAgICBpZiBzZWxmLl9zdGFydF9vbmNlKHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNl
bGYuX2xvZ19lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9u
LiBSZXRyaWVzPSVkLiBMb2c6JXMnICUgKHJldHJpZXMsIHNlbGYuX2dldF9sb2djYXQoKSkpCisg
ICAgICAgICAgICBsb2dfZXJyb3Ioc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ0ZhaWxlZCB0byBzdGFy
dCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gUmV0cmllcz0lZC4gTG9nOiVzJyAlIChyZXRy
aWVzLCBzZWxmLl9nZXRfbG9nY2F0KCkpKQogICAgICAgICAgICAgc2VsZi5zdG9wKCkKICAgICAg
ICAgICAgIHRpbWUuc2xlZXAoMikKICAgICAgICAgc2VsZi5fYWJvcnQoJ0ZhaWxlZCB0byBzdGFy
dCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1lcy4gR2l2ZSB1cC4nKQpA
QCAtNTY3LDE2ICs3NzQsMTQgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5E
cml2ZXIpOgogICAgIGRlZiBfc3RhcnRfb25jZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3Rf
YXJncyk6CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX3N0YXJ0
KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCi0gICAgICAgIHNlbGYuX2xvZ19kZWJ1Zygn
U3RhcnRpbmcgZm9yd2FyZGVyJykKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBz
ZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcigKLSAgICAgICAgICAgIHNlbGYu
X3BvcnQsICdGb3J3YXJkZXInLCBzZWxmLl9hZGJfY29tbWFuZCArIFsnc2hlbGwnLCAnJXMgLUQg
JXMnICUgKERFVklDRV9GT1JXQVJERVJfUEFUSCwgRk9SV0FSRF9QT1JUUyldKQotICAgICAgICBz
ZWxmLl9mb3J3YXJkZXJfcHJvY2Vzcy5zdGFydCgpCi0KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9j
b21tYW5kKFsnbG9nY2F0JywgJy1jJ10pCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuX2NtZF9saW5lICsgWyc+JywgQ09NTUFORF9MSU5FX0ZJ
TEVdKQotICAgICAgICBzdGFydF9yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdhbScsICdzdGFydCcsICctZScsICdSdW5JblN1YlRocmVhZCcsICctbicsIERSVF9BQ1RJ
VklUWV9GVUxMX05BTUVdKQorICAgICAgICBwb3J0X3BhaXJzID0gW1BvcnRzKHBvcnQsIHBvcnQp
IGZvciBwb3J0IGluIEZPUldBUkRfUE9SVFNdCisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZp
Y2Vfc2VyaWFsLCAnUHl0aG9uIHNjcmlwdCBpcyBzdGFydGluZyBmb3J3YXJkZXIgZm9yIHBvcnRz
OiAnICsgc3RyKHBvcnRfcGFpcnMpKQorICAgICAgICBzZWxmLl9mb3J3YXJkZXIgPSBGb3J3YXJk
ZXIoc2VsZi5fYW5kcm9pZF9jbWQsIHNlbGYuX3dvcmtlcl9udW1iZXIsIHBvcnRfcGFpcnMsICcx
MjcuMC4wLjEnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWyds
b2djYXQnLCAnLWMnXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnZWNobyddICsgc2VsZi5fY21kX2xpbmUgKyBbJz4nLCBDT01NQU5EX0xJTkVf
RklMRV0pCisgICAgICAgIHN0YXJ0X3Jlc3VsdCA9IHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ3N0YXJ0JywgJy1lJywgJ1J1bkluU3ViVGhyZWFkJywg
Jy1uJywgRFJUX0FDVElWSVRZX0ZVTExfTkFNRV0pCiAgICAgICAgIGlmIHN0YXJ0X3Jlc3VsdC5m
aW5kKCdFeGNlcHRpb24nKSAhPSAtMToKLSAgICAgICAgICAgIHNlbGYuX2xvZ19lcnJvcignRmFp
bGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNlcHRpb246XG4nICsg
c3RhcnRfcmVzdWx0KQorICAgICAgICAgICAgbG9nX2Vycm9yKHNlbGYuX2RldmljZV9zZXJpYWws
ICdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIEV4Y2VwdGlvbjpc
bicgKyBzdGFydF9yZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICBp
ZiBub3QgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9sb29wX3dpdGhfdGltZW91dChzZWxmLl9hbGxf
cGlwZXNfY3JlYXRlZCwgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKToKQEAgLTU4NiwyMSAr
NzkxLDIxIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAg
ICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VD
UwogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCiAgICAgICAgIHNlbGYuX3Jl
YWRfcHJvbXB0KGRlYWRsaW5lKQotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ0ludGVyYWN0aXZl
IHNoZWxsIHN0YXJ0ZWQnKQorICAgICAgICBsb2dfZGVidWcoc2VsZi5fZGV2aWNlX3NlcmlhbCwg
J0ludGVyYWN0aXZlIHNoZWxsIHN0YXJ0ZWQnKQogCiAgICAgICAgICMgU3RhcnQgYSBwcm9jZXNz
IHRvIHJlYWQgZnJvbSB0aGUgc3Rkb3V0IGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCBh
bmQgcHJpbnQgdG8gc3Rkb3V0LgotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1JlZGlyZWN0aW5n
IHN0ZG91dCB0byAnICsgc2VsZi5fb3V0X2ZpZm9fcGF0aCkKKyAgICAgICAgbG9nX2RlYnVnKHNl
bGYuX2RldmljZV9zZXJpYWwsICdSZWRpcmVjdGluZyBzdGRvdXQgdG8gJyArIHNlbGYuX291dF9m
aWZvX3BhdGgpCiAgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3MgPSBzZWxmLl9wb3J0
Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcigKICAgICAgICAgICAgIHNlbGYuX3BvcnQsICdS
ZWFkU3Rkb3V0Jywgc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJ2NhdCcsIHNlbGYuX291
dF9maWZvX3BhdGhdKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLnN0YXJ0KCkK
IAogICAgICAgICAjIFN0YXJ0IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIHN0ZGVyciBmaWZv
IG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KLSAgICAgICAg
c2VsZi5fbG9nX2RlYnVnKCdSZWRpcmVjdGluZyBzdGRlcnIgdG8gJyArIHNlbGYuX2Vycl9maWZv
X3BhdGgpCisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUmVkaXJlY3Rp
bmcgc3RkZXJyIHRvICcgKyBzZWxmLl9lcnJfZmlmb19wYXRoKQogICAgICAgICBzZWxmLl9yZWFk
X3N0ZGVycl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Io
CiAgICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVhZFN0ZGVycicsIHNlbGYuX2FkYl9jb21tYW5k
ICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9lcnJfZmlmb19wYXRoXSkKICAgICAgICAgc2VsZi5f
cmVhZF9zdGRlcnJfcHJvY2Vzcy5zdGFydCgpCiAKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdS
ZWRpcmVjdGluZyBzdGRpbiB0byAnICsgc2VsZi5faW5fZmlmb19wYXRoKQorICAgICAgICBsb2df
ZGVidWcoc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1JlZGlyZWN0aW5nIHN0ZGluIHRvICcgKyBzZWxm
Ll9pbl9maWZvX3BhdGgpCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLndyaXRlKCdjYXQg
PiVzXG4nICUgc2VsZi5faW5fZmlmb19wYXRoKQogCiAgICAgICAgICMgQ29tYmluZSB0aGUgc3Rk
b3V0IGFuZCBzdGRlcnIgcGlwZXMgaW50byBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy4KQEAgLTYxMiw3
ICs4MTcsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAg
ICAgICAgICAgICAgICAgIyByZWFkaW5nL3dyaXRpbmcgdGhlIGZpZm8uIEtpbGwgdGhlIGZpZm8g
cmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB0byBsZXQgdGhlCiAgICAgICAgICAgICAgICAgIyBt
YWluIHRocmVhZCBlc2NhcGUgZnJvbSB0aGUgZGVhZGxvY2tlZCBzdGF0ZS4gQWZ0ZXIgdGhhdCwg
dGhlIG1haW4gdGhyZWFkIHdpbGwKICAgICAgICAgICAgICAgICAjIHRyZWF0IHRoaXMgYXMgYSBj
cmFzaC4KLSAgICAgICAgICAgICAgICBzZWxmLl9sb2dfZXJyb3IoJ0RlYWRsb2NrIGRldGVjdGVk
LiBQcm9jZXNzZXMga2lsbGVkLicpCisgICAgICAgICAgICAgICAgbG9nX2Vycm9yKHNlbGYuX2Rl
dmljZV9zZXJpYWwsICdEZWFkbG9jayBkZXRlY3RlZC4gUHJvY2Vzc2VzIGtpbGxlZC4nKQogICAg
ICAgICAgICAgICAgIGZvciBpIGluIHByb2Nlc3NlczoKICAgICAgICAgICAgICAgICAgICAgaS5r
aWxsKCkKIApAQCAtNjM4LDcgKzg0Myw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihk
cml2ZXIuRHJpdmVyKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgc3RvcChz
ZWxmKToKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnZm9y
Y2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tB
R0VdKQogCiAgICAgICAgIGlmIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3M6CiAgICAgICAgICAg
ICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLmtpbGwoKQpAQCAtNjUwLDkgKzg1NSw5IEBAIGNs
YXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKIAogICAgICAgICBzdXBl
cihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnN0b3AoKQogCi0gICAgICAgIGlmIHNlbGYu
X2ZvcndhcmRlcl9wcm9jZXNzOgotICAgICAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3Mu
a2lsbCgpCi0gICAgICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2VzcyA9IE5vbmUKKyAgICAg
ICAgaWYgc2VsZi5fZm9yd2FyZGVyOgorICAgICAgICAgICAgc2VsZi5fZm9yd2FyZGVyLmNsb3Nl
KCkKKyAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlciA9IE5vbmUKIAogICAgICAgICBpZiBzZWxm
Ll9oYXNfc2V0dXA6CiAgICAgICAgICAgICBpZiBub3QgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9s
b29wX3dpdGhfdGltZW91dChzZWxmLl9yZW1vdmVfYWxsX3BpcGVzLCBEUlRfU1RBUlRfU1RPUF9U
SU1FT1VUX1NFQ1MpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5p
dF9fLnB5CmluZGV4IDE3YWU2MmEwN2ViNzRjMWM3ZmZmNTg5MjFmYWMwZWFlZWY5MjlkZGEuLmVm
NThkZTA2OGQ0OGE0NjIxMmVmNjkyNjlkYTgxMzJmNmIxMWRkMDkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKQEAgLTc0LDYgKzc0LDggQEAgY2xh
c3MgQXV0b2luc3RhbGxJbXBvcnRIb29rKG9iamVjdCk6CiAgICAgICAgICMgb3JkZXIgZm9yIGF1
dG9pbnN0YWxsX2V2ZXJ5dGhpbmcoKSwgYmVsb3csIHRvIHdvcmsgcHJvcGVybHkuCiAgICAgICAg
IGlmICcubWVjaGFuaXplJyBpbiBmdWxsbmFtZToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxf
bWVjaGFuaXplKCkKKyAgICAgICAgaWYgJy5wZXhwZWN0JyBpbiBmdWxsbmFtZToKKyAgICAgICAg
ICAgIHNlbGYuX2luc3RhbGxfcGV4cGVjdCgpCiAgICAgICAgIGVsaWYgJy5wZXA4JyBpbiBmdWxs
bmFtZToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcGVwOCgpCiAgICAgICAgIGVsaWYgJy5w
eWxpbnQnIGluIGZ1bGxuYW1lOgpAQCAtODksNiArOTEsMTAgQEAgY2xhc3MgQXV0b2luc3RhbGxJ
bXBvcnRIb29rKG9iamVjdCk6CiAgICAgICAgIGVsaWYgJy53ZWJwYWdlcmVwbGF5JyBpbiBmdWxs
bmFtZToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfd2VicGFnZXJlcGxheSgpCiAKKyAgICBk
ZWYgX2luc3RhbGxfcGV4cGVjdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2luc3RhbGwo
Imh0dHA6Ly9wZXhwZWN0LnNvdXJjZWZvcmdlLm5ldC9wZXhwZWN0LTIuMy50YXIuZ3oiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicGV4cGVjdC0yLjMiKQorCiAgICAgZGVmIF9pbnN0
YWxsX21lY2hhbml6ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2luc3RhbGwoImh0dHA6
Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21lY2hhbml6ZS0w
LjIuNS50YXIuZ3oiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVjaGFuaXplLTAu
Mi41L21lY2hhbml6ZSIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171471</attachid>
            <date>2012-10-30 09:29:10 -0700</date>
            <delta_ts>2012-11-01 09:21:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121030172735.patch</filename>
            <type>text/plain</type>
            <size>40374</size>
            <attacher name="felipe">felipeg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMTg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzM5N2U0NmFlZmVmMjFjNWE0OWIxNTJmOWRmMjc0NmEz
OGFlNjBmMS4uZWYzMWFlNGM2Njg1ZGU0NWQzMzUzYmNhMmQwYjQwMGIyODA1YWVmMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDEyLTEwLTIzICBGZWxpcGUgR29sZHN0ZWluICA8ZmVsaXBlZ0BjaHJvbWl1bS5jb20+
CisKKyAgICAgICAgW0Nocm9taXVtXSBVc2UgdGhlIG5ldyBmb3J3YXJkZXIyIGZvciBydW5uaW5n
IGxheW91dCB0ZXN0cyBvbiBBbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05OTU4OAorCisgICAgICAgICJSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4iCisKKyAgICAgICAgSXTigJlzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gcnVuIHRo
ZSBDbGFuayB0ZXN0IHN1aXRlIG9uCisgICAgICAgIHByb2R1Y3Rpb24gZGV2aWNlcywgaS5lLiBu
b24tcm9vdGVkIHN5c3RlbSBpbWFnZXMgdGhhdCBhcmUgdXNlZCBieQorICAgICAgICBvdXIgdXNl
cnMsIHNpbmNlIHdlIGN1cnJlbnRseSB1c2UgYSBwcm9ncmFtIGNhbGxlZCAiZm9yd2FyZGVyIgor
ICAgICAgICB3aGljaCBtYWtlcyB1c2Ugb2YgYW4gYWRiIGhhY2sgb25seSBhdmFpbGFibGUgaW4g
cm9vdGVkIGRldmljZXMuCisgICAgICAgIFRoZSBmb3dhcmRlcjIgc29sdmVzIHRoaXMgcHJvYmxl
bS4gIFRoZSBmb3J3YXJkZXIgaXMgYSB3YXkgdG8KKyAgICAgICAgZm9yd2FyZCBUQ1AgY29ubmVj
dGlvbnMgZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBob3N0IHRocm91Z2ggdGhlCisgICAgICAgIGFk
YiBVU0IgY29ubmVjdGlvbiwgdG8gYmUgdXNlZCBpbiB0ZXN0aW5nLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5OgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0
LmNoZWNrX2J1aWxkKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3BhdGhfdG9fZGV2
aWNlX2ZvcndhcmRlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9wYXRoX3RvX2hv
c3RfZm9yd2FyZGVyKToKKyAgICAgICAgKGxvZ19lcnJvcik6CisgICAgICAgIChsb2dfZGVidWcp
OgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5f
X2luaXRfXyk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuZ2V0X2RldmljZV9zZXJpYWwpOgor
ICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1c2hfbWQ1c3VtKToKKyAgICAgICAgKEFuZHJvaWRD
b21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVkKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5y
dW5fYWRiX2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnJ1bl9ob3N0X2NvbW1h
bmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2RldmljZSk6Cisg
ICAgICAgIChBbmRyb2lkQ29tbWFuZHMuZ2V0X3BvcnQpOgorICAgICAgICAoQW5kcm9pZENvbW1h
bmRzLl9wdXNoX3RvX2RldmljZSk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuX2V4dHJhY3Rf
aGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCk6CisgICAgICAgIChGb3J3YXJkZXIpOgorICAgICAg
ICAoRm9yd2FyZGVyLl9faW5pdF9fKToKKyAgICAgICAgKEZvcndhcmRlci5fa2lsbF9ob3N0X2Zv
cndhcmRlcl9ibG9ja2luZyk6CisgICAgICAgIChGb3J3YXJkZXIuX2tpbGxfZGV2aWNlX2Zvcndh
cmRlcl9ibG9ja2luZyk6CisgICAgICAgIChGb3J3YXJkZXIuX2Nsb3NlX3Byb2Nlc3MpOgorICAg
ICAgICAoRm9yd2FyZGVyLmRldmljZV9wb3J0X2Zvcl9ob3N0X3BvcnQpOgorICAgICAgICAoRm9y
d2FyZGVyLmNsb3NlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2luaXRfXyk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1c2hfZGF0YV9pZl9uZWVkZWQpOgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zZXR1cF90ZXN0KToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5fYWJvcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9wdXNoX2V4ZWN1dGFibGUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9w
dXNoX2ZvbnRzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF90ZXN0X3Jl
c291cmNlcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3BlcmZvcm1h
bmNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fdGVhcmRvd25fcGVyZm9ybWFu
Y2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9jb21tYW5kX3dyYXBwZXIpOgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9nZXRfbGFzdF9zdGFja3RyYWNlKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2xvZ2NhdCk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9hbGxfcGlwZXNfY3JlYXRlZCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X3JlbW92ZV9hbGxfcGlwZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFy
dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2UpOgorICAgICAg
ICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydF9vbmNlLmRlYWRsb2NrX2RldGVjdG9yKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5zdG9wKToKKwogMjAxMi0xMC0yMyAgU2lt
b24gUGVuYSAgPHNwZW5hQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQWRkaW5n
IG15c2VsZiBhcyBjb21taXR0ZXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKaW5kZXggNjM4OWZl
YjYzNTdjZTNjYzQ5MGMwMmM2OTJjNWZmODFkNjc3YTQ5Ni4uMGExYzlmOGE1YWEwMjUwODg1ODNj
NWMxN2NhZmY0NTk2NTA1ZDQyMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQpAQCAtNTQsNyAr
NTQsNyBAQCBDT01NQU5EX0xJTkVfRklMRSA9IERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hy
b21lLW5hdGl2ZS10ZXN0cy1jb21tYW5kLWxpbmUnCiAjIElmIGNoYW5nZSB0aGlzLCBtdXN0IGFs
c28gY2hhbmdlIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQu
Y3BwCiAjIGFuZCBDaHJvbWl1bSdzIHdlYmtpdC9zdXBwb3J0L3BsYXRmb3JtX3N1cHBvcnRfYW5k
cm9pZC5jYy4KIERFVklDRV9EUlRfRElSID0gREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdkcnQv
JwotREVWSUNFX0ZPUldBUkRFUl9QQVRIID0gREVWSUNFX0RSVF9ESVIgKyAnZm9yd2FyZGVyJwor
REVWSUNFX0ZPUldBUkRFUl9QQVRIID0gREVWSUNFX0RSVF9ESVIgKyAnZGV2aWNlX2ZvcndhcmRl
cicKIAogIyBQYXRoIG9uIHRoZSBkZXZpY2Ugd2hlcmUgdGhlIHRlc3QgZnJhbWV3b3JrIHdpbGwg
Y3JlYXRlIHRoZSBmaWZvIHBpcGVzLgogREVWSUNFX0ZJRk9fUEFUSCA9ICcvZGF0YS9kYXRhL29y
Zy5jaHJvbWl1bS5uYXRpdmVfdGVzdC9maWxlcy8nCkBAIC03NCw3ICs3NCwxOCBAQCBURVNUX1BB
VEhfUFJFRklYID0gJy9hbGwtdGVzdHMnCiAjIDgwMDAsIDgwODAgYW5kIDg0NDMgYXJlIGZvciBo
dHRwL2h0dHBzIHRlc3RzLgogIyA4ODgwIGFuZCA5MzIzIGFyZSBmb3Igd2Vic29ja2V0IHRlc3Rz
CiAjIChzZWUgaHR0cF9zZXJ2ZXIucHksIGFwYWNoZV9odHRwX3NlcnZlci5weSBhbmQgd2Vic29j
a2V0X3NlcnZlci5weSkuCi1GT1JXQVJEX1BPUlRTID0gJzgwMDAgODA4MCA4NDQzIDg4ODAgOTMy
MycKK0ZPUldBUkRfUE9SVFMgPSAoODAwMCwgODA4MCwgODQ0MywgODg4MCwgOTMyMykKKworIyBX
ZSBydW4gb25lIEZvcndhcmRlciBwZXIgZGV2aWNlIC8gd29ya2VyLCBhbmQgd2UgbmVlZCB0byBh
bGxvY2F0ZSBvbmUgY29udHJvbAorIyBwb3J0IGZvciBlYWNoIEZvcndhcmRlci4gVGhlc2UgY29u
c3RhbnRzIGRlZmluZSB0aGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZS4KK0ZPUldBUkRFUl9D
T05UUk9MX1BPUlRfQkVHSU4gPSAyMDAwMAorRk9SV0FSREVSX0NPTlRST0xfUE9SVF9FTkQgPSAy
MTAwMAorCitGT1JXQVJERVJfS0lMTF9USU1FT1VUX1NFQ1MgPSA1CisKKyMgVW5peCBBYnN0cmFj
dCBzb2NrZXQgcGF0aDoKK0RFVklDRV9BREJfQ09OVFJPTF9QT1JUID0gJ2Nocm9tZV9kZXZpY2Vf
Zm9yd2FyZGVyJworRk9SV0FSREVSX1RJTUVPVVRfU0VDUyA9IDMwCiAKIE1TX1RSVUVUWVBFX0ZP
TlRTX0RJUiA9ICcvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvJwogTVNf
VFJVRVRZUEVfRk9OVFNfUEFDS0FHRSA9ICd0dGYtbXNjb3JlZm9udHMtaW5zdGFsbGVyJwpAQCAt
MTQ5LDYgKzE2MCwxNSBAQCBURVNUX1JFU09VUkNFU19UT19QVVNIID0gWwogTUQ1U1VNX0RFVklD
RV9GSUxFX05BTUUgPSAnbWQ1c3VtX2JpbicKIE1ENVNVTV9ERVZJQ0VfUEFUSCA9ICcvZGF0YS9s
b2NhbC90bXAvJyArIE1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FCiAKKworZGVmIGxvZ19lcnJvcihk
ZXZpY2Vfc2VyaWFsLCBtZXNzYWdlKToKKyAgICBfbG9nLmVycm9yKCdbJXNdICVzJyAlIChkZXZp
Y2Vfc2VyaWFsLCBtZXNzYWdlKSkKKworCitkZWYgbG9nX2RlYnVnKGRldmljZV9zZXJpYWwsIG1l
c3NhZ2UpOgorICAgIF9sb2cuZGVidWcoJ1slc10gJXMnICUgKGRldmljZV9zZXJpYWwsIG1lc3Nh
Z2UpKQorCisKIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0
KToKICAgICBwb3J0X25hbWUgPSAnY2hyb21pdW0tYW5kcm9pZCcKIApAQCAtMjA0LDcgKzIyNCw4
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAg
ICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAgIHJlc3VsdCA9IHN1
cGVyKENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLmNoZWNrX2J1aWxkKG5lZWRzX2h0dHApCiAg
ICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYuX3BhdGhfdG9fbWQ1
c3VtKCksICdtZDVzdW0gdXRpbGl0eScpIGFuZCByZXN1bHQKLSAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5fcGF0aF90b19mb3J3YXJkZXIoKSwgJ2ZvcndhcmRl
ciB1dGlsaXR5JykgYW5kIHJlc3VsdAorICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19maWxl
X2V4aXN0cyhzZWxmLl9wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKSwgJ2RldmljZV9mb3J3YXJk
ZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmls
ZV9leGlzdHMoc2VsZi5fcGF0aF90b19ob3N0X2ZvcndhcmRlcigpLCAnaG9zdF9mb3J3YXJkZXIg
dXRpbGl0eScpIGFuZCByZXN1bHQKICAgICAgICAgaWYgbm90IHJlc3VsdDoKICAgICAgICAgICAg
IF9sb2cuZXJyb3IoJ0ZvciBjb21wbGV0ZSBBbmRyb2lkIGJ1aWxkIHJlcXVpcmVtZW50cywgcGxl
YXNlIHNlZTonKQogICAgICAgICAgICAgX2xvZy5lcnJvcignJykKQEAgLTI3OCw4ICsyOTksMTEg
QEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAg
IGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICBk
ZWYgX3BhdGhfdG9fZm9yd2FyZGVyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRf
cGF0aCgnZm9yd2FyZGVyJykKKyAgICBkZWYgX3BhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2RldmljZV9mb3J3YXJkZXInKQor
CisgICAgZGVmIF9wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fYnVpbGRfcGF0aCgnaG9zdF9mb3J3YXJkZXInKQogCiAgICAgZGVmIF9wYXRoX3RvX21k
NXN1bShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoTUQ1U1VNX0RFVklD
RV9GSUxFX05BTUUpCkBAIC0zMjMsNiArMzQ3LDM1NSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQ
b3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIHJldHVybiBkZXZpY2VzW3dvcmtl
cl9udW1iZXJdCiAKIAorY2xhc3MgQW5kcm9pZENvbW1hbmRzKG9iamVjdCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydAorICAgICAgICBzZWxmLl9kZXZpY2Vfc2VyaWFsID0gc2VsZi5fcG9ydC5fZ2V0X2Rldmlj
ZV9zZXJpYWwod29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5fYWRiX2NvbW1hbmQgPSBbJ2Fk
YicsICctcycsIHNlbGYuX2RldmljZV9zZXJpYWxdCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2dv
dmVybm9yc19maWxlX2NvbnRlbnRzID0ge30KKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAg
ICAgICBzZWxmLl90ZWFyZG93bl9wZXJmb3JtYW5jZSgpCisKKyAgICBkZWYgZ2V0X2RldmljZV9z
ZXJpYWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2Vfc2VyaWFsCisKKyAgICBk
ZWYgX3B1c2hfbWQ1c3VtKHNlbGYpOgorICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9IHNlbGYu
X3BvcnQuX3BhdGhfdG9fbWQ1c3VtKCkKKyAgICAgICAgaWYgbm90IHNlbGYuZmlsZV9leGlzdHNf
b25fZGV2aWNlKE1ENVNVTV9ERVZJQ0VfUEFUSCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5f
cHVzaF90b19kZXZpY2Uoc2VsZi5fbWQ1c3VtX3BhdGgsIE1ENVNVTV9ERVZJQ0VfUEFUSCk6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBwdXNoIG1kNXN1
bSB0byBkZXZpY2UnKQorCisgICAgZGVmIF9zZXR1cF9wZXJmb3JtYW5jZShzZWxmKToKKyAgICAg
ICAgIyBEaXNhYmxlIENQVSBzY2FsaW5nIGFuZCBkcm9wIHJhbSBjYWNoZSB0byByZWR1Y2Ugbm9p
c2UgaW4gdGVzdHMuCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnNfZmls
ZV9jb250ZW50czoKKyAgICAgICAgICAgIGdvdmVybm9yX2ZpbGVzID0gc2VsZi5ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdscycsIFNDQUxJTkdfR09WRVJOT1JTX1BBVFRFUk5dKQorICAgICAg
ICAgICAgaWYgZ292ZXJub3JfZmlsZXMuZmluZCgnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScp
ID09IC0xOgorICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGdvdmVybm9yX2ZpbGVzLnNwbGl0
KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9yc19maWxlX2Nv
bnRlbnRzW2ZpbGVdID0gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxl
XSkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2VjaG8nLCAncGVyZm9ybWFuY2UnLCAnPicsIGZpbGVdKQorCisgICAgZGVmIF90ZWFy
ZG93bl9wZXJmb3JtYW5jZShzZWxmKToKKyAgICAgICAgZm9yIGZpbGUsIG9yaWdpbmFsX2NvbnRl
bnQgaW4gc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzX2ZpbGVfY29udGVudHMuaXRlbXMoKToKKyAg
ICAgICAgICAgIHNlbGYucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobycsIG9yaWdpbmFs
X2NvbnRlbnQsICc+JywgZmlsZV0pCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9yc19m
aWxlX2NvbnRlbnRzID0ge30KKworICAgIGRlZiBzZXR1cF9kZXZpY2Uoc2VsZik6CisgICAgICAg
IHNlbGYuX3B1c2hfbWQ1c3VtKCkKKyAgICAgICAgc2VsZi5fc2V0dXBfcGVyZm9ybWFuY2UoKQor
CisgICAgZGVmIHB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZiwgaG9zdF9maWxlLCBkZXZpY2VfZmls
ZSk6CisgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhob3N0X2ZpbGUpCisgICAgICAgIGRl
dmljZV9oYXNoZXMgPSBzZWxmLl9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQoCisg
ICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmV4ZWN1dGl2ZS5wb3BlbihzZWxmLl9hZGJf
Y29tbWFuZCArIFsnc2hlbGwnLCBNRDVTVU1fREVWSUNFX1BBVEgsIGRldmljZV9maWxlXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUpLnN0ZG91dCkKKyAgICAgICAgaG9zdF9oYXNoZXMgPSBzZWxmLl9leHRyYWN0
X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQoCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5o
b3N0LmV4ZWN1dGl2ZS5wb3BlbihhcmdzPVsnJXNfaG9zdCcgJSBzZWxmLl9tZDVzdW1fcGF0aCwg
aG9zdF9maWxlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dCkKKyAgICAgICAgaWYgaG9zdF9oYXNo
ZXMgYW5kIGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgc2VsZi5fcHVzaF90b19kZXZpY2UoaG9zdF9maWxlLCBkZXZpY2VfZmlsZSkKKwor
ICAgIGRlZiBydW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgor
ICAgICAgICBsb2dfZGVidWcoc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1J1biBhZGIgY29tbWFuZDog
JyArIHN0cihjbWQpKQorICAgICAgICBpZiBpZ25vcmVfZXJyb3I6CisgICAgICAgICAgICBlcnJv
cl9oYW5kbGVyID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcgorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IE5vbmUKKyAgICAgICAgcmVzdWx0ID0g
c2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYuX2FkYl9jb21tYW5kICsgY21k
LCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCisgICAgICAgICMgTGltaXQgdGhlIGxlbmd0
aCB0byBhdm9pZCB0b28gdmVyYm9zZSBvdXRwdXQgb2YgY29tbWFuZHMgbGlrZSAnYWRiIGxvZ2Nh
dCcgYW5kICdjYXQgL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmUwMScKKyAgICAgICAgIyB3aG9z
ZSBvdXRwdXRzIGFyZSBub3JtYWxseSBwcmludGVkIGluIGxhdGVyIGxvZ3MuCisgICAgICAgIGxv
Z19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUnVuIGFkYiByZXN1bHQ6ICcgKyByZXN1bHRb
OjgwXSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHJ1bl9ob3N0X2NvbW1hbmQo
c2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6Cisg
ICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUnVuIGhvc3QgY29tbWFuZDog
JyArIHN0cihjbWQpKQorICAgICAgICBpZiBpZ25vcmVfZXJyb3I6CisgICAgICAgICAgICBlcnJv
cl9oYW5kbGVyID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcgorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3BvcnQuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3Jf
aGFuZGxlciwgcmV0dXJuX2V4aXRfY29kZT1yZXR1cm5fZXhpdF9jb2RlKQorCisgICAgZGVmIGZp
bGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CisgICAgICAgIGFzc2Vy
dCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRoKCcvJykKKyAgICAgICAgcmV0dXJuIHNlbGYucnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0g
ZnVsbF9maWxlX3BhdGgKKworICAgIGRlZiBwYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKQor
CisgICAgZGVmIHBhdGhfdG9faG9zdF9mb3J3YXJkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9wb3J0Ll9wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKCkKKworICAgIGRlZiBfcHVzaF90b19k
ZXZpY2Uoc2VsZiwgaG9zdF9wYXRoLCBkZXZpY2VfcGF0aCwgaWdub3JlX2Vycm9yPUZhbHNlKToK
KyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2FkYl9jb21tYW5kKFsncHVzaCcsIGhvc3RfcGF0aCwg
ZGV2aWNlX3BhdGhdLCBpZ25vcmVfZXJyb3IpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IF9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQobWQ1c3VtX291dHB1dCk6CisgICAg
ICAgIGFzc2VydCBtZDVzdW1fb3V0cHV0CisgICAgICAgIHJldHVybiBbbGluZS5zcGxpdCgnICAn
KVswXSBmb3IgbGluZSBpbiBtZDVzdW1fb3V0cHV0XQorCisKK2NsYXNzIFBvcnRzKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZV9wb3J0LCBob3N0X3BvcnQpOgorICAgICAg
ICBzZWxmLmRldmljZV9wb3J0ID0gZGV2aWNlX3BvcnQKKyAgICAgICAgc2VsZi5ob3N0X3BvcnQg
PSBob3N0X3BvcnQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJygl
ZCwgJWQpJyAlIChzZWxmLmRldmljZV9wb3J0LCBzZWxmLmhvc3RfcG9ydCkKKworCitjbGFzcyBQ
cm9jZXNzRXhwZWN0KG9iamVjdCk6CisgICAgX1NVQ0NFU1MgPSAwCisgICAgX0ZBSUxVUkUgPSAx
CisgICAgX0VPRiA9IDIKKyAgICBfVElNRU9VVCA9IDMKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB0aW1lb3V0X3NlY3MsIGFuZHJvaWRfcG9ydCwgbmFtZSwgY29tbWFuZCk6CisgICAgICAgIHNl
bGYuX3RpbWVvdXRfc2VjcyA9IHRpbWVvdXRfc2VjcworICAgICAgICBzZWxmLl9wb3J0ID0gYW5k
cm9pZF9wb3J0CisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvcihhbmRyb2lkX3BvcnQsIG5hbWUsIGNvbW1hbmQpCisgICAgICAgIHNl
bGYuX3Byb2Nlc3Muc3RhcnQoKQorICAgICAgICBzZWxmLl9iZWZvcmUgPSAnJworICAgICAgICBz
ZWxmLl9tYXRjaCA9IE5vbmUKKworICAgIGRlZiBfcmVhZF9saW5lKHNlbGYsIGRlYWRsaW5lKToK
KyAgICAgICAgbGluZSA9IHNlbGYuX3Byb2Nlc3MucmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVy
cl9saW5lKGRlYWRsaW5lKQorICAgICAgICBpZiBsaW5lWzBdOgorICAgICAgICAgICAgcmV0dXJu
IGxpbmVbMF0KKyAgICAgICAgZWxpZiBsaW5lWzFdOgorICAgICAgICAgICAgcmV0dXJuIGxpbmVb
MV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0
X2FsbF9vdXRwdXQoc2VsZik6CisgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyBzZWxm
Ll90aW1lb3V0X3NlY3MKKyAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRfbGluZShkZWFkbGluZSkK
KyAgICAgICAgd2hpbGUgbGluZToKKyAgICAgICAgICAgIHNlbGYuX2JlZm9yZSArPSBsaW5lCisg
ICAgICAgICAgICBsaW5lID0gc2VsZi5fcmVhZF9saW5lKGRlYWRsaW5lKQorICAgICAgICByZXR1
cm4gc2VsZi5fYmVmb3JlCisKKyAgICBkZWYgZ2V0X21hdGNoKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fbWF0Y2gKKworICAgIGRlZiBleHBlY3Qoc2VsZiwgc3VjY2Vzc19yZSwgZmFpbHVy
ZV9yZSk6CisgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0X3Nl
Y3MKKyAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCBkZWFkbGluZToKKyAgICAgICAgICAgIGxp
bmUgPSBzZWxmLl9yZWFkX2xpbmUoZGVhZGxpbmUpCisgICAgICAgICAgICBpZiBub3QgbGluZToK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5fYmVmb3JlICs9IGxpbmUK
KyAgICAgICAgICAgIGZhaWx1cmVfbSA9IGZhaWx1cmVfcmUubWF0Y2gobGluZSkKKyAgICAgICAg
ICAgIGlmIGZhaWx1cmVfbToKKyAgICAgICAgICAgICAgICBzZWxmLl9tYXRjaCA9IGZhaWx1cmVf
bQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9GQUlMVVJFCisgICAgICAgICAgICBzdWNj
ZXNzX20gPSBzdWNjZXNzX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBzdWNjZXNzX206
CisgICAgICAgICAgICAgICAgc2VsZi5fbWF0Y2ggPSBzdWNjZXNzX20KKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2VsZi5fU1VDQ0VTUworICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnRpbWVkX291
dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9USU1FT1VUCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fRU9GCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAg
IHNlbGYuX3Byb2Nlc3Muc3RvcCgwLjApCisKKworY2xhc3MgRm9yd2FyZGVyKG9iamVjdCk6Cisg
ICAgIiIiQ2xhc3MgdG8gbWFuYWdlIHBvcnQgZm9yd2FyZHMgZnJvbSB0aGUgZGV2aWNlIHRvIHRo
ZSBob3N0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFuZHJvaWRfY21kLCB3b3JrZXJf
bnVtYmVyLCBwb3J0X3BhaXJzLCBob3N0X25hbWUpOgorICAgICAgICAiIiJGb3J3YXJkcyBUQ1Ag
cG9ydHMgb24gdGhlIGRldmljZSBiYWNrIHRvIHRoZSBob3N0LgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgICBhbmRyb2lkX2NtZDogSW5zdGFuY2Ugb2YgQW5kcm9pZENvbW1hbmRzLgorICAg
ICAgICAgICAgd29ya2VyX251bWJlcjogSW50ZWdlciwgd29ya2VyIG51bWJlci4KKyAgICAgICAg
ICAgIHBvcnRfcGFpcnM6IEEgbGlzdCBvZiBQb3J0cyB0byBmb3J3YXJkLiBOb3RlIHRoYXQgeW91
IGNhbiBzcGVjaWZ5IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgZGV2aWNlX3BvcnQs
IGluIHdoaWNoIGNhc2UgYSBwb3J0IHdpbGwgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR5
bmFtaWNhbGx5IGFzc2lnbmVkIG9uIHRoZSBkZXZpY2UuIFlvdSBjYW4gZ2V0IHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRoZSBhc3NpZ25lZCBwb3J0IHVzaW5nIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX3BvcnRfZm9yX2hvc3RfcG9ydCBtZXRob2Qu
CisgICAgICAgICAgICBob3N0X25hbWU6IEFkZHJlc3MgdG8gZm9yd2FyZCB0bywgbXVzdCBiZSBh
ZGRyZXNzYWJsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBob3N0IG1hY2hpbmUu
IFVzdWFsbHkgdXNlIGxvb3BiYWNrICcxMjcuMC4wLjEnLgorCisgICAgICAgIFJhaXNlczoKKyAg
ICAgICAgICAgIEV4Y2VwdGlvbiBvbiBmYWlsdXJlIHRvIGZvcndhcmQgdGhlIHBvcnQuCisgICAg
ICAgICIiIgorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZCA9IGFuZHJvaWRfY21kCisgICAgICAg
IHNlbGYuX2hvc3RfdG9fZGV2aWNlX3BvcnRfbWFwID0ge30KKyAgICAgICAgc2VsZi5faG9zdF9w
cm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2VzcyA9IE5vbmUKKyAgICAg
ICAgc2VsZi5fYWRiX2ZvcndhcmRfcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZGV2aWNl
X3NlcmlhbCA9IHNlbGYuX2FuZHJvaWRfY21kLmdldF9kZXZpY2Vfc2VyaWFsKCkKKworICAgICAg
ICBhc3NlcnQoRk9SV0FSREVSX0NPTlRST0xfUE9SVF9CRUdJTiArIHdvcmtlcl9udW1iZXIgPCBG
T1JXQVJERVJfQ09OVFJPTF9QT1JUX0VORCkKKworICAgICAgICBzZWxmLl9ob3N0X2FkYl9jb250
cm9sX3BvcnQgPSBzZWxmLl9hbGxvY2F0ZV9hZGJfY29udHJvbF9wb3J0KHdvcmtlcl9udW1iZXIp
CisgICAgICAgIGlmIG5vdCBzZWxmLl9ob3N0X2FkYl9jb250cm9sX3BvcnQ6CisgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBhbGxvY2F0ZSBhbiBhZGIgY29udHJvbCBwb3J0
IG9uIHRoZSBob3N0LicpCisKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lm
X25lZWRlZCgKKyAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnBhdGhfdG9fZGV2aWNlX2Zv
cndhcmRlcigpLAorICAgICAgICAgICAgREVWSUNFX0ZPUldBUkRFUl9QQVRIKQorICAgICAgICBz
ZWxmLl9ob3N0X2ZvcndhcmRlcl9wYXRoID0gc2VsZi5fYW5kcm9pZF9jbWQucGF0aF90b19ob3N0
X2ZvcndhcmRlcigpCisKKyAgICAgICAgZm9yd2FyZF9zdHJpbmcgPSBbJyVkOiVkOiVzJyAlIChw
YWlyLmRldmljZV9wb3J0LCBwYWlyLmhvc3RfcG9ydCwgaG9zdF9uYW1lKSBmb3IgcGFpciBpbiBw
b3J0X3BhaXJzXQorCisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnRm9y
d2FyZGluZyBwb3J0czogJXMnICUgc3RyKGZvcndhcmRfc3RyaW5nKSkKKworICAgICAgICBob3N0
X2ZvcndhcmRlcl9mbGFncyA9IFsnLS1hZGJfcG9ydD0lcycgJSAoc2VsZi5faG9zdF9hZGJfY29u
dHJvbF9wb3J0KV0gKyBmb3J3YXJkX3N0cmluZworICAgICAgICBob3N0X3BhdHRlcm4gPSAnaG9z
dF9mb3J3YXJkZXIuKicgKyAnLionLmpvaW4oaG9zdF9mb3J3YXJkZXJfZmxhZ3MpCisKKyAgICAg
ICAgIyBGSVhNRTogUmF0aGVyIHRoYW4gdXNpbmcgYSBibG9ja2luZyBraWxsKCkgaGVyZSwgdGhl
IGRldmljZQorICAgICAgICAjIGZvcndhcmRlciBjb3VsZCB0cnkgdG8gYmluZCB0aGUgVW5peCBE
b21haW4gU29ja2V0IHVudGlsIGl0IHN1Y2NlZWRzIG9yCisgICAgICAgICMgd2hpbGUgaXQgZmFp
bHMgYmVjYXVzZSB0aGUgc29ja2V0IGlzIGFscmVhZHkgYm91bmQgKHdpdGggYXBwcm9wcmlhdGUK
KyAgICAgICAgIyB0aW1lb3V0IGhhbmRsaW5nIG9idmlvdXNseSkuCisgICAgICAgIHNlbGYuX2tp
bGxfaG9zdF9mb3J3YXJkZXJfYmxvY2tpbmcoaG9zdF9wYXR0ZXJuLCBGT1JXQVJERVJfS0lMTF9U
SU1FT1VUX1NFQ1MpCisgICAgICAgIHNlbGYuX2tpbGxfZGV2aWNlX2ZvcndhcmRlcl9ibG9ja2lu
ZyhGT1JXQVJERVJfS0lMTF9USU1FT1VUX1NFQ1MpCisKKyAgICAgICAgc2VsZi5fYWRiX2Zvcndh
cmRfcHJvY2VzcyA9IFByb2Nlc3NFeHBlY3QoCisgICAgICAgICAgICBGT1JXQVJERVJfVElNRU9V
VF9TRUNTLAorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQuX3BvcnQsCisgICAgICAgICAg
ICAnYWRiX2ZvcndhcmRlcicsCisgICAgICAgICAgICBbJ2FkYicsICctcycsIHNlbGYuX2Rldmlj
ZV9zZXJpYWwsICdmb3J3YXJkJywgJ3RjcDolcycgJSBzZWxmLl9ob3N0X2FkYl9jb250cm9sX3Bv
cnQsICdsb2NhbGFic3RyYWN0OiVzJyAlIERFVklDRV9BREJfQ09OVFJPTF9QT1JUXSkKKworICAg
ICAgICBzZWxmLl9kZXZpY2VfcHJvY2VzcyA9IFByb2Nlc3NFeHBlY3QoCisgICAgICAgICAgICBG
T1JXQVJERVJfVElNRU9VVF9TRUNTLAorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQuX3Bv
cnQsCisgICAgICAgICAgICAnZGV2aWNlX2ZvcndhcmRlcicsCisgICAgICAgICAgICBbJ2FkYics
ICctcycsIHNlbGYuX2RldmljZV9zZXJpYWwsICdzaGVsbCcsICclcyAtRCAtLWFkYl9zb2NrPSVz
JyAlIChERVZJQ0VfRk9SV0FSREVSX1BBVEgsIERFVklDRV9BREJfQ09OVFJPTF9QT1JUKV0pCisg
ICAgICAgIGRldmljZV9zdWNjZXNzX3JlID0gcmUuY29tcGlsZSgnU3RhcnRpbmcgRGV2aWNlIEZv
cndhcmRlci4nKQorICAgICAgICBkZXZpY2VfZmFpbHVyZV9yZSA9IHJlLmNvbXBpbGUoJy4qOkVS
Uk9SOiguKiknKQorICAgICAgICByZXQgPSBzZWxmLl9kZXZpY2VfcHJvY2Vzcy5leHBlY3QoZGV2
aWNlX3N1Y2Nlc3NfcmUsIGRldmljZV9mYWlsdXJlX3JlKQorICAgICAgICBpZiByZXQgPT0gUHJv
Y2Vzc0V4cGVjdC5fRkFJTFVSRToKKyAgICAgICAgICAgIGVycm9yX21zZyA9IHN0cihzZWxmLl9k
ZXZpY2VfcHJvY2Vzcy5nZXRfbWF0Y2goKS5ncm91cCgxKSkKKyAgICAgICAgICAgIGxvZ19lcnJv
cihzZWxmLl9kZXZpY2Vfc2VyaWFsLCBzZWxmLl9kZXZpY2VfcHJvY2Vzcy5nZXRfYWxsX291dHB1
dCgpKQorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oJ0ZhaWxlZCB0byBzdGFydCBEZXZpY2UgRm9yd2FyZGVyIHdpdGggRXJyb3I6ICVzJyAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnKQorICAgICAgICBlbGlmIHJldCA9
PSBQcm9jZXNzRXhwZWN0Ll9FT0Y6CisgICAgICAgICAgICBsb2dfZXJyb3Ioc2VsZi5fZGV2aWNl
X3NlcmlhbCwgc2VsZi5fZGV2aWNlX3Byb2Nlc3MuZ2V0X2FsbF9vdXRwdXQoKSkKKyAgICAgICAg
ICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVk
IEVPRiB3aGlsZSB0cnlpbmcgdG8gc3RhcnQgRGV2aWNlIEZvcndhcmRlci4nKQorICAgICAgICBl
bGlmIHJldCA9PSBQcm9jZXNzRXhwZWN0Ll9USU1FT1VUOgorICAgICAgICAgICAgbG9nX2Vycm9y
KHNlbGYuX2RldmljZV9zZXJpYWwsIHNlbGYuX2RldmljZV9wcm9jZXNzLmdldF9hbGxfb3V0cHV0
KCkpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bignVGltZW91dCB3aGlsZSB0cnlpbmcgc3RhcnQgRGV2aWNlIEZvcndhcmRlcicpCisKKyAgICAg
ICAgc2VsZi5faG9zdF9wcm9jZXNzID0gUHJvY2Vzc0V4cGVjdCgKKyAgICAgICAgICAgIEZPUldB
UkRFUl9USU1FT1VUX1NFQ1MsCisgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5fcG9ydCwK
KyAgICAgICAgICAgICdob3N0X2ZvcndhcmRlcicsCisgICAgICAgICAgICBbc2VsZi5faG9zdF9m
b3J3YXJkZXJfcGF0aF0gKyBob3N0X2ZvcndhcmRlcl9mbGFncykKKyAgICAgICAgIyBSZWFkIHRo
ZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgdG8gZGV0ZXJtaW5lIHdoaWNoIGRldmljZSBwb3J0cyB3
aGVyZQorICAgICAgICAjIGZvcndhcmRlZCB0byB3aGljaCBob3N0IHBvcnRzIChuZWNlc3Nhcnkg
aWYKKyAgICAgICAgaG9zdF9zdWNjZXNzX3JlID0gcmUuY29tcGlsZSgnRm9yd2FyZGluZyBkZXZp
Y2UgcG9ydCAoXGQrKSB0byBob3N0IChcZCspOicpCisgICAgICAgIGhvc3RfZmFpbHVyZV9yZSA9
IHJlLmNvbXBpbGUoJy4qOkVSUk9SOiguKiknKQorICAgICAgICBmb3IgcGFpciBpbiBwb3J0X3Bh
aXJzOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5faG9zdF9wcm9jZXNzLmV4cGVjdChob3N0X3N1
Y2Nlc3NfcmUsIGhvc3RfZmFpbHVyZV9yZSkKKyAgICAgICAgICAgIGlmIHJldCA9PSBQcm9jZXNz
RXhwZWN0Ll9TVUNDRVNTOgorICAgICAgICAgICAgICAgIGRldmljZV9wb3J0ID0gaW50KHNlbGYu
X2hvc3RfcHJvY2Vzcy5nZXRfbWF0Y2goKS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBob3N0
X3BvcnQgPSBpbnQoc2VsZi5faG9zdF9wcm9jZXNzLmdldF9tYXRjaCgpLmdyb3VwKDIpKQorICAg
ICAgICAgICAgICAgIHNlbGYuX2hvc3RfdG9fZGV2aWNlX3BvcnRfbWFwW2hvc3RfcG9ydF0gPSBk
ZXZpY2VfcG9ydAorICAgICAgICAgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFs
LCAnRm9yd2FyZGluZyBkZXZpY2UgcG9ydDogJWQgdG8gaG9zdCBwb3J0OiAlZC4nICUgKGRldmlj
ZV9wb3J0LCBob3N0X3BvcnQpKQorICAgICAgICAgICAgZWxpZiByZXQgPT0gUHJvY2Vzc0V4cGVj
dC5fRkFJTFVSRToKKyAgICAgICAgICAgICAgICBsb2dfZXJyb3Ioc2VsZi5fZGV2aWNlX3Nlcmlh
bCwgc2VsZi5faG9zdF9wcm9jZXNzLmdldF9hbGxfb3V0cHV0KCkpCisgICAgICAgICAgICAgICAg
c2VsZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8g
Zm9yd2FyZCBwb3J0cyAlcycgJSAocG9ydF9wYWlycykpCisgICAgICAgICAgICBlbGlmIHJldCA9
PSBQcm9jZXNzRXhwZWN0Ll9FT0Y6CisgICAgICAgICAgICAgICAgbG9nX2Vycm9yKHNlbGYuX2Rl
dmljZV9zZXJpYWwsIHNlbGYuX2hvc3RfcHJvY2Vzcy5nZXRfYWxsX291dHB1dCgpKQorICAgICAg
ICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbign
VW5leHBlY3RlZCBFT0Ygd2hpbGUgdHJ5aW5nIHRvIGZvcndhcmQgcG9ydHMgJXMnICUgcG9ydF9w
YWlycykKKyAgICAgICAgICAgIGVsaWYgcmV0ID09IFByb2Nlc3NFeHBlY3QuX1RJTUVPVVQ6Cisg
ICAgICAgICAgICAgICAgbG9nX2Vycm9yKHNlbGYuX2RldmljZV9zZXJpYWwsIHNlbGYuX2hvc3Rf
cHJvY2Vzcy5nZXRfYWxsX291dHB1dCgpKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQor
ICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVGltZW91dCB3aGlsZSB0cnlpbmcgdG8g
Zm9yd2FyZCBwb3J0cyAlcycgJSBwb3J0X3BhaXJzKQorCisgICAgZGVmIF9hbGxvY2F0ZV9hZGJf
Y29udHJvbF9wb3J0KHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBwb3J0ID0gRk9SV0FS
REVSX0NPTlRST0xfUE9SVF9CRUdJTiArIHdvcmtlcl9udW1iZXIKKyAgICAgICAgd2hpbGUgcG9y
dCA8IEZPUldBUkRFUl9DT05UUk9MX1BPUlRfRU5EIGFuZCBzZWxmLl9pc19ob3N0X3BvcnRfdXNl
ZChwb3J0KToKKyAgICAgICAgICAgIHBvcnQgKz0gMQorICAgICAgICBpZiBwb3J0ID49IEZPUldB
UkRFUl9DT05UUk9MX1BPUlRfRU5EOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
cmV0dXJuIHBvcnQKKworICAgIGRlZiBfaXNfaG9zdF9wb3J0X3VzZWQoc2VsZiwgaG9zdF9wb3J0
KToKKyAgICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBob3N0IHBvcnQgaXMg
dXNlZCBvciBub3QuCisKKyAgICAgICAgVXNlcyAtbiAtUCB0byBpbmhpYml0IHRoZSBjb252ZXJz
aW9uIG9mIGhvc3QvcG9ydCBudW1iZXJzIHRvIGhvc3QvcG9ydCBuYW1lcy4KKyAgICAgICAgIiIi
CisgICAgICAgIHBvcnRfaW5mbyA9ICcoLil8KDEyN1wuMFwuMFwuMSl8KGxvY2FsaG9zdClcOiVk
JyAlIGhvc3RfcG9ydAorICAgICAgICByZV9wb3J0ID0gcmUuY29tcGlsZShwb3J0X2luZm8sIHJl
Lk1VTFRJTElORSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fYW5kcm9pZF9jbWQucnVuX2hvc3Rf
Y29tbWFuZChbJ2xzb2YnLCAnLW5QaTolZCcgJSBob3N0X3BvcnRdLCBpZ25vcmVfZXJyb3I9VHJ1
ZSwgcmV0dXJuX2V4aXRfY29kZT1GYWxzZSkKKyAgICAgICAgaWYgcmVfcG9ydC5maW5kYWxsKG91
dHB1dCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiBfa2lsbF9ob3N0X2ZvcndhcmRlcl9ibG9ja2luZyhzZWxmLCBob3N0X3BhdHRlcm4s
IHRpbWVvdXRfc2VjKToKKyAgICAgICAgIiIiS2lsbHMgYW55IGV4aXN0aW5nIGhvc3QgZm9yd2Fy
ZGVycyB1c2luZyB0aGUgcHJvdmlkZWQgcGF0dGVybi4KKworICAgICAgICBOb3RlIHRoYXQgdGhp
cyB3YWl0cyB1bnRpbCB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzLgorICAgICAgICAiIiIKKyAgICAg
ICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2hvc3RfY29tbWFuZChbJ3BraWxsJywgJy1mJywgaG9z
dF9wYXR0ZXJuXSkKKyAgICAgICAgZWxhcHNlZF9zZWNvbmRzID0gMAorICAgICAgICB3YWl0X3Bl
cmlvZF9zZWNvbmRzID0gMC4xCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9hbmRyb2lkX2NtZC5y
dW5faG9zdF9jb21tYW5kKFsncGdyZXAnLCAnLWYnLCBob3N0X3BhdHRlcm5dKSBhbmQgKGVsYXBz
ZWRfc2Vjb25kcyA8IHRpbWVvdXRfc2VjKToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAod2FpdF9w
ZXJpb2Rfc2Vjb25kcykKKyAgICAgICAgICAgIGVsYXBzZWRfc2Vjb25kcyArPSB3YWl0X3Blcmlv
ZF9zZWNvbmRzCisgICAgICAgIGlmIGVsYXBzZWRfc2Vjb25kcyA+PSB0aW1lb3V0X3NlYzoKKyAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVGltZWQgb3V0IHdoaWxlIGtpbGxpbmcgJyArIGhv
c3RfcGF0dGVybikKKworICAgIGRlZiBfZXh0cmFjdF9waWQoc2VsZiwgcHNfb3V0cHV0LCBwcm9j
ZXNzX25hbWUpOgorICAgICAgICBwaWRzID0gW10KKyAgICAgICAgZm9yIGxpbmUgaW4gcHNfb3V0
cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgZGF0YSA9IGxpbmUuc3BsaXQoKQorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZSBpbiBkYXRhWy0xXTog
ICMgbmFtZSBpcyBpbiB0aGUgbGFzdCBjb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgaWYgcHJv
Y2Vzc19uYW1lID09IGRhdGFbLTFdOgorICAgICAgICAgICAgICAgICAgICAgICAgcGlkcy5pbnNl
cnQoMCwgZGF0YVsxXSkgICMgUElEIGlzIGluIHRoZSBzZWNvbmQgY29sdW1uCisgICAgICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWRzLmFwcGVuZChkYXRh
WzFdKQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgcGFz
cworICAgICAgICByZXR1cm4gcGlkcworCisgICAgZGVmIF9raWxsX2RldmljZV9mb3J3YXJkZXJf
YmxvY2tpbmcoc2VsZiwgdGltZW91dF9zZWMpOgorICAgICAgICAiIiJLaWxscyBhbnkgZXhpc3Rp
bmcgZGV2aWNlIGZvcndhcmRlcnMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgd2FpdHMgdW50
aWwgdGhlIHByb2Nlc3MgdGVybWluYXRlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHBzX291dHB1
dCA9IHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pCisg
ICAgICAgIHBpZHMgPSBzZWxmLl9leHRyYWN0X3BpZChwc19vdXRwdXQsICdkZXZpY2VfZm9yd2Fy
ZGVyJykKKyAgICAgICAgZm9yIHBpZCBpbiBwaWRzOgorICAgICAgICAgICAgc2VsZi5fYW5kcm9p
ZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAna2lsbCcsIHBpZF0pCisKKyAgICAgICAg
ZWxhcHNlZF9zZWNvbmRzID0gMAorICAgICAgICB3YWl0X3BlcmlvZF9zZWNvbmRzID0gMC4xCisg
ICAgICAgIHdoaWxlIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywg
J3BzJ10pLmZpbmQoJ2RldmljZV9mb3J3YXJkZXInKSA+PSAwIGFuZCAoZWxhcHNlZF9zZWNvbmRz
IDwgdGltZW91dF9zZWMpOgorICAgICAgICAgICAgdGltZS5zbGVlcCh3YWl0X3BlcmlvZF9zZWNv
bmRzKQorICAgICAgICAgICAgZWxhcHNlZF9zZWNvbmRzICs9IHdhaXRfcGVyaW9kX3NlY29uZHMK
KyAgICAgICAgaWYgZWxhcHNlZF9zZWNvbmRzID49IHRpbWVvdXRfc2VjOgorICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2hpbGUga2lsbGluZyBkZXZpY2VfZm9yd2FyZGVy
LicpCisKKyAgICBkZWYgZGV2aWNlX3BvcnRfZm9yX2hvc3RfcG9ydChzZWxmLCBob3N0X3BvcnQp
OgorICAgICAgICByZXR1cm4gc2VsZi5faG9zdF90b19kZXZpY2VfcG9ydF9tYXAuZ2V0KGhvc3Rf
cG9ydCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faG9zdF9wcm9j
ZXNzOgorICAgICAgICAgICAgc2VsZi5faG9zdF9wcm9jZXNzLmNsb3NlKCkKKyAgICAgICAgaWYg
c2VsZi5fZGV2aWNlX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2Vzcy5j
bG9zZSgpCisgICAgICAgIGlmIHNlbGYuX2FkYl9mb3J3YXJkX3Byb2Nlc3M6CisgICAgICAgICAg
ICBzZWxmLl9hZGJfZm9yd2FyZF9wcm9jZXNzLmNsb3NlKCkKKyAgICAgICAgc2VsZi5faG9zdF9w
cm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2VzcyA9IE5vbmUKKyAgICAg
ICAgc2VsZi5fYWRiX2ZvcndhcmRfcHJvY2VzcyA9IE5vbmUKKworICAgIGRlZiBfX2RlbF9fKHNl
bGYpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworCiBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9u
dW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0PUZhbHNlKToKICAgICAgICAgc3VwZXIoQ2hy
b21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2luaXRfXyhwb3J0LCB3b3JrZXJfbnVtYmVyLCBw
aXhlbF90ZXN0cywgbm9fdGltZW91dCkKQEAgLTMzMiwyMiArNzA1LDE3IEBAIGNsYXNzIENocm9t
aXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgc2VsZi5fZXJyX2ZpZm9f
cGF0aCA9IERFVklDRV9GSUZPX1BBVEggKyAnc3RkZXJyLmZpZm8nCiAgICAgICAgIHNlbGYuX3Jl
YWRfc3Rkb3V0X3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nl
c3MgPSBOb25lCi0gICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gTm9uZQorICAgICAg
ICBzZWxmLl9mb3J3YXJkZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2hhc19zZXR1cCA9IEZhbHNl
Ci0gICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9ycyA9IHt9CiAgICAgICAgIHNlbGYuX2Rl
dmljZV9zZXJpYWwgPSBwb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCh3b3JrZXJfbnVtYmVyKQogICAg
ICAgICBzZWxmLl9hZGJfY29tbWFuZCA9IFsnYWRiJywgJy1zJywgc2VsZi5fZGV2aWNlX3Nlcmlh
bF0KKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQgPSBBbmRyb2lkQ29tbWFuZHMocG9ydCwgd29y
a2VyX251bWJlcikKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIK
IAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICBzZWxmLl90ZWFyZG93bl9wZXJmb3Jt
YW5jZSgpCiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX19kZWxf
XygpCiAKLSAgICBkZWYgX3NldHVwX21kNXN1bV9hbmRfcHVzaF9kYXRhX2lmX25lZWRlZChzZWxm
KToKLSAgICAgICAgc2VsZi5fbWQ1c3VtX3BhdGggPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX21kNXN1
bSgpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2UoTUQ1U1VNX0RF
VklDRV9QQVRIKToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxm
Ll9tZDVzdW1fcGF0aCwgTUQ1U1VNX0RFVklDRV9QQVRIKToKLSAgICAgICAgICAgICAgICByYWlz
ZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IHB1c2ggbWQ1c3VtIHRvIGRldmljZScpCi0KKyAg
ICBkZWYgX3B1c2hfZGF0YV9pZl9uZWVkZWQoc2VsZik6CiAgICAgICAgIHNlbGYuX3B1c2hfZXhl
Y3V0YWJsZSgpCiAgICAgICAgIHNlbGYuX3B1c2hfZm9udHMoKQogICAgICAgICBzZWxmLl9wdXNo
X3Rlc3RfcmVzb3VyY2VzKCkKQEAgLTM1NiwxMDMgKzcyNCw2MCBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIGlmIHNlbGYuX2hhc19zZXR1cDoK
ICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIHNlbGYuX3NldHVwX21kNXN1bV9hbmRfcHVz
aF9kYXRhX2lmX25lZWRlZCgpCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29t
bWFuZChbJ3Jvb3QnXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQuc2V0dXBfZGV2aWNlKCkK
ICAgICAgICAgc2VsZi5faGFzX3NldHVwID0gVHJ1ZQotICAgICAgICBzZWxmLl9ydW5fYWRiX2Nv
bW1hbmQoWydyb290J10pCi0gICAgICAgIHNlbGYuX3NldHVwX3BlcmZvcm1hbmNlKCkKKwogICAg
ICAgICAjIFJlcXVpcmVkIGJ5IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyRmlsZVBh
dGgoKS4KICAgICAgICAgIyBPdGhlciBkaXJlY3RvcmllcyB3aWxsIGJlIGNyZWF0ZWQgYXV0b21h
dGljYWxseSBieSBhZGIgcHVzaC4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hl
bGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZSddKQor
ICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2Rp
cicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hyb21lJ10pCiAKICAgICAgICAg
IyBBbGxvdyB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIHRvIGZ1bGx5IGFjY2VzcyB0aGUgZGlyZWN0
b3J5LgogICAgICAgICAjIFRoZSBuYXRpdmUgY29kZSBuZWVkcyB0aGUgcGVybWlzc2lvbiB0byB3
cml0ZSB0ZW1wb3JhcnkgZmlsZXMgYW5kIGNyZWF0ZSBwaXBlcyBoZXJlLgotICAgICAgICBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9EUlRfRElS
XSkKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2htb2QnLCAnNzc3
JywgREVWSUNFX0RSVF9ESVJdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9EUlRfRElSXSkKKyAgICAgICAg
c2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2htb2QnLCAnNzc3
JywgREVWSUNFX0RSVF9ESVJdKQogCiAgICAgICAgICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hlIGlm
IGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1bi4KICAgICAgICAgIyBUaGlzIGlzIGxpa2Ug
d2hhdCdzIGRvbmUgaW4gQ2hyb21pdW1Qb3J0LnNldHVwX3Rlc3RfcnVuIGJ1dCBvbiB0aGUgZGV2
aWNlLgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsICctcics
IERSVF9BUFBfQ0FDSEVfRElSXSkKLQotICAgIGRlZiBfbG9nX2Vycm9yKHNlbGYsIG1lc3NhZ2Up
OgotICAgICAgICBfbG9nLmVycm9yKCdbJXNdICVzJyAlIChzZWxmLl9kZXZpY2Vfc2VyaWFsLCBt
ZXNzYWdlKSkKLQotICAgIGRlZiBfbG9nX2RlYnVnKHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICBf
bG9nLmRlYnVnKCdbJXNdICVzJyAlIChzZWxmLl9kZXZpY2Vfc2VyaWFsLCBtZXNzYWdlKSkKKyAg
ICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCAn
LXInLCBEUlRfQVBQX0NBQ0hFX0RJUl0pCiAKICAgICBkZWYgX2Fib3J0KHNlbGYsIG1lc3NhZ2Up
OgogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignWyVzXSAlcycgJSAoc2VsZi5fZGV2aWNl
X3NlcmlhbCwgbWVzc2FnZSkpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9leHRyYWN0
X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQobWQ1c3VtX291dHB1dCk6Ci0gICAgICAgIGFzc2Vy
dCBtZDVzdW1fb3V0cHV0Ci0gICAgICAgIHJldHVybiBbbGluZS5zcGxpdCgnICAnKVswXSBmb3Ig
bGluZSBpbiBtZDVzdW1fb3V0cHV0XQotCi0gICAgZGVmIF9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNl
bGYsIGhvc3RfZmlsZSwgZGV2aWNlX2ZpbGUpOgotICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlz
dHMoaG9zdF9maWxlKQotICAgICAgICBkZXZpY2VfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNo
ZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5l
eGVjdXRpdmUucG9wZW4oc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgTUQ1U1VNX0RFVklD
RV9QQVRILCBkZXZpY2VfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQpCi0gICAgICAgIGhv
c3RfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAotICAg
ICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5leGVjdXRpdmUucG9wZW4oYXJncz1bJyVzX2hv
c3QnICUgc2VsZi5fbWQ1c3VtX3BhdGgsIGhvc3RfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRv
dXQpCi0gICAgICAgIGlmIGhvc3RfaGFzaGVzIGFuZCBkZXZpY2VfaGFzaGVzID09IGhvc3RfaGFz
aGVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKGhv
c3RfZmlsZSwgZGV2aWNlX2ZpbGUpCi0KICAgICBkZWYgX3B1c2hfZXhlY3V0YWJsZShzZWxmKToK
LSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9wYXRoX3RvX2Zv
cndhcmRlcigpLCBERVZJQ0VfRk9SV0FSREVSX1BBVEgpCi0gICAgICAgIHNlbGYuX3B1c2hfZmls
ZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWUucGFrJyks
IERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnBhaycpCi0gICAgICAgIHNlbGYuX3B1
c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVf
cmVzb3VyY2VzJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycp
Ci0gICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0
aCgnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX21h
aW5fZm9udHMueG1sJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJU
X0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpCi0gICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FHRV0pCisgICAgICAgIHNlbGYu
X2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgn
RHVtcFJlbmRlclRyZWUucGFrJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnBh
aycpCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5f
cG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJyksIERFVklDRV9EUlRf
RElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpCisgICAgICAgIHNlbGYuX2FuZHJvaWRf
Y21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9t
YWluX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX21haW5fZm9udHMueG1s
JykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJU
X0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpCisgICAgICAgIHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FHRV0pCiAg
ICAgICAgIGRydF9ob3N0X3BhdGggPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpCi0gICAg
ICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRy
dF9ob3N0X3BhdGhdKQorICAgICAgICBpbnN0YWxsX3Jlc3VsdCA9IHNlbGYuX2FuZHJvaWRfY21k
LnJ1bl9hZGJfY29tbWFuZChbJ2luc3RhbGwnLCBkcnRfaG9zdF9wYXRoXSkKICAgICAgICAgaWYg
aW5zdGFsbF9yZXN1bHQuZmluZCgnU3VjY2VzcycpID09IC0xOgogICAgICAgICAgICAgc2VsZi5f
YWJvcnQoJ0ZhaWxlZCB0byBpbnN0YWxsICVzIG9udG8gZGV2aWNlOiAlcycgJSAoZHJ0X2hvc3Rf
cGF0aCwgaW5zdGFsbF9yZXN1bHQpKQogCiAgICAgZGVmIF9wdXNoX2ZvbnRzKHNlbGYpOgotICAg
ICAgICBzZWxmLl9sb2dfZGVidWcoJ1B1c2hpbmcgZm9udHMnKQorICAgICAgICBsb2dfZGVidWco
c2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1B1c2hpbmcgZm9udHMnKQogICAgICAgICBwYXRoX3RvX2Fo
ZW1fZm9udCA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0FIRU1fX19fLlRURicpCi0gICAgICAg
IHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQocGF0aF90b19haGVtX2ZvbnQsIERFVklDRV9GT05U
U19ESVIgKyAnQUhFTV9fX18uVFRGJykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9m
aWxlX2lmX25lZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVWSUNFX0ZPTlRTX0RJUiArICdBSEVN
X19fXy5UVEYnKQogICAgICAgICBmb3IgKGhvc3RfZGlycywgZm9udF9maWxlLCBwYWNrYWdlKSBp
biBIT1NUX0ZPTlRfRklMRVM6CiAgICAgICAgICAgICBmb3IgaG9zdF9kaXIgaW4gaG9zdF9kaXJz
OgogICAgICAgICAgICAgICAgIGhvc3RfZm9udF9wYXRoID0gaG9zdF9kaXIgKyBmb250X2ZpbGUK
ICAgICAgICAgICAgICAgICBpZiBzZWxmLl9wb3J0Ll9jaGVja19maWxlX2V4aXN0cyhob3N0X2Zv
bnRfcGF0aCwgJycsIGxvZ2dpbmc9RmFsc2UpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9w
dXNoX2ZpbGVfaWZfbmVlZGVkKGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElSICsgZm9u
dF9maWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNoX2ZpbGVf
aWZfbmVlZGVkKGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElSICsgZm9udF9maWxlKQog
CiAgICAgZGVmIF9wdXNoX3Rlc3RfcmVzb3VyY2VzKHNlbGYpOgotICAgICAgICBzZWxmLl9sb2df
ZGVidWcoJ1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQorICAgICAgICBsb2dfZGVidWcoc2VsZi5f
ZGV2aWNlX3NlcmlhbCwgJ1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBmb3IgcmVz
b3VyY2UgaW4gVEVTVF9SRVNPVVJDRVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYuX3B1c2hf
ZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnLycgKyByZXNv
dXJjZSwgREVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyByZXNvdXJjZSkKKyAgICAgICAgICAgIHNl
bGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5sYXlvdXRfdGVz
dHNfZGlyKCkgKyAnLycgKyByZXNvdXJjZSwgREVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyByZXNv
dXJjZSkKIAotICAgIGRlZiBfcnVuX2FkYl9jb21tYW5kKHNlbGYsIGNtZCwgaWdub3JlX2Vycm9y
PUZhbHNlKToKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdSdW4gYWRiIGNvbW1hbmQ6ICcgKyBz
dHIoY21kKSkKLSAgICAgICAgaWYgaWdub3JlX2Vycm9yOgotICAgICAgICAgICAgZXJyb3JfaGFu
ZGxlciA9IHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBOb25lCi0gICAgICAgIHJlc3VsdCA9IHNlbGYu
X3BvcnQuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCArIGNtZCwgZXJy
b3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQotICAgICAgICAjIExpbWl0IHRoZSBsZW5ndGggdG8g
YXZvaWQgdG9vIHZlcmJvc2Ugb3V0cHV0IG9mIGNvbW1hbmRzIGxpa2UgJ2FkYiBsb2djYXQnIGFu
ZCAnY2F0IC9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lMDEnCi0gICAgICAgICMgd2hvc2Ugb3V0
cHV0cyBhcmUgbm9ybWFsbHkgcHJpbnRlZCBpbiBsYXRlciBsb2dzLgotICAgICAgICBzZWxmLl9s
b2dfZGVidWcoJ1J1biBhZGIgcmVzdWx0OiAnICsgcmVzdWx0Wzo4MF0pCi0gICAgICAgIHJldHVy
biByZXN1bHQKLQotICAgIGRlZiBfbGlua19kZXZpY2VfZmlsZShzZWxmLCBmcm9tX2ZpbGUsIHRv
X2ZpbGUsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Ci0gICAgICAgICMgcm0gdG9fZmlsZSBmaXJzdCB0
byBtYWtlIHN1cmUgdGhhdCBsbiBzdWNjZWVkcy4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21t
YW5kKFsnc2hlbGwnLCAncm0nLCB0b19maWxlXSwgaWdub3JlX2Vycm9yKQotICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbG4nLCAnLXMnLCBmcm9tX2ZpbGUs
IHRvX2ZpbGVdLCBpZ25vcmVfZXJyb3IpCi0KLSAgICBkZWYgX3B1c2hfdG9fZGV2aWNlKHNlbGYs
IGhvc3RfcGF0aCwgZGV2aWNlX3BhdGgsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Ci0gICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydwdXNoJywgaG9zdF9wYXRoLCBkZXZpY2VfcGF0
aF0sIGlnbm9yZV9lcnJvcikKLQotICAgIGRlZiBfcHVsbF9mcm9tX2RldmljZShzZWxmLCBkZXZp
Y2VfcGF0aCwgaG9zdF9wYXRoLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICByZXR1cm4g
c2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncHVsbCcsIGRldmljZV9wYXRoLCBob3N0X3BhdGhdLCBp
Z25vcmVfZXJyb3IpCisgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29wdGlv
bik6CisgICAgICAgICMgSWdub3JlIGNvbW1hbmQgd3JhcHBlciB3aGljaCBpcyBub3QgYXBwbGlj
YWJsZSBvbiBBbmRyb2lkLgorICAgICAgICByZXR1cm4gW10KIAogICAgIGRlZiBfZ2V0X2xhc3Rf
c3RhY2t0cmFjZShzZWxmKToKLSAgICAgICAgdG9tYnN0b25lcyA9IHNlbGYuX3J1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ2xzJywgJy1uJywgJy9kYXRhL3RvbWJzdG9uZXMnXSkKKyAgICAgICAg
dG9tYnN0b25lcyA9IHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywg
J2xzJywgJy1uJywgJy9kYXRhL3RvbWJzdG9uZXMnXSkKICAgICAgICAgaWYgbm90IHRvbWJzdG9u
ZXMgb3IgdG9tYnN0b25lcy5zdGFydHN3aXRoKCcvZGF0YS90b21ic3RvbmVzOiBObyBzdWNoIGZp
bGUgb3IgZGlyZWN0b3J5Jyk6Ci0gICAgICAgICAgICBzZWxmLl9sb2dfZXJyb3IoJ0RSVCBjcmFz
aGVkLCBidXQgbm8gdG9tYnN0b25lIGZvdW5kIScpCisgICAgICAgICAgICBsb2dfZXJyb3Ioc2Vs
Zi5fZGV2aWNlX3NlcmlhbCwgJ0RSVCBjcmFzaGVkLCBidXQgbm8gdG9tYnN0b25lIGZvdW5kIScp
CiAgICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgdG9tYnN0b25lcyA9IHRvbWJzdG9uZXMu
cnN0cmlwKCkuc3BsaXQoJ1xuJykKICAgICAgICAgbGFzdF90b21ic3RvbmUgPSB0b21ic3RvbmVz
WzBdLnNwbGl0KCkKQEAgLTQ3MSwyOCArNzk2LDEwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERy
aXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgIyBzdGFjayB0cmFjZSBpbnRvIGEgaHVtYW4g
cmVhZGFibGUgZm9ybWF0LCBpZiBuZWVkZWQuCiAgICAgICAgICMgSXQgdGFrZXMgYSBsb25nIHRp
bWUsIHNvIGRvbid0IGRvIGl0IGhlcmUuCiAgICAgICAgIHJldHVybiAnJXNcbiVzJyAlICgnICcu
am9pbihsYXN0X3RvbWJzdG9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCAnL2RhdGEvdG9tYnN0b25lcy8nICsgbGFz
dF90b21ic3RvbmVbNl1dKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsICcvZGF0YS90b21ic3RvbmVz
LycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQogCiAgICAgZGVmIF9nZXRfbG9nY2F0KHNlbGYpOgot
ICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1kJywgJy12
JywgJ3RocmVhZHRpbWUnXSkKLQotICAgIGRlZiBfc2V0dXBfcGVyZm9ybWFuY2Uoc2VsZik6Ci0g
ICAgICAgICMgRGlzYWJsZSBDUFUgc2NhbGluZyBhbmQgZHJvcCByYW0gY2FjaGUgdG8gcmVkdWNl
IG5vaXNlIGluIHRlc3RzCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnM6
Ci0gICAgICAgICAgICBnb3Zlcm5vcl9maWxlcyA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCi0gICAgICAgICAgICBpZiBn
b3Zlcm5vcl9maWxlcy5maW5kKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgPT0gLTE6Ci0g
ICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZ292ZXJub3JfZmlsZXMuc3BsaXQoKToKLSAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzW2ZpbGVdID0gc2VsZi5fcnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgZmlsZV0pLnN0cmlwKCkKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobycsICdwZXJmb3Jt
YW5jZScsICc+JywgZmlsZV0pCi0KLSAgICBkZWYgX3RlYXJkb3duX3BlcmZvcm1hbmNlKHNlbGYp
OgotICAgICAgICBmb3IgZmlsZSwgb3JpZ2luYWxfY29udGVudCBpbiBzZWxmLl9vcmlnaW5hbF9n
b3Zlcm5vcnMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2VjaG8nLCBvcmlnaW5hbF9jb250ZW50LCAnPicsIGZpbGVdKQotICAgICAgICBzZWxm
Ll9vcmlnaW5hbF9nb3Zlcm5vcnMgPSB7fQotCi0gICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoY2xz
LCB3cmFwcGVyX29wdGlvbik6Ci0gICAgICAgICMgSWdub3JlIGNvbW1hbmQgd3JhcHBlciB3aGlj
aCBpcyBub3QgYXBwbGljYWJsZSBvbiBBbmRyb2lkLgotICAgICAgICByZXR1cm4gW10KKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICct
ZCcsICctdicsICd0aHJlYWR0aW1lJ10pCiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwg
c3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgogICAgICAgICBpZiBub3Qgc3Rkb3V0OgpAQCAt
NTA4LDEwICs4MTUsNiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZl
cik6CiAgICAgICAgICMgVGhlIGNvbW1hbmQgbGluZSBwYXNzZWQgdG8gdGhlIERSVCBwcm9jZXNz
IGlzIHJldHVybmVkIGJ5IF9kcnRfY21kX2xpbmUoKSBpbnN0ZWFkLgogICAgICAgICByZXR1cm4g
c2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJ10KIAotICAgIGRlZiBfZmlsZV9leGlzdHNfb25f
ZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToKLSAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9w
YXRoLnN0YXJ0c3dpdGgoJy8nKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3Bh
dGgKLQogICAgIGRlZiBfZHJ0X2NtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9h
cmdzKToKICAgICAgICAgcmV0dXJuIGRyaXZlci5Ecml2ZXIuY21kX2xpbmUoc2VsZiwgcGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyctLWNyZWF0ZS1zdGRpbi1maWZvJywgJy0tc2VwYXJh
dGUtc3RkZXJyLWZpZm8nXQogCkBAIC01MjQsMTcgKzgyNywxNyBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAg
ZGVmIF9hbGxfcGlwZXNfY3JlYXRlZChzZWxmKToKLSAgICAgICAgcmV0dXJuIChzZWxmLl9maWxl
X2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAg
ICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCi0g
ICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZv
X3BhdGgpKQorICAgICAgICByZXR1cm4gKHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29u
X2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX2Fu
ZHJvaWRfY21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQK
KyAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5fZXJyX2ZpZm9fcGF0aCkpCiAKICAgICBkZWYgX3JlbW92ZV9hbGxfcGlwZXMoc2VsZik6
CiAgICAgICAgIGZvciBmaWxlIGluIFtzZWxmLl9pbl9maWZvX3BhdGgsIHNlbGYuX291dF9maWZv
X3BhdGgsIHNlbGYuX2Vycl9maWZvX3BhdGhdOgotICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAncm0nLCBmaWxlXSkKKyAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRf
Y21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgZmlsZV0pCiAKLSAgICAgICAgcmV0
dXJuIChub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkg
YW5kCi0gICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxm
Ll9vdXRfZmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlz
dHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKQorICAgICAgICByZXR1cm4gKG5vdCBz
ZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRo
KSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fYW5kcm9pZF9jbWQuZmlsZV9leGlzdHNf
b25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBz
ZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0
aCkpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0LCBzdG9wX3doZW5fZG9u
ZSk6CiAgICAgICAgIGJhc2UgPSBzZWxmLl9wb3J0Lmxvb2t1cF92aXJ0dWFsX3Rlc3RfYmFzZShk
cml2ZXJfaW5wdXQudGVzdF9uYW1lKQpAQCAtNTU5LDcgKzg2Miw3IEBAIGNsYXNzIENocm9taXVt
QW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgZm9yIHJldHJpZXMgaW4gcmFu
Z2UoMyk6CiAgICAgICAgICAgICBpZiBzZWxmLl9zdGFydF9vbmNlKHBpeGVsX3Rlc3RzLCBwZXJf
dGVzdF9hcmdzKToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYuX2xv
Z19lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBSZXRy
aWVzPSVkLiBMb2c6JXMnICUgKHJldHJpZXMsIHNlbGYuX2dldF9sb2djYXQoKSkpCisgICAgICAg
ICAgICBsb2dfZXJyb3Ioc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ0ZhaWxlZCB0byBzdGFydCBEdW1w
UmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gUmV0cmllcz0lZC4gTG9nOiVzJyAlIChyZXRyaWVzLCBz
ZWxmLl9nZXRfbG9nY2F0KCkpKQogICAgICAgICAgICAgc2VsZi5zdG9wKCkKICAgICAgICAgICAg
IHRpbWUuc2xlZXAoMikKICAgICAgICAgc2VsZi5fYWJvcnQoJ0ZhaWxlZCB0byBzdGFydCBEdW1w
UmVuZGVyVHJlZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1lcy4gR2l2ZSB1cC4nKQpAQCAtNTY3
LDE2ICs4NzAsMTUgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIp
OgogICAgIGRlZiBfc3RhcnRfb25jZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6
CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX3N0YXJ0KHBpeGVs
X3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCi0gICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnU3RhcnRp
bmcgZm9yd2FyZGVyJykKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBzZWxmLl9w
b3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcigKLSAgICAgICAgICAgIHNlbGYuX3BvcnQs
ICdGb3J3YXJkZXInLCBzZWxmLl9hZGJfY29tbWFuZCArIFsnc2hlbGwnLCAnJXMgLUQgJXMnICUg
KERFVklDRV9GT1JXQVJERVJfUEFUSCwgRk9SV0FSRF9QT1JUUyldKQotICAgICAgICBzZWxmLl9m
b3J3YXJkZXJfcHJvY2Vzcy5zdGFydCgpCisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vf
c2VyaWFsLCAnU3RhcnRpbmcgZm9yd2FyZGVyJykKKyAgICAgICAgcG9ydF9wYWlycyA9IFtQb3J0
cyhwb3J0LCBwb3J0KSBmb3IgcG9ydCBpbiBGT1JXQVJEX1BPUlRTXQorICAgICAgICBzZWxmLl9m
b3J3YXJkZXIgPSBGb3J3YXJkZXIoc2VsZi5fYW5kcm9pZF9jbWQsIHNlbGYuX3dvcmtlcl9udW1i
ZXIsIHBvcnRfcGFpcnMsICcxMjcuMC4wLjEnKQogCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29t
bWFuZChbJ2xvZ2NhdCcsICctYyddKQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdlY2hvJ10gKyBzZWxmLl9jbWRfbGluZSArIFsnPicsIENPTU1BTkRfTElORV9GSUxF
XSkKLSAgICAgICAgc3RhcnRfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnYW0nLCAnc3RhcnQnLCAnLWUnLCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNUSVZJ
VFlfRlVMTF9OQU1FXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5k
KFsnbG9nY2F0JywgJy1jJ10pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuX2NtZF9saW5lICsgWyc+JywgQ09NTUFORF9M
SU5FX0ZJTEVdKQorICAgICAgICBzdGFydF9yZXN1bHQgPSBzZWxmLl9hbmRyb2lkX2NtZC5ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScsICdSdW5JblN1YlRocmVh
ZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVdKQogICAgICAgICBpZiBzdGFydF9yZXN1
bHQuZmluZCgnRXhjZXB0aW9uJykgIT0gLTE6Ci0gICAgICAgICAgICBzZWxmLl9sb2dfZXJyb3Io
J0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gRXhjZXB0aW9uOlxu
JyArIHN0YXJ0X3Jlc3VsdCkKKyAgICAgICAgICAgIGxvZ19lcnJvcihzZWxmLl9kZXZpY2Vfc2Vy
aWFsLCAnRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNlcHRp
b246XG4nICsgc3RhcnRfcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAg
ICAgaWYgbm90IENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQoc2VsZi5f
YWxsX3BpcGVzX2NyZWF0ZWQsIERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUyk6CkBAIC01ODYs
MjEgKzg4OCwyMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6
CiAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyBEUlRfU1RBUlRfU1RPUF9USU1FT1VU
X1NFQ1MKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQogICAgICAgICBzZWxm
Ll9yZWFkX3Byb21wdChkZWFkbGluZSkKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdJbnRlcmFj
dGl2ZSBzaGVsbCBzdGFydGVkJykKKyAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJp
YWwsICdJbnRlcmFjdGl2ZSBzaGVsbCBzdGFydGVkJykKIAogICAgICAgICAjIFN0YXJ0IGEgcHJv
Y2VzcyB0byByZWFkIGZyb20gdGhlIHN0ZG91dCBmaWZvIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBh
cHAgYW5kIHByaW50IHRvIHN0ZG91dC4KLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdSZWRpcmVj
dGluZyBzdGRvdXQgdG8gJyArIHNlbGYuX291dF9maWZvX3BhdGgpCisgICAgICAgIGxvZ19kZWJ1
ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUmVkaXJlY3Rpbmcgc3Rkb3V0IHRvICcgKyBzZWxmLl9v
dXRfZmlmb19wYXRoKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzID0gc2VsZi5f
cG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IoCiAgICAgICAgICAgICBzZWxmLl9wb3J0
LCAnUmVhZFN0ZG91dCcsIHNlbGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdjYXQnLCBzZWxm
Ll9vdXRfZmlmb19wYXRoXSkKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcy5zdGFy
dCgpCiAKICAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9tIHRoZSBzdGRlcnIg
ZmlmbyBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBzdGRvdXQuCi0gICAg
ICAgIHNlbGYuX2xvZ19kZWJ1ZygnUmVkaXJlY3Rpbmcgc3RkZXJyIHRvICcgKyBzZWxmLl9lcnJf
Zmlmb19wYXRoKQorICAgICAgICBsb2dfZGVidWcoc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1JlZGly
ZWN0aW5nIHN0ZGVyciB0byAnICsgc2VsZi5fZXJyX2ZpZm9fcGF0aCkKICAgICAgICAgc2VsZi5f
cmVhZF9zdGRlcnJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVj
dG9yKAogICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRlcnInLCBzZWxmLl9hZGJfY29t
bWFuZCArIFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJyX2ZpZm9fcGF0aF0pCiAgICAgICAgIHNl
bGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3Muc3RhcnQoKQogCi0gICAgICAgIHNlbGYuX2xvZ19kZWJ1
ZygnUmVkaXJlY3Rpbmcgc3RkaW4gdG8gJyArIHNlbGYuX2luX2ZpZm9fcGF0aCkKKyAgICAgICAg
bG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdSZWRpcmVjdGluZyBzdGRpbiB0byAnICsg
c2VsZi5faW5fZmlmb19wYXRoKQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy53cml0ZSgn
Y2F0ID4lc1xuJyAlIHNlbGYuX2luX2ZpZm9fcGF0aCkKIAogICAgICAgICAjIENvbWJpbmUgdGhl
IHN0ZG91dCBhbmQgc3RkZXJyIHBpcGVzIGludG8gc2VsZi5fc2VydmVyX3Byb2Nlc3MuCkBAIC02
MTIsNyArOTE0LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIp
OgogICAgICAgICAgICAgICAgICMgcmVhZGluZy93cml0aW5nIHRoZSBmaWZvLiBLaWxsIHRoZSBm
aWZvIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgdG8gbGV0IHRoZQogICAgICAgICAgICAgICAg
ICMgbWFpbiB0aHJlYWQgZXNjYXBlIGZyb20gdGhlIGRlYWRsb2NrZWQgc3RhdGUuIEFmdGVyIHRo
YXQsIHRoZSBtYWluIHRocmVhZCB3aWxsCiAgICAgICAgICAgICAgICAgIyB0cmVhdCB0aGlzIGFz
IGEgY3Jhc2guCi0gICAgICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdEZWFkbG9jayBkZXRl
Y3RlZC4gUHJvY2Vzc2VzIGtpbGxlZC4nKQorICAgICAgICAgICAgICAgIGxvZ19lcnJvcihzZWxm
Ll9kZXZpY2Vfc2VyaWFsLCAnRGVhZGxvY2sgZGV0ZWN0ZWQuIFByb2Nlc3NlcyBraWxsZWQuJykK
ICAgICAgICAgICAgICAgICBmb3IgaSBpbiBwcm9jZXNzZXM6CiAgICAgICAgICAgICAgICAgICAg
IGkua2lsbCgpCiAKQEAgLTYzOCw3ICs5NDAsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHN0
b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywg
J2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2Nt
ZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1zdG9wJywgRFJUX0FQUF9Q
QUNLQUdFXSkKIAogICAgICAgICBpZiBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzOgogICAgICAg
ICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcy5raWxsKCkKQEAgLTY1MCw5ICs5NTIsOSBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAKICAgICAgICAg
c3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5zdG9wKCkKIAotICAgICAgICBpZiBz
ZWxmLl9mb3J3YXJkZXJfcHJvY2VzczoKLSAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9j
ZXNzLmtpbGwoKQotICAgICAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25lCisg
ICAgICAgIGlmIHNlbGYuX2ZvcndhcmRlcjoKKyAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlci5j
bG9zZSgpCisgICAgICAgICAgICBzZWxmLl9mb3J3YXJkZXIgPSBOb25lCiAKICAgICAgICAgaWYg
c2VsZi5faGFzX3NldHVwOgogICAgICAgICAgICAgaWYgbm90IENocm9taXVtQW5kcm9pZERyaXZl
ci5fbG9vcF93aXRoX3RpbWVvdXQoc2VsZi5fcmVtb3ZlX2FsbF9waXBlcywgRFJUX1NUQVJUX1NU
T1BfVElNRU9VVF9TRUNTKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171871</attachid>
            <date>2012-11-01 09:21:49 -0700</date>
            <delta_ts>2012-12-04 09:20:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121101172010.patch</filename>
            <type>text/plain</type>
            <size>40325</size>
            <attacher name="felipe">felipeg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMTg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzM5N2U0NmFlZmVmMjFjNWE0OWIxNTJmOWRmMjc0NmEz
OGFlNjBmMS4uNmMyMWZiY2YzNmRiMzI2NGQ5NmRlNDA1NWU4NzU0YzljZGY4ZjQ2MiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDEyLTEwLTIzICBGZWxpcGUgR29sZHN0ZWluICA8ZmVsaXBlZ0BjaHJvbWl1bS5jb20+
CisKKyAgICAgICAgW0Nocm9taXVtXSBVc2UgdGhlIG5ldyBmb3J3YXJkZXIyIGZvciBydW5uaW5n
IGxheW91dCB0ZXN0cyBvbiBBbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05OTU4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEl04oCZcyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIHJ1biB0aGUg
V2ViS2l0IHRlc3Qgc3VpdGUgb24KKyAgICAgICAgcHJvZHVjdGlvbiBkZXZpY2VzLCBpLmUuIG5v
bi1yb290ZWQgc3lzdGVtIGltYWdlcyB0aGF0IGFyZSB1c2VkIGJ5CisgICAgICAgIG91ciB1c2Vy
cywgc2luY2Ugd2UgY3VycmVudGx5IHVzZSBhIHByb2dyYW0gY2FsbGVkICJmb3J3YXJkZXIiCisg
ICAgICAgIHdoaWNoIG1ha2VzIHVzZSBvZiBhbiBhZGIgaGFjayBvbmx5IGF2YWlsYWJsZSBpbiBy
b290ZWQgZGV2aWNlcy4KKyAgICAgICAgVGhlIGZvd2FyZGVyMiBzb2x2ZXMgdGhpcyBwcm9ibGVt
LiAgVGhlIGZvcndhcmRlciBpcyBhIHdheSB0bworICAgICAgICBmb3J3YXJkIFRDUCBjb25uZWN0
aW9ucyBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIGhvc3QgdGhyb3VnaCB0aGUKKyAgICAgICAgYWRi
IFVTQiBjb25uZWN0aW9uLCB0byBiZSB1c2VkIGluIHRlc3RpbmcuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAg
ICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQu
Y2hlY2tfYnVpbGQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5fcGF0aF90b19kZXZp
Y2VfZm9yd2FyZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3BhdGhfdG9faG9z
dF9mb3J3YXJkZXIpOgorICAgICAgICAobG9nX2Vycm9yKToKKyAgICAgICAgKGxvZ19kZWJ1Zyk6
CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLl9f
aW5pdF9fKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5nZXRfZGV2aWNlX3NlcmlhbCk6Cisg
ICAgICAgIChBbmRyb2lkQ29tbWFuZHMucHVzaF9tZDVzdW0pOgorICAgICAgICAoQW5kcm9pZENv
bW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnJ1
bl9hZGJfY29tbWFuZCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMucnVuX2hvc3RfY29tbWFu
ZCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuZmlsZV9leGlzdHNfb25fZGV2aWNlKToKKyAg
ICAgICAgKEFuZHJvaWRDb21tYW5kcy5nZXRfcG9ydCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFu
ZHMuX3B1c2hfdG9fZGV2aWNlKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5fZXh0cmFjdF9o
YXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KToKKyAgICAgICAgKEZvcndhcmRlcik6CisgICAgICAg
IChGb3J3YXJkZXIuX19pbml0X18pOgorICAgICAgICAoRm9yd2FyZGVyLl9raWxsX2hvc3RfZm9y
d2FyZGVyX2Jsb2NraW5nKToKKyAgICAgICAgKEZvcndhcmRlci5fa2lsbF9kZXZpY2VfZm9yd2Fy
ZGVyX2Jsb2NraW5nKToKKyAgICAgICAgKEZvcndhcmRlci5fY2xvc2VfcHJvY2Vzcyk6CisgICAg
ICAgIChGb3J3YXJkZXIuZGV2aWNlX3BvcnRfZm9yX2hvc3RfcG9ydCk6CisgICAgICAgIChGb3J3
YXJkZXIuY2xvc2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9faW5pdF9fKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF9kYXRhX2lmX25lZWRlZCk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3Rlc3QpOgorICAgICAgICAoQ2hy
b21pdW1BbmRyb2lkRHJpdmVyLl9hYm9ydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2
ZXIuX3B1c2hfZXhlY3V0YWJsZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1
c2hfZm9udHMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNoX3Rlc3RfcmVz
b3VyY2VzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc2V0dXBfcGVyZm9ybWFu
Y2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl90ZWFyZG93bl9wZXJmb3JtYW5j
ZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2NvbW1hbmRfd3JhcHBlcik6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2dldF9sYXN0X3N0YWNrdHJhY2UpOgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9nZXRfbG9nY2F0KToKKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZERyaXZlci5jbWRfbGluZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2
ZXIuX2FsbF9waXBlc19jcmVhdGVkKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5f
cmVtb3ZlX2FsbF9waXBlcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0
KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6CisgICAgICAg
IChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2UuZGVhZGxvY2tfZGV0ZWN0b3IpOgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0b3ApOgorCiAyMDEyLTEwLTIzICBTaW1v
biBQZW5hICA8c3BlbmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGRpbmcg
bXlzZWxmIGFzIGNvbW1pdHRlci4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQppbmRleCA2Mzg5ZmVi
NjM1N2NlM2NjNDkwYzAyYzY5MmM1ZmY4MWQ2NzdhNDk2Li5iZTdkZjlhZWVjMjg4NTRlNTZhMTFm
MDdlZTA1ZjBiMDk3OTc5ZjhiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CkBAIC01NCw3ICs1
NCw3IEBAIENPTU1BTkRfTElORV9GSUxFID0gREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJv
bWUtbmF0aXZlLXRlc3RzLWNvbW1hbmQtbGluZScKICMgSWYgY2hhbmdlIHRoaXMsIG11c3QgYWxz
byBjaGFuZ2UgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5j
cHAKICMgYW5kIENocm9taXVtJ3Mgd2Via2l0L3N1cHBvcnQvcGxhdGZvcm1fc3VwcG9ydF9hbmRy
b2lkLmNjLgogREVWSUNFX0RSVF9ESVIgPSBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2RydC8n
Ci1ERVZJQ0VfRk9SV0FSREVSX1BBVEggPSBERVZJQ0VfRFJUX0RJUiArICdmb3J3YXJkZXInCitE
RVZJQ0VfRk9SV0FSREVSX1BBVEggPSBERVZJQ0VfRFJUX0RJUiArICdkZXZpY2VfZm9yd2FyZGVy
JwogCiAjIFBhdGggb24gdGhlIGRldmljZSB3aGVyZSB0aGUgdGVzdCBmcmFtZXdvcmsgd2lsbCBj
cmVhdGUgdGhlIGZpZm8gcGlwZXMuCiBERVZJQ0VfRklGT19QQVRIID0gJy9kYXRhL2RhdGEvb3Jn
LmNocm9taXVtLm5hdGl2ZV90ZXN0L2ZpbGVzLycKQEAgLTc0LDcgKzc0LDE4IEBAIFRFU1RfUEFU
SF9QUkVGSVggPSAnL2FsbC10ZXN0cycKICMgODAwMCwgODA4MCBhbmQgODQ0MyBhcmUgZm9yIGh0
dHAvaHR0cHMgdGVzdHMuCiAjIDg4ODAgYW5kIDkzMjMgYXJlIGZvciB3ZWJzb2NrZXQgdGVzdHMK
ICMgKHNlZSBodHRwX3NlcnZlci5weSwgYXBhY2hlX2h0dHBfc2VydmVyLnB5IGFuZCB3ZWJzb2Nr
ZXRfc2VydmVyLnB5KS4KLUZPUldBUkRfUE9SVFMgPSAnODAwMCA4MDgwIDg0NDMgODg4MCA5MzIz
JworRk9SV0FSRF9QT1JUUyA9ICg4MDAwLCA4MDgwLCA4NDQzLCA4ODgwLCA5MzIzKQorCisjIFdl
IHJ1biBvbmUgRm9yd2FyZGVyIHBlciBkZXZpY2UgLyB3b3JrZXIsIGFuZCB3ZSBuZWVkIHRvIGFs
bG9jYXRlIG9uZSBjb250cm9sCisjIHBvcnQgZm9yIGVhY2ggRm9yd2FyZGVyLiBUaGVzZSBjb25z
dGFudHMgZGVmaW5lIHRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlLgorRk9SV0FSREVSX0NP
TlRST0xfUE9SVF9CRUdJTiA9IDIwMDAwCitGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VORCA9IDIx
MDAwCisKK0ZPUldBUkRFUl9LSUxMX1RJTUVPVVRfU0VDUyA9IDUKK0ZPUldBUkRFUl9USU1FT1VU
X1NFQ1MgPSAzMAorCisjIFVuaXggQWJzdHJhY3Qgc29ja2V0IHBhdGg6CitERVZJQ0VfQURCX0NP
TlRST0xfUE9SVCA9ICdjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcicKIAogTVNfVFJVRVRZUEVfRk9O
VFNfRElSID0gJy91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy8nCiBNU19U
UlVFVFlQRV9GT05UU19QQUNLQUdFID0gJ3R0Zi1tc2NvcmVmb250cy1pbnN0YWxsZXInCkBAIC0x
NDksNiArMTYwLDE1IEBAIFRFU1RfUkVTT1VSQ0VTX1RPX1BVU0ggPSBbCiBNRDVTVU1fREVWSUNF
X0ZJTEVfTkFNRSA9ICdtZDVzdW1fYmluJwogTUQ1U1VNX0RFVklDRV9QQVRIID0gJy9kYXRhL2xv
Y2FsL3RtcC8nICsgTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUKIAorCitkZWYgbG9nX2Vycm9yKGRl
dmljZV9zZXJpYWwsIG1lc3NhZ2UpOgorICAgIF9sb2cuZXJyb3IoJ1slc10gJXMnICUgKGRldmlj
ZV9zZXJpYWwsIG1lc3NhZ2UpKQorCisKK2RlZiBsb2dfZGVidWcoZGV2aWNlX3NlcmlhbCwgbWVz
c2FnZSk6CisgICAgX2xvZy5kZWJ1ZygnWyVzXSAlcycgJSAoZGV2aWNlX3NlcmlhbCwgbWVzc2Fn
ZSkpCisKKwogY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQp
OgogICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1hbmRyb2lkJwogCkBAIC0yMDQsNyArMjI0LDgg
QEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAg
IGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmVzdWx0ID0gc3Vw
ZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2VsZikuY2hlY2tfYnVpbGQobmVlZHNfaHR0cCkKICAg
ICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5fcGF0aF90b19tZDVz
dW0oKSwgJ21kNXN1bSB1dGlsaXR5JykgYW5kIHJlc3VsdAotICAgICAgICByZXN1bHQgPSBzZWxm
Ll9jaGVja19maWxlX2V4aXN0cyhzZWxmLl9wYXRoX3RvX2ZvcndhcmRlcigpLCAnZm9yd2FyZGVy
IHV0aWxpdHknKSBhbmQgcmVzdWx0CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVf
ZXhpc3RzKHNlbGYuX3BhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcigpLCAnZGV2aWNlX2ZvcndhcmRl
ciB1dGlsaXR5JykgYW5kIHJlc3VsdAorICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19maWxl
X2V4aXN0cyhzZWxmLl9wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKCksICdob3N0X2ZvcndhcmRlciB1
dGlsaXR5JykgYW5kIHJlc3VsdAogICAgICAgICBpZiBub3QgcmVzdWx0OgogICAgICAgICAgICAg
X2xvZy5lcnJvcignRm9yIGNvbXBsZXRlIEFuZHJvaWQgYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVh
c2Ugc2VlOicpCiAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQpAQCAtMjc4LDggKzI5OSwxMSBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAg
ZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRl
ZiBfcGF0aF90b19mb3J3YXJkZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9w
YXRoKCdmb3J3YXJkZXInKQorICAgIGRlZiBfcGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnZGV2aWNlX2ZvcndhcmRlcicpCisK
KyAgICBkZWYgX3BhdGhfdG9faG9zdF9mb3J3YXJkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9idWlsZF9wYXRoKCdob3N0X2ZvcndhcmRlcicpCiAKICAgICBkZWYgX3BhdGhfdG9fbWQ1
c3VtKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChNRDVTVU1fREVWSUNF
X0ZJTEVfTkFNRSkKQEAgLTMyMyw2ICszNDcsMzU0IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBv
cnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgcmV0dXJuIGRldmljZXNbd29ya2Vy
X251bWJlcl0KIAogCitjbGFzcyBBbmRyb2lkQ29tbWFuZHMob2JqZWN0KToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlcik6CisgICAgICAgIHNlbGYuX3BvcnQgPSBw
b3J0CisgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBzZWxmLl9wb3J0Ll9nZXRfZGV2aWNl
X3NlcmlhbCh3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCA9IFsnYWRi
JywgJy1zJywgc2VsZi5fZGV2aWNlX3NlcmlhbF0KKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292
ZXJub3JzX2ZpbGVfY29udGVudHMgPSB7fQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAg
ICAgIHNlbGYuX3RlYXJkb3duX3BlcmZvcm1hbmNlKCkKKworICAgIGRlZiBnZXRfZGV2aWNlX3Nl
cmlhbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RldmljZV9zZXJpYWwKKworICAgIGRl
ZiBfcHVzaF9tZDVzdW0oc2VsZik6CisgICAgICAgIHNlbGYuX21kNXN1bV9wYXRoID0gc2VsZi5f
cG9ydC5fcGF0aF90b19tZDVzdW0oKQorICAgICAgICBpZiBub3Qgc2VsZi5maWxlX2V4aXN0c19v
bl9kZXZpY2UoTUQ1U1VNX0RFVklDRV9QQVRIKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9w
dXNoX3RvX2RldmljZShzZWxmLl9tZDVzdW1fcGF0aCwgTUQ1U1VNX0RFVklDRV9QQVRIKToKKyAg
ICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IHB1c2ggbWQ1c3Vt
IHRvIGRldmljZScpCisKKyAgICBkZWYgX3NldHVwX3BlcmZvcm1hbmNlKHNlbGYpOgorICAgICAg
ICAjIERpc2FibGUgQ1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFtIGNhY2hlIHRvIHJlZHVjZSBub2lz
ZSBpbiB0ZXN0cy4KKyAgICAgICAgaWYgbm90IHNlbGYuX29yaWdpbmFsX2dvdmVybm9yc19maWxl
X2NvbnRlbnRzOgorICAgICAgICAgICAgZ292ZXJub3JfZmlsZXMgPSBzZWxmLnJ1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCisgICAgICAg
ICAgICBpZiBnb3Zlcm5vcl9maWxlcy5maW5kKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Jykg
PT0gLTE6CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZ292ZXJub3JfZmlsZXMuc3BsaXQo
KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzX2ZpbGVfY29u
dGVudHNbZmlsZV0gPSBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsIGZpbGVd
KS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuX2FkYl9jb21tYW5kKFsnc2hl
bGwnLCAnZWNobycsICdwZXJmb3JtYW5jZScsICc+JywgZmlsZV0pCisKKyAgICBkZWYgX3RlYXJk
b3duX3BlcmZvcm1hbmNlKHNlbGYpOgorICAgICAgICBmb3IgZmlsZSwgb3JpZ2luYWxfY29udGVu
dCBpbiBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnNfZmlsZV9jb250ZW50cy5pdGVtcygpOgorICAg
ICAgICAgICAgc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgb3JpZ2luYWxf
Y29udGVudCwgJz4nLCBmaWxlXSkKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzX2Zp
bGVfY29udGVudHMgPSB7fQorCisgICAgZGVmIHNldHVwX2RldmljZShzZWxmKToKKyAgICAgICAg
c2VsZi5fcHVzaF9tZDVzdW0oKQorICAgICAgICBzZWxmLl9zZXR1cF9wZXJmb3JtYW5jZSgpCisK
KyAgICBkZWYgcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRldmljZV9maWxl
KToKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGhvc3RfZmlsZSkKKyAgICAgICAgZGV2
aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKKyAg
ICAgICAgICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2FkYl9j
b21tYW5kICsgWydzaGVsbCcsIE1ENVNVTV9ERVZJQ0VfUEFUSCwgZGV2aWNlX2ZpbGVdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnBy
b2Nlc3MuUElQRSkuc3Rkb3V0KQorICAgICAgICBob3N0X2hhc2hlcyA9IHNlbGYuX2V4dHJhY3Rf
aGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Lmhv
c3QuZXhlY3V0aXZlLnBvcGVuKGFyZ3M9Wyclc19ob3N0JyAlIHNlbGYuX21kNXN1bV9wYXRoLCBo
b3N0X2ZpbGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQorICAgICAgICBpZiBob3N0X2hhc2hl
cyBhbmQgZGV2aWNlX2hhc2hlcyA9PSBob3N0X2hhc2hlczoKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShob3N0X2ZpbGUsIGRldmljZV9maWxlKQorCisg
ICAgZGVmIHJ1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Cisg
ICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUnVuIGFkYiBjb21tYW5kOiAn
ICsgc3RyKGNtZCkpCisgICAgICAgIGlmIGlnbm9yZV9lcnJvcjoKKyAgICAgICAgICAgIGVycm9y
X2hhbmRsZXIgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuaWdub3JlX2Vycm9yCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gTm9uZQorICAgICAgICByZXN1bHQgPSBz
ZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBjbWQs
IGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKKyAgICAgICAgIyBMaW1pdCB0aGUgbGVuZ3Ro
IHRvIGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBvZiBjb21tYW5kcyBsaWtlICdhZGIgbG9nY2F0
JyBhbmQgJ2NhdCAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZTAxJworICAgICAgICAjIHdob3Nl
IG91dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQgaW4gbGF0ZXIgbG9ncy4KKyAgICAgICAgbG9n
X2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdSdW4gYWRiIHJlc3VsdDogJyArIHJlc3VsdFs6
ODBdKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcnVuX2hvc3RfY29tbWFuZChz
ZWxmLCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKToKKyAg
ICAgICAgbG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdSdW4gaG9zdCBjb21tYW5kOiAn
ICsgc3RyKGNtZCkpCisgICAgICAgIGlmIGlnbm9yZV9lcnJvcjoKKyAgICAgICAgICAgIGVycm9y
X2hhbmRsZXIgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuaWdub3JlX2Vycm9yCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gTm9uZQorICAgICAgICByZXR1cm4gc2Vs
Zi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9o
YW5kbGVyLCByZXR1cm5fZXhpdF9jb2RlPXJldHVybl9leGl0X2NvZGUpCisKKyAgICBkZWYgZmls
ZV9leGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToKKyAgICAgICAgYXNzZXJ0
IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBm
dWxsX2ZpbGVfcGF0aAorCisgICAgZGVmIHBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX3BhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcigpCisK
KyAgICBkZWYgcGF0aF90b19ob3N0X2ZvcndhcmRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3BvcnQuX3BhdGhfdG9faG9zdF9mb3J3YXJkZXIoKQorCisgICAgZGVmIF9wdXNoX3RvX2Rl
dmljZShzZWxmLCBob3N0X3BhdGgsIGRldmljZV9wYXRoLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgor
ICAgICAgICByZXR1cm4gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydwdXNoJywgaG9zdF9wYXRoLCBk
ZXZpY2VfcGF0aF0sIGlnbm9yZV9lcnJvcikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
X2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dChtZDVzdW1fb3V0cHV0KToKKyAgICAg
ICAgYXNzZXJ0IG1kNXN1bV9vdXRwdXQKKyAgICAgICAgcmV0dXJuIFtsaW5lLnNwbGl0KCcgICcp
WzBdIGZvciBsaW5lIGluIG1kNXN1bV9vdXRwdXRdCisKKworY2xhc3MgUG9ydHMob2JqZWN0KToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCk6CisgICAgICAg
IHNlbGYuZGV2aWNlX3BvcnQgPSBkZXZpY2VfcG9ydAorICAgICAgICBzZWxmLmhvc3RfcG9ydCA9
IGhvc3RfcG9ydAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnKCVk
LCAlZCknICUgKHNlbGYuZGV2aWNlX3BvcnQsIHNlbGYuaG9zdF9wb3J0KQorCisKK2NsYXNzIFBy
b2Nlc3NFeHBlY3Qob2JqZWN0KToKKyAgICBTVUNDRVNTID0gMAorICAgIEZBSUxVUkUgPSAxCisg
ICAgRU9GID0gMgorICAgIFRJTUVPVVQgPSAzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGlt
ZW91dF9zZWNzLCBhbmRyb2lkX3BvcnQsIG5hbWUsIGNvbW1hbmQpOgorICAgICAgICBzZWxmLl90
aW1lb3V0X3NlY3MgPSB0aW1lb3V0X3NlY3MKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IGFuZHJv
aWRfcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IoYW5kcm9pZF9wb3J0LCBuYW1lLCBj
b21tYW5kKQorICAgICAgICBzZWxmLl9wcm9jZXNzLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fYmVm
b3JlID0gJycKKyAgICAgICAgc2VsZi5fbWF0Y2ggPSBOb25lCisKKyAgICBkZWYgX3JlYWRfbGlu
ZShzZWxmLCBkZWFkbGluZSk6CisgICAgICAgIGxpbmUgPSBzZWxmLl9wcm9jZXNzLnJlYWRfZWl0
aGVyX3N0ZG91dF9vcl9zdGRlcnJfbGluZShkZWFkbGluZSkKKyAgICAgICAgaWYgbGluZVswXToK
KyAgICAgICAgICAgIHJldHVybiBsaW5lWzBdCisgICAgICAgIGVsaWYgbGluZVsxXToKKyAgICAg
ICAgICAgIHJldHVybiBsaW5lWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorCisgICAgZGVmIGdldF9hbGxfb3V0cHV0KHNlbGYpOgorICAgICAgICBkZWFkbGluZSA9
IHRpbWUudGltZSgpICsgc2VsZi5fdGltZW91dF9zZWNzCisgICAgICAgIGxpbmUgPSBzZWxmLl9y
ZWFkX2xpbmUoZGVhZGxpbmUpCisgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICBzZWxm
Ll9iZWZvcmUgKz0gbGluZQorICAgICAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRfbGluZShkZWFk
bGluZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2JlZm9yZQorCisgICAgZGVmIGdldF9tYXRjaChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoCisKKyAgICBkZWYgZXhwZWN0KHNlbGYs
IHN1Y2Nlc3NfcmUsIGZhaWx1cmVfcmUpOgorICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgp
ICsgc2VsZi5fdGltZW91dF9zZWNzCisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgZGVhZGxp
bmU6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fcmVhZF9saW5lKGRlYWRsaW5lKQorICAgICAg
ICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNl
bGYuX2JlZm9yZSArPSBsaW5lCisgICAgICAgICAgICBmYWlsdXJlX20gPSBmYWlsdXJlX3JlLm1h
dGNoKGxpbmUpCisgICAgICAgICAgICBpZiBmYWlsdXJlX206CisgICAgICAgICAgICAgICAgc2Vs
Zi5fbWF0Y2ggPSBmYWlsdXJlX20KKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5GQUlMVVJF
CisgICAgICAgICAgICBzdWNjZXNzX20gPSBzdWNjZXNzX3JlLm1hdGNoKGxpbmUpCisgICAgICAg
ICAgICBpZiBzdWNjZXNzX206CisgICAgICAgICAgICAgICAgc2VsZi5fbWF0Y2ggPSBzdWNjZXNz
X20KKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5TVUNDRVNTCisgICAgICAgIGlmIHNlbGYu
X3Byb2Nlc3MudGltZWRfb3V0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuVElNRU9VVAorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuRU9GCisKKyAgICBkZWYgY2xvc2Uo
c2VsZik6CisgICAgICAgIHNlbGYuX3Byb2Nlc3Muc3RvcCgwLjApCisKKworY2xhc3MgRm9yd2Fy
ZGVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgdG8gbWFuYWdlIHBvcnQgZm9yd2FyZHMgZnJvbSB0
aGUgZGV2aWNlIHRvIHRoZSBob3N0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFuZHJv
aWRfY21kLCB3b3JrZXJfbnVtYmVyLCBwb3J0X3BhaXJzLCBob3N0X25hbWUpOgorICAgICAgICAi
IiJGb3J3YXJkcyBUQ1AgcG9ydHMgb24gdGhlIGRldmljZSBiYWNrIHRvIHRoZSBob3N0LgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgICBhbmRyb2lkX2NtZDogSW5zdGFuY2Ugb2YgQW5kcm9p
ZENvbW1hbmRzLgorICAgICAgICAgICAgd29ya2VyX251bWJlcjogSW50ZWdlciwgd29ya2VyIG51
bWJlci4KKyAgICAgICAgICAgIHBvcnRfcGFpcnM6IEEgbGlzdCBvZiBQb3J0cyB0byBmb3J3YXJk
LiBOb3RlIHRoYXQgeW91IGNhbiBzcGVjaWZ5IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFz
IGEgZGV2aWNlX3BvcnQsIGluIHdoaWNoIGNhc2UgYSBwb3J0IHdpbGwgYnkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGR5bmFtaWNhbGx5IGFzc2lnbmVkIG9uIHRoZSBkZXZpY2UuIFlvdSBjYW4g
Z2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRoZSBhc3NpZ25lZCBw
b3J0IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX3BvcnRfZm9yX2hv
c3RfcG9ydCBtZXRob2QuCisgICAgICAgICAgICBob3N0X25hbWU6IEFkZHJlc3MgdG8gZm9yd2Fy
ZCB0bywgbXVzdCBiZSBhZGRyZXNzYWJsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICBob3N0IG1hY2hpbmUuIFVzdWFsbHkgdXNlIGxvb3BiYWNrICcxMjcuMC4wLjEnLgorCisgICAg
ICAgIFJhaXNlczoKKyAgICAgICAgICAgIEV4Y2VwdGlvbiBvbiBmYWlsdXJlIHRvIGZvcndhcmQg
dGhlIHBvcnQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZCA9IGFuZHJv
aWRfY21kCisgICAgICAgIHNlbGYuX2hvc3RfdG9fZGV2aWNlX3BvcnRfbWFwID0ge30KKyAgICAg
ICAgc2VsZi5faG9zdF9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2Vz
cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fYWRiX2ZvcndhcmRfcHJvY2VzcyA9IE5vbmUKKyAgICAg
ICAgc2VsZi5fZGV2aWNlX3NlcmlhbCA9IHNlbGYuX2FuZHJvaWRfY21kLmdldF9kZXZpY2Vfc2Vy
aWFsKCkKKworICAgICAgICBhc3NlcnQoRk9SV0FSREVSX0NPTlRST0xfUE9SVF9CRUdJTiArIHdv
cmtlcl9udW1iZXIgPCBGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VORCkKKworICAgICAgICBzZWxm
Ll9ob3N0X2FkYl9jb250cm9sX3BvcnQgPSBzZWxmLl9hbGxvY2F0ZV9hZGJfY29udHJvbF9wb3J0
KHdvcmtlcl9udW1iZXIpCisgICAgICAgIGlmIG5vdCBzZWxmLl9ob3N0X2FkYl9jb250cm9sX3Bv
cnQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBhbGxvY2F0ZSBhbiBh
ZGIgY29udHJvbCBwb3J0IG9uIHRoZSBob3N0LicpCisKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9j
bWQucHVzaF9maWxlX2lmX25lZWRlZCgKKyAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnBh
dGhfdG9fZGV2aWNlX2ZvcndhcmRlcigpLAorICAgICAgICAgICAgREVWSUNFX0ZPUldBUkRFUl9Q
QVRIKQorICAgICAgICBzZWxmLl9ob3N0X2ZvcndhcmRlcl9wYXRoID0gc2VsZi5fYW5kcm9pZF9j
bWQucGF0aF90b19ob3N0X2ZvcndhcmRlcigpCisKKyAgICAgICAgZm9yd2FyZF9zdHJpbmcgPSBb
JyVkOiVkOiVzJyAlIChwYWlyLmRldmljZV9wb3J0LCBwYWlyLmhvc3RfcG9ydCwgaG9zdF9uYW1l
KSBmb3IgcGFpciBpbiBwb3J0X3BhaXJzXQorCisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZp
Y2Vfc2VyaWFsLCAnRm9yd2FyZGluZyBwb3J0czogJXMnICUgc3RyKGZvcndhcmRfc3RyaW5nKSkK
KworICAgICAgICBob3N0X2ZvcndhcmRlcl9mbGFncyA9IFsnLS1hZGJfcG9ydD0lcycgJSAoc2Vs
Zi5faG9zdF9hZGJfY29udHJvbF9wb3J0KV0gKyBmb3J3YXJkX3N0cmluZworICAgICAgICBob3N0
X3BhdHRlcm4gPSAnaG9zdF9mb3J3YXJkZXIuKicgKyAnLionLmpvaW4oaG9zdF9mb3J3YXJkZXJf
ZmxhZ3MpCisKKyAgICAgICAgIyBGSVhNRTogUmF0aGVyIHRoYW4gdXNpbmcgYSBibG9ja2luZyBr
aWxsKCkgaGVyZSwgdGhlIGRldmljZQorICAgICAgICAjIGZvcndhcmRlciBjb3VsZCB0cnkgdG8g
YmluZCB0aGUgVW5peCBEb21haW4gU29ja2V0IHVudGlsIGl0IHN1Y2NlZWRzIG9yCisgICAgICAg
ICMgd2hpbGUgaXQgZmFpbHMgYmVjYXVzZSB0aGUgc29ja2V0IGlzIGFscmVhZHkgYm91bmQgKHdp
dGggYXBwcm9wcmlhdGUKKyAgICAgICAgIyB0aW1lb3V0IGhhbmRsaW5nIG9idmlvdXNseSkuCisg
ICAgICAgIHNlbGYuX2tpbGxfaG9zdF9mb3J3YXJkZXJfYmxvY2tpbmcoaG9zdF9wYXR0ZXJuLCBG
T1JXQVJERVJfS0lMTF9USU1FT1VUX1NFQ1MpCisgICAgICAgIHNlbGYuX2tpbGxfZGV2aWNlX2Zv
cndhcmRlcl9ibG9ja2luZyhGT1JXQVJERVJfS0lMTF9USU1FT1VUX1NFQ1MpCisKKyAgICAgICAg
c2VsZi5fYWRiX2ZvcndhcmRfcHJvY2VzcyA9IFByb2Nlc3NFeHBlY3QoCisgICAgICAgICAgICBG
T1JXQVJERVJfVElNRU9VVF9TRUNTLAorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQuX3Bv
cnQsCisgICAgICAgICAgICAnYWRiX2ZvcndhcmRlcicsCisgICAgICAgICAgICBbJ2FkYicsICct
cycsIHNlbGYuX2RldmljZV9zZXJpYWwsICdmb3J3YXJkJywgJ3RjcDolcycgJSBzZWxmLl9ob3N0
X2FkYl9jb250cm9sX3BvcnQsICdsb2NhbGFic3RyYWN0OiVzJyAlIERFVklDRV9BREJfQ09OVFJP
TF9QT1JUXSkKKworICAgICAgICBzZWxmLl9kZXZpY2VfcHJvY2VzcyA9IFByb2Nlc3NFeHBlY3Qo
CisgICAgICAgICAgICBGT1JXQVJERVJfVElNRU9VVF9TRUNTLAorICAgICAgICAgICAgc2VsZi5f
YW5kcm9pZF9jbWQuX3BvcnQsCisgICAgICAgICAgICAnZGV2aWNlX2ZvcndhcmRlcicsCisgICAg
ICAgICAgICBbJ2FkYicsICctcycsIHNlbGYuX2RldmljZV9zZXJpYWwsICdzaGVsbCcsICclcyAt
RCAtLWFkYl9zb2NrPSVzJyAlIChERVZJQ0VfRk9SV0FSREVSX1BBVEgsIERFVklDRV9BREJfQ09O
VFJPTF9QT1JUKV0pCisgICAgICAgIGRldmljZV9zdWNjZXNzX3JlID0gcmUuY29tcGlsZSgnU3Rh
cnRpbmcgRGV2aWNlIEZvcndhcmRlci4nKQorICAgICAgICBkZXZpY2VfZmFpbHVyZV9yZSA9IHJl
LmNvbXBpbGUoJy4qOkVSUk9SOiguKiknKQorICAgICAgICByZXQgPSBzZWxmLl9kZXZpY2VfcHJv
Y2Vzcy5leHBlY3QoZGV2aWNlX3N1Y2Nlc3NfcmUsIGRldmljZV9mYWlsdXJlX3JlKQorICAgICAg
ICBpZiByZXQgPT0gUHJvY2Vzc0V4cGVjdC5GQUlMVVJFOgorICAgICAgICAgICAgZXJyb3JfbXNn
ID0gc3RyKHNlbGYuX2RldmljZV9wcm9jZXNzLmdldF9tYXRjaCgpLmdyb3VwKDEpKQorICAgICAg
ICAgICAgbG9nX2Vycm9yKHNlbGYuX2RldmljZV9zZXJpYWwsIHNlbGYuX2RldmljZV9wcm9jZXNz
LmdldF9hbGxfb3V0cHV0KCkpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHN0YXJ0IERldmljZSBGb3J3YXJkZXIgd2l0aCBF
cnJvcjogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cpCisgICAg
ICAgIGVsaWYgcmV0ID09IFByb2Nlc3NFeHBlY3QuRU9GOgorICAgICAgICAgICAgbG9nX2Vycm9y
KHNlbGYuX2RldmljZV9zZXJpYWwsIHNlbGYuX2RldmljZV9wcm9jZXNzLmdldF9hbGxfb3V0cHV0
KCkpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bignVW5leHBlY3RlZCBFT0Ygd2hpbGUgdHJ5aW5nIHRvIHN0YXJ0IERldmljZSBGb3J3YXJkZXIu
JykKKyAgICAgICAgZWxpZiByZXQgPT0gUHJvY2Vzc0V4cGVjdC5USU1FT1VUOgorICAgICAgICAg
ICAgbG9nX2Vycm9yKHNlbGYuX2RldmljZV9zZXJpYWwsIHNlbGYuX2RldmljZV9wcm9jZXNzLmdl
dF9hbGxfb3V0cHV0KCkpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignVGltZW91dCB3aGlsZSB0cnlpbmcgc3RhcnQgRGV2aWNlIEZvcndhcmRl
cicpCisKKyAgICAgICAgc2VsZi5faG9zdF9wcm9jZXNzID0gUHJvY2Vzc0V4cGVjdCgKKyAgICAg
ICAgICAgIEZPUldBUkRFUl9USU1FT1VUX1NFQ1MsCisgICAgICAgICAgICBzZWxmLl9hbmRyb2lk
X2NtZC5fcG9ydCwKKyAgICAgICAgICAgICdob3N0X2ZvcndhcmRlcicsCisgICAgICAgICAgICBb
c2VsZi5faG9zdF9mb3J3YXJkZXJfcGF0aF0gKyBob3N0X2ZvcndhcmRlcl9mbGFncykKKyAgICAg
ICAgIyBSZWFkIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgdG8gZGV0ZXJtaW5lIHdoaWNoIGRl
dmljZSBwb3J0cyB3aGVyZQorICAgICAgICAjIGZvcndhcmRlZCB0byB3aGljaCBob3N0IHBvcnRz
IChuZWNlc3NhcnkgaWYKKyAgICAgICAgaG9zdF9zdWNjZXNzX3JlID0gcmUuY29tcGlsZSgnRm9y
d2FyZGluZyBkZXZpY2UgcG9ydCAoXGQrKSB0byBob3N0IChcZCspOicpCisgICAgICAgIGhvc3Rf
ZmFpbHVyZV9yZSA9IHJlLmNvbXBpbGUoJy4qOkVSUk9SOiguKiknKQorICAgICAgICBmb3IgcGFp
ciBpbiBwb3J0X3BhaXJzOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5faG9zdF9wcm9jZXNzLmV4
cGVjdChob3N0X3N1Y2Nlc3NfcmUsIGhvc3RfZmFpbHVyZV9yZSkKKyAgICAgICAgICAgIGlmIHJl
dCA9PSBQcm9jZXNzRXhwZWN0LlNVQ0NFU1M6CisgICAgICAgICAgICAgICAgZGV2aWNlX3BvcnQg
PSBpbnQoc2VsZi5faG9zdF9wcm9jZXNzLmdldF9tYXRjaCgpLmdyb3VwKDEpKQorICAgICAgICAg
ICAgICAgIGhvc3RfcG9ydCA9IGludChzZWxmLl9ob3N0X3Byb2Nlc3MuZ2V0X21hdGNoKCkuZ3Jv
dXAoMikpCisgICAgICAgICAgICAgICAgc2VsZi5faG9zdF90b19kZXZpY2VfcG9ydF9tYXBbaG9z
dF9wb3J0XSA9IGRldmljZV9wb3J0CisgICAgICAgICAgICAgICAgbG9nX2RlYnVnKHNlbGYuX2Rl
dmljZV9zZXJpYWwsICdGb3J3YXJkaW5nIGRldmljZSBwb3J0OiAlZCB0byBob3N0IHBvcnQ6ICVk
LicgJSAoZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCkpCisgICAgICAgICAgICBlbGlmIHJldCA9PSBQ
cm9jZXNzRXhwZWN0LkZBSUxVUkU6CisgICAgICAgICAgICAgICAgbG9nX2Vycm9yKHNlbGYuX2Rl
dmljZV9zZXJpYWwsIHNlbGYuX2hvc3RfcHJvY2Vzcy5nZXRfYWxsX291dHB1dCgpKQorICAgICAg
ICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbign
RmFpbGVkIHRvIGZvcndhcmQgcG9ydHMgJXMnICUgKHBvcnRfcGFpcnMpKQorICAgICAgICAgICAg
ZWxpZiByZXQgPT0gUHJvY2Vzc0V4cGVjdC5FT0Y6CisgICAgICAgICAgICAgICAgbG9nX2Vycm9y
KHNlbGYuX2RldmljZV9zZXJpYWwsIHNlbGYuX2hvc3RfcHJvY2Vzcy5nZXRfYWxsX291dHB1dCgp
KQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbignVW5leHBlY3RlZCBFT0Ygd2hpbGUgdHJ5aW5nIHRvIGZvcndhcmQgcG9ydHMgJXMn
ICUgcG9ydF9wYWlycykKKyAgICAgICAgICAgIGVsaWYgcmV0ID09IFByb2Nlc3NFeHBlY3QuVElN
RU9VVDoKKyAgICAgICAgICAgICAgICBsb2dfZXJyb3Ioc2VsZi5fZGV2aWNlX3NlcmlhbCwgc2Vs
Zi5faG9zdF9wcm9jZXNzLmdldF9hbGxfb3V0cHV0KCkpCisgICAgICAgICAgICAgICAgc2VsZi5j
bG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaW1lb3V0IHdoaWxlIHRy
eWluZyB0byBmb3J3YXJkIHBvcnRzICVzJyAlIHBvcnRfcGFpcnMpCisKKyAgICBkZWYgX2FsbG9j
YXRlX2FkYl9jb250cm9sX3BvcnQoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHBvcnQg
PSBGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0JFR0lOICsgd29ya2VyX251bWJlcgorICAgICAgICB3
aGlsZSBwb3J0IDwgRk9SV0FSREVSX0NPTlRST0xfUE9SVF9FTkQgYW5kIHNlbGYuX2lzX2hvc3Rf
cG9ydF91c2VkKHBvcnQpOgorICAgICAgICAgICAgcG9ydCArPSAxCisgICAgICAgIGlmIHBvcnQg
Pj0gRk9SV0FSREVSX0NPTlRST0xfUE9SVF9FTkQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQor
ICAgICAgICByZXR1cm4gcG9ydAorCisgICAgZGVmIF9pc19ob3N0X3BvcnRfdXNlZChzZWxmLCBo
b3N0X3BvcnQpOgorICAgICAgICAiIiJDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIGhvc3Qg
cG9ydCBpcyB1c2VkIG9yIG5vdC4KKworICAgICAgICBVc2VzIC1uIC1QIHRvIGluaGliaXQgdGhl
IGNvbnZlcnNpb24gb2YgaG9zdC9wb3J0IG51bWJlcnMgdG8gaG9zdC9wb3J0IG5hbWVzLgorICAg
ICAgICAiIiIKKyAgICAgICAgcG9ydF9pbmZvID0gJyguKXwoMTI3XC4wXC4wXC4xKXwobG9jYWxo
b3N0KVw6JWQnICUgaG9zdF9wb3J0CisgICAgICAgIHJlX3BvcnQgPSByZS5jb21waWxlKHBvcnRf
aW5mbywgcmUuTVVMVElMSU5FKQorICAgICAgICBvdXRwdXQgPSBzZWxmLl9hbmRyb2lkX2NtZC5y
dW5faG9zdF9jb21tYW5kKFsnbHNvZicsICctblBpOiVkJyAlIGhvc3RfcG9ydF0sIGlnbm9yZV9l
cnJvcj1UcnVlLCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlKQorICAgICAgICBpZiByZV9wb3J0LmZp
bmRhbGwob3V0cHV0KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgZGVmIF9raWxsX2hvc3RfZm9yd2FyZGVyX2Jsb2NraW5nKHNlbGYsIGhvc3Rf
cGF0dGVybiwgdGltZW91dF9zZWMpOgorICAgICAgICAiIiJLaWxscyBhbnkgZXhpc3RpbmcgaG9z
dCBmb3J3YXJkZXJzIHVzaW5nIHRoZSBwcm92aWRlZCBwYXR0ZXJuLgorCisgICAgICAgIE5vdGUg
dGhhdCB0aGlzIHdhaXRzIHVudGlsIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuCisgICAgICAgICIi
IgorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5faG9zdF9jb21tYW5kKFsncGtpbGwnLCAn
LWYnLCBob3N0X3BhdHRlcm5dKQorICAgICAgICBlbGFwc2VkX3NlY29uZHMgPSAwCisgICAgICAg
IHdhaXRfcGVyaW9kX3NlY29uZHMgPSAwLjEKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9ob3N0X2NvbW1hbmQoWydwZ3JlcCcsICctZicsIGhvc3RfcGF0dGVybl0pIGFu
ZCAoZWxhcHNlZF9zZWNvbmRzIDwgdGltZW91dF9zZWMpOgorICAgICAgICAgICAgdGltZS5zbGVl
cCh3YWl0X3BlcmlvZF9zZWNvbmRzKQorICAgICAgICAgICAgZWxhcHNlZF9zZWNvbmRzICs9IHdh
aXRfcGVyaW9kX3NlY29uZHMKKyAgICAgICAgaWYgZWxhcHNlZF9zZWNvbmRzID49IHRpbWVvdXRf
c2VjOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2hpbGUga2lsbGlu
ZyAnICsgaG9zdF9wYXR0ZXJuKQorCisgICAgZGVmIF9leHRyYWN0X3BpZChzZWxmLCBwc19vdXRw
dXQsIHByb2Nlc3NfbmFtZSk6CisgICAgICAgIHBpZHMgPSBbXQorICAgICAgICBmb3IgbGluZSBp
biBwc19vdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBkYXRhID0gbGluZS5zcGxpdCgp
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgcHJvY2Vzc19uYW1lIGluIGRh
dGFbLTFdOiAgIyBuYW1lIGlzIGluIHRoZSBsYXN0IGNvbHVtbgorICAgICAgICAgICAgICAgICAg
ICBpZiBwcm9jZXNzX25hbWUgPT0gZGF0YVstMV06CisgICAgICAgICAgICAgICAgICAgICAgICBw
aWRzLmluc2VydCgwLCBkYXRhWzFdKSAgIyBQSUQgaXMgaW4gdGhlIHNlY29uZCBjb2x1bW4KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpZHMuYXBw
ZW5kKGRhdGFbMV0pCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAg
ICAgICBwYXNzCisgICAgICAgIHJldHVybiBwaWRzCisKKyAgICBkZWYgX2tpbGxfZGV2aWNlX2Zv
cndhcmRlcl9ibG9ja2luZyhzZWxmLCB0aW1lb3V0X3NlYyk6CisgICAgICAgICIiIktpbGxzIGFu
eSBleGlzdGluZyBkZXZpY2UgZm9yd2FyZGVycy4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyB3
YWl0cyB1bnRpbCB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzLgorICAgICAgICAiIiIKKyAgICAgICAg
cHNfb3V0cHV0ID0gc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
cHMnXSkKKyAgICAgICAgcGlkcyA9IHNlbGYuX2V4dHJhY3RfcGlkKHBzX291dHB1dCwgJ2Rldmlj
ZV9mb3J3YXJkZXInKQorICAgICAgICBmb3IgcGlkIGluIHBpZHM6CisgICAgICAgICAgICBzZWxm
Ll9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdraWxsJywgcGlkXSkKKwor
ICAgICAgICBlbGFwc2VkX3NlY29uZHMgPSAwCisgICAgICAgIHdhaXRfcGVyaW9kX3NlY29uZHMg
PSAwLjEKKyAgICAgICAgd2hpbGUgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsn
c2hlbGwnLCAncHMnXSkuZmluZCgnZGV2aWNlX2ZvcndhcmRlcicpID49IDAgYW5kIChlbGFwc2Vk
X3NlY29uZHMgPCB0aW1lb3V0X3NlYyk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKHdhaXRfcGVy
aW9kX3NlY29uZHMpCisgICAgICAgICAgICBlbGFwc2VkX3NlY29uZHMgKz0gd2FpdF9wZXJpb2Rf
c2Vjb25kcworICAgICAgICBpZiBlbGFwc2VkX3NlY29uZHMgPj0gdGltZW91dF9zZWM6CisgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVkIG91dCB3aGlsZSBraWxsaW5nIGRldmljZV9m
b3J3YXJkZXIuJykKKworICAgIGRlZiBkZXZpY2VfcG9ydF9mb3JfaG9zdF9wb3J0KHNlbGYsIGhv
c3RfcG9ydCk6CisgICAgICAgIHJldHVybiBzZWxmLl9ob3N0X3RvX2RldmljZV9wb3J0X21hcC5n
ZXQoaG9zdF9wb3J0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9o
b3N0X3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9ob3N0X3Byb2Nlc3MuY2xvc2UoKQorICAg
ICAgICBpZiBzZWxmLl9kZXZpY2VfcHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYuX2RldmljZV9w
cm9jZXNzLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5fYWRiX2ZvcndhcmRfcHJvY2VzczoKKyAg
ICAgICAgICAgIHNlbGYuX2FkYl9mb3J3YXJkX3Byb2Nlc3MuY2xvc2UoKQorICAgICAgICBzZWxm
Ll9ob3N0X3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2RldmljZV9wcm9jZXNzID0gTm9u
ZQorICAgICAgICBzZWxmLl9hZGJfZm9yd2FyZF9wcm9jZXNzID0gTm9uZQorCisgICAgZGVmIF9f
ZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisKIGNsYXNzIENocm9taXVtQW5k
cm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwg
d29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2UpOgogICAgICAgICBz
dXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIHdvcmtlcl9u
dW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQpAQCAtMzMyLDIyICs3MDQsMTcgQEAgY2xh
c3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzZWxmLl9l
cnJfZmlmb19wYXRoID0gREVWSUNFX0ZJRk9fUEFUSCArICdzdGRlcnIuZmlmbycKICAgICAgICAg
c2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVhZF9zdGRl
cnJfcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25l
CisgICAgICAgIHNlbGYuX2ZvcndhcmRlciA9IE5vbmUKICAgICAgICAgc2VsZi5faGFzX3NldHVw
ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzID0ge30KICAgICAgICAg
c2VsZi5fZGV2aWNlX3NlcmlhbCA9IHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKHdvcmtlcl9udW1i
ZXIpCiAgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMnLCBzZWxmLl9kZXZp
Y2Vfc2VyaWFsXQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZCA9IEFuZHJvaWRDb21tYW5kcyhw
b3J0LCB3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2Vy
X251bWJlcgogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX3RlYXJkb3du
X3BlcmZvcm1hbmNlKCkKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxm
KS5fX2RlbF9fKCkKIAotICAgIGRlZiBfc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2RhdGFfaWZfbmVl
ZGVkKHNlbGYpOgotICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9IHNlbGYuX3BvcnQuX3BhdGhf
dG9fbWQ1c3VtKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShN
RDVTVU1fREVWSUNFX1BBVEgpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX3B1c2hfdG9fZGV2
aWNlKHNlbGYuX21kNXN1bV9wYXRoLCBNRDVTVU1fREVWSUNFX1BBVEgpOgotICAgICAgICAgICAg
ICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgcHVzaCBtZDVzdW0gdG8gZGV2aWNl
JykKLQorICAgIGRlZiBfcHVzaF9kYXRhX2lmX25lZWRlZChzZWxmKToKICAgICAgICAgc2VsZi5f
cHVzaF9leGVjdXRhYmxlKCkKICAgICAgICAgc2VsZi5fcHVzaF9mb250cygpCiAgICAgICAgIHNl
bGYuX3B1c2hfdGVzdF9yZXNvdXJjZXMoKQpAQCAtMzU2LDEwMyArNzIzLDYwIEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgaWYgc2VsZi5faGFz
X3NldHVwOgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi5fc2V0dXBfbWQ1c3Vt
X2FuZF9wdXNoX2RhdGFfaWZfbmVlZGVkKCkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVu
X2FkYl9jb21tYW5kKFsncm9vdCddKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5zZXR1cF9k
ZXZpY2UoKQogICAgICAgICBzZWxmLl9oYXNfc2V0dXAgPSBUcnVlCi0gICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3Jvb3QnXSkKLSAgICAgICAgc2VsZi5fc2V0dXBfcGVyZm9ybWFuY2Uo
KQorCiAgICAgICAgICMgUmVxdWlyZWQgYnkgd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3RE
aXJGaWxlUGF0aCgpLgogICAgICAgICAjIE90aGVyIGRpcmVjdG9yaWVzIHdpbGwgYmUgY3JlYXRl
ZCBhdXRvbWF0aWNhbGx5IGJ5IGFkYiBwdXNoLgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1h
bmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hy
b21lJ10pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ21rZGlyJywgJy1wJywgREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJvbWUnXSkKIAog
ICAgICAgICAjIEFsbG93IHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAgdG8gZnVsbHkgYWNjZXNzIHRo
ZSBkaXJlY3RvcnkuCiAgICAgICAgICMgVGhlIG5hdGl2ZSBjb2RlIG5lZWRzIHRoZSBwZXJtaXNz
aW9uIHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlcyBhbmQgY3JlYXRlIHBpcGVzIGhlcmUuCi0gICAg
ICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNF
X0RSVF9ESVJdKQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjaG1v
ZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX0RSVF9ESVJdKQor
ICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjaG1v
ZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0pCiAKICAgICAgICAgIyBEZWxldGUgdGhlIGRpc2sg
Y2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNsZWFuIHRlc3QgcnVuLgogICAgICAgICAjIFRoaXMg
aXMgbGlrZSB3aGF0J3MgZG9uZSBpbiBDaHJvbWl1bVBvcnQuc2V0dXBfdGVzdF9ydW4gYnV0IG9u
IHRoZSBkZXZpY2UuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3Jt
JywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQotCi0gICAgZGVmIF9sb2dfZXJyb3Ioc2VsZiwg
bWVzc2FnZSk6Ci0gICAgICAgIF9sb2cuZXJyb3IoJ1slc10gJXMnICUgKHNlbGYuX2RldmljZV9z
ZXJpYWwsIG1lc3NhZ2UpKQotCi0gICAgZGVmIF9sb2dfZGVidWcoc2VsZiwgbWVzc2FnZSk6Ci0g
ICAgICAgIF9sb2cuZGVidWcoJ1slc10gJXMnICUgKHNlbGYuX2RldmljZV9zZXJpYWwsIG1lc3Nh
Z2UpKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdybScsICctcicsIERSVF9BUFBfQ0FDSEVfRElSXSkKIAogICAgIGRlZiBfYWJvcnQoc2VsZiwg
bWVzc2FnZSk6CiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdbJXNdICVzJyAlIChzZWxm
Ll9kZXZpY2Vfc2VyaWFsLCBtZXNzYWdlKSkKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYg
X2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dChtZDVzdW1fb3V0cHV0KToKLSAgICAg
ICAgYXNzZXJ0IG1kNXN1bV9vdXRwdXQKLSAgICAgICAgcmV0dXJuIFtsaW5lLnNwbGl0KCcgICcp
WzBdIGZvciBsaW5lIGluIG1kNXN1bV9vdXRwdXRdCi0KLSAgICBkZWYgX3B1c2hfZmlsZV9pZl9u
ZWVkZWQoc2VsZiwgaG9zdF9maWxlLCBkZXZpY2VfZmlsZSk6Ci0gICAgICAgIGFzc2VydCBvcy5w
YXRoLmV4aXN0cyhob3N0X2ZpbGUpCi0gICAgICAgIGRldmljZV9oYXNoZXMgPSBzZWxmLl9leHRy
YWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQoCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9y
dC5ob3N0LmV4ZWN1dGl2ZS5wb3BlbihzZWxmLl9hZGJfY29tbWFuZCArIFsnc2hlbGwnLCBNRDVT
VU1fREVWSUNFX1BBVEgsIGRldmljZV9maWxlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dCkKLSAg
ICAgICAgaG9zdF9oYXNoZXMgPSBzZWxmLl9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRw
dXQoCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmV4ZWN1dGl2ZS5wb3Blbihhcmdz
PVsnJXNfaG9zdCcgJSBzZWxmLl9tZDVzdW1fcGF0aCwgaG9zdF9maWxlXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJ
UEUpLnN0ZG91dCkKLSAgICAgICAgaWYgaG9zdF9oYXNoZXMgYW5kIGRldmljZV9oYXNoZXMgPT0g
aG9zdF9oYXNoZXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fcHVzaF90b19k
ZXZpY2UoaG9zdF9maWxlLCBkZXZpY2VfZmlsZSkKLQogICAgIGRlZiBfcHVzaF9leGVjdXRhYmxl
KHNlbGYpOgotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX3Bh
dGhfdG9fZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkKLSAgICAgICAgc2VsZi5f
cHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJl
ZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUucGFrJykKLSAgICAgICAg
c2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVu
ZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWVfcmVz
b3VyY2VzJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2Fu
ZHJvaWRfbWFpbl9mb250cy54bWwnKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVk
KHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJyksIERF
VklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJykKLSAgICAgICAgc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQUF9QQUNLQUdFXSkKKyAgICAg
ICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKCdEdW1wUmVuZGVyVHJlZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRl
clRyZWUucGFrJykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRl
ZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVW
SUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJykKKyAgICAgICAgc2VsZi5f
YW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdh
bmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRfbWFpbl9m
b250cy54bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNoX2ZpbGVfaWZfbmVlZGVk
KHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJyksIERF
VklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJykKKyAgICAgICAgc2Vs
Zi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQUF9QQUNL
QUdFXSkKICAgICAgICAgZHJ0X2hvc3RfcGF0aCA9IHNlbGYuX3BvcnQuX3BhdGhfdG9fZHJpdmVy
KCkKLSAgICAgICAgaW5zdGFsbF9yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydpbnN0
YWxsJywgZHJ0X2hvc3RfcGF0aF0pCisgICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5fYW5k
cm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQogICAg
ICAgICBpZiBpbnN0YWxsX3Jlc3VsdC5maW5kKCdTdWNjZXNzJykgPT0gLTE6CiAgICAgICAgICAg
ICBzZWxmLl9hYm9ydCgnRmFpbGVkIHRvIGluc3RhbGwgJXMgb250byBkZXZpY2U6ICVzJyAlIChk
cnRfaG9zdF9wYXRoLCBpbnN0YWxsX3Jlc3VsdCkpCiAKICAgICBkZWYgX3B1c2hfZm9udHMoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnUHVzaGluZyBmb250cycpCisgICAgICAgIGxv
Z19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUHVzaGluZyBmb250cycpCiAgICAgICAgIHBh
dGhfdG9fYWhlbV9mb250ID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnQUhFTV9fX18uVFRGJykK
LSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVW
SUNFX0ZPTlRTX0RJUiArICdBSEVNX19fXy5UVEYnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2Nt
ZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHBhdGhfdG9fYWhlbV9mb250LCBERVZJQ0VfRk9OVFNfRElS
ICsgJ0FIRU1fX19fLlRURicpCiAgICAgICAgIGZvciAoaG9zdF9kaXJzLCBmb250X2ZpbGUsIHBh
Y2thZ2UpIGluIEhPU1RfRk9OVF9GSUxFUzoKICAgICAgICAgICAgIGZvciBob3N0X2RpciBpbiBo
b3N0X2RpcnM6CiAgICAgICAgICAgICAgICAgaG9zdF9mb250X3BhdGggPSBob3N0X2RpciArIGZv
bnRfZmlsZQogICAgICAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQuX2NoZWNrX2ZpbGVfZXhpc3Rz
KGhvc3RfZm9udF9wYXRoLCAnJywgbG9nZ2luZz1GYWxzZSk6Ci0gICAgICAgICAgICAgICAgICAg
IHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoaG9zdF9mb250X3BhdGgsIERFVklDRV9GT05UU19E
SVIgKyBmb250X2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1
c2hfZmlsZV9pZl9uZWVkZWQoaG9zdF9mb250X3BhdGgsIERFVklDRV9GT05UU19ESVIgKyBmb250
X2ZpbGUpCiAKICAgICBkZWYgX3B1c2hfdGVzdF9yZXNvdXJjZXMoc2VsZik6Ci0gICAgICAgIHNl
bGYuX2xvZ19kZWJ1ZygnUHVzaGluZyB0ZXN0IHJlc291cmNlcycpCisgICAgICAgIGxvZ19kZWJ1
ZyhzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnUHVzaGluZyB0ZXN0IHJlc291cmNlcycpCiAgICAgICAg
IGZvciByZXNvdXJjZSBpbiBURVNUX1JFU09VUkNFU19UT19QVVNIOgotICAgICAgICAgICAgc2Vs
Zi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICcv
JyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJlc291cmNlKQorICAgICAg
ICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Lmxh
eW91dF90ZXN0c19kaXIoKSArICcvJyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJ
UiArIHJlc291cmNlKQogCi0gICAgZGVmIF9ydW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25v
cmVfZXJyb3I9RmFsc2UpOgotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1J1biBhZGIgY29tbWFu
ZDogJyArIHN0cihjbWQpKQotICAgICAgICBpZiBpZ25vcmVfZXJyb3I6Ci0gICAgICAgICAgICBl
cnJvcl9oYW5kbGVyID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcgotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IE5vbmUKLSAgICAgICAgcmVzdWx0
ID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYuX2FkYl9jb21tYW5kICsg
Y21kLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCi0gICAgICAgICMgTGltaXQgdGhlIGxl
bmd0aCB0byBhdm9pZCB0b28gdmVyYm9zZSBvdXRwdXQgb2YgY29tbWFuZHMgbGlrZSAnYWRiIGxv
Z2NhdCcgYW5kICdjYXQgL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmUwMScKLSAgICAgICAgIyB3
aG9zZSBvdXRwdXRzIGFyZSBub3JtYWxseSBwcmludGVkIGluIGxhdGVyIGxvZ3MuCi0gICAgICAg
IHNlbGYuX2xvZ19kZWJ1ZygnUnVuIGFkYiByZXN1bHQ6ICcgKyByZXN1bHRbOjgwXSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIF9saW5rX2RldmljZV9maWxlKHNlbGYsIGZyb21f
ZmlsZSwgdG9fZmlsZSwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgIyBybSB0b19maWxl
IGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGF0IGxuIHN1Y2NlZWRzLgotICAgICAgICBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIHRvX2ZpbGVdLCBpZ25vcmVfZXJyb3IpCi0gICAg
ICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdsbicsICctcycsIGZy
b21fZmlsZSwgdG9fZmlsZV0sIGlnbm9yZV9lcnJvcikKLQotICAgIGRlZiBfcHVzaF90b19kZXZp
Y2Uoc2VsZiwgaG9zdF9wYXRoLCBkZXZpY2VfcGF0aCwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1c2gnLCBob3N0X3BhdGgsIGRl
dmljZV9wYXRoXSwgaWdub3JlX2Vycm9yKQotCi0gICAgZGVmIF9wdWxsX2Zyb21fZGV2aWNlKHNl
bGYsIGRldmljZV9wYXRoLCBob3N0X3BhdGgsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydwdWxsJywgZGV2aWNlX3BhdGgsIGhvc3Rf
cGF0aF0sIGlnbm9yZV9lcnJvcikKKyAgICBkZWYgX2NvbW1hbmRfd3JhcHBlcihjbHMsIHdyYXBw
ZXJfb3B0aW9uKToKKyAgICAgICAgIyBJZ25vcmUgY29tbWFuZCB3cmFwcGVyIHdoaWNoIGlzIG5v
dCBhcHBsaWNhYmxlIG9uIEFuZHJvaWQuCisgICAgICAgIHJldHVybiBbXQogCiAgICAgZGVmIF9n
ZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYpOgotICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5fcnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCAnLW4nLCAnL2RhdGEvdG9tYnN0b25lcyddKQor
ICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsn
c2hlbGwnLCAnbHMnLCAnLW4nLCAnL2RhdGEvdG9tYnN0b25lcyddKQogICAgICAgICBpZiBub3Qg
dG9tYnN0b25lcyBvciB0b21ic3RvbmVzLnN0YXJ0c3dpdGgoJy9kYXRhL3RvbWJzdG9uZXM6IE5v
IHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKToKLSAgICAgICAgICAgIHNlbGYuX2xvZ19lcnJvcign
RFJUIGNyYXNoZWQsIGJ1dCBubyB0b21ic3RvbmUgZm91bmQhJykKKyAgICAgICAgICAgIGxvZ19l
cnJvcihzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnRFJUIGNyYXNoZWQsIGJ1dCBubyB0b21ic3RvbmUg
Zm91bmQhJykKICAgICAgICAgICAgIHJldHVybiAnJwogICAgICAgICB0b21ic3RvbmVzID0gdG9t
YnN0b25lcy5yc3RyaXAoKS5zcGxpdCgnXG4nKQogICAgICAgICBsYXN0X3RvbWJzdG9uZSA9IHRv
bWJzdG9uZXNbMF0uc3BsaXQoKQpAQCAtNDcxLDI4ICs3OTUsMTAgQEAgY2xhc3MgQ2hyb21pdW1B
bmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAjIHN0YWNrIHRyYWNlIGludG8g
YSBodW1hbiByZWFkYWJsZSBmb3JtYXQsIGlmIG5lZWRlZC4KICAgICAgICAgIyBJdCB0YWtlcyBh
IGxvbmcgdGltZSwgc28gZG9uJ3QgZG8gaXQgaGVyZS4KICAgICAgICAgcmV0dXJuICclc1xuJXMn
ICUgKCcgJy5qb2luKGxhc3RfdG9tYnN0b25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsICcvZGF0YS90b21ic3RvbmVz
LycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9kYXRhL3Rv
bWJzdG9uZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkpCiAKICAgICBkZWYgX2dldF9sb2djYXQo
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydsb2djYXQnLCAn
LWQnLCAnLXYnLCAndGhyZWFkdGltZSddKQotCi0gICAgZGVmIF9zZXR1cF9wZXJmb3JtYW5jZShz
ZWxmKToKLSAgICAgICAgIyBEaXNhYmxlIENQVSBzY2FsaW5nIGFuZCBkcm9wIHJhbSBjYWNoZSB0
byByZWR1Y2Ugbm9pc2UgaW4gdGVzdHMKLSAgICAgICAgaWYgbm90IHNlbGYuX29yaWdpbmFsX2dv
dmVybm9yczoKLSAgICAgICAgICAgIGdvdmVybm9yX2ZpbGVzID0gc2VsZi5fcnVuX2FkYl9jb21t
YW5kKFsnc2hlbGwnLCAnbHMnLCBTQ0FMSU5HX0dPVkVSTk9SU19QQVRURVJOXSkKLSAgICAgICAg
ICAgIGlmIGdvdmVybm9yX2ZpbGVzLmZpbmQoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSA9
PSAtMToKLSAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBnb3Zlcm5vcl9maWxlcy5zcGxpdCgp
OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnNbZmlsZV0gPSBz
ZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSkuc3RyaXAoKQotICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywg
J3BlcmZvcm1hbmNlJywgJz4nLCBmaWxlXSkKLQotICAgIGRlZiBfdGVhcmRvd25fcGVyZm9ybWFu
Y2Uoc2VsZik6Ci0gICAgICAgIGZvciBmaWxlLCBvcmlnaW5hbF9jb250ZW50IGluIHNlbGYuX29y
aWdpbmFsX2dvdmVybm9ycy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21t
YW5kKFsnc2hlbGwnLCAnZWNobycsIG9yaWdpbmFsX2NvbnRlbnQsICc+JywgZmlsZV0pCi0gICAg
ICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9ycyA9IHt9Ci0KLSAgICBkZWYgX2NvbW1hbmRfd3Jh
cHBlcihjbHMsIHdyYXBwZXJfb3B0aW9uKToKLSAgICAgICAgIyBJZ25vcmUgY29tbWFuZCB3cmFw
cGVyIHdoaWNoIGlzIG5vdCBhcHBsaWNhYmxlIG9uIEFuZHJvaWQuCi0gICAgICAgIHJldHVybiBb
XQorICAgICAgICByZXR1cm4gc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnbG9n
Y2F0JywgJy1kJywgJy12JywgJ3RocmVhZHRpbWUnXSkKIAogICAgIGRlZiBfZ2V0X2NyYXNoX2xv
ZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CiAgICAgICAgIGlmIG5vdCBzdGRv
dXQ6CkBAIC01MDgsMTAgKzgxNCw2IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2
ZXIuRHJpdmVyKToKICAgICAgICAgIyBUaGUgY29tbWFuZCBsaW5lIHBhc3NlZCB0byB0aGUgRFJU
IHByb2Nlc3MgaXMgcmV0dXJuZWQgYnkgX2RydF9jbWRfbGluZSgpIGluc3RlYWQuCiAgICAgICAg
IHJldHVybiBzZWxmLl9hZGJfY29tbWFuZCArIFsnc2hlbGwnXQogCi0gICAgZGVmIF9maWxlX2V4
aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxlX3BhdGgpOgotICAgICAgICBhc3NlcnQgZnVs
bF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxs
X2ZpbGVfcGF0aAotCiAgICAgZGVmIF9kcnRfY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBl
cl90ZXN0X2FyZ3MpOgogICAgICAgICByZXR1cm4gZHJpdmVyLkRyaXZlci5jbWRfbGluZShzZWxm
LCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykgKyBbJy0tY3JlYXRlLXN0ZGluLWZpZm8nLCAn
LS1zZXBhcmF0ZS1zdGRlcnItZmlmbyddCiAKQEAgLTUyNCwxNyArODI2LDE3IEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgcmV0dXJuIEZhbHNl
CiAKICAgICBkZWYgX2FsbF9waXBlc19jcmVhdGVkKHNlbGYpOgotICAgICAgICByZXR1cm4gKHNl
bGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAotICAgICAg
ICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRo
KSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5f
ZXJyX2ZpZm9fcGF0aCkpCisgICAgICAgIHJldHVybiAoc2VsZi5fYW5kcm9pZF9jbWQuZmlsZV9l
eGlzdHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAg
c2VsZi5fYW5kcm9pZF9jbWQuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3Bh
dGgpIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29u
X2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKIAogICAgIGRlZiBfcmVtb3ZlX2FsbF9waXBl
cyhzZWxmKToKICAgICAgICAgZm9yIGZpbGUgaW4gW3NlbGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5f
b3V0X2ZpZm9fcGF0aCwgc2VsZi5fZXJyX2ZpZm9fcGF0aF06Ci0gICAgICAgICAgICBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIGZpbGVdKQorICAgICAgICAgICAgc2VsZi5f
YW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCBmaWxlXSkKIAotICAg
ICAgICByZXR1cm4gKG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlm
b19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2
aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAotICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9m
aWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisgICAgICAgIHJldHVy
biAobm90IHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9m
aWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9hbmRyb2lkX2NtZC5maWxl
X2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAg
ICAgbm90IHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJf
Zmlmb19wYXRoKSkKIAogICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQsIHN0b3Bf
d2hlbl9kb25lKToKICAgICAgICAgYmFzZSA9IHNlbGYuX3BvcnQubG9va3VwX3ZpcnR1YWxfdGVz
dF9iYXNlKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCkBAIC01NTksNyArODYxLDcgQEAgY2xhc3Mg
Q2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBmb3IgcmV0cmll
cyBpbiByYW5nZSgzKToKICAgICAgICAgICAgIGlmIHNlbGYuX3N0YXJ0X29uY2UocGl4ZWxfdGVz
dHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAg
c2VsZi5fbG9nX2Vycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRp
b24uIFJldHJpZXM9JWQuIExvZzolcycgJSAocmV0cmllcywgc2VsZi5fZ2V0X2xvZ2NhdCgpKSkK
KyAgICAgICAgICAgIGxvZ19lcnJvcihzZWxmLl9kZXZpY2Vfc2VyaWFsLCAnRmFpbGVkIHRvIHN0
YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBSZXRyaWVzPSVkLiBMb2c6JXMnICUgKHJl
dHJpZXMsIHNlbGYuX2dldF9sb2djYXQoKSkpCiAgICAgICAgICAgICBzZWxmLnN0b3AoKQogICAg
ICAgICAgICAgdGltZS5zbGVlcCgyKQogICAgICAgICBzZWxmLl9hYm9ydCgnRmFpbGVkIHRvIHN0
YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uIG11bHRpcGxlIHRpbWVzLiBHaXZlIHVwLicp
CkBAIC01NjcsMTYgKzg2OSwxNSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6CiAgICAgZGVmIF9zdGFydF9vbmNlKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVz
dF9hcmdzKToKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fc3Rh
cnQocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCiAKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVn
KCdTdGFydGluZyBmb3J3YXJkZXInKQotICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2VzcyA9
IHNlbGYuX3BvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yKAotICAgICAgICAgICAgc2Vs
Zi5fcG9ydCwgJ0ZvcndhcmRlcicsIHNlbGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICclcyAt
RCAlcycgJSAoREVWSUNFX0ZPUldBUkRFUl9QQVRILCBGT1JXQVJEX1BPUlRTKV0pCi0gICAgICAg
IHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzLnN0YXJ0KCkKKyAgICAgICAgbG9nX2RlYnVnKHNlbGYu
X2RldmljZV9zZXJpYWwsICdTdGFydGluZyBmb3J3YXJkZXInKQorICAgICAgICBwb3J0X3BhaXJz
ID0gW1BvcnRzKHBvcnQsIHBvcnQpIGZvciBwb3J0IGluIEZPUldBUkRfUE9SVFNdCisgICAgICAg
IHNlbGYuX2ZvcndhcmRlciA9IEZvcndhcmRlcihzZWxmLl9hbmRyb2lkX2NtZCwgc2VsZi5fd29y
a2VyX251bWJlciwgcG9ydF9wYWlycywgJzEyNy4wLjAuMScpCiAKLSAgICAgICAgc2VsZi5fcnVu
X2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1jJ10pCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuX2NtZF9saW5lICsgWyc+JywgQ09NTUFORF9M
SU5FX0ZJTEVdKQotICAgICAgICBzdGFydF9yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQo
WydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScsICdSdW5JblN1YlRocmVhZCcsICctbicsIERS
VF9BQ1RJVklUWV9GVUxMX05BTUVdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRi
X2NvbW1hbmQoWydsb2djYXQnLCAnLWMnXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobyddICsgc2VsZi5fY21kX2xpbmUgKyBbJz4nLCBD
T01NQU5EX0xJTkVfRklMRV0pCisgICAgICAgIHN0YXJ0X3Jlc3VsdCA9IHNlbGYuX2FuZHJvaWRf
Y21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ3N0YXJ0JywgJy1lJywgJ1J1bklu
U3ViVGhyZWFkJywgJy1uJywgRFJUX0FDVElWSVRZX0ZVTExfTkFNRV0pCiAgICAgICAgIGlmIHN0
YXJ0X3Jlc3VsdC5maW5kKCdFeGNlcHRpb24nKSAhPSAtMToKLSAgICAgICAgICAgIHNlbGYuX2xv
Z19lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNl
cHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQorICAgICAgICAgICAgbG9nX2Vycm9yKHNlbGYuX2Rl
dmljZV9zZXJpYWwsICdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24u
IEV4Y2VwdGlvbjpcbicgKyBzdGFydF9yZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
IAogICAgICAgICBpZiBub3QgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9sb29wX3dpdGhfdGltZW91
dChzZWxmLl9hbGxfcGlwZXNfY3JlYXRlZCwgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKToK
QEAgLTU4NiwyMSArODg3LDIxIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIu
RHJpdmVyKToKICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIERSVF9TVEFSVF9TVE9Q
X1RJTUVPVVRfU0VDUwogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCiAgICAg
ICAgIHNlbGYuX3JlYWRfcHJvbXB0KGRlYWRsaW5lKQotICAgICAgICBzZWxmLl9sb2dfZGVidWco
J0ludGVyYWN0aXZlIHNoZWxsIHN0YXJ0ZWQnKQorICAgICAgICBsb2dfZGVidWcoc2VsZi5fZGV2
aWNlX3NlcmlhbCwgJ0ludGVyYWN0aXZlIHNoZWxsIHN0YXJ0ZWQnKQogCiAgICAgICAgICMgU3Rh
cnQgYSBwcm9jZXNzIHRvIHJlYWQgZnJvbSB0aGUgc3Rkb3V0IGZpZm8gb2YgdGhlIER1bXBSZW5k
ZXJUcmVlIGFwcCBhbmQgcHJpbnQgdG8gc3Rkb3V0LgotICAgICAgICBzZWxmLl9sb2dfZGVidWco
J1JlZGlyZWN0aW5nIHN0ZG91dCB0byAnICsgc2VsZi5fb3V0X2ZpZm9fcGF0aCkKKyAgICAgICAg
bG9nX2RlYnVnKHNlbGYuX2RldmljZV9zZXJpYWwsICdSZWRpcmVjdGluZyBzdGRvdXQgdG8gJyAr
IHNlbGYuX291dF9maWZvX3BhdGgpCiAgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3Mg
PSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcigKICAgICAgICAgICAgIHNl
bGYuX3BvcnQsICdSZWFkU3Rkb3V0Jywgc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJ2Nh
dCcsIHNlbGYuX291dF9maWZvX3BhdGhdKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9j
ZXNzLnN0YXJ0KCkKIAogICAgICAgICAjIFN0YXJ0IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhl
IHN0ZGVyciBmaWZvIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91
dC4KLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdSZWRpcmVjdGluZyBzdGRlcnIgdG8gJyArIHNl
bGYuX2Vycl9maWZvX3BhdGgpCisgICAgICAgIGxvZ19kZWJ1ZyhzZWxmLl9kZXZpY2Vfc2VyaWFs
LCAnUmVkaXJlY3Rpbmcgc3RkZXJyIHRvICcgKyBzZWxmLl9lcnJfZmlmb19wYXRoKQogICAgICAg
ICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3Nf
Y29uc3RydWN0b3IoCiAgICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVhZFN0ZGVycicsIHNlbGYu
X2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9lcnJfZmlmb19wYXRoXSkKICAg
ICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzcy5zdGFydCgpCiAKLSAgICAgICAgc2VsZi5f
bG9nX2RlYnVnKCdSZWRpcmVjdGluZyBzdGRpbiB0byAnICsgc2VsZi5faW5fZmlmb19wYXRoKQor
ICAgICAgICBsb2dfZGVidWcoc2VsZi5fZGV2aWNlX3NlcmlhbCwgJ1JlZGlyZWN0aW5nIHN0ZGlu
IHRvICcgKyBzZWxmLl9pbl9maWZvX3BhdGgpCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNz
LndyaXRlKCdjYXQgPiVzXG4nICUgc2VsZi5faW5fZmlmb19wYXRoKQogCiAgICAgICAgICMgQ29t
YmluZSB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgcGlwZXMgaW50byBzZWxmLl9zZXJ2ZXJfcHJvY2Vz
cy4KQEAgLTYxMiw3ICs5MTMsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6CiAgICAgICAgICAgICAgICAgIyByZWFkaW5nL3dyaXRpbmcgdGhlIGZpZm8uIEtp
bGwgdGhlIGZpZm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB0byBsZXQgdGhlCiAgICAgICAg
ICAgICAgICAgIyBtYWluIHRocmVhZCBlc2NhcGUgZnJvbSB0aGUgZGVhZGxvY2tlZCBzdGF0ZS4g
QWZ0ZXIgdGhhdCwgdGhlIG1haW4gdGhyZWFkIHdpbGwKICAgICAgICAgICAgICAgICAjIHRyZWF0
IHRoaXMgYXMgYSBjcmFzaC4KLSAgICAgICAgICAgICAgICBzZWxmLl9sb2dfZXJyb3IoJ0RlYWRs
b2NrIGRldGVjdGVkLiBQcm9jZXNzZXMga2lsbGVkLicpCisgICAgICAgICAgICAgICAgbG9nX2Vy
cm9yKHNlbGYuX2RldmljZV9zZXJpYWwsICdEZWFkbG9jayBkZXRlY3RlZC4gUHJvY2Vzc2VzIGtp
bGxlZC4nKQogICAgICAgICAgICAgICAgIGZvciBpIGluIHByb2Nlc3NlczoKICAgICAgICAgICAg
ICAgICAgICAgaS5raWxsKCkKIApAQCAtNjM4LDcgKzkzOSw3IEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAg
ICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnYW0nLCAnZm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCisgICAgICAgIHNlbGYuX2Fu
ZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBE
UlRfQVBQX1BBQ0tBR0VdKQogCiAgICAgICAgIGlmIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3M6
CiAgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLmtpbGwoKQpAQCAtNjUwLDkg
Kzk1MSw5IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKIAog
ICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnN0b3AoKQogCi0gICAg
ICAgIGlmIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzOgotICAgICAgICAgICAgc2VsZi5fZm9yd2Fy
ZGVyX3Byb2Nlc3Mua2lsbCgpCi0gICAgICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2VzcyA9
IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fZm9yd2FyZGVyOgorICAgICAgICAgICAgc2VsZi5fZm9y
d2FyZGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlciA9IE5vbmUKIAogICAg
ICAgICBpZiBzZWxmLl9oYXNfc2V0dXA6CiAgICAgICAgICAgICBpZiBub3QgQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLl9sb29wX3dpdGhfdGltZW91dChzZWxmLl9yZW1vdmVfYWxsX3BpcGVzLCBEUlRf
U1RBUlRfU1RPUF9USU1FT1VUX1NFQ1MpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177474</attachid>
            <date>2012-12-04 06:39:13 -0800</date>
            <delta_ts>2012-12-05 05:10:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121204153637.patch</filename>
            <type>text/plain</type>
            <size>31573</size>
            <attacher name="Philippe Liard">pliard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTc5ZDI2Y2JhZTc3OWEzMzg0YWMxZjVjZDgwOTAyOGYz
ZGVhZTQ3ZC4uYzNmNDE2OTZmOTlkMjM1M2E3YTYzZTRmN2M2MDRkZjRlNTQ4NDBhYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3
IEBACisyMDEyLTEyLTA0ICBQaGlsaXBwZSBMaWFyZCAgPHBsaWFyZEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgVXNlIGZvcndhcmRlcjIgaW4gQ2hyb21lIGZvciBBbmRyb2lkIGxheW91dCB0ZXN0
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTg4
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRl
clRyZWUuZ3lwOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIu
cnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0LnByZV9z
aGFyZGluZ19pbml0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuY2hlY2tfYnVpbGQp
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lk
UG9ydC5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRz
KToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5fX2luaXRfXyk6CisgICAgICAgIChBbmRyb2lk
Q29tbWFuZHMuc2V0dXBfbWQ1c3VtKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5nZXRfYWRi
X2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnJ1bl9jb21tYW5kKToKKyAgICAg
ICAgKEFuZHJvaWRDb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENv
bW1hbmRzLmZpbGVfZXhpc3RzX29uX2RldmljZSk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMu
cHVzaF90b19kZXZpY2UpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1bGxfZnJvbV9kZXZp
Y2UpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQpOgorICAg
ICAgICAoQW5kcm9pZENvbW1hbmRzLl9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQp
OgorICAgICAgICAoRm9yd2FyZGVyKToKKyAgICAgICAgKEZvcndhcmRlci5fX2luaXRfXyk6Cisg
ICAgICAgIChGb3J3YXJkZXIua2lsbF9ob3N0X2RhZW1vbik6CisgICAgICAgIChGb3J3YXJkZXIu
a2lsbF9kZXZpY2VfZGFlbW9uKToKKyAgICAgICAgKEZvcndhcmRlci5zZXR1cF9yZWRpcmVjdGlv
bnMpOgorICAgICAgICAoRm9yd2FyZGVyLl9hbGxvY2F0ZV9hZGJfY29udHJvbF9wb3J0KToKKyAg
ICAgICAgKEZvcndhcmRlci5faXNfcG9ydF91c2VkKToKKyAgICAgICAgKEZvcndhcmRlci5fZ2V0
X2FkYl9jb21tYW5kX3N0cmluZyk6CisgICAgICAgIChGb3J3YXJkZXIuX3J1bl9zaGVsbF9jb21t
YW5kX2FuZF9nZXRfZXhpdF9jb2RlKToKKyAgICAgICAgKEZvcndhcmRlci5wYXRoX3RvX2Rldmlj
ZV9mb3J3YXJkZXIpOgorICAgICAgICAoRm9yd2FyZGVyLnBhdGhfdG9faG9zdF9mb3J3YXJkZXIp
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5fX2RlbF9fKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERy
aXZlci5fc2V0dXBfdGVzdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1c2hf
ZGF0YV9pZl9uZWVkZWQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNoX2V4
ZWN1dGFibGUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNoX2ZvbnRzKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF90ZXN0X3Jlc291cmNlcyk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3Jlc3RhcnRfYWRiX2FzX3Jvb3QpOgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9nZXRfbGFzdF9zdGFja3RyYWNlKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2xvZ2NhdCk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWREcml2ZXIuX3NldHVwX3BlcmZvcm1hbmNlKToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZERyaXZlci5fdGVhcmRvd25fcGVyZm9ybWFuY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLmNtZF9saW5lKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fYWxs
X3BpcGVzX2NyZWF0ZWQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9yZW1vdmVf
YWxsX3BpcGVzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuc3RvcCk6CisKIDIwMTItMTItMDMgIFN1
ZGFyc2FuYSBOYWdpbmVuaSAgPHN1ZGFyc2FuYS5uYWdpbmVuaUBpbnRlbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gQWRkaW5nIG15c2VsZiB0byBjb21taXR0ZXJzLnB5LgpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVl
Lmd5cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVy
VHJlZS5neXAKaW5kZXggY2M4MzMzMjA5OTgxNDczZjM5NmI3YTcyMzI0ZWYxMDAzY2IzZTlmMS4u
ZjVkZWY4ZjA5ZmE5YTAxNGJlYjBjMjA5YWMwZTEyZjE4NGExZDM4ZiAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRy
ZWUuZ3lwCkBAIC0zMzUsNyArMzM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVu
Y2llcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Jh
c2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAogICAgICAgICAgICAgICAgICAgICAgICAg
JzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL25hdGl2ZV90ZXN0Lmd5cDpuYXRp
dmVfdGVzdF9uYXRpdmVfY29kZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1
bV9zcmNfZGlyKS90b29scy9hbmRyb2lkL2ZvcndhcmRlci9mb3J3YXJkZXIuZ3lwOmZvcndhcmRl
cicsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90b29scy9h
bmRyb2lkL2ZvcndhcmRlcjIvZm9yd2FyZGVyLmd5cDpmb3J3YXJkZXIyJywKICAgICAgICAgICAg
ICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rvb2xzL2FuZHJvaWQvbWQ1c3VtL21k
NXN1bS5neXA6bWQ1c3VtJywKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAg
ICAgICAgJ2NvcGllcyc6IFt7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIu
cHkKaW5kZXggNTRjZTVlNmZlMTE5ODZiZjc0MjVkNWNkODRmOWMxMTViMDZhZTA2Ny4uNzg3ZDQx
MTc4NTQ2ZDM4YzRiODRjZmU1ZTE2ZmM5MjQ1ZTJjMGI2MiAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVy
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L2xheW91dF90ZXN0X3J1bm5lci5weQpAQCAtMTEwLDYgKzExMCw5IEBAIGNsYXNzIExheW91dFRl
c3RSdW5uZXIob2JqZWN0KToKICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQog
ICAgICAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCiAKKyAgICAgICAgaWYgJ3ByZV9zaGFyZGluZ19p
bml0JyBpbiBkaXIoc2VsZi5fcG9ydCk6CisgICAgICAgICAgICBzZWxmLl9wb3J0LnByZV9zaGFy
ZGluZ19pbml0KCkKKwogICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU2hhcmRp
bmcgdGVzdHMgLi4uJykKICAgICAgICAgbG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzID0g
c2VsZi5fc2hhcmRlci5zaGFyZF90ZXN0cyh0ZXN0X2lucHV0cywgaW50KHNlbGYuX29wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzKSwgc2VsZi5fb3B0aW9ucy5mdWxseV9wYXJhbGxlbCkKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9h
bmRyb2lkLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkLnB5CmluZGV4IDkxY2QzMTAwYzA4YWUwNzYwMzEyNGM2NjRkYTJiZmE4MGZi
NDdhNmMuLjU5ZjAzZGMxNWZhMjg2MzNiMGMzYTFhNjkyMDBmYzNkZDlmY2MzYTQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5k
cm9pZC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtX2FuZHJvaWQucHkKQEAgLTU0LDcgKzU0LDcgQEAgQ09NTUFORF9MSU5FX0ZJTEUgPSBE
RVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZS1uYXRpdmUtdGVzdHMtY29tbWFuZC1saW5l
JwogIyBJZiBjaGFuZ2UgdGhpcywgbXVzdCBhbHNvIGNoYW5nZSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcAogIyBhbmQgQ2hyb21pdW0ncyB3ZWJraXQv
c3VwcG9ydC9wbGF0Zm9ybV9zdXBwb3J0X2FuZHJvaWQuY2MuCiBERVZJQ0VfRFJUX0RJUiA9IERF
VklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnZHJ0LycKLURFVklDRV9GT1JXQVJERVJfUEFUSCA9IERF
VklDRV9EUlRfRElSICsgJ2ZvcndhcmRlcicKK0RFVklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklD
RV9EUlRfRElSICsgJ2RldmljZV9mb3J3YXJkZXInCiAKICMgUGF0aCBvbiB0aGUgZGV2aWNlIHdo
ZXJlIHRoZSB0ZXN0IGZyYW1ld29yayB3aWxsIGNyZWF0ZSB0aGUgZmlmbyBwaXBlcy4KIERFVklD
RV9GSUZPX1BBVEggPSAnL2RhdGEvZGF0YS9vcmcuY2hyb21pdW0ubmF0aXZlX3Rlc3QvZmlsZXMv
JwpAQCAtNzYsNyArNzYsMTIgQEAgTEFZT1VUX1RFU1RfUEFUSF9QUkVGSVggPSAnL2FsbC10ZXN0
cycKICMgODAwMCwgODA4MCBhbmQgODQ0MyBhcmUgZm9yIGh0dHAvaHR0cHMgdGVzdHMuCiAjIDg4
ODAgYW5kIDkzMjMgYXJlIGZvciB3ZWJzb2NrZXQgdGVzdHMKICMgKHNlZSBodHRwX3NlcnZlci5w
eSwgYXBhY2hlX2h0dHBfc2VydmVyLnB5IGFuZCB3ZWJzb2NrZXRfc2VydmVyLnB5KS4KLUZPUldB
UkRfUE9SVFMgPSAnODAwMCA4MDgwIDg0NDMgODg4MCA5MzIzJworRk9SV0FSRF9QT1JUUyA9ICg4
MDAwLCA4MDgwLCA4NDQzLCA4ODgwLCA5MzIzKQorCisjIFdlIHJ1biBvbmUgRm9yd2FyZGVyIHBl
ciBkZXZpY2UgLyB3b3JrZXIsIGFuZCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZSBjb250cm9sCisj
IHBvcnQgZm9yIGVhY2ggRm9yd2FyZGVyLiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSByYW5n
ZSBvZiBwb3J0cyB3ZSBjYW4gdXNlLgorRk9SV0FSREVSX0NPTlRST0xfUE9SVF9CRUdJTiA9IDIw
MDAwCitGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VORCA9IDIxMDAwCiAKIE1TX1RSVUVUWVBFX0ZP
TlRTX0RJUiA9ICcvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvJwogTVNf
VFJVRVRZUEVfRk9OVFNfUEFDS0FHRSA9ICd0dGYtbXNjb3JlZm9udHMtaW5zdGFsbGVyJwpAQCAt
MTc5LDYgKzE4NCw5IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21p
dW1Qb3J0KToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2RldmljZXMgPSBbXQog
CisgICAgZGVmIHByZV9zaGFyZGluZ19pbml0KHNlbGYpOgorICAgICAgICBGb3J3YXJkZXIua2ls
bF9ob3N0X2RhZW1vbihzZWxmLl9idWlsZF9wYXRoKQorCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBfYW5kcm9pZF9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvcihwb3J0LCBzZXJ2ZXJfbmFt
ZSwgY21kX2xpbmUsIGVudj1Ob25lKToKICAgICAgICAgcmV0dXJuIHNlcnZlcl9wcm9jZXNzLlNl
cnZlclByb2Nlc3MocG9ydCwgc2VydmVyX25hbWUsIGNtZF9saW5lLCBlbnYsCkBAIC0yMTIsNyAr
MjIwLDggQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQp
OgogICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmVzdWx0
ID0gc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2VsZikuY2hlY2tfYnVpbGQobmVlZHNfaHR0
cCkKICAgICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5wYXRoX3Rv
X21kNXN1bSgpLCAnbWQ1c3VtIHV0aWxpdHknKSBhbmQgcmVzdWx0Ci0gICAgICAgIHJlc3VsdCA9
IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYucGF0aF90b19mb3J3YXJkZXIoKSwgJ2Zvcndh
cmRlciB1dGlsaXR5JykgYW5kIHJlc3VsdAorICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19m
aWxlX2V4aXN0cyhzZWxmLnBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcigpLCAnZGV2aWNlX2Zvcndh
cmRlciB1dGlsaXR5JykgYW5kIHJlc3VsdAorICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19m
aWxlX2V4aXN0cyhzZWxmLnBhdGhfdG9faG9zdF9mb3J3YXJkZXIoKSwgJ2hvc3RfZm9yd2FyZGVy
IHV0aWxpdHknKSBhbmQgcmVzdWx0CiAgICAgICAgIGlmIG5vdCByZXN1bHQ6CiAgICAgICAgICAg
ICBfbG9nLmVycm9yKCdGb3IgY29tcGxldGUgQW5kcm9pZCBidWlsZCByZXF1aXJlbWVudHMsIHBs
ZWFzZSBzZWU6JykKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCkBAIC0yODQsOCArMjkzLDEx
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKIAog
ICAgICAgICByZXR1cm4gQ2hyb21pdW1BbmRyb2lkUG9ydC5fYWRiX3BhdGgKIAotICAgIGRlZiBw
YXRoX3RvX2ZvcndhcmRlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgo
J2ZvcndhcmRlcicpCisgICAgZGVmIHBhdGhfdG9faG9zdF9mb3J3YXJkZXIoc2VsZik6CisgICAg
ICAgIHJldHVybiBGb3J3YXJkZXIucGF0aF90b19ob3N0X2ZvcndhcmRlcihzZWxmLl9idWlsZF9w
YXRoKQorCisgICAgZGVmIHBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihzZWxmKToKKyAgICAgICAg
cmV0dXJuIEZvcndhcmRlci5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoc2VsZi5fYnVpbGRfcGF0
aCkKIAogICAgIGRlZiBwYXRoX3RvX21kNXN1bShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYu
X2J1aWxkX3BhdGgoTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUpCkBAIC0zNjAsNiArMzcyLDE3NCBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAg
ICAgIHJldHVybiBkZXZpY2VzW3dvcmtlcl9udW1iZXJdCiAKIAorY2xhc3MgQW5kcm9pZENvbW1h
bmRzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2Vfc2VyaWFsLCBwYXRoX2J1aWxkZXIp
OgorICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCA9IFsnYWRiJywgJy1zJywgZGV2aWNlX3Nlcmlh
bF0KKyAgICAgICAgc2VsZi5fcGF0aF9idWlsZGVyID0gcGF0aF9idWlsZGVyCisKKyAgICBkZWYg
c2V0dXBfbWQ1c3VtKHNlbGYpOgorICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9IHNlbGYuX3Bh
dGhfYnVpbGRlcihNRDVTVU1fREVWSUNFX0ZJTEVfTkFNRSkKKyAgICAgICAgaWYgbm90IHNlbGYu
ZmlsZV9leGlzdHNfb25fZGV2aWNlKE1ENVNVTV9ERVZJQ0VfUEFUSCk6CisgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5wdXNoX3RvX2RldmljZShzZWxmLl9tZDVzdW1fcGF0aCwgTUQ1U1VNX0RFVklD
RV9QQVRIKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90
IHB1c2ggbWQ1c3VtIHRvIGRldmljZScpCisKKyAgICBkZWYgZ2V0X2FkYl9jb21tYW5kKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fYWRiX2NvbW1hbmQKKworICAgIGRlZiBydW5fY29tbWFu
ZChzZWxmLCBjbWQpOgorICAgICAgICBfbG9nLmRlYnVnKCdSdW4gY29tbWFuZDogJyArIHN0cihj
bWQpKQorICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZGVycj1zdWJw
cm9jZXNzLlNURE9VVCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcmV0dXJuIHBy
b2Nlc3MuY29tbXVuaWNhdGUoKVswXQorCisgICAgZGVmIHJ1bl9hZGJfY29tbWFuZChzZWxmLCBj
bWQpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bl9jb21tYW5kKHNlbGYuX2FkYl9jb21tYW5k
ICsgY21kKQorICAgICAgICBfbG9nLmRlYnVnKCdSdW4gYWRiIHJlc3VsdDogJyArIHN0cihvdXRw
dXRbOjgwXSkpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBmaWxlX2V4aXN0c19v
bl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxlX3BhdGgpOgorICAgICAgICBhc3NlcnQgZnVsbF9maWxl
X3BhdGguc3RhcnRzd2l0aCgnLycpCisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9hZGJfY29tbWFu
ZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmlsZV9w
YXRoCisKKyAgICBkZWYgcHVzaF90b19kZXZpY2Uoc2VsZiwgaG9zdF9wYXRoLCBkZXZpY2VfcGF0
aCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3B1c2gnLCBob3N0X3Bh
dGgsIGRldmljZV9wYXRoXSkKKworICAgIGRlZiBwdWxsX2Zyb21fZGV2aWNlKHNlbGYsIGRldmlj
ZV9wYXRoLCBob3N0X3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5fYWRiX2NvbW1hbmQo
WydwdWxsJywgZGV2aWNlX3BhdGgsIGhvc3RfcGF0aF0pCisKKyAgICBkZWYgcHVzaF9maWxlX2lm
X25lZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRldmljZV9maWxlKToKKyAgICAgICAgYXNzZXJ0IG9z
LnBhdGguZXhpc3RzKGhvc3RfZmlsZSkKKyAgICAgICAgbWQ1c3VtX291dHB1dCA9IHNlbGYucnVu
X2FkYl9jb21tYW5kKFtNRDVTVU1fREVWSUNFX1BBVEgsIGRldmljZV9maWxlXSkKKyAgICAgICAg
ZGV2aWNlX2hhc2hlcyA9IEFuZHJvaWRDb21tYW5kcy5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVz
dW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpCisgICAgICAgIGhvc3RfaGFzaGVzID0gc2VsZi5fZXh0
cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAorICAgICAgICAgICAgICAgIHNlbGYucnVu
X2NvbW1hbmQoWyclc19ob3N0JyAlIHNlbGYuX21kNXN1bV9wYXRoLCBob3N0X2ZpbGVdKSkKKyAg
ICAgICAgaWYgaG9zdF9oYXNoZXMgYW5kIGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6Cisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5wdXNoX3RvX2RldmljZShob3N0X2ZpbGUs
IGRldmljZV9maWxlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZXh0cmFjdF9oYXNo
ZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgorICAgICAgICBhc3NlcnQgbWQ1
c3VtX291dHB1dAorICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9yIGxpbmUg
aW4gbWQ1c3VtX291dHB1dF0KKworCisjIERldmljZSB0byBob3N0IHBvcnQgZm9yd2FyZGVyLgor
Y2xhc3MgRm9yd2FyZGVyOgorICAgIERFVklDRV9GT1JXQVJERVJfUEFUSCA9ICcvZGF0YS9sb2Nh
bC90bXAvZGV2aWNlX2ZvcndhcmRlcicKKyAgICAjIFVuaXggRG9tYWluIFNvY2tldCBwYXRoOgor
ICAgIEFEQl9DT05UUk9MX1BPUlQgPSAnY2hyb21lX2RldmljZV9mb3J3YXJkZXInCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcGF0aF9idWlsZGVyLCBhbmRyb2lkX2NtZCk6CisgICAgICAgIHNl
bGYuX2RldmljZV9mb3J3YXJkZXJfcGF0aCA9IHBhdGhfYnVpbGRlcignZGV2aWNlX2ZvcndhcmRl
cicpCisgICAgICAgIHNlbGYuX2hvc3RfZm9yd2FyZGVyX3BhdGggPSBwYXRoX2J1aWxkZXIoJ2hv
c3RfZm9yd2FyZGVyJykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQgPSBhbmRyb2lkX2NtZAor
ICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyX3RvX2FkYl9jb250cm9sX3BvcnRfbWFwID0ge30K
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYga2lsbF9ob3N0X2RhZW1vbihwYXRoX2J1aWxk
ZXIpOgorICAgICAgICBfbG9nLmRlYnVnKCdLaWxsaW5nIGhvc3QgZGFlbW9uICcpCisgICAgICAg
IChleGl0X2NvZGUsIG91dHB1dCkgPSBGb3J3YXJkZXIuX3J1bl9zaGVsbF9jb21tYW5kX2FuZF9n
ZXRfZXhpdF9jb2RlKAorICAgICAgICAgICAgJyVzIGtpbGwtc2VydmVyJyAlIEZvcndhcmRlci5w
YXRoX3RvX2hvc3RfZm9yd2FyZGVyKHBhdGhfYnVpbGRlcikpCisgICAgICAgIGlmIGV4aXRfY29k
ZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBraWxs
IGhvc3RfZm9yd2FyZGVyOlxuJXMnICUgb3V0cHV0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBraWxsX2RldmljZV9kYWVtb24oYW5kcm9pZF9jbWQpOgorICAgICAgICBfbG9nLmRlYnVn
KCdLaWxsaW5nIGRldmljZSBkYWVtb24gJykKKyAgICAgICAgaWYgbm90IGFuZHJvaWRfY21kLmZp
bGVfZXhpc3RzX29uX2RldmljZShGb3J3YXJkZXIuREVWSUNFX0ZPUldBUkRFUl9QQVRIKToKKyAg
ICAgICAgICAgIHJldHVybgorICAgICAgICAoZXhpdF9jb2RlLCBvdXRwdXQpID0gRm9yd2FyZGVy
Ll9ydW5fc2hlbGxfY29tbWFuZF9hbmRfZ2V0X2V4aXRfY29kZSgKKyAgICAgICAgICAgICAgICAn
JXMgc2hlbGwgJXMga2lsbC1zZXJ2ZXInICUgKEZvcndhcmRlci5fZ2V0X2FkYl9jb21tYW5kX3N0
cmluZyhhbmRyb2lkX2NtZCksIEZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BBVEgpKQorICAg
ICAgICBpZiBleGl0X2NvZGUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9y
KCdDb3VsZCBub3Qga2lsbCBkZXZpY2VfZm9yd2FyZGVyOlxuJXMnICUgb3V0cHV0KQorCisgICAg
ZGVmIHNldHVwX3JlZGlyZWN0aW9ucyhzZWxmLCB3b3JrZXJfbnVtYmVyLCBwb3J0X3BhaXJzLCBo
b3N0X2FkZHJlc3MpOgorICAgICAgICBhc3NlcnQoRk9SV0FSREVSX0NPTlRST0xfUE9SVF9CRUdJ
TiArIHdvcmtlcl9udW1iZXIgPCBGb3J3YXJkZXIuQURCX0NPTlRST0xfUE9SVCkKKworICAgICAg
ICBhZGJfY29udHJvbF9wb3J0ID0gc2VsZi5fd29ya2VyX251bWJlcl90b19hZGJfY29udHJvbF9w
b3J0X21hcC5nZXQod29ya2VyX251bWJlcikKKyAgICAgICAgaWYgbm90IGFkYl9jb250cm9sX3Bv
cnQ6CisgICAgICAgICAgICBhZGJfY29udHJvbF9wb3J0ID0gc2VsZi5fYWxsb2NhdGVfYWRiX2Nv
bnRyb2xfcG9ydCh3b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgaWYgbm90IGFkYl9jb250cm9s
X3BvcnQ6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBh
bGxvY2F0ZSBBREIgY29udHJvbCBwb3J0JykKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1i
ZXJfdG9fYWRiX2NvbnRyb2xfcG9ydF9tYXBbd29ya2VyX251bWJlcl0gPSBhZGJfY29udHJvbF9w
b3J0CisKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxm
Ll9kZXZpY2VfZm9yd2FyZGVyX3BhdGgsIEZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BBVEgp
CisgICAgICAgICMgQ29tbWFuZCBmb3JtYXQ6IDxBREIgcG9ydD46PERldmljZSBwb3J0Pjo8SG9z
dCBwb3J0Pjo8SG9zdCBhZGRyZXNzPgorICAgICAgICByZWRpcmVjdGlvbl9jb21tYW5kcyA9IFsK
KyAgICAgICAgICAgICAgICAnJWQ6JWQ6JWQ6JXMnICUgKGFkYl9jb250cm9sX3BvcnQsIGRldmlj
ZV9wb3J0LCBob3N0X3BvcnQsIGhvc3RfYWRkcmVzcykgZm9yIGRldmljZV9wb3J0LCBob3N0X3Bv
cnQgaW4gcG9ydF9wYWlyc10KKworICAgICAgICBjbWRfc3RyaW5nID0gJyVzIGZvcndhcmQgdGNw
OiVzIGxvY2FsYWJzdHJhY3Q6JXMnICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgRm9yd2Fy
ZGVyLl9nZXRfYWRiX2NvbW1hbmRfc3RyaW5nKHNlbGYuX2FuZHJvaWRfY21kKSwgYWRiX2NvbnRy
b2xfcG9ydCwgRm9yd2FyZGVyLkFEQl9DT05UUk9MX1BPUlQpCisgICAgICAgIChleGl0X2NvZGUs
IG91dHB1dCkgPSBGb3J3YXJkZXIuX3J1bl9zaGVsbF9jb21tYW5kX2FuZF9nZXRfZXhpdF9jb2Rl
KGNtZF9zdHJpbmcpCisgICAgICAgIGlmIGV4aXRfY29kZSAhPSAwOgorICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBmb3J3YXJkIGhvc3QgdG8gZGV2aWNlIHBvcnQg
dXNpbmcgQURCOiAlcycgJSBvdXRwdXQpCisKKyAgICAgICAgKGV4aXRfY29kZSwgb3V0cHV0KSA9
IEZvcndhcmRlci5fcnVuX3NoZWxsX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUoCisgICAgICAg
ICAgICAnJXMgc2hlbGwgJXMgJXMnICUgKEZvcndhcmRlci5fZ2V0X2FkYl9jb21tYW5kX3N0cmlu
ZyhzZWxmLl9hbmRyb2lkX2NtZCksIEZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BBVEgsIEZv
cndhcmRlci5BREJfQ09OVFJPTF9QT1JUKSkKKyAgICAgICAgaWYgZXhpdF9jb2RlICE9IDA6Cisg
ICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IHJ1biBkZXZpY2VfZm9y
d2FyZGVyOiAlcycgJSBvdXRwdXQpCisKKyAgICAgICAgZm9yIHJlZGlyZWN0aW9uX2NvbW1hbmQg
aW4gcmVkaXJlY3Rpb25fY29tbWFuZHM6CisgICAgICAgICAgICAoZXhpdF9jb2RlLCBvdXRwdXQp
ID0gRm9yd2FyZGVyLl9ydW5fc2hlbGxfY29tbWFuZF9hbmRfZ2V0X2V4aXRfY29kZSgKKyAgICAg
ICAgICAgICAgICAgICAgJyVzICVzJyAlIChzZWxmLl9ob3N0X2ZvcndhcmRlcl9wYXRoLCByZWRp
cmVjdGlvbl9jb21tYW5kKSkKKyAgICAgICAgICAgIGlmIGV4aXRfY29kZSAhPSAwOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgcnVuIGhvc3RfZm9yd2Fy
ZGVyOiAlcycgJSBvdXRwdXQpCisKKyAgICBkZWYgX2FsbG9jYXRlX2FkYl9jb250cm9sX3BvcnQo
c2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHBvcnQgPSBGT1JXQVJERVJfQ09OVFJPTF9Q
T1JUX0JFR0lOICsgd29ya2VyX251bWJlcgorICAgICAgICB3aGlsZSBwb3J0IDwgRk9SV0FSREVS
X0NPTlRST0xfUE9SVF9FTkQgYW5kIHNlbGYuX2lzX3BvcnRfdXNlZChwb3J0KToKKyAgICAgICAg
ICAgIHBvcnQgKz0gMQorICAgICAgICBpZiBwb3J0ID49IEZPUldBUkRFUl9DT05UUk9MX1BPUlRf
RU5EOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHBvcnQKKworICAg
IGRlZiBfaXNfcG9ydF91c2VkKHNlbGYsIGhvc3RfcG9ydCk6CisgICAgICAgIGhleF9wb3J0ID0g
JyUwNFgnICUgaG9zdF9wb3J0CisgICAgICAgIGZvciBsaW5lIGluIG9wZW4oJy9wcm9jL25ldC90
Y3AnKS54cmVhZGxpbmVzKCk6CisgICAgICAgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCkKKyAg
ICAgICAgICAgIGlmIG5vdCBmaWVsZHMgb3IgZmllbGRzWzBdID09ICdzbCc6CisgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvY2FsX2FkZHJlc3MgPSBmaWVsZHNbMV0KKyAg
ICAgICAgICAgIHJlbW90ZV9hZGRyZXNzID0gZmllbGRzWzJdCisgICAgICAgICAgICBsb2NhbF9p
cCwgbG9jYWxfcG9ydCA9IGxvY2FsX2FkZHJlc3Muc3BsaXQoJzonKQorICAgICAgICAgICAgcmVt
b3RlX2lwLCByZW1vdGVfcG9ydCA9IHJlbW90ZV9hZGRyZXNzLnNwbGl0KCc6JykKKyAgICAgICAg
ICAgIGlmIGxvY2FsX3BvcnQgPT0gaGV4X3BvcnQgb3IgcmVtb3RlX3BvcnQgPT0gaGV4X3BvcnQ6
CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBQb3J0ICVkIGlzIHVzZWQuJyAlIGhvc3Rf
cG9ydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBfbG9nLmRlYnVnKCcg
IFBvcnQgJWQgaXMgZnJlZS4nICUgaG9zdF9wb3J0KQorICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9hZGJfY29tbWFuZF9zdHJpbmcoYW5kcm9p
ZF9jbWQpOgorICAgICAgICByZXR1cm4gJyAnLmpvaW4oYW5kcm9pZF9jbWQuZ2V0X2FkYl9jb21t
YW5kKCkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9ydW5fc2hlbGxfY29tbWFuZF9h
bmRfZ2V0X2V4aXRfY29kZShjbWQpOgorICAgICAgICAjIFJldHVybnMgKGV4aXQgY29kZSwgb3V0
cHV0KS4gTm90ZSB0aGF0IGV4ZWN1dGl2ZS5ydW5fY29tbWFuZCgpIGlzIG5vdAorICAgICAgICAj
IHVzZWQgaGVyZSBzaW5jZSBpdCdzIG5vdCBhYmxlIHRvIHJldHVybiBib3RoIHRoZSBleGl0IGNv
ZGUgYW5kIHRoZQorICAgICAgICAjIG91dHB1dC4KKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIGV4
dHJhICcqJyBjaGFyYWN0ZXIgYmVsb3cgaXMgdXNlZCB0byBoYW5kbGUgdGhlIGNhc2UKKyAgICAg
ICAgIyB3aGVyZSB0aGUgcHJvY2Vzcycgb3V0cHV0IGlzIG5vdCBuZXdsaW5lIHRlcm1pbmF0ZWQu
CisgICAgICAgIF9sb2cuZGVidWcoJ1J1biBzaGVsbCBjb21tYW5kOiAnICsgY21kKQorICAgICAg
ICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzPSclczsgZWNobyAqJD8nICUgY21kLCBz
aGVsbD1UcnVlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJ
UEUpCisgICAgICAgIGxpbmVzID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdLnNwbGl0bGluZXMo
KQorICAgICAgICBsYXN0X2xpbmUgPSBsaW5lc1stMV0KKyAgICAgICAgc3RhdHVzX3NlcGFyYXRv
cl9wb3MgPSBsYXN0X2xpbmUucmZpbmQoJyonKQorICAgICAgICBhc3NlcnQgc3RhdHVzX3NlcGFy
YXRvcl9wb3MgPj0gMAorICAgICAgICBzdGF0dXMgPSBpbnQobGFzdF9saW5lW3N0YXR1c19zZXBh
cmF0b3JfcG9zICsgMTpdKQorICAgICAgICBpZiBzdGF0dXNfc2VwYXJhdG9yX3BvcyA9PSAwOgor
ICAgICAgICAgICAgbGluZXMgPSBsaW5lc1s6LTFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBsaW5lcyA9IGxpbmVzWzotMV0gKyBsYXN0X2xpbmVbOnN0YXR1c19zZXBhcmF0b3JfcG9zXQor
ICAgICAgICByZXR1cm4gKHN0YXR1cywgbGluZXMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihwYXRoX2J1aWxkZXIpOgorICAgICAgICByZXR1
cm4gcGF0aF9idWlsZGVyKCdkZXZpY2VfZm9yd2FyZGVyJykKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgcGF0aF90b19ob3N0X2ZvcndhcmRlcihwYXRoX2J1aWxkZXIpOgorICAgICAgICBy
ZXR1cm4gcGF0aF9idWlsZGVyKCdob3N0X2ZvcndhcmRlcicpCisKIGNsYXNzIENocm9taXVtQW5k
cm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwg
d29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2UpOgogICAgICAgICBz
dXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIHdvcmtlcl9u
dW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQpAQCAtMzY5LDQ3ICs1NDksNDAgQEAgY2xh
c3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzZWxmLl9l
cnJfZmlmb19wYXRoID0gREVWSUNFX0ZJRk9fUEFUSCArICdzdGRlcnIuZmlmbycKICAgICAgICAg
c2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVhZF9zdGRl
cnJfcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25l
CiAgICAgICAgIHNlbGYuX2hhc19zZXR1cCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX29yaWdpbmFs
X2dvdmVybm9ycyA9IHt9CiAgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBwb3J0Ll9nZXRf
ZGV2aWNlX3NlcmlhbCh3b3JrZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCA9
IFtwb3J0LnBhdGhfdG9fYWRiKCksICctcycsIHNlbGYuX2RldmljZV9zZXJpYWxdCisgICAgICAg
IHNlbGYuX2FuZHJvaWRfY21kID0gQW5kcm9pZENvbW1hbmRzKHNlbGYuX2RldmljZV9zZXJpYWws
IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgpCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAg
ICAgc2VsZi5fdGVhcmRvd25fcGVyZm9ybWFuY2UoKQogICAgICAgICBzdXBlcihDaHJvbWl1bUFu
ZHJvaWREcml2ZXIsIHNlbGYpLl9fZGVsX18oKQogCi0gICAgZGVmIF9zZXR1cF9tZDVzdW1fYW5k
X3B1c2hfZGF0YV9pZl9uZWVkZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuX21kNXN1bV9wYXRoID0g
c2VsZi5fcG9ydC5wYXRoX3RvX21kNXN1bSgpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlX2V4
aXN0c19vbl9kZXZpY2UoTUQ1U1VNX0RFVklDRV9QQVRIKToKLSAgICAgICAgICAgIGlmIG5vdCBz
ZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9tZDVzdW1fcGF0aCwgTUQ1U1VNX0RFVklDRV9QQVRI
KToKLSAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IHB1c2gg
bWQ1c3VtIHRvIGRldmljZScpCi0KLSAgICAgICAgc2VsZi5fcHVzaF9leGVjdXRhYmxlKCkKLSAg
ICAgICAgc2VsZi5fcHVzaF9mb250cygpCi0gICAgICAgIHNlbGYuX3B1c2hfdGVzdF9yZXNvdXJj
ZXMoKQotCiAgICAgZGVmIF9zZXR1cF90ZXN0KHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9oYXNf
c2V0dXA6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBzZWxmLl9yZXN0YXJ0X2FkYl9h
c19yb290KCkKLSAgICAgICAgc2VsZi5fc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2RhdGFfaWZfbmVl
ZGVkKCkKLSAgICAgICAgc2VsZi5faGFzX3NldHVwID0gVHJ1ZQorICAgICAgICBzZWxmLl9hbmRy
b2lkX2NtZC5zZXR1cF9tZDVzdW0oKQorICAgICAgICBzZWxmLl9wdXNoX2RhdGFfaWZfbmVlZGVk
KCkKICAgICAgICAgc2VsZi5fc2V0dXBfcGVyZm9ybWFuY2UoKQorICAgICAgICBzZWxmLl9oYXNf
c2V0dXAgPSBUcnVlCiAKICAgICAgICAgIyBSZXF1aXJlZCBieSB3ZWJraXRfc3VwcG9ydDo6R2V0
V2ViS2l0Um9vdERpckZpbGVQYXRoKCkuCiAgICAgICAgICMgT3RoZXIgZGlyZWN0b3JpZXMgd2ls
bCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWRiIHB1c2guCi0gICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX1NPVVJDRV9ST09U
X0RJUiArICdjaHJvbWUnXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21t
YW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2No
cm9tZSddKQogCiAgICAgICAgICMgQWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCB0byBmdWxs
eSBhY2Nlc3MgdGhlIGRpcmVjdG9yeS4KICAgICAgICAgIyBUaGUgbmF0aXZlIGNvZGUgbmVlZHMg
dGhlIHBlcm1pc3Npb24gdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzIGFuZCBjcmVhdGUgcGlwZXMg
aGVyZS4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAn
LXAnLCBERVZJQ0VfRFJUX0RJUl0pCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9EUlRfRElSXSkKKyAgICAgICAgc2VsZi5fYW5k
cm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0Vf
RFJUX0RJUl0pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9EUlRfRElSXSkKIAogICAgICAgICAjIERlbGV0
ZSB0aGUgZGlzayBjYWNoZSBpZiBhbnkgdG8gZW5zdXJlIGEgY2xlYW4gdGVzdCBydW4uCiAgICAg
ICAgICMgVGhpcyBpcyBsaWtlIHdoYXQncyBkb25lIGluIENocm9taXVtUG9ydC5zZXR1cF90ZXN0
X3J1biBidXQgb24gdGhlIGRldmljZS4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
c2hlbGwnLCAncm0nLCAnLXInLCBEUlRfQVBQX0NBQ0hFX0RJUl0pCisgICAgICAgIHNlbGYuX2Fu
ZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9D
QUNIRV9ESVJdKQorCisgICAgICAgIEZvcndhcmRlci5raWxsX2RldmljZV9kYWVtb24oc2VsZi5f
YW5kcm9pZF9jbWQpCiAKICAgICBkZWYgX2xvZ19lcnJvcihzZWxmLCBtZXNzYWdlKToKICAgICAg
ICAgX2xvZy5lcnJvcignWyVzXSAlcycgJSAoc2VsZi5fZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSkp
CkBAIC00MjAsODUgKzU5Myw1MCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6CiAgICAgZGVmIF9hYm9ydChzZWxmLCBtZXNzYWdlKToKICAgICAgICAgcmFpc2Ug
QXNzZXJ0aW9uRXJyb3IoJ1slc10gJXMnICUgKHNlbGYuX2RldmljZV9zZXJpYWwsIG1lc3NhZ2Up
KQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVz
dW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgotICAgICAgICBhc3NlcnQgbWQ1c3VtX291dHB1dAot
ICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291
dHB1dF0KLQotICAgIGRlZiBfcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRl
dmljZV9maWxlKToKLSAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGhvc3RfZmlsZSkKLSAg
ICAgICAgZGV2aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291
dHB1dCgKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKHNl
bGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsIE1ENVNVTV9ERVZJQ0VfUEFUSCwgZGV2aWNlX2Zp
bGVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
b3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQotICAgICAgICBob3N0X2hhc2hlcyA9IHNlbGYu
X2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKLSAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKGFyZ3M9Wyclc19ob3N0JyAlIHNlbGYuX21kNXN1
bV9wYXRoLCBob3N0X2ZpbGVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0KQotICAgICAgICBpZiBo
b3N0X2hhc2hlcyBhbmQgZGV2aWNlX2hhc2hlcyA9PSBob3N0X2hhc2hlczoKLSAgICAgICAgICAg
IHJldHVybgotICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShob3N0X2ZpbGUsIGRldmljZV9m
aWxlKQorICAgIGRlZiBfcHVzaF9kYXRhX2lmX25lZWRlZChzZWxmKToKKyAgICAgICAgc2VsZi5f
cHVzaF9leGVjdXRhYmxlKCkKKyAgICAgICAgc2VsZi5fcHVzaF9mb250cygpCisgICAgICAgIHNl
bGYuX3B1c2hfdGVzdF9yZXNvdXJjZXMoKQogCiAgICAgZGVmIF9wdXNoX2V4ZWN1dGFibGUoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5wYXRoX3Rv
X2ZvcndhcmRlcigpLCBERVZJQ0VfRk9SV0FSREVSX1BBVEgpCi0gICAgICAgIHNlbGYuX3B1c2hf
ZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWUucGFr
JyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnBhaycpCi0gICAgICAgIHNlbGYu
X3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRy
ZWVfcmVzb3VyY2VzJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNl
cycpCi0gICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRf
cGF0aCgnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lk
X21haW5fZm9udHMueG1sJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxm
Ll9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpLCBERVZJQ0Vf
RFJUX0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpCi0gICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FHRV0pCisgICAgICAgIHNl
bGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5wYXRoX3RvX2Rl
dmljZV9mb3J3YXJkZXIoKSwgREVWSUNFX0ZPUldBUkRFUl9QQVRIKQorICAgICAgICBzZWxmLl9h
bmRyb2lkX2NtZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1
bXBSZW5kZXJUcmVlLnBhaycpLCBERVZJQ0VfRFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZS5wYWsn
KQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3Bv
cnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpLCBERVZJQ0VfRFJUX0RJ
UiArICdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2Nt
ZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfbWFp
bl9mb250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcp
CisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9y
dC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKSwgREVWSUNFX0RSVF9E
SVIgKyAnYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lk
X2NtZC5ydW5fYWRiX2NvbW1hbmQoWyd1bmluc3RhbGwnLCBEUlRfQVBQX1BBQ0tBR0VdKQogICAg
ICAgICBkcnRfaG9zdF9wYXRoID0gc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKQotICAgICAg
ICBpbnN0YWxsX3Jlc3VsdCA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2luc3RhbGwnLCBkcnRf
aG9zdF9wYXRoXSkKKyAgICAgICAgaW5zdGFsbF9yZXN1bHQgPSBzZWxmLl9hbmRyb2lkX2NtZC5y
dW5fYWRiX2NvbW1hbmQoWydpbnN0YWxsJywgZHJ0X2hvc3RfcGF0aF0pCiAgICAgICAgIGlmIGlu
c3RhbGxfcmVzdWx0LmZpbmQoJ1N1Y2Nlc3MnKSA9PSAtMToKICAgICAgICAgICAgIHNlbGYuX2Fi
b3J0KCdGYWlsZWQgdG8gaW5zdGFsbCAlcyBvbnRvIGRldmljZTogJXMnICUgKGRydF9ob3N0X3Bh
dGgsIGluc3RhbGxfcmVzdWx0KSkKIAogICAgIGRlZiBfcHVzaF9mb250cyhzZWxmKToKICAgICAg
ICAgc2VsZi5fbG9nX2RlYnVnKCdQdXNoaW5nIGZvbnRzJykKICAgICAgICAgcGF0aF90b19haGVt
X2ZvbnQgPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdBSEVNX19fXy5UVEYnKQotICAgICAgICBz
ZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHBhdGhfdG9fYWhlbV9mb250LCBERVZJQ0VfRk9OVFNf
RElSICsgJ0FIRU1fX19fLlRURicpCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmls
ZV9pZl9uZWVkZWQocGF0aF90b19haGVtX2ZvbnQsIERFVklDRV9GT05UU19ESVIgKyAnQUhFTV9f
X18uVFRGJykKICAgICAgICAgZm9yIChob3N0X2RpcnMsIGZvbnRfZmlsZSwgcGFja2FnZSkgaW4g
SE9TVF9GT05UX0ZJTEVTOgogICAgICAgICAgICAgZm9yIGhvc3RfZGlyIGluIGhvc3RfZGlyczoK
ICAgICAgICAgICAgICAgICBob3N0X2ZvbnRfcGF0aCA9IGhvc3RfZGlyICsgZm9udF9maWxlCiAg
ICAgICAgICAgICAgICAgaWYgc2VsZi5fcG9ydC5fY2hlY2tfZmlsZV9leGlzdHMoaG9zdF9mb250
X3BhdGgsICcnLCBsb2dnaW5nPUZhbHNlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHVz
aF9maWxlX2lmX25lZWRlZChob3N0X2ZvbnRfcGF0aCwgREVWSUNFX0ZPTlRTX0RJUiArIGZvbnRf
ZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lm
X25lZWRlZChob3N0X2ZvbnRfcGF0aCwgREVWSUNFX0ZPTlRTX0RJUiArIGZvbnRfZmlsZSkKIAog
ICAgIGRlZiBfcHVzaF90ZXN0X3Jlc291cmNlcyhzZWxmKToKICAgICAgICAgc2VsZi5fbG9nX2Rl
YnVnKCdQdXNoaW5nIHRlc3QgcmVzb3VyY2VzJykKICAgICAgICAgZm9yIHJlc291cmNlIGluIFRF
U1RfUkVTT1VSQ0VTX1RPX1BVU0g6Ci0gICAgICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVl
ZGVkKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgJy8nICsgcmVzb3VyY2UsIERFVklD
RV9MQVlPVVRfVEVTVFNfRElSICsgcmVzb3VyY2UpCisgICAgICAgICAgICBzZWxmLl9hbmRyb2lk
X2NtZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsg
Jy8nICsgcmVzb3VyY2UsIERFVklDRV9MQVlPVVRfVEVTVFNfRElSICsgcmVzb3VyY2UpCiAKICAg
ICBkZWYgX3Jlc3RhcnRfYWRiX2FzX3Jvb3Qoc2VsZik6Ci0gICAgICAgIG91dHB1dCA9IHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3Jvb3QnXSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fYW5kcm9p
ZF9jbWQucnVuX2FkYl9jb21tYW5kKFsncm9vdCddKQogICAgICAgICBpZiAnYWRiZCBpcyBhbHJl
YWR5IHJ1bm5pbmcgYXMgcm9vdCcgaW4gb3V0cHV0OgogICAgICAgICAgICAgcmV0dXJuCiAgICAg
ICAgIGVsaWYgbm90ICdyZXN0YXJ0aW5nIGFkYmQgYXMgcm9vdCcgaW4gb3V0cHV0OgogICAgICAg
ICAgICAgc2VsZi5fbG9nX2Vycm9yKCdVbnJlY29nbml6ZWQgb3V0cHV0IGZyb20gYWRiIHJvb3Q6
ICVzJyAlIG91dHB1dCkKIAogICAgICAgICAjIFJlZ2FyZGxlc3MgdGhlIG91dHB1dCwgZ2l2ZSB0
aGUgZGV2aWNlIGEgbW9tZW50IHRvIGNvbWUgYmFjayBvbmxpbmUuCi0gICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3dhaXQtZm9yLWRldmljZSddKQotCi0gICAgZGVmIF9ydW5fYWRiX2Nv
bW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICBzZWxmLl9sb2df
ZGVidWcoJ1J1biBhZGIgY29tbWFuZDogJyArIHN0cihjbWQpKQotICAgICAgICBpZiBpZ25vcmVf
ZXJyb3I6Ci0gICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZl
Lmlnbm9yZV9lcnJvcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9
IE5vbmUKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KHNlbGYuX2FkYl9jb21tYW5kICsgY21kLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCi0g
ICAgICAgICMgTGltaXQgdGhlIGxlbmd0aCB0byBhdm9pZCB0b28gdmVyYm9zZSBvdXRwdXQgb2Yg
Y29tbWFuZHMgbGlrZSAnYWRiIGxvZ2NhdCcgYW5kICdjYXQgL2RhdGEvdG9tYnN0b25lcy90b21i
c3RvbmUwMScKLSAgICAgICAgIyB3aG9zZSBvdXRwdXRzIGFyZSBub3JtYWxseSBwcmludGVkIGlu
IGxhdGVyIGxvZ3MuCi0gICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnUnVuIGFkYiByZXN1bHQ6ICcg
KyByZXN1bHRbOjgwXSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIF9saW5rX2Rl
dmljZV9maWxlKHNlbGYsIGZyb21fZmlsZSwgdG9fZmlsZSwgaWdub3JlX2Vycm9yPUZhbHNlKToK
LSAgICAgICAgIyBybSB0b19maWxlIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGF0IGxuIHN1Y2NlZWRz
LgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIHRvX2ZpbGVd
LCBpZ25vcmVfZXJyb3IpCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdsbicsICctcycsIGZyb21fZmlsZSwgdG9fZmlsZV0sIGlnbm9yZV9lcnJvcikKLQot
ICAgIGRlZiBfcHVzaF90b19kZXZpY2Uoc2VsZiwgaG9zdF9wYXRoLCBkZXZpY2VfcGF0aCwgaWdu
b3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3B1c2gnLCBob3N0X3BhdGgsIGRldmljZV9wYXRoXSwgaWdub3JlX2Vycm9yKQotCi0gICAgZGVm
IF9wdWxsX2Zyb21fZGV2aWNlKHNlbGYsIGRldmljZV9wYXRoLCBob3N0X3BhdGgsIGlnbm9yZV9l
cnJvcj1GYWxzZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydwdWxs
JywgZGV2aWNlX3BhdGgsIGhvc3RfcGF0aF0sIGlnbm9yZV9lcnJvcikKKyAgICAgICAgc2VsZi5f
YW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnd2FpdC1mb3ItZGV2aWNlJ10pCiAKICAgICBk
ZWYgX2dldF9sYXN0X3N0YWNrdHJhY2Uoc2VsZik6Ci0gICAgICAgIHRvbWJzdG9uZXMgPSBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsICctbicsICcvZGF0YS90b21ic3RvbmVz
J10pCisgICAgICAgIHRvbWJzdG9uZXMgPSBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1h
bmQoWydzaGVsbCcsICdscycsICctbicsICcvZGF0YS90b21ic3RvbmVzJ10pCiAgICAgICAgIGlm
IG5vdCB0b21ic3RvbmVzIG9yIHRvbWJzdG9uZXMuc3RhcnRzd2l0aCgnL2RhdGEvdG9tYnN0b25l
czogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpOgogICAgICAgICAgICAgc2VsZi5fbG9nX2Vy
cm9yKCdEUlQgY3Jhc2hlZCwgYnV0IG5vIHRvbWJzdG9uZSBmb3VuZCEnKQogICAgICAgICAgICAg
cmV0dXJuICcnCkBAIC01MTksMjMgKzY1NywyMyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgc3RhY2sgdHJhY2UgaW50byBhIGh1bWFuIHJl
YWRhYmxlIGZvcm1hdCwgaWYgbmVlZGVkLgogICAgICAgICAjIEl0IHRha2VzIGEgbG9uZyB0aW1l
LCBzbyBkb24ndCBkbyBpdCBoZXJlLgogICAgICAgICByZXR1cm4gJyVzXG4lcycgJSAoJyAnLmpv
aW4obGFzdF90b21ic3RvbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9kYXRhL3RvbWJzdG9uZXMvJyArIGxhc3Rf
dG9tYnN0b25lWzZdXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lk
X2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCAnL2RhdGEvdG9tYnN0b25lcy8n
ICsgbGFzdF90b21ic3RvbmVbNl1dKSkKIAogICAgIGRlZiBfZ2V0X2xvZ2NhdChzZWxmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctZCcsICctdics
ICd0aHJlYWR0aW1lJ10pCisgICAgICAgIHJldHVybiBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRi
X2NvbW1hbmQoWydsb2djYXQnLCAnLWQnLCAnLXYnLCAndGhyZWFkdGltZSddKQogCiAgICAgZGVm
IF9zZXR1cF9wZXJmb3JtYW5jZShzZWxmKToKICAgICAgICAgIyBEaXNhYmxlIENQVSBzY2FsaW5n
IGFuZCBkcm9wIHJhbSBjYWNoZSB0byByZWR1Y2Ugbm9pc2UgaW4gdGVzdHMKICAgICAgICAgaWYg
bm90IHNlbGYuX29yaWdpbmFsX2dvdmVybm9yczoKLSAgICAgICAgICAgIGdvdmVybm9yX2ZpbGVz
ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBTQ0FMSU5HX0dPVkVSTk9S
U19QQVRURVJOXSkKKyAgICAgICAgICAgIGdvdmVybm9yX2ZpbGVzID0gc2VsZi5fYW5kcm9pZF9j
bWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBTQ0FMSU5HX0dPVkVSTk9SU19QQVRU
RVJOXSkKICAgICAgICAgICAgIGlmIGdvdmVybm9yX2ZpbGVzLmZpbmQoJ05vIHN1Y2ggZmlsZSBv
ciBkaXJlY3RvcnknKSA9PSAtMToKICAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBnb3Zlcm5v
cl9maWxlcy5zcGxpdCgpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zl
cm5vcnNbZmlsZV0gPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxl
XSkuc3RyaXAoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdlY2hvJywgJ3BlcmZvcm1hbmNlJywgJz4nLCBmaWxlXSkKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzW2ZpbGVdID0gc2VsZi5fYW5kcm9pZF9jbWQu
cnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgZmlsZV0pLnN0cmlwKCkKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
ZWNobycsICdwZXJmb3JtYW5jZScsICc+JywgZmlsZV0pCiAKICAgICBkZWYgX3RlYXJkb3duX3Bl
cmZvcm1hbmNlKHNlbGYpOgogICAgICAgICBmb3IgZmlsZSwgb3JpZ2luYWxfY29udGVudCBpbiBz
ZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCBvcmlnaW5hbF9jb250ZW50LCAnPicsIGZpbGVd
KQorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnZWNobycsIG9yaWdpbmFsX2NvbnRlbnQsICc+JywgZmlsZV0pCiAgICAgICAgIHNlbGYuX29y
aWdpbmFsX2dvdmVybm9ycyA9IHt9CiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgpAQCAtNTUyLDEwICs2OTAsNiBAQCBjbGFzcyBDaHJv
bWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgVGhlIGNvbW1hbmQg
bGluZSBwYXNzZWQgdG8gdGhlIERSVCBwcm9jZXNzIGlzIHJldHVybmVkIGJ5IF9kcnRfY21kX2xp
bmUoKSBpbnN0ZWFkLgogICAgICAgICByZXR1cm4gc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxs
J10KIAotICAgIGRlZiBfZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRo
KToKLSAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQotICAgICAg
ICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVf
cGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKLQogICAgIGRlZiBfZHJ0X2NtZF9saW5l
KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKICAgICAgICAgcmV0dXJuIGRyaXZl
ci5Ecml2ZXIuY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyct
LWNyZWF0ZS1zdGRpbi1maWZvJywgJy0tc2VwYXJhdGUtc3RkZXJyLWZpZm8nXQogCkBAIC01Njgs
MTcgKzcwMiwxNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6
CiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIF9hbGxfcGlwZXNfY3JlYXRlZChzZWxm
KToKLSAgICAgICAgcmV0dXJuIChzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5f
Zmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZp
Y2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9l
eGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKQorICAgICAgICByZXR1cm4gKHNl
bGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgp
IGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29uX2Rl
dmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9hbmRy
b2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCiAKICAg
ICBkZWYgX3JlbW92ZV9hbGxfcGlwZXMoc2VsZik6CiAgICAgICAgIGZvciBmaWxlIGluIFtzZWxm
Ll9pbl9maWZvX3BhdGgsIHNlbGYuX291dF9maWZvX3BhdGgsIHNlbGYuX2Vycl9maWZvX3BhdGhd
OgotICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCBmaWxl
XSkKKyAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ3JtJywgZmlsZV0pCiAKLSAgICAgICAgcmV0dXJuIChub3Qgc2VsZi5fZmlsZV9leGlzdHNf
b25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgYW5kCi0gICAgICAgICAgICAgICAgbm90IHNl
bGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKLSAgICAg
ICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZv
X3BhdGgpKQorICAgICAgICByZXR1cm4gKG5vdCBzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0
c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qg
c2VsZi5fYW5kcm9pZF9jbWQuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3Bh
dGgpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0
c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2Vs
ZiwgZHJpdmVyX2lucHV0LCBzdG9wX3doZW5fZG9uZSk6CiAgICAgICAgIGJhc2UgPSBzZWxmLl9w
b3J0Lmxvb2t1cF92aXJ0dWFsX3Rlc3RfYmFzZShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQpAQCAt
NjEyLDEzICs3NDYsMTEgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2
ZXIpOgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9zdGFydChw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKIAogICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1N0
YXJ0aW5nIGZvcndhcmRlcicpCi0gICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gc2Vs
Zi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IoCi0gICAgICAgICAgICBzZWxmLl9w
b3J0LCAnRm9yd2FyZGVyJywgc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJyVzIC1EICVz
JyAlIChERVZJQ0VfRk9SV0FSREVSX1BBVEgsIEZPUldBUkRfUE9SVFMpXSkKLSAgICAgICAgc2Vs
Zi5fZm9yd2FyZGVyX3Byb2Nlc3Muc3RhcnQoKQotCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29t
bWFuZChbJ2xvZ2NhdCcsICctYyddKQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdlY2hvJ10gKyBzZWxmLl9jbWRfbGluZSArIFsnPicsIENPTU1BTkRfTElORV9GSUxF
XSkKLSAgICAgICAgc3RhcnRfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnYW0nLCAnc3RhcnQnLCAnLWUnLCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNUSVZJ
VFlfRlVMTF9OQU1FXSkKKyAgICAgICAgZm9yd2FyZGVyID0gRm9yd2FyZGVyKHNlbGYuX3BvcnQu
X2J1aWxkX3BhdGgsIHNlbGYuX2FuZHJvaWRfY21kKQorICAgICAgICBmb3J3YXJkZXIuc2V0dXBf
cmVkaXJlY3Rpb25zKHNlbGYuX3dvcmtlcl9udW1iZXIsIFsocG9ydCwgcG9ydCkgZm9yIHBvcnQg
aW4gRk9SV0FSRF9QT1JUU10sICcxMjcuMC4wLjEnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2Nt
ZC5ydW5fYWRiX2NvbW1hbmQoWydsb2djYXQnLCAnLWMnXSkKKyAgICAgICAgc2VsZi5fYW5kcm9p
ZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobyddICsgc2VsZi5fY21kX2xpbmUg
KyBbJz4nLCBDT01NQU5EX0xJTkVfRklMRV0pCisgICAgICAgIHN0YXJ0X3Jlc3VsdCA9IHNlbGYu
X2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ3N0YXJ0JywgJy1l
JywgJ1J1bkluU3ViVGhyZWFkJywgJy1uJywgRFJUX0FDVElWSVRZX0ZVTExfTkFNRV0pCiAgICAg
ICAgIGlmIHN0YXJ0X3Jlc3VsdC5maW5kKCdFeGNlcHRpb24nKSAhPSAtMToKICAgICAgICAgICAg
IHNlbGYuX2xvZ19lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0
aW9uLiBFeGNlcHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCkBAIC02ODIsNyArODE0LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZl
ci5Ecml2ZXIpOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBzdG9wKHNlbGYp
OgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1z
dG9wJywgRFJUX0FQUF9QQUNLQUdFXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2Fk
Yl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnZm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0p
CiAKICAgICAgICAgaWYgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzczoKICAgICAgICAgICAgIHNl
bGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3Mua2lsbCgpCkBAIC02OTIsMTEgKzgyNCw5IEBAIGNsYXNz
IENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgICAgIHNlbGYu
X3JlYWRfc3RkZXJyX3Byb2Nlc3Mua2lsbCgpCiAgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZGVy
cl9wcm9jZXNzID0gTm9uZQogCi0gICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwg
c2VsZikuc3RvcCgpCisgICAgICAgIEZvcndhcmRlci5raWxsX2RldmljZV9kYWVtb24oc2VsZi5f
YW5kcm9pZF9jbWQpCiAKLSAgICAgICAgaWYgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3M6Ci0gICAg
ICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2Vzcy5raWxsKCkKLSAgICAgICAgICAgIHNlbGYu
X2ZvcndhcmRlcl9wcm9jZXNzID0gTm9uZQorICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWRE
cml2ZXIsIHNlbGYpLnN0b3AoKQogCiAgICAgICAgIGlmIHNlbGYuX2hhc19zZXR1cDoKICAgICAg
ICAgICAgIGlmIG5vdCBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2xvb3Bfd2l0aF90aW1lb3V0KHNl
bGYuX3JlbW92ZV9hbGxfcGlwZXMsIERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUyk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177729</attachid>
            <date>2012-12-05 04:57:29 -0800</date>
            <delta_ts>2012-12-05 05:49:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121205135453.patch</filename>
            <type>text/plain</type>
            <size>34209</size>
            <attacher name="Philippe Liard">pliard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTc5ZDI2Y2JhZTc3OWEzMzg0YWMxZjVjZDgwOTAyOGYz
ZGVhZTQ3ZC4uMWZhMTZhNjViM2MzNzY0NGM2YjE4MzhiNzczNzNmOTUxMjJjMzBjMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1
IEBACisyMDEyLTEyLTA1ICBQaGlsaXBwZSBMaWFyZCAgPHBsaWFyZEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgVXNlIGZvcndhcmRlcjIgaW4gQ2hyb21lIGZvciBBbmRyb2lkIGxheW91dCB0ZXN0
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTg4
CisKKyAgICAgICAgQ2hyb21pdW0ncyBkZXZpY2UgdG8gaG9zdCBmb3J3YXJkZXIgaXMgZGVwcmVj
YXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkCisgICAgICAgIHNvb24uIEl0IHdhcyByZXBsYWNlZCB3
aXRoIGZvcndhcmRlcjIgd2hpY2ggaXMgYWJsZSB0byBydW4gb24KKyAgICAgICAgbm9uLXJvb3Rl
ZCBkZXZpY2VzLiBUaGUgd2F5IGZvcndhcmRlcjIgaXMgc2V0dXAvdGVhcmVkIGRvd24gaXMKKyAg
ICAgICAgZGlmZmVyZW50IHdoaWNoIGV4cGxhaW5zIHdoeSB0aGUgUHl0aG9uIGxheWVyIGluIFdl
YktpdCBoYXMgdG8gYmUKKyAgICAgICAgdXBkYXRlZC4KKworICAgICAgICBJbiBwYXJ0aWN1bGFy
LCBmb3J3YXJkZXIyIGNvbnNpc3RzIG9mIHR3byBwcm9ncmFtcyAoZGFlbW9ucyk6CisgICAgICAg
IC0gaG9zdF9mb3J3YXJkZXI6IGRhZW1vbiBydW5uaW5nIG9uIHRoZSBob3N0CisgICAgICAgIC0g
ZGV2aWNlX2ZvcndhcmRlcjogZGFlbW9uIHJ1bm5pbmcgb24gdGhlIGRldmljZXMgYXR0YWNoZWQg
dG8gdGhlIGhvc3QKKworICAgICAgICBkZXZpY2VfZm9yd2FyZGVyIG11c3QgYmUgc3RhcnRlZCBv
biB0aGUgZGV2aWNlIGJlZm9yZSBob3N0X2ZvcndhcmRlcjoKKyAgICAgICAgJCAvZGF0YS9sb2Nh
bC90bXAvZGV2aWNlX2ZvcndhcmRlciBjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisgICAgICAg
ICdjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcicgaXMgdGhlIG5hbWUgb2YgdGhlIFVuaXggRG9tYWlu
IFNvY2tldCBib3VuZAorICAgICAgICBieSB0aGUgZGFlbW9uIG9uIHRoZSBkZXZpY2Ugd2hpY2gg
aXMgdXNlZCBieSB0aGUgaG9zdCB0byBjb21tdW5pY2F0ZQorICAgICAgICB3aXRoIGl0LgorCisg
ICAgICAgIFRoZW4gdGhlIGhvc3QgbXVzdCBzZXR1cCBhIGhvc3QgdG8gZGV2aWNlIHJlZGlyZWN0
aW9uIHNvIHRoYXQKKyAgICAgICAgaG9zdF9mb3J3YXJkZXIgY2FuIHRhbGsgdG8gdGhlIGRldmlj
ZV9mb3J3YXJkZXIncyBVbml4IERvbWFpbiBTb2NrZXQKKyAgICAgICAgdGhyb3VnaCBhIFRDUCBz
b2NrZXQgKHBvcnQgODAwMCBpbiB0aGUgZXhhbXBsZSBiZWxvdyk6CisgICAgICAgICQgYWRiIGZv
cndhcmQgdGNwOjgwMDAgbG9jYWxhYnN0cmFjdDpjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisg
ICAgICAgIFRoZW4gdGhlIGhvc3QgY2FuIHNwZWNpZnkgd2hpY2ggcG9ydCBtdXN0IGJlIGZvcndh
cmRlZCBmcm9tIHRoZSBkZXZpY2UKKyAgICAgICAgdG8gdGhlIGhvc3QgKGRldmljZSBwb3J0IDgw
ODAgdG8gaG9zdCBwb3J0IDgwODEgaW4gdGhlIGV4YW1wbGUgYmVsb3cpOgorICAgICAgICAkIGhv
c3RfZm9yd2FyZGVyIDgwMDA6ODA4MDo4MDgxOjEyNy4wLjAuMQorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5OgorICAgICAgICAo
RXhlY3V0aXZlLnJ1bl9jb21tYW5kKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWRQb3J0LnNldHVwX3Rlc3RfcnVuKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuY2hl
Y2tfYnVpbGQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX2hvc3RfZm9y
d2FyZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkUG9ydC5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIpOgorICAgICAgICAoQW5kcm9p
ZENvbW1hbmRzKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5fX2luaXRfXyk6CisgICAgICAg
IChBbmRyb2lkQ29tbWFuZHMuc2V0dXBfbWQ1c3VtKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5k
cy5nZXRfYWRiX2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLl9ydW5fY29tbWFu
ZCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMucnVuX2FkYl9jb21tYW5kKToKKyAgICAgICAg
KEFuZHJvaWRDb21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2UpOgorICAgICAgICAoQW5kcm9p
ZENvbW1hbmRzLnB1c2hfdG9fZGV2aWNlKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5wdWxs
X2Zyb21fZGV2aWNlKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5fbWQ1c3VtX2Vycm9yX2hh
bmRsZXIpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQpOgor
ICAgICAgICAoQW5kcm9pZENvbW1hbmRzLl9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRw
dXQpOgorICAgICAgICAoRm9yd2FyZGVyKToKKyAgICAgICAgKEZvcndhcmRlci5fX2luaXRfXyk6
CisgICAgICAgIChGb3J3YXJkZXIua2lsbF9ob3N0X2RhZW1vbik6CisgICAgICAgIChGb3J3YXJk
ZXIua2lsbF9kZXZpY2VfZGFlbW9uKToKKyAgICAgICAgKEZvcndhcmRlci5zZXR1cF9yZWRpcmVj
dGlvbnMpOgorICAgICAgICAoRm9yd2FyZGVyLl9hbGxvY2F0ZV9hZGJfY29udHJvbF9wb3J0KToK
KyAgICAgICAgKEZvcndhcmRlci5fZ2V0X3VzZWRfcG9ydHMpOgorICAgICAgICAoRm9yd2FyZGVy
Ll9ydW5fYWRiX3NoZWxsX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUpOgorICAgICAgICAoRm9y
d2FyZGVyLl9ydW5fYWRiX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUpOgorICAgICAgICAoRm9y
d2FyZGVyLl9ydW5fc2hlbGxfY29tbWFuZF9hbmRfZ2V0X2V4aXRfY29kZSk6CisgICAgICAgIChG
b3J3YXJkZXIucGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKToKKyAgICAgICAgKEZvcndhcmRlci5w
YXRoX3RvX2hvc3RfZm9yd2FyZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5f
X2luaXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19kZWxfXyk6CisgICAg
ICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3Rlc3QpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9wdXNoX2RhdGFfaWZfbmVlZGVkKToKKyAgICAgICAgKENocm9taXVt
QW5kcm9pZERyaXZlci5fcHVzaF9leGVjdXRhYmxlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9p
ZERyaXZlci5fcHVzaF9mb250cyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1
c2hfdGVzdF9yZXNvdXJjZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9yZXN0
YXJ0X2FkYl9hc19yb290KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2xh
c3Rfc3RhY2t0cmFjZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2dldF9sb2dj
YXQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zZXR1cF9wZXJmb3JtYW5jZSk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3RlYXJkb3duX3BlcmZvcm1hbmNlKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5jbWRfbGluZSk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuX2FsbF9waXBlc19jcmVhdGVkKToKKyAgICAgICAgKENocm9taXVt
QW5kcm9pZERyaXZlci5fcmVtb3ZlX2FsbF9waXBlcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX3N0YXJ0X29uY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0
b3ApOgorCiAyMDEyLTEyLTAzICBTdWRhcnNhbmEgTmFnaW5lbmkgIDxzdWRhcnNhbmEubmFnaW5l
bmlAaW50ZWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZGluZyBteXNlbGYgdG8gY29t
bWl0dGVycy5weS4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCmluZGV4IGNjODMzMzIwOTk4MTQ3M2YzOTZi
N2E3MjMyNGVmMTAwM2NiM2U5ZjEuLmY1ZGVmOGYwOWZhOWEwMTRiZWIwYzIwOWFjMGUxMmYxODRh
MWQzOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5
cC9EdW1wUmVuZGVyVHJlZS5neXAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cApAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgICAg
ICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAn
PChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKICAg
ICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5kcm9p
ZC9uYXRpdmVfdGVzdC5neXA6bmF0aXZlX3Rlc3RfbmF0aXZlX2NvZGUnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdG9vbHMvYW5kcm9pZC9mb3J3YXJkZXIv
Zm9yd2FyZGVyLmd5cDpmb3J3YXJkZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2RpcikvdG9vbHMvYW5kcm9pZC9mb3J3YXJkZXIyL2ZvcndhcmRlci5neXA6Zm9y
d2FyZGVyMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90
b29scy9hbmRyb2lkL21kNXN1bS9tZDVzdW0uZ3lwOm1kNXN1bScsCiAgICAgICAgICAgICAgICAg
ICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdjb3BpZXMnOiBbewpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkKaW5kZXggNDJhODEyMmQz
NmUwZWU0ODA0NjQxOGE5YWNkYTExOTI0ODA1MzAxNy4uNDJiOGQyNzQ2MTAxZWRjOWI1MTIwNmE2
MTRkMTUyMTY1ZTRiNDNmYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2V4ZWN1dGl2ZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZXhlY3V0aXZlLnB5CkBAIC0zODUsNiArMzg1LDcgQEAgY2xhc3MgRXhlY3V0aXZl
KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIGlucHV0PU5vbmUsCiAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2hhbmRsZXI9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2V4
aXRfY29kZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2V4aXRfY29kZV9hbmRf
b3V0cHV0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICByZXR1cm5fc3RkZXJyPVRydWUsCiAg
ICAgICAgICAgICAgICAgICAgIGRlY29kZV9vdXRwdXQ9VHJ1ZSk6CiAgICAgICAgICIiIlBvcGVu
IHdyYXBwZXIgZm9yIGNvbnZlbmllbmNlIGFuZCB0byB3b3JrIGFyb3VuZCBweXRob24gYnVncy4i
IiIKQEAgLTQxOCw2ICs0MTksOSBAQCBjbGFzcyBFeGVjdXRpdmUob2JqZWN0KToKICAgICAgICAg
aWYgcmV0dXJuX2V4aXRfY29kZToKICAgICAgICAgICAgIHJldHVybiBleGl0X2NvZGUKIAorICAg
ICAgICBpZiByZXR1cm5fZXhpdF9jb2RlX2FuZF9vdXRwdXQ6CisgICAgICAgICAgICByZXR1cm4g
KGV4aXRfY29kZSwgb3V0cHV0KQorCiAgICAgICAgIGlmIGV4aXRfY29kZToKICAgICAgICAgICAg
IHNjcmlwdF9lcnJvciA9IFNjcmlwdEVycm9yKHNjcmlwdF9hcmdzPWFyZ3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X2NvZGU9ZXhpdF9jb2RlLApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9h
bmRyb2lkLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkLnB5CmluZGV4IDkxY2QzMTAwYzA4YWUwNzYwMzEyNGM2NjRkYTJiZmE4MGZi
NDdhNmMuLmVmNmQ4MmI4MjNiODM1NjkyMmI3YTU5M2IxNjAxNmNjOGUxN2U5N2YgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5k
cm9pZC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtX2FuZHJvaWQucHkKQEAgLTMxLDExICszMSwxMyBAQCBpbXBvcnQgY29weQogaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgc2V0cwogaW1wb3J0IHN1YnBy
b2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiAKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bQogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5CkBAIC01NCw3ICs1Niw3IEBAIENPTU1BTkRfTElORV9G
SUxFID0gREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJvbWUtbmF0aXZlLXRlc3RzLWNvbW1h
bmQtbGluZScKICMgSWYgY2hhbmdlIHRoaXMsIG11c3QgYWxzbyBjaGFuZ2UgVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKICMgYW5kIENocm9taXVtJ3Mg
d2Via2l0L3N1cHBvcnQvcGxhdGZvcm1fc3VwcG9ydF9hbmRyb2lkLmNjLgogREVWSUNFX0RSVF9E
SVIgPSBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2RydC8nCi1ERVZJQ0VfRk9SV0FSREVSX1BB
VEggPSBERVZJQ0VfRFJUX0RJUiArICdmb3J3YXJkZXInCitERVZJQ0VfRk9SV0FSREVSX1BBVEgg
PSBERVZJQ0VfRFJUX0RJUiArICdkZXZpY2VfZm9yd2FyZGVyJwogCiAjIFBhdGggb24gdGhlIGRl
dmljZSB3aGVyZSB0aGUgdGVzdCBmcmFtZXdvcmsgd2lsbCBjcmVhdGUgdGhlIGZpZm8gcGlwZXMu
CiBERVZJQ0VfRklGT19QQVRIID0gJy9kYXRhL2RhdGEvb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0
L2ZpbGVzLycKQEAgLTc2LDcgKzc4LDEyIEBAIExBWU9VVF9URVNUX1BBVEhfUFJFRklYID0gJy9h
bGwtdGVzdHMnCiAjIDgwMDAsIDgwODAgYW5kIDg0NDMgYXJlIGZvciBodHRwL2h0dHBzIHRlc3Rz
LgogIyA4ODgwIGFuZCA5MzIzIGFyZSBmb3Igd2Vic29ja2V0IHRlc3RzCiAjIChzZWUgaHR0cF9z
ZXJ2ZXIucHksIGFwYWNoZV9odHRwX3NlcnZlci5weSBhbmQgd2Vic29ja2V0X3NlcnZlci5weSku
Ci1GT1JXQVJEX1BPUlRTID0gJzgwMDAgODA4MCA4NDQzIDg4ODAgOTMyMycKK0ZPUldBUkRfUE9S
VFMgPSAoODAwMCwgODA4MCwgODQ0MywgODg4MCwgOTMyMykKKworIyBXZSBydW4gb25lIEZvcndh
cmRlciBwZXIgZGV2aWNlIC8gd29ya2VyLCBhbmQgd2UgbmVlZCB0byBhbGxvY2F0ZSBvbmUgY29u
dHJvbAorIyBwb3J0IGZvciBlYWNoIEZvcndhcmRlci4gVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0
aGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZS4KK0ZPUldBUkRFUl9DT05UUk9MX1BPUlRfQkVH
SU4gPSAyMDAwMAorRk9SV0FSREVSX0NPTlRST0xfUE9SVF9FTkQgPSAyMTAwMAogCiBNU19UUlVF
VFlQRV9GT05UU19ESVIgPSAnL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
LycKIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0UgPSAndHRmLW1zY29yZWZvbnRzLWluc3RhbGxl
cicKQEAgLTE3OSw2ICsxODYsMTAgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1
bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fZGV2aWNl
cyA9IFtdCiAKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAgIGNocm9taXVt
LkNocm9taXVtUG9ydC5zZXR1cF90ZXN0X3J1bihzZWxmKQorICAgICAgICBGb3J3YXJkZXIua2ls
bF9ob3N0X2RhZW1vbihzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQsIHNlbGYuX2J1aWxkX3Bh
dGgpCisKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9hbmRyb2lkX3NlcnZlcl9wcm9jZXNz
X2NvbnN0cnVjdG9yKHBvcnQsIHNlcnZlcl9uYW1lLCBjbWRfbGluZSwgZW52PU5vbmUpOgogICAg
ICAgICByZXR1cm4gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2Vzcyhwb3J0LCBzZXJ2ZXJfbmFt
ZSwgY21kX2xpbmUsIGVudiwKQEAgLTIxMiw3ICsyMjMsOCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJv
aWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYs
IG5lZWRzX2h0dHApOgogICAgICAgICByZXN1bHQgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0
LCBzZWxmKS5jaGVja19idWlsZChuZWVkc19odHRwKQogICAgICAgICByZXN1bHQgPSBzZWxmLl9j
aGVja19maWxlX2V4aXN0cyhzZWxmLnBhdGhfdG9fbWQ1c3VtKCksICdtZDVzdW0gdXRpbGl0eScp
IGFuZCByZXN1bHQKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2Vs
Zi5wYXRoX3RvX2ZvcndhcmRlcigpLCAnZm9yd2FyZGVyIHV0aWxpdHknKSBhbmQgcmVzdWx0Cisg
ICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYucGF0aF90b19kZXZp
Y2VfZm9yd2FyZGVyKCksICdkZXZpY2VfZm9yd2FyZGVyIHV0aWxpdHknKSBhbmQgcmVzdWx0Cisg
ICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYucGF0aF90b19ob3N0
X2ZvcndhcmRlcigpLCAnaG9zdF9mb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKICAgICAg
ICAgaWYgbm90IHJlc3VsdDoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZvciBjb21wbGV0ZSBB
bmRyb2lkIGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNlIHNlZTonKQogICAgICAgICAgICAgX2xv
Zy5lcnJvcignJykKQEAgLTI4NCw4ICsyOTYsMTEgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9y
dChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogCiAgICAgICAgIHJldHVybiBDaHJvbWl1bUFuZHJv
aWRQb3J0Ll9hZGJfcGF0aAogCi0gICAgZGVmIHBhdGhfdG9fZm9yd2FyZGVyKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnZm9yd2FyZGVyJykKKyAgICBkZWYgcGF0aF90
b19ob3N0X2ZvcndhcmRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZvcndhcmRlci5wYXRoX3Rv
X2hvc3RfZm9yd2FyZGVyKHNlbGYuX2J1aWxkX3BhdGgpCisKKyAgICBkZWYgcGF0aF90b19kZXZp
Y2VfZm9yd2FyZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gRm9yd2FyZGVyLnBhdGhfdG9fZGV2
aWNlX2ZvcndhcmRlcihzZWxmLl9idWlsZF9wYXRoKQogCiAgICAgZGVmIHBhdGhfdG9fbWQ1c3Vt
KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChNRDVTVU1fREVWSUNFX0ZJ
TEVfTkFNRSkKQEAgLTM2MCw2ICszNzUsMTc2IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQo
Y2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgcmV0dXJuIGRldmljZXNbd29ya2VyX251
bWJlcl0KIAogCitjbGFzcyBBbmRyb2lkQ29tbWFuZHM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGNvbW1hbmRfZXhlY3V0b3IsIGFkYl9jb21tYW5kLCBwYXRoX2J1aWxkZXIpOgorICAgICAgICBz
ZWxmLl9jb21tYW5kX2V4ZWN1dG9yID0gY29tbWFuZF9leGVjdXRvcgorICAgICAgICBzZWxmLl9h
ZGJfY29tbWFuZCA9IGFkYl9jb21tYW5kCisgICAgICAgIHNlbGYuX3BhdGhfYnVpbGRlciA9IHBh
dGhfYnVpbGRlcgorCisgICAgZGVmIHNldHVwX21kNXN1bShzZWxmKToKKyAgICAgICAgc2VsZi5f
bWQ1c3VtX3BhdGggPSBzZWxmLl9wYXRoX2J1aWxkZXIoTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUp
CisgICAgICAgIGlmIG5vdCBzZWxmLmZpbGVfZXhpc3RzX29uX2RldmljZShNRDVTVU1fREVWSUNF
X1BBVEgpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYucHVzaF90b19kZXZpY2Uoc2VsZi5fbWQ1
c3VtX3BhdGgsIE1ENVNVTV9ERVZJQ0VfUEFUSCk6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNz
ZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBwdXNoIG1kNXN1bSB0byB0aGUgZGV2aWNlJykKKworICAg
IGRlZiBnZXRfYWRiX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9hZGJfY29t
bWFuZAorCisgICAgZGVmIF9ydW5fY29tbWFuZChzZWxmLCBjbWQsIGVycm9yX2hhbmRsZXI9Tm9u
ZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb21tYW5kX2V4ZWN1dG9yKGNtZCwgZXJyb3JfaGFu
ZGxlcj1lcnJvcl9oYW5kbGVyKQorCisgICAgZGVmIHJ1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQs
IGVycm9yX2hhbmRsZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb21tYW5kX2V4ZWN1
dG9yKHNlbGYuX2FkYl9jb21tYW5kICsgY21kLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIp
CisKKyAgICBkZWYgZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToK
KyAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQorICAgICAgICBy
ZXR1cm4gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRo
XSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAorCisgICAgZGVmIHB1c2hfdG9fZGV2aWNlKHNl
bGYsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5fYWRi
X2NvbW1hbmQoWydwdXNoJywgaG9zdF9wYXRoLCBkZXZpY2VfcGF0aF0pCisKKyAgICBkZWYgcHVs
bF9mcm9tX2RldmljZShzZWxmLCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoKToKKyAgICAgICAgcmV0
dXJuIHNlbGYucnVuX2FkYl9jb21tYW5kKFsncHVsbCcsIGRldmljZV9wYXRoLCBob3N0X3BhdGhd
KQorCisgICAgZGVmIF9tZDVzdW1fZXJyb3JfaGFuZGxlcihzZWxmLCBzY3JpcHRfZXJyb3IpOgor
ICAgICAgICAjIEl0IGlzIG5vdCBhbiBlcnJvciBpZiBtZDVzdW0gZXhpdHMgd2l0aCAxLiBUaGlz
IGhhcHBlbnMgd2hlbiB0aGUgZmlsZSBpdCBpcyBpbnZva2VkIG9uIGRvZXMgbm90IGV4aXQuCisg
ICAgICAgIF9sb2cuZGVidWcoc2NyaXB0X2Vycm9yKQorICAgICAgICBwYXNzCisKKyAgICBkZWYg
cHVzaF9maWxlX2lmX25lZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRldmljZV9maWxlKToKKyAgICAg
ICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGhvc3RfZmlsZSkKKyAgICAgICAgcGF0aF90b19tZDVz
dW1faG9zdCA9IHNlbGYuX21kNXN1bV9wYXRoICsgJ19ob3N0JworICAgICAgICBhc3NlcnQgb3Mu
cGF0aC5leGlzdHMocGF0aF90b19tZDVzdW1faG9zdCkKKyAgICAgICAgbWQ1c3VtX291dHB1dCA9
IHNlbGYucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCBNRDVTVU1fREVWSUNFX1BBVEgsIGRldmlj
ZV9maWxlXSkKKyAgICAgICAgZGV2aWNlX2hhc2hlcyA9IEFuZHJvaWRDb21tYW5kcy5fZXh0cmFj
dF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpCisgICAgICAgIGhvc3Rf
aGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAorICAgICAg
ICAgICAgc2VsZi5fcnVuX2NvbW1hbmQoW3BhdGhfdG9fbWQ1c3VtX2hvc3QsIGhvc3RfZmlsZV0s
IHNlbGYuX21kNXN1bV9lcnJvcl9oYW5kbGVyKSkKKyAgICAgICAgaWYgaG9zdF9oYXNoZXMgYW5k
IGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgc2VsZi5wdXNoX3RvX2RldmljZShob3N0X2ZpbGUsIGRldmljZV9maWxlKQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBfZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1k
NXN1bV9vdXRwdXQpOgorICAgICAgICBhc3NlcnQgbWQ1c3VtX291dHB1dAorICAgICAgICByZXR1
cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291dHB1dF0KKworCisj
IERldmljZSB0byBob3N0IHBvcnQgZm9yd2FyZGVyLgorY2xhc3MgRm9yd2FyZGVyOgorICAgIERF
VklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnZGV2aWNlX2Zv
cndhcmRlcicKKyAgICBBREJfQ09OVFJPTF9TT0NLRVQgPSAnY2hyb21lX2RldmljZV9mb3J3YXJk
ZXInCisgICAgSE9TVF9MT0NBTF9BRERSRVNTID0gJzEyNy4wLjAuMScKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBjb21tYW5kX2V4ZWN1dG9yLCBob3N0X3BhdGhfYnVpbGRlciwgYW5kcm9pZF9j
bWQpOgorICAgICAgICBzZWxmLl9kZXZpY2VfZm9yd2FyZGVyX3BhdGggPSBGb3J3YXJkZXIucGF0
aF90b19kZXZpY2VfZm9yd2FyZGVyKGhvc3RfcGF0aF9idWlsZGVyKQorICAgICAgICBzZWxmLl9o
b3N0X2ZvcndhcmRlcl9wYXRoID0gRm9yd2FyZGVyLnBhdGhfdG9faG9zdF9mb3J3YXJkZXIoaG9z
dF9wYXRoX2J1aWxkZXIpCisgICAgICAgIHNlbGYuX2NvbW1hbmRfZXhlY3V0b3IgPSBjb21tYW5k
X2V4ZWN1dG9yCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kID0gYW5kcm9pZF9jbWQKKyAgICAg
ICAgc2VsZi5fd29ya2VyX251bWJlcl90b19hZGJfY29udHJvbF9wb3J0X21hcCA9IHt9CisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtpbGxfaG9zdF9kYWVtb24oY29tbWFuZF9leGVjdXRv
ciwgaG9zdF9wYXRoX2J1aWxkZXIpOgorICAgICAgICBfbG9nLmVycm9yKCdLaWxsaW5nIGhvc3Qg
ZGFlbW9uJykKKyAgICAgICAgKGV4aXRfY29kZSwgb3V0cHV0KSA9IEZvcndhcmRlci5fcnVuX3No
ZWxsX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUoCisgICAgICAgICAgICBjb21tYW5kX2V4ZWN1
dG9yLCBbRm9yd2FyZGVyLnBhdGhfdG9faG9zdF9mb3J3YXJkZXIoaG9zdF9wYXRoX2J1aWxkZXIp
LCAna2lsbC1zZXJ2ZXInXSkKKyAgICAgICAgaWYgZXhpdF9jb2RlICE9IDA6CisgICAgICAgICAg
ICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IGtpbGwgaG9zdF9mb3J3YXJkZXI6ICVz
JyAlIG91dHB1dCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYga2lsbF9kZXZpY2VfZGFl
bW9uKGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJvaWRfY21kKToKKyAgICAgICAgX2xvZy5kZWJ1Zygn
S2lsbGluZyBkZXZpY2UgZGFlbW9uJykKKyAgICAgICAgaWYgbm90IGFuZHJvaWRfY21kLmZpbGVf
ZXhpc3RzX29uX2RldmljZShGb3J3YXJkZXIuREVWSUNFX0ZPUldBUkRFUl9QQVRIKToKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICAoZXhpdF9jb2RlLCBvdXRwdXQpID0gRm9yd2FyZGVyLl9y
dW5fYWRiX3NoZWxsX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUoCisgICAgICAgICAgICBjb21t
YW5kX2V4ZWN1dG9yLCBhbmRyb2lkX2NtZCwgW0ZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BB
VEgsICdraWxsLXNlcnZlciddKQorICAgICAgICBpZiBleGl0X2NvZGUgIT0gMDoKKyAgICAgICAg
ICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3Qga2lsbCBkZXZpY2VfZm9yd2FyZGVy
OiAlcycgJSBvdXRwdXQpCisKKyAgICBkZWYgc2V0dXBfcmVkaXJlY3Rpb25zKHNlbGYsIHdvcmtl
cl9udW1iZXIsIHBvcnRfcGFpcnMpOgorICAgICAgICBhZGJfY29udHJvbF9wb3J0ID0gc2VsZi5f
d29ya2VyX251bWJlcl90b19hZGJfY29udHJvbF9wb3J0X21hcC5nZXQod29ya2VyX251bWJlcikK
KyAgICAgICAgaWYgbm90IGFkYl9jb250cm9sX3BvcnQ6CisgICAgICAgICAgICBhZGJfY29udHJv
bF9wb3J0ID0gc2VsZi5fYWxsb2NhdGVfYWRiX2NvbnRyb2xfcG9ydCh3b3JrZXJfbnVtYmVyKQor
ICAgICAgICAgICAgaWYgbm90IGFkYl9jb250cm9sX3BvcnQ6CisgICAgICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBhbGxvY2F0ZSBBREIgY29udHJvbCBwb3J0JykK
KyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXJfdG9fYWRiX2NvbnRyb2xfcG9ydF9tYXBb
d29ya2VyX251bWJlcl0gPSBhZGJfY29udHJvbF9wb3J0CisKKyAgICAgICAgZm9yd2FyZF9jbWQg
PSBbJ2ZvcndhcmQnLCAndGNwOiVzJyAlIGFkYl9jb250cm9sX3BvcnQsICdsb2NhbGFic3RyYWN0
OiVzJyAlIEZvcndhcmRlci5BREJfQ09OVFJPTF9TT0NLRVRdCisgICAgICAgIChleGl0X2NvZGUs
IG91dHB1dCkgPSBGb3J3YXJkZXIuX3J1bl9hZGJfY29tbWFuZF9hbmRfZ2V0X2V4aXRfY29kZSgK
KyAgICAgICAgICAgIHNlbGYuX2NvbW1hbmRfZXhlY3V0b3IsIHNlbGYuX2FuZHJvaWRfY21kLCBm
b3J3YXJkX2NtZCkKKyAgICAgICAgaWYgZXhpdF9jb2RlICE9IDA6CisgICAgICAgICAgICByYWlz
ZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IGZvcndhcmQgaG9zdCB0byBkZXZpY2UgcG9ydCB1
c2luZyBBREI6ICVzJyAlIG91dHB1dCkKKworICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNo
X2ZpbGVfaWZfbmVlZGVkKHNlbGYuX2RldmljZV9mb3J3YXJkZXJfcGF0aCwgRm9yd2FyZGVyLkRF
VklDRV9GT1JXQVJERVJfUEFUSCkKKyAgICAgICAgKGV4aXRfY29kZSwgb3V0cHV0KSA9IEZvcndh
cmRlci5fcnVuX2FkYl9zaGVsbF9jb21tYW5kX2FuZF9nZXRfZXhpdF9jb2RlKAorICAgICAgICAg
ICAgc2VsZi5fY29tbWFuZF9leGVjdXRvciwgc2VsZi5fYW5kcm9pZF9jbWQsIFtGb3J3YXJkZXIu
REVWSUNFX0ZPUldBUkRFUl9QQVRILCBGb3J3YXJkZXIuQURCX0NPTlRST0xfU09DS0VUXSkKKyAg
ICAgICAgaWYgZXhpdF9jb2RlICE9IDA6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJv
cignQ291bGQgbm90IHJ1biBkZXZpY2VfZm9yd2FyZGVyOiAlcycgJSBvdXRwdXQpCisKKyAgICAg
ICAgIyBDb21tYW5kIGZvcm1hdDogPGFkYiBjb250cm9sIHBvcnQ+OjxkZXZpY2UgcG9ydD46PGhv
c3QgcG9ydD46PGhvc3QgYWRkcmVzcz4KKyAgICAgICAgcmVkaXJlY3Rpb25fY29tbWFuZHMgPSBb
CisgICAgICAgICAgICAnJWQ6JWQ6JWQ6JXMnICUgKGFkYl9jb250cm9sX3BvcnQsIGRldmljZV9w
b3J0LCBob3N0X3BvcnQsIEZvcndhcmRlci5IT1NUX0xPQ0FMX0FERFJFU1MpIGZvciBkZXZpY2Vf
cG9ydCwgaG9zdF9wb3J0IGluIHBvcnRfcGFpcnNdCisgICAgICAgIGZvciByZWRpcmVjdGlvbl9j
b21tYW5kIGluIHJlZGlyZWN0aW9uX2NvbW1hbmRzOgorICAgICAgICAgICAgKGV4aXRfY29kZSwg
b3V0cHV0KSA9IEZvcndhcmRlci5fcnVuX3NoZWxsX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUo
CisgICAgICAgICAgICAgICAgc2VsZi5fY29tbWFuZF9leGVjdXRvciwgW3NlbGYuX2hvc3RfZm9y
d2FyZGVyX3BhdGgsIHJlZGlyZWN0aW9uX2NvbW1hbmRdKQorICAgICAgICAgICAgaWYgZXhpdF9j
b2RlICE9IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5v
dCBydW4gaG9zdF9mb3J3YXJkZXI6ICVzJyAlIG91dHB1dCkKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgX2FsbG9jYXRlX2FkYl9jb250cm9sX3BvcnQod29ya2VyX251bWJlcik6CisgICAg
ICAgIHVzZWRfcG9ydHMgPSBGb3J3YXJkZXIuX2dldF91c2VkX3BvcnRzKCkKKyAgICAgICAgcG9y
dCA9IEZPUldBUkRFUl9DT05UUk9MX1BPUlRfQkVHSU4gKyB3b3JrZXJfbnVtYmVyCisgICAgICAg
IHdoaWxlIHBvcnQgPCBGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VORCBhbmQgcG9ydCBpbiB1c2Vk
X3BvcnRzOgorICAgICAgICAgICAgcG9ydCArPSAxCisgICAgICAgIGlmIHBvcnQgPj0gRk9SV0FS
REVSX0NPTlRST0xfUE9SVF9FTkQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBy
ZXR1cm4gcG9ydAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X3VzZWRfcG9ydHMo
KToKKyAgICAgICAgdXNlZF9wb3J0cyA9IHNldChbXSkKKyAgICAgICAgZm9yIGxpbmUgaW4gRmls
ZVN5c3RlbSgpLm9wZW5fdGV4dF9maWxlX2Zvcl9yZWFkaW5nKCcvcHJvYy9uZXQvdGNwJykueHJl
YWRsaW5lcygpOgorICAgICAgICAgICAgZmllbGRzID0gbGluZS5zcGxpdCgpCisgICAgICAgICAg
ICBpZiBub3QgZmllbGRzIG9yIGZpZWxkc1swXSA9PSAnc2wnOgorICAgICAgICAgICAgICAgIGNv
bnRpbnVlCisgICAgICAgICAgICBsb2NhbF9hZGRyZXNzID0gZmllbGRzWzFdCisgICAgICAgICAg
ICByZW1vdGVfYWRkcmVzcyA9IGZpZWxkc1syXQorICAgICAgICAgICAgbG9jYWxfaXAsIGxvY2Fs
X3BvcnQgPSBsb2NhbF9hZGRyZXNzLnNwbGl0KCc6JykKKyAgICAgICAgICAgIHJlbW90ZV9pcCwg
cmVtb3RlX3BvcnQgPSByZW1vdGVfYWRkcmVzcy5zcGxpdCgnOicpCisgICAgICAgICAgICB1c2Vk
X3BvcnRzLmFkZChsb2NhbF9wb3J0KQorICAgICAgICAgICAgdXNlZF9wb3J0cy5hZGQocmVtb3Rl
X3BvcnQpCisgICAgICAgIHJldHVybiB1c2VkX3BvcnRzCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIF9ydW5fYWRiX3NoZWxsX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUoY29tbWFuZF9l
eGVjdXRvciwgYW5kcm9pZF9jbWQsIGNtZF9hcnJheSk6CisgICAgICAgICMgTm90ZSB0aGF0IHRo
ZSBleHRyYSAnKicgY2hhcmFjdGVyIGJlbG93IGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdo
ZXJlIHRoZSBwcm9jZXNzJyBvdXRwdXQgaXMgbm90IG5ld2xpbmUgdGVybWluYXRlZC4KKyAgICAg
ICAgY21kID0gYW5kcm9pZF9jbWQuZ2V0X2FkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJ10gKyBbJyAn
LmpvaW4oY21kX2FycmF5KSArICc7IGVjaG8gKiQ/J10KKyAgICAgICAgbGluZXMgPSBjb21tYW5k
X2V4ZWN1dG9yKGNtZCwgZGVjb2RlX291dHB1dD1GYWxzZSkuc3BsaXRsaW5lcygpCisgICAgICAg
IGxhc3RfbGluZSA9IGxpbmVzWy0xXQorICAgICAgICBzdGF0dXNfc2VwYXJhdG9yX3BvcyA9IGxh
c3RfbGluZS5yZmluZCgnKicpCisgICAgICAgIGFzc2VydCBzdGF0dXNfc2VwYXJhdG9yX3BvcyA+
PSAwCisgICAgICAgIHN0YXR1cyA9IGludChsYXN0X2xpbmVbc3RhdHVzX3NlcGFyYXRvcl9wb3Mg
KyAxOl0pCisgICAgICAgIGlmIHN0YXR1c19zZXBhcmF0b3JfcG9zID09IDA6CisgICAgICAgICAg
ICBsaW5lcyA9IGxpbmVzWzotMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzID0g
bGluZXNbOi0xXSArIGxhc3RfbGluZVs6c3RhdHVzX3NlcGFyYXRvcl9wb3NdCisgICAgICAgIHJl
dHVybiAoc3RhdHVzLCBsaW5lcykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3J1bl9h
ZGJfY29tbWFuZF9hbmRfZ2V0X2V4aXRfY29kZShjb21tYW5kX2V4ZWN1dG9yLCBhbmRyb2lkX2Nt
ZCwgY21kX2FycmF5KToKKyAgICAgICAgcmV0dXJuIGNvbW1hbmRfZXhlY3V0b3IoYW5kcm9pZF9j
bWQuZ2V0X2FkYl9jb21tYW5kKCkgKyBjbWRfYXJyYXksIHJldHVybl9leGl0X2NvZGVfYW5kX291
dHB1dD1UcnVlLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBfcnVuX3NoZWxsX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUoY29tbWFuZF9leGVjdXRv
ciwgY21kX2FycmF5KToKKyAgICAgICAgcmV0dXJuIGNvbW1hbmRfZXhlY3V0b3IoY21kX2FycmF5
LCByZXR1cm5fZXhpdF9jb2RlX2FuZF9vdXRwdXQ9VHJ1ZSwgZGVjb2RlX291dHB1dD1GYWxzZSkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKGhv
c3RfcGF0aF9idWlsZGVyKToKKyAgICAgICAgcmV0dXJuIGhvc3RfcGF0aF9idWlsZGVyKCdkZXZp
Y2VfZm9yd2FyZGVyJykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcGF0aF90b19ob3N0
X2ZvcndhcmRlcihob3N0X3BhdGhfYnVpbGRlcik6CisgICAgICAgIHJldHVybiBob3N0X3BhdGhf
YnVpbGRlcignaG9zdF9mb3J3YXJkZXInKQorCiBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIo
ZHJpdmVyLkRyaXZlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1i
ZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0PUZhbHNlKToKICAgICAgICAgc3VwZXIoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2luaXRfXyhwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhl
bF90ZXN0cywgbm9fdGltZW91dCkKQEAgLTM2OSw0NyArNTU0LDQxIEBAIGNsYXNzIENocm9taXVt
QW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgc2VsZi5fZXJyX2ZpZm9fcGF0
aCA9IERFVklDRV9GSUZPX1BBVEggKyAnc3RkZXJyLmZpZm8nCiAgICAgICAgIHNlbGYuX3JlYWRf
c3Rkb3V0X3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3Mg
PSBOb25lCi0gICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gTm9uZQogICAgICAgICBz
ZWxmLl9oYXNfc2V0dXAgPSBGYWxzZQogICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnMg
PSB7fQogICAgICAgICBzZWxmLl9kZXZpY2Vfc2VyaWFsID0gcG9ydC5fZ2V0X2RldmljZV9zZXJp
YWwod29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fYWRiX2NvbW1hbmQgPSBbcG9ydC5wYXRo
X3RvX2FkYigpLCAnLXMnLCBzZWxmLl9kZXZpY2Vfc2VyaWFsXQorICAgICAgICBzZWxmLl9hbmRy
b2lkX2NtZCA9IEFuZHJvaWRDb21tYW5kcygKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuX2V4ZWN1
dGl2ZS5ydW5fY29tbWFuZCwgc2VsZi5fYWRiX2NvbW1hbmQsIHNlbGYuX3BvcnQuX2J1aWxkX3Bh
dGgpCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5fdGVhcmRvd25fcGVy
Zm9ybWFuY2UoKQogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9f
ZGVsX18oKQogCi0gICAgZGVmIF9zZXR1cF9tZDVzdW1fYW5kX3B1c2hfZGF0YV9pZl9uZWVkZWQo
c2VsZik6Ci0gICAgICAgIHNlbGYuX21kNXN1bV9wYXRoID0gc2VsZi5fcG9ydC5wYXRoX3RvX21k
NXN1bSgpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2UoTUQ1U1VN
X0RFVklDRV9QQVRIKToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wdXNoX3RvX2RldmljZShz
ZWxmLl9tZDVzdW1fcGF0aCwgTUQ1U1VNX0RFVklDRV9QQVRIKToKLSAgICAgICAgICAgICAgICBy
YWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IHB1c2ggbWQ1c3VtIHRvIGRldmljZScpCi0K
LSAgICAgICAgc2VsZi5fcHVzaF9leGVjdXRhYmxlKCkKLSAgICAgICAgc2VsZi5fcHVzaF9mb250
cygpCi0gICAgICAgIHNlbGYuX3B1c2hfdGVzdF9yZXNvdXJjZXMoKQotCiAgICAgZGVmIF9zZXR1
cF90ZXN0KHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9oYXNfc2V0dXA6CiAgICAgICAgICAgICBy
ZXR1cm4KIAogICAgICAgICBzZWxmLl9yZXN0YXJ0X2FkYl9hc19yb290KCkKLSAgICAgICAgc2Vs
Zi5fc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2RhdGFfaWZfbmVlZGVkKCkKLSAgICAgICAgc2VsZi5f
aGFzX3NldHVwID0gVHJ1ZQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5zZXR1cF9tZDVzdW0o
KQorICAgICAgICBzZWxmLl9wdXNoX2RhdGFfaWZfbmVlZGVkKCkKICAgICAgICAgc2VsZi5fc2V0
dXBfcGVyZm9ybWFuY2UoKQorICAgICAgICBzZWxmLl9oYXNfc2V0dXAgPSBUcnVlCiAKICAgICAg
ICAgIyBSZXF1aXJlZCBieSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpckZpbGVQYXRo
KCkuCiAgICAgICAgICMgT3RoZXIgZGlyZWN0b3JpZXMgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRp
Y2FsbHkgYnkgYWRiIHB1c2guCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ21rZGlyJywgJy1wJywgREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJvbWUnXSkKKyAg
ICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXIn
LCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZSddKQogCiAgICAgICAgICMg
QWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCB0byBmdWxseSBhY2Nlc3MgdGhlIGRpcmVjdG9y
eS4KICAgICAgICAgIyBUaGUgbmF0aXZlIGNvZGUgbmVlZHMgdGhlIHBlcm1pc3Npb24gdG8gd3Jp
dGUgdGVtcG9yYXJ5IGZpbGVzIGFuZCBjcmVhdGUgcGlwZXMgaGVyZS4KLSAgICAgICAgc2VsZi5f
cnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfRFJUX0RJUl0p
Ci0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NobW9kJywgJzc3Nycs
IERFVklDRV9EUlRfRElSXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21t
YW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfRFJUX0RJUl0pCisgICAgICAgIHNl
bGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NobW9kJywgJzc3Nycs
IERFVklDRV9EUlRfRElSXSkKIAogICAgICAgICAjIERlbGV0ZSB0aGUgZGlzayBjYWNoZSBpZiBh
bnkgdG8gZW5zdXJlIGEgY2xlYW4gdGVzdCBydW4uCiAgICAgICAgICMgVGhpcyBpcyBsaWtlIHdo
YXQncyBkb25lIGluIENocm9taXVtUG9ydC5zZXR1cF90ZXN0X3J1biBidXQgb24gdGhlIGRldmlj
ZS4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCAnLXInLCBE
UlRfQVBQX0NBQ0hFX0RJUl0pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQorCisgICAgICAg
IEZvcndhcmRlci5raWxsX2RldmljZV9kYWVtb24oc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9j
b21tYW5kLCBzZWxmLl9hbmRyb2lkX2NtZCkKIAogICAgIGRlZiBfbG9nX2Vycm9yKHNlbGYsIG1l
c3NhZ2UpOgogICAgICAgICBfbG9nLmVycm9yKCdbJXNdICVzJyAlIChzZWxmLl9kZXZpY2Vfc2Vy
aWFsLCBtZXNzYWdlKSkKQEAgLTQyMCw4NSArNTk5LDUwIEBAIGNsYXNzIENocm9taXVtQW5kcm9p
ZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICBkZWYgX2Fib3J0KHNlbGYsIG1lc3NhZ2UpOgog
ICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignWyVzXSAlcycgJSAoc2VsZi5fZGV2aWNlX3Nl
cmlhbCwgbWVzc2FnZSkpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9leHRyYWN0X2hh
c2hlc19mcm9tX21kNXN1bV9vdXRwdXQobWQ1c3VtX291dHB1dCk6Ci0gICAgICAgIGFzc2VydCBt
ZDVzdW1fb3V0cHV0Ci0gICAgICAgIHJldHVybiBbbGluZS5zcGxpdCgnICAnKVswXSBmb3IgbGlu
ZSBpbiBtZDVzdW1fb3V0cHV0XQotCi0gICAgZGVmIF9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYs
IGhvc3RfZmlsZSwgZGV2aWNlX2ZpbGUpOgotICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMo
aG9zdF9maWxlKQotICAgICAgICBkZXZpY2VfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNf
ZnJvbV9tZDVzdW1fb3V0cHV0KAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5leGVj
dXRpdmUucG9wZW4oc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgTUQ1U1VNX0RFVklDRV9Q
QVRILCBkZXZpY2VfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQpCi0gICAgICAgIGhvc3Rf
aGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAotICAgICAg
ICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5leGVjdXRpdmUucG9wZW4oYXJncz1bJyVzX2hvc3Qn
ICUgc2VsZi5fbWQ1c3VtX3BhdGgsIGhvc3RfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQp
Ci0gICAgICAgIGlmIGhvc3RfaGFzaGVzIGFuZCBkZXZpY2VfaGFzaGVzID09IGhvc3RfaGFzaGVz
OgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKGhvc3Rf
ZmlsZSwgZGV2aWNlX2ZpbGUpCisgICAgZGVmIF9wdXNoX2RhdGFfaWZfbmVlZGVkKHNlbGYpOgor
ICAgICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQorICAgICAgICBzZWxmLl9wdXNoX2ZvbnRz
KCkKKyAgICAgICAgc2VsZi5fcHVzaF90ZXN0X3Jlc291cmNlcygpCiAKICAgICBkZWYgX3B1c2hf
ZXhlY3V0YWJsZShzZWxmKToKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxm
Ll9wb3J0LnBhdGhfdG9fZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkKLSAgICAg
ICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1w
UmVuZGVyVHJlZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUucGFrJykK
LSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRo
KCdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRl
clRyZWVfcmVzb3VyY2VzJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxm
Ll9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRf
RElSICsgJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVf
aWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMu
eG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJykKLSAg
ICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQUF9QQUNLQUdF
XSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9w
b3J0LnBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcigpLCBERVZJQ0VfRk9SV0FSREVSX1BBVEgpCisg
ICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5f
YnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWUucGFrJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBS
ZW5kZXJUcmVlLnBhaycpCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9u
ZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJyks
IERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpCisgICAgICAgIHNl
bGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0
aCgnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX21h
aW5fZm9udHMueG1sJykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25l
ZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcp
LCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpCisgICAgICAg
IHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBf
UEFDS0FHRV0pCiAgICAgICAgIGRydF9ob3N0X3BhdGggPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2Ry
aXZlcigpCi0gICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
aW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQorICAgICAgICBpbnN0YWxsX3Jlc3VsdCA9IHNlbGYu
X2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ2luc3RhbGwnLCBkcnRfaG9zdF9wYXRoXSkK
ICAgICAgICAgaWYgaW5zdGFsbF9yZXN1bHQuZmluZCgnU3VjY2VzcycpID09IC0xOgogICAgICAg
ICAgICAgc2VsZi5fYWJvcnQoJ0ZhaWxlZCB0byBpbnN0YWxsICVzIG9udG8gZGV2aWNlOiAlcycg
JSAoZHJ0X2hvc3RfcGF0aCwgaW5zdGFsbF9yZXN1bHQpKQogCiAgICAgZGVmIF9wdXNoX2ZvbnRz
KHNlbGYpOgogICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1B1c2hpbmcgZm9udHMnKQogICAgICAg
ICBwYXRoX3RvX2FoZW1fZm9udCA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0FIRU1fX19fLlRU
RicpCi0gICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQocGF0aF90b19haGVtX2ZvbnQs
IERFVklDRV9GT05UU19ESVIgKyAnQUhFTV9fX18uVFRGJykKKyAgICAgICAgc2VsZi5fYW5kcm9p
ZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVWSUNFX0ZPTlRT
X0RJUiArICdBSEVNX19fXy5UVEYnKQogICAgICAgICBmb3IgKGhvc3RfZGlycywgZm9udF9maWxl
LCBwYWNrYWdlKSBpbiBIT1NUX0ZPTlRfRklMRVM6CiAgICAgICAgICAgICBmb3IgaG9zdF9kaXIg
aW4gaG9zdF9kaXJzOgogICAgICAgICAgICAgICAgIGhvc3RfZm9udF9wYXRoID0gaG9zdF9kaXIg
KyBmb250X2ZpbGUKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9wb3J0Ll9jaGVja19maWxlX2V4
aXN0cyhob3N0X2ZvbnRfcGF0aCwgJycsIGxvZ2dpbmc9RmFsc2UpOgotICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9O
VFNfRElSICsgZm9udF9maWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2Nt
ZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElSICsg
Zm9udF9maWxlKQogCiAgICAgZGVmIF9wdXNoX3Rlc3RfcmVzb3VyY2VzKHNlbGYpOgogICAgICAg
ICBzZWxmLl9sb2dfZGVidWcoJ1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBmb3Ig
cmVzb3VyY2UgaW4gVEVTVF9SRVNPVVJDRVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYuX3B1
c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnLycgKyBy
ZXNvdXJjZSwgREVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyByZXNvdXJjZSkKKyAgICAgICAgICAg
IHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5sYXlvdXRf
dGVzdHNfZGlyKCkgKyAnLycgKyByZXNvdXJjZSwgREVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyBy
ZXNvdXJjZSkKIAogICAgIGRlZiBfcmVzdGFydF9hZGJfYXNfcm9vdChzZWxmKToKLSAgICAgICAg
b3V0cHV0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncm9vdCddKQorICAgICAgICBvdXRwdXQg
PSBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydyb290J10pCiAgICAgICAgIGlm
ICdhZGJkIGlzIGFscmVhZHkgcnVubmluZyBhcyByb290JyBpbiBvdXRwdXQ6CiAgICAgICAgICAg
ICByZXR1cm4KICAgICAgICAgZWxpZiBub3QgJ3Jlc3RhcnRpbmcgYWRiZCBhcyByb290JyBpbiBv
dXRwdXQ6CiAgICAgICAgICAgICBzZWxmLl9sb2dfZXJyb3IoJ1VucmVjb2duaXplZCBvdXRwdXQg
ZnJvbSBhZGIgcm9vdDogJXMnICUgb3V0cHV0KQogCiAgICAgICAgICMgUmVnYXJkbGVzcyB0aGUg
b3V0cHV0LCBnaXZlIHRoZSBkZXZpY2UgYSBtb21lbnQgdG8gY29tZSBiYWNrIG9ubGluZS4KLSAg
ICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnd2FpdC1mb3ItZGV2aWNlJ10pCi0KLSAgICBk
ZWYgX3J1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSk6Ci0gICAg
ICAgIHNlbGYuX2xvZ19kZWJ1ZygnUnVuIGFkYiBjb21tYW5kOiAnICsgc3RyKGNtZCkpCi0gICAg
ICAgIGlmIGlnbm9yZV9lcnJvcjoKLSAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBzZWxmLl9w
b3J0Ll9leGVjdXRpdmUuaWdub3JlX2Vycm9yCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBl
cnJvcl9oYW5kbGVyID0gTm9uZQotICAgICAgICByZXN1bHQgPSBzZWxmLl9wb3J0Ll9leGVjdXRp
dmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJy
b3JfaGFuZGxlcikKLSAgICAgICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJi
b3NlIG91dHB1dCBvZiBjb21tYW5kcyBsaWtlICdhZGIgbG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90
b21ic3RvbmVzL3RvbWJzdG9uZTAxJwotICAgICAgICAjIHdob3NlIG91dHB1dHMgYXJlIG5vcm1h
bGx5IHByaW50ZWQgaW4gbGF0ZXIgbG9ncy4KLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdSdW4g
YWRiIHJlc3VsdDogJyArIHJlc3VsdFs6ODBdKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAg
ICBkZWYgX2xpbmtfZGV2aWNlX2ZpbGUoc2VsZiwgZnJvbV9maWxlLCB0b19maWxlLCBpZ25vcmVf
ZXJyb3I9RmFsc2UpOgotICAgICAgICAjIHJtIHRvX2ZpbGUgZmlyc3QgdG8gbWFrZSBzdXJlIHRo
YXQgbG4gc3VjY2VlZHMuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywg
J3JtJywgdG9fZmlsZV0sIGlnbm9yZV9lcnJvcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xuJywgJy1zJywgZnJvbV9maWxlLCB0b19maWxlXSwgaWdu
b3JlX2Vycm9yKQotCi0gICAgZGVmIF9wdXNoX3RvX2RldmljZShzZWxmLCBob3N0X3BhdGgsIGRl
dmljZV9wYXRoLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVu
X2FkYl9jb21tYW5kKFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGhdLCBpZ25vcmVfZXJy
b3IpCi0KLSAgICBkZWYgX3B1bGxfZnJvbV9kZXZpY2Uoc2VsZiwgZGV2aWNlX3BhdGgsIGhvc3Rf
cGF0aCwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3B1bGwnLCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoXSwgaWdub3JlX2Vycm9yKQor
ICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWyd3YWl0LWZvci1kZXZp
Y2UnXSkKIAogICAgIGRlZiBfZ2V0X2xhc3Rfc3RhY2t0cmFjZShzZWxmKToKLSAgICAgICAgdG9t
YnN0b25lcyA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgJy1uJywgJy9k
YXRhL3RvbWJzdG9uZXMnXSkKKyAgICAgICAgdG9tYnN0b25lcyA9IHNlbGYuX2FuZHJvaWRfY21k
LnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgJy1uJywgJy9kYXRhL3RvbWJzdG9uZXMn
XSkKICAgICAgICAgaWYgbm90IHRvbWJzdG9uZXMgb3IgdG9tYnN0b25lcy5zdGFydHN3aXRoKCcv
ZGF0YS90b21ic3RvbmVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Jyk6CiAgICAgICAgICAg
ICBzZWxmLl9sb2dfZXJyb3IoJ0RSVCBjcmFzaGVkLCBidXQgbm8gdG9tYnN0b25lIGZvdW5kIScp
CiAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTUxOSwyMyArNjYzLDIzIEBAIGNsYXNzIENocm9t
aXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgIyBzdGFjayB0cmFjZSBp
bnRvIGEgaHVtYW4gcmVhZGFibGUgZm9ybWF0LCBpZiBuZWVkZWQuCiAgICAgICAgICMgSXQgdGFr
ZXMgYSBsb25nIHRpbWUsIHNvIGRvbid0IGRvIGl0IGhlcmUuCiAgICAgICAgIHJldHVybiAnJXNc
biVzJyAlICgnICcuam9pbihsYXN0X3RvbWJzdG9uZSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCAnL2RhdGEvdG9tYnN0
b25lcy8nICsgbGFzdF90b21ic3RvbmVbNl1dKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsICcvZGF0
YS90b21ic3RvbmVzLycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQogCiAgICAgZGVmIF9nZXRfbG9n
Y2F0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0
JywgJy1kJywgJy12JywgJ3RocmVhZHRpbWUnXSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctZCcsICctdicsICd0aHJlYWR0aW1l
J10pCiAKICAgICBkZWYgX3NldHVwX3BlcmZvcm1hbmNlKHNlbGYpOgogICAgICAgICAjIERpc2Fi
bGUgQ1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFtIGNhY2hlIHRvIHJlZHVjZSBub2lzZSBpbiB0ZXN0
cwogICAgICAgICBpZiBub3Qgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzOgotICAgICAgICAgICAg
Z292ZXJub3JfZmlsZXMgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIFND
QUxJTkdfR09WRVJOT1JTX1BBVFRFUk5dKQorICAgICAgICAgICAgZ292ZXJub3JfZmlsZXMgPSBz
ZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIFNDQUxJTkdf
R09WRVJOT1JTX1BBVFRFUk5dKQogICAgICAgICAgICAgaWYgZ292ZXJub3JfZmlsZXMuZmluZCgn
Tm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpID09IC0xOgogICAgICAgICAgICAgICAgIGZvciBm
aWxlIGluIGdvdmVybm9yX2ZpbGVzLnNwbGl0KCk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYu
X29yaWdpbmFsX2dvdmVybm9yc1tmaWxlXSA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2NhdCcsIGZpbGVdKS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCAncGVyZm9ybWFuY2UnLCAnPicsIGZpbGVdKQor
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnNbZmlsZV0gPSBzZWxm
Ll9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSkuc3Ry
aXAoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1h
bmQoWydzaGVsbCcsICdlY2hvJywgJ3BlcmZvcm1hbmNlJywgJz4nLCBmaWxlXSkKIAogICAgIGRl
ZiBfdGVhcmRvd25fcGVyZm9ybWFuY2Uoc2VsZik6CiAgICAgICAgIGZvciBmaWxlLCBvcmlnaW5h
bF9jb250ZW50IGluIHNlbGYuX29yaWdpbmFsX2dvdmVybm9ycy5pdGVtcygpOgotICAgICAgICAg
ICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobycsIG9yaWdpbmFsX2NvbnRl
bnQsICc+JywgZmlsZV0pCisgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdlY2hvJywgb3JpZ2luYWxfY29udGVudCwgJz4nLCBmaWxlXSkKICAg
ICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzID0ge30KIAogICAgIGRlZiBfZ2V0X2NyYXNo
X2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CkBAIC01NTIsMTAgKzY5Niw2
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAg
IyBUaGUgY29tbWFuZCBsaW5lIHBhc3NlZCB0byB0aGUgRFJUIHByb2Nlc3MgaXMgcmV0dXJuZWQg
YnkgX2RydF9jbWRfbGluZSgpIGluc3RlYWQuCiAgICAgICAgIHJldHVybiBzZWxmLl9hZGJfY29t
bWFuZCArIFsnc2hlbGwnXQogCi0gICAgZGVmIF9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwg
ZnVsbF9maWxlX3BhdGgpOgotICAgICAgICBhc3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0
aCgnLycpCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICds
cycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAotCiAgICAgZGVm
IF9kcnRfY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAg
ICByZXR1cm4gZHJpdmVyLkRyaXZlci5jbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rl
c3RfYXJncykgKyBbJy0tY3JlYXRlLXN0ZGluLWZpZm8nLCAnLS1zZXBhcmF0ZS1zdGRlcnItZmlm
byddCiAKQEAgLTU2OCwxNyArNzA4LDE3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihk
cml2ZXIuRHJpdmVyKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgX2FsbF9waXBl
c19jcmVhdGVkKHNlbGYpOgotICAgICAgICByZXR1cm4gKHNlbGYuX2ZpbGVfZXhpc3RzX29uX2Rl
dmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVf
ZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAg
ICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisgICAg
ICAgIHJldHVybiAoc2VsZi5fYW5kcm9pZF9jbWQuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYu
X2luX2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQuZmls
ZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAg
ICAgIHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlm
b19wYXRoKSkKIAogICAgIGRlZiBfcmVtb3ZlX2FsbF9waXBlcyhzZWxmKToKICAgICAgICAgZm9y
IGZpbGUgaW4gW3NlbGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwgc2VsZi5f
ZXJyX2ZpZm9fcGF0aF06Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdybScsIGZpbGVdKQorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAncm0nLCBmaWxlXSkKIAotICAgICAgICByZXR1cm4gKG5vdCBzZWxm
Ll9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKLSAgICAgICAg
ICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3Bh
dGgpIGFuZAotICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisgICAgICAgIHJldHVybiAobm90IHNlbGYuX2FuZHJvaWRf
Y21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAorICAgICAg
ICAgICAgICAgIG5vdCBzZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2Vs
Zi5fb3V0X2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuX2FuZHJvaWRf
Y21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKIAogICAgIGRl
ZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQsIHN0b3Bfd2hlbl9kb25lKToKICAgICAgICAg
YmFzZSA9IHNlbGYuX3BvcnQubG9va3VwX3ZpcnR1YWxfdGVzdF9iYXNlKGRyaXZlcl9pbnB1dC50
ZXN0X25hbWUpCkBAIC02MTIsMTMgKzc1MiwxMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwg
c2VsZikuX3N0YXJ0KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCiAgICAgICAgIHNlbGYu
X2xvZ19kZWJ1ZygnU3RhcnRpbmcgZm9yd2FyZGVyJykKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVy
X3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcigKLSAgICAg
ICAgICAgIHNlbGYuX3BvcnQsICdGb3J3YXJkZXInLCBzZWxmLl9hZGJfY29tbWFuZCArIFsnc2hl
bGwnLCAnJXMgLUQgJXMnICUgKERFVklDRV9GT1JXQVJERVJfUEFUSCwgRk9SV0FSRF9QT1JUUyld
KQotICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2Vzcy5zdGFydCgpCi0KLSAgICAgICAgc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1jJ10pCi0gICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuX2NtZF9saW5lICsgWyc+JywgQ09N
TUFORF9MSU5FX0ZJTEVdKQotICAgICAgICBzdGFydF9yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScsICdSdW5JblN1YlRocmVhZCcsICct
bicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVdKQorICAgICAgICBmb3J3YXJkZXIgPSBGb3J3YXJk
ZXIoc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kLCBzZWxmLl9wb3J0Ll9idWlsZF9w
YXRoLCBzZWxmLl9hbmRyb2lkX2NtZCkKKyAgICAgICAgZm9yd2FyZGVyLnNldHVwX3JlZGlyZWN0
aW9ucyhzZWxmLl93b3JrZXJfbnVtYmVyLCBbKHBvcnQsIHBvcnQpIGZvciBwb3J0IGluIEZPUldB
UkRfUE9SVFNdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWyds
b2djYXQnLCAnLWMnXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnZWNobyddICsgc2VsZi5fY21kX2xpbmUgKyBbJz4nLCBDT01NQU5EX0xJTkVf
RklMRV0pCisgICAgICAgIHN0YXJ0X3Jlc3VsdCA9IHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ3N0YXJ0JywgJy1lJywgJ1J1bkluU3ViVGhyZWFkJywg
Jy1uJywgRFJUX0FDVElWSVRZX0ZVTExfTkFNRV0pCiAgICAgICAgIGlmIHN0YXJ0X3Jlc3VsdC5m
aW5kKCdFeGNlcHRpb24nKSAhPSAtMToKICAgICAgICAgICAgIHNlbGYuX2xvZ19lcnJvcignRmFp
bGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNlcHRpb246XG4nICsg
c3RhcnRfcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC02ODIsNyArODIwLDcg
QEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAg
ICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1zdG9wJywgRFJUX0FQUF9QQUNLQUdF
XSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
YW0nLCAnZm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCiAKICAgICAgICAgaWYgc2VsZi5f
cmVhZF9zdGRvdXRfcHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nl
c3Mua2lsbCgpCkBAIC02OTIsMTEgKzgzMCw5IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZl
cihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3Mu
a2lsbCgpCiAgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9uZQogCi0g
ICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuc3RvcCgpCisgICAgICAg
IEZvcndhcmRlci5raWxsX2RldmljZV9kYWVtb24oc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9j
b21tYW5kLCBzZWxmLl9hbmRyb2lkX2NtZCkKIAotICAgICAgICBpZiBzZWxmLl9mb3J3YXJkZXJf
cHJvY2VzczoKLSAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzLmtpbGwoKQotICAg
ICAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHN1cGVyKENo
cm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuc3RvcCgpCiAKICAgICAgICAgaWYgc2VsZi5faGFz
X3NldHVwOgogICAgICAgICAgICAgaWYgbm90IENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93
aXRoX3RpbWVvdXQoc2VsZi5fcmVtb3ZlX2FsbF9waXBlcywgRFJUX1NUQVJUX1NUT1BfVElNRU9V
VF9TRUNTKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177733</attachid>
            <date>2012-12-05 05:49:29 -0800</date>
            <delta_ts>2012-12-17 07:45:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121205144654.patch</filename>
            <type>text/plain</type>
            <size>34555</size>
            <attacher name="Philippe Liard">pliard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Njc3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGVmYTYyNGM2ZDdlMzc1OGY1N2FhYzYyMTJhYmRiNDE1
Y2MzOWNiMC4uMTJhY2ZkNmQ1MTlkMDg4ZmJmMDAxN2NiZTU2YWIwYjAxZGM0NzJjNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1
IEBACisyMDEyLTEyLTA1ICBQaGlsaXBwZSBMaWFyZCAgPHBsaWFyZEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgVXNlIGZvcndhcmRlcjIgaW4gQ2hyb21lIGZvciBBbmRyb2lkIGxheW91dCB0ZXN0
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTg4
CisKKyAgICAgICAgQ2hyb21pdW0ncyBkZXZpY2UgdG8gaG9zdCBmb3J3YXJkZXIgaXMgZGVwcmVj
YXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkCisgICAgICAgIHNvb24uIEl0IHdhcyByZXBsYWNlZCB3
aXRoIGZvcndhcmRlcjIgd2hpY2ggaXMgYWJsZSB0byBydW4gb24KKyAgICAgICAgbm9uLXJvb3Rl
ZCBkZXZpY2VzLiBUaGUgd2F5IGZvcndhcmRlcjIgaXMgc2V0dXAvdGVhcmVkIGRvd24gaXMKKyAg
ICAgICAgZGlmZmVyZW50IHdoaWNoIGV4cGxhaW5zIHdoeSB0aGUgUHl0aG9uIGxheWVyIGluIFdl
YktpdCBoYXMgdG8gYmUKKyAgICAgICAgdXBkYXRlZC4KKworICAgICAgICBJbiBwYXJ0aWN1bGFy
LCBmb3J3YXJkZXIyIGNvbnNpc3RzIG9mIHR3byBwcm9ncmFtcyAoZGFlbW9ucyk6CisgICAgICAg
IC0gaG9zdF9mb3J3YXJkZXI6IGRhZW1vbiBydW5uaW5nIG9uIHRoZSBob3N0CisgICAgICAgIC0g
ZGV2aWNlX2ZvcndhcmRlcjogZGFlbW9uIHJ1bm5pbmcgb24gdGhlIGRldmljZXMgYXR0YWNoZWQg
dG8gdGhlIGhvc3QKKworICAgICAgICBkZXZpY2VfZm9yd2FyZGVyIG11c3QgYmUgc3RhcnRlZCBv
biB0aGUgZGV2aWNlIGJlZm9yZSBob3N0X2ZvcndhcmRlcjoKKyAgICAgICAgJCAvZGF0YS9sb2Nh
bC90bXAvZGV2aWNlX2ZvcndhcmRlciBjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisgICAgICAg
ICdjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcicgaXMgdGhlIG5hbWUgb2YgdGhlIFVuaXggRG9tYWlu
IFNvY2tldCBib3VuZAorICAgICAgICBieSB0aGUgZGFlbW9uIG9uIHRoZSBkZXZpY2Ugd2hpY2gg
aXMgdXNlZCBieSB0aGUgaG9zdCB0byBjb21tdW5pY2F0ZQorICAgICAgICB3aXRoIGl0LgorCisg
ICAgICAgIFRoZW4gdGhlIGhvc3QgbXVzdCBzZXR1cCBhIGhvc3QgdG8gZGV2aWNlIHJlZGlyZWN0
aW9uIHNvIHRoYXQKKyAgICAgICAgaG9zdF9mb3J3YXJkZXIgY2FuIHRhbGsgdG8gdGhlIGRldmlj
ZV9mb3J3YXJkZXIncyBVbml4IERvbWFpbiBTb2NrZXQKKyAgICAgICAgdGhyb3VnaCBhIFRDUCBz
b2NrZXQgKHBvcnQgODAwMCBpbiB0aGUgZXhhbXBsZSBiZWxvdyk6CisgICAgICAgICQgYWRiIGZv
cndhcmQgdGNwOjgwMDAgbG9jYWxhYnN0cmFjdDpjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisg
ICAgICAgIFRoZW4gdGhlIGhvc3QgY2FuIHNwZWNpZnkgd2hpY2ggcG9ydCBtdXN0IGJlIGZvcndh
cmRlZCBmcm9tIHRoZSBkZXZpY2UKKyAgICAgICAgdG8gdGhlIGhvc3QgKGRldmljZSBwb3J0IDgw
ODAgdG8gaG9zdCBwb3J0IDgwODEgaW4gdGhlIGV4YW1wbGUgYmVsb3cpOgorICAgICAgICAkIGhv
c3RfZm9yd2FyZGVyIDgwMDA6ODA4MDo4MDgxOjEyNy4wLjAuMQorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5OgorICAgICAgICAo
RXhlY3V0aXZlLnJ1bl9jb21tYW5kKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWRQb3J0LnNldHVwX3Rlc3RfcnVuKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuY2hl
Y2tfYnVpbGQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX2hvc3RfZm9y
d2FyZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkUG9ydC5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIpOgorICAgICAgICAoQW5kcm9p
ZENvbW1hbmRzKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5fX2luaXRfXyk6CisgICAgICAg
IChBbmRyb2lkQ29tbWFuZHMuc2V0dXBfbWQ1c3VtKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5k
cy5nZXRfYWRiX2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLl9ydW5fY29tbWFu
ZCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMucnVuX2FkYl9jb21tYW5kKToKKyAgICAgICAg
KEFuZHJvaWRDb21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2UpOgorICAgICAgICAoQW5kcm9p
ZENvbW1hbmRzLnB1c2hfdG9fZGV2aWNlKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5wdWxs
X2Zyb21fZGV2aWNlKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5fbWQ1c3VtX2Vycm9yX2hh
bmRsZXIpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQpOgor
ICAgICAgICAoQW5kcm9pZENvbW1hbmRzLl9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRw
dXQpOgorICAgICAgICAoRm9yd2FyZGVyKToKKyAgICAgICAgKEZvcndhcmRlci5fX2luaXRfXyk6
CisgICAgICAgIChGb3J3YXJkZXIua2lsbF9ob3N0X2RhZW1vbik6CisgICAgICAgIChGb3J3YXJk
ZXIua2lsbF9kZXZpY2VfZGFlbW9uKToKKyAgICAgICAgKEZvcndhcmRlci5zZXR1cF9yZWRpcmVj
dGlvbnMpOgorICAgICAgICAoRm9yd2FyZGVyLl9hbGxvY2F0ZV9hZGJfY29udHJvbF9wb3J0KToK
KyAgICAgICAgKEZvcndhcmRlci5fZ2V0X3VzZWRfcG9ydHMpOgorICAgICAgICAoRm9yd2FyZGVy
Ll9ydW5fYWRiX3NoZWxsX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUpOgorICAgICAgICAoRm9y
d2FyZGVyLl9ydW5fYWRiX2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUpOgorICAgICAgICAoRm9y
d2FyZGVyLl9ydW5fc2hlbGxfY29tbWFuZF9hbmRfZ2V0X2V4aXRfY29kZSk6CisgICAgICAgIChG
b3J3YXJkZXIucGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKToKKyAgICAgICAgKEZvcndhcmRlci5w
YXRoX3RvX2hvc3RfZm9yd2FyZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5f
X2luaXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19kZWxfXyk6CisgICAg
ICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3Rlc3QpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9wdXNoX2RhdGFfaWZfbmVlZGVkKToKKyAgICAgICAgKENocm9taXVt
QW5kcm9pZERyaXZlci5fcHVzaF9leGVjdXRhYmxlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9p
ZERyaXZlci5fcHVzaF9mb250cyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1
c2hfdGVzdF9yZXNvdXJjZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9yZXN0
YXJ0X2FkYl9hc19yb290KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2xh
c3Rfc3RhY2t0cmFjZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2dldF9sb2dj
YXQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zZXR1cF9wZXJmb3JtYW5jZSk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3RlYXJkb3duX3BlcmZvcm1hbmNlKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5jbWRfbGluZSk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuX2FsbF9waXBlc19jcmVhdGVkKToKKyAgICAgICAgKENocm9taXVt
QW5kcm9pZERyaXZlci5fcmVtb3ZlX2FsbF9waXBlcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX3N0YXJ0X29uY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0
b3ApOgorCiAyMDEyLTEyLTA0ICBKb25hdGhhbiBEb25nICA8am9uYXRoYW4uZG9uZ0B0b3JjaG1v
YmlsZS5jb20uY24+CiAKICAgICAgICAgQ2hhbmdlIGVtYWlsIGFkZHJlc3Mgb2YgSm9uYXRoYW4g
RG9uZwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
L0R1bXBSZW5kZXJUcmVlLmd5cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Lmd5cC9EdW1wUmVuZGVyVHJlZS5neXAKaW5kZXggY2M4MzMzMjA5OTgxNDczZjM5NmI3YTcyMzI0
ZWYxMDAzY2IzZTlmMS4uZjVkZWY4ZjA5ZmE5YTAxNGJlYjBjMjA5YWMwZTEyZjE4NGExZDM4ZiAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBS
ZW5kZXJUcmVlLmd5cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXAvRHVtcFJlbmRlclRyZWUuZ3lwCkBAIC0zMzUsNyArMzM1LDcgQEAKICAgICAgICAgICAgICAg
ICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9t
aXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL25hdGl2
ZV90ZXN0Lmd5cDpuYXRpdmVfdGVzdF9uYXRpdmVfY29kZScsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90b29scy9hbmRyb2lkL2ZvcndhcmRlci9mb3J3YXJk
ZXIuZ3lwOmZvcndhcmRlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90b29scy9hbmRyb2lkL2ZvcndhcmRlcjIvZm9yd2FyZGVyLmd5cDpmb3J3YXJkZXIy
JywKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rvb2xzL2Fu
ZHJvaWQvbWQ1c3VtL21kNXN1bS5neXA6bWQ1c3VtJywKICAgICAgICAgICAgICAgICAgICAgXSwK
ICAgICAgICAgICAgICAgICAgICAgJ2NvcGllcyc6IFt7CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQppbmRleCA0MmE4MTIyZDM2ZTBlZTQ4
MDQ2NDE4YTlhY2RhMTE5MjQ4MDUzMDE3Li40MmI4ZDI3NDYxMDFlZGM5YjUxMjA2YTYxNGQxNTIx
NjVlNGI0M2ZiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vZXhlY3V0aXZlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9leGVjdXRpdmUucHkKQEAgLTM4NSw2ICszODUsNyBAQCBjbGFzcyBFeGVjdXRpdmUob2JqZWN0
KToKICAgICAgICAgICAgICAgICAgICAgaW5wdXQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAg
ZXJyb3JfaGFuZGxlcj1Ob25lLAogICAgICAgICAgICAgICAgICAgICByZXR1cm5fZXhpdF9jb2Rl
PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICByZXR1cm5fZXhpdF9jb2RlX2FuZF9vdXRwdXQ9
RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgIHJldHVybl9zdGRlcnI9VHJ1ZSwKICAgICAgICAg
ICAgICAgICAgICAgZGVjb2RlX291dHB1dD1UcnVlKToKICAgICAgICAgIiIiUG9wZW4gd3JhcHBl
ciBmb3IgY29udmVuaWVuY2UgYW5kIHRvIHdvcmsgYXJvdW5kIHB5dGhvbiBidWdzLiIiIgpAQCAt
NDE4LDYgKzQxOSw5IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICBpZiByZXR1
cm5fZXhpdF9jb2RlOgogICAgICAgICAgICAgcmV0dXJuIGV4aXRfY29kZQogCisgICAgICAgIGlm
IHJldHVybl9leGl0X2NvZGVfYW5kX291dHB1dDoKKyAgICAgICAgICAgIHJldHVybiAoZXhpdF9j
b2RlLCBvdXRwdXQpCisKICAgICAgICAgaWYgZXhpdF9jb2RlOgogICAgICAgICAgICAgc2NyaXB0
X2Vycm9yID0gU2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9YXJncywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4aXRfY29kZT1leGl0X2NvZGUsCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2Fu
ZHJvaWQucHkKaW5kZXggOWQ3N2E1NTM4YmUwMjU2MGU4OTQ1MDQ3YTM3NmVjZDQ2OGE3OGYwOS4u
MjNlZTVmODVhNzgxYzYzZGU1ZDQ2MDI2ZDNhNzY4NDU0MWYzYjhlZSAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
YW5kcm9pZC5weQpAQCAtMzAsMTAgKzMwLDEyIEBAIGltcG9ydCBjb3B5CiBpbXBvcnQgbG9nZ2lu
ZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzZXRzCiBpbXBvcnQgc3VicHJvY2Vzcwog
aW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQgaW1wb3J0IGNocm9taXVtCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
IGltcG9ydCBkcml2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGZh
Y3RvcnkKQEAgLTUyLDcgKzU0LDcgQEAgQ09NTUFORF9MSU5FX0ZJTEUgPSBERVZJQ0VfU09VUkNF
X1JPT1RfRElSICsgJ2Nocm9tZS1uYXRpdmUtdGVzdHMtY29tbWFuZC1saW5lJwogIyBJZiBjaGFu
Z2UgdGhpcywgbXVzdCBhbHNvIGNoYW5nZSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxBbmRyb2lkLmNwcAogIyBhbmQgQ2hyb21pdW0ncyB3ZWJraXQvc3VwcG9ydC9wbGF0
Zm9ybV9zdXBwb3J0X2FuZHJvaWQuY2MuCiBERVZJQ0VfRFJUX0RJUiA9IERFVklDRV9TT1VSQ0Vf
Uk9PVF9ESVIgKyAnZHJ0LycKLURFVklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklDRV9EUlRfRElS
ICsgJ2ZvcndhcmRlcicKK0RFVklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklDRV9EUlRfRElSICsg
J2RldmljZV9mb3J3YXJkZXInCiAKICMgUGF0aCBvbiB0aGUgZGV2aWNlIHdoZXJlIHRoZSB0ZXN0
IGZyYW1ld29yayB3aWxsIGNyZWF0ZSB0aGUgZmlmbyBwaXBlcy4KIERFVklDRV9GSUZPX1BBVEgg
PSAnL2RhdGEvZGF0YS9vcmcuY2hyb21pdW0ubmF0aXZlX3Rlc3QvZmlsZXMvJwpAQCAtNzQsNyAr
NzYsMTIgQEAgTEFZT1VUX1RFU1RfUEFUSF9QUkVGSVggPSAnL2FsbC10ZXN0cycKICMgODAwMCwg
ODA4MCBhbmQgODQ0MyBhcmUgZm9yIGh0dHAvaHR0cHMgdGVzdHMuCiAjIDg4ODAgYW5kIDkzMjMg
YXJlIGZvciB3ZWJzb2NrZXQgdGVzdHMKICMgKHNlZSBodHRwX3NlcnZlci5weSwgYXBhY2hlX2h0
dHBfc2VydmVyLnB5IGFuZCB3ZWJzb2NrZXRfc2VydmVyLnB5KS4KLUZPUldBUkRfUE9SVFMgPSAn
ODAwMCA4MDgwIDg0NDMgODg4MCA5MzIzJworRk9SV0FSRF9QT1JUUyA9ICg4MDAwLCA4MDgwLCA4
NDQzLCA4ODgwLCA5MzIzKQorCisjIFdlIHJ1biBvbmUgRm9yd2FyZGVyIHBlciBkZXZpY2UgLyB3
b3JrZXIsIGFuZCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZSBjb250cm9sCisjIHBvcnQgZm9yIGVh
Y2ggRm9yd2FyZGVyLiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSByYW5nZSBvZiBwb3J0cyB3
ZSBjYW4gdXNlLgorRk9SV0FSREVSX0NPTlRST0xfUE9SVF9CRUdJTiA9IDIwMDAwCitGT1JXQVJE
RVJfQ09OVFJPTF9QT1JUX0VORCA9IDIxMDAwCiAKIE1TX1RSVUVUWVBFX0ZPTlRTX0RJUiA9ICcv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvJwogTVNfVFJVRVRZUEVfRk9O
VFNfUEFDS0FHRSA9ICd0dGYtbXNjb3JlZm9udHMtaW5zdGFsbGVyJwpAQCAtMTc3LDYgKzE4NCwx
MCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAg
ICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9kZXZpY2VzID0gW10KIAorICAgIGRlZiBz
ZXR1cF90ZXN0X3J1bihzZWxmKToKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Qb3J0LnNldHVw
X3Rlc3RfcnVuKHNlbGYpCisgICAgICAgIEZvcndhcmRlci5raWxsX2hvc3RfZGFlbW9uKHNlbGYu
X2V4ZWN1dGl2ZS5ydW5fY29tbWFuZCwgc2VsZi5fYnVpbGRfcGF0aCkKKwogICAgIEBzdGF0aWNt
ZXRob2QKICAgICBkZWYgX2FuZHJvaWRfc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IocG9ydCwg
c2VydmVyX25hbWUsIGNtZF9saW5lLCBlbnY9Tm9uZSk6CiAgICAgICAgIHJldHVybiBzZXJ2ZXJf
cHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKHBvcnQsIHNlcnZlcl9uYW1lLCBjbWRfbGluZSwgZW52LApA
QCAtMjEwLDcgKzIyMSw4IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hy
b21pdW1Qb3J0KToKICAgICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAg
ICAgIHJlc3VsdCA9IHN1cGVyKENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLmNoZWNrX2J1aWxk
KG5lZWRzX2h0dHApCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNl
bGYucGF0aF90b19tZDVzdW0oKSwgJ21kNXN1bSB1dGlsaXR5JykgYW5kIHJlc3VsdAotICAgICAg
ICByZXN1bHQgPSBzZWxmLl9jaGVja19maWxlX2V4aXN0cyhzZWxmLnBhdGhfdG9fZm9yd2FyZGVy
KCksICdmb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKKyAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKSwgJ2Rl
dmljZV9mb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKKyAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKCksICdob3N0
X2ZvcndhcmRlciB1dGlsaXR5JykgYW5kIHJlc3VsdAogICAgICAgICBpZiBub3QgcmVzdWx0Ogog
ICAgICAgICAgICAgX2xvZy5lcnJvcignRm9yIGNvbXBsZXRlIEFuZHJvaWQgYnVpbGQgcmVxdWly
ZW1lbnRzLCBwbGVhc2Ugc2VlOicpCiAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQpAQCAtMjgx
LDggKzI5MywxMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVt
UG9ydCk6CiAKICAgICAgICAgcmV0dXJuIENocm9taXVtQW5kcm9pZFBvcnQuX2FkYl9wYXRoCiAK
LSAgICBkZWYgcGF0aF90b19mb3J3YXJkZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9i
dWlsZF9wYXRoKCdmb3J3YXJkZXInKQorICAgIGRlZiBwYXRoX3RvX2hvc3RfZm9yd2FyZGVyKHNl
bGYpOgorICAgICAgICByZXR1cm4gRm9yd2FyZGVyLnBhdGhfdG9faG9zdF9mb3J3YXJkZXIoc2Vs
Zi5fYnVpbGRfcGF0aCkKKworICAgIGRlZiBwYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoc2VsZik6
CisgICAgICAgIHJldHVybiBGb3J3YXJkZXIucGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKHNlbGYu
X2J1aWxkX3BhdGgpCiAKICAgICBkZWYgcGF0aF90b19tZDVzdW0oc2VsZik6CiAgICAgICAgIHJl
dHVybiBzZWxmLl9idWlsZF9wYXRoKE1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FKQpAQCAtMzU3LDYg
KzM3MiwxODEgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBv
cnQpOgogICAgICAgICByZXR1cm4gZGV2aWNlc1t3b3JrZXJfbnVtYmVyXQogCiAKK2NsYXNzIEFu
ZHJvaWRDb21tYW5kczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9leGVjdXRvciwg
YWRiX2NvbW1hbmQsIHBhdGhfYnVpbGRlciwgZGVidWdfbG9nZ2VyKToKKyAgICAgICAgc2VsZi5f
Y29tbWFuZF9leGVjdXRvciA9IGNvbW1hbmRfZXhlY3V0b3IKKyAgICAgICAgc2VsZi5fYWRiX2Nv
bW1hbmQgPSBhZGJfY29tbWFuZAorICAgICAgICBzZWxmLl9wYXRoX2J1aWxkZXIgPSBwYXRoX2J1
aWxkZXIKKyAgICAgICAgc2VsZi5fZGVidWdfbG9nZ2VyID0gZGVidWdfbG9nZ2VyCisKKyAgICBk
ZWYgc2V0dXBfbWQ1c3VtKHNlbGYpOgorICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9IHNlbGYu
X3BhdGhfYnVpbGRlcihNRDVTVU1fREVWSUNFX0ZJTEVfTkFNRSkKKyAgICAgICAgaWYgbm90IHNl
bGYuZmlsZV9leGlzdHNfb25fZGV2aWNlKE1ENVNVTV9ERVZJQ0VfUEFUSCk6CisgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5wdXNoX3RvX2RldmljZShzZWxmLl9tZDVzdW1fcGF0aCwgTUQ1U1VNX0RF
VklDRV9QQVRIKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQg
bm90IHB1c2ggbWQ1c3VtIHRvIHRoZSBkZXZpY2UnKQorCisgICAgZGVmIGdldF9hZGJfY29tbWFu
ZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FkYl9jb21tYW5kCisKKyAgICBkZWYgX3J1
bl9jb21tYW5kKHNlbGYsIGNtZCwgZXJyb3JfaGFuZGxlcj1Ob25lKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2NvbW1hbmRfZXhlY3V0b3IoY21kLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIp
CisKKyAgICBkZWYgcnVuX2FkYl9jb21tYW5kKHNlbGYsIGNtZCwgZXJyb3JfaGFuZGxlcj1Ob25l
KToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fY29tbWFuZF9leGVjdXRvcihzZWxmLl9hZGJfY29t
bWFuZCArIGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQorICAgICAgICAjIExpbWl0
IHRoZSBsZW5ndGggdG8gYXZvaWQgdG9vIHZlcmJvc2Ugb3V0cHV0IG9mIGNvbW1hbmRzIGxpa2Ug
J2FkYiBsb2djYXQnIGFuZCAnY2F0IC9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lMDEnCisgICAg
ICAgICMgd2hvc2Ugb3V0cHV0cyBhcmUgbm9ybWFsbHkgcHJpbnRlZCBpbiBsYXRlciBsb2dzLgor
ICAgICAgICBzZWxmLl9kZWJ1Z19sb2dnZXIoJ1J1biBhZGIgcmVzdWx0OiAnICsgb3V0cHV0Wzo4
MF0pCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBmaWxlX2V4aXN0c19vbl9kZXZp
Y2Uoc2VsZiwgZnVsbF9maWxlX3BhdGgpOgorICAgICAgICBhc3NlcnQgZnVsbF9maWxlX3BhdGgu
c3RhcnRzd2l0aCgnLycpCisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCisK
KyAgICBkZWYgcHVzaF90b19kZXZpY2Uoc2VsZiwgaG9zdF9wYXRoLCBkZXZpY2VfcGF0aCk6Cisg
ICAgICAgIHJldHVybiBzZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3B1c2gnLCBob3N0X3BhdGgsIGRl
dmljZV9wYXRoXSkKKworICAgIGRlZiBwdWxsX2Zyb21fZGV2aWNlKHNlbGYsIGRldmljZV9wYXRo
LCBob3N0X3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydwdWxs
JywgZGV2aWNlX3BhdGgsIGhvc3RfcGF0aF0pCisKKyAgICBkZWYgX21kNXN1bV9lcnJvcl9oYW5k
bGVyKHNlbGYsIHNjcmlwdF9lcnJvcik6CisgICAgICAgICMgSXQgaXMgbm90IGFuIGVycm9yIGlm
IG1kNXN1bSBleGl0cyB3aXRoIDEuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBmaWxlIGl0IGlzIGlu
dm9rZWQgb24gZG9lcyBub3QgZXhpdC4KKyAgICAgICAgc2VsZi5fZGVidWdfbG9nZ2VyKHNjcmlw
dF9lcnJvcikKKyAgICAgICAgcGFzcworCisgICAgZGVmIHB1c2hfZmlsZV9pZl9uZWVkZWQoc2Vs
ZiwgaG9zdF9maWxlLCBkZXZpY2VfZmlsZSk6CisgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0
cyhob3N0X2ZpbGUpCisgICAgICAgIHBhdGhfdG9fbWQ1c3VtX2hvc3QgPSBzZWxmLl9tZDVzdW1f
cGF0aCArICdfaG9zdCcKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKHBhdGhfdG9fbWQ1
c3VtX2hvc3QpCisgICAgICAgIG1kNXN1bV9vdXRwdXQgPSBzZWxmLnJ1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgTUQ1U1VNX0RFVklDRV9QQVRILCBkZXZpY2VfZmlsZV0pCisgICAgICAgIGRldmlj
ZV9oYXNoZXMgPSBBbmRyb2lkQ29tbWFuZHMuX2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291
dHB1dChtZDVzdW1fb3V0cHV0KQorICAgICAgICBob3N0X2hhc2hlcyA9IHNlbGYuX2V4dHJhY3Rf
aGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jb21tYW5k
KFtwYXRoX3RvX21kNXN1bV9ob3N0LCBob3N0X2ZpbGVdLCBzZWxmLl9tZDVzdW1fZXJyb3JfaGFu
ZGxlcikpCisgICAgICAgIGlmIGhvc3RfaGFzaGVzIGFuZCBkZXZpY2VfaGFzaGVzID09IGhvc3Rf
aGFzaGVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYucHVzaF90b19kZXZpY2Uo
aG9zdF9maWxlLCBkZXZpY2VfZmlsZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2V4
dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dChtZDVzdW1fb3V0cHV0KToKKyAgICAgICAg
YXNzZXJ0IG1kNXN1bV9vdXRwdXQKKyAgICAgICAgcmV0dXJuIFtsaW5lLnNwbGl0KCcgICcpWzBd
IGZvciBsaW5lIGluIG1kNXN1bV9vdXRwdXRdCisKKworIyBEZXZpY2UgdG8gaG9zdCBwb3J0IGZv
cndhcmRlci4KK2NsYXNzIEZvcndhcmRlcjoKKyAgICBERVZJQ0VfRk9SV0FSREVSX1BBVEggPSBE
RVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2RldmljZV9mb3J3YXJkZXInCisgICAgQURCX0NPTlRS
T0xfU09DS0VUID0gJ2Nocm9tZV9kZXZpY2VfZm9yd2FyZGVyJworICAgIEhPU1RfTE9DQUxfQURE
UkVTUyA9ICcxMjcuMC4wLjEnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9leGVj
dXRvciwgaG9zdF9wYXRoX2J1aWxkZXIsIGFuZHJvaWRfY21kKToKKyAgICAgICAgc2VsZi5fZGV2
aWNlX2ZvcndhcmRlcl9wYXRoID0gRm9yd2FyZGVyLnBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlciho
b3N0X3BhdGhfYnVpbGRlcikKKyAgICAgICAgc2VsZi5faG9zdF9mb3J3YXJkZXJfcGF0aCA9IEZv
cndhcmRlci5wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKGhvc3RfcGF0aF9idWlsZGVyKQorICAgICAg
ICBzZWxmLl9jb21tYW5kX2V4ZWN1dG9yID0gY29tbWFuZF9leGVjdXRvcgorICAgICAgICBzZWxm
Ll9hbmRyb2lkX2NtZCA9IGFuZHJvaWRfY21kCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXJf
dG9fYWRiX2NvbnRyb2xfcG9ydF9tYXAgPSB7fQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBraWxsX2hvc3RfZGFlbW9uKGNvbW1hbmRfZXhlY3V0b3IsIGhvc3RfcGF0aF9idWlsZGVyKToK
KyAgICAgICAgX2xvZy5kZWJ1ZygnS2lsbGluZyBob3N0IGRhZW1vbicpCisgICAgICAgIChleGl0
X2NvZGUsIG91dHB1dCkgPSBGb3J3YXJkZXIuX3J1bl9zaGVsbF9jb21tYW5kX2FuZF9nZXRfZXhp
dF9jb2RlKAorICAgICAgICAgICAgY29tbWFuZF9leGVjdXRvciwgW0ZvcndhcmRlci5wYXRoX3Rv
X2hvc3RfZm9yd2FyZGVyKGhvc3RfcGF0aF9idWlsZGVyKSwgJ2tpbGwtc2VydmVyJ10pCisgICAg
ICAgIGlmIGV4aXRfY29kZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3Io
J0NvdWxkIG5vdCBraWxsIGhvc3RfZm9yd2FyZGVyOiAlcycgJSBvdXRwdXQpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGtpbGxfZGV2aWNlX2RhZW1vbihjb21tYW5kX2V4ZWN1dG9yLCBh
bmRyb2lkX2NtZCwgbG9nZ2VyKToKKyAgICAgICAgbG9nZ2VyKCdLaWxsaW5nIGRldmljZSBkYWVt
b24nKQorICAgICAgICBpZiBub3QgYW5kcm9pZF9jbWQuZmlsZV9leGlzdHNfb25fZGV2aWNlKEZv
cndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BBVEgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgIChleGl0X2NvZGUsIG91dHB1dCkgPSBGb3J3YXJkZXIuX3J1bl9hZGJfc2hlbGxfY29tbWFu
ZF9hbmRfZ2V0X2V4aXRfY29kZSgKKyAgICAgICAgICAgIGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJv
aWRfY21kLCBbRm9yd2FyZGVyLkRFVklDRV9GT1JXQVJERVJfUEFUSCwgJ2tpbGwtc2VydmVyJ10p
CisgICAgICAgIGlmIGV4aXRfY29kZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9u
RXJyb3IoJ0NvdWxkIG5vdCBraWxsIGRldmljZV9mb3J3YXJkZXI6ICVzJyAlIG91dHB1dCkKKwor
ICAgIGRlZiBzZXR1cF9yZWRpcmVjdGlvbnMoc2VsZiwgd29ya2VyX251bWJlciwgcG9ydF9wYWly
cyk6CisgICAgICAgIGFkYl9jb250cm9sX3BvcnQgPSBzZWxmLl93b3JrZXJfbnVtYmVyX3RvX2Fk
Yl9jb250cm9sX3BvcnRfbWFwLmdldCh3b3JrZXJfbnVtYmVyKQorICAgICAgICBpZiBub3QgYWRi
X2NvbnRyb2xfcG9ydDoKKyAgICAgICAgICAgIGFkYl9jb250cm9sX3BvcnQgPSBzZWxmLl9hbGxv
Y2F0ZV9hZGJfY29udHJvbF9wb3J0KHdvcmtlcl9udW1iZXIpCisgICAgICAgICAgICBpZiBub3Qg
YWRiX2NvbnRyb2xfcG9ydDoKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcign
Q291bGQgbm90IGFsbG9jYXRlIEFEQiBjb250cm9sIHBvcnQnKQorICAgICAgICAgICAgc2VsZi5f
d29ya2VyX251bWJlcl90b19hZGJfY29udHJvbF9wb3J0X21hcFt3b3JrZXJfbnVtYmVyXSA9IGFk
Yl9jb250cm9sX3BvcnQKKworICAgICAgICBmb3J3YXJkX2NtZCA9IFsnZm9yd2FyZCcsICd0Y3A6
JXMnICUgYWRiX2NvbnRyb2xfcG9ydCwgJ2xvY2FsYWJzdHJhY3Q6JXMnICUgRm9yd2FyZGVyLkFE
Ql9DT05UUk9MX1NPQ0tFVF0KKyAgICAgICAgKGV4aXRfY29kZSwgb3V0cHV0KSA9IEZvcndhcmRl
ci5fcnVuX2FkYl9jb21tYW5kX2FuZF9nZXRfZXhpdF9jb2RlKAorICAgICAgICAgICAgc2VsZi5f
Y29tbWFuZF9leGVjdXRvciwgc2VsZi5fYW5kcm9pZF9jbWQsIGZvcndhcmRfY21kKQorICAgICAg
ICBpZiBleGl0X2NvZGUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdD
b3VsZCBub3QgZm9yd2FyZCBob3N0IHRvIGRldmljZSBwb3J0IHVzaW5nIEFEQjogJXMnICUgb3V0
cHV0KQorCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2Vs
Zi5fZGV2aWNlX2ZvcndhcmRlcl9wYXRoLCBGb3J3YXJkZXIuREVWSUNFX0ZPUldBUkRFUl9QQVRI
KQorICAgICAgICAoZXhpdF9jb2RlLCBvdXRwdXQpID0gRm9yd2FyZGVyLl9ydW5fYWRiX3NoZWxs
X2NvbW1hbmRfYW5kX2dldF9leGl0X2NvZGUoCisgICAgICAgICAgICBzZWxmLl9jb21tYW5kX2V4
ZWN1dG9yLCBzZWxmLl9hbmRyb2lkX2NtZCwgW0ZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BB
VEgsIEZvcndhcmRlci5BREJfQ09OVFJPTF9TT0NLRVRdKQorICAgICAgICBpZiBleGl0X2NvZGUg
IT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgcnVuIGRl
dmljZV9mb3J3YXJkZXI6ICVzJyAlIG91dHB1dCkKKworICAgICAgICAjIENvbW1hbmQgZm9ybWF0
OiA8YWRiIGNvbnRyb2wgcG9ydD46PGRldmljZSBwb3J0Pjo8aG9zdCBwb3J0Pjo8aG9zdCBhZGRy
ZXNzPgorICAgICAgICByZWRpcmVjdGlvbl9jb21tYW5kcyA9IFsKKyAgICAgICAgICAgICclZDol
ZDolZDolcycgJSAoYWRiX2NvbnRyb2xfcG9ydCwgZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCwgRm9y
d2FyZGVyLkhPU1RfTE9DQUxfQUREUkVTUykgZm9yIGRldmljZV9wb3J0LCBob3N0X3BvcnQgaW4g
cG9ydF9wYWlyc10KKyAgICAgICAgZm9yIHJlZGlyZWN0aW9uX2NvbW1hbmQgaW4gcmVkaXJlY3Rp
b25fY29tbWFuZHM6CisgICAgICAgICAgICAoZXhpdF9jb2RlLCBvdXRwdXQpID0gRm9yd2FyZGVy
Ll9ydW5fc2hlbGxfY29tbWFuZF9hbmRfZ2V0X2V4aXRfY29kZSgKKyAgICAgICAgICAgICAgICBz
ZWxmLl9jb21tYW5kX2V4ZWN1dG9yLCBbc2VsZi5faG9zdF9mb3J3YXJkZXJfcGF0aCwgcmVkaXJl
Y3Rpb25fY29tbWFuZF0pCisgICAgICAgICAgICBpZiBleGl0X2NvZGUgIT0gMDoKKyAgICAgICAg
ICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IHJ1biBob3N0X2ZvcndhcmRl
cjogJXMnICUgb3V0cHV0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfYWxsb2NhdGVf
YWRiX2NvbnRyb2xfcG9ydCh3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdXNlZF9wb3J0cyA9IEZv
cndhcmRlci5fZ2V0X3VzZWRfcG9ydHMoKQorICAgICAgICBwb3J0ID0gRk9SV0FSREVSX0NPTlRS
T0xfUE9SVF9CRUdJTiArIHdvcmtlcl9udW1iZXIKKyAgICAgICAgd2hpbGUgcG9ydCA8IEZPUldB
UkRFUl9DT05UUk9MX1BPUlRfRU5EIGFuZCBwb3J0IGluIHVzZWRfcG9ydHM6CisgICAgICAgICAg
ICBwb3J0ICs9IDEKKyAgICAgICAgaWYgcG9ydCA+PSBGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VO
RDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfdXNlZF9wb3J0cygpOgorICAgICAgICB1c2VkX3Bv
cnRzID0gc2V0KFtdKQorICAgICAgICBmb3IgbGluZSBpbiBGaWxlU3lzdGVtKCkub3Blbl90ZXh0
X2ZpbGVfZm9yX3JlYWRpbmcoJy9wcm9jL25ldC90Y3AnKS54cmVhZGxpbmVzKCk6CisgICAgICAg
ICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5vdCBmaWVsZHMgb3Ig
ZmllbGRzWzBdID09ICdzbCc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg
IGxvY2FsX2FkZHJlc3MgPSBmaWVsZHNbMV0KKyAgICAgICAgICAgIHJlbW90ZV9hZGRyZXNzID0g
ZmllbGRzWzJdCisgICAgICAgICAgICBsb2NhbF9pcCwgbG9jYWxfcG9ydCA9IGxvY2FsX2FkZHJl
c3Muc3BsaXQoJzonKQorICAgICAgICAgICAgcmVtb3RlX2lwLCByZW1vdGVfcG9ydCA9IHJlbW90
ZV9hZGRyZXNzLnNwbGl0KCc6JykKKyAgICAgICAgICAgIHVzZWRfcG9ydHMuYWRkKGxvY2FsX3Bv
cnQpCisgICAgICAgICAgICB1c2VkX3BvcnRzLmFkZChyZW1vdGVfcG9ydCkKKyAgICAgICAgcmV0
dXJuIHVzZWRfcG9ydHMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3J1bl9hZGJfc2hl
bGxfY29tbWFuZF9hbmRfZ2V0X2V4aXRfY29kZShjb21tYW5kX2V4ZWN1dG9yLCBhbmRyb2lkX2Nt
ZCwgY21kX2FycmF5KToKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIGV4dHJhICcqJyBjaGFyYWN0
ZXIgYmVsb3cgaXMgdXNlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHByb2Nlc3MnIG91
dHB1dCBpcyBub3QgbmV3bGluZSB0ZXJtaW5hdGVkLgorICAgICAgICBjbWQgPSBhbmRyb2lkX2Nt
ZC5nZXRfYWRiX2NvbW1hbmQoKSArIFsnc2hlbGwnXSArIFsnICcuam9pbihjbWRfYXJyYXkpICsg
JzsgZWNobyAqJD8nXQorICAgICAgICBsaW5lcyA9IGNvbW1hbmRfZXhlY3V0b3IoY21kLCBkZWNv
ZGVfb3V0cHV0PUZhbHNlKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgbGFzdF9saW5lID0gbGluZXNb
LTFdCisgICAgICAgIHN0YXR1c19zZXBhcmF0b3JfcG9zID0gbGFzdF9saW5lLnJmaW5kKCcqJykK
KyAgICAgICAgYXNzZXJ0IHN0YXR1c19zZXBhcmF0b3JfcG9zID49IDAKKyAgICAgICAgc3RhdHVz
ID0gaW50KGxhc3RfbGluZVtzdGF0dXNfc2VwYXJhdG9yX3BvcyArIDE6XSkKKyAgICAgICAgaWYg
c3RhdHVzX3NlcGFyYXRvcl9wb3MgPT0gMDoKKyAgICAgICAgICAgIGxpbmVzID0gbGluZXNbOi0x
XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMgPSBsaW5lc1s6LTFdICsgbGFzdF9s
aW5lWzpzdGF0dXNfc2VwYXJhdG9yX3Bvc10KKyAgICAgICAgcmV0dXJuIChzdGF0dXMsIGxpbmVz
KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfcnVuX2FkYl9jb21tYW5kX2FuZF9nZXRf
ZXhpdF9jb2RlKGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJvaWRfY21kLCBjbWRfYXJyYXkpOgorICAg
ICAgICByZXR1cm4gY29tbWFuZF9leGVjdXRvcihhbmRyb2lkX2NtZC5nZXRfYWRiX2NvbW1hbmQo
KSArIGNtZF9hcnJheSwgcmV0dXJuX2V4aXRfY29kZV9hbmRfb3V0cHV0PVRydWUsIGRlY29kZV9v
dXRwdXQ9RmFsc2UpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9ydW5fc2hlbGxfY29t
bWFuZF9hbmRfZ2V0X2V4aXRfY29kZShjb21tYW5kX2V4ZWN1dG9yLCBjbWRfYXJyYXkpOgorICAg
ICAgICByZXR1cm4gY29tbWFuZF9leGVjdXRvcihjbWRfYXJyYXksIHJldHVybl9leGl0X2NvZGVf
YW5kX291dHB1dD1UcnVlLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBwYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoaG9zdF9wYXRoX2J1aWxkZXIpOgor
ICAgICAgICByZXR1cm4gaG9zdF9wYXRoX2J1aWxkZXIoJ2RldmljZV9mb3J3YXJkZXInKQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwYXRoX3RvX2hvc3RfZm9yd2FyZGVyKGhvc3RfcGF0
aF9idWlsZGVyKToKKyAgICAgICAgcmV0dXJuIGhvc3RfcGF0aF9idWlsZGVyKCdob3N0X2Zvcndh
cmRlcicpCisKIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5v
X3RpbWVvdXQ9RmFsc2UpOgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNl
bGYpLl9faW5pdF9fKHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0
KQpAQCAtMzY2LDQ3ICs1NTYsNDEgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZl
ci5Ecml2ZXIpOgogICAgICAgICBzZWxmLl9lcnJfZmlmb19wYXRoID0gREVWSUNFX0ZJRk9fUEFU
SCArICdzdGRlcnIuZmlmbycKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5v
bmUKICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2Vs
Zi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHNlbGYuX2hhc19zZXR1cCA9IEZh
bHNlCiAgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9ycyA9IHt9CiAgICAgICAgIHNlbGYu
X2RldmljZV9zZXJpYWwgPSBwb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCh3b3JrZXJfbnVtYmVyKQog
ICAgICAgICBzZWxmLl9hZGJfY29tbWFuZF9iYXNlID0gTm9uZQorICAgICAgICBzZWxmLl9hbmRy
b2lkX2NtZCA9IEFuZHJvaWRDb21tYW5kcygKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuX2V4ZWN1
dGl2ZS5ydW5fY29tbWFuZCwgc2VsZi5fYWRiX2NvbW1hbmQoKSwgc2VsZi5fcG9ydC5fYnVpbGRf
cGF0aCwgc2VsZi5fbG9nX2RlYnVnKQogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAg
IHNlbGYuX3RlYXJkb3duX3BlcmZvcm1hbmNlKCkKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLCBzZWxmKS5fX2RlbF9fKCkKIAotICAgIGRlZiBfc2V0dXBfbWQ1c3VtX2FuZF9w
dXNoX2RhdGFfaWZfbmVlZGVkKHNlbGYpOgotICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9IHNl
bGYuX3BvcnQucGF0aF90b19tZDVzdW0oKQotICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZV9leGlz
dHNfb25fZGV2aWNlKE1ENVNVTV9ERVZJQ0VfUEFUSCk6Ci0gICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5fcHVzaF90b19kZXZpY2Uoc2VsZi5fbWQ1c3VtX3BhdGgsIE1ENVNVTV9ERVZJQ0VfUEFUSCk6
Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBwdXNoIG1k
NXN1bSB0byBkZXZpY2UnKQotCi0gICAgICAgIHNlbGYuX3B1c2hfZXhlY3V0YWJsZSgpCi0gICAg
ICAgIHNlbGYuX3B1c2hfZm9udHMoKQotICAgICAgICBzZWxmLl9wdXNoX3Rlc3RfcmVzb3VyY2Vz
KCkKLQogICAgIGRlZiBfc2V0dXBfdGVzdChzZWxmKToKICAgICAgICAgaWYgc2VsZi5faGFzX3Nl
dHVwOgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgc2VsZi5fcmVzdGFydF9hZGJfYXNf
cm9vdCgpCi0gICAgICAgIHNlbGYuX3NldHVwX21kNXN1bV9hbmRfcHVzaF9kYXRhX2lmX25lZWRl
ZCgpCi0gICAgICAgIHNlbGYuX2hhc19zZXR1cCA9IFRydWUKKyAgICAgICAgc2VsZi5fYW5kcm9p
ZF9jbWQuc2V0dXBfbWQ1c3VtKCkKKyAgICAgICAgc2VsZi5fcHVzaF9kYXRhX2lmX25lZWRlZCgp
CiAgICAgICAgIHNlbGYuX3NldHVwX3BlcmZvcm1hbmNlKCkKKyAgICAgICAgc2VsZi5faGFzX3Nl
dHVwID0gVHJ1ZQogCiAgICAgICAgICMgUmVxdWlyZWQgYnkgd2Via2l0X3N1cHBvcnQ6OkdldFdl
YktpdFJvb3REaXJGaWxlUGF0aCgpLgogICAgICAgICAjIE90aGVyIGRpcmVjdG9yaWVzIHdpbGwg
YmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFkYiBwdXNoLgotICAgICAgICBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9E
SVIgKyAnY2hyb21lJ10pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFu
ZChbJ3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJv
bWUnXSkKIAogICAgICAgICAjIEFsbG93IHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAgdG8gZnVsbHkg
YWNjZXNzIHRoZSBkaXJlY3RvcnkuCiAgICAgICAgICMgVGhlIG5hdGl2ZSBjb2RlIG5lZWRzIHRo
ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlcyBhbmQgY3JlYXRlIHBpcGVzIGhl
cmUuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1w
JywgREVWSUNFX0RSVF9ESVJdKQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0pCisgICAgICAgIHNlbGYuX2FuZHJv
aWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX0RS
VF9ESVJdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0pCiAKICAgICAgICAgIyBEZWxldGUg
dGhlIGRpc2sgY2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNsZWFuIHRlc3QgcnVuLgogICAgICAg
ICAjIFRoaXMgaXMgbGlrZSB3aGF0J3MgZG9uZSBpbiBDaHJvbWl1bVBvcnQuc2V0dXBfdGVzdF9y
dW4gYnV0IG9uIHRoZSBkZXZpY2UuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQorICAgICAgICBzZWxmLl9hbmRy
b2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsICctcicsIERSVF9BUFBfQ0FD
SEVfRElSXSkKKworICAgICAgICBGb3J3YXJkZXIua2lsbF9kZXZpY2VfZGFlbW9uKHNlbGYuX3Bv
cnQuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZCwgc2VsZi5fYW5kcm9pZF9jbWQsIHNlbGYuX2xvZ19k
ZWJ1ZykKIAogICAgIGRlZiBfbG9nX2Vycm9yKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICBfbG9n
LmVycm9yKCdbJXNdICVzJyAlIChzZWxmLl9kZXZpY2Vfc2VyaWFsLCBtZXNzYWdlKSkKQEAgLTQx
Nyw4NSArNjAxLDUwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVy
KToKICAgICBkZWYgX2Fib3J0KHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICByYWlzZSBBc3NlcnRp
b25FcnJvcignWyVzXSAlcycgJSAoc2VsZi5fZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSkpCiAKLSAg
ICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRw
dXQobWQ1c3VtX291dHB1dCk6Ci0gICAgICAgIGFzc2VydCBtZDVzdW1fb3V0cHV0Ci0gICAgICAg
IHJldHVybiBbbGluZS5zcGxpdCgnICAnKVswXSBmb3IgbGluZSBpbiBtZDVzdW1fb3V0cHV0XQot
Ci0gICAgZGVmIF9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYsIGhvc3RfZmlsZSwgZGV2aWNlX2Zp
bGUpOgotICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoaG9zdF9maWxlKQotICAgICAgICBk
ZXZpY2VfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAot
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5leGVjdXRpdmUucG9wZW4oc2VsZi5fYWRi
X2NvbW1hbmQoKSArIFsnc2hlbGwnLCBNRDVTVU1fREVWSUNFX1BBVEgsIGRldmljZV9maWxlXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUpLnN0ZG91dCkKLSAgICAgICAgaG9zdF9oYXNoZXMgPSBzZWxmLl9leHRy
YWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQoCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9y
dC5ob3N0LmV4ZWN1dGl2ZS5wb3BlbihhcmdzPVsnJXNfaG9zdCcgJSBzZWxmLl9tZDVzdW1fcGF0
aCwgaG9zdF9maWxlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dCkKLSAgICAgICAgaWYgaG9zdF9o
YXNoZXMgYW5kIGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6Ci0gICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgc2VsZi5fcHVzaF90b19kZXZpY2UoaG9zdF9maWxlLCBkZXZpY2VfZmlsZSkK
KyAgICBkZWYgX3B1c2hfZGF0YV9pZl9uZWVkZWQoc2VsZik6CisgICAgICAgIHNlbGYuX3B1c2hf
ZXhlY3V0YWJsZSgpCisgICAgICAgIHNlbGYuX3B1c2hfZm9udHMoKQorICAgICAgICBzZWxmLl9w
dXNoX3Rlc3RfcmVzb3VyY2VzKCkKIAogICAgIGRlZiBfcHVzaF9leGVjdXRhYmxlKHNlbGYpOgot
ICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQucGF0aF90b19mb3J3
YXJkZXIoKSwgREVWSUNFX0ZPUldBUkRFUl9QQVRIKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVf
aWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlLnBhaycpLCBE
RVZJQ0VfRFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZS5wYWsnKQotICAgICAgICBzZWxmLl9wdXNo
X2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlX3Jl
c291cmNlcycpLCBERVZJQ0VfRFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKQot
ICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgo
J2FuZHJvaWRfbWFpbl9mb250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9tYWlu
X2ZvbnRzLnhtbCcpCi0gICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9y
dC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKSwgREVWSUNFX0RSVF9E
SVIgKyAnYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKQotICAgICAgICBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWyd1bmluc3RhbGwnLCBEUlRfQVBQX1BBQ0tBR0VdKQorICAgICAgICBzZWxmLl9h
bmRyb2lkX2NtZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQucGF0aF90b19kZXZpY2Vf
Zm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkKKyAgICAgICAgc2VsZi5fYW5kcm9p
ZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVu
ZGVyVHJlZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUucGFrJykKKyAg
ICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAn
RHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucHVz
aF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9u
dHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKQorICAg
ICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1
aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsg
J2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJykKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQu
cnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQUF9QQUNLQUdFXSkKICAgICAgICAg
ZHJ0X2hvc3RfcGF0aCA9IHNlbGYuX3BvcnQuX3BhdGhfdG9fZHJpdmVyKCkKLSAgICAgICAgaW5z
dGFsbF9yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydpbnN0YWxsJywgZHJ0X2hvc3Rf
cGF0aF0pCisgICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5fYW5kcm9pZF9jbWQucnVuX2Fk
Yl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQogICAgICAgICBpZiBpbnN0YWxs
X3Jlc3VsdC5maW5kKCdTdWNjZXNzJykgPT0gLTE6CiAgICAgICAgICAgICBzZWxmLl9hYm9ydCgn
RmFpbGVkIHRvIGluc3RhbGwgJXMgb250byBkZXZpY2U6ICVzJyAlIChkcnRfaG9zdF9wYXRoLCBp
bnN0YWxsX3Jlc3VsdCkpCiAKICAgICBkZWYgX3B1c2hfZm9udHMoc2VsZik6CiAgICAgICAgIHNl
bGYuX2xvZ19kZWJ1ZygnUHVzaGluZyBmb250cycpCiAgICAgICAgIHBhdGhfdG9fYWhlbV9mb250
ID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnQUhFTV9fX18uVFRGJykKLSAgICAgICAgc2VsZi5f
cHVzaF9maWxlX2lmX25lZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVWSUNFX0ZPTlRTX0RJUiAr
ICdBSEVNX19fXy5UVEYnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5wdXNoX2ZpbGVfaWZf
bmVlZGVkKHBhdGhfdG9fYWhlbV9mb250LCBERVZJQ0VfRk9OVFNfRElSICsgJ0FIRU1fX19fLlRU
RicpCiAgICAgICAgIGZvciAoaG9zdF9kaXJzLCBmb250X2ZpbGUsIHBhY2thZ2UpIGluIEhPU1Rf
Rk9OVF9GSUxFUzoKICAgICAgICAgICAgIGZvciBob3N0X2RpciBpbiBob3N0X2RpcnM6CiAgICAg
ICAgICAgICAgICAgaG9zdF9mb250X3BhdGggPSBob3N0X2RpciArIGZvbnRfZmlsZQogICAgICAg
ICAgICAgICAgIGlmIHNlbGYuX3BvcnQuX2NoZWNrX2ZpbGVfZXhpc3RzKGhvc3RfZm9udF9wYXRo
LCAnJywgbG9nZ2luZz1GYWxzZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3B1c2hfZmls
ZV9pZl9uZWVkZWQoaG9zdF9mb250X3BhdGgsIERFVklDRV9GT05UU19ESVIgKyBmb250X2ZpbGUp
CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnB1c2hfZmlsZV9pZl9uZWVk
ZWQoaG9zdF9mb250X3BhdGgsIERFVklDRV9GT05UU19ESVIgKyBmb250X2ZpbGUpCiAKICAgICBk
ZWYgX3B1c2hfdGVzdF9yZXNvdXJjZXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2xvZ19kZWJ1Zygn
UHVzaGluZyB0ZXN0IHJlc291cmNlcycpCiAgICAgICAgIGZvciByZXNvdXJjZSBpbiBURVNUX1JF
U09VUkNFU19UT19QVVNIOgotICAgICAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChz
ZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICcvJyArIHJlc291cmNlLCBERVZJQ0VfTEFZ
T1VUX1RFU1RTX0RJUiArIHJlc291cmNlKQorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQu
cHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICcvJyAr
IHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJlc291cmNlKQogCiAgICAgZGVm
IF9yZXN0YXJ0X2FkYl9hc19yb290KHNlbGYpOgotICAgICAgICBvdXRwdXQgPSBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydyb290J10pCisgICAgICAgIG91dHB1dCA9IHNlbGYuX2FuZHJvaWRfY21k
LnJ1bl9hZGJfY29tbWFuZChbJ3Jvb3QnXSkKICAgICAgICAgaWYgJ2FkYmQgaXMgYWxyZWFkeSBy
dW5uaW5nIGFzIHJvb3QnIGluIG91dHB1dDoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBl
bGlmIG5vdCAncmVzdGFydGluZyBhZGJkIGFzIHJvb3QnIGluIG91dHB1dDoKICAgICAgICAgICAg
IHNlbGYuX2xvZ19lcnJvcignVW5yZWNvZ25pemVkIG91dHB1dCBmcm9tIGFkYiByb290OiAlcycg
JSBvdXRwdXQpCiAKICAgICAgICAgIyBSZWdhcmRsZXNzIHRoZSBvdXRwdXQsIGdpdmUgdGhlIGRl
dmljZSBhIG1vbWVudCB0byBjb21lIGJhY2sgb25saW5lLgotICAgICAgICBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWyd3YWl0LWZvci1kZXZpY2UnXSkKLQotICAgIGRlZiBfcnVuX2FkYl9jb21tYW5k
KHNlbGYsIGNtZCwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVn
KCdSdW4gYWRiIGNvbW1hbmQ6ICcgKyBzdHIoY21kKSkKLSAgICAgICAgaWYgaWdub3JlX2Vycm9y
OgotICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5pZ25v
cmVfZXJyb3IKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBOb25l
Ci0gICAgICAgIHJlc3VsdCA9IHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxm
Ll9hZGJfY29tbWFuZCgpICsgY21kLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCi0gICAg
ICAgICMgTGltaXQgdGhlIGxlbmd0aCB0byBhdm9pZCB0b28gdmVyYm9zZSBvdXRwdXQgb2YgY29t
bWFuZHMgbGlrZSAnYWRiIGxvZ2NhdCcgYW5kICdjYXQgL2RhdGEvdG9tYnN0b25lcy90b21ic3Rv
bmUwMScKLSAgICAgICAgIyB3aG9zZSBvdXRwdXRzIGFyZSBub3JtYWxseSBwcmludGVkIGluIGxh
dGVyIGxvZ3MuCi0gICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnUnVuIGFkYiByZXN1bHQ6ICcgKyBy
ZXN1bHRbOjgwXSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIF9saW5rX2Rldmlj
ZV9maWxlKHNlbGYsIGZyb21fZmlsZSwgdG9fZmlsZSwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAg
ICAgICAgIyBybSB0b19maWxlIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGF0IGxuIHN1Y2NlZWRzLgot
ICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIHRvX2ZpbGVdLCBp
Z25vcmVfZXJyb3IpCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdsbicsICctcycsIGZyb21fZmlsZSwgdG9fZmlsZV0sIGlnbm9yZV9lcnJvcikKLQotICAg
IGRlZiBfcHVzaF90b19kZXZpY2Uoc2VsZiwgaG9zdF9wYXRoLCBkZXZpY2VfcGF0aCwgaWdub3Jl
X2Vycm9yPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1
c2gnLCBob3N0X3BhdGgsIGRldmljZV9wYXRoXSwgaWdub3JlX2Vycm9yKQotCi0gICAgZGVmIF9w
dWxsX2Zyb21fZGV2aWNlKHNlbGYsIGRldmljZV9wYXRoLCBob3N0X3BhdGgsIGlnbm9yZV9lcnJv
cj1GYWxzZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydwdWxsJywg
ZGV2aWNlX3BhdGgsIGhvc3RfcGF0aF0sIGlnbm9yZV9lcnJvcikKKyAgICAgICAgc2VsZi5fYW5k
cm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnd2FpdC1mb3ItZGV2aWNlJ10pCiAKICAgICBkZWYg
X2dldF9sYXN0X3N0YWNrdHJhY2Uoc2VsZik6Ci0gICAgICAgIHRvbWJzdG9uZXMgPSBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsICctbicsICcvZGF0YS90b21ic3RvbmVzJ10p
CisgICAgICAgIHRvbWJzdG9uZXMgPSBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQo
WydzaGVsbCcsICdscycsICctbicsICcvZGF0YS90b21ic3RvbmVzJ10pCiAgICAgICAgIGlmIG5v
dCB0b21ic3RvbmVzIG9yIHRvbWJzdG9uZXMuc3RhcnRzd2l0aCgnL2RhdGEvdG9tYnN0b25lczog
Tm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpOgogICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9y
KCdEUlQgY3Jhc2hlZCwgYnV0IG5vIHRvbWJzdG9uZSBmb3VuZCEnKQogICAgICAgICAgICAgcmV0
dXJuICcnCkBAIC01MTYsMjMgKzY2NSwyMyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIo
ZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgc3RhY2sgdHJhY2UgaW50byBhIGh1bWFuIHJlYWRh
YmxlIGZvcm1hdCwgaWYgbmVlZGVkLgogICAgICAgICAjIEl0IHRha2VzIGEgbG9uZyB0aW1lLCBz
byBkb24ndCBkbyBpdCBoZXJlLgogICAgICAgICByZXR1cm4gJyVzXG4lcycgJSAoJyAnLmpvaW4o
bGFzdF90b21ic3RvbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuX2Fk
Yl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9kYXRhL3RvbWJzdG9uZXMvJyArIGxhc3RfdG9t
YnN0b25lWzZdXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2Nt
ZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCAnL2RhdGEvdG9tYnN0b25lcy8nICsg
bGFzdF90b21ic3RvbmVbNl1dKSkKIAogICAgIGRlZiBfZ2V0X2xvZ2NhdChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctZCcsICctdicsICd0
aHJlYWR0aW1lJ10pCisgICAgICAgIHJldHVybiBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2Nv
bW1hbmQoWydsb2djYXQnLCAnLWQnLCAnLXYnLCAndGhyZWFkdGltZSddKQogCiAgICAgZGVmIF9z
ZXR1cF9wZXJmb3JtYW5jZShzZWxmKToKICAgICAgICAgIyBEaXNhYmxlIENQVSBzY2FsaW5nIGFu
ZCBkcm9wIHJhbSBjYWNoZSB0byByZWR1Y2Ugbm9pc2UgaW4gdGVzdHMKICAgICAgICAgaWYgbm90
IHNlbGYuX29yaWdpbmFsX2dvdmVybm9yczoKLSAgICAgICAgICAgIGdvdmVybm9yX2ZpbGVzID0g
c2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBTQ0FMSU5HX0dPVkVSTk9SU19Q
QVRURVJOXSkKKyAgICAgICAgICAgIGdvdmVybm9yX2ZpbGVzID0gc2VsZi5fYW5kcm9pZF9jbWQu
cnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBTQ0FMSU5HX0dPVkVSTk9SU19QQVRURVJO
XSkKICAgICAgICAgICAgIGlmIGdvdmVybm9yX2ZpbGVzLmZpbmQoJ05vIHN1Y2ggZmlsZSBvciBk
aXJlY3RvcnknKSA9PSAtMToKICAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBnb3Zlcm5vcl9m
aWxlcy5zcGxpdCgpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5v
cnNbZmlsZV0gPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSku
c3RyaXAoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdlY2hvJywgJ3BlcmZvcm1hbmNlJywgJz4nLCBmaWxlXSkKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzW2ZpbGVdID0gc2VsZi5fYW5kcm9pZF9jbWQucnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgZmlsZV0pLnN0cmlwKCkKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNo
bycsICdwZXJmb3JtYW5jZScsICc+JywgZmlsZV0pCiAKICAgICBkZWYgX3RlYXJkb3duX3BlcmZv
cm1hbmNlKHNlbGYpOgogICAgICAgICBmb3IgZmlsZSwgb3JpZ2luYWxfY29udGVudCBpbiBzZWxm
Ll9vcmlnaW5hbF9nb3Zlcm5vcnMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCBvcmlnaW5hbF9jb250ZW50LCAnPicsIGZpbGVdKQor
ICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
ZWNobycsIG9yaWdpbmFsX2NvbnRlbnQsICc+JywgZmlsZV0pCiAgICAgICAgIHNlbGYuX29yaWdp
bmFsX2dvdmVybm9ycyA9IHt9CiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgc3Rkb3V0
LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgpAQCAtNTQ5LDEwICs2OTgsNiBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgVGhlIGNvbW1hbmQgbGlu
ZSBwYXNzZWQgdG8gdGhlIERSVCBwcm9jZXNzIGlzIHJldHVybmVkIGJ5IF9kcnRfY21kX2xpbmUo
KSBpbnN0ZWFkLgogICAgICAgICByZXR1cm4gc2VsZi5fYWRiX2NvbW1hbmQoKSArIFsnc2hlbGwn
XQogCi0gICAgZGVmIF9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxlX3BhdGgp
OgotICAgICAgICBhc3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCi0gICAgICAg
IHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9w
YXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAotCiAgICAgZGVmIF9kcnRfY21kX2xpbmUo
c2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICByZXR1cm4gZHJpdmVy
LkRyaXZlci5jbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykgKyBbJy0t
Y3JlYXRlLXN0ZGluLWZpZm8nLCAnLS1zZXBhcmF0ZS1zdGRlcnItZmlmbyddCiAKQEAgLTU2NSwx
NyArNzEwLDE3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToK
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgX2FsbF9waXBlc19jcmVhdGVkKHNlbGYp
OgotICAgICAgICByZXR1cm4gKHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9m
aWZvX3BhdGgpIGFuZAotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2Rldmlj
ZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4
aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisgICAgICAgIHJldHVybiAoc2Vs
Zi5fYW5kcm9pZF9jbWQuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkg
YW5kCisgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQuZmlsZV9leGlzdHNfb25fZGV2
aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJv
aWRfY21kLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKIAogICAg
IGRlZiBfcmVtb3ZlX2FsbF9waXBlcyhzZWxmKToKICAgICAgICAgZm9yIGZpbGUgaW4gW3NlbGYu
X2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwgc2VsZi5fZXJyX2ZpZm9fcGF0aF06
Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIGZpbGVd
KQorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAncm0nLCBmaWxlXSkKIAotICAgICAgICByZXR1cm4gKG5vdCBzZWxmLl9maWxlX2V4aXN0c19v
bl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBub3Qgc2Vs
Zi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAotICAgICAg
ICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9f
cGF0aCkpCisgICAgICAgIHJldHVybiAobm90IHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3Rz
X29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBz
ZWxmLl9hbmRyb2lkX2NtZC5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0
aCkgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuX2FuZHJvaWRfY21kLmZpbGVfZXhpc3Rz
X29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKIAogICAgIGRlZiBydW5fdGVzdChzZWxm
LCBkcml2ZXJfaW5wdXQsIHN0b3Bfd2hlbl9kb25lKToKICAgICAgICAgYmFzZSA9IHNlbGYuX3Bv
cnQubG9va3VwX3ZpcnR1YWxfdGVzdF9iYXNlKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCkBAIC02
MDksMTMgKzc1NCwxMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZl
cik6CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX3N0YXJ0KHBp
eGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCiAgICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnU3Rh
cnRpbmcgZm9yd2FyZGVyJykKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBzZWxm
Ll9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcigKLSAgICAgICAgICAgIHNlbGYuX3Bv
cnQsICdGb3J3YXJkZXInLCBzZWxmLl9hZGJfY29tbWFuZCgpICsgWydzaGVsbCcsICclcyAtRCAl
cycgJSAoREVWSUNFX0ZPUldBUkRFUl9QQVRILCBGT1JXQVJEX1BPUlRTKV0pCi0gICAgICAgIHNl
bGYuX2ZvcndhcmRlcl9wcm9jZXNzLnN0YXJ0KCkKLQotICAgICAgICBzZWxmLl9ydW5fYWRiX2Nv
bW1hbmQoWydsb2djYXQnLCAnLWMnXSkKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
c2hlbGwnLCAnZWNobyddICsgc2VsZi5fY21kX2xpbmUgKyBbJz4nLCBDT01NQU5EX0xJTkVfRklM
RV0pCi0gICAgICAgIHN0YXJ0X3Jlc3VsdCA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2FtJywgJ3N0YXJ0JywgJy1lJywgJ1J1bkluU3ViVGhyZWFkJywgJy1uJywgRFJUX0FDVElW
SVRZX0ZVTExfTkFNRV0pCisgICAgICAgIGZvcndhcmRlciA9IEZvcndhcmRlcihzZWxmLl9wb3J0
Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQsIHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgsIHNlbGYuX2Fu
ZHJvaWRfY21kKQorICAgICAgICBmb3J3YXJkZXIuc2V0dXBfcmVkaXJlY3Rpb25zKHNlbGYuX3dv
cmtlcl9udW1iZXIsIFsocG9ydCwgcG9ydCkgZm9yIHBvcnQgaW4gRk9SV0FSRF9QT1JUU10pCisg
ICAgICAgIHNlbGYuX2FuZHJvaWRfY21kLnJ1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYydd
KQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdl
Y2hvJ10gKyBzZWxmLl9jbWRfbGluZSArIFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKKyAgICAg
ICAgc3RhcnRfcmVzdWx0ID0gc2VsZi5fYW5kcm9pZF9jbWQucnVuX2FkYl9jb21tYW5kKFsnc2hl
bGwnLCAnYW0nLCAnc3RhcnQnLCAnLWUnLCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNU
SVZJVFlfRlVMTF9OQU1FXSkKICAgICAgICAgaWYgc3RhcnRfcmVzdWx0LmZpbmQoJ0V4Y2VwdGlv
bicpICE9IC0xOgogICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdGYWlsZWQgdG8gc3RhcnQg
RHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIEV4Y2VwdGlvbjpcbicgKyBzdGFydF9yZXN1bHQp
CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTY3OSw3ICs4MjIsNyBAQCBjbGFzcyBDaHJv
bWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQorICAgICAgICBz
ZWxmLl9hbmRyb2lkX2NtZC5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1z
dG9wJywgRFJUX0FQUF9QQUNLQUdFXSkKIAogICAgICAgICBpZiBzZWxmLl9yZWFkX3N0ZG91dF9w
cm9jZXNzOgogICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcy5raWxsKCkKQEAg
LTY4OSwxMSArODMyLDkgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2
ZXIpOgogICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzcy5raWxsKCkKICAgICAg
ICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MgPSBOb25lCiAKLSAgICAgICAgc3VwZXIo
Q2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5zdG9wKCkKKyAgICAgICAgRm9yd2FyZGVyLmtp
bGxfZGV2aWNlX2RhZW1vbihzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQsIHNlbGYu
X2FuZHJvaWRfY21kLCBzZWxmLl9sb2dfZGVidWcpCiAKLSAgICAgICAgaWYgc2VsZi5fZm9yd2Fy
ZGVyX3Byb2Nlc3M6Ci0gICAgICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2Vzcy5raWxsKCkK
LSAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gTm9uZQorICAgICAgICBzdXBl
cihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnN0b3AoKQogCiAgICAgICAgIGlmIHNlbGYu
X2hhc19zZXR1cDoKICAgICAgICAgICAgIGlmIG5vdCBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2xv
b3Bfd2l0aF90aW1lb3V0KHNlbGYuX3JlbW92ZV9hbGxfcGlwZXMsIERSVF9TVEFSVF9TVE9QX1RJ
TUVPVVRfU0VDUyk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179740</attachid>
            <date>2012-12-17 07:44:35 -0800</date>
            <delta_ts>2012-12-18 04:53:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121217164152.patch</filename>
            <type>text/plain</type>
            <size>38448</size>
            <attacher name="Philippe Liard">pliard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzE2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzIzNDljZDI3ZWMxMzEzMjlkOTY0MmQ3ZGQwYWFiNWU0
YTg3YjFkYy4uYjc0ZDc4OTgwNzc5Y2QzNDdmZGNlNmE5NWE1MmRiMjVlN2VlYzhhOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDky
IEBACisyMDEyLTEyLTE3ICBQaGlsaXBwZSBMaWFyZCAgPHBsaWFyZEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgVXNlIGZvcndhcmRlcjIgaW4gQ2hyb21lIGZvciBBbmRyb2lkIGxheW91dCB0ZXN0
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTg4
CisKKyAgICAgICAgQ2hyb21pdW0ncyBkZXZpY2UgdG8gaG9zdCBmb3J3YXJkZXIgaXMgZGVwcmVj
YXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkCisgICAgICAgIHNvb24uIEl0IHdhcyByZXBsYWNlZCB3
aXRoIGZvcndhcmRlcjIgd2hpY2ggaXMgYWJsZSB0byBydW4gb24KKyAgICAgICAgbm9uLXJvb3Rl
ZCBkZXZpY2VzLiBUaGUgd2F5IGZvcndhcmRlcjIgaXMgc2V0dXAvdGVhcmVkIGRvd24gaXMKKyAg
ICAgICAgZGlmZmVyZW50IHdoaWNoIGV4cGxhaW5zIHdoeSB0aGUgUHl0aG9uIGxheWVyIGluIFdl
YktpdCBoYXMgdG8gYmUKKyAgICAgICAgdXBkYXRlZC4KKworICAgICAgICBJbiBwYXJ0aWN1bGFy
LCBmb3J3YXJkZXIyIGNvbnNpc3RzIG9mIHR3byBwcm9ncmFtcyAoZGFlbW9ucyk6CisgICAgICAg
IC0gaG9zdF9mb3J3YXJkZXI6IGRhZW1vbiBydW5uaW5nIG9uIHRoZSBob3N0CisgICAgICAgIC0g
ZGV2aWNlX2ZvcndhcmRlcjogZGFlbW9uIHJ1bm5pbmcgb24gdGhlIGRldmljZXMgYXR0YWNoZWQg
dG8gdGhlIGhvc3QKKworICAgICAgICBkZXZpY2VfZm9yd2FyZGVyIG11c3QgYmUgc3RhcnRlZCBv
biB0aGUgZGV2aWNlIGJlZm9yZSBob3N0X2ZvcndhcmRlcjoKKyAgICAgICAgJCAvZGF0YS9sb2Nh
bC90bXAvZGV2aWNlX2ZvcndhcmRlciBjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisgICAgICAg
ICdjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcicgaXMgdGhlIG5hbWUgb2YgdGhlIFVuaXggRG9tYWlu
IFNvY2tldCBib3VuZAorICAgICAgICBieSB0aGUgZGFlbW9uIG9uIHRoZSBkZXZpY2Ugd2hpY2gg
aXMgdXNlZCBieSB0aGUgaG9zdCB0byBjb21tdW5pY2F0ZQorICAgICAgICB3aXRoIGl0LgorCisg
ICAgICAgIFRoZW4gdGhlIGhvc3QgbXVzdCBzZXR1cCBhIGhvc3QgdG8gZGV2aWNlIHJlZGlyZWN0
aW9uIHNvIHRoYXQKKyAgICAgICAgaG9zdF9mb3J3YXJkZXIgY2FuIHRhbGsgdG8gdGhlIGRldmlj
ZV9mb3J3YXJkZXIncyBVbml4IERvbWFpbiBTb2NrZXQKKyAgICAgICAgdGhyb3VnaCBhIFRDUCBz
b2NrZXQgKHBvcnQgODAwMCBpbiB0aGUgZXhhbXBsZSBiZWxvdyk6CisgICAgICAgICQgYWRiIGZv
cndhcmQgdGNwOjgwMDAgbG9jYWxhYnN0cmFjdDpjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisg
ICAgICAgIFRoZW4gdGhlIGhvc3QgY2FuIHNwZWNpZnkgd2hpY2ggcG9ydCBtdXN0IGJlIGZvcndh
cmRlZCBmcm9tIHRoZSBkZXZpY2UKKyAgICAgICAgdG8gdGhlIGhvc3QgKGRldmljZSBwb3J0IDgw
ODAgdG8gaG9zdCBwb3J0IDgwODEgaW4gdGhlIGV4YW1wbGUgYmVsb3cpOgorICAgICAgICAkIGhv
c3RfZm9yd2FyZGVyIDgwMDA6ODA4MDo4MDgxOjEyNy4wLjAuMQorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5OgorICAgICAgICAo
RXhlY3V0aXZlLnJ1bl9jb21tYW5kKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWRQb3J0LnNldHVwX3Rlc3RfcnVuKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuY2hl
Y2tfYnVpbGQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX2hvc3RfZm9y
d2FyZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkUG9ydC5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIpOgorICAgICAgICAoQW5kcm9p
ZFBlcmYuX19pbml0X18pOgorICAgICAgICAoQW5kcm9pZFBlcmYuY2hlY2tfY29uZmlndXJhdGlv
bik6CisgICAgICAgIChhdHRhY2hfdG9fcGlkKToKKyAgICAgICAgKHByb2ZpbGVfYWZ0ZXJfZXhp
dCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRz
Ll9faW5pdF9fKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5zZXR1cF9tZDVzdW0pOgorICAg
ICAgICAoQW5kcm9pZENvbW1hbmRzLmdldF9hZGJfY29tbWFuZCk6CisgICAgICAgIChBbmRyb2lk
Q29tbWFuZHMuX3J1bl9jb21tYW5kKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5ydW5fYWRi
X2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2Rldmlj
ZSk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMucHVzaF90b19kZXZpY2UpOgorICAgICAgICAo
QW5kcm9pZENvbW1hbmRzLnB1bGxfZnJvbV9kZXZpY2UpOgorICAgICAgICAoQW5kcm9pZENvbW1h
bmRzLl9tZDVzdW1fZXJyb3JfaGFuZGxlcik6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMucHVz
aF9maWxlX2lmX25lZWRlZCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuX2V4dHJhY3RfaGFz
aGVzX2Zyb21fbWQ1c3VtX291dHB1dCk6CisgICAgICAgIChGb3J3YXJkZXIpOgorICAgICAgICAo
Rm9yd2FyZGVyLl9faW5pdF9fKToKKyAgICAgICAgKEZvcndhcmRlci5fY29tbWFuZF9lcnJvcl9o
YW5kbGVyKToKKyAgICAgICAgKEZvcndhcmRlci5fbWFrZV9jb21tYW5kX2Vycm9yX2hhbmRsZXIp
OgorICAgICAgICAoRm9yd2FyZGVyLmtpbGxfaG9zdF9kYWVtb24pOgorICAgICAgICAoRm9yd2Fy
ZGVyLmtpbGxfZGV2aWNlX2RhZW1vbik6CisgICAgICAgIChGb3J3YXJkZXIuc2V0dXBfcmVkaXJl
Y3Rpb25zKToKKyAgICAgICAgKEZvcndhcmRlci5fYWxsb2NhdGVfYWRiX2NvbnRyb2xfcG9ydCk6
CisgICAgICAgIChGb3J3YXJkZXIuX2dldF91c2VkX3BvcnRzKToKKyAgICAgICAgKEZvcndhcmRl
ci5fcnVuX2FkYl9zaGVsbF9jb21tYW5kKToKKyAgICAgICAgKEZvcndhcmRlci5fcnVuX2FkYl9j
b21tYW5kKToKKyAgICAgICAgKEZvcndhcmRlci5fcnVuX3NoZWxsX2NvbW1hbmQpOgorICAgICAg
ICAoRm9yd2FyZGVyLnBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcik6CisgICAgICAgIChGb3J3YXJk
ZXIucGF0aF90b19ob3N0X2ZvcndhcmRlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2
ZXIuX19pbml0X18pOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9maW5kX29yX2Ny
ZWF0ZV9zeW1mcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3Rlc3Qp
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNoX2RhdGFfaWZfbmVlZGVkKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF9leGVjdXRhYmxlKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF9mb250cyk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWREcml2ZXIuX3B1c2hfdGVzdF9yZXNvdXJjZXMpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkRHJpdmVyLl9yZXN0YXJ0X2FkYl9hc19yb290KToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZERyaXZlci5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX2dldF9sb2djYXQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9z
ZXR1cF9wZXJmb3JtYW5jZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3RlYXJk
b3duX3BlcmZvcm1hbmNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5jbWRfbGlu
ZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2FsbF9waXBlc19jcmVhdGVkKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcmVtb3ZlX2FsbF9waXBlcyk6CisgICAg
ICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2UpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9waWRfb25fdGFyZ2V0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9p
ZERyaXZlci5zdG9wKToKKwogMjAxMi0xMi0xMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIC0tcHJvZmlsZXI9UFJPRklMRVIgb3B0aW9uIHRvIHJ1bi1wZXJm
LXRlc3RzIHRvIGFsbG93IHNwZWNpZnlpbmcgd2hpY2ggcHJvZmlsZXIgdG8gdXNlIG9uIHBsYXRm
b3JtcyB3aXRoIG1hbnkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCmluZGV4IGNjODMzMzIwOTk4MTQ3M2Yz
OTZiN2E3MjMyNGVmMTAwM2NiM2U5ZjEuLmY1ZGVmOGYwOWZhOWEwMTRiZWIwYzIwOWFjMGUxMmYx
ODRhMWQzOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Lmd5cC9EdW1wUmVuZGVyVHJlZS5neXAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cApAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAg
ICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAg
ICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5k
cm9pZC9uYXRpdmVfdGVzdC5neXA6bmF0aXZlX3Rlc3RfbmF0aXZlX2NvZGUnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdG9vbHMvYW5kcm9pZC9mb3J3YXJk
ZXIvZm9yd2FyZGVyLmd5cDpmb3J3YXJkZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwo
Y2hyb21pdW1fc3JjX2RpcikvdG9vbHMvYW5kcm9pZC9mb3J3YXJkZXIyL2ZvcndhcmRlci5neXA6
Zm9yd2FyZGVyMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS90b29scy9hbmRyb2lkL21kNXN1bS9tZDVzdW0uZ3lwOm1kNXN1bScsCiAgICAgICAgICAgICAg
ICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdjb3BpZXMnOiBbewpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lk
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9h
bmRyb2lkLnB5CmluZGV4IDYzZjRlMjUxNDQxMjg4OGU4Zjk3MDI2ZTZjOTVjMjgzYjQ4YjA5NmYu
LmUwYTI4MWU5MDI2OGE1ODkxMDhkNTkzZjU1ZTE2NDJkY2Q2MDc1MDkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X2FuZHJvaWQucHkKQEAgLTI3LDYgKzI3LDcgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGNv
cHkKK2ltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBy
ZQpAQCAtMzUsNiArMzYsNyBAQCBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRocmVhZGluZwog
aW1wb3J0IHRpbWUKIAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1w
b3J0IEZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNo
cm9taXVtCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIKIGZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGZhY3RvcnkKQEAgLTUzLDcgKzU1
LDcgQEAgQ09NTUFORF9MSU5FX0ZJTEUgPSBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9t
ZS1uYXRpdmUtdGVzdHMtY29tbWFuZC1saW5lJwogIyBJZiBjaGFuZ2UgdGhpcywgbXVzdCBhbHNv
IGNoYW5nZSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNw
cAogIyBhbmQgQ2hyb21pdW0ncyB3ZWJraXQvc3VwcG9ydC9wbGF0Zm9ybV9zdXBwb3J0X2FuZHJv
aWQuY2MuCiBERVZJQ0VfRFJUX0RJUiA9IERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnZHJ0LycK
LURFVklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklDRV9EUlRfRElSICsgJ2ZvcndhcmRlcicKK0RF
VklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklDRV9EUlRfRElSICsgJ2RldmljZV9mb3J3YXJkZXIn
CiAKICMgUGF0aCBvbiB0aGUgZGV2aWNlIHdoZXJlIHRoZSB0ZXN0IGZyYW1ld29yayB3aWxsIGNy
ZWF0ZSB0aGUgZmlmbyBwaXBlcy4KIERFVklDRV9GSUZPX1BBVEggPSAnL2RhdGEvZGF0YS9vcmcu
Y2hyb21pdW0ubmF0aXZlX3Rlc3QvZmlsZXMvJwpAQCAtNzYsNyArNzgsMTIgQEAgTEFZT1VUX1RF
U1RfUEFUSF9QUkVGSVggPSAnL2FsbC10ZXN0cycKICMgODAwMCwgODA4MCBhbmQgODQ0MyBhcmUg
Zm9yIGh0dHAvaHR0cHMgdGVzdHMuCiAjIDg4ODAgYW5kIDkzMjMgYXJlIGZvciB3ZWJzb2NrZXQg
dGVzdHMKICMgKHNlZSBodHRwX3NlcnZlci5weSwgYXBhY2hlX2h0dHBfc2VydmVyLnB5IGFuZCB3
ZWJzb2NrZXRfc2VydmVyLnB5KS4KLUZPUldBUkRfUE9SVFMgPSAnODAwMCA4MDgwIDg0NDMgODg4
MCA5MzIzJworRk9SV0FSRF9QT1JUUyA9ICg4MDAwLCA4MDgwLCA4NDQzLCA4ODgwLCA5MzIzKQor
CisjIFdlIHJ1biBvbmUgRm9yd2FyZGVyIHBlciBkZXZpY2UgLyB3b3JrZXIsIGFuZCB3ZSBuZWVk
IHRvIGFsbG9jYXRlIG9uZSBjb250cm9sCisjIHBvcnQgZm9yIGVhY2ggRm9yd2FyZGVyLiBUaGVz
ZSBjb25zdGFudHMgZGVmaW5lIHRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlLgorRk9SV0FS
REVSX0NPTlRST0xfUE9SVF9CRUdJTiA9IDIwMDAwCitGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VO
RCA9IDIxMDAwCiAKIE1TX1RSVUVUWVBFX0ZPTlRTX0RJUiA9ICcvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL21zdHRjb3JlZm9udHMvJwogTVNfVFJVRVRZUEVfRk9OVFNfUEFDS0FHRSA9ICd0dGYt
bXNjb3JlZm9udHMtaW5zdGFsbGVyJwpAQCAtMTc5LDYgKzE4NiwxMCBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICBzZWxmLl9kZXZpY2VzID0gW10KIAorICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxm
KToKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Qb3J0LnNldHVwX3Rlc3RfcnVuKHNlbGYpCisg
ICAgICAgIEZvcndhcmRlci5raWxsX2hvc3RfZGFlbW9uKHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29t
bWFuZCwgc2VsZi5fYnVpbGRfcGF0aCkKKwogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2Fu
ZHJvaWRfc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IocG9ydCwgc2VydmVyX25hbWUsIGNtZF9s
aW5lLCBlbnY9Tm9uZSk6CiAgICAgICAgIHJldHVybiBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9j
ZXNzKHBvcnQsIHNlcnZlcl9uYW1lLCBjbWRfbGluZSwgZW52LApAQCAtMjEyLDcgKzIyMyw4IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBk
ZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAgIHJlc3VsdCA9IHN1cGVy
KENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLmNoZWNrX2J1aWxkKG5lZWRzX2h0dHApCiAgICAg
ICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYucGF0aF90b19tZDVzdW0o
KSwgJ21kNXN1bSB1dGlsaXR5JykgYW5kIHJlc3VsdAotICAgICAgICByZXN1bHQgPSBzZWxmLl9j
aGVja19maWxlX2V4aXN0cyhzZWxmLnBhdGhfdG9fZm9yd2FyZGVyKCksICdmb3J3YXJkZXIgdXRp
bGl0eScpIGFuZCByZXN1bHQKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlz
dHMoc2VsZi5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoKSwgJ2RldmljZV9mb3J3YXJkZXIgdXRp
bGl0eScpIGFuZCByZXN1bHQKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlz
dHMoc2VsZi5wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKCksICdob3N0X2ZvcndhcmRlciB1dGlsaXR5
JykgYW5kIHJlc3VsdAogICAgICAgICBpZiBub3QgcmVzdWx0OgogICAgICAgICAgICAgX2xvZy5l
cnJvcignRm9yIGNvbXBsZXRlIEFuZHJvaWQgYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2Vl
OicpCiAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQpAQCAtMjgzLDggKzI5NSwxMSBAQCBjbGFz
cyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAKICAgICAgICAg
cmV0dXJuIENocm9taXVtQW5kcm9pZFBvcnQuX2FkYl9wYXRoCiAKLSAgICBkZWYgcGF0aF90b19m
b3J3YXJkZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdmb3J3YXJk
ZXInKQorICAgIGRlZiBwYXRoX3RvX2hvc3RfZm9yd2FyZGVyKHNlbGYpOgorICAgICAgICByZXR1
cm4gRm9yd2FyZGVyLnBhdGhfdG9faG9zdF9mb3J3YXJkZXIoc2VsZi5fYnVpbGRfcGF0aCkKKwor
ICAgIGRlZiBwYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBG
b3J3YXJkZXIucGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKHNlbGYuX2J1aWxkX3BhdGgpCiAKICAg
ICBkZWYgcGF0aF90b19tZDVzdW0oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9w
YXRoKE1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FKQpAQCAtMzYzLDIwICszNzgsMjAgQEAgY2xhc3Mg
QW5kcm9pZFBlcmYoU2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyKToKICAgICBfY2FjaGVkX3BlcmZf
aG9zdF9wYXRoID0gTm9uZQogICAgIF9oYXZlX3NlYXJjaGVkX2Zvcl9wZXJmX2hvc3QgPSBGYWxz
ZQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0
X2RpciwgYWRiX3BhdGgsIGRldmljZV9zZXJpYWwsIHN5bWZzX3BhdGgsIGlkZW50aWZpZXI9Tm9u
ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0
X2RpciwgYW5kcm9pZF9jb21tYW5kcywgc3ltZnNfcGF0aCwgaWRlbnRpZmllcj1Ob25lKToKICAg
ICAgICAgc3VwZXIoQW5kcm9pZFBlcmYsIHNlbGYpLl9faW5pdF9fKGhvc3QsIGV4ZWN1dGFibGVf
cGF0aCwgb3V0cHV0X2RpciwgImRhdGEiLCBpZGVudGlmaWVyKQogICAgICAgICBzZWxmLl9kZXZp
Y2Vfc2VyaWFsID0gZGV2aWNlX3NlcmlhbAotICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCA9IFth
ZGJfcGF0aCwgJy1zJywgc2VsZi5fZGV2aWNlX3NlcmlhbF0KKyAgICAgICAgc2VsZi5fYW5kcm9p
ZF9jb21tYW5kcyA9IGFuZHJvaWRfY29tbWFuZHMKICAgICAgICAgc2VsZi5fcGVyZl9wcm9jZXNz
ID0gTm9uZQogICAgICAgICBzZWxmLl9zeW1mc19wYXRoID0gc3ltZnNfcGF0aAogCiAgICAgZGVm
IGNoZWNrX2NvbmZpZ3VyYXRpb24oc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBwZXJmIGlz
IGluc3RhbGxlZAotICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKCcv
c3lzdGVtL2Jpbi9wZXJmJyk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9hbmRyb2lkX2NvbW1hbmRz
LmZpbGVfZXhpc3RzX29uX2RldmljZSgnL3N5c3RlbS9iaW4vcGVyZicpOgogICAgICAgICAgICAg
cHJpbnQgIkNhbm5vdCBmaW5kIC9zeXN0ZW0vYmluL3BlcmYgb24gZGV2aWNlICVzIiAlIHNlbGYu
X2RldmljZV9zZXJpYWwKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAjIENoZWNr
IHRoYXQgdGhlIGRldmljZSBpcyBhIHVzZXJkZWJ1ZyBidWlsZCAob3IgYXQgbGVhc3QgaGFzIHRo
ZSBuZWNlc3NhcnkgbGlicmFyaWVzKS4KLSAgICAgICAgaWYgc2VsZi5fcnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnZ2V0cHJvcCcsICdyby5idWlsZC50eXBlJ10pLnN0cmlwKCkgIT0gJ3VzZXJk
ZWJ1Zyc6CisgICAgICAgIGlmIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnZ2V0cHJvcCcsICdyby5idWlsZC50eXBlJ10pLnN0cmlwKCkgIT0gJ3VzZXJk
ZWJ1Zyc6CiAgICAgICAgICAgICBwcmludCAiRGV2aWNlICVzIGlzIG5vdCBmbGFzaGVkIHdpdGgg
YSB1c2VyZGVidWcgYnVpbGQgb2YgQW5kcm9pZCIgJSBzZWxmLl9kZXZpY2Vfc2VyaWFsCiAgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBGSVhNRTogQ2hlY2sgdGhhdCB0aGUgYmlu
YXJ5IGFjdHVhbGx5IGlzIHBlcmYtYWJsZSAoaGFzIHN0YWNrZnJhbWUgcG9pbnRlcnMpPwpAQCAt
NDAzLDE4ICs0MTgsMTEgQEAgR29vZ2xlcnMgc2hvdWxkIHJlYWQ6CiBodHRwOi8vZ290by5nb29n
bGUuY29tL2NyLWFuZHJvaWQtcGVyZi1ob3d0bwogIiIiCiAKLSAgICBkZWYgX2ZpbGVfZXhpc3Rz
X29uX2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6Ci0gICAgICAgIGFzc2VydCBmdWxsX2Zp
bGVfcGF0aC5zdGFydHN3aXRoKCcvJykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmls
ZV9wYXRoCi0KLSAgICBkZWYgX3J1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQg
KyBjbWQpCi0KICAgICBkZWYgYXR0YWNoX3RvX3BpZChzZWxmLCBwaWQpOgogICAgICAgICBhc3Nl
cnQocGlkKQogICAgICAgICBhc3NlcnQoc2VsZi5fcGVyZl9wcm9jZXNzID09IE5vbmUpCiAgICAg
ICAgICMgRklYTUU6IFRoaXMgY2FuJ3QgYmUgYSBmaXhlZCB0aW1lb3V0IQotICAgICAgICBjbWQg
PSBzZWxmLl9hZGJfY29tbWFuZCArIFsnc2hlbGwnLCAncGVyZicsICdyZWNvcmQnLCAnLWcnLCAn
LXAnLCBwaWQsICdzbGVlcCcsIDMwXQorICAgICAgICBjbWQgPSBzZWxmLl9hbmRyb2lkX2NvbW1h
bmRzLmdldF9hZGJfY29tbWFuZCgpICsgWydzaGVsbCcsICdwZXJmJywgJ3JlY29yZCcsICctZycs
ICctcCcsIHBpZCwgJ3NsZWVwJywgMzBdCiAgICAgICAgIHNlbGYuX3BlcmZfcHJvY2VzcyA9IHNl
bGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKGNtZCkKIAogICAgIGRlZiBfcGVyZl92ZXJzaW9uX3N0
cmluZyhzZWxmLCBwZXJmX3BhdGgpOgpAQCAtNDQ4LDcgKzQ1Niw3IEBAIGh0dHA6Ly9nb3RvLmdv
b2dsZS5jb20vY3ItYW5kcm9pZC1wZXJmLWhvd3RvCiAgICAgICAgIGlmIHBlcmZfZXhpdGNvZGUg
IT0gMDoKICAgICAgICAgICAgIHByaW50ICJQZXJmIGZhaWxlZCAoZXhpdCBjb2RlOiAlaSksIGNh
bid0IHByb2Nlc3MgcmVzdWx0cy4iICUgcGVyZl9leGl0Y29kZQogICAgICAgICAgICAgcmV0dXJu
Ci0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCAnL2RhdGEvcGVyZi5kYXRh
Jywgc2VsZi5fb3V0cHV0X3BhdGhdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1
bl9hZGJfY29tbWFuZChbJ3B1bGwnLCAnL2RhdGEvcGVyZi5kYXRhJywgc2VsZi5fb3V0cHV0X3Bh
dGhdKQogCiAgICAgICAgIHBlcmZob3N0X3BhdGggPSBzZWxmLl9wZXJmaG9zdF9wYXRoKCkKICAg
ICAgICAgaWYgcGVyZmhvc3RfcGF0aDoKQEAgLTQ3Niw2ICs0ODQsMTg2IEBAIGh0dHA6Ly9jcmJ1
Zy5jb20vMTY1MjUwIGRpc2N1c3NlcyBtYWtpbmcgdGhlc2UgcHJlLWJ1aWx0IGJpbmFyaWVzIGV4
dGVybmFsbHkgYXZhCiAgICAgICAgIHByaW50ICcgJy5qb2luKFtwZXJmaG9zdF9kaXNwbGF5X3Bh
dGNoLCAncmVwb3J0JywgJy1pJywgc2VsZi5fb3V0cHV0X3BhdGgsICctLXN5bWZzJywgc2VsZi5f
c3ltZnNfcGF0aF0pCiAKIAorY2xhc3MgQW5kcm9pZENvbW1hbmRzOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBjb21tYW5kX2V4ZWN1dG9yLCBhZGJfY29tbWFuZCwgcGF0aF9idWlsZGVyLCBkZWJ1
Z19sb2dnZXIpOgorICAgICAgICBzZWxmLl9jb21tYW5kX2V4ZWN1dG9yID0gY29tbWFuZF9leGVj
dXRvcgorICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCA9IGFkYl9jb21tYW5kCisgICAgICAgIHNl
bGYuX3BhdGhfYnVpbGRlciA9IHBhdGhfYnVpbGRlcgorICAgICAgICBzZWxmLl9kZWJ1Z19sb2dn
ZXIgPSBkZWJ1Z19sb2dnZXIKKworICAgIGRlZiBzZXR1cF9tZDVzdW0oc2VsZik6CisgICAgICAg
IHNlbGYuX21kNXN1bV9wYXRoID0gc2VsZi5fcGF0aF9idWlsZGVyKE1ENVNVTV9ERVZJQ0VfRklM
RV9OQU1FKQorICAgICAgICBpZiBub3Qgc2VsZi5maWxlX2V4aXN0c19vbl9kZXZpY2UoTUQ1U1VN
X0RFVklDRV9QQVRIKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnB1c2hfdG9fZGV2aWNlKHNl
bGYuX21kNXN1bV9wYXRoLCBNRDVTVU1fREVWSUNFX1BBVEgpOgorICAgICAgICAgICAgICAgIHJh
aXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgcHVzaCBtZDVzdW0gdG8gdGhlIGRldmljZScp
CisKKyAgICBkZWYgZ2V0X2FkYl9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
YWRiX2NvbW1hbmQKKworICAgIGRlZiBfcnVuX2NvbW1hbmQoc2VsZiwgY21kLCBlcnJvcl9oYW5k
bGVyPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29tbWFuZF9leGVjdXRvcihjbWQsIGVy
cm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKKworICAgIGRlZiBydW5fYWRiX2NvbW1hbmQoc2Vs
ZiwgY21kLCBlcnJvcl9oYW5kbGVyPU5vbmUpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLl9jb21t
YW5kX2V4ZWN1dG9yKHNlbGYuX2FkYl9jb21tYW5kICsgY21kLCBlcnJvcl9oYW5kbGVyPWVycm9y
X2hhbmRsZXIpCisgICAgICAgICMgTGltaXQgdGhlIGxlbmd0aCB0byBhdm9pZCB0b28gdmVyYm9z
ZSBvdXRwdXQgb2YgY29tbWFuZHMgbGlrZSAnYWRiIGxvZ2NhdCcgYW5kICdjYXQgL2RhdGEvdG9t
YnN0b25lcy90b21ic3RvbmUwMScKKyAgICAgICAgIyB3aG9zZSBvdXRwdXRzIGFyZSBub3JtYWxs
eSBwcmludGVkIGluIGxhdGVyIGxvZ3MuCisgICAgICAgIHNlbGYuX2RlYnVnX2xvZ2dlcignUnVu
IGFkYiByZXN1bHQ6ICcgKyBvdXRwdXRbOjgwXSkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisg
ICAgZGVmIGZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CisgICAg
ICAgIGFzc2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRoKCcvJykKKyAgICAgICAgcmV0dXJu
IHNlbGYucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0
cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKKworICAgIGRlZiBwdXNoX3RvX2RldmljZShzZWxmLCBo
b3N0X3BhdGgsIGRldmljZV9wYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2FkYl9jb21t
YW5kKFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGhdKQorCisgICAgZGVmIHB1bGxfZnJv
bV9kZXZpY2Uoc2VsZiwgZGV2aWNlX3BhdGgsIGhvc3RfcGF0aCk6CisgICAgICAgIHJldHVybiBz
ZWxmLnJ1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoXSkKKwor
ICAgIGRlZiBfbWQ1c3VtX2Vycm9yX2hhbmRsZXIoc2VsZiwgc2NyaXB0X2Vycm9yKToKKyAgICAg
ICAgIyBJdCBpcyBub3QgYW4gZXJyb3IgaWYgbWQ1c3VtIGV4aXRzIHdpdGggMS4gVGhpcyBoYXBw
ZW5zIHdoZW4gdGhlIGZpbGUgaXQgaXMgaW52b2tlZCBvbiBkb2VzIG5vdCBleGl0LgorICAgICAg
ICBzZWxmLl9kZWJ1Z19sb2dnZXIoc2NyaXB0X2Vycm9yKQorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRldmljZV9maWxlKToKKyAg
ICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGhvc3RfZmlsZSkKKyAgICAgICAgcGF0aF90b19t
ZDVzdW1faG9zdCA9IHNlbGYuX21kNXN1bV9wYXRoICsgJ19ob3N0JworICAgICAgICBhc3NlcnQg
b3MucGF0aC5leGlzdHMocGF0aF90b19tZDVzdW1faG9zdCkKKyAgICAgICAgbWQ1c3VtX291dHB1
dCA9IHNlbGYucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCBNRDVTVU1fREVWSUNFX1BBVEgsIGRl
dmljZV9maWxlXSkKKyAgICAgICAgZGV2aWNlX2hhc2hlcyA9IEFuZHJvaWRDb21tYW5kcy5fZXh0
cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpCisgICAgICAgIGhv
c3RfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAorICAg
ICAgICAgICAgc2VsZi5fcnVuX2NvbW1hbmQoW3BhdGhfdG9fbWQ1c3VtX2hvc3QsIGhvc3RfZmls
ZV0sIHNlbGYuX21kNXN1bV9lcnJvcl9oYW5kbGVyKSkKKyAgICAgICAgaWYgaG9zdF9oYXNoZXMg
YW5kIGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6CisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgc2VsZi5wdXNoX3RvX2RldmljZShob3N0X2ZpbGUsIGRldmljZV9maWxlKQorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBfZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0
KG1kNXN1bV9vdXRwdXQpOgorICAgICAgICBhc3NlcnQgbWQ1c3VtX291dHB1dAorICAgICAgICBy
ZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291dHB1dF0KKwor
CisjIERldmljZSB0byBob3N0IHBvcnQgZm9yd2FyZGVyLgorY2xhc3MgRm9yd2FyZGVyOgorICAg
IERFVklDRV9GT1JXQVJERVJfUEFUSCA9IERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnZGV2aWNl
X2ZvcndhcmRlcicKKyAgICBBREJfQ09OVFJPTF9TT0NLRVQgPSAnY2hyb21lX2RldmljZV9mb3J3
YXJkZXInCisgICAgSE9TVF9MT0NBTF9BRERSRVNTID0gJzEyNy4wLjAuMScKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBjb21tYW5kX2V4ZWN1dG9yLCBob3N0X3BhdGhfYnVpbGRlciwgYW5kcm9p
ZF9jb21tYW5kcyk6CisgICAgICAgIHNlbGYuX2RldmljZV9mb3J3YXJkZXJfcGF0aCA9IEZvcndh
cmRlci5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoaG9zdF9wYXRoX2J1aWxkZXIpCisgICAgICAg
IHNlbGYuX2hvc3RfZm9yd2FyZGVyX3BhdGggPSBGb3J3YXJkZXIucGF0aF90b19ob3N0X2Zvcndh
cmRlcihob3N0X3BhdGhfYnVpbGRlcikKKyAgICAgICAgc2VsZi5fY29tbWFuZF9leGVjdXRvciA9
IGNvbW1hbmRfZXhlY3V0b3IKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcyA9IGFuZHJv
aWRfY29tbWFuZHMKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlcl90b19hZGJfY29udHJvbF9w
b3J0X21hcCA9IHt9CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jb21tYW5kX2Vycm9y
X2hhbmRsZXIoZXJyb3JfbWVzc2FnZSwgc2NyaXB0X2Vycm9yKToKKyAgICAgICAgcHJpbnQgc2Ny
aXB0X2Vycm9yLm91dHB1dAorICAgICAgICBpZiBzY3JpcHRfZXJyb3IuZXhpdF9jb2RlICE9IDA6
CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignJXM6ICVzJyAlIChlcnJvcl9tZXNz
YWdlLCBzY3JpcHRfZXJyb3Iub3V0cHV0KSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
X21ha2VfY29tbWFuZF9lcnJvcl9oYW5kbGVyKGVycm9yX21lc3NhZ2UpOgorICAgICAgICByZXR1
cm4gZnVuY3Rvb2xzLnBhcnRpYWwoRm9yd2FyZGVyLl9jb21tYW5kX2Vycm9yX2hhbmRsZXIsIGVy
cm9yX21lc3NhZ2UpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtpbGxfaG9zdF9kYWVt
b24oY29tbWFuZF9leGVjdXRvciwgaG9zdF9wYXRoX2J1aWxkZXIpOgorICAgICAgICBfbG9nLmRl
YnVnKCdLaWxsaW5nIGhvc3QgZGFlbW9uJykKKyAgICAgICAgRm9yd2FyZGVyLl9ydW5fc2hlbGxf
Y29tbWFuZCgKKyAgICAgICAgICAgIGNvbW1hbmRfZXhlY3V0b3IsIFtGb3J3YXJkZXIucGF0aF90
b19ob3N0X2ZvcndhcmRlcihob3N0X3BhdGhfYnVpbGRlciksICdraWxsLXNlcnZlciddLAorICAg
ICAgICAgICAgRm9yd2FyZGVyLl9tYWtlX2NvbW1hbmRfZXJyb3JfaGFuZGxlcignQ291bGQgbm90
IGtpbGwgaG9zdF9mb3J3YXJkZXInKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYga2ls
bF9kZXZpY2VfZGFlbW9uKGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJvaWRfY29tbWFuZHMsIGxvZ2dl
cik6CisgICAgICAgIGxvZ2dlcignS2lsbGluZyBkZXZpY2UgZGFlbW9uJykKKyAgICAgICAgaWYg
bm90IGFuZHJvaWRfY29tbWFuZHMuZmlsZV9leGlzdHNfb25fZGV2aWNlKEZvcndhcmRlci5ERVZJ
Q0VfRk9SV0FSREVSX1BBVEgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIEZvcndhcmRl
ci5fcnVuX2FkYl9zaGVsbF9jb21tYW5kKAorICAgICAgICAgICAgY29tbWFuZF9leGVjdXRvciwg
YW5kcm9pZF9jb21tYW5kcywgW0ZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BBVEgsICdraWxs
LXNlcnZlciddLAorICAgICAgICAgICAgRm9yd2FyZGVyLl9tYWtlX2NvbW1hbmRfZXJyb3JfaGFu
ZGxlcignQ291bGQgbm90IGtpbGwgZGV2aWNlX2ZvcndhcmRlcicpKQorCisgICAgZGVmIHNldHVw
X3JlZGlyZWN0aW9ucyhzZWxmLCB3b3JrZXJfbnVtYmVyLCBwb3J0X3BhaXJzKToKKyAgICAgICAg
YWRiX2NvbnRyb2xfcG9ydCA9IHNlbGYuX3dvcmtlcl9udW1iZXJfdG9fYWRiX2NvbnRyb2xfcG9y
dF9tYXAuZ2V0KHdvcmtlcl9udW1iZXIpCisgICAgICAgIGlmIG5vdCBhZGJfY29udHJvbF9wb3J0
OgorICAgICAgICAgICAgYWRiX2NvbnRyb2xfcG9ydCA9IHNlbGYuX2FsbG9jYXRlX2FkYl9jb250
cm9sX3BvcnQod29ya2VyX251bWJlcikKKyAgICAgICAgICAgIGlmIG5vdCBhZGJfY29udHJvbF9w
b3J0OgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgYWxs
b2NhdGUgQURCIGNvbnRyb2wgcG9ydCcpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVy
X3RvX2FkYl9jb250cm9sX3BvcnRfbWFwW3dvcmtlcl9udW1iZXJdID0gYWRiX2NvbnRyb2xfcG9y
dAorCisgICAgICAgIGZvcndhcmRfY21kID0gWydmb3J3YXJkJywgJ3RjcDolcycgJSBhZGJfY29u
dHJvbF9wb3J0LCAnbG9jYWxhYnN0cmFjdDolcycgJSBGb3J3YXJkZXIuQURCX0NPTlRST0xfU09D
S0VUXQorICAgICAgICBGb3J3YXJkZXIuX3J1bl9hZGJfY29tbWFuZCgKKyAgICAgICAgICAgIHNl
bGYuX2NvbW1hbmRfZXhlY3V0b3IsIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMsIGZvcndhcmRfY21k
LAorICAgICAgICAgICAgRm9yd2FyZGVyLl9tYWtlX2NvbW1hbmRfZXJyb3JfaGFuZGxlcignQ291
bGQgbm90IGZvcndhcmQgaG9zdCB0byBkZXZpY2UgcG9ydCB1c2luZyBBREInKSkKKworICAgICAg
ICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fZGV2aWNl
X2ZvcndhcmRlcl9wYXRoLCBGb3J3YXJkZXIuREVWSUNFX0ZPUldBUkRFUl9QQVRIKQorICAgICAg
ICBGb3J3YXJkZXIuX3J1bl9hZGJfc2hlbGxfY29tbWFuZCgKKyAgICAgICAgICAgIHNlbGYuX2Nv
bW1hbmRfZXhlY3V0b3IsIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMsIFtGb3J3YXJkZXIuREVWSUNF
X0ZPUldBUkRFUl9QQVRILCBGb3J3YXJkZXIuQURCX0NPTlRST0xfU09DS0VUXSwKKyAgICAgICAg
ICAgIEZvcndhcmRlci5fbWFrZV9jb21tYW5kX2Vycm9yX2hhbmRsZXIoJ0NvdWxkIG5vdCBydW4g
ZGV2aWNlX2ZvcndhcmRlcicpKQorCisgICAgICAgICMgQ29tbWFuZCBmb3JtYXQ6IDxhZGIgY29u
dHJvbCBwb3J0Pjo8ZGV2aWNlIHBvcnQ+Ojxob3N0IHBvcnQ+Ojxob3N0IGFkZHJlc3M+CisgICAg
ICAgIHJlZGlyZWN0aW9uX2NvbW1hbmRzID0gWworICAgICAgICAgICAgJyVkOiVkOiVkOiVzJyAl
IChhZGJfY29udHJvbF9wb3J0LCBkZXZpY2VfcG9ydCwgaG9zdF9wb3J0LCBGb3J3YXJkZXIuSE9T
VF9MT0NBTF9BRERSRVNTKSBmb3IgZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCBpbiBwb3J0X3BhaXJz
XQorICAgICAgICBmb3IgcmVkaXJlY3Rpb25fY29tbWFuZCBpbiByZWRpcmVjdGlvbl9jb21tYW5k
czoKKyAgICAgICAgICAgIEZvcndhcmRlci5fcnVuX3NoZWxsX2NvbW1hbmQoCisgICAgICAgICAg
ICAgICAgc2VsZi5fY29tbWFuZF9leGVjdXRvciwgW3NlbGYuX2hvc3RfZm9yd2FyZGVyX3BhdGgs
IHJlZGlyZWN0aW9uX2NvbW1hbmRdLAorICAgICAgICAgICAgICAgIEZvcndhcmRlci5fbWFrZV9j
b21tYW5kX2Vycm9yX2hhbmRsZXIoJ0NvdWxkIG5vdCBydW4gaG9zdF9mb3J3YXJkZXInKSkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2FsbG9jYXRlX2FkYl9jb250cm9sX3BvcnQod29y
a2VyX251bWJlcik6CisgICAgICAgIHVzZWRfcG9ydHMgPSBGb3J3YXJkZXIuX2dldF91c2VkX3Bv
cnRzKCkKKyAgICAgICAgcG9ydCA9IEZPUldBUkRFUl9DT05UUk9MX1BPUlRfQkVHSU4gKyB3b3Jr
ZXJfbnVtYmVyCisgICAgICAgIHdoaWxlIHBvcnQgPCBGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VO
RCBhbmQgcG9ydCBpbiB1c2VkX3BvcnRzOgorICAgICAgICAgICAgcG9ydCArPSAxCisgICAgICAg
IGlmIHBvcnQgPj0gRk9SV0FSREVSX0NPTlRST0xfUE9SVF9FTkQ6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorICAgICAgICByZXR1cm4gcG9ydAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBfZ2V0X3VzZWRfcG9ydHMoKToKKyAgICAgICAgdXNlZF9wb3J0cyA9IHNldChbXSkKKyAgICAg
ICAgZm9yIGxpbmUgaW4gRmlsZVN5c3RlbSgpLm9wZW5fdGV4dF9maWxlX2Zvcl9yZWFkaW5nKCcv
cHJvYy9uZXQvdGNwJykueHJlYWRsaW5lcygpOgorICAgICAgICAgICAgZmllbGRzID0gbGluZS5z
cGxpdCgpCisgICAgICAgICAgICBpZiBub3QgZmllbGRzIG9yIGZpZWxkc1swXSA9PSAnc2wnOgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2NhbF9hZGRyZXNzID0gZmll
bGRzWzFdCisgICAgICAgICAgICByZW1vdGVfYWRkcmVzcyA9IGZpZWxkc1syXQorICAgICAgICAg
ICAgbG9jYWxfaXAsIGxvY2FsX3BvcnQgPSBsb2NhbF9hZGRyZXNzLnNwbGl0KCc6JykKKyAgICAg
ICAgICAgIHJlbW90ZV9pcCwgcmVtb3RlX3BvcnQgPSByZW1vdGVfYWRkcmVzcy5zcGxpdCgnOicp
CisgICAgICAgICAgICB1c2VkX3BvcnRzLmFkZChsb2NhbF9wb3J0KQorICAgICAgICAgICAgdXNl
ZF9wb3J0cy5hZGQocmVtb3RlX3BvcnQpCisgICAgICAgIHJldHVybiB1c2VkX3BvcnRzCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9ydW5fYWRiX3NoZWxsX2NvbW1hbmQoY29tbWFuZF9l
eGVjdXRvciwgYW5kcm9pZF9jb21tYW5kcywgY21kX2FycmF5LCBlcnJvcl9oYW5kbGVyKToKKyAg
ICAgICAgIyBOb3RlIHRoYXQgdGhlIGV4dHJhICclJyBjaGFyYWN0ZXIgYmVsb3cgaXMgdXNlZCB0
byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHByb2Nlc3MnIG91dHB1dCBpcyBub3QgbmV3bGlu
ZSB0ZXJtaW5hdGVkLgorICAgICAgICBjbWQgPSBhbmRyb2lkX2NvbW1hbmRzLmdldF9hZGJfY29t
bWFuZCgpICsgWydzaGVsbCddICsgWycgJy5qb2luKGNtZF9hcnJheSkgKyAnOyBlY2hvICUkPydd
CisgICAgICAgIGxpbmVzID0gY29tbWFuZF9leGVjdXRvcihjbWQsIGRlY29kZV9vdXRwdXQ9RmFs
c2UsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikuc3BsaXRsaW5lcygpCisgICAgICAgIGxh
c3RfbGluZSA9IGxpbmVzWy0xXQorICAgICAgICBzdGF0dXNfc2VwYXJhdG9yX3BvcyA9IGxhc3Rf
bGluZS5yZmluZCgnJScpCisgICAgICAgIGFzc2VydCBzdGF0dXNfc2VwYXJhdG9yX3BvcyA+PSAw
CisgICAgICAgIHN0YXR1cyA9IGludChsYXN0X2xpbmVbc3RhdHVzX3NlcGFyYXRvcl9wb3MgKyAx
Ol0pCisgICAgICAgIGlmIG5vdCBzdGF0dXNfc2VwYXJhdG9yX3BvczoKKyAgICAgICAgICAgIGxp
bmVzID0gbGluZXNbOi0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMgPSBsaW5l
c1s6LTFdICsgbGFzdF9saW5lWzpzdGF0dXNfc2VwYXJhdG9yX3Bvc10KKyAgICAgICAgcmV0dXJu
IChzdGF0dXMsIGxpbmVzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfcnVuX2FkYl9j
b21tYW5kKGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJvaWRfY29tbWFuZHMsIGNtZF9hcnJheSwgZXJy
b3JfaGFuZGxlcik6CisgICAgICAgIHJldHVybiBjb21tYW5kX2V4ZWN1dG9yKGFuZHJvaWRfY29t
bWFuZHMuZ2V0X2FkYl9jb21tYW5kKCkgKyBjbWRfYXJyYXksIGRlY29kZV9vdXRwdXQ9RmFsc2Us
IGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgX3J1bl9zaGVsbF9jb21tYW5kKGNvbW1hbmRfZXhlY3V0b3IsIGNtZF9hcnJheSwgZXJyb3Jf
aGFuZGxlcik6CisgICAgICAgIHJldHVybiBjb21tYW5kX2V4ZWN1dG9yKGNtZF9hcnJheSwgZGVj
b2RlX291dHB1dD1GYWxzZSwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBwYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoaG9zdF9wYXRoX2J1
aWxkZXIpOgorICAgICAgICByZXR1cm4gaG9zdF9wYXRoX2J1aWxkZXIoJ2RldmljZV9mb3J3YXJk
ZXInKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwYXRoX3RvX2hvc3RfZm9yd2FyZGVy
KGhvc3RfcGF0aF9idWlsZGVyKToKKyAgICAgICAgcmV0dXJuIGhvc3RfcGF0aF9idWlsZGVyKCdo
b3N0X2ZvcndhcmRlcicpCisKIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJp
dmVyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxf
dGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2UpOgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWRE
cml2ZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBu
b190aW1lb3V0KQpAQCAtNDg1LDExICs2NzMsMTIgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJp
dmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzZWxmLl9lcnJfZmlmb19wYXRoID0gREVWSUNF
X0ZJRk9fUEFUSCArICdzdGRlcnIuZmlmbycKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJv
Y2VzcyA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUKLSAg
ICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHNlbGYuX2hhc19z
ZXR1cCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9ycyA9IHt9CiAgICAg
ICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBwb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCh3b3JrZXJf
bnVtYmVyKQogICAgICAgICBzZWxmLl9hZGJfY29tbWFuZF9iYXNlID0gTm9uZQorICAgICAgICBz
ZWxmLl9hbmRyb2lkX2NvbW1hbmRzID0gQW5kcm9pZENvbW1hbmRzKAorICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kLCBzZWxmLl9hZGJfY29tbWFuZCgpLCBzZWxm
Ll9wb3J0Ll9idWlsZF9wYXRoLCBzZWxmLl9sb2dfZGVidWcpCiAKICAgICAgICAgIyBGSVhNRTog
SWYgd2UgdGF1Z2h0IFByb2ZpbGVGYWN0b3J5IGFib3V0ICJ0YXJnZXQiIGRldmljZXMgd2UgY291
bGQKICAgICAgICAgIyBqdXN0IHVzZSB0aGUgbG9naWMgaW4gRHJpdmVyIGluc3RlYWQgb2YgZHVw
bGljYXRpbmcgaXQgaGVyZS4KQEAgLTQ5Nyw3ICs2ODYsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJv
aWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICBzeW1mc19wYXRoID0gc2VsZi5f
ZmluZF9vcl9jcmVhdGVfc3ltZnMoKQogICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHBh
c3MgdGhpcyBzb21lIHNvcnQgb2YgIkJyaWRnZSIgb2JqZWN0IGFic3RyYWN0aW9uIGFyb3VuZCBB
REIgaW5zdGVhZCBvZiBhIHBhdGgvZGV2aWNlIHBhaXIuCiAgICAgICAgICAgICBzZWxmLl9wcm9m
aWxlciA9IEFuZHJvaWRQZXJmKHNlbGYuX3BvcnQuaG9zdCwgc2VsZi5fcG9ydC5fcGF0aF90b19k
cml2ZXIoKSwgc2VsZi5fcG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpLAotICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnQucGF0aF90b19hZGIoKSwgc2VsZi5fZGV2aWNlX3NlcmlhbCwgc3ltZnNfcGF0
aClcCisgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcywgc3ltZnNfcGF0aClc
CiAgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIGFuZCBz
aG91bGQgYmUgbW92ZWQgdG8gUG9ydC5jaGVja19zeXNfZGVwcwogICAgICAgICAgICAgIyBvbmNl
IHdlIGhhdmUgYW4gYWJzdHJhY3Rpb24gYXJvdW5kIGFuIGFkYl9wYXRoL2RldmljZV9zZXJpYWwg
cGFpciB0byBtYWtlIGl0CiAgICAgICAgICAgICAjIGVhc3kgdG8gbWFrZSB0aGVzZSBjbGFzcyBt
ZXRob2RzIG9uIEFuZHJvaWRQZXJmLgpAQCAtNTM1LDM3ICs3MjQsMzAgQEAgY2xhc3MgQ2hyb21p
dW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogCiAgICAgICAgIHJldHVybiBzeW1mc19w
YXRoCiAKLSAgICBkZWYgX3NldHVwX21kNXN1bV9hbmRfcHVzaF9kYXRhX2lmX25lZWRlZChzZWxm
KToKLSAgICAgICAgc2VsZi5fbWQ1c3VtX3BhdGggPSBzZWxmLl9wb3J0LnBhdGhfdG9fbWQ1c3Vt
KCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShNRDVTVU1fREVW
SUNFX1BBVEgpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYu
X21kNXN1bV9wYXRoLCBNRDVTVU1fREVWSUNFX1BBVEgpOgotICAgICAgICAgICAgICAgIHJhaXNl
IEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgcHVzaCBtZDVzdW0gdG8gZGV2aWNlJykKLQotICAg
ICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQotICAgICAgICBzZWxmLl9wdXNoX2ZvbnRzKCkK
LSAgICAgICAgc2VsZi5fcHVzaF90ZXN0X3Jlc291cmNlcygpCi0KICAgICBkZWYgX3NldHVwX3Rl
c3Qoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2hhc19zZXR1cDoKICAgICAgICAgICAgIHJldHVy
bgogCiAgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWRiX2FzX3Jvb3QoKQotICAgICAgICBzZWxmLl9z
ZXR1cF9tZDVzdW1fYW5kX3B1c2hfZGF0YV9pZl9uZWVkZWQoKQotICAgICAgICBzZWxmLl9oYXNf
c2V0dXAgPSBUcnVlCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMuc2V0dXBfbWQ1c3Vt
KCkKKyAgICAgICAgc2VsZi5fcHVzaF9kYXRhX2lmX25lZWRlZCgpCiAgICAgICAgIHNlbGYuX3Nl
dHVwX3BlcmZvcm1hbmNlKCkKKyAgICAgICAgc2VsZi5faGFzX3NldHVwID0gVHJ1ZQogCiAgICAg
ICAgICMgUmVxdWlyZWQgYnkgd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXJGaWxlUGF0
aCgpLgogICAgICAgICAjIE90aGVyIGRpcmVjdG9yaWVzIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0
aWNhbGx5IGJ5IGFkYiBwdXNoLgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hyb21lJ10pCisg
ICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
bWtkaXInLCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZSddKQogCiAgICAg
ICAgICMgQWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCB0byBmdWxseSBhY2Nlc3MgdGhlIGRp
cmVjdG9yeS4KICAgICAgICAgIyBUaGUgbmF0aXZlIGNvZGUgbmVlZHMgdGhlIHBlcm1pc3Npb24g
dG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzIGFuZCBjcmVhdGUgcGlwZXMgaGVyZS4KLSAgICAgICAg
c2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfRFJU
X0RJUl0pCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NobW9kJywg
Jzc3NycsIERFVklDRV9EUlRfRElSXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9EUlRfRElSXSkK
KyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0pCiAKICAgICAgICAgIyBEZWxldGUgdGhl
IGRpc2sgY2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNsZWFuIHRlc3QgcnVuLgogICAgICAgICAj
IFRoaXMgaXMgbGlrZSB3aGF0J3MgZG9uZSBpbiBDaHJvbWl1bVBvcnQuc2V0dXBfdGVzdF9ydW4g
YnV0IG9uIHRoZSBkZXZpY2UuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQorICAgICAgICBzZWxmLl9hbmRyb2lk
X2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9D
QUNIRV9ESVJdKQorCisgICAgICAgIEZvcndhcmRlci5raWxsX2RldmljZV9kYWVtb24oc2VsZi5f
cG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kLCBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLCBzZWxm
Ll9sb2dfZGVidWcpCiAKICAgICBkZWYgX2xvZ19lcnJvcihzZWxmLCBtZXNzYWdlKToKICAgICAg
ICAgX2xvZy5lcnJvcignWyVzXSAlcycgJSAoc2VsZi5fZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSkp
CkBAIC01NzYsODUgKzc1OCw1MCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6CiAgICAgZGVmIF9hYm9ydChzZWxmLCBtZXNzYWdlKToKICAgICAgICAgcmFpc2Ug
QXNzZXJ0aW9uRXJyb3IoJ1slc10gJXMnICUgKHNlbGYuX2RldmljZV9zZXJpYWwsIG1lc3NhZ2Up
KQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVz
dW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgotICAgICAgICBhc3NlcnQgbWQ1c3VtX291dHB1dAot
ICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291
dHB1dF0KLQotICAgIGRlZiBfcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRl
dmljZV9maWxlKToKLSAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGhvc3RfZmlsZSkKLSAg
ICAgICAgZGV2aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJhY3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291
dHB1dCgKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKHNl
bGYuX2FkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJywgTUQ1U1VNX0RFVklDRV9QQVRILCBkZXZpY2Vf
ZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQpCi0gICAgICAgIGhvc3RfaGFzaGVzID0gc2Vs
Zi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAotICAgICAgICAgICAgICAgIHNl
bGYuX3BvcnQuaG9zdC5leGVjdXRpdmUucG9wZW4oYXJncz1bJyVzX2hvc3QnICUgc2VsZi5fbWQ1
c3VtX3BhdGgsIGhvc3RfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQpCi0gICAgICAgIGlm
IGhvc3RfaGFzaGVzIGFuZCBkZXZpY2VfaGFzaGVzID09IGhvc3RfaGFzaGVzOgotICAgICAgICAg
ICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKGhvc3RfZmlsZSwgZGV2aWNl
X2ZpbGUpCisgICAgZGVmIF9wdXNoX2RhdGFfaWZfbmVlZGVkKHNlbGYpOgorICAgICAgICBzZWxm
Ll9wdXNoX2V4ZWN1dGFibGUoKQorICAgICAgICBzZWxmLl9wdXNoX2ZvbnRzKCkKKyAgICAgICAg
c2VsZi5fcHVzaF90ZXN0X3Jlc291cmNlcygpCiAKICAgICBkZWYgX3B1c2hfZXhlY3V0YWJsZShz
ZWxmKToKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LnBhdGhf
dG9fZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkKLSAgICAgICAgc2VsZi5fcHVz
aF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJlZS5w
YWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUucGFrJykKLSAgICAgICAgc2Vs
Zi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVuZGVy
VHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWVfcmVzb3Vy
Y2VzJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJv
aWRfbWFpbl9mb250cy54bWwnKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNl
bGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJyksIERFVklD
RV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJykKLSAgICAgICAgc2VsZi5f
cnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQUF9QQUNLQUdFXSkKKyAgICAgICAg
c2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQucGF0
aF90b19kZXZpY2VfZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkKKyAgICAgICAg
c2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1
aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlLnBhaycpLCBERVZJQ0VfRFJUX0RJUiArICdEdW1wUmVu
ZGVyVHJlZS5wYWsnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnB1c2hfZmlsZV9p
Zl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2Vz
JyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpCisgICAgICAg
IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2Fu
ZHJvaWRfbWFpbl9mb250cy54bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnB1
c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9mYWxsYmFj
a19mb250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9mYWxsYmFja19mb250cy54
bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3Vu
aW5zdGFsbCcsIERSVF9BUFBfUEFDS0FHRV0pCiAgICAgICAgIGRydF9ob3N0X3BhdGggPSBzZWxm
Ll9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpCi0gICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5f
cnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQorICAgICAgICBpbnN0
YWxsX3Jlc3VsdCA9IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnaW5z
dGFsbCcsIGRydF9ob3N0X3BhdGhdKQogICAgICAgICBpZiBpbnN0YWxsX3Jlc3VsdC5maW5kKCdT
dWNjZXNzJykgPT0gLTE6CiAgICAgICAgICAgICBzZWxmLl9hYm9ydCgnRmFpbGVkIHRvIGluc3Rh
bGwgJXMgb250byBkZXZpY2U6ICVzJyAlIChkcnRfaG9zdF9wYXRoLCBpbnN0YWxsX3Jlc3VsdCkp
CiAKICAgICBkZWYgX3B1c2hfZm9udHMoc2VsZik6CiAgICAgICAgIHNlbGYuX2xvZ19kZWJ1Zygn
UHVzaGluZyBmb250cycpCiAgICAgICAgIHBhdGhfdG9fYWhlbV9mb250ID0gc2VsZi5fcG9ydC5f
YnVpbGRfcGF0aCgnQUhFTV9fX18uVFRGJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25l
ZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVWSUNFX0ZPTlRTX0RJUiArICdBSEVNX19fXy5UVEYn
KQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQocGF0
aF90b19haGVtX2ZvbnQsIERFVklDRV9GT05UU19ESVIgKyAnQUhFTV9fX18uVFRGJykKICAgICAg
ICAgZm9yIChob3N0X2RpcnMsIGZvbnRfZmlsZSwgcGFja2FnZSkgaW4gSE9TVF9GT05UX0ZJTEVT
OgogICAgICAgICAgICAgZm9yIGhvc3RfZGlyIGluIGhvc3RfZGlyczoKICAgICAgICAgICAgICAg
ICBob3N0X2ZvbnRfcGF0aCA9IGhvc3RfZGlyICsgZm9udF9maWxlCiAgICAgICAgICAgICAgICAg
aWYgc2VsZi5fcG9ydC5fY2hlY2tfZmlsZV9leGlzdHMoaG9zdF9mb250X3BhdGgsICcnLCBsb2dn
aW5nPUZhbHNlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRl
ZChob3N0X2ZvbnRfcGF0aCwgREVWSUNFX0ZPTlRTX0RJUiArIGZvbnRfZmlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVkKGhv
c3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElSICsgZm9udF9maWxlKQogCiAgICAgZGVmIF9w
dXNoX3Rlc3RfcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1B1c2hp
bmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBmb3IgcmVzb3VyY2UgaW4gVEVTVF9SRVNPVVJD
RVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5f
cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnLycgKyByZXNvdXJjZSwgREVWSUNFX0xBWU9VVF9U
RVNUU19ESVIgKyByZXNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMu
cHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICcvJyAr
IHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJlc291cmNlKQogCiAgICAgZGVm
IF9yZXN0YXJ0X2FkYl9hc19yb290KHNlbGYpOgotICAgICAgICBvdXRwdXQgPSBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydyb290J10pCisgICAgICAgIG91dHB1dCA9IHNlbGYuX2FuZHJvaWRfY29t
bWFuZHMucnVuX2FkYl9jb21tYW5kKFsncm9vdCddKQogICAgICAgICBpZiAnYWRiZCBpcyBhbHJl
YWR5IHJ1bm5pbmcgYXMgcm9vdCcgaW4gb3V0cHV0OgogICAgICAgICAgICAgcmV0dXJuCiAgICAg
ICAgIGVsaWYgbm90ICdyZXN0YXJ0aW5nIGFkYmQgYXMgcm9vdCcgaW4gb3V0cHV0OgogICAgICAg
ICAgICAgc2VsZi5fbG9nX2Vycm9yKCdVbnJlY29nbml6ZWQgb3V0cHV0IGZyb20gYWRiIHJvb3Q6
ICVzJyAlIG91dHB1dCkKIAogICAgICAgICAjIFJlZ2FyZGxlc3MgdGhlIG91dHB1dCwgZ2l2ZSB0
aGUgZGV2aWNlIGEgbW9tZW50IHRvIGNvbWUgYmFjayBvbmxpbmUuCi0gICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3dhaXQtZm9yLWRldmljZSddKQotCi0gICAgZGVmIF9ydW5fYWRiX2Nv
bW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICBzZWxmLl9sb2df
ZGVidWcoJ1J1biBhZGIgY29tbWFuZDogJyArIHN0cihjbWQpKQotICAgICAgICBpZiBpZ25vcmVf
ZXJyb3I6Ci0gICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZl
Lmlnbm9yZV9lcnJvcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9
IE5vbmUKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KHNlbGYuX2FkYl9jb21tYW5kKCkgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikK
LSAgICAgICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBv
ZiBjb21tYW5kcyBsaWtlICdhZGIgbG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90b21ic3RvbmVzL3Rv
bWJzdG9uZTAxJwotICAgICAgICAjIHdob3NlIG91dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQg
aW4gbGF0ZXIgbG9ncy4KLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdSdW4gYWRiIHJlc3VsdDog
JyArIHJlc3VsdFs6ODBdKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgX2xpbmtf
ZGV2aWNlX2ZpbGUoc2VsZiwgZnJvbV9maWxlLCB0b19maWxlLCBpZ25vcmVfZXJyb3I9RmFsc2Up
OgotICAgICAgICAjIHJtIHRvX2ZpbGUgZmlyc3QgdG8gbWFrZSBzdXJlIHRoYXQgbG4gc3VjY2Vl
ZHMuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgdG9fZmls
ZV0sIGlnbm9yZV9lcnJvcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJ2xuJywgJy1zJywgZnJvbV9maWxlLCB0b19maWxlXSwgaWdub3JlX2Vycm9yKQot
Ci0gICAgZGVmIF9wdXNoX3RvX2RldmljZShzZWxmLCBob3N0X3BhdGgsIGRldmljZV9wYXRoLCBp
Z25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5k
KFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGhdLCBpZ25vcmVfZXJyb3IpCi0KLSAgICBk
ZWYgX3B1bGxfZnJvbV9kZXZpY2Uoc2VsZiwgZGV2aWNlX3BhdGgsIGhvc3RfcGF0aCwgaWdub3Jl
X2Vycm9yPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1
bGwnLCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoXSwgaWdub3JlX2Vycm9yKQorICAgICAgICBzZWxm
Ll9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3dhaXQtZm9yLWRldmljZSddKQog
CiAgICAgZGVmIF9nZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYpOgotICAgICAgICB0b21ic3RvbmVz
ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCAnLW4nLCAnL2RhdGEvdG9t
YnN0b25lcyddKQorICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsICctbicsICcvZGF0YS90b21ic3RvbmVzJ10p
CiAgICAgICAgIGlmIG5vdCB0b21ic3RvbmVzIG9yIHRvbWJzdG9uZXMuc3RhcnRzd2l0aCgnL2Rh
dGEvdG9tYnN0b25lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpOgogICAgICAgICAgICAg
c2VsZi5fbG9nX2Vycm9yKCdEUlQgY3Jhc2hlZCwgYnV0IG5vIHRvbWJzdG9uZSBmb3VuZCEnKQog
ICAgICAgICAgICAgcmV0dXJuICcnCkBAIC02NzUsMjMgKzgyMiwyMyBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgc3RhY2sgdHJhY2UgaW50
byBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCwgaWYgbmVlZGVkLgogICAgICAgICAjIEl0IHRha2Vz
IGEgbG9uZyB0aW1lLCBzbyBkb24ndCBkbyBpdCBoZXJlLgogICAgICAgICByZXR1cm4gJyVzXG4l
cycgJSAoJyAnLmpvaW4obGFzdF90b21ic3RvbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9kYXRhL3RvbWJzdG9u
ZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsICcv
ZGF0YS90b21ic3RvbmVzLycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQogCiAgICAgZGVmIF9nZXRf
bG9nY2F0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnbG9n
Y2F0JywgJy1kJywgJy12JywgJ3RocmVhZHRpbWUnXSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Fu
ZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1kJywgJy12JywgJ3Ro
cmVhZHRpbWUnXSkKIAogICAgIGRlZiBfc2V0dXBfcGVyZm9ybWFuY2Uoc2VsZik6CiAgICAgICAg
ICMgRGlzYWJsZSBDUFUgc2NhbGluZyBhbmQgZHJvcCByYW0gY2FjaGUgdG8gcmVkdWNlIG5vaXNl
IGluIHRlc3RzCiAgICAgICAgIGlmIG5vdCBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnM6Ci0gICAg
ICAgICAgICBnb3Zlcm5vcl9maWxlcyA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywg
J2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCisgICAgICAgICAgICBnb3Zlcm5vcl9m
aWxlcyA9IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
bHMnLCBTQ0FMSU5HX0dPVkVSTk9SU19QQVRURVJOXSkKICAgICAgICAgICAgIGlmIGdvdmVybm9y
X2ZpbGVzLmZpbmQoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSA9PSAtMToKICAgICAgICAg
ICAgICAgICBmb3IgZmlsZSBpbiBnb3Zlcm5vcl9maWxlcy5zcGxpdCgpOgotICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnNbZmlsZV0gPSBzZWxmLl9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSkuc3RyaXAoKQotICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgJ3BlcmZvcm1hbmNlJywg
Jz4nLCBmaWxlXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3Jz
W2ZpbGVdID0gc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdjYXQnLCBmaWxlXSkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lk
X2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCAncGVyZm9ybWFuY2Un
LCAnPicsIGZpbGVdKQogCiAgICAgZGVmIF90ZWFyZG93bl9wZXJmb3JtYW5jZShzZWxmKToKICAg
ICAgICAgZm9yIGZpbGUsIG9yaWdpbmFsX2NvbnRlbnQgaW4gc2VsZi5fb3JpZ2luYWxfZ292ZXJu
b3JzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdlY2hvJywgb3JpZ2luYWxfY29udGVudCwgJz4nLCBmaWxlXSkKKyAgICAgICAgICAgIHNlbGYu
X2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobycsIG9yaWdp
bmFsX2NvbnRlbnQsICc+JywgZmlsZV0pCiAgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9y
cyA9IHt9CiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4pOgpAQCAtNzA4LDEwICs4NTUsNiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgVGhlIGNvbW1hbmQgbGluZSBwYXNzZWQgdG8g
dGhlIERSVCBwcm9jZXNzIGlzIHJldHVybmVkIGJ5IF9kcnRfY21kX2xpbmUoKSBpbnN0ZWFkLgog
ICAgICAgICByZXR1cm4gc2VsZi5fYWRiX2NvbW1hbmQoKSArIFsnc2hlbGwnXQogCi0gICAgZGVm
IF9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxlX3BhdGgpOgotICAgICAgICBh
c3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCi0gICAgICAgIHJldHVybiBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAo
KSA9PSBmdWxsX2ZpbGVfcGF0aAotCiAgICAgZGVmIF9kcnRfY21kX2xpbmUoc2VsZiwgcGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICByZXR1cm4gZHJpdmVyLkRyaXZlci5jbWRf
bGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykgKyBbJy0tY3JlYXRlLXN0ZGlu
LWZpZm8nLCAnLS1zZXBhcmF0ZS1zdGRlcnItZmlmbyddCiAKQEAgLTcyNCwxNyArODY3LDE3IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgcmV0
dXJuIEZhbHNlCiAKICAgICBkZWYgX2FsbF9waXBlc19jcmVhdGVkKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gKHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFu
ZAotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRf
Zmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZp
Y2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisgICAgICAgIHJldHVybiAoc2VsZi5fYW5kcm9pZF9j
b21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKKyAg
ICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2Rldmlj
ZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lk
X2NvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKIAog
ICAgIGRlZiBfcmVtb3ZlX2FsbF9waXBlcyhzZWxmKToKICAgICAgICAgZm9yIGZpbGUgaW4gW3Nl
bGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwgc2VsZi5fZXJyX2ZpZm9fcGF0
aF06Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIGZp
bGVdKQorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQo
WydzaGVsbCcsICdybScsIGZpbGVdKQogCi0gICAgICAgIHJldHVybiAobm90IHNlbGYuX2ZpbGVf
ZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAotICAgICAgICAgICAgICAg
IG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5k
Ci0gICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9l
cnJfZmlmb19wYXRoKSkKKyAgICAgICAgcmV0dXJuIChub3Qgc2VsZi5fYW5kcm9pZF9jb21tYW5k
cy5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKKyAgICAgICAg
ICAgICAgICBub3Qgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuX2FuZHJv
aWRfY29tbWFuZHMuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKQog
CiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCwgc3RvcF93aGVuX2RvbmUpOgog
ICAgICAgICBiYXNlID0gc2VsZi5fcG9ydC5sb29rdXBfdmlydHVhbF90ZXN0X2Jhc2UoZHJpdmVy
X2lucHV0LnRlc3RfbmFtZSkKQEAgLTc2OCwxMyArOTExLDExIEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lk
RHJpdmVyLCBzZWxmKS5fc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCiAKICAgICAg
ICAgc2VsZi5fbG9nX2RlYnVnKCdTdGFydGluZyBmb3J3YXJkZXInKQotICAgICAgICBzZWxmLl9m
b3J3YXJkZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9y
KAotICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ0ZvcndhcmRlcicsIHNlbGYuX2FkYl9jb21tYW5k
KCkgKyBbJ3NoZWxsJywgJyVzIC1EICVzJyAlIChERVZJQ0VfRk9SV0FSREVSX1BBVEgsIEZPUldB
UkRfUE9SVFMpXSkKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3Muc3RhcnQoKQotCi0g
ICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQotICAgICAgICBz
ZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxmLl9jbWRfbGluZSAr
IFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKLSAgICAgICAgc3RhcnRfcmVzdWx0ID0gc2VsZi5f
cnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnc3RhcnQnLCAnLWUnLCAnUnVuSW5TdWJU
aHJlYWQnLCAnLW4nLCBEUlRfQUNUSVZJVFlfRlVMTF9OQU1FXSkKKyAgICAgICAgZm9yd2FyZGVy
ID0gRm9yd2FyZGVyKHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZCwgc2VsZi5fcG9y
dC5fYnVpbGRfcGF0aCwgc2VsZi5fYW5kcm9pZF9jb21tYW5kcykKKyAgICAgICAgZm9yd2FyZGVy
LnNldHVwX3JlZGlyZWN0aW9ucyhzZWxmLl93b3JrZXJfbnVtYmVyLCBbKHBvcnQsIHBvcnQpIGZv
ciBwb3J0IGluIEZPUldBUkRfUE9SVFNdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRz
LnJ1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQorICAgICAgICBzZWxmLl9hbmRyb2lk
X2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuX2NtZF9s
aW5lICsgWyc+JywgQ09NTUFORF9MSU5FX0ZJTEVdKQorICAgICAgICBzdGFydF9yZXN1bHQgPSBz
ZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ3N0
YXJ0JywgJy1lJywgJ1J1bkluU3ViVGhyZWFkJywgJy1uJywgRFJUX0FDVElWSVRZX0ZVTExfTkFN
RV0pCiAgICAgICAgIGlmIHN0YXJ0X3Jlc3VsdC5maW5kKCdFeGNlcHRpb24nKSAhPSAtMToKICAg
ICAgICAgICAgIHNlbGYuX2xvZ19lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVl
IGFwcGxpY2F0aW9uLiBFeGNlcHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQogICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCkBAIC04NDcsMTEgKzk4OCwxMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRE
cml2ZXIoZHJpdmVyLkRyaXZlcik6CiAKICAgICBkZWYgX3BpZF9vbl90YXJnZXQoc2VsZik6CiAg
ICAgICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhh
biBncmVwcGluZyBwcyBvdXRwdXQhCi0gICAgICAgIHBzX291dHB1dCA9IHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pCisgICAgICAgIHBzX291dHB1dCA9IHNlbGYuX2FuZHJv
aWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncHMnXSkKICAgICAgICAgcmV0
dXJuIHNlbGYuX3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KHBzX291dHB1dCwgRFJUX0FQUF9Q
QUNLQUdFKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQorICAg
ICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2Ft
JywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQogCiAgICAgICAgIGlmIHNlbGYuX3Jl
YWRfc3Rkb3V0X3Byb2Nlc3M6CiAgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNz
LmtpbGwoKQpAQCAtODYxLDExICsxMDAyLDkgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVy
KGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzcy5r
aWxsKCkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MgPSBOb25lCiAKLSAg
ICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5zdG9wKCkKKyAgICAgICAg
Rm9yd2FyZGVyLmtpbGxfZGV2aWNlX2RhZW1vbihzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2Nv
bW1hbmQsIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMsIHNlbGYuX2xvZ19kZWJ1ZykKIAotICAgICAg
ICBpZiBzZWxmLl9mb3J3YXJkZXJfcHJvY2VzczoKLSAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRl
cl9wcm9jZXNzLmtpbGwoKQotICAgICAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBO
b25lCisgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuc3RvcCgpCiAK
ICAgICAgICAgaWYgc2VsZi5faGFzX3NldHVwOgogICAgICAgICAgICAgaWYgbm90IENocm9taXVt
QW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQoc2VsZi5fcmVtb3ZlX2FsbF9waXBlcywg
RFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179921</attachid>
            <date>2012-12-18 04:40:28 -0800</date>
            <delta_ts>2012-12-19 04:58:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121218133745.patch</filename>
            <type>text/plain</type>
            <size>39178</size>
            <attacher name="Philippe Liard">pliard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3OTM5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2M3MzIzYjM0MGU2NzUyZjk1MDQ5MzE5OTM1MDA4Nzk5
ZjRkZjYwZi4uN2Y1NTAwYTg2ZTMyNGVlNDVkNzQ1NjhiZmQ4NWI2MDVmMmNmNjA5NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkx
IEBACisyMDEyLTEyLTE4ICBQaGlsaXBwZSBMaWFyZCAgPHBsaWFyZEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgVXNlIGZvcndhcmRlcjIgaW4gQ2hyb21lIGZvciBBbmRyb2lkIGxheW91dCB0ZXN0
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTg4
CisKKyAgICAgICAgQ2hyb21pdW0ncyBkZXZpY2UgdG8gaG9zdCBmb3J3YXJkZXIgaXMgZGVwcmVj
YXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkCisgICAgICAgIHNvb24uIEl0IHdhcyByZXBsYWNlZCB3
aXRoIGZvcndhcmRlcjIgd2hpY2ggaXMgYWJsZSB0byBydW4gb24KKyAgICAgICAgbm9uLXJvb3Rl
ZCBkZXZpY2VzLiBUaGUgd2F5IGZvcndhcmRlcjIgaXMgc2V0dXAvdGVhcmVkIGRvd24gaXMKKyAg
ICAgICAgZGlmZmVyZW50IHdoaWNoIGV4cGxhaW5zIHdoeSB0aGUgUHl0aG9uIGxheWVyIGluIFdl
YktpdCBoYXMgdG8gYmUKKyAgICAgICAgdXBkYXRlZC4KKworICAgICAgICBJbiBwYXJ0aWN1bGFy
LCBmb3J3YXJkZXIyIGNvbnNpc3RzIG9mIHR3byBwcm9ncmFtcyAoZGFlbW9ucyk6CisgICAgICAg
IC0gaG9zdF9mb3J3YXJkZXI6IGRhZW1vbiBydW5uaW5nIG9uIHRoZSBob3N0CisgICAgICAgIC0g
ZGV2aWNlX2ZvcndhcmRlcjogZGFlbW9uIHJ1bm5pbmcgb24gdGhlIGRldmljZXMgYXR0YWNoZWQg
dG8gdGhlIGhvc3QKKworICAgICAgICBkZXZpY2VfZm9yd2FyZGVyIG11c3QgYmUgc3RhcnRlZCBv
biB0aGUgZGV2aWNlIGJlZm9yZSBob3N0X2ZvcndhcmRlcjoKKyAgICAgICAgJCAvZGF0YS9sb2Nh
bC90bXAvZGV2aWNlX2ZvcndhcmRlciBjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisgICAgICAg
ICdjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcicgaXMgdGhlIG5hbWUgb2YgdGhlIFVuaXggRG9tYWlu
IFNvY2tldCBib3VuZAorICAgICAgICBieSB0aGUgZGFlbW9uIG9uIHRoZSBkZXZpY2Ugd2hpY2gg
aXMgdXNlZCBieSB0aGUgaG9zdCB0byBjb21tdW5pY2F0ZQorICAgICAgICB3aXRoIGl0LgorCisg
ICAgICAgIFRoZW4gdGhlIGhvc3QgbXVzdCBzZXR1cCBhIGhvc3QgdG8gZGV2aWNlIHJlZGlyZWN0
aW9uIHNvIHRoYXQKKyAgICAgICAgaG9zdF9mb3J3YXJkZXIgY2FuIHRhbGsgdG8gdGhlIGRldmlj
ZV9mb3J3YXJkZXIncyBVbml4IERvbWFpbiBTb2NrZXQKKyAgICAgICAgdGhyb3VnaCBhIFRDUCBz
b2NrZXQgKHBvcnQgODAwMCBpbiB0aGUgZXhhbXBsZSBiZWxvdyk6CisgICAgICAgICQgYWRiIGZv
cndhcmQgdGNwOjgwMDAgbG9jYWxhYnN0cmFjdDpjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisg
ICAgICAgIFRoZW4gdGhlIGhvc3QgY2FuIHNwZWNpZnkgd2hpY2ggcG9ydCBtdXN0IGJlIGZvcndh
cmRlZCBmcm9tIHRoZSBkZXZpY2UKKyAgICAgICAgdG8gdGhlIGhvc3QgKGRldmljZSBwb3J0IDgw
ODAgdG8gaG9zdCBwb3J0IDgwODEgaW4gdGhlIGV4YW1wbGUgYmVsb3cpOgorICAgICAgICAkIGhv
c3RfZm9yd2FyZGVyIDgwMDA6ODA4MDo4MDgxOjEyNy4wLjAuMQorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0LnNldHVwX3Rlc3RfcnVuKToKKyAgICAgICAg
KENocm9taXVtQW5kcm9pZFBvcnQuY2hlY2tfYnVpbGQpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkUG9ydC5wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9p
ZFBvcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX2RldmljZV9mb3J3
YXJkZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX21kNXN1bSk6Cisg
ICAgICAgIChBbmRyb2lkUGVyZi5fX2luaXRfXyk6CisgICAgICAgIChBbmRyb2lkUGVyZi5jaGVj
a19jb25maWd1cmF0aW9uKToKKyAgICAgICAgKGF0dGFjaF90b19waWQpOgorICAgICAgICAocHJv
ZmlsZV9hZnRlcl9leGl0KToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcyk6CisgICAgICAgIChB
bmRyb2lkQ29tbWFuZHMuX19pbml0X18pOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnNldHVw
X21kNXN1bSk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuYWRiX2NvbW1hbmQpOgorICAgICAg
ICAoQW5kcm9pZENvbW1hbmRzLl9ydW5fY29tbWFuZCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFu
ZHMucnVuX2FkYl9jb21tYW5kKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5maWxlX2V4aXN0
c19vbl9kZXZpY2UpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1c2hfdG9fZGV2aWNlKToK
KyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5wdWxsX2Zyb21fZGV2aWNlKToKKyAgICAgICAgKEFu
ZHJvaWRDb21tYW5kcy5fbWQ1c3VtX2Vycm9yX2hhbmRsZXIpOgorICAgICAgICAoQW5kcm9pZENv
bW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLl9l
eHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQpOgorICAgICAgICAoRm9yd2FyZGVyKToK
KyAgICAgICAgKEZvcndhcmRlci5fX2luaXRfXyk6CisgICAgICAgIChGb3J3YXJkZXIuX2NvbW1h
bmRfZXJyb3JfaGFuZGxlcik6CisgICAgICAgIChGb3J3YXJkZXIuX21ha2VfY29tbWFuZF9lcnJv
cl9oYW5kbGVyKToKKyAgICAgICAgKEZvcndhcmRlci5raWxsX2hvc3RfZGFlbW9uKToKKyAgICAg
ICAgKEZvcndhcmRlci5raWxsX2RldmljZV9kYWVtb24pOgorICAgICAgICAoRm9yd2FyZGVyLnNl
dHVwX3JlZGlyZWN0aW9ucyk6CisgICAgICAgIChGb3J3YXJkZXIuX2FsbG9jYXRlX2FkYl9jb250
cm9sX3BvcnQpOgorICAgICAgICAoRm9yd2FyZGVyLl9nZXRfdXNlZF9wb3J0cyk6CisgICAgICAg
IChGb3J3YXJkZXIuX3J1bl9hZGJfc2hlbGxfY29tbWFuZCk6CisgICAgICAgIChGb3J3YXJkZXIu
X3J1bl9hZGJfY29tbWFuZCk6CisgICAgICAgIChGb3J3YXJkZXIuX3J1bl9zaGVsbF9jb21tYW5k
KToKKyAgICAgICAgKEZvcndhcmRlci5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIpOgorICAgICAg
ICAoRm9yd2FyZGVyLnBhdGhfdG9faG9zdF9mb3J3YXJkZXIpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5f
ZmluZF9vcl9jcmVhdGVfc3ltZnMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9z
ZXR1cF90ZXN0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF9kYXRhX2lm
X25lZWRlZCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1c2hfZXhlY3V0YWJs
ZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3B1c2hfZm9udHMpOgorICAgICAg
ICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNoX3Rlc3RfcmVzb3VyY2VzKToKKyAgICAgICAg
KENocm9taXVtQW5kcm9pZERyaXZlci5fcmVzdGFydF9hZGJfYXNfcm9vdCk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIuX2dldF9sYXN0X3N0YWNrdHJhY2UpOgorICAgICAgICAoQ2hy
b21pdW1BbmRyb2lkRHJpdmVyLl9nZXRfbG9nY2F0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9p
ZERyaXZlci5fc2V0dXBfcGVyZm9ybWFuY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl90ZWFyZG93bl9wZXJmb3JtYW5jZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2
ZXIuY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9hbGxfcGlwZXNf
Y3JlYXRlZCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3JlbW92ZV9hbGxfcGlw
ZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydF9vbmNlKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcGlkX29uX3RhcmdldCk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuc3RvcCk6CisKIDIwMTItMTItMTcgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYnVpbGQtd2Via2l0OiByZW5hbWUgLS10ZW1wbGF0
ZS10YWcgdG8gLS10ZW1wbGF0ZS1lbGVtZW50IHRvIG1hdGNoIEVOQUJMRSAjZGVmaW5lIG5hbWUK
QEAgLTM5NCw3ICs0ODIsNiBAQAogICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5OgogICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nLnB5OgogICAgICAgICAoUHJp
bnRlci5wcmludF93b3JrZXJzX2FuZF9zaGFyZHMpOgotCiAyMDEyLTEyLTEzICBFcmljIFNlaWRl
bCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgLS1wcm9maWxlcj1QUk9GSUxFUiBv
cHRpb24gdG8gcnVuLXBlcmYtdGVzdHMgdG8gYWxsb3cgc3BlY2lmeWluZyB3aGljaCBwcm9maWxl
ciB0byB1c2Ugb24gcGxhdGZvcm1zIHdpdGggbWFueQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAKaW5kZXgg
Y2M4MzMzMjA5OTgxNDczZjM5NmI3YTcyMzI0ZWYxMDAzY2IzZTlmMS4uZjVkZWY4ZjA5ZmE5YTAx
NGJlYjBjMjA5YWMwZTEyZjE4NGExZDM4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCkBAIC0zMzUs
NyArMzM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAg
ICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVz
dF9zdXBwb3J0X2Jhc2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvdGVzdGluZy9hbmRyb2lkL25hdGl2ZV90ZXN0Lmd5cDpuYXRpdmVfdGVzdF9uYXRpdmVf
Y29kZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90b29s
cy9hbmRyb2lkL2ZvcndhcmRlci9mb3J3YXJkZXIuZ3lwOmZvcndhcmRlcicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90b29scy9hbmRyb2lkL2ZvcndhcmRl
cjIvZm9yd2FyZGVyLmd5cDpmb3J3YXJkZXIyJywKICAgICAgICAgICAgICAgICAgICAgICAgICc8
KGNocm9taXVtX3NyY19kaXIpL3Rvb2xzL2FuZHJvaWQvbWQ1c3VtL21kNXN1bS5neXA6bWQ1c3Vt
JywKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ2NvcGllcyc6
IFt7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX2FuZHJvaWQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKaW5kZXggNjNmNGUyNTE0NDEyODg4ZThmOTcwMjZl
NmM5NWMyODNiNDhiMDk2Zi4uZDNlYmQ1ZWFkOGY0OGE4ZjE1YjgwOTM0OTAyZmYwZmZjZjA3M2Nl
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9hbmRyb2lkLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQpAQCAtMjcsNiArMjcsNyBAQAogIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogCiBpbXBvcnQgY29weQoraW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGxvZ2dpbmcKIGlt
cG9ydCBvcwogaW1wb3J0IHJlCkBAIC01Myw3ICs1NCw3IEBAIENPTU1BTkRfTElORV9GSUxFID0g
REVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdjaHJvbWUtbmF0aXZlLXRlc3RzLWNvbW1hbmQtbGlu
ZScKICMgSWYgY2hhbmdlIHRoaXMsIG11c3QgYWxzbyBjaGFuZ2UgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKICMgYW5kIENocm9taXVtJ3Mgd2Via2l0
L3N1cHBvcnQvcGxhdGZvcm1fc3VwcG9ydF9hbmRyb2lkLmNjLgogREVWSUNFX0RSVF9ESVIgPSBE
RVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2RydC8nCi1ERVZJQ0VfRk9SV0FSREVSX1BBVEggPSBE
RVZJQ0VfRFJUX0RJUiArICdmb3J3YXJkZXInCitERVZJQ0VfRk9SV0FSREVSX1BBVEggPSBERVZJ
Q0VfRFJUX0RJUiArICdkZXZpY2VfZm9yd2FyZGVyJwogCiAjIFBhdGggb24gdGhlIGRldmljZSB3
aGVyZSB0aGUgdGVzdCBmcmFtZXdvcmsgd2lsbCBjcmVhdGUgdGhlIGZpZm8gcGlwZXMuCiBERVZJ
Q0VfRklGT19QQVRIID0gJy9kYXRhL2RhdGEvb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0L2ZpbGVz
LycKQEAgLTc2LDcgKzc3LDEyIEBAIExBWU9VVF9URVNUX1BBVEhfUFJFRklYID0gJy9hbGwtdGVz
dHMnCiAjIDgwMDAsIDgwODAgYW5kIDg0NDMgYXJlIGZvciBodHRwL2h0dHBzIHRlc3RzLgogIyA4
ODgwIGFuZCA5MzIzIGFyZSBmb3Igd2Vic29ja2V0IHRlc3RzCiAjIChzZWUgaHR0cF9zZXJ2ZXIu
cHksIGFwYWNoZV9odHRwX3NlcnZlci5weSBhbmQgd2Vic29ja2V0X3NlcnZlci5weSkuCi1GT1JX
QVJEX1BPUlRTID0gJzgwMDAgODA4MCA4NDQzIDg4ODAgOTMyMycKK0ZPUldBUkRfUE9SVFMgPSAo
ODAwMCwgODA4MCwgODQ0MywgODg4MCwgOTMyMykKKworIyBXZSBydW4gb25lIEZvcndhcmRlciBw
ZXIgZGV2aWNlIC8gd29ya2VyLCBhbmQgd2UgbmVlZCB0byBhbGxvY2F0ZSBvbmUgY29udHJvbAor
IyBwb3J0IGZvciBlYWNoIEZvcndhcmRlci4gVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgcmFu
Z2Ugb2YgcG9ydHMgd2UgY2FuIHVzZS4KK0ZPUldBUkRFUl9DT05UUk9MX1BPUlRfQkVHSU4gPSAy
MDAwMAorRk9SV0FSREVSX0NPTlRST0xfUE9SVF9FTkQgPSAyMTAwMAogCiBNU19UUlVFVFlQRV9G
T05UU19ESVIgPSAnL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzLycKIE1T
X1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0UgPSAndHRmLW1zY29yZWZvbnRzLWluc3RhbGxlcicKQEAg
LTE0OSw5ICsxNTUsNiBAQCBURVNUX1JFU09VUkNFU19UT19QVVNIID0gWwogICAgICdjb21wb3Np
dGluZy9yZXNvdXJjZXMvdmlkZW8ubXA0JywKIF0KIAotTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUg
PSAnbWQ1c3VtX2JpbicKLU1ENVNVTV9ERVZJQ0VfUEFUSCA9ICcvZGF0YS9sb2NhbC90bXAvJyAr
IE1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FCi0KIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hy
b21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBwb3J0X25hbWUgPSAnY2hyb21pdW0tYW5kcm9pZCcK
IApAQCAtMTc5LDYgKzE4MiwxMCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVt
LkNocm9taXVtUG9ydCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9kZXZpY2Vz
ID0gW10KIAorICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKKyAgICAgICAgY2hyb21pdW0u
Q2hyb21pdW1Qb3J0LnNldHVwX3Rlc3RfcnVuKHNlbGYpCisgICAgICAgIEZvcndhcmRlci5raWxs
X2hvc3RfZGFlbW9uKHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZCwgc2VsZi5fYnVpbGRfcGF0
aCkKKwogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2FuZHJvaWRfc2VydmVyX3Byb2Nlc3Nf
Y29uc3RydWN0b3IocG9ydCwgc2VydmVyX25hbWUsIGNtZF9saW5lLCBlbnY9Tm9uZSk6CiAgICAg
ICAgIHJldHVybiBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKHBvcnQsIHNlcnZlcl9uYW1l
LCBjbWRfbGluZSwgZW52LApAQCAtMjEyLDcgKzIxOSw4IEBAIGNsYXNzIENocm9taXVtQW5kcm9p
ZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwg
bmVlZHNfaHR0cCk6CiAgICAgICAgIHJlc3VsdCA9IHN1cGVyKENocm9taXVtQW5kcm9pZFBvcnQs
IHNlbGYpLmNoZWNrX2J1aWxkKG5lZWRzX2h0dHApCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2No
ZWNrX2ZpbGVfZXhpc3RzKHNlbGYucGF0aF90b19tZDVzdW0oKSwgJ21kNXN1bSB1dGlsaXR5Jykg
YW5kIHJlc3VsdAotICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19maWxlX2V4aXN0cyhzZWxm
LnBhdGhfdG9fZm9yd2FyZGVyKCksICdmb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKKyAg
ICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5wYXRoX3RvX2Rldmlj
ZV9mb3J3YXJkZXIoKSwgJ2RldmljZV9mb3J3YXJkZXIgdXRpbGl0eScpIGFuZCByZXN1bHQKKyAg
ICAgICAgcmVzdWx0ID0gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5wYXRoX3RvX2hvc3Rf
Zm9yd2FyZGVyKCksICdob3N0X2ZvcndhcmRlciB1dGlsaXR5JykgYW5kIHJlc3VsdAogICAgICAg
ICBpZiBub3QgcmVzdWx0OgogICAgICAgICAgICAgX2xvZy5lcnJvcignRm9yIGNvbXBsZXRlIEFu
ZHJvaWQgYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicpCiAgICAgICAgICAgICBfbG9n
LmVycm9yKCcnKQpAQCAtMjgzLDExICsyOTEsMTQgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9y
dChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogCiAgICAgICAgIHJldHVybiBDaHJvbWl1bUFuZHJv
aWRQb3J0Ll9hZGJfcGF0aAogCi0gICAgZGVmIHBhdGhfdG9fZm9yd2FyZGVyKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnZm9yd2FyZGVyJykKKyAgICBkZWYgcGF0aF90
b19ob3N0X2ZvcndhcmRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZvcndhcmRlci5wYXRoX3Rv
X2hvc3RfZm9yd2FyZGVyKHNlbGYuX2J1aWxkX3BhdGgpCisKKyAgICBkZWYgcGF0aF90b19kZXZp
Y2VfZm9yd2FyZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gRm9yd2FyZGVyLnBhdGhfdG9fZGV2
aWNlX2ZvcndhcmRlcihzZWxmLl9idWlsZF9wYXRoKQogCiAgICAgZGVmIHBhdGhfdG9fbWQ1c3Vt
KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChNRDVTVU1fREVWSUNFX0ZJ
TEVfTkFNRSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoQW5kcm9pZENvbW1hbmRz
Lk1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FKQogCiAgICAgIyBPdmVycmlkZGVuIHByaXZhdGUgZnVu
Y3Rpb25zLgogCkBAIC0zNjMsMjAgKzM3NCwyMCBAQCBjbGFzcyBBbmRyb2lkUGVyZihTaW5nbGVG
aWxlT3V0cHV0UHJvZmlsZXIpOgogICAgIF9jYWNoZWRfcGVyZl9ob3N0X3BhdGggPSBOb25lCiAg
ICAgX2hhdmVfc2VhcmNoZWRfZm9yX3BlcmZfaG9zdCA9IEZhbHNlCiAKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBhZGJfcGF0aCwgZGV2
aWNlX3NlcmlhbCwgc3ltZnNfcGF0aCwgaWRlbnRpZmllcj1Ob25lKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBhbmRyb2lkX2NvbW1h
bmRzLCBzeW1mc19wYXRoLCBpZGVudGlmaWVyPU5vbmUpOgogICAgICAgICBzdXBlcihBbmRyb2lk
UGVyZiwgc2VsZikuX19pbml0X18oaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCAi
ZGF0YSIsIGlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBkZXZpY2Vf
c2VyaWFsCi0gICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gW2FkYl9wYXRoLCAnLXMnLCBzZWxm
Ll9kZXZpY2Vfc2VyaWFsXQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzID0gYW5kcm9p
ZF9jb21tYW5kcwogICAgICAgICBzZWxmLl9wZXJmX3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHNl
bGYuX3N5bWZzX3BhdGggPSBzeW1mc19wYXRoCiAKICAgICBkZWYgY2hlY2tfY29uZmlndXJhdGlv
bihzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IHBlcmYgaXMgaW5zdGFsbGVkCi0gICAgICAg
IGlmIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2UoJy9zeXN0ZW0vYmluL3BlcmYnKToK
KyAgICAgICAgaWYgbm90IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMuZmlsZV9leGlzdHNfb25fZGV2
aWNlKCcvc3lzdGVtL2Jpbi9wZXJmJyk6CiAgICAgICAgICAgICBwcmludCAiQ2Fubm90IGZpbmQg
L3N5c3RlbS9iaW4vcGVyZiBvbiBkZXZpY2UgJXMiICUgc2VsZi5fZGV2aWNlX3NlcmlhbAogICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlz
IGEgdXNlcmRlYnVnIGJ1aWxkIChvciBhdCBsZWFzdCBoYXMgdGhlIG5lY2Vzc2FyeSBsaWJyYXJp
ZXMpLgotICAgICAgICBpZiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdnZXRwcm9w
JywgJ3JvLmJ1aWxkLnR5cGUnXSkuc3RyaXAoKSAhPSAndXNlcmRlYnVnJzoKKyAgICAgICAgaWYg
c2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdnZXRwcm9w
JywgJ3JvLmJ1aWxkLnR5cGUnXSkuc3RyaXAoKSAhPSAndXNlcmRlYnVnJzoKICAgICAgICAgICAg
IHByaW50ICJEZXZpY2UgJXMgaXMgbm90IGZsYXNoZWQgd2l0aCBhIHVzZXJkZWJ1ZyBidWlsZCBv
ZiBBbmRyb2lkIiAlIHNlbGYuX2RldmljZV9zZXJpYWwKICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQogICAgICAgICAjIEZJWE1FOiBDaGVjayB0aGF0IHRoZSBiaW5hcnkgYWN0dWFsbHkgaXMgcGVy
Zi1hYmxlIChoYXMgc3RhY2tmcmFtZSBwb2ludGVycyk/CkBAIC00MDMsMTggKzQxNCwxMSBAQCBH
b29nbGVycyBzaG91bGQgcmVhZDoKIGh0dHA6Ly9nb3RvLmdvb2dsZS5jb20vY3ItYW5kcm9pZC1w
ZXJmLWhvd3RvCiAiIiIKIAotICAgIGRlZiBfZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1
bGxfZmlsZV9wYXRoKToKLSAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgo
Jy8nKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMn
LCBmdWxsX2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKLQotICAgIGRlZiBf
cnVuX2FkYl9jb21tYW5kKHNlbGYsIGNtZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ob3N0LmV4
ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCArIGNtZCkKLQogICAgIGRlZiBh
dHRhY2hfdG9fcGlkKHNlbGYsIHBpZCk6CiAgICAgICAgIGFzc2VydChwaWQpCiAgICAgICAgIGFz
c2VydChzZWxmLl9wZXJmX3Byb2Nlc3MgPT0gTm9uZSkKICAgICAgICAgIyBGSVhNRTogVGhpcyBj
YW4ndCBiZSBhIGZpeGVkIHRpbWVvdXQhCi0gICAgICAgIGNtZCA9IHNlbGYuX2FkYl9jb21tYW5k
ICsgWydzaGVsbCcsICdwZXJmJywgJ3JlY29yZCcsICctZycsICctcCcsIHBpZCwgJ3NsZWVwJywg
MzBdCisgICAgICAgIGNtZCA9IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMuYWRiX2NvbW1hbmQoKSAr
IFsnc2hlbGwnLCAncGVyZicsICdyZWNvcmQnLCAnLWcnLCAnLXAnLCBwaWQsICdzbGVlcCcsIDMw
XQogICAgICAgICBzZWxmLl9wZXJmX3Byb2Nlc3MgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5wb3Bl
bihjbWQpCiAKICAgICBkZWYgX3BlcmZfdmVyc2lvbl9zdHJpbmcoc2VsZiwgcGVyZl9wYXRoKToK
QEAgLTQ0OCw3ICs0NTIsNyBAQCBodHRwOi8vZ290by5nb29nbGUuY29tL2NyLWFuZHJvaWQtcGVy
Zi1ob3d0bwogICAgICAgICBpZiBwZXJmX2V4aXRjb2RlICE9IDA6CiAgICAgICAgICAgICBwcmlu
dCAiUGVyZiBmYWlsZWQgKGV4aXQgY29kZTogJWkpLCBjYW4ndCBwcm9jZXNzIHJlc3VsdHMuIiAl
IHBlcmZfZXhpdGNvZGUKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWydwdWxsJywgJy9kYXRhL3BlcmYuZGF0YScsIHNlbGYuX291dHB1dF9wYXRoXSkK
KyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydwdWxsJywg
Jy9kYXRhL3BlcmYuZGF0YScsIHNlbGYuX291dHB1dF9wYXRoXSkKIAogICAgICAgICBwZXJmaG9z
dF9wYXRoID0gc2VsZi5fcGVyZmhvc3RfcGF0aCgpCiAgICAgICAgIGlmIHBlcmZob3N0X3BhdGg6
CkBAIC00NzYsNiArNDgwLDE4OCBAQCBodHRwOi8vY3JidWcuY29tLzE2NTI1MCBkaXNjdXNzZXMg
bWFraW5nIHRoZXNlIHByZS1idWlsdCBiaW5hcmllcyBleHRlcm5hbGx5IGF2YQogICAgICAgICBw
cmludCAnICcuam9pbihbcGVyZmhvc3RfZGlzcGxheV9wYXRjaCwgJ3JlcG9ydCcsICctaScsIHNl
bGYuX291dHB1dF9wYXRoLCAnLS1zeW1mcycsIHNlbGYuX3N5bWZzX3BhdGhdKQogCiAKK2NsYXNz
IEFuZHJvaWRDb21tYW5kcyhvYmplY3QpOgorICAgIE1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FID0g
J21kNXN1bV9iaW4nCisgICAgTUQ1U1VNX0RFVklDRV9QQVRIID0gJy9kYXRhL2xvY2FsL3RtcC8n
ICsgTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxl
c3lzdGVtLCBjb21tYW5kX2V4ZWN1dG9yLCBhZGJfY29tbWFuZCwgcGF0aF9idWlsZGVyLCBkZWJ1
Z19sb2dnZXIpOgorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbQorICAgICAg
ICBzZWxmLl9jb21tYW5kX2V4ZWN1dG9yID0gY29tbWFuZF9leGVjdXRvcgorICAgICAgICBzZWxm
Ll9hZGJfY29tbWFuZCA9IGFkYl9jb21tYW5kCisgICAgICAgIHNlbGYuX3BhdGhfYnVpbGRlciA9
IHBhdGhfYnVpbGRlcgorICAgICAgICBzZWxmLl9kZWJ1Z19sb2dnZXIgPSBkZWJ1Z19sb2dnZXIK
KworICAgIGRlZiBzZXR1cF9tZDVzdW0oc2VsZik6CisgICAgICAgIHNlbGYuX21kNXN1bV9wYXRo
ID0gc2VsZi5fcGF0aF9idWlsZGVyKEFuZHJvaWRDb21tYW5kcy5NRDVTVU1fREVWSUNFX0ZJTEVf
TkFNRSkKKyAgICAgICAgaWYgbm90IHNlbGYuZmlsZV9leGlzdHNfb25fZGV2aWNlKEFuZHJvaWRD
b21tYW5kcy5NRDVTVU1fREVWSUNFX1BBVEgpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYucHVz
aF90b19kZXZpY2Uoc2VsZi5fbWQ1c3VtX3BhdGgsIEFuZHJvaWRDb21tYW5kcy5NRDVTVU1fREVW
SUNFX1BBVEgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBu
b3QgcHVzaCBtZDVzdW0gdG8gdGhlIGRldmljZScpCisKKyAgICBkZWYgYWRiX2NvbW1hbmQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9hZGJfY29tbWFuZAorCisgICAgZGVmIF9ydW5fY29t
bWFuZChzZWxmLCBjbWQsIGVycm9yX2hhbmRsZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxm
Ll9jb21tYW5kX2V4ZWN1dG9yKGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQorCisg
ICAgZGVmIHJ1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQsIGVycm9yX2hhbmRsZXI9Tm9uZSk6Cisg
ICAgICAgIG91dHB1dCA9IHNlbGYuX2NvbW1hbmRfZXhlY3V0b3Ioc2VsZi5fYWRiX2NvbW1hbmQg
KyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKKyAgICAgICAgIyBMaW1pdCB0aGUg
bGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBvZiBjb21tYW5kcyBsaWtlICdhZGIg
bG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZTAxJworICAgICAgICAj
IHdob3NlIG91dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQgaW4gbGF0ZXIgbG9ncy4KKyAgICAg
ICAgc2VsZi5fZGVidWdfbG9nZ2VyKCdSdW4gYWRiIHJlc3VsdDogJyArIG91dHB1dFs6ODBdKQor
ICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgZmlsZV9leGlzdHNfb25fZGV2aWNlKHNl
bGYsIGZ1bGxfZmlsZV9wYXRoKToKKyAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0
c3dpdGgoJy8nKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAorCisgICAg
ZGVmIHB1c2hfdG9fZGV2aWNlKHNlbGYsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGgpOgorICAgICAg
ICByZXR1cm4gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydwdXNoJywgaG9zdF9wYXRoLCBkZXZpY2Vf
cGF0aF0pCisKKyAgICBkZWYgcHVsbF9mcm9tX2RldmljZShzZWxmLCBkZXZpY2VfcGF0aCwgaG9z
dF9wYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2FkYl9jb21tYW5kKFsncHVsbCcsIGRl
dmljZV9wYXRoLCBob3N0X3BhdGhdKQorCisgICAgZGVmIF9tZDVzdW1fZXJyb3JfaGFuZGxlcihz
ZWxmLCBzY3JpcHRfZXJyb3IpOgorICAgICAgICAjIEl0IGlzIG5vdCBhbiBlcnJvciBpZiBtZDVz
dW0gZXhpdHMgd2l0aCAxLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgZmlsZSBpdCBpcyBpbnZva2Vk
IG9uIGRvZXMgbm90IGV4aXQuCisgICAgICAgIHNlbGYuX2RlYnVnX2xvZ2dlcihzY3JpcHRfZXJy
b3IpCisgICAgICAgIHBhc3MKKworICAgIGRlZiBwdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYsIGhv
c3RfZmlsZSwgZGV2aWNlX2ZpbGUpOgorICAgICAgICBhc3NlcnQgc2VsZi5fZmlsZXN5c3RlbS5l
eGlzdHMoaG9zdF9maWxlKQorICAgICAgICBwYXRoX3RvX21kNXN1bV9ob3N0ID0gc2VsZi5fbWQ1
c3VtX3BhdGggKyAnX2hvc3QnCisgICAgICAgIGFzc2VydCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0
cyhwYXRoX3RvX21kNXN1bV9ob3N0KQorICAgICAgICBtZDVzdW1fb3V0cHV0ID0gc2VsZi5ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsIEFuZHJvaWRDb21tYW5kcy5NRDVTVU1fREVWSUNFX1BBVEgs
IGRldmljZV9maWxlXSkKKyAgICAgICAgZGV2aWNlX2hhc2hlcyA9IEFuZHJvaWRDb21tYW5kcy5f
ZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpCisgICAgICAg
IGhvc3RfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAor
ICAgICAgICAgICAgc2VsZi5fcnVuX2NvbW1hbmQoW3BhdGhfdG9fbWQ1c3VtX2hvc3QsIGhvc3Rf
ZmlsZV0sIHNlbGYuX21kNXN1bV9lcnJvcl9oYW5kbGVyKSkKKyAgICAgICAgaWYgaG9zdF9oYXNo
ZXMgYW5kIGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgc2VsZi5wdXNoX3RvX2RldmljZShob3N0X2ZpbGUsIGRldmljZV9maWxlKQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0
cHV0KG1kNXN1bV9vdXRwdXQpOgorICAgICAgICBhc3NlcnQgbWQ1c3VtX291dHB1dAorICAgICAg
ICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291dHB1dF0K
KworCisjIERldmljZSB0byBob3N0IHBvcnQgZm9yd2FyZGVyLgorY2xhc3MgRm9yd2FyZGVyKG9i
amVjdCk6CisgICAgREVWSUNFX0ZPUldBUkRFUl9QQVRIID0gREVWSUNFX1NPVVJDRV9ST09UX0RJ
UiArICdkZXZpY2VfZm9yd2FyZGVyJworICAgIEFEQl9DT05UUk9MX1NPQ0tFVCA9ICdjaHJvbWVf
ZGV2aWNlX2ZvcndhcmRlcicKKyAgICBIT1NUX0xPQ0FMX0FERFJFU1MgPSAnMTI3LjAuMC4xJwor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVzeXN0ZW0sIGNvbW1hbmRfZXhlY3V0b3IsIGhv
c3RfcGF0aF9idWlsZGVyLCBhbmRyb2lkX2NvbW1hbmRzKToKKyAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbSA9IGZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fZGV2aWNlX2ZvcndhcmRlcl9wYXRoID0g
Rm9yd2FyZGVyLnBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihob3N0X3BhdGhfYnVpbGRlcikKKyAg
ICAgICAgc2VsZi5faG9zdF9mb3J3YXJkZXJfcGF0aCA9IEZvcndhcmRlci5wYXRoX3RvX2hvc3Rf
Zm9yd2FyZGVyKGhvc3RfcGF0aF9idWlsZGVyKQorICAgICAgICBzZWxmLl9jb21tYW5kX2V4ZWN1
dG9yID0gY29tbWFuZF9leGVjdXRvcgorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzID0g
YW5kcm9pZF9jb21tYW5kcworICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyX3RvX2FkYl9jb250
cm9sX3BvcnRfbWFwID0ge30KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2NvbW1hbmRf
ZXJyb3JfaGFuZGxlcihlcnJvcl9tZXNzYWdlLCBzY3JpcHRfZXJyb3IpOgorICAgICAgICBpZiBz
Y3JpcHRfZXJyb3IuZXhpdF9jb2RlICE9IDA6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25F
cnJvcignJXM6ICVzJyAlIChlcnJvcl9tZXNzYWdlLCBzY3JpcHRfZXJyb3Iub3V0cHV0KSkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2VfY29tbWFuZF9lcnJvcl9oYW5kbGVyKGVy
cm9yX21lc3NhZ2UpOgorICAgICAgICByZXR1cm4gZnVuY3Rvb2xzLnBhcnRpYWwoRm9yd2FyZGVy
Ll9jb21tYW5kX2Vycm9yX2hhbmRsZXIsIGVycm9yX21lc3NhZ2UpCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIGtpbGxfaG9zdF9kYWVtb24oY29tbWFuZF9leGVjdXRvciwgaG9zdF9wYXRo
X2J1aWxkZXIpOgorICAgICAgICBfbG9nLmRlYnVnKCdLaWxsaW5nIGhvc3QgZGFlbW9uJykKKyAg
ICAgICAgRm9yd2FyZGVyLl9ydW5fc2hlbGxfY29tbWFuZCgKKyAgICAgICAgICAgIGNvbW1hbmRf
ZXhlY3V0b3IsIFtGb3J3YXJkZXIucGF0aF90b19ob3N0X2ZvcndhcmRlcihob3N0X3BhdGhfYnVp
bGRlciksICdraWxsLXNlcnZlciddLAorICAgICAgICAgICAgRm9yd2FyZGVyLl9tYWtlX2NvbW1h
bmRfZXJyb3JfaGFuZGxlcignQ291bGQgbm90IGtpbGwgaG9zdF9mb3J3YXJkZXInKSkKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYga2lsbF9kZXZpY2VfZGFlbW9uKGNvbW1hbmRfZXhlY3V0
b3IsIGFuZHJvaWRfY29tbWFuZHMsIGxvZ2dlcik6CisgICAgICAgIGxvZ2dlcignS2lsbGluZyBk
ZXZpY2UgZGFlbW9uJykKKyAgICAgICAgaWYgbm90IGFuZHJvaWRfY29tbWFuZHMuZmlsZV9leGlz
dHNfb25fZGV2aWNlKEZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BBVEgpOgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIEZvcndhcmRlci5fcnVuX2FkYl9zaGVsbF9jb21tYW5kKAorICAg
ICAgICAgICAgY29tbWFuZF9leGVjdXRvciwgYW5kcm9pZF9jb21tYW5kcywgW0ZvcndhcmRlci5E
RVZJQ0VfRk9SV0FSREVSX1BBVEgsICdraWxsLXNlcnZlciddLAorICAgICAgICAgICAgRm9yd2Fy
ZGVyLl9tYWtlX2NvbW1hbmRfZXJyb3JfaGFuZGxlcignQ291bGQgbm90IGtpbGwgZGV2aWNlX2Zv
cndhcmRlcicpKQorCisgICAgZGVmIHNldHVwX3JlZGlyZWN0aW9ucyhzZWxmLCB3b3JrZXJfbnVt
YmVyLCBwb3J0X3BhaXJzKToKKyAgICAgICAgYWRiX2NvbnRyb2xfcG9ydCA9IHNlbGYuX3dvcmtl
cl9udW1iZXJfdG9fYWRiX2NvbnRyb2xfcG9ydF9tYXAuZ2V0KHdvcmtlcl9udW1iZXIpCisgICAg
ICAgIGlmIG5vdCBhZGJfY29udHJvbF9wb3J0OgorICAgICAgICAgICAgYWRiX2NvbnRyb2xfcG9y
dCA9IHNlbGYuX2FsbG9jYXRlX2FkYl9jb250cm9sX3BvcnQod29ya2VyX251bWJlcikKKyAgICAg
ICAgICAgIGlmIG5vdCBhZGJfY29udHJvbF9wb3J0OgorICAgICAgICAgICAgICAgIHJhaXNlIEFz
c2VydGlvbkVycm9yKCdDb3VsZCBub3QgYWxsb2NhdGUgQURCIGNvbnRyb2wgcG9ydCcpCisgICAg
ICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyX3RvX2FkYl9jb250cm9sX3BvcnRfbWFwW3dvcmtl
cl9udW1iZXJdID0gYWRiX2NvbnRyb2xfcG9ydAorCisgICAgICAgIGZvcndhcmRfY21kID0gWydm
b3J3YXJkJywgJ3RjcDolcycgJSBhZGJfY29udHJvbF9wb3J0LCAnbG9jYWxhYnN0cmFjdDolcycg
JSBGb3J3YXJkZXIuQURCX0NPTlRST0xfU09DS0VUXQorICAgICAgICBGb3J3YXJkZXIuX3J1bl9h
ZGJfY29tbWFuZCgKKyAgICAgICAgICAgIHNlbGYuX2NvbW1hbmRfZXhlY3V0b3IsIHNlbGYuX2Fu
ZHJvaWRfY29tbWFuZHMsIGZvcndhcmRfY21kLAorICAgICAgICAgICAgRm9yd2FyZGVyLl9tYWtl
X2NvbW1hbmRfZXJyb3JfaGFuZGxlcignQ291bGQgbm90IGZvcndhcmQgaG9zdCB0byBkZXZpY2Ug
cG9ydCB1c2luZyBBREInKSkKKworICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnB1c2hf
ZmlsZV9pZl9uZWVkZWQoc2VsZi5fZGV2aWNlX2ZvcndhcmRlcl9wYXRoLCBGb3J3YXJkZXIuREVW
SUNFX0ZPUldBUkRFUl9QQVRIKQorICAgICAgICBGb3J3YXJkZXIuX3J1bl9hZGJfc2hlbGxfY29t
bWFuZCgKKyAgICAgICAgICAgIHNlbGYuX2NvbW1hbmRfZXhlY3V0b3IsIHNlbGYuX2FuZHJvaWRf
Y29tbWFuZHMsIFtGb3J3YXJkZXIuREVWSUNFX0ZPUldBUkRFUl9QQVRILCBGb3J3YXJkZXIuQURC
X0NPTlRST0xfU09DS0VUXSwKKyAgICAgICAgICAgIEZvcndhcmRlci5fbWFrZV9jb21tYW5kX2Vy
cm9yX2hhbmRsZXIoJ0NvdWxkIG5vdCBydW4gZGV2aWNlX2ZvcndhcmRlcicpKQorCisgICAgICAg
ICMgQ29tbWFuZCBmb3JtYXQ6IDxhZGIgY29udHJvbCBwb3J0Pjo8ZGV2aWNlIHBvcnQ+Ojxob3N0
IHBvcnQ+Ojxob3N0IGFkZHJlc3M+CisgICAgICAgIHJlZGlyZWN0aW9uX2NvbW1hbmRzID0gWwor
ICAgICAgICAgICAgJyVkOiVkOiVkOiVzJyAlIChhZGJfY29udHJvbF9wb3J0LCBkZXZpY2VfcG9y
dCwgaG9zdF9wb3J0LCBGb3J3YXJkZXIuSE9TVF9MT0NBTF9BRERSRVNTKSBmb3IgZGV2aWNlX3Bv
cnQsIGhvc3RfcG9ydCBpbiBwb3J0X3BhaXJzXQorICAgICAgICBmb3IgcmVkaXJlY3Rpb25fY29t
bWFuZCBpbiByZWRpcmVjdGlvbl9jb21tYW5kczoKKyAgICAgICAgICAgIEZvcndhcmRlci5fcnVu
X3NoZWxsX2NvbW1hbmQoCisgICAgICAgICAgICAgICAgc2VsZi5fY29tbWFuZF9leGVjdXRvciwg
W3NlbGYuX2hvc3RfZm9yd2FyZGVyX3BhdGgsIHJlZGlyZWN0aW9uX2NvbW1hbmRdLAorICAgICAg
ICAgICAgICAgIEZvcndhcmRlci5fbWFrZV9jb21tYW5kX2Vycm9yX2hhbmRsZXIoJ0NvdWxkIG5v
dCBydW4gaG9zdF9mb3J3YXJkZXInKSkKKworICAgIGRlZiBfYWxsb2NhdGVfYWRiX2NvbnRyb2xf
cG9ydChzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdXNlZF9wb3J0cyA9IHNlbGYuX2dl
dF91c2VkX3BvcnRzKCkKKyAgICAgICAgcG9ydCA9IEZPUldBUkRFUl9DT05UUk9MX1BPUlRfQkVH
SU4gKyB3b3JrZXJfbnVtYmVyCisgICAgICAgIHdoaWxlIHBvcnQgPCBGT1JXQVJERVJfQ09OVFJP
TF9QT1JUX0VORCBhbmQgcG9ydCBpbiB1c2VkX3BvcnRzOgorICAgICAgICAgICAgcG9ydCArPSAx
CisgICAgICAgIGlmIHBvcnQgPj0gRk9SV0FSREVSX0NPTlRST0xfUE9SVF9FTkQ6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gcG9ydAorCisgICAgZGVmIF9nZXRfdXNl
ZF9wb3J0cyhzZWxmKToKKyAgICAgICAgdXNlZF9wb3J0cyA9IHNldChbXSkKKyAgICAgICAgZm9y
IGxpbmUgaW4gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3JfcmVhZGluZygnL3By
b2MvbmV0L3RjcCcpLnhyZWFkbGluZXMoKToKKyAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUuc3Bs
aXQoKQorICAgICAgICAgICAgaWYgbm90IGZpZWxkcyBvciBmaWVsZHNbMF0gPT0gJ3NsJzoKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbG9jYWxfYWRkcmVzcyA9IGZpZWxk
c1sxXQorICAgICAgICAgICAgcmVtb3RlX2FkZHJlc3MgPSBmaWVsZHNbMl0KKyAgICAgICAgICAg
IGxvY2FsX2lwLCBsb2NhbF9wb3J0ID0gbG9jYWxfYWRkcmVzcy5zcGxpdCgnOicpCisgICAgICAg
ICAgICByZW1vdGVfaXAsIHJlbW90ZV9wb3J0ID0gcmVtb3RlX2FkZHJlc3Muc3BsaXQoJzonKQor
ICAgICAgICAgICAgdXNlZF9wb3J0cy5hZGQobG9jYWxfcG9ydCkKKyAgICAgICAgICAgIHVzZWRf
cG9ydHMuYWRkKHJlbW90ZV9wb3J0KQorICAgICAgICByZXR1cm4gdXNlZF9wb3J0cworCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBfcnVuX2FkYl9zaGVsbF9jb21tYW5kKGNvbW1hbmRfZXhl
Y3V0b3IsIGFuZHJvaWRfY29tbWFuZHMsIGNtZF9hcnJheSwgZXJyb3JfaGFuZGxlcik6CisgICAg
ICAgICMgTm90ZSB0aGF0IHRoZSBleHRyYSAnJScgY2hhcmFjdGVyIGJlbG93IGlzIHVzZWQgdG8g
aGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9jZXNzJyBvdXRwdXQgaXMgbm90IG5ld2xpbmUg
dGVybWluYXRlZC4KKyAgICAgICAgY21kID0gYW5kcm9pZF9jb21tYW5kcy5hZGJfY29tbWFuZCgp
ICsgWydzaGVsbCddICsgWycgJy5qb2luKGNtZF9hcnJheSkgKyAnOyBlY2hvICUkPyddCisgICAg
ICAgIGxpbmVzID0gY29tbWFuZF9leGVjdXRvcihjbWQsIGRlY29kZV9vdXRwdXQ9RmFsc2UsIGVy
cm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikuc3BsaXRsaW5lcygpCisgICAgICAgIGxhc3RfbGlu
ZSA9IGxpbmVzWy0xXQorICAgICAgICBzdGF0dXNfc2VwYXJhdG9yX3BvcyA9IGxhc3RfbGluZS5y
ZmluZCgnJScpCisgICAgICAgIGFzc2VydCBzdGF0dXNfc2VwYXJhdG9yX3BvcyA+PSAwCisgICAg
ICAgIHN0YXR1cyA9IGludChsYXN0X2xpbmVbc3RhdHVzX3NlcGFyYXRvcl9wb3MgKyAxOl0pCisg
ICAgICAgIGlmIG5vdCBzdGF0dXNfc2VwYXJhdG9yX3BvczoKKyAgICAgICAgICAgIGxpbmVzID0g
bGluZXNbOi0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMgPSBsaW5lc1s6LTFd
ICsgbGFzdF9saW5lWzpzdGF0dXNfc2VwYXJhdG9yX3Bvc10KKyAgICAgICAgcmV0dXJuIChzdGF0
dXMsIGxpbmVzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfcnVuX2FkYl9jb21tYW5k
KGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJvaWRfY29tbWFuZHMsIGNtZF9hcnJheSwgZXJyb3JfaGFu
ZGxlcik6CisgICAgICAgIHJldHVybiBjb21tYW5kX2V4ZWN1dG9yKGFuZHJvaWRfY29tbWFuZHMu
YWRiX2NvbW1hbmQoKSArIGNtZF9hcnJheSwgZGVjb2RlX291dHB1dD1GYWxzZSwgZXJyb3JfaGFu
ZGxlcj1lcnJvcl9oYW5kbGVyKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfcnVuX3No
ZWxsX2NvbW1hbmQoY29tbWFuZF9leGVjdXRvciwgY21kX2FycmF5LCBlcnJvcl9oYW5kbGVyKToK
KyAgICAgICAgcmV0dXJuIGNvbW1hbmRfZXhlY3V0b3IoY21kX2FycmF5LCBkZWNvZGVfb3V0cHV0
PUZhbHNlLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIHBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihob3N0X3BhdGhfYnVpbGRlcik6Cisg
ICAgICAgIHJldHVybiBob3N0X3BhdGhfYnVpbGRlcignZGV2aWNlX2ZvcndhcmRlcicpCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHBhdGhfdG9faG9zdF9mb3J3YXJkZXIoaG9zdF9wYXRo
X2J1aWxkZXIpOgorICAgICAgICByZXR1cm4gaG9zdF9wYXRoX2J1aWxkZXIoJ2hvc3RfZm9yd2Fy
ZGVyJykKKwogY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9f
dGltZW91dD1GYWxzZSk6CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2Vs
ZikuX19pbml0X18ocG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQp
CkBAIC00ODUsMTEgKzY3MSwxMiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6CiAgICAgICAgIHNlbGYuX2Vycl9maWZvX3BhdGggPSBERVZJQ0VfRklGT19QQVRI
ICsgJ3N0ZGVyci5maWZvJwogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzID0gTm9u
ZQogICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9uZQotICAgICAgICBzZWxm
Ll9mb3J3YXJkZXJfcHJvY2VzcyA9IE5vbmUKICAgICAgICAgc2VsZi5faGFzX3NldHVwID0gRmFs
c2UKICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzID0ge30KICAgICAgICAgc2VsZi5f
ZGV2aWNlX3NlcmlhbCA9IHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKHdvcmtlcl9udW1iZXIpCiAg
ICAgICAgIHNlbGYuX2FkYl9jb21tYW5kX2Jhc2UgPSBOb25lCisgICAgICAgIHNlbGYuX2FuZHJv
aWRfY29tbWFuZHMgPSBBbmRyb2lkQ29tbWFuZHMoCisgICAgICAgICAgICBzZWxmLl9wb3J0Lmhv
c3QuZmlsZXN5c3RlbSwgc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kLCBzZWxmLl9h
ZGJfY29tbWFuZCgpLCBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoLCBzZWxmLl9sb2dfZGVidWcpCiAK
ICAgICAgICAgIyBGSVhNRTogSWYgd2UgdGF1Z2h0IFByb2ZpbGVGYWN0b3J5IGFib3V0ICJ0YXJn
ZXQiIGRldmljZXMgd2UgY291bGQKICAgICAgICAgIyBqdXN0IHVzZSB0aGUgbG9naWMgaW4gRHJp
dmVyIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgaGVyZS4KQEAgLTQ5Nyw3ICs2ODQsNyBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICBz
eW1mc19wYXRoID0gc2VsZi5fZmluZF9vcl9jcmVhdGVfc3ltZnMoKQogICAgICAgICAgICAgIyBG
SVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhpcyBzb21lIHNvcnQgb2YgIkJyaWRnZSIgb2JqZWN0IGFi
c3RyYWN0aW9uIGFyb3VuZCBBREIgaW5zdGVhZCBvZiBhIHBhdGgvZGV2aWNlIHBhaXIuCiAgICAg
ICAgICAgICBzZWxmLl9wcm9maWxlciA9IEFuZHJvaWRQZXJmKHNlbGYuX3BvcnQuaG9zdCwgc2Vs
Zi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKSwgc2VsZi5fcG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgp
LAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucGF0aF90b19hZGIoKSwgc2VsZi5fZGV2aWNl
X3NlcmlhbCwgc3ltZnNfcGF0aClcCisgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21t
YW5kcywgc3ltZnNfcGF0aClcCiAgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgbGF5ZXJp
bmcgdmlvbGF0aW9uIGFuZCBzaG91bGQgYmUgbW92ZWQgdG8gUG9ydC5jaGVja19zeXNfZGVwcwog
ICAgICAgICAgICAgIyBvbmNlIHdlIGhhdmUgYW4gYWJzdHJhY3Rpb24gYXJvdW5kIGFuIGFkYl9w
YXRoL2RldmljZV9zZXJpYWwgcGFpciB0byBtYWtlIGl0CiAgICAgICAgICAgICAjIGVhc3kgdG8g
bWFrZSB0aGVzZSBjbGFzcyBtZXRob2RzIG9uIEFuZHJvaWRQZXJmLgpAQCAtNTM1LDM3ICs3MjIs
MzAgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogCiAgICAg
ICAgIHJldHVybiBzeW1mc19wYXRoCiAKLSAgICBkZWYgX3NldHVwX21kNXN1bV9hbmRfcHVzaF9k
YXRhX2lmX25lZWRlZChzZWxmKToKLSAgICAgICAgc2VsZi5fbWQ1c3VtX3BhdGggPSBzZWxmLl9w
b3J0LnBhdGhfdG9fbWQ1c3VtKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29u
X2RldmljZShNRDVTVU1fREVWSUNFX1BBVEgpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX3B1
c2hfdG9fZGV2aWNlKHNlbGYuX21kNXN1bV9wYXRoLCBNRDVTVU1fREVWSUNFX1BBVEgpOgotICAg
ICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgcHVzaCBtZDVzdW0g
dG8gZGV2aWNlJykKLQotICAgICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQotICAgICAgICBz
ZWxmLl9wdXNoX2ZvbnRzKCkKLSAgICAgICAgc2VsZi5fcHVzaF90ZXN0X3Jlc291cmNlcygpCi0K
ICAgICBkZWYgX3NldHVwX3Rlc3Qoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2hhc19zZXR1cDoK
ICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWRiX2FzX3Jvb3Qo
KQotICAgICAgICBzZWxmLl9zZXR1cF9tZDVzdW1fYW5kX3B1c2hfZGF0YV9pZl9uZWVkZWQoKQot
ICAgICAgICBzZWxmLl9oYXNfc2V0dXAgPSBUcnVlCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY29t
bWFuZHMuc2V0dXBfbWQ1c3VtKCkKKyAgICAgICAgc2VsZi5fcHVzaF9kYXRhX2lmX25lZWRlZCgp
CiAgICAgICAgIHNlbGYuX3NldHVwX3BlcmZvcm1hbmNlKCkKKyAgICAgICAgc2VsZi5faGFzX3Nl
dHVwID0gVHJ1ZQogCiAgICAgICAgICMgUmVxdWlyZWQgYnkgd2Via2l0X3N1cHBvcnQ6OkdldFdl
YktpdFJvb3REaXJGaWxlUGF0aCgpLgogICAgICAgICAjIE90aGVyIGRpcmVjdG9yaWVzIHdpbGwg
YmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFkYiBwdXNoLgotICAgICAgICBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9E
SVIgKyAnY2hyb21lJ10pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsg
J2Nocm9tZSddKQogCiAgICAgICAgICMgQWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCB0byBm
dWxseSBhY2Nlc3MgdGhlIGRpcmVjdG9yeS4KICAgICAgICAgIyBUaGUgbmF0aXZlIGNvZGUgbmVl
ZHMgdGhlIHBlcm1pc3Npb24gdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzIGFuZCBjcmVhdGUgcGlw
ZXMgaGVyZS4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXIn
LCAnLXAnLCBERVZJQ0VfRFJUX0RJUl0pCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9EUlRfRElSXSkKKyAgICAgICAgc2VsZi5f
YW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcs
IERFVklDRV9EUlRfRElSXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0pCiAKICAg
ICAgICAgIyBEZWxldGUgdGhlIGRpc2sgY2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNsZWFuIHRl
c3QgcnVuLgogICAgICAgICAjIFRoaXMgaXMgbGlrZSB3aGF0J3MgZG9uZSBpbiBDaHJvbWl1bVBv
cnQuc2V0dXBfdGVzdF9ydW4gYnV0IG9uIHRoZSBkZXZpY2UuCi0gICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQorICAg
ICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3Jt
JywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQorCisgICAgICAgIEZvcndhcmRlci5raWxsX2Rl
dmljZV9kYWVtb24oc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kLCBzZWxmLl9hbmRy
b2lkX2NvbW1hbmRzLCBzZWxmLl9sb2dfZGVidWcpCiAKICAgICBkZWYgX2xvZ19lcnJvcihzZWxm
LCBtZXNzYWdlKToKICAgICAgICAgX2xvZy5lcnJvcignWyVzXSAlcycgJSAoc2VsZi5fZGV2aWNl
X3NlcmlhbCwgbWVzc2FnZSkpCkBAIC01NzYsODUgKzc1Niw1MCBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgZGVmIF9hYm9ydChzZWxmLCBtZXNzYWdl
KToKICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1slc10gJXMnICUgKHNlbGYuX2Rldmlj
ZV9zZXJpYWwsIG1lc3NhZ2UpKQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZXh0cmFj
dF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgotICAgICAgICBhc3Nl
cnQgbWQ1c3VtX291dHB1dAotICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9y
IGxpbmUgaW4gbWQ1c3VtX291dHB1dF0KLQotICAgIGRlZiBfcHVzaF9maWxlX2lmX25lZWRlZChz
ZWxmLCBob3N0X2ZpbGUsIGRldmljZV9maWxlKToKLSAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhp
c3RzKGhvc3RfZmlsZSkKLSAgICAgICAgZGV2aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJhY3RfaGFz
aGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Lmhvc3Qu
ZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2FkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJywgTUQ1U1VNX0RF
VklDRV9QQVRILCBkZXZpY2VfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQpCi0gICAgICAg
IGhvc3RfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KAot
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5leGVjdXRpdmUucG9wZW4oYXJncz1bJyVz
X2hvc3QnICUgc2VsZi5fbWQ1c3VtX3BhdGgsIGhvc3RfZmlsZV0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5z
dGRvdXQpCi0gICAgICAgIGlmIGhvc3RfaGFzaGVzIGFuZCBkZXZpY2VfaGFzaGVzID09IGhvc3Rf
aGFzaGVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNl
KGhvc3RfZmlsZSwgZGV2aWNlX2ZpbGUpCisgICAgZGVmIF9wdXNoX2RhdGFfaWZfbmVlZGVkKHNl
bGYpOgorICAgICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQorICAgICAgICBzZWxmLl9wdXNo
X2ZvbnRzKCkKKyAgICAgICAgc2VsZi5fcHVzaF90ZXN0X3Jlc291cmNlcygpCiAKICAgICBkZWYg
X3B1c2hfZXhlY3V0YWJsZShzZWxmKToKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRl
ZChzZWxmLl9wb3J0LnBhdGhfdG9fZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkK
LSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRo
KCdEdW1wUmVuZGVyVHJlZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUu
cGFrJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKCdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVt
cFJlbmRlclRyZWVfcmVzb3VyY2VzJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRl
ZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklD
RV9EUlRfRElSICsgJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKQotICAgICAgICBzZWxmLl9wdXNo
X2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tf
Zm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1s
JykKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQUF9Q
QUNLQUdFXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVl
ZGVkKHNlbGYuX3BvcnQucGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJE
RVJfUEFUSCkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVl
ZGVkKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlLnBhaycpLCBERVZJQ0Vf
RFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZS5wYWsnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2Nv
bW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJl
bmRlclRyZWVfcmVzb3VyY2VzJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jl
c291cmNlcycpCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucHVzaF9maWxlX2lmX25l
ZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERF
VklDRV9EUlRfRElSICsgJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKQorICAgICAgICBzZWxmLl9h
bmRyb2lkX2NvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0
aCgnYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9p
ZF9mYWxsYmFja19mb250cy54bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1
bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FHRV0pCiAgICAgICAgIGRy
dF9ob3N0X3BhdGggPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpCi0gICAgICAgIGluc3Rh
bGxfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3Bh
dGhdKQorICAgICAgICBpbnN0YWxsX3Jlc3VsdCA9IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVu
X2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQogICAgICAgICBpZiBpbnN0
YWxsX3Jlc3VsdC5maW5kKCdTdWNjZXNzJykgPT0gLTE6CiAgICAgICAgICAgICBzZWxmLl9hYm9y
dCgnRmFpbGVkIHRvIGluc3RhbGwgJXMgb250byBkZXZpY2U6ICVzJyAlIChkcnRfaG9zdF9wYXRo
LCBpbnN0YWxsX3Jlc3VsdCkpCiAKICAgICBkZWYgX3B1c2hfZm9udHMoc2VsZik6CiAgICAgICAg
IHNlbGYuX2xvZ19kZWJ1ZygnUHVzaGluZyBmb250cycpCiAgICAgICAgIHBhdGhfdG9fYWhlbV9m
b250ID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnQUhFTV9fX18uVFRGJykKLSAgICAgICAgc2Vs
Zi5fcHVzaF9maWxlX2lmX25lZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVWSUNFX0ZPTlRTX0RJ
UiArICdBSEVNX19fXy5UVEYnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnB1c2hf
ZmlsZV9pZl9uZWVkZWQocGF0aF90b19haGVtX2ZvbnQsIERFVklDRV9GT05UU19ESVIgKyAnQUhF
TV9fX18uVFRGJykKICAgICAgICAgZm9yIChob3N0X2RpcnMsIGZvbnRfZmlsZSwgcGFja2FnZSkg
aW4gSE9TVF9GT05UX0ZJTEVTOgogICAgICAgICAgICAgZm9yIGhvc3RfZGlyIGluIGhvc3RfZGly
czoKICAgICAgICAgICAgICAgICBob3N0X2ZvbnRfcGF0aCA9IGhvc3RfZGlyICsgZm9udF9maWxl
CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fcG9ydC5fY2hlY2tfZmlsZV9leGlzdHMoaG9zdF9m
b250X3BhdGgsICcnLCBsb2dnaW5nPUZhbHNlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5f
cHVzaF9maWxlX2lmX25lZWRlZChob3N0X2ZvbnRfcGF0aCwgREVWSUNFX0ZPTlRTX0RJUiArIGZv
bnRfZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNo
X2ZpbGVfaWZfbmVlZGVkKGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElSICsgZm9udF9m
aWxlKQogCiAgICAgZGVmIF9wdXNoX3Rlc3RfcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICBzZWxm
Ll9sb2dfZGVidWcoJ1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBmb3IgcmVzb3Vy
Y2UgaW4gVEVTVF9SRVNPVVJDRVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfZmls
ZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnLycgKyByZXNvdXJj
ZSwgREVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyByZXNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYu
X2FuZHJvaWRfY29tbWFuZHMucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LmxheW91dF90
ZXN0c19kaXIoKSArICcvJyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJl
c291cmNlKQogCiAgICAgZGVmIF9yZXN0YXJ0X2FkYl9hc19yb290KHNlbGYpOgotICAgICAgICBv
dXRwdXQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydyb290J10pCisgICAgICAgIG91dHB1dCA9
IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsncm9vdCddKQogICAgICAg
ICBpZiAnYWRiZCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXMgcm9vdCcgaW4gb3V0cHV0OgogICAgICAg
ICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgbm90ICdyZXN0YXJ0aW5nIGFkYmQgYXMgcm9vdCcg
aW4gb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdVbnJlY29nbml6ZWQgb3V0
cHV0IGZyb20gYWRiIHJvb3Q6ICVzJyAlIG91dHB1dCkKIAogICAgICAgICAjIFJlZ2FyZGxlc3Mg
dGhlIG91dHB1dCwgZ2l2ZSB0aGUgZGV2aWNlIGEgbW9tZW50IHRvIGNvbWUgYmFjayBvbmxpbmUu
Ci0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3dhaXQtZm9yLWRldmljZSddKQotCi0g
ICAgZGVmIF9ydW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgot
ICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1J1biBhZGIgY29tbWFuZDogJyArIHN0cihjbWQpKQot
ICAgICAgICBpZiBpZ25vcmVfZXJyb3I6Ci0gICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gc2Vs
Zi5fcG9ydC5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcgotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZXJyb3JfaGFuZGxlciA9IE5vbmUKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fcG9ydC5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYuX2FkYl9jb21tYW5kKCkgKyBjbWQsIGVycm9yX2hhbmRs
ZXI9ZXJyb3JfaGFuZGxlcikKLSAgICAgICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHRv
byB2ZXJib3NlIG91dHB1dCBvZiBjb21tYW5kcyBsaWtlICdhZGIgbG9nY2F0JyBhbmQgJ2NhdCAv
ZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZTAxJwotICAgICAgICAjIHdob3NlIG91dHB1dHMgYXJl
IG5vcm1hbGx5IHByaW50ZWQgaW4gbGF0ZXIgbG9ncy4KLSAgICAgICAgc2VsZi5fbG9nX2RlYnVn
KCdSdW4gYWRiIHJlc3VsdDogJyArIHJlc3VsdFs6ODBdKQotICAgICAgICByZXR1cm4gcmVzdWx0
Ci0KLSAgICBkZWYgX2xpbmtfZGV2aWNlX2ZpbGUoc2VsZiwgZnJvbV9maWxlLCB0b19maWxlLCBp
Z25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICAjIHJtIHRvX2ZpbGUgZmlyc3QgdG8gbWFrZSBz
dXJlIHRoYXQgbG4gc3VjY2VlZHMuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ3JtJywgdG9fZmlsZV0sIGlnbm9yZV9lcnJvcikKLSAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xuJywgJy1zJywgZnJvbV9maWxlLCB0b19maWxl
XSwgaWdub3JlX2Vycm9yKQotCi0gICAgZGVmIF9wdXNoX3RvX2RldmljZShzZWxmLCBob3N0X3Bh
dGgsIGRldmljZV9wYXRoLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGhdLCBpZ25v
cmVfZXJyb3IpCi0KLSAgICBkZWYgX3B1bGxfZnJvbV9kZXZpY2Uoc2VsZiwgZGV2aWNlX3BhdGgs
IGhvc3RfcGF0aCwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3B1bGwnLCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoXSwgaWdub3JlX2Vy
cm9yKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3dh
aXQtZm9yLWRldmljZSddKQogCiAgICAgZGVmIF9nZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYpOgot
ICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMn
LCAnLW4nLCAnL2RhdGEvdG9tYnN0b25lcyddKQorICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5f
YW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsICctbicsICcv
ZGF0YS90b21ic3RvbmVzJ10pCiAgICAgICAgIGlmIG5vdCB0b21ic3RvbmVzIG9yIHRvbWJzdG9u
ZXMuc3RhcnRzd2l0aCgnL2RhdGEvdG9tYnN0b25lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y
eScpOgogICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdEUlQgY3Jhc2hlZCwgYnV0IG5vIHRv
bWJzdG9uZSBmb3VuZCEnKQogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC02NzUsMjMgKzgyMCwy
MyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAg
ICMgc3RhY2sgdHJhY2UgaW50byBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCwgaWYgbmVlZGVkLgog
ICAgICAgICAjIEl0IHRha2VzIGEgbG9uZyB0aW1lLCBzbyBkb24ndCBkbyBpdCBoZXJlLgogICAg
ICAgICByZXR1cm4gJyVzXG4lcycgJSAoJyAnLmpvaW4obGFzdF90b21ic3RvbmUpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0
JywgJy9kYXRhL3RvbWJzdG9uZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJ2NhdCcsICcvZGF0YS90b21ic3RvbmVzLycgKyBsYXN0X3RvbWJzdG9uZVs2XV0p
KQogCiAgICAgZGVmIF9nZXRfbG9nY2F0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVu
X2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1kJywgJy12JywgJ3RocmVhZHRpbWUnXSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0
JywgJy1kJywgJy12JywgJ3RocmVhZHRpbWUnXSkKIAogICAgIGRlZiBfc2V0dXBfcGVyZm9ybWFu
Y2Uoc2VsZik6CiAgICAgICAgICMgRGlzYWJsZSBDUFUgc2NhbGluZyBhbmQgZHJvcCByYW0gY2Fj
aGUgdG8gcmVkdWNlIG5vaXNlIGluIHRlc3RzCiAgICAgICAgIGlmIG5vdCBzZWxmLl9vcmlnaW5h
bF9nb3Zlcm5vcnM6Ci0gICAgICAgICAgICBnb3Zlcm5vcl9maWxlcyA9IHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCisgICAg
ICAgICAgICBnb3Zlcm5vcl9maWxlcyA9IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAnbHMnLCBTQ0FMSU5HX0dPVkVSTk9SU19QQVRURVJOXSkKICAgICAg
ICAgICAgIGlmIGdvdmVybm9yX2ZpbGVzLmZpbmQoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkn
KSA9PSAtMToKICAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBnb3Zlcm5vcl9maWxlcy5zcGxp
dCgpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnNbZmlsZV0g
PSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSkuc3RyaXAoKQot
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hv
JywgJ3BlcmZvcm1hbmNlJywgJz4nLCBmaWxlXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
b3JpZ2luYWxfZ292ZXJub3JzW2ZpbGVdID0gc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSkuc3RyaXAoKQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2Vj
aG8nLCAncGVyZm9ybWFuY2UnLCAnPicsIGZpbGVdKQogCiAgICAgZGVmIF90ZWFyZG93bl9wZXJm
b3JtYW5jZShzZWxmKToKICAgICAgICAgZm9yIGZpbGUsIG9yaWdpbmFsX2NvbnRlbnQgaW4gc2Vs
Zi5fb3JpZ2luYWxfZ292ZXJub3JzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgb3JpZ2luYWxfY29udGVudCwgJz4nLCBmaWxlXSkK
KyAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnc2hl
bGwnLCAnZWNobycsIG9yaWdpbmFsX2NvbnRlbnQsICc+JywgZmlsZV0pCiAgICAgICAgIHNlbGYu
X29yaWdpbmFsX2dvdmVybm9ycyA9IHt9CiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwg
c3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgpAQCAtNzA4LDEwICs4NTMsNiBAQCBjbGFzcyBD
aHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgVGhlIGNvbW1h
bmQgbGluZSBwYXNzZWQgdG8gdGhlIERSVCBwcm9jZXNzIGlzIHJldHVybmVkIGJ5IF9kcnRfY21k
X2xpbmUoKSBpbnN0ZWFkLgogICAgICAgICByZXR1cm4gc2VsZi5fYWRiX2NvbW1hbmQoKSArIFsn
c2hlbGwnXQogCi0gICAgZGVmIF9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxl
X3BhdGgpOgotICAgICAgICBhc3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCi0g
ICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxf
ZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAotCiAgICAgZGVmIF9kcnRfY21k
X2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICByZXR1cm4g
ZHJpdmVyLkRyaXZlci5jbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykg
KyBbJy0tY3JlYXRlLXN0ZGluLWZpZm8nLCAnLS1zZXBhcmF0ZS1zdGRlcnItZmlmbyddCiAKQEAg
LTcyNCwxNyArODY1LDE3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJp
dmVyKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgX2FsbF9waXBlc19jcmVhdGVk
KHNlbGYpOgotICAgICAgICByZXR1cm4gKHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxm
Ll9pbl9maWZvX3BhdGgpIGFuZAotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29u
X2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9m
aWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisgICAgICAgIHJldHVy
biAoc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5f
Zmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLmZp
bGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAg
ICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9l
cnJfZmlmb19wYXRoKSkKIAogICAgIGRlZiBfcmVtb3ZlX2FsbF9waXBlcyhzZWxmKToKICAgICAg
ICAgZm9yIGZpbGUgaW4gW3NlbGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwg
c2VsZi5fZXJyX2ZpZm9fcGF0aF06Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQo
WydzaGVsbCcsICdybScsIGZpbGVdKQorICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5k
cy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIGZpbGVdKQogCi0gICAgICAgIHJldHVy
biAobm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFu
ZAotICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5f
b3V0X2ZpZm9fcGF0aCkgYW5kCi0gICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3Rz
X29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKKyAgICAgICAgcmV0dXJuIChub3Qgc2Vs
Zi5fYW5kcm9pZF9jb21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19w
YXRoKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5maWxl
X2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAg
ICAgbm90IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYu
X2Vycl9maWZvX3BhdGgpKQogCiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCwg
c3RvcF93aGVuX2RvbmUpOgogICAgICAgICBiYXNlID0gc2VsZi5fcG9ydC5sb29rdXBfdmlydHVh
bF90ZXN0X2Jhc2UoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKQEAgLTc2OCwxMyArOTA5LDExIEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgc3Vw
ZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90
ZXN0X2FyZ3MpCiAKICAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdTdGFydGluZyBmb3J3YXJkZXIn
KQotICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3NlcnZlcl9w
cm9jZXNzX2NvbnN0cnVjdG9yKAotICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ0ZvcndhcmRlcics
IHNlbGYuX2FkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJywgJyVzIC1EICVzJyAlIChERVZJQ0VfRk9S
V0FSREVSX1BBVEgsIEZPUldBUkRfUE9SVFMpXSkKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3By
b2Nlc3Muc3RhcnQoKQotCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcs
ICctYyddKQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10g
KyBzZWxmLl9jbWRfbGluZSArIFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKLSAgICAgICAgc3Rh
cnRfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnc3RhcnQn
LCAnLWUnLCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNUSVZJVFlfRlVMTF9OQU1FXSkK
KyAgICAgICAgZm9yd2FyZGVyID0gRm9yd2FyZGVyKHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVt
LCBzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQsIHNlbGYuX3BvcnQuX2J1aWxkX3Bh
dGgsIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMpCisgICAgICAgIGZvcndhcmRlci5zZXR1cF9yZWRp
cmVjdGlvbnMoc2VsZi5fd29ya2VyX251bWJlciwgWyhwb3J0LCBwb3J0KSBmb3IgcG9ydCBpbiBG
T1JXQVJEX1BPUlRTXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2Nv
bW1hbmQoWydsb2djYXQnLCAnLWMnXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxmLl9jbWRfbGluZSArIFsnPics
IENPTU1BTkRfTElORV9GSUxFXSkKKyAgICAgICAgc3RhcnRfcmVzdWx0ID0gc2VsZi5fYW5kcm9p
ZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScs
ICdSdW5JblN1YlRocmVhZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVdKQogICAgICAg
ICBpZiBzdGFydF9yZXN1bHQuZmluZCgnRXhjZXB0aW9uJykgIT0gLTE6CiAgICAgICAgICAgICBz
ZWxmLl9sb2dfZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlv
bi4gRXhjZXB0aW9uOlxuJyArIHN0YXJ0X3Jlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQpAQCAtODQ3LDExICs5ODYsMTEgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZl
ci5Ecml2ZXIpOgogCiAgICAgZGVmIF9waWRfb25fdGFyZ2V0KHNlbGYpOgogICAgICAgICAjIEZJ
WE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRoYW4gZ3JlcHBpbmcg
cHMgb3V0cHV0IQotICAgICAgICBwc19vdXRwdXQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdwcyddKQorICAgICAgICBwc19vdXRwdXQgPSBzZWxmLl9hbmRyb2lkX2NvbW1hbmRz
LnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pCiAgICAgICAgIHJldHVybiBzZWxmLl9w
aWRfZnJvbV9hbmRyb2lkX3BzX291dHB1dChwc19vdXRwdXQsIERSVF9BUFBfUEFDS0FHRSkKIAog
ICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdhbScsICdmb3JjZS1zdG9wJywgRFJUX0FQUF9QQUNLQUdFXSkKKyAgICAgICAgc2VsZi5f
YW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1z
dG9wJywgRFJUX0FQUF9QQUNLQUdFXSkKIAogICAgICAgICBpZiBzZWxmLl9yZWFkX3N0ZG91dF9w
cm9jZXNzOgogICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcy5raWxsKCkKQEAg
LTg2MSwxMSArMTAwMCw5IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJp
dmVyKToKICAgICAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3Mua2lsbCgpCiAgICAg
ICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9uZQogCi0gICAgICAgIHN1cGVy
KENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuc3RvcCgpCisgICAgICAgIEZvcndhcmRlci5r
aWxsX2RldmljZV9kYWVtb24oc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kLCBzZWxm
Ll9hbmRyb2lkX2NvbW1hbmRzLCBzZWxmLl9sb2dfZGVidWcpCiAKLSAgICAgICAgaWYgc2VsZi5f
Zm9yd2FyZGVyX3Byb2Nlc3M6Ci0gICAgICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2Vzcy5r
aWxsKCkKLSAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gTm9uZQorICAgICAg
ICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnN0b3AoKQogCiAgICAgICAgIGlm
IHNlbGYuX2hhc19zZXR1cDoKICAgICAgICAgICAgIGlmIG5vdCBDaHJvbWl1bUFuZHJvaWREcml2
ZXIuX2xvb3Bfd2l0aF90aW1lb3V0KHNlbGYuX3JlbW92ZV9hbGxfcGlwZXMsIERSVF9TVEFSVF9T
VE9QX1RJTUVPVVRfU0VDUyk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180136</attachid>
            <date>2012-12-19 04:56:56 -0800</date>
            <delta_ts>2013-01-28 08:31:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99588-20121219135412.patch</filename>
            <type>text/plain</type>
            <size>41283</size>
            <attacher name="Philippe Liard">pliard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3OTM5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2M3MzIzYjM0MGU2NzUyZjk1MDQ5MzE5OTM1MDA4Nzk5
ZjRkZjYwZi4uYTU3ODc2YWFlOGM2NTE5ZmU0MTEwNzMwMWQyNzg1ZDhjYWNhZTFlZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1
IEBACisyMDEyLTEyLTE5ICBQaGlsaXBwZSBMaWFyZCAgPHBsaWFyZEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgVXNlIGZvcndhcmRlcjIgaW4gQ2hyb21lIGZvciBBbmRyb2lkIGxheW91dCB0ZXN0
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTg4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hyb21p
dW0ncyBkZXZpY2UgdG8gaG9zdCBmb3J3YXJkZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBy
ZW1vdmVkCisgICAgICAgIHNvb24uIEl0IHdhcyByZXBsYWNlZCB3aXRoIGZvcndhcmRlcjIgd2hp
Y2ggaXMgYWJsZSB0byBydW4gb24KKyAgICAgICAgbm9uLXJvb3RlZCBkZXZpY2VzLiBUaGUgd2F5
IGZvcndhcmRlcjIgaXMgc2V0dXAvdGVhcmVkIGRvd24gaXMKKyAgICAgICAgZGlmZmVyZW50IHdo
aWNoIGV4cGxhaW5zIHdoeSB0aGUgUHl0aG9uIGxheWVyIGluIFdlYktpdCBoYXMgdG8gYmUKKyAg
ICAgICAgdXBkYXRlZC4KKworICAgICAgICBJbiBwYXJ0aWN1bGFyLCBmb3J3YXJkZXIyIGNvbnNp
c3RzIG9mIHR3byBwcm9ncmFtcyAoZGFlbW9ucyk6CisgICAgICAgIC0gaG9zdF9mb3J3YXJkZXI6
IGRhZW1vbiBydW5uaW5nIG9uIHRoZSBob3N0CisgICAgICAgIC0gZGV2aWNlX2ZvcndhcmRlcjog
ZGFlbW9uIHJ1bm5pbmcgb24gdGhlIGRldmljZXMgYXR0YWNoZWQgdG8gdGhlIGhvc3QKKworICAg
ICAgICBkZXZpY2VfZm9yd2FyZGVyIG11c3QgYmUgc3RhcnRlZCBvbiB0aGUgZGV2aWNlIGJlZm9y
ZSBob3N0X2ZvcndhcmRlcjoKKyAgICAgICAgJCAvZGF0YS9sb2NhbC90bXAvZGV2aWNlX2Zvcndh
cmRlciBjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisgICAgICAgICdjaHJvbWVfZGV2aWNlX2Zv
cndhcmRlcicgaXMgdGhlIG5hbWUgb2YgdGhlIFVuaXggRG9tYWluIFNvY2tldCBib3VuZAorICAg
ICAgICBieSB0aGUgZGFlbW9uIG9uIHRoZSBkZXZpY2Ugd2hpY2ggaXMgdXNlZCBieSB0aGUgaG9z
dCB0byBjb21tdW5pY2F0ZQorICAgICAgICB3aXRoIGl0LgorCisgICAgICAgIFRoZW4gdGhlIGhv
c3QgbXVzdCBzZXR1cCBhIGhvc3QgdG8gZGV2aWNlIHJlZGlyZWN0aW9uIHNvIHRoYXQKKyAgICAg
ICAgaG9zdF9mb3J3YXJkZXIgY2FuIHRhbGsgdG8gdGhlIGRldmljZV9mb3J3YXJkZXIncyBVbml4
IERvbWFpbiBTb2NrZXQKKyAgICAgICAgdGhyb3VnaCBhIFRDUCBzb2NrZXQgKHBvcnQgODAwMCBp
biB0aGUgZXhhbXBsZSBiZWxvdyk6CisgICAgICAgICQgYWRiIGZvcndhcmQgdGNwOjgwMDAgbG9j
YWxhYnN0cmFjdDpjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcgorCisgICAgICAgIFRoZW4gdGhlIGhv
c3QgY2FuIHNwZWNpZnkgd2hpY2ggcG9ydCBtdXN0IGJlIGZvcndhcmRlZCBmcm9tIHRoZSBkZXZp
Y2UKKyAgICAgICAgdG8gdGhlIGhvc3QgKGRldmljZSBwb3J0IDgwODAgdG8gaG9zdCBwb3J0IDgw
ODEgaW4gdGhlIGV4YW1wbGUgYmVsb3cpOgorICAgICAgICAkIGhvc3RfZm9yd2FyZGVyIDgwMDA6
ODA4MDo4MDgxOjEyNy4wLjAuMQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWRQb3J0LnNldHVwX3Rlc3RfcnVuKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBv
cnQuY2hlY2tfYnVpbGQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX2hv
c3RfZm9yd2FyZGVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQpOgorICAgICAgICAo
Q2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIpOgorICAgICAgICAo
Q2hyb21pdW1BbmRyb2lkUG9ydC5wYXRoX3RvX21kNXN1bSk6CisgICAgICAgIChBbmRyb2lkUGVy
Zi5fX2luaXRfXyk6CisgICAgICAgIChBbmRyb2lkUGVyZi5jaGVja19jb25maWd1cmF0aW9uKToK
KyAgICAgICAgKGF0dGFjaF90b19waWQpOgorICAgICAgICAocHJvZmlsZV9hZnRlcl9leGl0KToK
KyAgICAgICAgKEFuZHJvaWRDb21tYW5kcyk6CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMuX19p
bml0X18pOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnNldHVwX21kNXN1bSk6CisgICAgICAg
IChBbmRyb2lkQ29tbWFuZHMuZGV2aWNlX3NlcmlhbCk6CisgICAgICAgIChBbmRyb2lkQ29tbWFu
ZHMuYWRiX2NvbW1hbmQpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLl9ydW5fY29tbWFuZCk6
CisgICAgICAgIChBbmRyb2lkQ29tbWFuZHMucnVuX2FkYl9jb21tYW5kKToKKyAgICAgICAgKEFu
ZHJvaWRDb21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2UpOgorICAgICAgICAoQW5kcm9pZENv
bW1hbmRzLnB1c2hfdG9fZGV2aWNlKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5wdWxsX2Zy
b21fZGV2aWNlKToKKyAgICAgICAgKEFuZHJvaWRDb21tYW5kcy5fbWQ1c3VtX2Vycm9yX2hhbmRs
ZXIpOgorICAgICAgICAoQW5kcm9pZENvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQpOgorICAg
ICAgICAoQW5kcm9pZENvbW1hbmRzLl9leHRyYWN0X2hhc2hlc19mcm9tX21kNXN1bV9vdXRwdXQp
OgorICAgICAgICAoRm9yd2FyZGVyKToKKyAgICAgICAgKEZvcndhcmRlci5fX2luaXRfXyk6Cisg
ICAgICAgIChGb3J3YXJkZXIuX2NvbW1hbmRfZXJyb3JfaGFuZGxlcik6CisgICAgICAgIChGb3J3
YXJkZXIuX21ha2VfY29tbWFuZF9lcnJvcl9oYW5kbGVyKToKKyAgICAgICAgKEZvcndhcmRlci5r
aWxsX2hvc3RfZGFlbW9uKToKKyAgICAgICAgKEZvcndhcmRlci5raWxsX2RldmljZV9kYWVtb24p
OgorICAgICAgICAoRm9yd2FyZGVyLnNldHVwX3JlZGlyZWN0aW9ucyk6CisgICAgICAgIChGb3J3
YXJkZXIuX2FsbG9jYXRlX2FkYl9jb250cm9sX3BvcnQpOgorICAgICAgICAoRm9yd2FyZGVyLl9n
ZXRfdXNlZF9wb3J0cyk6CisgICAgICAgIChGb3J3YXJkZXIuX3J1bl9hZGJfc2hlbGxfY29tbWFu
ZCk6CisgICAgICAgIChGb3J3YXJkZXIuX3J1bl9hZGJfY29tbWFuZCk6CisgICAgICAgIChGb3J3
YXJkZXIuX3J1bl9zaGVsbF9jb21tYW5kKToKKyAgICAgICAgKEZvcndhcmRlci5wYXRoX3RvX2Rl
dmljZV9mb3J3YXJkZXIpOgorICAgICAgICAoRm9yd2FyZGVyLnBhdGhfdG9faG9zdF9mb3J3YXJk
ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAg
KENocm9taXVtQW5kcm9pZERyaXZlci5fZmluZF9vcl9jcmVhdGVfc3ltZnMpOgorICAgICAgICAo
Q2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zZXR1cF90ZXN0KToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZERyaXZlci5fYWJvcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNo
X2V4ZWN1dGFibGUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNoX2ZvbnRz
KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF90ZXN0X3Jlc291cmNlcyk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3Jlc3RhcnRfYWRiX2FzX3Jvb3QpOgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9nZXRfbGFzdF9zdGFja3RyYWNlKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2xvZ2NhdCk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuX3NldHVwX3BlcmZvcm1hbmNlKToKKyAgICAgICAgKENocm9taXVt
QW5kcm9pZERyaXZlci5fdGVhcmRvd25fcGVyZm9ybWFuY2UpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkRHJpdmVyLmNtZF9saW5lKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5f
YWxsX3BpcGVzX2NyZWF0ZWQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9yZW1v
dmVfYWxsX3BpcGVzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25j
ZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3BpZF9vbl90YXJnZXQpOgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0b3ApOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLl9yZWFkX3Byb21wdCk6CisKIDIwMTItMTItMTcgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYnVpbGQtd2Via2l0OiByZW5hbWUgLS10ZW1wbGF0
ZS10YWcgdG8gLS10ZW1wbGF0ZS1lbGVtZW50IHRvIG1hdGNoIEVOQUJMRSAjZGVmaW5lIG5hbWUK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1w
UmVuZGVyVHJlZS5neXAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAv
RHVtcFJlbmRlclRyZWUuZ3lwCmluZGV4IGNjODMzMzIwOTk4MTQ3M2YzOTZiN2E3MjMyNGVmMTAw
M2NiM2U5ZjEuLmY1ZGVmOGYwOWZhOWEwMTRiZWIwYzIwOWFjMGUxMmYxODRhMWQzOGYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVy
VHJlZS5neXAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1
bXBSZW5kZXJUcmVlLmd5cApAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgICAgICAgICAgICAgICAg
ICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5kcm9pZC9uYXRpdmVfdGVz
dC5neXA6bmF0aXZlX3Rlc3RfbmF0aXZlX2NvZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAg
JzwoY2hyb21pdW1fc3JjX2RpcikvdG9vbHMvYW5kcm9pZC9mb3J3YXJkZXIvZm9yd2FyZGVyLmd5
cDpmb3J3YXJkZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rp
cikvdG9vbHMvYW5kcm9pZC9mb3J3YXJkZXIyL2ZvcndhcmRlci5neXA6Zm9yd2FyZGVyMicsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90b29scy9hbmRyb2lk
L21kNXN1bS9tZDVzdW0uZ3lwOm1kNXN1bScsCiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICAgICAgICAgICdjb3BpZXMnOiBbewpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CmluZGV4
IDYzZjRlMjUxNDQxMjg4OGU4Zjk3MDI2ZTZjOTVjMjgzYjQ4YjA5NmYuLjQzZjg2MDgxMWUyNmFh
MGQ5ZWYzZTIwNmU3YTllZmY4NDI1OGVmMTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKQEAg
LTI3LDYgKzI3LDcgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGNvcHkKK2ltcG9ydCBmdW5j
dG9vbHMKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCByZQpAQCAtNTMsNyArNTQs
NyBAQCBDT01NQU5EX0xJTkVfRklMRSA9IERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hyb21l
LW5hdGl2ZS10ZXN0cy1jb21tYW5kLWxpbmUnCiAjIElmIGNoYW5nZSB0aGlzLCBtdXN0IGFsc28g
Y2hhbmdlIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3Bw
CiAjIGFuZCBDaHJvbWl1bSdzIHdlYmtpdC9zdXBwb3J0L3BsYXRmb3JtX3N1cHBvcnRfYW5kcm9p
ZC5jYy4KIERFVklDRV9EUlRfRElSID0gREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICdkcnQvJwot
REVWSUNFX0ZPUldBUkRFUl9QQVRIID0gREVWSUNFX0RSVF9ESVIgKyAnZm9yd2FyZGVyJworREVW
SUNFX0ZPUldBUkRFUl9QQVRIID0gREVWSUNFX0RSVF9ESVIgKyAnZGV2aWNlX2ZvcndhcmRlcicK
IAogIyBQYXRoIG9uIHRoZSBkZXZpY2Ugd2hlcmUgdGhlIHRlc3QgZnJhbWV3b3JrIHdpbGwgY3Jl
YXRlIHRoZSBmaWZvIHBpcGVzLgogREVWSUNFX0ZJRk9fUEFUSCA9ICcvZGF0YS9kYXRhL29yZy5j
aHJvbWl1bS5uYXRpdmVfdGVzdC9maWxlcy8nCkBAIC03Niw3ICs3NywxMiBAQCBMQVlPVVRfVEVT
VF9QQVRIX1BSRUZJWCA9ICcvYWxsLXRlc3RzJwogIyA4MDAwLCA4MDgwIGFuZCA4NDQzIGFyZSBm
b3IgaHR0cC9odHRwcyB0ZXN0cy4KICMgODg4MCBhbmQgOTMyMyBhcmUgZm9yIHdlYnNvY2tldCB0
ZXN0cwogIyAoc2VlIGh0dHBfc2VydmVyLnB5LCBhcGFjaGVfaHR0cF9zZXJ2ZXIucHkgYW5kIHdl
YnNvY2tldF9zZXJ2ZXIucHkpLgotRk9SV0FSRF9QT1JUUyA9ICc4MDAwIDgwODAgODQ0MyA4ODgw
IDkzMjMnCitGT1JXQVJEX1BPUlRTID0gKDgwMDAsIDgwODAsIDg0NDMsIDg4ODAsIDkzMjMpCisK
KyMgV2UgcnVuIG9uZSBGb3J3YXJkZXIgcGVyIGRldmljZSAvIHdvcmtlciwgYW5kIHdlIG5lZWQg
dG8gYWxsb2NhdGUgb25lIGNvbnRyb2wKKyMgcG9ydCBmb3IgZWFjaCBGb3J3YXJkZXIuIFRoZXNl
IGNvbnN0YW50cyBkZWZpbmUgdGhlIHJhbmdlIG9mIHBvcnRzIHdlIGNhbiB1c2UuCitGT1JXQVJE
RVJfQ09OVFJPTF9QT1JUX0JFR0lOID0gMjAwMDAKK0ZPUldBUkRFUl9DT05UUk9MX1BPUlRfRU5E
ID0gMjEwMDAKIAogTVNfVFJVRVRZUEVfRk9OVFNfRElSID0gJy91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy8nCiBNU19UUlVFVFlQRV9GT05UU19QQUNLQUdFID0gJ3R0Zi1t
c2NvcmVmb250cy1pbnN0YWxsZXInCkBAIC0xNDksOSArMTU1LDYgQEAgVEVTVF9SRVNPVVJDRVNf
VE9fUFVTSCA9IFsKICAgICAnY29tcG9zaXRpbmcvcmVzb3VyY2VzL3ZpZGVvLm1wNCcsCiBdCiAK
LU1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FID0gJ21kNXN1bV9iaW4nCi1NRDVTVU1fREVWSUNFX1BB
VEggPSAnL2RhdGEvbG9jYWwvdG1wLycgKyBNRDVTVU1fREVWSUNFX0ZJTEVfTkFNRQotCiBjbGFz
cyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgcG9ydF9u
YW1lID0gJ2Nocm9taXVtLWFuZHJvaWQnCiAKQEAgLTE3OSw2ICsxODIsMTAgQEAgY2xhc3MgQ2hy
b21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgc2VsZi5fZGV2aWNlcyA9IFtdCiAKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4o
c2VsZik6CisgICAgICAgIGNocm9taXVtLkNocm9taXVtUG9ydC5zZXR1cF90ZXN0X3J1bihzZWxm
KQorICAgICAgICBGb3J3YXJkZXIua2lsbF9ob3N0X2RhZW1vbihzZWxmLl9leGVjdXRpdmUucnVu
X2NvbW1hbmQsIHNlbGYuX2J1aWxkX3BhdGgpCisKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVm
IF9hbmRyb2lkX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHBvcnQsIHNlcnZlcl9uYW1lLCBj
bWRfbGluZSwgZW52PU5vbmUpOgogICAgICAgICByZXR1cm4gc2VydmVyX3Byb2Nlc3MuU2VydmVy
UHJvY2Vzcyhwb3J0LCBzZXJ2ZXJfbmFtZSwgY21kX2xpbmUsIGVudiwKQEAgLTIxMiw3ICsyMTks
OCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAg
ICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXN1bHQgPSBz
dXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxmKS5jaGVja19idWlsZChuZWVkc19odHRwKQog
ICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19maWxlX2V4aXN0cyhzZWxmLnBhdGhfdG9fbWQ1
c3VtKCksICdtZDVzdW0gdXRpbGl0eScpIGFuZCByZXN1bHQKLSAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fY2hlY2tfZmlsZV9leGlzdHMoc2VsZi5wYXRoX3RvX2ZvcndhcmRlcigpLCAnZm9yd2FyZGVy
IHV0aWxpdHknKSBhbmQgcmVzdWx0CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVf
ZXhpc3RzKHNlbGYucGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKCksICdkZXZpY2VfZm9yd2FyZGVy
IHV0aWxpdHknKSBhbmQgcmVzdWx0CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVf
ZXhpc3RzKHNlbGYucGF0aF90b19ob3N0X2ZvcndhcmRlcigpLCAnaG9zdF9mb3J3YXJkZXIgdXRp
bGl0eScpIGFuZCByZXN1bHQKICAgICAgICAgaWYgbm90IHJlc3VsdDoKICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ0ZvciBjb21wbGV0ZSBBbmRyb2lkIGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNl
IHNlZTonKQogICAgICAgICAgICAgX2xvZy5lcnJvcignJykKQEAgLTI4MywxMSArMjkxLDE0IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKIAogICAg
ICAgICByZXR1cm4gQ2hyb21pdW1BbmRyb2lkUG9ydC5fYWRiX3BhdGgKIAotICAgIGRlZiBwYXRo
X3RvX2ZvcndhcmRlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2Zv
cndhcmRlcicpCisgICAgZGVmIHBhdGhfdG9faG9zdF9mb3J3YXJkZXIoc2VsZik6CisgICAgICAg
IHJldHVybiBGb3J3YXJkZXIucGF0aF90b19ob3N0X2ZvcndhcmRlcihzZWxmLl9idWlsZF9wYXRo
KQorCisgICAgZGVmIHBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihzZWxmKToKKyAgICAgICAgcmV0
dXJuIEZvcndhcmRlci5wYXRoX3RvX2RldmljZV9mb3J3YXJkZXIoc2VsZi5fYnVpbGRfcGF0aCkK
IAogICAgIGRlZiBwYXRoX3RvX21kNXN1bShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1
aWxkX3BhdGgoTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUpCisgICAgICAgIHJldHVybiBzZWxmLl9i
dWlsZF9wYXRoKEFuZHJvaWRDb21tYW5kcy5NRDVTVU1fREVWSUNFX0ZJTEVfTkFNRSkKIAogICAg
ICMgT3ZlcnJpZGRlbiBwcml2YXRlIGZ1bmN0aW9ucy4KIApAQCAtMzYzLDIxICszNzQsMjAgQEAg
Y2xhc3MgQW5kcm9pZFBlcmYoU2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyKToKICAgICBfY2FjaGVk
X3BlcmZfaG9zdF9wYXRoID0gTm9uZQogICAgIF9oYXZlX3NlYXJjaGVkX2Zvcl9wZXJmX2hvc3Qg
PSBGYWxzZQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwg
b3V0cHV0X2RpciwgYWRiX3BhdGgsIGRldmljZV9zZXJpYWwsIHN5bWZzX3BhdGgsIGlkZW50aWZp
ZXI9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwg
b3V0cHV0X2RpciwgYW5kcm9pZF9jb21tYW5kcywgc3ltZnNfcGF0aCwgaWRlbnRpZmllcj1Ob25l
KToKICAgICAgICAgc3VwZXIoQW5kcm9pZFBlcmYsIHNlbGYpLl9faW5pdF9fKGhvc3QsIGV4ZWN1
dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgImRhdGEiLCBpZGVudGlmaWVyKQotICAgICAgICBzZWxm
Ll9kZXZpY2Vfc2VyaWFsID0gZGV2aWNlX3NlcmlhbAotICAgICAgICBzZWxmLl9hZGJfY29tbWFu
ZCA9IFthZGJfcGF0aCwgJy1zJywgc2VsZi5fZGV2aWNlX3NlcmlhbF0KKyAgICAgICAgc2VsZi5f
YW5kcm9pZF9jb21tYW5kcyA9IGFuZHJvaWRfY29tbWFuZHMKICAgICAgICAgc2VsZi5fcGVyZl9w
cm9jZXNzID0gTm9uZQogICAgICAgICBzZWxmLl9zeW1mc19wYXRoID0gc3ltZnNfcGF0aAogCiAg
ICAgZGVmIGNoZWNrX2NvbmZpZ3VyYXRpb24oc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBw
ZXJmIGlzIGluc3RhbGxlZAotICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2
aWNlKCcvc3lzdGVtL2Jpbi9wZXJmJyk6Ci0gICAgICAgICAgICBwcmludCAiQ2Fubm90IGZpbmQg
L3N5c3RlbS9iaW4vcGVyZiBvbiBkZXZpY2UgJXMiICUgc2VsZi5fZGV2aWNlX3NlcmlhbAorICAg
ICAgICBpZiBub3Qgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2Uo
Jy9zeXN0ZW0vYmluL3BlcmYnKToKKyAgICAgICAgICAgIHByaW50ICJDYW5ub3QgZmluZCAvc3lz
dGVtL2Jpbi9wZXJmIG9uIGRldmljZSAlcyIgJSBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLmRldmlj
ZV9zZXJpYWwoKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICMgQ2hlY2sgdGhh
dCB0aGUgZGV2aWNlIGlzIGEgdXNlcmRlYnVnIGJ1aWxkIChvciBhdCBsZWFzdCBoYXMgdGhlIG5l
Y2Vzc2FyeSBsaWJyYXJpZXMpLgotICAgICAgICBpZiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdnZXRwcm9wJywgJ3JvLmJ1aWxkLnR5cGUnXSkuc3RyaXAoKSAhPSAndXNlcmRlYnVn
JzoKLSAgICAgICAgICAgIHByaW50ICJEZXZpY2UgJXMgaXMgbm90IGZsYXNoZWQgd2l0aCBhIHVz
ZXJkZWJ1ZyBidWlsZCBvZiBBbmRyb2lkIiAlIHNlbGYuX2RldmljZV9zZXJpYWwKKyAgICAgICAg
aWYgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdnZXRw
cm9wJywgJ3JvLmJ1aWxkLnR5cGUnXSkuc3RyaXAoKSAhPSAndXNlcmRlYnVnJzoKKyAgICAgICAg
ICAgIHByaW50ICJEZXZpY2UgJXMgaXMgbm90IGZsYXNoZWQgd2l0aCBhIHVzZXJkZWJ1ZyBidWls
ZCBvZiBBbmRyb2lkIiAlIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMuZGV2aWNlX3NlcmlhbCgpCiAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBGSVhNRTogQ2hlY2sgdGhhdCB0aGUg
YmluYXJ5IGFjdHVhbGx5IGlzIHBlcmYtYWJsZSAoaGFzIHN0YWNrZnJhbWUgcG9pbnRlcnMpPwog
ICAgICAgICAjIG9iamR1bXAgLXMgYSBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlIGl0IG1vZGlmaWVz
IHRoZSBmcD8KQEAgLTQwMywxOCArNDEzLDExIEBAIEdvb2dsZXJzIHNob3VsZCByZWFkOgogaHR0
cDovL2dvdG8uZ29vZ2xlLmNvbS9jci1hbmRyb2lkLXBlcmYtaG93dG8KICIiIgogCi0gICAgZGVm
IF9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxlX3BhdGgpOgotICAgICAgICBh
c3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCi0gICAgICAgIHJldHVybiBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAo
KSA9PSBmdWxsX2ZpbGVfcGF0aAotCi0gICAgZGVmIF9ydW5fYWRiX2NvbW1hbmQoc2VsZiwgY21k
KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYu
X2FkYl9jb21tYW5kICsgY21kKQotCiAgICAgZGVmIGF0dGFjaF90b19waWQoc2VsZiwgcGlkKToK
ICAgICAgICAgYXNzZXJ0KHBpZCkKICAgICAgICAgYXNzZXJ0KHNlbGYuX3BlcmZfcHJvY2VzcyA9
PSBOb25lKQogICAgICAgICAjIEZJWE1FOiBUaGlzIGNhbid0IGJlIGEgZml4ZWQgdGltZW91dCEK
LSAgICAgICAgY21kID0gc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJ3BlcmYnLCAncmVj
b3JkJywgJy1nJywgJy1wJywgcGlkLCAnc2xlZXAnLCAzMF0KKyAgICAgICAgY21kID0gc2VsZi5f
YW5kcm9pZF9jb21tYW5kcy5hZGJfY29tbWFuZCgpICsgWydzaGVsbCcsICdwZXJmJywgJ3JlY29y
ZCcsICctZycsICctcCcsIHBpZCwgJ3NsZWVwJywgMzBdCiAgICAgICAgIHNlbGYuX3BlcmZfcHJv
Y2VzcyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKGNtZCkKIAogICAgIGRlZiBfcGVyZl92
ZXJzaW9uX3N0cmluZyhzZWxmLCBwZXJmX3BhdGgpOgpAQCAtNDQ4LDcgKzQ1MSw3IEBAIGh0dHA6
Ly9nb3RvLmdvb2dsZS5jb20vY3ItYW5kcm9pZC1wZXJmLWhvd3RvCiAgICAgICAgIGlmIHBlcmZf
ZXhpdGNvZGUgIT0gMDoKICAgICAgICAgICAgIHByaW50ICJQZXJmIGZhaWxlZCAoZXhpdCBjb2Rl
OiAlaSksIGNhbid0IHByb2Nlc3MgcmVzdWx0cy4iICUgcGVyZl9leGl0Y29kZQogICAgICAgICAg
ICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCAnL2RhdGEv
cGVyZi5kYXRhJywgc2VsZi5fb3V0cHV0X3BhdGhdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2Nv
bW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCAnL2RhdGEvcGVyZi5kYXRhJywgc2VsZi5f
b3V0cHV0X3BhdGhdKQogCiAgICAgICAgIHBlcmZob3N0X3BhdGggPSBzZWxmLl9wZXJmaG9zdF9w
YXRoKCkKICAgICAgICAgaWYgcGVyZmhvc3RfcGF0aDoKQEAgLTQ3Niw2ICs0NzksMTk1IEBAIGh0
dHA6Ly9jcmJ1Zy5jb20vMTY1MjUwIGRpc2N1c3NlcyBtYWtpbmcgdGhlc2UgcHJlLWJ1aWx0IGJp
bmFyaWVzIGV4dGVybmFsbHkgYXZhCiAgICAgICAgIHByaW50ICcgJy5qb2luKFtwZXJmaG9zdF9k
aXNwbGF5X3BhdGNoLCAncmVwb3J0JywgJy1pJywgc2VsZi5fb3V0cHV0X3BhdGgsICctLXN5bWZz
Jywgc2VsZi5fc3ltZnNfcGF0aF0pCiAKIAorY2xhc3MgQW5kcm9pZENvbW1hbmRzKG9iamVjdCk6
CisgICAgTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUgPSAnbWQ1c3VtX2JpbicKKyAgICBNRDVTVU1f
REVWSUNFX1BBVEggPSAnL2RhdGEvbG9jYWwvdG1wLycgKyBNRDVTVU1fREVWSUNFX0ZJTEVfTkFN
RQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVzeXN0ZW0sIGNvbW1hbmRfZXhlY3V0b3Is
IGRldmljZV9zZXJpYWwsIHBhdGhfdG9fYWRiX2dldHRlciwgcGF0aF9idWlsZGVyLCBkZWJ1Z19s
b2dnZXIpOgorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbQorICAgICAgICBz
ZWxmLl9jb21tYW5kX2V4ZWN1dG9yID0gY29tbWFuZF9leGVjdXRvcgorICAgICAgICBzZWxmLl9k
ZXZpY2Vfc2VyaWFsID0gZGV2aWNlX3NlcmlhbAorICAgICAgICBzZWxmLl9wYXRoX3RvX2FkYl9n
ZXR0ZXIgPSBwYXRoX3RvX2FkYl9nZXR0ZXIKKyAgICAgICAgc2VsZi5fcGF0aF9idWlsZGVyID0g
cGF0aF9idWlsZGVyCisgICAgICAgIHNlbGYuX2RlYnVnX2xvZ2dlciA9IGRlYnVnX2xvZ2dlcgor
ICAgICAgICBzZWxmLl9hZGJfY29tbWFuZF9iYXNlID0gTm9uZQorCisgICAgZGVmIHNldHVwX21k
NXN1bShzZWxmKToKKyAgICAgICAgc2VsZi5fbWQ1c3VtX3BhdGggPSBzZWxmLl9wYXRoX2J1aWxk
ZXIoQW5kcm9pZENvbW1hbmRzLk1ENVNVTV9ERVZJQ0VfRklMRV9OQU1FKQorICAgICAgICBpZiBu
b3Qgc2VsZi5maWxlX2V4aXN0c19vbl9kZXZpY2UoQW5kcm9pZENvbW1hbmRzLk1ENVNVTV9ERVZJ
Q0VfUEFUSCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wdXNoX3RvX2RldmljZShzZWxmLl9t
ZDVzdW1fcGF0aCwgQW5kcm9pZENvbW1hbmRzLk1ENVNVTV9ERVZJQ0VfUEFUSCk6CisgICAgICAg
ICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0NvdWxkIG5vdCBwdXNoIG1kNXN1bSB0byB0
aGUgZGV2aWNlJykKKworICAgIGRlZiBkZXZpY2Vfc2VyaWFsKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fZGV2aWNlX3NlcmlhbAorCisgICAgZGVmIGFkYl9jb21tYW5kKHNlbGYpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5fYWRiX2NvbW1hbmRfYmFzZToKKyAgICAgICAgICAgIHNlbGYuX2Fk
Yl9jb21tYW5kX2Jhc2UgPSBbc2VsZi5fcGF0aF90b19hZGJfZ2V0dGVyKCksICctcycsIHNlbGYu
X2RldmljZV9zZXJpYWxdCisgICAgICAgIHJldHVybiBzZWxmLl9hZGJfY29tbWFuZF9iYXNlCisK
KyAgICBkZWYgX3J1bl9jb21tYW5kKHNlbGYsIGNtZCwgZXJyb3JfaGFuZGxlcj1Ob25lKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2NvbW1hbmRfZXhlY3V0b3IoY21kLCBlcnJvcl9oYW5kbGVyPWVy
cm9yX2hhbmRsZXIpCisKKyAgICBkZWYgcnVuX2FkYl9jb21tYW5kKHNlbGYsIGNtZCwgZXJyb3Jf
aGFuZGxlcj1Ob25lKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fY29tbWFuZF9leGVjdXRvcihz
ZWxmLmFkYl9jb21tYW5kKCkgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKKyAg
ICAgICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBvZiBj
b21tYW5kcyBsaWtlICdhZGIgbG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90b21ic3RvbmVzL3RvbWJz
dG9uZTAxJworICAgICAgICAjIHdob3NlIG91dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQgaW4g
bGF0ZXIgbG9ncy4KKyAgICAgICAgc2VsZi5fZGVidWdfbG9nZ2VyKCdSdW4gYWRiIHJlc3VsdDog
JyArIG91dHB1dFs6ODBdKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgZmlsZV9l
eGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToKKyAgICAgICAgYXNzZXJ0IGZ1
bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxs
X2ZpbGVfcGF0aAorCisgICAgZGVmIHB1c2hfdG9fZGV2aWNlKHNlbGYsIGhvc3RfcGF0aCwgZGV2
aWNlX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydwdXNoJywg
aG9zdF9wYXRoLCBkZXZpY2VfcGF0aF0pCisKKyAgICBkZWYgcHVsbF9mcm9tX2RldmljZShzZWxm
LCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2FkYl9j
b21tYW5kKFsncHVsbCcsIGRldmljZV9wYXRoLCBob3N0X3BhdGhdKQorCisgICAgZGVmIF9tZDVz
dW1fZXJyb3JfaGFuZGxlcihzZWxmLCBzY3JpcHRfZXJyb3IpOgorICAgICAgICAjIEl0IGlzIG5v
dCBhbiBlcnJvciBpZiBtZDVzdW0gZXhpdHMgd2l0aCAxLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUg
ZmlsZSBpdCBpcyBpbnZva2VkIG9uIGRvZXMgbm90IGV4aXQuCisgICAgICAgIHNlbGYuX2RlYnVn
X2xvZ2dlcihzY3JpcHRfZXJyb3IpCisgICAgICAgIHBhc3MKKworICAgIGRlZiBwdXNoX2ZpbGVf
aWZfbmVlZGVkKHNlbGYsIGhvc3RfZmlsZSwgZGV2aWNlX2ZpbGUpOgorICAgICAgICBhc3NlcnQg
c2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoaG9zdF9maWxlKQorICAgICAgICBwYXRoX3RvX21kNXN1
bV9ob3N0ID0gc2VsZi5fbWQ1c3VtX3BhdGggKyAnX2hvc3QnCisgICAgICAgIGFzc2VydCBzZWxm
Ll9maWxlc3lzdGVtLmV4aXN0cyhwYXRoX3RvX21kNXN1bV9ob3N0KQorICAgICAgICBtZDVzdW1f
b3V0cHV0ID0gc2VsZi5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsIEFuZHJvaWRDb21tYW5kcy5N
RDVTVU1fREVWSUNFX1BBVEgsIGRldmljZV9maWxlXSkKKyAgICAgICAgZGV2aWNlX2hhc2hlcyA9
IEFuZHJvaWRDb21tYW5kcy5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1
bV9vdXRwdXQpCisgICAgICAgIGhvc3RfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJv
bV9tZDVzdW1fb3V0cHV0KAorICAgICAgICAgICAgc2VsZi5fcnVuX2NvbW1hbmQoW3BhdGhfdG9f
bWQ1c3VtX2hvc3QsIGhvc3RfZmlsZV0sIHNlbGYuX21kNXN1bV9lcnJvcl9oYW5kbGVyKSkKKyAg
ICAgICAgaWYgaG9zdF9oYXNoZXMgYW5kIGRldmljZV9oYXNoZXMgPT0gaG9zdF9oYXNoZXM6Cisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5wdXNoX3RvX2RldmljZShob3N0X2ZpbGUs
IGRldmljZV9maWxlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZXh0cmFjdF9oYXNo
ZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgorICAgICAgICBhc3NlcnQgbWQ1
c3VtX291dHB1dAorICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylbMF0gZm9yIGxpbmUg
aW4gbWQ1c3VtX291dHB1dF0KKworCisjIERldmljZSB0byBob3N0IHBvcnQgZm9yd2FyZGVyLgor
Y2xhc3MgRm9yd2FyZGVyKG9iamVjdCk6CisgICAgREVWSUNFX0ZPUldBUkRFUl9QQVRIID0gREVW
SUNFX1NPVVJDRV9ST09UX0RJUiArICdkZXZpY2VfZm9yd2FyZGVyJworICAgIEFEQl9DT05UUk9M
X1NPQ0tFVCA9ICdjaHJvbWVfZGV2aWNlX2ZvcndhcmRlcicKKyAgICBIT1NUX0xPQ0FMX0FERFJF
U1MgPSAnMTI3LjAuMC4xJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVzeXN0ZW0sIGNv
bW1hbmRfZXhlY3V0b3IsIGhvc3RfcGF0aF9idWlsZGVyLCBhbmRyb2lkX2NvbW1hbmRzKToKKyAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fZGV2aWNl
X2ZvcndhcmRlcl9wYXRoID0gRm9yd2FyZGVyLnBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihob3N0
X3BhdGhfYnVpbGRlcikKKyAgICAgICAgc2VsZi5faG9zdF9mb3J3YXJkZXJfcGF0aCA9IEZvcndh
cmRlci5wYXRoX3RvX2hvc3RfZm9yd2FyZGVyKGhvc3RfcGF0aF9idWlsZGVyKQorICAgICAgICBz
ZWxmLl9jb21tYW5kX2V4ZWN1dG9yID0gY29tbWFuZF9leGVjdXRvcgorICAgICAgICBzZWxmLl9h
bmRyb2lkX2NvbW1hbmRzID0gYW5kcm9pZF9jb21tYW5kcworICAgICAgICBzZWxmLl93b3JrZXJf
bnVtYmVyX3RvX2FkYl9jb250cm9sX3BvcnRfbWFwID0ge30KKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgX2NvbW1hbmRfZXJyb3JfaGFuZGxlcihlcnJvcl9tZXNzYWdlLCBzY3JpcHRfZXJy
b3IpOgorICAgICAgICBpZiBzY3JpcHRfZXJyb3IuZXhpdF9jb2RlICE9IDA6CisgICAgICAgICAg
ICByYWlzZSBBc3NlcnRpb25FcnJvcignJXM6ICVzJyAlIChlcnJvcl9tZXNzYWdlLCBzY3JpcHRf
ZXJyb3Iub3V0cHV0KSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2VfY29tbWFu
ZF9lcnJvcl9oYW5kbGVyKGVycm9yX21lc3NhZ2UpOgorICAgICAgICByZXR1cm4gZnVuY3Rvb2xz
LnBhcnRpYWwoRm9yd2FyZGVyLl9jb21tYW5kX2Vycm9yX2hhbmRsZXIsIGVycm9yX21lc3NhZ2Up
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtpbGxfaG9zdF9kYWVtb24oY29tbWFuZF9l
eGVjdXRvciwgaG9zdF9wYXRoX2J1aWxkZXIpOgorICAgICAgICBfbG9nLmRlYnVnKCdLaWxsaW5n
IGhvc3QgZGFlbW9uJykKKyAgICAgICAgRm9yd2FyZGVyLl9ydW5fc2hlbGxfY29tbWFuZCgKKyAg
ICAgICAgICAgIGNvbW1hbmRfZXhlY3V0b3IsIFtGb3J3YXJkZXIucGF0aF90b19ob3N0X2Zvcndh
cmRlcihob3N0X3BhdGhfYnVpbGRlciksICdraWxsLXNlcnZlciddLAorICAgICAgICAgICAgRm9y
d2FyZGVyLl9tYWtlX2NvbW1hbmRfZXJyb3JfaGFuZGxlcignQ291bGQgbm90IGtpbGwgaG9zdF9m
b3J3YXJkZXInKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYga2lsbF9kZXZpY2VfZGFl
bW9uKGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJvaWRfY29tbWFuZHMsIGxvZ2dlcik6CisgICAgICAg
IGxvZ2dlcignS2lsbGluZyBkZXZpY2UgZGFlbW9uJykKKyAgICAgICAgaWYgbm90IGFuZHJvaWRf
Y29tbWFuZHMuZmlsZV9leGlzdHNfb25fZGV2aWNlKEZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVS
X1BBVEgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIEZvcndhcmRlci5fcnVuX2FkYl9z
aGVsbF9jb21tYW5kKAorICAgICAgICAgICAgY29tbWFuZF9leGVjdXRvciwgYW5kcm9pZF9jb21t
YW5kcywgW0ZvcndhcmRlci5ERVZJQ0VfRk9SV0FSREVSX1BBVEgsICdraWxsLXNlcnZlciddLAor
ICAgICAgICAgICAgRm9yd2FyZGVyLl9tYWtlX2NvbW1hbmRfZXJyb3JfaGFuZGxlcignQ291bGQg
bm90IGtpbGwgZGV2aWNlX2ZvcndhcmRlcicpKQorCisgICAgZGVmIHNldHVwX3JlZGlyZWN0aW9u
cyhzZWxmLCB3b3JrZXJfbnVtYmVyLCBwb3J0X3BhaXJzKToKKyAgICAgICAgYWRiX2NvbnRyb2xf
cG9ydCA9IHNlbGYuX3dvcmtlcl9udW1iZXJfdG9fYWRiX2NvbnRyb2xfcG9ydF9tYXAuZ2V0KHdv
cmtlcl9udW1iZXIpCisgICAgICAgIGlmIG5vdCBhZGJfY29udHJvbF9wb3J0OgorICAgICAgICAg
ICAgYWRiX2NvbnRyb2xfcG9ydCA9IHNlbGYuX2FsbG9jYXRlX2FkYl9jb250cm9sX3BvcnQod29y
a2VyX251bWJlcikKKyAgICAgICAgICAgIGlmIG5vdCBhZGJfY29udHJvbF9wb3J0OgorICAgICAg
ICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdDb3VsZCBub3QgYWxsb2NhdGUgQURCIGNv
bnRyb2wgcG9ydCcpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyX3RvX2FkYl9jb250
cm9sX3BvcnRfbWFwW3dvcmtlcl9udW1iZXJdID0gYWRiX2NvbnRyb2xfcG9ydAorCisgICAgICAg
IGZvcndhcmRfY21kID0gWydmb3J3YXJkJywgJ3RjcDolcycgJSBhZGJfY29udHJvbF9wb3J0LCAn
bG9jYWxhYnN0cmFjdDolcycgJSBGb3J3YXJkZXIuQURCX0NPTlRST0xfU09DS0VUXQorICAgICAg
ICBGb3J3YXJkZXIuX3J1bl9hZGJfY29tbWFuZCgKKyAgICAgICAgICAgIHNlbGYuX2NvbW1hbmRf
ZXhlY3V0b3IsIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMsIGZvcndhcmRfY21kLAorICAgICAgICAg
ICAgRm9yd2FyZGVyLl9tYWtlX2NvbW1hbmRfZXJyb3JfaGFuZGxlcignQ291bGQgbm90IGZvcndh
cmQgaG9zdCB0byBkZXZpY2UgcG9ydCB1c2luZyBBREInKSkKKworICAgICAgICBzZWxmLl9hbmRy
b2lkX2NvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fZGV2aWNlX2ZvcndhcmRlcl9w
YXRoLCBGb3J3YXJkZXIuREVWSUNFX0ZPUldBUkRFUl9QQVRIKQorICAgICAgICBGb3J3YXJkZXIu
X3J1bl9hZGJfc2hlbGxfY29tbWFuZCgKKyAgICAgICAgICAgIHNlbGYuX2NvbW1hbmRfZXhlY3V0
b3IsIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMsIFtGb3J3YXJkZXIuREVWSUNFX0ZPUldBUkRFUl9Q
QVRILCBGb3J3YXJkZXIuQURCX0NPTlRST0xfU09DS0VUXSwKKyAgICAgICAgICAgIEZvcndhcmRl
ci5fbWFrZV9jb21tYW5kX2Vycm9yX2hhbmRsZXIoJ0NvdWxkIG5vdCBydW4gZGV2aWNlX2Zvcndh
cmRlcicpKQorCisgICAgICAgICMgQ29tbWFuZCBmb3JtYXQ6IDxhZGIgY29udHJvbCBwb3J0Pjo8
ZGV2aWNlIHBvcnQ+Ojxob3N0IHBvcnQ+Ojxob3N0IGFkZHJlc3M+CisgICAgICAgIHJlZGlyZWN0
aW9uX2NvbW1hbmRzID0gWworICAgICAgICAgICAgJyVkOiVkOiVkOiVzJyAlIChhZGJfY29udHJv
bF9wb3J0LCBkZXZpY2VfcG9ydCwgaG9zdF9wb3J0LCBGb3J3YXJkZXIuSE9TVF9MT0NBTF9BRERS
RVNTKSBmb3IgZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCBpbiBwb3J0X3BhaXJzXQorICAgICAgICBm
b3IgcmVkaXJlY3Rpb25fY29tbWFuZCBpbiByZWRpcmVjdGlvbl9jb21tYW5kczoKKyAgICAgICAg
ICAgIEZvcndhcmRlci5fcnVuX3NoZWxsX2NvbW1hbmQoCisgICAgICAgICAgICAgICAgc2VsZi5f
Y29tbWFuZF9leGVjdXRvciwgW3NlbGYuX2hvc3RfZm9yd2FyZGVyX3BhdGgsIHJlZGlyZWN0aW9u
X2NvbW1hbmRdLAorICAgICAgICAgICAgICAgIEZvcndhcmRlci5fbWFrZV9jb21tYW5kX2Vycm9y
X2hhbmRsZXIoJ0NvdWxkIG5vdCBydW4gaG9zdF9mb3J3YXJkZXInKSkKKworICAgIGRlZiBfYWxs
b2NhdGVfYWRiX2NvbnRyb2xfcG9ydChzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdXNl
ZF9wb3J0cyA9IHNlbGYuX2dldF91c2VkX3BvcnRzKCkKKyAgICAgICAgcG9ydCA9IEZPUldBUkRF
Ul9DT05UUk9MX1BPUlRfQkVHSU4gKyB3b3JrZXJfbnVtYmVyCisgICAgICAgIHdoaWxlIHBvcnQg
PCBGT1JXQVJERVJfQ09OVFJPTF9QT1JUX0VORCBhbmQgcG9ydCBpbiB1c2VkX3BvcnRzOgorICAg
ICAgICAgICAgcG9ydCArPSAxCisgICAgICAgIGlmIHBvcnQgPj0gRk9SV0FSREVSX0NPTlRST0xf
UE9SVF9FTkQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gcG9ydAor
CisgICAgZGVmIF9nZXRfdXNlZF9wb3J0cyhzZWxmKToKKyAgICAgICAgdXNlZF9wb3J0cyA9IHNl
dChbXSkKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmls
ZV9mb3JfcmVhZGluZygnL3Byb2MvbmV0L3RjcCcpLnhyZWFkbGluZXMoKToKKyAgICAgICAgICAg
IGZpZWxkcyA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgaWYgbm90IGZpZWxkcyBvciBmaWVs
ZHNbMF0gPT0gJ3NsJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbG9j
YWxfYWRkcmVzcyA9IGZpZWxkc1sxXQorICAgICAgICAgICAgcmVtb3RlX2FkZHJlc3MgPSBmaWVs
ZHNbMl0KKyAgICAgICAgICAgIGxvY2FsX2lwLCBsb2NhbF9wb3J0ID0gbG9jYWxfYWRkcmVzcy5z
cGxpdCgnOicpCisgICAgICAgICAgICByZW1vdGVfaXAsIHJlbW90ZV9wb3J0ID0gcmVtb3RlX2Fk
ZHJlc3Muc3BsaXQoJzonKQorICAgICAgICAgICAgdXNlZF9wb3J0cy5hZGQobG9jYWxfcG9ydCkK
KyAgICAgICAgICAgIHVzZWRfcG9ydHMuYWRkKHJlbW90ZV9wb3J0KQorICAgICAgICByZXR1cm4g
dXNlZF9wb3J0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfcnVuX2FkYl9zaGVsbF9j
b21tYW5kKGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJvaWRfY29tbWFuZHMsIGNtZF9hcnJheSwgZXJy
b3JfaGFuZGxlcik6CisgICAgICAgICMgTm90ZSB0aGF0IHRoZSBleHRyYSAnJScgY2hhcmFjdGVy
IGJlbG93IGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9jZXNzJyBvdXRw
dXQgaXMgbm90IG5ld2xpbmUgdGVybWluYXRlZC4KKyAgICAgICAgY21kID0gYW5kcm9pZF9jb21t
YW5kcy5hZGJfY29tbWFuZCgpICsgWydzaGVsbCddICsgWycgJy5qb2luKGNtZF9hcnJheSkgKyAn
OyBlY2hvICUkPyddCisgICAgICAgIGxpbmVzID0gY29tbWFuZF9leGVjdXRvcihjbWQsIGRlY29k
ZV9vdXRwdXQ9RmFsc2UsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikuc3BsaXRsaW5lcygp
CisgICAgICAgIGxhc3RfbGluZSA9IGxpbmVzWy0xXQorICAgICAgICBzdGF0dXNfc2VwYXJhdG9y
X3BvcyA9IGxhc3RfbGluZS5yZmluZCgnJScpCisgICAgICAgIGFzc2VydCBzdGF0dXNfc2VwYXJh
dG9yX3BvcyA+PSAwCisgICAgICAgIHN0YXR1cyA9IGludChsYXN0X2xpbmVbc3RhdHVzX3NlcGFy
YXRvcl9wb3MgKyAxOl0pCisgICAgICAgIGlmIG5vdCBzdGF0dXNfc2VwYXJhdG9yX3BvczoKKyAg
ICAgICAgICAgIGxpbmVzID0gbGluZXNbOi0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
bGluZXMgPSBsaW5lc1s6LTFdICsgbGFzdF9saW5lWzpzdGF0dXNfc2VwYXJhdG9yX3Bvc10KKyAg
ICAgICAgcmV0dXJuIChzdGF0dXMsIGxpbmVzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBfcnVuX2FkYl9jb21tYW5kKGNvbW1hbmRfZXhlY3V0b3IsIGFuZHJvaWRfY29tbWFuZHMsIGNt
ZF9hcnJheSwgZXJyb3JfaGFuZGxlcik6CisgICAgICAgIHJldHVybiBjb21tYW5kX2V4ZWN1dG9y
KGFuZHJvaWRfY29tbWFuZHMuYWRiX2NvbW1hbmQoKSArIGNtZF9hcnJheSwgZGVjb2RlX291dHB1
dD1GYWxzZSwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBfcnVuX3NoZWxsX2NvbW1hbmQoY29tbWFuZF9leGVjdXRvciwgY21kX2FycmF5
LCBlcnJvcl9oYW5kbGVyKToKKyAgICAgICAgcmV0dXJuIGNvbW1hbmRfZXhlY3V0b3IoY21kX2Fy
cmF5LCBkZWNvZGVfb3V0cHV0PUZhbHNlLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHBhdGhfdG9fZGV2aWNlX2ZvcndhcmRlcihob3N0
X3BhdGhfYnVpbGRlcik6CisgICAgICAgIHJldHVybiBob3N0X3BhdGhfYnVpbGRlcignZGV2aWNl
X2ZvcndhcmRlcicpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHBhdGhfdG9faG9zdF9m
b3J3YXJkZXIoaG9zdF9wYXRoX2J1aWxkZXIpOgorICAgICAgICByZXR1cm4gaG9zdF9wYXRoX2J1
aWxkZXIoJ2hvc3RfZm9yd2FyZGVyJykKKwogY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRy
aXZlci5Ecml2ZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVy
LCBwaXhlbF90ZXN0cywgbm9fdGltZW91dD1GYWxzZSk6CiAgICAgICAgIHN1cGVyKENocm9taXVt
QW5kcm9pZERyaXZlciwgc2VsZikuX19pbml0X18ocG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxf
dGVzdHMsIG5vX3RpbWVvdXQpCkBAIC00ODUsMTEgKzY3NywxMiBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHNlbGYuX2Vycl9maWZvX3BhdGgg
PSBERVZJQ0VfRklGT19QQVRIICsgJ3N0ZGVyci5maWZvJwogICAgICAgICBzZWxmLl9yZWFkX3N0
ZG91dF9wcm9jZXNzID0gTm9uZQogICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0g
Tm9uZQotICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2VzcyA9IE5vbmUKICAgICAgICAgc2Vs
Zi5faGFzX3NldHVwID0gRmFsc2UKICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3JzID0g
e30KICAgICAgICAgc2VsZi5fZGV2aWNlX3NlcmlhbCA9IHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFs
KHdvcmtlcl9udW1iZXIpCi0gICAgICAgIHNlbGYuX2FkYl9jb21tYW5kX2Jhc2UgPSBOb25lCisg
ICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMgPSBBbmRyb2lkQ29tbWFuZHMoCisgICAgICAg
ICAgICBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbSwgc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1
bl9jb21tYW5kLCBzZWxmLl9kZXZpY2Vfc2VyaWFsLCBzZWxmLl9wb3J0LnBhdGhfdG9fYWRiLAor
ICAgICAgICAgICAgc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCwgc2VsZi5fbG9nX2RlYnVnKQogCiAg
ICAgICAgICMgRklYTUU6IElmIHdlIHRhdWdodCBQcm9maWxlRmFjdG9yeSBhYm91dCAidGFyZ2V0
IiBkZXZpY2VzIHdlIGNvdWxkCiAgICAgICAgICMganVzdCB1c2UgdGhlIGxvZ2ljIGluIERyaXZl
ciBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuCkBAIC00OTcsNyArNjkwLDcgQEAgY2xh
c3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgc3lt
ZnNfcGF0aCA9IHNlbGYuX2ZpbmRfb3JfY3JlYXRlX3N5bWZzKCkKICAgICAgICAgICAgICMgRklY
TUU6IFdlIHNob3VsZCBwYXNzIHRoaXMgc29tZSBzb3J0IG9mICJCcmlkZ2UiIG9iamVjdCBhYnN0
cmFjdGlvbiBhcm91bmQgQURCIGluc3RlYWQgb2YgYSBwYXRoL2RldmljZSBwYWlyLgogICAgICAg
ICAgICAgc2VsZi5fcHJvZmlsZXIgPSBBbmRyb2lkUGVyZihzZWxmLl9wb3J0Lmhvc3QsIHNlbGYu
X3BvcnQuX3BhdGhfdG9fZHJpdmVyKCksIHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwK
LSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnBhdGhfdG9fYWRiKCksIHNlbGYuX2RldmljZV9z
ZXJpYWwsIHN5bWZzX3BhdGgpXAorICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFu
ZHMsIHN5bWZzX3BhdGgpXAogICAgICAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGxheWVyaW5n
IHZpb2xhdGlvbiBhbmQgc2hvdWxkIGJlIG1vdmVkIHRvIFBvcnQuY2hlY2tfc3lzX2RlcHMKICAg
ICAgICAgICAgICMgb25jZSB3ZSBoYXZlIGFuIGFic3RyYWN0aW9uIGFyb3VuZCBhbiBhZGJfcGF0
aC9kZXZpY2Vfc2VyaWFsIHBhaXIgdG8gbWFrZSBpdAogICAgICAgICAgICAgIyBlYXN5IHRvIG1h
a2UgdGhlc2UgY2xhc3MgbWV0aG9kcyBvbiBBbmRyb2lkUGVyZi4KQEAgLTUzNSwzNyArNzI4LDM0
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKIAogICAgICAg
ICByZXR1cm4gc3ltZnNfcGF0aAogCi0gICAgZGVmIF9zZXR1cF9tZDVzdW1fYW5kX3B1c2hfZGF0
YV9pZl9uZWVkZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuX21kNXN1bV9wYXRoID0gc2VsZi5fcG9y
dC5wYXRoX3RvX21kNXN1bSgpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9k
ZXZpY2UoTUQ1U1VNX0RFVklDRV9QQVRIKToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wdXNo
X3RvX2RldmljZShzZWxmLl9tZDVzdW1fcGF0aCwgTUQ1U1VNX0RFVklDRV9QQVRIKToKLSAgICAg
ICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignQ291bGQgbm90IHB1c2ggbWQ1c3VtIHRv
IGRldmljZScpCi0KLSAgICAgICAgc2VsZi5fcHVzaF9leGVjdXRhYmxlKCkKLSAgICAgICAgc2Vs
Zi5fcHVzaF9mb250cygpCi0gICAgICAgIHNlbGYuX3B1c2hfdGVzdF9yZXNvdXJjZXMoKQotCiAg
ICAgZGVmIF9zZXR1cF90ZXN0KHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9oYXNfc2V0dXA6CiAg
ICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBzZWxmLl9yZXN0YXJ0X2FkYl9hc19yb290KCkK
LSAgICAgICAgc2VsZi5fc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2RhdGFfaWZfbmVlZGVkKCkKLSAg
ICAgICAgc2VsZi5faGFzX3NldHVwID0gVHJ1ZQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1h
bmRzLnNldHVwX21kNXN1bSgpCisKKyAgICAgICAgc2VsZi5fcHVzaF9leGVjdXRhYmxlKCkKKyAg
ICAgICAgc2VsZi5fcHVzaF9mb250cygpCisgICAgICAgIHNlbGYuX3B1c2hfdGVzdF9yZXNvdXJj
ZXMoKQorCiAgICAgICAgIHNlbGYuX3NldHVwX3BlcmZvcm1hbmNlKCkKKyAgICAgICAgc2VsZi5f
aGFzX3NldHVwID0gVHJ1ZQogCiAgICAgICAgICMgUmVxdWlyZWQgYnkgd2Via2l0X3N1cHBvcnQ6
OkdldFdlYktpdFJvb3REaXJGaWxlUGF0aCgpLgogICAgICAgICAjIE90aGVyIGRpcmVjdG9yaWVz
IHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFkYiBwdXNoLgotICAgICAgICBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0Vf
Uk9PVF9ESVIgKyAnY2hyb21lJ10pCisgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1Rf
RElSICsgJ2Nocm9tZSddKQogCiAgICAgICAgICMgQWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFw
cCB0byBmdWxseSBhY2Nlc3MgdGhlIGRpcmVjdG9yeS4KICAgICAgICAgIyBUaGUgbmF0aXZlIGNv
ZGUgbmVlZHMgdGhlIHBlcm1pc3Npb24gdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzIGFuZCBjcmVh
dGUgcGlwZXMgaGVyZS4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
bWtkaXInLCAnLXAnLCBERVZJQ0VfRFJUX0RJUl0pCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9EUlRfRElSXSkKKyAgICAgICAg
c2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2Rpcics
ICctcCcsIERFVklDRV9EUlRfRElSXSkKKyAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0p
CiAKICAgICAgICAgIyBEZWxldGUgdGhlIGRpc2sgY2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNs
ZWFuIHRlc3QgcnVuLgogICAgICAgICAjIFRoaXMgaXMgbGlrZSB3aGF0J3MgZG9uZSBpbiBDaHJv
bWl1bVBvcnQuc2V0dXBfdGVzdF9ydW4gYnV0IG9uIHRoZSBkZXZpY2UuCi0gICAgICAgIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJd
KQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQorCisgICAgICAgIEZvcndhcmRlci5r
aWxsX2RldmljZV9kYWVtb24oc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kLCBzZWxm
Ll9hbmRyb2lkX2NvbW1hbmRzLCBzZWxmLl9sb2dfZGVidWcpCiAKICAgICBkZWYgX2xvZ19lcnJv
cihzZWxmLCBtZXNzYWdlKToKICAgICAgICAgX2xvZy5lcnJvcignWyVzXSAlcycgJSAoc2VsZi5f
ZGV2aWNlX3NlcmlhbCwgbWVzc2FnZSkpCkBAIC01NzYsODUgKzc2Niw0NSBAQCBjbGFzcyBDaHJv
bWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgZGVmIF9hYm9ydChzZWxmLCBt
ZXNzYWdlKToKICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1slc10gJXMnICUgKHNlbGYu
X2RldmljZV9zZXJpYWwsIG1lc3NhZ2UpKQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBf
ZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgotICAgICAg
ICBhc3NlcnQgbWQ1c3VtX291dHB1dAotICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylb
MF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291dHB1dF0KLQotICAgIGRlZiBfcHVzaF9maWxlX2lmX25l
ZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRldmljZV9maWxlKToKLSAgICAgICAgYXNzZXJ0IG9zLnBh
dGguZXhpc3RzKGhvc3RfZmlsZSkKLSAgICAgICAgZGV2aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJh
Y3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0
Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2FkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJywgTUQ1
U1VNX0RFVklDRV9QQVRILCBkZXZpY2VfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQpCi0g
ICAgICAgIGhvc3RfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0
cHV0KAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5leGVjdXRpdmUucG9wZW4oYXJn
cz1bJyVzX2hvc3QnICUgc2VsZi5fbWQ1c3VtX3BhdGgsIGhvc3RfZmlsZV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFKS5zdGRvdXQpCi0gICAgICAgIGlmIGhvc3RfaGFzaGVzIGFuZCBkZXZpY2VfaGFzaGVzID09
IGhvc3RfaGFzaGVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX3B1c2hfdG9f
ZGV2aWNlKGhvc3RfZmlsZSwgZGV2aWNlX2ZpbGUpCi0KICAgICBkZWYgX3B1c2hfZXhlY3V0YWJs
ZShzZWxmKToKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LnBh
dGhfdG9fZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkKLSAgICAgICAgc2VsZi5f
cHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJl
ZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUucGFrJykKLSAgICAgICAg
c2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVu
ZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWVfcmVz
b3VyY2VzJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2Fu
ZHJvaWRfbWFpbl9mb250cy54bWwnKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVk
KHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJyksIERF
VklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJykKLSAgICAgICAgc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQUF9QQUNLQUdFXSkKKyAgICAg
ICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQu
cGF0aF90b19kZXZpY2VfZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkKKyAgICAg
ICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQu
X2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlLnBhaycpLCBERVZJQ0VfRFJUX0RJUiArICdEdW1w
UmVuZGVyVHJlZS5wYWsnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnB1c2hfZmls
ZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVfcmVzb3Vy
Y2VzJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpCisgICAg
ICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0
Ll9idWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsg
J2FuZHJvaWRfbWFpbl9mb250cy54bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRz
LnB1c2hfZmlsZV9pZl9uZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9mYWxs
YmFja19mb250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9mYWxsYmFja19mb250
cy54bWwnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChb
J3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FHRV0pCiAgICAgICAgIGRydF9ob3N0X3BhdGggPSBz
ZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpCi0gICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQorICAgICAgICBp
bnN0YWxsX3Jlc3VsdCA9IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsn
aW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQogICAgICAgICBpZiBpbnN0YWxsX3Jlc3VsdC5maW5k
KCdTdWNjZXNzJykgPT0gLTE6CiAgICAgICAgICAgICBzZWxmLl9hYm9ydCgnRmFpbGVkIHRvIGlu
c3RhbGwgJXMgb250byBkZXZpY2U6ICVzJyAlIChkcnRfaG9zdF9wYXRoLCBpbnN0YWxsX3Jlc3Vs
dCkpCiAKICAgICBkZWYgX3B1c2hfZm9udHMoc2VsZik6CiAgICAgICAgIHNlbGYuX2xvZ19kZWJ1
ZygnUHVzaGluZyBmb250cycpCiAgICAgICAgIHBhdGhfdG9fYWhlbV9mb250ID0gc2VsZi5fcG9y
dC5fYnVpbGRfcGF0aCgnQUhFTV9fX18uVFRGJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lm
X25lZWRlZChwYXRoX3RvX2FoZW1fZm9udCwgREVWSUNFX0ZPTlRTX0RJUiArICdBSEVNX19fXy5U
VEYnKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnB1c2hfZmlsZV9pZl9uZWVkZWQo
cGF0aF90b19haGVtX2ZvbnQsIERFVklDRV9GT05UU19ESVIgKyAnQUhFTV9fX18uVFRGJykKICAg
ICAgICAgZm9yIChob3N0X2RpcnMsIGZvbnRfZmlsZSwgcGFja2FnZSkgaW4gSE9TVF9GT05UX0ZJ
TEVTOgogICAgICAgICAgICAgZm9yIGhvc3RfZGlyIGluIGhvc3RfZGlyczoKICAgICAgICAgICAg
ICAgICBob3N0X2ZvbnRfcGF0aCA9IGhvc3RfZGlyICsgZm9udF9maWxlCiAgICAgICAgICAgICAg
ICAgaWYgc2VsZi5fcG9ydC5fY2hlY2tfZmlsZV9leGlzdHMoaG9zdF9mb250X3BhdGgsICcnLCBs
b2dnaW5nPUZhbHNlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25l
ZWRlZChob3N0X2ZvbnRfcGF0aCwgREVWSUNFX0ZPTlRTX0RJUiArIGZvbnRfZmlsZSkKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5wdXNoX2ZpbGVfaWZfbmVlZGVk
KGhvc3RfZm9udF9wYXRoLCBERVZJQ0VfRk9OVFNfRElSICsgZm9udF9maWxlKQogCiAgICAgZGVm
IF9wdXNoX3Rlc3RfcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1B1
c2hpbmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBmb3IgcmVzb3VyY2UgaW4gVEVTVF9SRVNP
VVJDRVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoc2Vs
Zi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnLycgKyByZXNvdXJjZSwgREVWSUNFX0xBWU9V
VF9URVNUU19ESVIgKyByZXNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFu
ZHMucHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICcv
JyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJlc291cmNlKQogCiAgICAg
ZGVmIF9yZXN0YXJ0X2FkYl9hc19yb290KHNlbGYpOgotICAgICAgICBvdXRwdXQgPSBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydyb290J10pCisgICAgICAgIG91dHB1dCA9IHNlbGYuX2FuZHJvaWRf
Y29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsncm9vdCddKQogICAgICAgICBpZiAnYWRiZCBpcyBh
bHJlYWR5IHJ1bm5pbmcgYXMgcm9vdCcgaW4gb3V0cHV0OgogICAgICAgICAgICAgcmV0dXJuCiAg
ICAgICAgIGVsaWYgbm90ICdyZXN0YXJ0aW5nIGFkYmQgYXMgcm9vdCcgaW4gb3V0cHV0OgogICAg
ICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdVbnJlY29nbml6ZWQgb3V0cHV0IGZyb20gYWRiIHJv
b3Q6ICVzJyAlIG91dHB1dCkKIAogICAgICAgICAjIFJlZ2FyZGxlc3MgdGhlIG91dHB1dCwgZ2l2
ZSB0aGUgZGV2aWNlIGEgbW9tZW50IHRvIGNvbWUgYmFjayBvbmxpbmUuCi0gICAgICAgIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3dhaXQtZm9yLWRldmljZSddKQotCi0gICAgZGVmIF9ydW5fYWRi
X2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICBzZWxmLl9s
b2dfZGVidWcoJ1J1biBhZGIgY29tbWFuZDogJyArIHN0cihjbWQpKQotICAgICAgICBpZiBpZ25v
cmVfZXJyb3I6Ci0gICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gc2VsZi5fcG9ydC5fZXhlY3V0
aXZlLmlnbm9yZV9lcnJvcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXJyb3JfaGFuZGxl
ciA9IE5vbmUKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKHNlbGYuX2FkYl9jb21tYW5kKCkgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxl
cikKLSAgICAgICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1
dCBvZiBjb21tYW5kcyBsaWtlICdhZGIgbG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90b21ic3RvbmVz
L3RvbWJzdG9uZTAxJwotICAgICAgICAjIHdob3NlIG91dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50
ZWQgaW4gbGF0ZXIgbG9ncy4KLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdSdW4gYWRiIHJlc3Vs
dDogJyArIHJlc3VsdFs6ODBdKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgX2xp
bmtfZGV2aWNlX2ZpbGUoc2VsZiwgZnJvbV9maWxlLCB0b19maWxlLCBpZ25vcmVfZXJyb3I9RmFs
c2UpOgotICAgICAgICAjIHJtIHRvX2ZpbGUgZmlyc3QgdG8gbWFrZSBzdXJlIHRoYXQgbG4gc3Vj
Y2VlZHMuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgdG9f
ZmlsZV0sIGlnbm9yZV9lcnJvcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFu
ZChbJ3NoZWxsJywgJ2xuJywgJy1zJywgZnJvbV9maWxlLCB0b19maWxlXSwgaWdub3JlX2Vycm9y
KQotCi0gICAgZGVmIF9wdXNoX3RvX2RldmljZShzZWxmLCBob3N0X3BhdGgsIGRldmljZV9wYXRo
LCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21t
YW5kKFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGhdLCBpZ25vcmVfZXJyb3IpCi0KLSAg
ICBkZWYgX3B1bGxfZnJvbV9kZXZpY2Uoc2VsZiwgZGV2aWNlX3BhdGgsIGhvc3RfcGF0aCwgaWdu
b3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3B1bGwnLCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoXSwgaWdub3JlX2Vycm9yKQorICAgICAgICBz
ZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3dhaXQtZm9yLWRldmljZSdd
KQogCiAgICAgZGVmIF9nZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYpOgotICAgICAgICB0b21ic3Rv
bmVzID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCAnLW4nLCAnL2RhdGEv
dG9tYnN0b25lcyddKQorICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5fYW5kcm9pZF9jb21tYW5k
cy5ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsICctbicsICcvZGF0YS90b21ic3RvbmVz
J10pCiAgICAgICAgIGlmIG5vdCB0b21ic3RvbmVzIG9yIHRvbWJzdG9uZXMuc3RhcnRzd2l0aCgn
L2RhdGEvdG9tYnN0b25lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpOgogICAgICAgICAg
ICAgc2VsZi5fbG9nX2Vycm9yKCdEUlQgY3Jhc2hlZCwgYnV0IG5vIHRvbWJzdG9uZSBmb3VuZCEn
KQogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC02NzUsMjMgKzgyNSwyMyBAQCBjbGFzcyBDaHJv
bWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgc3RhY2sgdHJhY2Ug
aW50byBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCwgaWYgbmVlZGVkLgogICAgICAgICAjIEl0IHRh
a2VzIGEgbG9uZyB0aW1lLCBzbyBkb24ndCBkbyBpdCBoZXJlLgogICAgICAgICByZXR1cm4gJyVz
XG4lcycgJSAoJyAnLmpvaW4obGFzdF90b21ic3RvbmUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9kYXRhL3RvbWJz
dG9uZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcs
ICcvZGF0YS90b21ic3RvbmVzLycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQogCiAgICAgZGVmIF9n
ZXRfbG9nY2F0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
bG9nY2F0JywgJy1kJywgJy12JywgJ3RocmVhZHRpbWUnXSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1kJywgJy12Jywg
J3RocmVhZHRpbWUnXSkKIAogICAgIGRlZiBfc2V0dXBfcGVyZm9ybWFuY2Uoc2VsZik6CiAgICAg
ICAgICMgRGlzYWJsZSBDUFUgc2NhbGluZyBhbmQgZHJvcCByYW0gY2FjaGUgdG8gcmVkdWNlIG5v
aXNlIGluIHRlc3RzCiAgICAgICAgIGlmIG5vdCBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnM6Ci0g
ICAgICAgICAgICBnb3Zlcm5vcl9maWxlcyA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2xzJywgU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTl0pCisgICAgICAgICAgICBnb3Zlcm5v
cl9maWxlcyA9IHNlbGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnbHMnLCBTQ0FMSU5HX0dPVkVSTk9SU19QQVRURVJOXSkKICAgICAgICAgICAgIGlmIGdvdmVy
bm9yX2ZpbGVzLmZpbmQoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSA9PSAtMToKICAgICAg
ICAgICAgICAgICBmb3IgZmlsZSBpbiBnb3Zlcm5vcl9maWxlcy5zcGxpdCgpOgotICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcnNbZmlsZV0gPSBzZWxmLl9ydW5fYWRi
X2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBmaWxlXSkuc3RyaXAoKQotICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgJ3BlcmZvcm1hbmNl
JywgJz4nLCBmaWxlXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJu
b3JzW2ZpbGVdID0gc2VsZi5fYW5kcm9pZF9jb21tYW5kcy5ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdjYXQnLCBmaWxlXSkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmRy
b2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCAncGVyZm9ybWFu
Y2UnLCAnPicsIGZpbGVdKQogCiAgICAgZGVmIF90ZWFyZG93bl9wZXJmb3JtYW5jZShzZWxmKToK
ICAgICAgICAgZm9yIGZpbGUsIG9yaWdpbmFsX2NvbnRlbnQgaW4gc2VsZi5fb3JpZ2luYWxfZ292
ZXJub3JzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdlY2hvJywgb3JpZ2luYWxfY29udGVudCwgJz4nLCBmaWxlXSkKKyAgICAgICAgICAgIHNl
bGYuX2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobycsIG9y
aWdpbmFsX2NvbnRlbnQsICc+JywgZmlsZV0pCiAgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVy
bm9ycyA9IHt9CiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4pOgpAQCAtNzA2LDExICs4NTYsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRE
cml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgZGVmIGNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKToKICAgICAgICAgIyBUaGUgcmV0dXJuZWQgY29tbWFuZCBsaW5lIGlz
IHVzZWQgdG8gc3RhcnQgX3NlcnZlcl9wcm9jZXNzLiBJbiBvdXIgY2FzZSwgaXQncyBhbiBpbnRl
cmFjdGl2ZSAnYWRiIHNoZWxsJy4KICAgICAgICAgIyBUaGUgY29tbWFuZCBsaW5lIHBhc3NlZCB0
byB0aGUgRFJUIHByb2Nlc3MgaXMgcmV0dXJuZWQgYnkgX2RydF9jbWRfbGluZSgpIGluc3RlYWQu
Ci0gICAgICAgIHJldHVybiBzZWxmLl9hZGJfY29tbWFuZCgpICsgWydzaGVsbCddCi0KLSAgICBk
ZWYgX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6Ci0gICAgICAg
IGFzc2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRoKCcvJykKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJp
cCgpID09IGZ1bGxfZmlsZV9wYXRoCisgICAgICAgIHJldHVybiBzZWxmLl9hbmRyb2lkX2NvbW1h
bmRzLmFkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJ10KIAogICAgIGRlZiBfZHJ0X2NtZF9saW5lKHNl
bGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKICAgICAgICAgcmV0dXJuIGRyaXZlci5E
cml2ZXIuY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyctLWNy
ZWF0ZS1zdGRpbi1maWZvJywgJy0tc2VwYXJhdGUtc3RkZXJyLWZpZm8nXQpAQCAtNzI0LDE3ICs4
NzAsMTcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAg
ICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBfYWxsX3BpcGVzX2NyZWF0ZWQoc2VsZik6Ci0g
ICAgICAgIHJldHVybiAoc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9f
cGF0aCkgYW5kCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNl
bGYuX291dF9maWZvX3BhdGgpIGFuZAotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3Rz
X29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKKyAgICAgICAgcmV0dXJuIChzZWxmLl9h
bmRyb2lkX2NvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgp
IGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMuZmlsZV9leGlzdHNf
b25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIHNlbGYu
X2FuZHJvaWRfY29tbWFuZHMuZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3Bh
dGgpKQogCiAgICAgZGVmIF9yZW1vdmVfYWxsX3BpcGVzKHNlbGYpOgogICAgICAgICBmb3IgZmls
ZSBpbiBbc2VsZi5faW5fZmlmb19wYXRoLCBzZWxmLl9vdXRfZmlmb19wYXRoLCBzZWxmLl9lcnJf
Zmlmb19wYXRoXToKLSAgICAgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywg
J3JtJywgZmlsZV0pCisgICAgICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ3JtJywgZmlsZV0pCiAKLSAgICAgICAgcmV0dXJuIChub3Qgc2Vs
Zi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgYW5kCi0gICAgICAg
ICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19w
YXRoKSBhbmQKLSAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNl
KHNlbGYuX2Vycl9maWZvX3BhdGgpKQorICAgICAgICByZXR1cm4gKG5vdCBzZWxmLl9hbmRyb2lk
X2NvbW1hbmRzLmZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAor
ICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLmZpbGVfZXhpc3RzX29u
X2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2Vs
Zi5fYW5kcm9pZF9jb21tYW5kcy5maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9f
cGF0aCkpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0LCBzdG9wX3doZW5f
ZG9uZSk6CiAgICAgICAgIGJhc2UgPSBzZWxmLl9wb3J0Lmxvb2t1cF92aXJ0dWFsX3Rlc3RfYmFz
ZShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQpAQCAtNzY4LDEzICs5MTQsMTEgQEAgY2xhc3MgQ2hy
b21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzdXBlcihDaHJvbWl1
bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9zdGFydChwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykK
IAogICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1N0YXJ0aW5nIGZvcndhcmRlcicpCi0gICAgICAg
IHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29u
c3RydWN0b3IoCi0gICAgICAgICAgICBzZWxmLl9wb3J0LCAnRm9yd2FyZGVyJywgc2VsZi5fYWRi
X2NvbW1hbmQoKSArIFsnc2hlbGwnLCAnJXMgLUQgJXMnICUgKERFVklDRV9GT1JXQVJERVJfUEFU
SCwgRk9SV0FSRF9QT1JUUyldKQotICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2Vzcy5zdGFy
dCgpCi0KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1jJ10pCi0g
ICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuX2Nt
ZF9saW5lICsgWyc+JywgQ09NTUFORF9MSU5FX0ZJTEVdKQotICAgICAgICBzdGFydF9yZXN1bHQg
PSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScsICdS
dW5JblN1YlRocmVhZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVdKQorICAgICAgICBm
b3J3YXJkZXIgPSBGb3J3YXJkZXIoc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0sIHNlbGYuX3Bv
cnQuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZCwgc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCwgc2VsZi5f
YW5kcm9pZF9jb21tYW5kcykKKyAgICAgICAgZm9yd2FyZGVyLnNldHVwX3JlZGlyZWN0aW9ucyhz
ZWxmLl93b3JrZXJfbnVtYmVyLCBbKHBvcnQsIHBvcnQpIGZvciBwb3J0IGluIEZPUldBUkRfUE9S
VFNdKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ2xv
Z2NhdCcsICctYyddKQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuX2NtZF9saW5lICsgWyc+JywgQ09NTUFORF9M
SU5FX0ZJTEVdKQorICAgICAgICBzdGFydF9yZXN1bHQgPSBzZWxmLl9hbmRyb2lkX2NvbW1hbmRz
LnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ3N0YXJ0JywgJy1lJywgJ1J1bkluU3Vi
VGhyZWFkJywgJy1uJywgRFJUX0FDVElWSVRZX0ZVTExfTkFNRV0pCiAgICAgICAgIGlmIHN0YXJ0
X3Jlc3VsdC5maW5kKCdFeGNlcHRpb24nKSAhPSAtMToKICAgICAgICAgICAgIHNlbGYuX2xvZ19l
cnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNlcHRp
b246XG4nICsgc3RhcnRfcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC03OTEs
MTMgKzkzNSwxMyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6
CiAgICAgICAgICMgU3RhcnQgYSBwcm9jZXNzIHRvIHJlYWQgZnJvbSB0aGUgc3Rkb3V0IGZpZm8g
b2YgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCBhbmQgcHJpbnQgdG8gc3Rkb3V0LgogICAgICAgICBz
ZWxmLl9sb2dfZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZG91dCB0byAnICsgc2VsZi5fb3V0X2ZpZm9f
cGF0aCkKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3Nl
cnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yKAotICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRT
dGRvdXQnLCBzZWxmLl9hZGJfY29tbWFuZCgpICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9vdXRf
Zmlmb19wYXRoXSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQsICdSZWFkU3Rkb3V0Jywgc2VsZi5f
YW5kcm9pZF9jb21tYW5kcy5hZGJfY29tbWFuZCgpICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9v
dXRfZmlmb19wYXRoXSkKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcy5zdGFydCgp
CiAKICAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9tIHRoZSBzdGRlcnIgZmlm
byBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBzdGRvdXQuCiAgICAgICAg
IHNlbGYuX2xvZ19kZWJ1ZygnUmVkaXJlY3Rpbmcgc3RkZXJyIHRvICcgKyBzZWxmLl9lcnJfZmlm
b19wYXRoKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gc2VsZi5fcG9ydC5f
c2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IoCi0gICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVh
ZFN0ZGVycicsIHNlbGYuX2FkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJywgJ2NhdCcsIHNlbGYuX2Vy
cl9maWZvX3BhdGhdKQorICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRlcnInLCBzZWxm
Ll9hbmRyb2lkX2NvbW1hbmRzLmFkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJywgJ2NhdCcsIHNlbGYu
X2Vycl9maWZvX3BhdGhdKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzLnN0YXJ0
KCkKIAogICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZGluIHRvICcgKyBz
ZWxmLl9pbl9maWZvX3BhdGgpCkBAIC04NDcsMTEgKzk5MSwxMSBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAKICAgICBkZWYgX3BpZF9vbl90YXJnZXQoc2Vs
Zik6CiAgICAgICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRo
aXMgdGhhbiBncmVwcGluZyBwcyBvdXRwdXQhCi0gICAgICAgIHBzX291dHB1dCA9IHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pCisgICAgICAgIHBzX291dHB1dCA9IHNlbGYu
X2FuZHJvaWRfY29tbWFuZHMucnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncHMnXSkKICAgICAg
ICAgcmV0dXJuIHNlbGYuX3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KHBzX291dHB1dCwgRFJU
X0FQUF9QQUNLQUdFKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0Vd
KQorICAgICAgICBzZWxmLl9hbmRyb2lkX2NvbW1hbmRzLnJ1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQogCiAgICAgICAgIGlmIHNl
bGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3M6CiAgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9w
cm9jZXNzLmtpbGwoKQpAQCAtODYxLDExICsxMDA1LDkgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lk
RHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJv
Y2Vzcy5raWxsKCkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MgPSBOb25l
CiAKLSAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5zdG9wKCkKKyAg
ICAgICAgRm9yd2FyZGVyLmtpbGxfZGV2aWNlX2RhZW1vbihzZWxmLl9wb3J0Ll9leGVjdXRpdmUu
cnVuX2NvbW1hbmQsIHNlbGYuX2FuZHJvaWRfY29tbWFuZHMsIHNlbGYuX2xvZ19kZWJ1ZykKIAot
ICAgICAgICBpZiBzZWxmLl9mb3J3YXJkZXJfcHJvY2VzczoKLSAgICAgICAgICAgIHNlbGYuX2Zv
cndhcmRlcl9wcm9jZXNzLmtpbGwoKQotICAgICAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nl
c3MgPSBOb25lCisgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuc3Rv
cCgpCiAKICAgICAgICAgaWYgc2VsZi5faGFzX3NldHVwOgogICAgICAgICAgICAgaWYgbm90IENo
cm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQoc2VsZi5fcmVtb3ZlX2FsbF9w
aXBlcywgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKToKQEAgLTg4OCw4ICsxMDMwLDMgQEAg
Y2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAg
ICAgIGlmIGxhc3RfY2hhciBpbiAoJyMnLCAnJCcpOgogICAgICAgICAgICAgICAgICAgICByZXR1
cm4KICAgICAgICAgICAgIGxhc3RfY2hhciA9IGN1cnJlbnRfY2hhcgotCi0gICAgZGVmIF9hZGJf
Y29tbWFuZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2FkYl9jb21tYW5kX2Jhc2U6Ci0g
ICAgICAgICAgICBzZWxmLl9hZGJfY29tbWFuZF9iYXNlID0gW3NlbGYuX3BvcnQucGF0aF90b19h
ZGIoKSwgJy1zJywgc2VsZi5fZGV2aWNlX3NlcmlhbF0KLSAgICAgICAgcmV0dXJuIHNlbGYuX2Fk
Yl9jb21tYW5kX2Jhc2UK
</data>
<flag name="review"
          id="197286"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>