<?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>5161</bug_id>
          
          <creation_ts>2005-09-27 23:47:06 -0700</creation_ts>
          <short_desc>move HashMap/HashSet code down to JavaScriptCore</short_desc>
          <delta_ts>2005-09-28 15:17:51 -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>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>20715</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-27 23:47:06 -0700</bug_when>
    <thetext>HashSet and HashMap should be moved down to JavaScriptCore so we can have a single hashtable 
implementation to meet all our hashing needs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20718</commentid>
    <comment_count>1</comment_count>
      <attachid>4076</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-28 01:44:39 -0700</bug_when>
    <thetext>Created attachment 4076
do it (also renamed HashMap::insert to HashMap::set for clarity)

I measured and found no JS iBench or cvs-base performance regressions with this
patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20855</commentid>
    <comment_count>2</comment_count>
      <attachid>4076</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-28 15:17:51 -0700</bug_when>
    <thetext>Comment on attachment 4076
do it (also renamed HashMap::insert to HashMap::set for clarity)

Eric said ok to this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4076</attachid>
            <date>2005-09-28 01:44:39 -0700</date>
            <delta_ts>2005-09-28 15:17:51 -0700</delta_ts>
            <desc>do it (also renamed HashMap::insert to HashMap::set for clarity)</desc>
            <filename>move-hash.patch.txt</filename>
            <type>text/plain</type>
            <size>136774</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg0
