<?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>231077</bug_id>
          
          <creation_ts>2021-10-01 06:40:50 -0700</creation_ts>
          <short_desc>Rename InlineIterator to LegacyInlineIterator</short_desc>
          <delta_ts>2021-10-01 08:13:21 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1799269</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-01 06:40:50 -0700</bug_when>
    <thetext>It is only used by the legacy line layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799288</commentid>
    <comment_count>1</comment_count>
      <attachid>439856</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-01 07:16:11 -0700</bug_when>
    <thetext>Created attachment 439856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799304</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-01 08:12:45 -0700</bug_when>
    <thetext>Committed r283367 (242376@main): &lt;https://commits.webkit.org/242376@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439856.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799305</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-01 08:13:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/83766404&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439856</attachid>
            <date>2021-10-01 07:16:11 -0700</date>
            <delta_ts>2021-10-01 08:12:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231077-20211001171610.patch</filename>
            <type>text/plain</type>
            <size>96434</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk3ZDQzMzYwNDlhYzc5
YWYyMDE0NGY4NDhhZmU3ZmI0NDU0OGU2NS4uYmUzZjU3MjdlMDlmNDgzZDBkM2UzMDVmYzMzYTY1
YTgzM2Q1OWJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDIxLTEwLTAxICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgSW5saW5lSXRl
cmF0b3IgdG8gTGVnYWN5SW5saW5lSXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTA3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEl0IGlzIG9ubHkgdXNlZCBieSB0aGUgbGVnYWN5IGxpbmUg
bGF5b3V0LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwOgor
ICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SW5saW5lSXRlcmF0b3I6OnN1cnJvZ2F0ZVRleHREaXJlY3Rpb24gY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmguCisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVJdGVyYXRvcjo6TGVnYWN5SW5saW5lSXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRJbmxpbmVSZW5kZXJlclNraXBwaW5nRW1wdHkp
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RJbmxpbmVSZW5kZXJlclNraXBwaW5nRW1wdHkpOgor
CisgICAgICAgIFJlbmFtZSB0aGlzIHRvIG5vdCBzYXkgImJpZGkiLgorCisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lJbmxpbmVJdGVyYXRvcjo6ZmFzdEluY3JlbWVudEluVGV4dE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lSXRlcmF0b3I6OmluY3JlbWVudEJ5Q29kZVBvaW50
SW5UZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVJdGVyYXRvcjo6c2V0
T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZUl0ZXJhdG9yOjpzZXRSZWZl
cnNUb0VuZE9mUHJldmlvdXNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZUl0
ZXJhdG9yOjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lSXRlcmF0
b3I6OmZhc3REZWNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lSXRlcmF0
b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZUl0ZXJhdG9y
OjpjaGFyYWN0ZXJBdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVJdGVy
YXRvcjo6Y3VycmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVJdGVy
YXRvcjo6cHJldmlvdXNJblNhbWVOb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUlubGluZUl0ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bnVt
YmVyT2ZJc29sYXRlQW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNv
bHZlcjo6YXBwZW5kUnVuSW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lMaW5l
TGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZURpcmVjdGlvbmFsaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVu
cyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OnJlc3RhcnRMYXlvdXRS
dW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0
OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lM
aW5lTGF5b3V0OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZUVuZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcv
TGVnYWN5TGluZUxheW91dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lSb290SW5saW5l
Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlJbmxpbmUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmxpbmVCcmVhayk6CisgICAgICAg
IChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmluaXRpYWxpemVGb3JDdXJyZW50T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlQlIpOgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlUmVwbGFjZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6aXRlcmF0b3JJc0JleW9uZEVuZE9mUmVuZGVyQ29tYmluZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5zdXJlQ2hhcmFjdGVyR2V0c0xpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
dHJ5SHlwaGVuYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5k
bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6dHJhaWxpbmdTcGFj
ZXNIYW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrV2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFu
c2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUVuZE9m
TGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUJyZWFrZXI6OnNraXBUcmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAqIHJlbmRl
cmluZy9saW5lL0xpbmVCcmVha2VyLmg6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUlu
bGluZUhlYWRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnNraXBOb25CcmVha2luZ1NwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OnJlcXVpcmVzTGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5n
L2xpbmUvVHJhaWxpbmdPYmplY3RzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWlsaW5nT2Jq
ZWN0czo6dXBkYXRlV2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94
ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oOgorICAgICAg
ICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQpOgorCiAyMDIxLTEw
LTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIElu
bGluZVdhbGtlciB0byBhIGZpbGUgb2YgaXRzIG93biBhbmQgbWFrZSBpdCB1c2UgUmVuZGVySXRl
cmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggN2JiYzBiMzJhNjA4YWJjNTE5NjQwMzdhNDRkMjcyMjA1
OTQyYWYxNy4uNjRiNGRlODgzOTE1NjNjNGEyZWNiNTdlN2M0Yjc1NmVjMTJjYzllNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTIyMTQsNyArMjIxNCw2IEBAIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNw
cAogcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAKIHJlbmRlcmluZy9JbWFn
ZVF1YWxpdHlDb250cm9sbGVyLmNwcAogcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCi1y
ZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuY3BwCiByZW5kZXJpbmcvTGF5ZXJBbmNlc3RvckNsaXBw
aW5nU3RhY2suY3BwCiByZW5kZXJpbmcvTGF5ZXJPdmVybGFwTWFwLmNwcAogcmVuZGVyaW5nL0xh
eW91dERpc2FsbG93ZWRTY29wZS5jcHAKQEAgLTIyMjMsNiArMjIyMiw3IEBAIHJlbmRlcmluZy9M
ZWdhY3lFbGxpcHNpc0JveC5jcHAKIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guY3BwCiByZW5k
ZXJpbmcvTGVnYWN5SW5saW5lRWxlbWVudEJveC5jcHAKIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVG
bG93Qm94LmNwcAorcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmNwcAogcmVuZGVyaW5n
L0xlZ2FjeUxpbmVMYXlvdXQuY3BwCiByZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5jcHAK
IHJlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM1NDAyNWNiMmM2N2JhOGZj
MTljY2Q3NzkyYTY0NzIyNWRiN2JjZDAuLjU1N2Q1MjQ0MGQzYTJjZWVjMTY4NzNhMTI3ZjhjN2Qy
ZjI4MjQ2NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTQyMjIsNyArNDIyMiw3IEBACiAJCUJDRTY1OUU2MEVBOTJGQjIwMDdF
NDUzMyAvKiBUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNFNjU5RTUwRUE5MkZCMjAwN0U0NTMzIC8qIFRoZW1lTWFjLmggKi87IH07CiAJ
CUJDRTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTY1QkU5MEVBQ0RGMTYwMDdFNDUzMyAvKiBM
ZW5ndGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQ0U2OTFFNTI2NDYzN0ZDMDBFQkRDM0EgLyogUGl4ZWxCdWZmZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDgzOUJBMjY0NjE4MUEwMEEyOEI2
MiAvKiBQaXhlbEJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNzg5MTUx
MTIwRDYwODAwNjBFQ0U1IC8qIElubGluZUl0ZXJhdG9yLmggKi87IH07CisJCUJDRTc4OTE2MTEy
MEQ2MDgwMDYwRUNFNSAvKiBMZWdhY3lJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNzg5MTUxMTIwRDYwODAwNjBFQ0U1IC8q
IExlZ2FjeUlubGluZUl0ZXJhdG9yLmggKi87IH07CiAJCUJDRTc4OTg2MTEyMEU3QTYwMDYwRUNF
NSAvKiBCaWRpUnVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0U3ODk4NTExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oICovOyB9OwogCQlCQ0U5
M0Y0NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkzRjQ0MTUxN0M1
NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oICovOyB9OwogCQlCQ0VB
NDc5MDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDc3RDA5N0NB
QUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExNjc4LDcgKzExNjc4LDcg
QEAKIAkJOTMwQUFDOUQyNTBFRDQwOTAwMTNEQTlGIC8qIEpTQ1NTQ29uZGl0aW9uUnVsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NTU0NvbmRpdGlvblJ1bGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwQUFDQTAyNTBFRDQxMTAwMTNEQTlGIC8qIEpT
Q1NTR3JvdXBpbmdSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1NT
R3JvdXBpbmdSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMEFBQ0ExMjUw
RUQ0MTEwMDEzREE5RiAvKiBKU0NTU0dyb3VwaW5nUnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0NTU0dyb3VwaW5nUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTkzMEM5MERDMTlDRjk2NTMwMEQ2QzIxQSAvKiBJbmxpbmVJdGVyYXRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVJdGVyYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMEM5MERDMTlDRjk2NTMwMEQ2
QzIxQSAvKiBMZWdhY3lJbmxpbmVJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMZWdhY3lJbmxpbmVJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzMTUzQkQ5MTQxODFGN0EwMEZDRjVCRSAvKiBtaXNzaW5nSW1hZ2VAMngu
cG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1h
Z2UucG5nOyBwYXRoID0gIm1pc3NpbmdJbWFnZUAyeC5wbmciOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzE1M0JEQjE0MTk1OUJCMDBGQ0Y1QkUgLyogdGV4dEFyZWFSZXNpemVDb3Ju
ZXIucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
aW1hZ2UucG5nOyBwYXRoID0gdGV4dEFyZWFSZXNpemVDb3JuZXIucG5nOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzE1M0JFMTE0MTk1QTU3MDBGQ0Y1QkUgLyogbWlzc2luZ0ltYWdl
LnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGlt
YWdlLnBuZzsgcGF0aCA9IG1pc3NpbmdJbWFnZS5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDY3Miw3ICsxNDY3Miw3IEBACiAJCUJDRTY1QkU4MEVBQ0RGMTYwMDdFNDUzMyAv
KiBMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVuZ3Ro
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFNjVCRTkwRUFDREYxNjAwN0U0
NTMzIC8qIExlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZW5ndGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFNjVEMzEwRUFEMTIxMTAwN0U0NTMz
IC8qIFRoZW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRoZW1l
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNFNzg5MTUxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElubGluZUl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRTc4OTE1
MTEyMEQ2MDgwMDYwRUNFNSAvKiBMZWdhY3lJbmxpbmVJdGVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lJbmxpbmVJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0U3ODk4NTExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpUnVuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDRTc4OThBMTEyMEU4MDIwMDYwRUNFNSAvKiBCaWRpUnVuLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpZGlSdW4uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0U3QjE5MjBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0
b3J5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSGlz
dG9yeUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTk2NSw4ICsy
OTk2NSw2IEBACiAJCQkJQjUxQTJGM0UxN0Q3RDNBNDAwNzI1MTdBIC8qIEltYWdlUXVhbGl0eUNv
bnRyb2xsZXIuaCAqLywKIAkJCQlFNEY4MTlDMjI2RkI0RUFGMDA5NEUxNjIgLyogSW5saW5lQm94
UGFpbnRlci5jcHAgKi8sCiAJCQkJRTRGODE5QzUyNkZCNEVCRjAwOTRFMTYyIC8qIElubGluZUJv
eFBhaW50ZXIuaCAqLywKLQkJCQk5MzBDOTBEQzE5Q0Y5NjUzMDBENkMyMUEgLyogSW5saW5lSXRl
cmF0b3IuY3BwICovLAotCQkJCUJDRTc4OTE1MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVy
YXRvci5oICovLAogCQkJCUU0N0NFQkM3MjcwNkVGNTEwMEI4RDhGNSAvKiBJbmxpbmVXYWxrZXIu
aCAqLywKIAkJCQkwRkVDMTIwQjIyQkYyQ0M3MDA0RTlEMzUgLyogTGF5ZXJBbmNlc3RvckNsaXBw
aW5nU3RhY2suY3BwICovLAogCQkJCTBGRUMxMjA5MjJCRjJDQzcwMDRFOUQzNSAvKiBMYXllckFu
Y2VzdG9yQ2xpcHBpbmdTdGFjay5oICovLApAQCAtMjk5ODUsNiArMjk5ODMsOCBAQAogCQkJCUI1
N0NCNTJCMTgyQTM3RjYwMDc5QTY0NyAvKiBMZWdhY3lJbmxpbmVFbGVtZW50Qm94LmggKi8sCiAJ
CQkJQThDRkY1REQwQTE1NUEwNTAwMEE0MjM0IC8qIExlZ2FjeUlubGluZUZsb3dCb3guY3BwICov
LAogCQkJCUE4Q0ZGNURDMEExNTVBMDUwMDBBNDIzNCAvKiBMZWdhY3lJbmxpbmVGbG93Qm94Lmgg
Ki8sCisJCQkJOTMwQzkwREMxOUNGOTY1MzAwRDZDMjFBIC8qIExlZ2FjeUlubGluZUl0ZXJhdG9y
LmNwcCAqLywKKwkJCQlCQ0U3ODkxNTExMjBENjA4MDA2MEVDRTUgLyogTGVnYWN5SW5saW5lSXRl
cmF0b3IuaCAqLywKIAkJCQlCQ0VBNDgxQTA5N0Q5MzAyMDA5NEM5RTQgLyogTGVnYWN5SW5saW5l
VGV4dEJveC5jcHAgKi8sCiAJCQkJQkNFQTQ4MUIwOTdEOTMwMjAwOTRDOUU0IC8qIExlZ2FjeUlu
bGluZVRleHRCb3guaCAqLywKIAkJCQlCQ0VBNDgxMzA5N0Q5MzAyMDA5NEM5RTQgLyogTGVnYWN5
TGluZUxheW91dC5jcHAgKi8sCkBAIC0zMjk3OSw3ICszMjk3OSw2IEBACiAJCQkJMTE1Q0ZBN0Uy
MDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTExRkExQzcyNkYwRjMwRjAwM0I4RjE2IC8qIElubGluZUludmFsaWRhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkZFN0NGQTIyMTc3RUVGMjAwNUIxNTczIC8qIElubGluZUl0ZW0u
aCBpbiBIZWFkZXJzICovLAotCQkJCUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZBQUU3MTMyNkEyODE0QjAwRTA3NTAyIC8q
IElubGluZUxldmVsQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjBDRDY5NTIyOUVEMzI3MDBD
NTk5NEUgLyogSW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCMjQwMDUyM0RGRjEy
ODAwNzk2NDU4IC8qIElubGluZUxpbmVCb3guaCBpbiBIZWFkZXJzICovLApAQCAtMzQwMTAsNiAr
MzQwMDksNyBAQAogCQkJCUE4Q0ZGNUU1MEExNTVBMDUwMDBBNDIzNCAvKiBMZWdhY3lJbmxpbmVC
b3guaCBpbiBIZWFkZXJzICovLAogCQkJCUI1N0NCNTJFMTgyQTNFRkMwMDc5QTY0NyAvKiBMZWdh
Y3lJbmxpbmVFbGVtZW50Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjVFMzBBMTU1QTA1
MDAwQTQyMzQgLyogTGVnYWN5SW5saW5lRmxvd0JveC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNF
Nzg5MTYxMTIwRDYwODAwNjBFQ0U1IC8qIExlZ2FjeUlubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0VBNDg1QTA5N0Q5MzAyMDA5NEM5RTQgLyogTGVnYWN5SW5saW5lVGV4dEJv
eC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFGIC8qIExlZ2Fj
eUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0NEE1RjU5MUZFRDM4RjIwMDdGNTk0
NCAvKiBMZWdhY3lOU1Bhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcAppbmRleCAxYzZlMDZiNzdkNGEyMWU2OWJlZTBjZjU2ZTUxNjBhYTRkMTU1ZjU4
Li4zYmNkMmViZmJlZDUyMDM2NzYwMzRiNTQ5YTJjNjViNmNlZGMyMDcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5o
IgotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zm
c2V0LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3Zl
cmFnZS5jcHAKaW5kZXggMDY3NjU2MmMzNDg5YWRhOTIzMDAzOTNhZjE4MzI4NWYyYzA5MzQ0ZS4u
MzMyZGE0NTQxMjhkNmI0ZGY0NWI0MGI1ZTllNjcyZWMzNzM3M2E2ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbkNvdmVyYWdlLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkxheW91dEludGVn
cmF0aW9uQ292ZXJhZ2UuaCIKIAogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJJbmxpbmVXYWxrZXIu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAj
aW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVJdGVyYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTY0
MTkxNDAwYmFlOGY5ZjZlYmI2MzA3MWUwZWIxYTYxNmQxMzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUl0ZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0KLUNvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi1hcmUgbWV0OgotMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQotRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci1ESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0qLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1VQ2hhckRpcmVjdGlvbiBJbmxpbmVJdGVyYXRvcjo6c3Vycm9n
YXRlVGV4dERpcmVjdGlvbihVQ2hhciBjdXJyZW50Q29kZVVuaXQpIGNvbnN0Ci17Ci0gICAgUmVu
ZGVyVGV4dCYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCptX3JlbmRlcmVyKTsKLSAgICBV
Q2hhciBsZWFkOwotICAgIFVDaGFyIHRyYWlsOwotICAgIGlmIChVMTZfSVNfTEVBRChjdXJyZW50
Q29kZVVuaXQpKSB7Ci0gICAgICAgIGxlYWQgPSBjdXJyZW50Q29kZVVuaXQ7Ci0gICAgICAgIHRy
YWlsID0gdGV4dC5jaGFyYWN0ZXJBdChtX3BvcyArIDEpOwotICAgICAgICBpZiAoIVUxNl9JU19U
UkFJTCh0cmFpbCkpCi0gICAgICAgICAgICByZXR1cm4gVV9PVEhFUl9ORVVUUkFMOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChVMTZfSVNfVFJBSUwoY3VycmVudENvZGVVbml0KSk7Ci0g
ICAgICAgIGxlYWQgPSB0ZXh0LmNoYXJhY3RlckF0KG1fcG9zIC0gMSk7Ci0gICAgICAgIGlmICgh
VTE2X0lTX0xFQUQobGVhZCkpCi0gICAgICAgICAgICByZXR1cm4gVV9PVEhFUl9ORVVUUkFMOwot
ICAgICAgICB0cmFpbCA9IGN1cnJlbnRDb2RlVW5pdDsKLSAgICB9Ci0gICAgcmV0dXJuIHVfY2hh
ckRpcmVjdGlvbihVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpKTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjBhYzEzNWYwNGIyM2NiZTQzYjVkYjUxMzc0NmI1ZjJhNTdhNzVmYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiQmlkaVJ1bi5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1
ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBCaWRpSXNvbGF0ZWRSdW4gewotICAgIEJpZGlJ
c29sYXRlZFJ1bihSZW5kZXJPYmplY3QmIG9iamVjdCwgdW5zaWduZWQgcG9zaXRpb24sIFJlbmRl
ckVsZW1lbnQmIHJvb3QsIEJpZGlSdW4mIHJ1blRvUmVwbGFjZSkKLSAgICAgICAgOiBvYmplY3Qo
b2JqZWN0KQotICAgICAgICAsIHJvb3Qocm9vdCkKLSAgICAgICAgLCBydW5Ub1JlcGxhY2UocnVu
VG9SZXBsYWNlKQotICAgICAgICAsIHBvc2l0aW9uKHBvc2l0aW9uKQotICAgIHsKLSAgICB9Ci0K
LSAgICBSZW5kZXJPYmplY3QmIG9iamVjdDsKLSAgICBSZW5kZXJFbGVtZW50JiByb290OwotICAg
IEJpZGlSdW4mIHJ1blRvUmVwbGFjZTsKLSAgICB1bnNpZ25lZCBwb3NpdGlvbjsKLX07Ci0KLS8v
IFRoaXMgY2xhc3MgaXMgdXNlZCB0byBSZW5kZXJJbmxpbmUgc3VidHJlZXMsIHN0ZXBwaW5nIGJ5
IGNoYXJhY3RlciB3aXRoaW4gdGhlCi0vLyB0ZXh0IGNoaWxkcmVuLiBJbmxpbmVJdGVyYXRvciB3
aWxsIHVzZSBiaWRpTmV4dCB0byBmaW5kIHRoZSBuZXh0IFJlbmRlclRleHQKLS8vIG9wdGlvbmFs
bHkgbm90aWZ5aW5nIGEgQmlkaVJlc29sdmVyIGV2ZXJ5IHRpbWUgaXQgc3RlcHMgaW50by9vdXQg
b2YgYSBSZW5kZXJJbmxpbmUuCi1jbGFzcyBJbmxpbmVJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAg
SW5saW5lSXRlcmF0b3IoKQotICAgIHsKLSAgICB9Ci0KLSAgICBJbmxpbmVJdGVyYXRvcihSZW5k
ZXJFbGVtZW50KiByb290LCBSZW5kZXJPYmplY3QqIG8sIHVuc2lnbmVkIHApCi0gICAgICAgIDog
bV9yb290KHJvb3QpCi0gICAgICAgICwgbV9yZW5kZXJlcihvKQotICAgICAgICAsIG1fcG9zKHAp
Ci0gICAgICAgICwgbV9yZWZlcnNUb0VuZE9mUHJldmlvdXNOb2RlKGZhbHNlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIHNldFJlbmRlcmVyKG51bGxw
dHIpOwotICAgICAgICBzZXRPZmZzZXQoMCk7Ci0gICAgICAgIHNldE5leHRCcmVha2FibGVQb3Np
dGlvbihzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgIH0KLSAgICB2
b2lkIG1vdmVUb1N0YXJ0T2YoUmVuZGVyT2JqZWN0JiBvYmplY3QpCi0gICAgewotICAgICAgICBt
b3ZlVG8ob2JqZWN0LCAwKTsKLSAgICB9Ci0KLSAgICB2b2lkIG1vdmVUbyhSZW5kZXJPYmplY3Qm
IG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBuZXh0QnJl
YWsgPSBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpKQotICAgIHsKLSAgICAgICAgc2V0UmVuZGVy
ZXIoJm9iamVjdCk7Ci0gICAgICAgIHNldE9mZnNldChvZmZzZXQpOwotICAgICAgICBzZXROZXh0
QnJlYWthYmxlUG9zaXRpb24obmV4dEJyZWFrKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotICAgIHZvaWQgc2V0UmVu
ZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVyZXI7IH0K
LSAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BvczsgfQotICAgIHZvaWQg
c2V0T2Zmc2V0KHVuc2lnbmVkIHBvc2l0aW9uKTsKLSAgICBSZW5kZXJFbGVtZW50KiByb290KCkg
Y29uc3QgeyByZXR1cm4gbV9yb290OyB9Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbmV4
dEJyZWFrYWJsZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QnJlYWthYmxlUG9zaXRp
b247IH0KLSAgICB2b2lkIHNldE5leHRCcmVha2FibGVQb3NpdGlvbihzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBwb3NpdGlvbikgeyBtX25leHRCcmVha2FibGVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9
Ci0gICAgYm9vbCByZWZlcnNUb0VuZE9mUHJldmlvdXNOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWZlcnNUb0VuZE9mUHJldmlvdXNOb2RlOyB9Ci0gICAgdm9pZCBzZXRSZWZlcnNUb0VuZE9mUHJl
dmlvdXNOb2RlKCk7Ci0KLSAgICB2b2lkIGZhc3RJbmNyZW1lbnRJblRleHROb2RlKCk7Ci0gICAg
dm9pZCBpbmNyZW1lbnRCeUNvZGVQb2ludEluVGV4dE5vZGUoKTsKLSAgICB2b2lkIGluY3JlbWVu
dChJbmxpbmVCaWRpUmVzb2x2ZXIqID0gbnVsbHB0cik7Ci0gICAgdm9pZCBmYXN0RGVjcmVtZW50
KCk7Ci0gICAgYm9vbCBhdEVuZCgpIGNvbnN0OwotCi0gICAgYm9vbCBhdFRleHRQYXJhZ3JhcGhT
ZXBhcmF0b3IoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzPFJlbmRlclRleHQ+KG1f
cmVuZGVyZXIpICYmIG1fcmVuZGVyZXItPnByZXNlcnZlc05ld2xpbmUoKSAmJiBkb3duY2FzdDxS
ZW5kZXJUZXh0PigqbV9yZW5kZXJlcikuY2hhcmFjdGVyQXQobV9wb3MpID09ICdcbic7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgYXRQYXJhZ3JhcGhTZXBhcmF0b3IoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzQlIoKSkgfHwgYXRUZXh0
UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAgfQotCi0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0
OwotICAgIFVDaGFyIHByZXZpb3VzSW5TYW1lTm9kZSgpIGNvbnN0OwotICAgIEFMV0FZU19JTkxJ
TkUgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgVUNo
YXIgY2hhcmFjdGVyQXQodW5zaWduZWQpIGNvbnN0OwotCi0gICAgVUNoYXJEaXJlY3Rpb24gc3Vy
cm9nYXRlVGV4dERpcmVjdGlvbihVQ2hhciBjdXJyZW50Q29kZVVuaXQpIGNvbnN0OwotCi0gICAg
UmVuZGVyRWxlbWVudCogbV9yb290IHsgbnVsbHB0ciB9OwotICAgIFJlbmRlck9iamVjdCogbV9y
ZW5kZXJlciB7IG51bGxwdHIgfTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fbmV4
dEJyZWFrYWJsZVBvc2l0aW9uOwotICAgIHVuc2lnbmVkIG1fcG9zIHsgMCB9OwotCi0gICAgLy8g
VGhlcmUgYXJlIGEgY291cGxlIHBsYWNlcyB3aGVyZSB3ZSB3YW50IHRvIGRlY3JlbWVudCBhbiBJ
bmxpbmVJdGVyYXRvci4KLSAgICAvLyBVc3VhbGx5IHRoaXMgdGFrZSB0aGUgZm9ybSBvZiBkZWNy
ZW1lbnRpbmcgbV9wb3M7IGhvd2V2ZXIsIG1fcG9zIG1pZ2h0IGJlIDAuCi0gICAgLy8gSG93ZXZl
ciwgd2Ugc2hvdWxkbid0IGV2ZXIgbmVlZCB0byBkZWNyZW1lbnQgYW4gSW5saW5lSXRlcmF0b3Ig
bW9yZSB0aGFuCi0gICAgLy8gb25jZSwgc28gcmF0aGVyIHRoYW4gaW1wbGVtZW50aW5nIGEgZGVj
cmVtZW50KCkgZnVuY3Rpb24gd2hpY2ggdHJhdmVyc2VzCi0gICAgLy8gbm9kZXMsIHdlIGNhbiBz
aW1wbHkga2VlcCB0cmFjayBvZiB0aGlzIHN0YXRlIGFuZCBoYW5kbGUgaXQuCi0gICAgYm9vbCBt
X3JlZmVyc1RvRW5kT2ZQcmV2aW91c05vZGUgeyBmYWxzZSB9OwotfTsKLQotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQxLCBjb25zdCBJbmxpbmVJdGVyYXRv
ciYgaXQyKQotewotICAgIHJldHVybiBpdDEub2Zmc2V0KCkgPT0gaXQyLm9mZnNldCgpICYmIGl0
MS5yZW5kZXJlcigpID09IGl0Mi5yZW5kZXJlcigpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDEsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDIp
Ci17Ci0gICAgcmV0dXJuIGl0MS5vZmZzZXQoKSAhPSBpdDIub2Zmc2V0KCkgfHwgaXQxLnJlbmRl
cmVyKCkgIT0gaXQyLnJlbmRlcmVyKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVUNoYXJEaXJlY3Rp
b24gZW1iZWRDaGFyRnJvbURpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRVVuaWNv
ZGVCaWRpIHVuaWNvZGVCaWRpKQotewotICAgIGlmICh1bmljb2RlQmlkaSA9PSBFbWJlZCkKLSAg
ICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RP
X0xFRlRfRU1CRURESU5HIDogVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORzsKLSAgICByZXR1cm4g
ZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCA/IFVfUklHSFRfVE9fTEVGVF9PVkVSUklE
RSA6IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIE9ic2Vy
dmVyPgotc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdChPYnNl
cnZlciogb2JzZXJ2ZXIsIFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghb2JzZXJ2
ZXIgfHwgIW9iamVjdCB8fCAhb2JqZWN0LT5pc1JlbmRlcklubGluZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0g
ICAgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0gc3R5bGUudW5pY29kZUJpZGkoKTsKLSAgICBp
ZiAodW5pY29kZUJpZGkgPT0gVUJOb3JtYWwpIHsKLSAgICAgICAgLy8gaHR0cDovL2Rldi53My5v
cmcvY3Nzd2cvY3NzMy13cml0aW5nLW1vZGVzLyN1bmljb2RlLWJpZGkKLSAgICAgICAgLy8gIlRo
ZSBlbGVtZW50IGRvZXMgbm90IG9wZW4gYW4gYWRkaXRpb25hbCBsZXZlbCBvZiBlbWJlZGRpbmcg
d2l0aCByZXNwZWN0IHRvIHRoZSBiaWRpcmVjdGlvbmFsIGFsZ29yaXRobS4iCi0gICAgICAgIC8v
IFRodXMgd2UgaWdub3JlIGFueSBwb3NzaWJsZSBkaXI9IGF0dHJpYnV0ZSBvbiB0aGUgc3Bhbi4K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNJc29sYXRlZCh1bmljb2RlQmlkaSkp
IHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgZXhwbGljaXQgZW1iZWRkaW5ncyBhcmUgY29t
bWl0dGVkIGJlZm9yZSB3ZSBlbnRlciB0aGUgaXNvbGF0ZWQgY29udGVudC4KLSAgICAgICAgb2Jz
ZXJ2ZXItPmNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7Ci0gICAgICAgIG9ic2VydmVyLT5lbnRl
cklzb2xhdGUoKTsKLSAgICAgICAgLy8gRW1iZWRkaW5nL092ZXJyaWRlIGNoYXJhY3RlcnMgaW1w
bGllZCBieSBkaXI9IHdpbGwgYmUgaGFuZGxlZCB3aGVuCi0gICAgICAgIC8vIHdlIHByb2Nlc3Mg
dGhlIGlzb2xhdGVkIHNwYW4sIG5vdCB3aGVuIGxheWluZyBvdXQgdGhlICJwYXJlbnQiIHJ1bi4K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghb2JzZXJ2ZXItPmluSXNvbGF0ZSgp
KQotICAgICAgICBvYnNlcnZlci0+ZW1iZWQoZW1iZWRDaGFyRnJvbURpcmVjdGlvbihzdHlsZS5k
aXJlY3Rpb24oKSwgdW5pY29kZUJpZGkpLCBGcm9tU3R5bGVPckRPTSk7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBPYnNlcnZlcj4KLXN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZlcldpbGxF
eGl0T2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0g
ICAgaWYgKCFvYnNlcnZlciB8fCAhb2JqZWN0IHx8ICFvYmplY3QtPmlzUmVuZGVySW5saW5lKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IG9iamVj
dC0+c3R5bGUoKS51bmljb2RlQmlkaSgpOwotICAgIGlmICh1bmljb2RlQmlkaSA9PSBVQk5vcm1h
bCkKLSAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvIGZvciB1bmljb2RlLWJpZGk6IG5v
cm1hbAotICAgIGlmIChpc0lzb2xhdGVkKHVuaWNvZGVCaWRpKSkgewotICAgICAgICBvYnNlcnZl
ci0+ZXhpdElzb2xhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE90aGVy
d2lzZSB3ZSBwb3AgYW55IGVtYmVkL292ZXJyaWRlIGNoYXJhY3RlciB3ZSBhZGRlZCB3aGVuIHdl
IG9wZW5lZCB0aGlzIHRhZy4KLSAgICBpZiAoIW9ic2VydmVyLT5pbklzb2xhdGUoKSkKLSAgICAg
ICAgb2JzZXJ2ZXItPmVtYmVkKFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCwgRnJvbVN0eWxlT3JE
T00pOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNJdGVyYXRvclRhcmdldChSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQob2JqZWN0KTsgLy8gVGhlIGl0ZXJhdG9yIHdpbGwg
b2YgY291cnNlIHJldHVybiAwLCBidXQgaXRzIG5vdCBhbiBleHBlY3RlZCBhcmd1bWVudCB0byB0
aGlzIGZ1bmN0aW9uLgotICAgIHJldHVybiBvYmplY3QtPmlzVGV4dE9yTGluZUJyZWFrKCkgfHwg
b2JqZWN0LT5pc0Zsb2F0aW5nKCkgfHwgb2JqZWN0LT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8
fCBvYmplY3QtPmlzUmVwbGFjZWQoKTsKLX0KLQotc3RhdGljIGJvb2wgaXNFbXB0eUlubGluZShj
b25zdCBSZW5kZXJJbmxpbmUmIHJlbmRlcmVyKQotewotICAgIGZvciAoYXV0byYgY3VycmVudCA6
IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4ocmVuZGVyZXIpKSB7Ci0gICAgICAgIGlmIChj
dXJyZW50LmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oY3VycmVudCkpIHsKLSAgICAgICAg
ICAgIGlmICghZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3VycmVudCkuaXNBbGxDb2xsYXBzaWJsZVdo
aXRlc3BhY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWlzPFJlbmRlcklubGluZT4oY3VycmVu
dCkgfHwgIWlzRW1wdHlJbmxpbmUoZG93bmNhc3Q8UmVuZGVySW5saW5lPihjdXJyZW50KSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgT2JzZXJ2ZXI+Ci1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlk
aU5leHRTa2lwcGluZ0VtcHR5SW5saW5lcyhSZW5kZXJFbGVtZW50JiByb290LCBSZW5kZXJPYmpl
Y3QqIGN1cnJlbnQsIE9ic2VydmVyKiBvYnNlcnZlcikKLXsKLSAgICBSZW5kZXJPYmplY3QqIG5l
eHQgPSBudWxscHRyOwotCi0gICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgbmV4dCA9IG51
bGxwdHI7Ci0gICAgICAgIGlmICghaXNJdGVyYXRvclRhcmdldChjdXJyZW50KSkgewotICAgICAg
ICAgICAgbmV4dCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpjdXJyZW50KS5maXJzdENoaWxk
KCk7Ci0gICAgICAgICAgICBub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3Qob2JzZXJ2ZXIsIG5l
eHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFuZXh0KSB7Ci0gICAgICAgICAgICB3aGls
ZSAoY3VycmVudCAmJiBjdXJyZW50ICE9ICZyb290KSB7Ci0gICAgICAgICAgICAgICAgbm90aWZ5
T2JzZXJ2ZXJXaWxsRXhpdE9iamVjdChvYnNlcnZlciwgY3VycmVudCk7Ci0KLSAgICAgICAgICAg
ICAgICBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAo
bmV4dCkgewotICAgICAgICAgICAgICAgICAgICBub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3Qo
b2JzZXJ2ZXIsIG5leHQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5leHQpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBpZiAoaXNJdGVyYXRvclRhcmdldChuZXh0KSB8fCAoaXM8UmVu
ZGVySW5saW5lPigqbmV4dCkgJiYgaXNFbXB0eUlubGluZShkb3duY2FzdDxSZW5kZXJJbmxpbmU+
KCpuZXh0KSkpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGN1cnJlbnQgPSBuZXh0Owot
ICAgIH0KLQotICAgIHJldHVybiBuZXh0OwotfQotCi0vLyBUaGlzIG1ha2VzIGNhbGxlcnMgY2xl
YW5lciBhcyB0aGV5IGRvbid0IGhhdmUgdG8gc3BlY2lmeSBhIHR5cGUgZm9yIHRoZSBvYnNlcnZl
ciB3aGVuIG5vdCBwcm92aWRpbmcgb25lLgotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJp
ZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoUmVuZGVyRWxlbWVudCYgcm9vdCwgUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50KQotewotICAgIElubGluZUJpZGlSZXNvbHZlciogb2JzZXJ2ZXIgPSBudWxs
cHRyOwotICAgIHJldHVybiBiaWRpTmV4dFNraXBwaW5nRW1wdHlJbmxpbmVzKHJvb3QsIGN1cnJl
bnQsIG9ic2VydmVyKTsKLX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlGaXJz
dFNraXBwaW5nRW1wdHlJbmxpbmVzKFJlbmRlckVsZW1lbnQmIHJvb3QsIElubGluZUJpZGlSZXNv
bHZlciogcmVzb2x2ZXIgPSBudWxscHRyKQotewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSByb290LmZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlcikpIHsKLSAgICAg
ICAgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVkT2JqZWN0KHJlc29sdmVyLCByZW5kZXJlcik7Ci0gICAg
ICAgIGlmICghaXNFbXB0eUlubGluZShkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlcikp
KQotICAgICAgICAgICAgcmVuZGVyZXIgPSBiaWRpTmV4dFNraXBwaW5nRW1wdHlJbmxpbmVzKHJv
b3QsIHJlbmRlcmVyLCByZXNvbHZlcik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8g
TmV2ZXIgc2tpcCBlbXB0eSBpbmxpbmVzLgotICAgICAgICAgICAgaWYgKHJlc29sdmVyKQotICAg
ICAgICAgICAgICAgIHJlc29sdmVyLT5jb21taXRFeHBsaWNpdEVtYmVkZGluZygpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IFVuaWZ5IHRoaXMgd2l0aCB0aGUgYmlkaU5leHQgY2FsbCBhYm92ZS4KLSAgICBpZiAocmVuZGVy
ZXIgJiYgIWlzSXRlcmF0b3JUYXJnZXQocmVuZGVyZXIpKQotICAgICAgICByZW5kZXJlciA9IGJp
ZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMocm9vdCwgcmVuZGVyZXIsIHJlc29sdmVyKTsKLQot
ICAgIGlmIChyZXNvbHZlcikKLSAgICAgICAgcmVzb2x2ZXItPmNvbW1pdEV4cGxpY2l0RW1iZWRk
aW5nKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyOwotfQotCi1pbmxpbmUgdm9pZCBJbmxpbmVJdGVy
YXRvcjo6ZmFzdEluY3JlbWVudEluVGV4dE5vZGUoKQotewotICAgIEFTU0VSVChtX3JlbmRlcmVy
KTsKLSAgICBBU1NFUlQobV9wb3MgPD0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm1fcmVuZGVyZXIp
LnRleHQoKS5sZW5ndGgoKSk7Ci0gICAgKyttX3BvczsKLX0KLQotaW5saW5lIHZvaWQgSW5saW5l
SXRlcmF0b3I6OmluY3JlbWVudEJ5Q29kZVBvaW50SW5UZXh0Tm9kZSgpCi17Ci0gICAgQVNTRVJU
KG1fcmVuZGVyZXIpOwotICAgIGNvbnN0IGF1dG8mIHRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0
PigqbV9yZW5kZXJlcikudGV4dCgpOwotICAgIEFTU0VSVChtX3BvcyA8IHRleHQubGVuZ3RoKCkp
OwotICAgIGlmICh0ZXh0LmlzOEJpdCgpKSB7Ci0gICAgICAgICsrbV9wb3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgVTE2X05FWFQodGV4dC5j
aGFyYWN0ZXJzMTYoKSwgbV9wb3MsIHRleHQubGVuZ3RoKCksIGNoYXJhY3Rlcik7Ci19Ci0KLWlu
bGluZSB2b2lkIElubGluZUl0ZXJhdG9yOjpzZXRPZmZzZXQodW5zaWduZWQgcG9zaXRpb24pCi17
Ci0gICAgQVNTRVJUKHBvc2l0aW9uIDw9IFVJTlRfTUFYIC0gMTApOyAvLyBTYW5pdHkgY2hlY2sK
LSAgICBtX3BvcyA9IHBvc2l0aW9uOwotfQotCi1pbmxpbmUgdm9pZCBJbmxpbmVJdGVyYXRvcjo6
c2V0UmVmZXJzVG9FbmRPZlByZXZpb3VzTm9kZSgpCi17Ci0gICAgQVNTRVJUKCFtX3Bvcyk7Ci0g
ICAgQVNTRVJUKCFtX3JlZmVyc1RvRW5kT2ZQcmV2aW91c05vZGUpOwotICAgIG1fcmVmZXJzVG9F
bmRPZlByZXZpb3VzTm9kZSA9IHRydWU7Ci19Ci0KLQotaW5saW5lIHZvaWQgSW5saW5lSXRlcmF0
b3I6OmluY3JlbWVudChJbmxpbmVCaWRpUmVzb2x2ZXIqIHJlc29sdmVyKQotewotICAgIGlmICgh
bV9yZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpczxSZW5kZXJUZXh0PigqbV9y
ZW5kZXJlcikpIHsKLSAgICAgICAgZmFzdEluY3JlbWVudEluVGV4dE5vZGUoKTsKLSAgICAgICAg
aWYgKG1fcG9zIDwgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm1fcmVuZGVyZXIpLnRleHQoKS5sZW5n
dGgoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gYmlkaU5leHQgY2FuIHJl
dHVybiBudWxscHRyCi0gICAgUmVuZGVyT2JqZWN0KiBiaWRpTmV4dCA9IGJpZGlOZXh0U2tpcHBp
bmdFbXB0eUlubGluZXMoKm1fcm9vdCwgbV9yZW5kZXJlciwgcmVzb2x2ZXIpOwotICAgIGlmIChi
aWRpTmV4dCkKLSAgICAgICAgbW92ZVRvU3RhcnRPZigqYmlkaU5leHQpOwotICAgIGVsc2UKLSAg
ICAgICAgY2xlYXIoKTsKLX0KLQotaW5saW5lIHZvaWQgSW5saW5lSXRlcmF0b3I6OmZhc3REZWNy
ZW1lbnQoKQotewotICAgIEFTU0VSVCghcmVmZXJzVG9FbmRPZlByZXZpb3VzTm9kZSgpKTsKLSAg
ICBpZiAobV9wb3MpCi0gICAgICAgIHNldE9mZnNldChtX3BvcyAtIDEpOwotICAgIGVsc2UKLSAg
ICAgICAgc2V0UmVmZXJzVG9FbmRPZlByZXZpb3VzTm9kZSgpOwotfQotCi1pbmxpbmUgYm9vbCBJ
bmxpbmVJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9yZW5kZXJlcjsK
LX0KLQotaW5saW5lIFVDaGFyIElubGluZUl0ZXJhdG9yOjpjaGFyYWN0ZXJBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlclRleHQ+KG1fcmVuZGVyZXIpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PigqbV9yZW5k
ZXJlcikuY2hhcmFjdGVyQXQoaW5kZXgpOwotfQotCi1pbmxpbmUgVUNoYXIgSW5saW5lSXRlcmF0
b3I6OmN1cnJlbnQoKSBjb25zdAotewotICAgIHJldHVybiBjaGFyYWN0ZXJBdChtX3Bvcyk7Ci19
Ci0KLWlubGluZSBVQ2hhciBJbmxpbmVJdGVyYXRvcjo6cHJldmlvdXNJblNhbWVOb2RlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY2hhcmFjdGVyQXQobV9wb3MgLSAxKTsKLX0KLQotQUxXQVlTX0lO
TElORSBVQ2hhckRpcmVjdGlvbiBJbmxpbmVJdGVyYXRvcjo6ZGlyZWN0aW9uKCkgY29uc3QKLXsK
LSAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gVV9PVEhFUl9O
RVVUUkFMOwotCi0gICAgaWYgKExJS0VMWShpczxSZW5kZXJUZXh0PigqbV9yZW5kZXJlcikpKSB7
Ci0gICAgICAgIFVDaGFyIGNvZGVVbml0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm1fcmVuZGVy
ZXIpLmNoYXJhY3RlckF0KG1fcG9zKTsKLSAgICAgICAgaWYgKExJS0VMWShVMTZfSVNfU0lOR0xF
KGNvZGVVbml0KSkpCi0gICAgICAgICAgICByZXR1cm4gdV9jaGFyRGlyZWN0aW9uKGNvZGVVbml0
KTsKLSAgICAgICAgcmV0dXJuIHN1cnJvZ2F0ZVRleHREaXJlY3Rpb24oY29kZVVuaXQpOwotICAg
IH0KLQotICAgIGlmIChtX3JlbmRlcmVyLT5pc0xpc3RNYXJrZXIoKSkKLSAgICAgICAgcmV0dXJu
IG1fcmVuZGVyZXItPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVV9MRUZUX1RP
X1JJR0hUIDogVV9SSUdIVF9UT19MRUZUOwotCi0gICAgcmV0dXJuIFVfT1RIRVJfTkVVVFJBTDsK
LX0KLQotdGVtcGxhdGU8PgotaW5saW5lIHZvaWQgSW5saW5lQmlkaVJlc29sdmVyOjppbmNyZW1l
bnRJbnRlcm5hbCgpCi17Ci0gICAgbV9jdXJyZW50LmluY3JlbWVudCh0aGlzKTsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGlzSXNvbGF0ZWRJbmxpbmUoUmVuZGVyT2JqZWN0JiBvYmplY3QpCi17
Ci0gICAgcmV0dXJuIG9iamVjdC5pc1JlbmRlcklubGluZSgpICYmIGlzSXNvbGF0ZWQob2JqZWN0
LnN0eWxlKCkudW5pY29kZUJpZGkoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0
KiBoaWdoZXN0Q29udGFpbmluZ0lzb2xhdGVXaXRoaW5Sb290KFJlbmRlck9iamVjdCYgaW5pdGlh
bE9iamVjdCwgUmVuZGVyT2JqZWN0KiByb290KQotewotICAgIFJlbmRlck9iamVjdCogY29udGFp
bmluZ0lzb2xhdGVPYmplY3QgPSBudWxscHRyOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QgPSAmaW5pdGlhbE9iamVjdDsgb2JqZWN0ICYmIG9iamVjdCAhPSByb290OyBvYmplY3QgPSBv
YmplY3QtPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChpc0lzb2xhdGVkSW5saW5lKCpvYmplY3Qp
KQotICAgICAgICAgICAgY29udGFpbmluZ0lzb2xhdGVPYmplY3QgPSBvYmplY3Q7Ci0gICAgfQot
ICAgIHJldHVybiBjb250YWluaW5nSXNvbGF0ZU9iamVjdDsKLX0KLQotc3RhdGljIGlubGluZSB1
bnNpZ25lZCBudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMoY29uc3QgSW5saW5lSXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIHR5cGVkZWYgUmVuZGVyT2JqZWN0
KiBSZW5kZXJPYmplY3RQdHI7Ci0gICAgZm9yIChSZW5kZXJPYmplY3RQdHIgb2JqZWN0ID0gaXRl
ci5yZW5kZXJlcigpLCByb290ID0gaXRlci5yb290KCk7IG9iamVjdCAmJiBvYmplY3QgIT0gcm9v
dDsgb2JqZWN0ID0gb2JqZWN0LT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoaXNJc29sYXRlZElu
bGluZSgqb2JqZWN0KSkKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgfQotICAgIHJldHVybiBj
b3VudDsKLX0KLQotLy8gRklYTUU6IFRoaXMgYmVsb25ncyBvbiBJbmxpbmVCaWRpUmVzb2x2ZXIs
IGV4Y2VwdCBpdCdzIGEgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24KLS8vIG9mIEJpZGlSZXNvbHZl
ciB3aGljaCBrbm93cyBub3RoaW5nIGFib3V0IFJlbmRlck9iamVjdHMuCi1zdGF0aWMgaW5saW5l
IHZvaWQgYWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShJbmxpbmVCaWRpUmVzb2x2
ZXImIHJlc29sdmVyLCBSZW5kZXJPYmplY3QmIG9iaiwgdW5zaWduZWQgcG9zLCBSZW5kZXJFbGVt
ZW50JiByb290KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiBpc29sYXRlZFJ1biA9
IG1ha2VVbmlxdWU8QmlkaVJ1bj4ocG9zLCBwb3MsIG9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCBy
ZXNvbHZlci5kaXIoKSk7Ci0gICAgLy8gRklYTUU6IGlzb2xhdGVkUnVucygpIGNvdWxkIGJlIGEg
aGFzaCBvZiBvYmplY3QtPnJ1biBhbmQgdGhlbiB3ZSBjb3VsZCBjaGVhcGx5Ci0gICAgLy8gQVNT
RVJUIGhlcmUgdGhhdCB3ZSBkaWRuJ3QgY3JlYXRlIG11bHRpcGxlIG9iamVjdHMgZm9yIHRoZSBz
YW1lIGlubGluZS4KLSAgICByZXNvbHZlci5zZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRp
b25Gb3JJc29sYXRlZFJ1bigqaXNvbGF0ZWRSdW4sIHJlc29sdmVyLndoaXRlc3BhY2VDb2xsYXBz
aW5nU3RhdGUoKS5jdXJyZW50VHJhbnNpdGlvbigpKTsKLSAgICByZXNvbHZlci5pc29sYXRlZFJ1
bnMoKS5hcHBlbmQoQmlkaUlzb2xhdGVkUnVuKG9iaiwgcG9zLCByb290LCAqaXNvbGF0ZWRSdW4p
KTsKLSAgICByZXNvbHZlci5ydW5zKCkuYXBwZW5kUnVuKFdURk1vdmUoaXNvbGF0ZWRSdW4pKTsK
LX0KLQotY2xhc3MgSXNvbGF0ZVRyYWNrZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IElzb2xh
dGVUcmFja2VyKHVuc2lnbmVkIG5lc3RlZElzb2xhdGVDb3VudCkKLSAgICAgICAgOiBtX25lc3Rl
ZElzb2xhdGVDb3VudChuZXN0ZWRJc29sYXRlQ291bnQpCi0gICAgICAgICwgbV9oYXZlQWRkZWRG
YWtlUnVuRm9yUm9vdElzb2xhdGUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZW50
ZXJJc29sYXRlKCkgeyBtX25lc3RlZElzb2xhdGVDb3VudCsrOyB9Ci0gICAgdm9pZCBleGl0SXNv
bGF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9uZXN0ZWRJc29sYXRlQ291bnQgPj0gMSk7
Ci0gICAgICAgIG1fbmVzdGVkSXNvbGF0ZUNvdW50LS07Ci0gICAgICAgIGlmICghaW5Jc29sYXRl
KCkpCi0gICAgICAgICAgICBtX2hhdmVBZGRlZEZha2VSdW5Gb3JSb290SXNvbGF0ZSA9IGZhbHNl
OwotICAgIH0KLSAgICBib29sIGluSXNvbGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVzdGVkSXNv
bGF0ZUNvdW50OyB9Ci0KLSAgICAvLyBXZSBkb24ndCBjYXJlIGlmIHdlIGVuY291bnRlciBiaWRp
IGRpcmVjdGlvbmFsIG92ZXJyaWRlcy4KLSAgICB2b2lkIGVtYmVkKFVDaGFyRGlyZWN0aW9uLCBC
aWRpRW1iZWRkaW5nU291cmNlKSB7IH0KLSAgICB2b2lkIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5n
KCkgeyB9Ci0KLSAgICB2b2lkIGFkZEZha2VSdW5JZk5lY2Vzc2FyeShSZW5kZXJPYmplY3QmIG9i
aiwgdW5zaWduZWQgcG9zLCB1bnNpZ25lZCBlbmQsIFJlbmRlckVsZW1lbnQmIHJvb3QsIElubGlu
ZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCi0gICAgewotICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
dG8gYWRkIGEgZmFrZSBydW4gZm9yIGEgZ2l2ZW4gaXNvbGF0ZWQgc3BhbiBvbmNlIGR1cmluZyBl
YWNoIGNhbGwgdG8gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lLgotICAgICAgICAvLyBXZSdsbCBiZSBj
YWxsZWQgZm9yIGV2ZXJ5IHNwYW4gaW5zaWRlIHRoZSBpc29sYXRlZCBzcGFuIHNvIHdlIGp1c3Qg
aWdub3JlIHN1YnNlcXVlbnQgY2FsbHMuCi0gICAgICAgIC8vIFdlIGFsc28gYXZvaWQgY3JlYXRp
bmcgYSBmYWtlIHJ1biB1bnRpbCB3ZSBoaXQgYSBjaGlsZCB0aGF0IHdhcnJhbnRzIG9uZSwgZS5n
LiB3ZSBza2lwIGZsb2F0cy4KLSAgICAgICAgaWYgKFJlbmRlckJsb2NrOjpzaG91bGRTa2lwQ3Jl
YXRpbmdSdW5zRm9yT2JqZWN0KG9iaikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
ICghbV9oYXZlQWRkZWRGYWtlUnVuRm9yUm9vdElzb2xhdGUpIHsKLSAgICAgICAgICAgIC8vIG9i
aiBhbmQgcG9zIHRvZ2V0aGVyIGRlbm90ZSBhIHNpbmdsZSBwb3NpdGlvbiBpbiB0aGUgaW5saW5l
LCBmcm9tIHdoaWNoIHRoZSBwYXJzaW5nIG9mIHRoZSBpc29sYXRlIHdpbGwgc3RhcnQuCi0gICAg
ICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgcnVuIGJlY2F1
c2UgdGhpcyBpcyBpbXBsaWNpdDogaXQgaXMgZWl0aGVyIGVuZE9mTGluZSBvciB0aGUgZW5kIG9m
IHRoZQotICAgICAgICAgICAgLy8gaXNvbGF0ZSwgd2hlbiB3ZSBjYWxsIGNyZWF0ZUJpZGlSdW5z
Rm9yTGluZSBpdCB3aWxsIHN0b3AgYXQgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgotICAgICAgICAg
ICAgYWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShyZXNvbHZlciwgb2JqLCBwb3Ms
IHJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIG1faGF2ZUFkZGVkRmFrZVJ1bkZvclJvb3RJc29s
YXRlID0gdHJ1ZTsKLSAgICAgICAgTGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVj
dChudWxscHRyLCBwb3MsIGVuZCwgb2JqLCByZXNvbHZlcik7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHVuc2lnbmVkIG1fbmVzdGVkSXNvbGF0ZUNvdW50OwotICAgIGJvb2wgbV9oYXZlQWRkZWRG
YWtlUnVuRm9yUm9vdElzb2xhdGU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgdm9pZCBJbmxp
bmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKCkKLXsKLSAgICBpZiAoIW1fZW1wdHlS
dW4gJiYgIW1fZW9yLmF0RW5kKCkgJiYgIW1fcmVhY2hlZEVuZE9mTGluZSkgewotICAgICAgICAv
LyBLZWVwIHRyYWNrIG9mIHdoZW4gd2UgZW50ZXIvbGVhdmUgInVuaWNvZGUtYmlkaTogaXNvbGF0
ZSIgaW5saW5lcy4KLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBvdXIgc3RhdGUgZGVwZW5kaW5nIG9u
IGlmIHdlJ3JlIHN0YXJ0aW5nIGluIHRoZSBtaWRkbGUgb2Ygc3VjaCBhbiBpbmxpbmUuCi0gICAg
ICAgIC8vIEZJWE1FOiBDb3VsZCB0aGlzIGluaXRpYWxpemUgZnJvbSB0aGlzLT5pbklzb2xhdGUo
KSBpbnN0ZWFkIG9mIHdhbGtpbmcgdXAgdGhlIHJlbmRlciB0cmVlPwotICAgICAgICBJc29sYXRl
VHJhY2tlciBpc29sYXRlVHJhY2tlcihudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMobV9zb3IpKTsK
LSAgICAgICAgaW50IHN0YXJ0ID0gbV9zb3Iub2Zmc2V0KCk7Ci0gICAgICAgIFJlbmRlck9iamVj
dCogb2JqID0gbV9zb3IucmVuZGVyZXIoKTsKLSAgICAgICAgd2hpbGUgKG9iaiAmJiBvYmogIT0g
bV9lb3IucmVuZGVyZXIoKSAmJiBvYmogIT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xhdGUoKSkKLSAgICAgICAgICAgICAgICBp
c29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsIG9iai0+bGVu
Z3RoKCksICptX3Nvci5yb290KCksICp0aGlzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KCZtX3J1bnMsIHN0
YXJ0LCBvYmotPmxlbmd0aCgpLCAqb2JqLCAqdGhpcyk7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
c3RhcnQvb2JqIHNob3VsZCBiZSBhbiBJbmxpbmVJdGVyYXRvciBpbnN0ZWFkIG9mIHR3byBzZXBh
cmF0ZSB2YXJpYWJsZXMuCi0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgICAgICBvYmog
PSBiaWRpTmV4dFNraXBwaW5nRW1wdHlJbmxpbmVzKCptX3Nvci5yb290KCksIG9iaiwgJmlzb2xh
dGVUcmFja2VyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBwb3MgPSBvYmogPT0gbV9lb3IucmVuZGVyZXIoKSA/IG1fZW9yLm9mZnNldCgpIDog
VUlOVF9NQVg7Ci0gICAgICAgICAgICBpZiAob2JqID09IGVuZE9mTGluZS5yZW5kZXJlcigpICYm
IGVuZE9mTGluZS5vZmZzZXQoKSA8PSBwb3MpIHsKLSAgICAgICAgICAgICAgICBtX3JlYWNoZWRF
bmRPZkxpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIHBvcyA9IGVuZE9mTGluZS5vZmZzZXQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gYWRkIHJ1bnMgZm9y
IHplcm8tbGVuZ3RoIFJlbmRlck9iamVjdHMsIGp1c3QgZG9uJ3QgbWFrZSB0aGUgcnVuIGxhcmdl
ciB0aGFuIGl0IHNob3VsZCBiZQotICAgICAgICAgICAgaW50IGVuZCA9IG9iai0+bGVuZ3RoKCkg
PyBwb3MgKyAxIDogMDsKLSAgICAgICAgICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xhdGUo
KSkKLSAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3Nhcnko
Km9iaiwgc3RhcnQsIG9iai0+bGVuZ3RoKCksICptX3Nvci5yb290KCksICp0aGlzKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5z
Rm9yT2JqZWN0KCZtX3J1bnMsIHN0YXJ0LCBlbmQsICpvYmosICp0aGlzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1fZW9yLmluY3JlbWVudCgpOwotICAgICAgICBtX3NvciA9IG1fZW9yOwotICAg
IH0KLQotICAgIG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOwotICAgIG1fc3RhdHVzLmVv
ciA9IFVfT1RIRVJfTkVVVFJBTDsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIGJvb2wgSW5saW5l
QmlkaVJlc29sdmVyOjpuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCkgY29uc3QKLXsKLSAg
ICAvLyBXZSBkb24ndCBjb2xsZWN0IHJ1bnMgYmV5b25kIHRoZSBlbmRPZkxpbmUgcmVuZGVyZXIu
IFN0b3AgdHJhdmVyc2luZyB3aGVuIHRoZSBpdGVyYXRvciBtb3ZlcyB0byB0aGUgbmV4dCByZW5k
ZXJlciB0byBwcmV2ZW50IE8obl4yKS4KLSAgICByZXR1cm4gbV9jdXJyZW50LnJlbmRlcmVyKCkg
PT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lSXRlcmF0b3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRmMzNlNzhmYzFiOTZkMTM1ZjQ4NWNhZDZhODQ2Nzc4YTZhMDcxYTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lSXRlcmF0
b3IuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisKK0NvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0
OgorMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTGVnYWN5SW5saW5lSXRlcmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitVQ2hhckRpcmVjdGlvbiBMZWdhY3lJbmxpbmVJdGVyYXRvcjo6c3Vycm9nYXRlVGV4dERp
cmVjdGlvbihVQ2hhciBjdXJyZW50Q29kZVVuaXQpIGNvbnN0Cit7CisgICAgUmVuZGVyVGV4dCYg
dGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCptX3JlbmRlcmVyKTsKKyAgICBVQ2hhciBsZWFk
OworICAgIFVDaGFyIHRyYWlsOworICAgIGlmIChVMTZfSVNfTEVBRChjdXJyZW50Q29kZVVuaXQp
KSB7CisgICAgICAgIGxlYWQgPSBjdXJyZW50Q29kZVVuaXQ7CisgICAgICAgIHRyYWlsID0gdGV4
dC5jaGFyYWN0ZXJBdChtX3BvcyArIDEpOworICAgICAgICBpZiAoIVUxNl9JU19UUkFJTCh0cmFp
bCkpCisgICAgICAgICAgICByZXR1cm4gVV9PVEhFUl9ORVVUUkFMOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChVMTZfSVNfVFJBSUwoY3VycmVudENvZGVVbml0KSk7CisgICAgICAgIGxl
YWQgPSB0ZXh0LmNoYXJhY3RlckF0KG1fcG9zIC0gMSk7CisgICAgICAgIGlmICghVTE2X0lTX0xF
QUQobGVhZCkpCisgICAgICAgICAgICByZXR1cm4gVV9PVEhFUl9ORVVUUkFMOworICAgICAgICB0
cmFpbCA9IGN1cnJlbnRDb2RlVW5pdDsKKyAgICB9CisgICAgcmV0dXJuIHVfY2hhckRpcmVjdGlv
bihVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lSXRlcmF0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
YzRiNjdiOTExYzE2ODdjODA2Y2RmOTQ3NmRhYmM0YzcxODk0NjMwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmgKQEAgLTAs
MCArMSw1MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJCaWRpUnVuLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisj
aW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5o
IgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEJpZGlJc29sYXRlZFJ1biB7CisgICAg
QmlkaUlzb2xhdGVkUnVuKFJlbmRlck9iamVjdCYgb2JqZWN0LCB1bnNpZ25lZCBwb3NpdGlvbiwg
UmVuZGVyRWxlbWVudCYgcm9vdCwgQmlkaVJ1biYgcnVuVG9SZXBsYWNlKQorICAgICAgICA6IG9i
amVjdChvYmplY3QpCisgICAgICAgICwgcm9vdChyb290KQorICAgICAgICAsIHJ1blRvUmVwbGFj
ZShydW5Ub1JlcGxhY2UpCisgICAgICAgICwgcG9zaXRpb24ocG9zaXRpb24pCisgICAgeworICAg
IH0KKworICAgIFJlbmRlck9iamVjdCYgb2JqZWN0OworICAgIFJlbmRlckVsZW1lbnQmIHJvb3Q7
CisgICAgQmlkaVJ1biYgcnVuVG9SZXBsYWNlOworICAgIHVuc2lnbmVkIHBvc2l0aW9uOworfTsK
KworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIFJlbmRlcklubGluZSBzdWJ0cmVlcywgc3RlcHBp
bmcgYnkgY2hhcmFjdGVyIHdpdGhpbiB0aGUKKy8vIHRleHQgY2hpbGRyZW4uIExlZ2FjeUlubGlu
ZUl0ZXJhdG9yIHdpbGwgdXNlIG5leHQgdG8gZmluZCB0aGUgbmV4dCBSZW5kZXJUZXh0CisvLyBv
cHRpb25hbGx5IG5vdGlmeWluZyBhIEJpZGlSZXNvbHZlciBldmVyeSB0aW1lIGl0IHN0ZXBzIGlu
dG8vb3V0IG9mIGEgUmVuZGVySW5saW5lLgorY2xhc3MgTGVnYWN5SW5saW5lSXRlcmF0b3Igewor
cHVibGljOgorICAgIExlZ2FjeUlubGluZUl0ZXJhdG9yKCkKKyAgICB7CisgICAgfQorCisgICAg
TGVnYWN5SW5saW5lSXRlcmF0b3IoUmVuZGVyRWxlbWVudCogcm9vdCwgUmVuZGVyT2JqZWN0KiBv
LCB1bnNpZ25lZCBwKQorICAgICAgICA6IG1fcm9vdChyb290KQorICAgICAgICAsIG1fcmVuZGVy
ZXIobykKKyAgICAgICAgLCBtX3BvcyhwKQorICAgICAgICAsIG1fcmVmZXJzVG9FbmRPZlByZXZp
b3VzTm9kZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgewor
ICAgICAgICBzZXRSZW5kZXJlcihudWxscHRyKTsKKyAgICAgICAgc2V0T2Zmc2V0KDApOworICAg
ICAgICBzZXROZXh0QnJlYWthYmxlUG9zaXRpb24oc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKTsKKyAgICB9CisgICAgdm9pZCBtb3ZlVG9TdGFydE9mKFJlbmRlck9iamVjdCYg
b2JqZWN0KQorICAgIHsKKyAgICAgICAgbW92ZVRvKG9iamVjdCwgMCk7CisgICAgfQorCisgICAg
dm9pZCBtb3ZlVG8oUmVuZGVyT2JqZWN0JiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gbmV4dEJyZWFrID0gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKSkK
KyAgICB7CisgICAgICAgIHNldFJlbmRlcmVyKCZvYmplY3QpOworICAgICAgICBzZXRPZmZzZXQo
b2Zmc2V0KTsKKyAgICAgICAgc2V0TmV4dEJyZWFrYWJsZVBvc2l0aW9uKG5leHRCcmVhayk7Cisg
ICAgfQorCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyZXI7IH0KKyAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsg
bV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9CisgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3M7IH0KKyAgICB2b2lkIHNldE9mZnNldCh1bnNpZ25lZCBwb3NpdGlvbik7Cisg
ICAgUmVuZGVyRWxlbWVudCogcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdDsgfQorICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG5leHRCcmVha2FibGVQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXROZXh0QnJlYWthYmxl
UG9zaXRpb24oc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcG9zaXRpb24pIHsgbV9uZXh0QnJlYWth
YmxlUG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIGJvb2wgcmVmZXJzVG9FbmRPZlByZXZpb3Vz
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJzVG9FbmRPZlByZXZpb3VzTm9kZTsgfQorICAg
IHZvaWQgc2V0UmVmZXJzVG9FbmRPZlByZXZpb3VzTm9kZSgpOworCisgICAgdm9pZCBmYXN0SW5j
cmVtZW50SW5UZXh0Tm9kZSgpOworICAgIHZvaWQgaW5jcmVtZW50QnlDb2RlUG9pbnRJblRleHRO
b2RlKCk7CisgICAgdm9pZCBpbmNyZW1lbnQoSW5saW5lQmlkaVJlc29sdmVyKiA9IG51bGxwdHIp
OworICAgIHZvaWQgZmFzdERlY3JlbWVudCgpOworICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKKwor
ICAgIGJvb2wgYXRUZXh0UGFyYWdyYXBoU2VwYXJhdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpczxSZW5kZXJUZXh0PihtX3JlbmRlcmVyKSAmJiBtX3JlbmRlcmVyLT5wcmVzZXJ2
ZXNOZXdsaW5lKCkgJiYgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm1fcmVuZGVyZXIpLmNoYXJhY3Rl
ckF0KG1fcG9zKSA9PSAnXG4nOworICAgIH0KKyAgICAKKyAgICBib29sIGF0UGFyYWdyYXBoU2Vw
YXJhdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobV9yZW5kZXJlciAmJiBtX3Jl
bmRlcmVyLT5pc0JSKCkpIHx8IGF0VGV4dFBhcmFncmFwaFNlcGFyYXRvcigpOworICAgIH0KKwor
ICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdDsKKyAgICBVQ2hhciBwcmV2aW91c0luU2FtZU5vZGUo
KSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNv
bnN0OworCitwcml2YXRlOgorICAgIFVDaGFyIGNoYXJhY3RlckF0KHVuc2lnbmVkKSBjb25zdDsK
KworICAgIFVDaGFyRGlyZWN0aW9uIHN1cnJvZ2F0ZVRleHREaXJlY3Rpb24oVUNoYXIgY3VycmVu
dENvZGVVbml0KSBjb25zdDsKKworICAgIFJlbmRlckVsZW1lbnQqIG1fcm9vdCB7IG51bGxwdHIg
fTsKKyAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXIgeyBudWxscHRyIH07CisKKyAgICBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBtX25leHRCcmVha2FibGVQb3NpdGlvbjsKKyAgICB1bnNpZ25l
ZCBtX3BvcyB7IDAgfTsKKworICAgIC8vIFRoZXJlIGFyZSBhIGNvdXBsZSBwbGFjZXMgd2hlcmUg
d2Ugd2FudCB0byBkZWNyZW1lbnQgYW4gTGVnYWN5SW5saW5lSXRlcmF0b3IuCisgICAgLy8gVXN1
YWxseSB0aGlzIHRha2UgdGhlIGZvcm0gb2YgZGVjcmVtZW50aW5nIG1fcG9zOyBob3dldmVyLCBt
X3BvcyBtaWdodCBiZSAwLgorICAgIC8vIEhvd2V2ZXIsIHdlIHNob3VsZG4ndCBldmVyIG5lZWQg
dG8gZGVjcmVtZW50IGFuIExlZ2FjeUlubGluZUl0ZXJhdG9yIG1vcmUgdGhhbgorICAgIC8vIG9u
Y2UsIHNvIHJhdGhlciB0aGFuIGltcGxlbWVudGluZyBhIGRlY3JlbWVudCgpIGZ1bmN0aW9uIHdo
aWNoIHRyYXZlcnNlcworICAgIC8vIG5vZGVzLCB3ZSBjYW4gc2ltcGx5IGtlZXAgdHJhY2sgb2Yg
dGhpcyBzdGF0ZSBhbmQgaGFuZGxlIGl0LgorICAgIGJvb2wgbV9yZWZlcnNUb0VuZE9mUHJldmlv
dXNOb2RlIHsgZmFsc2UgfTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGVn
YWN5SW5saW5lSXRlcmF0b3ImIGl0MSwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGl0MikK
K3sKKyAgICByZXR1cm4gaXQxLm9mZnNldCgpID09IGl0Mi5vZmZzZXQoKSAmJiBpdDEucmVuZGVy
ZXIoKSA9PSBpdDIucmVuZGVyZXIoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgaXQxLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYg
aXQyKQoreworICAgIHJldHVybiBpdDEub2Zmc2V0KCkgIT0gaXQyLm9mZnNldCgpIHx8IGl0MS5y
ZW5kZXJlcigpICE9IGl0Mi5yZW5kZXJlcigpOworfQorCitzdGF0aWMgaW5saW5lIFVDaGFyRGly
ZWN0aW9uIGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEVV
bmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3sKKyAgICBpZiAodW5pY29kZUJpZGkgPT0gRW1iZWQp
CisgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMID8gVV9SSUdI
VF9UT19MRUZUX0VNQkVERElORyA6IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkc7CisgICAgcmV0
dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRfT1ZF
UlJJREUgOiBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBP
YnNlcnZlcj4KK3N0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3Qo
T2JzZXJ2ZXIqIG9ic2VydmVyLCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9i
c2VydmVyIHx8ICFvYmplY3QgfHwgIW9iamVjdC0+aXNSZW5kZXJJbmxpbmUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgp
OworICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IHN0eWxlLnVuaWNvZGVCaWRpKCk7Cisg
ICAgaWYgKHVuaWNvZGVCaWRpID09IFVCTm9ybWFsKSB7CisgICAgICAgIC8vIGh0dHA6Ly9kZXYu
dzMub3JnL2Nzc3dnL2NzczMtd3JpdGluZy1tb2Rlcy8jdW5pY29kZS1iaWRpCisgICAgICAgIC8v
ICJUaGUgZWxlbWVudCBkb2VzIG5vdCBvcGVuIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgZW1iZWRk
aW5nIHdpdGggcmVzcGVjdCB0byB0aGUgYmlkaXJlY3Rpb25hbCBhbGdvcml0aG0uIgorICAgICAg
ICAvLyBUaHVzIHdlIGlnbm9yZSBhbnkgcG9zc2libGUgZGlyPSBhdHRyaWJ1dGUgb24gdGhlIHNw
YW4uCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzSXNvbGF0ZWQodW5pY29kZUJp
ZGkpKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGV4cGxpY2l0IGVtYmVkZGluZ3MgYXJl
IGNvbW1pdHRlZCBiZWZvcmUgd2UgZW50ZXIgdGhlIGlzb2xhdGVkIGNvbnRlbnQuCisgICAgICAg
IG9ic2VydmVyLT5jb21taXRFeHBsaWNpdEVtYmVkZGluZygpOworICAgICAgICBvYnNlcnZlci0+
ZW50ZXJJc29sYXRlKCk7CisgICAgICAgIC8vIEVtYmVkZGluZy9PdmVycmlkZSBjaGFyYWN0ZXJz
IGltcGxpZWQgYnkgZGlyPSB3aWxsIGJlIGhhbmRsZWQgd2hlbgorICAgICAgICAvLyB3ZSBwcm9j
ZXNzIHRoZSBpc29sYXRlZCBzcGFuLCBub3Qgd2hlbiBsYXlpbmcgb3V0IHRoZSAicGFyZW50IiBy
dW4uCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW9ic2VydmVyLT5pbklzb2xh
dGUoKSkKKyAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oc3R5
bGUuZGlyZWN0aW9uKCksIHVuaWNvZGVCaWRpKSwgRnJvbVN0eWxlT3JET00pOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgT2JzZXJ2ZXI+CitzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5T2JzZXJ2ZXJX
aWxsRXhpdE9iamVjdChPYnNlcnZlciogb2JzZXJ2ZXIsIFJlbmRlck9iamVjdCogb2JqZWN0KQor
eworICAgIGlmICghb2JzZXJ2ZXIgfHwgIW9iamVjdCB8fCAhb2JqZWN0LT5pc1JlbmRlcklubGlu
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkgPSBv
YmplY3QtPnN0eWxlKCkudW5pY29kZUJpZGkoKTsKKyAgICBpZiAodW5pY29kZUJpZGkgPT0gVUJO
b3JtYWwpCisgICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkbyBmb3IgdW5pY29kZS1iaWRp
OiBub3JtYWwKKyAgICBpZiAoaXNJc29sYXRlZCh1bmljb2RlQmlkaSkpIHsKKyAgICAgICAgb2Jz
ZXJ2ZXItPmV4aXRJc29sYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBP
dGhlcndpc2Ugd2UgcG9wIGFueSBlbWJlZC9vdmVycmlkZSBjaGFyYWN0ZXIgd2UgYWRkZWQgd2hl
biB3ZSBvcGVuZWQgdGhpcyB0YWcuCisgICAgaWYgKCFvYnNlcnZlci0+aW5Jc29sYXRlKCkpCisg
ICAgICAgIG9ic2VydmVyLT5lbWJlZChVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsIEZyb21TdHls
ZU9yRE9NKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzSXRlcmF0b3JUYXJnZXQoUmVuZGVy
T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKG9iamVjdCk7IC8vIFRoZSBpdGVyYXRvciB3
aWxsIG9mIGNvdXJzZSByZXR1cm4gMCwgYnV0IGl0cyBub3QgYW4gZXhwZWN0ZWQgYXJndW1lbnQg
dG8gdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gb2JqZWN0LT5pc1RleHRPckxpbmVCcmVhaygp
IHx8IG9iamVjdC0+aXNGbG9hdGluZygpIHx8IG9iamVjdC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgfHwgb2JqZWN0LT5pc1JlcGxhY2VkKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBPYnNlcnZl
cj4KK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBuZXh0SW5saW5lUmVuZGVyZXJTa2lwcGlu
Z0VtcHR5KFJlbmRlckVsZW1lbnQmIHJvb3QsIFJlbmRlck9iamVjdCogY3VycmVudCwgT2JzZXJ2
ZXIqIG9ic2VydmVyKQoreworICAgIFJlbmRlck9iamVjdCogbmV4dCA9IG51bGxwdHI7CisKKyAg
ICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBuZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgaWYg
KCFpc0l0ZXJhdG9yVGFyZ2V0KGN1cnJlbnQpKSB7CisgICAgICAgICAgICBuZXh0ID0gZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4oKmN1cnJlbnQpLmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIG5v
dGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdChvYnNlcnZlciwgbmV4dCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIW5leHQpIHsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJl
bnQgIT0gJnJvb3QpIHsKKyAgICAgICAgICAgICAgICBub3RpZnlPYnNlcnZlcldpbGxFeGl0T2Jq
ZWN0KG9ic2VydmVyLCBjdXJyZW50KTsKKworICAgICAgICAgICAgICAgIG5leHQgPSBjdXJyZW50
LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7CisgICAgICAgICAg
ICAgICAgICAgIG5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdChvYnNlcnZlciwgbmV4dCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghbmV4dCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGlmIChpc0l0ZXJhdG9yVGFyZ2V0KG5leHQpIHx8IChpczxSZW5kZXJJbmxpbmU+KCpuZXh0KSAm
JiBpc0VtcHR5SW5saW5lKGRvd25jYXN0PFJlbmRlcklubGluZT4oKm5leHQpKSkpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY3VycmVudCA9IG5leHQ7CisgICAgfQorCisgICAgcmV0dXJu
IG5leHQ7Cit9CisKKy8vIFRoaXMgbWFrZXMgY2FsbGVycyBjbGVhbmVyIGFzIHRoZXkgZG9uJ3Qg
aGF2ZSB0byBzcGVjaWZ5IGEgdHlwZSBmb3IgdGhlIG9ic2VydmVyIHdoZW4gbm90IHByb3ZpZGlu
ZyBvbmUuCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogbmV4dElubGluZVJlbmRlcmVyU2tp
cHBpbmdFbXB0eShSZW5kZXJFbGVtZW50JiByb290LCBSZW5kZXJPYmplY3QqIGN1cnJlbnQpCit7
CisgICAgSW5saW5lQmlkaVJlc29sdmVyKiBvYnNlcnZlciA9IG51bGxwdHI7CisgICAgcmV0dXJu
IG5leHRJbmxpbmVSZW5kZXJlclNraXBwaW5nRW1wdHkocm9vdCwgY3VycmVudCwgb2JzZXJ2ZXIp
OworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogZmlyc3RJbmxpbmVSZW5kZXJlclNr
aXBwaW5nRW1wdHkoUmVuZGVyRWxlbWVudCYgcm9vdCwgSW5saW5lQmlkaVJlc29sdmVyKiByZXNv
bHZlciA9IG51bGxwdHIpCit7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHJvb3QuZmly
c3RDaGlsZCgpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgaWYgKGlzPFJlbmRlcklubGluZT4oKnJlbmRlcmVyKSkgeworICAgICAgICBub3RpZnlP
YnNlcnZlckVudGVyZWRPYmplY3QocmVzb2x2ZXIsIHJlbmRlcmVyKTsKKyAgICAgICAgaWYgKCFp
c0VtcHR5SW5saW5lKGRvd25jYXN0PFJlbmRlcklubGluZT4oKnJlbmRlcmVyKSkpCisgICAgICAg
ICAgICByZW5kZXJlciA9IG5leHRJbmxpbmVSZW5kZXJlclNraXBwaW5nRW1wdHkocm9vdCwgcmVu
ZGVyZXIsIHJlc29sdmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBOZXZlciBz
a2lwIGVtcHR5IGlubGluZXMuCisgICAgICAgICAgICBpZiAocmVzb2x2ZXIpCisgICAgICAgICAg
ICAgICAgcmVzb2x2ZXItPmNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVuZGVyZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogVW5pZnkg
dGhpcyB3aXRoIHRoZSBuZXh0IGNhbGwgYWJvdmUuCisgICAgaWYgKHJlbmRlcmVyICYmICFpc0l0
ZXJhdG9yVGFyZ2V0KHJlbmRlcmVyKSkKKyAgICAgICAgcmVuZGVyZXIgPSBuZXh0SW5saW5lUmVu
ZGVyZXJTa2lwcGluZ0VtcHR5KHJvb3QsIHJlbmRlcmVyLCByZXNvbHZlcik7CisKKyAgICBpZiAo
cmVzb2x2ZXIpCisgICAgICAgIHJlc29sdmVyLT5jb21taXRFeHBsaWNpdEVtYmVkZGluZygpOwor
ICAgIHJldHVybiByZW5kZXJlcjsKK30KKworaW5saW5lIHZvaWQgTGVnYWN5SW5saW5lSXRlcmF0
b3I6OmZhc3RJbmNyZW1lbnRJblRleHROb2RlKCkKK3sKKyAgICBBU1NFUlQobV9yZW5kZXJlcik7
CisgICAgQVNTRVJUKG1fcG9zIDw9IGRvd25jYXN0PFJlbmRlclRleHQ+KCptX3JlbmRlcmVyKS50
ZXh0KCkubGVuZ3RoKCkpOworICAgICsrbV9wb3M7Cit9CisKK2lubGluZSB2b2lkIExlZ2FjeUlu
bGluZUl0ZXJhdG9yOjppbmNyZW1lbnRCeUNvZGVQb2ludEluVGV4dE5vZGUoKQoreworICAgIEFT
U0VSVChtX3JlbmRlcmVyKTsKKyAgICBjb25zdCBhdXRvJiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVy
VGV4dD4oKm1fcmVuZGVyZXIpLnRleHQoKTsKKyAgICBBU1NFUlQobV9wb3MgPCB0ZXh0Lmxlbmd0
aCgpKTsKKyAgICBpZiAodGV4dC5pczhCaXQoKSkgeworICAgICAgICArK21fcG9zOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgIFUxNl9ORVhUKHRl
eHQuY2hhcmFjdGVyczE2KCksIG1fcG9zLCB0ZXh0Lmxlbmd0aCgpLCBjaGFyYWN0ZXIpOworfQor
CitpbmxpbmUgdm9pZCBMZWdhY3lJbmxpbmVJdGVyYXRvcjo6c2V0T2Zmc2V0KHVuc2lnbmVkIHBv
c2l0aW9uKQoreworICAgIEFTU0VSVChwb3NpdGlvbiA8PSBVSU5UX01BWCAtIDEwKTsgLy8gU2Fu
aXR5IGNoZWNrCisgICAgbV9wb3MgPSBwb3NpdGlvbjsKK30KKworaW5saW5lIHZvaWQgTGVnYWN5
SW5saW5lSXRlcmF0b3I6OnNldFJlZmVyc1RvRW5kT2ZQcmV2aW91c05vZGUoKQoreworICAgIEFT
U0VSVCghbV9wb3MpOworICAgIEFTU0VSVCghbV9yZWZlcnNUb0VuZE9mUHJldmlvdXNOb2RlKTsK
KyAgICBtX3JlZmVyc1RvRW5kT2ZQcmV2aW91c05vZGUgPSB0cnVlOworfQorCisKK2lubGluZSB2
b2lkIExlZ2FjeUlubGluZUl0ZXJhdG9yOjppbmNyZW1lbnQoSW5saW5lQmlkaVJlc29sdmVyKiBy
ZXNvbHZlcikKK3sKKyAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoaXM8UmVuZGVyVGV4dD4oKm1fcmVuZGVyZXIpKSB7CisgICAgICAgIGZhc3RJbmNyZW1lbnRJ
blRleHROb2RlKCk7CisgICAgICAgIGlmIChtX3BvcyA8IGRvd25jYXN0PFJlbmRlclRleHQ+KCpt
X3JlbmRlcmVyKS50ZXh0KCkubGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIC8vIG5leHQgY2FuIHJldHVybiBudWxscHRyCisgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0g
bmV4dElubGluZVJlbmRlcmVyU2tpcHBpbmdFbXB0eSgqbV9yb290LCBtX3JlbmRlcmVyLCByZXNv
bHZlcik7CisgICAgaWYgKG5leHQpCisgICAgICAgIG1vdmVUb1N0YXJ0T2YoKm5leHQpOworICAg
IGVsc2UKKyAgICAgICAgY2xlYXIoKTsKK30KKworaW5saW5lIHZvaWQgTGVnYWN5SW5saW5lSXRl
cmF0b3I6OmZhc3REZWNyZW1lbnQoKQoreworICAgIEFTU0VSVCghcmVmZXJzVG9FbmRPZlByZXZp
b3VzTm9kZSgpKTsKKyAgICBpZiAobV9wb3MpCisgICAgICAgIHNldE9mZnNldChtX3BvcyAtIDEp
OworICAgIGVsc2UKKyAgICAgICAgc2V0UmVmZXJzVG9FbmRPZlByZXZpb3VzTm9kZSgpOworfQor
CitpbmxpbmUgYm9vbCBMZWdhY3lJbmxpbmVJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9yZW5kZXJlcjsKK30KKworaW5saW5lIFVDaGFyIExlZ2FjeUlubGluZUl0ZXJh
dG9yOjpjaGFyYWN0ZXJBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoIWlzPFJl
bmRlclRleHQ+KG1fcmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJUZXh0PigqbV9yZW5kZXJlcikuY2hhcmFjdGVyQXQoaW5kZXgpOworfQor
CitpbmxpbmUgVUNoYXIgTGVnYWN5SW5saW5lSXRlcmF0b3I6OmN1cnJlbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBjaGFyYWN0ZXJBdChtX3Bvcyk7Cit9CisKK2lubGluZSBVQ2hhciBMZWdhY3lJ
bmxpbmVJdGVyYXRvcjo6cHJldmlvdXNJblNhbWVOb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y2hhcmFjdGVyQXQobV9wb3MgLSAxKTsKK30KKworQUxXQVlTX0lOTElORSBVQ2hhckRpcmVjdGlv
biBMZWdhY3lJbmxpbmVJdGVyYXRvcjo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoVU5M
SUtFTFkoIW1fcmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gVV9PVEhFUl9ORVVUUkFMOworCisg
ICAgaWYgKExJS0VMWShpczxSZW5kZXJUZXh0PigqbV9yZW5kZXJlcikpKSB7CisgICAgICAgIFVD
aGFyIGNvZGVVbml0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm1fcmVuZGVyZXIpLmNoYXJhY3Rl
ckF0KG1fcG9zKTsKKyAgICAgICAgaWYgKExJS0VMWShVMTZfSVNfU0lOR0xFKGNvZGVVbml0KSkp
CisgICAgICAgICAgICByZXR1cm4gdV9jaGFyRGlyZWN0aW9uKGNvZGVVbml0KTsKKyAgICAgICAg
cmV0dXJuIHN1cnJvZ2F0ZVRleHREaXJlY3Rpb24oY29kZVVuaXQpOworICAgIH0KKworICAgIGlm
IChtX3JlbmRlcmVyLT5pc0xpc3RNYXJrZXIoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVuZGVyZXIt
PnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVV9MRUZUX1RPX1JJR0hUIDogVV9S
SUdIVF9UT19MRUZUOworCisgICAgcmV0dXJuIFVfT1RIRVJfTkVVVFJBTDsKK30KKwordGVtcGxh
dGU8PgoraW5saW5lIHZvaWQgSW5saW5lQmlkaVJlc29sdmVyOjppbmNyZW1lbnRJbnRlcm5hbCgp
Cit7CisgICAgbV9jdXJyZW50LmluY3JlbWVudCh0aGlzKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIGlzSXNvbGF0ZWRJbmxpbmUoUmVuZGVyT2JqZWN0JiBvYmplY3QpCit7CisgICAgcmV0dXJu
IG9iamVjdC5pc1JlbmRlcklubGluZSgpICYmIGlzSXNvbGF0ZWQob2JqZWN0LnN0eWxlKCkudW5p
Y29kZUJpZGkoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBoaWdoZXN0Q29u
dGFpbmluZ0lzb2xhdGVXaXRoaW5Sb290KFJlbmRlck9iamVjdCYgaW5pdGlhbE9iamVjdCwgUmVu
ZGVyT2JqZWN0KiByb290KQoreworICAgIFJlbmRlck9iamVjdCogY29udGFpbmluZ0lzb2xhdGVP
YmplY3QgPSBudWxscHRyOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSAmaW5pdGlh
bE9iamVjdDsgb2JqZWN0ICYmIG9iamVjdCAhPSByb290OyBvYmplY3QgPSBvYmplY3QtPnBhcmVu
dCgpKSB7CisgICAgICAgIGlmIChpc0lzb2xhdGVkSW5saW5lKCpvYmplY3QpKQorICAgICAgICAg
ICAgY29udGFpbmluZ0lzb2xhdGVPYmplY3QgPSBvYmplY3Q7CisgICAgfQorICAgIHJldHVybiBj
b250YWluaW5nSXNvbGF0ZU9iamVjdDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBudW1i
ZXJPZklzb2xhdGVBbmNlc3RvcnMoY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHR5cGVkZWYgUmVuZGVyT2JqZWN0KiBSZW5k
ZXJPYmplY3RQdHI7CisgICAgZm9yIChSZW5kZXJPYmplY3RQdHIgb2JqZWN0ID0gaXRlci5yZW5k
ZXJlcigpLCByb290ID0gaXRlci5yb290KCk7IG9iamVjdCAmJiBvYmplY3QgIT0gcm9vdDsgb2Jq
ZWN0ID0gb2JqZWN0LT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoaXNJc29sYXRlZElubGluZSgq
b2JqZWN0KSkKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgfQorICAgIHJldHVybiBjb3VudDsK
K30KKworLy8gRklYTUU6IFRoaXMgYmVsb25ncyBvbiBJbmxpbmVCaWRpUmVzb2x2ZXIsIGV4Y2Vw
dCBpdCdzIGEgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24KKy8vIG9mIEJpZGlSZXNvbHZlciB3aGlj
aCBrbm93cyBub3RoaW5nIGFib3V0IFJlbmRlck9iamVjdHMuCitzdGF0aWMgaW5saW5lIHZvaWQg
YWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJl
c29sdmVyLCBSZW5kZXJPYmplY3QmIG9iaiwgdW5zaWduZWQgcG9zLCBSZW5kZXJFbGVtZW50JiBy
b290KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiBpc29sYXRlZFJ1biA9IG1ha2VV
bmlxdWU8QmlkaVJ1bj4ocG9zLCBwb3MsIG9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZl
ci5kaXIoKSk7CisgICAgLy8gRklYTUU6IGlzb2xhdGVkUnVucygpIGNvdWxkIGJlIGEgaGFzaCBv
ZiBvYmplY3QtPnJ1biBhbmQgdGhlbiB3ZSBjb3VsZCBjaGVhcGx5CisgICAgLy8gQVNTRVJUIGhl
cmUgdGhhdCB3ZSBkaWRuJ3QgY3JlYXRlIG11bHRpcGxlIG9iamVjdHMgZm9yIHRoZSBzYW1lIGlu
bGluZS4KKyAgICByZXNvbHZlci5zZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJ
c29sYXRlZFJ1bigqaXNvbGF0ZWRSdW4sIHJlc29sdmVyLndoaXRlc3BhY2VDb2xsYXBzaW5nU3Rh
dGUoKS5jdXJyZW50VHJhbnNpdGlvbigpKTsKKyAgICByZXNvbHZlci5pc29sYXRlZFJ1bnMoKS5h
cHBlbmQoQmlkaUlzb2xhdGVkUnVuKG9iaiwgcG9zLCByb290LCAqaXNvbGF0ZWRSdW4pKTsKKyAg
ICByZXNvbHZlci5ydW5zKCkuYXBwZW5kUnVuKFdURk1vdmUoaXNvbGF0ZWRSdW4pKTsKK30KKwor
Y2xhc3MgSXNvbGF0ZVRyYWNrZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IElzb2xhdGVUcmFj
a2VyKHVuc2lnbmVkIG5lc3RlZElzb2xhdGVDb3VudCkKKyAgICAgICAgOiBtX25lc3RlZElzb2xh
dGVDb3VudChuZXN0ZWRJc29sYXRlQ291bnQpCisgICAgICAgICwgbV9oYXZlQWRkZWRGYWtlUnVu
Rm9yUm9vdElzb2xhdGUoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZW50ZXJJc29s
YXRlKCkgeyBtX25lc3RlZElzb2xhdGVDb3VudCsrOyB9CisgICAgdm9pZCBleGl0SXNvbGF0ZSgp
CisgICAgeworICAgICAgICBBU1NFUlQobV9uZXN0ZWRJc29sYXRlQ291bnQgPj0gMSk7CisgICAg
ICAgIG1fbmVzdGVkSXNvbGF0ZUNvdW50LS07CisgICAgICAgIGlmICghaW5Jc29sYXRlKCkpCisg
ICAgICAgICAgICBtX2hhdmVBZGRlZEZha2VSdW5Gb3JSb290SXNvbGF0ZSA9IGZhbHNlOworICAg
IH0KKyAgICBib29sIGluSXNvbGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVzdGVkSXNvbGF0ZUNv
dW50OyB9CisKKyAgICAvLyBXZSBkb24ndCBjYXJlIGlmIHdlIGVuY291bnRlciBiaWRpIGRpcmVj
dGlvbmFsIG92ZXJyaWRlcy4KKyAgICB2b2lkIGVtYmVkKFVDaGFyRGlyZWN0aW9uLCBCaWRpRW1i
ZWRkaW5nU291cmNlKSB7IH0KKyAgICB2b2lkIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCkgeyB9
CisKKyAgICB2b2lkIGFkZEZha2VSdW5JZk5lY2Vzc2FyeShSZW5kZXJPYmplY3QmIG9iaiwgdW5z
aWduZWQgcG9zLCB1bnNpZ25lZCBlbmQsIFJlbmRlckVsZW1lbnQmIHJvb3QsIElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIpCisgICAgeworICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gYWRk
IGEgZmFrZSBydW4gZm9yIGEgZ2l2ZW4gaXNvbGF0ZWQgc3BhbiBvbmNlIGR1cmluZyBlYWNoIGNh
bGwgdG8gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lLgorICAgICAgICAvLyBXZSdsbCBiZSBjYWxsZWQg
Zm9yIGV2ZXJ5IHNwYW4gaW5zaWRlIHRoZSBpc29sYXRlZCBzcGFuIHNvIHdlIGp1c3QgaWdub3Jl
IHN1YnNlcXVlbnQgY2FsbHMuCisgICAgICAgIC8vIFdlIGFsc28gYXZvaWQgY3JlYXRpbmcgYSBm
YWtlIHJ1biB1bnRpbCB3ZSBoaXQgYSBjaGlsZCB0aGF0IHdhcnJhbnRzIG9uZSwgZS5nLiB3ZSBz
a2lwIGZsb2F0cy4KKyAgICAgICAgaWYgKFJlbmRlckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRpbmdS
dW5zRm9yT2JqZWN0KG9iaikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghbV9o
YXZlQWRkZWRGYWtlUnVuRm9yUm9vdElzb2xhdGUpIHsKKyAgICAgICAgICAgIC8vIG9iaiBhbmQg
cG9zIHRvZ2V0aGVyIGRlbm90ZSBhIHNpbmdsZSBwb3NpdGlvbiBpbiB0aGUgaW5saW5lLCBmcm9t
IHdoaWNoIHRoZSBwYXJzaW5nIG9mIHRoZSBpc29sYXRlIHdpbGwgc3RhcnQuCisgICAgICAgICAg
ICAvLyBXZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgcnVuIGJlY2F1c2UgdGhp
cyBpcyBpbXBsaWNpdDogaXQgaXMgZWl0aGVyIGVuZE9mTGluZSBvciB0aGUgZW5kIG9mIHRoZQor
ICAgICAgICAgICAgLy8gaXNvbGF0ZSwgd2hlbiB3ZSBjYWxsIGNyZWF0ZUJpZGlSdW5zRm9yTGlu
ZSBpdCB3aWxsIHN0b3AgYXQgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgorICAgICAgICAgICAgYWRk
UGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShyZXNvbHZlciwgb2JqLCBwb3MsIHJvb3Qp
OworICAgICAgICB9CisgICAgICAgIG1faGF2ZUFkZGVkRmFrZVJ1bkZvclJvb3RJc29sYXRlID0g
dHJ1ZTsKKyAgICAgICAgTGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdChudWxs
cHRyLCBwb3MsIGVuZCwgb2JqLCByZXNvbHZlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIHVu
c2lnbmVkIG1fbmVzdGVkSXNvbGF0ZUNvdW50OworICAgIGJvb2wgbV9oYXZlQWRkZWRGYWtlUnVu
Rm9yUm9vdElzb2xhdGU7Cit9OworCit0ZW1wbGF0ZTw+CitpbmxpbmUgdm9pZCBJbmxpbmVCaWRp
UmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKCkKK3sKKyAgICBpZiAoIW1fZW1wdHlSdW4gJiYg
IW1fZW9yLmF0RW5kKCkgJiYgIW1fcmVhY2hlZEVuZE9mTGluZSkgeworICAgICAgICAvLyBLZWVw
IHRyYWNrIG9mIHdoZW4gd2UgZW50ZXIvbGVhdmUgInVuaWNvZGUtYmlkaTogaXNvbGF0ZSIgaW5s
aW5lcy4KKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBvdXIgc3RhdGUgZGVwZW5kaW5nIG9uIGlmIHdl
J3JlIHN0YXJ0aW5nIGluIHRoZSBtaWRkbGUgb2Ygc3VjaCBhbiBpbmxpbmUuCisgICAgICAgIC8v
IEZJWE1FOiBDb3VsZCB0aGlzIGluaXRpYWxpemUgZnJvbSB0aGlzLT5pbklzb2xhdGUoKSBpbnN0
ZWFkIG9mIHdhbGtpbmcgdXAgdGhlIHJlbmRlciB0cmVlPworICAgICAgICBJc29sYXRlVHJhY2tl
ciBpc29sYXRlVHJhY2tlcihudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMobV9zb3IpKTsKKyAgICAg
ICAgaW50IHN0YXJ0ID0gbV9zb3Iub2Zmc2V0KCk7CisgICAgICAgIFJlbmRlck9iamVjdCogb2Jq
ID0gbV9zb3IucmVuZGVyZXIoKTsKKyAgICAgICAgd2hpbGUgKG9iaiAmJiBvYmogIT0gbV9lb3Iu
cmVuZGVyZXIoKSAmJiBvYmogIT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAg
IGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xhdGUoKSkKKyAgICAgICAgICAgICAgICBpc29sYXRl
VHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsIG9iai0+bGVuZ3RoKCks
ICptX3Nvci5yb290KCksICp0aGlzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KCZtX3J1bnMsIHN0YXJ0LCBv
YmotPmxlbmd0aCgpLCAqb2JqLCAqdGhpcyk7CisgICAgICAgICAgICAvLyBGSVhNRTogc3RhcnQv
b2JqIHNob3VsZCBiZSBhbiBMZWdhY3lJbmxpbmVJdGVyYXRvciBpbnN0ZWFkIG9mIHR3byBzZXBh
cmF0ZSB2YXJpYWJsZXMuCisgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgICAgICBvYmog
PSBuZXh0SW5saW5lUmVuZGVyZXJTa2lwcGluZ0VtcHR5KCptX3Nvci5yb290KCksIG9iaiwgJmlz
b2xhdGVUcmFja2VyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2JqKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBwb3MgPSBvYmogPT0gbV9lb3IucmVuZGVyZXIoKSA/IG1fZW9yLm9mZnNldCgp
IDogVUlOVF9NQVg7CisgICAgICAgICAgICBpZiAob2JqID09IGVuZE9mTGluZS5yZW5kZXJlcigp
ICYmIGVuZE9mTGluZS5vZmZzZXQoKSA8PSBwb3MpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWNo
ZWRFbmRPZkxpbmUgPSB0cnVlOworICAgICAgICAgICAgICAgIHBvcyA9IGVuZE9mTGluZS5vZmZz
ZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gYWRkIHJ1bnMg
Zm9yIHplcm8tbGVuZ3RoIFJlbmRlck9iamVjdHMsIGp1c3QgZG9uJ3QgbWFrZSB0aGUgcnVuIGxh
cmdlciB0aGFuIGl0IHNob3VsZCBiZQorICAgICAgICAgICAgaW50IGVuZCA9IG9iai0+bGVuZ3Ro
KCkgPyBwb3MgKyAxIDogMDsKKyAgICAgICAgICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xh
dGUoKSkKKyAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3Nh
cnkoKm9iaiwgc3RhcnQsIG9iai0+bGVuZ3RoKCksICptX3Nvci5yb290KCksICp0aGlzKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRS
dW5zRm9yT2JqZWN0KCZtX3J1bnMsIHN0YXJ0LCBlbmQsICpvYmosICp0aGlzKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1fZW9yLmluY3JlbWVudCgpOworICAgICAgICBtX3NvciA9IG1fZW9yOwor
ICAgIH0KKworICAgIG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOworICAgIG1fc3RhdHVz
LmVvciA9IFVfT1RIRVJfTkVVVFJBTDsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgSW5s
aW5lQmlkaVJlc29sdmVyOjpuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCkgY29uc3QKK3sK
KyAgICAvLyBXZSBkb24ndCBjb2xsZWN0IHJ1bnMgYmV5b25kIHRoZSBlbmRPZkxpbmUgcmVuZGVy
ZXIuIFN0b3AgdHJhdmVyc2luZyB3aGVuIHRoZSBpdGVyYXRvciBtb3ZlcyB0byB0aGUgbmV4dCBy
ZW5kZXJlciB0byBwcmV2ZW50IE8obl4yKS4KKyAgICByZXR1cm4gbV9jdXJyZW50LnJlbmRlcmVy
KCkgPT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAppbmRleCA3
MjljNTRkNDY3YjJmYzI0NDNhNzU5NTQ5YWU5M2YyMjczODIyNzg3Li4xNzkzOTVkZmQyNTZlM2Vi
MDY3YzlkOWJhYWQzNTRlMWE0ZTUxNWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUxpbmVMYXlvdXQuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJCcmVh
a2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJGbG9hdGluZ09iamVjdHMuaCIKICNpbmNsdWRlICJI
VE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKICNpbmNsdWRlICJJbmxpbmVXYWxrZXIuaCIKICNpbmNs
dWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5s
aW5lRWxlbWVudEJveC5oIgorI2luY2x1ZGUgIkxlZ2FjeUlubGluZUl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkxpbmVMYXlvdXRTdGF0ZS5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTY3LDcgKzY3LDcgQEAgTGVnYWN5TGluZUxheW91
dDo6fkxlZ2FjeUxpbmVMYXlvdXQoKQogICAgIGxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hUcmVl
KCk7CiB9OwogCi1zdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0
aW9uJiBkaXIsIElubGluZUl0ZXJhdG9yIGl0ZXIpCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJl
Y3Rpb25hbGl0eShUZXh0RGlyZWN0aW9uJiBkaXIsIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZXIp
CiB7CiAgICAgd2hpbGUgKCFpdGVyLmF0RW5kKCkpIHsKICAgICAgICAgaWYgKGl0ZXIuYXRQYXJh
Z3JhcGhTZXBhcmF0b3IoKSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0
OjphcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+KiBydW5zLCBpbnQgc3Rh
cnQKIAogICAgIExpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlJiBsaW5lV2hpdGVzcGFjZUNv
bGxhcHNpbmdTdGF0ZSA9IHJlc29sdmVyLndoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUoKTsKICAg
ICBib29sIGhhdmVOZXh0VHJhbnNpdGlvbiA9IChsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0
ZS5jdXJyZW50VHJhbnNpdGlvbigpIDwgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUubnVt
VHJhbnNpdGlvbnMoKSk7Ci0gICAgSW5saW5lSXRlcmF0b3IgbmV4dFRyYW5zaXRpb247CisgICAg
TGVnYWN5SW5saW5lSXRlcmF0b3IgbmV4dFRyYW5zaXRpb247CiAgICAgaWYgKGhhdmVOZXh0VHJh
bnNpdGlvbikKICAgICAgICAgbmV4dFRyYW5zaXRpb24gPSBsaW5lV2hpdGVzcGFjZUNvbGxhcHNp
bmdTdGF0ZS50cmFuc2l0aW9ucygpW2xpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmN1cnJl
bnRUcmFuc2l0aW9uKCldOwogICAgIGlmIChsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5i
ZXR3ZWVuVHJhbnNpdGlvbnMoKSkgewpAQCAtMTE2OSw3ICsxMTY5LDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShJbmxpbmVCaWRpUmVzb2x2ZXIm
IHJlc29sdmVyLAogfQogCiAvLyBGSVhNRTogQmlkaVJlc29sdmVyIHNob3VsZCBoYXZlIHRoaXMg
bG9naWMuCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElu
bGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsIEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRp
UnVucywgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZE9mUnVucywgVmlzdWFsRGlyZWN0aW9uT3Zl
cnJpZGUgb3ZlcnJpZGUsIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQorc3RhdGljIGlu
bGluZSB2b2lkIGNvbnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXIm
IHRvcFJlc29sdmVyLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExlZ2Fj
eUlubGluZUl0ZXJhdG9yJiBlbmRPZlJ1bnMsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJy
aWRlLCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKIHsKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHBhc3MgYSBCaWRpUnVuTGlzdCBpbnRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZSBpbnN0
ZWFkCiAgICAgLy8gb2YgdGhlIHJlc29sdmVyIG93bmluZyB0aGUgcnVucy4KQEAgLTExOTgsNyAr
MTE5OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQo
SW5saW5lQmlkaVJlc29sdmVyJiB0b3BSZXNvbHZlciwKICAgICAgICAgRVVuaWNvZGVCaWRpIHVu
aWNvZGVCaWRpID0gaXNvbGF0ZWRJbmxpbmUtPnN0eWxlKCkudW5pY29kZUJpZGkoKTsKICAgICAg
ICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CiAgICAgICAgIGlmICh1bmljb2RlQmlkaSA9PSBQ
bGFpbnRleHQpCi0gICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShkaXJlY3Rpb24s
IElubGluZUl0ZXJhdG9yKGlzb2xhdGVkSW5saW5lLCAmaXNvbGF0ZWRSdW4ub2JqZWN0LCAwKSk7
CisgICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShkaXJlY3Rpb24sIExlZ2FjeUlu
bGluZUl0ZXJhdG9yKGlzb2xhdGVkSW5saW5lLCAmaXNvbGF0ZWRSdW4ub2JqZWN0LCAwKSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpID09IElzb2xhdGUg
fHwgdW5pY29kZUJpZGkgPT0gSXNvbGF0ZU92ZXJyaWRlKTsKICAgICAgICAgICAgIGRpcmVjdGlv
biA9IGlzb2xhdGVkSW5saW5lLT5zdHlsZSgpLmRpcmVjdGlvbigpOwpAQCAtMTIxMCw3ICsxMjEw
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxp
bmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLAogICAgICAgICAvLyBUaGUgc3RhcnRpbmcgcG9z
aXRpb24gaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgcnVuIHdpdGhpbiB0aGUgaXNvbGF0
ZSB0aGF0IHdhcyBpZGVudGlmaWVkCiAgICAgICAgIC8vIGR1cmluZyB0aGUgZWFybGllciBjYWxs
IHRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZS4gVGhpcyBjYW4gYmUgYnV0IGlzIG5vdCBuZWNlc3Nh
cmlseSB0aGUKICAgICAgICAgLy8gZmlyc3QgcnVuIHdpdGhpbiB0aGUgaXNvbGF0ZS4KLSAgICAg
ICAgSW5saW5lSXRlcmF0b3IgaXRlciA9IElubGluZUl0ZXJhdG9yKGlzb2xhdGVkSW5saW5lLCAm
c3RhcnRPYmplY3QsIGlzb2xhdGVkUnVuLnBvc2l0aW9uKTsKKyAgICAgICAgTGVnYWN5SW5saW5l
SXRlcmF0b3IgaXRlciA9IExlZ2FjeUlubGluZUl0ZXJhdG9yKGlzb2xhdGVkSW5saW5lLCAmc3Rh
cnRPYmplY3QsIGlzb2xhdGVkUnVuLnBvc2l0aW9uKTsKICAgICAgICAgaXNvbGF0ZWRSZXNvbHZl
ci5zZXRQb3NpdGlvbklnbm9yaW5nTmVzdGVkSXNvbGF0ZXMoaXRlcik7CiAKICAgICAgICAgLy8g
V2Ugc3RvcCBhdCB0aGUgbmV4dCBlbmQgb2YgbGluZTsgd2UgbWF5IHJlLWVudGVyIHRoaXMgaXNv
bGF0ZSBpbiB0aGUgbmV4dCBjYWxsIHRvIGNvbnN0cnVjdEJpZGlSdW5zKCkuCkBAIC0xMjM2LDcg
KzEyMzYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50
KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsCiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24g
Y29uc3RydWN0cyBsaW5lIGJveGVzIGZvciBhbGwgb2YgdGhlIHRleHQgcnVucyBpbiB0aGUgcmVz
b2x2ZXIgYW5kIGNvbXB1dGVzIHRoZWlyIHBvc2l0aW9uLgotTGVnYWN5Um9vdElubGluZUJveCog
TGVnYWN5TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJp
ZGlMZXZlbCwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBJbmxpbmVJdGVy
YXRvciYgZW5kLCBMaW5lSW5mbyYgbGluZUluZm8sIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYgdmVy
dGljYWxQb3NpdGlvbkNhY2hlLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBXb3JkTWVhc3Vy
ZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQorTGVnYWN5Um9vdElubGluZUJveCogTGVnYWN5TGlu
ZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZlbCwg
QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgZW5kLCBMaW5lSW5mbyYgbGluZUluZm8sIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYgdmVydGlj
YWxQb3NpdGlvbkNhY2hlLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBXb3JkTWVhc3VyZW1l
bnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogewogICAgIGlmICghYmlkaVJ1bnMucnVuQ291bnQoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMzM2LDcgKzEzMzYsNyBAQCB2b2lkIExlZ2Fj
eUxpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgYm9vbCBoYQogCiAgICAgLy8gV2UgYWxzbyBmaW5kIHRoZSBmaXJzdCBjbGVhbiBsaW5l
IGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAgICAvLyBp
ZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRs
aW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCi0gICAgSW5saW5lSXRlcmF0b3IgY2xlYW5MaW5lU3Rh
cnQ7CisgICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7CiAgICAgQmlkaVN0
YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOwogICAgIGlmICghbGF5b3V0U3RhdGUuaXNGdWxsTGF5
b3V0KCkgJiYgc3RhcnRMaW5lKQogICAgICAgICBkZXRlcm1pbmVFbmRQb3NpdGlvbihsYXlvdXRT
dGF0ZSwgc3RhcnRMaW5lLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CkBA
IC0xMzY5LDcgKzEzNjksNyBAQCB2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRG
bG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgYm9vbCBoYQogfQogCiAvLyBCZWZv
cmUgcmVzdGFydGluZyB0aGUgbGF5b3V0IGxvb3Agd2l0aCBhIG5ldyBsb2dpY2FsSGVpZ2h0LCBy
ZW1vdmUgYWxsIGZsb2F0cyB0aGF0IHdlcmUgYWRkZWQgYW5kIHJlc2V0IHRoZSByZXNvbHZlci4K
LWlubGluZSBjb25zdCBJbmxpbmVJdGVyYXRvciYgTGVnYWN5TGluZUxheW91dDo6cmVzdGFydExh
eW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExheW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5
b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0LCAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsICBjb25zdCBJbmxpbmVJ
dGVyYXRvciYgb2xkRW5kKQoraW5saW5lIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBMZWdh
Y3lMaW5lTGF5b3V0OjpyZXN0YXJ0TGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGF5b3V0VW5p
dCBvbGRMb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQsICBGbG9hdGlu
Z09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBvbGRFbmQpCiB7CiAgICAgbV9m
bG93LnJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUs
IG9sZExvZ2ljYWxIZWlnaHQpOwogICAgIG1fZmxvdy5zZXRMb2dpY2FsSGVpZ2h0KG5ld0xvZ2lj
YWxIZWlnaHQpOwpAQCAtMTM3NywxMiArMTM3NywxMiBAQCBpbmxpbmUgY29uc3QgSW5saW5lSXRl
cmF0b3ImIExlZ2FjeUxpbmVMYXlvdXQ6OnJlc3RhcnRMYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5n
ZQogICAgIHJldHVybiBvbGRFbmQ7CiB9CiAKLXZvaWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0
UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5l
QmlkaVJlc29sdmVyJiByZXNvbHZlciwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0
YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25z
ZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcykKK3ZvaWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0UnVu
c0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5lQmlk
aVJlc29sdmVyJiByZXNvbHZlciwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGNsZWFuTGlu
ZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBj
b25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcykKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgYm9vbCBwYWdpbmF0ZWQgPSBsYXlvdXRDb250ZXh0KCku
bGF5b3V0U3RhdGUoKSAmJiBsYXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0
ZWQoKTsKICAgICBMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSYgbGluZVdoaXRlc3BhY2VD
b2xsYXBzaW5nU3RhdGUgPSByZXNvbHZlci53aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKCk7Ci0g
ICAgSW5saW5lSXRlcmF0b3IgZW5kID0gcmVzb2x2ZXIucG9zaXRpb24oKTsKKyAgICBMZWdhY3lJ
bmxpbmVJdGVyYXRvciBlbmQgPSByZXNvbHZlci5wb3NpdGlvbigpOwogICAgIGJvb2wgY2hlY2tG
b3JFbmRMaW5lTWF0Y2ggPSBsYXlvdXRTdGF0ZS5lbmRMaW5lKCk7CiAgICAgUmVuZGVyVGV4dElu
Zm8gcmVuZGVyVGV4dEluZm87CiAgICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2FsUG9z
aXRpb25DYWNoZTsKQEAgLTEzOTQsNyArMTM5NCw3IEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6
bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwK
ICAgICAgICAgaWYgKGNoZWNrRm9yRW5kTGluZU1hdGNoKSB7CiAgICAgICAgICAgICBsYXlvdXRT
dGF0ZS5zZXRFbmRMaW5lTWF0Y2hlZChtYXRjaGVkRW5kTGluZShsYXlvdXRTdGF0ZSwgcmVzb2x2
ZXIsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzKSk7CiAgICAgICAgICAgICBp
ZiAobGF5b3V0U3RhdGUuZW5kTGluZU1hdGNoZWQoKSkgewotICAgICAgICAgICAgICAgIHJlc29s
dmVyLnNldFBvc2l0aW9uKElubGluZUl0ZXJhdG9yKHJlc29sdmVyLnBvc2l0aW9uKCkucm9vdCgp
LCAwLCAwKSwgMCk7CisgICAgICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oTGVnYWN5
SW5saW5lSXRlcmF0b3IocmVzb2x2ZXIucG9zaXRpb24oKS5yb290KCksIDAsIDApLCAwKTsKICAg
ICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5tYXJnaW5JbmZvKCkuY2xlYXJNYXJnaW4oKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE0MDUsNyArMTQwNSw3IEBA
IHZvaWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgbGF5b3V0U3RhdGUubGluZUluZm8oKS5z
ZXRFbXB0eSh0cnVlKTsKICAgICAgICAgbGF5b3V0U3RhdGUubGluZUluZm8oKS5yZXNldFJ1bnNG
cm9tTGVhZGluZ1doaXRlc3BhY2UoKTsKIAotICAgICAgICBjb25zdCBJbmxpbmVJdGVyYXRvciBv
bGRFbmQgPSBlbmQ7CisgICAgICAgIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yIG9sZEVuZCA9
IGVuZDsKICAgICAgICAgYm9vbCBpc05ld1VCQVBhcmFncmFwaCA9IGxheW91dFN0YXRlLmxpbmVJ
bmZvKCkucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKG1fZmxvdy5jb250YWluc0Zsb2F0cygpKSA/
IG1fZmxvdy5mbG9hdGluZ09iamVjdHMoKS0+c2V0KCkubGFzdCgpLmdldCgpIDogbnVsbHB0cjsK
IApAQCAtMTQxOSw3ICsxNDE5LDcgQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5z
QW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAogICAgICAgICAg
ICAgcmVzb2x2ZXIucnVucygpLmNsZWFyKCk7CiAgICAgICAgICAgICByZXNvbHZlci5tYXJrQ3Vy
cmVudFJ1bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNlZCBi
eSBhbiBBU1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCiAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5z
ZXRDaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSh0cnVlKTsKLSAgICAgICAgICAgIHJlc29sdmVy
LnNldFBvc2l0aW9uKElubGluZUl0ZXJhdG9yKHJlc29sdmVyLnBvc2l0aW9uKCkucm9vdCgpLCAw
LCAwKSwgMCk7CisgICAgICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihMZWdhY3lJbmxpbmVJ
dGVyYXRvcihyZXNvbHZlci5wb3NpdGlvbigpLnJvb3QoKSwgMCwgMCksIDApOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTk1OCwyMSArMTk1OCwyMSBAQCBMZWdhY3lSb290
SW5saW5lQm94KiBMZWdhY3lMaW5lTGF5b3V0OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVM
YXlvdXRTdGF0ZSYgbAogCiAgICAgaWYgKGxhc3RMaW5lKSB7CiAgICAgICAgIG1fZmxvdy5zZXRM
b2dpY2FsSGVpZ2h0KGxhc3RMaW5lLT5saW5lQm94Qm90dG9tKCkpOwotICAgICAgICBJbmxpbmVJ
dGVyYXRvciBpdGVyID0gSW5saW5lSXRlcmF0b3IoJm1fZmxvdywgbGFzdExpbmUtPmxpbmVCcmVh
a09iaigpLCBsYXN0TGluZS0+bGluZUJyZWFrUG9zKCkpOworICAgICAgICBMZWdhY3lJbmxpbmVJ
dGVyYXRvciBpdGVyID0gTGVnYWN5SW5saW5lSXRlcmF0b3IoJm1fZmxvdywgbGFzdExpbmUtPmxp
bmVCcmVha09iaigpLCBsYXN0TGluZS0+bGluZUJyZWFrUG9zKCkpOwogICAgICAgICByZXNvbHZl
ci5zZXRQb3NpdGlvbihpdGVyLCBudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMoaXRlcikpOwogICAg
ICAgICByZXNvbHZlci5zZXRTdGF0dXMobGFzdExpbmUtPmxpbmVCcmVha0JpZGlTdGF0dXMoKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdHlsZSgp
LmRpcmVjdGlvbigpOwogICAgICAgICBpZiAoc3R5bGUoKS51bmljb2RlQmlkaSgpID09IFBsYWlu
dGV4dCkKLSAgICAgICAgICAgIGRldGVybWluZURpcmVjdGlvbmFsaXR5KGRpcmVjdGlvbiwgSW5s
aW5lSXRlcmF0b3IoJm1fZmxvdywgYmlkaUZpcnN0U2tpcHBpbmdFbXB0eUlubGluZXMobV9mbG93
KSwgMCkpOworICAgICAgICAgICAgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoZGlyZWN0aW9uLCBM
ZWdhY3lJbmxpbmVJdGVyYXRvcigmbV9mbG93LCBmaXJzdElubGluZVJlbmRlcmVyU2tpcHBpbmdF
bXB0eShtX2Zsb3cpLCAwKSk7CiAgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVz
KGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpKSk7Ci0gICAgICAg
IElubGluZUl0ZXJhdG9yIGl0ZXIgPSBJbmxpbmVJdGVyYXRvcigmbV9mbG93LCBiaWRpRmlyc3RT
a2lwcGluZ0VtcHR5SW5saW5lcyhtX2Zsb3csICZyZXNvbHZlciksIDApOworICAgICAgICBMZWdh
Y3lJbmxpbmVJdGVyYXRvciBpdGVyID0gTGVnYWN5SW5saW5lSXRlcmF0b3IoJm1fZmxvdywgZmly
c3RJbmxpbmVSZW5kZXJlclNraXBwaW5nRW1wdHkobV9mbG93LCAmcmVzb2x2ZXIpLCAwKTsKICAg
ICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oaXRlciwgbnVtYmVyT2ZJc29sYXRlQW5jZXN0b3Jz
KGl0ZXIpKTsKICAgICB9CiAgICAgcmV0dXJuIGN1cnJlbnRMaW5lOwogfQogCi12b2lkIExlZ2Fj
eUxpbmVMYXlvdXQ6OmRldGVybWluZUVuZFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIExlZ2FjeVJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgSW5saW5lSXRlcmF0b3ImIGNs
ZWFuTGluZVN0YXJ0LCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKQordm9pZCBMZWdh
Y3lMaW5lTGF5b3V0OjpkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlLCBMZWdhY3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExlZ2FjeUlubGluZUl0ZXJh
dG9yJiBjbGVhbkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykKIHsK
ICAgICBhdXRvIGl0ZXJhdG9yRm9yRmlyc3REaXJ0eUZsb2F0ID0gW10oTGluZUxheW91dFN0YXRl
OjpGbG9hdExpc3QmIGZsb2F0cykgewogICAgICAgICBhdXRvIGxhc3RDbGVhbkZsb2F0ID0gZmxv
YXRzLmxhc3RDbGVhbkZsb2F0KCk7CkBAIC0yMDE1LDcgKzIwMTUsNyBAQCB2b2lkIExlZ2FjeUxp
bmVMYXlvdXQ6OmRldGVybWluZUVuZFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIExlZ2FjeQogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHxsYXN0fCBpcyB0aGUgZmlyc3QgbGlu
ZSBpbiBhIHJ1biBvZiBjbGVhbiBsaW5lcyB0aGF0IGVuZHMgd2l0aCB0aGUgbGFzdCBsaW5lCiAg
ICAgLy8gaW4gdGhlIGJsb2NrLgogICAgIExlZ2FjeVJvb3RJbmxpbmVCb3gqIHByZXZpb3VzTGlu
ZSA9IGxhc3RMaW5lLT5wcmV2Um9vdEJveCgpOwotICAgIGNsZWFuTGluZVN0YXJ0ID0gSW5saW5l
SXRlcmF0b3IoJm1fZmxvdywgcHJldmlvdXNMaW5lLT5saW5lQnJlYWtPYmooKSwgcHJldmlvdXNM
aW5lLT5saW5lQnJlYWtQb3MoKSk7CisgICAgY2xlYW5MaW5lU3RhcnQgPSBMZWdhY3lJbmxpbmVJ
dGVyYXRvcigmbV9mbG93LCBwcmV2aW91c0xpbmUtPmxpbmVCcmVha09iaigpLCBwcmV2aW91c0xp
bmUtPmxpbmVCcmVha1BvcygpKTsKICAgICBjbGVhbkxpbmVCaWRpU3RhdHVzID0gcHJldmlvdXNM
aW5lLT5saW5lQnJlYWtCaWRpU3RhdHVzKCk7CiAgICAgbGF5b3V0U3RhdGUuc2V0RW5kTGluZUxv
Z2ljYWxUb3AocHJldmlvdXNMaW5lLT5saW5lQm94Qm90dG9tKCkpOwogCkBAIC0yMDg0LDcgKzIw
ODQsNyBAQCBib29sIExlZ2FjeUxpbmVMYXlvdXQ6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVD
aGFuZ2VkKExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvbwogICAgIHJldHVybiByb290Qm94LT5wYWdp
bmF0ZWRMaW5lV2lkdGgoKSAhPSBtX2Zsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVu
dChjdXJyZW50RnJhZ21lbnQpOwogfQogCi1ib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRF
bmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSZXNv
bHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0
IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpCitib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNo
ZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3Rh
cnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpCiB7CiAgICAgaWYgKHJlc29sdmVy
LnBvc2l0aW9uKCkgPT0gZW5kTGluZVN0YXJ0KSB7CiAgICAgICAgIGlmIChyZXNvbHZlci5zdGF0
dXMoKSAhPSBlbmRMaW5lU3RhdHVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUxpbmVMYXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lM
aW5lTGF5b3V0LmgKaW5kZXggNjYyMjA4ODcyZjU0ODc1NWE1N2M3MGYyYTM5MDMwZDlkYWEzMzY1
NS4uMTJhZDdjOTU4MDM2ZjM1NTEyNDdjZjU1MGIyMjAyNzZkM2M2ZTdjOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5oCkBAIC0zOCw3ICszOCw3IEBAIGNs
YXNzIEZsb2F0aW5nT2JqZWN0OwogY2xhc3MgRmxvYXRXaXRoUmVjdDsKIGNsYXNzIEZyYW1lVmll
d0xheW91dENvbnRleHQ7CiBjbGFzcyBMZWdhY3lJbmxpbmVCb3g7Ci1jbGFzcyBJbmxpbmVJdGVy
YXRvcjsKK2NsYXNzIExlZ2FjeUlubGluZUl0ZXJhdG9yOwogY2xhc3MgTGluZUluZm87CiBjbGFz
cyBMaW5lTGF5b3V0U3RhdGU7CiBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CkBAIC05MSwxOCArOTEs
MTggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVCbG9ja0RpcmVjdGlvblBvc2l0aW9uc0Zv
ckxpbmUoTGVnYWN5Um9vdElubGluZUJveCosIEJpZGlSdW4qIGZpcnN0UnVuLCBHbHlwaE92ZXJm
bG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIFZlcnRpY2FsUG9zaXRpb25D
YWNoZSYpOwogICAgIGlubGluZSBCaWRpUnVuKiBoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVu
TGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIEJpZGlDb250ZXh0KiBjdXJyZW50Q29udGV4dCk7CiAg
ICAgdm9pZCBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoRmxvYXRpbmdPYmplY3QmKTsK
LSAgICBMZWdhY3lSb290SW5saW5lQm94KiBjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5z
aWduZWQgYmlkaUxldmVsLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IElu
bGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiwgQmlk
aVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgV29yZE1lYXN1cmVtZW50cyYpOworICAgIExlZ2FjeVJv
b3RJbmxpbmVCb3gqIGNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyh1bnNpZ25lZCBiaWRpTGV2
ZWwsIEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5SW5saW5lSXRl
cmF0b3ImIGVuZCwgTGluZUluZm8mLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBCaWRpUnVuKiB0
cmFpbGluZ1NwYWNlUnVuLCBXb3JkTWVhc3VyZW1lbnRzJik7CiAgICAgdm9pZCBsYXlvdXRSdW5z
QW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQpOwotICAgIGlu
bGluZSBjb25zdCBJbmxpbmVJdGVyYXRvciYgcmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJblJh
bmdlKExheW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVp
Z2h0LCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgSW5saW5lQmlk
aVJlc29sdmVyJiwgIGNvbnN0IElubGluZUl0ZXJhdG9yJiBvbGRFbmQpOwotICAgIHZvaWQgbGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29s
dmVyJiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBCaWRpU3Rh
dHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRM
aW5lcyk7CisgICAgaW5saW5lIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiByZXN0YXJ0TGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGF5b3V0VW5pdCBvbGRMb2dpY2FsSGVpZ2h0LCBMYXlv
dXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCAgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0
b3ImIG9sZEVuZCk7CisgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5
b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMs
IHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKTsKICAgICB2b2lkIHJlYXR0YWNo
Q2xlYW5MaW5lRmxvYXRzKExlZ2FjeVJvb3RJbmxpbmVCb3gmIGNsZWFuTGluZSwgTGF5b3V0VW5p
dCBkZWx0YSwgYm9vbCBpc0ZpcnN0Q2xlYW5MaW5lKTsKICAgICB2b2lkIGxpbmtUb0VuZExpbmVJ
Zk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmKTsKICAgICB2b2lkIGNoZWNrRmxvYXRJbkNsZWFuTGlu
ZShMZWdhY3lSb290SW5saW5lQm94JiBjbGVhbkxpbmUsIFJlbmRlckJveCYgZmxvYXRCb3hPbkNs
ZWFuTGluZSwgRmxvYXRXaXRoUmVjdCYgbWF0Y2hpbmdGbG9hdFdpdGhSZWN0LCBib29sJiBlbmNv
dW50ZXJlZE5ld0Zsb2F0LCBib29sJiBkaXJ0aWVkQnlGbG9hdCk7CiAgICAgTGVnYWN5Um9vdElu
bGluZUJveCogZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVC
aWRpUmVzb2x2ZXImKTsKLSAgICB2b2lkIGRldGVybWluZUVuZFBvc2l0aW9uKExpbmVMYXlvdXRT
dGF0ZSYsIExlZ2FjeVJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgSW5saW5lSXRlcmF0b3ImIGNs
ZWFuTGluZVN0YXJ0LCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKTsKKyAgICB2b2lk
IGRldGVybWluZUVuZFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIExlZ2FjeVJvb3RJbmxpbmVC
b3gqIHN0YXJ0TGluZSwgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBCaWRp
U3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKTsKICAgICBib29sIGNoZWNrUGFnaW5hdGlvbkFu
ZEZsb2F0c0F0RW5kTGluZShMaW5lTGF5b3V0U3RhdGUmKTsKICAgICBib29sIGxpbmVXaWR0aEZv
clBhZ2luYXRlZExpbmVDaGFuZ2VkKExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvb3RCb3gsIExheW91
dFVuaXQgbGluZURlbHRhLCBSZW5kZXJGcmFnbWVudGVkRmxvdyopIGNvbnN0OwotICAgIGJvb2wg
bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVy
JiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYg
ZW5kTGluZVN0YXR1cyk7CisgICAgYm9vbCBtYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUm
LCBjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYg
ZW5kTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzKTsKICAgICB2b2lk
IGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAgICAgdm9pZCBjaGVja0xpbmVzRm9yVGV4dE92
ZXJmbG93KCk7CiAgICAgdm9pZCB1cGRhdGVGcmFnbWVudEZvckxpbmUoTGVnYWN5Um9vdElubGlu
ZUJveCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eVJvb3RJbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lSb290SW5s
aW5lQm94LmgKaW5kZXggYzI1OTQ0MDkxNDVlNWRhMzczY2VjYzIzY2IxN2E0ODU0NWI0MTQxMS4u
OTQ5NTBiNDQ3M2RhMTA3ZGUxZmY2OTczMDIyMDdmOGI0M2Y2ZTliYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5oCkBAIC0yMDAsNyArMjAwLDcg
QEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IGJlZm9yZUFubm90YXRpb25zQWRqdXN0bWVudCgp
IGNvbnN0OwogCiAgICAgLy8gV2hlcmUgdGhpcyBsaW5lIGVuZGVkLiBUaGUgZXhhY3Qgb2JqZWN0
IGFuZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoYXQgb2JqZWN0IGFyZSBzdG9yZWQgc28gdGhhdAot
ICAgIC8vIHdlIGNhbiBjcmVhdGUgYW4gSW5saW5lSXRlcmF0b3IgYmVnaW5uaW5nIGp1c3QgYWZ0
ZXIgdGhlIGVuZCBvZiB0aGlzIGxpbmUuCisgICAgLy8gd2UgY2FuIGNyZWF0ZSBhbiBMZWdhY3lJ
bmxpbmVJdGVyYXRvciBiZWdpbm5pbmcganVzdCBhZnRlciB0aGUgZW5kIG9mIHRoaXMgbGluZS4K
ICAgICBXZWFrUHRyPFJlbmRlck9iamVjdD4gbV9saW5lQnJlYWtPYmo7CiAgICAgUmVmUHRyPEJp
ZGlDb250ZXh0PiBtX2xpbmVCcmVha0NvbnRleHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCmluZGV4IGU0YTZmYTVkYzdiMGUyMTY0NWEwYWNiMTFiZDBkMmZlZTI4
NmEzNGMuLmQ0ZDlmMmM3MTllYmM0OWFkZGIyYmJlYmZlZWM0MWFlMWJjZGNlZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzksNyArMzksNiBAQAogI2lu
Y2x1ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSW5saW5lV2Fsa2VyLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCiAjaW5j
bHVkZSAiTGVnYWN5SW5saW5lRWxlbWVudEJveC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCAyNGM5Mzg3YjE4NGE4MmRjNzQzNDIyZGRiNWZl
MWVjNjY1NjRjMDA4Li5jMWM0YmZjNmU4NDVlNmMxZTJmZDE2M2JlZTg2OGZhZDQ3NGZhNWM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzMs
NyArMzMsNiBAQAogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdExvY2F0aW9uLmgiCi0jaW5jbHVk
ZSAiSW5saW5lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIgogI2luY2x1
ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggMTMxNTdlNGU4NjAzMDM2ODk5ODUzOWQwY2ZkNWZk
ZTA0MWNkYzg5YS4uOGNmNGZlMjVjMDBmY2ZkOTIwYmFiM2E2ZTcyMWU3MjYyNzM4YjUzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTExMTgsNCArMTEx
OCwyMCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTAogICAgIH0KIH0KIAorYm9vbCBpc0VtcHR5
SW5saW5lKGNvbnN0IFJlbmRlcklubGluZSYgcmVuZGVyZXIpCit7CisgICAgZm9yIChhdXRvJiBj
dXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihyZW5kZXJlcikpIHsKKyAgICAg
ICAgaWYgKGN1cnJlbnQuaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihjdXJyZW50KSkgewor
ICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxSZW5kZXJUZXh0PihjdXJyZW50KS5pc0FsbENvbGxh
cHNpYmxlV2hpdGVzcGFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghaXM8UmVuZGVySW5saW5l
PihjdXJyZW50KSB8fCAhaXNFbXB0eUlubGluZShkb3duY2FzdDxSZW5kZXJJbmxpbmU+KGN1cnJl
bnQpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaAppbmRleCA1NjY5ZDAzNGFjOWZiMzNhN2I4ZDMzZjZkNzAyYWYyY2IzNDQ3NWQy
Li4zNjBkYjNjYTY0NDhlZDEzODhkYjdjOTUwMGZiYjI2ZDIxMzZiZThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCkBAIC0xNDgsNiArMTQ4LDggQEAgcHJpdmF0ZToK
ICAgICBSZW5kZXJMaW5lQm94TGlzdCBtX2xpbmVCb3hlczsgICAvLyBBbGwgb2YgdGhlIGxpbmUg
Ym94ZXMgY3JlYXRlZCBmb3IgdGhpcyBpbmxpbmUgZmxvdy4gIEZvciBleGFtcGxlLCA8aT5IZWxs
bzxicj53b3JsZC48L2k+IHdpbGwgaGF2ZSB0d28gPGk+IGxpbmUgYm94ZXMuCiB9OwogCitib29s
IGlzRW1wdHlJbmxpbmUoY29uc3QgUmVuZGVySW5saW5lJik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlcklubGlu
ZSwgaXNSZW5kZXJJbmxpbmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAppbmRleCBjNjhiMjg2Mzk4OWUzNmI5NjYzNzNhMTM5OGFhYWUxZDU2N2Vl
ZTBlLi40MzQyYWQ5NDEwODQ3YjRhMTQ3ZTE3Nzk5MjYxZjc2NzlmMmNkNTM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0zNSw3ICszNSw2
IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIVE1MU3BhbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbmxpbmVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMZWdh
Y3lJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAppbmRleCAwNzk4OTQ5NTU3OGZl
NGVhMzhhNTQyNmMzYjY1MWE4MzcxMDAwYjZhLi4zZDlmZjk5NWJiYzM3NDQ3ZmNhODcyMDVkYTkx
NzU5ZjdhNjI5NTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9C
cmVha2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVh
a2luZ0NvbnRleHQuaApAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBS
ZW5kZXJPYmplY3QqIGN1cnJlbnRPYmplY3QoKSB7IHJldHVybiBtX2N1cnJlbnQucmVuZGVyZXIo
KTsgfQotICAgIElubGluZUl0ZXJhdG9yIGxpbmVCcmVhaygpIHsgcmV0dXJuIG1fbGluZUJyZWFr
OyB9CisgICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgbGluZUJyZWFrKCkgeyByZXR1cm4gbV9saW5l
QnJlYWs7IH0KICAgICBMaW5lV2lkdGgmIGxpbmVXaWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0K
ICAgICBib29sIGF0RW5kKCkgeyByZXR1cm4gbV9hdEVuZDsgfQogICAgIApAQCAtMTQ1LDEwICsx
NDUsMTAgQEAgcHVibGljOgogICAgIHZvaWQgaGFuZGxlRW1wdHlJbmxpbmUoKTsKICAgICB2b2lk
IGhhbmRsZVJlcGxhY2VkKCk7CiAgICAgYm9vbCBoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMm
LCBib29sJiBoeXBoZW5hdGVkLCB1bnNpZ25lZCYgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMp
OwotICAgIHZvaWQgdHJhaWxpbmdTcGFjZXNIYW5nKElubGluZUl0ZXJhdG9yJiwgUmVuZGVyT2Jq
ZWN0JiwgYm9vbCBjYW5CcmVha01pZFdvcmQsIGJvb2wgcHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNl
KTsKKyAgICB2b2lkIHRyYWlsaW5nU3BhY2VzSGFuZyhMZWdhY3lJbmxpbmVJdGVyYXRvciYsIFJl
bmRlck9iamVjdCYsIGJvb2wgY2FuQnJlYWtNaWRXb3JkLCBib29sIHByZXZpb3VzQ2hhcmFjdGVy
SXNTcGFjZSk7CiAgICAgYm9vbCBjYW5CcmVha0F0VGhpc1Bvc2l0aW9uKCk7CiAgICAgdm9pZCBj
b21taXRBbmRVcGRhdGVMaW5lQnJlYWtJZk5lZWRlZCgpOwotICAgIElubGluZUl0ZXJhdG9yIGhh
bmRsZUVuZE9mTGluZSgpOworICAgIExlZ2FjeUlubGluZUl0ZXJhdG9yIGhhbmRsZUVuZE9mTGlu
ZSgpOwogICAgIAogICAgIGZsb2F0IGNvbXB1dGVBZGRpdGlvbmFsQmV0d2VlbldvcmRzV2lkdGgo
UmVuZGVyVGV4dCYsIFRleHRMYXlvdXQqLCBVQ2hhciwgV29yZFRyYWlsaW5nU3BhY2UmLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgV29yZE1lYXN1cmVtZW50cyYsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgYm9vbCBpc0ZpeGVkUGl0Y2gsIHVuc2lnbmVkIGxhc3RTcGFjZSwgZmxv
YXQgbGFzdFNwYWNlV29yZFNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1cmVt
ZW50LCB1bnNpZ25lZCBvZmZzZXQpOwogCkBAIC0xNzcsOSArMTc3LDkgQEAgcHJpdmF0ZToKICAg
ICBMaW5lQnJlYWtlciYgbV9saW5lQnJlYWtlcjsKICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIG1f
cmVzb2x2ZXI7CiAKLSAgICBJbmxpbmVJdGVyYXRvciBtX2N1cnJlbnQ7Ci0gICAgSW5saW5lSXRl
cmF0b3IgbV9saW5lQnJlYWs7Ci0gICAgSW5saW5lSXRlcmF0b3IgbV9zdGFydE9mSWdub3JlZFNw
YWNlczsKKyAgICBMZWdhY3lJbmxpbmVJdGVyYXRvciBtX2N1cnJlbnQ7CisgICAgTGVnYWN5SW5s
aW5lSXRlcmF0b3IgbV9saW5lQnJlYWs7CisgICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgbV9zdGFy
dE9mSWdub3JlZFNwYWNlczsKIAogICAgIFJlbmRlckJsb2NrRmxvdyYgbV9ibG9jazsKICAgICBS
ZW5kZXJPYmplY3QqIG1fbGFzdE9iamVjdDsKQEAgLTIzNyw3ICsyMzcsNyBAQCBpbmxpbmUgdm9p
ZCBCcmVha2luZ0NvbnRleHQ6OmluaXRpYWxpemVGb3JDdXJyZW50T2JqZWN0KCkKICAgICBtX2hh
ZFVuY29tbWl0dGVkV2lkdGhCZWZvcmVDdXJyZW50ID0gISFtX3dpZHRoLnVuY29tbWl0dGVkV2lk
dGgoKTsKICAgICBhdXRvJiByZW5kZXJlciA9ICptX2N1cnJlbnQucmVuZGVyZXIoKTsKIAotICAg
IG1fbmV4dE9iamVjdCA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMobV9ibG9jaywgJnJl
bmRlcmVyKTsKKyAgICBtX25leHRPYmplY3QgPSBuZXh0SW5saW5lUmVuZGVyZXJTa2lwcGluZ0Vt
cHR5KG1fYmxvY2ssICZyZW5kZXJlcik7CiAgICAgaWYgKG1fbmV4dE9iamVjdCAmJiBtX25leHRP
YmplY3QtPnBhcmVudCgpICYmICFtX25leHRPYmplY3QtPnBhcmVudCgpLT5pc0Rlc2NlbmRhbnRP
ZihyZW5kZXJlci5wYXJlbnQoKSkpCiAgICAgICAgIG1faW5jbHVkZUVuZFdpZHRoID0gdHJ1ZTsK
IApAQCAtMjkyLDcgKzI5Miw3IEBAIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxl
QlIoVXNlZENsZWFyJiB1c2VkQ2xlYXIpCiAgICAgICAgIC8vIGNvbGxhcHNlZCBhd2F5IHNvIHRo
YXQgaXQgZG9lc24ndCBwdXNoIHRoZSB0ZXh0IG91dCBmcm9tIHRoZSBjb250YWluZXIncyByaWdo
dC1oYW5kIGVkZ2UuCiAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHJlZ2FyZGxlc3Mgb2YgdGhl
IGNvbnRhaW5lcidzIGFsaWdubWVudCAtIHdpbGwgcmVxdWlyZSByZWJhc2VsaW5pbmcgYSBsb3Qg
b2YgdGVzdCByZXN1bHRzLgogICAgICAgICBlbHNlIGlmIChtX2lnbm9yaW5nU3BhY2VzICYmICht
X2Jsb2NrU3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6UmlnaHQgfHwgbV9ibG9j
a1N0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0KSkKLSAgICAg
ICAgICAgIG1fbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RvcElnbm9yaW5nU3BhY2Vz
KElubGluZUl0ZXJhdG9yKDAsIG1fY3VycmVudC5yZW5kZXJlcigpLCBtX2N1cnJlbnQub2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgIG1fbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RvcEln
bm9yaW5nU3BhY2VzKExlZ2FjeUlubGluZUl0ZXJhdG9yKDAsIG1fY3VycmVudC5yZW5kZXJlcigp
LCBtX2N1cnJlbnQub2Zmc2V0KCkpKTsKIAogICAgICAgICBpZiAoIW1fbGluZUluZm8uaXNFbXB0
eSgpKQogICAgICAgICAgICAgdXNlZENsZWFyID0gUmVuZGVyU3R5bGU6OnVzZWRDbGVhcihicik7
CkBAIC00MDMsMTUgKzQwMywxNSBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRs
ZUZsb2F0KCkKIC8vIGhhdmUgYW4gZWZmZWN0IG9uIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBsaW5lLgogaW5saW5lIGJvb2wgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2Jq
ZWN0KFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIFJlbmRlck9iamVjdCogbywgTGluZVdoaXRlc3Bh
Y2VDb2xsYXBzaW5nU3RhdGUmIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKQogewotICAg
IFJlbmRlck9iamVjdCogbmV4dCA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoYmxvY2ss
IG8pOworICAgIFJlbmRlck9iamVjdCogbmV4dCA9IG5leHRJbmxpbmVSZW5kZXJlclNraXBwaW5n
RW1wdHkoYmxvY2ssIG8pOwogICAgIHdoaWxlIChuZXh0ICYmIG5leHQtPmlzRmxvYXRpbmdPck91
dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgbmV4dCA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0
eUlubGluZXMoYmxvY2ssIG5leHQpOworICAgICAgICBuZXh0ID0gbmV4dElubGluZVJlbmRlcmVy
U2tpcHBpbmdFbXB0eShibG9jaywgbmV4dCk7CiAKICAgICBpZiAoaXM8UmVuZGVyVGV4dD4obmV4
dCkgJiYgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm5leHQpLnRleHQoKS5sZW5ndGgoKSA+IDApIHsK
ICAgICAgICAgUmVuZGVyVGV4dCYgbmV4dFRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqbmV4
dCk7CiAgICAgICAgIFVDaGFyIG5leHRDaGFyID0gbmV4dFRleHQuY2hhcmFjdGVyQXQoMCk7CiAg
ICAgICAgIGlmIChuZXh0VGV4dC5zdHlsZSgpLmlzQ29sbGFwc2libGVXaGl0ZVNwYWNlKG5leHRD
aGFyKSkgewotICAgICAgICAgICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RhcnRJ
Z25vcmluZ1NwYWNlcyhJbmxpbmVJdGVyYXRvcihudWxscHRyLCBvLCAwKSk7CisgICAgICAgICAg
ICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5zdGFydElnbm9yaW5nU3BhY2VzKExlZ2Fj
eUlubGluZUl0ZXJhdG9yKG51bGxwdHIsIG8sIDApKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQpAQCAtNDc0LDcgKzQ3NCw3IEBAIGlubGluZSB2b2lkIEJyZWFr
aW5nQ29udGV4dDo6aGFuZGxlUmVwbGFjZWQoKQogICAgICAgICBtX2hhbmdzQXRFbmQgPSBmYWxz
ZTsKIAogICAgIGlmIChtX2lnbm9yaW5nU3BhY2VzKQotICAgICAgICBtX2xpbmVXaGl0ZXNwYWNl
Q29sbGFwc2luZ1N0YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyhJbmxpbmVJdGVyYXRvcigwLCAmcmVw
bGFjZWRCb3gsIDApKTsKKyAgICAgICAgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5z
dG9wSWdub3JpbmdTcGFjZXMoTGVnYWN5SW5saW5lSXRlcmF0b3IoMCwgJnJlcGxhY2VkQm94LCAw
KSk7CiAKICAgICBtX2xpbmVJbmZvLnNldEVtcHR5KGZhbHNlLCAmbV9ibG9jaywgJm1fd2lkdGgp
OwogICAgIG1faWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKQEAgLTUxNSw3ICs1MTUsNyBAQCBpbmxp
bmUgZmxvYXQgZmlyc3RQb3NpdGl2ZVdpZHRoKGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRN
ZWFzdXJlbWVudHMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBib29sIGl0ZXJhdG9ySXNC
ZXlvbmRFbmRPZlJlbmRlckNvbWJpbmVUZXh0KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdGVyLCBS
ZW5kZXJDb21iaW5lVGV4dCYgcmVuZGVyZXIpCitpbmxpbmUgYm9vbCBpdGVyYXRvcklzQmV5b25k
RW5kT2ZSZW5kZXJDb21iaW5lVGV4dChjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgaXRlciwg
UmVuZGVyQ29tYmluZVRleHQmIHJlbmRlcmVyKQogewogICAgIHJldHVybiBpdGVyLnJlbmRlcmVy
KCkgPT0gJnJlbmRlcmVyICYmIGl0ZXIub2Zmc2V0KCkgPj0gcmVuZGVyZXIudGV4dCgpLmxlbmd0
aCgpOwogfQpAQCAtNTYxLDE0ICs1NjEsMTQgQEAgQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lk
dGgoUmVuZGVyVGV4dCYgdGV4dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb24KIH0K
IAogLy8gQWRkaW5nIGEgcGFpciBvZiB3aGl0ZXNwYWNlIGNvbGxhcHNpbmcgdHJhbnNpdGlvbnMg
YmVmb3JlIGEgY2hhcmFjdGVyIHdpbGwgc3BsaXQgaXQgb3V0IGludG8gYSBuZXcgbGluZSBib3gu
Ci1pbmxpbmUgdm9pZCBlbnN1cmVDaGFyYWN0ZXJHZXRzTGluZUJveChMaW5lV2hpdGVzcGFjZUNv
bGxhcHNpbmdTdGF0ZSYgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIElubGluZUl0ZXJh
dG9yJiB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yKQoraW5saW5lIHZvaWQgZW5zdXJlQ2hhcmFjdGVy
R2V0c0xpbmVCb3goTGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUmIGxpbmVXaGl0ZXNwYWNl
Q29sbGFwc2luZ1N0YXRlLCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgdGV4dFBhcmFncmFwaFNlcGFy
YXRvcikKIHsKLSAgICBJbmxpbmVJdGVyYXRvciB0cmFuc2l0aW9uKDAsIHRleHRQYXJhZ3JhcGhT
ZXBhcmF0b3IucmVuZGVyZXIoKSwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5vZmZzZXQoKSk7Ci0g
ICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RhcnRJZ25vcmluZ1NwYWNlcyhJbmxp
bmVJdGVyYXRvcigwLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLnJlbmRlcmVyKCksIHRleHRQYXJh
Z3JhcGhTZXBhcmF0b3Iub2Zmc2V0KCkgLSAxKSk7Ci0gICAgbGluZVdoaXRlc3BhY2VDb2xsYXBz
aW5nU3RhdGUuc3RvcElnbm9yaW5nU3BhY2VzKElubGluZUl0ZXJhdG9yKDAsIHRleHRQYXJhZ3Jh
cGhTZXBhcmF0b3IucmVuZGVyZXIoKSwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5vZmZzZXQoKSkp
OworICAgIExlZ2FjeUlubGluZUl0ZXJhdG9yIHRyYW5zaXRpb24oMCwgdGV4dFBhcmFncmFwaFNl
cGFyYXRvci5yZW5kZXJlcigpLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm9mZnNldCgpKTsKKyAg
ICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5zdGFydElnbm9yaW5nU3BhY2VzKExlZ2Fj
eUlubGluZUl0ZXJhdG9yKDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IucmVuZGVyZXIoKSwgdGV4
dFBhcmFncmFwaFNlcGFyYXRvci5vZmZzZXQoKSAtIDEpKTsKKyAgICBsaW5lV2hpdGVzcGFjZUNv
bGxhcHNpbmdTdGF0ZS5zdG9wSWdub3JpbmdTcGFjZXMoTGVnYWN5SW5saW5lSXRlcmF0b3IoMCwg
dGV4dFBhcmFncmFwaFNlcGFyYXRvci5yZW5kZXJlcigpLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9y
Lm9mZnNldCgpKSk7CiB9CiAKLWlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQm
IHRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGVJ
ZGVudGlmaWVyLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgaW50IGNvbnNl
Y3V0aXZlSHlwaGVuYXRlZExpbmVzTGltaXQsIGludCBtaW5pbXVtUHJlZml4TGltaXQsIGludCBt
aW5pbXVtU3VmZml4TGltaXQsIHVuc2lnbmVkIGxhc3RTcGFjZSwgdW5zaWduZWQgcG9zLCBmbG9h
dCB4UG9zLCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29s
bGFwc2VXaGl0ZVNwYWNlLCBpbnQgbGFzdFNwYWNlV29yZFNwYWNpbmcsIElubGluZUl0ZXJhdG9y
JiBsaW5lQnJlYWssIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG5leHRCcmVha2FibGUsIGJvb2wm
IGh5cGhlbmF0ZWQpCitpbmxpbmUgdm9pZCB0cnlIeXBoZW5hdGluZyhSZW5kZXJUZXh0JiB0ZXh0
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRp
ZmllciwgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25zZWN1dGl2
ZUh5cGhlbmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQgbWluaW11
bVN1ZmZpeExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxvYXQgeFBv
cywgZmxvYXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNl
V2hpdGVTcGFjZSwgaW50IGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgbGluZUJyZWFrLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBuZXh0QnJlYWthYmxlLCBib29s
JiBoeXBoZW5hdGVkKQogewogICAgIC8vIE1hcCAnaHlwaGVuYXRlLWxpbWl0LXtiZWZvcmUsYWZ0
ZXJ9OiBhdXRvOycgdG8gMi4KICAgICB1bnNpZ25lZCBtaW5pbXVtUHJlZml4TGVuZ3RoOwpAQCAt
ODE2LDcgKzgxNiw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChX
b3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAgICAgICAgICAgICAg
ICAgIG1faWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgd29yZFNw
YWNpbmdGb3JXb3JkTWVhc3VyZW1lbnQgPSAwOwogICAgICAgICAgICAgICAgICAgICBsYXN0U3Bh
Y2UgPSBtX2N1cnJlbnQub2Zmc2V0KCk7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRk
IGluIGFueSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIG1fbGlu
ZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RvcElnbm9yaW5nU3BhY2VzKElubGluZUl0ZXJh
dG9yKDAsICZyZW5kZXJlciwgbV9jdXJyZW50Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RvcElnbm9yaW5nU3BhY2VzKExl
Z2FjeUlubGluZUl0ZXJhdG9yKDAsICZyZW5kZXJlciwgbV9jdXJyZW50Lm9mZnNldCgpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHN0b3BwZWRJZ25vcmluZ1NwYWNlcyA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBrZWVwIGlnbm9y
aW5nIHRoZXNlIHNwYWNlcy4KQEAgLTk3Nyw3ICs5NzcsNyBAQCBpbmxpbmUgYm9vbCBCcmVha2lu
Z0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywg
Ym9vbAogICAgICAgICAgICAgICAgICAgICAvLyBzcGFjZXMuIENyZWF0ZSBhIHRyYW5zaXRpb24g
dG8gdGVybWluYXRlIHRoZSBydW4KICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBz
ZWNvbmQgc3BhY2UuCiAgICAgICAgICAgICAgICAgICAgIG1fbGluZVdoaXRlc3BhY2VDb2xsYXBz
aW5nU3RhdGUuc3RhcnRJZ25vcmluZ1NwYWNlcyhtX3N0YXJ0T2ZJZ25vcmVkU3BhY2VzKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV90cmFpbGluZ09iamVjdHMudXBkYXRlV2hpdGVzcGFjZUNvbGxh
cHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMobV9saW5lV2hpdGVzcGFjZUNvbGxhcHNp
bmdTdGF0ZSwgSW5saW5lSXRlcmF0b3IoKSwgVHJhaWxpbmdPYmplY3RzOjpDb2xsYXBzZUZpcnN0
U3BhY2U6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFpbGluZ09iamVjdHMudXBkYXRl
V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMobV9saW5lV2hp
dGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSwgTGVnYWN5SW5saW5lSXRlcmF0b3IoKSwgVHJhaWxpbmdP
YmplY3RzOjpDb2xsYXBzZUZpcnN0U3BhY2U6Ok5vKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAvLyBNZWFzdXJpbmcgdGhlIHdpZHRoIG9mIGNvbXBsZXgg
dGV4dCBjaGFyYWN0ZXItYnktY2hhcmFjdGVyLCByYXRoZXIgdGhhbiBtZWFzdXJpbmcgaXQgYWxs
IHRvZ2V0aGVyLApAQCAtOTk0LDcgKzk5NCw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4
dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAg
ICAgICAgICAgICAgICAgbGFzdFNwYWNlV29yZFNwYWNpbmcgPSBhcHBseVdvcmRTcGFjaW5nID8g
d29yZFNwYWNpbmcgOiAwOwogICAgICAgICAgICAgICAgIHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1
cmVtZW50ID0gKGFwcGx5V29yZFNwYWNpbmcgJiYgd29yZE1lYXN1cmVtZW50cy5sYXN0KCkud2lk
dGgpID8gd29yZFNwYWNpbmcgOiAwOwogICAgICAgICAgICAgICAgIGxhc3RTcGFjZSA9IG1fY3Vy
cmVudC5vZmZzZXQoKTsgLy8gZS5nLiwgIkZvbyAgICBnb28iLCBkb24ndCBhZGQgaW4gYW55IG9m
IHRoZSBpZ25vcmVkIHNwYWNlcy4KLSAgICAgICAgICAgICAgICBtX2xpbmVXaGl0ZXNwYWNlQ29s
bGFwc2luZ1N0YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyhJbmxpbmVJdGVyYXRvcihudWxscHRyLCAm
cmVuZGVyZXIsIG1fY3VycmVudC5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIG1fbGluZVdo
aXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RvcElnbm9yaW5nU3BhY2VzKExlZ2FjeUlubGluZUl0
ZXJhdG9yKG51bGxwdHIsICZyZW5kZXJlciwgbV9jdXJyZW50Lm9mZnNldCgpKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAobV9oYW5nc0F0RW5kICYmICFyZW5kZXJlci5pc0hhbmdh
YmxlU3RvcE9yQ29tbWEoYykpCiAgICAgICAgICAgICAgICAgbV9oYW5nc0F0RW5kID0gZmFsc2U7
CkBAIC0xMDgyLDcgKzEwODIsNyBAQCBpbmxpbmUgYm9vbCB0ZXh0QmVnaW5zV2l0aEJyZWFrYWJs
ZVBvc2l0aW9uKFJlbmRlclRleHQmIG5leHRUZXh0KQogICAgIHJldHVybiBjID09ICcgJyB8fCBj
ID09ICdcdCcgfHwgKGMgPT0gJ1xuJyAmJiAhbmV4dFRleHQucHJlc2VydmVzTmV3bGluZSgpKTsK
IH0KIAotaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0Ojp0cmFpbGluZ1NwYWNlc0hhbmcoSW5s
aW5lSXRlcmF0b3ImIGxpbmVCcmVhaywgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGJvb2wg
Y2FuQnJlYWtNaWRXb3JkLCBib29sIHByZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSkKK2lubGluZSB2
b2lkIEJyZWFraW5nQ29udGV4dDo6dHJhaWxpbmdTcGFjZXNIYW5nKExlZ2FjeUlubGluZUl0ZXJh
dG9yJiBsaW5lQnJlYWssIFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBib29sIGNhbkJyZWFr
TWlkV29yZCwgYm9vbCBwcmV2aW91c0NoYXJhY3RlcklzU3BhY2UpCiB7CiAgICAgQVNTRVJUKG1f
Y3VycldTID09IFdoaXRlU3BhY2U6OkJyZWFrU3BhY2VzKTsKICAgICAvLyBBdm9pZCBicmVha2lu
ZyBiZWZvcmUgdGhlIGZpcnN0IHdoaXRlLXNwYWNlIGFmdGVyIGEgd29yZCBpZiB0aGVyZSBpcyBh
CkBAIC0xMTgyLDE2ICsxMTgyLDE2IEBAIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6Y29t
bWl0QW5kVXBkYXRlTGluZUJyZWFrSWZOZWVkZWQoKQogICAgIH0KIH0KIAotaW5saW5lIFRyYWls
aW5nT2JqZWN0czo6Q29sbGFwc2VGaXJzdFNwYWNlIGNoZWNrV2hpdGVzcGFjZUNvbGxhcHNpbmdU
cmFuc2l0aW9ucyhMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSYgbGluZVdoaXRlc3BhY2VD
b2xsYXBzaW5nU3RhdGUsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBsQnJlYWspCitpbmxpbmUgVHJh
aWxpbmdPYmplY3RzOjpDb2xsYXBzZUZpcnN0U3BhY2UgY2hlY2tXaGl0ZXNwYWNlQ29sbGFwc2lu
Z1RyYW5zaXRpb25zKExpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlJiBsaW5lV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZSwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGxCcmVhaykKIHsK
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgb3VyIGxhc3QgdHJhbnNpdGlvbiBpcyBhIHN0YXJ0IHBv
aW50IGJleW9uZCB0aGUgbGluZSBicmVhay4gSWYgc28sCiAgICAgLy8gc2hhdmUgaXQgb2ZmIHRo
ZSBsaXN0LCBhbmQgc2hhdmUgb2ZmIGEgdHJhaWxpbmcgc3BhY2UgaWYgdGhlIHByZXZpb3VzIGVu
ZCBwb2ludCBkb2Vzbid0CiAgICAgLy8gcHJlc2VydmUgd2hpdGVzcGFjZS4KICAgICBpZiAobEJy
ZWFrLnJlbmRlcmVyKCkgJiYgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUubnVtVHJhbnNp
dGlvbnMoKSAmJiAhKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLm51bVRyYW5zaXRpb25z
KCkgJSAyKSkgewotICAgICAgICBjb25zdCBJbmxpbmVJdGVyYXRvciogdHJhbnNpdGlvbnMgPSBs
aW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS50cmFuc2l0aW9ucygpLmRhdGEoKTsKLSAgICAg
ICAgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZHBvaW50ID0gdHJhbnNpdGlvbnNbbGluZVdoaXRl
c3BhY2VDb2xsYXBzaW5nU3RhdGUubnVtVHJhbnNpdGlvbnMoKSAtIDJdOwotICAgICAgICBjb25z
dCBJbmxpbmVJdGVyYXRvciYgc3RhcnRwb2ludCA9IHRyYW5zaXRpb25zW2xpbmVXaGl0ZXNwYWNl
Q29sbGFwc2luZ1N0YXRlLm51bVRyYW5zaXRpb25zKCkgLSAxXTsKLSAgICAgICAgSW5saW5lSXRl
cmF0b3IgY3VycnBvaW50ID0gZW5kcG9pbnQ7CisgICAgICAgIGNvbnN0IExlZ2FjeUlubGluZUl0
ZXJhdG9yKiB0cmFuc2l0aW9ucyA9IGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRyYW5z
aXRpb25zKCkuZGF0YSgpOworICAgICAgICBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5k
cG9pbnQgPSB0cmFuc2l0aW9uc1tsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5udW1UcmFu
c2l0aW9ucygpIC0gMl07CisgICAgICAgIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBzdGFy
dHBvaW50ID0gdHJhbnNpdGlvbnNbbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUubnVtVHJh
bnNpdGlvbnMoKSAtIDFdOworICAgICAgICBMZWdhY3lJbmxpbmVJdGVyYXRvciBjdXJycG9pbnQg
PSBlbmRwb2ludDsKICAgICAgICAgd2hpbGUgKCFjdXJycG9pbnQuYXRFbmQoKSAmJiBjdXJycG9p
bnQgIT0gc3RhcnRwb2ludCAmJiBjdXJycG9pbnQgIT0gbEJyZWFrKQogICAgICAgICAgICAgY3Vy
cnBvaW50LmluY3JlbWVudCgpOwogICAgICAgICBpZiAoY3VycnBvaW50ID09IGxCcmVhaykgewpA
QCAtMTIwNiw3ICsxMjA2LDcgQEAgaW5saW5lIFRyYWlsaW5nT2JqZWN0czo6Q29sbGFwc2VGaXJz
dFNwYWNlIGNoZWNrV2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9ucygKICAgICByZXR1cm4g
VHJhaWxpbmdPYmplY3RzOjpDb2xsYXBzZUZpcnN0U3BhY2U6OlllczsKIH0KIAotaW5saW5lIElu
bGluZUl0ZXJhdG9yIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlRW5kT2ZMaW5lKCkKK2lubGluZSBM
ZWdhY3lJbmxpbmVJdGVyYXRvciBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUVuZE9mTGluZSgpCiB7
CiAgICAgaWYgKG1fbGluZUJyZWFrID09IG1fcmVzb2x2ZXIucG9zaXRpb24oKSkgewogICAgICAg
ICBpZiAoIW1fbGluZUJyZWFrLnJlbmRlcmVyKCkgfHwgIW1fbGluZUJyZWFrLnJlbmRlcmVyKCkt
PmlzQlIoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGlu
ZUJyZWFrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIu
Y3BwCmluZGV4IDZmZThlZjFjMjQ0OWU3M2ZhZGE3MDBlMTNkNzQ1MzEyNmZkNGZiZmQuLjAwZjc1
MmQ1YjEyNWE3ZjM1YTg0MmRkMjhmY2E1MjZlZTIxMWNhZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBM
aW5lQnJlYWtlcjo6cmVzZXQoKQogLy8gb2JqZWN0IGl0ZXJhdGlvbiBwcm9jZXNzLgogLy8gTkIu
IHRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYW55IGZsb2F0aW5nIGVsZW1lbnRzIHRoYXQgd291
bGQgb3RoZXJ3aXNlCiAvLyBiZSBza2lwcGVkIGJ1dCBpdCB3aWxsIG5vdCBwb3NpdGlvbiB0aGVt
Lgotdm9pZCBMaW5lQnJlYWtlcjo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRv
ciYgaXRlcmF0b3IsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykKK3ZvaWQgTGluZUJyZWFrZXI6
OnNraXBUcmFpbGluZ1doaXRlc3BhY2UoTGVnYWN5SW5saW5lSXRlcmF0b3ImIGl0ZXJhdG9yLCBj
b25zdCBMaW5lSW5mbyYgbGluZUluZm8pCiB7CiAgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgp
ICYmICFyZXF1aXJlc0xpbmVCb3goaXRlcmF0b3IsIGxpbmVJbmZvLCBUcmFpbGluZ1doaXRlc3Bh
Y2UpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCYgb2JqZWN0ID0gKml0ZXJhdG9yLnJlbmRlcmVy
KCk7CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgTGluZUJyZWFrZXI6OnNraXBMZWFkaW5nV2hpdGVz
cGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lSW5mbyYKICAgICByZXNvbHZl
ci5jb21taXRFeHBsaWNpdEVtYmVkZGluZygpOwogfQogCi1JbmxpbmVJdGVyYXRvciBMaW5lQnJl
YWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lSW5m
byYgbGluZUluZm8sIFJlbmRlclRleHRJbmZvJiByZW5kZXJUZXh0SW5mbywgRmxvYXRpbmdPYmpl
Y3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVu
YXRlZExpbmVzLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQorTGVnYWN5SW5s
aW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVy
JiByZXNvbHZlciwgTGluZUluZm8mIGxpbmVJbmZvLCBSZW5kZXJUZXh0SW5mbyYgcmVuZGVyVGV4
dEluZm8sIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCB1bnNpZ25l
ZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1
cmVtZW50cykKIHsKICAgICByZXNldCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvTGluZUJyZWFrZXIuaAppbmRleCBlODNkZTM0YWY1MmEzOGE3YjJmZDI5MmUxNjhhODQ4YzRj
ZGJhYzIyLi5mYmQ0MjU4Zjk0YjdhOWZkZTVhZTM3MTJjNTg1MjRmNjBmZDkyOWQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmgKQEAgLTI0LDcgKzI0LDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJJbmxpbmVJdGVyYXRvci5oIgorI2luY2x1
ZGUgIkxlZ2FjeUlubGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGluZUluZm8uaCIKICNpbmNs
dWRlICJMaW5lSW5saW5lSGVhZGVycy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTUx
LDcgKzUxLDcgQEAgcHVibGljOgogICAgICAgICByZXNldCgpOwogICAgIH0KIAotICAgIElubGlu
ZUl0ZXJhdG9yIG5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiwgTGluZUluZm8mLCBS
ZW5kZXJUZXh0SW5mbyYsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5l
LCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgV29yZE1lYXN1cmVtZW50cyYp
OworICAgIExlZ2FjeUlubGluZUl0ZXJhdG9yIG5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29s
dmVyJiwgTGluZUluZm8mLCBSZW5kZXJUZXh0SW5mbyYsIEZsb2F0aW5nT2JqZWN0KiBsYXN0Rmxv
YXRGcm9tUHJldmlvdXNMaW5lLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywg
V29yZE1lYXN1cmVtZW50cyYpOwogCiAgICAgYm9vbCBsaW5lV2FzSHlwaGVuYXRlZCgpIHsgcmV0
dXJuIG1faHlwaGVuYXRlZDsgfQogICAgIGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gqPiYgcG9zaXRp
b25lZE9iamVjdHMoKSB7IHJldHVybiBtX3Bvc2l0aW9uZWRPYmplY3RzOyB9CkBAIC02MCw3ICs2
MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgdm9pZCBz
a2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiwgY29uc3QgTGluZUluZm8mKTsK
KyAgICB2b2lkIHNraXBUcmFpbGluZ1doaXRlc3BhY2UoTGVnYWN5SW5saW5lSXRlcmF0b3ImLCBj
b25zdCBMaW5lSW5mbyYpOwogICAgIHZvaWQgc2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJp
ZGlSZXNvbHZlciYsIExpbmVJbmZvJiwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2
aW91c0xpbmUsIExpbmVXaWR0aCYpOwogCiAgICAgRmxvYXRpbmdPYmplY3QqIGluc2VydEZsb2F0
aW5nT2JqZWN0KFJlbmRlckJveCYgZmxvYXRCb3gpIHsgcmV0dXJuIG1fYmxvY2suaW5zZXJ0Rmxv
YXRpbmdPYmplY3QoZmxvYXRCb3gpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAppbmRleCBhYTQ1MWVkMzAzZmFjNWZjYmE0NDhmN2Vm
NDUwMWJjZDUzZjVlYjI5Li5jMjRkNWNhYThlZTg5NGYzZWI1OTJjNzczNjczYzRhYTEyMDVhY2Yy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVh
ZGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxpbmVIZWFk
ZXJzLmgKQEAgLTcyLDcgKzcyLDcgQEAgaW5saW5lIGJvb2wgc2hvdWxkQ29sbGFwc2VXaGl0ZVNw
YWNlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgTGluZUluZm8mIGwKICAgICAgICAg
fHwgKHdoaXRlc3BhY2VQb3NpdGlvbiA9PSBUcmFpbGluZ1doaXRlc3BhY2UgJiYgc3R5bGUtPndo
aXRlU3BhY2UoKSA9PSBXaGl0ZVNwYWNlOjpQcmVXcmFwICYmICghbGluZUluZm8uaXNFbXB0eSgp
IHx8ICFsaW5lSW5mby5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSkpOwogfQogCi1pbmxpbmUg
Ym9vbCBza2lwTm9uQnJlYWtpbmdTcGFjZShjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQsIGNvbnN0
IExpbmVJbmZvJiBsaW5lSW5mbykKK2lubGluZSBib29sIHNraXBOb25CcmVha2luZ1NwYWNlKGNv
bnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBpdCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvKQog
ewogICAgIGlmIChpdC5yZW5kZXJlcigpLT5zdHlsZSgpLm5ic3BNb2RlKCkgIT0gTkJTUE1vZGU6
OlNwYWNlIHx8IGl0LmN1cnJlbnQoKSAhPSBub0JyZWFrU3BhY2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTk2LDcgKzk2LDcgQEAgaW5saW5lIGJvb2wgYWx3YXlzUmVxdWlyZXNMaW5lQm94
KGNvbnN0IFJlbmRlcklubGluZSYgZmxvdykKICAgICByZXR1cm4gaXNFbXB0eUlubGluZShmbG93
KSAmJiBoYXNJbmxpbmVEaXJlY3Rpb25Cb3JkZXJzUGFkZGluZ09yTWFyZ2luKGZsb3cpOwogfQog
Ci1pbmxpbmUgYm9vbCByZXF1aXJlc0xpbmVCb3goY29uc3QgSW5saW5lSXRlcmF0b3ImIGl0LCBj
b25zdCBMaW5lSW5mbyYgbGluZUluZm8gPSBMaW5lSW5mbygpLCBXaGl0ZXNwYWNlUG9zaXRpb24g
d2hpdGVzcGFjZVBvc2l0aW9uID0gTGVhZGluZ1doaXRlc3BhY2UpCitpbmxpbmUgYm9vbCByZXF1
aXJlc0xpbmVCb3goY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGl0LCBjb25zdCBMaW5lSW5m
byYgbGluZUluZm8gPSBMaW5lSW5mbygpLCBXaGl0ZXNwYWNlUG9zaXRpb24gd2hpdGVzcGFjZVBv
c2l0aW9uID0gTGVhZGluZ1doaXRlc3BhY2UpCiB7CiAgICAgaWYgKGl0LnJlbmRlcmVyKCktPmlz
RmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3Rz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAK
aW5kZXggOTJmMjU3ZGRiNzFlZjdjNzBlMzVjMTVmMDkyM2U1MWU2ZmNkNGYyMi4uYmUyZmVhMTU0
NWFmYTRhNjU1MjZiOWFmNjdiYjQ4OWIzNDQxYjY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCkBAIC0yNSwxMSArMjUsMTEgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUcmFpbGluZ09iamVjdHMuaCIKIAotI2lu
Y2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SW5saW5lSXRlcmF0b3Iu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRl
V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMoTGluZVdoaXRl
c3BhY2VDb2xsYXBzaW5nU3RhdGUmIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLCBjb25z
dCBJbmxpbmVJdGVyYXRvciYgbEJyZWFrLCBDb2xsYXBzZUZpcnN0U3BhY2UgY29sbGFwc2VGaXJz
dFNwYWNlKQordm9pZCBUcmFpbGluZ09iamVjdHM6OnVwZGF0ZVdoaXRlc3BhY2VDb2xsYXBzaW5n
VHJhbnNpdGlvbnNGb3JUcmFpbGluZ0JveGVzKExpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRl
JiBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0
b3ImIGxCcmVhaywgQ29sbGFwc2VGaXJzdFNwYWNlIGNvbGxhcHNlRmlyc3RTcGFjZSkKIHsKICAg
ICBpZiAoIW1fd2hpdGVzcGFjZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjMsNyArNjMsNyBAQCB2
b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlV2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9u
c0ZvclRyYWlsaW5nQm94ZXMoTGluZQogICAgICAgICAvLyBBZGQgYSBuZXcgZW5kIHRyYW5zaXRp
b24gdGhhdCBzdG9wcyByaWdodCBhdCB0aGUgdmVyeSBlbmQuCiAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IG1fd2hpdGVzcGFjZS0+dGV4dCgpLmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBw
b3MgPSBsZW5ndGggPj0gMiA/IGxlbmd0aCAtIDIgOiBVSU5UX01BWDsKLSAgICAgICAgSW5saW5l
SXRlcmF0b3IgZW5kTWlkKDAsIG1fd2hpdGVzcGFjZSwgcG9zKTsKKyAgICAgICAgTGVnYWN5SW5s
aW5lSXRlcmF0b3IgZW5kTWlkKDAsIG1fd2hpdGVzcGFjZSwgcG9zKTsKICAgICAgICAgbGluZVdo
aXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RhcnRJZ25vcmluZ1NwYWNlcyhlbmRNaWQpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYm94ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdu
b3JlZFNwYWNlcyhtX2JveGVzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvVHJhaWxpbmdPYmplY3RzLmgKaW5kZXggMTI2ZGY4OGVlZDY0NTg4ZGQ5ZWU0NDM3YTI2Mzhk
MWNmZTNkZjZkOC4uMzZlYTNiYjdlOGU4MmIyNTJkZDE1MGEzMDY3YmE4ZDA3ZTQ3N2MyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmgKQEAg
LTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbmxpbmVJdGVy
YXRvcjsKK2NsYXNzIExlZ2FjeUlubGluZUl0ZXJhdG9yOwogY2xhc3MgUmVuZGVyQm94TW9kZWxP
YmplY3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogCkBAIC0zOCw4ICszOCw4IEBAIHN0cnVjdCBCaWRp
SXNvbGF0ZWRSdW47CiB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1bj4gY2xhc3Mg
QmlkaVJlc29sdmVyOwogdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNz
IElzb2xhdGVSdW4+IGNsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlOwogdGVtcGxhdGUgPGNs
YXNzIEl0ZXJhdG9yPiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOwotdHlwZWRlZiBC
aWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxJbmxpbmVJdGVyYXRvciwgQmlkaVJ1biwgQmlkaUlzb2xh
dGVkUnVuPiBJbmxpbmVCaWRpUmVzb2x2ZXI7Ci10eXBlZGVmIFdoaXRlc3BhY2VDb2xsYXBzaW5n
U3RhdGU8SW5saW5lSXRlcmF0b3I+IExpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOwordHlw
ZWRlZiBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxMZWdhY3lJbmxpbmVJdGVyYXRvciwgQmlkaVJ1
biwgQmlkaUlzb2xhdGVkUnVuPiBJbmxpbmVCaWRpUmVzb2x2ZXI7Cit0eXBlZGVmIFdoaXRlc3Bh
Y2VDb2xsYXBzaW5nU3RhdGU8TGVnYWN5SW5saW5lSXRlcmF0b3I+IExpbmVXaGl0ZXNwYWNlQ29s
bGFwc2luZ1N0YXRlOwogCiBjbGFzcyBUcmFpbGluZ09iamVjdHMgewogcHVibGljOgpAQCAtNTcs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBDb2xsYXBzZUZpcnN0
U3BhY2UgeyBObywgWWVzIH07Ci0gICAgdm9pZCB1cGRhdGVXaGl0ZXNwYWNlQ29sbGFwc2luZ1Ry
YW5zaXRpb25zRm9yVHJhaWxpbmdCb3hlcyhMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSYs
IGNvbnN0IElubGluZUl0ZXJhdG9yJiBsQnJlYWssIENvbGxhcHNlRmlyc3RTcGFjZSk7CisgICAg
dm9pZCB1cGRhdGVXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25zRm9yVHJhaWxpbmdCb3hl
cyhMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSYsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJh
dG9yJiBsQnJlYWssIENvbGxhcHNlRmlyc3RTcGFjZSk7CiAKIHByaXZhdGU6CiAgICAgUmVuZGVy
VGV4dCogbV93aGl0ZXNwYWNlIHsgbnVsbHB0ciB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmNwcAppbmRl
eCA5MDNjNWRkZjhhMjNhZGU1NWY1MTkyNGYyOTViNjk0MjUxNzlhYmU0Li41YmQ2NjAxYWFhYmE4
ZjQ1YjhkYTcwNjI1MGY2YzA3ODY0YzM1NWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmNwcApAQCAt
MjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVC
dWlsZGVyTGlzdC5oIgogCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJM
ZWdhY3lJbmxpbmVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmVJbmxpbmVIZWFkZXJzLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJr
ZXIuaCIKQEAgLTM0LDEwICszNCwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJ
WE1FOiBUaGlzIHNob3VsZG4ndCBuZWVkIElubGluZUl0ZXJhdG9yCisvLyBGSVhNRTogVGhpcyBz
aG91bGRuJ3QgbmVlZCBMZWdhY3lJbmxpbmVJdGVyYXRvcgogc3RhdGljIGJvb2wgZ2VuZXJhdGVz
TGluZUJveGVzRm9ySW5saW5lQ2hpbGQoUmVuZGVyQmxvY2smIGN1cnJlbnQsIFJlbmRlck9iamVj
dCogaW5saW5lT2JqKQogewotICAgIElubGluZUl0ZXJhdG9yIGl0KCZjdXJyZW50LCBpbmxpbmVP
YmosIDApOworICAgIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0KCZjdXJyZW50LCBpbmxpbmVPYmos
IDApOwogICAgIHdoaWxlICghaXQuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KGl0KSkKICAg
ICAgICAgaXQuaW5jcmVtZW50KCk7CiAgICAgcmV0dXJuICFpdC5hdEVuZCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>