<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>31685</bug_id>
          
          <creation_ts>2016-01-05 16:46:15 +0300</creation_ts>
          <short_desc>Ошибка при запуске driconf</short_desc>
          <delta_ts>2018-06-08 21:40:59 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>driconf</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Леонид Мощницын">alabar2015</reporter>
          <assigned_to name="Grigory Ustinov">grenka</assigned_to>
          <cc>grenka</cc>
    
    <cc>lakostis</cc>
    
    <cc>oddity</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>154494</commentid>
    <comment_count>0</comment_count>
    <who name="Леонид Мощницын">alabar2015</who>
    <bug_when>2016-01-05 16:46:15 +0300</bug_when>
    <thetext>$ driconf
Traceback (most recent call last):
  File &quot;/usr/bin/driconf&quot;, line 28, in &lt;module&gt;
    driconf.main()
  File &quot;/usr/lib/driconf/driconf.py&quot;, line 142, in main
    simpleui.start(configList)
  File &quot;/usr/lib/driconf/driconf_simpleui.py&quot;, line 869, in start
    mainWindow = MainWindow(configList)
  File &quot;/usr/lib/driconf/driconf_simpleui.py&quot;, line 520, in __init__
    self.selectScreen(0)
  File &quot;/usr/lib/driconf/driconf_simpleui.py&quot;, line 605, in selectScreen
    self.selectApp(self.deviceConfig.apps[1])
  File &quot;/usr/lib/driconf/driconf_simpleui.py&quot;, line 641, in selectApp
    self.appPage = AppPage (self.driver, app)
  File &quot;/usr/lib/driconf/driconf_simpleui.py&quot;, line 347, in __init__
    self.refreshOptions()
  File &quot;/usr/lib/driconf/driconf_simpleui.py&quot;, line 370, in refreshOptions
    lineWrap(opt.getDesc([lang]).text), sectI, optI])
  File &quot;/usr/lib/driconf/driconf_simpleui.py&quot;, line 271, in lineWrap
    head, tail = head + tail[:i] + &apos;\n&apos;, tail[j:]
UnboundLocalError: local variable &apos;j&apos; referenced before assignment

Если в /usr/lib/driconf/driconf_simpleui.py строка 270 с таким содержимым
i = chars
заменить на
j = chars
то driconf запускается.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168703</commentid>
    <comment_count>1</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2018-01-30 22:44:40 +0300</bug_when>
    <thetext>У меня давно лежит исправленный пакет в git[1], но гордые разработчики basealt продолжают эту ошибку игнорировать даже в Сизифе.

1. http://git.altlinux.org/people/lakostis/packages/?p=driconf.git;a=commit;h=b168a1f4f83a0d5690e8ee42ab60a47aee4cef0c

Как говорит г-н. cas@ им бы все на лавочке потрындеть.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170598</commentid>
    <comment_count>2</comment_count>
    <who name="Grigory Ustinov">grenka</who>
    <bug_when>2018-04-24 18:18:54 +0300</bug_when>
    <thetext>Поскольку версия в p7, p8 и сизифе одна и та же, перевешиваю с p7 на сизиф.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170599</commentid>
    <comment_count>3</comment_count>
    <who name="Grigory Ustinov">grenka</who>
    <bug_when>2018-04-24 18:21:51 +0300</bug_when>
    <thetext>(В ответ на комментарий №1)
&gt; У меня давно лежит исправленный пакет в git[1], но гордые разработчики basealt
&gt; продолжают эту ошибку игнорировать даже в Сизифе.
&gt; 
&gt; 1.
&gt; http://git.altlinux.org/people/lakostis/packages/?p=driconf.git;a=commit;h=b168a1f4f83a0d5690e8ee42ab60a47aee4cef0c

Во-первых, у меня почему-то запускается без ошибок.

Во-вторых, не думаю, что объявлять j глобальной переменной в теле функции - это отличная идея.

