<?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>160722</bug_id>
          
          <creation_ts>2016-08-09 17:19:32 -0700</creation_ts>
          <short_desc>Logging and other minor improvements to iOS webkitpy</short_desc>
          <delta_ts>2016-08-10 13:03:18 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1218918</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-09 17:19:32 -0700</bug_when>
    <thetext>Logging and other minor improvements to iOS webkitpy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218922</commentid>
    <comment_count>1</comment_count>
      <attachid>285699</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-09 17:27:10 -0700</bug_when>
    <thetext>Created attachment 285699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218953</commentid>
    <comment_count>2</comment_count>
      <attachid>285699</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-08-09 20:02:52 -0700</bug_when>
    <thetext>Comment on attachment 285699
Patch

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

&gt; Tools/ChangeLog:11
&gt; +        Have clean_up_test_run() reset the simulator device rather than deleting it, and

Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219016</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-10 07:57:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 285699 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=285699&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:11
&gt; &gt; +        Have clean_up_test_run() reset the simulator device rather than deleting it, and
&gt; 
&gt; Why?

It seemed sensible, but isn&apos;t required to fix a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219023</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-08-10 09:03:27 -0700</bug_when>
    <thetext>It seems cleaner and more reliable to re-create devices. But maybe there is a substantial performance benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219041</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-10 10:07:19 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; It seems cleaner and more reliable to re-create devices. But maybe there is
&gt; a substantial performance benefit.

I think creating devices is pretty fast. Deleting them is slower (has to delete a potentially large directory hierarchy).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219047</commentid>
    <comment_count>6</comment_count>
      <attachid>285732</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-10 10:26:29 -0700</bug_when>
    <thetext>Created attachment 285732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219053</commentid>
    <comment_count>7</comment_count>
      <attachid>285732</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-08-10 10:48:05 -0700</bug_when>
    <thetext>Comment on attachment 285732
Patch

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

&gt; Tools/Scripts/webkitpy/port/ios.py:248
&gt; +                _log.debug(&quot;\&quot;{0} {1} {2}\&quot;&quot;.format(self.LSREGISTER_PATH, &quot;-u&quot;, simulator_path))

Notice that logger.debug() takes a format string by &lt;https://docs.python.org/2/library/logging.html#logging.debug&gt;. I also suggest we use a single quoted format string to avoid the need to escape the double quote characters. So, this can be simplified to:

_log.debug(&apos;&quot;%s %s %s&quot;&apos;, self.LSREGISTER_PATH, &quot;-u&quot;, simulator_path)

&gt; Tools/Scripts/webkitpy/port/ios.py:249
&gt; +                subprocess.call([self.LSREGISTER_PATH, &quot;-u&quot;, simulator_path])

We should be using self._executive.run_command() instead of subprocess.call() here.

&gt; Tools/Scripts/webkitpy/port/ios.py:251
&gt; +                _log.debug(&quot;\&quot;rmtree {0}&quot;.format(simulator_path))

Similarly we can simplify this line.

&gt; Tools/Scripts/webkitpy/port/ios.py:254
&gt; +                logs_path = os.path.join(os.path.expanduser(&quot;~&quot;), &quot;Library/Logs/CoreSimulator/&quot;, device_udid)

We should be using self._filesystem.join() and self._filesystem.expanduser() instead of os.path.join() and os.path.expanduser(), respectively.

&gt; Tools/Scripts/webkitpy/port/ios.py:255
&gt; +                _log.debug(&quot;\&quot;rmtree {0}&quot;.format(logs_path))

See my above remark for line 248 on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/port/ios.py:256
&gt; +                shutil.rmtree(logs_path, ignore_errors=True)

Would &quot;xcrun simctl delete&quot; delete these logs? If so, I suggest we use it instead of deleting them by hand.

&gt; Tools/Scripts/webkitpy/port/ios.py:258
&gt; +                saved_state_path = os.path.join(os.path.expanduser(&quot;~&quot;), &quot;Library/Saved Application State/&quot;, self.SIMULATOR_BUNDLE_ID + str(i) + &quot;.savedState&quot;)

We should be using self._filesystem.join() and self._filesystem.expanduser() instead of os.path.join() and os.path.expanduser(), respectively.

&gt; Tools/Scripts/webkitpy/port/ios.py:259
&gt; +                _log.debug(&quot;\&quot;rmtree {0}&quot;.format(saved_state_path))

See my above remark for line 248 on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/port/ios.py:260
&gt; +                shutil.rmtree(saved_state_path, ignore_errors=True)

We should be using self._filesystem.rmtree(saved_state_path) instead of calling shutil.rmtree() directly. Notice that Filesystem.rmtree() passes ignore_errors=True to shutil.rmtree().

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:216
&gt; +        _log.debug(&quot;\&quot;xcrun simctl create {0} {1} {2}\&quot; returned {3}&quot;.format(name, device_type.identifier, runtime.identifier, device_udid))

See my above remark for line 248 in ios.py on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:227
&gt; +        _log.debug(&quot;deleting device {}\&quot;&quot;.format(udid))

Ditto.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:230
&gt; +            _log.debug(&quot;xcrun simctl delete {}&quot;.format(udid))

Ditto.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:233
&gt; +            raise RuntimeError(&apos;\&quot;xcrun simctl delete\&quot; failed: device state is {}&apos;.format(Simulator.device_state(udid)))

No need to escape the double quote characters as they are inside a single quoted string literal.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:242
&gt; +        _log.debug(&quot;resetting device {}\&quot;&quot;.format(udid))

Did you intend to have a trailing &quot;?

Also see my above remark for line 248 in ios.py on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:245
&gt; +            _log.debug(&quot;xcrun simctl erase {}&quot;.format(udid))

See my above remark for line 248 in ios.py on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:248
&gt; +            raise RuntimeError(&apos;\&quot;xcrun simctl erase\&quot; failed: device state is {}&apos;.format(Simulator.device_state(udid)))

No need to escape the double quote characters as they are inside a single quoted string literal.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:306
&gt; +                    _log.debug(&quot;\&quot;xcrun simctl spawn {0}\&quot; returned {1}&quot;.format(udid, state))

No need to escape the double quote characters as they are inside a single quoted string literal.

Also see my above remark for line 248 in ios.py on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:318
&gt; +        _log.debug(&quot;waiting for device {0} to enter state {1} with timeout {2}&quot;.format(udid, wait_until_state, timeout_seconds))

See my above remark for line 248 in ios.py on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:323
&gt; +                _log.debug(&quot; device state {0}&quot;.format(device_state))

Did you intend to have a leading space?

See my above remark for line 248 in ios.py on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:551
&gt; +            _log.debug(&quot;lookup_or_create_device {0} {1} {2} found {3}&quot;.format(name, device_type, runtime, testing_device.name))

