<?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>20788</bug_id>
          
          <creation_ts>2008-09-11 13:29:09 -0700</creation_ts>
          <short_desc>Split CharacterClassConstructor into its own file</short_desc>
          <delta_ts>2008-09-11 15:47:47 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90885</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-11 13:29:09 -0700</bug_when>
    <thetext>We should really split WREC into multiple pieces. I have a patch that does this for CharacterClassConstructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90886</commentid>
    <comment_count>1</comment_count>
      <attachid>23357</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-11 13:32:38 -0700</bug_when>
    <thetext>Created attachment 23357
Proposed patch

Sorry that the renames don&apos;t come out in the diff, but they can all be seen in CharacterClassConstructor.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90887</commentid>
    <comment_count>2</comment_count>
      <attachid>23358</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-11 13:39:18 -0700</bug_when>
    <thetext>Created attachment 23358
Revised proposed patch

I forgot to make CharacterClassConstructor a class rather than a struct, and I had an unused accessor function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90889</commentid>
    <comment_count>3</comment_count>
      <attachid>23358</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-11 14:07:07 -0700</bug_when>
    <thetext>Comment on attachment 23358
Revised proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90890</commentid>
    <comment_count>4</comment_count>
      <attachid>23358</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-11 14:07:07 -0700</bug_when>
    <thetext>Comment on attachment 23358
Revised proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90905</commentid>
    <comment_count>5</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-11 15:47:47 -0700</bug_when>
    <thetext>Landed in r36337 and r36338.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23357</attachid>
            <date>2008-09-11 13:32:38 -0700</date>
            <delta_ts>2008-09-11 13:39:18 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>charclass.diff</filename>
            <type>text/plain</type>
            <size>37679</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2MzM1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMDgtMDkt
MTEgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDIwNzg4OiBTcGxpdCBD
aGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yIGludG8gaXRzIG93biBmaWxlCisgICAgICAgIDxodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODg+CisKKyAgICAgICAgU3Bs
aXQgQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3RvciBpbnRvIGl0cyBvd24gZmlsZSBhbmQgY2xlYW4g
dXAgc29tZQorICAgICAgICBzdHlsZSBpc3N1ZXMuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Jl
Yy9DaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oik6
CisgICAgICAgIChKU0M6OmdldENoYXJhY3RlckNsYXNzTmV3bGluZSk6CisgICAgICAgIChKU0M6
OmdldENoYXJhY3RlckNsYXNzRGlnaXRzKToKKyAgICAgICAgKEpTQzo6Z2V0Q2hhcmFjdGVyQ2xh
c3NTcGFjZXMpOgorICAgICAgICAoSlNDOjpnZXRDaGFyYWN0ZXJDbGFzc1dvcmRjaGFyKToKKyAg
ICAgICAgKEpTQzo6Z2V0Q2hhcmFjdGVyQ2xhc3NOb25kaWdpdHMpOgorICAgICAgICAoSlNDOjpn
ZXRDaGFyYWN0ZXJDbGFzc05vbnNwYWNlcyk6CisgICAgICAgIChKU0M6OmdldENoYXJhY3RlckNs
YXNzTm9ud29yZGNoYXIpOgorICAgICAgICAoSlNDOjpDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9y
OjphZGRTb3J0ZWQpOgorICAgICAgICAoSlNDOjpDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjph
ZGRTb3J0ZWRSYW5nZSk6CisgICAgICAgIChKU0M6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6
OnB1dCk6CisgICAgICAgIChKU0M6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OmZsdXNoKToK
KyAgICAgICAgKEpTQzo6Q2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvcjo6YXBwZW5kKToKKyAgICAg
ICAgKiB3cmVjL0NoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3Ip
OgorICAgICAgICAoSlNDOjpDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjppc0Nhc2VJbnNlbnNp
dGl2ZSk6CisgICAgICAgIChKU0M6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OmlzVXBzaWRl
RG93bik6CisgICAgICAgIChKU0M6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OmNoYXJDbGFz
cyk6CisgICAgICAgICogd3JlYy9XUkVDLmNwcDoKKyAgICAgICAgKEpTQzo6V1JFQ1BhcnNlcjo6
cGFyc2VDaGFyYWN0ZXJDbGFzcyk6CisKIDIwMDgtMDktMTAgIFNpbW9uIEhhdXNtYW5uICA8aGF1
c21hbm5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQgYnV0IHRyaXZpYWwgb25l
LWxpbmVyIGZvciB5ZXQgdW51c2VkIG1hY3JvLgpJbmRleDogSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShy
ZXZpc2lvbiAzNjMzMykKKysrIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNTQsNiArMTM1NCwxMyBA
QAogCQkJTmFtZT0id3JlYyINCiAJCQk+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlx3cmVjXENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3JlY1xDaGFyYWN0ZXJD
bGFzc0NvbnN0cnVjdG9yLmgiDQorCQkJCT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHdyZWNcV1JFQy5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNjMzMykKKysrIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDYgKzc1LDggQEAKIAkJNjU5MTI2QkQwQkREMTcyODAwMTkyMUZCIC8qIEFsbEluT25lRmls
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTkx
MjZCQzBCREQxNzI4MDAxOTIxRkIgLyogQWxsSW5PbmVGaWxlLmNwcCAqLzsgfTsKIAkJNjVERkM5
MzMwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGQzkyRDA4RUExNzNBMDBGNzMwMEIgLyogSGFz
aFRhYmxlLmNwcCAqLzsgfTsKIAkJNjVGREU0OUMwQkREMUQ0QTAwRTgwMTExIC8qIEFzc2VydGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVF
MjE3QjgwOEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuY3BwICovOyBzZXR0aW5ncyA9IHtD
T01QSUxFUl9GTEFHUyA9ICItV25vLW1pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSI7IH07IH07CisJ
CTdFMkFERDhFMEU3OUFBRDUwMEQ1MEM1MSAvKiBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTJBREQ4RDBF
NzlBQUQ1MDBENTBDNTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5oICovOyB9OworCQk3
RTJBREQ5MDBFNzlBQzExMDBENTBDNTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTJBREQ4RjBF
NzlBQzExMDBENTBDNTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJ
CTg2MTNGNDVBMEUzQTQzM0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYxM0Y0NTgwRTNBNDMzRTAwQzk0
OEZEIC8qIFNhbXBsaW5nVG9vbC5jcHAgKi87IH07CiAJCTg2MTNGNDVCMEUzQTQzM0UwMEM5NDhG
RCAvKiBTYW1wbGluZ1Rvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2MTNGNDU5MEUzQTQzM0UwMEM5NDhGRCAvKiBTYW1wbGluZ1Rvb2wuaCAqLzsg
fTsKIAkJODY4M0IwMkUwRTYzNjQ4MjAwNEMxOUVFIC8qIENUSS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjgzQjAyQjBFNjM2NDgyMDA0QzE5RUUg
LyogQ1RJLmNwcCAqLzsgfTsKQEAgLTU3Myw2ICs1NzUsOCBAQAogCQk2NUVBNzM2MzBCQUUzNUQx
MDAxQkI1NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vbklkZW50aWZpZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1RkIzRjQ4MDlEMTFCMjQwMEY0OURFQiAvKiBncmFtbWFyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBncmFtbWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8qIEJvb2xlYW5PYmplY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm9vbGVh
bk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CisJCTdF
MkFERDhEMEU3OUFBRDUwMEQ1MEM1MSAvKiBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0UyQUREOEYwRTc5QUMxMTAwRDUwQzUx
IC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBTY29wZUNoYWlu
TWFyay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZUNoYWluTWFyay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjEzRjQ1ODBFM0E0MzNFMDBDOTQ4RkQg
LyogU2FtcGxpbmdUb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFNhbXBsaW5nVG9vbC5jcHA7IHBhdGggPSBWTS9TYW1wbGluZ1Rvb2wuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NjEzRjQ1OTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdU
b29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNhbXBsaW5nVG9vbC5oOyBw
YXRoID0gVk0vU2FtcGxpbmdUb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MzIyLDYgKzEzMjYsOCBAQAogCQk4NjkwODMxMjBFNjUxOEQ3MDAwRDM2RUQgLyogd3JlYyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0UyQUREOEYwRTc5
QUMxMTAwRDUwQzUxIC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTdF
MkFERDhEMEU3OUFBRDUwMEQ1MEM1MSAvKiBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmggKi8s
CiAJCQkJODY5MDgzMTMwRTY1MThENzAwMEQzNkVEIC8qIFdSRUMuY3BwICovLAogCQkJCTg2OTA4
MzE0MEU2NTE4RDcwMDBEMzZFRCAvKiBXUkVDLmggKi8sCiAJCQkpOwpAQCAtMTU4Nyw2ICsxNTkz
LDcgQEAKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlSUQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3
NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0UyQUREOEUwRTc5
QUFENTAwRDUwQzUxIC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtMTg5Nyw2ICsxOTA0LDcgQEAKIAkJCQk4NjkwODMxNTBFNjUxOEQ3MDAwRDM2RUQgLyog
V1JFQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyog
U21hbGxTdHJpbmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0
NTNBNyAvKiBTdHJ1Y3R1cmVJRC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3RTJBREQ5MDBFNzlB
QzExMDBENTBDNTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IHdyZWMvQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gd3JlYy9DaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIHdy
ZWMvQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmgi
CisKKyNpZiBFTkFCTEUoV1JFQykKKworI2luY2x1ZGUgInBjcmVfaW50ZXJuYWwuaCIKKyNpbmNs
dWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3Bh
Y2UgSlNDIHsKKworc3RhdGljIGNvbnN0IFVDaGFyIGFzY2lpTmV3bGluZXNbMl0gPSB7ICdcbics
ICdccicgfTsKK3N0YXRpYyBjb25zdCBVQ2hhciB1bmljb2RlTmV3bGluZXNbMl0gPSB7IDB4MjAy
OCwgMHgyMDI5IH07CitDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NOZXdsaW5lKCkg
eworICAgIHN0YXRpYyBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSB7CisgICAgICAgIGFzY2lp
TmV3bGluZXMsIDIsCisgICAgICAgIDAsIDAsCisgICAgICAgIHVuaWNvZGVOZXdsaW5lcywgMiwK
KyAgICAgICAgMCwgMCwKKyAgICB9OworICAgIAorICAgIHJldHVybiBjaGFyQ2xhc3M7Cit9CisK
K3N0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIGFzY2lpRGlnaXRzUmFuZ2VbMV0gPSB7
IHsgJzAnLCAnOScgfSB9OworQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzRGlnaXRz
KCkgeworICAgIHN0YXRpYyBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSB7CisgICAgICAgIDAs
IDAsCisgICAgICAgIGFzY2lpRGlnaXRzUmFuZ2UsIDEsCisgICAgICAgIDAsIDAsCisgICAgICAg
IDAsIDAsCisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gY2hhckNsYXNzOworfQorCitzdGF0aWMg
Y29uc3QgVUNoYXIgYXNjaWlTcGFjZXNbMV0gPSB7ICcgJyB9Oworc3RhdGljIGNvbnN0IENoYXJh
Y3RlckNsYXNzUmFuZ2UgYXNjaWlTcGFjZXNSYW5nZVsxXSA9IHsgeyAnXHQnLCAnXHInIH0gfTsK
K3N0YXRpYyBjb25zdCBVQ2hhciB1bmljb2RlU3BhY2VzWzhdID0geyAweDAwYTAsIDB4MTY4MCwg
MHgxODBlLCAweDIwMjgsIDB4MjAyOSwgMHgyMDJmLCAweDIwNWYsIDB4MzAwMCB9Oworc3RhdGlj
IGNvbnN0IENoYXJhY3RlckNsYXNzUmFuZ2UgdW5pY29kZVNwYWNlc1JhbmdlWzFdID0geyB7IDB4
MjAwMCwgMHgyMDBhIH0gfTsKK0NoYXJhY3RlckNsYXNzJiBnZXRDaGFyYWN0ZXJDbGFzc1NwYWNl
cygpIHsKKyAgICBzdGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0geworICAgICAgICBh
c2NpaVNwYWNlcywgMSwKKyAgICAgICAgYXNjaWlTcGFjZXNSYW5nZSwgMSwKKyAgICAgICAgdW5p
Y29kZVNwYWNlcywgOCwKKyAgICAgICAgdW5pY29kZVNwYWNlc1JhbmdlLCAxLAorICAgIH07Cisg
ICAgCisgICAgcmV0dXJuIGNoYXJDbGFzczsKK30KKworc3RhdGljIGNvbnN0IFVDaGFyIGFzY2lp
V29yZGNoYXJbMV0gPSB7ICdfJyB9Oworc3RhdGljIGNvbnN0IENoYXJhY3RlckNsYXNzUmFuZ2Ug
YXNjaWlXb3JkY2hhclJhbmdlWzNdID0geyB7ICcwJywgJzknIH0sIHsgJ0EnLCAnWicgfSwgeyAn
YScsICd6JyB9IH07CitDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NXb3JkY2hhcigp
IHsKKyAgICBzdGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0geworICAgICAgICBhc2Np
aVdvcmRjaGFyLCAxLAorICAgICAgICBhc2NpaVdvcmRjaGFyUmFuZ2UsIDMsCisgICAgICAgIDAs
IDAsCisgICAgICAgIDAsIDAsCisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gY2hhckNsYXNzOwor
fQorCitzdGF0aWMgY29uc3QgQ2hhcmFjdGVyQ2xhc3NSYW5nZSBhc2NpaU5vbmRpZ2l0c1Jhbmdl
WzJdID0geyB7IDAsICcwJyAtIDEgfSwgeyAnOScgKyAxLCAweDdmIH0gfTsKK3N0YXRpYyBjb25z
dCBDaGFyYWN0ZXJDbGFzc1JhbmdlIHVuaWNvZGVOb25kaWdpdHNSYW5nZVsxXSA9IHsgeyAweDAw
ODAsIDB4ZmZmZiB9IH07CitDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NOb25kaWdp
dHMoKSB7CisgICAgc3RhdGljIENoYXJhY3RlckNsYXNzIGNoYXJDbGFzcyA9IHsKKyAgICAgICAg
MCwgMCwKKyAgICAgICAgYXNjaWlOb25kaWdpdHNSYW5nZSwgMiwKKyAgICAgICAgMCwgMCwKKyAg
ICAgICAgdW5pY29kZU5vbmRpZ2l0c1JhbmdlLCAxLAorICAgIH07CisgICAgCisgICAgcmV0dXJu
IGNoYXJDbGFzczsKK30KKworc3RhdGljIGNvbnN0IENoYXJhY3RlckNsYXNzUmFuZ2UgYXNjaWlO
b25zcGFjZXNSYW5nZVszXSA9IHsgeyAwLCAnXHQnIC0gMSB9LCB7ICdccicgKyAxLCAnICcgLSAx
IH0sIHsgJyAnICsgMSwgMHg3ZiB9IH07IAorc3RhdGljIGNvbnN0IENoYXJhY3RlckNsYXNzUmFu
Z2UgdW5pY29kZU5vbnNwYWNlc1JhbmdlWzldID0geworICAgIHsgMHgwMDgwLCAweDAwOWYgfSwK
KyAgICB7IDB4MDBhMSwgMHgxNjdmIH0sCisgICAgeyAweDE2ODEsIDB4MTgwZCB9LAorICAgIHsg
MHgxODBmLCAweDFmZmYgfSwKKyAgICB7IDB4MjAwYiwgMHgyMDI3IH0sCisgICAgeyAweDIwMmEs
IDB4MjAyZSB9LAorICAgIHsgMHgyMDMwLCAweDIwNWUgfSwKKyAgICB7IDB4MjA2MCwgMHgyZmZm
IH0sCisgICAgeyAweDMwMDEsIDB4ZmZmZiB9Cit9OyAKK0NoYXJhY3RlckNsYXNzJiBnZXRDaGFy
YWN0ZXJDbGFzc05vbnNwYWNlcygpIHsKKyAgICBzdGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNs
YXNzID0geworICAgICAgICAwLCAwLAorICAgICAgICBhc2NpaU5vbnNwYWNlc1JhbmdlLCAzLAor
ICAgICAgICAwLCAwLAorICAgICAgICB1bmljb2RlTm9uc3BhY2VzUmFuZ2UsIDksCisgICAgfTsK
KyAgICAKKyAgICByZXR1cm4gY2hhckNsYXNzOworfQorCitzdGF0aWMgY29uc3QgVUNoYXIgYXNj
aWlOb253b3JkY2hhclsxXSA9IHsgJ2AnIH07CitzdGF0aWMgY29uc3QgQ2hhcmFjdGVyQ2xhc3NS
YW5nZSBhc2NpaU5vbndvcmRjaGFyUmFuZ2VbNF0gPSB7IHsgMCwgJzAnIC0gMSB9LCB7ICc5JyAr
IDEsICdBJyAtIDEgfSwgeyAnWicgKyAxLCAnXycgLSAxIH0sIHsgJ3onICsgMSwgMHg3ZiB9IH07
CitzdGF0aWMgY29uc3QgQ2hhcmFjdGVyQ2xhc3NSYW5nZSB1bmljb2RlTm9ud29yZGNoYXJSYW5n
ZVsxXSA9IHsgeyAweDAwODAsIDB4ZmZmZiB9IH07CitDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFj
dGVyQ2xhc3NOb253b3JkY2hhcigpIHsKKyAgICBzdGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNs
YXNzID0geworICAgICAgICBhc2NpaU5vbndvcmRjaGFyLCAxLAorICAgICAgICBhc2NpaU5vbndv
cmRjaGFyUmFuZ2UsIDQsCisgICAgICAgIDAsIDAsCisgICAgICAgIHVuaWNvZGVOb253b3JkY2hh
clJhbmdlLCAxLAorICAgIH07CisgICAgCisgICAgcmV0dXJuIGNoYXJDbGFzczsKK30KKwordm9p
ZCBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjphZGRTb3J0ZWQoVmVjdG9yPFVDaGFyPiYgbWF0
Y2hlcywgVUNoYXIgY2gpCit7CisgICAgdW5zaWduZWQgcG9zID0gMDsKKyAgICB1bnNpZ25lZCBy
YW5nZSA9IG1hdGNoZXMuc2l6ZSgpOworCisgICAgLy8gYmluYXJ5IGNob3AsIGZpbmQgcG9zaXRp
b24gdG8gaW5zZXJ0IGNoYXIuCisgICAgd2hpbGUgKHJhbmdlKSB7CisgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gcmFuZ2UgPj4gMTsKKworICAgICAgICBpbnQgdmFsID0gbWF0Y2hlc1twb3MraW5k
ZXhdIC0gY2g7CisgICAgICAgIGlmICghdmFsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBlbHNlIGlmICh2YWwgPiAwKQorICAgICAgICAgICAgcmFuZ2UgPSBpbmRleDsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBwb3MgKz0gKGluZGV4KzEpOworICAgICAgICAgICAgcmFuZ2Ug
LT0gKGluZGV4KzEpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChwb3MgPT0gbWF0
Y2hlcy5zaXplKCkpCisgICAgICAgIG1hdGNoZXMuYXBwZW5kKGNoKTsKKyAgICBlbHNlCisgICAg
ICAgIG1hdGNoZXMuaW5zZXJ0KHBvcywgY2gpOworfQorCit2b2lkIENoYXJhY3RlckNsYXNzQ29u
c3RydWN0b3I6OmFkZFNvcnRlZFJhbmdlKFZlY3RvcjxDaGFyYWN0ZXJDbGFzc1JhbmdlPiYgcmFu
Z2VzLCBVQ2hhciBsbywgVUNoYXIgaGkpCit7CisgICAgdW5zaWduZWQgZW5kID0gcmFuZ2VzLnNp
emUoKTsKKyAgICAKKyAgICAvLyBTaW1wbGUgbGluZWFyIHNjYW4gLSBJIGRvdWJ0IHRoZXJlIGFy
ZSB0aGF0IG1hbnkgcmFuZ2VzIGFueXdheS4uLgorICAgIC8vIGZlZWwgZnJlZSB0byBmaXggdGhp
cyB3aXRoIHNvbWV0aGluZyBmYXN0ZXIgKGVnIGJpbmFyeSBjaG9wKS4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgLy8gZG9lcyB0aGUgbmV3IHJhbmdl
IGZhbGwgYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBhcnJheQorICAgICAgICBp
ZiAoaGkgPCByYW5nZXNbaV0uYmVnaW4pIHsKKyAgICAgICAgICAgIC8vIG9wdGlvbmFsIG9wdGlt
aXphdGlvbjogY29uY2F0ZW5hdGUgYXBwZW5kaW5nIHJhbmdlcz8gLSBtYXkgbm90IGJlIHdvcnRo
d2hpbGUuCisgICAgICAgICAgICBpZiAoaGkgPT0gKHJhbmdlc1tpXS5iZWdpbiAtIDEpKSB7Cisg
ICAgICAgICAgICAgICAgcmFuZ2VzW2ldLmJlZ2luID0gbG87CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ2hhcmFjdGVyQ2xhc3NSYW5nZSByID0g
e2xvLCBoaX07CisgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGksIHIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIE9rYXksIHNpbmNlIHdlIGRpZG4ndCBoaXQg
dGhlIGxhc3QgY2FzZSwgdGhlIGVuZCBvZiB0aGUgbmV3IHJhbmdlIGlzIGRlZmluaXRlbHkgYXQg
b3IgYWZ0ZXIgdGhlIGJlZ2luaW5nCisgICAgICAgIC8vIElmIHRoZSBuZXcgcmFuZ2Ugc3RhcnQg
YXQgb3IgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGxhc3QgcmFuZ2UsIHRoZW4gdGhlIG92ZXJsYXAg
KGlmIGl0IHN0YXJ0cyBvbmUgYWZ0ZXIgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgbGFzdCBy
YW5nZSB0aGV5IGNvbmNhdGVuYXRlLCB3aGljaCBpcyBqdXN0IGFzIGdvb2QuCisgICAgICAgIGlm
IChsbyA8PSAocmFuZ2VzW2ldLmVuZCArIDEpKSB7CisgICAgICAgICAgICAvLyBmb3VuZCBhbiBp
bnRlcnNlY3QhIHdlJ2xsIHJlcGxhY2UgdGhpcyBlbnRyeSBpbiB0aGUgYXJyYXkuCisgICAgICAg
ICAgICByYW5nZXNbaV0uYmVnaW4gPSBzdGQ6Om1pbihyYW5nZXNbaV0uYmVnaW4sIGxvKTsKKyAg
ICAgICAgICAgIHJhbmdlc1tpXS5lbmQgPSBzdGQ6Om1heChyYW5nZXNbaV0uZW5kLCBoaSk7CisK
KyAgICAgICAgICAgIC8vIG5vdyBjaGVjayBpZiB0aGUgbmV3IHJhbmdlIGNhbiBzdWJzdW1lIGFu
eSBzdWJzZXF1ZW50IHJhbmdlcy4KKyAgICAgICAgICAgIHVuc2lnbmVkIG5leHQgPSBpKzE7Cisg
ICAgICAgICAgICAvLyBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCB3ZSB3aWxsIGVpdGhlciBy
ZW1vdmUgc29tZXRoaW5nIGZyb20gdGhlIGxpc3QsIG9yIGJyZWFrIHRoZSBsb29wLgorICAgICAg
ICAgICAgd2hpbGUgKG5leHQgPCByYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHJhbmdlc1tuZXh0XS5iZWdpbiA8PSAocmFuZ2VzW2ldLmVuZCArIDEpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBuZXh0IGVudHJ5IG5vdyBvdmVybGFwcyAvIGNvbmNhdGVuYXRlcyB0
aGlzIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW2ldLmVuZCA9IHN0ZDo6bWF4KHJh
bmdlc1tpXS5lbmQsIHJhbmdlc1tuZXh0XS5lbmQpOworICAgICAgICAgICAgICAgICAgICByYW5n
ZXMucmVtb3ZlKG5leHQpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmFuZ2UgY29tZXMgYWZ0ZXIgYWxsIGV4
aXN0aW5nIHJhbmdlcy4KKyAgICBDaGFyYWN0ZXJDbGFzc1JhbmdlIHIgPSB7bG8sIGhpfTsKKyAg
ICByYW5nZXMuYXBwZW5kKHIpOworfQorCit2b2lkIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6
OnB1dChVQ2hhciBjaCkKK3sKKyAgICBpZiAobV9jaGFyQnVmZmVyICE9IC0xKSB7CisgICAgICAg
IGlmIChtX2lzUGVuZGluZ0Rhc2gpIHsKKyAgICAgICAgICAgIFVDaGFyIGxvID0gbV9jaGFyQnVm
ZmVyOworICAgICAgICAgICAgVUNoYXIgaGkgPSBjaDsKKyAgICAgICAgICAgIG1fY2hhckJ1ZmZl
ciA9IC0xOworICAgICAgICAgICAgbV9pc1BlbmRpbmdEYXNoID0gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChsbyA+IGhpKQorICAgICAgICAgICAgICAgIG1faXNVcHNpZGVE
b3duID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxvIDw9IDB4N2YpIHsK
KyAgICAgICAgICAgICAgICBjaGFyIGFzY2lpTG8gPSBsbzsKKyAgICAgICAgICAgICAgICBjaGFy
IGFzY2lpSGkgPSBzdGQ6Om1pbihoaSwgKFVDaGFyKTB4N2YpOworICAgICAgICAgICAgICAgIGFk
ZFNvcnRlZFJhbmdlKG1fcmFuZ2VzLCBsbywgYXNjaWlIaSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKG1faXNDYXNlSW5zZW5zaXRpdmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKChhc2NpaUxvIDw9ICdaJykgJiYgKGFzY2lpSGkgPj0gJ0EnKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFNvcnRlZFJhbmdlKG1fcmFuZ2VzLCBzdGQ6Om1heChhc2NpaUxv
LCAnQScpKygnYSctJ0EnKSwgc3RkOjptaW4oYXNjaWlIaSwgJ1onKSsoJ2EnLSdBJykpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoKGFzY2lpTG8gPD0gJ3onKSAmJiAoYXNjaWlIaSA+PSAnYScp
KQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2UobV9yYW5nZXMsIHN0ZDo6
bWF4KGFzY2lpTG8sICdhJykrKCdBJy0nYScpLCBzdGQ6Om1pbihhc2NpaUhpLCAneicpKygnQSct
J2EnKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGhpID49IDB4ODApIHsKKyAgICAgICAgICAgICAgICBVQ2hhciB1bmljb2RlQ3VyciA9IHN0ZDo6
bWF4KGxvLCAoVUNoYXIpMHg4MCk7CisgICAgICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2UobV9y
YW5nZXNVbmljb2RlLCB1bmljb2RlQ3VyciwgaGkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChtX2lzQ2FzZUluc2Vuc2l0aXZlKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIHdlJ3JlIGdvaW5nIHRvIHNjYW4gYWxvbmcsIHVwZGF0aW5nIHRoZSBzdGFydCBvZiB0aGUg
cmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHVuaWNvZGVDdXJyIDw9IGhpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGluIGZvcndhcmRzIG92ZXIgYW55IGNoYXJhY3Rl
cnMgdGhhdCBkb24ndCBoYXZlIHR3byBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoOyBranNfcGNyZV91Y3Bfb3RoZXJjYXNlKHVuaWNvZGVDdXJyKSA9PSAtMTsgKyt1bmljb2Rl
Q3VycikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgd2FzIHRoZSBs
YXN0IGNoYXJhY3RlciBpbiB0aGUgcmFuZ2UsIHdlJ3JlIGRvbmUuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHVuaWNvZGVDdXJyID09IGhpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiB3ZSBmYWxsIHRocm91Z2ggdG8gaGVyZSwgdW5pY29kZUN1cnIg
PD0gaGkgJiBoYXMgYW5vdGhlciBjYXNlLiBHZXQgdGhlIG90aGVyIGNhc2UuCisgICAgICAgICAg
ICAgICAgICAgICAgICBVQ2hhciByYW5nZVN0YXJ0ID0gdW5pY29kZUN1cnI7CisgICAgICAgICAg
ICAgICAgICAgICAgICBVQ2hhciBvdGhlckN1cnIgPSBranNfcGNyZV91Y3Bfb3RoZXJjYXNlKHVu
aWNvZGVDdXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdW5pY29kZUN1cnIgaXMgbm90IHlldCBoaSwgY2hlY2sgdGhlIG5leHQgY2hh
ciBpbiB0aGUgcmFuZ2UuICBJZiBpdCBhbHNvIGhhcyBhbm90aGVyIGNhc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhbmQgaWYgaXQncyBvdGhlciBjYXNlIHZhbHVlIGlzIG9uZSBncmVh
dGVyIHRoZW4gdGhlIG90aGVyY2FzZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgbGFzdAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyIGluY2x1ZGVkIGluIHRoZSByYW5nZSwgd2Ug
Y2FuIGluY2x1ZGUgbmV4dCBpbnRvIHRoZSByYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlICgodW5pY29kZUN1cnIgPCBoaSkgJiYgKGtqc19wY3JlX3VjcF9vdGhlcmNhc2UodW5p
Y29kZUN1cnIgKyAxKSA9PSAob3RoZXJDdXJyICsgMSkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaW5jcmVtZW50IHVuaWNvZGVDdXJyOyBpdCBwb2ludHMgdG8gdGhlIGVuZCBv
ZiB0aGUgcmFuZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IG90
aGVyQ3VyciwgZHVlIHRvIHRoZSBjaGVjayBhYm92ZSBvdGhlciBmb3IgbmV4dCBtdXN0IGJlIDEg
Z3JlYXRlciB0aGFuIHRoZSBjdXJycmVudCBvdGhlciB2YWx1ZS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArK3VuaWNvZGVDdXJyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsr
b3RoZXJDdXJyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlckNoYXIgaXMgdGhlIGxhc3Qg
aW4gdGhlIHJhbmdlIG9mIG90aGVyIGNhc2UgY2hhcnMsIGNhbGN1bGF0ZSBvZmZzZXQgdG8gZ2V0
IGJhY2sgdG8gdGhlIHN0YXJ0LgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkU29ydGVkUmFu
Z2UobV9yYW5nZXNVbmljb2RlLCBvdGhlckN1cnItKHVuaWNvZGVDdXJyLXJhbmdlU3RhcnQpLCBv
dGhlckN1cnIpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB1bmljb2RlQ3VyciBoYXMgYmVlbiBhZGRlZCwgbW92ZSBvbiB0byB0aGUgbmV4dCBj
aGFyLgorICAgICAgICAgICAgICAgICAgICAgICAgKyt1bmljb2RlQ3VycjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChjaCA9PSAnLScpIHsKKyAgICAgICAgICAgIG1faXNQZW5kaW5nRGFzaCA9IHRydWU7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmbHVzaCgpOworICAgICAgICAgICAgbV9j
aGFyQnVmZmVyID0gY2g7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV9jaGFyQnVm
ZmVyID0gY2g7Cit9CisKKy8vIFdoZW4gYSBjaGFyYWN0ZXIgaXMgYWRkZWQgdG8gdGhlIHNldCB3
ZSBkbyBub3QgaW1tZWRpYXRlbHkgYWRkIGl0IHRvIHRoZSBhcnJheXMsIGluIGNhc2UgaXQgaXMg
YWN0dWFsbHkgZGVmaW5pbmcgYSByYW5nZS4KKy8vIFdoZW4gd2UgaGF2ZSBkZXRlcm1pbmVkIHRo
ZSBjaGFyYWN0ZXIgaXMgbm90IHVzZWQgaW4gc3BlY2lmaW5nIGEgcmFuZ2UgaXQgaXMgYWRkZWQs
IGluIGEgc29ydGVkIGZhc2hpb24sIHRvIHRoZSBhcHByb3ByaWF0ZQorLy8gYXJyYXkgKGVpdGhl
ciBhc2NpaSBvciB1bmljb2RlKS4KKy8vIElmIHRoZSBwYXR0ZXJuIGlzIGNhc2UgaW5zZW5zaXRp
dmUgd2UgYWRkIGVudHJpZXMgZm9yIGJvdGggY2FzZXMuCit2b2lkIENoYXJhY3RlckNsYXNzQ29u
c3RydWN0b3I6OmZsdXNoKCkKK3sKKyAgICBpZiAobV9jaGFyQnVmZmVyICE9IC0xKSB7CisgICAg
ICAgIGlmIChtX2NoYXJCdWZmZXIgPD0gMHg3ZikgeworICAgICAgICAgICAgaWYgKG1faXNDYXNl
SW5zZW5zaXRpdmUgJiYgaXNBU0NJSUxvd2VyKG1fY2hhckJ1ZmZlcikpCisgICAgICAgICAgICAg
ICAgYWRkU29ydGVkKG1fbWF0Y2hlcywgdG9BU0NJSVVwcGVyKG1fY2hhckJ1ZmZlcikpOworICAg
ICAgICAgICAgYWRkU29ydGVkKG1fbWF0Y2hlcywgbV9jaGFyQnVmZmVyKTsKKyAgICAgICAgICAg
IGlmIChtX2lzQ2FzZUluc2Vuc2l0aXZlICYmIGlzQVNDSUlVcHBlcihtX2NoYXJCdWZmZXIpKQor
ICAgICAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNoZXMsIHRvQVNDSUlMb3dlcihtX2NoYXJC
dWZmZXIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNo
ZXNVbmljb2RlLCBtX2NoYXJCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1faXNDYXNlSW5zZW5z
aXRpdmUpIHsKKyAgICAgICAgICAgICAgICBpbnQgb3RoZXIgPSBranNfcGNyZV91Y3Bfb3RoZXJj
YXNlKG1fY2hhckJ1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKG90aGVyICE9IC0xKQorICAg
ICAgICAgICAgICAgICAgICBhZGRTb3J0ZWQobV9tYXRjaGVzVW5pY29kZSwgb3RoZXIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fY2hhckJ1ZmZlciA9IC0xOworICAgIH0K
KyAgICAKKyAgICBpZiAobV9pc1BlbmRpbmdEYXNoKSB7CisgICAgICAgIGFkZFNvcnRlZChtX21h
dGNoZXMsICctJyk7CisgICAgfQorfQorCit2b2lkIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6
OmFwcGVuZChDaGFyYWN0ZXJDbGFzcyYgb3RoZXIpCit7CisgICAgLy8gW3gtXHNdIHdpbGwgYWRk
LCAneCcsICctJywgYW5kIGFsbCB1bmljb2RlIHNwYWNlcyB0byBuZXcgY2xhc3MgKHNhbWUgYXMg
W3hccy1dKS4KKyAgICAvLyBOZWVkIHRvIGNoZWNrIHRoZSBzcGVjLCByZWFsbHksIGJ1dCB0aGlu
ayB0aGlzIG1hdGNoZXMgUENSRSBiZWhhdmlvdXIuCisgICAgZmx1c2goKTsKKyAgICAKKyAgICBp
ZiAob3RoZXIubnVtTWF0Y2hlcykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG90
aGVyLm51bU1hdGNoZXM7ICsraSkKKyAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNoZXMsIG90
aGVyLm1hdGNoZXNbaV0pOworICAgIH0KKyAgICBpZiAob3RoZXIubnVtUmFuZ2VzKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIubnVtUmFuZ2VzOyArK2kpCisgICAgICAg
ICAgICBhZGRTb3J0ZWRSYW5nZShtX3Jhbmdlcywgb3RoZXIucmFuZ2VzW2ldLmJlZ2luLCBvdGhl
ci5yYW5nZXNbaV0uZW5kKTsKKyAgICB9CisgICAgaWYgKG90aGVyLm51bU1hdGNoZXNVbmljb2Rl
KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIubnVtTWF0Y2hlc1VuaWNv
ZGU7ICsraSkKKyAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNoZXNVbmljb2RlLCBvdGhlci5t
YXRjaGVzVW5pY29kZVtpXSk7CisgICAgfQorICAgIGlmIChvdGhlci5udW1SYW5nZXNVbmljb2Rl
KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIubnVtUmFuZ2VzVW5pY29k
ZTsgKytpKQorICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2UobV9yYW5nZXNVbmljb2RlLCBvdGhl
ci5yYW5nZXNVbmljb2RlW2ldLmJlZ2luLCBvdGhlci5yYW5nZXNVbmljb2RlW2ldLmVuZCk7Cisg
ICAgfQorfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV1JFQykKSW5kZXg6IHdyZWMvQ2hhcmFj
dGVyQ2xhc3NDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdyZWMvQ2hhcmFjdGVyQ2xhc3ND
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQorKysgd3JlYy9DaGFyYWN0ZXJDbGFzc0NvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1
Y3Rvcl9oCisjZGVmaW5lIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3JfaAorCisjaWYgRU5BQkxF
KFdSRUMpCisKKyNpbmNsdWRlICJ1c3RyaW5nLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisgICAg
c3RydWN0IENoYXJhY3RlckNsYXNzUmFuZ2UgeworICAgICAgICBVQ2hhciBiZWdpbjsKKyAgICAg
ICAgVUNoYXIgZW5kOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2hhcmFjdGVyQ2xhc3MgeworICAg
ICAgICBjb25zdCBVQ2hhciogbWF0Y2hlczsKKyAgICAgICAgdW5zaWduZWQgbnVtTWF0Y2hlczsK
KworICAgICAgICBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlKiByYW5nZXM7CisgICAgICAgIHVu
c2lnbmVkIG51bVJhbmdlczsKKworICAgICAgICBjb25zdCBVQ2hhciogbWF0Y2hlc1VuaWNvZGU7
CisgICAgICAgIHVuc2lnbmVkIG51bU1hdGNoZXNVbmljb2RlOworCisgICAgICAgIGNvbnN0IENo
YXJhY3RlckNsYXNzUmFuZ2UqIHJhbmdlc1VuaWNvZGU7CisgICAgICAgIHVuc2lnbmVkIG51bVJh
bmdlc1VuaWNvZGU7CisgICAgfTsKKworICAgIENoYXJhY3RlckNsYXNzJiBnZXRDaGFyYWN0ZXJD
bGFzc05ld2xpbmUoKTsKKyAgICBDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NEaWdp
dHMoKTsKKyAgICBDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NTcGFjZXMoKTsKKyAg
ICBDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NXb3JkY2hhcigpOworICAgIENoYXJh
Y3RlckNsYXNzJiBnZXRDaGFyYWN0ZXJDbGFzc05vbmRpZ2l0cygpOworICAgIENoYXJhY3RlckNs
YXNzJiBnZXRDaGFyYWN0ZXJDbGFzc05vbnNwYWNlcygpOworICAgIENoYXJhY3RlckNsYXNzJiBn
ZXRDaGFyYWN0ZXJDbGFzc05vbndvcmRjaGFyKCk7CisKKyAgICBzdHJ1Y3QgQ2hhcmFjdGVyQ2xh
c3NDb25zdHJ1Y3RvciB7CisgICAgICAgIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IoYm9vbCBp
c0Nhc2VJbnNlbnNpdGl2ZSkKKyAgICAgICAgICAgIDogbV9jaGFyQnVmZmVyKC0xKQorICAgICAg
ICAgICAgLCBtX2lzUGVuZGluZ0Rhc2goZmFsc2UpCisgICAgICAgICAgICAsIG1faXNDYXNlSW5z
ZW5zaXRpdmUoaXNDYXNlSW5zZW5zaXRpdmUpCisgICAgICAgICAgICAsIG1faXNVcHNpZGVEb3du
KGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZsdXNoKCk7Cisg
ICAgICAgIHZvaWQgcHV0KFVDaGFyIGNoKTsKKyAgICAgICAgdm9pZCBhcHBlbmQoQ2hhcmFjdGVy
Q2xhc3MmIG90aGVyKTsKKworICAgICAgICBib29sIGlzQ2FzZUluc2Vuc2l0aXZlKCkgeyByZXR1
cm4gbV9pc0Nhc2VJbnNlbnNpdGl2ZTsgfQorICAgICAgICBib29sIGlzVXBzaWRlRG93bigpIHsg
cmV0dXJuIG1faXNVcHNpZGVEb3duOyB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBDaGFyYWN0
ZXJDbGFzcyBjaGFyQ2xhc3MoKQorICAgICAgICB7CisgICAgICAgICAgICBDaGFyYWN0ZXJDbGFz
cyBuZXdDaGFyQ2xhc3MgPSB7CisgICAgICAgICAgICAgICAgbV9tYXRjaGVzLmJlZ2luKCksIG1f
bWF0Y2hlcy5zaXplKCksCisgICAgICAgICAgICAgICAgbV9yYW5nZXMuYmVnaW4oKSwgbV9yYW5n
ZXMuc2l6ZSgpLAorICAgICAgICAgICAgICAgIG1fbWF0Y2hlc1VuaWNvZGUuYmVnaW4oKSwgbV9t
YXRjaGVzVW5pY29kZS5zaXplKCksCisgICAgICAgICAgICAgICAgbV9yYW5nZXNVbmljb2RlLmJl
Z2luKCksIG1fcmFuZ2VzVW5pY29kZS5zaXplKCksCisgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICByZXR1cm4gbmV3Q2hhckNsYXNzOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICB2b2lkIGFkZFNvcnRlZChWZWN0b3I8VUNoYXI+JiBtYXRjaGVzLCBVQ2hhciBjaCk7Cisg
ICAgICAgIHZvaWQgYWRkU29ydGVkUmFuZ2UoVmVjdG9yPENoYXJhY3RlckNsYXNzUmFuZ2U+JiBy
YW5nZXMsIFVDaGFyIGxvLCBVQ2hhciBoaSk7CisKKyAgICAgICAgaW50IG1fY2hhckJ1ZmZlcjsK
KyAgICAgICAgYm9vbCBtX2lzUGVuZGluZ0Rhc2g7CisgICAgICAgIGJvb2wgbV9pc0Nhc2VJbnNl
bnNpdGl2ZTsKKyAgICAgICAgYm9vbCBtX2lzVXBzaWRlRG93bjsKKworICAgICAgICBWZWN0b3I8
VUNoYXI+IG1fbWF0Y2hlczsKKyAgICAgICAgVmVjdG9yPENoYXJhY3RlckNsYXNzUmFuZ2U+IG1f
cmFuZ2VzOworICAgICAgICBWZWN0b3I8VUNoYXI+IG1fbWF0Y2hlc1VuaWNvZGU7CisgICAgICAg
IFZlY3RvcjxDaGFyYWN0ZXJDbGFzc1JhbmdlPiBtX3Jhbmdlc1VuaWNvZGU7CisgICAgfTsKKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFdSRUMpCisKKyNlbmRpZiAvLyBDaGFyYWN0ZXJDbGFzc0Nv
bnN0cnVjdG9yX2gKSW5kZXg6IHdyZWMvV1JFQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd3JlYy9XUkVD
LmNwcAkocmV2aXNpb24gMzYzMzMpCisrKyB3cmVjL1dSRUMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV1JFQykKIAorI2luY2x1ZGUgIkNoYXJhY3Rl
ckNsYXNzQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJN
YWNoaW5lLmgiCiAjaW5jbHVkZSAicGNyZV9pbnRlcm5hbC5oIgpAQCAtMzYsMzUyICszNyw2IEBA
IHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCi0vLyA9PT09IENoYXJh
Y3RlckNsYXNzID09PT0KLQotc3RydWN0IENoYXJhY3RlckNsYXNzUmFuZ2UgewotICAgIFVDaGFy
IGJlZ2luOwotICAgIFVDaGFyIGVuZDsKLX07Ci0KLXN0cnVjdCBDaGFyYWN0ZXJDbGFzcyB7Ci0g
ICAgY29uc3QgVUNoYXIqIG1hdGNoZXM7Ci0gICAgdW5zaWduZWQgbnVtTWF0Y2hlczsKLQotICAg
IGNvbnN0IENoYXJhY3RlckNsYXNzUmFuZ2UqIHJhbmdlczsKLSAgICB1bnNpZ25lZCBudW1SYW5n
ZXM7Ci0KLSAgICBjb25zdCBVQ2hhciogbWF0Y2hlc1VuaWNvZGU7Ci0gICAgdW5zaWduZWQgbnVt
TWF0Y2hlc1VuaWNvZGU7Ci0KLSAgICBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlKiByYW5nZXNV
bmljb2RlOwotICAgIHVuc2lnbmVkIG51bVJhbmdlc1VuaWNvZGU7Ci19OwotCi1zdGF0aWMgY29u
c3QgVUNoYXIgYXNjaWlOZXdsaW5lc1syXSA9IHsgJ1xuJywgJ1xyJyB9Owotc3RhdGljIGNvbnN0
IFVDaGFyIHVuaWNvZGVOZXdsaW5lc1syXSA9IHsgMHgyMDI4LCAweDIwMjkgfTsKLXN0YXRpYyBD
aGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NOZXdsaW5lKCkgewotICAgIHN0YXRpYyBD
aGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSB7Ci0gICAgICAgIGFzY2lpTmV3bGluZXMsIDIsCi0g
ICAgICAgIDAsIDAsCi0gICAgICAgIHVuaWNvZGVOZXdsaW5lcywgMiwKLSAgICAgICAgMCwgMCwK
LSAgICB9OwotICAgIAotICAgIHJldHVybiBjaGFyQ2xhc3M7Ci19Ci0KLXN0YXRpYyBjb25zdCBD
aGFyYWN0ZXJDbGFzc1JhbmdlIGFzY2lpRGlnaXRzUmFuZ2VbMV0gPSB7IHsgJzAnLCAnOScgfSB9
Owotc3RhdGljIENoYXJhY3RlckNsYXNzJiBnZXRDaGFyYWN0ZXJDbGFzc0RpZ2l0cygpIHsKLSAg
ICBzdGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0gewotICAgICAgICAwLCAwLAotICAg
ICAgICBhc2NpaURpZ2l0c1JhbmdlLCAxLAotICAgICAgICAwLCAwLAotICAgICAgICAwLCAwLAot
ICAgIH07Ci0gICAgCi0gICAgcmV0dXJuIGNoYXJDbGFzczsKLX0KLQotc3RhdGljIGNvbnN0IFVD
aGFyIGFzY2lpU3BhY2VzWzFdID0geyAnICcgfTsKLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFz
c1JhbmdlIGFzY2lpU3BhY2VzUmFuZ2VbMV0gPSB7IHsgJ1x0JywgJ1xyJyB9IH07Ci1zdGF0aWMg
Y29uc3QgVUNoYXIgdW5pY29kZVNwYWNlc1s4XSA9IHsgMHgwMGEwLCAweDE2ODAsIDB4MTgwZSwg
MHgyMDI4LCAweDIwMjksIDB4MjAyZiwgMHgyMDVmLCAweDMwMDAgfTsKLXN0YXRpYyBjb25zdCBD
aGFyYWN0ZXJDbGFzc1JhbmdlIHVuaWNvZGVTcGFjZXNSYW5nZVsxXSA9IHsgeyAweDIwMDAsIDB4
MjAwYSB9IH07Ci1zdGF0aWMgQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzU3BhY2Vz
KCkgewotICAgIHN0YXRpYyBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSB7Ci0gICAgICAgIGFz
Y2lpU3BhY2VzLCAxLAotICAgICAgICBhc2NpaVNwYWNlc1JhbmdlLCAxLAotICAgICAgICB1bmlj
b2RlU3BhY2VzLCA4LAotICAgICAgICB1bmljb2RlU3BhY2VzUmFuZ2UsIDEsCi0gICAgfTsKLSAg
ICAKLSAgICByZXR1cm4gY2hhckNsYXNzOwotfQotCi1zdGF0aWMgY29uc3QgVUNoYXIgYXNjaWlX
b3JkY2hhclsxXSA9IHsgJ18nIH07Ci1zdGF0aWMgY29uc3QgQ2hhcmFjdGVyQ2xhc3NSYW5nZSBh
c2NpaVdvcmRjaGFyUmFuZ2VbM10gPSB7IHsgJzAnLCAnOScgfSwgeyAnQScsICdaJyB9LCB7ICdh
JywgJ3onIH0gfTsKLXN0YXRpYyBDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NXb3Jk
Y2hhcigpIHsKLSAgICBzdGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0gewotICAgICAg
ICBhc2NpaVdvcmRjaGFyLCAxLAotICAgICAgICBhc2NpaVdvcmRjaGFyUmFuZ2UsIDMsCi0gICAg
ICAgIDAsIDAsCi0gICAgICAgIDAsIDAsCi0gICAgfTsKLSAgICAKLSAgICByZXR1cm4gY2hhckNs
YXNzOwotfQotCi1zdGF0aWMgY29uc3QgQ2hhcmFjdGVyQ2xhc3NSYW5nZSBhc2NpaU5vbmRpZ2l0
c1JhbmdlWzJdID0geyB7IDAsICcwJyAtIDEgfSwgeyAnOScgKyAxLCAweDdmIH0gfTsKLXN0YXRp
YyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIHVuaWNvZGVOb25kaWdpdHNSYW5nZVsxXSA9IHsg
eyAweDAwODAsIDB4ZmZmZiB9IH07Ci1zdGF0aWMgQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3Rl
ckNsYXNzTm9uZGlnaXRzKCkgewotICAgIHN0YXRpYyBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3Mg
PSB7Ci0gICAgICAgIDAsIDAsCi0gICAgICAgIGFzY2lpTm9uZGlnaXRzUmFuZ2UsIDIsCi0gICAg
ICAgIDAsIDAsCi0gICAgICAgIHVuaWNvZGVOb25kaWdpdHNSYW5nZSwgMSwKLSAgICB9OwotICAg
IAotICAgIHJldHVybiBjaGFyQ2xhc3M7Ci19Ci0KLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFz
c1JhbmdlIGFzY2lpTm9uc3BhY2VzUmFuZ2VbM10gPSB7IHsgMCwgJ1x0JyAtIDEgfSwgeyAnXHIn
ICsgMSwgJyAnIC0gMSB9LCB7ICcgJyArIDEsIDB4N2YgfSB9OyAKLXN0YXRpYyBjb25zdCBDaGFy
YWN0ZXJDbGFzc1JhbmdlIHVuaWNvZGVOb25zcGFjZXNSYW5nZVs5XSA9IHsKLSAgICB7IDB4MDA4
MCwgMHgwMDlmIH0sCi0gICAgeyAweDAwYTEsIDB4MTY3ZiB9LAotICAgIHsgMHgxNjgxLCAweDE4
MGQgfSwKLSAgICB7IDB4MTgwZiwgMHgxZmZmIH0sCi0gICAgeyAweDIwMGIsIDB4MjAyNyB9LAot
ICAgIHsgMHgyMDJhLCAweDIwMmUgfSwKLSAgICB7IDB4MjAzMCwgMHgyMDVlIH0sCi0gICAgeyAw
eDIwNjAsIDB4MmZmZiB9LAotICAgIHsgMHgzMDAxLCAweGZmZmYgfQotfTsgCi1zdGF0aWMgQ2hh
cmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzTm9uc3BhY2VzKCkgewotICAgIHN0YXRpYyBD
aGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSB7Ci0gICAgICAgIDAsIDAsCi0gICAgICAgIGFzY2lp
Tm9uc3BhY2VzUmFuZ2UsIDMsCi0gICAgICAgIDAsIDAsCi0gICAgICAgIHVuaWNvZGVOb25zcGFj
ZXNSYW5nZSwgOSwKLSAgICB9OwotICAgIAotICAgIHJldHVybiBjaGFyQ2xhc3M7Ci19Ci0KLXN0
YXRpYyBjb25zdCBVQ2hhciBhc2NpaU5vbndvcmRjaGFyWzFdID0geyAnYCcgfTsKLXN0YXRpYyBj
b25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIGFzY2lpTm9ud29yZGNoYXJSYW5nZVs0XSA9IHsgeyAw
LCAnMCcgLSAxIH0sIHsgJzknICsgMSwgJ0EnIC0gMSB9LCB7ICdaJyArIDEsICdfJyAtIDEgfSwg
eyAneicgKyAxLCAweDdmIH0gfTsKLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIHVu
aWNvZGVOb253b3JkY2hhclJhbmdlWzFdID0geyB7IDB4MDA4MCwgMHhmZmZmIH0gfTsKLXN0YXRp
YyBDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NOb253b3JkY2hhcigpIHsKLSAgICBz
dGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0gewotICAgICAgICBhc2NpaU5vbndvcmRj
aGFyLCAxLAotICAgICAgICBhc2NpaU5vbndvcmRjaGFyUmFuZ2UsIDQsCi0gICAgICAgIDAsIDAs
Ci0gICAgICAgIHVuaWNvZGVOb253b3JkY2hhclJhbmdlLCAxLAotICAgIH07Ci0gICAgCi0gICAg
cmV0dXJuIGNoYXJDbGFzczsKLX0KLQotc3RydWN0IENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3Ig
ewotICAgIFZlY3RvcjxVQ2hhcj4gbV9tYXRjaGVzOwotICAgIFZlY3RvcjxDaGFyYWN0ZXJDbGFz
c1JhbmdlPiBtX3JhbmdlczsKLSAgICBWZWN0b3I8VUNoYXI+IG1fbWF0Y2hlc1VuaWNvZGU7Ci0g
ICAgVmVjdG9yPENoYXJhY3RlckNsYXNzUmFuZ2U+IG1fcmFuZ2VzVW5pY29kZTsKLQotICAgIGlu
dCBtX2NoX2J1ZmZlcjsKLSAgICBib29sIG1fcGVuZGluZ19kYXNoOwotICAgIGJvb2wgbV9pZ25v
cmVDYXNlOwotICAgIGJvb2wgbV91cHNpZGVEb3duOwotICAgIAotICAgIENoYXJhY3RlckNsYXNz
Q29uc3RydWN0b3IoYm9vbCBpZ25vcmVDYXNlKQotICAgICAgICA6IG1fY2hfYnVmZmVyKC0xKQot
ICAgICAgICAsIG1fcGVuZGluZ19kYXNoKGZhbHNlKQotICAgICAgICAsIG1faWdub3JlQ2FzZShp
Z25vcmVDYXNlKQotICAgICAgICAsIG1fdXBzaWRlRG93bihmYWxzZSkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgZmx1c2goKTsKLSAgICB2b2lkIHB1dChVQ2hhciBjaCk7Ci0gICAgdm9p
ZCBhcHBlbmQoQ2hhcmFjdGVyQ2xhc3MmIG90aGVyKTsKLXByaXZhdGU6Ci0gICAgdm9pZCBhZGRT
b3J0ZWQoVmVjdG9yPFVDaGFyPiYgbWF0Y2hlcywgVUNoYXIgY2gpOwotICAgIHZvaWQgYWRkU29y
dGVkUmFuZ2UoVmVjdG9yPENoYXJhY3RlckNsYXNzUmFuZ2U+JiByYW5nZXMsIFVDaGFyIGxvLCBV
Q2hhciBoaSk7Ci19OwotCi12b2lkIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OmFkZFNvcnRl
ZChWZWN0b3I8VUNoYXI+JiBtYXRjaGVzLCBVQ2hhciBjaCkKLXsKLSAgICB1bnNpZ25lZCBwb3Mg
PSAwOwotICAgIHVuc2lnbmVkIHJhbmdlID0gbWF0Y2hlcy5zaXplKCk7Ci0KLSAgICAvLyBiaW5h
cnkgY2hvcCwgZmluZCBwb3NpdGlvbiB0byBpbnNlcnQgY2hhci4KLSAgICB3aGlsZSAocmFuZ2Up
IHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSByYW5nZSA+PiAxOwotCi0gICAgICAgIGludCB2
YWwgPSBtYXRjaGVzW3BvcytpbmRleF0gLSBjaDsKLSAgICAgICAgaWYgKCF2YWwpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGVsc2UgaWYgKHZhbCA+IDApCi0gICAgICAgICAgICByYW5n
ZSA9IGluZGV4OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBvcyArPSAoaW5kZXgrMSk7
Ci0gICAgICAgICAgICByYW5nZSAtPSAoaW5kZXgrMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHBvcyA9PSBtYXRjaGVzLnNpemUoKSkKLSAgICAgICAgbWF0Y2hlcy5hcHBlbmQo
Y2gpOwotICAgIGVsc2UKLSAgICAgICAgbWF0Y2hlcy5pbnNlcnQocG9zLCBjaCk7Ci19Ci0KLXZv
aWQgQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvcjo6YWRkU29ydGVkUmFuZ2UoVmVjdG9yPENoYXJh
Y3RlckNsYXNzUmFuZ2U+JiByYW5nZXMsIFVDaGFyIGxvLCBVQ2hhciBoaSkKLXsKLSAgICB1bnNp
Z25lZCBlbmQgPSByYW5nZXMuc2l6ZSgpOwotICAgIAotICAgIC8vIFNpbXBsZSBsaW5lYXIgc2Nh
biAtIEkgZG91YnQgdGhlcmUgYXJlIHRoYXQgbWFueSByYW5nZXMgYW55d2F5Li4uCi0gICAgLy8g
ZmVlbCBmcmVlIHRvIGZpeCB0aGlzIHdpdGggc29tZXRoaW5nIGZhc3RlciAoZWcgYmluYXJ5IGNo
b3ApLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAv
LyBkb2VzIHRoZSBuZXcgcmFuZ2UgZmFsbCBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4g
dGhlIGFycmF5Ci0gICAgICAgIGlmIChoaSA8IHJhbmdlc1tpXS5iZWdpbikgewotICAgICAgICAg
ICAgLy8gb3B0aW9uYWwgb3B0aW1pemF0aW9uOiBjb25jYXRlbmF0ZSBhcHBlbmRpbmcgcmFuZ2Vz
PyAtIG1heSBub3QgYmUgd29ydGh3aGlsZS4KLSAgICAgICAgICAgIGlmIChoaSA9PSAocmFuZ2Vz
W2ldLmJlZ2luIC0gMSkpIHsKLSAgICAgICAgICAgICAgICByYW5nZXNbaV0uYmVnaW4gPSBsbzsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDaGFy
YWN0ZXJDbGFzc1JhbmdlIHIgPSB7bG8sIGhpfTsKLSAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQo
aSwgcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gT2theSwg
c2luY2Ugd2UgZGlkbid0IGhpdCB0aGUgbGFzdCBjYXNlLCB0aGUgZW5kIG9mIHRoZSBuZXcgcmFu
Z2UgaXMgZGVmaW5pdGVseSBhdCBvciBhZnRlciB0aGUgYmVnaW5pbmcKLSAgICAgICAgLy8gSWYg
dGhlIG5ldyByYW5nZSBzdGFydCBhdCBvciBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgbGFzdCByYW5n
ZSwgdGhlbiB0aGUgb3ZlcmxhcCAoaWYgaXQgc3RhcnRzIG9uZSBhZnRlciB0aGUKLSAgICAgICAg
Ly8gZW5kIG9mIHRoZSBsYXN0IHJhbmdlIHRoZXkgY29uY2F0ZW5hdGUsIHdoaWNoIGlzIGp1c3Qg
YXMgZ29vZC4KLSAgICAgICAgaWYgKGxvIDw9IChyYW5nZXNbaV0uZW5kICsgMSkpIHsKLSAgICAg
ICAgICAgIC8vIGZvdW5kIGFuIGludGVyc2VjdCEgd2UnbGwgcmVwbGFjZSB0aGlzIGVudHJ5IGlu
IHRoZSBhcnJheS4KLSAgICAgICAgICAgIHJhbmdlc1tpXS5iZWdpbiA9IHN0ZDo6bWluKHJhbmdl
c1tpXS5iZWdpbiwgbG8pOwotICAgICAgICAgICAgcmFuZ2VzW2ldLmVuZCA9IHN0ZDo6bWF4KHJh
bmdlc1tpXS5lbmQsIGhpKTsKLQotICAgICAgICAgICAgLy8gbm93IGNoZWNrIGlmIHRoZSBuZXcg
cmFuZ2UgY2FuIHN1YnN1bWUgYW55IHN1YnNlcXVlbnQgcmFuZ2VzLgotICAgICAgICAgICAgdW5z
aWduZWQgbmV4dCA9IGkrMTsKLSAgICAgICAgICAgIC8vIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBs
b29wIHdlIHdpbGwgZWl0aGVyIHJlbW92ZSBzb21ldGhpbmcgZnJvbSB0aGUgbGlzdCwgb3IgYnJl
YWsgdGhlIGxvb3AuCi0gICAgICAgICAgICB3aGlsZSAobmV4dCA8IHJhbmdlcy5zaXplKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAocmFuZ2VzW25leHRdLmJlZ2luIDw9IChyYW5nZXNbaV0uZW5k
ICsgMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgZW50cnkgbm93IG92ZXJs
YXBzIC8gY29uY2F0ZW5hdGVzIHRoaXMgb25lLgotICAgICAgICAgICAgICAgICAgICByYW5nZXNb
aV0uZW5kID0gc3RkOjptYXgocmFuZ2VzW2ldLmVuZCwgcmFuZ2VzW25leHRdLmVuZCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJhbmdlcy5yZW1vdmUobmV4dCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSYW5n
ZSBjb21lcyBhZnRlciBhbGwgZXhpc3RpbmcgcmFuZ2VzLgotICAgIENoYXJhY3RlckNsYXNzUmFu
Z2UgciA9IHtsbywgaGl9OwotICAgIHJhbmdlcy5hcHBlbmQocik7Ci19Ci0KLXZvaWQgQ2hhcmFj
dGVyQ2xhc3NDb25zdHJ1Y3Rvcjo6cHV0KFVDaGFyIGNoKQotewotICAgIGlmIChtX2NoX2J1ZmZl
ciAhPSAtMSkgewotICAgICAgICBpZiAobV9wZW5kaW5nX2Rhc2gpIHsKLSAgICAgICAgICAgIFVD
aGFyIGxvID0gbV9jaF9idWZmZXI7Ci0gICAgICAgICAgICBVQ2hhciBoaSA9IGNoOwotICAgICAg
ICAgICAgbV9jaF9idWZmZXIgPSAtMTsKLSAgICAgICAgICAgIG1fcGVuZGluZ19kYXNoID0gZmFs
c2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsbyA+IGhpKQotICAgICAgICAgICAg
ICAgIG1fdXBzaWRlRG93biA9IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChs
byA8PSAweDdmKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBhc2NpaUxvID0gbG87Ci0gICAgICAg
ICAgICAgICAgY2hhciBhc2NpaUhpID0gc3RkOjptaW4oaGksIChVQ2hhcikweDdmKTsKLSAgICAg
ICAgICAgICAgICBhZGRTb3J0ZWRSYW5nZShtX3JhbmdlcywgbG8sIGFzY2lpSGkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX2lnbm9yZUNhc2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKChhc2NpaUxvIDw9ICdaJykgJiYgKGFzY2lpSGkgPj0gJ0EnKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFNvcnRlZFJhbmdlKG1fcmFuZ2VzLCBzdGQ6Om1heChh
c2NpaUxvLCAnQScpKygnYSctJ0EnKSwgc3RkOjptaW4oYXNjaWlIaSwgJ1onKSsoJ2EnLSdBJykp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoKGFzY2lpTG8gPD0gJ3onKSAmJiAoYXNjaWlIaSA+
PSAnYScpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2UobV9yYW5nZXMs
IHN0ZDo6bWF4KGFzY2lpTG8sICdhJykrKCdBJy0nYScpLCBzdGQ6Om1pbihhc2NpaUhpLCAneicp
KygnQSctJ2EnKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGhpID49IDB4ODApIHsKLSAgICAgICAgICAgICAgICBVQ2hhciB1bmljb2RlQ3VyciA9
IHN0ZDo6bWF4KGxvLCAoVUNoYXIpMHg4MCk7Ci0gICAgICAgICAgICAgICAgYWRkU29ydGVkUmFu
Z2UobV9yYW5nZXNVbmljb2RlLCB1bmljb2RlQ3VyciwgaGkpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChtX2lnbm9yZUNhc2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gd2UncmUgZ29pbmcgdG8gc2NhbiBhbG9uZywgdXBkYXRpbmcgdGhlIHN0YXJ0IG9mIHRoZSBy
YW5nZQotICAgICAgICAgICAgICAgICAgICB3aGlsZSAodW5pY29kZUN1cnIgPD0gaGkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNwaW4gZm9yd2FyZHMgb3ZlciBhbnkgY2hhcmFjdGVy
cyB0aGF0IGRvbid0IGhhdmUgdHdvIGNhc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICg7IGtqc19wY3JlX3VjcF9vdGhlcmNhc2UodW5pY29kZUN1cnIpID09IC0xOyArK3VuaWNvZGVD
dXJyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyB3YXMgdGhlIGxh
c3QgY2hhcmFjdGVyIGluIHRoZSByYW5nZSwgd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodW5pY29kZUN1cnIgPT0gaGkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGlmIHdlIGZhbGwgdGhyb3VnaCB0byBoZXJlLCB1bmljb2RlQ3VyciA8
PSBoaSAmIGhhcyBhbm90aGVyIGNhc2UuIEdldCB0aGUgb3RoZXIgY2FzZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIFVDaGFyIHJhbmdlU3RhcnQgPSB1bmljb2RlQ3VycjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFVDaGFyIG90aGVyQ3VyciA9IGtqc19wY3JlX3VjcF9vdGhlcmNhc2UodW5p
Y29kZUN1cnIpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB1bmljb2RlQ3VyciBpcyBub3QgeWV0IGhpLCBjaGVjayB0aGUgbmV4dCBjaGFy
IGluIHRoZSByYW5nZS4gIElmIGl0IGFsc28gaGFzIGFub3RoZXIgY2FzZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFuZCBpZiBpdCdzIG90aGVyIGNhc2UgdmFsdWUgaXMgb25lIGdyZWF0
ZXIgdGhlbiB0aGUgb3RoZXJjYXNlIHZhbHVlIGZvciB0aGUgY3VycmVudCBsYXN0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgaW5jbHVkZWQgaW4gdGhlIHJhbmdlLCB3ZSBj
YW4gaW5jbHVkZSBuZXh0IGludG8gdGhlIHJhbmdlLgotICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCh1bmljb2RlQ3VyciA8IGhpKSAmJiAoa2pzX3BjcmVfdWNwX290aGVyY2FzZSh1bmlj
b2RlQ3VyciArIDEpID09IChvdGhlckN1cnIgKyAxKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpbmNyZW1lbnQgdW5pY29kZUN1cnI7IGl0IHBvaW50cyB0byB0aGUgZW5kIG9m
IHRoZSByYW5nZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnQgb3Ro
ZXJDdXJyLCBkdWUgdG8gdGhlIGNoZWNrIGFib3ZlIG90aGVyIGZvciBuZXh0IG11c3QgYmUgMSBn
cmVhdGVyIHRoYW4gdGhlIGN1cnJyZW50IG90aGVyIHZhbHVlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsrdW5pY29kZUN1cnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytv
dGhlckN1cnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyQ2hhciBpcyB0aGUgbGFzdCBp
biB0aGUgcmFuZ2Ugb2Ygb3RoZXIgY2FzZSBjaGFycywgY2FsY3VsYXRlIG9mZnNldCB0byBnZXQg
YmFjayB0byB0aGUgc3RhcnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTb3J0ZWRSYW5n
ZShtX3Jhbmdlc1VuaWNvZGUsIG90aGVyQ3Vyci0odW5pY29kZUN1cnItcmFuZ2VTdGFydCksIG90
aGVyQ3Vycik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHVuaWNvZGVDdXJyIGhhcyBiZWVuIGFkZGVkLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNo
YXIuCi0gICAgICAgICAgICAgICAgICAgICAgICArK3VuaWNvZGVDdXJyOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKGNoID09ICctJykgewotICAgICAgICAgICAgbV9wZW5kaW5nX2Rhc2ggPSB0cnVlOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmx1c2goKTsKLSAgICAgICAgICAgIG1fY2hf
YnVmZmVyID0gY2g7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgbV9jaF9idWZmZXIg
PSBjaDsKLX0KLQotLy8gV2hlbiBhIGNoYXJhY3RlciBpcyBhZGRlZCB0byB0aGUgc2V0IHdlIGRv
IG5vdCBpbW1lZGlhdGVseSBhZGQgaXQgdG8gdGhlIGFycmF5cywgaW4gY2FzZSBpdCBpcyBhY3R1
YWxseSBkZWZpbmluZyBhIHJhbmdlLgotLy8gV2hlbiB3ZSBoYXZlIGRldGVybWluZWQgdGhlIGNo
YXJhY3RlciBpcyBub3QgdXNlZCBpbiBzcGVjaWZpbmcgYSByYW5nZSBpdCBpcyBhZGRlZCwgaW4g
YSBzb3J0ZWQgZmFzaGlvbiwgdG8gdGhlIGFwcHJvcHJpYXRlCi0vLyBhcnJheSAoZWl0aGVyIGFz
Y2lpIG9yIHVuaWNvZGUpLgotLy8gSWYgdGhlIHBhdHRlcm4gaXMgY2FzZSBpbnNlbnNpdGl2ZSB3
ZSBhZGQgZW50cmllcyBmb3IgYm90aCBjYXNlcy4KLXZvaWQgQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1
Y3Rvcjo6Zmx1c2goKQotewotICAgIGlmIChtX2NoX2J1ZmZlciAhPSAtMSkgewotICAgICAgICBp
ZiAobV9jaF9idWZmZXIgPD0gMHg3ZikgewotICAgICAgICAgICAgaWYgKG1faWdub3JlQ2FzZSAm
JiBpc0FTQ0lJTG93ZXIobV9jaF9idWZmZXIpKQotICAgICAgICAgICAgICAgIGFkZFNvcnRlZCht
X21hdGNoZXMsIHRvQVNDSUlVcHBlcihtX2NoX2J1ZmZlcikpOwotICAgICAgICAgICAgYWRkU29y
dGVkKG1fbWF0Y2hlcywgbV9jaF9idWZmZXIpOwotICAgICAgICAgICAgaWYgKG1faWdub3JlQ2Fz
ZSAmJiBpc0FTQ0lJVXBwZXIobV9jaF9idWZmZXIpKQotICAgICAgICAgICAgICAgIGFkZFNvcnRl
ZChtX21hdGNoZXMsIHRvQVNDSUlMb3dlcihtX2NoX2J1ZmZlcikpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgYWRkU29ydGVkKG1fbWF0Y2hlc1VuaWNvZGUsIG1fY2hfYnVmZmVyKTsK
LSAgICAgICAgICAgIGlmIChtX2lnbm9yZUNhc2UpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3Ro
ZXIgPSBranNfcGNyZV91Y3Bfb3RoZXJjYXNlKG1fY2hfYnVmZmVyKTsKLSAgICAgICAgICAgICAg
ICBpZiAob3RoZXIgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNo
ZXNVbmljb2RlLCBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9j
aF9idWZmZXIgPSAtMTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcGVuZGluZ19kYXNoKSB7Ci0g
ICAgICAgIGFkZFNvcnRlZChtX21hdGNoZXMsICctJyk7Ci0gICAgfQotfQotCi12b2lkIENoYXJh
Y3RlckNsYXNzQ29uc3RydWN0b3I6OmFwcGVuZChDaGFyYWN0ZXJDbGFzcyYgb3RoZXIpCi17Ci0g
ICAgLy8gW3gtXHNdIHdpbGwgYWRkLCAneCcsICctJywgYW5kIGFsbCB1bmljb2RlIHNwYWNlcyB0
byBuZXcgY2xhc3MgKHNhbWUgYXMgW3hccy1dKS4KLSAgICAvLyBOZWVkIHRvIGNoZWNrIHRoZSBz
cGVjLCByZWFsbHksIGJ1dCB0aGluayB0aGlzIG1hdGNoZXMgUENSRSBiZWhhdmlvdXIuCi0gICAg
Zmx1c2goKTsKLSAgICAKLSAgICBpZiAob3RoZXIubnVtTWF0Y2hlcykgewotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG90aGVyLm51bU1hdGNoZXM7ICsraSkKLSAgICAgICAgICAgIGFk
ZFNvcnRlZChtX21hdGNoZXMsIG90aGVyLm1hdGNoZXNbaV0pOwotICAgIH0KLSAgICBpZiAob3Ro
ZXIubnVtUmFuZ2VzKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIubnVt
UmFuZ2VzOyArK2kpCi0gICAgICAgICAgICBhZGRTb3J0ZWRSYW5nZShtX3Jhbmdlcywgb3RoZXIu
cmFuZ2VzW2ldLmJlZ2luLCBvdGhlci5yYW5nZXNbaV0uZW5kKTsKLSAgICB9Ci0gICAgaWYgKG90
aGVyLm51bU1hdGNoZXNVbmljb2RlKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3RoZXIubnVtTWF0Y2hlc1VuaWNvZGU7ICsraSkKLSAgICAgICAgICAgIGFkZFNvcnRlZChtX21h
dGNoZXNVbmljb2RlLCBvdGhlci5tYXRjaGVzVW5pY29kZVtpXSk7Ci0gICAgfQotICAgIGlmIChv
dGhlci5udW1SYW5nZXNVbmljb2RlKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3RoZXIubnVtUmFuZ2VzVW5pY29kZTsgKytpKQotICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2Uo
bV9yYW5nZXNVbmljb2RlLCBvdGhlci5yYW5nZXNVbmljb2RlW2ldLmJlZ2luLCBvdGhlci5yYW5n
ZXNVbmljb2RlW2ldLmVuZCk7Ci0gICAgfQotfQotCiBjbGFzcyBHZW5lcmF0ZUF0b21GdW5jdG9y
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HZW5lcmF0ZUF0b21GdW5jdG9yKCkge30KQEAgLTE0
MzcsMTkgKzEwOTIsMTMgQEAgYm9vbCBXUkVDUGFyc2VyOjpwYXJzZUNoYXJhY3RlckNsYXNzKEpt
cAogICAgIGNvbnN1bWUoKTsKIAogICAgIC8vIGxhemlseSBjYXRjaCByZXZlcnNlZCByYW5nZXMg
KFt6LWFdKWluIGNoYXJhY3RlciBjbGFzc2VzCi0gICAgaWYgKGNoYXJDbGFzc0NvbnN0cnVjdG9y
Lm1fdXBzaWRlRG93bikgeworICAgIGlmIChjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5pc1Vwc2lkZURv
d24oKSkgewogICAgICAgICBtX2VyciA9IEVycm9yX21hbGZvcm1lZENoYXJhY3RlckNsYXNzOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgY2hhckNsYXNzQ29uc3RydWN0b3Iu
Zmx1c2goKTsKLQotICAgIENoYXJhY3RlckNsYXNzIGNoYXJDbGFzcyA9IHsKLSAgICAgICAgY2hh
ckNsYXNzQ29uc3RydWN0b3IubV9tYXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzc0NvbnN0cnVjdG9y
Lm1fbWF0Y2hlcy5zaXplKCksCi0gICAgICAgIGNoYXJDbGFzc0NvbnN0cnVjdG9yLm1fcmFuZ2Vz
LmJlZ2luKCksIGNoYXJDbGFzc0NvbnN0cnVjdG9yLm1fcmFuZ2VzLnNpemUoKSwKLSAgICAgICAg
Y2hhckNsYXNzQ29uc3RydWN0b3IubV9tYXRjaGVzVW5pY29kZS5iZWdpbigpLCBjaGFyQ2xhc3ND
b25zdHJ1Y3Rvci5tX21hdGNoZXNVbmljb2RlLnNpemUoKSwKLSAgICAgICAgY2hhckNsYXNzQ29u
c3RydWN0b3IubV9yYW5nZXNVbmljb2RlLmJlZ2luKCksIGNoYXJDbGFzc0NvbnN0cnVjdG9yLm1f
cmFuZ2VzVW5pY29kZS5zaXplKCksCi0gICAgfTsKKyAgICBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xh
c3MgPSBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5jaGFyQ2xhc3MoKTsKICAgICByZXR1cm4gcGFyc2VD
aGFyYWN0ZXJDbGFzc1F1YW50aWZpZXIoZmFpbHVyZXMsIGNoYXJDbGFzcywgaW52ZXJ0KTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23358</attachid>
            <date>2008-09-11 13:39:18 -0700</date>
            <delta_ts>2008-09-11 14:07:07 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>charclass.diff</filename>
            <type>text/plain</type>
            <size>37550</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2MzM2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMDgtMDkt
MTEgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDIwNzg4OiBTcGxpdCBD
aGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yIGludG8gaXRzIG93biBmaWxlCisgICAgICAgIDxodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODg+CisKKyAgICAgICAgU3Bs
aXQgQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3RvciBpbnRvIGl0cyBvd24gZmlsZSBhbmQgY2xlYW4g
dXAgc29tZQorICAgICAgICBzdHlsZSBpc3N1ZXMuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Jl
Yy9DaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oik6
CisgICAgICAgIChKU0M6OmdldENoYXJhY3RlckNsYXNzTmV3bGluZSk6CisgICAgICAgIChKU0M6
OmdldENoYXJhY3RlckNsYXNzRGlnaXRzKToKKyAgICAgICAgKEpTQzo6Z2V0Q2hhcmFjdGVyQ2xh
c3NTcGFjZXMpOgorICAgICAgICAoSlNDOjpnZXRDaGFyYWN0ZXJDbGFzc1dvcmRjaGFyKToKKyAg
ICAgICAgKEpTQzo6Z2V0Q2hhcmFjdGVyQ2xhc3NOb25kaWdpdHMpOgorICAgICAgICAoSlNDOjpn
ZXRDaGFyYWN0ZXJDbGFzc05vbnNwYWNlcyk6CisgICAgICAgIChKU0M6OmdldENoYXJhY3RlckNs
YXNzTm9ud29yZGNoYXIpOgorICAgICAgICAoSlNDOjpDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9y
OjphZGRTb3J0ZWQpOgorICAgICAgICAoSlNDOjpDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjph
ZGRTb3J0ZWRSYW5nZSk6CisgICAgICAgIChKU0M6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6
OnB1dCk6CisgICAgICAgIChKU0M6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OmZsdXNoKToK
KyAgICAgICAgKEpTQzo6Q2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvcjo6YXBwZW5kKToKKyAgICAg
ICAgKiB3cmVjL0NoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3Ip
OgorICAgICAgICAoSlNDOjpDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjppc1Vwc2lkZURvd24p
OgorICAgICAgICAoSlNDOjpDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjpjaGFyQ2xhc3MpOgor
ICAgICAgICAqIHdyZWMvV1JFQy5jcHA6CisgICAgICAgIChKU0M6OldSRUNQYXJzZXI6OnBhcnNl
Q2hhcmFjdGVyQ2xhc3MpOgorCiAyMDA4LTA5LTEwICBTaW1vbiBIYXVzbWFubiAgPGhhdXNtYW5u
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkIGJ1dCB0cml2aWFsIG9uZS1saW5l
ciBmb3IgeWV0IHVudXNlZCBtYWNyby4KSW5kZXg6IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNp
b24gMzYzMzMpCisrKyBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU0LDYgKzEzNTQsMTMgQEAKIAkJ
CU5hbWU9IndyZWMiDQogCQkJPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
d3JlY1xDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHdyZWNcQ2hhcmFjdGVyQ2xhc3ND
b25zdHJ1Y3Rvci5oIg0KKwkJCQk+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwu
Llx3cmVjXFdSRUMuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzYzMzMpCisrKyBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2
ICs3NSw4IEBACiAJCTY1OTEyNkJEMEJERDE3MjgwMDE5MjFGQiAvKiBBbGxJbk9uZUZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5MTI2QkMw
QkREMTcyODAwMTkyMUZCIC8qIEFsbEluT25lRmlsZS5jcHAgKi87IH07CiAJCTY1REZDOTMzMDhF
QTE3M0EwMEY3MzAwQiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjVERkM5MkQwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJs
ZS5jcHAgKi87IH07CiAJCTY1RkRFNDlDMEJERDFENEEwMEU4MDExMSAvKiBBc3NlcnRpb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTIxN0I4
MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRpb25zLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElM
RVJfRkxBR1MgPSAiLVduby1taXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUiOyB9OyB9OworCQk3RTJB
REQ4RTBFNzlBQUQ1MDBENTBDNTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0UyQUREOEQwRTc5QUFE
NTAwRDUwQzUxIC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJN0UyQURE
OTAwRTc5QUMxMTAwRDUwQzUxIC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0UyQUREOEYwRTc5QUMx
MTAwRDUwQzUxIC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwICovOyB9OwogCQk4NjEz
RjQ1QTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MTNGNDU4MEUzQTQzM0UwMEM5NDhGRCAv
KiBTYW1wbGluZ1Rvb2wuY3BwICovOyB9OwogCQk4NjEzRjQ1QjBFM0E0MzNFMDBDOTQ4RkQgLyog
U2FtcGxpbmdUb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NjEzRjQ1OTBFM0E0MzNFMDBDOTQ4RkQgLyogU2FtcGxpbmdUb29sLmggKi87IH07CiAJ
CTg2ODNCMDJFMEU2MzY0ODIwMDRDMTlFRSAvKiBDVEkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4M0IwMkIwRTYzNjQ4MjAwNEMxOUVFIC8qIENU
SS5jcHAgKi87IH07CkBAIC01NzMsNiArNTc1LDggQEAKIAkJNjVFQTczNjMwQkFFMzVEMTAwMUJC
NTYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21tb25JZGVudGlmaWVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NUZCM0Y0ODA5RDExQjI0MDBGNDlERUIgLyogZ3JhbW1hci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gZ3JhbW1hci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5PYmpl
Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OworCQk3RTJBREQ4
RDBFNzlBQUQ1MDBENTBDNTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdFMkFERDhGMEU3OUFDMTEwMEQ1MEM1MSAvKiBD
aGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3RTJDNkM5ODBEMzFDNkI2MDAyRDQ0RTIgLyogU2NvcGVDaGFpbk1hcmsu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVDaGFpbk1hcmsuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxM0Y0NTgwRTNBNDMzRTAwQzk0OEZEIC8qIFNh
bXBsaW5nVG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTYW1w
bGluZ1Rvb2wuY3BwOyBwYXRoID0gVk0vU2FtcGxpbmdUb29sLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODYxM0Y0NTkwRTNBNDMzRTAwQzk0OEZEIC8qIFNhbXBsaW5nVG9vbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTYW1wbGluZ1Rvb2wuaDsgcGF0aCA9
IFZNL1NhbXBsaW5nVG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMyMiw2
ICsxMzI2LDggQEAKIAkJODY5MDgzMTIwRTY1MThENzAwMEQzNkVEIC8qIHdyZWMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTdFMkFERDhGMEU3OUFDMTEw
MEQ1MEM1MSAvKiBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQk3RTJBREQ4
RDBFNzlBQUQ1MDBENTBDNTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5oICovLAogCQkJ
CTg2OTA4MzEzMEU2NTE4RDcwMDBEMzZFRCAvKiBXUkVDLmNwcCAqLywKIAkJCQk4NjkwODMxNDBF
NjUxOEQ3MDAwRDM2RUQgLyogV1JFQy5oICovLAogCQkJKTsKQEAgLTE1ODcsNiArMTU5Myw3IEBA
CiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZUlELmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25P
cHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAv
KiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTdFMkFERDhFMEU3OUFBRDUw
MEQ1MEM1MSAvKiBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTE4OTcsNiArMTkwNCw3IEBACiAJCQkJODY5MDgzMTUwRTY1MThENzAwMEQzNkVEIC8qIFdSRUMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxs
U3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcg
LyogU3RydWN0dXJlSUQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0UyQUREOTAwRTc5QUMxMTAw
RDUwQzUxIC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiB3cmVjL0NoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdy
ZWMvQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCisrKyB3cmVjL0No
YXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5oIgorCisj
aWYgRU5BQkxFKFdSRUMpCisKKyNpbmNsdWRlICJwY3JlX2ludGVybmFsLmgiCisjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0YXRpYyBjb25zdCBVQ2hhciBhc2NpaU5ld2xpbmVzWzJdID0geyAnXG4nLCAnXHIn
IH07CitzdGF0aWMgY29uc3QgVUNoYXIgdW5pY29kZU5ld2xpbmVzWzJdID0geyAweDIwMjgsIDB4
MjAyOSB9OworQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzTmV3bGluZSgpIHsKKyAg
ICBzdGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0geworICAgICAgICBhc2NpaU5ld2xp
bmVzLCAyLAorICAgICAgICAwLCAwLAorICAgICAgICB1bmljb2RlTmV3bGluZXMsIDIsCisgICAg
ICAgIDAsIDAsCisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gY2hhckNsYXNzOworfQorCitzdGF0
aWMgY29uc3QgQ2hhcmFjdGVyQ2xhc3NSYW5nZSBhc2NpaURpZ2l0c1JhbmdlWzFdID0geyB7ICcw
JywgJzknIH0gfTsKK0NoYXJhY3RlckNsYXNzJiBnZXRDaGFyYWN0ZXJDbGFzc0RpZ2l0cygpIHsK
KyAgICBzdGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0geworICAgICAgICAwLCAwLAor
ICAgICAgICBhc2NpaURpZ2l0c1JhbmdlLCAxLAorICAgICAgICAwLCAwLAorICAgICAgICAwLCAw
LAorICAgIH07CisgICAgCisgICAgcmV0dXJuIGNoYXJDbGFzczsKK30KKworc3RhdGljIGNvbnN0
IFVDaGFyIGFzY2lpU3BhY2VzWzFdID0geyAnICcgfTsKK3N0YXRpYyBjb25zdCBDaGFyYWN0ZXJD
bGFzc1JhbmdlIGFzY2lpU3BhY2VzUmFuZ2VbMV0gPSB7IHsgJ1x0JywgJ1xyJyB9IH07CitzdGF0
aWMgY29uc3QgVUNoYXIgdW5pY29kZVNwYWNlc1s4XSA9IHsgMHgwMGEwLCAweDE2ODAsIDB4MTgw
ZSwgMHgyMDI4LCAweDIwMjksIDB4MjAyZiwgMHgyMDVmLCAweDMwMDAgfTsKK3N0YXRpYyBjb25z
dCBDaGFyYWN0ZXJDbGFzc1JhbmdlIHVuaWNvZGVTcGFjZXNSYW5nZVsxXSA9IHsgeyAweDIwMDAs
IDB4MjAwYSB9IH07CitDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NTcGFjZXMoKSB7
CisgICAgc3RhdGljIENoYXJhY3RlckNsYXNzIGNoYXJDbGFzcyA9IHsKKyAgICAgICAgYXNjaWlT
cGFjZXMsIDEsCisgICAgICAgIGFzY2lpU3BhY2VzUmFuZ2UsIDEsCisgICAgICAgIHVuaWNvZGVT
cGFjZXMsIDgsCisgICAgICAgIHVuaWNvZGVTcGFjZXNSYW5nZSwgMSwKKyAgICB9OworICAgIAor
ICAgIHJldHVybiBjaGFyQ2xhc3M7Cit9CisKK3N0YXRpYyBjb25zdCBVQ2hhciBhc2NpaVdvcmRj
aGFyWzFdID0geyAnXycgfTsKK3N0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIGFzY2lp
V29yZGNoYXJSYW5nZVszXSA9IHsgeyAnMCcsICc5JyB9LCB7ICdBJywgJ1onIH0sIHsgJ2EnLCAn
eicgfSB9OworQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzV29yZGNoYXIoKSB7Cisg
ICAgc3RhdGljIENoYXJhY3RlckNsYXNzIGNoYXJDbGFzcyA9IHsKKyAgICAgICAgYXNjaWlXb3Jk
Y2hhciwgMSwKKyAgICAgICAgYXNjaWlXb3JkY2hhclJhbmdlLCAzLAorICAgICAgICAwLCAwLAor
ICAgICAgICAwLCAwLAorICAgIH07CisgICAgCisgICAgcmV0dXJuIGNoYXJDbGFzczsKK30KKwor
c3RhdGljIGNvbnN0IENoYXJhY3RlckNsYXNzUmFuZ2UgYXNjaWlOb25kaWdpdHNSYW5nZVsyXSA9
IHsgeyAwLCAnMCcgLSAxIH0sIHsgJzknICsgMSwgMHg3ZiB9IH07CitzdGF0aWMgY29uc3QgQ2hh
cmFjdGVyQ2xhc3NSYW5nZSB1bmljb2RlTm9uZGlnaXRzUmFuZ2VbMV0gPSB7IHsgMHgwMDgwLCAw
eGZmZmYgfSB9OworQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzTm9uZGlnaXRzKCkg
eworICAgIHN0YXRpYyBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSB7CisgICAgICAgIDAsIDAs
CisgICAgICAgIGFzY2lpTm9uZGlnaXRzUmFuZ2UsIDIsCisgICAgICAgIDAsIDAsCisgICAgICAg
IHVuaWNvZGVOb25kaWdpdHNSYW5nZSwgMSwKKyAgICB9OworICAgIAorICAgIHJldHVybiBjaGFy
Q2xhc3M7Cit9CisKK3N0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIGFzY2lpTm9uc3Bh
Y2VzUmFuZ2VbM10gPSB7IHsgMCwgJ1x0JyAtIDEgfSwgeyAnXHInICsgMSwgJyAnIC0gMSB9LCB7
ICcgJyArIDEsIDB4N2YgfSB9OyAKK3N0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIHVu
aWNvZGVOb25zcGFjZXNSYW5nZVs5XSA9IHsKKyAgICB7IDB4MDA4MCwgMHgwMDlmIH0sCisgICAg
eyAweDAwYTEsIDB4MTY3ZiB9LAorICAgIHsgMHgxNjgxLCAweDE4MGQgfSwKKyAgICB7IDB4MTgw
ZiwgMHgxZmZmIH0sCisgICAgeyAweDIwMGIsIDB4MjAyNyB9LAorICAgIHsgMHgyMDJhLCAweDIw
MmUgfSwKKyAgICB7IDB4MjAzMCwgMHgyMDVlIH0sCisgICAgeyAweDIwNjAsIDB4MmZmZiB9LAor
ICAgIHsgMHgzMDAxLCAweGZmZmYgfQorfTsgCitDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVy
Q2xhc3NOb25zcGFjZXMoKSB7CisgICAgc3RhdGljIENoYXJhY3RlckNsYXNzIGNoYXJDbGFzcyA9
IHsKKyAgICAgICAgMCwgMCwKKyAgICAgICAgYXNjaWlOb25zcGFjZXNSYW5nZSwgMywKKyAgICAg
ICAgMCwgMCwKKyAgICAgICAgdW5pY29kZU5vbnNwYWNlc1JhbmdlLCA5LAorICAgIH07CisgICAg
CisgICAgcmV0dXJuIGNoYXJDbGFzczsKK30KKworc3RhdGljIGNvbnN0IFVDaGFyIGFzY2lpTm9u
d29yZGNoYXJbMV0gPSB7ICdgJyB9Oworc3RhdGljIGNvbnN0IENoYXJhY3RlckNsYXNzUmFuZ2Ug
YXNjaWlOb253b3JkY2hhclJhbmdlWzRdID0geyB7IDAsICcwJyAtIDEgfSwgeyAnOScgKyAxLCAn
QScgLSAxIH0sIHsgJ1onICsgMSwgJ18nIC0gMSB9LCB7ICd6JyArIDEsIDB4N2YgfSB9Oworc3Rh
dGljIGNvbnN0IENoYXJhY3RlckNsYXNzUmFuZ2UgdW5pY29kZU5vbndvcmRjaGFyUmFuZ2VbMV0g
PSB7IHsgMHgwMDgwLCAweGZmZmYgfSB9OworQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNs
YXNzTm9ud29yZGNoYXIoKSB7CisgICAgc3RhdGljIENoYXJhY3RlckNsYXNzIGNoYXJDbGFzcyA9
IHsKKyAgICAgICAgYXNjaWlOb253b3JkY2hhciwgMSwKKyAgICAgICAgYXNjaWlOb253b3JkY2hh
clJhbmdlLCA0LAorICAgICAgICAwLCAwLAorICAgICAgICB1bmljb2RlTm9ud29yZGNoYXJSYW5n
ZSwgMSwKKyAgICB9OworICAgIAorICAgIHJldHVybiBjaGFyQ2xhc3M7Cit9CisKK3ZvaWQgQ2hh
cmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvcjo6YWRkU29ydGVkKFZlY3RvcjxVQ2hhcj4mIG1hdGNoZXMs
IFVDaGFyIGNoKQoreworICAgIHVuc2lnbmVkIHBvcyA9IDA7CisgICAgdW5zaWduZWQgcmFuZ2Ug
PSBtYXRjaGVzLnNpemUoKTsKKworICAgIC8vIGJpbmFyeSBjaG9wLCBmaW5kIHBvc2l0aW9uIHRv
IGluc2VydCBjaGFyLgorICAgIHdoaWxlIChyYW5nZSkgeworICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IHJhbmdlID4+IDE7CisKKyAgICAgICAgaW50IHZhbCA9IG1hdGNoZXNbcG9zK2luZGV4XSAt
IGNoOworICAgICAgICBpZiAoIXZhbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxz
ZSBpZiAodmFsID4gMCkKKyAgICAgICAgICAgIHJhbmdlID0gaW5kZXg7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgcG9zICs9IChpbmRleCsxKTsKKyAgICAgICAgICAgIHJhbmdlIC09IChp
bmRleCsxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAocG9zID09IG1hdGNoZXMu
c2l6ZSgpKQorICAgICAgICBtYXRjaGVzLmFwcGVuZChjaCk7CisgICAgZWxzZQorICAgICAgICBt
YXRjaGVzLmluc2VydChwb3MsIGNoKTsKK30KKwordm9pZCBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVj
dG9yOjphZGRTb3J0ZWRSYW5nZShWZWN0b3I8Q2hhcmFjdGVyQ2xhc3NSYW5nZT4mIHJhbmdlcywg
VUNoYXIgbG8sIFVDaGFyIGhpKQoreworICAgIHVuc2lnbmVkIGVuZCA9IHJhbmdlcy5zaXplKCk7
CisgICAgCisgICAgLy8gU2ltcGxlIGxpbmVhciBzY2FuIC0gSSBkb3VidCB0aGVyZSBhcmUgdGhh
dCBtYW55IHJhbmdlcyBhbnl3YXkuLi4KKyAgICAvLyBmZWVsIGZyZWUgdG8gZml4IHRoaXMgd2l0
aCBzb21ldGhpbmcgZmFzdGVyIChlZyBiaW5hcnkgY2hvcCkuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgIC8vIGRvZXMgdGhlIG5ldyByYW5nZSBmYWxs
IGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYXJyYXkKKyAgICAgICAgaWYgKGhp
IDwgcmFuZ2VzW2ldLmJlZ2luKSB7CisgICAgICAgICAgICAvLyBvcHRpb25hbCBvcHRpbWl6YXRp
b246IGNvbmNhdGVuYXRlIGFwcGVuZGluZyByYW5nZXM/IC0gbWF5IG5vdCBiZSB3b3J0aHdoaWxl
LgorICAgICAgICAgICAgaWYgKGhpID09IChyYW5nZXNbaV0uYmVnaW4gLSAxKSkgeworICAgICAg
ICAgICAgICAgIHJhbmdlc1tpXS5iZWdpbiA9IGxvOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENoYXJhY3RlckNsYXNzUmFuZ2UgciA9IHtsbywg
aGl9OworICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpLCByKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAvLyBPa2F5LCBzaW5jZSB3ZSBkaWRuJ3QgaGl0IHRoZSBs
YXN0IGNhc2UsIHRoZSBlbmQgb2YgdGhlIG5ldyByYW5nZSBpcyBkZWZpbml0ZWx5IGF0IG9yIGFm
dGVyIHRoZSBiZWdpbmluZworICAgICAgICAvLyBJZiB0aGUgbmV3IHJhbmdlIHN0YXJ0IGF0IG9y
IGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBsYXN0IHJhbmdlLCB0aGVuIHRoZSBvdmVybGFwIChpZiBp
dCBzdGFydHMgb25lIGFmdGVyIHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIGxhc3QgcmFuZ2Ug
dGhleSBjb25jYXRlbmF0ZSwgd2hpY2ggaXMganVzdCBhcyBnb29kLgorICAgICAgICBpZiAobG8g
PD0gKHJhbmdlc1tpXS5lbmQgKyAxKSkgeworICAgICAgICAgICAgLy8gZm91bmQgYW4gaW50ZXJz
ZWN0ISB3ZSdsbCByZXBsYWNlIHRoaXMgZW50cnkgaW4gdGhlIGFycmF5LgorICAgICAgICAgICAg
cmFuZ2VzW2ldLmJlZ2luID0gc3RkOjptaW4ocmFuZ2VzW2ldLmJlZ2luLCBsbyk7CisgICAgICAg
ICAgICByYW5nZXNbaV0uZW5kID0gc3RkOjptYXgocmFuZ2VzW2ldLmVuZCwgaGkpOworCisgICAg
ICAgICAgICAvLyBub3cgY2hlY2sgaWYgdGhlIG5ldyByYW5nZSBjYW4gc3Vic3VtZSBhbnkgc3Vi
c2VxdWVudCByYW5nZXMuCisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0ID0gaSsxOworICAgICAg
ICAgICAgLy8gZWFjaCBpdGVyYXRpb24gb2YgdGhlIGxvb3Agd2Ugd2lsbCBlaXRoZXIgcmVtb3Zl
IHNvbWV0aGluZyBmcm9tIHRoZSBsaXN0LCBvciBicmVhayB0aGUgbG9vcC4KKyAgICAgICAgICAg
IHdoaWxlIChuZXh0IDwgcmFuZ2VzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGlmIChyYW5n
ZXNbbmV4dF0uYmVnaW4gPD0gKHJhbmdlc1tpXS5lbmQgKyAxKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgbmV4dCBlbnRyeSBub3cgb3ZlcmxhcHMgLyBjb25jYXRlbmF0ZXMgdGhpcyBv
bmUuCisgICAgICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5lbmQgPSBzdGQ6Om1heChyYW5nZXNb
aV0uZW5kLCByYW5nZXNbbmV4dF0uZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnJl
bW92ZShuZXh0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJhbmdlIGNvbWVzIGFmdGVyIGFsbCBleGlzdGlu
ZyByYW5nZXMuCisgICAgQ2hhcmFjdGVyQ2xhc3NSYW5nZSByID0ge2xvLCBoaX07CisgICAgcmFu
Z2VzLmFwcGVuZChyKTsKK30KKwordm9pZCBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjpwdXQo
VUNoYXIgY2gpCit7CisgICAgaWYgKG1fY2hhckJ1ZmZlciAhPSAtMSkgeworICAgICAgICBpZiAo
bV9pc1BlbmRpbmdEYXNoKSB7CisgICAgICAgICAgICBVQ2hhciBsbyA9IG1fY2hhckJ1ZmZlcjsK
KyAgICAgICAgICAgIFVDaGFyIGhpID0gY2g7CisgICAgICAgICAgICBtX2NoYXJCdWZmZXIgPSAt
MTsKKyAgICAgICAgICAgIG1faXNQZW5kaW5nRGFzaCA9IGZhbHNlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobG8gPiBoaSkKKyAgICAgICAgICAgICAgICBtX2lzVXBzaWRlRG93biA9
IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChsbyA8PSAweDdmKSB7CisgICAg
ICAgICAgICAgICAgY2hhciBhc2NpaUxvID0gbG87CisgICAgICAgICAgICAgICAgY2hhciBhc2Np
aUhpID0gc3RkOjptaW4oaGksIChVQ2hhcikweDdmKTsKKyAgICAgICAgICAgICAgICBhZGRTb3J0
ZWRSYW5nZShtX3JhbmdlcywgbG8sIGFzY2lpSGkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChtX2lzQ2FzZUluc2Vuc2l0aXZlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICgoYXNjaWlMbyA8PSAnWicpICYmIChhc2NpaUhpID49ICdBJykpCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRTb3J0ZWRSYW5nZShtX3Jhbmdlcywgc3RkOjptYXgoYXNjaWlMbywgJ0En
KSsoJ2EnLSdBJyksIHN0ZDo6bWluKGFzY2lpSGksICdaJykrKCdhJy0nQScpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKChhc2NpaUxvIDw9ICd6JykgJiYgKGFzY2lpSGkgPj0gJ2EnKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFNvcnRlZFJhbmdlKG1fcmFuZ2VzLCBzdGQ6Om1heChh
c2NpaUxvLCAnYScpKygnQSctJ2EnKSwgc3RkOjptaW4oYXNjaWlIaSwgJ3onKSsoJ0EnLSdhJykp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoaSA+
PSAweDgwKSB7CisgICAgICAgICAgICAgICAgVUNoYXIgdW5pY29kZUN1cnIgPSBzdGQ6Om1heChs
bywgKFVDaGFyKTB4ODApOworICAgICAgICAgICAgICAgIGFkZFNvcnRlZFJhbmdlKG1fcmFuZ2Vz
VW5pY29kZSwgdW5pY29kZUN1cnIsIGhpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAobV9pc0Nhc2VJbnNlbnNpdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyB3
ZSdyZSBnb2luZyB0byBzY2FuIGFsb25nLCB1cGRhdGluZyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdl
CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh1bmljb2RlQ3VyciA8PSBoaSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3BpbiBmb3J3YXJkcyBvdmVyIGFueSBjaGFyYWN0ZXJzIHRo
YXQgZG9uJ3QgaGF2ZSB0d28gY2FzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsg
a2pzX3BjcmVfdWNwX290aGVyY2FzZSh1bmljb2RlQ3VycikgPT0gLTE7ICsrdW5pY29kZUN1cnIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIHdhcyB0aGUgbGFzdCBj
aGFyYWN0ZXIgaW4gdGhlIHJhbmdlLCB3ZSdyZSBkb25lLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh1bmljb2RlQ3VyciA9PSBoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaWYgd2UgZmFsbCB0aHJvdWdoIHRvIGhlcmUsIHVuaWNvZGVDdXJyIDw9IGhp
ICYgaGFzIGFub3RoZXIgY2FzZS4gR2V0IHRoZSBvdGhlciBjYXNlLgorICAgICAgICAgICAgICAg
ICAgICAgICAgVUNoYXIgcmFuZ2VTdGFydCA9IHVuaWNvZGVDdXJyOworICAgICAgICAgICAgICAg
ICAgICAgICAgVUNoYXIgb3RoZXJDdXJyID0ga2pzX3BjcmVfdWNwX290aGVyY2FzZSh1bmljb2Rl
Q3Vycik7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHVuaWNvZGVDdXJyIGlzIG5vdCB5ZXQgaGksIGNoZWNrIHRoZSBuZXh0IGNoYXIgaW4g
dGhlIHJhbmdlLiAgSWYgaXQgYWxzbyBoYXMgYW5vdGhlciBjYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYW5kIGlmIGl0J3Mgb3RoZXIgY2FzZSB2YWx1ZSBpcyBvbmUgZ3JlYXRlciB0
aGVuIHRoZSBvdGhlcmNhc2UgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGxhc3QKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYXJhY3RlciBpbmNsdWRlZCBpbiB0aGUgcmFuZ2UsIHdlIGNhbiBp
bmNsdWRlIG5leHQgaW50byB0aGUgcmFuZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoKHVuaWNvZGVDdXJyIDwgaGkpICYmIChranNfcGNyZV91Y3Bfb3RoZXJjYXNlKHVuaWNvZGVD
dXJyICsgMSkgPT0gKG90aGVyQ3VyciArIDEpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGluY3JlbWVudCB1bmljb2RlQ3VycjsgaXQgcG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhl
IHJhbmdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCBvdGhlckN1
cnIsIGR1ZSB0byB0aGUgY2hlY2sgYWJvdmUgb3RoZXIgZm9yIG5leHQgbXVzdCBiZSAxIGdyZWF0
ZXIgdGhhbiB0aGUgY3VycnJlbnQgb3RoZXIgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKyt1bmljb2RlQ3VycjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK290aGVy
Q3VycjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJDaGFyIGlzIHRoZSBsYXN0IGluIHRo
ZSByYW5nZSBvZiBvdGhlciBjYXNlIGNoYXJzLCBjYWxjdWxhdGUgb2Zmc2V0IHRvIGdldCBiYWNr
IHRvIHRoZSBzdGFydC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFNvcnRlZFJhbmdlKG1f
cmFuZ2VzVW5pY29kZSwgb3RoZXJDdXJyLSh1bmljb2RlQ3Vyci1yYW5nZVN0YXJ0KSwgb3RoZXJD
dXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdW5pY29kZUN1cnIgaGFzIGJlZW4gYWRkZWQsIG1vdmUgb24gdG8gdGhlIG5leHQgY2hhci4K
KyAgICAgICAgICAgICAgICAgICAgICAgICsrdW5pY29kZUN1cnI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICBtX2lzUGVuZGluZ0Rhc2ggPSB0cnVlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmx1c2goKTsKKyAgICAgICAgICAgIG1fY2hhckJ1
ZmZlciA9IGNoOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG1fY2hhckJ1ZmZlciA9
IGNoOworfQorCisvLyBXaGVuIGEgY2hhcmFjdGVyIGlzIGFkZGVkIHRvIHRoZSBzZXQgd2UgZG8g
bm90IGltbWVkaWF0ZWx5IGFkZCBpdCB0byB0aGUgYXJyYXlzLCBpbiBjYXNlIGl0IGlzIGFjdHVh
bGx5IGRlZmluaW5nIGEgcmFuZ2UuCisvLyBXaGVuIHdlIGhhdmUgZGV0ZXJtaW5lZCB0aGUgY2hh
cmFjdGVyIGlzIG5vdCB1c2VkIGluIHNwZWNpZmluZyBhIHJhbmdlIGl0IGlzIGFkZGVkLCBpbiBh
IHNvcnRlZCBmYXNoaW9uLCB0byB0aGUgYXBwcm9wcmlhdGUKKy8vIGFycmF5IChlaXRoZXIgYXNj
aWkgb3IgdW5pY29kZSkuCisvLyBJZiB0aGUgcGF0dGVybiBpcyBjYXNlIGluc2Vuc2l0aXZlIHdl
IGFkZCBlbnRyaWVzIGZvciBib3RoIGNhc2VzLgordm9pZCBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVj
dG9yOjpmbHVzaCgpCit7CisgICAgaWYgKG1fY2hhckJ1ZmZlciAhPSAtMSkgeworICAgICAgICBp
ZiAobV9jaGFyQnVmZmVyIDw9IDB4N2YpIHsKKyAgICAgICAgICAgIGlmIChtX2lzQ2FzZUluc2Vu
c2l0aXZlICYmIGlzQVNDSUlMb3dlcihtX2NoYXJCdWZmZXIpKQorICAgICAgICAgICAgICAgIGFk
ZFNvcnRlZChtX21hdGNoZXMsIHRvQVNDSUlVcHBlcihtX2NoYXJCdWZmZXIpKTsKKyAgICAgICAg
ICAgIGFkZFNvcnRlZChtX21hdGNoZXMsIG1fY2hhckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAo
bV9pc0Nhc2VJbnNlbnNpdGl2ZSAmJiBpc0FTQ0lJVXBwZXIobV9jaGFyQnVmZmVyKSkKKyAgICAg
ICAgICAgICAgICBhZGRTb3J0ZWQobV9tYXRjaGVzLCB0b0FTQ0lJTG93ZXIobV9jaGFyQnVmZmVy
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTb3J0ZWQobV9tYXRjaGVzVW5p
Y29kZSwgbV9jaGFyQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2lzQ2FzZUluc2Vuc2l0aXZl
KSB7CisgICAgICAgICAgICAgICAgaW50IG90aGVyID0ga2pzX3BjcmVfdWNwX290aGVyY2FzZSht
X2NoYXJCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChvdGhlciAhPSAtMSkKKyAgICAgICAg
ICAgICAgICAgICAgYWRkU29ydGVkKG1fbWF0Y2hlc1VuaWNvZGUsIG90aGVyKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX2NoYXJCdWZmZXIgPSAtMTsKKyAgICB9CisgICAg
CisgICAgaWYgKG1faXNQZW5kaW5nRGFzaCkgeworICAgICAgICBhZGRTb3J0ZWQobV9tYXRjaGVz
LCAnLScpOworICAgIH0KK30KKwordm9pZCBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjphcHBl
bmQoQ2hhcmFjdGVyQ2xhc3MmIG90aGVyKQoreworICAgIC8vIFt4LVxzXSB3aWxsIGFkZCwgJ3gn
LCAnLScsIGFuZCBhbGwgdW5pY29kZSBzcGFjZXMgdG8gbmV3IGNsYXNzIChzYW1lIGFzIFt4XHMt
XSkuCisgICAgLy8gTmVlZCB0byBjaGVjayB0aGUgc3BlYywgcmVhbGx5LCBidXQgdGhpbmsgdGhp
cyBtYXRjaGVzIFBDUkUgYmVoYXZpb3VyLgorICAgIGZsdXNoKCk7CisgICAgCisgICAgaWYgKG90
aGVyLm51bU1hdGNoZXMpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdGhlci5u
dW1NYXRjaGVzOyArK2kpCisgICAgICAgICAgICBhZGRTb3J0ZWQobV9tYXRjaGVzLCBvdGhlci5t
YXRjaGVzW2ldKTsKKyAgICB9CisgICAgaWYgKG90aGVyLm51bVJhbmdlcykgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG90aGVyLm51bVJhbmdlczsgKytpKQorICAgICAgICAgICAg
YWRkU29ydGVkUmFuZ2UobV9yYW5nZXMsIG90aGVyLnJhbmdlc1tpXS5iZWdpbiwgb3RoZXIucmFu
Z2VzW2ldLmVuZCk7CisgICAgfQorICAgIGlmIChvdGhlci5udW1NYXRjaGVzVW5pY29kZSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG90aGVyLm51bU1hdGNoZXNVbmljb2RlOyAr
K2kpCisgICAgICAgICAgICBhZGRTb3J0ZWQobV9tYXRjaGVzVW5pY29kZSwgb3RoZXIubWF0Y2hl
c1VuaWNvZGVbaV0pOworICAgIH0KKyAgICBpZiAob3RoZXIubnVtUmFuZ2VzVW5pY29kZSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG90aGVyLm51bVJhbmdlc1VuaWNvZGU7ICsr
aSkKKyAgICAgICAgICAgIGFkZFNvcnRlZFJhbmdlKG1fcmFuZ2VzVW5pY29kZSwgb3RoZXIucmFu
Z2VzVW5pY29kZVtpXS5iZWdpbiwgb3RoZXIucmFuZ2VzVW5pY29kZVtpXS5lbmQpOworICAgIH0K
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdSRUMpCkluZGV4OiB3cmVjL0NoYXJhY3RlckNs
YXNzQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3cmVjL0NoYXJhY3RlckNsYXNzQ29uc3Ry
dWN0b3IuaAkocmV2aXNpb24gMCkKKysrIHdyZWMvQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3Jf
aAorI2RlZmluZSBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yX2gKKworI2lmIEVOQUJMRShXUkVD
KQorCisjaW5jbHVkZSAidXN0cmluZy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIHN0cnVj
dCBDaGFyYWN0ZXJDbGFzc1JhbmdlIHsKKyAgICAgICAgVUNoYXIgYmVnaW47CisgICAgICAgIFVD
aGFyIGVuZDsKKyAgICB9OworCisgICAgc3RydWN0IENoYXJhY3RlckNsYXNzIHsKKyAgICAgICAg
Y29uc3QgVUNoYXIqIG1hdGNoZXM7CisgICAgICAgIHVuc2lnbmVkIG51bU1hdGNoZXM7CisKKyAg
ICAgICAgY29uc3QgQ2hhcmFjdGVyQ2xhc3NSYW5nZSogcmFuZ2VzOworICAgICAgICB1bnNpZ25l
ZCBudW1SYW5nZXM7CisKKyAgICAgICAgY29uc3QgVUNoYXIqIG1hdGNoZXNVbmljb2RlOworICAg
ICAgICB1bnNpZ25lZCBudW1NYXRjaGVzVW5pY29kZTsKKworICAgICAgICBjb25zdCBDaGFyYWN0
ZXJDbGFzc1JhbmdlKiByYW5nZXNVbmljb2RlOworICAgICAgICB1bnNpZ25lZCBudW1SYW5nZXNV
bmljb2RlOworICAgIH07CisKKyAgICBDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NO
ZXdsaW5lKCk7CisgICAgQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzRGlnaXRzKCk7
CisgICAgQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzU3BhY2VzKCk7CisgICAgQ2hh
cmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzV29yZGNoYXIoKTsKKyAgICBDaGFyYWN0ZXJD
bGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NOb25kaWdpdHMoKTsKKyAgICBDaGFyYWN0ZXJDbGFzcyYg
Z2V0Q2hhcmFjdGVyQ2xhc3NOb25zcGFjZXMoKTsKKyAgICBDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hh
cmFjdGVyQ2xhc3NOb253b3JkY2hhcigpOworCisgICAgY2xhc3MgQ2hhcmFjdGVyQ2xhc3NDb25z
dHJ1Y3RvciB7CisgICAgICAgIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IoYm9vbCBpc0Nhc2VJ
bnNlbnNpdGl2ZSkKKyAgICAgICAgICAgIDogbV9jaGFyQnVmZmVyKC0xKQorICAgICAgICAgICAg
LCBtX2lzUGVuZGluZ0Rhc2goZmFsc2UpCisgICAgICAgICAgICAsIG1faXNDYXNlSW5zZW5zaXRp
dmUoaXNDYXNlSW5zZW5zaXRpdmUpCisgICAgICAgICAgICAsIG1faXNVcHNpZGVEb3duKGZhbHNl
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZsdXNoKCk7CisgICAgICAg
IHZvaWQgcHV0KFVDaGFyIGNoKTsKKyAgICAgICAgdm9pZCBhcHBlbmQoQ2hhcmFjdGVyQ2xhc3Mm
IG90aGVyKTsKKworICAgICAgICBib29sIGlzVXBzaWRlRG93bigpIHsgcmV0dXJuIG1faXNVcHNp
ZGVEb3duOyB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xh
c3MoKQorICAgICAgICB7CisgICAgICAgICAgICBDaGFyYWN0ZXJDbGFzcyBuZXdDaGFyQ2xhc3Mg
PSB7CisgICAgICAgICAgICAgICAgbV9tYXRjaGVzLmJlZ2luKCksIG1fbWF0Y2hlcy5zaXplKCks
CisgICAgICAgICAgICAgICAgbV9yYW5nZXMuYmVnaW4oKSwgbV9yYW5nZXMuc2l6ZSgpLAorICAg
ICAgICAgICAgICAgIG1fbWF0Y2hlc1VuaWNvZGUuYmVnaW4oKSwgbV9tYXRjaGVzVW5pY29kZS5z
aXplKCksCisgICAgICAgICAgICAgICAgbV9yYW5nZXNVbmljb2RlLmJlZ2luKCksIG1fcmFuZ2Vz
VW5pY29kZS5zaXplKCksCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICByZXR1cm4gbmV3
Q2hhckNsYXNzOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFkZFNv
cnRlZChWZWN0b3I8VUNoYXI+JiBtYXRjaGVzLCBVQ2hhciBjaCk7CisgICAgICAgIHZvaWQgYWRk
U29ydGVkUmFuZ2UoVmVjdG9yPENoYXJhY3RlckNsYXNzUmFuZ2U+JiByYW5nZXMsIFVDaGFyIGxv
LCBVQ2hhciBoaSk7CisKKyAgICAgICAgaW50IG1fY2hhckJ1ZmZlcjsKKyAgICAgICAgYm9vbCBt
X2lzUGVuZGluZ0Rhc2g7CisgICAgICAgIGJvb2wgbV9pc0Nhc2VJbnNlbnNpdGl2ZTsKKyAgICAg
ICAgYm9vbCBtX2lzVXBzaWRlRG93bjsKKworICAgICAgICBWZWN0b3I8VUNoYXI+IG1fbWF0Y2hl
czsKKyAgICAgICAgVmVjdG9yPENoYXJhY3RlckNsYXNzUmFuZ2U+IG1fcmFuZ2VzOworICAgICAg
ICBWZWN0b3I8VUNoYXI+IG1fbWF0Y2hlc1VuaWNvZGU7CisgICAgICAgIFZlY3RvcjxDaGFyYWN0
ZXJDbGFzc1JhbmdlPiBtX3Jhbmdlc1VuaWNvZGU7CisgICAgfTsKKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFdSRUMpCisKKyNlbmRpZiAvLyBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yX2gKSW5k
ZXg6IHdyZWMvV1JFQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd3JlYy9XUkVDLmNwcAkocmV2aXNpb24g
MzYzMzMpCisrKyB3cmVjL1dSRUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpZiBFTkFCTEUoV1JFQykKIAorI2luY2x1ZGUgIkNoYXJhY3RlckNsYXNzQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJNYWNoaW5lLmgiCiAjaW5j
bHVkZSAicGNyZV9pbnRlcm5hbC5oIgpAQCAtMzYsMzUyICszNyw2IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCi0vLyA9PT09IENoYXJhY3RlckNsYXNzID09PT0K
LQotc3RydWN0IENoYXJhY3RlckNsYXNzUmFuZ2UgewotICAgIFVDaGFyIGJlZ2luOwotICAgIFVD
aGFyIGVuZDsKLX07Ci0KLXN0cnVjdCBDaGFyYWN0ZXJDbGFzcyB7Ci0gICAgY29uc3QgVUNoYXIq
IG1hdGNoZXM7Ci0gICAgdW5zaWduZWQgbnVtTWF0Y2hlczsKLQotICAgIGNvbnN0IENoYXJhY3Rl
ckNsYXNzUmFuZ2UqIHJhbmdlczsKLSAgICB1bnNpZ25lZCBudW1SYW5nZXM7Ci0KLSAgICBjb25z
dCBVQ2hhciogbWF0Y2hlc1VuaWNvZGU7Ci0gICAgdW5zaWduZWQgbnVtTWF0Y2hlc1VuaWNvZGU7
Ci0KLSAgICBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlKiByYW5nZXNVbmljb2RlOwotICAgIHVu
c2lnbmVkIG51bVJhbmdlc1VuaWNvZGU7Ci19OwotCi1zdGF0aWMgY29uc3QgVUNoYXIgYXNjaWlO
ZXdsaW5lc1syXSA9IHsgJ1xuJywgJ1xyJyB9Owotc3RhdGljIGNvbnN0IFVDaGFyIHVuaWNvZGVO
ZXdsaW5lc1syXSA9IHsgMHgyMDI4LCAweDIwMjkgfTsKLXN0YXRpYyBDaGFyYWN0ZXJDbGFzcyYg
Z2V0Q2hhcmFjdGVyQ2xhc3NOZXdsaW5lKCkgewotICAgIHN0YXRpYyBDaGFyYWN0ZXJDbGFzcyBj
aGFyQ2xhc3MgPSB7Ci0gICAgICAgIGFzY2lpTmV3bGluZXMsIDIsCi0gICAgICAgIDAsIDAsCi0g
ICAgICAgIHVuaWNvZGVOZXdsaW5lcywgMiwKLSAgICAgICAgMCwgMCwKLSAgICB9OwotICAgIAot
ICAgIHJldHVybiBjaGFyQ2xhc3M7Ci19Ci0KLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1Jh
bmdlIGFzY2lpRGlnaXRzUmFuZ2VbMV0gPSB7IHsgJzAnLCAnOScgfSB9Owotc3RhdGljIENoYXJh
Y3RlckNsYXNzJiBnZXRDaGFyYWN0ZXJDbGFzc0RpZ2l0cygpIHsKLSAgICBzdGF0aWMgQ2hhcmFj
dGVyQ2xhc3MgY2hhckNsYXNzID0gewotICAgICAgICAwLCAwLAotICAgICAgICBhc2NpaURpZ2l0
c1JhbmdlLCAxLAotICAgICAgICAwLCAwLAotICAgICAgICAwLCAwLAotICAgIH07Ci0gICAgCi0g
ICAgcmV0dXJuIGNoYXJDbGFzczsKLX0KLQotc3RhdGljIGNvbnN0IFVDaGFyIGFzY2lpU3BhY2Vz
WzFdID0geyAnICcgfTsKLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIGFzY2lpU3Bh
Y2VzUmFuZ2VbMV0gPSB7IHsgJ1x0JywgJ1xyJyB9IH07Ci1zdGF0aWMgY29uc3QgVUNoYXIgdW5p
Y29kZVNwYWNlc1s4XSA9IHsgMHgwMGEwLCAweDE2ODAsIDB4MTgwZSwgMHgyMDI4LCAweDIwMjks
IDB4MjAyZiwgMHgyMDVmLCAweDMwMDAgfTsKLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1Jh
bmdlIHVuaWNvZGVTcGFjZXNSYW5nZVsxXSA9IHsgeyAweDIwMDAsIDB4MjAwYSB9IH07Ci1zdGF0
aWMgQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzU3BhY2VzKCkgewotICAgIHN0YXRp
YyBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSB7Ci0gICAgICAgIGFzY2lpU3BhY2VzLCAxLAot
ICAgICAgICBhc2NpaVNwYWNlc1JhbmdlLCAxLAotICAgICAgICB1bmljb2RlU3BhY2VzLCA4LAot
ICAgICAgICB1bmljb2RlU3BhY2VzUmFuZ2UsIDEsCi0gICAgfTsKLSAgICAKLSAgICByZXR1cm4g
Y2hhckNsYXNzOwotfQotCi1zdGF0aWMgY29uc3QgVUNoYXIgYXNjaWlXb3JkY2hhclsxXSA9IHsg
J18nIH07Ci1zdGF0aWMgY29uc3QgQ2hhcmFjdGVyQ2xhc3NSYW5nZSBhc2NpaVdvcmRjaGFyUmFu
Z2VbM10gPSB7IHsgJzAnLCAnOScgfSwgeyAnQScsICdaJyB9LCB7ICdhJywgJ3onIH0gfTsKLXN0
YXRpYyBDaGFyYWN0ZXJDbGFzcyYgZ2V0Q2hhcmFjdGVyQ2xhc3NXb3JkY2hhcigpIHsKLSAgICBz
dGF0aWMgQ2hhcmFjdGVyQ2xhc3MgY2hhckNsYXNzID0gewotICAgICAgICBhc2NpaVdvcmRjaGFy
LCAxLAotICAgICAgICBhc2NpaVdvcmRjaGFyUmFuZ2UsIDMsCi0gICAgICAgIDAsIDAsCi0gICAg
ICAgIDAsIDAsCi0gICAgfTsKLSAgICAKLSAgICByZXR1cm4gY2hhckNsYXNzOwotfQotCi1zdGF0
aWMgY29uc3QgQ2hhcmFjdGVyQ2xhc3NSYW5nZSBhc2NpaU5vbmRpZ2l0c1JhbmdlWzJdID0geyB7
IDAsICcwJyAtIDEgfSwgeyAnOScgKyAxLCAweDdmIH0gfTsKLXN0YXRpYyBjb25zdCBDaGFyYWN0
ZXJDbGFzc1JhbmdlIHVuaWNvZGVOb25kaWdpdHNSYW5nZVsxXSA9IHsgeyAweDAwODAsIDB4ZmZm
ZiB9IH07Ci1zdGF0aWMgQ2hhcmFjdGVyQ2xhc3MmIGdldENoYXJhY3RlckNsYXNzTm9uZGlnaXRz
KCkgewotICAgIHN0YXRpYyBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSB7Ci0gICAgICAgIDAs
IDAsCi0gICAgICAgIGFzY2lpTm9uZGlnaXRzUmFuZ2UsIDIsCi0gICAgICAgIDAsIDAsCi0gICAg
ICAgIHVuaWNvZGVOb25kaWdpdHNSYW5nZSwgMSwKLSAgICB9OwotICAgIAotICAgIHJldHVybiBj
aGFyQ2xhc3M7Ci19Ci0KLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIGFzY2lpTm9u
c3BhY2VzUmFuZ2VbM10gPSB7IHsgMCwgJ1x0JyAtIDEgfSwgeyAnXHInICsgMSwgJyAnIC0gMSB9
LCB7ICcgJyArIDEsIDB4N2YgfSB9OyAKLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1Jhbmdl
IHVuaWNvZGVOb25zcGFjZXNSYW5nZVs5XSA9IHsKLSAgICB7IDB4MDA4MCwgMHgwMDlmIH0sCi0g
ICAgeyAweDAwYTEsIDB4MTY3ZiB9LAotICAgIHsgMHgxNjgxLCAweDE4MGQgfSwKLSAgICB7IDB4
MTgwZiwgMHgxZmZmIH0sCi0gICAgeyAweDIwMGIsIDB4MjAyNyB9LAotICAgIHsgMHgyMDJhLCAw
eDIwMmUgfSwKLSAgICB7IDB4MjAzMCwgMHgyMDVlIH0sCi0gICAgeyAweDIwNjAsIDB4MmZmZiB9
LAotICAgIHsgMHgzMDAxLCAweGZmZmYgfQotfTsgCi1zdGF0aWMgQ2hhcmFjdGVyQ2xhc3MmIGdl
dENoYXJhY3RlckNsYXNzTm9uc3BhY2VzKCkgewotICAgIHN0YXRpYyBDaGFyYWN0ZXJDbGFzcyBj
aGFyQ2xhc3MgPSB7Ci0gICAgICAgIDAsIDAsCi0gICAgICAgIGFzY2lpTm9uc3BhY2VzUmFuZ2Us
IDMsCi0gICAgICAgIDAsIDAsCi0gICAgICAgIHVuaWNvZGVOb25zcGFjZXNSYW5nZSwgOSwKLSAg
ICB9OwotICAgIAotICAgIHJldHVybiBjaGFyQ2xhc3M7Ci19Ci0KLXN0YXRpYyBjb25zdCBVQ2hh
ciBhc2NpaU5vbndvcmRjaGFyWzFdID0geyAnYCcgfTsKLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJD
bGFzc1JhbmdlIGFzY2lpTm9ud29yZGNoYXJSYW5nZVs0XSA9IHsgeyAwLCAnMCcgLSAxIH0sIHsg
JzknICsgMSwgJ0EnIC0gMSB9LCB7ICdaJyArIDEsICdfJyAtIDEgfSwgeyAneicgKyAxLCAweDdm
IH0gfTsKLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJDbGFzc1JhbmdlIHVuaWNvZGVOb253b3JkY2hh
clJhbmdlWzFdID0geyB7IDB4MDA4MCwgMHhmZmZmIH0gfTsKLXN0YXRpYyBDaGFyYWN0ZXJDbGFz
cyYgZ2V0Q2hhcmFjdGVyQ2xhc3NOb253b3JkY2hhcigpIHsKLSAgICBzdGF0aWMgQ2hhcmFjdGVy
Q2xhc3MgY2hhckNsYXNzID0gewotICAgICAgICBhc2NpaU5vbndvcmRjaGFyLCAxLAotICAgICAg
ICBhc2NpaU5vbndvcmRjaGFyUmFuZ2UsIDQsCi0gICAgICAgIDAsIDAsCi0gICAgICAgIHVuaWNv
ZGVOb253b3JkY2hhclJhbmdlLCAxLAotICAgIH07Ci0gICAgCi0gICAgcmV0dXJuIGNoYXJDbGFz
czsKLX0KLQotc3RydWN0IENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IgewotICAgIFZlY3RvcjxV
Q2hhcj4gbV9tYXRjaGVzOwotICAgIFZlY3RvcjxDaGFyYWN0ZXJDbGFzc1JhbmdlPiBtX3Jhbmdl
czsKLSAgICBWZWN0b3I8VUNoYXI+IG1fbWF0Y2hlc1VuaWNvZGU7Ci0gICAgVmVjdG9yPENoYXJh
Y3RlckNsYXNzUmFuZ2U+IG1fcmFuZ2VzVW5pY29kZTsKLQotICAgIGludCBtX2NoX2J1ZmZlcjsK
LSAgICBib29sIG1fcGVuZGluZ19kYXNoOwotICAgIGJvb2wgbV9pZ25vcmVDYXNlOwotICAgIGJv
b2wgbV91cHNpZGVEb3duOwotICAgIAotICAgIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IoYm9v
bCBpZ25vcmVDYXNlKQotICAgICAgICA6IG1fY2hfYnVmZmVyKC0xKQotICAgICAgICAsIG1fcGVu
ZGluZ19kYXNoKGZhbHNlKQotICAgICAgICAsIG1faWdub3JlQ2FzZShpZ25vcmVDYXNlKQotICAg
ICAgICAsIG1fdXBzaWRlRG93bihmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Zmx1c2goKTsKLSAgICB2b2lkIHB1dChVQ2hhciBjaCk7Ci0gICAgdm9pZCBhcHBlbmQoQ2hhcmFj
dGVyQ2xhc3MmIG90aGVyKTsKLXByaXZhdGU6Ci0gICAgdm9pZCBhZGRTb3J0ZWQoVmVjdG9yPFVD
aGFyPiYgbWF0Y2hlcywgVUNoYXIgY2gpOwotICAgIHZvaWQgYWRkU29ydGVkUmFuZ2UoVmVjdG9y
PENoYXJhY3RlckNsYXNzUmFuZ2U+JiByYW5nZXMsIFVDaGFyIGxvLCBVQ2hhciBoaSk7Ci19Owot
Ci12b2lkIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OmFkZFNvcnRlZChWZWN0b3I8VUNoYXI+
JiBtYXRjaGVzLCBVQ2hhciBjaCkKLXsKLSAgICB1bnNpZ25lZCBwb3MgPSAwOwotICAgIHVuc2ln
bmVkIHJhbmdlID0gbWF0Y2hlcy5zaXplKCk7Ci0KLSAgICAvLyBiaW5hcnkgY2hvcCwgZmluZCBw
b3NpdGlvbiB0byBpbnNlcnQgY2hhci4KLSAgICB3aGlsZSAocmFuZ2UpIHsKLSAgICAgICAgdW5z
aWduZWQgaW5kZXggPSByYW5nZSA+PiAxOwotCi0gICAgICAgIGludCB2YWwgPSBtYXRjaGVzW3Bv
cytpbmRleF0gLSBjaDsKLSAgICAgICAgaWYgKCF2YWwpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGVsc2UgaWYgKHZhbCA+IDApCi0gICAgICAgICAgICByYW5nZSA9IGluZGV4OwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBvcyArPSAoaW5kZXgrMSk7Ci0gICAgICAgICAgICBy
YW5nZSAtPSAoaW5kZXgrMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKHBvcyA9
PSBtYXRjaGVzLnNpemUoKSkKLSAgICAgICAgbWF0Y2hlcy5hcHBlbmQoY2gpOwotICAgIGVsc2UK
LSAgICAgICAgbWF0Y2hlcy5pbnNlcnQocG9zLCBjaCk7Ci19Ci0KLXZvaWQgQ2hhcmFjdGVyQ2xh
c3NDb25zdHJ1Y3Rvcjo6YWRkU29ydGVkUmFuZ2UoVmVjdG9yPENoYXJhY3RlckNsYXNzUmFuZ2U+
JiByYW5nZXMsIFVDaGFyIGxvLCBVQ2hhciBoaSkKLXsKLSAgICB1bnNpZ25lZCBlbmQgPSByYW5n
ZXMuc2l6ZSgpOwotICAgIAotICAgIC8vIFNpbXBsZSBsaW5lYXIgc2NhbiAtIEkgZG91YnQgdGhl
cmUgYXJlIHRoYXQgbWFueSByYW5nZXMgYW55d2F5Li4uCi0gICAgLy8gZmVlbCBmcmVlIHRvIGZp
eCB0aGlzIHdpdGggc29tZXRoaW5nIGZhc3RlciAoZWcgYmluYXJ5IGNob3ApLgotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAvLyBkb2VzIHRoZSBuZXcg
cmFuZ2UgZmFsbCBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGFycmF5Ci0gICAg
ICAgIGlmIChoaSA8IHJhbmdlc1tpXS5iZWdpbikgewotICAgICAgICAgICAgLy8gb3B0aW9uYWwg
b3B0aW1pemF0aW9uOiBjb25jYXRlbmF0ZSBhcHBlbmRpbmcgcmFuZ2VzPyAtIG1heSBub3QgYmUg
d29ydGh3aGlsZS4KLSAgICAgICAgICAgIGlmIChoaSA9PSAocmFuZ2VzW2ldLmJlZ2luIC0gMSkp
IHsKLSAgICAgICAgICAgICAgICByYW5nZXNbaV0uYmVnaW4gPSBsbzsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDaGFyYWN0ZXJDbGFzc1Jhbmdl
IHIgPSB7bG8sIGhpfTsKLSAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQoaSwgcik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gT2theSwgc2luY2Ugd2UgZGlkbid0
IGhpdCB0aGUgbGFzdCBjYXNlLCB0aGUgZW5kIG9mIHRoZSBuZXcgcmFuZ2UgaXMgZGVmaW5pdGVs
eSBhdCBvciBhZnRlciB0aGUgYmVnaW5pbmcKLSAgICAgICAgLy8gSWYgdGhlIG5ldyByYW5nZSBz
dGFydCBhdCBvciBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgbGFzdCByYW5nZSwgdGhlbiB0aGUgb3Zl
cmxhcCAoaWYgaXQgc3RhcnRzIG9uZSBhZnRlciB0aGUKLSAgICAgICAgLy8gZW5kIG9mIHRoZSBs
YXN0IHJhbmdlIHRoZXkgY29uY2F0ZW5hdGUsIHdoaWNoIGlzIGp1c3QgYXMgZ29vZC4KLSAgICAg
ICAgaWYgKGxvIDw9IChyYW5nZXNbaV0uZW5kICsgMSkpIHsKLSAgICAgICAgICAgIC8vIGZvdW5k
IGFuIGludGVyc2VjdCEgd2UnbGwgcmVwbGFjZSB0aGlzIGVudHJ5IGluIHRoZSBhcnJheS4KLSAg
ICAgICAgICAgIHJhbmdlc1tpXS5iZWdpbiA9IHN0ZDo6bWluKHJhbmdlc1tpXS5iZWdpbiwgbG8p
OwotICAgICAgICAgICAgcmFuZ2VzW2ldLmVuZCA9IHN0ZDo6bWF4KHJhbmdlc1tpXS5lbmQsIGhp
KTsKLQotICAgICAgICAgICAgLy8gbm93IGNoZWNrIGlmIHRoZSBuZXcgcmFuZ2UgY2FuIHN1YnN1
bWUgYW55IHN1YnNlcXVlbnQgcmFuZ2VzLgotICAgICAgICAgICAgdW5zaWduZWQgbmV4dCA9IGkr
MTsKLSAgICAgICAgICAgIC8vIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wIHdlIHdpbGwgZWl0
aGVyIHJlbW92ZSBzb21ldGhpbmcgZnJvbSB0aGUgbGlzdCwgb3IgYnJlYWsgdGhlIGxvb3AuCi0g
ICAgICAgICAgICB3aGlsZSAobmV4dCA8IHJhbmdlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocmFuZ2VzW25leHRdLmJlZ2luIDw9IChyYW5nZXNbaV0uZW5kICsgMSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgZW50cnkgbm93IG92ZXJsYXBzIC8gY29uY2F0ZW5h
dGVzIHRoaXMgb25lLgotICAgICAgICAgICAgICAgICAgICByYW5nZXNbaV0uZW5kID0gc3RkOjpt
YXgocmFuZ2VzW2ldLmVuZCwgcmFuZ2VzW25leHRdLmVuZCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJhbmdlcy5yZW1vdmUobmV4dCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSYW5nZSBjb21lcyBhZnRlciBh
bGwgZXhpc3RpbmcgcmFuZ2VzLgotICAgIENoYXJhY3RlckNsYXNzUmFuZ2UgciA9IHtsbywgaGl9
OwotICAgIHJhbmdlcy5hcHBlbmQocik7Ci19Ci0KLXZvaWQgQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1
Y3Rvcjo6cHV0KFVDaGFyIGNoKQotewotICAgIGlmIChtX2NoX2J1ZmZlciAhPSAtMSkgewotICAg
ICAgICBpZiAobV9wZW5kaW5nX2Rhc2gpIHsKLSAgICAgICAgICAgIFVDaGFyIGxvID0gbV9jaF9i
dWZmZXI7Ci0gICAgICAgICAgICBVQ2hhciBoaSA9IGNoOwotICAgICAgICAgICAgbV9jaF9idWZm
ZXIgPSAtMTsKLSAgICAgICAgICAgIG1fcGVuZGluZ19kYXNoID0gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChsbyA+IGhpKQotICAgICAgICAgICAgICAgIG1fdXBzaWRlRG93
biA9IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsbyA8PSAweDdmKSB7Ci0g
ICAgICAgICAgICAgICAgY2hhciBhc2NpaUxvID0gbG87Ci0gICAgICAgICAgICAgICAgY2hhciBh
c2NpaUhpID0gc3RkOjptaW4oaGksIChVQ2hhcikweDdmKTsKLSAgICAgICAgICAgICAgICBhZGRT
b3J0ZWRSYW5nZShtX3JhbmdlcywgbG8sIGFzY2lpSGkpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChtX2lnbm9yZUNhc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KChhc2NpaUxvIDw9ICdaJykgJiYgKGFzY2lpSGkgPj0gJ0EnKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFNvcnRlZFJhbmdlKG1fcmFuZ2VzLCBzdGQ6Om1heChhc2NpaUxvLCAnQScpKygn
YSctJ0EnKSwgc3RkOjptaW4oYXNjaWlIaSwgJ1onKSsoJ2EnLSdBJykpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoKGFzY2lpTG8gPD0gJ3onKSAmJiAoYXNjaWlIaSA+PSAnYScpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2UobV9yYW5nZXMsIHN0ZDo6bWF4KGFzY2lp
TG8sICdhJykrKCdBJy0nYScpLCBzdGQ6Om1pbihhc2NpaUhpLCAneicpKygnQSctJ2EnKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhpID49IDB4
ODApIHsKLSAgICAgICAgICAgICAgICBVQ2hhciB1bmljb2RlQ3VyciA9IHN0ZDo6bWF4KGxvLCAo
VUNoYXIpMHg4MCk7Ci0gICAgICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2UobV9yYW5nZXNVbmlj
b2RlLCB1bmljb2RlQ3VyciwgaGkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChtX2lnbm9yZUNhc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgZ29pbmcg
dG8gc2NhbiBhbG9uZywgdXBkYXRpbmcgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZQotICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAodW5pY29kZUN1cnIgPD0gaGkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNwaW4gZm9yd2FyZHMgb3ZlciBhbnkgY2hhcmFjdGVycyB0aGF0IGRvbid0IGhh
dmUgdHdvIGNhc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGtqc19wY3JlX3Vj
cF9vdGhlcmNhc2UodW5pY29kZUN1cnIpID09IC0xOyArK3VuaWNvZGVDdXJyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyB3YXMgdGhlIGxhc3QgY2hhcmFjdGVyIGlu
IHRoZSByYW5nZSwgd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dW5pY29kZUN1cnIgPT0gaGkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGlmIHdlIGZhbGwgdGhyb3VnaCB0byBoZXJlLCB1bmljb2RlQ3VyciA8PSBoaSAmIGhhcyBhbm90
aGVyIGNhc2UuIEdldCB0aGUgb3RoZXIgY2FzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFVD
aGFyIHJhbmdlU3RhcnQgPSB1bmljb2RlQ3VycjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFVD
aGFyIG90aGVyQ3VyciA9IGtqc19wY3JlX3VjcF9vdGhlcmNhc2UodW5pY29kZUN1cnIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB1bmlj
b2RlQ3VyciBpcyBub3QgeWV0IGhpLCBjaGVjayB0aGUgbmV4dCBjaGFyIGluIHRoZSByYW5nZS4g
IElmIGl0IGFsc28gaGFzIGFub3RoZXIgY2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCBpZiBpdCdzIG90aGVyIGNhc2UgdmFsdWUgaXMgb25lIGdyZWF0ZXIgdGhlbiB0aGUgb3Ro
ZXJjYXNlIHZhbHVlIGZvciB0aGUgY3VycmVudCBsYXN0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBjaGFyYWN0ZXIgaW5jbHVkZWQgaW4gdGhlIHJhbmdlLCB3ZSBjYW4gaW5jbHVkZSBuZXh0
IGludG8gdGhlIHJhbmdlLgotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCh1bmljb2Rl
Q3VyciA8IGhpKSAmJiAoa2pzX3BjcmVfdWNwX290aGVyY2FzZSh1bmljb2RlQ3VyciArIDEpID09
IChvdGhlckN1cnIgKyAxKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNy
ZW1lbnQgdW5pY29kZUN1cnI7IGl0IHBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnQgb3RoZXJDdXJyLCBkdWUgdG8g
dGhlIGNoZWNrIGFib3ZlIG90aGVyIGZvciBuZXh0IG11c3QgYmUgMSBncmVhdGVyIHRoYW4gdGhl
IGN1cnJyZW50IG90aGVyIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdW5p
Y29kZUN1cnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytvdGhlckN1cnI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG90aGVyQ2hhciBpcyB0aGUgbGFzdCBpbiB0aGUgcmFuZ2Ugb2Yg
b3RoZXIgY2FzZSBjaGFycywgY2FsY3VsYXRlIG9mZnNldCB0byBnZXQgYmFjayB0byB0aGUgc3Rh
cnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTb3J0ZWRSYW5nZShtX3Jhbmdlc1VuaWNv
ZGUsIG90aGVyQ3Vyci0odW5pY29kZUN1cnItcmFuZ2VTdGFydCksIG90aGVyQ3Vycik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuaWNvZGVD
dXJyIGhhcyBiZWVuIGFkZGVkLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNoYXIuCi0gICAgICAgICAg
ICAgICAgICAgICAgICArK3VuaWNvZGVDdXJyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNoID09ICct
JykgewotICAgICAgICAgICAgbV9wZW5kaW5nX2Rhc2ggPSB0cnVlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZmx1c2goKTsKLSAgICAgICAgICAgIG1fY2hfYnVmZmVyID0gY2g7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgbV9jaF9idWZmZXIgPSBjaDsKLX0KLQotLy8g
V2hlbiBhIGNoYXJhY3RlciBpcyBhZGRlZCB0byB0aGUgc2V0IHdlIGRvIG5vdCBpbW1lZGlhdGVs
eSBhZGQgaXQgdG8gdGhlIGFycmF5cywgaW4gY2FzZSBpdCBpcyBhY3R1YWxseSBkZWZpbmluZyBh
IHJhbmdlLgotLy8gV2hlbiB3ZSBoYXZlIGRldGVybWluZWQgdGhlIGNoYXJhY3RlciBpcyBub3Qg
dXNlZCBpbiBzcGVjaWZpbmcgYSByYW5nZSBpdCBpcyBhZGRlZCwgaW4gYSBzb3J0ZWQgZmFzaGlv
biwgdG8gdGhlIGFwcHJvcHJpYXRlCi0vLyBhcnJheSAoZWl0aGVyIGFzY2lpIG9yIHVuaWNvZGUp
LgotLy8gSWYgdGhlIHBhdHRlcm4gaXMgY2FzZSBpbnNlbnNpdGl2ZSB3ZSBhZGQgZW50cmllcyBm
b3IgYm90aCBjYXNlcy4KLXZvaWQgQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvcjo6Zmx1c2goKQot
ewotICAgIGlmIChtX2NoX2J1ZmZlciAhPSAtMSkgewotICAgICAgICBpZiAobV9jaF9idWZmZXIg
PD0gMHg3ZikgewotICAgICAgICAgICAgaWYgKG1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJTG93ZXIo
bV9jaF9idWZmZXIpKQotICAgICAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNoZXMsIHRvQVND
SUlVcHBlcihtX2NoX2J1ZmZlcikpOwotICAgICAgICAgICAgYWRkU29ydGVkKG1fbWF0Y2hlcywg
bV9jaF9idWZmZXIpOwotICAgICAgICAgICAgaWYgKG1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJVXBw
ZXIobV9jaF9idWZmZXIpKQotICAgICAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNoZXMsIHRv
QVNDSUlMb3dlcihtX2NoX2J1ZmZlcikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
YWRkU29ydGVkKG1fbWF0Y2hlc1VuaWNvZGUsIG1fY2hfYnVmZmVyKTsKLSAgICAgICAgICAgIGlm
IChtX2lnbm9yZUNhc2UpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3RoZXIgPSBranNfcGNyZV91
Y3Bfb3RoZXJjYXNlKG1fY2hfYnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXIgIT0g
LTEpCi0gICAgICAgICAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNoZXNVbmljb2RlLCBvdGhl
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9jaF9idWZmZXIgPSAtMTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcGVuZGluZ19kYXNoKSB7Ci0gICAgICAgIGFkZFNvcnRl
ZChtX21hdGNoZXMsICctJyk7Ci0gICAgfQotfQotCi12b2lkIENoYXJhY3RlckNsYXNzQ29uc3Ry
dWN0b3I6OmFwcGVuZChDaGFyYWN0ZXJDbGFzcyYgb3RoZXIpCi17Ci0gICAgLy8gW3gtXHNdIHdp
bGwgYWRkLCAneCcsICctJywgYW5kIGFsbCB1bmljb2RlIHNwYWNlcyB0byBuZXcgY2xhc3MgKHNh
bWUgYXMgW3hccy1dKS4KLSAgICAvLyBOZWVkIHRvIGNoZWNrIHRoZSBzcGVjLCByZWFsbHksIGJ1
dCB0aGluayB0aGlzIG1hdGNoZXMgUENSRSBiZWhhdmlvdXIuCi0gICAgZmx1c2goKTsKLSAgICAK
LSAgICBpZiAob3RoZXIubnVtTWF0Y2hlcykgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG90aGVyLm51bU1hdGNoZXM7ICsraSkKLSAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNo
ZXMsIG90aGVyLm1hdGNoZXNbaV0pOwotICAgIH0KLSAgICBpZiAob3RoZXIubnVtUmFuZ2VzKSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIubnVtUmFuZ2VzOyArK2kpCi0g
ICAgICAgICAgICBhZGRTb3J0ZWRSYW5nZShtX3Jhbmdlcywgb3RoZXIucmFuZ2VzW2ldLmJlZ2lu
LCBvdGhlci5yYW5nZXNbaV0uZW5kKTsKLSAgICB9Ci0gICAgaWYgKG90aGVyLm51bU1hdGNoZXNV
bmljb2RlKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIubnVtTWF0Y2hl
c1VuaWNvZGU7ICsraSkKLSAgICAgICAgICAgIGFkZFNvcnRlZChtX21hdGNoZXNVbmljb2RlLCBv
dGhlci5tYXRjaGVzVW5pY29kZVtpXSk7Ci0gICAgfQotICAgIGlmIChvdGhlci5udW1SYW5nZXNV
bmljb2RlKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIubnVtUmFuZ2Vz
VW5pY29kZTsgKytpKQotICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2UobV9yYW5nZXNVbmljb2Rl
LCBvdGhlci5yYW5nZXNVbmljb2RlW2ldLmJlZ2luLCBvdGhlci5yYW5nZXNVbmljb2RlW2ldLmVu
ZCk7Ci0gICAgfQotfQotCiBjbGFzcyBHZW5lcmF0ZUF0b21GdW5jdG9yIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5HZW5lcmF0ZUF0b21GdW5jdG9yKCkge30KQEAgLTE0MzcsMTkgKzEwOTIsMTMg
QEAgYm9vbCBXUkVDUGFyc2VyOjpwYXJzZUNoYXJhY3RlckNsYXNzKEptcAogICAgIGNvbnN1bWUo
KTsKIAogICAgIC8vIGxhemlseSBjYXRjaCByZXZlcnNlZCByYW5nZXMgKFt6LWFdKWluIGNoYXJh
Y3RlciBjbGFzc2VzCi0gICAgaWYgKGNoYXJDbGFzc0NvbnN0cnVjdG9yLm1fdXBzaWRlRG93bikg
eworICAgIGlmIChjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5pc1Vwc2lkZURvd24oKSkgewogICAgICAg
ICBtX2VyciA9IEVycm9yX21hbGZvcm1lZENoYXJhY3RlckNsYXNzOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgY2hhckNsYXNzQ29uc3RydWN0b3IuZmx1c2goKTsKLQotICAg
IENoYXJhY3RlckNsYXNzIGNoYXJDbGFzcyA9IHsKLSAgICAgICAgY2hhckNsYXNzQ29uc3RydWN0
b3IubV9tYXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzc0NvbnN0cnVjdG9yLm1fbWF0Y2hlcy5zaXpl
KCksCi0gICAgICAgIGNoYXJDbGFzc0NvbnN0cnVjdG9yLm1fcmFuZ2VzLmJlZ2luKCksIGNoYXJD
bGFzc0NvbnN0cnVjdG9yLm1fcmFuZ2VzLnNpemUoKSwKLSAgICAgICAgY2hhckNsYXNzQ29uc3Ry
dWN0b3IubV9tYXRjaGVzVW5pY29kZS5iZWdpbigpLCBjaGFyQ2xhc3NDb25zdHJ1Y3Rvci5tX21h
dGNoZXNVbmljb2RlLnNpemUoKSwKLSAgICAgICAgY2hhckNsYXNzQ29uc3RydWN0b3IubV9yYW5n
ZXNVbmljb2RlLmJlZ2luKCksIGNoYXJDbGFzc0NvbnN0cnVjdG9yLm1fcmFuZ2VzVW5pY29kZS5z
aXplKCksCi0gICAgfTsKKyAgICBDaGFyYWN0ZXJDbGFzcyBjaGFyQ2xhc3MgPSBjaGFyQ2xhc3ND
b25zdHJ1Y3Rvci5jaGFyQ2xhc3MoKTsKICAgICByZXR1cm4gcGFyc2VDaGFyYWN0ZXJDbGFzc1F1
YW50aWZpZXIoZmFpbHVyZXMsIGNoYXJDbGFzcywgaW52ZXJ0KTsKIH0KIAo=
</data>
<flag name="review"
          id="10416"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>