Предлагаю обсудить дальнейший статус баги.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170611</commentid>
    <comment_count>4</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2018-04-24 23:06:36 +0300</bug_when>
    <thetext>(In reply to comment #3)
&lt;skip&gt;
&gt; 
&gt; Предлагаю обсудить дальнейший статус баги.
Обсуждайте</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171341</commentid>
    <comment_count>5</comment_count>
    <who name="Леонид Мощницын">alabar2015</who>
    <bug_when>2018-05-28 17:13:29 +0300</bug_when>
    <thetext>(В ответ на комментарий №3)
&gt; (В ответ на комментарий №1)
&gt; &gt; У меня давно лежит исправленный пакет в git[1], но гордые разработчики basealt
&gt; &gt; продолжают эту ошибку игнорировать даже в Сизифе.
&gt; &gt; 
&gt; &gt; 1.
&gt; &gt; http://git.altlinux.org/people/lakostis/packages/?p=driconf.git;a=commit;h=b168a1f4f83a0d5690e8ee42ab60a47aee4cef0c
&gt; 
&gt; Во-первых, у меня почему-то запускается без ошибок.
&gt; 
&gt; Во-вторых, не думаю, что объявлять j глобальной переменной в теле функции - это
&gt; отличная идея.
&gt; 
&gt; Предлагаю обсудить дальнейший статус баги.
У меня тоже запускалось, но только первый и последний раз. Просто запустил и закрыл ничего не меняя в .drirc.
Чтобы driconf снова заработал пришлось сделать такую вышеприведенную правку. Я и не утверждаю, что это гениально.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171345</commentid>
    <comment_count>6</comment_count>
    <who name="Grigory Ustinov">grenka</who>
    <bug_when>2018-05-28 17:25:12 +0300</bug_when>
    <thetext>(В ответ на комментарий №5)
&gt; &gt; Предлагаю обсудить дальнейший статус баги.
&gt; У меня тоже запускалось, но только первый и последний раз. Просто запустил и
&gt; закрыл ничего не меняя в .drirc.

Что нужно сделать, чтобы она упала? Я запускаю по несколько раз и всё отлично работает. Версия 0.9.1-alt1.qa3.1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171349</commentid>
    <comment_count>7</comment_count>
    <who name="Леонид Мощницын">alabar2015</who>
    <bug_when>2018-05-28 17:59:48 +0300</bug_when>
    <thetext>(В ответ на комментарий №6)
&gt; (В ответ на комментарий №5)
&gt; &gt; &gt; Предлагаю обсудить дальнейший статус баги.
&gt; &gt; У меня тоже запускалось, но только первый и последний раз. Просто запустил и
&gt; &gt; закрыл ничего не меняя в .drirc.
&gt; 
&gt; Что нужно сделать, чтобы она упала?

Не знаю.
У меня это длится с 7.0.5 (xfce KDE).
Сейчас Simply Linux 8.2.0  (Cleo)
Добавьте какое-нибудь приложение в список.
Почему driconf запускается через терминал?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171352</commentid>
    <comment_count>8</comment_count>
    <who name="Леонид Мощницын">alabar2015</who>
    <bug_when>2018-05-28 18:17:21 +0300</bug_when>
    <thetext>$ rpm -qa driconf
driconf-0.9.1-alt1.qa3.1

$ apt-repo
rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64 classic
rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64-i586 classic
rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/noarch classic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171720</commentid>
    <comment_count>9</comment_count>
      <attachid>7578</attachid>
    <who name="Леонид Мощницын">alabar2015</who>
    <bug_when>2018-06-08 14:56:41 +0300</bug_when>
    <thetext>Created attachment 7578
gentoo driconf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171721</commentid>
    <comment_count>10</comment_count>
    <who name="Леонид Мощницын">alabar2015</who>
    <bug_when>2018-06-08 15:09:28 +0300</bug_when>
    <thetext>в Генту

else:
i = j = chars

в альте

if i &lt; chars/3:
j = chars</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171722</commentid>
    <comment_count>11</comment_count>
    <who name="Grigory Ustinov">grenka</who>
    <bug_when>2018-06-08 15:18:11 +0300</bug_when>
    <thetext>(В ответ на комментарий №10)
&gt; в Генту
&gt; 
&gt; else:
&gt; i = j = chars
&gt; 
&gt; в альте
&gt; 
&gt; if i &lt; chars/3:
&gt; j = chars

Ладно, мне эта бага конкретно надоела. Я согласен с гентушным решением. Сейчас залью фикс и поставлю точку на этой теме.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171751</commentid>
    <comment_count>12</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2018-06-08 21:40:59 +0300</bug_when>
    <thetext>driconf-0.9.1-alt2 -&gt; sisyphus:

Fri Jun 08 2018 Grigory Ustinov &lt;grenka@altlinux&gt; 0.9.1-alt2
- Fix program start (Closes: #31685).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>7578</attachid>
            <date>2018-06-08 14:56:41 +0300</date>
            <delta_ts>2018-06-08 14:56:41 +0300</delta_ts>
            <desc>gentoo driconf</desc>
            <filename>driconf_simpleui.py</filename>
            <type>text/x-python</type>
            <size>37055</size>
            <attacher name="Леонид Мощницын">alabar2015</attacher>
            
              <data encoding="base64">IyBEUkkgY29uZmlndXJhdGlvbiBHVUk6IHNpbXBsaWZpZWQgVUkgY29tcG9uZW50cwoKIyBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAwNiAgRmVsaXggS3VlaGxpbmcKCiMgVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
CiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKCiMgQ29u
dGFjdDogaHR0cDovL2Z4ay5kZS52dS8KCmltcG9ydCBvcwppbXBvcnQgZHJpCmltcG9ydCBweWd0
awpweWd0ay5yZXF1aXJlICgiMi4wIikKaW1wb3J0IGd0awppbXBvcnQgZ29iamVjdAoKaW1wb3J0
IGRyaWNvbmZfY29tbW9udWkKaW1wb3J0IGRyaWNvbmZfY29tcGxleHVpCmNvbW1vbnVpID0gZHJp
Y29uZl9jb21tb251aSAgICAjIHNob3J0IGN1dApjb21wbGV4dWkgPSBkcmljb25mX2NvbXBsZXh1
aQoKZnJvbSBkcmljb25mX2NvbW1vbnVpIGltcG9ydCBfLCBsYW5nCgpkZWYgaXNVc2VyQ29uZmln
KGNvbmZpZyk6CiAgICByZXR1cm4gY29uZmlnLmZpbGVOYW1lLnN0YXJ0c3dpdGgob3MuZW52aXJv
blsiSE9NRSJdKQoKZGVmIGdldFVzZXJDb25maWcoY29uZmlnTGlzdCk6CiAgICB1c2VyQ29uZmln
cyA9IFtjb25maWcgZm9yIGNvbmZpZyBpbiBjb25maWdMaXN0IGlmIGlzVXNlckNvbmZpZyhjb25m
aWcpXQogICAgaWYgbm90IHVzZXJDb25maWdzOgogICAgICAgIHJldHVybiBOb25lCiAgICBlbHNl
OgogICAgICAgIHJldHVybiB1c2VyQ29uZmlnc1swXQoKZGVmIGdlbk5vcm1hbERldmljZUNvbmZp
Z3MgKGNvbmZpZ0xpc3QsIGRweSk6CiAgICAiIiIgR2VuZXJhdGUgYSBsaXN0IG9mIG5vcm1hbGl6
ZWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLgoKICAgIE9uZSBkZXZpY2UgY29uZmlndXJhdGlvbiBm
b3IgZWFjaCBpbnN0YWxsZWQgZGV2aWNlLiBFYWNoIGNvbnRhaW5zCiAgICBhIGRlZmF1bHQgYXBw
bGljYXRpb24gY29uZmlndXJhdGlvbiB0aGF0IGV4cGxpY2l0bHkgc2V0cyBhbGwKICAgIG9wdGlv
bnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMgaW4gb3JkZXIgdG8gb3ZlcnJpZGUgdmFsdWVzIGlu
CiAgICBwcmV2aW91cyBsZXNzIHNwZWNpZmljIGRldmljZSBzZWN0aW9ucy4gVGhlbiBpdCBhcHBl
bmRzCiAgICBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9ucyBmb3IgYWxsIGFwcGxpY2F0aW9uIGNv
bmZpZ3VyYXRpb25zIGluCiAgICBhbGwgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IGFmZmVjdCB0
aGUgcmVzcGVjdGl2ZSBkZXZpY2UuIFRoZQogICAgcmVzdWx0IGlzIG9uZSBkZXZpY2UgY29uZmln
dXJhdGlvbiBwZXIgZXhpc3RpbmcgZGV2aWNlIHRoYXQKICAgIHN1bW1hcml6ZXMgdGhlIGVudGly
ZSBjb25maWd1cmF0aW9uIG9mIGV4aXN0aW5nIGRldmljZXMgYW5kCiAgICBvdmVycmlkZXMgYW55
IHByZXZpb3VzIHNldHRpbmdzLgoKICAgIElmIHRoZXJlIGlzIG5vIHVzZXIgY29uZmlndXJhdGlv
biBmaWxlLCBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLiAiIiIKICAgIHVzZXJDb25maWcgPSBn
ZXRVc2VyQ29uZmlnKGNvbmZpZ0xpc3QpCiAgICBpZiBub3QgdXNlckNvbmZpZzoKICAgICAgICBy
ZXR1cm4gW10KICAgIHNjcmVlbnMgPSBbc2NyZWVuIGZvciBzY3JlZW4gaW4gZHB5LnNjcmVlbnMg
aWYgc2NyZWVuXQogICAgZGV2aWNlQ29uZmlncyA9IFtdCiAgICAjIENyZWF0ZSBvbmUgZGV2aWNl
IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggaW5zdGFsbGVkIGRldmljZSBvbiB0aGlzIGRpc3BsYXkK
ICAgIGZvciBzY3JlZW4gaW4gc2NyZWVuczoKICAgICAgICBpZiBzY3JlZW4gPT0gTm9uZToKICAg
ICAgICAgICAgY29udGludWUKICAgICAgICBkcml2ZXIgPSBzY3JlZW4uZHJpdmVyCiAgICAgICAg
ZGV2aWNlQ29uZmlnID0gZHJpLkRldmljZUNvbmZpZyh1c2VyQ29uZmlnLCBzdHIoc2NyZWVuLm51
bSksIGRyaXZlci5uYW1lKQogICAgICAgIGRlZmF1bHRBcHAgPSBkcmkuQXBwQ29uZmlnKGRldmlj
ZUNvbmZpZywgIkRlZmF1bHQiKQogICAgICAgIGRldmljZUNvbmZpZy5hcHBzLmFwcGVuZChkZWZh
dWx0QXBwKQogICAgICAgIGZvciBzZWN0IGluIGRyaXZlci5vcHRTZWN0aW9uczoKICAgICAgICAg
ICAgZm9yIG9wdCBpbiBzZWN0Lm9wdGlvbnMudmFsdWVzKCk6CiAgICAgICAgICAgICAgICBkZWZh
dWx0QXBwLm9wdGlvbnNbb3B0Lm5hbWVdID0gZHJpLlZhbHVlVG9TdHIob3B0LmRlZmF1bHQsIG9w
dC50eXBlKQogICAgICAgIGRldmljZUNvbmZpZy5pc05vcm1hbGl6ZWQgPSBUcnVlCiAgICAgICAg
ZGV2aWNlQ29uZmlncy5hcHBlbmQoZGV2aWNlQ29uZmlnKQogICAgZm9yIGNvbmZpZyBpbiBjb25m
aWdMaXN0OgogICAgICAgIGNvbmZpZ0lzVXNlciA9IGlzVXNlckNvbmZpZyhjb25maWcpCiAgICAg
ICAgZm9yIGRldmljZSBpbiBjb25maWcuZGV2aWNlczoKICAgICAgICAgICAgIyBEZXRlcm1pbmUg
YWxsIGluc3RhbGxlZCBkZXZpY2VzIGFmZmVjdGVkIGJ5IHRoaXMgZGV2aWNlLXNlY3Rpb24KICAg
ICAgICAgICAgIyBpbiB0aGUgb3JpZ2luYWwgY29uZmlndXJhdGlvbiBmaWxlCiAgICAgICAgICAg
IGN1ckRldmljZUNvbmZpZ3MgPSBbZGV2aWNlQ29uZmlnIGZvciBkZXZpY2VDb25maWcgaW4gZGV2
aWNlQ29uZmlncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2Uuc2Ny
ZWVuID09IE5vbmUgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNl
LnNjcmVlbiA9PSBkZXZpY2VDb25maWcuc2NyZWVuKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuZCAoZGV2aWNlLmRyaXZlciA9PSBOb25lIG9yCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXZpY2UuZHJpdmVyID09IGRldmljZUNvbmZpZy5kcml2ZXIpXQog
ICAgICAgICAgICBmb3IgY3VyRGV2aWNlIGluIGN1ckRldmljZUNvbmZpZ3M6CiAgICAgICAgICAg
ICAgICBkcml2ZXIgPSBkcHkuZ2V0U2NyZWVuKGludChjdXJEZXZpY2Uuc2NyZWVuKSkuZHJpdmVy
CiAgICAgICAgICAgICAgICBmb3IgYXBwIGluIGRldmljZS5hcHBzOgogICAgICAgICAgICAgICAg
ICAgICMgRGV0ZXJtaW5lIGFsbCBhcHBsaWNhdGlvbnMgb24gdGhpcyBkZXZpY2UgYWZmZWN0ZWQg
YnkKICAgICAgICAgICAgICAgICAgICAjIHRoaXMgYXBwbGljYXRpb24gc2VjdGlvbiBpbiB0aGUg
b3JpZ2luYWwgY29uZmlnIGZpbGUuCiAgICAgICAgICAgICAgICAgICAgIyBJdCBzaG91bGQgYmUg
b25lIGF0IG1vc3QuIENyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgICAg
ICMgY29uZmlndXJhdGlvbiBpZiBuZWVkZWQuCiAgICAgICAgICAgICAgICAgICAgY3VyQXBwcyA9
IFtjdXJBcHAgZm9yIGN1ckFwcCBpbiBjdXJEZXZpY2UuYXBwcwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgYXBwLmV4ZWN1dGFibGUgPT0gY3VyQXBwLmV4ZWN1dGFibGVdCiAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihjdXJBcHBzKSA8PSAxCiAgICAgICAgICAgICAgICAg
ICAgaWYgY3VyQXBwczoKICAgICAgICAgICAgICAgICAgICAgICAgY3VyQXBwID0gY3VyQXBwc1sw
XQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckFw
cCA9IGRyaS5BcHBDb25maWcoY3VyRGV2aWNlLCBhcHAubmFtZSwgYXBwLmV4ZWN1dGFibGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgIGN1ckRldmljZS5hcHBzLmFwcGVuZChjdXJBcHApCiAgICAg
ICAgICAgICAgICAgICAgIyBVcGRhdGUgYWxsIG9wdGlvbiBzZXR0aW5ncy4gTm9uLWV4aXN0aW5n
IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAjIG9yIGludmFsaWQgdmFsdWVzIGFyZSBvbmx5
IGNvbnNpZGVyZWQgaW4KICAgICAgICAgICAgICAgICAgICAjIHJlZHVuZGFudCBkZXZpY2Ugc2Vj
dGlvbnMuCiAgICAgICAgICAgICAgICAgICAgZm9yIG9wdCx2YWx1ZSBpbiBhcHAub3B0aW9ucy5p
dGVtcygpOgogICAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gRmFsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgY29uZmlnSXNVc2VyIGFuZCBcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXZpY2Uuc2NyZWVuICE9IE5vbmUgYW5kIGRldmljZS5kcml2ZXIgIT0gTm9u
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBUcnVlCiAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRJbmZvID0g
ZHJpdmVyLmdldE9wdEluZm8ob3B0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3B0
SW5mbyBhbmQgb3B0SW5mby52YWxpZGF0ZSh2YWx1ZSk6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNWYWxpZCA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNWYWxp
ZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckFwcC5vcHRpb25zW29wdF0gPSB2YWx1
ZQogICAgcmV0dXJuIGRldmljZUNvbmZpZ3MKCmRlZiByZW1vdmVSZWR1bmRhbnREZXZpY2VzIChj
b25maWcsIG5vcm1hbERldmljZUNvbmZpZ3MsIG9ubHlUZXN0ID0gRmFsc2UpOgogICAgIiIiIFJl
bW92ZSBkZXZpY2UgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVkdW5kYW50IC4uLgoKICAgIC4u
LiBhZnRlciBhcHBlbmRpbmcgbm9ybWFsaXplZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuIElmIG9u
bHlUZXN0CiAgICBpcyBUcnVlLCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIG5vdCBtb2RpZmll
ZCBhbmQgdGhpcyBmdW5jdGlvbgogICAgcmV0dXJucyBUcnVlIGlmZiB0aGVyZSBhcmUgcmVkdW5k
YW50IGRldmljZSBzZWN0aW9ucy4gT3RoZXJ3aXNlCiAgICBGYWxzZSBpcyByZXR1cm5lZC4gIiIi
CiAgICBzY3JlZW5zID0gW2RldmljZS5zY3JlZW4gZm9yIGRldmljZSBpbiBub3JtYWxEZXZpY2VD
b25maWdzXQogICAgIyBJdGVyYXRlIG92ZXIgYSBjb3B5IG9mIHRoZSBkZXZpY2UgbGlzdCwgc28g
dGhhdCBkZXZpY2VzIGNhbiBiZQogICAgIyByZW1vdmVkIHNhZmVseS4KICAgIGZvciBkZXZpY2Ug
aW4gY29uZmlnLmRldmljZXNbOl06CiAgICAgICAgaWYgbm90IChoYXNhdHRyKGRldmljZSwgImlz
Tm9ybWFsaXplZCIpIGFuZCBkZXZpY2UuaXNOb3JtYWxpemVkKSBhbmQgXAogICAgICAgICAgICAg
ICBkZXZpY2Uuc2NyZWVuICE9IE5vbmUgYW5kIGRldmljZS5kcml2ZXIgIT0gTm9uZToKICAgICAg
ICAgICAgIyBTZWUgaWYgdGhlcmUgaXMgYSBub3JtYWxpemVkIGRldmljZSBjb25maWd1cmF0aW9u
IGZvcgogICAgICAgICAgICAjIHRoaXMgZGV2aWNlLiBJbiB0aGF0IGNhc2UgdGhpcyBzZWN0aW9u
IGlzIHJlZHVuZGFudC4KICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaSA9IHNjcmVl
bnMuaW5kZXgoZGV2aWNlLnNjcmVlbikKICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAg
ICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpZiBu
b3JtYWxEZXZpY2VDb25maWdzW2ldLmRyaXZlciA9PSBkZXZpY2UuZHJpdmVyOgogICAgICAgICAg
ICAgICAgICAgIGlmIG9ubHlUZXN0OgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQogICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHJlZHVuZGFudCBkZXZpY2Ugc2VjdGlvbgog
ICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kZXZpY2VzLnJlbW92ZShkZXZpY2UpCiAgICAgICAg
ICAgICAgICAgICAgY29uZmlnLmlzTW9kaWZpZWQgPSBUcnVlCiAgICByZXR1cm4gRmFsc2UKCmRl
ZiBpc1JlZHVuZGFudCAoY29uZmlnTGlzdCwgZHB5LCBub3JtYWxEZXZpY2VDb25maWdzID0gTm9u
ZSk6CiAgICAiIiIgQ2hlY2sgaWYgdGhlIHVzZXIgY29uZmlndXJhdGlvbiBpcyByZWR1bmRhbnQu
CgogICAgUmV0dXJucyBUcnVlIGlmZiB0aGVyZSBpcyBhIHVzZXIgY29uZmlndXJhdGlvbiBmaWxl
IHRoYXQgd291bGQKICAgIGNvbnRhaW4gcmVkdW5kYW50IGRldmljZSBjb25maWd1cmF0aW9ucyBh
ZnRlciBhcHBlbmRpbmcKICAgIG5vcm1hbERldmljZUNvbmZpZ3MuICIiIgogICAgdXNlckNvbmZp
ZyA9IGdldFVzZXJDb25maWcoY29uZmlnTGlzdCkKICAgIGlmIG5vdCB1c2VyQ29uZmlnOgogICAg
ICAgIHJldHVybiBGYWxzZQogICAgaWYgbm9ybWFsRGV2aWNlQ29uZmlncyA9PSBOb25lOgogICAg
ICAgIG5vcm1hbERldmljZUNvbmZpZ3MgPSBnZW5Ob3JtYWxEZXZpY2VDb25maWdzIChjb25maWdM
aXN0LCBkcHkpCiAgICByZXR1cm4gcmVtb3ZlUmVkdW5kYW50RGV2aWNlcyAodXNlckNvbmZpZ3Ms
IG5vcm1hbERldmljZUNvbmZpZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b25seVRlc3Q9VHJ1ZSkKCmRlZiBpc05vcm1hbGl6ZWQoY29uZmlnTGlzdCwgZHB5LCBub3JtYWxE
ZXZpY2VDb25maWdzID0gTm9uZSk6CiAgICAiIiIgQ2hlY2sgaWYgdGhlIHVzZXIgY29uZmlndXJh
dGlvbiBmaWxlIGlzIG5vcm1hbGl6ZWQgLi4uCgogICAgLi4uIGluIGEgc2V0IG9mIGNvbmZpZ3Vy
YXRpb24gZmlsZXMsIHRoYXQgaXMgaWYgdGhlIHVzZXIKICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB3
b3VsZCBiZSB0aGUgc2FtZSAoZXhjZXB0IGZvciBuYW1lcykgYWZ0ZXIKICAgIG5vcm1hbGl6YXRp
b24uIElmIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBub3JtYWxpemVkLCBhCiAgICBs
aXN0IG9mIGV4aXN0aW5nIG5vcm1hbGl6ZWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zIGlzIHJldHVy
bmVkLiBJZgogICAgdGhlcmUgaXMgbm8gdXNlciBjb25maWd1cmF0aW9uIGZpbGUsIGFuIGVtcHR5
IGxpc3QgaXMKICAgIHJldHVybmVkLiBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGEgdXNlciBjb25m
aWd1cmF0aW9uIGZpbGUgdGhhdCBpcwogICAgbm90IG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24g
cmV0dXJucyBOb25lLiIiIgogICAgdXNlckNvbmZpZyA9IGdldFVzZXJDb25maWcoY29uZmlnTGlz
dCkKICAgIGlmIG5vdCB1c2VyQ29uZmlnOgogICAgICAgIHJldHVybiBbXQogICAgdXNlckRldnMg
PSB1c2VyQ29uZmlnLmRldmljZXMKICAgICMgRmluZCBhIGNvbnNpc3RlbnQgbGlzdCBvZiBzcGVj
aWZpYyBkZXZpY2UgY29uZmlndXJhdGlvbnMgYXQgdGhlCiAgICAjIGVuZCBvZiB0aGUgdXNlciBj
b25maWd1cmF0aW9uIGZpbGUuCiAgICBpID0gbGVuKHVzZXJEZXZzKSAtIDEKICAgIHdoaWxlIGkg
Pj0gMCBhbmQgdXNlckRldnNbaV0uc2NyZWVuICE9IE5vbmUgYW5kIHVzZXJEZXZzW2ldLmRyaXZl
ciAhPSBOb25lOgogICAgICAgIGkgPSBpIC0gMQogICAgaSA9IGkgKyAxCiAgICBzcGVjaWZpY0Rl
dnMgPSB1c2VyRGV2c1tpOl0KICAgICMgTWFrZSBzdXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBm
b3IgZWFjaCBjb25maWd1cmFibGUgc2NyZWVuLgogICAgIyBJZiB0aGVyZSBhcmUgc2V2ZXJhbCB0
aGUgbGFzdCBvbmUgY291bnRzLgogICAgc2NyZWVucyA9IFtzY3JlZW4gZm9yIHNjcmVlbiBpbiBk
cHkuc2NyZWVucyBpZiBzY3JlZW5dCiAgICBzY3JlZW5EZXZzID0gW05vbmUgZm9yIGkgaW4gcmFu
Z2UobGVuKHNjcmVlbnMpKV0KICAgIGZvciBkZXZpY2UgaW4gc3BlY2lmaWNEZXZzOgogICAgICAg
IHNjcmVlbk51bSA9IGludChkZXZpY2Uuc2NyZWVuKQogICAgICAgIGlmIHNjcmVlbk51bSA+PSBs
ZW4oc2NyZWVuRGV2cyk6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgaWYgc2NyZWVuc1tz
Y3JlZW5OdW1dLmRyaXZlci5uYW1lID09IGRldmljZS5kcml2ZXI6CiAgICAgICAgICAgIHNjcmVl
bkRldnNbc2NyZWVuTnVtXSA9IGRldmljZQogICAgaWYgW05vbmUgZm9yIGRldmljZSBpbiBzY3Jl
ZW5EZXZzIGlmIGRldmljZSA9PSBOb25lXToKICAgICAgICByZXR1cm4gTm9uZSAgIyBUaGVyZSBh
cmUgdW5jb25maWd1cmVkIHNjcmVlbnMKICAgIGlmIG5vcm1hbERldmljZUNvbmZpZ3MgPT0gTm9u
ZToKICAgICAgICBub3JtYWxEZXZpY2VDb25maWdzID0gZ2VuTm9ybWFsRGV2aWNlQ29uZmlncyAo
Y29uZmlnTGlzdCwgZHB5KQogICAgIyBDb21wYXJlIGV4aXN0aW5nIG5vcm1hbGl6ZWQgZGV2aWNl
IGNvbmZpZ3Mgd2l0aCBnZW5lcmF0ZWQKICAgICMgb25lcy4gSWYgdGhleSBhcmUgZXF1aXZhbGVu
dCwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcwogICAgIyBub3JtYWxpemVkLgogICAgZm9yIGRl
dmljZSxub3JtYWxEZXYgaW4gemlwIChzY3JlZW5EZXZzLG5vcm1hbERldmljZUNvbmZpZ3MpOgog
ICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgZmlyc3QgZXhlY3V0YWJsZSBpcyBOb25lIGFuZCB0aGF0
IGVhY2gKICAgICAgICAjIGV4ZWN1dGFibGUgaXMgY29uZmlndXJlZCBleGFjdGx5IG9uY2UuCiAg
ICAgICAgZXhlY3V0YWJsZXMgPSBbYXBwLmV4ZWN1dGFibGUgZm9yIGFwcCBpbiBkZXZpY2UuYXBw
c10KICAgICAgICBpZiBub3QgZXhlY3V0YWJsZXMgb3IgZXhlY3V0YWJsZXNbMF0gIT0gTm9uZToK
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICBkZWwgZXhlY3V0YWJsZXNbMF0KICAgICAg
ICBpZiBbTm9uZSBmb3IgZXhlIGluIGV4ZWN1dGFibGVzIGlmIGV4ZSA9PSBOb25lXToKICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKICAgICAgICBleGVjdXRhYmxlcy5zb3J0KCkKICAgICAgICBub3Jt
YWxFeGVzID0gW2FwcC5leGVjdXRhYmxlIGZvciBhcHAgaW4gbm9ybWFsRGV2LmFwcHNdCiAgICAg
ICAgZGVsIG5vcm1hbEV4ZXNbMF0KICAgICAgICBub3JtYWxFeGVzLnNvcnQoKQogICAgICAgIGlm
IG5vcm1hbEV4ZXMgIT0gZXhlY3V0YWJsZXM6CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAg
ICAgIyBOb3cgY2hlY2sgdGhhdCBlYWNoIGFwcGxpY2F0aW9uIGNvbnRhaW5zIHRoZSBzYW1lIG9w
dGlvbiBzZXR0aW5ncwogICAgICAgICMgYXMgdGhlIGdlbmVyYXRlZCBub3JtYWxpemVkIGNvbmZp
Z3VyYXRpb24KICAgICAgICBmb3Igbm9ybWFsQXBwIGluIG5vcm1hbERldi5hcHBzOgogICAgICAg
ICAgICBhcHAgPSBbZEFwcCBmb3IgZEFwcCBpbiBkZXZpY2UuYXBwcwogICAgICAgICAgICAgICAg
ICAgaWYgZEFwcC5leGVjdXRhYmxlID09IG5vcm1hbEFwcC5leGVjdXRhYmxlXVswXQogICAgICAg
ICAgICBpZiBhcHAub3B0aW9ucyAhPSBub3JtYWxBcHAub3B0aW9uczoKICAgICAgICAgICAgICAg
IHJldHVybiBOb25lCiAgICAjIFRoZSBjb25maWd1cmF0aW9uIGlzIG5vcm1hbGl6ZWQuIFJldHVy
biB0aGUgbGlzdCBvZiBub3JtYWxpemVkIGRldmljZQogICAgIyBjb25maWd1cmF0aW9ucyBmcm9t
IHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAgICByZXR1cm4gc2NyZWVuRGV2cwoKZGVm
IG5vcm1hbGl6ZUNvbmZpZyhjb25maWdMaXN0LCBkcHkpOgogICAgIiIiIE5vcm1hbGl6ZSB0aGUg
dXNlciBjb25maWd1cmF0aW9uIGZpbGUgKGlmIGl0IGV4aXN0cykgLi4uCgogICAgLi4uIGJ5IGFw
cGVuZGluZyBub3JtYWxpemVkIGRldmljZSBjb25maWd1cmF0aW9ucyBmb3IgZWFjaAogICAgaW5z
dGFsbGVkIGRldmljZSBhbmQgcmVtb3ZpbmcgcmVkdW5kYW50IGRldmljZSBjb25maWd1cmF0aW9u
cy4gSWYKICAgIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhbHJlYWR5IG5vcm1hbGl6
ZWQsIG9ubHkgZXhpc3RpbmcKICAgIG5vcm1hbGl6ZWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zIGFy
ZSBtYXJrZWQgYXMgc3VjaCBhbmQgcmVkdW5kYW50CiAgICBkZXZpY2UgY29uZmlndXJhdGlvbnMg
YXJlIHJlbW92ZWQuICIiIgogICAgbmV3RGV2aWNlQ29uZmlncyA9IGdlbk5vcm1hbERldmljZUNv
bmZpZ3MgKGNvbmZpZ0xpc3QsIGRweSkKICAgIGV4aXN0aW5nRGV2aWNlQ29uZmlncyA9IGlzTm9y
bWFsaXplZCAoY29uZmlnTGlzdCwgZHB5LCBuZXdEZXZpY2VDb25maWdzKQogICAgaWYgbm90IGV4
aXN0aW5nRGV2aWNlQ29uZmlncyBhbmQgbm90IG5ld0RldmljZUNvbmZpZ3M6CiAgICAgICAgcmV0
dXJuIFtdCiAgICB1c2VyQ29uZmlnID0gZ2V0VXNlckNvbmZpZyhjb25maWdMaXN0KQogICAgaWYg
ZXhpc3RpbmdEZXZpY2VDb25maWdzOgogICAgICAgICMgaXMgYWxyZWFkeSBub3JtYWxpemVkLCBt
YXJrIGV4aXN0aW5nIG5vcm1hbGl6ZWQgZGV2aWNlCiAgICAgICAgIyBjb25maWd1cmF0aW9ucyBh
cyBzdWNoLgogICAgICAgIGZvciBkZXZpY2VDb25maWcgaW4gZXhpc3RpbmdEZXZpY2VDb25maWdz
OgogICAgICAgICAgICBkZXZpY2VDb25maWcuaXNOb3JtYWxpemVkID0gVHJ1ZQogICAgICAgIGRl
dmljZUNvbmZpZ3MgPSBleGlzdGluZ0RldmljZUNvbmZpZ3MKICAgIGVsaWYgbmV3RGV2aWNlQ29u
ZmlnczoKICAgICAgICB1c2VyQ29uZmlnLmRldmljZXMuZXh0ZW5kKG5ld0RldmljZUNvbmZpZ3Mp
CiAgICAgICAgdXNlckNvbmZpZy5pc01vZGlmaWVkID0gVHJ1ZQogICAgICAgIGRldmljZUNvbmZp
Z3MgPSBuZXdEZXZpY2VDb25maWdzCiAgICAjIFJlbW92ZSByZWR1bmRhbnQgZGV2aWNlIGNvbmZp
Z3VyYXRpb25zIGZyb20gdGhlIHVzZXIKICAgICMgY29uZmlndXJhdGlvbiBmaWxlCiAgICByZW1v
dmVSZWR1bmRhbnREZXZpY2VzICh1c2VyQ29uZmlnLCBkZXZpY2VDb25maWdzKQogICAgcmV0dXJu
IGRldmljZUNvbmZpZ3MKCmRlZiBsaW5lV3JhcCAoc3RyaW5nLCBjaGFycz0zMCk6CiAgICBoZWFk
ID0gIiIKICAgIHRhaWwgPSBzdHJpbmcKICAgIHdoaWxlIGxlbih0YWlsKToKICAgICAgICBpZiBs
ZW4odGFpbCkgPD0gY2hhcnM6CiAgICAgICAgICAgIHJldHVybiBoZWFkICsgdGFpbAogICAgICAg
IGVsc2U6CiAgICAgICAgICAgIGkgPSBjaGFycwogICAgICAgICAgICB3aGlsZSBpID49IGNoYXJz
LzM6CiAgICAgICAgICAgICAgICBpZiB0YWlsW2ldID09ICcgJzoKICAgICAgICAgICAgICAgICAg
ICBqID0gaSArIDEKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgZWxp
ZiB0YWlsW2ldID09ICctJzoKICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKICAgICAgICAg
ICAgICAgICAgICBqID0gaQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAg
ICBpID0gaSAtIDEKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGkgPSBqID0gY2hh
cnMKICAgICAgICAgICAgaGVhZCwgdGFpbCA9IGhlYWQgKyB0YWlsWzppXSArICdcbicsIHRhaWxb
ajpdCiAgICByZXR1cm4gaGVhZAoKY2xhc3MgQXBwRGlhbG9nIChndGsuRGlhbG9nKToKICAgIGRl
ZiBfX2luaXRfXyAoc2VsZiwgdGl0bGUsIHBhcmVudCwgYXBwPU5vbmUpOgogICAgICAgIGd0ay5E
aWFsb2cuX19pbml0X18oc2VsZiwgdGl0bGUsIHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGd0ay5ESUFMT0dfTU9EQUx8Z3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJndGstb2siLCBndGsuUkVTUE9OU0VfT0ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImd0ay1jYW5jZWwiLCBndGsuUkVTUE9OU0VfQ0FO
Q0VMKSkKICAgICAgICBzZWxmLnNldF9yZXNpemFibGUoRmFsc2UpCiAgICAgICAgdGFibGUgPSBn
dGsuVGFibGUoMywgMikKICAgICAgICBuYW1lTGFiZWwgPSBndGsuTGFiZWwoXygiQXBwbGljYXRp
b24gTmFtZSIpKQogICAgICAgIG5hbWVMYWJlbC5zaG93KCkKICAgICAgICB0YWJsZS5hdHRhY2go
bmFtZUxhYmVsLCAwLCAxLCAwLCAxLCAwLCBndGsuRVhQQU5ELCAxMCwgNSkKICAgICAgICBzZWxm
Lm5hbWVFbnRyeSA9IGd0ay5FbnRyeSgpCiAgICAgICAgaWYgYXBwOgogICAgICAgICAgICBzZWxm
Lm5hbWVFbnRyeS5zZXRfdGV4dChhcHAubmFtZSkKICAgICAgICBzZWxmLm5hbWVFbnRyeS5jb25u
ZWN0KCJhY3RpdmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgd2lk
Z2V0OiBzZWxmLnJlc3BvbnNlKGd0ay5SRVNQT05TRV9PSykpCiAgICAgICAgc2VsZi5uYW1lRW50
cnkuc2hvdygpCiAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYubmFtZUVudHJ5LCAxLCAyLCAwLCAx
LAogICAgICAgICAgICAgICAgICAgICBndGsuRVhQQU5EfGd0ay5GSUxMLCBndGsuRVhQQU5ELCAx
MCwgNSkKCiAgICAgICAgZXhlY0xhYmVsID0gZ3RrLkxhYmVsKF8oIkV4ZWN1dGFibGUgTmFtZSIp
KQogICAgICAgIGV4ZWNMYWJlbC5zaG93KCkKICAgICAgICB0YWJsZS5hdHRhY2goZXhlY0xhYmVs
LCAwLCAxLCAxLCAyLCAwLCBndGsuRVhQQU5ELCAxMCwgNSkKICAgICAgICBzZWxmLmV4ZWNFbnRy
eSA9IGd0ay5FbnRyeSgpCiAgICAgICAgaWYgYXBwOgogICAgICAgICAgICBzZWxmLmV4ZWNFbnRy
eS5zZXRfdGV4dChhcHAuZXhlY3V0YWJsZSkKICAgICAgICBzZWxmLmV4ZWNFbnRyeS5jb25uZWN0
KCJhY3RpdmF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgd2lkZ2V0
OiBzZWxmLnJlc3BvbnNlKGd0ay5SRVNQT05TRV9PSykpCiAgICAgICAgc2VsZi5leGVjRW50cnku
c2hvdygpCiAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYuZXhlY0VudHJ5LCAxLCAyLCAxLCAyLAog
ICAgICAgICAgICAgICAgICAgICBndGsuRVhQQU5EfGd0ay5GSUxMLCBndGsuRVhQQU5ELCAxMCwg
NSkKICAgICAgICBoQm94ID0gZ3RrLkhCb3goc3BhY2luZz0xMCkKICAgICAgICBpbmZvSW1hZ2VW
Qm94ID0gZ3RrLlZCb3goKQogICAgICAgIGluZm9JbWFnZSA9IGNvbW1vbnVpLlN0b2NrSW1hZ2Uo
Z3RrLlNUT0NLX0RJQUxPR19JTkZPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3RrLklDT05fU0laRV9ESUFMT0cpCiAgICAgICAgaW5mb0ltYWdlLnNob3coKQogICAg
ICAgIGluZm9JbWFnZVZCb3gucGFja19zdGFydChpbmZvSW1hZ2UsIEZhbHNlLCBGYWxzZSwgMCkK
ICAgICAgICBpbmZvSW1hZ2VWQm94LnNob3coKQogICAgICAgIGhCb3gucGFja19zdGFydChpbmZv
SW1hZ2VWQm94LCBGYWxzZSwgRmFsc2UsIDApCiAgICAgICAgaW5mb0xhYmVsID0gZ3RrLkxhYmVs
KF8oCiAgICAgICAgICAgICJUaGUgZXhlY3V0YWJsZSBuYW1lIGlzIGltcG9ydGFudCBmb3IgaWRl
bnRpZnlpbmcgdGhlICIKICAgICAgICAgICAgImFwcGxpY2F0aW9uLiBJZiB5b3UgZ2V0IGl0IHdy
b25nLCB5b3VyIHNldHRpbmdzIHdpbGwgbm90ICIKICAgICAgICAgICAgImFwcGx5LiBCZXdhcmUg
dGhhdCBzb21lIGFwcGxpY2F0aW9ucyBhcmUgc3RhcnRlZCBieSBhICIKICAgICAgICAgICAgInNo
ZWxsIHNjcmlwdCwgdGhhdCBoYXMgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSByZWFsICIKICAg
ICAgICAgICAgImV4ZWN1dGFibGUuIikpCiAgICAgICAgIyBUT0RPOiBBZGQgYSBzbWFsbCBkYXRh
YmFzZSBvZiBrbm93biBhcHBsaWNhdGlvbnMgd2l0aCB0aGVpcgogICAgICAgICMgZXhlY3V0YWJs
ZSBuYW1lcyB0aGF0IGNhbiBiZSBwaWNrZWQgZnJvbSBhIG1lbnUuCiAgICAgICAgaW5mb0xhYmVs
LnNldF9saW5lX3dyYXAgKFRydWUpCiAgICAgICAgaW5mb0xhYmVsLnNob3coKQogICAgICAgIGhC
b3gucGFja19zdGFydChpbmZvTGFiZWwsIEZhbHNlLCBGYWxzZSwgMCkKICAgICAgICBoQm94LnNo
b3coKQogICAgICAgIHRhYmxlLmF0dGFjaCAoaEJveCwgMCwgMiwgMiwgMywKICAgICAgICAgICAg
ICAgICAgICAgIGd0ay5FWFBBTkR8Z3RrLkZJTEwsIGd0ay5FWFBBTkQsIDEwLCA1KQogICAgICAg
IHRhYmxlLnNob3coKQogICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHRhYmxlLCBUcnVlLCBU
cnVlLCA1KQogICAgICAgIHNlbGYuc2hvdygpCiAgICAgICAgc2VsZi5uYW1lRW50cnkuZ3JhYl9m
b2N1cygpCgogICAgZGVmIGdldE5hbWUgKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLm5hbWVF
bnRyeS5nZXRfdGV4dCgpCgogICAgZGVmIGdldEV4ZWN1dGFibGUgKHNlbGYpOgogICAgICAgIHJl
dHVybiBzZWxmLmV4ZWNFbnRyeS5nZXRfdGV4dCgpCgpjbGFzcyBBcHBQYWdlIChndGsuU2Nyb2xs
ZWRXaW5kb3cpOgogICAgZGVmIF9faW5pdF9fIChzZWxmLCBkcml2ZXIsIGFwcCk6CiAgICAgICAg
IiIiIENvbnN0cnVjdG9yLiAiIiIKICAgICAgICBndGsuU2Nyb2xsZWRXaW5kb3cuX19pbml0X18g
KHNlbGYpCiAgICAgICAgc2VsZi5zZXRfcG9saWN5IChndGsuUE9MSUNZX05FVkVSLCBndGsuUE9M
SUNZX0FVVE9NQVRJQykKICAgICAgICBzZWxmLmRyaXZlciA9IGRyaXZlcgogICAgICAgIHNlbGYu
YXBwID0gYXBwCiAgICAgICAgc2VsZi50YWJsZSA9IE5vbmUKICAgICAgICBzZWxmLnJlZnJlc2hP
cHRpb25zKCkKCiAgICBkZWYgcmVmcmVzaE9wdGlvbnMgKHNlbGYpOgogICAgICAgIGlmIHNlbGYu
dGFibGU6CiAgICAgICAgICAgIHNlbGYucmVtb3ZlKHNlbGYuZ2V0X2NoaWxkKCkpCiAgICAgICAg
c2VsZi5vcHRMaW5lcyA9IFtdCiAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZShsZW4oc2Vs
Zi5hcHAub3B0aW9ucykrMSwgMykKICAgICAgICBzZWxmLmFkZF93aXRoX3ZpZXdwb3J0KHNlbGYu
dGFibGUpCiAgICAgICAgc2VsZi5vcHRpb25UcmVlID0gZ3RrLlRyZWVTdG9yZShnb2JqZWN0LlRZ
UEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfSU5ULCBnb2JqZWN0LlRZUEVfSU5UKQogICAgICAgIGkg
PSAwCiAgICAgICAgc2VjdEkgPSAwCiAgICAgICAgZm9yIHNlY3QgaW4gc2VsZi5kcml2ZXIub3B0
U2VjdGlvbnM6CiAgICAgICAgICAgIHNlY3RJdGVyID0gc2VsZi5vcHRpb25UcmVlLmFwcGVuZChO
b25lLCBbCiAgICAgICAgICAgICAgICBsaW5lV3JhcChzZWN0LmdldERlc2MoW2xhbmddKSksIHNl
Y3RJLCAtMV0pCiAgICAgICAgICAgIHNlY3RIYXNPcHRzID0gRmFsc2UKICAgICAgICAgICAgb3B0
SSA9IDAKICAgICAgICAgICAgZm9yIG9wdCBpbiBzZWN0Lm9wdExpc3Q6CiAgICAgICAgICAgICAg
ICBpZiBzZWxmLmFwcC5vcHRpb25zLmhhc19rZXkob3B0Lm5hbWUpOgogICAgICAgICAgICAgICAg
ICAgIHNlbGYub3B0TGluZXMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBjb21tb251
aS5PcHRpb25MaW5lKHNlbGYsIGksIG9wdCwgVHJ1ZSwgVHJ1ZSkpCiAgICAgICAgICAgICAgICAg
ICAgaSA9IGkgKyAxCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHNl
bGYub3B0aW9uVHJlZS5hcHBlbmQoc2VjdEl0ZXIsIFsKICAgICAgICAgICAgICAgICAgICAgICAg
bGluZVdyYXAob3B0LmdldERlc2MoW2xhbmddKS50ZXh0KSwgc2VjdEksIG9wdEldKQogICAgICAg
ICAgICAgICAgICAgIHNlY3RIYXNPcHRzID0gVHJ1ZQogICAgICAgICAgICAgICAgb3B0SSA9IG9w
dEkgKyAxCiAgICAgICAgICAgIGlmIG5vdCBzZWN0SGFzT3B0czoKICAgICAgICAgICAgICAgIHNl
bGYub3B0aW9uVHJlZS5yZW1vdmUoc2VjdEl0ZXIpCiAgICAgICAgICAgIHNlY3RJID0gc2VjdEkg
KyAxCiAgICAgICAgaWYgbGVuKHNlbGYub3B0aW9uVHJlZSkgPiAwOgogICAgICAgICAgICBhZGRM
YWJlbCA9IGNvbW1vbnVpLldyYXBwaW5nRHVtbXlDaGVja0J1dHRvbihfKCJBZGQgc2V0dGluZyIp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aD0yMDApCiAgICAgICAgICAgIGFkZExhYmVsLnNob3coKQogICAgICAgICAgICBzZWxm
LnRhYmxlLmF0dGFjaChhZGRMYWJlbCwgMCwgMSwgaSwgaSsxLCBndGsuRVhQQU5EfGd0ay5GSUxM
LCAwLCA1LCA1KQogICAgICAgICAgICBhZGRDb21ibyA9IGd0ay5Db21ib0JveChzZWxmLm9wdGlv
blRyZWUpCiAgICAgICAgICAgIGFkZENvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLmFkZE9w
dGlvbikKICAgICAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKICAgICAgICAg
ICAgYWRkQ29tYm8ucGFja19zdGFydChjZWxsLCBUcnVlKQogICAgICAgICAgICBhZGRDb21iby5h
ZGRfYXR0cmlidXRlKGNlbGwsICd0ZXh0JywgMCkKICAgICAgICAgICAgYWRkQ29tYm8uc2hvdygp
CiAgICAgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKGFkZENvbWJvLCAxLCAyLCBpLCBpKzEsIGd0
ay5GSUxMLCAwLCA1LCA1KQogICAgICAgIHNlbGYudGFibGUuc2hvdygpCgogICAgZGVmIG9wdGlv
bk1vZGlmaWVkIChzZWxmLCBvcHRMaW5lKToKICAgICAgICBzZWxmLmFwcC5tb2RpZmllZChzZWxm
LmFwcCkKCiAgICBkZWYgcmVtb3ZlT3B0aW9uIChzZWxmLCBvcHRMaW5lLCBvcHQpOgogICAgICAg
IGRlbCBzZWxmLmFwcC5vcHRpb25zW29wdC5uYW1lXQogICAgICAgIHNlbGYucmVmcmVzaE9wdGlv
bnMoKQogICAgICAgIHNlbGYuYXBwLm1vZGlmaWVkKHNlbGYuYXBwKQoKICAgIGRlZiBhZGRPcHRp
b24gKHNlbGYsIGNvbWJvKToKICAgICAgICBhY3RpdmVJdGVyID0gY29tYm8uZ2V0X2FjdGl2ZV9p
dGVyKCkKICAgICAgICBpZiBub3QgYWN0aXZlSXRlcjoKICAgICAgICAgICAgIyBHb3QgdHJpZ2dl
cmVkIGJ5IHRoZSBzZXRfYWN0aXZlKC0xKSBiZWxvdy4KICAgICAgICAgICAgcmV0dXJuCiAgICAg
ICAgc2VjdEkgPSBzZWxmLm9wdGlvblRyZWUuZ2V0X3ZhbHVlKGFjdGl2ZUl0ZXIsIDEpCiAgICAg
ICAgb3B0SSAgPSBzZWxmLm9wdGlvblRyZWUuZ2V0X3ZhbHVlKGFjdGl2ZUl0ZXIsIDIpCiAgICAg
ICAgaWYgb3B0SSA8IDA6CiAgICAgICAgICAgIGNvbWJvLnNldF9hY3RpdmUoLTEpCiAgICAgICAg
ICAgIHJldHVybgogICAgICAgIG9wdCA9IHNlbGYuZHJpdmVyLm9wdFNlY3Rpb25zW3NlY3RJXS5v
cHRMaXN0W29wdEldCiAgICAgICAgc2VsZi5hcHAub3B0aW9uc1tvcHQubmFtZV0gPSBkcmkuVmFs
dWVUb1N0cihvcHQuZGVmYXVsdCwgb3B0LnR5cGUpCiAgICAgICAgc2VsZi5yZWZyZXNoT3B0aW9u
cygpCiAgICAgICAgc2VsZi5hcHAubW9kaWZpZWQoc2VsZi5hcHApCiAgICAKICAgIGRlZiBkb1Zh
bGlkYXRlIChzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIGNvbW1pdCAoc2VsZik6CiAgICAg
ICAgZm9yIG9wdExpbmUgaW4gc2VsZi5vcHRMaW5lczoKICAgICAgICAgICAgbmFtZSA9IG9wdExp
bmUub3B0Lm5hbWUKICAgICAgICAgICAgdmFsdWUgPSBvcHRMaW5lLmdldFZhbHVlKCkKICAgICAg
ICAgICAgaWYgdmFsdWUgPT0gTm9uZSBhbmQgc2VsZi5hcHAub3B0aW9ucy5oYXNfa2V5KG5hbWUp
OgogICAgICAgICAgICAgICAgZGVsIHNlbGYuYXBwLm9wdGlvbnNbbmFtZV0KICAgICAgICAgICAg
ZWxpZiB2YWx1ZSAhPSBOb25lOgogICAgICAgICAgICAgICAgc2VsZi5hcHAub3B0aW9uc1tuYW1l
XSA9IHZhbHVlCgpjbGFzcyBNYWluV2luZG93IChndGsuV2luZG93KToKICAgIGRlZiBfX2luaXRf
XyAoc2VsZiwgY29uZmlnTGlzdCk6CiAgICAgICAgZ3RrLldpbmRvdy5fX2luaXRfXyhzZWxmKQog
ICAgICAgIHNlbGYuc2V0X3RpdGxlKF8oIkRpcmVjdCBSZW5kZXJpbmcgUHJlZmVyZW5jZXMiKSkK
ICAgICAgICBzZWxmLnNldF90eXBlX2hpbnQoZ3RrLmdkay5XSU5ET1dfVFlQRV9ISU5UX0RJQUxP
RykKICAgICAgICBzZWxmLnNldF9ib3JkZXJfd2lkdGgoMTApCiAgICAgICAgc2VsZi5jb25uZWN0
KCJkZXN0cm95IiwgbGFtYmRhIGR1bW15OiBndGsubWFpbl9xdWl0KCkpCiAgICAgICAgc2VsZi5j
b25uZWN0KCJkZWxldGVfZXZlbnQiLCBzZWxmLmV4aXRIYW5kbGVyKQogICAgICAgIHNlbGYuY29u
ZmlnTGlzdCA9IGNvbmZpZ0xpc3QgIyBSZW1lbWJlciBmb3Igc3dpdGNoaW5nIHRvIGV4cGVydCBt
b2RlCiAgICAgICAgc2VsZi51c2VyQ29uZmlnID0gZ2V0VXNlckNvbmZpZyhjb25maWdMaXN0KQog
ICAgICAgIHNlbGYuc2NyZWVucyA9IFtzY3JlZW4gZm9yIHNjcmVlbiBpbiBjb21tb251aS5kcHku
c2NyZWVucyBpZiBzY3JlZW5dCiAgICAgICAgc2VsZi52Ym94ID0gZ3RrLlZCb3goc3BhY2luZz0x
MCkKICAgICAgICBpZiBsZW4oc2VsZi5zY3JlZW5zKSA+IDE6CiAgICAgICAgICAgIHNlbGYuZGV2
aWNlQ29tYm8gPSBndGsuY29tYm9fYm94X25ld190ZXh0KCkKICAgICAgICAgICAgZm9yIHNjcmVl
biBpbiBzZWxmLnNjcmVlbnM6CiAgICAgICAgICAgICAgICBpZiBzY3JlZW4uZ2x4SW5mbzoKICAg
ICAgICAgICAgICAgICAgICBzZWxmLmRldmljZUNvbWJvLmFwcGVuZF90ZXh0KF8oIlNjcmVlbiIp
ICsgIiAlZDogJXMgKCVzKSIgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbi5udW0s
IHNjcmVlbi5nbHhJbmZvLnJlbmRlcmVyLCBzY3JlZW4uZ2x4SW5mby52ZW5kb3IpKQogICAgICAg
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZUNvbWJvLmFwcGVu
ZF90ZXh0KF8oIlNjcmVlbiIpICsgIiAlZDogJXMiICUgKAogICAgICAgICAgICAgICAgICAgICAg
ICBzY3JlZW4ubnVtLCBzY3JlZW4uZHJpdmVyLm5hbWUuY2FwaXRhbGl6ZSgpKSkKICAgICAgICAg
ICAgc2VsZi5kZXZpY2VDb21iby5zZXRfYWN0aXZlKDApCiAgICAgICAgICAgIHNlbGYuZGV2aWNl
Q29tYm8uY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuY2hhbmdlRGV2aWNlKQogICAgICAgICAgICBz
ZWxmLmRldmljZUNvbWJvLnNob3coKQogICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChz
ZWxmLmRldmljZUNvbWJvLCBGYWxzZSwgRmFsc2UsIDApCiAgICAgICAgZWxzZToKICAgICAgICAg
ICAgc2NyZWVuID0gc2VsZi5zY3JlZW5zWzBdCiAgICAgICAgICAgIGlmIHNjcmVlbi5nbHhJbmZv
OgogICAgICAgICAgICAgICAgdGV4dCA9IHUiJXMgKCVzKSIgJSAoCiAgICAgICAgICAgICAgICAg
ICAgdW5pY29kZShzY3JlZW4uZ2x4SW5mby5yZW5kZXJlciwgInV0Zi04IiwgInJlcGxhY2UiKSwK
ICAgICAgICAgICAgICAgICAgICB1bmljb2RlKHNjcmVlbi5nbHhJbmZvLnZlbmRvciwgInV0Zi04
IiwgInJlcGxhY2UiKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHRleHQgPSBf
KHUiU2NyZWVuIikgKyB1IiAlZDogJXMiICUgKHNjcmVlbi5udW0sCiAgICAgICAgICAgICAgICAg
ICAgdW5pY29kZShzY3JlZW4uZHJpdmVyLm5hbWUsICJ1dGYtOCIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICJyZXBsYWNlIikuY2FwaXRhbGl6ZSgpKQogICAgICAgICAgICBkZXZpY2VIQm94ID0g
Z3RrLkhCb3goKQogICAgICAgICAgICBkZXZpY2VMYWJlbCA9IGd0ay5MYWJlbCgpCiAgICAgICAg
ICAgIGRldmljZUxhYmVsLnNldF9qdXN0aWZ5KGd0ay5KVVNUSUZZX0xFRlQpCiAgICAgICAgICAg
IGRldmljZUxhYmVsLnNldF9tYXJrdXAoIjxiPiIgKyBjb21tb251aS5lc2NhcGVNYXJrdXAodGV4
dCkgKyAiPC9iPiIpCiAgICAgICAgICAgIGRldmljZUxhYmVsLnNob3coKQogICAgICAgICAgICBk
ZXZpY2VIQm94LnBhY2tfc3RhcnQoZGV2aWNlTGFiZWwsIEZhbHNlLCBGYWxzZSwgMCkKICAgICAg
ICAgICAgZGV2aWNlSEJveC5zaG93KCkKICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQo
ZGV2aWNlSEJveCwgRmFsc2UsIEZhbHNlLCAwKQogICAgICAgIGJ1dHRvbkJveCA9IGd0ay5IQnV0
dG9uQm94KCkKICAgICAgICBidXR0b25Cb3guc2V0X2xheW91dChndGsuQlVUVE9OQk9YX0VORCkK
ICAgICAgICBleHBlcnRCdXR0b24gPSBndGsuQnV0dG9uKCkKICAgICAgICBleHBlcnRIQm94ID0g
Z3RrLkhCb3goKQogICAgICAgIGV4cGVydEltYWdlID0gY29tbW9udWkuU3RvY2tJbWFnZSgiZ3Rr
LWp1bXAtdG8iLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKICAgICAgICBleHBlcnRJbWFnZS5zaG93
KCkKICAgICAgICBleHBlcnRIQm94LnBhY2tfc3RhcnQoZXhwZXJ0SW1hZ2UpCiAgICAgICAgZXhw
ZXJ0TGFiZWwgPSBndGsuTGFiZWwoXygiRXhwZXJ0IE1vZGUiKSkKICAgICAgICBleHBlcnRMYWJl
bC5zaG93KCkKICAgICAgICBleHBlcnRIQm94LnBhY2tfc3RhcnQoZXhwZXJ0TGFiZWwpCiAgICAg
ICAgZXhwZXJ0SEJveC5zaG93KCkKICAgICAgICBleHBlcnRCdXR0b24uYWRkKGV4cGVydEhCb3gp
CiAgICAgICAgZXhwZXJ0QnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmV4cGVydEhhbmRs
ZXIpCiAgICAgICAgZXhwZXJ0QnV0dG9uLnNob3coKQogICAgICAgIGJ1dHRvbkJveC5hZGQoZXhw
ZXJ0QnV0dG9uKQogICAgICAgIGNsb3NlQnV0dG9uID0gZ3RrLkJ1dHRvbihzdG9jaz0iZ3RrLWNs
b3NlIikKICAgICAgICBjbG9zZUJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgbGFtYmRhIGR1bW15
OiBndGsubWFpbl9xdWl0KCkpCiAgICAgICAgY2xvc2VCdXR0b24uc2hvdygpCiAgICAgICAgYnV0
dG9uQm94LmFkZChjbG9zZUJ1dHRvbikKICAgICAgICBhYm91dEJ1dHRvbiA9IGd0ay5CdXR0b24o
c3RvY2s9Imd0ay1hYm91dCIpCiAgICAgICAgYWJvdXRCdXR0b24uY29ubmVjdCgiY2xpY2tlZCIs
IHNlbGYuYWJvdXRIYW5kbGVyKQogICAgICAgIGFib3V0QnV0dG9uLnNob3coKQogICAgICAgIGJ1
dHRvbkJveC5hZGQoYWJvdXRCdXR0b24pCiAgICAgICAgYnV0dG9uQm94LnNldF9jaGlsZF9zZWNv
bmRhcnkoYWJvdXRCdXR0b24sIFRydWUpCiAgICAgICAgYnV0dG9uQm94LnNob3coKQogICAgICAg
IHNlbGYudmJveC5wYWNrX2VuZChidXR0b25Cb3gsIEZhbHNlLCBGYWxzZSwgMCkKICAgICAgICBz
ZWxmLmV4cGFuZGVyID0gZ3RrLkV4cGFuZGVyKAogICAgICAgICAgICAiPGI+IiArIGNvbW1vbnVp
LmVzY2FwZU1hcmt1cChfKCJBcHBsaWNhdGlvbiBzZXR0aW5ncyIpKSArICI8L2I+IikKICAgICAg
ICBzZWxmLmV4cGFuZGVyLnNldF91c2VfbWFya3VwKFRydWUpCiAgICAgICAgc2VsZi5leHBhbmRl
ci5jb25uZWN0KCJhY3RpdmF0ZSIsIHNlbGYuZXhwYW5kZXJDaGFuZ2VkKQogICAgICAgIHNlbGYu
ZXhwYW5kZXIuc2hvdygpCiAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKHNlbGYuZXhwYW5kZXIs
IEZhbHNlLCBUcnVlLCAwKQogICAgICAgIHNlbGYuZXhwYW5kZXJWQm94ID0gZ3RrLlZCb3goc3Bh
Y2luZz0xMCkKICAgICAgICBzZWxmLmFwcEJ1dHRvbkJveCA9IGd0ay5IQm94KCkKICAgICAgICBz
ZWxmLmFwcFJlbW92ZUJ1dHRvbiA9IGd0ay5CdXR0b24oc3RvY2s9Imd0ay1yZW1vdmUiKQogICAg
ICAgIHNlbGYuYXBwUmVtb3ZlQnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnJlbW92ZUFw
cCkKICAgICAgICBzZWxmLmFwcFJlbW92ZUJ1dHRvbi5zaG93KCkKICAgICAgICBzZWxmLmFwcEJ1
dHRvbkJveC5wYWNrX2VuZChzZWxmLmFwcFJlbW92ZUJ1dHRvbiwgRmFsc2UsIEZhbHNlLCAwKQog
ICAgICAgIGFkZEJ1dHRvbiA9IGd0ay5CdXR0b24oc3RvY2s9Imd0ay1hZGQiKQogICAgICAgIGFk
ZEJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5hZGRBcHApCiAgICAgICAgYWRkQnV0dG9u
LnNob3coKQogICAgICAgIHNlbGYuYXBwQnV0dG9uQm94LnBhY2tfZW5kKGFkZEJ1dHRvbiwgRmFs
c2UsIEZhbHNlLCAwKQogICAgICAgIHNlbGYuYXBwUHJvcEJ1dHRvbiA9IGd0ay5CdXR0b24oc3Rv
Y2s9Imd0ay1wcm9wZXJ0aWVzIikKICAgICAgICBzZWxmLmFwcFByb3BCdXR0b24uY29ubmVjdCgi
Y2xpY2tlZCIsIHNlbGYuYXBwUHJvcGVydGllcykKICAgICAgICBzZWxmLmFwcFByb3BCdXR0b24u
c2hvdygpCiAgICAgICAgc2VsZi5hcHBCdXR0b25Cb3gucGFja19lbmQoc2VsZi5hcHBQcm9wQnV0
dG9uLCBGYWxzZSwgRmFsc2UsIDApCiAgICAgICAgc2VsZi5hcHBCdXR0b25Cb3guc2hvdygpCiAg
ICAgICAgc2VsZi5leHBhbmRlclZCb3gucGFja19zdGFydChzZWxmLmFwcEJ1dHRvbkJveCwgRmFs
c2UsIEZhbHNlLCAwKQogICAgICAgIHNlbGYuZXhwYW5kZXJWQm94LnNob3coKQogICAgICAgIHNl
bGYuZXhwYW5kZXIuYWRkKHNlbGYuZXhwYW5kZXJWQm94KQogICAgICAgIHNlbGYubm90ZWJvb2sg
PSBOb25lCiAgICAgICAgc2VsZi5hcHBDb21ibyA9IE5vbmUKICAgICAgICBzZWxmLmFwcE5vdGVi
b29rID0gTm9uZQogICAgICAgIHNlbGYuYXBwUGFnZSA9IE5vbmUKICAgICAgICBzZWxmLnNlbGVj
dFNjcmVlbigwKQogICAgICAgIHNlbGYudmJveC5zaG93KCkKICAgICAgICBzZWxmLmFkZChzZWxm
LnZib3gpCgogICAgZGVmIHNlbGVjdFNjcmVlbiAoc2VsZiwgbik6CiAgICAgICAgc2VsZi5jdXJT
Y3JlZW4gPSBzZWxmLnNjcmVlbnNbbl0KICAgICAgICAjIEZpbmQgdGhhdCBkZXZpY2UncyBjb25m
aWd1cmF0aW9uIGluIHRoZSB1c2VyIGNvbmZpZy4gU2VhcmNoCiAgICAgICAgIyBmcm9tIHRoZSBl
bmQsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBub3JtYWxpemVkIGNvbmZpZ3MgYXJlLgogICAg
ICAgIHNlbGYuZGV2aWNlQ29uZmlnID0gTm9uZQogICAgICAgIGkgPSBsZW4oc2VsZi51c2VyQ29u
ZmlnLmRldmljZXMpLTEKICAgICAgICB3aGlsZSBpID49IDAgYW5kIHNlbGYudXNlckNvbmZpZy5k
ZXZpY2VzW2ldLnNjcmVlbiAhPSBOb25lIGFuZCBcCiAgICAgICAgICAgICAgc2VsZi51c2VyQ29u
ZmlnLmRldmljZXNbaV0uZHJpdmVyICE9IE5vbmU6CiAgICAgICAgICAgIGlmIHNlbGYuY3VyU2Ny
ZWVuLm51bSA9PSBpbnQoc2VsZi51c2VyQ29uZmlnLmRldmljZXNbaV0uc2NyZWVuKSBhbmQgXAog
ICAgICAgICAgICAgICBzZWxmLmN1clNjcmVlbi5kcml2ZXIubmFtZSA9PSBzZWxmLnVzZXJDb25m
aWcuZGV2aWNlc1tpXS5kcml2ZXI6CiAgICAgICAgICAgICAgICBzZWxmLmRldmljZUNvbmZpZyA9
IHNlbGYudXNlckNvbmZpZy5kZXZpY2VzW2ldCiAgICAgICAgICAgICAgICBzZWxmLmRyaXZlciA9
IHNlbGYuY3VyU2NyZWVuLmRyaXZlcgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAg
aSA9IGkgLSAxCiAgICAgICAgIyBTYW5pdHkgY2hlY2tzLiBUaGVzZSBzaG91bGQgYWxsIGJlIHRy
dWUgYWZ0ZXIgbm9ybWFsaXphdGlvbi4KICAgICAgICBhc3NlcnQoc2VsZi5kZXZpY2VDb25maWcp
CiAgICAgICAgYXNzZXJ0KHNlbGYuZGV2aWNlQ29uZmlnLmlzTm9ybWFsaXplZCkKICAgICAgICBh
c3NlcnQobGVuKHNlbGYuZGV2aWNlQ29uZmlnLmFwcHMpID4gMCBhbmQKICAgICAgICAgICAgICAg
c2VsZi5kZXZpY2VDb25maWcuYXBwc1swXS5leGVjdXRhYmxlID09IE5vbmUpCiAgICAgICAgIyBS
ZWdpc3RlciBtb2RpZmllZCBjYWxsYmFjawogICAgICAgIHNlbGYuZGV2aWNlQ29uZmlnLmFwcHNb
MF0ubW9kaWZpZWQgPSBzZWxmLmNvbmZpZ01vZGlmaWVkCiAgICAgICAgIyBCdWlsZCBVSSBmb3Ig
dGhlIHNjcmVlbiBjb25maWd1cmF0aW9uCiAgICAgICAgaWYgc2VsZi5ub3RlYm9vazoKICAgICAg
ICAgICAgc2VsZi52Ym94LnJlbW92ZShzZWxmLm5vdGVib29rKQogICAgICAgIHNlbGYubm90ZWJv
b2sgPSBndGsuTm90ZWJvb2soKQogICAgICAgIHNlbGYubm90ZWJvb2sucG9wdXBfZW5hYmxlKCkK
ICAgICAgICBzZWxmLnNlY3RQYWdlcyA9IFtdCiAgICAgICAgc2VsZi5zZWN0TGFiZWxzID0gW10K
ICAgICAgICB1bmtub3duUGFnZSA9IGNvbW1vbnVpLlVua25vd25TZWN0aW9uUGFnZSAoc2VsZi5k
cml2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuZGV2aWNlQ29uZmlnLmFwcHNbMF0pCiAgICAgICAgaWYgbGVuKHVua25vd25QYWdlLm9w
dHMpID4gMDoKICAgICAgICAgICAgdW5rbm93blBhZ2Uuc2hvdygpCiAgICAgICAgICAgIHVua25v
d25MYWJlbCA9IGd0ay5MYWJlbCAoXygiVW5rbm93biBvcHRpb25zIikpCiAgICAgICAgICAgIHVu
a25vd25MYWJlbC5zaG93KCkKICAgICAgICAgICAgc2VsZi5ub3RlYm9vay5hcHBlbmRfcGFnZSAo
dW5rbm93blBhZ2UsIHVua25vd25MYWJlbCkKICAgICAgICAgICAgc2VsZi5zZWN0UGFnZXMuYXBw
ZW5kICh1bmtub3duUGFnZSkKICAgICAgICAgICAgc2VsZi5zZWN0TGFiZWxzLmFwcGVuZCAodW5r
bm93bkxhYmVsKQogICAgICAgIGZvciBzZWN0IGluIHNlbGYuZHJpdmVyLm9wdFNlY3Rpb25zOgog
ICAgICAgICAgICBzZWN0UGFnZSA9IGNvbW1vbnVpLlNlY3Rpb25QYWdlIChzZWN0LCBzZWxmLmRl
dmljZUNvbmZpZy5hcHBzWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUcnVlKQogICAgICAgICAgICBzZWN0UGFnZS5zZXRfcG9saWN5KGd0ay5QT0xJQ1lf
TkVWRVIsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQogICAgICAgICAgICBzZWN0UGFnZS5zaG93KCkK
ICAgICAgICAgICAgZGVzYyA9IHNlY3QuZ2V0RGVzYyhbbGFuZ10pCiAgICAgICAgICAgIGlmIGRl
c2M6CiAgICAgICAgICAgICAgICBzZWN0TGFiZWwgPSBndGsuTGFiZWwgKGRlc2MpCiAgICAgICAg
ICAgICAgICBzZWN0TGFiZWwuc2V0X2xpbmVfd3JhcCAoVHJ1ZSkKICAgICAgICAgICAgZWxzZToK
ICAgICAgICAgICAgICAgIHNlY3RMYWJlbCA9IGd0ay5MYWJlbCAoXygiKG5vIGRlc2NyaXB0aW9u
KSIpKQogICAgICAgICAgICBzZWN0TGFiZWwuc2hvdygpCiAgICAgICAgICAgIHNlbGYubm90ZWJv
b2suYXBwZW5kX3BhZ2UgKHNlY3RQYWdlLCBzZWN0TGFiZWwpCiAgICAgICAgICAgIHNlbGYuc2Vj
dFBhZ2VzLmFwcGVuZCAoc2VjdFBhZ2UpCiAgICAgICAgICAgIHNlbGYuc2VjdExhYmVscy5hcHBl
bmQgKHNlY3RMYWJlbCkKICAgICAgICBpZiBsZW4oc2VsZi5zZWN0TGFiZWxzKSA+IDA6CiAgICAg
ICAgICAgIHN0eWxlID0gc2VsZi5zZWN0TGFiZWxzWzBdLmdldF9zdHlsZSgpCiAgICAgICAgICAg
IHNlbGYuZGVmYXVsdF9ub3JtYWxfZmcgPSBzdHlsZS5mZ1tndGsuU1RBVEVfTk9STUFMXS5jb3B5
KCkKICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2FjdGl2ZV9mZyA9IHN0eWxlLmZnW2d0ay5TVEFU
RV9BQ1RJVkVdLmNvcHkoKQogICAgICAgIHNlbGYudmFsaWRhdGUoKQogICAgICAgIHNlbGYubm90
ZWJvb2suc2hvdygpCiAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5ub3RlYm9vaywg
VHJ1ZSwgVHJ1ZSwgMCkKICAgICAgICBpZiBzZWxmLmFwcENvbWJvOgogICAgICAgICAgICBzZWxm
LmFwcEJ1dHRvbkJveC5yZW1vdmUoc2VsZi5hcHBDb21ibykKICAgICAgICBzZWxmLmFwcENvbWJv
ID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSxsZW4o
c2VsZi5kZXZpY2VDb25maWcuYXBwcykpOgogICAgICAgICAgICBzZWxmLmFwcENvbWJvLmFwcGVu
ZF90ZXh0KHNlbGYuZGV2aWNlQ29uZmlnLmFwcHNbaV0ubmFtZSkKICAgICAgICBpZiBsZW4oc2Vs
Zi5kZXZpY2VDb25maWcuYXBwcykgPiAxOgogICAgICAgICAgICBzZWxmLmFwcENvbWJvLnNldF9h
Y3RpdmUoMCkKICAgICAgICAgICAgc2VsZi5leHBhbmRlci5zZXRfZXhwYW5kZWQoVHJ1ZSkKICAg
ICAgICAgICAgc2VsZi52Ym94LnNldF9jaGlsZF9wYWNraW5nKHNlbGYuZXhwYW5kZXIsIFRydWUs
IFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBndGsuUEFD
S19FTkQpCiAgICAgICAgICAgIHNlbGYuYXBwUHJvcEJ1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUp
CiAgICAgICAgICAgIHNlbGYuYXBwUmVtb3ZlQnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKICAg
ICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmV4cGFuZGVyLnNldF9leHBhbmRlZChGYWxzZSkK
ICAgICAgICAgICAgc2VsZi52Ym94LnNldF9jaGlsZF9wYWNraW5nKHNlbGYuZXhwYW5kZXIsIEZh
bHNlLCBUcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZ3Rr
LlBBQ0tfRU5EKQogICAgICAgICAgICBzZWxmLmFwcFByb3BCdXR0b24uc2V0X3NlbnNpdGl2ZShG
YWxzZSkKICAgICAgICAgICAgc2VsZi5hcHBSZW1vdmVCdXR0b24uc2V0X3NlbnNpdGl2ZShGYWxz
ZSkKICAgICAgICBzZWxmLmFwcENvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLmNoYW5nZUFw
cCkKICAgICAgICBzZWxmLmFwcENvbWJvLnNob3coKQogICAgICAgIHNlbGYuYXBwQnV0dG9uQm94
LnBhY2tfc3RhcnQoc2VsZi5hcHBDb21ibywgVHJ1ZSwgVHJ1ZSwgMCkKICAgICAgICBpZiBsZW4o
c2VsZi5kZXZpY2VDb25maWcuYXBwcykgPiAxOgogICAgICAgICAgICBzZWxmLnNlbGVjdEFwcChz
ZWxmLmRldmljZUNvbmZpZy5hcHBzWzFdKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYu
c2VsZWN0QXBwKE5vbmUpCgogICAgZGVmIHNlbGVjdEFwcCAoc2VsZiwgYXBwKToKICAgICAgICBp
ZiBzZWxmLmFwcE5vdGVib29rOgogICAgICAgICAgICBzZWxmLmV4cGFuZGVyVkJveC5yZW1vdmUo
c2VsZi5hcHBOb3RlYm9vaykKICAgICAgICAgICAgc2VsZi5hcHBOb3RlYm9vayA9IE5vbmUKICAg
ICAgICAgICAgc2VsZi5hcHBQYWdlID0gTm9uZQogICAgICAgIGVsaWYgc2VsZi5hcHBQYWdlOgog
ICAgICAgICAgICBzZWxmLmV4cGFuZGVyVkJveC5yZW1vdmUoc2VsZi5hcHBQYWdlKQogICAgICAg
ICAgICBzZWxmLmFwcFBhZ2UgPSBOb25lCiAgICAgICAgaWYgbm90IGFwcDoKICAgICAgICAgICAg
c2VsZi5hcHBQcm9wQnV0dG9uLnNldF9zZW5zaXRpdmUoRmFsc2UpCiAgICAgICAgICAgIHNlbGYu
YXBwUmVtb3ZlQnV0dG9uLnNldF9zZW5zaXRpdmUoRmFsc2UpCiAgICAgICAgICAgIHJldHVybgog
ICAgICAgIHNlbGYuYXBwUHJvcEJ1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCiAgICAgICAgc2Vs
Zi5hcHBSZW1vdmVCdXR0b24uc2V0X3NlbnNpdGl2ZShUcnVlKQogICAgICAgIGFwcC5tb2RpZmll
ZCA9IHNlbGYuY29uZmlnTW9kaWZpZWQKICAgICAgICB1bmtub3duUGFnZSA9IGNvbW1vbnVpLlVu
a25vd25TZWN0aW9uUGFnZSAoc2VsZi5kcml2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCkKICAgICAgICBpZiBsZW4odW5rbm93blBhZ2Uu
b3B0cykgPiAwOgogICAgICAgICAgICBzZWxmLmFwcE5vdGVib29rID0gZ3RrLk5vdGVib29rKCkK
ICAgICAgICAgICAgc2VsZi5hcHBOb3RlYm9vay5wb3B1cF9lbmFibGUoKQogICAgICAgICAgICB1
bmtub3duUGFnZS5zaG93KCkKICAgICAgICAgICAgdW5rbm93bkxhYmVsID0gZ3RrLkxhYmVsIChf
KCJVbmtub3duIG9wdGlvbnMiKSkKICAgICAgICAgICAgdW5rbm93bkxhYmVsLnNob3coKQogICAg
ICAgICAgICBzZWxmLmFwcE5vdGVib29rLmFwcGVuZF9wYWdlICh1bmtub3duUGFnZSwgdW5rbm93
bkxhYmVsKQogICAgICAgICAgICBzZWxmLmFwcFBhZ2UgPSBBcHBQYWdlIChzZWxmLmRyaXZlciwg
YXBwKQogICAgICAgICAgICBzZWxmLmFwcFBhZ2Uuc2hvdygpCiAgICAgICAgICAgIGFwcFBhZ2VM
YWJlbCA9IGd0ay5MYWJlbCAoXygiS25vd24gb3B0aW9ucyIpKQogICAgICAgICAgICBhcHBQYWdl
TGFiZWwuc2hvdygpCiAgICAgICAgICAgIHNlbGYuYXBwTm90ZWJvb2suYXBwZW5kX3BhZ2UgKHNl
bGYuYXBwUGFnZSwgYXBwUGFnZUxhYmVsKQogICAgICAgICAgICBzZWxmLmFwcE5vdGVib29rLnNo
b3coKQogICAgICAgICAgICBhcHBXaWRnZXQgPSBzZWxmLmFwcE5vdGVib29rCiAgICAgICAgZWxz
ZToKICAgICAgICAgICAgc2VsZi5hcHBQYWdlID0gQXBwUGFnZSAoc2VsZi5kcml2ZXIsIGFwcCkK
ICAgICAgICAgICAgc2VsZi5hcHBQYWdlLnNob3coKQogICAgICAgICAgICBhcHBXaWRnZXQgPSBz
ZWxmLmFwcFBhZ2UKICAgICAgICBzZWxmLmV4cGFuZGVyVkJveC5wYWNrX3N0YXJ0IChhcHBXaWRn
ZXQsIFRydWUsIFRydWUsIDApCgogICAgZGVmIHZhbGlkYXRlIChzZWxmKToKICAgICAgICAiIiIg
VmFsaWRhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCgogICAgICAgIExhYmVscyBvZiBpbnZhbGlkIHNl
Y3Rpb24gcGFnZXMgYXJlIGhpZ2hsaWdodGVkLiBSZXR1cm5zIHdoZXRoZXIKICAgICAgICB0aGVy
ZSB3ZXJlIGludmFsaWQgb3B0aW9uIHZhbHVlcy4gIiIiCiAgICAgICAgaW5kZXggPSAwCiAgICAg
ICAgYWxsVmFsaWQgPSBUcnVlCiAgICAgICAgZm9yIHNlY3RQYWdlIGluIHNlbGYuc2VjdFBhZ2Vz
OgogICAgICAgICAgICB2YWxpZCA9IHNlY3RQYWdlLnZhbGlkYXRlKCkKICAgICAgICAgICAgaWYg
bm90IHZhbGlkOgogICAgICAgICAgICAgICAgIyBzdHJhbmdlLCBhY3RpdmUgYW5kIG5vcm1hbCBh
cHBlYXIgdG8gYmUgc3dhcHBlZCA6LS8KICAgICAgICAgICAgICAgIHNlbGYuc2VjdExhYmVsc1tp
bmRleF0ubW9kaWZ5X2ZnICgKICAgICAgICAgICAgICAgICAgICBndGsuU1RBVEVfTk9STUFMLCBn
dGsuZ2RrLkNvbG9yICg2NTUzNSwgMCwgMCkpCiAgICAgICAgICAgICAgICBzZWxmLnNlY3RMYWJl
bHNbaW5kZXhdLm1vZGlmeV9mZyAoCiAgICAgICAgICAgICAgICAgICAgZ3RrLlNUQVRFX0FDVElW
RSwgZ3RrLmdkay5Db2xvciAoNjU1MzUsIDAsIDApKQogICAgICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgICAgc2VsZi5zZWN0TGFiZWxzW2luZGV4XS5tb2RpZnlfZmcgKAogICAgICAgICAgICAg
ICAgICAgIGd0ay5TVEFURV9OT1JNQUwsIHNlbGYuZGVmYXVsdF9ub3JtYWxfZmcpCiAgICAgICAg
ICAgICAgICBzZWxmLnNlY3RMYWJlbHNbaW5kZXhdLm1vZGlmeV9mZyAoCiAgICAgICAgICAgICAg
ICAgICAgZ3RrLlNUQVRFX0FDVElWRSwgc2VsZi5kZWZhdWx0X2FjdGl2ZV9mZykKICAgICAgICAg
ICAgYWxsVmFsaWQgPSBhbGxWYWxpZCBhbmQgdmFsaWQKICAgICAgICAgICAgaW5kZXggPSBpbmRl
eCsxCiAgICAgICAgcmV0dXJuIGFsbFZhbGlkICAgICAgICAKCiAgICBkZWYgY29tbWl0IChzZWxm
KToKICAgICAgICBmb3Igc2VjdFBhZ2UgaW4gc2VsZi5zZWN0UGFnZXM6CiAgICAgICAgICAgIHNl
Y3RQYWdlLmNvbW1pdCgpCiAgICAgICAgaWYgc2VsZi5hcHBQYWdlOgogICAgICAgICAgICBzZWxm
LmFwcFBhZ2UuY29tbWl0KCkKCiAgICBkZWYgY2hhbmdlRGV2aWNlIChzZWxmLCBjb21ibyk6CiAg
ICAgICAgc2VsZi5zZWxlY3RTY3JlZW4oY29tYm8uZ2V0X2FjdGl2ZSgpKQoKICAgIGRlZiBjaGFu
Z2VBcHAgKHNlbGYsIGNvbWJvKToKICAgICAgICBhY3RpdmUgPSBjb21iby5nZXRfYWN0aXZlKCkK
ICAgICAgICBpZiBhY3RpdmUgPj0gMDoKICAgICAgICAgICAgYXBwID0gc2VsZi5kZXZpY2VDb25m
aWcuYXBwc1thY3RpdmUrMV0KICAgICAgICBlbHNlOgogICAgICAgICAgICBhcHAgPSBOb25lCiAg
ICAgICAgaWYgc2VsZi5hcHBQYWdlOgogICAgICAgICAgICBsYXN0QXBwID0gc2VsZi5hcHBQYWdl
LmFwcAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxhc3RBcHAgPSBOb25lCiAgICAgICAgaWYg
YXBwICE9IGxhc3RBcHA6CiAgICAgICAgICAgIGlmIGxhc3RBcHA6CiAgICAgICAgICAgICAgICBz
ZWxmLmFwcFBhZ2UuY29tbWl0KCkKICAgICAgICAgICAgc2VsZi5zZWxlY3RBcHAoYXBwKQoKICAg
IGRlZiBleHBhbmRlckNoYW5nZWQgKHNlbGYsIGV4cGFuZGVyKToKICAgICAgICAjIFRoaXMgc2ln
bmFsIGhhbmRsZXIgc2VlbXMgdG8gZ2V0IGNhbGxlZCBiZWZvcmUgdGhlIGV4cGFuZGVyCiAgICAg
ICAgIyBzdGF0ZSBpcyBjaGFuZ2VkLiBTbyB0aGUgbG9naWMgaXMgcmV2ZXJzZWQuCiAgICAgICAg
aWYgbm90IHNlbGYuZXhwYW5kZXIuZ2V0X2V4cGFuZGVkKCk6CiAgICAgICAgICAgIHNlbGYudmJv
eC5zZXRfY2hpbGRfcGFja2luZyhzZWxmLmV4cGFuZGVyLCBUcnVlLCBUcnVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZ3RrLlBBQ0tfRU5EKQogICAgICAgIGVs
c2U6CiAgICAgICAgICAgIHNlbGYudmJveC5zZXRfY2hpbGRfcGFja2luZyhzZWxmLmV4cGFuZGVy
LCBGYWxzZSwgVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IGd0ay5QQUNLX0VORCkKCiAgICBkZWYgY2hlY2tBcHBQcm9wZXJ0aWVzIChzZWxmLCBkaWFsb2cs
IG5hbWUsIGV4ZWN1dGFibGUsIHNhbWVBcHA9Tm9uZSk6CiAgICAgICAgZXJyb3JTdHIgPSBOb25l
CiAgICAgICAgaWYgbmFtZSA9PSAiIiBvciBleGVjdXRhYmxlID09ICIiOgogICAgICAgICAgICAj
IEVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgZXJyb3JTdHIgPSBfKCJZb3UgbXVzdCBlbnRlciBi
b3RoIGFuIGFwcGxpY2F0aW9uIG5hbWUgYW5kICIKICAgICAgICAgICAgICAgICAgICAgICAgICJh
biBleGVjdXRhYmxlIG5hbWUuIikKICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgYXBwIGlu
IHNlbGYuZGV2aWNlQ29uZmlnLmFwcHM6CiAgICAgICAgICAgICAgICBpZiBhcHAgIT0gc2FtZUFw
cCBhbmQgbmFtZSA9PSBhcHAubmFtZToKICAgICAgICAgICAgICAgICAgICBlcnJvclN0ciA9IF8o
IlRoZXJlIGV4aXN0cyBhbiBhcHBsaWNhdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJjb25maWd1cmF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZS4gIgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgZGlmZmVyZW50IG5hbWUuIikKICAg
ICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgZWxpZiBhcHAgIT0gc2FtZUFw
cCBhbmQgZXhlY3V0YWJsZSA9PSBhcHAuZXhlY3V0YWJsZToKICAgICAgICAgICAgICAgICAgICBl
cnJvclN0ciA9IF8oIlRoZXJlIGV4aXN0cyBhbiBhcHBsaWNhdGlvbiAiCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJjb25maWd1cmF0aW9uIGZvciB0aGUgc2FtZSAiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJleGVjdXRhYmxlLiBZb3UgY2FuJ3QgY3JlYXRlIG11
bHRpcGxlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uIGNv
bmZpZ3VyYXRpb25zIGZvciB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c2FtZSBleGVjdXRhYmxlLiIpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBpZiBl
cnJvclN0cjoKICAgICAgICAgICAgZGlhbG9nID0gZ3RrLk1lc3NhZ2VEaWFsb2coCiAgICAgICAg
ICAgICAgICBkaWFsb2csIGd0ay5ESUFMT0dfTU9EQUx8Z3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhf
UEFSRU5ULAogICAgICAgICAgICAgICAgZ3RrLk1FU1NBR0VfRVJST1IsIGd0ay5CVVRUT05TX09L
LCBlcnJvclN0cikKICAgICAgICAgICAgZGlhbG9nLnJ1bigpCiAgICAgICAgICAgIGRpYWxvZy5k
ZXN0cm95KCkKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgcmV0dXJuIFRydWUKCiAg
ICBkZWYgYWRkQXBwIChzZWxmLCBidXR0b24pOgogICAgICAgIGRpYWxvZyA9IEFwcERpYWxvZyhf
KCJBZGQgQXBwbGljYXRpb24iKSwgc2VsZikKICAgICAgICBkb25lID0gRmFsc2UKICAgICAgICB3
aGlsZSBub3QgZG9uZToKICAgICAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKICAgICAg
ICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX09LOgogICAgICAgICAgICAgICAgbmFt
ZSA9IGRpYWxvZy5nZXROYW1lKCkuc3RyaXAoKQogICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9
IGRpYWxvZy5nZXRFeGVjdXRhYmxlKCkuc3RyaXAoKQogICAgICAgICAgICAgICAgaWYgc2VsZi5j
aGVja0FwcFByb3BlcnRpZXMgKGRpYWxvZywgbmFtZSwgZXhlY3V0YWJsZSk6CiAgICAgICAgICAg
ICAgICAgICAgYXBwID0gZHJpLkFwcENvbmZpZyhzZWxmLmRldmljZUNvbmZpZywgbmFtZSwgZXhl
Y3V0YWJsZSkKICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZUNvbmZpZy5hcHBzLmFwcGVu
ZChhcHApCiAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBDb21iby5hcHBlbmRfdGV4dChuYW1l
KQogICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwQ29tYm8uc2V0X2FjdGl2ZShsZW4oc2VsZi5k
ZXZpY2VDb25maWcuYXBwcyktMikKICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ01vZGlm
aWVkIChzZWxmLmRldmljZUNvbmZpZykKICAgICAgICAgICAgICAgICAgICBkb25lID0gVHJ1ZQog
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZG9uZSA9IFRydWUKICAgICAgICBkaWFs
b2cuZGVzdHJveSgpCgogICAgZGVmIGFwcFByb3BlcnRpZXMgKHNlbGYsIGJ1dHRvbik6CiAgICAg
ICAgaWYgbm90IHNlbGYuYXBwUGFnZToKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgZGlhbG9n
ID0gQXBwRGlhbG9nKF8oIkFwcGxpY2F0aW9uIFByb3BlcnRpZXMiKSwgc2VsZiwgc2VsZi5hcHBQ
YWdlLmFwcCkKICAgICAgICBkb25lID0gRmFsc2UKICAgICAgICB3aGlsZSBub3QgZG9uZToKICAg
ICAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKICAgICAgICAgICAgaWYgcmVzcG9uc2Ug
PT0gZ3RrLlJFU1BPTlNFX09LOgogICAgICAgICAgICAgICAgbmFtZSA9IGRpYWxvZy5nZXROYW1l
KCkuc3RyaXAoKQogICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IGRpYWxvZy5nZXRFeGVjdXRh
YmxlKCkuc3RyaXAoKQogICAgICAgICAgICAgICAgaWYgc2VsZi5jaGVja0FwcFByb3BlcnRpZXMg
KGRpYWxvZywgbmFtZSwgZXhlY3V0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmFwcFBhZ2UuYXBwKToKICAgICAgICAgICAgICAgICAgICBpID0g
c2VsZi5kZXZpY2VDb25maWcuYXBwcy5pbmRleChzZWxmLmFwcFBhZ2UuYXBwKQogICAgICAgICAg
ICAgICAgICAgIHNlbGYuYXBwQ29tYm8ucmVtb3ZlX3RleHQoaS0xKQogICAgICAgICAgICAgICAg
ICAgIHNlbGYuYXBwQ29tYm8uaW5zZXJ0X3RleHQoaS0xLCBuYW1lKQogICAgICAgICAgICAgICAg
ICAgIHNlbGYuYXBwQ29tYm8uc2V0X2FjdGl2ZShpLTEpCiAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5hcHBQYWdlLmFwcC5uYW1lID0gbmFtZQogICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwUGFn
ZS5hcHAuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUKICAgICAgICAgICAgICAgICAgICBzZWxmLmNv
bmZpZ01vZGlmaWVkIChzZWxmLmFwcFBhZ2UuYXBwKQogICAgICAgICAgICAgICAgICAgIGRvbmUg
PSBUcnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkb25lID0gVHJ1ZQogICAg
ICAgIGRpYWxvZy5kZXN0cm95KCkKCiAgICBkZWYgcmVtb3ZlQXBwIChzZWxmLCBidXR0b24pOgog
ICAgICAgIGlmIG5vdCBzZWxmLmFwcFBhZ2U6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIGkg
PSBzZWxmLmRldmljZUNvbmZpZy5hcHBzLmluZGV4KHNlbGYuYXBwUGFnZS5hcHApCiAgICAgICAg
aWYgaSsxIDwgbGVuKHNlbGYuZGV2aWNlQ29uZmlnLmFwcHMpOgogICAgICAgICAgICBuZXdJID0g
aQogICAgICAgICAgICBuZXdBcHAgPSBzZWxmLmRldmljZUNvbmZpZy5hcHBzW2krMV0KICAgICAg
ICBlbGlmIGkgPiAxOgogICAgICAgICAgICBuZXdJID0gaS0xCiAgICAgICAgICAgIG5ld0FwcCA9
IHNlbGYuZGV2aWNlQ29uZmlnLmFwcHNbaS0xXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG5l
d0kgPSAwCiAgICAgICAgICAgIG5ld0FwcCA9IE5vbmUKICAgICAgICBkZWwgc2VsZi5kZXZpY2VD
b25maWcuYXBwc1tpXQogICAgICAgIHNlbGYuc2VsZWN0QXBwKG5ld0FwcCkKICAgICAgICBzZWxm
LmFwcENvbWJvLnJlbW92ZV90ZXh0KGktMSkKICAgICAgICBzZWxmLmFwcENvbWJvLnNldF9hY3Rp
dmUobmV3SS0xKQogICAgICAgIHNlbGYuY29uZmlnTW9kaWZpZWQoc2VsZi5kZXZpY2VDb25maWcp
CgogICAgZGVmIGV4aXRIYW5kbGVyIChzZWxmLCB3aWRnZXQsIGV2ZW50PU5vbmUpOgogICAgICAg
ICMgQWx3YXlzIG9rIHRvIGRlc3Ryb3kgdGhlIHdpbmRvdwogICAgICAgIHJldHVybiBGYWxzZQoK
ICAgIGRlZiBhYm91dEhhbmRsZXIgKHNlbGYsIHdpZGdldCk6CiAgICAgICAgZGlhbG9nID0gY29t
bW9udWkuQWJvdXREaWFsb2coKQogICAgICAgIGRpYWxvZy5zaG93KCkKICAgICAgICBkaWFsb2cu
cnVuKCkKICAgICAgICBkaWFsb2cuZGVzdHJveSgpCgogICAgZGVmIGV4cGVydEhhbmRsZXIgKHNl
bGYsIHdpZGdldCk6CiAgICAgICAgc2VsZi5kZXN0cm95KCkgIyB0cmlnZ2VycyBtYWluX3F1aXQK
ICAgICAgICBjb21wbGV4dWkuc3RhcnQoc2VsZi5jb25maWdMaXN0KQogICAgICAgIGd0ay5tYWlu
KCkKCiAgICBkZWYgY29uZmlnTW9kaWZpZWQgKHNlbGYsIG5vZGUsIGI9VHJ1ZSk6CiAgICAgICAg
aWYgYiAhPSBUcnVlOgogICAgICAgICAgICByZXR1cm4KICAgICAgICAjIFNhdmUgdGhlIGNvbmZp
Z3VyYXRpb24gZmlsZQogICAgICAgIHRyeToKICAgICAgICAgICAgZmlsZSA9IG9wZW4gKHNlbGYu
dXNlckNvbmZpZy5maWxlTmFtZSwgInciKQogICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAg
ICAgICBkaWFsb2cgPSBndGsuTWVzc2FnZURpYWxvZyAoCiAgICAgICAgICAgICAgICBjb21tb251
aS5tYWluV2luZG93LCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCiAgICAgICAgICAg
ICAgICBndGsuTUVTU0FHRV9FUlJPUiwgZ3RrLkJVVFRPTlNfT0ssCiAgICAgICAgICAgICAgICBf
KCJDYW4ndCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZy4iKSAlIHNlbGYudXNlckNvbmZpZy5maWxl
TmFtZSkKICAgICAgICAgICAgZGlhbG9nLnJ1bigpCiAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95
KCkKICAgICAgICAgICAgc2VsZi5pbkNvbmZpZ01vZGlmaWVkID0gRmFsc2UKICAgICAgICAgICAg
cmV0dXJuCiAgICAgICAgc2VsZi5jb21taXQoKQogICAgICAgIGZpbGUud3JpdGUgKHN0cihzZWxm
LnVzZXJDb25maWcpKQogICAgICAgIGZpbGUuY2xvc2UoKQoKICAgIGRlZiB2YWxpZGF0ZURyaXZl
clBhbmVsIChzZWxmKToKICAgICAgICBzZWxmLnZhbGlkYXRlKCkKCmRlZiBzdGFydCAoY29uZmln
TGlzdCk6CiAgICB1c2VyQ29uZmlnID0gZ2V0VXNlckNvbmZpZyhjb25maWdMaXN0KQogICAgaWYg
bm90IHVzZXJDb25maWc6CiAgICAgICAgZGlhbG9nID0gZ3RrLk1lc3NhZ2VEaWFsb2cgKAogICAg
ICAgICAgICBOb25lLCAwLCBndGsuTUVTU0FHRV9FUlJPUiwgZ3RrLkJVVFRPTlNfT0ssCiAgICAg
ICAgICAgIF8oIlRoZSBEUkkgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiBpcyBicm9rZW4gb3Ig
Y291bGQgbm90IGJlICIKICAgICAgICAgICAgICAiY3JlYXRlZC4iKSAlIG9zLnBhdGguam9pbiAo
b3MuZW52aXJvblsiSE9NRSJdLCAiLmRyaXJjIikgKyIgIisKICAgICAgICAgICAgXygiRFJJY29u
ZiB3aWxsIGJlIHN0YXJ0ZWQgaW4gZXhwZXJ0IG1vZGUuIikpCiAgICAgICAgZGlhbG9nLnJ1bigp
CiAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQogICAgICAgIGNvbXBsZXh1aS5zdGFydChjb25maWdM
aXN0KQogICAgICAgIHJldHVybgogICAgaWYgbm90IHVzZXJDb25maWcud3JpdGFibGU6CiAgICAg
ICAgIyBOb3Qgd3JpdGFibGU6IHN0YXJ0IGV4cGVydCBtb2RlCiAgICAgICAgZGlhbG9nID0gZ3Rr
Lk1lc3NhZ2VEaWFsb2cgKAogICAgICAgICAgICBOb25lLCAwLCBndGsuTUVTU0FHRV9XQVJOSU5H
LCBndGsuQlVUVE9OU19PSywKICAgICAgICAgICAgXygiWW91ciBEUkkgY29uZmlndXJhdGlvbiBm
aWxlIFwiJXNcIiBpcyBub3Qgd3JpdGFibGUuIikgJQogICAgICAgICAgICB1c2VyQ29uZmlnLmZp
bGVOYW1lICsiICIrCiAgICAgICAgICAgIF8oIkRSSWNvbmYgd2lsbCBiZSBzdGFydGVkIGluIGV4
cGVydCBtb2RlLiIpKQogICAgICAgIGRpYWxvZy5ydW4oKQogICAgICAgIGRpYWxvZy5kZXN0cm95
KCkKICAgICAgICBjb21wbGV4dWkuc3RhcnQoY29uZmlnTGlzdCkKICAgICAgICByZXR1cm4KICAg
IG5vcm1hbGl6ZWREZXZpY2VDb25maWdzID0gbm9ybWFsaXplQ29uZmlnKGNvbmZpZ0xpc3QsIGNv
bW1vbnVpLmRweSkKICAgIGlmIG5vcm1hbGl6ZWREZXZpY2VDb25maWdzID09IE5vbmU6CiAgICAg
ICAgZGlhbG9nID0gZ3RrLk1lc3NhZ2VEaWFsb2cgKAogICAgICAgICAgICBOb25lLCAwLCBndGsu
TUVTU0FHRV9FUlJPUiwgZ3RrLkJVVFRPTlNfT0ssCiAgICAgICAgICAgIF8oIk5vcm1hbGl6YXRp
b24gb2YgeW91ciBEUkkgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiBmYWlsZWQuICIKICAgICAg
ICAgICAgICAiUGxlYXNlIHJlcG9ydCBhIGJ1ZyB3aXRoIHRoZSBvcmlnaW5hbCBjb25maWd1cmF0
aW9uIGZpbGUgIgogICAgICAgICAgICAgICJhdHRhY2hlZC4gVGhlIGZpbGUgd2lsbCBiZSB0cmVh
dGVkIGFzIHJlYWQtb25seSBmb3Igbm93LiIpICUKICAgICAgICAgICAgdXNlckNvbmZpZy5maWxl
TmFtZSArIiAiKwogICAgICAgICAgICBfKCJEUkljb25mIHdpbGwgYmUgc3RhcnRlZCBpbiBleHBl
cnQgbW9kZS4iKSkKICAgICAgICBkaWFsb2cucnVuKCkKICAgICAgICBkaWFsb2cuZGVzdHJveSgp
CiAgICAgICAgdXNlckNvbmZpZy53cml0YWJsZSA9IEZhbHNlCiAgICAgICAgY29tcGxleHVpLnN0
YXJ0KGNvbmZpZ0xpc3QpCiAgICAgICAgcmV0dXJuCiAgICBtYWluV2luZG93ID0gTWFpbldpbmRv
dyhjb25maWdMaXN0KQogICAgY29tbW9udWkubWFpbldpbmRvdyA9IG1haW5XaW5kb3cKICAgIG1h
aW5XaW5kb3cuc2V0X2RlZmF1bHRfc2l6ZSAoLTEsIDUwMCkKICAgIG1haW5XaW5kb3cuc2hvdygp
CiAgICAjIFNhdmUgbW9kaWZpZWQgbm9ybWFsaXplZCBjb25maWd1cmF0aW9uIGJlZm9yZSB3ZSBz
dGFydAogICAgaWYgaGFzYXR0cih1c2VyQ29uZmlnLCAiaXNNb2RpZmllZCIpIGFuZCB1c2VyQ29u
ZmlnLmlzTW9kaWZpZWQ6CiAgICAgICAgbWFpbldpbmRvdy5jb25maWdNb2RpZmllZCh1c2VyQ29u
ZmlnKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>