See my above remark for line 248 in ios.py on how we can simplify this line.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:554
&gt; +        _log.debug(&quot;lookup_or_create_device {0} {1} {2} created {3}&quot;.format(name, device_type, runtime, testing_device.name))

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219088</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-10 13:01:38 -0700</bug_when>
    <thetext>https://trac.webkit.org/r204341</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285699</attachid>
            <date>2016-08-09 17:27:10 -0700</date>
            <delta_ts>2016-08-10 10:26:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160722-20160809172536.patch</filename>
            <type>text/plain</type>
            <size>11683</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjcxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTg2ODk0YWMzNTAzOTFiNTYxNjg1MWU4OTBhNTYxZDZk
N2I2YzE2OC4uYzgyYjdhMWJlZTIyNzhiZmM0MDMzNWQ3YmM0ZTA4Mzg0YzgwNWRlMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5
IEBACisyMDE2LTA4LTA5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIExvZ2dpbmcgYW5kIG90aGVyIG1pbm9yIGltcHJvdmVtZW50cyB0byBpT1Mgd2Vi
a2l0cHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDcyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCAtLWRlYnVnLXJ3dC1sb2dnaW5nIHRvIGxvZyBhbGwgdGhlIGNhbGxzIHRvIHNpbWN0bCBhcyB3
ZWxsIGFzIGRldmljZSBzdGF0ZSBpbmZvcm1hdGlvbiwKKyAgICAgICAgdG8gbWFrZSBpdCBlYXNp
ZXIgdG8gZGVidWcgbGF1bmNoaW5nIGlzc3Vlcy4KKworICAgICAgICBIYXZlIGNsZWFuX3VwX3Rl
c3RfcnVuKCkgcmVzZXQgdGhlIHNpbXVsYXRvciBkZXZpY2UgcmF0aGVyIHRoYW4gZGVsZXRpbmcg
aXQsIGFuZAorICAgICAgICBoYXZlIHJlc2V0X3ByZWZlcmVuY2VzKCkgYWxzbyByZXNldCB0aGUg
ZGV2aWNlLCByYXRoZXIgdGhhbiBqdXN0IG51a2luZyB0aGUgZGF0YQorICAgICAgICBkaXJlY3Rv
cnkgKHdoaWNoIGJyb2tlIHNvbWUgdmVyc2lvbnMgb2YgdGhlIHNpbXVsYXRvcikuCisKKyAgICAg
ICAgSGF2ZSB0aGUgU2ltdWxhdG9yLmFwcCBsYXVuY2ggaW4gdGhlIGJhY2tncm91bmQgd2l0aCBv
cGVuIC1nLgorCisgICAgICAgIFdhaXQgZm9yIHRoZSBzaW11bGF0b3IgZGV2aWNlIHRvIGJlIGlu
IGEga25vd24gc3RhdGUgaW4gc29tZSBtb3JlIHBsYWNlcy4KKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnNldHVwX3Rl
c3RfcnVuKToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX3F1aXRfaW9zX3NpbXVsYXRvcik6
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKToKKyAgICAgICAg
KElPU1NpbXVsYXRvclBvcnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKToKKyAgICAgICAgKElP
U1NpbXVsYXRvclBvcnQucmVzZXRfcHJlZmVyZW5jZXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5OgorICAgICAgICAoRGV2aWNlLmNyZWF0ZSk6CisgICAg
ICAgIChEZXZpY2UuZGVsZXRlKToKKyAgICAgICAgKERldmljZSk6CisgICAgICAgIChEZXZpY2Uu
cmVzZXQpOgorICAgICAgICAoU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2Jvb3RlZCk6
CisgICAgICAgIChTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUpOgorICAg
ICAgICAoU2ltdWxhdG9yKToKKyAgICAgICAgKFNpbXVsYXRvci5kZWxldGVfZGV2aWNlKToKKyAg
ICAgICAgKFNpbXVsYXRvci5yZXNldF9kZXZpY2UpOgorICAgICAgICAoU2ltdWxhdG9yLmxvb2t1
cF9vcl9jcmVhdGVfZGV2aWNlKToKKwogMjAxNi0wOC0wOCAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBIYXZlIHRoZSBpT1MgcGxhdGZvcm0gaW50ZXJp
dCBmcm9tIHRoZSBBcHBsZSBwbGF0Zm9ybSBpbiB3ZWJraXRweQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3MucHkKaW5kZXggM2VlNzE0NGMxMjRiNTBkNjZhOTAwZWY1NDZhN2UxY2JjNThkOWNlNy4u
ODNkODc3NzhiMzk4NTYwN2E1Y2Y1MGM3MmU3ZjQyM2VjZjlmOTE5NSAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zLnB5CkBAIC0yMTAsOCArMjEwLDkgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9y
dChBcHBsZVBvcnQpOgogICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNz
ZXMoKSk6CiAgICAgICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYudGVzdGluZ19kZXZpY2UoaSku
dWRpZAogICAgICAgICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzIwOTE2MTQwPiBTd2l0
Y2ggdG8gdXNpbmcgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9yIGxhdW5jaGluZyBhbmQgcXVp
dHRpbmcgaU9TIFNpbXVsYXRvcgorCiAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2Nv
bW1hbmQoWwotICAgICAgICAgICAgICAgICdvcGVuJywgJy1iJywgc2VsZi5TSU1VTEFUT1JfQlVO
RExFX0lEICsgc3RyKGkpLAorICAgICAgICAgICAgICAgICdvcGVuJywgJy1nJywgJy1iJywgc2Vs
Zi5TSU1VTEFUT1JfQlVORExFX0lEICsgc3RyKGkpLAogICAgICAgICAgICAgICAgICctLWFyZ3Mn
LCAnLUN1cnJlbnREZXZpY2VVRElEJywgZGV2aWNlX3VkaWRdKQogCiAgICAgICAgICAgICBpZiBt
YWNfb3NfdmVyc2lvbiBpbiBbJ2VsY2FwaXRhbicsICd5b3NlbWl0ZScsICdtYXZlcmlja3MnXToK
QEAgLTIyMiwxMSArMjIzLDEzIEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoQXBwbGVQb3J0KToK
ICAgICAgICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19ib290ZWQoc2VsZi50
ZXN0aW5nX2RldmljZShpKS51ZGlkKQogCiAgICAgZGVmIF9xdWl0X2lvc19zaW11bGF0b3Ioc2Vs
Zik6CisgICAgICAgIF9sb2cuZGVidWcoIl9xdWl0X2lvc19zaW11bGF0b3IiKQogICAgICAgICAj
IEZJWE1FOiBXZSBzaG91bGQga2lsbCBvbmx5IHRoZSBTaW11bGF0b3JzIHdlIHN0YXJ0ZWQuCiAg
ICAgICAgIHN1YnByb2Nlc3MuY2FsbChbImtpbGxhbGwiLCAiLTkiLCAiLW0iLCAiU2ltdWxhdG9y
Il0pCiAKICAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAgIHN1cGVyKElP
U1NpbXVsYXRvclBvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKKyAgICAgICAgX2xvZy5k
ZWJ1ZygiY2xlYW5fdXBfdGVzdF9ydW4iKQogICAgICAgICBzZWxmLl9xdWl0X2lvc19zaW11bGF0
b3IoKQogICAgICAgICBmaWZvcyA9IFtwYXRoIGZvciBwYXRoIGluIG9zLmxpc3RkaXIoJy90bXAn
KSBpZiByZS5zZWFyY2goJ29yZy53ZWJraXQuKER1bXBSZW5kZXJUcmVlfFdlYktpdFRlc3RSdW5u
ZXIpLipfKElOfE9VVHxFUlJPUiknLCBwYXRoKV0KICAgICAgICAgZm9yIGZpZm8gaW4gZmlmb3M6
CkBAIC0yMzcsMjAgKzI0MCwzMCBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KEFwcGxlUG9ydCk6
CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNo
aWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxm
LmdldF9zaW11bGF0b3JfcGF0aChpKSk6CisgICAgICAgICAgICBzaW11bGF0b3JfcGF0aCA9IHNl
bGYuZ2V0X3NpbXVsYXRvcl9wYXRoKGkpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlz
dHMoc2ltdWxhdG9yX3BhdGgpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzZWxmLkxTUkVHSVNURVJf
UEFUSCwgIi11Iiwgc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoaSldKQotICAgICAgICAgICAgICAg
IHNodXRpbC5ybXRyZWUoc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoaSksIGlnbm9yZV9lcnJvcnM9
VHJ1ZSkKLSAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcy5wYXRo
LmV4cGFuZHVzZXIoIn4iKSwgIkxpYnJhcnkvTG9ncy9Db3JlU2ltdWxhdG9yLyIsCi0gICAgICAg
ICAgICAgICAgICAgIHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCksIGlnbm9yZV9lcnJvcnM9
VHJ1ZSkKLSAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcy5wYXRo
LmV4cGFuZHVzZXIoIn4iKSwgIkxpYnJhcnkvU2F2ZWQgQXBwbGljYXRpb24gU3RhdGUvIiwKLSAg
ICAgICAgICAgICAgICAgICAgc2VsZi5TSU1VTEFUT1JfQlVORExFX0lEICsgc3RyKGkpICsgIi5z
YXZlZFN0YXRlIiksIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKLSAgICAgICAgICAgICAgICBTaW11bGF0
b3IoKS5kZWxldGVfZGV2aWNlKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCkKKyAgICAgICAg
ICAgICAgICBfbG9nLmRlYnVnKCJcInswfSB7MX0gezJ9XCIiLmZvcm1hdChzZWxmLkxTUkVHSVNU
RVJfUEFUSCwgIi11Iiwgc2ltdWxhdG9yX3BhdGgpKQorICAgICAgICAgICAgICAgIHN1YnByb2Nl
c3MuY2FsbChbc2VsZi5MU1JFR0lTVEVSX1BBVEgsICItdSIsIHNpbXVsYXRvcl9wYXRoXSkKKwor
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIlwicm10cmVlIHswfSIuZm9ybWF0KHNpbXVsYXRv
cl9wYXRoKSkKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNpbXVsYXRvcl9wYXRoLCBp
Z25vcmVfZXJyb3JzPVRydWUpCisKKyAgICAgICAgICAgICAgICBsb2dzX3BhdGggPSBvcy5wYXRo
LmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCJ+IiksICJMaWJyYXJ5L0xvZ3MvQ29yZVNpbXVsYXRv
ci8iLCBzZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQpCisgICAgICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiXCJybXRyZWUgezB9Ii5mb3JtYXQobG9nc19wYXRoKSkKKyAgICAgICAgICAgICAgICBz
aHV0aWwucm10cmVlKGxvZ3NfcGF0aCwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgICAgICAg
ICAgICAgc2F2ZWRfc3RhdGVfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIo
In4iKSwgIkxpYnJhcnkvU2F2ZWQgQXBwbGljYXRpb24gU3RhdGUvIiwgc2VsZi5TSU1VTEFUT1Jf
QlVORExFX0lEICsgc3RyKGkpICsgIi5zYXZlZFN0YXRlIikKKyAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCJcInJtdHJlZSB7MH0iLmZvcm1hdChzYXZlZF9zdGF0ZV9wYXRoKSkKKyAgICAgICAg
ICAgICAgICBzaHV0aWwucm10cmVlKHNhdmVkX3N0YXRlX3BhdGgsIGlnbm9yZV9lcnJvcnM9VHJ1
ZSkKKworICAgICAgICAgICAgICAgIFNpbXVsYXRvci5yZXNldF9kZXZpY2Uoc2VsZi50ZXN0aW5n
X2RldmljZShpKS51ZGlkKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIF9s
b2cud2FybmluZygnVW5hYmxlIHRvIHJlbW92ZSBTaW11bGF0b3InICsgc3RyKGkpKQogCiAgICAg
ZGVmIHNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKKyAg
ICAgICAgX2xvZy5kZWJ1Zygic2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyIikKICAgICAgICAgZW52
ID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVy
KHNlcnZlcl9uYW1lKQogICAgICAgICBpZiBzZXJ2ZXJfbmFtZSA9PSBzZWxmLmRyaXZlcl9uYW1l
KCk6CiAgICAgICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CkBAIC0zMzYsNiAr
MzQ5LDcgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChBcHBsZVBvcnQpOgogICAgICAgICByZXR1
cm4gc2VsZi5faW1hZ2VfZGlmZmVyLmRpZmZfaW1hZ2UoZXhwZWN0ZWRfY29udGVudHMsIGFjdHVh
bF9jb250ZW50cywgdG9sZXJhbmNlKQogCiAgICAgZGVmIHJlc2V0X3ByZWZlcmVuY2VzKHNlbGYp
OgorICAgICAgICBfbG9nLmRlYnVnKCJyZXNldF9wcmVmZXJlbmNlcyIpCiAgICAgICAgIGlmIChz
ZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToK
ICAgICAgICAgICAgICAgICBfbG9nLndhcm4oIllvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2gg
dmFsdWUoezB9KSBmb3IgLS1jaGlsZC1wcm9jZXNzZXMiLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nl
c3NlcygpKSkKICAgICAgICAgICAgICAgICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vz
c2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1h
dChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQpAQCAtMzQ2LDEwICszNjAsNyBAQCBj
bGFzcyBJT1NTaW11bGF0b3JQb3J0KEFwcGxlUG9ydCk6CiAKICAgICAgICAgZm9yIGkgaW4geHJh
bmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgogICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRf
dW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCwgU2lt
dWxhdG9yLkRldmljZVN0YXRlLlNIVVRET1dOKQotCi0gICAgICAgICAgICBkYXRhX3BhdGggPSBv
cy5wYXRoLmpvaW4oc2VsZi50ZXN0aW5nX2RldmljZShpKS5wYXRoLCAnZGF0YScpCi0gICAgICAg
ICAgICBpZiBvcy5wYXRoLmlzZGlyKGRhdGFfcGF0aCk6Ci0gICAgICAgICAgICAgICAgc2h1dGls
LnJtdHJlZShkYXRhX3BhdGgpCisgICAgICAgICAgICBTaW11bGF0b3IucmVzZXRfZGV2aWNlKHNl
bGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCkKIAogICAgIGRlZiBubV9jb21tYW5kKHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdubScpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkveGNvZGUvc2ltdWxhdG9yLnB5CmluZGV4IDhhZjlhZGQyM2ZjZDU2NDYxOWVmYTNhODU2MDRh
OTcwNmUzMTAzMTEuLjNkYzQzNTViMDNjZTNiNDU0MDNkZmVlNjEyNjUwZTAyN2RmODg0ZDIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CkBAIC0yMTMsNiArMjEz
LDcgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIDpydHlwZTogRGV2aWNlCiAgICAg
ICAgICIiIgogICAgICAgICBkZXZpY2VfdWRpZCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsn
eGNydW4nLCAnc2ltY3RsJywgJ2NyZWF0ZScsIG5hbWUsIGRldmljZV90eXBlLmlkZW50aWZpZXIs
IHJ1bnRpbWUuaWRlbnRpZmllcl0pLnJzdHJpcCgpCisgICAgICAgIF9sb2cuZGVidWcoIlwieGNy
dW4gc2ltY3RsIGNyZWF0ZSB7MH0gezF9IHsyfVwiIHJldHVybmVkIHszfSIuZm9ybWF0KG5hbWUs
IGRldmljZV90eXBlLmlkZW50aWZpZXIsIHJ1bnRpbWUuaWRlbnRpZmllciwgZGV2aWNlX3VkaWQp
KQogICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNl
X3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKICAgICAgICAgcmV0dXJuIFNp
bXVsYXRvcigpLmZpbmRfZGV2aWNlX2J5X3VkaWQoZGV2aWNlX3VkaWQpCiAKQEAgLTIyMyw3ICsy
MjQsMjggQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUg
dWRpZCBvZiB0aGUgZGV2aWNlLgogICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKICAgICAgICAgIiIi
Ci0gICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ3hjcnVuJywgJ3NpbWN0bCcsICdkZWxldGUnLCB1
ZGlkXSkKKyAgICAgICAgX2xvZy5kZWJ1ZygiZGVsZXRpbmcgZGV2aWNlIHt9XCIiLmZvcm1hdCh1
ZGlkKSkKKyAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHVk
aWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygieGNydW4gc2ltY3RsIGRlbGV0ZSB7fSIuZm9ybWF0KHVkaWQpKQor
ICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2Rl
bGV0ZScsIHVkaWRdKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJy
b3I6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1wieGNydW4gc2ltY3RsIGRlbGV0
ZVwiIGZhaWxlZDogZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9z
dGF0ZSh1ZGlkKSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcmVzZXQoY2xzLCB1ZGlk
KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlc2V0IHRoZSBnaXZlbiBDb3JlU2ltdWxhdG9yIGRl
dmljZS4KKyAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCisgICAg
ICAgIDp0eXBlIHVkaWQ6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygicmVz
ZXR0aW5nIGRldmljZSB7fVwiIi5mb3JtYXQodWRpZCkpCisgICAgICAgIFNpbXVsYXRvci53YWl0
X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZSh1ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hV
VERPV04pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoInhjcnVuIHNpbWN0
bCBlcmFzZSB7fSIuZm9ybWF0KHVkaWQpKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19j
YWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2VyYXNlJywgdWRpZF0pCisgICAgICAgIGV4Y2VwdCBz
dWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVF
cnJvcignXCJ4Y3J1biBzaW1jdGwgZXJhc2VcIiBmYWlsZWQ6IGRldmljZSBzdGF0ZSBpcyB7fScu
Zm9ybWF0KFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkpKQogCiAgICAgZGVmIF9fZXFfXyhz
ZWxmLCBvdGhlcik6CiAgICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3RoZXIudWRpZApAQCAt
MjgxLDYgKzMwMyw4IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgd2hp
bGUgVHJ1ZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHN0YXRl
ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1bicsICdzaW1jdGwnLCAnc3Bhd24nLCB1
ZGlkLCAnbGF1bmNoY3RsJywgJ3ByaW50JywgJ3N5c3RlbSddKS5zdHJpcCgpCisgICAgICAgICAg
ICAgICAgICAgIF9sb2cuZGVidWcoIlwieGNydW4gc2ltY3RsIHNwYXduIHswfVwiIHJldHVybmVk
IHsxfSIuZm9ybWF0KHVkaWQsIHN0YXRlKSkKKwogICAgICAgICAgICAgICAgICAgICBpZiByZS5z
ZWFyY2goIkFbXHNdK2NvbS5hcHBsZS5zcHJpbmdib2FyZC5zZXJ2aWNlcyIsIHN0YXRlKToKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJw
cm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKQEAgLTI5MSwxMCArMzE1LDE4IEBAIGNsYXNzIFNp
bXVsYXRvcihvYmplY3QpOgogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiB3YWl0X3VudGls
X2RldmljZV9pc19pbl9zdGF0ZSh1ZGlkLCB3YWl0X3VudGlsX3N0YXRlLCB0aW1lb3V0X3NlY29u
ZHM9NjAgKiA1KToKKyAgICAgICAgX2xvZy5kZWJ1Zygid2FpdGluZyBmb3IgZGV2aWNlIHswfSB0
byBlbnRlciBzdGF0ZSB7MX0gd2l0aCB0aW1lb3V0IHsyfSIuZm9ybWF0KHVkaWQsIHdhaXRfdW50
aWxfc3RhdGUsIHRpbWVvdXRfc2Vjb25kcykpCiAgICAgICAgIHdpdGggdGltZW91dChzZWNvbmRz
PXRpbWVvdXRfc2Vjb25kcyk6Ci0gICAgICAgICAgICB3aGlsZSAoU2ltdWxhdG9yLmRldmljZV9z
dGF0ZSh1ZGlkKSAhPSB3YWl0X3VudGlsX3N0YXRlKToKKyAgICAgICAgICAgIGRldmljZV9zdGF0
ZSA9IFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkKKyAgICAgICAgICAgIHdoaWxlIChkZXZp
Y2Vfc3RhdGUgIT0gd2FpdF91bnRpbF9zdGF0ZSk6CisgICAgICAgICAgICAgICAgZGV2aWNlX3N0
YXRlID0gU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKQorICAgICAgICAgICAgICAgIF9sb2cu
ZGVidWcoIiBkZXZpY2Ugc3RhdGUgezB9Ii5mb3JtYXQoZGV2aWNlX3N0YXRlKSkKICAgICAgICAg
ICAgICAgICB0aW1lLnNsZWVwKDAuNSkKIAorICAgICAgICBlbmRfc3RhdGUgPSBTaW11bGF0b3Iu
ZGV2aWNlX3N0YXRlKHVkaWQpCisgICAgICAgIGlmIChlbmRfc3RhdGUgIT0gd2FpdF91bnRpbF9z
dGF0ZSk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5n
IGZvciBzaW11bGF0b3IgZGV2aWNlIHRvIGVudGVyIHN0YXRlIHswfTsgY3VycmVudCBzdGF0ZSBp
cyB7MX0nLmZvcm1hdCh3YWl0X3VudGlsX3N0YXRlLCBlbmRfc3RhdGUpKQorCiAgICAgQHN0YXRp
Y21ldGhvZAogICAgIGRlZiBkZXZpY2Vfc3RhdGUodWRpZCk6CiAgICAgICAgIGRldmljZV9wbGlz
dCA9IG9zLnBhdGguam9pbihTaW11bGF0b3IuZGV2aWNlX2RpcmVjdG9yeSh1ZGlkKSwgJ2Rldmlj
ZS5wbGlzdCcpCkBAIC0zMDYsMTAgKzMzOCwxNCBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToK
ICAgICBkZWYgZGV2aWNlX2RpcmVjdG9yeSh1ZGlkKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGgu
cmVhbHBhdGgob3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbignfi9MaWJyYXJ5L0RldmVs
b3Blci9Db3JlU2ltdWxhdG9yL0RldmljZXMnLCB1ZGlkKSkpCiAKLSAgICBkZWYgZGVsZXRlX2Rl
dmljZShzZWxmLCB1ZGlkKToKLSAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lz
X2luX3N0YXRlKHVkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGRlbGV0ZV9kZXZpY2UodWRpZCk6CiAgICAgICAgIERldmljZS5k
ZWxldGUodWRpZCkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmVzZXRfZGV2aWNlKHVk
aWQpOgorICAgICAgICBEZXZpY2UucmVzZXQodWRpZCkKKwogICAgIGRlZiByZWZyZXNoKHNlbGYp
OgogICAgICAgICAiIiIKICAgICAgICAgUmVmcmVzaCBydW50aW1lIGFuZCBkZXZpY2UgdHlwZSBp
bmZvcm1hdGlvbiBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KQEAgLTUxMiw4ICs1NDgsMTAgQEAgY2xh
c3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgICAgIGFzc2VydChydW50aW1lLmF2YWlsYWJsZSkK
ICAgICAgICAgdGVzdGluZ19kZXZpY2UgPSBzZWxmLmRldmljZShuYW1lPW5hbWUsIHJ1bnRpbWU9
cnVudGltZSwgc2hvdWxkX2lnbm9yZV91bmF2YWlsYWJsZV9kZXZpY2VzPVRydWUpCiAgICAgICAg
IGlmIHRlc3RpbmdfZGV2aWNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygibG9va3VwX29yX2Ny
ZWF0ZV9kZXZpY2UgezB9IHsxfSB7Mn0gZm91bmQgezN9Ii5mb3JtYXQobmFtZSwgZGV2aWNlX3R5
cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIHRl
c3RpbmdfZGV2aWNlCiAgICAgICAgIHRlc3RpbmdfZGV2aWNlID0gRGV2aWNlLmNyZWF0ZShuYW1l
LCBkZXZpY2VfdHlwZSwgcnVudGltZSkKKyAgICAgICAgX2xvZy5kZWJ1ZygibG9va3VwX29yX2Ny
ZWF0ZV9kZXZpY2UgezB9IHsxfSB7Mn0gY3JlYXRlZCB7M30iLmZvcm1hdChuYW1lLCBkZXZpY2Vf
dHlwZSwgcnVudGltZSwgdGVzdGluZ19kZXZpY2UubmFtZSkpCiAgICAgICAgIGFzc2VydCh0ZXN0
aW5nX2RldmljZS5hdmFpbGFibGUpCiAgICAgICAgIHJldHVybiB0ZXN0aW5nX2RldmljZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285732</attachid>
            <date>2016-08-10 10:26:29 -0700</date>
            <delta_ts>2016-08-10 10:48:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160722-20160810102454.patch</filename>
            <type>text/plain</type>
            <size>11614</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjcxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTg2ODk0YWMzNTAzOTFiNTYxNjg1MWU4OTBhNTYxZDZk