MQpkaWZmIC1wIC11IC1yMS44NDEgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCi0tLSBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJMjggU2VwIDIwMDUgMDI6MjU6NDggLTAwMDAJMS44NDEKKysrIEph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkyOCBTZXAgMjAwNSAwODowMTowNSAtMDAwMApAQCAtMSwz
ICsxLDEzMyBAQAorMjAwNS0wOS0yNyAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJLSBtb3ZlIEhhc2hN
YXAvSGFzaFNldCBjb2RlIGRvd24gdG8gSmF2YVNjcmlwdENvcmUKKwkKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGtqcy9pbnRl
cm5hbC5jcHA6CisgICAgICAgIChLSlM6OmludGVycHJldGVyTWFwKTogRnVuY3Rpb24gdGhhdCBm
ZXRjaGVzIHRoZSBpbnRlcnByZXRlciBtYXAgb24gZGVtYW5kLiAKKyAgICAgICAgKEtKUzo6SW50
ZXJwcmV0ZXJJbXA6OkludGVycHJldGVySW1wKTogUmVwbGFjZSB1c2Ugb2YgSW50ZXJwcmV0ZXJN
YXAKKwljbGFzcyB3aXRoIGFuIGFwcHJvcHJpYXRlIEhhc2hNYXAuCisgICAgICAgIChLSlM6Oklu
dGVycHJldGVySW1wOjpjbGVhcik6IGRpdHRvCisgICAgICAgIChLSlM6OkludGVycHJldGVySW1w
OjppbnRlcnByZXRlcldpdGhHbG9iYWxPYmplY3QpOiBkaXR0bworICAgICAgICAqIGtqcy9pbnRl
cnByZXRlcl9tYXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGtqcy9pbnRlcnByZXRlcl9tYXAu
aDogUmVtb3ZlZC4KKworCVRoZSBIYXNoTWFwL0hhc2hTZXQgY29kZSAoY29waWVkIGFuZCBzbGln
aHRseSB0d2Vha2VkIGZyb20gV2ViQ29yZSkKKyAgICAgICAgCisJKiBreG1sY29yZS9IYXNoRnVu
Y3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAoS1hNTENvcmU6OjQpOgorICAgICAgICAoS1hNTENv
cmU6OjgpOgorICAgICAgICAoS1hNTENvcmU6Oik6CisgICAgICAgIChLWE1MQ29yZTo6UG9pbnRl
ckhhc2g6Omhhc2gpOgorICAgICAgICAoS1hNTENvcmU6OlBvaW50ZXJIYXNoOjplcXVhbCk6Cisg
ICAgICAgICoga3htbGNvcmUvSGFzaE1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEtYTUxDb3JlOjpl
eHRyYWN0Rmlyc3QpOgorICAgICAgICAoS1hNTENvcmU6Okhhc2hNYXA6Okhhc2hNYXApOgorICAg
ICAgICAoS1hNTENvcmU6Ojo6c2l6ZSk6CisgICAgICAgIChLWE1MQ29yZTo6OjpjYXBhY2l0eSk6
CisgICAgICAgIChLWE1MQ29yZTo6Ojppc0VtcHR5KToKKyAgICAgICAgKEtYTUxDb3JlOjo6OmJl
Z2luKToKKyAgICAgICAgKEtYTUxDb3JlOjo6OmVuZCk6CisgICAgICAgIChLWE1MQ29yZTo6Ojpm
aW5kKToKKyAgICAgICAgKEtYTUxDb3JlOjo6OmNvbnRhaW5zKToKKyAgICAgICAgKEtYTUxDb3Jl
Ojo6OnNldCk6CisgICAgICAgIChLWE1MQ29yZTo6OjpnZXQpOgorICAgICAgICAoS1hNTENvcmU6
Ojo6cmVtb3ZlKToKKyAgICAgICAgKEtYTUxDb3JlOjo6OmNsZWFyKToKKyAgICAgICAgKEtYTUxD
b3JlOjpkZWxldGVBbGxWYWx1ZXMpOgorICAgICAgICAqIGt4bWxjb3JlL0hhc2hNYXBQdHJTcGVj
Lmg6IEFkZGVkLgorICAgICAgICAoS1hNTENvcmU6OlBvaW50ZXJIYXNoSXRlcmF0b3JBZGFwdGVy
OjpQb2ludGVySGFzaEl0ZXJhdG9yQWRhcHRlcik6CisgICAgICAgIChLWE1MQ29yZTo6UG9pbnRl
ckhhc2hJdGVyYXRvckFkYXB0ZXI6Om9wZXJhdG9yKik6CisgICAgICAgIChLWE1MQ29yZTo6UG9p
bnRlckhhc2hJdGVyYXRvckFkYXB0ZXI6Om9wZXJhdG9yLT4pOgorICAgICAgICAoS1hNTENvcmU6
OlBvaW50ZXJIYXNoSXRlcmF0b3JBZGFwdGVyOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEtYTUxD
b3JlOjpQb2ludGVySGFzaEl0ZXJhdG9yQWRhcHRlcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChL
WE1MQ29yZTo6UG9pbnRlckhhc2hJdGVyYXRvckFkYXB0ZXI6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoS1hNTENvcmU6OlBvaW50ZXJIYXNoQ29uc3RJdGVyYXRvckFkYXB0ZXI6OlBvaW50ZXJIYXNo
Q29uc3RJdGVyYXRvckFkYXB0ZXIpOgorICAgICAgICAoS1hNTENvcmU6OlBvaW50ZXJIYXNoQ29u
c3RJdGVyYXRvckFkYXB0ZXI6Om9wZXJhdG9yKik6CisgICAgICAgIChLWE1MQ29yZTo6UG9pbnRl
ckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRlcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChLWE1MQ29y
ZTo6UG9pbnRlckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRlcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChLWE1MQ29yZTo6UG9pbnRlckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRlcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChLWE1MQ29yZTo6UG9pbnRlckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRlcjo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChLWE1MQ29yZTo6KToKKyAgICAgICAgKiBreG1sY29yZS9IYXNo
U2V0Lmg6IEFkZGVkLgorICAgICAgICAoS1hNTENvcmU6OmlkZW50aXR5RXh0cmFjdCk6CisgICAg
ICAgIChLWE1MQ29yZTo6Y29udmVydEFkYXB0ZXIpOgorICAgICAgICAoS1hNTENvcmU6Okhhc2hT
ZXQ6Okhhc2hTZXQpOgorICAgICAgICAoS1hNTENvcmU6Ojo6c2l6ZSk6CisgICAgICAgIChLWE1M
Q29yZTo6OjpjYXBhY2l0eSk6CisgICAgICAgIChLWE1MQ29yZTo6Ojppc0VtcHR5KToKKyAgICAg
ICAgKEtYTUxDb3JlOjo6OmJlZ2luKToKKyAgICAgICAgKEtYTUxDb3JlOjo6OmVuZCk6CisgICAg
ICAgIChLWE1MQ29yZTo6OjpmaW5kKToKKyAgICAgICAgKEtYTUxDb3JlOjo6OmNvbnRhaW5zKToK
KyAgICAgICAgKEtYTUxDb3JlOjo6Omluc2VydCk6CisgICAgICAgIChLWE1MQ29yZTo6OjpyZW1v
dmUpOgorICAgICAgICAoS1hNTENvcmU6Ojo6Y2xlYXIpOgorICAgICAgICAqIGt4bWxjb3JlL0hh
c2hUYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZVN0YXRzOjp+
SGFzaFRhYmxlU3RhdHMpOgorICAgICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZVN0YXRzOjpyZWNv
cmRDb2xsaXNpb25BdENvdW50KToKKyAgICAgICAgKiBreG1sY29yZS9IYXNoVGFibGUuaDogQWRk
ZWQuCisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlSXRlcmF0b3I6OnNraXBFbXB0eUJ1Y2tl
dHMpOgorICAgICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZUl0ZXJhdG9yOjpIYXNoVGFibGVJdGVy
YXRvcik6CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlSXRlcmF0b3I6Om9wZXJhdG9yKik6
CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAg
ICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZUl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAg
KEtYTUxDb3JlOjpIYXNoVGFibGVJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChLWE1M
Q29yZTo6SGFzaFRhYmxlSXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoS1hNTENvcmU6
Okhhc2hUYWJsZUNvbnN0SXRlcmF0b3I6Okhhc2hUYWJsZUNvbnN0SXRlcmF0b3IpOgorICAgICAg
ICAoS1hNTENvcmU6Okhhc2hUYWJsZUNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAg
IChLWE1MQ29yZTo6SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAg
IChLWE1MQ29yZTo6SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjo6c2tpcEVtcHR5QnVja2V0cyk6Cisg
ICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3IrKyk6Cisg
ICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjpIYXNoVGFibGUpOgorICAgICAgICAoS1hNTENv
cmU6Okhhc2hUYWJsZTo6fkhhc2hUYWJsZSk6CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxl
OjpiZWdpbik6CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjplbmQpOgorICAgICAgICAo
S1hNTENvcmU6Okhhc2hUYWJsZTo6c2l6ZSk6CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxl
OjpjYXBhY2l0eSk6CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjppbnNlcnQpOgorICAg
ICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tldCk6CisgICAgICAgIChLWE1M
Q29yZTo6SGFzaFRhYmxlOjppc0RlbGV0ZWRCdWNrZXQpOgorICAgICAgICAoS1hNTENvcmU6Okhh
c2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tldCk6CisgICAgICAgIChLWE1MQ29yZTo6SGFz
aFRhYmxlOjpoYXNoKToKKyAgICAgICAgKEtYTUxDb3JlOjpIYXNoVGFibGU6OmVxdWFsKToKKyAg
ICAgICAgKEtYTUxDb3JlOjpIYXNoVGFibGU6OmlkZW50aXR5Q29udmVydCk6CisgICAgICAgIChL
WE1MQ29yZTo6SGFzaFRhYmxlOjpleHRyYWN0S2V5KToKKyAgICAgICAgKEtYTUxDb3JlOjpIYXNo
VGFibGU6Omxvb2t1cCk6CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjpzaG91bGRFeHBh
bmQpOgorICAgICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZTo6bXVzdFJlaGFzaEluUGxhY2UpOgor
ICAgICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZTo6c2hvdWxkU2hyaW5rKToKKyAgICAgICAgKEtY
TUxDb3JlOjpIYXNoVGFibGU6OnNocmluayk6CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxl
OjpjbGVhckJ1Y2tldCk6CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjpkZWxldGVCdWNr
ZXQpOgorICAgICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZTo6bWFrZUxvb2t1cFJlc3VsdCk6Cisg
ICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoS1hN
TENvcmU6Okhhc2hUYWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IpOgorICAgICAgICAoS1hNTENvcmU6
Ojo6bG9va3VwKToKKyAgICAgICAgKEtYTUxDb3JlOjo6Omluc2VydCk6CisgICAgICAgIChLWE1M
Q29yZTo6OjpyZWluc2VydCk6CisgICAgICAgIChLWE1MQ29yZTo6OjpmaW5kKToKKyAgICAgICAg
KEtYTUxDb3JlOjo6OmNvbnRhaW5zKToKKyAgICAgICAgKEtYTUxDb3JlOjo6OnJlbW92ZSk6Cisg
ICAgICAgIChLWE1MQ29yZTo6OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKEtYTUxDb3JlOjo6
OmV4cGFuZCk6CisgICAgICAgIChLWE1MQ29yZTo6OjpyZWhhc2gpOgorICAgICAgICAoS1hNTENv
cmU6Ojo6Y2xlYXIpOgorICAgICAgICAoS1hNTENvcmU6Ojo6SGFzaFRhYmxlKToKKyAgICAgICAg
KEtYTUxDb3JlOjo6OnN3YXApOgorICAgICAgICAoS1hNTENvcmU6Ojo6b3BlcmF0b3IpOgorICAg
ICAgICAoS1hNTENvcmU6Ojo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKEtYTUxD
b3JlOjo6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAqIGt4bWxj
b3JlL0hhc2hUcmFpdHMuaDogQWRkZWQuCisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRyYWl0czo6
ZW1wdHlWYWx1ZSk6CisgICAgICAgIChLWE1MQ29yZTo6KToKKyAgICAgICAgKEtYTUxDb3JlOjpQ
YWlySGFzaFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChLWE1MQ29yZTo6UGFpckhhc2hU
cmFpdHM6OmRlbGV0ZWRWYWx1ZSk6CisKIDIwMDUtMDktMjcgIEFkZWxlIFBldGVyc29uICA8YWRl
bGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llai4KSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAt
cCAtdSAtcjEuMTQgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkyOCBTZXAgMjAwNSAwMDowNzozMSAtMDAwMAkxLjE0CisrKyBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTI4IFNlcCAy
MDA1IDA4OjAxOjA3IC0wMDAwCkBAIC0zMiwxMCArMzIsMTcgQEAKIAkJNjU0MUJENzMwOEU4MEEx
NzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1NDFCRDZGMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1NwaW5Mb2NrLmgg
Ki87IH07CiAJCTY1NDFCRDc0MDhFODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDcwMDhF
ODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCAqLzsgfTsKIAkJNjU0MUJENzUwOEU4
MEExNzAwMkNCRUU3IC8qIFRDU3lzdGVtQWxsb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDcxMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3Rl
bUFsbG9jLmggKi87IH07CisJCTY1NTdFOEY4MDhFQTVENEQwMDQ5Q0RGQyAvKiBIYXNoTWFwUHRy
U3BlYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU1
N0U4RjcwOEVBNUQ0RDAwNDlDREZDIC8qIEhhc2hNYXBQdHJTcGVjLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2MjFFNkQwODlFODU5NzAwNzYw
RjM1IC8qIHByb3BlcnR5X3Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU2MjFFNkIwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3Qu
Y3BwICovOyB9OwogCQk2NTYyMUU2RTA4OUU4NTk3MDA3NjBGMzUgLyogcHJvcGVydHlfc2xvdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2MjFFNkMw
ODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTYyMUU2RjA4OUU4NUQzMDA3NjBGMzUgLyog
cHJvcGVydHlfc2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTYyMUU2QjA4OUU4NTk3MDA3NjBGMzUgLyogcHJvcGVydHlfc2xvdC5jcHAgKi87
IH07CiAJCTY1NjIxRTcwMDg5RTg1RDMwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTYyMUU2QzA4OUU4NTk3
MDA3NjBGMzUgLyogcHJvcGVydHlfc2xvdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTY1REZDOTMwMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoRnVu
Y3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NURGQzkyQTA4RUExNzNBMDBGNzMwMEIgLyogSGFzaEZ1bmN0aW9ucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTY1REZDOTMxMDhFQTE3M0EwMEY3
MzAwQiAvKiBIYXNoTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NURGQzkyQjA4RUExNzNBMDBGNzMwMEIgLyogSGFzaE1hcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTY1REZDOTMyMDhFQTE3M0Ew
MEY3MzAwQiAvKiBIYXNoU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NURGQzkyQzA4RUExNzNBMDBGNzMwMEIgLyogSGFzaFNldC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTY1REZDOTMzMDhFQTE3
M0EwMEY3MzAwQiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjVERkM5MkQwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5j
cHAgKi87IH07CisJCTY1REZDOTM0MDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoVGFibGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REZDOTJFMDhFQTE3
M0EwMEY3MzAwQiAvKiBIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk2NURGQzkzNTA4RUExNzNBMDBGNzMwMEIgLyogSGFzaFRyYWl0
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVERkM5
MkYwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUcmFpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NUUyMTdCRDA4RTdFRUNDMDAyM0U1RjYgLyog
QXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjVFMjE3QjcwOEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NUUyMTdCRTA4RTdFRUNDMDAy
M0U1RjYgLyogQXNzZXJ0aW9ucy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1RTIxN0I4MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRpb25zLm1tICov
OyB9OwogCQk2NUUyMTdCRjA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUyMTdCOTA4RTdFRUND
MDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAgKi87IH07CkBAIC0xMTEsNyArMTE4LDYgQEAKIAkJ
OTMyRjVCODMwODIyQTFDNzAwNzM2OTc1IC8qIGNfY2xhc3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODJBNTNCMDYwMTJDMzAwMENCRDJGMiAvKiBj
X2NsYXNzLmggKi87IH07CiAJCTkzMkY1Qjg0MDgyMkExQzcwMDczNjk3NSAvKiBOUF9qc29iamVj
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QkU3
RjQwNjEwRTM5NjAwMjIxOTQ3IC8qIE5QX2pzb2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMyRjVCODUwODIyQTFDNzAwNzM2OTc1IC8q
IG5wcnVudGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE5OUIxQkUwNjFCNjVCQzAwNzBDMDA2IC8qIG5wcnVudGltZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzMkY1Qjg3MDgyMkExQzcwMDcz
Njk3NSAvKiBpbnRlcnByZXRlcl9tYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1QUIwMDQ5MDYyNjFDQkEwMDc2REU2MyAvKiBpbnRlcnByZXRlcl9t
YXAuaCAqLzsgfTsKIAkJOTMyRjVCODgwODIyQTFDNzAwNzM2OTc1IC8qIHByb3RlY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QzAyRkJCMDYzNzQ2
MkEwMDNFN0VFNiAvKiBwcm90ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTMyRjVCODkwODIyQTFDNzAwNzM2OTc1IC8qIHByb3RlY3RlZF92
YWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
MEI2OEQ5MDYzOTAzM0YwMDlENDJERSAvKiBwcm90ZWN0ZWRfdmFsdWVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMyRjVCOEEwODIyQTFDNzAw
NzM2OTc1IC8qIFdlYlNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE4NjNGNkYwNjU0MjBFODAwRTlFOEREIC8qIFdlYlNjcmlwdE9i
amVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0xNzIsNyArMTc4LDYgQEAKIAkJOTMyRjVCQzkwODIyQTFDNzAwNzM2OTc1IC8qIGNfdXRpbGl0
eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgy
QTRGQjA2MDEwRjgyMDBDQkQyRjIgLyogY191dGlsaXR5LmNwcCAqLzsgfTsKIAkJOTMyRjVCQ0Ew
ODIyQTFDNzAwNzM2OTc1IC8qIGNfY2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4MkE1M0EwNjAxMkMzMDAwQ0JEMkYyIC8qIGNfY2xhc3Mu
Y3BwICovOyB9OwogCQk5MzJGNUJDQjA4MjJBMUM3MDA3MzY5NzUgLyogbnBydW50aW1lLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTlCMUJEMDYx
QjY1QkMwMDcwQzAwNiAvKiBucHJ1bnRpbWUuY3BwICovOyB9OwotCQk5MzJGNUJDQzA4MjJBMUM3
MDA3MzY5NzUgLyogaW50ZXJwcmV0ZXJfbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QUIwMDQ4MDYyNjFDQkEwMDc2REU2MyAvKiBpbnRlcnBy
ZXRlcl9tYXAuY3BwICovOyB9OwogCQk5MzJGNUJDRDA4MjJBMUM3MDA3MzY5NzUgLyogcHJvdGVj
dGVkX3ZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTBCNjhEODA2MzkwMzNGMDA5RDQyREUgLyogcHJvdGVjdGVkX3ZhbHVlcy5jcHAgKi87
IH07CiAJCTkzMkY1QkNFMDgyMkExQzcwMDczNjk3NSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg2M0ZDNDA2NTQy
RDMxMDBFOUU4REQgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICovOyB9OwogCQk5MzJGNUJDRjA4MjJB
MUM3MDA3MzY5NzUgLyogam5pX29iamMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTdFRjM3MzA2RDY5NTkzMDAwN0MxQkEgLyogam5pX29iamMubW0g
Ki87IH07CkBAIC0yNjksNyArMjc0LDYgQEAKIAkJQTg1RDgyMzMwODdCMjgyMjAwNkE5MTcyIC8q
IGNfY2xhc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxODJBNTNCMDYwMTJDMzAwMENCRDJGMiAvKiBjX2NsYXNzLmggKi87IH07CiAJCUE4NUQ4MjM0
MDg3QjI4MjIwMDZBOTE3MiAvKiBOUF9qc29iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QkU3RjQwNjEwRTM5NjAwMjIxOTQ3IC8qIE5QX2pz
b2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTg1RDgyMzUwODdCMjgyMjAwNkE5MTcyIC8qIG5wcnVudGltZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OUIxQkUwNjFCNjVCQzAwNzBDMDA2
IC8qIG5wcnVudGltZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUE4NUQ4MjM2MDg3QjI4MjIwMDZBOTE3MiAvKiBpbnRlcnByZXRlcl9tYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QUIwMDQ5MDYy
NjFDQkEwMDc2REU2MyAvKiBpbnRlcnByZXRlcl9tYXAuaCAqLzsgfTsKIAkJQTg1RDgyMzcwODdC
MjgyMjAwNkE5MTcyIC8qIHByb3RlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1QzAyRkJCMDYzNzQ2MkEwMDNFN0VFNiAvKiBwcm90ZWN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg1RDgyMzgw
ODdCMjgyMjAwNkE5MTcyIC8qIHByb3RlY3RlZF92YWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MEI2OEQ5MDYzOTAzM0YwMDlENDJERSAvKiBw
cm90ZWN0ZWRfdmFsdWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTg1RDgyMzkwODdCMjgyMjAwNkE5MTcyIC8qIFdlYlNjcmlwdE9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NjNGNkYw
NjU0MjBFODAwRTlFOEREIC8qIFdlYlNjcmlwdE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzIsNyArMzM2LDYgQEAKIAkJQTg1RDgy
NzgwODdCMjgyMjAwNkE5MTcyIC8qIGNfdXRpbGl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgyQTRGQjA2MDEwRjgyMDBDQkQyRjIgLyogY191
dGlsaXR5LmNwcCAqLzsgfTsKIAkJQTg1RDgyNzkwODdCMjgyMjAwNkE5MTcyIC8qIGNfY2xhc3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4MkE1
M0EwNjAxMkMzMDAwQ0JEMkYyIC8qIGNfY2xhc3MuY3BwICovOyB9OwogCQlBODVEODI3QTA4N0Iy
ODIyMDA2QTkxNzIgLyogbnBydW50aW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTlCMUJEMDYxQjY1QkMwMDcwQzAwNiAvKiBucHJ1bnRpbWUu
Y3BwICovOyB9OwotCQlBODVEODI3QjA4N0IyODIyMDA2QTkxNzIgLyogaW50ZXJwcmV0ZXJfbWFw
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QUIw
MDQ4MDYyNjFDQkEwMDc2REU2MyAvKiBpbnRlcnByZXRlcl9tYXAuY3BwICovOyB9OwogCQlBODVE
ODI3QzA4N0IyODIyMDA2QTkxNzIgLyogcHJvdGVjdGVkX3ZhbHVlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTBCNjhEODA2MzkwMzNGMDA5RDQy
REUgLyogcHJvdGVjdGVkX3ZhbHVlcy5jcHAgKi87IH07CiAJCUE4NUQ4MjdEMDg3QjI4MjIwMDZB
OTE3MiAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTg2M0ZDNDA2NTQyRDMxMDBFOUU4REQgLyogV2ViU2NyaXB0T2Jq
ZWN0Lm1tICovOyB9OwogCQlBODVEODI3RTA4N0IyODIyMDA2QTkxNzIgLyogam5pX29iamMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdFRjM3MzA2
RDY5NTkzMDAwN0MxQkEgLyogam5pX29iamMubW0gKi87IH07CkBAIC00OTksMTMgKzUwMiwxOCBA
QAogCQk2NTQxQkQ2RjA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVENTcGluTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NTQxQkQ3MDA4RTgwQTE3MDAyQ0JFRTcgLyogVENTeXN0ZW1BbGxvYy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVENTeXN0ZW1BbGxvYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NDFCRDcxMDhFODBBMTcwMDJDQkVFNyAv
KiBUQ1N5c3RlbUFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUQ1N5
c3RlbUFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1NTdFOEY3MDhFQTVE
NEQwMDQ5Q0RGQyAvKiBIYXNoTWFwUHRyU3BlYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGFzaE1hcFB0clNwZWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU2MEE0Q0YwNEIzQjNFNzAwOEFFOTUyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
IjxhYnNvbHV0ZT4iOyB9OwogCQk2NTYwQTYzRDA0QjNCNjlGMDA4QUU5NTIgLyogQ29yZVNlcnZp
Y2VzLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29yZVNlcnZpY2VzLmZyYW1ld29yazsg
cGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcms7
IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTY1NjIxRTZCMDg5RTg1OTcwMDc2MEYz
NSAvKiBwcm9wZXJ0eV9zbG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBwcm9wZXJ0eV9zbG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2
MjFFNkMwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHByb3BlcnR5X3Nsb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNjVBQjAwNDgwNjI2MUNCQTAwNzZERTYzIC8qIGludGVycHJldGVyX21hcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJwcmV0ZXJfbWFwLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjVBQjAwNDkwNjI2MUNCQTAwNzZERTYz
IC8qIGludGVycHJldGVyX21hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
aW50ZXJwcmV0ZXJfbWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1QzAyRkJC
MDYzNzQ2MkEwMDNFN0VFNiAvKiBwcm90ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBwcm90ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1REZDOTJB
MDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBIYXNoRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTY1REZDOTJCMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTY1REZDOTJDMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTY1REZDOTJEMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoVGFibGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhhc2hUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTY1REZDOTJFMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoVGFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2NURGQzkyRjA4RUExNzNBMDBGNzMwMEIgLyogSGFzaFRyYWl0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaFRyYWl0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUUyMTdCNzA4RTdFRUNDMDAyM0U1RjYgLyogQXNz
ZXJ0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXNzZXJ0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUUyMTdCODA4RTdFRUNDMDAyM0U1RjYg
LyogQXNzZXJ0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBBc3NlcnRpb25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUUyMTdCOTA4
RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmFzdE1hbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03MDMsOCArNzExLDYgQEAKIAkJCQk2NTBCNjhEODA2MzkwMzNGMDA5RDQyREUgLyogcHJv
dGVjdGVkX3ZhbHVlcy5jcHAgKi8sCiAJCQkJNjUyQzEwN0UwOERBN0IxRTAwMjA4ODdEIC8qIHBy
b3RlY3RlZF9yZWZlcmVuY2UuaCAqLywKIAkJCQk2NTBCNjhEOTA2MzkwMzNGMDA5RDQyREUgLyog
cHJvdGVjdGVkX3ZhbHVlcy5oICovLAotCQkJCTY1QUIwMDQ4MDYyNjFDQkEwMDc2REU2MyAvKiBp
bnRlcnByZXRlcl9tYXAuY3BwICovLAotCQkJCTY1QUIwMDQ5MDYyNjFDQkEwMDc2REU2MyAvKiBp
bnRlcnByZXRlcl9tYXAuaCAqLywKIAkJCQlGNjkyQTg0RTAyNTU1OTdEMDFGRjYwRjcgLyogYXJy
YXlfb2JqZWN0LmggKi8sCiAJCQkJRjY5MkE4NEQwMjU1NTk3RDAxRkY2MEY3IC8qIGFycmF5X29i
amVjdC5jcHAgKi8sCiAJCQkJRjY5MkE4NTAwMjU1NTk3RDAxRkY2MEY3IC8qIGJvb2xfb2JqZWN0
LmNwcCAqLywKQEAgLTgzNCw2ICs4NDAsMTMgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNE
IC8qIGt4bWxjb3JlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk2NTU3RThGNzA4RUE1RDREMDA0OUNERkMgLyogSGFzaE1hcFB0clNwZWMuaCAqLywKKwkJ
CQk2NURGQzkyQTA4RUExNzNBMDBGNzMwMEIgLyogSGFzaEZ1bmN0aW9ucy5oICovLAorCQkJCTY1
REZDOTJCMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoTWFwLmggKi8sCisJCQkJNjVERkM5MkMwOEVB
MTczQTAwRjczMDBCIC8qIEhhc2hTZXQuaCAqLywKKwkJCQk2NURGQzkyRDA4RUExNzNBMDBGNzMw
MEIgLyogSGFzaFRhYmxlLmNwcCAqLywKKwkJCQk2NURGQzkyRTA4RUExNzNBMDBGNzMwMEIgLyog
SGFzaFRhYmxlLmggKi8sCisJCQkJNjVERkM5MkYwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUcmFp
dHMuaCAqLywKIAkJCQk2NTQxQkQ2RTA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFwLmggKi8s
CiAJCQkJNjU0MUJENkYwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCAqLywKIAkJCQk2
NTQxQkQ3MDA4RTgwQTE3MDAyQ0JFRTcgLyogVENTeXN0ZW1BbGxvYy5jcHAgKi8sCkBAIC05ODIs
NyArOTk1LDYgQEAKIAkJCQk5MzJGNUI4MzA4MjJBMUM3MDA3MzY5NzUgLyogY19jbGFzcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMyRjVCODQwODIyQTFDNzAwNzM2OTc1IC8qIE5QX2pzb2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzJGNUI4NTA4MjJBMUM3MDA3MzY5NzUgLyogbnBydW50
aW1lLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MzJGNUI4NzA4MjJBMUM3MDA3MzY5NzUgLyogaW50
ZXJwcmV0ZXJfbWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzJGNUI4ODA4MjJBMUM3MDA3MzY5
NzUgLyogcHJvdGVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMyRjVCODkwODIyQTFDNzAwNzM2
OTc1IC8qIHByb3RlY3RlZF92YWx1ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMkY1QjhBMDgy
MkExQzcwMDczNjk3NSAvKiBXZWJTY3JpcHRPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTAw
NCw2ICsxMDE2LDEyIEBACiAJCQkJNjU0MUJENzIwOEU4MEExNzAwMkNCRUU3IC8qIFRDUGFnZU1h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU0MUJENzMwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3Bp
bkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NDFCRDc1MDhFODBBMTcwMDJDQkVFNyAvKiBU
Q1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKKwkJCQk2NURGQzkzMDA4RUExNzNBMDBGNzMw
MEIgLyogSGFzaEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjVERkM5MzEwOEVBMTcz
QTAwRjczMDBCIC8qIEhhc2hNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1REZDOTMyMDhFQTE3
M0EwMEY3MzAwQiAvKiBIYXNoU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2NURGQzkzNDA4RUEx
NzNBMDBGNzMwMEIgLyogSGFzaFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2NURGQzkzNTA4
RUExNzNBMDBGNzMwMEIgLyogSGFzaFRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU1N0U4
RjgwOEVBNUQ0RDAwNDlDREZDIC8qIEhhc2hNYXBQdHJTcGVjLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTEwNzMsNyArMTA5MSw2IEBACiAJCQkJQTg1RDgyMzMwODdCMjgyMjAwNkE5MTcyIC8qIGNfY2xh
c3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MjM0MDg3QjI4MjIwMDZBOTE3MiAvKiBOUF9q
c29iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg1RDgyMzUwODdCMjgyMjAwNkE5MTcyIC8q
IG5wcnVudGltZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTg1RDgyMzYwODdCMjgyMjAwNkE5MTcy
IC8qIGludGVycHJldGVyX21hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg1RDgyMzcwODdCMjgy
MjAwNkE5MTcyIC8qIHByb3RlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MjM4MDg3QjI4
MjIwMDZBOTE3MiAvKiBwcm90ZWN0ZWRfdmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODVE
ODIzOTA4N0IyODIyMDA2QTkxNzIgLyogV2ViU2NyaXB0T2JqZWN0LmggaW4gSGVhZGVycyAqLywK
QEAgLTE2MzUsNyArMTY1Miw2IEBACiAJCQkJOTMyRjVCQzkwODIyQTFDNzAwNzM2OTc1IC8qIGNf
dXRpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzJGNUJDQTA4MjJBMUM3MDA3MzY5NzUg
LyogY19jbGFzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzJGNUJDQjA4MjJBMUM3MDA3MzY5
NzUgLyogbnBydW50aW1lLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzMkY1QkNDMDgyMkExQzcw
MDczNjk3NSAvKiBpbnRlcnByZXRlcl9tYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMyRjVC
Q0QwODIyQTFDNzAwNzM2OTc1IC8qIHByb3RlY3RlZF92YWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMyRjVCQ0UwODIyQTFDNzAwNzM2OTc1IC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTkzMkY1QkNGMDgyMkExQzcwMDczNjk3NSAvKiBqbmlfb2JqYy5tbSBp
biBTb3VyY2VzICovLApAQCAtMTY1NSw2ICsxNjcxLDcgQEAKIAkJCQk2NUUyMTdCRTA4RTdFRUND
MDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1RTIxN0JGMDhF
N0VFQ0MwMDIzRTVGNiAvKiBGYXN0TWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDFC
RDc0MDhFODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTY1REZDOTMzMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0xNzMyLDcgKzE3NDksNiBAQAogCQkJCUE4NUQ4Mjc4MDg3QjI4MjIwMDZBOTE3MiAv
KiBjX3V0aWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg1RDgyNzkwODdCMjgyMjAwNkE5
MTcyIC8qIGNfY2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg1RDgyN0EwODdCMjgyMjAw
NkE5MTcyIC8qIG5wcnVudGltZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODVEODI3QjA4N0Iy
ODIyMDA2QTkxNzIgLyogaW50ZXJwcmV0ZXJfbWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
NUQ4MjdDMDg3QjI4MjIwMDZBOTE3MiAvKiBwcm90ZWN0ZWRfdmFsdWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4NUQ4MjdEMDg3QjI4MjIwMDZBOTE3MiAvKiBXZWJTY3JpcHRPYmplY3QubW0g
aW4gU291cmNlcyAqLywKIAkJCQlBODVEODI3RTA4N0IyODIyMDA2QTkxNzIgLyogam5pX29iamMu
bW0gaW4gU291cmNlcyAqLywKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5h
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzMKZGlmZiAtcCAtdSAtcjEuNzMgSmF2YVNj
cmlwdENvcmUva2pzL2ludGVybmFsLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFs
LmNwcAkyNyBTZXAgMjAwNSAyMjozNjo0OSAtMDAwMAkxLjczCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvaW50ZXJuYWwuY3BwCTI4IFNlcCAyMDA1IDA4OjAxOjA3IC0wMDAwCkBAIC0zNCw3ICszNCw2
IEBACiAjaW5jbHVkZSAiZXJyb3Jfb2JqZWN0LmgiCiAjaW5jbHVkZSAiZnVuY3Rpb25fb2JqZWN0
LmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJpbnRlcnByZXRlcl9tYXAuaCIK
ICNpbmNsdWRlICJsZXhlci5oIgogI2luY2x1ZGUgIm1hdGhfb2JqZWN0LmgiCiAjaW5jbHVkZSAi
bm9kZXMuaCIKQEAgLTQ1LDYgKzQ0LDggQEAKICNpbmNsdWRlICJyZWdleHBfb2JqZWN0LmgiCiAj
aW5jbHVkZSAic3RyaW5nX29iamVjdC5oIgogCisjaW5jbHVkZSA8a3htbGNvcmUvSGFzaE1hcC5o
PgorCiAjaWYgV0lOMzIKICNpbmNsdWRlIDxmbG9hdC5oPgogI2RlZmluZSBjb3B5c2lnbihhLCBi
KSBfY29weXNpZ24oYSwgYikKQEAgLTQ0Miw2ICs0NDMsMTQgQEAgdm9pZCBJbnRlcnByZXRlcklt
cDo6Z2xvYmFsQ2xlYXIoKQogICAgIENvbnN0YW50VmFsdWVzOjpjbGVhcigpOwogfQogCit0eXBl
ZGVmIEhhc2hNYXA8T2JqZWN0SW1wICosIEludGVycHJldGVySW1wICosIFBvaW50ZXJIYXNoPE9i
amVjdEltcCAqPiA+IEludGVycHJldGVyTWFwOworCitzdGF0aWMgaW5saW5lIEludGVycHJldGVy
TWFwICZpbnRlcnByZXRlck1hcCgpCit7CisgICAgc3RhdGljIEludGVycHJldGVyTWFwICptYXAg
PSBuZXcgSW50ZXJwcmV0ZXJNYXA7CisgICAgcmV0dXJuICptYXA7Cit9CisKIEludGVycHJldGVy
SW1wOjpJbnRlcnByZXRlckltcChJbnRlcnByZXRlciAqaW50ZXJwLCBPYmplY3RJbXAgKmdsb2Ip
CiAgICAgOiBnbG9iRXhlYyhpbnRlcnAsIDApCiAgICAgLCBfY29udGV4dCgwKQpAQCAtNDYyLDcg
KzQ3MSw3IEBAIEludGVycHJldGVySW1wOjpJbnRlcnByZXRlckltcChJbnRlcnByZXQKICAgICBn
bG9iYWxJbml0KCk7CiAgIH0KIAotICBJbnRlcnByZXRlck1hcDo6c2V0SW50ZXJwcmV0ZXJGb3JH
bG9iYWxPYmplY3QodGhpcywgZ2xvYik7CisgIGludGVycHJldGVyTWFwKCkuc2V0KGdsb2IsIHRo
aXMpOwogCiAgIGdsb2JhbCA9IGdsb2I7CiAgIGRiZyA9IDA7CkBAIC02MzAsNyArNjM5LDcgQEAg
dm9pZCBJbnRlcnByZXRlckltcDo6Y2xlYXIoKQogICAgIHNfaG9vayA9IDBMOwogICAgIGdsb2Jh
bENsZWFyKCk7CiAgIH0KLSAgSW50ZXJwcmV0ZXJNYXA6OnJlbW92ZUludGVycHJldGVyRm9yR2xv
YmFsT2JqZWN0KGdsb2JhbCk7CisgIGludGVycHJldGVyTWFwKCkucmVtb3ZlKGdsb2JhbCk7CiB9
CiAKIHZvaWQgSW50ZXJwcmV0ZXJJbXA6Om1hcmsoKQpAQCAtODA3LDcgKzgxNiw3IEBAIHZvaWQg
SW50ZXJwcmV0ZXJJbXA6OnJlc3RvcmVCdWlsdGlucyAoY28KIAogSW50ZXJwcmV0ZXJJbXAgKklu
dGVycHJldGVySW1wOjppbnRlcnByZXRlcldpdGhHbG9iYWxPYmplY3QoT2JqZWN0SW1wICpnbG9i
YWwpCiB7Ci0gIHJldHVybiBJbnRlcnByZXRlck1hcDo6Z2V0SW50ZXJwcmV0ZXJGb3JHbG9iYWxP
YmplY3QoZ2xvYmFsKTsKKyAgICByZXR1cm4gaW50ZXJwcmV0ZXJNYXAoKS5nZXQoZ2xvYmFsKTsK
IH0KIAogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXJfbWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiBranMvaW50ZXJwcmV0ZXJfbWFwLmNwcApkaWZmIC1OIEphdmFTY3Jp
cHRDb3JlL2tqcy9pbnRlcnByZXRlcl9tYXAuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50
ZXJwcmV0ZXJfbWFwLmNwcAk0IFNlcCAyMDA1IDAxOjE4OjEyIC0wMDAwCTEuNAorKysgSmF2YVNj
cmlwdENvcmUva2pzL2ludGVycHJldGVyX21hcC5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw
MApAQCAtMSwxNzMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IGxpYnJhcmllcwotICogIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgot
ICoKLSAqLwotCi0jaW5jbHVkZSAiaW50ZXJwcmV0ZXJfbWFwLmgiCi0jaW5jbHVkZSAicG9pbnRl
cl9oYXNoLmgiCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLW5hbWVzcGFjZSBLSlMgewotCi1jb25z
dCBpbnQgX21pblRhYmxlU2l6ZSA9IDY0OwotCi1JbnRlcnByZXRlck1hcDo6S2V5VmFsdWUgKklu
dGVycHJldGVyTWFwOjpfdGFibGU7Ci1pbnQgSW50ZXJwcmV0ZXJNYXA6Ol90YWJsZVNpemU7Ci1p
bnQgSW50ZXJwcmV0ZXJNYXA6Ol90YWJsZVNpemVNYXNrOwotaW50IEludGVycHJldGVyTWFwOjpf
a2V5Q291bnQ7Ci0KLUludGVycHJldGVySW1wICogSW50ZXJwcmV0ZXJNYXA6OmdldEludGVycHJl
dGVyRm9yR2xvYmFsT2JqZWN0KE9iamVjdEltcCAqZ2xvYmFsKQotewotICAgIGlmICghX3RhYmxl
KQotICAgICAgICBleHBhbmQoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBoYXNoID0gY29tcHV0ZUhh
c2goZ2xvYmFsKTsKLSAgICAKLSAgICBpbnQgaSA9IGhhc2ggJiBfdGFibGVTaXplTWFzazsKLSNp
ZiBEVU1QX1NUQVRJU1RJQ1MKLSAgICArK251bVByb2JlczsKLSAgICBudW1Db2xsaXNpb25zICs9
IF90YWJsZVtpXS5rZXkgJiYgX3RhYmxlW2ldLmtleSAhPSBnbG9iYWw7Ci0jZW5kaWYKLSAgICB3
aGlsZSAoT2JqZWN0SW1wICprZXkgPSBfdGFibGVbaV0ua2V5KSB7Ci0gICAgICAgIGlmIChrZXkg
PT0gZ2xvYmFsKSB7Ci0JICAgIHJldHVybiBfdGFibGVbaV0udmFsdWU7Ci0JfQotICAgICAgICBp
ID0gKGkgKyAxKSAmIF90YWJsZVNpemVNYXNrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCBJbnRlcnByZXRlck1hcDo6c2V0SW50ZXJwcmV0ZXJGb3JHbG9iYWxPYmplY3Qo
SW50ZXJwcmV0ZXJJbXAgKmludGVycHJldGVyLCBPYmplY3RJbXAgKmdsb2JhbCkKLXsKLSAgICBp
ZiAoIV90YWJsZSkKLSAgICAgICAgZXhwYW5kKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgaGFzaCA9
IGNvbXB1dGVIYXNoKGdsb2JhbCk7Ci0gICAgCi0gICAgaW50IGkgPSBoYXNoICYgX3RhYmxlU2l6
ZU1hc2s7Ci0jaWYgRFVNUF9TVEFUSVNUSUNTCi0gICAgKytudW1Qcm9iZXM7Ci0gICAgbnVtQ29s
bGlzaW9ucyArPSBfdGFibGVbaV0ua2V5ICYmIF90YWJsZVtpXS5rZXkgIT0gZ2xvYmFsOwotI2Vu
ZGlmCi0gICAgd2hpbGUgKE9iamVjdEltcCAqa2V5ID0gX3RhYmxlW2ldLmtleSkgewotICAgICAg
ICBpZiAoa2V5ID09IGdsb2JhbCkgewotCSAgICBfdGFibGVbaV0udmFsdWUgPSBpbnRlcnByZXRl
cjsKLQkgICAgcmV0dXJuOwotCX0KLSAgICAgICAgaSA9IChpICsgMSkgJiBfdGFibGVTaXplTWFz
azsKLSAgICB9Ci0gICAgCi0gICAgX3RhYmxlW2ldLmtleSA9IGdsb2JhbDsKLSAgICBfdGFibGVb
aV0udmFsdWUgPSBpbnRlcnByZXRlcjsKLSAgICArK19rZXlDb3VudDsKLSAgICAKLSAgICBpZiAo
X2tleUNvdW50ICogMiA+PSBfdGFibGVTaXplKQotICAgICAgICBleHBhbmQoKTsKLX0KLQotaW5s
aW5lIHZvaWQgSW50ZXJwcmV0ZXJNYXA6Omluc2VydChJbnRlcnByZXRlckltcCAqaW50ZXJwcmV0
ZXIsIE9iamVjdEltcCAqZ2xvYmFsKQotewotICAgIHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlSGFz
aChnbG9iYWwpOwotICAgIAotICAgIGludCBpID0gaGFzaCAmIF90YWJsZVNpemVNYXNrOwotI2lm
IERVTVBfU1RBVElTVElDUwotICAgICsrbnVtUHJvYmVzOwotICAgIG51bUNvbGxpc2lvbnMgKz0g
X3RhYmxlW2ldICE9IDA7Ci0jZW5kaWYKLSAgICB3aGlsZSAoX3RhYmxlW2ldLmtleSkKLSAgICAg
ICAgaSA9IChpICsgMSkgJiBfdGFibGVTaXplTWFzazsKLSAgICAKLSAgICBfdGFibGVbaV0ua2V5
ID0gZ2xvYmFsOwotICAgIF90YWJsZVtpXS52YWx1ZSA9IGludGVycHJldGVyOwotfQotCi12b2lk
IEludGVycHJldGVyTWFwOjpyZW1vdmVJbnRlcnByZXRlckZvckdsb2JhbE9iamVjdChPYmplY3RJ
bXAgKmdsb2JhbCkKLXsKLSAgICB1bnNpZ25lZCBoYXNoID0gY29tcHV0ZUhhc2goZ2xvYmFsKTsK
LSAgICAKLSAgICBPYmplY3RJbXAgKmtleTsKLSAgICAKLSAgICBpbnQgaSA9IGhhc2ggJiBfdGFi
bGVTaXplTWFzazsKLSNpZiBEVU1QX1NUQVRJU1RJQ1MKLSAgICArK251bVByb2JlczsKLSAgICBu
dW1Db2xsaXNpb25zICs9IF90YWJsZVtpXS5rZXkgJiYgX3RhYmxlW2ldLmtleSA9PSBnbG9iYWw7
Ci0jZW5kaWYKLSAgICB3aGlsZSAoKGtleSA9IF90YWJsZVtpXS5rZXkpKSB7Ci0gICAgICAgIGlm
IChrZXkgPT0gZ2xvYmFsKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGkgPSAoaSArIDEp
ICYgX3RhYmxlU2l6ZU1hc2s7Ci0gICAgfQotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgX3RhYmxlW2ldLmtleSA9IDA7Ci0gICAgX3RhYmxlW2ldLnZhbHVlID0gMDsK
LSAgICAtLV9rZXlDb3VudDsKLSAgICAKLSAgICBpZiAoX2tleUNvdW50ICogNiA8IF90YWJsZVNp
emUgJiYgX3RhYmxlU2l6ZSA+IF9taW5UYWJsZVNpemUpIHsKLSAgICAgICAgc2hyaW5rKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmVpbnNlcnQgYWxsIHRoZSBpdGVt
cyB0byB0aGUgcmlnaHQgaW4gdGhlIHNhbWUgY2x1c3Rlci4KLSAgICB3aGlsZSAoMSkgewotICAg
ICAgICBpID0gKGkgKyAxKSAmIF90YWJsZVNpemVNYXNrOwotICAgICAgICBrZXkgPSBfdGFibGVb
aV0ua2V5OwotCUludGVycHJldGVySW1wICp2YWx1ZSA9IF90YWJsZVtpXS52YWx1ZTsKLSAgICAg
ICAgaWYgKCFrZXkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgX3RhYmxlW2ldLmtleSA9
IDA7Ci0gICAgICAgIF90YWJsZVtpXS52YWx1ZSA9IDA7Ci0gICAgICAgIGluc2VydCh2YWx1ZSxr
ZXkpOwotICAgIH0KLX0KLQotdm9pZCBJbnRlcnByZXRlck1hcDo6ZXhwYW5kKCkKLXsKLSAgICBy
ZWhhc2goX3RhYmxlU2l6ZSA9PSAwID8gX21pblRhYmxlU2l6ZSA6IF90YWJsZVNpemUgKiAyKTsK
LX0KLQotdm9pZCBJbnRlcnByZXRlck1hcDo6c2hyaW5rKCkKLXsKLSAgICByZWhhc2goX3RhYmxl
U2l6ZSAvIDIpOwotfQotCi12b2lkIEludGVycHJldGVyTWFwOjpyZWhhc2goaW50IG5ld1RhYmxl
U2l6ZSkKLXsKLSAgICBpbnQgb2xkVGFibGVTaXplID0gX3RhYmxlU2l6ZTsKLSAgICBLZXlWYWx1
ZSAqb2xkVGFibGUgPSBfdGFibGU7Ci0KLSAgICBfdGFibGVTaXplID0gbmV3VGFibGVTaXplOwot
ICAgIF90YWJsZVNpemVNYXNrID0gbmV3VGFibGVTaXplIC0gMTsKLSAgICBfdGFibGUgPSAoS2V5
VmFsdWUgKiljYWxsb2MobmV3VGFibGVTaXplLCBzaXplb2YoS2V5VmFsdWUpKTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpICE9IG9sZFRhYmxlU2l6ZTsgKytpKQotICAgICAgICBpZiAob2xkVGFi
bGVbaV0ua2V5KQotICAgICAgICAgICAgaW5zZXJ0KG9sZFRhYmxlW2ldLnZhbHVlLCBvbGRUYWJs
ZVtpXS5rZXkpOwotCi0gICAgZnJlZShvbGRUYWJsZSk7Ci19Ci0KLXVuc2lnbmVkIEludGVycHJl
dGVyTWFwOjpjb21wdXRlSGFzaChPYmplY3RJbXAgKnBvaW50ZXIpCi17Ci0gICAgcmV0dXJuIHBv
aW50ZXJIYXNoKHBvaW50ZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZQpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL2ludGVycHJldGVyX21hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtqcy9pbnRl
cnByZXRlcl9tYXAuaApkaWZmIC1OIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlcl9tYXAu
aAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyX21hcC5oCTE0IEp1bCAyMDA1IDE4
OjI3OjAyIC0wMDAwCTEuMworKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyX21hcC5o
CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNTggKzAsMCBAQAotLy8gLSotIGMtYmFz
aWMtb2Zmc2V0OiAyIC0qLQotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxp
YnJhcmllcwotICogIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlIC0gU3VpdGUgMzMwLAotICogIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoK
LSAqLwotCi0jaWZuZGVmIF9LSlNfSU5URVJQUkVURVJfTUFQX0hfCi0jZGVmaW5lIF9LSlNfSU5U
RVJQUkVURVJfTUFQX0hfCi0KLW5hbWVzcGFjZSBLSlMgewotICAgIGNsYXNzIE9iamVjdEltcDsK
LSAgICBjbGFzcyBJbnRlcnByZXRlckltcDsKLQotICAgIGNsYXNzIEludGVycHJldGVyTWFwIHsK
LQlzdHJ1Y3QgS2V5VmFsdWUgewotCSAgICBPYmplY3RJbXAgKmtleTsKLQkgICAgSW50ZXJwcmV0
ZXJJbXAgKnZhbHVlOwotCX07Ci0KLSAgICBwdWJsaWM6Ci0Jc3RhdGljIEludGVycHJldGVySW1w
ICogZ2V0SW50ZXJwcmV0ZXJGb3JHbG9iYWxPYmplY3QoT2JqZWN0SW1wICpnbG9iYWwpOwotCXN0
YXRpYyB2b2lkIHNldEludGVycHJldGVyRm9yR2xvYmFsT2JqZWN0KEludGVycHJldGVySW1wICpp
bnRlcnByZXRlciwgT2JqZWN0SW1wICpnbG9iYWwpOwotCXN0YXRpYyB2b2lkIHJlbW92ZUludGVy
cHJldGVyRm9yR2xvYmFsT2JqZWN0KE9iamVjdEltcCAqZ2xvYmFsKTsKLQotICAgIHByaXZhdGU6
Ci0Jc3RhdGljIHZvaWQgaW5zZXJ0KEludGVycHJldGVySW1wICppbnRlcnByZXRlciwgT2JqZWN0
SW1wICpnbG9iYWwpOwotCXN0YXRpYyB2b2lkIGV4cGFuZCgpOwotCXN0YXRpYyB2b2lkIHNocmlu
aygpOwotCXN0YXRpYyB2b2lkIHJlaGFzaChpbnQgbmV3VGFibGVTaXplKTsKLQlzdGF0aWMgdW5z
aWduZWQgY29tcHV0ZUhhc2goT2JqZWN0SW1wICpwb2ludGVyKTsKLQotCi0Jc3RhdGljIEtleVZh
bHVlICogSW50ZXJwcmV0ZXJNYXA6Ol90YWJsZTsKLQlzdGF0aWMgaW50IEludGVycHJldGVyTWFw
OjpfdGFibGVTaXplOwotCXN0YXRpYyBpbnQgSW50ZXJwcmV0ZXJNYXA6Ol90YWJsZVNpemVNYXNr
OwotCXN0YXRpYyBpbnQgSW50ZXJwcmV0ZXJNYXA6Ol9rZXlDb3VudDsKLSAgICB9OwotCi19IC8v
IG5hbWVzcGFjZQotCi0KLSNlbmRpZiAvLyBfS0pTX0lOVEVSUFJFVEVSX01BUF9IXwpJbmRleDog
SmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IGt4bWxjb3JlL0hhc2hGdW5jdGlvbnMuaApkaWZmIC1OIEphdmFTY3JpcHRDb3JlL2t4bWxj
b3JlL0hhc2hGdW5jdGlvbnMuaAotLS0gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaEZ1bmN0
aW9ucy5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIEphdmFTY3JpcHRDb3JlL2t4bWxj
b3JlL0hhc2hGdW5jdGlvbnMuaAkyOCBTZXAgMjAwNSAwODowMTowNyAtMDAwMApAQCAtMCwwICsx
LDc5IEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogQ29weXJpZ2h0IChDKSAy
MDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgS1hNTENPUkVfSEFTSF9GVU5DVElPTlNf
SAorI2RlZmluZSBLWE1MQ09SRV9IQVNIX0ZVTkNUSU9OU19ICisKK25hbWVzcGFjZSBLWE1MQ29y
ZSB7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZWZhdWx0SGFzaDsKKworICAg
IHRlbXBsYXRlPGludCBzaXplPiB1bnNpZ25lZCBwb2ludGVySGFzaCh2b2lkICpwb2ludGVyKTsK
KworICAgIC8vIFRob21hcyBXYW5nJ3MgMzIgYml0IG1peAorICAgIC8vIGh0dHA6Ly93d3cuY3Jp
cy5jb20vflR0d2FuZy90ZWNoL2ludGhhc2guaHRtCisgICAgdGVtcGxhdGU8PiBpbmxpbmUgdW5z
aWduZWQgcG9pbnRlckhhc2g8ND4odm9pZCAqcG9pbnRlcikgCisgICAgeworICAgICAgICB1aW50
MzJfdCBrZXkgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihwb2ludGVyKTsKKyAgICAgICAg
a2V5ICs9IH4oa2V5IDw8IDE1KTsKKyAgICAgICAga2V5IF49IChrZXkgPj4gMTApOworICAgICAg
ICBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICAgICAga2V5IF49IChrZXkgPj4gNik7CisgICAgICAg
IGtleSArPSB+KGtleSA8PCAxMSk7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDE2KTsKKyAgICAg
ICAgcmV0dXJuIGtleTsKKyAgICB9CisgICAgCisgICAgLy8gVGhvbWFzIFdhbmcncyA2NCBiaXQg
bWl4CisgICAgLy8gaHR0cDovL3d3dy5jcmlzLmNvbS9+VHR3YW5nL3RlY2gvaW50aGFzaC5odG0K
KyAgICB0ZW1wbGF0ZTw+IGlubGluZSB1bnNpZ25lZCBwb2ludGVySGFzaDw4Pih2b2lkICpwb2lu
dGVyKQorICAgIHsKKyAgICAgICAgdWludDY0X3Qga2V5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
NjRfdD4ocG9pbnRlcik7CisgICAgICAgIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgICAgIGtl
eSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAga2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAg
a2V5IF49IChrZXkgPj4gOCk7CisgICAgICAgIGtleSArPSAoa2V5IDw8IDMpOworICAgICAgICBr
ZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgICAg
IGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8dm9pZCAqPiB7CisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKHZvaWQgKmtleSkgeyByZXR1cm4gcG9pbnRlckhhc2g8c2l6ZW9mKHZv
aWQgKik+KGtleSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwodm9pZCAqYSwgdm9pZCAq
YikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgfTsKKyAgICAKKyAgICAvLyBwb2ludGVyIGlkZW50
aXR5IGhhc2ggLSBkZWZhdWx0IGZvciB2b2lkICosIG11c3QgYmUgcmVxdWVzdGVkIGV4cGxpY2l0
bHkgZm9yIG90aGVyIAorICAgIC8vIHBvaW50ZXIgdHlwZXM7IGFsc28gc2hvdWxkIHdvcmsgZm9y
IGludGVnZXIgdHlwZXMKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgUG9pbnRlckhh
c2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChUIGtleSkgeyByZXR1cm4gcG9pbnRl
ckhhc2g8c2l6ZW9mKHZvaWQgKik+KCh2b2lkICopa2V5KTsgfQorICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChUIGEsIFQgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgfTsKKyAgICAKK30gLy8g
bmFtZXNwYWNlIEtYTUxDb3JlCisKK3VzaW5nIEtYTUxDb3JlOjpEZWZhdWx0SGFzaDsKK3VzaW5n
IEtYTUxDb3JlOjpQb2ludGVySGFzaDsKKworI2VuZGlmIC8vIEtYTE1DT1JFX0hBU0hfRlVOQ1RJ
T05TX0gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiBreG1sY29yZS9IYXNoTWFwLmgKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9reG1s
Y29yZS9IYXNoTWFwLmgKLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hNYXAuaAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoTWFw
LmgJMjggU2VwIDIwMDUgMDg6MDE6MDcgLTAwMDAKQEAgLTAsMCArMSwxOTIgQEAKKy8vIC0qLSBt
b2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgbGlicmFyaWVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBLWE1MQ09SRV9IQVNIX01BUF9ICisjZGVmaW5lIEtYTUxDT1JFX0hB
U0hfTUFQX0gKKworI2luY2x1ZGUgIkhhc2hUYWJsZS5oIgorI2luY2x1ZGUgIkhhc2hUcmFpdHMu
aCIKKyNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCisKK25hbWVzcGFjZSBLWE1MQ29yZSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFBhaXJUeXBlPiAKK2lubGluZSB0eXBlbmFtZSBQYWlyVHlwZTo6
Zmlyc3RfdHlwZSBleHRyYWN0Rmlyc3QoY29uc3QgUGFpclR5cGUmIHZhbHVlKQoreworICAgIHJl
dHVybiB2YWx1ZS5maXJzdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBN
YXBwZWQsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMgPSBEZWZhdWx0SGFzaDxLZXk+LCB0eXBlbmFt
ZSBLZXlUcmFpdHMgPSBIYXNoVHJhaXRzPEtleT4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0cyA9IEhh
c2hUcmFpdHM8TWFwcGVkPiA+CitjbGFzcyBIYXNoTWFwIHsKKyBwdWJsaWM6CisgICAgdHlwZWRl
ZiBLZXkgS2V5VHlwZTsKKyAgICB0eXBlZGVmIE1hcHBlZCBNYXBwZWRUeXBlOworICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPEtleSwgTWFwcGVkPiBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBQYWlySGFz
aFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz4gVmFsdWVUcmFpdHM7CisgcHJpdmF0ZToK
KyAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIGV4dHJhY3RGaXJzdDxW
YWx1ZVR5cGU+LCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cz4gSW1wbFR5cGU7CisgcHVibGlj
OgorICAgIHR5cGVkZWYgdHlwZW5hbWUgSW1wbFR5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgSW1wbFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OworCisgICAgSGFzaE1hcCgpIHt9CisKKyAgICBpbnQgc2l6ZSgpIGNvbnN0OworICAgIGludCBj
YXBhY2l0eSgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworCisgICAgaXRlcmF0
b3IgYmVnaW4oKTsKKyAgICBpdGVyYXRvciBlbmQoKTsKKyAgICBjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0OworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0OworCisgICAgaXRlcmF0
b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpOworICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29u
c3QgS2V5VHlwZSYga2V5KSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3Q7CisgICAgTWFwcGVkVHlwZSBnZXQoY29uc3QgS2V5VHlwZSAma2V5KSBjb25z
dDsKKworICAgIC8vIHJlcGxhY2VzIHZhbHVlIGJ1dCBub3Qga2V5IGlmIGtleSBpcyBhbHJlYWR5
IHByZXNlbnQKKyAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IHNldChjb25zdCBLZXlUeXBl
ICZrZXksIGNvbnN0IE1hcHBlZFR5cGUgJm1hcHBlZCk7IAorCisgICAgdm9pZCByZW1vdmUoY29u
c3QgS2V5VHlwZSYga2V5KTsKKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCk7CisgICAgdm9p
ZCBjbGVhcigpOworCisgcHJpdmF0ZToKKyAgICBJbXBsVHlwZSBtX2ltcGw7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CitpbmxpbmUgaW50
IEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFwcGVkVHJh
aXRzPjo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CitpbnQgSGFz
aE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+
OjpjYXBhY2l0eSgpIGNvbnN0Cit7IAorICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KK2lu
bGluZSBib29sIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywg
TWFwcGVkVHJhaXRzPjo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemUoKSA9PSAw
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+
CitpbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5
VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjppdGVyYXRvciBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNo
RnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OmJlZ2luKCkKK3sKKyAgICByZXR1
cm4gbV9pbXBsLmJlZ2luKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
TWFwcGVkLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0cz4KK2lubGluZSB0eXBlbmFtZSBIYXNoTWFwPEtleSwgTWFwcGVkLCBI
YXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46Oml0ZXJhdG9yIEhhc2hNYXA8
S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6ZW5k
KCkKK3sKKyAgICByZXR1cm4gbV9pbXBsLmVuZCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CitpbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxL
ZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+Ojpjb25z
dF9pdGVyYXRvciBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMs
IE1hcHBlZFRyYWl0cz46OmJlZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLmJlZ2lu
KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
cz4KK2lubGluZSB0eXBlbmFtZSBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBL
ZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OmNvbnN0X2l0ZXJhdG9yIEhhc2hNYXA8S2V5LCBNYXBw
ZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6ZW5kKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9pbXBsLmVuZCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Cit0eXBlbmFtZSBIYXNoTWFwPEtleSwgTWFwcGVk
LCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46Oml0ZXJhdG9yIEhhc2hN
YXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6
ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpCit7CisgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4K
K3R5cGVuYW1lIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywg
TWFwcGVkVHJhaXRzPjo6Y29uc3RfaXRlcmF0b3IgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1
bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtl
eSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLmZpbmQoa2V5KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgorYm9vbCBIYXNoTWFwPEtl
eSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OmNvbnRh
aW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLmNvbnRh
aW5zKGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0cz4KK3N0ZDo6cGFpcjx0eXBlbmFtZSBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVu
Y3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46Oml0ZXJhdG9yLCBib29sPiBIYXNoTWFw
PEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OnNl
dChjb25zdCBLZXlUeXBlICZrZXksIGNvbnN0IE1hcHBlZFR5cGUgJm1hcHBlZCkgCit7CisgICAg
cGFpcjxpdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9pbXBsLmluc2VydChWYWx1ZVR5cGUoa2V5
LCBtYXBwZWQpKTsKKyAgICAvLyB0aGUgaW5zZXJ0IGNhbGwgYWJvdmVpbnNlcnQgd29uJ3QgY2hh
bmdlIGFueXRoaW5nIGlmIHRoZSBrZXkgaXMKKyAgICAvLyBhbHJlYWR5IHRoZXJlOyBpbiB0aGF0
IGNhc2UsIG1ha2Ugc3VyZSB0byBzZXQgdGhlIHZhbHVlLgorICAgIGlmICghcmVzdWx0LnNlY29u
ZCkKKyAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBtYXBwZWQ7ICAgIAorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0cz4KK2lubGluZSBNYXBwZWQgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9u
cywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlwZSAma2V5KSBjb25z
dAoreworICAgIGNvbnN0X2l0ZXJhdG9yIGl0ID0gZmluZChrZXkpOworICAgIGlmIChpdCA9PSBl
bmQoKSkKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpOworICAgIHJl
dHVybiBpdC0+c2Vjb25kOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1h
cHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHM+Cit2b2lkIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMs
IEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKK3sK
KyAgICBtX2ltcGwucmVtb3ZlKGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KK3ZvaWQgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1
bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit7
CisgICAgbV9pbXBsLnJlbW92ZShpdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KK3ZvaWQgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1
bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpjbGVhcigpCit7CisgICAgbV9pbXBs
LmNsZWFyKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGRlbGV0ZUFsbFZhbHVl
cyhUJiBjb2xsZWN0aW9uKQoreworICAgIGZvciAodHlwZW5hbWUgVDo6aXRlcmF0b3IgaXQgPSBj
b2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGNvbGxlY3Rpb24uZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBLWE1MQ29y
ZQorCit1c2luZyBLWE1MQ29yZTo6SGFzaE1hcDsKKworI2lmbmRlZiBIQVNIX01BUF9QVFJfU1BF
Q19XT1JLQVJPVU5ECisjaW5jbHVkZSAiSGFzaE1hcFB0clNwZWMuaCIKKyNlbmRpZgorCisjZW5k
aWYgLyogS1hNTENPUkVfSEFTSF9NQVBfSCAqLwpJbmRleDogSmF2YVNjcmlwdENvcmUva3htbGNv
cmUvSGFzaE1hcFB0clNwZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBreG1sY29yZS9IYXNoTWFw
UHRyU3BlYy5oCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaE1hcFB0clNwZWMu
aAotLS0gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaE1hcFB0clNwZWMuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoTWFwUHRyU3Bl
Yy5oCTI4IFNlcCAyMDA1IDA4OjAxOjA3IC0wMDAwCkBAIC0wLDAgKzEsMjE1IEBACisvLyAtKi0g
bW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgS1hNTENPUkVfSEFTSF9NQVBfUFRSX1NQRUNfSAorI2RlZmluZSBL
WE1MQ09SRV9IQVNIX01BUF9QVFJfU1BFQ19ICisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisKKy8v
IFRoaXMgZmlsZSBpbmNsdWRlcyBzcGVjaWFsaXphdGlvbnMgb2YgSGFzaE1hcCBmb3IgcG9pbnRl
ciB0eXBlcyB1c2luZyByYXcgcG9pbnRlciBoYXNoaW5nCisvLyB0cnkgdG8gc2hhcmUgaW1wbGVt
ZW50YXRpb24gYnkgbWFraW5nIHRoZW0gdXNlIHRoZSB2b2lkICogdmVyc2lvbiBvZiB0aGUgY29k
ZQorLy8gYW5kIGNhc3RpbmcgYXQgaW50ZXJmYWNlcworCituYW1lc3BhY2UgS1hNTENvcmUgewor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUCwgdHlwZW5hbWUgTWFwcGVkPgorICAgIGNsYXNzIFBv
aW50ZXJIYXNoSXRlcmF0b3JBZGFwdGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8UCAqLCBNYXBwZWQsIFBvaW50ZXJIYXNoPFAgKj4sIEhhc2hUcmFpdHM8UCAqPiwg
SGFzaFRyYWl0czxNYXBwZWQ+ID4gTWFwVHlwZTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBN
YXBUeXBlOjpWYWx1ZVR5cGUgVmFsdWVUeXBlOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1h
cFR5cGU6OkltcGxWYWx1ZVR5cGUgSW1wbFZhbHVlVHlwZTsKKyAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBIYXNoTWFwPFAgKiwgTWFwcGVkLCBQb2ludGVySGFzaDxQICo+LCBIYXNoVHJhaXRzPFAg
Kj4sIEhhc2hUcmFpdHM8TWFwcGVkPiA+OjpJbXBsSXRlcmF0b3IgSW1wbEl0ZXJhdG9yOworICAg
ICAgICB0eXBlZGVmIFBvaW50ZXJIYXNoSXRlcmF0b3JBZGFwdGVyPFAsIE1hcHBlZD4gaXRlcmF0
b3I7CisgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBlOworICAgICAgICB0
eXBlZGVmIFZhbHVlVHlwZSAqUG9pbnRlclR5cGU7CisgICAgICAgIAorICAgICAgICBmcmllbmQg
Y2xhc3MgSGFzaE1hcDxQICosIE1hcHBlZCwgUG9pbnRlckhhc2g8UCAqPiwgSGFzaFRyYWl0czxQ
ICo+LCBIYXNoVHJhaXRzPE1hcHBlZD4gPjsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAg
ICBQb2ludGVySGFzaEl0ZXJhdG9yQWRhcHRlcigpIHt9CisgICAgICAgIFBvaW50ZXJIYXNoSXRl
cmF0b3JBZGFwdGVyKGNvbnN0IEltcGxJdGVyYXRvciAmaW1wbCkgOiBtX2ltcGwoaW1wbCkge30K
KyAgICAgICAgCisgICAgICAgIC8vIGRlZmF1bHQgY29weSwgYXNzaWdubWVudCBhbmQgZGVzdHJ1
Y3RvciBhcmUgb2sKKyAgICAgICAgCisgICAgICAgIFJlZmVyZW5jZVR5cGUgb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UG9pbnRlclR5cGU+KG1faW1wbC5vcGVy
YXRvci0+KCkpOyB9CisgICAgICAgIFBvaW50ZXJUeXBlIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiAmKG9wZXJhdG9yKigpKTsgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICArK21faW1wbDsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gcG9zdGZpeCArKyBp
bnRlbnRpb25hbGx5IG9taXR0ZWQKKyAgICAgICAgCisgICAgICAgIC8vIENvbXBhcmlzb24uCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgIHsgCisgICAgICAgICAgICByZXR1cm4gbV9pbXBsID09IG90aGVyLm1faW1wbDsgCisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0IAorICAgICAgICB7IAorICAgICAgICAgICAgcmV0dXJuIG1faW1wbCAhPSBv
dGhlci5tX2ltcGw7IAorICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IEltcGxJdGVyYXRvciBtX2ltcGw7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAs
IHR5cGVuYW1lIE1hcHBlZD4KKyAgICBjbGFzcyBQb2ludGVySGFzaENvbnN0SXRlcmF0b3JBZGFw
dGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UCAqLCBNYXBwZWQs
IFBvaW50ZXJIYXNoPFAgKj4sIEhhc2hUcmFpdHM8UCAqPiwgSGFzaFRyYWl0czxNYXBwZWQ+ID4g
TWFwVHlwZTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNYXBUeXBlOjpWYWx1ZVR5cGUgVmFs
dWVUeXBlOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcFR5cGU6OkltcGxWYWx1ZVR5cGUg
SW1wbFZhbHVlVHlwZTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNYXBUeXBlOjpJbXBsSXRl
cmF0b3IgSW1wbEl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcFR5cGU6Oklt
cGxDb25zdEl0ZXJhdG9yIEltcGxDb25zdEl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIFBvaW50
ZXJIYXNoSXRlcmF0b3JBZGFwdGVyPFAsIE1hcHBlZD4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVk
ZWYgUG9pbnRlckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRlcjxQLCBNYXBwZWQ+IGNvbnN0X2l0ZXJh
dG9yOworICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKKyAg
ICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUgKlBvaW50ZXJUeXBlOworICAgICAgICAKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIEhhc2hNYXA8UCAqLCBNYXBwZWQsIFBvaW50ZXJIYXNoPFAgKj4s
IEhhc2hUcmFpdHM8UCAqPiwgSGFzaFRyYWl0czxNYXBwZWQ+ID47CisgICAgICAgIAorICAgIHB1
YmxpYzoKKyAgICAgICAgUG9pbnRlckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRlcigpIHt9CisgICAg
ICAgIFBvaW50ZXJIYXNoQ29uc3RJdGVyYXRvckFkYXB0ZXIoY29uc3QgSW1wbENvbnN0SXRlcmF0
b3IgJmltcGwpIDogbV9pbXBsKGltcGwpIHt9CisgICAgICAgIFBvaW50ZXJIYXNoQ29uc3RJdGVy
YXRvckFkYXB0ZXIoY29uc3QgaXRlcmF0b3IgJm90aGVyKSA6IG1faW1wbChvdGhlci5tX2ltcGwp
IHsgfQorICAgICAgICAKKyAgICAgICAgLy8gZGVmYXVsdCBjb3B5LCBhc3NpZ25tZW50IGFuZCBk
ZXN0cnVjdG9yIGFyZSBvaworICAgICAgICAKKyAgICAgICAgUmVmZXJlbmNlVHlwZSBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxQb2ludGVyVHlwZT4obV9pbXBs
Lm9wZXJhdG9yLT4oKSk7IH0KKyAgICAgICAgUG9pbnRlclR5cGUgb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrbV9pbXBsOworICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBwb3N0Zml4
ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAorICAgICAgICAKKyAgICAgICAgLy8gQ29tcGFyaXNv
bi4KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeyAKKyAgICAgICAgICAgIHJldHVybiBtX2ltcGwgPT0gb3RoZXIubV9pbXBsOyAK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QgCisgICAgICAgIHsgCisgICAgICAgICAgICByZXR1cm4gbV9pbXBs
ICE9IG90aGVyLm1faW1wbDsgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgSW1wbENvbnN0SXRlcmF0b3IgbV9pbXBsOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQLCB0eXBlbmFtZSBNYXBwZWQ+CisgICAgY2xhc3MgSGFzaE1hcDxQICosIE1hcHBl
ZCwgUG9pbnRlckhhc2g8UCAqPiwgSGFzaFRyYWl0czxQICo+LCBIYXNoVHJhaXRzPE1hcHBlZD4g
PiB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIFAgKktleVR5cGU7CisgICAgICAgIHR5
cGVkZWYgTWFwcGVkIE1hcHBlZFR5cGU7CisgICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPEtleVR5
cGUsIE1hcHBlZD4gVmFsdWVUeXBlOworICAgIHByaXZhdGU6CisgICAgICAgIC8vIGltcG9ydGFu
dCBub3QgdG8gdXNlIHBvaW50ZXJIYXNoL3BvaW50ZXJFcXVhbCBoZXJlIG9yIGluc3RhbnRpYXRp
b24gd291bGQgcmVjdXJzZQorICAgICAgICB0eXBlZGVmIEhhc2hNYXA8dm9pZCAqLCBNYXBwZWRU
eXBlLCBEZWZhdWx0SGFzaDx2b2lkICo+LCBIYXNoVHJhaXRzPHZvaWQgKj4sIEhhc2hUcmFpdHM8
TWFwcGVkPiA+IEltcGxUeXBlOworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBJbXBsVHlwZTo6VmFsdWVUeXBlIEltcGxWYWx1ZVR5cGU7CisgICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgSW1wbFR5cGU6Oml0ZXJhdG9yIEltcGxJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBJbXBsVHlwZTo6Y29uc3RfaXRlcmF0b3IgSW1wbENvbnN0SXRlcmF0b3I7CisgICAg
ICAgIHR5cGVkZWYgUG9pbnRlckhhc2hJdGVyYXRvckFkYXB0ZXI8UCwgTWFwcGVkPiBpdGVyYXRv
cjsKKyAgICAgICAgdHlwZWRlZiBQb2ludGVySGFzaENvbnN0SXRlcmF0b3JBZGFwdGVyPFAsIE1h
cHBlZD4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwKCkge30KKyAg
ICAgICAgCisgICAgICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLnNpemUoKTsg
fQorICAgICAgICBpbnQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuY2FwYWNpdHko
KTsgfQorICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuaXNFbXB0
eSgpOyB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1faW1w
bC5iZWdpbigpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1faW1wbC5lbmQo
KTsgfQorICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bC5iZWdpbigpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbC5lbmQoKTsgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZmluZChjb25zdCBL
ZXlUeXBlJiBrZXkpIHsgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7IH0KKyAgICAgICAgY29uc3Rf
aXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5m
aW5kKGtleSk7IH0KKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNv
bnN0IHsgcmV0dXJuIG1faW1wbC5jb250YWlucyhrZXkpOyB9CisgICAgICAgIE1hcHBlZFR5cGUg
Z2V0KGNvbnN0IEtleVR5cGUgJmtleSkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldChrZXkpOyB9
CisgICAgICAgIAorICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IHNldChjb25zdCBL
ZXlUeXBlICZrZXksIGNvbnN0IE1hcHBlZFR5cGUgJm1hcHBlZCkgCisgICAgICAgIHsgcmV0dXJu
IG1faW1wbC5zZXQoa2V5LCBtYXBwZWQpOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJlbW92
ZShjb25zdCBLZXlUeXBlJiBrZXkpIHsgbV9pbXBsLnJlbW92ZShrZXkpOyB9CisgICAgICAgIHZv
aWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1faW1wbC5yZW1vdmUoaXQubV9pbXBsKTsgfQorICAg
ICAgICB2b2lkIGNsZWFyKCkgeyBtX2ltcGwuY2xlYXIoKTsgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBJbXBsVHlwZSBtX2ltcGw7CisgICAgfTsKKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBQLCB0eXBlbmFtZSBRPgorICAgIGNsYXNzIEhhc2hNYXA8UCAqLCBRICosIFBv
aW50ZXJIYXNoPFAgKj4sIEhhc2hUcmFpdHM8UCAqPiwgSGFzaFRyYWl0czxRICo+ID4geworICAg
IHByaXZhdGU6CisgICAgICAgIC8vIGltcG9ydGFudCBub3QgdG8gdXNlIFBvaW50ZXJIYXNoIGhl
cmUgb3IgaW5zdGFudGlhdGlvbiB3b3VsZCByZWN1cnNlCisgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDx2b2lkICosIHZvaWQgKiwgRGVmYXVsdEhhc2g8dm9pZCAqPiwgSGFzaFRyYWl0czx2b2lkICo+
LCBIYXNoVHJhaXRzPHZvaWQgKj4gPiBJbXBsTWFwVHlwZTsKKyAgICBwdWJsaWM6CisgICAgICAg
IHR5cGVkZWYgUCAqS2V5VHlwZTsKKyAgICAgICAgdHlwZWRlZiBRICpNYXBwZWRUeXBlOworICAg
ICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiBWYWx1ZVR5cGU7Cisg
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpwYWlyPHZvaWQgKiwgdm9pZCAqPiBJbXBsVmFs
dWVUeXBlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPHZvaWQgKiwgSW1wbFZh
bHVlVHlwZSwgZXh0cmFjdEZpcnN0PEltcGxWYWx1ZVR5cGU+LCBEZWZhdWx0SGFzaDx2b2lkICo+
LCBQYWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPHZvaWQgKj4sIEhhc2hUcmFpdHM8dm9pZCAqPiA+
ID4gSW1wbEl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
dm9pZCAqLCBJbXBsVmFsdWVUeXBlLCBleHRyYWN0Rmlyc3Q8SW1wbFZhbHVlVHlwZT4sIERlZmF1
bHRIYXNoPHZvaWQgKj4sIFBhaXJIYXNoVHJhaXRzPEhhc2hUcmFpdHM8dm9pZCAqPiwgSGFzaFRy
YWl0czx2b2lkICo+ID4gPiBJbXBsQ29uc3RJdGVyYXRvcjsKKyAgICAgICAgCisgICAgICAgIHR5
cGVkZWYgUG9pbnRlckhhc2hJdGVyYXRvckFkYXB0ZXI8UCwgUSAqPiBpdGVyYXRvcjsKKyAgICAg
ICAgdHlwZWRlZiBQb2ludGVySGFzaENvbnN0SXRlcmF0b3JBZGFwdGVyPFAsIFEgKj4gY29uc3Rf
aXRlcmF0b3I7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwKCkge30KKyAgICAgICAgCisgICAg
ICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLnNpemUoKTsgfQorICAgICAgICBp
bnQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgfQorICAgICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyB9CisgICAg
ICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1faW1wbC5iZWdpbigpOyB9
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1faW1wbC5lbmQoKTsgfQorICAgICAg
ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5iZWdpbigpOyB9
CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5lbmQo
KTsgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkp
IHsgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7IH0KKyAgICAgICAgY29uc3RfaXRlcmF0b3IgZmlu
ZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7IH0K
KyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbC5jb250YWlucyhrZXkpOyB9CisgICAgICAgIE1hcHBlZFR5cGUgZ2V0KGNvbnN0IEtl
eVR5cGUgJmtleSkgY29uc3QgeyByZXR1cm4gKE1hcHBlZFR5cGUpbV9pbXBsLmdldChrZXkpOyB9
CisgICAgICAgIAorICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IHNldChjb25zdCBL
ZXlUeXBlICZrZXksIGNvbnN0IE1hcHBlZFR5cGUgJm1hcHBlZCkgCisgICAgICAgIHsgcmV0dXJu
IG1faW1wbC5zZXQoa2V5LCBtYXBwZWQpOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJlbW92
ZShjb25zdCBLZXlUeXBlJiBrZXkpIHsgbV9pbXBsLnJlbW92ZShrZXkpOyB9CisgICAgICAgIHZv
aWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1faW1wbC5yZW1vdmUoaXQubV9pbXBsKTsgfQorICAg
ICAgICB2b2lkIGNsZWFyKCkgeyBtX2ltcGwuY2xlYXIoKTsgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBJbXBsTWFwVHlwZSBtX2ltcGw7CisgICAgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgS1hNTENvcmUKKworI2VuZGlmIC8vIEtYTUxDT1JFX0hBU0hfTUFQX1BUUl9TUEVDX0gKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiBreG1sY29yZS9IYXNoU2V0LmgKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNo
U2V0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hTZXQuaAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoU2V0LmgJMjggU2Vw
IDIwMDUgMDg6MDE6MDcgLTAwMDAKQEAgLTAsMCArMSwxODEgQEAKKy8vIC0qLSBtb2RlOiBjKys7
IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgbGlicmFyaWVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBLWE1MQ09SRV9IQVNIX1NFVF9ICisjZGVmaW5lIEtYTUxDT1JFX0hBU0hfU0VUX0gK
KworI2luY2x1ZGUgIkhhc2hUYWJsZS5oIgorI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIKKyNpbmNs
dWRlICJoYXNoZnVuY3Rpb25zLmgiCisKK25hbWVzcGFjZSBLWE1MQ29yZSB7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgVCBpZGVudGl0eUV4dHJhY3QoY29uc3QgVCYg
dCkgCisgICAgeyAKKyAgICAgICAgcmV0dXJuIHQ7IAorICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBULCBWYWx1ZSBDb252ZXJ0VChjb25zdCBUJiwgdW5zaWdu
ZWQpPiAKKyAgICBpbmxpbmUgVmFsdWUgY29udmVydEFkYXB0ZXIoY29uc3QgVCYgdCwgY29uc3Qg
VCYsIHVuc2lnbmVkIGgpCisgICAgeyAKKyAgICAgICAgcmV0dXJuIENvbnZlcnRUKHQsIGgpOyAK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucyA9IERlZmF1bHRIYXNoPFZhbHVlPiwgdHlwZW5hbWUgVHJhaXRzID0gSGFzaFRyYWl0czxW
YWx1ZT4gPgorICAgIGNsYXNzIEhhc2hTZXQgeworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlPFZhbHVlLCBWYWx1ZSwgaWRlbnRpdHlFeHRyYWN0PFZhbHVlPiwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPiBJbXBsVHlwZTsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYg
VmFsdWUgVmFsdWVUeXBlOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEltcGxUeXBlOjppdGVy
YXRvciBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBJbXBsVHlwZTo6Y29uc3Rf
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICAgIAorICAgICAgICBIYXNoU2V0KCkge30K
KyAgICAgICAgCisgICAgICAgIGludCBzaXplKCkgY29uc3Q7CisgICAgICAgIGludCBjYXBhY2l0
eSgpIGNvbnN0OworICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICAgICAgCisgICAg
ICAgIGl0ZXJhdG9yIGJlZ2luKCk7CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpOworICAgICAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0OworICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgVmFsdWVUeXBl
JiB2YWx1ZSk7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVmFsdWVUeXBlJiB2
YWx1ZSkgY29uc3Q7CisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGlu
c2VydChjb25zdCBWYWx1ZVR5cGUgJnZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIGEgc3Bl
Y2lhbCB2ZXJzaW9uIG9mIGluc2VydCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5n
IGFuZCBjb21wYXJpbmcKKyAgICAgICAgLy8gd2l0aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lk
IHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAg
ICAgICAgLy8gaW4gdGhlIHRhYmxlCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2ln
bmVkIEhhc2hUKGNvbnN0IFQmKSwgYm9vbCBFcXVhbFQoY29uc3QgVmFsdWVUeXBlJiwgY29uc3Qg
VCYpLCBWYWx1ZVR5cGUgQ29udmVydFQoY29uc3QgVCYsIHVuc2lnbmVkKT4gCisgICAgICAgIHN0
ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0KGNvbnN0IFQmIHZhbHVlKTsKKyAgICAgICAg
CisgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpOworICAgICAgICB2
b2lkIHJlbW92ZShpdGVyYXRvciBpdCk7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgSW1wbFR5cGUgbV9pbXBsOworICAgIH07CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cz4KKyAgICBpbmxpbmUgaW50IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cz46OnNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC5zaXpl
KCk7IAorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGludCBIYXNoU2V0PFZhbHVlLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpjYXBhY2l0eSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAg
IGlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmlzRW1w
dHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNpemUoKSA9PSAwOyAKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cz4KKyAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaFNldDxWYWx1ZSwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzPjo6aXRlcmF0b3IgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzPjo6YmVnaW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigp
OyAKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGluZSB0eXBlbmFtZSBIYXNoU2V0PFZh
bHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjppdGVyYXRvciBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+OjplbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC5l
bmQoKTsgCisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgaW5saW5lIHR5cGVuYW1lIEhh
c2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnN0X2l0ZXJhdG9yIEhhc2hT
ZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmJlZ2luKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsgCisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+
CisgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmNvbnN0X2l0ZXJhdG9yIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46
OmVuZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0eXBlbmFtZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHM+OjppdGVyYXRvciBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gbV9pbXBsLmZpbmQodmFsdWUpOyAKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0
eXBlbmFtZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb25zdF9pdGVy
YXRvciBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLmZpbmQo
dmFsdWUpOyAKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICBpbmxpbmUgYm9vbCBIYXNo
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyh2
YWx1ZSk7IAorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHN0ZDo6cGFpcjx0eXBlbmFt
ZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjppdGVyYXRvciwgYm9vbD4g
SGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6aW5zZXJ0KGNvbnN0IFZhbHVl
VHlwZSAmdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLmluc2VydCh2YWx1ZSk7
IAorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIEhhc2hUKGNvbnN0IFQmKSwgYm9vbCBFcXVhbFQoY29uc3QgVmFsdWUmLCBjb25zdCBU
JiksIFZhbHVlIENvbnZlcnRUKGNvbnN0IFQmLCB1bnNpZ25lZCk+IAorICAgIHN0ZDo6cGFpcjx0
eXBlbmFtZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjppdGVyYXRvciwg
Ym9vbD4gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6aW5zZXJ0KGNvbnN0
IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC5pbnNlcnQ8VCwgVCwgSGFz
aFQsIEVxdWFsVCwgY29udmVydEFkYXB0ZXI8VmFsdWUsIFQsIENvbnZlcnRUPiA+KHZhbHVlLCB2
YWx1ZSk7IAorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHZvaWQgSGFzaFNldDxWYWx1
ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
CisgICAgeworICAgICAgICBtX2ltcGwucmVtb3ZlKHZhbHVlKTsgCisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHM+CisgICAgdm9pZCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+
OjpyZW1vdmUoaXRlcmF0b3IgaXQpCisgICAgeworICAgICAgICBtX2ltcGwucmVtb3ZlKGl0KTsg
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgdm9pZCBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+OjpjbGVhcigpCisgICAgeworICAgICAgICBtX2ltcGwuY2xlYXIo
KTsgCisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBraHRtbAorCit1c2luZyBLWE1MQ29yZTo6SGFz
aFNldDsKKworI2VuZGlmIC8qIEtYTUxDT1JFX0hBU0hfU0VUX0ggKi8KKworCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9reG1sY29yZS9IYXNoVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4
bWxjb3JlL0hhc2hUYWJsZS5jcHAKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNo
VGFibGUuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoVGFibGUuY3BwCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hUYWJs
ZS5jcHAJMjggU2VwIDIwMDUgMDg6MDE6MDcgLTAwMDAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworCisgICAgQ29weXJpZ2h0
IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiaGFzaHRhYmxlLmgiCisKK25hbWVz
cGFjZSBLWE1MQ29yZSB7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworCitpbnQgSGFzaFRh
YmxlU3RhdHM6Om51bUFjY2Vzc2VzOworaW50IEhhc2hUYWJsZVN0YXRzOjpudW1Db2xsaXNpb25z
OworaW50IEhhc2hUYWJsZVN0YXRzOjpjb2xsaXNpb25HcmFwaFs0MDk2XTsKK2ludCBIYXNoVGFi
bGVTdGF0czo6bWF4Q29sbGlzaW9uczsKK2ludCBIYXNoVGFibGVTdGF0czo6bnVtUmVoYXNoZXM7
CitpbnQgSGFzaFRhYmxlU3RhdHM6Om51bVJlbW92ZXM7CitpbnQgSGFzaFRhYmxlU3RhdHM6Om51
bVJlaW5zZXJ0czsKKworc3RhdGljIEhhc2hUYWJsZVN0YXRzIGxvZ2dlcjsKKworSGFzaFRhYmxl
U3RhdHM6On5IYXNoVGFibGVTdGF0cygpCit7CisgICAgcHJpbnRmKCJcbmtodG1sOjpIYXNoVGFi
bGUgc3RhdGlzdGljc1xuXG4iKTsKKyAgICBwcmludGYoIiVkIGFjY2Vzc2VzXG4iLCBudW1BY2Nl
c3Nlcyk7CisgICAgcHJpbnRmKCIlZCB0b3RhbCBjb2xsaXNpb25zLCBhdmVyYWdlICUuMmYgcHJv
YmVzIHBlciBhY2Nlc3NcbiIsIG51bUNvbGxpc2lvbnMsIDEuMCAqIChudW1BY2Nlc3NlcyArIG51
bUNvbGxpc2lvbnMpIC8gbnVtQWNjZXNzZXMpOworICAgIHByaW50ZigibG9uZ2VzdCBjb2xsaXNp
b24gY2hhaW46ICVkXG4iLCBtYXhDb2xsaXNpb25zKTsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8
PSBtYXhDb2xsaXNpb25zOyBpKyspIHsKKyAgICAgICAgcHJpbnRmKCIgICVkIGxvb2t1cHMgd2l0
aCBleGFjdGx5ICVkIGNvbGxpc2lvbnMgKCUuMmYlJSAsICUuMmYlJSB3aXRoIHRoaXMgbWFueSBv
ciBtb3JlKVxuIiwgY29sbGlzaW9uR3JhcGhbaV0sIGksIDEwMC4wICogKGNvbGxpc2lvbkdyYXBo
W2ldIC0gY29sbGlzaW9uR3JhcGhbaSsxXSkgLyBudW1BY2Nlc3NlcywgMTAwLjAgKiBjb2xsaXNp
b25HcmFwaFtpXSAvIG51bUFjY2Vzc2VzKTsKKyAgICB9CisgICAgcHJpbnRmKCIlZCByZWhhc2hl
c1xuIiwgbnVtUmVoYXNoZXMpOworICAgIHByaW50ZigiJWQgcmVpbnNlcnRzXG4iLCBudW1SZWlu
c2VydHMpOworfQorCit2b2lkIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50
KGludCBjb3VudCkKK3sKKyAgICBpZiAoY291bnQgPiBtYXhDb2xsaXNpb25zKQorICAgICAgICBt
YXhDb2xsaXNpb25zID0gY291bnQ7CisgICAgbnVtQ29sbGlzaW9ucysrOworICAgIGNvbGxpc2lv
bkdyYXBoW2NvdW50XSsrOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgS1hNTENvcmUK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IGt4bWxjb3JlL0hhc2hUYWJsZS5oCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3htbGNv
cmUvSGFzaFRhYmxlLmgKLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hUYWJsZS5oCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hU
YWJsZS5oCTI4IFNlcCAyMDA1IDA4OjAxOjA4IC0wMDAwCkBAIC0wLDAgKzEsNTg3IEBACisvLyAt
Ki0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgS1hNTENPUkVfSEFTSF9UQUJMRV9ICisjZGVmaW5lIEtYTUxD
T1JFX0hBU0hfVEFCTEVfSAorCisjaW5jbHVkZSAiRmFzdE1hbGxvYy5oIgorI2luY2x1ZGUgPHV0
aWxpdHk+CisKK25hbWVzcGFjZSBLWE1MQ29yZSB7CisKKyNkZWZpbmUgRFVNUF9IQVNIVEFCTEVf
U1RBVFMgMAorI2RlZmluZSBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kgMAorICAgIAorI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgCisgICAgc3RydWN0IEhhc2hUYWJsZVN0YXRzIHsK
KyAgICAgICAgfkhhc2hUYWJsZVN0YXRzKCk7IAorICAgICAgICBzdGF0aWMgaW50IG51bUFjY2Vz
c2VzOworICAgICAgICBzdGF0aWMgaW50IG51bUNvbGxpc2lvbnM7CisgICAgICAgIHN0YXRpYyBp
bnQgY29sbGlzaW9uR3JhcGhbNDA5Nl07CisgICAgICAgIHN0YXRpYyBpbnQgbWF4Q29sbGlzaW9u
czsKKyAgICAgICAgc3RhdGljIGludCBudW1SZWhhc2hlczsKKyAgICAgICAgc3RhdGljIGludCBu
dW1SZW1vdmVzOworICAgICAgICBzdGF0aWMgaW50IG51bVJlaW5zZXJ0czsKKyAgICAgICAgc3Rh
dGljIHZvaWQgcmVjb3JkQ29sbGlzaW9uQXRDb3VudChpbnQgY291bnQpOworICAgIH07CisgICAg
CisjZW5kaWYKKyAgICAKKyNpZiAhQ0hFQ0tfSEFTSFRBQkxFX0NPTlNJU1RFTkNZCisjZGVmaW5l
IGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpICgodm9pZCkwKQorI2RlZmluZSBjaGVja1RhYmxlQ29u
c2lzdGVuY3lFeGNlcHRTaXplKCkgKCh2b2lkKTApCisjZW5kaWYKKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1
ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGNsYXNz
IEhhc2hUYWJsZTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yIHsKKyAgICBw
cml2YXRlOgorICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+IEhhc2hUYWJsZVR5cGU7CisgICAgICAgIHR5cGVkZWYg
SGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CisgICAg
ICAgIHR5cGVkZWYgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBlOworICAgICAgICB0eXBlZGVmIFZh
bHVlVHlwZSAqUG9pbnRlclR5cGU7CisgICAgICAgIAorICAgICAgICBmcmllbmQgY2xhc3MgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz47Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHNraXBFbXB0eUJ1Y2tldHMoKSAKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKG1fcG9zaXRpb24gIT0gbV9lbmRQb3NpdGlvbiAmJiAoSGFzaFRhYmxl
VHlwZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tldCgqbV9wb3NpdGlvbikpKSB7CisgICAgICAgICAg
ICAgICAgKyttX3Bvc2l0aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihQb2ludGVyVHlwZSBwb3NpdGlvbiwgUG9pbnRlclR5
cGUgZW5kUG9zaXRpb24pIAorICAgICAgICAgICAgOiBtX3Bvc2l0aW9uKHBvc2l0aW9uKSwgbV9l
bmRQb3NpdGlvbihlbmRQb3NpdGlvbikgCisgICAgICAgIHsgCisgICAgICAgICAgICBza2lwRW1w
dHlCdWNrZXRzKCk7CisgICAgICAgIH0KKyAgICBwdWJsaWM6CisgICAgICAgIEhhc2hUYWJsZUl0
ZXJhdG9yKCkge30KKyAgICAgICAgCisgICAgICAgIC8vIGRlZmF1bHQgY29weSwgYXNzaWdubWVu
dCBhbmQgZGVzdHJ1Y3RvciBhcmUgb2sKKyAgICAgICAgCisgICAgICAgIFJlZmVyZW5jZVR5cGUg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcG9zaXRpb247IH0KKyAgICAgICAgUG9pbnRl
clR5cGUgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CisgICAg
ICAgIAorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICsrbV9wb3NpdGlvbjsKKyAgICAgICAgICAgIHNraXBFbXB0eUJ1Y2tldHMoKTsKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gcG9z
dGZpeCArKyBpbnRlbnRpb25hbGx5IG9taXR0ZWQKKyAgICAgICAgCisgICAgICAgIC8vIENvbXBh
cmlzb24uCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsgCisgICAgICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhlci5t
X3Bvc2l0aW9uOyAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgCisgICAgICAgIHsgCisgICAgICAgICAgICBy
ZXR1cm4gbV9wb3NpdGlvbiAhPSBvdGhlci5tX3Bvc2l0aW9uOyAKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBQb2ludGVyVHlwZSBtX3Bvc2l0aW9uOworICAgICAg
ICBQb2ludGVyVHlwZSBtX2VuZFBvc2l0aW9uOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGNsYXNzIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3IgeworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz4gSGFzaFRh
YmxlVHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBWYWx1ZSBW
YWx1ZVR5cGU7CisgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBl
OworICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSAqUG9pbnRlclR5cGU7CisgICAgICAg
IAorICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXks
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cz47CisgICAgICAgIAorICAgICAgICBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yKFBvaW50ZXJUeXBlIHBvc2l0aW9uLCBQb2ludGVyVHlwZSBlbmRQb3NpdGlvbikg
CisgICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX2VuZFBvc2l0aW9uKGVuZFBv
c2l0aW9uKSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHNraXBFbXB0eUJ1Y2tldHMoKTsKKyAg
ICAgICAgfQorICAgIHB1YmxpYzoKKyAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcigpIHt9
CisgICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IoY29uc3QgaXRlcmF0b3IgJm90aGVyKQor
ICAgICAgICAgICAgOiBtX3Bvc2l0aW9uKG90aGVyLm1fcG9zaXRpb24pLCBtX2VuZFBvc2l0aW9u
KG90aGVyLm1fZW5kUG9zaXRpb24pIHsgfQorICAgICAgICAKKyAgICAgICAgLy8gZGVmYXVsdCBj
b3B5LCBhc3NpZ25tZW50IGFuZCBkZXN0cnVjdG9yIGFyZSBvaworICAgICAgICAKKyAgICAgICAg
UmVmZXJlbmNlVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9wb3NpdGlvbjsgfQor
ICAgICAgICBQb2ludGVyVHlwZSBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRv
ciooKSk7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygpIAorICAg
ICAgICB7CisgICAgICAgICAgICB3aGlsZSAobV9wb3NpdGlvbiAhPSBtX2VuZFBvc2l0aW9uICYm
IChIYXNoVGFibGVUeXBlOjppc0VtcHR5T3JEZWxldGVkQnVja2V0KCptX3Bvc2l0aW9uKSkpIHsK
KyAgICAgICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgKyttX3Bvc2l0aW9uOworICAgICAgICAgICAgc2tpcEVtcHR5QnVja2V0cygpOwor
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAorICAgICAgICAKKyAgICAgICAgLy8g
Q29tcGFyaXNvbi4KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHJldHVybiBtX3Bvc2l0aW9u
ID09IG90aGVyLm1fcG9zaXRpb247IAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdCAKKyAgICAgICAg
eyAKKyAgICAgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uICE9IG90aGVyLm1fcG9zaXRpb247IAor
ICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFBvaW50ZXJUeXBlIG1f
cG9zaXRpb247CisgICAgICAgIFBvaW50ZXJUeXBlIG1fZW5kUG9zaXRpb247CisgICAgfTsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFj
dEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzPgorICAgIGNsYXNzIEhhc2hUYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+IGNvbnN0X2l0
ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEtleSBLZXlUeXBlOworICAgICAgICB0eXBlZGVmIFZh
bHVlIFZhbHVlVHlwZTsKKyAgICAgICAgCisgICAgICAgIEhhc2hUYWJsZSgpIDogbV90YWJsZSgw
KSwgbV90YWJsZVNpemUoMCksIG1fdGFibGVTaXplTWFzaygwKSwgbV9rZXlDb3VudCgwKSwgbV9k
ZWxldGVkQ291bnQoMCkge30KKyAgICAgICAgfkhhc2hUYWJsZSgpIHsgZmFzdEZyZWUobV90YWJs
ZSk7IH0KKyAgICAgICAgCisgICAgICAgIEhhc2hUYWJsZShjb25zdCBIYXNoVGFibGUmIG90aGVy
KTsKKyAgICAgICAgdm9pZCBzd2FwKGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpOworICAgICAgICBI
YXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBIYXNoVGFibGUmIG90aGVyKTsKKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbWFrZUl0ZXJhdG9yKG1fdGFibGUpOyB9
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1ha2VJdGVyYXRvcihtX3RhYmxlICsg
bV90YWJsZVNpemUpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IobV90YWJsZSk7IH0KKyAgICAgICAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IobV90YWJsZSArIG1fdGFi
bGVTaXplKTsgfQorICAgICAgICAKKyAgICAgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2tleUNvdW50OyB9CisgICAgICAgIGludCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFi
bGVTaXplOyB9CisgICAgICAgIAorICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGlu
c2VydChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpbnNlcnQ8S2V5VHlwZSwgVmFs
dWVUeXBlLCBoYXNoLCBlcXVhbCwgaWRlbnRpdHlDb252ZXJ0PihleHRyYWN0S2V5KHZhbHVlKSwg
dmFsdWUpOyB9CisgICAgICAgIAorICAgICAgICAvLyBhIHNwZWNpYWwgdmVyc2lvbiBvZiBpbnNl
cnQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAg
ICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUgY29zdCBvZiB0eXBlIGNv
bnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5CisgICAgICAgIC8vIGluIHRoZSB0YWJs
ZQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYSwgdW5zaWduZWQg
SGFzaFQoY29uc3QgVCYpLCBib29sIEVxdWFsVChjb25zdCBLZXkmLCBjb25zdCBUJiksIFZhbHVl
VHlwZSBDb252ZXJ0VChjb25zdCBUJiwgY29uc3QgRXh0cmEgJiwgdW5zaWduZWQpPiAKKyAgICAg
ICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBpbnNlcnQoY29uc3QgVCYga2V5LCBjb25zdCBF
eHRyYSYgZXh0cmEpOworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlU
eXBlJiBrZXkpOworICAgICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtl
eSkgY29uc3Q7CisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25z
dDsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSk7Cisg
ICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KTsKKyAgICAgICAgdm9pZCBjbGVhcigpOwor
ICAgICAgICAKKyAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKSB7IHJldHVybiBleHRyYWN0S2V5KHZhbHVlKSA9PSBleHRyYWN0S2V5KFRyYWl0
czo6ZW1wdHlWYWx1ZSgpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRCdWNrZXQo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gZXh0cmFjdEtleSh2YWx1ZSkgPT0gZXh0
cmFjdEtleShUcmFpdHM6OmRlbGV0ZWRWYWx1ZSgpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBp
c0VtcHR5T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlz
RW1wdHlCdWNrZXQodmFsdWUpIHx8IGlzRGVsZXRlZEJ1Y2tldCh2YWx1ZSk7IH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5VHlw
ZSYga2V5KSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjpoYXNoKGtleSk7IH0KKyAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgS2V5VHlwZSYgYSwgY29uc3QgS2V5VHlwZSYgYikgeyByZXR1
cm4gSGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0gICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAvLyBGSVhNRTogYXNzdW1lcyBrZXkgPT0gdmFsdWU7IHNwZWNpYWwgbG9va3VwIG5lZWRz
IGFkanVzdGluZworICAgICAgICBzdGF0aWMgVmFsdWVUeXBlIGlkZW50aXR5Q29udmVydChjb25z
dCBLZXlUeXBlJiBrZXksIGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUsIHVuc2lnbmVkKSB7IHJldHVy
biB2YWx1ZTsgfQorICAgICAgICBzdGF0aWMgS2V5VHlwZSBleHRyYWN0S2V5KGNvbnN0IFZhbHVl
VHlwZSYgdmFsdWUpIHsgcmV0dXJuIEV4dHJhY3RLZXkodmFsdWUpOyB9CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgVmFsdWVUeXBlICphbGxvY2F0ZVRhYmxlKGludCBzaXplKTsKKyAgICAgICAg
CisgICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPFZhbHVlVHlwZSAqLCBib29sPiBMb29rdXBUeXBl
OworICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxMb29rdXBUeXBlLCB1bnNpZ25lZD4gRnVsbExv
b2t1cFR5cGU7CisgICAgICAgIAorICAgICAgICBMb29rdXBUeXBlIGxvb2t1cChjb25zdCBLZXkm
IGtleSkgeyByZXR1cm4gbG9va3VwPEtleSwgaGFzaCwgZXF1YWw+KGtleSkuZmlyc3Q7IH0KKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgSGFzaFQoY29uc3QgVCYpLCBib29s
IEVxdWFsVChjb25zdCBLZXkmLCBjb25zdCBUJik+CisgICAgICAgIEZ1bGxMb29rdXBUeXBlIGxv
b2t1cChjb25zdCBUJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHJlbW92ZShWYWx1ZVR5cGUg
Kik7CisgICAgICAgIAorICAgICAgICBib29sIHNob3VsZEV4cGFuZCgpIGNvbnN0IHsgcmV0dXJu
IChtX2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQpICogbV9tYXhMb2FkID49IG1fdGFibGVTaXpl
OyB9CisgICAgICAgIGJvb2wgbXVzdFJlaGFzaEluUGxhY2UoKSBjb25zdCB7IHJldHVybiBtX2tl
eUNvdW50ICogbV9taW5Mb2FkIDwgbV90YWJsZVNpemUgKiAyOyB9CisgICAgICAgIGJvb2wgc2hv
dWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudCAqIG1fbWluTG9hZCA8IG1fdGFi
bGVTaXplICYmIG1fdGFibGVTaXplID4gbV9taW5UYWJsZVNpemU7IH0KKyAgICAgICAgdm9pZCBl
eHBhbmQoKTsKKyAgICAgICAgdm9pZCBzaHJpbmsoKSB7IHJlaGFzaChtX3RhYmxlU2l6ZSAvIDIp
OyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJlaGFzaChpbnQgbmV3VGFibGVTaXplKTsKKyAg
ICAgICAgdm9pZCByZWluc2VydChjb25zdCBWYWx1ZVR5cGUmKTsKKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyB2b2lkIGNsZWFyQnVja2V0KFZhbHVlVHlwZSYga2V5KSB7IGtleSA9IFRyYWl0czo6
ZW1wdHlWYWx1ZSgpO30KKyAgICAgICAgc3RhdGljIHZvaWQgZGVsZXRlQnVja2V0KFZhbHVlVHlw
ZSYga2V5KSB7IGtleSA9IFRyYWl0czo6ZGVsZXRlZFZhbHVlKCk7fQorICAgICAgICAKKyAgICAg
ICAgRnVsbExvb2t1cFR5cGUgbWFrZUxvb2t1cFJlc3VsdChWYWx1ZVR5cGUgKnBvc2l0aW9uLCBi
b29sIGZvdW5kLCB1bnNpZ25lZCBoYXNoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
RnVsbExvb2t1cFR5cGUoTG9va3VwVHlwZShwb3NpdGlvbiwgZm91bmQpLCBoYXNoKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZhbHVlVHlwZSAq
cG9zKSB7IHJldHVybiBpdGVyYXRvcihwb3MsIG1fdGFibGUgKyBtX3RhYmxlU2l6ZSk7IH0KKyAg
ICAgICAgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoVmFsdWVUeXBlICpwb3MpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHBvcywgbV90YWJsZSArIG1fdGFibGVTaXplKTsg
fQorICAgICAgICAKKyNpZiBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9p
ZCBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSBjb25zdDsKKyAgICAgICAgdm9pZCBjaGVja1RhYmxl
Q29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbV9taW5UYWJsZVNpemUgPSA2NDsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtX21heExvYWQgPSAyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1fbWluTG9h
ZCA9IDY7CisgICAgICAgIAorICAgICAgICBWYWx1ZVR5cGUgKm1fdGFibGU7CisgICAgICAgIGlu
dCBtX3RhYmxlU2l6ZTsKKyAgICAgICAgaW50IG1fdGFibGVTaXplTWFzazsKKyAgICAgICAgaW50
IG1fa2V5Q291bnQ7CisgICAgICAgIGludCBtX2RlbGV0ZWRDb3VudDsKKyAgICB9OworICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5
KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgSGFzaFQoY29uc3QgVCYpLCBib29s
IEVxdWFsVChjb25zdCBLZXkmLCBjb25zdCBUJik+CisgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpGdWxs
TG9va3VwVHlwZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzPjo6bG9va3VwKGNvbnN0IFQmIGtleSkKKyAgICB7CisgICAgICAgIGFzc2VydCht
X3RhYmxlKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVChrZXkpOworICAg
ICAgICBpbnQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIGludCBpID0gaCAm
IHNpemVNYXNrOworICAgICAgICBpbnQgayA9IDA7CisgICAgICAgIAorI2lmIERVTVBfSEFTSFRB
QkxFX1NUQVRTCisgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOworICAgICAg
ICBpbnQgcHJvYmVDb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIFZhbHVlVHlw
ZSAqdGFibGUgPSBtX3RhYmxlOworICAgICAgICBWYWx1ZVR5cGUgKmVudHJ5OworICAgICAgICBW
YWx1ZVR5cGUgKmRlbGV0ZWRFbnRyeSA9IDA7CisgICAgICAgIHdoaWxlICghaXNFbXB0eUJ1Y2tl
dCgqKGVudHJ5ID0gdGFibGUgKyBpKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNr
ZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKEVxdWFsVChleHRyYWN0S2V5KCplbnRyeSksIGtleSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VMb29rdXBSZXN1bHQoZW50cnksIHRydWUsIGgpOworI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAg
ICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNl
bmRpZgorICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICBrID0gMSB8ICho
ICUgc2l6ZU1hc2spOworICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1ha2VMb29rdXBSZXN1bHQoZGVsZXRlZEVu
dHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50cnksIGZhbHNlLCBoKTsKKyAgICB9CisgICAgCisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RL
ZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYSwgdW5zaWduZWQgSGFz
aFQoY29uc3QgVCYpLCBib29sIEVxdWFsVChjb25zdCBLZXkmLCBjb25zdCBUJiksIFZhbHVlIENv
bnZlcnRUKGNvbnN0IFQmLCBjb25zdCBFeHRyYSAmLCB1bnNpZ25lZCk+IAorICAgIGlubGluZSBz
dGQ6OnBhaXI8dHlwZW5hbWUgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46Oml0ZXJhdG9yLCBib29sPiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6aW5zZXJ0KGNvbnN0IFQmIGtleSwg
Y29uc3QgRXh0cmEgJmV4dHJhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3RhYmxlKQorICAgICAg
ICAgICAgZXhwYW5kKCk7CisgICAgICAgIAorICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgCisgICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGxvb2t1
cDxULCBIYXNoVCwgRXF1YWxUPihrZXkpOworICAgICAgICAKKyAgICAgICAgVmFsdWVUeXBlICpl
bnRyeSA9IGxvb2t1cFJlc3VsdC5maXJzdC5maXJzdDsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGxv
b2t1cFJlc3VsdC5maXJzdC5zZWNvbmQ7CisgICAgICAgIHVuc2lnbmVkIGggPSBsb29rdXBSZXN1
bHQuc2Vjb25kOworICAgICAgICAKKyAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIobWFrZUl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAg
ICAgICAgICAtLW1fZGVsZXRlZENvdW50OworICAgICAgICAKKyAgICAgICAgKmVudHJ5ID0gQ29u
dmVydFQoa2V5LCBleHRyYSwgaCk7CisgICAgICAgICsrbV9rZXlDb3VudDsKKyAgICAgICAgCisg
ICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkgeworICAgICAgICAgICAgS2V5VHlwZSBlbnRlcmVk
S2V5ID0gZXh0cmFjdEtleSgqZW50cnkpOworICAgICAgICAgICAgZXhwYW5kKCk7CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZmluZChlbnRlcmVkS2V5KSwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1ha2VJdGVyYXRvcihlbnRyeSksIHRy
dWUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpyZWluc2VydChjb25zdCBWYWx1
ZVR5cGUmIGVudHJ5KQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fdGFibGUpOworICAgICAgICBh
c3NlcnQoIWxvb2t1cChleHRyYWN0S2V5KGVudHJ5KSkuc2Vjb25kKTsKKyAgICAgICAgYXNzZXJ0
KCFpc0RlbGV0ZWRCdWNrZXQoKihsb29rdXAoZXh0cmFjdEtleShlbnRyeSkpLmZpcnN0KSkpOwor
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bVJl
aW5zZXJ0czsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgKihsb29rdXAoZXh0cmFjdEtleShl
bnRyeSkpLmZpcnN0KSA9IGVudHJ5OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGluZSB0eXBlbmFt
ZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
Pjo6aXRlcmF0b3IgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cz46OmZpbmQoY29uc3QgS2V5JiBrZXkpCisgICAgeworICAgICAgICBpZiAoIW1f
dGFibGUpCisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisgICAgICAgIAorICAgICAgICBMb29r
dXBUeXBlIHJlc3VsdCA9IGxvb2t1cChrZXkpOworICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQp
CisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisgICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3Io
cmVzdWx0LmZpcnN0KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnN0
X2l0ZXJhdG9yIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+OjpmaW5kKGNvbnN0IEtleSYga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFtX3RhYmxlKQorICAgICAgICAgICAgcmV0dXJuIGVuZCgpOworICAgICAgICAKKyAgICAgICAg
TG9va3VwVHlwZSByZXN1bHQgPSBjb25zdF9jYXN0PEhhc2hUYWJsZSAqPih0aGlzKS0+bG9va3Vw
KGtleSk7CisgICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgIHJldHVybiBl
bmQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VDb25zdEl0ZXJhdG9yKHJlc3VsdC5maXJzdCk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtl
eSBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHM+CisgICAgaW5saW5lIGJvb2wgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtl
eSkgY29uc3QgCisgICAgeworICAgICAgICBpZiAoIW1fdGFibGUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxIYXNoVGFibGUg
Kj4odGhpcyktPmxvb2t1cChrZXkpLnNlY29uZDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUg
JiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICBpbmxpbmUg
dm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6cmVtb3ZlKFZhbHVlVHlwZSAqcG9zKQorICAgIHsKKyAgICAgICAgY2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCk7CisgICAgICAgIAorI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAg
ICsrSGFzaFRhYmxlU3RhdHM6Om51bVJlbW92ZXM7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAg
IGRlbGV0ZUJ1Y2tldCgqcG9zKTsKKyAgICAgICAgKyttX2RlbGV0ZWRDb3VudDsKKyAgICAgICAg
LS1tX2tleUNvdW50OworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQorICAg
ICAgICAgICAgc2hyaW5rKCk7CisgICAgICAgIAorICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgS2V5IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6cmVtb3ZlKGNvbnN0IEtleVR5
cGUmIGtleSkKKyAgICB7IAorICAgICAgICBpZiAoIW1fdGFibGUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICByZW1vdmUoZmluZChrZXkpKTsgCisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5
KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+
CisgICAgaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZShpdGVyYXRvciBpdCkKKyAgICB7IAorICAgICAgICBp
ZiAoaXQgPT0gZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBy
ZW1vdmUoaXQubV9wb3NpdGlvbik7IAorICAgIH0KKyAgICAKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAm
KSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGluZSBW
YWx1ZSAqSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmFsbG9jYXRlVGFibGUoaW50IHNpemUpCisgICAgeworICAgICAgICAvLyB3b3VsZCB1
c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlv
bnMgaGVyZSwgYnV0CisgICAgICAgIC8vIGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRo
YXQKKyAgICAgICAgaWYgKFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybykKKyAgICAgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSAqPihmYXN0Q2FsbG9jKHNpemUsIHNpemVv
ZihWYWx1ZVR5cGUpKSk7IAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlVHlwZSAq
cmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUgKj4oZmFzdE1hbGxvYyhzaXplICog
c2l6ZW9mKFZhbHVlVHlwZSkpKTsgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgIGNsZWFyQnVja2V0KHJlc3VsdFtpXSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRy
YWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHM+CisgICAgaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXks
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmV4cGFuZCgpCisgICAgeyAKKyAgICAgICAgaW50IG5l
d1NpemU7CisgICAgICAgIGlmIChtX3RhYmxlU2l6ZSA9PSAwKQorICAgICAgICAgICAgbmV3U2l6
ZSA9IG1fbWluVGFibGVTaXplOworICAgICAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgp
KQorICAgICAgICAgICAgbmV3U2l6ZSA9IG1fdGFibGVTaXplOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBuZXdTaXplID0gbV90YWJsZVNpemUgKiAyOworICAgICAgICAKKyAgICAgICAgcmVo
YXNoKG5ld1NpemUpOyAKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpyZWhhc2goaW50IG5ld1Rh
YmxlU2l6ZSkKKyAgICB7CisgICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUo
KTsKKyAgICAgICAgCisgICAgICAgIGludCBvbGRUYWJsZVNpemUgPSBtX3RhYmxlU2l6ZTsKKyAg
ICAgICAgVmFsdWVUeXBlICpvbGRUYWJsZSA9IG1fdGFibGU7CisgICAgICAgIAorI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTCisgICAgICAgIGlmIChvbGRUYWJsZVNpemUgIT0gMCkKKyAgICAgICAg
ICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bVJlaGFzaGVzOworI2VuZGlmCisgICAgICAgIAorICAg
ICAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKKyAgICAgICAgbV90YWJsZVNpemVNYXNr
ID0gbmV3VGFibGVTaXplIC0gMTsKKyAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3
VGFibGVTaXplKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpICE9IG9sZFRh
YmxlU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBWYWx1ZVR5cGUgZW50cnkgPSBvbGRUYWJsZVtp
XTsKKyAgICAgICAgICAgIGlmICghaXNFbXB0eU9yRGVsZXRlZEJ1Y2tldChlbnRyeSkpCisgICAg
ICAgICAgICAgICAgcmVpbnNlcnQoZW50cnkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBtX2RlbGV0ZWRDb3VudCA9IDA7CisgICAgICAgIAorICAgICAgICBmYXN0RnJlZShvbGRUYWJs
ZSk7CisgICAgICAgIAorICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJh
Y3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cz4KKyAgICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y2xlYXIoKQorICAgIHsKKyAgICAgICAgZmFzdEZyZWUo
bV90YWJsZSk7CisgICAgICAgIG1fdGFibGUgPSAwOworICAgICAgICBtX3RhYmxlU2l6ZSA9IDA7
CisgICAgICAgIG1fdGFibGVTaXplTWFzayA9IDA7CisgICAgICAgIG1fa2V5Q291bnQgPSAwOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBL
ZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzPgorICAgIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+OjpIYXNoVGFibGUoY29uc3QgSGFzaFRhYmxlJiBvdGhlcikKKyAg
ICAgICAgOiBtX3RhYmxlKDApCisgICAgICAgICAgLCBtX3RhYmxlU2l6ZShvdGhlci5tX3RhYmxl
U2l6ZSkKKyAgICAgICAgICAsIG1fdGFibGVTaXplTWFzayhvdGhlci5tX3RhYmxlU2l6ZU1hc2sp
CisgICAgICAgICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisgICAgICAgICAgLCBt
X2RlbGV0ZWRDb3VudChvdGhlci5tX2RlbGV0ZWRDb3VudCkKKyAgICB7CisgICAgICAgIGlmICht
X3RhYmxlU2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBtX3RhYmxlID0gZmFzdE1hbGxvYyhtX3Rh
YmxlU2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkob3RoZXIubV90YWJsZSwgbV90YWJsZSwgbV90
YWJsZVNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RLZXko
Y29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4K
KyAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+Ojpzd2FwKGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpCisgICAgeworICAgICAgICBW
YWx1ZVR5cGUgKnRtcF90YWJsZSA9IG1fdGFibGU7CisgICAgICAgIG1fdGFibGUgPSBvdGhlci5t
X3RhYmxlOworICAgICAgICBvdGhlci5tX3RhYmxlID0gdG1wX3RhYmxlOworICAgICAgICAKKyAg
ICAgICAgaW50IHRtcF90YWJsZVNpemUgPSBtX3RhYmxlU2l6ZTsKKyAgICAgICAgbV90YWJsZVNp
emUgPSBvdGhlci5tX3RhYmxlU2l6ZTsKKyAgICAgICAgb3RoZXIubV90YWJsZVNpemUgPSB0bXBf
dGFibGVTaXplOworICAgICAgICAKKyAgICAgICAgaW50IHRtcF90YWJsZVNpemVNYXNrID0gbV90
YWJsZVNpemVNYXNrOworICAgICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBvdGhlci5tX3RhYmxlU2l6
ZU1hc2s7CisgICAgICAgIG90aGVyLm1fdGFibGVTaXplTWFzayA9IHRtcF90YWJsZVNpemVNYXNr
OworICAgICAgICAKKyAgICAgICAgaW50IHRtcF9rZXlDb3VudCA9IG1fa2V5Q291bnQ7CisgICAg
ICAgIG1fa2V5Q291bnQgPSBvdGhlci5tX2tleUNvdW50OworICAgICAgICBvdGhlci5tX2tleUNv
dW50ID0gdG1wX2tleUNvdW50OworICAgICAgICAKKyAgICAgICAgaW50IHRtcF9kZWxldGVkQ291
bnQgPSBtX2RlbGV0ZWRDb3VudDsKKyAgICAgICAgbV9kZWxldGVkQ291bnQgPSBvdGhlci5tX2Rl
bGV0ZWRDb3VudDsKKyAgICAgICAgb3RoZXIubV9kZWxldGVkQ291bnQgPSB0bXBfZGVsZXRlZENv
dW50OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgorICAgIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+JiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtl
eSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYgb3Ro
ZXIpCisgICAgeworICAgICAgICBIYXNoVGFibGUgdG1wKG90aGVyKTsKKyAgICAgICAgc3dhcCh0
bXApOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorI2lmIENIRUNLX0hBU0hU
QUJMRV9DT05TSVNURU5DWQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUo
KTsKKyAgICAgICAgYXNzZXJ0KCFzaG91bGRFeHBhbmQoKSk7CisgICAgICAgIGFzc2VydCghc2hv
dWxkU2hyaW5rKCkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNoZWNrVGFibGVDb25zaXN0
ZW5jeUV4Y2VwdFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3RhYmxlKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAg
ICAgaW50IGRlbGV0ZWRDb3VudCA9IDA7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV90
YWJsZVNpemU7ICsraikgeworICAgICAgICAgICAgVmFsdWVUeXBlICplbnRyeSA9IG1fdGFibGUg
KyBqOworICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1
Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICAgICAgKytkZWxldGVkQ291bnQ7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIGl0ID0gZmluZChleHRyYWN0S2V5KCplbnRyeSkpOworICAgICAg
ICAgICAgYXNzZXJ0KGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOworICAgICAgICAgICAgKytjb3Vu
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXNzZXJ0KGNvdW50ID09IG1fa2V5Q291
bnQpOworICAgICAgICBhc3NlcnQoZGVsZXRlZENvdW50ID09IG1fZGVsZXRlZENvdW50KTsKKyAg
ICAgICAgYXNzZXJ0KG1fdGFibGVTaXplID49IG1fbWluVGFibGVTaXplKTsKKyAgICAgICAgYXNz
ZXJ0KG1fdGFibGVTaXplTWFzayk7CisgICAgICAgIGFzc2VydChtX3RhYmxlU2l6ZSA9PSBtX3Rh
YmxlU2l6ZU1hc2sgKyAxKTsKKyAgICB9CisgICAgCisjZW5kaWYgLy8gQ0hFQ0tfSEFTSFRBQkxF
X0NPTlNJU1RFTkNZCisgICAgCit9IC8vIG5hbWVzcGFjZSBLWE1MQ29yZQorCisjZW5kaWYgLy8g
S1hNTENPUkVfSEFTSF9UQUJMRV9ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNo
VHJhaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga3htbGNvcmUvSGFzaFRyYWl0cy5oCmRpZmYg
LU4gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaFRyYWl0cy5oCi0tLSBKYXZhU2NyaXB0Q29y
ZS9reG1sY29yZS9IYXNoVHJhaXRzLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgSmF2
YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaFRyYWl0cy5oCTI4IFNlcCAyMDA1IDA4OjAxOjA4IC0w
MDAwCkBAIC0wLDAgKzEsMTAzIEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDog
NCAtKi0KKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICog
Q29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgS1hNTENPUkVf
SEFTSF9UUkFJVFNfSAorI2RlZmluZSBLWE1MQ09SRV9IQVNIX1RSQUlUU19ICisKKyNpbmNsdWRl
IDx1dGlsaXR5PgorI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisKK25hbWVzcGFj
ZSBLWE1MQ29yZSB7CisKKyAgICB1c2luZyBzdGQ6OnBhaXI7CisgCisgICAgLy8gRklYTUU6IHN0
b3AgdXNpbmcgdGhpcyBldmlsIGhhY2ssIHVzZSBzb21ldGhpbmcgc3VwcG9ydGVkIG9yIGVsc2Ug
c3BlY2lhbGl6ZQorICAgIC8vIGZvciBhbGwgbnVtZXJpdCBjeXBlcyBieSBoYW5kCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgSGFzaFRyYWl0cyB7CisgICAgICAgIHR5cGVk
ZWYgVCB0cmFpdFR5cGU7CisjaWZkZWYgX19HTElCQ1hYX18gLy8gZ2NjIDMuNCBhbmQgZ3JlYXRl
cjoKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHN0ZDo6X19p
c19pbnRlZ2VyPFQ+OjpfX3ZhbHVlOworI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
ZW1wdHlWYWx1ZUlzWmVybyA9IHN0ZDo6X19pc19pbnRlZ2VyPFQ+OjpfTV90eXBlOworI2VuZGlm
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdHJhaXRUeXBlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8g
bWF5IG5vdCBiZSBhcHByb3ByaWF0ZSBmb3IgYWxsIHVzZXMgc2luY2UgaXQgd291bGQgZGlzYWxs
b3cgMCBhbmQgLTEgYXMga2V5cworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgSGFzaFRyYWl0
czxpbnQ+IHsKKyAgICAgICAgdHlwZWRlZiBpbnQgdHJhaXRUeXBlOworICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIHN0
YXRpYyB0cmFpdFR5cGUgZW1wdHlWYWx1ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgICAgIHN0YXRpYyB0cmFpdFR5cGUgZGVsZXRlZFZhbHVlKCkgeworICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFA+CisgICAgc3RydWN0IEhhc2hUcmFpdHM8UCAqPiB7CisgICAgICAgIHR5cGVkZWYgUCAq
dHJhaXRUeXBlOworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0g
dHJ1ZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB0cmFpdFR5cGUgZW1wdHlWYWx1ZSgpIHsK
KyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFAgKj4oMCk7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGljIHRyYWl0VHlwZSBkZWxldGVkVmFsdWUoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQICo+KC0xKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdFRyYWl0cywgdHlwZW5hbWUgU2Vjb25kVHJhaXRzPgor
ICAgIHN0cnVjdCBQYWlySGFzaFRyYWl0cyB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBGaXJzdFRyYWl0czo6dHJhaXRUeXBlIEZpcnN0VHlwZTsKKyAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBTZWNvbmRUcmFpdHM6OnRyYWl0VHlwZSBTZWNvbmRUeXBlOworICAgIHB1
YmxpYzoKKyAgICAgICAgdHlwZWRlZiBwYWlyPEZpcnN0VHlwZSwgU2Vjb25kVHlwZT4gdHJhaXRU
eXBlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVy
byA9IEZpcnN0VHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvICYmIFNlY29uZFRyYWl0czo6ZW1wdHlW
YWx1ZUlzWmVybzsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB0cmFpdFR5cGUgZW1wdHlWYWx1
ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cmFpdFR5cGUoRmlyc3RUcmFpdHM6OmVtcHR5VmFs
dWUoKSwgU2Vjb25kVHJhaXRzOjplbXB0eVZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIHN0
YXRpYyB0cmFpdFR5cGUgZGVsZXRlZFZhbHVlKCkgeworICAgICAgICAgICAgcmV0dXJuIHRyYWl0
VHlwZShGaXJzdFRyYWl0czo6ZGVsZXRlZFZhbHVlKCksIFNlY29uZFRyYWl0czo6ZW1wdHlWYWx1
ZSgpKTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmly
c3QsIHR5cGVuYW1lIFNlY29uZD4KKyAgICBzdHJ1Y3QgSGFzaFRyYWl0czxwYWlyPEZpcnN0LCBT
ZWNvbmQ+ID4gOiBwdWJsaWMgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxGaXJzdD4sIEhhc2hU
cmFpdHM8U2Vjb25kPiA+IHsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBLWE1MQ29yZQorCit1
c2luZyBLWE1MQ29yZTo6SGFzaFRyYWl0czsKK3VzaW5nIEtYTUxDb3JlOjpQYWlySGFzaFRyYWl0
czsKKworI2VuZGlmIC8vIEtYTUxDT1JFX0hBU0hfVFJBSVRTX0gKSW5kZXg6IFdlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL0NoYW5nZUxvZyx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNzEKZGlmZiAtcCAtdSAtcjEuMTcxIFdlYkNvcmUvQ2hh
bmdlTG9nCi0tLSBXZWJDb3JlL0NoYW5nZUxvZwkyOCBTZXAgMjAwNSAwNTowNjowMSAtMDAwMAkx
LjE3MQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJMjggU2VwIDIwMDUgMDg6MDE6MzMgLTAwMDAKQEAg
LTEsMyArMSw0NSBAQAorMjAwNS0wOS0yNyAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJLSBtb3ZlIEhh
c2hNYXAvSGFzaFNldCBjb2RlIGRvd24gdG8gSmF2YVNjcmlwdENvcmU7IGFkYXB0IHVzYWdlIHRv
IHRoZSBuZXcgaGVhZGVyIGxvY2F0aW9uCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9r
eG1sY29yZS9IYXNoTWFwLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2t4
bWxjb3JlL0hhc2hTZXQuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvbWlz
Yy9oYXNobWFwLmg6IFJlbW92ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9o
YXNoc2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9wb2lu
dGVyaGFzaC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHA6CisgICAg
ICAgIChraHRtbDo6Q1NTUnVsZVNldDo6Z2V0SURSdWxlcyk6CisgICAgICAgIChraHRtbDo6Q1NT
UnVsZVNldDo6Z2V0Q2xhc3NSdWxlcyk6CisgICAgICAgIChraHRtbDo6Q1NTUnVsZVNldDo6Z2V0
VGFnUnVsZXMpOgorICAgICAgICAoa2h0bWw6OkNTU1J1bGVTZXQ6OmdldFVuaXZlcnNhbFJ1bGVz
KToKKyAgICAgICAgKGtodG1sOjpDU1NSdWxlU2V0OjphZGRUb1J1bGVTZXQpOgorICAgICAgICAq
IGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmg6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNf
YmluZGluZy5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuY3BwOgorICAg
ICAgICAqIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwOgorICAgICAgICAoRE9NOjph
ZGRJdGVtVG9NYXApOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuaDoK
KyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwOgorICAgICAgICAqIGto
dG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHA6CisgICAgICAgIChET006OkhUTUxGb3JtRWxlbWVu
dEltcGw6OnJhZGlvQnV0dG9uQ2hlY2tlZCk6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2Zv
cm1pbXBsLmg6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5jcHA6CisgICAgICAg
IChET006OkhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQpOgorICAgICAgICAq
IGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHA6CisgICAgICAgIChIVE1MUGFyc2VyOjpnZXROb2Rl
KToKKyAgICAgICAgKiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHA6CisgICAgICAgICog
a2h0bWwveG1sL2RvbV9xbmFtZS5jcHA6CisgICAgICAgICoga2h0bWwveG1sL2RvbV9zdHJpbmdp
bXBsLmg6CisgICAgICAgIChLWE1MQ29yZTo6KToKKyAgICAgICAgKEtYTUxDb3JlOjpDYXNlSW5z
ZW5zaXRpdmVIYXNoOjpoYXNoKToKKyAgICAgICAgKEtYTUxDb3JlOjpDYXNlSW5zZW5zaXRpdmVI
YXNoOjplcXVhbCk6CisgICAgICAgICoga2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3BwOgorICAg
ICAgICAqIGt3cS9ET00ubW06CisgICAgICAgIChPYmpDRXZlbnRMaXN0ZW5lcjo6T2JqQ0V2ZW50
TGlzdGVuZXIpOgorCiAyMDA1LTA5LTI3ICBFcmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IG1qcy4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMva3htbGNvcmUvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IEZvcndhcmRpbmdI
ZWFkZXJzL2t4bWxjb3JlL0hhc2hNYXAuaApkaWZmIC1OIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMva3htbGNvcmUvSGFzaE1hcC5oCi0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4bWxj
b3JlL0hhc2hNYXAuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBXZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL2t4bWxjb3JlL0hhc2hNYXAuaAkyOCBTZXAgMjAwNSAwODowMTozMyAtMDAw
MApAQCAtMCwwICsxIEBACisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9IYXNoTWFwLmg+CkluZGV4
OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4bWxjb3JlL0hhc2hTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiBGb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9IYXNoU2V0LmgKZGlmZiAtTiBX
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4bWxjb3JlL0hhc2hTZXQuaAotLS0gV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9IYXNoU2V0LmgJMSBKYW4gMTk3MCAwMDowMDowMCAt
MDAwMAorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9IYXNoU2V0LmgJMjgg
U2VwIDIwMDUgMDg6MDE6MzMgLTAwMDAKQEAgLTAsMCArMSBAQAorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSGFzaFNldC5oPgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9taXNjL2hh
c2htYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBGb3J3YXJkaW5nSGVhZGVycy9taXNjL2hhc2ht
YXAuaApkaWZmIC1OIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9oYXNobWFwLmgKLS0t
IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9oYXNobWFwLmgJNiBKdWwgMjAwNSAwMToy
ODo0MCAtMDAwMAkxLjEKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9oYXNobWFw
LmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSArMCwwIEBACi0jaW1wb3J0IDxoYXNo
bWFwLmg+CkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL21pc2MvaGFzaHNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IEZvcndhcmRpbmdIZWFkZXJzL21pc2MvaGFzaHNldC5oCmRpZmYg
LU4gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9taXNjL2hhc2hzZXQuaAotLS0gV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9taXNjL2hhc2hzZXQuaAk2IEp1bCAyMDA1IDAxOjI4OjQwIC0wMDAw
CTEuMQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9taXNjL2hhc2hzZXQuaAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xICswLDAgQEAKLSNpbXBvcnQgPGhhc2hzZXQuaD4KSW5k
ZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9wb2ludGVyaGFzaC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IEZvcndhcmRpbmdIZWFkZXJzL21pc2MvcG9pbnRlcmhhc2guaApkaWZmIC1O
IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9wb2ludGVyaGFzaC5oCi0tLSBXZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL21pc2MvcG9pbnRlcmhhc2guaAk2IEp1bCAyMDA1IDA2OjIzOjE1
IC0wMDAwCTEuMQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9taXNjL3BvaW50ZXJoYXNo
LmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSArMCwwIEBACi0jaW1wb3J0IDxwb2lu
dGVyaGFzaC5oPgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI5CmRpZmYgLXAgLXUg
LXIxLjI5IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyNyBTZXAgMjAwNSAyMjozNjo1
OCAtMDAwMAkxLjI5CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkyOCBTZXAgMjAwNSAwODowMTo0NyAtMDAwMApAQCAtNjcsMTEgKzY3LDYgQEAKIAkJNjVBQzc5
QUEwODMxRjAwNjAwOTM4NUNFIC8qIGFwcGx5X3N0eWxlX2NvbW1hbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QUM3OUE4MDgzMUYwMDYwMDkzODVD
RSAvKiBhcHBseV9zdHlsZV9jb21tYW5kLmggKi87IH07CiAJCTY1REMxNkM0MDgzMURENkYwMDIy
NzQ0RSAvKiBjb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REMxNkMyMDgzMURENkYwMDIyNzQ0RSAvKiBjb21w
b3NpdGVfZWRpdF9jb21tYW5kLmNwcCAqLzsgfTsKIAkJNjVEQzE2QzUwODMxREQ2RjAwMjI3NDRF
IC8qIGNvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1REMxNkMzMDgzMURENkYwMDIyNzQ0RSAvKiBjb21wb3NpdGVf
ZWRpdF9jb21tYW5kLmggKi87IH07Ci0JCTY1REU4NTI5MDg3NjVGQzMwMDExNDI4QSAvKiBoYXNo
bWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURF
ODUyNzA4NzY1RkMzMDAxMTQyOEEgLyogaGFzaG1hcC5oICovOyB9OwotCQk2NURFODUyQTA4NzY1
RkMzMDAxMTQyOEEgLyogaGFzaHRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjVERTg1MjgwODc2NUZDMzAwMTE0MjhBIC8qIGhhc2h0cmFpdHMu
aCAqLzsgfTsKLQkJNjVGMzc4MjkwODcwRDk1ODAwMEIyRjk0IC8qIGhhc2hzZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RjM3ODI2MDg3MEQ5NTgw
MDBCMkY5NCAvKiBoYXNoc2V0LmggKi87IH07Ci0JCTY1RjM3ODJBMDg3MEQ5NTgwMDBCMkY5NCAv
KiBoYXNodGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjVGMzc4MjcwODcwRDk1ODAwMEIyRjk0IC8qIGhhc2h0YWJsZS5jcHAgKi87IH07Ci0J
CTY1RjM3ODJCMDg3MEQ5NTgwMDBCMkY5NCAvKiBoYXNodGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RjM3ODI4MDg3MEQ5NTgwMDBCMkY5NCAv
KiBoYXNodGFibGUuaCAqLzsgfTsKIAkJN0U2RkVFRDgwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNv
cmVTY3JpcHREZWJ1Z2dlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0U2RkVFRDYwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdF
NkZFRUQ5MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTZGRUVENzA4OTg1ODIz
MDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tICovOyB9OwogCQk3RTZGRUVEQTA4
OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTZGRUVENjA4OTg1ODIzMDBDNDRDM0Yg
LyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyMDgsOCArMTIwMyw2IEBACiAJCUE4MjEyQkRFMDg3OTRB
MjMwMDY3NzM1OSAvKiBkb21wYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNjlEMzdGMDg1NjI3NDEwMDA5ODgwRCAvKiBkb21wYXJzZXIuaCAq
LzsgfTsKIAkJQTgyMTJCREYwODc5NEEyMzAwNjc3MzU5IC8qIGRvbV9xbmFtZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAw
NzM1M0Q2IC8qIGRvbV9xbmFtZS5oICovOyB9OwogCQlBODIxMkJFMDA4Nzk0QTIzMDA2NzczNTkg
LyogaHRtbG5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NTBBMEJDQzA4NUY2MDREMDA3MzUzRDYgLyogaHRtbG5hbWVzLmggKi87IH07Ci0JCUE4
MjEyQkUxMDg3OTRBMjMwMDY3NzM1OSAvKiBoYXNoc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUYzNzgyNjA4NzBEOTU4MDAwQjJGOTQgLyogaGFz
aHNldC5oICovOyB9OwotCQlBODIxMkJFMjA4Nzk0QTIzMDA2NzczNTkgLyogaGFzaHRhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUYzNzgyODA4
NzBEOTU4MDAwQjJGOTQgLyogaGFzaHRhYmxlLmggKi87IH07CiAJCUE4MjEyQkU0MDg3OTRBMjMw
MDY3NzM1OSAvKiBsaW5rQ3Vyc29yLnRpZmYgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1QTFCMDQ5MDJERThBQkEwMTg2MzVDQSAvKiBsaW5rQ3Vyc29y
LnRpZmYgKi87IH07CiAJCUE4MjEyQkU1MDg3OTRBMjMwMDY3NzM1OSAvKiBodG1sNC5jc3MgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QTFCMDUzMDJE
RThCNDYwMTg2MzVDQSAvKiBodG1sNC5jc3MgKi87IH07CiAJCUE4MjEyQkU2MDg3OTRBMjMwMDY3
NzM1OSAvKiBxdWlya3MuY3NzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzhGNjI5OTA0MDVGNDU2MDBBODAwMDQgLyogcXVpcmtzLmNzcyAqLzsgfTsK
QEAgLTE0ODMsNyArMTQ3Niw2IEBACiAJCUE4MjEyQ0ZCMDg3OTRBMjMwMDY3NzM1OSAvKiBkb21w
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE2OUQzODAwODU2Mjc0MTAwMDk4ODBEIC8qIGRvbXBhcnNlci5jcHAgKi87IH07CiAJCUE4MjEy
Q0ZDMDg3OTRBMjMwMDY3NzM1OSAvKiBkb21fcW5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIGRv
bV9xbmFtZS5jcHAgKi87IH07CiAJCUE4MjEyQ0ZEMDg3OTRBMjMwMDY3NzM1OSAvKiBodG1sbmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUw
QTBCQ0IwODVGNjA0RDAwNzM1M0Q2IC8qIGh0bWxuYW1lcy5jcHAgKi87IH07Ci0JCUE4MjEyQ0ZF
MDg3OTRBMjMwMDY3NzM1OSAvKiBoYXNodGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGMzc4MjcwODcwRDk1ODAwMEIyRjk0IC8qIGhhc2h0
YWJsZS5jcHAgKi87IH07CiAJCUE4MjEyRDAwMDg3OTRBMjMwMDY3NzM1OSAvKiBBcHBsaWNhdGlv
blNlcnZpY2VzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY1QzI4NjkzMDI4NDZEQ0QwMTg2MzVDQSAvKiBBcHBsaWNhdGlvblNlcnZp
Y2VzLmZyYW1ld29yayAqLzsgfTsKIAkJQTgyMTJEMDEwODc5NEEyMzAwNjc3MzU5IC8qIENhcmJv
bi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNUMyODY5NDAyODQ2RENEMDE4NjM1Q0EgLyogQ2FyYm9uLmZyYW1ld29yayAqLzsgfTsK
IAkJQTgyMTJEMDIwODc5NEEyMzAwNjc3MzU5IC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzI4Njk1MDI4NDZEQ0Qw
MTg2MzVDQSAvKiBDb2NvYS5mcmFtZXdvcmsgKi87IH07CkBAIC0yNDQ5LDExICsyNDQxLDYgQEAK
IAkJNjVBQzc5QTgwODMxRjAwNjAwOTM4NUNFIC8qIGFwcGx5X3N0eWxlX2NvbW1hbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGFwcGx5X3N0eWxlX2NvbW1hbmQuaDsgcGF0
aCA9IGVkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2NURDMTZDMjA4MzFERDZGMDAyMjc0NEUgLyogY29tcG9zaXRlX2VkaXRfY29tbWFu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gY29tcG9zaXRlX2Vk
aXRfY29tbWFuZC5jcHA7IHBhdGggPSBlZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NURDMTZDMzA4MzFERDZGMDAyMjc0NEUg
LyogY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oOyBwYXRoID0gZWRpdGluZy9jb21wb3NpdGVf
ZWRpdF9jb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1REU4NTI3MDg3
NjVGQzMwMDExNDI4QSAvKiBoYXNobWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBoYXNobWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1REU4NTI4MDg3
NjVGQzMwMDExNDI4QSAvKiBoYXNodHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBoYXNodHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1RjM3
ODI2MDg3MEQ5NTgwMDBCMkY5NCAvKiBoYXNoc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBoYXNoc2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1RjM3
ODI3MDg3MEQ5NTgwMDBCMkY5NCAvKiBoYXNodGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IGhhc2h0YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTY1RjM3ODI4MDg3MEQ5NTgwMDBCMkY5NCAvKiBoYXNodGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGhhc2h0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NUY4MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyogS1dRRXhjZXB0aW9ucy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FFeGNlcHRpb25zLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTZGRUVENjA4OTg1ODIzMDBDNDRDM0Yg
LyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3RTZGRUVENzA4OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVNjcmlwdERlYnVn
Z2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ3MCwxMSArNjQ1Nyw2IEBA
CiAJCQkJOTNBQkNFNUUwNkUxQTQyRTAwODU5MjVCIC8qIGZvcm1kYXRhLmggKi8sCiAJCQkJRjUy
M0QyN0EwMkRFNDNENzAxODYzNUNBIC8qIGhlbHBlci5jcHAgKi8sCiAJCQkJRjUyM0QyN0IwMkRF
NDNENzAxODYzNUNBIC8qIGhlbHBlci5oICovLAotCQkJCTY1RjM3ODI2MDg3MEQ5NTgwMDBCMkY5
NCAvKiBoYXNoc2V0LmggKi8sCi0JCQkJNjVGMzc4MjcwODcwRDk1ODAwMEIyRjk0IC8qIGhhc2h0
YWJsZS5jcHAgKi8sCi0JCQkJNjVGMzc4MjgwODcwRDk1ODAwMEIyRjk0IC8qIGhhc2h0YWJsZS5o
ICovLAotCQkJCTY1REU4NTI3MDg3NjVGQzMwMDExNDI4QSAvKiBoYXNobWFwLmggKi8sCi0JCQkJ
NjVERTg1MjgwODc2NUZDMzAwMTE0MjhBIC8qIGhhc2h0cmFpdHMuaCAqLywKIAkJCQlGNTIzRDI4
MjAyREU0M0Q3MDE4NjM1Q0EgLyoga2h0bWxkYXRhLmggKi8sCiAJCQkJRjUyM0QyODMwMkRFNDNE
NzAxODYzNUNBIC8qIGtodG1sbGF5b3V0LmggKi8sCiAJCQkJRjUyM0QyODQwMkRFNDNENzAxODYz
NUNBIC8qIGxvYWRlcl9jbGllbnQuaCAqLywKQEAgLTcyNTYsMTAgKzcyMzgsNiBAQAogCQkJCTFB
NjlEMzgxMDg1NjI3NDEwMDA5ODgwRCAvKiBkb21wYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBkb21fcW5hbWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTU1MEEwQkNFMDg1RjYwNEQwMDczNTNENiAvKiBodG1sbmFtZXMuaCBpbiBIZWFkZXJzICov
LAotCQkJCTY1RjM3ODI5MDg3MEQ5NTgwMDBCMkY5NCAvKiBoYXNoc2V0LmggaW4gSGVhZGVycyAq
LywKLQkJCQk2NUYzNzgyQjA4NzBEOTU4MDAwQjJGOTQgLyogaGFzaHRhYmxlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk2NURFODUyOTA4NzY1RkMzMDAxMTQyOEEgLyogaGFzaG1hcC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNjVERTg1MkEwODc2NUZDMzAwMTE0MjhBIC8qIGhhc2h0cmFpdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRUYzNDM1MDg3QjU2M0UwMEJCRjgzMyAvKiBodG1sZmFjdG9yeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThGRDhCODcwODdDQjQ1NzAwREMzNzA3IC8qIEtXUVdNYXRy
aXguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTc5ODk0MDg4RDk3NUYwMDYwNjhBNSAvKiByZW5k
ZXJfdGhlbWUuaCBpbiBIZWFkZXJzICovLApAQCAtNzYwMiw4ICs3NTgwLDYgQEAKIAkJCQlBODIx
MkJERTA4Nzk0QTIzMDA2NzczNTkgLyogZG9tcGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
ODIxMkJERjA4Nzk0QTIzMDA2NzczNTkgLyogZG9tX3FuYW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODIxMkJFMDA4Nzk0QTIzMDA2NzczNTkgLyogaHRtbG5hbWVzLmggaW4gSGVhZGVycyAqLywK
LQkJCQlBODIxMkJFMTA4Nzk0QTIzMDA2NzczNTkgLyogaGFzaHNldC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTgyMTJCRTIwODc5NEEyMzAwNjc3MzU5IC8qIGhhc2h0YWJsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTg1RDdBOEYwODc5RUM2NDAwNkE5MTcyIC8qIEtXUVdNYXRyaXguaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4OThGMTQ3MDg4MTIxRTkwMDc1RUZCMiAvKiBodG1sZmFjdG9yeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThDMEZCOTAwODk3MDFGOTAwQkE1MTE0IC8qIERyYXdDYW52YXNJ
dGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTk1NTksNyArOTUzNSw2IEBACiAJCQkJMUE2OUQzODIw
ODU2Mjc0MTAwMDk4ODBEIC8qIGRvbXBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1NTBB
MEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogZG9tX3FuYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTU1MEEwQkNEMDg1RjYwNEQwMDczNTNENiAvKiBodG1sbmFtZXMuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNjVGMzc4MkEwODcwRDk1ODAwMEIyRjk0IC8qIGhhc2h0YWJsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0VGMzQzNDA4N0I1NjNFMDBCQkY4MzMgLyogaHRtbGZhY3RvcnkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThGRDhCODYwODdDQjQ0QzAwREMzNzA3IC8qIEtXUVdNYXRyaXgu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzE3OTg5MjA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVy
X3RoZW1lX21hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtOTgzMSw3ICs5ODA2LDYgQEAKIAkJCQlB
ODIxMkNGQjA4Nzk0QTIzMDA2NzczNTkgLyogZG9tcGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4MjEyQ0ZDMDg3OTRBMjMwMDY3NzM1OSAvKiBkb21fcW5hbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTgyMTJDRkQwODc5NEEyMzAwNjc3MzU5IC8qIGh0bWxuYW1lcy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBODIxMkNGRTA4Nzk0QTIzMDA2NzczNTkgLyogaGFzaHRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4NUQ3QThFMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OEYxNDgwODgxMjFFRDAwNzVFRkIyIC8qIGh0bWxm
YWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QzBGQjk3MDg5NzAxRjkwMEJBNTExNCAv
KiBEcmF3Vmlldy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9raHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIw
NQpkaWZmIC1wIC11IC1yMS4yMDUgV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5j
cHAKLS0tIFdlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTE5IFNlcCAyMDA1
IDIwOjU0OjA5IC0wMDAwCTEuMjA1CisrKyBXZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVj
dG9yLmNwcAkyOCBTZXAgMjAwNSAwODowMTo0OSAtMDAwMApAQCAtNjUsNiArNjUsOCBAQAogI2lu
Y2x1ZGUgPHFpbnRjYWNoZS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCisjaW5jbHVkZSA8a3ht
bGNvcmUvSGFzaE1hcC5oPgorCiB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIApAQCAtMTc4LDYgKzE4MCwzNCBAQCBpZiAoaWQgPT0gcHJvcElEKSBcCiAK
IG5hbWVzcGFjZSBraHRtbCB7CiAKK2NsYXNzIENTU1J1bGVTZXQgOiBwdWJsaWMgRmFzdEFsbG9j
YXRlZAoreworcHVibGljOgorICAgIENTU1J1bGVTZXQoKTsKKyAgICB+Q1NTUnVsZVNldCgpOwor
ICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxET006OkRPTVN0cmluZ0ltcGwgKiwgQ1NTUnVsZURh
dGFMaXN0ICosIFBvaW50ZXJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCAqPiA+IEF0b21SdWxlTWFw
OworICAgIAorICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoRE9NOjpDU1NTdHlsZVNoZWV0SW1w
bCogc2hlZXQsIGNvbnN0IERPTTo6RE9NU3RyaW5nICZtZWRpdW0gPSAic2NyZWVuIik7CisgICAg
CisgICAgdm9pZCBhZGRSdWxlKERPTTo6Q1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgRE9NOjpDU1NT
ZWxlY3Rvciogc2VsKTsKKyAgICB2b2lkIGFkZFRvUnVsZVNldChET006OkRPTVN0cmluZ0ltcGwq
IGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICBET006OkNTU1N0
eWxlUnVsZUltcGwqIHJ1bGUsIERPTTo6Q1NTU2VsZWN0b3IqIHNlbCk7CisgICAgCisgICAgQ1NT
UnVsZURhdGFMaXN0KiBnZXRJRFJ1bGVzKERPTTo6RE9NU3RyaW5nSW1wbCoga2V5KSB7IHJldHVy
biBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBDU1NSdWxlRGF0YUxpc3QqIGdldENsYXNzUnVs
ZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5
KTsgfQorICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0VGFnUnVsZXMoRE9NOjpET01TdHJpbmdJbXBs
KiBrZXkpIHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBDU1NSdWxlRGF0YUxp
c3QqIGdldFVuaXZlcnNhbFJ1bGVzKCkgeyByZXR1cm4gbV91bml2ZXJzYWxSdWxlczsgfQorICAg
IAorcHVibGljOgorICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKKyAgICBBdG9tUnVsZU1hcCBt
X2NsYXNzUnVsZXM7CisgICAgQXRvbVJ1bGVNYXAgbV90YWdSdWxlczsKKyAgICBDU1NSdWxlRGF0
YUxpc3QqIG1fdW5pdmVyc2FsUnVsZXM7CisgICAgCisgICAgdWludCBtX3J1bGVDb3VudDsKK307
CisKIENTU1J1bGVTZXQgKkNTU1N0eWxlU2VsZWN0b3I6OmRlZmF1bHRTdHlsZSA9IDA7CiBDU1NS
dWxlU2V0ICpDU1NTdHlsZVNlbGVjdG9yOjpkZWZhdWx0UXVpcmtzU3R5bGUgPSAwOwogQ1NTUnVs
ZVNldCAqQ1NTU3R5bGVTZWxlY3Rvcjo6ZGVmYXVsdFByaW50U3R5bGUgPSAwOwpAQCAtMTQyOCw3
ICsxNDU4LDcgQEAgdm9pZCBDU1NSdWxlU2V0OjphZGRUb1J1bGVTZXQoRE9NU3RyaW5nSQogICAg
IENTU1J1bGVEYXRhTGlzdCogcnVsZXMgPSBtYXAuZ2V0KGtleSk7CiAgICAgaWYgKCFydWxlcykg
ewogICAgICAgICBydWxlcyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVs
ZSwgc2VsKTsKLSAgICAgICAgbWFwLmluc2VydChrZXksIHJ1bGVzKTsKKyAgICAgICAgbWFwLnNl
dChrZXksIHJ1bGVzKTsKICAgICB9IGVsc2UKICAgICAgICAgcnVsZXMtPmFwcGVuZChtX3J1bGVD
b3VudCsrLCBydWxlLCBzZWwpOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVz
ZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nz
cy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzcKZGlmZiAtcCAt
dSAtcjEuMzcgV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCi0tLSBXZWJDb3Jl
L2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgJMjcgU2VwIDIwMDUgMjI6Mzc6MDIgLTAwMDAJ
MS4zNworKysgV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCTI4IFNlcCAyMDA1
IDA4OjAxOjQ5IC0wMDAwCkBAIC0yNCwxMCArMjQsMTAgQEAKICNkZWZpbmUgX0NTU19jc3NzdHls
ZXNlbGVjdG9yX2hfCiAKICNpbmNsdWRlIDxxcHRydmVjdG9yLmg+Ci0jaW5jbHVkZSAibWlzYy9w
b2ludGVyaGFzaC5oIgogCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2lu
Y2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCisjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgi
CiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1wbC5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RN
YWxsb2MuaD4KIApAQCAtMjYwLDMyICsyNjAsNSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1J1bGVE
YXRhKiBtX2xhc3Q7CiAgICAgfTsKICAgICAKLSAgICBjbGFzcyBDU1NSdWxlU2V0IDogcHVibGlj
IEZhc3RBbGxvY2F0ZWQKLSAgICB7Ci0gICAgcHVibGljOgotICAgICAgICBDU1NSdWxlU2V0KCk7
Ci0gICAgICAgIH5DU1NSdWxlU2V0KCk7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPERPTTo6
RE9NU3RyaW5nSW1wbCAqLCBDU1NSdWxlRGF0YUxpc3QgKiwgUG9pbnRlckhhc2g8RE9NOjpET01T
dHJpbmdJbXBsICo+ID4gQXRvbVJ1bGVNYXA7Ci0KLSAgICAgICAgdm9pZCBhZGRSdWxlc0Zyb21T
aGVldChET006OkNTU1N0eWxlU2hlZXRJbXBsKiBzaGVldCwgY29uc3QgRE9NOjpET01TdHJpbmcg
Jm1lZGl1bSA9ICJzY3JlZW4iKTsKLQotICAgICAgICB2b2lkIGFkZFJ1bGUoRE9NOjpDU1NTdHls
ZVJ1bGVJbXBsKiBydWxlLCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwotICAgICAgICB2b2lkIGFk
ZFRvUnVsZVNldChET006OkRPTVN0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgRE9NOjpDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBET006
OkNTU1NlbGVjdG9yKiBzZWwpOwotCi0gICAgICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0SURSdWxl
cyhET006OkRPTVN0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9
Ci0gICAgICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0Q2xhc3NSdWxlcyhET006OkRPTVN0cmluZ0lt
cGwqIGtleSkgeyByZXR1cm4gbV9jbGFzc1J1bGVzLmdldChrZXkpOyB9Ci0gICAgICAgIENTU1J1
bGVEYXRhTGlzdCogZ2V0VGFnUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJu
IG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KLSAgICAgICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRVbml2
ZXJzYWxSdWxlcygpIHsgcmV0dXJuIG1fdW5pdmVyc2FsUnVsZXM7IH0KLQotICAgIHB1YmxpYzoK
LSAgICAgICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOwotICAgICAgICBBdG9tUnVsZU1hcCBtX2Ns
YXNzUnVsZXM7Ci0gICAgICAgIEF0b21SdWxlTWFwIG1fdGFnUnVsZXM7Ci0gICAgICAgIENTU1J1
bGVEYXRhTGlzdCogbV91bml2ZXJzYWxSdWxlczsKLSAgICAgICAgCi0gICAgICAgIHVpbnQgbV9y
dWxlQ291bnQ7Ci0gICAgfTsKLX07Cit9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfYmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWNtYS9ranNfYmluZGluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDMKZGlm
ZiAtcCAtdSAtcjEuNDMgV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcAotLS0gV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcAkzIFNlcCAyMDA1IDIzOjA5OjU4IC0wMDAw
CTEuNDMKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfYmluZGluZy5jcHAJMjggU2VwIDIwMDUg
MDg6MDE6NDkgLTAwMDAKQEAgLTI4LDEyICsyOCwxNyBAQAogI2luY2x1ZGUgImRvbS9kb21fZXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiZG9tL2RvbTJfZXZlbnRzLmgiCiAjaW5jbHVkZSAiZG9tL2Rv
bTJfcmFuZ2UuaCIKLSNpbmNsdWRlICJtaXNjL2hhc2htYXAuaCIKICNpbmNsdWRlICJ4bWwvZG9t
X25vZGVpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUg
InhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiZG9tL2Nzc19zdHlsZXNoZWV0LmgiCiAKKy8v
IGdjYyAzLnggY2FuJ3QgaGFuZGxlIGluY2x1ZGluZyB0aGUgSGFzaE1hcCBwb2ludGVyIHNwZWNp
YWxpemF0aW9uIGluIHRoaXMgZmlsZQorI2lmbmRlZiBfX0dMSUJDWFhfXyAvLyBsZXNzIHRoYW4g
Z2NjIDMuNAorI2RlZmluZSBIQVNIX01BUF9QVFJfU1BFQ19XT1JLQVJPVU5EIDEKKyNlbmRpZgor
I2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KKwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCiB1
c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwpAQCAtNDYsOSArNTEsNiBAQCB1c2luZyBE
T006OkV2ZW50RXhjZXB0aW9uOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UmFu
Z2VFeGNlcHRpb247CiAKLXVzaW5nIGtodG1sOjpIYXNoTWFwOwotdXNpbmcga2h0bWw6OlBvaW50
ZXJIYXNoOwotCiBuYW1lc3BhY2UgS0pTIHsKIAogVVN0cmluZyBET01PYmplY3Q6OnRvU3RyaW5n
KEV4ZWNTdGF0ZSAqKSBjb25zdApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pzZWRpdGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9qc2VkaXRpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXAgLXUgLXIx
LjMxIFdlYkNvcmUva2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuY3BwCi0tLSBXZWJDb3JlL2todG1s
L2VkaXRpbmcvanNlZGl0aW5nLmNwcAkyNCBTZXAgMjAwNSAwMToxODo1NiAtMDAwMAkxLjMxCisr
KyBXZWJDb3JlL2todG1sL2VkaXRpbmcvanNlZGl0aW5nLmNwcAkyOCBTZXAgMjAwNSAwODowMTo0
OSAtMDAwMApAQCAtMzEsMTUgKzMxLDEzIEBACiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNp
bmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgot
I2luY2x1ZGUgIm1pc2MvaGFzaG1hcC5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4K
IAogI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FLSFRNTFBhcnQuaCIKICNlbmRpZgog
CiB1c2luZyBraHRtbDo6VHlwaW5nQ29tbWFuZDsKLXVzaW5nIGtodG1sOjpIYXNoTWFwOwotdXNp
bmcga2h0bWw6OkNhc2VJbnNlbnNpdGl2ZUhhc2g7CiAKIG5hbWVzcGFjZSBET00gewogCkBAIC01
OTksNyArNTk3LDcgQEAgQ29tbWFuZE1hcCAqY3JlYXRlQ29tbWFuZERpY3Rpb25hcnkoKQogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29tbWFuZHM7ICsraSkgewogICAgICAgICBET01TdHJp
bmdJbXBsICpuYW1lID0gbmV3IERPTVN0cmluZ0ltcGwoY29tbWFuZHNbaV0ubmFtZSk7CiAgICAg
ICAgIG5hbWUtPnJlZigpOwotICAgICAgICBjb21tYW5kTWFwLT5pbnNlcnQobmFtZSwgJmNvbW1h
bmRzW2ldLmltcCk7CisgICAgICAgIGNvbW1hbmRNYXAtPnNldChuYW1lLCAmY29tbWFuZHNbaV0u
aW1wKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHN1cHBvcnRzUGFzdGVDb21tYW5kID0g
dHJ1ZTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3Vt
ZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjkKZGlmZiAtcCAtdSAtcjEuNjkg
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkyOSBBdWcgMjAwNSAyMToyOToxNiAtMDAwMAkx
LjY5CisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCTI4IFNlcCAy
MDA1IDA4OjAxOjQ5IC0wMDAwCkBAIC0yNzMsNyArMjczLDcgQEAgc3RhdGljIHZvaWQgYWRkSXRl
bVRvTWFwKEhUTUxEb2N1bWVudEltcAogIAogICAgIEhUTUxEb2N1bWVudEltcGw6Ok5hbWVDb3Vu
dE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChuYW1lLmltcGwoKSk7IAogICAgIGlmIChpdCA9
PSBtYXAuZW5kKCkpCi0gICAgICAgIG1hcC5pbnNlcnQobmFtZS5pbXBsKCksIDEpOworICAgICAg
ICBtYXAuc2V0KG5hbWUuaW1wbCgpLCAxKTsKICAgICBlbHNlCiAgICAgICAgICsrKGl0LT5zZWNv
bmQpOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3Vt
ZW50aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMyCmRpZmYgLXAgLXUgLXIxLjMyIFdl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9kb2N1bWVudGltcGwuaAkyMSBKdWwgMjAwNSAwNDoxMDo1MiAtMDAwMAkxLjMyCisr
KyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuaAkyOCBTZXAgMjAwNSAwODow
MTo0OSAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5o
IgogI2luY2x1ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9t
aXNjaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaGFzaG1hcC5oIgorI2luY2x1ZGUgPGt4bWxjb3Jl
L0hhc2hNYXAuaD4KIAogY2xhc3MgS0hUTUxWaWV3OwogY2xhc3MgUVN0cmluZzsKQEAgLTc5LDcg
Kzc5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBEb2N1bWVudFR5cGVJbXBsICpkb2N0eXBl
KCkgY29uc3Q7CiAKLSAgICB0eXBlZGVmIGtodG1sOjpIYXNoTWFwPERPTVN0cmluZ0ltcGwgKiwg
aW50PiBOYW1lQ291bnRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPERPTVN0cmluZ0ltcGwgKiwg
aW50PiBOYW1lQ291bnRNYXA7CiAKIHByb3RlY3RlZDoKICAgICBIVE1MRWxlbWVudEltcGwgKmJv
ZHlFbGVtZW50OwpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9l
bGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA1CmRpZmYgLXAgLXUgLXIx
LjEwNSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKLS0tIFdlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAk3IFNlcCAyMDA1IDAyOjM4OjM1IC0wMDAw
CTEuMTA1CisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMjggU2Vw
IDIwMDUgMDg6MDE6NTAgLTAwMDAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJodG1sL2h0
bWx0b2tlbml6ZXIuaCIKICNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogCi0jaW5jbHVkZSAibWlz
Yy9oYXNoc2V0LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgogI2luY2x1ZGUgImVk
aXRpbmcvdmlzaWJsZV90ZXh0LmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKSW5kZXg6IFdl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjE5NApkaWZmIC1wIC11IC1yMS4xOTQgV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfZm9ybWltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJ
MjAgU2VwIDIwMDUgMjM6MDE6MzkgLTAwMDAJMS4xOTQKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2Zvcm1pbXBsLmNwcAkyOCBTZXAgMjAwNSAwODowMTo1MSAtMDAwMApAQCAtNjkwLDE2ICs2
OTAsMTMgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpyYWRpb0J1dHRvbkNoZQogCiAgICAg
Ly8gVW5jaGVjayB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0KICAgICBpZiAoIW1fc2VsZWN0
ZWRSYWRpb0J1dHRvbnMpCi0gICAgICAgIG1fc2VsZWN0ZWRSYWRpb0J1dHRvbnMgPSBuZXcgSGFz
aE1hcDxET01TdHJpbmdJbXBsKiwgSFRNTElucHV0RWxlbWVudEltcGwqLCBQb2ludGVySGFzaDxE
T01TdHJpbmdJbXBsKj4gPjsKKyAgICAgICAgbV9zZWxlY3RlZFJhZGlvQnV0dG9ucyA9IG5ldyBO
YW1lVG9JbnB1dE1hcDsKIAogICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsKiBjdXJyZW50Q2hlY2tl
ZFJhZGlvID0gbV9zZWxlY3RlZFJhZGlvQnV0dG9ucy0+Z2V0KGNhbGxlci0+bmFtZSgpLmltcGwo
KSk7CiAgICAgaWYgKGN1cnJlbnRDaGVja2VkUmFkaW8gJiYgY3VycmVudENoZWNrZWRSYWRpbyAh
PSBjYWxsZXIpCiAgICAgICAgIGN1cnJlbnRDaGVja2VkUmFkaW8tPnNldENoZWNrZWQoZmFsc2Up
OwogICAgICAgICAKLSAgICAvLyBOb3cgaW5zZXJ0IG91cnNlbHZlcyBpbnRvIHRoZSBoYXNoLiBU
aGVyZSBzaG91bGQgcmVhbGx5IGJlIGEgcmVwbGFjZSBtZXRob2QKLSAgICAvLyBpbiBIYXNoTWFw
Li4uCi0gICAgbV9zZWxlY3RlZFJhZGlvQnV0dG9ucy0+cmVtb3ZlKGNhbGxlci0+bmFtZSgpLmlt
cGwoKSk7Ci0gICAgbV9zZWxlY3RlZFJhZGlvQnV0dG9ucy0+aW5zZXJ0KGNhbGxlci0+bmFtZSgp
LmltcGwoKSwgY2FsbGVyKTsKKyAgICBtX3NlbGVjdGVkUmFkaW9CdXR0b25zLT5zZXQoY2FsbGVy
LT5uYW1lKCkuaW1wbCgpLCBjYWxsZXIpOwogfQogCiBIVE1MSW5wdXRFbGVtZW50SW1wbCogSFRN
TEZvcm1FbGVtZW50SW1wbDo6Y2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoRE9NU3RyaW5nSW1w
bCogbmFtZSkKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBs
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODkKZGlmZiAtcCAtdSAtcjEuODkgV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9y
bWltcGwuaAkyMCBTZXAgMjAwNSAyMzowMTozOSAtMDAwMAkxLjg5CisrKyBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5oCTI4IFNlcCAyMDA1IDA4OjAxOjUyIC0wMDAwCkBAIC0zMCw4
ICszMCw3IEBACiAKICNpbmNsdWRlIDxxcHRydmVjdG9yLmg+CiAjaW5jbHVkZSA8cW1lbWFycmF5
Lmg+Ci0jaW5jbHVkZSAiaGFzaHRhYmxlLmgiCi0jaW5jbHVkZSAicG9pbnRlcmhhc2guaCIKKyNp
bmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CiAKIGNsYXNzIEtIVE1MVmlldzsKIGNsYXNzIFFU
ZXh0Q29kZWM7CkBAIC0xNDcsNyArMTQ2LDggQEAgcHVibGljOgogICAgIGJvb2wgbV9pbnJlc2V0
IDogMTsKICAgICBib29sIG1fbWFsZm9ybWVkIDogMTsKIAotICAgIGtodG1sOjpIYXNoTWFwPERP
TVN0cmluZ0ltcGwqLCBIVE1MSW5wdXRFbGVtZW50SW1wbCosIGtodG1sOjpQb2ludGVySGFzaDxE
T01TdHJpbmdJbXBsKj4gPiogbV9zZWxlY3RlZFJhZGlvQnV0dG9uczsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8RE9NU3RyaW5nSW1wbCosIEhUTUxJbnB1dEVsZW1lbnRJbXBsKiwgUG9pbnRlckhhc2g8
RE9NU3RyaW5nSW1wbCo+ID4gTmFtZVRvSW5wdXRNYXA7CisgICAgTmFtZVRvSW5wdXRNYXAqIG1f
c2VsZWN0ZWRSYWRpb0J1dHRvbnM7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VFbmN0
eXBlKGNvbnN0IERPTVN0cmluZyAmKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sZmFj
dG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sZmFjdG9yeS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1y
MS42IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sZmFjdG9yeS5jcHAKLS0tIFdlYkNvcmUva2h0bWwv
aHRtbC9odG1sZmFjdG9yeS5jcHAJMTAgU2VwIDIwMDUgMDY6MTA6MDggLTAwMDAJMS42CisrKyBX
ZWJDb3JlL2todG1sL2h0bWwvaHRtbGZhY3RvcnkuY3BwCTI4IFNlcCAyMDA1IDA4OjAxOjUyIC0w
MDAwCkBAIC0zNSwxMCArMzUsNyBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIK
ICNpbmNsdWRlICJodG1sL2h0bWxfb2JqZWN0aW1wbC5oIgogCi0jaW5jbHVkZSAibWlzYy9wb2lu
dGVyaGFzaC5oIgotCi11c2luZyBraHRtbDo6UG9pbnRlckhhc2g7Ci11c2luZyBraHRtbDo6SGFz
aE1hcDsKKyNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBET00KIHsK
QEAgLTM0Miw3NCArMzM5LDc0IEBAIEhUTUxFbGVtZW50SW1wbCogSFRNTEVsZW1lbnRGYWN0b3J5
OjpjcmUKICAgICAgICAgZ0Z1bmN0aW9uTWFwID0gbmV3IEZ1bmN0aW9uTWFwOwogICAgICAgICAK
ICAgICAgICAgLy8gUG9wdWxhdGUgaXQgd2l0aCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMuCi0gICAg
ICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGh0bWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9p
ZCopJmh0bWxDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGhlYWRU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmhlYWRDb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJvZHlUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
JmJvZHlDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJhc2VUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmJhc2VDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdG
dW5jdGlvbk1hcC0+aW5zZXJ0KGxpbmtUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmxp
bmtDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KG1ldGFUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm1ldGFDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5j
dGlvbk1hcC0+aW5zZXJ0KHN0eWxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZzdHls
ZUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQodGl0bGVUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRpdGxlQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVu
Y3Rpb25NYXAtPmluc2VydChmcmFtZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmZnJh
bWVDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGZyYW1lc2V0VGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZmcmFtZXNldENvbnN0cnVjdG9yKTsKLSAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoaWZyYW1lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZv
aWQqKSZpZnJhbWVDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGZv
cm1UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmZvcm1Db25zdHJ1Y3Rvcik7Ci0gICAg
ICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJ1dHRvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2
b2lkKikmYnV0dG9uQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChp
bnB1dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaW5wdXRDb25zdHJ1Y3Rvcik7Ci0g
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGlzaW5kZXhUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAodm9pZCopJmlzaW5kZXhDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5z
ZXJ0KGZpZWxkc2V0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZmaWVsZHNldENvbnN0
cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQobGFiZWxUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAodm9pZCopJmxhYmVsQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25N
YXAtPmluc2VydChsZWdlbmRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmxlZ2VuZENv
bnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQob3B0Z3JvdXBUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm9wdGdyb3VwQ29uc3RydWN0b3IpOwotICAgICAgICBn
RnVuY3Rpb25NYXAtPmluc2VydChvcHRpb25UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
Jm9wdGlvbkNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoc2VsZWN0
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZzZWxlY3RDb25zdHJ1Y3Rvcik7Ci0gICAg
ICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHRleHRhcmVhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZ0ZXh0YXJlYUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNl
cnQoZGxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmRsQ29uc3RydWN0b3IpOwotICAg
ICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChvbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lk
Kikmb2xDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHVsVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ1bENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5pbnNlcnQoZGlyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZkaXJDb25z
dHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KG1lbnVUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAodm9pZCopJm1lbnVDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1h
cC0+aW5zZXJ0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZsaUNvbnN0cnVjdG9y
KTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoYmxvY2txdW90ZVRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICh2b2lkKikmYmxvY2txdW90ZUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5pbnNlcnQoZGl2VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZkaXZDb25z
dHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGgxVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25N
YXAtPmluc2VydChoMlRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaGVhZGluZ0NvbnN0
cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoaDNUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAodm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1h
cC0+aW5zZXJ0KGg0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3Ry
dWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChoNVRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5pbnNlcnQoaDZUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmhlYWRpbmdDb25zdHJ1
Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGhyVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgKHZvaWQqKSZockNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNl
cnQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmcGFyYWdyYXBoQ29uc3RydWN0b3Ip
OwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChwcmVUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAodm9pZCopJnByZUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQo
eG1wVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZwcmVDb25zdHJ1Y3Rvcik7Ci0gICAg
ICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJhc2Vmb250VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZiYXNlZm9udENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNl
cnQoZm9udFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmZm9udENvbnN0cnVjdG9yKTsK
LSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoZGVsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZtb2RDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGlu
c1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmbW9kQ29uc3RydWN0b3IpOwotICAgICAg
ICBnRnVuY3Rpb25NYXAtPmluc2VydChhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZh
bmNob3JDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGltYWdlVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZpbWFnZUNvbnN0cnVjdG9yKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQoaW1nVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZp
bWFnZUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQobWFwVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZtYXBDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5j
dGlvbk1hcC0+aW5zZXJ0KGFyZWFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmFyZWFD
b25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGNhbnZhc1RhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksICh2b2lkKikmY2FudmFzQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVu
Y3Rpb25NYXAtPmluc2VydChhcHBsZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmFw
cGxldENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoZW1iZWRUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmVtYmVkQ29uc3RydWN0b3IpOwotICAgICAgICBn
RnVuY3Rpb25NYXAtPmluc2VydChvYmplY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
Jm9iamVjdENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQocGFyYW1U
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnBhcmFtQ29uc3RydWN0b3IpOwotICAgICAg
ICBnRnVuY3Rpb25NYXAtPmluc2VydChzY3JpcHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9p
ZCopJnNjcmlwdENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQodGFi
bGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlQ29uc3RydWN0b3IpOwotICAg
ICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChjYXB0aW9uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZ0YWJsZUNhcHRpb25Db25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KGNvbGdyb3VwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZUNvbENv
bnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoY29sVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZUNvbENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5pbnNlcnQodHJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlUm93
Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydCh0ZFRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVDZWxsQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVu
Y3Rpb25NYXAtPmluc2VydCh0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVD
ZWxsQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydCh0aGVhZFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVTZWN0aW9uQ29uc3RydWN0b3IpOwotICAg
ICAgICBnRnVuY3Rpb25NYXAtPmluc2VydCh0Ym9keVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2
b2lkKikmdGFibGVTZWN0aW9uQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmlu
c2VydCh0Zm9vdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVTZWN0aW9uQ29u
c3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChiclRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICh2b2lkKikmYnJDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KHFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnF1b3RlQ29uc3RydWN0b3Ip
OwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChtYXJxdWVlVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgKHZvaWQqKSZtYXJxdWVlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAt
PnNldChodG1sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZodG1sQ29uc3RydWN0b3Ip
OworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZoZWFkQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChib2R5
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZib2R5Q29uc3RydWN0b3IpOworICAgICAg
ICBnRnVuY3Rpb25NYXAtPnNldChiYXNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZi
YXNlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChsaW5rVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgKHZvaWQqKSZsaW5rQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rp
b25NYXAtPnNldChtZXRhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZtZXRhQ29uc3Ry
dWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChzdHlsZVRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksICh2b2lkKikmc3R5bGVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+
c2V0KHRpdGxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ0aXRsZUNvbnN0cnVjdG9y
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoZnJhbWVUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAodm9pZCopJmZyYW1lQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChm
cmFtZXNldFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmZnJhbWVzZXRDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGlmcmFtZVRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICh2b2lkKikmaWZyYW1lQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNl
dChmb3JtVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZmb3JtQ29uc3RydWN0b3IpOwor
ICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChidXR0b25UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAo
dm9pZCopJmJ1dHRvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaW5w
dXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmlucHV0Q29uc3RydWN0b3IpOworICAg
ICAgICBnRnVuY3Rpb25NYXAtPnNldChpc2luZGV4VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZv
aWQqKSZpc2luZGV4Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChmaWVs
ZHNldFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmZmllbGRzZXRDb25zdHJ1Y3Rvcik7
CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGxhYmVsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZsYWJlbENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQobGVn
ZW5kVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZsZWdlbmRDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KG9wdGdyb3VwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZvcHRncm91cENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQo
b3B0aW9uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZvcHRpb25Db25zdHJ1Y3Rvcik7
CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHNlbGVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
ICh2b2lkKikmc2VsZWN0Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldCh0
ZXh0YXJlYVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGV4dGFyZWFDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGRsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZkbENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQob2xUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm9sQ29uc3RydWN0b3IpOworICAgICAgICBnRnVu
Y3Rpb25NYXAtPnNldCh1bFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdWxDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGRpclRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICh2b2lkKikmZGlyQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldCht
ZW51VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZtZW51Q29uc3RydWN0b3IpOworICAg
ICAgICBnRnVuY3Rpb25NYXAtPnNldChsaVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikm
bGlDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGJsb2NrcXVvdGVUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmJsb2NrcXVvdGVDb25zdHJ1Y3Rvcik7CisgICAg
ICAgIGdGdW5jdGlvbk1hcC0+c2V0KGRpdlRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikm
ZGl2Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChoMVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQoaDJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmhlYWRpbmdDb25z
dHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGgzVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAt
PnNldChoNFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9y
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaDVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAo
dm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGg2
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0b3IpOworICAg
ICAgICBnRnVuY3Rpb25NYXAtPnNldChoclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikm
aHJDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHBUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAodm9pZCopJnBhcmFncmFwaENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQocHJlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZwcmVDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHhtcFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICh2b2lkKikmcHJlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChi
YXNlZm9udFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmYmFzZWZvbnRDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAodm9pZCopJmZvbnRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGRl
bFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmbW9kQ29uc3RydWN0b3IpOworICAgICAg
ICBnRnVuY3Rpb25NYXAtPnNldChpbnNUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm1v
ZENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoYVRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICh2b2lkKikmYW5jaG9yQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25N
YXAtPnNldChpbWFnZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaW1hZ2VDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGltZ1RhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICh2b2lkKikmaW1hZ2VDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0
KG1hcFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmbWFwQ29uc3RydWN0b3IpOworICAg
ICAgICBnRnVuY3Rpb25NYXAtPnNldChhcmVhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQq
KSZhcmVhQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChjYW52YXNUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmNhbnZhc0NvbnN0cnVjdG9yKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5zZXQoYXBwbGV0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZh
cHBsZXRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGVtYmVkVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZlbWJlZENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1
bmN0aW9uTWFwLT5zZXQob2JqZWN0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZvYmpl
Y3RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHBhcmFtVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgKHZvaWQqKSZwYXJhbUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQoc2NyaXB0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZzY3JpcHRD
b25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRhYmxlVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5zZXQoY2FwdGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVDYXB0
aW9uQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChjb2xncm91cFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVDb2xDb25zdHJ1Y3Rvcik7CisgICAgICAg
IGdGdW5jdGlvbk1hcC0+c2V0KGNvbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFi
bGVDb2xDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRyVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZVJvd0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1
bmN0aW9uTWFwLT5zZXQodGRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlQ2Vs
bENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQodGhUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAodm9pZCopJnRhYmxlQ2VsbENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQodGhlYWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlU2Vj
dGlvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQodGJvZHlUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5zZXQodGZvb3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
JnRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoYnJU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmJyQ29uc3RydWN0b3IpOworICAgICAgICBn
RnVuY3Rpb25NYXAtPnNldChxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZxdW90ZUNv
bnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQobWFycXVlZVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICh2b2lkKikmbWFycXVlZUNvbnN0cnVjdG9yKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCogcmVzdWx0ID0gZ0Z1bmN0aW9uTWFwLT5nZXQodGFnTmFtZS5pbXBsKCkpOwpJbmRl
eDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTEzCmRpZmYgLXAgLXUgLXIxLjExMyBXZWJDb3JlL2todG1sL2h0bWwvaHRt
bHBhcnNlci5jcHAKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkyNyBTZXAg
MjAwNSAyMjozNzoxOCAtMDAwMAkxLjExMworKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCTI4IFNlcCAyMDA1IDA4OjAxOjUyIC0wMDAwCkBAIC00OCw3ICs0OCw3IEBACiAjaW5j
bHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIK
ICNpbmNsdWRlIDxreG1sY29yZS9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSAibWlzYy9oYXNoc2V0
LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgogI2luY2x1ZGUgImh0bWwvaHRtbHRv
a2VuaXplci5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQu
aCIKQEAgLTU3LDcgKzU3LDcgQEAKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmgiCiAKLSNpbmNsdWRlICJtaXNjL3BvaW50ZXJoYXNoLmgiCisjaW5jbHVkZSA8a3htbGNvcmUv
SGFzaE1hcC5oPgogCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAjaW5jbHVkZSA8a2xvY2FsZS5oPgpA
QCAtNzY4LDM5ICs3NjgsMzkgQEAgTm9kZUltcGwgKkhUTUxQYXJzZXI6OmdldE5vZGUoVG9rZW4q
IHQpCiAgICAgLy8gSW5pdCBvdXIgZXJyb3IgaGFuZGxpbmcgdGFibGUuCiAgICAgc3RhdGljIEZ1
bmN0aW9uTWFwIGdGdW5jdGlvbk1hcDsKICAgICBpZiAoZ0Z1bmN0aW9uTWFwLmlzRW1wdHkoKSkg
ewotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHRleHRBdG9tLmltcGwoKSwgJkhUTUxQYXJz
ZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChj
b21tZW50QXRvbS5pbXBsKCksICZIVE1MUGFyc2VyOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayk7
Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoaGVhZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
ICZIVE1MUGFyc2VyOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1h
cC5pbnNlcnQoYm9keVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpib2R5Q3Jl
YXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoZnJhbWVzZXRUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6ZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNr
KTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChpZnJhbWVUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCAmSFRNTFBhcnNlcjo6aWZyYW1lQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5j
dGlvbk1hcC5pbnNlcnQoZm9ybVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpm
b3JtQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoaXNpbmRl
eFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjppc2luZGV4Q3JlYXRlRXJyb3JD
aGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoc2VsZWN0VGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgJkhUTUxQYXJzZXI6OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBn
RnVuY3Rpb25NYXAuaW5zZXJ0KGRkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6
OmRkQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoZHRUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6ZHRDcmVhdGVFcnJvckNoZWNrKTsKLSAg
ICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChsaVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1M
UGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLmlu
c2VydChhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVy
cm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KG5vYnJUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAg
IGdGdW5jdGlvbk1hcC5pbnNlcnQod2JyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJz
ZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0
KHRyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9y
Q2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHRkVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgJkhUTUxQYXJzZXI6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBn
RnVuY3Rpb25NYXAuaW5zZXJ0KHRoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6
OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0
KHRib2R5VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnRhYmxlU2VjdGlvbkNy
ZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHRoZWFkVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hl
Y2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHRmb290VGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgJkhUTUxQYXJzZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAg
ICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHR0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJz
ZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5p
bnNlcnQodVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNy
ZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KGJUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsK
LSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChpVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhU
TUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlv
bk1hcC5pbnNlcnQoc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRT
dHlsZUNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHN0cmlr
ZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVy
cm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KGJpZ1RhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOwotICAg
ICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHNtYWxsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhU
TUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlv
bk1hcC5pbnNlcnQobm9lbWJlZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpu
b2VtYmVkQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQobm9m
cmFtZXNUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bm9mcmFtZXNDcmVhdGVF
cnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChub3NjcmlwdFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2spOwot
ICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KG1hcFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZI
VE1MUGFyc2VyOjptYXBDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNl
dCh0ZXh0QXRvbS5pbXBsKCksICZIVE1MUGFyc2VyOjp0ZXh0Q3JlYXRlRXJyb3JDaGVjayk7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC5zZXQoY29tbWVudEF0b20uaW1wbCgpLCAmSFRNTFBhcnNlcjo6
Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KGhlYWRU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KGJvZHlUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
SFRNTFBhcnNlcjo6Ym9keUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAu
c2V0KGZyYW1lc2V0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OmZyYW1lc2V0
Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQoaWZyYW1lVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OmlmcmFtZUNyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KGZvcm1UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRN
TFBhcnNlcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuc2V0
KGlzaW5kZXhUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6aXNpbmRleENyZWF0
ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KHNlbGVjdFRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLnNldChkZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2Vy
OjpkZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KGR0VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAg
ICAgIGdGdW5jdGlvbk1hcC5zZXQobGlUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNl
cjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQoYVRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNr
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChub2JyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
JkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25N
YXAuc2V0KHdiclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVh
dGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldCh0clRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLnNldCh0ZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjp0
YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldCh0aFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNo
ZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldCh0Ym9keVRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLnNldCh0aGVhZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2Vy
Ojp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNl
dCh0Zm9vdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25D
cmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldCh0dFRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KHVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBh
cnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
LnNldChiVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3Jl
YXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQoaVRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAg
ICAgICBnRnVuY3Rpb25NYXAuc2V0KHNUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNl
cjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNl
dChzdHJpa2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVD
cmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChiaWdUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsK
KyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChzbWFsbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZI
VE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rp
b25NYXAuc2V0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bm9l
bWJlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KG5vZnJhbWVz
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JD
aGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQobm9zY3JpcHRUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAmSFRNTFBhcnNlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLnNldChtYXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6
bWFwQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgfQogCiAgICAgYm9vbCBwcm9jZWVkID0gdHJ1ZTsK
SW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBXZWJDb3JlL2to
dG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0
b21pY3N0cmluZy5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MjIgLTAwMDAJMS4xMgorKysgV2ViQ29y
ZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAJMjggU2VwIDIwMDUgMDg6MDE6NTMgLTAw
MDAKQEAgLTMwLDkgKzMwLDcgQEAKIAogI2luY2x1ZGUgImRvbV9hdG9taWNzdHJpbmcuaCIKICNp
bmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2hhc2hzZXQuaCIK
LQotdXNpbmcga2h0bWw6Okhhc2hTZXQ7CisjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgog
CiBuYW1lc3BhY2UgRE9NIHsKICAgIApJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX3FuYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9t
X3FuYW1lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUgV2Vi
Q29yZS9raHRtbC94bWwvZG9tX3FuYW1lLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX3Fu
YW1lLmNwcAkyOSBBdWcgMjAwNSAyMToyOToyMyAtMDAwMAkxLjUKKysrIFdlYkNvcmUva2h0bWwv
eG1sL2RvbV9xbmFtZS5jcHAJMjggU2VwIDIwMDUgMDg6MDE6NTMgLTAwMDAKQEAgLTIyLDkgKzIy
LDcgQEAKICNkZWZpbmUgS0hUTUxfUU5BTUVfSElERV9HTE9CQUxTIDEKIAogI2luY2x1ZGUgImRv
bV9xbmFtZS5oIgotI2luY2x1ZGUgIm1pc2MvaGFzaHNldC5oIgotCi11c2luZyBraHRtbDo6SGFz
aFNldDsKKyNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBET00gewog
CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fc3RyaW5naW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fc3RyaW5naW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IFdlYkNvcmUva2h0bWwveG1s
L2RvbV9zdHJpbmdpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmgJ
MjcgU2VwIDIwMDUgMjI6Mzc6MjMgLTAwMDAJMS4xNQorKysgV2ViQ29yZS9raHRtbC94bWwvZG9t
X3N0cmluZ2ltcGwuaAkyOCBTZXAgMjAwNSAwODowMTo1MyAtMDAwMApAQCAtOTUsNSArOTUsMTA3
IEBAIHB1YmxpYzoKICAgICBib29sIF9pblRhYmxlOwogfTsKIAotfTsKK30KKworbmFtZXNwYWNl
IEtYTUxDb3JlIHsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlZmF1bHRIYXNo
OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8RE9NOjpET01TdHJpbmdJbXBs
ICo+IHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRE9NOjpET01TdHJpbmdJ
bXBsICprZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IERPTTo6RE9NU3RyaW5nSW1wbCAqYSwgY29uc3QgRE9NOjpET01TdHJpbmdJbXBs
ICpiKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYSA9PSBiKSByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB1aW50IGFMZW5ndGggPSBhLT5sOworICAgICAgICAgICAgdWludCBiTGVuZ3RoID0g
Yi0+bDsKKyAgICAgICAgICAgIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25zdCB1aW50MzJf
dCAqYUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCAqPihhLT5zKTsKKyAg
ICAgICAgICAgIGNvbnN0IHVpbnQzMl90ICpiQ2hhcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90ICo+KGItPnMpOworICAgICAgICAgICAgCisgICAgICAgICAgICB1aW50IGhhbGZM
ZW5ndGggPSBhTGVuZ3RoID4+IDE7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgIT0g
aGFsZkxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCphQ2hhcnMrKyAhPSAqYkNo
YXJzKyspCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGFMZW5ndGggJiAxICYmICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQxNl90ICo+KGFDaGFycykgIT0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDE2X3QgKj4oYkNoYXJzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfTsK
KyAgICAKKyAgICBjbGFzcyBDYXNlSW5zZW5zaXRpdmVIYXNoIHsKKyAgICBwcml2YXRlOgorICAg
ICAgICAvLyBHb2xkZW4gcmF0aW8gLSBhcmJpdHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFw
cGluZyBhbGwgMCdzIHRvIGFsbCAwJ3MKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBI
SSA9IDB4OWUzNzc5YjlVOworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gUGF1bCBIc2llaCdzIFN1
cGVyRmFzdEhhc2gKKyAgICAgICAgLy8gaHR0cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3Fl
ZC9oYXNoLmh0bWwKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRE9NOjpET01T
dHJpbmdJbXBsICpzdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGwgPSBzdHIt
Pmw7CisgICAgICAgICAgICBRQ2hhciAqcyA9IHN0ci0+czsKKyAgICAgICAgICAgIHVpbnQzMl90
IGhhc2ggPSBQSEk7CisgICAgICAgICAgICB1aW50MzJfdCB0bXA7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGludCByZW0gPSBsICYgMTsKKyAgICAgICAgICAgIGwgPj49IDE7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIE1haW4gbG9vcAorICAgICAgICAgICAgZm9yICg7IGwgPiAw
OyBsLS0pIHsKKyAgICAgICAgICAgICAgICBoYXNoICs9IHNbMF0ubG93ZXIoKS51bmljb2RlKCk7
CisgICAgICAgICAgICAgICAgdG1wID0gKHNbMV0ubG93ZXIoKS51bmljb2RlKCkgPDwgMTEpIF4g
aGFzaDsKKyAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggPDwgMTYpIF4gdG1wOworICAgICAg
ICAgICAgICAgIHMgKz0gMjsKKyAgICAgICAgICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsZSBlbmQgY2Fz
ZQorICAgICAgICAgICAgaWYgKHJlbSkgeworICAgICAgICAgICAgICAgIGhhc2ggKz0gc1swXS5s
b3dlcigpLnVuaWNvZGUoKTsKKyAgICAgICAgICAgICAgICBoYXNoIF49IGhhc2ggPDwgMTE7Cisg
ICAgICAgICAgICAgICAgaGFzaCArPSBoYXNoID4+IDE3OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBGb3JjZSAiYXZhbGFuY2hpbmciIG9mIGZpbmFsIDEyNyBi
aXRzCisgICAgICAgICAgICBoYXNoIF49IGhhc2ggPDwgMzsKKyAgICAgICAgICAgIGhhc2ggKz0g
aGFzaCA+PiA1OworICAgICAgICAgICAgaGFzaCBePSBoYXNoIDw8IDI7CisgICAgICAgICAgICBo
YXNoICs9IGhhc2ggPj4gMTU7CisgICAgICAgICAgICBoYXNoIF49IGhhc2ggPDwgMTA7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIHRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFz
aCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNlZCB0bworICAgICAgICAgICAgLy8gc2lnbmFs
ICJoYXNoIG5vdCBjb21wdXRlZCB5ZXQiLCB1c2luZyBhIHZhbHVlIHRoYXQgaXMgbGlrZWx5IHRv
IGJlCisgICAgICAgICAgICAvLyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyAwIHdoZW4gdGhlIGxv
dyBiaXRzIGFyZSBtYXNrZWQKKyAgICAgICAgICAgIGlmIChoYXNoID09IDApCisgICAgICAgICAg
ICAgICAgaGFzaCA9IDB4ODAwMDAwMDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBoYXNoOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBET006OkRPTVN0cmluZ0ltcGwgKmEsIGNvbnN0IERPTTo6RE9NU3RyaW5nSW1wbCAqYikK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGEgPT0gYikgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQgbGVuZ3Ro
ID0gYS0+bDsKKyAgICAgICAgICAgIGlmIChsZW5ndGggIT0gYi0+bCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb25zdCBRQ2hhciAqYXMgPSBhLT5zOworICAg
ICAgICAgICAgY29uc3QgUUNoYXIgKmJzID0gYi0+czsKKyAgICAgICAgICAgIGZvciAodWludCBp
ID0gMDsgaSAhPSBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBpZiAoYXNbaV0ubG93ZXIo
KSAhPSBic1tpXS5sb3dlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisKK30KKwordXNpbmcg
S1hNTENvcmU6OkNhc2VJbnNlbnNpdGl2ZUhhc2g7CisKICNlbmRpZgpJbmRleDogV2ViQ29yZS9r
aHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQyCmRpZmYgLXAgLXUgLXIxLjQyIFdlYkNvcmUva2h0bWwveG1sL3htbF90b2tlbml6ZXIu
Y3BwCi0tLSBXZWJDb3JlL2todG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAkyNiBTZXAgMjAwNSAy
MjozMjozOCAtMDAwMAkxLjQyCisrKyBXZWJDb3JlL2todG1sL3htbC94bWxfdG9rZW5pemVyLmNw
cAkyOCBTZXAgMjAwNSAwODowMTo1MyAtMDAwMApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUg
Imh0bWwvaHRtbF90YWJsZWltcGwuaCIKICNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRl
ICJtaXNjL2xvYWRlci5oIgotI2luY2x1ZGUgIm1pc2MvaGFzaG1hcC5oIgorI2luY2x1ZGUgPGt4
bWxjb3JlL0hhc2hNYXAuaD4KIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImto
dG1sX3BhcnQuaCIKSW5kZXg6IFdlYkNvcmUva3dxL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ4
CmRpZmYgLXAgLXUgLXIxLjQ4IFdlYkNvcmUva3dxL0RPTS5tbQotLS0gV2ViQ29yZS9rd3EvRE9N
Lm1tCTI3IFNlcCAyMDA1IDIyOjM3OjI1IC0wMDAwCTEuNDgKKysrIFdlYkNvcmUva3dxL0RPTS5t
bQkyOCBTZXAgMjAwNSAwODowMTo1NCAtMDAwMApAQCAtNDUsNyArNDUsNyBAQAogI2ltcG9ydCAi
ZG9tX3RleHRpbXBsLmgiCiAjaW1wb3J0ICJkb21feG1saW1wbC5oIgogI2ltcG9ydCAiaHRtbF9l
bGVtZW50aW1wbC5oIgotI2ltcG9ydCAiaGFzaG1hcC5oIgorI2ltcG9ydCA8a3htbGNvcmUvSGFz
aE1hcC5oPgogCiAjaW1wb3J0ICJraHRtbF9wYXJ0LmgiCiAKQEAgLTkzLDggKzkzLDYgQEAgdXNp
bmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwogdXNpbmcgRE9NOjpUcmVl
V2Fsa2VySW1wbDsKIAotdXNpbmcga2h0bWw6Okhhc2hNYXA7Ci11c2luZyBraHRtbDo6UG9pbnRl
ckhhc2g7CiB1c2luZyBraHRtbDo6UmVuZGVyT2JqZWN0OwogCiBAaW50ZXJmYWNlIERPTUF0dHIg
KFdlYkNvcmVJbnRlcm5hbCkKQEAgLTIyNTUsNyArMjI1Myw3IEBAIE9iakNFdmVudExpc3RlbmVy
OjpPYmpDRXZlbnRMaXN0ZW5lcihpZCAKICAgICAgICAgbWFwID0gbmV3IExpc3RlbmVyTWFwOwog
ICAgICAgICBsaXN0ZW5lck1hcCA9IG1hcDsKICAgICB9Ci0gICAgbWFwLT5pbnNlcnQobGlzdGVu
ZXIsIHRoaXMpOworICAgIG1hcC0+c2V0KGxpc3RlbmVyLCB0aGlzKTsKIH0KIAogT2JqQ0V2ZW50
TGlzdGVuZXI6On5PYmpDRXZlbnRMaXN0ZW5lcigpCg==
</data>
<flag name="review"
          id="634"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>