N2I2YzE2OC4uMmZmYmI0OWY1Nzg1OWZjMDI2ZDE5ODdkOGU1NTljOWU2YWVhMWEyZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4
IEBACisyMDE2LTA4LTA5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIExvZ2dpbmcgYW5kIG90aGVyIG1pbm9yIGltcHJvdmVtZW50cyB0byBpT1Mgd2Vi
a2l0cHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDcyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCAtLWRlYnVnLXJ3dC1sb2dnaW5nIHRvIGxvZyBhbGwgdGhlIGNhbGxzIHRvIHNpbWN0bCBhcyB3
ZWxsIGFzIGRldmljZSBzdGF0ZSBpbmZvcm1hdGlvbiwKKyAgICAgICAgdG8gbWFrZSBpdCBlYXNp
ZXIgdG8gZGVidWcgbGF1bmNoaW5nIGlzc3Vlcy4KKworICAgICAgICBIYXZlIHJlc2V0X3ByZWZl
cmVuY2VzKCkgcmVzZXQgdGhlIGRldmljZSwgcmF0aGVyIHRoYW4ganVzdCBudWtpbmcgdGhlIGRh
dGEKKyAgICAgICAgZGlyZWN0b3J5ICh3aGljaCBicm9rZSBzb21lIHZlcnNpb25zIG9mIHRoZSBz
aW11bGF0b3IpLgorCisgICAgICAgIE1ha2UgdGhlIFNpbXVsYXRvci5hcHAgbGF1bmNoIGluIHRo
ZSBiYWNrZ3JvdW5kIHdpdGggb3BlbiAtZy4KKworICAgICAgICBXYWl0IGZvciB0aGUgc2ltdWxh
dG9yIGRldmljZSB0byBiZSBpbiBhIGtub3duIHN0YXRlIGluIHNvbWUgbW9yZSBwbGFjZXMuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TU2lt
dWxhdG9yUG9ydC5zZXR1cF90ZXN0X3J1bik6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9x
dWl0X2lvc19zaW11bGF0b3IpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5jbGVhbl91cF90
ZXN0X3J1bik6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnNldHVwX2Vudmlyb25fZm9yX3Nl
cnZlcik6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnJlc2V0X3ByZWZlcmVuY2VzKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weToKKyAgICAgICAgKERl
dmljZS5jcmVhdGUpOgorICAgICAgICAoRGV2aWNlLmRlbGV0ZSk6CisgICAgICAgIChEZXZpY2Up
OgorICAgICAgICAoRGV2aWNlLnJlc2V0KToKKyAgICAgICAgKFNpbXVsYXRvci53YWl0X3VudGls
X2RldmljZV9pc19ib290ZWQpOgorICAgICAgICAoU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNl
X2lzX2luX3N0YXRlKToKKyAgICAgICAgKFNpbXVsYXRvcik6CisgICAgICAgIChTaW11bGF0b3Iu
ZGVsZXRlX2RldmljZSk6CisgICAgICAgIChTaW11bGF0b3IucmVzZXRfZGV2aWNlKToKKyAgICAg
ICAgKFNpbXVsYXRvci5sb29rdXBfb3JfY3JlYXRlX2RldmljZSk6CisKIDIwMTYtMDgtMDggIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSB0aGUg
aU9TIHBsYXRmb3JtIGludGVyaXQgZnJvbSB0aGUgQXBwbGUgcGxhdGZvcm0gaW4gd2Via2l0cHkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CmluZGV4IDNlZTcxNDRjMTI0YjUwZDY2YTkwMGVm
NTQ2YTdlMWNiYzU4ZDljZTcuLjQ5NTcxMTYxNDdhZmE1YzMyNjA3MzcxOGFiZjk5NjFhMmE2NWZj
M2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQpAQCAtMjEwLDggKzIxMCw5IEBAIGNs
YXNzIElPU1NpbXVsYXRvclBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgZm9yIGkgaW4geHJhbmdl
KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgogICAgICAgICAgICAgZGV2aWNlX3VkaWQgPSBzZWxm
LnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQKICAgICAgICAgICAgICMgRklYTUU6IDxyZGFyOi8vcHJv
YmxlbS8yMDkxNjE0MD4gU3dpdGNoIHRvIHVzaW5nIENvcmVTaW11bGF0b3IuZnJhbWV3b3JrIGZv
ciBsYXVuY2hpbmcgYW5kIHF1aXR0aW5nIGlPUyBTaW11bGF0b3IKKwogICAgICAgICAgICAgc2Vs
Zi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAgICAgICAgICAnb3BlbicsICctYics
IHNlbGYuU0lNVUxBVE9SX0JVTkRMRV9JRCArIHN0cihpKSwKKyAgICAgICAgICAgICAgICAnb3Bl
bicsICctZycsICctYicsIHNlbGYuU0lNVUxBVE9SX0JVTkRMRV9JRCArIHN0cihpKSwKICAgICAg
ICAgICAgICAgICAnLS1hcmdzJywgJy1DdXJyZW50RGV2aWNlVURJRCcsIGRldmljZV91ZGlkXSkK
IAogICAgICAgICAgICAgaWYgbWFjX29zX3ZlcnNpb24gaW4gWydlbGNhcGl0YW4nLCAneW9zZW1p
dGUnLCAnbWF2ZXJpY2tzJ106CkBAIC0yMjIsMTEgKzIyMywxMyBAQCBjbGFzcyBJT1NTaW11bGF0
b3JQb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZp
Y2VfaXNfYm9vdGVkKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCkKIAogICAgIGRlZiBfcXVp
dF9pb3Nfc2ltdWxhdG9yKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCJfcXVpdF9pb3Nfc2lt
dWxhdG9yIikKICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGtpbGwgb25seSB0aGUgU2ltdWxh
dG9ycyB3ZSBzdGFydGVkLgogICAgICAgICBzdWJwcm9jZXNzLmNhbGwoWyJraWxsYWxsIiwgIi05
IiwgIi1tIiwgIlNpbXVsYXRvciJdKQogCiAgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYp
OgogICAgICAgICBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1
bigpCisgICAgICAgIF9sb2cuZGVidWcoImNsZWFuX3VwX3Rlc3RfcnVuIikKICAgICAgICAgc2Vs
Zi5fcXVpdF9pb3Nfc2ltdWxhdG9yKCkKICAgICAgICAgZmlmb3MgPSBbcGF0aCBmb3IgcGF0aCBp
biBvcy5saXN0ZGlyKCcvdG1wJykgaWYgcmUuc2VhcmNoKCdvcmcud2Via2l0LihEdW1wUmVuZGVy
VHJlZXxXZWJLaXRUZXN0UnVubmVyKS4qXyhJTnxPVVR8RVJST1IpJywgcGF0aCldCiAgICAgICAg
IGZvciBmaWZvIGluIGZpZm9zOgpAQCAtMjM3LDIwICsyNDAsMzEgQEAgY2xhc3MgSU9TU2ltdWxh
dG9yUG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBmb3Ig
aSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6Ci0gICAgICAgICAgICBpZiBub3Qg
b3MucGF0aC5leGlzdHMoc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoaSkpOgorICAgICAgICAgICAg
c2ltdWxhdG9yX3BhdGggPSBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChpKQorICAgICAgICAgICAg
ZGV2aWNlX3VkaWQgPSBzZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQKKyAgICAgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmV4aXN0cyhzaW11bGF0b3JfcGF0aCk6CiAgICAgICAgICAgICAgICAgY29u
dGludWUKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwo
W3NlbGYuTFNSRUdJU1RFUl9QQVRILCAiLXUiLCBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChpKV0p
Ci0gICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmdldF9zaW11bGF0b3JfcGF0aChp
KSwgaWdub3JlX2Vycm9ycz1UcnVlKQotICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3Mu
cGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcigifiIpLCAiTGlicmFyeS9Mb2dzL0NvcmVTaW11
bGF0b3IvIiwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0aW5nX2RldmljZShpKS51ZGlk
KSwgaWdub3JlX2Vycm9ycz1UcnVlKQotICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3Mu
cGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcigifiIpLCAiTGlicmFyeS9TYXZlZCBBcHBsaWNh
dGlvbiBTdGF0ZS8iLAotICAgICAgICAgICAgICAgICAgICBzZWxmLlNJTVVMQVRPUl9CVU5ETEVf
SUQgKyBzdHIoaSkgKyAiLnNhdmVkU3RhdGUiKSwgaWdub3JlX2Vycm9ycz1UcnVlKQotICAgICAg
ICAgICAgICAgIFNpbXVsYXRvcigpLmRlbGV0ZV9kZXZpY2Uoc2VsZi50ZXN0aW5nX2RldmljZShp
KS51ZGlkKQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIlwiezB9IHsxfSB7Mn1cIiIuZm9y
bWF0KHNlbGYuTFNSRUdJU1RFUl9QQVRILCAiLXUiLCBzaW11bGF0b3JfcGF0aCkpCisgICAgICAg
ICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzZWxmLkxTUkVHSVNURVJfUEFUSCwgIi11Iiwgc2lt
dWxhdG9yX3BhdGhdKQorCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiXCJybXRyZWUgezB9
Ii5mb3JtYXQoc2ltdWxhdG9yX3BhdGgpKQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUo
c2ltdWxhdG9yX3BhdGgsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgICAgICAgICAgICAgIGxv
Z3NfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIkxpYnJhcnkv
TG9ncy9Db3JlU2ltdWxhdG9yLyIsIGRldmljZV91ZGlkKQorICAgICAgICAgICAgICAgIF9sb2cu
ZGVidWcoIlwicm10cmVlIHswfSIuZm9ybWF0KGxvZ3NfcGF0aCkpCisgICAgICAgICAgICAgICAg
c2h1dGlsLnJtdHJlZShsb2dzX3BhdGgsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgICAgICAg
ICAgICAgIHNhdmVkX3N0YXRlX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2Vy
KCJ+IiksICJMaWJyYXJ5L1NhdmVkIEFwcGxpY2F0aW9uIFN0YXRlLyIsIHNlbGYuU0lNVUxBVE9S
X0JVTkRMRV9JRCArIHN0cihpKSArICIuc2F2ZWRTdGF0ZSIpCisgICAgICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiXCJybXRyZWUgezB9Ii5mb3JtYXQoc2F2ZWRfc3RhdGVfcGF0aCkpCisgICAgICAg
ICAgICAgICAgc2h1dGlsLnJtdHJlZShzYXZlZF9zdGF0ZV9wYXRoLCBpZ25vcmVfZXJyb3JzPVRy
dWUpCisKKyAgICAgICAgICAgICAgICBTaW11bGF0b3IoKS5kZWxldGVfZGV2aWNlKGRldmljZV91
ZGlkKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygn
VW5hYmxlIHRvIHJlbW92ZSBTaW11bGF0b3InICsgc3RyKGkpKQogCiAgICAgZGVmIHNldHVwX2Vu
dmlyb25fZm9yX3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKKyAgICAgICAgX2xvZy5k
ZWJ1Zygic2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyIikKICAgICAgICAgZW52ID0gc3VwZXIoSU9T
U2ltdWxhdG9yUG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1l
KQogICAgICAgICBpZiBzZXJ2ZXJfbmFtZSA9PSBzZWxmLmRyaXZlcl9uYW1lKCk6CiAgICAgICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CkBAIC0zMzYsNiArMzUwLDcgQEAgY2xh
c3MgSU9TU2ltdWxhdG9yUG9ydChBcHBsZVBvcnQpOgogICAgICAgICByZXR1cm4gc2VsZi5faW1h
Z2VfZGlmZmVyLmRpZmZfaW1hZ2UoZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cywg
dG9sZXJhbmNlKQogCiAgICAgZGVmIHJlc2V0X3ByZWZlcmVuY2VzKHNlbGYpOgorICAgICAgICBf
bG9nLmRlYnVnKCJyZXNldF9wcmVmZXJlbmNlcyIpCiAgICAgICAgIGlmIChzZWxmLmRlZmF1bHRf
Y2hpbGRfcHJvY2Vzc2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKICAgICAgICAgICAg
ICAgICBfbG9nLndhcm4oIllvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2ggdmFsdWUoezB9KSBm
b3IgLS1jaGlsZC1wcm9jZXNzZXMiLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKSkKICAg
ICAgICAgICAgICAgICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNh
biBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1
bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQpAQCAtMzQ2LDEwICszNjEsNyBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KEFwcGxlUG9ydCk6CiAKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hp
bGRfcHJvY2Vzc2VzKCkpOgogICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNl
X2lzX2luX3N0YXRlKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCwgU2ltdWxhdG9yLkRldmlj
ZVN0YXRlLlNIVVRET1dOKQotCi0gICAgICAgICAgICBkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4o
c2VsZi50ZXN0aW5nX2RldmljZShpKS5wYXRoLCAnZGF0YScpCi0gICAgICAgICAgICBpZiBvcy5w
YXRoLmlzZGlyKGRhdGFfcGF0aCk6Ci0gICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkYXRh
X3BhdGgpCisgICAgICAgICAgICBTaW11bGF0b3IucmVzZXRfZGV2aWNlKHNlbGYudGVzdGluZ19k
ZXZpY2UoaSkudWRpZCkKIAogICAgIGRlZiBubV9jb21tYW5kKHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi54Y3J1bl9maW5kKCdubScpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3hjb2RlL3NpbXVsYXRvci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2lt
dWxhdG9yLnB5CmluZGV4IDhhZjlhZGQyM2ZjZDU2NDYxOWVmYTNhODU2MDRhOTcwNmUzMTAzMTEu
LjNkYzQzNTViMDNjZTNiNDU0MDNkZmVlNjEyNjUwZTAyN2RmODg0ZDIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CkBAIC0yMTMsNiArMjEzLDcgQEAgY2xhc3Mg
RGV2aWNlKG9iamVjdCk6CiAgICAgICAgIDpydHlwZTogRGV2aWNlCiAgICAgICAgICIiIgogICAg
ICAgICBkZXZpY2VfdWRpZCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsneGNydW4nLCAnc2lt
Y3RsJywgJ2NyZWF0ZScsIG5hbWUsIGRldmljZV90eXBlLmlkZW50aWZpZXIsIHJ1bnRpbWUuaWRl
bnRpZmllcl0pLnJzdHJpcCgpCisgICAgICAgIF9sb2cuZGVidWcoIlwieGNydW4gc2ltY3RsIGNy
ZWF0ZSB7MH0gezF9IHsyfVwiIHJldHVybmVkIHszfSIuZm9ybWF0KG5hbWUsIGRldmljZV90eXBl
LmlkZW50aWZpZXIsIHJ1bnRpbWUuaWRlbnRpZmllciwgZGV2aWNlX3VkaWQpKQogICAgICAgICBT
aW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNlX3VkaWQsIFNpbXVs
YXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKICAgICAgICAgcmV0dXJuIFNpbXVsYXRvcigpLmZp
bmRfZGV2aWNlX2J5X3VkaWQoZGV2aWNlX3VkaWQpCiAKQEAgLTIyMyw3ICsyMjQsMjggQEAgY2xh
c3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUgdWRpZCBvZiB0aGUg
ZGV2aWNlLgogICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKICAgICAgICAgIiIiCi0gICAgICAgIHN1
YnByb2Nlc3MuY2FsbChbJ3hjcnVuJywgJ3NpbWN0bCcsICdkZWxldGUnLCB1ZGlkXSkKKyAgICAg
ICAgX2xvZy5kZWJ1ZygiZGVsZXRpbmcgZGV2aWNlIHt9XCIiLmZvcm1hdCh1ZGlkKSkKKyAgICAg
ICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHVkaWQsIFNpbXVsYXRv
ci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygieGNydW4gc2ltY3RsIGRlbGV0ZSB7fSIuZm9ybWF0KHVkaWQpKQorICAgICAgICAgICAg
c3VicHJvY2Vzcy5jaGVja19jYWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2RlbGV0ZScsIHVkaWRd
KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAg
ICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1wieGNydW4gc2ltY3RsIGRlbGV0ZVwiIGZhaWxlZDog
ZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKSkp
CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcmVzZXQoY2xzLCB1ZGlkKToKKyAgICAgICAg
IiIiCisgICAgICAgIFJlc2V0IHRoZSBnaXZlbiBDb3JlU2ltdWxhdG9yIGRldmljZS4KKyAgICAg
ICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCisgICAgICAgIDp0eXBlIHVk
aWQ6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygicmVzZXR0aW5nIGRldmlj
ZSB7fVwiIi5mb3JtYXQodWRpZCkpCisgICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2Rldmlj
ZV9pc19pbl9zdGF0ZSh1ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04pCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoInhjcnVuIHNpbWN0bCBlcmFzZSB7fSIu
Zm9ybWF0KHVkaWQpKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsneGNydW4n
LCAnc2ltY3RsJywgJ2VyYXNlJywgdWRpZF0pCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNh
bGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignXCJ4Y3J1
biBzaW1jdGwgZXJhc2VcIiBmYWlsZWQ6IGRldmljZSBzdGF0ZSBpcyB7fScuZm9ybWF0KFNpbXVs
YXRvci5kZXZpY2Vfc3RhdGUodWRpZCkpKQogCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6
CiAgICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3RoZXIudWRpZApAQCAtMjgxLDYgKzMwMyw4
IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAg
ICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3VicHJvY2Vz
cy5jaGVja19vdXRwdXQoWyd4Y3J1bicsICdzaW1jdGwnLCAnc3Bhd24nLCB1ZGlkLCAnbGF1bmNo
Y3RsJywgJ3ByaW50JywgJ3N5c3RlbSddKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIF9s
b2cuZGVidWcoIlwieGNydW4gc2ltY3RsIHNwYXduIHswfVwiIHJldHVybmVkIHsxfSIuZm9ybWF0
KHVkaWQsIHN0YXRlKSkKKwogICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goIkFbXHNd
K2NvbS5hcHBsZS5zcHJpbmdib2FyZC5zZXJ2aWNlcyIsIHN0YXRlKToKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxl
ZFByb2Nlc3NFcnJvcjoKQEAgLTI5MSwxMCArMzE1LDE4IEBAIGNsYXNzIFNpbXVsYXRvcihvYmpl
Y3QpOgogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiB3YWl0X3VudGlsX2RldmljZV9pc19p
bl9zdGF0ZSh1ZGlkLCB3YWl0X3VudGlsX3N0YXRlLCB0aW1lb3V0X3NlY29uZHM9NjAgKiA1KToK
KyAgICAgICAgX2xvZy5kZWJ1Zygid2FpdGluZyBmb3IgZGV2aWNlIHswfSB0byBlbnRlciBzdGF0
ZSB7MX0gd2l0aCB0aW1lb3V0IHsyfSIuZm9ybWF0KHVkaWQsIHdhaXRfdW50aWxfc3RhdGUsIHRp
bWVvdXRfc2Vjb25kcykpCiAgICAgICAgIHdpdGggdGltZW91dChzZWNvbmRzPXRpbWVvdXRfc2Vj
b25kcyk6Ci0gICAgICAgICAgICB3aGlsZSAoU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKSAh
PSB3YWl0X3VudGlsX3N0YXRlKToKKyAgICAgICAgICAgIGRldmljZV9zdGF0ZSA9IFNpbXVsYXRv
ci5kZXZpY2Vfc3RhdGUodWRpZCkKKyAgICAgICAgICAgIHdoaWxlIChkZXZpY2Vfc3RhdGUgIT0g
d2FpdF91bnRpbF9zdGF0ZSk6CisgICAgICAgICAgICAgICAgZGV2aWNlX3N0YXRlID0gU2ltdWxh
dG9yLmRldmljZV9zdGF0ZSh1ZGlkKQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiBkZXZp
Y2Ugc3RhdGUgezB9Ii5mb3JtYXQoZGV2aWNlX3N0YXRlKSkKICAgICAgICAgICAgICAgICB0aW1l
LnNsZWVwKDAuNSkKIAorICAgICAgICBlbmRfc3RhdGUgPSBTaW11bGF0b3IuZGV2aWNlX3N0YXRl
KHVkaWQpCisgICAgICAgIGlmIChlbmRfc3RhdGUgIT0gd2FpdF91bnRpbF9zdGF0ZSk6CisgICAg
ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBzaW11bGF0
b3IgZGV2aWNlIHRvIGVudGVyIHN0YXRlIHswfTsgY3VycmVudCBzdGF0ZSBpcyB7MX0nLmZvcm1h
dCh3YWl0X3VudGlsX3N0YXRlLCBlbmRfc3RhdGUpKQorCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBkZXZpY2Vfc3RhdGUodWRpZCk6CiAgICAgICAgIGRldmljZV9wbGlzdCA9IG9zLnBhdGgu
am9pbihTaW11bGF0b3IuZGV2aWNlX2RpcmVjdG9yeSh1ZGlkKSwgJ2RldmljZS5wbGlzdCcpCkBA
IC0zMDYsMTAgKzMzOCwxNCBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICBkZWYgZGV2
aWNlX2RpcmVjdG9yeSh1ZGlkKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgob3Mu
cGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbignfi9MaWJyYXJ5L0RldmVsb3Blci9Db3JlU2lt
dWxhdG9yL0RldmljZXMnLCB1ZGlkKSkpCiAKLSAgICBkZWYgZGVsZXRlX2RldmljZShzZWxmLCB1
ZGlkKToKLSAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHVk
aWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIGRlbGV0ZV9kZXZpY2UodWRpZCk6CiAgICAgICAgIERldmljZS5kZWxldGUodWRpZCkK
IAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmVzZXRfZGV2aWNlKHVkaWQpOgorICAgICAg
ICBEZXZpY2UucmVzZXQodWRpZCkKKwogICAgIGRlZiByZWZyZXNoKHNlbGYpOgogICAgICAgICAi
IiIKICAgICAgICAgUmVmcmVzaCBydW50aW1lIGFuZCBkZXZpY2UgdHlwZSBpbmZvcm1hdGlvbiBm
cm9tIGBgc2ltY3RsIGxpc3RgYC4KQEAgLTUxMiw4ICs1NDgsMTAgQEAgY2xhc3MgU2ltdWxhdG9y
KG9iamVjdCk6CiAgICAgICAgIGFzc2VydChydW50aW1lLmF2YWlsYWJsZSkKICAgICAgICAgdGVz
dGluZ19kZXZpY2UgPSBzZWxmLmRldmljZShuYW1lPW5hbWUsIHJ1bnRpbWU9cnVudGltZSwgc2hv
dWxkX2lnbm9yZV91bmF2YWlsYWJsZV9kZXZpY2VzPVRydWUpCiAgICAgICAgIGlmIHRlc3Rpbmdf
ZGV2aWNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygibG9va3VwX29yX2NyZWF0ZV9kZXZpY2Ug
ezB9IHsxfSB7Mn0gZm91bmQgezN9Ii5mb3JtYXQobmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUs
IHRlc3RpbmdfZGV2aWNlLm5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIHRlc3RpbmdfZGV2aWNl
CiAgICAgICAgIHRlc3RpbmdfZGV2aWNlID0gRGV2aWNlLmNyZWF0ZShuYW1lLCBkZXZpY2VfdHlw
ZSwgcnVudGltZSkKKyAgICAgICAgX2xvZy5kZWJ1ZygibG9va3VwX29yX2NyZWF0ZV9kZXZpY2Ug
ezB9IHsxfSB7Mn0gY3JlYXRlZCB7M30iLmZvcm1hdChuYW1lLCBkZXZpY2VfdHlwZSwgcnVudGlt
ZSwgdGVzdGluZ19kZXZpY2UubmFtZSkpCiAgICAgICAgIGFzc2VydCh0ZXN0aW5nX2RldmljZS5h
dmFpbGFibGUpCiAgICAgICAgIHJldHVybiB0ZXN0aW5nX2RldmljZQogCg==
</data>
<flag name="review"
          id="309342"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
      

    </bug>

</bugzilla>