<?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>116824</bug_id>
          
          <creation_ts>2013-05-27 05:32:05 -0700</creation_ts>
          <short_desc>[BlackBerry] Move PagePopup implementation to WebKitSupport</short_desc>
          <delta_ts>2013-05-27 08:35:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>anilsson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>rwlbuis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>893990</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-05-27 05:32:05 -0700</bug_when>
    <thetext>After r150434 PagePopup implementation in BlackBerry port is independent from WebCore. The classes are now in the BlackBerry::WebKit namespace so they can be moved from WEbCoresupport to WebKitSupport. Also, now that the implementation is not shared, it can be simplified a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894003</commentid>
    <comment_count>1</comment_count>
      <attachid>202977</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-05-27 06:02:49 -0700</bug_when>
    <thetext>Created attachment 202977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894018</commentid>
    <comment_count>2</comment_count>
      <attachid>202977</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-05-27 07:28:01 -0700</bug_when>
    <thetext>Comment on attachment 202977
Patch

Looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894025</commentid>
    <comment_count>3</comment_count>
      <attachid>202977</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2013-05-27 07:51:56 -0700</bug_when>
    <thetext>Comment on attachment 202977
Patch

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894044</commentid>
    <comment_count>4</comment_count>
      <attachid>202977</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-27 08:34:59 -0700</bug_when>
    <thetext>Comment on attachment 202977
Patch

Clearing flags on attachment: 202977

Committed r150756: &lt;http://trac.webkit.org/changeset/150756&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894045</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-27 08:35:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202977</attachid>
            <date>2013-05-27 06:02:49 -0700</date>
            <delta_ts>2013-05-27 08:34:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bb-page-popup.diff</filename>
            <type>text/plain</type>
            <size>93265</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZWI1NzIyOS4uMjA2YzhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAxMy0wNS0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0JsYWNrQmVycnldIE1vdmUgUGFnZVBvcHVwIGltcGxlbWVudGF0aW9uIHRvIFdl
YktpdFN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExNjgyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBVcGRhdGUgbmV3IGZpbGUgcGF0aHMgYW5k
IG5hbWVzLgorCiAyMDEzLTA1LTI0ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIFtXaW5kb3dzXSBFeHBvc2UgZGF0YWJhc2Ugc3RvcmFnZSBhbmQgY2FjaGUg
bG9jYXRpb25zIHZpYSBwcmVmZXJlbmNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmlu
ZGV4IDgzZGQwMWQuLmQ3MWFmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDkxIEBACisyMDEzLTA1LTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gTW92ZSBQYWdlUG9wdXAgaW1wbGVt
ZW50YXRpb24gdG8gV2ViS2l0U3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE2ODI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWZ0ZXIgcjE1MDQzNCBQYWdlUG9wdXAgaW1wbGVtZW50YXRpb24g
aW4gQmxhY2tCZXJyeSBwb3J0IGlzCisgICAgICAgIGluZGVwZW5kZW50IGZyb20gV2ViQ29yZS4g
VGhlIGNsYXNzZXMgYXJlIG5vdyBpbiB0aGUKKyAgICAgICAgQmxhY2tCZXJyeTo6V2ViS2l0IG5h
bWVzcGFjZSBzbyB0aGV5IGNhbiBiZSBtb3ZlZCBmcm9tCisgICAgICAgIFdlYkNvcmVzdXBwb3J0
IHRvIFdlYktpdFN1cHBvcnQgYW5kIHJlbmFtZWQgdG8gcmVtb3ZlIHRoZQorICAgICAgICBCbGFj
a0JlcnJ5IHN1ZmZpeCB3aGljaCBpcyBub3cgcmVkdW5kYW50LiBBbHNvLCBub3cgdGhhdCB0aGUK
KyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgbm90IHNoYXJlZCwgaXQgY2FuIGJlIHNpbXBsaWZp
ZWQgYSBiaXQgbW9yZS4KKworICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OldlYlBhZ2VQcml2YXRlKTogVXBkYXRl
IHRvCisgICAgICAgIEFQSSBjaGFuZ2VzLgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlOjppbml0UG9wdXBXZWJWaWV3KTogRGl0dG8uCisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpvcGVuUGFnZVBvcHVwKTogRGl0dG8uCisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpjbG9zZVBhZ2VQb3B1cCk6IERpdHRv
LgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6aGFzT3BlbmVk
UG9wdXApOiBEaXR0by4KKyAgICAgICAgKiBBcGkvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0
KTogRGl0dG8uCisgICAgICAgICogQXBpL1dlYlBhZ2VfcC5oOgorICAgICAgICAoV2ViS2l0KTog
RGl0dG8uCisgICAgICAgIChXZWJQYWdlUHJpdmF0ZSk6IFJlbmFtZSBtX3NlbGVjdFBvcHVwIGFz
IG1fcGFnZVBvcHVwLCBzaW5jZSBpdAorICAgICAgICBjYW4gYWxzbyBwb2ludCB0byBhIGNvbG9y
IHBpY2tlciBvciBkYXRlIHBpY2tlciBwYWdlIHBvcHVwLiBBbHNvCisgICAgICAgIHVzZSBSZWZQ
dHIgaW5zdGVhZCBvZiByYXcgcG9pbnRlci4KKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0NvbG9y
UGlja2VyQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9Db2xvclBpY2tlckNsaWVudC5jcHAuCisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkNvbG9yUGlja2VyQ2xpZW50OjpDb2xvclBpY2tlckNsaWVudCk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkNvbG9yUGlja2VyQ2xpZW50OjpnZW5lcmF0ZUhUTUwpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpDb2xvclBpY2tlckNsaWVudDo6c2V0VmFsdWVB
bmRDbG9zZVBvcHVwKToKKyAgICAgICAgUmV0dXJuIGVhcmx5IGlmIHBvcHVwIGhhcyBiZWVuIGNs
b3NlZCBhbHJlYWR5LgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpDb2xvclBpY2tlckNs
aWVudDo6ZGlkQ2xvc2VQb3B1cCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9Db2xvclBpY2tl
ckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0NvbG9yUGlja2VyQ2xpZW50LmguCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9EYXRl
UGlja2VyQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmNwcC4KKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6RGF0ZVBpY2tlckNsaWVudDo6RGF0ZVBpY2tlckNsaWVudCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkRhdGVQaWNrZXJDbGllbnQ6On5EYXRlUGlja2VyQ2xpZW50KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RGF0ZVBpY2tlckNsaWVudDo6Z2VuZXJhdGVI
VE1MKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RGF0ZVBpY2tlckNsaWVudDo6c2V0
VmFsdWVBbmRDbG9zZVBvcHVwKToKKyAgICAgICAgUmV0dXJuIGVhcmx5IGlmIHBvcHVwIGhhcyBi
ZWVuIGNsb3NlZCBhbHJlYWR5LgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpEYXRlUGlj
a2VyQ2xpZW50OjpkaWRDbG9zZVBvcHVwKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
RGF0ZVBpY2tlckNsaWVudDo6Z2VuZXJhdGVEYXRlTGFiZWxzKToKKyAgICAgICAgKiBXZWJLaXRT
dXBwb3J0L0RhdGVQaWNrZXJDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmguCisgICAgICAgICogV2Vi
S2l0U3VwcG9ydC9QYWdlUG9wdXAuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwLgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpQYWdlUG9wdXA6OlBhZ2VQb3B1cCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OlBhZ2VQb3B1cDo6flBhZ2VQb3B1cCk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OlBhZ2VQb3B1cDo6aW5pdGlhbGl6ZSk6IFJlbmFtZWQgYXMgaW5pdGlhbGl6
ZQorICAgICAgICBhbmQgbWFkZSB2b2lkLCBzaW5jZSBpdCBhbHdheXMgcmV0dXJuZWQgdHJ1ZSBh
bmQgdGhlIGNhbGxlcnMKKyAgICAgICAgaWdub3JlZCB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpQYWdlUG9wdXA6OndyaXRlRG9jdW1lbnQpOiBSZW5hbWVk
IGZyb20KKyAgICAgICAgZ2VuZXJhdGVIVE1MIGZvciBjb25zaXN0ZW5jeSB3aXRoIFBhZ2VQb3B1
cENsaWVudDo6d3JpdGVEb2N1bWVudCgpCisgICAgICAgIGFuZCB0byBhdm9pZCBjb25mdXNpb24g
d2l0aCBnZW5lcmF0ZUhUTUwgbWV0aG9kIGluIHRoZSBjbGllbnRzCisgICAgICAgIHRoYXQgY3Jl
YXRlIHRoZSBIVE1MIGNvbnRlbnRzIGJ1dCB0aGV5IGRvbid0IHdyaXRlIHRoZSBkb2N1bWVudC4K
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6UGFnZVBvcHVwOjpzZXRWYWx1ZUFuZENsb3Nl
UG9wdXBDYWxsYmFjayk6CisgICAgICAgIE1ha2UgaXQgc3RhdGljIG1lbWJlciBvZiBQYWdlUG9w
dXAgc2luY2UgdGhlIEpTIG9iamVjdCBub3cgaG9sZHMgYQorICAgICAgICByZWZlcmVuY2Ugb2Yg
UGFnZVBvcHVwIGluc3RhbmNlIGFzIHByaXZhdGUgZGF0YS4KKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6cG9wVXBFeHRlbnNpb25Jbml0aWFsaXplKTogVGFrZSBhIHJlZmVyZW5jZQorICAg
ICAgICBvZiB0aGUgUGFnZVBvcHVwIGluc3RhbmNlIHNhdmVkIGFzIHByaXZhdGUgZGF0YSBvZiB0
aGUgSlMgb2JqZWN0LgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojpwb3BVcEV4dGVuc2lv
bkZpbmFsaXplKTogVW5yZWYgdGhlIFBhZ2VQb3B1cAorICAgICAgICBpbnN0YW5jZSBzYXZlZCBh
cyBwcml2YXRlIGRhdGEgb2YgdGhlIEpTIG9iamVjdC4KKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6UGFnZVBvcHVwOjppbnN0YWxsRE9NRnVuY3Rpb24pOiBJbnN0ZWFkIG9mCisgICAgICAg
IHNhdmluZyB0aGUgY2xpZW50IGFzIHByaXZhdGUgZGF0YSBvZiB0aGUgSlMgb2JqZWN0IHVzaW5n
IGEgd3JhcHBlcgorICAgICAgICByZWZjb3VudGVkIG9iamVjdCwgc2F2ZSB0aGUgUGFnZVBvcHVw
IGluc3RhbmNlIHRoYXQgaXMgbm93CisgICAgICAgIHJlZmNvdW50ZWQgYW5kIGFjY2VzcyB0aGUg
Y2xpZW50IGZyb20gdGhlIFBhZ2VQb3B1cCBpbnN0YW5jZSBpbgorICAgICAgICB0aGUgY2FsbGJh
Y2suCisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlBhZ2VQb3B1cDo6Y2xvc2UpOiBSZW5h
bWVkIGZyb20gY2xvc2VQYWdlUG9wdXAKKyAgICAgICAgc2luY2UgUGFnZVBvcHVwOjpjbG9zZVBh
Z2VQb3B1cCB3YXMgYSBiaXQgcmVkdW5kYW50LgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvUGFn
ZVBvcHVwLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5oLgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpQYWdlUG9wdXA6OmNyZWF0ZSk6IFN0YXRpYyBtZW1iZXIgdG8gY3JlYXRlCisgICAgICAgIGlu
c3RhbmNlcyBvZiBQYWdlUG9wdXAgbm93IHRoYXQgaXQncyByZWZjb3VudGVkLgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvUGFnZVBvcHVwQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0JlcnJ5Q2xpZW50
LmNwcC4KKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6UGFnZVBvcHVwQ2xpZW50OjpQYWdl
UG9wdXBDbGllbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpQYWdlUG9wdXBDbGll
bnQ6OmNsb3NlUG9wdXApOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpQYWdlUG9wdXBD
bGllbnQ6OmRpZENsb3NlUG9wdXApOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpQYWdl
UG9wdXBDbGllbnQ6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
UGFnZVBvcHVwQ2xpZW50Ojp3cml0ZURvY3VtZW50KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0
L1BhZ2VQb3B1cENsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnlDbGllbnQuaC4KKyAgICAgICAgKiBX
ZWJLaXRTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5jcHAuCisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlNlbGVjdFBvcHVwQ2xpZW50OjpTZWxlY3RQb3B1
cENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlNlbGVjdFBvcHVwQ2xpZW50
Ojp+U2VsZWN0UG9wdXBDbGllbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpTZWxl
Y3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6U2VsZWN0UG9wdXBDbGllbnQ6OnNldFZhbHVlQW5kQ2xvc2VQb3B1cCk6CisgICAgICAgIFJl
dHVybiBlYXJseSBpZiBwb3B1cCBoYXMgYmVlbiBjbG9zZWQgYWxyZWFkeS4KKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6U2VsZWN0UG9wdXBDbGllbnQ6OmRpZENsb3NlUG9wdXApOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpTZWxlY3RQb3B1cENsaWVudDo6bm90aWZ5U2VsZWN0
aW9uQ2hhbmdlKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50Lmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2Vs
ZWN0UG9wdXBDbGllbnQuaC4KKwogMjAxMy0wNS0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFJFR1JFU1NJT04ocjE1
MDA3MSk6IEFuaW1hdGlvbiBwZXJmb3JtYW5jZSBpc3N1ZXMgaW4gc29tZSB3ZWJzaXRlcyB3aXRo
IENTUyB0cmFuc2Zvcm1zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tC
ZXJyeS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4
IGEzODMzZmUuLmUwYjE3YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFj
a0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtl
CkBAIC0xMDEsMjAgKzEwMSwxNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIGJs
YWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50QmxhY2tCZXJyeS5jcHAKICAg
ICBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05ldHdvcmtJbmZvQ2xpZW50QmxhY2tCZXJyeS5j
cHAKICAgICBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvbkNsaWVudEJsYWNr
QmVycnkuY3BwCi0gICAgYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0Jl
cnJ5LmNwcAotICAgIGJsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJy
eUNsaWVudC5jcHAKICAgICBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc0JsYWNrQmVycnkuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9OYXZpZ2F0
b3JDb250ZW50VXRpbHNDbGllbnRCbGFja0JlcnJ5LmNwcAotICAgIGJsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9TdWdnZXN0aW9uQm94SGFuZGxlci5jcHAKICAgICBibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L1N1Z2dlc3Rpb25Cb3hFbGVtZW50LmNwcAogICAgIGJsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvVmlicmF0aW9uQ2xpZW50QmxhY2tCZXJyeS5jcHAKLSAgICBibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0RhdGVQaWNrZXJDbGllbnQuY3BwCi0gICAgYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9y
dC9Db2xvclBpY2tlckNsaWVudC5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJv
dXREYXRhLmNwcAogICAgIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxl
LmNwcAogICAgIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDbGllbnQuY3Bw
CiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVZpc3VhbGl6YXRpb25W
aWV3cG9ydEFjY2Vzc29yLmNwcAorICAgIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Db2xvclBp
Y2tlckNsaWVudC5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRGF0ZVBpY2tlckNs
aWVudC5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRGVmYXVsdFRhcEhpZ2hsaWdo
dC5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKICAgICBi
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCkBAIC0xMjMsOCArMTIwLDEx
IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0luc3BlY3Rvck92ZXJsYXlCbGFja0JlcnJ5LmNwcAogICAgIGJsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9Ob3RpZmljYXRpb25NYW5hZ2VyLmNwcAorICAgIGJsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9QYWdlUG9wdXAuY3BwCisgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1BhZ2VQb3B1
cENsaWVudC5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUHJveGltaXR5RGV0ZWN0
b3IuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1JlbmRlclF1ZXVlLmNwcAorICAg
IGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5jcHAKICAgICBibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvU2VsZWN0aW9uSGFuZGxlci5jcHAKICAgICBibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvU2VsZWN0aW9uT3ZlcmxheS5jcHAKICAgICBibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvU3BlbGxpbmdIYW5kbGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
V2ViUGFnZS5jcHAKaW5kZXggODVkOWFhZC4uOGEzMTI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBAIC0xMDAsOCArMTAwLDggQEAKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiUGFnZVBvcHVwQmxhY2tCZXJyeS5oIgotI2luY2x1ZGUgIlBhZ2VQb3B1cEJsYWNrQmVy
cnlDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdlUG9wdXAuaCIKKyNpbmNsdWRlICJQYWdlUG9wdXBD
bGllbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgpAQCAtNDE2LDcg
KzQxNiw3IEBAIFdlYlBhZ2VQcml2YXRlOjpXZWJQYWdlUHJpdmF0ZShXZWJQYWdlKiB3ZWJQYWdl
LCBXZWJQYWdlQ2xpZW50KiBjbGllbnQsIGNvbnN0IEluCiAgICAgLCBtX2hhc0luUmVnaW9uU2Ny
b2xsYWJsZUFyZWFzKGZhbHNlKQogICAgICwgbV91cGRhdGVEZWxlZ2F0ZWRPdmVybGF5c0Rpc3Bh
dGNoZWQoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkVGFza3NUaW1lcih0aGlzLCAmV2ViUGFnZVBy
aXZhdGU6OmRlZmVycmVkVGFza3NUaW1lckZpcmVkKQotICAgICwgbV9zZWxlY3RQb3B1cCgwKQor
ICAgICwgbV9wYWdlUG9wdXAoMCkKICAgICAsIG1fYXV0b2ZpbGxNYW5hZ2VyKEF1dG9maWxsTWFu
YWdlcjo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9kb2N1bWVudFN0eWxlUmVjYWxjUG9zdHBvbmVk
KGZhbHNlKQogICAgICwgbV9kb2N1bWVudENoaWxkTmVlZHNTdHlsZVJlY2FsYyhmYWxzZSkKQEAg
LTQ5NDMsNyArNDk0Myw3IEBAIGJvb2wgV2ViUGFnZTo6bm9kZUhhc0hvdmVyKGNvbnN0IFdlYkRP
TU5vZGUmIG5vZGUpCiAKIHZvaWQgV2ViUGFnZTo6aW5pdFBvcHVwV2ViVmlldyhCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2UqIHdlYlBhZ2UpCiB7Ci0gICAgZC0+bV9zZWxlY3RQb3B1cC0+aW5p
dCh3ZWJQYWdlKTsKKyAgICBkLT5tX3BhZ2VQb3B1cC0+aW5pdGlhbGl6ZSh3ZWJQYWdlKTsKIH0K
IAogU3RyaW5nIFdlYlBhZ2VQcml2YXRlOjpmaW5kUGF0dGVyblN0cmluZ0ZvclVybChjb25zdCBL
VVJMJiB1cmwpIGNvbnN0CkBAIC02MDY0LDEwICs2MDY0LDEwIEBAIHZvaWQgV2ViUGFnZTo6cmVt
b3ZlQ29tcG9zaXRpbmdUaHJlYWRPdmVybGF5KFdlYk92ZXJsYXkqIG92ZXJsYXkpCiAjZW5kaWYK
IH0KIAotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6b3BlblBhZ2VQb3B1cChQYWdlUG9wdXBCbGFja0Jl
cnJ5Q2xpZW50KiBwb3B1cENsaWVudCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgb3JpZ2luQm91
bmRzSW5Sb290VmlldykKK2Jvb2wgV2ViUGFnZVByaXZhdGU6Om9wZW5QYWdlUG9wdXAoUGFnZVBv
cHVwQ2xpZW50KiBwb3B1cENsaWVudCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgb3JpZ2luQm91
bmRzSW5Sb290VmlldykKIHsKICAgICBjbG9zZVBhZ2VQb3B1cCgpOwotICAgIG1fc2VsZWN0UG9w
dXAgPSBuZXcgUGFnZVBvcHVwQmxhY2tCZXJyeSh0aGlzLCBwb3B1cENsaWVudCk7CisgICAgbV9w
YWdlUG9wdXAgPSBQYWdlUG9wdXA6OmNyZWF0ZSh0aGlzLCBwb3B1cENsaWVudCk7CiAKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IHBvcHVwUmVjdCA9IG1fcGFnZS0+Y2hyb21lKCkuY2xpZW50KCktPnJv
b3RWaWV3VG9TY3JlZW4ob3JpZ2luQm91bmRzSW5Sb290Vmlldyk7CiAgICAgcG9wdXBSZWN0LnNl
dFNpemUocG9wdXBDbGllbnQtPmNvbnRlbnRTaXplKCkpOwpAQCAtNjA4MSwxOCArNjA4MSwxNyBA
QCBib29sIFdlYlBhZ2VQcml2YXRlOjpvcGVuUGFnZVBvcHVwKFBhZ2VQb3B1cEJsYWNrQmVycnlD
bGllbnQqIHBvcHVwQ2xpZW50LCBjb25zdAogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpjbG9zZVBh
Z2VQb3B1cCgpCiB7Ci0gICAgaWYgKCFtX3NlbGVjdFBvcHVwKQorICAgIGlmICghbV9wYWdlUG9w
dXApCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2VsZWN0UG9wdXAtPmNsb3NlUG9wdXAoKTsK
KyAgICBtX3BhZ2VQb3B1cC0+Y2xvc2UoKTsKICAgICBtX2NsaWVudC0+Y2xvc2VQb3B1cFdlYlZp
ZXcoKTsKLSAgICBkZWxldGUgbV9zZWxlY3RQb3B1cDsKLSAgICBtX3NlbGVjdFBvcHVwID0gMDsK
KyAgICBtX3BhZ2VQb3B1cCA9IDA7CiB9CiAKIGJvb2wgV2ViUGFnZVByaXZhdGU6Omhhc09wZW5l
ZFBvcHVwKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zZWxlY3RQb3B1cDsKKyAgICByZXR1cm4g
bV9wYWdlUG9wdXA7CiB9CiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldEluc3BlY3Rvck92ZXJs
YXlDbGllbnQoSW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9yT3ZlcmxheUNsaWVudCogaW5zcGVj
dG9yT3ZlcmxheUNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmgKaW5k
ZXggYWQzMjJhMS4uZTY5ZTA2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdl
LmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgQmFja2luZ1N0b3JlOwogY2xhc3MgQmFja2luZ1N0
b3JlQ2xpZW50OwogY2xhc3MgQmFja2luZ1N0b3JlUHJpdmF0ZTsKIGNsYXNzIEluUmVnaW9uU2Ny
b2xsZXI7Ci1jbGFzcyBQYWdlUG9wdXBCbGFja0JlcnJ5OworY2xhc3MgUGFnZVBvcHVwOwogY2xh
c3MgUmVuZGVyUXVldWU7CiBjbGFzcyBXZWJDb29raWVKYXI7CiBjbGFzcyBXZWJPdmVybGF5OwpA
QCAtMzg5LDcgKzM4OSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6QmFj
a2luZ1N0b3JlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OkJhY2tpbmdTdG9yZUNsaWVudDsK
ICAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOwotICAgIGZyaWVu
ZCBjbGFzcyBXZWJLaXQ6OlBhZ2VQb3B1cEJsYWNrQmVycnk7CisgICAgZnJpZW5kIGNsYXNzIFdl
YktpdDo6UGFnZVBvcHVwOwogICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlJlbmRlclF1ZXVlOwog
ICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9yOwogICAgIGZyaWVuZCBj
bGFzcyBXZWJLaXQ6OldlYlBhZ2VHcm91cExvYWREZWZlcnJlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYlBhZ2VfcC5oCmluZGV4IDM2MDAzNjguLjI3MzU4NWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKKysrIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlX3AuaApAQCAtNzksOCArNzksOCBAQCBjbGFzcyBC
YWNraW5nU3RvcmVDbGllbnQ7CiBjbGFzcyBEdW1wUmVuZGVyVHJlZUNsaWVudDsKIGNsYXNzIElu
UGFnZVNlYXJjaE1hbmFnZXI7CiBjbGFzcyBJbnB1dEhhbmRsZXI7Ci1jbGFzcyBQYWdlUG9wdXBC
bGFja0JlcnJ5OwotY2xhc3MgUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudDsKK2NsYXNzIFBhZ2VQ
b3B1cDsKK2NsYXNzIFBhZ2VQb3B1cENsaWVudDsKIGNsYXNzIFNlbGVjdGlvbkhhbmRsZXI7CiBj
bGFzcyBUb3VjaEV2ZW50SGFuZGxlcjsKIGNsYXNzIFdlYkNvb2tpZUphcjsKQEAgLTQxMyw3ICs0
MTMsNyBAQCBwdWJsaWM6CiAKICAgICBCYWNraW5nU3RvcmVDbGllbnQqIGJhY2tpbmdTdG9yZUNs
aWVudCgpIGNvbnN0OwogCi0gICAgYm9vbCBvcGVuUGFnZVBvcHVwKFBhZ2VQb3B1cEJsYWNrQmVy
cnlDbGllbnQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBvcmlnaW5Cb3VuZHNJblJvb3RWaWV3
KTsKKyAgICBib29sIG9wZW5QYWdlUG9wdXAoUGFnZVBvcHVwQ2xpZW50KiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgb3JpZ2luQm91bmRzSW5Sb290Vmlldyk7CiAgICAgdm9pZCBjbG9zZVBhZ2VQ
b3B1cCgpOwogICAgIGJvb2wgaGFzT3BlbmVkUG9wdXAoKSBjb25zdDsKIApAQCAtNjM5LDcgKzYz
OSw3IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpUaW1lcjxXZWJQYWdlUHJpdmF0ZT4gbV9kZWZl
cnJlZFRhc2tzVGltZXI7CiAKICAgICAvLyBUaGUgcG9wdXAgdGhhdCBvcGVuZWQgaW4gdGhpcyB3
ZWJwYWdlCi0gICAgUGFnZVBvcHVwQmxhY2tCZXJyeSogbV9zZWxlY3RQb3B1cDsKKyAgICBSZWZQ
dHI8UGFnZVBvcHVwPiBtX3BhZ2VQb3B1cDsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpBdXRvZmls
bE1hbmFnZXI+IG1fYXV0b2ZpbGxNYW5hZ2VyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ29sb3JQaWNrZXJDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NvbG9yUGlja2VyQ2xpZW50LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxM2I4NC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ29sb3JQaWNrZXJDbGllbnQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29sb3JQaWNr
ZXJDbGllbnQuaCIKLQotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJQ
b3B1cFBpY2tlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgotCi0jaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtU3RyaW5nLmg+Ci0jaW5jbHVkZSA8TG9jYWxlSGFuZGxlci5oPgotI2luY2x1
ZGUgPExvY2FsaXplUmVzb3VyY2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotREVGSU5FX1NUQVRJQ19MT0NBTChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TG9jYWxpemVSZXNvdXJjZSwgc19yZXNvdXJjZSwgKCkpOwotCi1Db2xvclBpY2tl
ckNsaWVudDo6Q29sb3JQaWNrZXJDbGllbnQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgdmFsdWUsIEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqIHdlYlBhZ2Us
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBQYWdlUG9wdXBCbGFj
a0JlcnJ5Q2xpZW50KHdlYlBhZ2UpCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLXsKLSAgICBn
ZW5lcmF0ZUhUTUwodmFsdWUpOwotfQotCi12b2lkIENvbG9yUGlja2VyQ2xpZW50OjpnZW5lcmF0
ZUhUTUwoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUpCi17Ci0gICAg
U3RyaW5nQnVpbGRlciBzb3VyY2U7Ci0gICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjxzdHlsZT5c
biIpOwotICAgIC8vIEluY2x1ZGUgQ1NTIGZpbGUuCi0gICAgc291cmNlLmFwcGVuZChwb3B1cENv
bnRyb2xCbGFja0JlcnJ5Q3NzLCBzaXplb2YocG9wdXBDb250cm9sQmxhY2tCZXJyeUNzcykpOwot
ICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCI8L3N0eWxlPlxuPHN0eWxlPiIpOwotICAgIHNvdXJj
ZS5hcHBlbmQoY29sb3JDb250cm9sQmxhY2tCZXJyeUNzcywgc2l6ZW9mKGNvbG9yQ29udHJvbEJs
YWNrQmVycnlDc3MpKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPC9zdHlsZT48L2hlYWQ+
PGJvZHk+XG4iKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPHNjcmlwdD5cbiIpOwotICAg
IHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1
bmN0aW9uIHNob3dJdCgpIHsiKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgid2luZG93LnBv
cHVwY29udHJvbC5zaG93KHsiKTsKLSAgICAvLyBBZGQgY29sb3IgdmFsdWUKLSAgICBzb3VyY2Uu
YXBwZW5kTGl0ZXJhbCgiaW5pdGlhbFZhbHVlOiIpOwotICAgIGlmICghdmFsdWUuZW1wdHkoKSkK
LSAgICAgICAgc291cmNlLmFwcGVuZCgiJyIgKyBTdHJpbmcodmFsdWUpICsgIicsIik7Ci0gICAg
ZWxzZQotICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgibnVsbCwiKTsKLSAgICAvLyBBZGQg
VUkgdGV4dAotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJ1aVRleHQ6IHsiKTsKLSAgICBzb3Vy
Y2UuYXBwZW5kKCJ0aXRsZTonIiArIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRTdHJp
bmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9DT0xPUl9USVRMRSkpICsgIicsIik7Ci0g
ICAgc291cmNlLmFwcGVuZCgic2xpZGVyc0xhYmVsOiciICsgU3RyaW5nOjpmcm9tVVRGOChzX3Jl
c291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UElDS0VSX0NPTE9SX1NMSURF
UlNfTEFCRUwpKSArICInLCIpOwotICAgIHNvdXJjZS5hcHBlbmQoInN3YXRjaGVzTGFiZWw6JyIg
KyBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpQSUNLRVJfQ09MT1JfU1dBVENIRVNfTEFCRUwpKSArICInLCIpOwotICAgIHNvdXJjZS5h
cHBlbmQoImRvbmVCdXR0b25MYWJlbDonIiArIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5n
ZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9ET05FX0JVVFRPTl9MQUJFTCkp
ICsgIicsIik7Ci0gICAgc291cmNlLmFwcGVuZCgiY2FuY2VsQnV0dG9uTGFiZWw6JyIgKyBTdHJp
bmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQ
SUNLRVJfQ0FOQ0VMX0JVVFRPTl9MQUJFTCkpICsgIicsIik7Ci0gICAgc291cmNlLmFwcGVuZExp
dGVyYWwoIn0sIik7Ci0gICAgLy8gQWRkIGRpcmVjdGlvbmFsaXR5Ci0gICAgYm9vbCBpc1J0bCA9
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2NhbGVIYW5kbGVyOjppbnN0YW5jZSgpLT5pc1J0bExv
Y2FsZSgpOwotICAgIHNvdXJjZS5hcHBlbmQoImRpcmVjdGlvbjonIiArIFN0cmluZyhpc1J0bCA/
ICJydGwiIDogImx0ciIpICsgIicsIik7Ci0gICAgc291cmNlLmFwcGVuZExpdGVyYWwoIn0pO1xu
Iik7Ci0gICAgc291cmNlLmFwcGVuZCgiIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fk
Jywgc2hvd0l0KTsgfSk7IFxuIik7Ci0gICAgc291cmNlLmFwcGVuZChjb2xvckNvbnRyb2xCbGFj
a0JlcnJ5SnMsIHNpemVvZihjb2xvckNvbnRyb2xCbGFja0JlcnJ5SnMpKTsKLSAgICBzb3VyY2Uu
YXBwZW5kTGl0ZXJhbCgiPC9zY3JpcHQ+XG4iKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgi
PC9ib2R5PiA8L2h0bWw+XG4iKTsKLSAgICBtX3NvdXJjZSA9IHNvdXJjZS50b1N0cmluZygpOwot
fQotCi12b2lkIENvbG9yUGlja2VyQ2xpZW50OjpzZXRWYWx1ZUFuZENsb3NlUG9wdXAoaW50LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIEFTU0VSVChtX2VsZW1lbnQpOwotCi0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNhbmNlbFZhbHVlID0gIi0xIjsKLSAgICBpZiAodmFsdWUgIT0gY2Fu
Y2VsVmFsdWUpCi0gICAgICAgIG1fZWxlbWVudC0+c2V0VmFsdWUodmFsdWUsIERpc3BhdGNoQ2hh
bmdlRXZlbnQpOwotICAgIGNsb3NlUG9wdXAoKTsKLX0KLQotdm9pZCBDb2xvclBpY2tlckNsaWVu
dDo6ZGlkQ2xvc2VQb3B1cCgpCi17Ci0gICAgUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudDo6ZGlk
Q2xvc2VQb3B1cCgpOwotICAgIG1fZWxlbWVudCA9IDA7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Db2xvclBpY2tlckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NvbG9yUGlja2Vy
Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMWI3N2YuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NvbG9yUGlja2Vy
Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgQ29sb3JQaWNrZXJDbGllbnRfaAotI2Rl
ZmluZSBDb2xvclBpY2tlckNsaWVudF9oCi0KLSNpbmNsdWRlICJQYWdlUG9wdXBCbGFja0JlcnJ5
Q2xpZW50LmgiCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtSW5wdXRFdmVudHMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTElucHV0RWxlbWVudDsKLX0KLQotbmFtZXNw
YWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFBsYXRmb3JtIHsKLWNsYXNzIFN0cmluZzsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvbG9yUGlja2VyQ2xpZW50IDogcHVibGlj
IFBhZ2VQb3B1cEJsYWNrQmVycnlDbGllbnQgewotcHVibGljOgotICAgIENvbG9yUGlja2VyQ2xp
ZW50KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZhbHVlLCBCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCopOwot
Ci0gICAgdm9pZCBzZXRWYWx1ZUFuZENsb3NlUG9wdXAoaW50LCBjb25zdCBTdHJpbmcmKTsKLSAg
ICB2b2lkIGRpZENsb3NlUG9wdXAoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGdlbmVyYXRlSFRN
TChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudD4gbV9lbGVtZW50OwotfTsKLQotfQotfQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
RGF0ZVBpY2tlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvRGF0ZVBpY2tlckNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDdmMzhmNTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0RhdGVQaWNrZXJDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkRhdGVQaWNrZXJDbGllbnQuaCIKLQotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiUG9wdXBQaWNrZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlX3AuaCIKLQotI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgotI2luY2x1ZGUgPExvY2FsZUhhbmRs
ZXIuaD4KLSNpbmNsdWRlIDxMb2NhbGl6ZVJlc291cmNlLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS9k
dGZtdHN5bS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgaWN1OwotCi1uYW1lc3BhY2UgQmxh
Y2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotREVGSU5FX1NUQVRJQ19MT0NBTChCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6TG9jYWxpemVSZXNvdXJjZSwgc19yZXNvdXJjZSwgKCkpOwotCi1E
YXRlUGlja2VyQ2xpZW50OjpEYXRlUGlja2VyQ2xpZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpC
bGFja0JlcnJ5SW5wdXRUeXBlIHR5cGUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIHZhbHVlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtaW4sIGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1heCwgZG91YmxlIHN0ZXAsIEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqIHdlYlBhZ2UsIFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBQYWdlUG9wdXBCbGFja0JlcnJ5Q2xpZW50KHdlYlBhZ2Up
Ci0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotewotICAgIGdl
bmVyYXRlSFRNTCh0eXBlLCB2YWx1ZSwgbWluLCBtYXgsIHN0ZXApOwotfQotCi1EYXRlUGlja2Vy
Q2xpZW50Ojp+RGF0ZVBpY2tlckNsaWVudCgpCi17Ci19Ci0KLXZvaWQgRGF0ZVBpY2tlckNsaWVu
dDo6Z2VuZXJhdGVIVE1MKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpCbGFja0JlcnJ5SW5wdXRUeXBl
IHR5cGUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZhbHVlLCBjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtaW4sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmcmIG1heCwgZG91YmxlIHN0ZXApCi17Ci0gICAgU3RyaW5nQnVpbGRlciBzb3Vy
Y2U7Ci0gICAgU3RyaW5nIHRpdGxlID0gIiI7Ci0gICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjxz
dHlsZT5cbiIpOwotICAgIC8vIEluY2x1ZGUgQ1NTIGZpbGUuCi0gICAgc291cmNlLmFwcGVuZChw
b3B1cENvbnRyb2xCbGFja0JlcnJ5Q3NzLAotICAgICAgICAgICAgc2l6ZW9mKHBvcHVwQ29udHJv
bEJsYWNrQmVycnlDc3MpKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPC9zdHlsZT5cbjxz
dHlsZT4iKTsKLSAgICBzb3VyY2UuYXBwZW5kKHRpbWVDb250cm9sQmxhY2tCZXJyeUNzcywKLSAg
ICAgICAgICAgIHNpemVvZih0aW1lQ29udHJvbEJsYWNrQmVycnlDc3MpKTsKLSAgICBzb3VyY2Uu
YXBwZW5kTGl0ZXJhbCgiPC9zdHlsZT48L2hlYWQ+PGJvZHk+XG4iKTsKLSAgICBzb3VyY2UuYXBw
ZW5kTGl0ZXJhbCgiPHNjcmlwdD5cbiIpOwotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJ3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uIHNob3dJdCgpIHsiKTsKLSAgICBz
b3VyY2UuYXBwZW5kTGl0ZXJhbCgid2luZG93LnBvcHVwY29udHJvbC5zaG93KHsiKTsKLSAgICAv
LyBBZGQgRGF0ZVBpY2tlciB0eXBlCi0gICAgc291cmNlLmFwcGVuZExpdGVyYWwoInR5cGU6Iik7
Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW5w
dXRUeXBlRGF0ZToKLSAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIidEYXRlJywgIik7Ci0g
ICAgICAgIHRpdGxlID0gU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6UElDS0VSX0RBVEVfVElUTEUpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW5wdXRUeXBlVGltZToKLSAgICAgICAgc291
cmNlLmFwcGVuZExpdGVyYWwoIidUaW1lJywgIik7Ci0gICAgICAgIHRpdGxlID0gU3RyaW5nOjpm
cm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UElDS0VS
X1RJTUVfVElUTEUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6SW5wdXRUeXBlRGF0ZVRpbWU6Ci0gICAgICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCIn
RGF0ZVRpbWUnLCAiKTsKLSAgICAgICAgdGl0bGUgPSBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3Vy
Y2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQSUNLRVJfREFURV9USU1FX1RJVExF
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OklucHV0
VHlwZURhdGVUaW1lTG9jYWw6Ci0gICAgICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCInRGF0ZVRp
bWVMb2NhbCcsICIpOwotICAgICAgICB0aXRsZSA9IFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJj
ZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9EQVRFX1RJTUVfTE9DQUxf
VElUTEUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
SW5wdXRUeXBlTW9udGg6Ci0gICAgICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCInTW9udGgnLCAi
KTsKLSAgICAgICAgdGl0bGUgPSBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5n
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQSUNLRVJfTU9OVEhfVElUTEUpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW5wdXRUeXBlV2VlazoKLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gQWRkIGRhdGV0aW1lIHZhbHVl
Ci0gICAgc291cmNlLmFwcGVuZExpdGVyYWwoImluaXRpYWxWYWx1ZToiKTsKLSAgICBpZiAoIXZh
bHVlLmVtcHR5KCkpCi0gICAgICAgIHNvdXJjZS5hcHBlbmQoIiciICsgU3RyaW5nKHZhbHVlKSAr
ICInLCAiKTsKLSAgICBlbHNlCi0gICAgICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJudWxsLCAi
KTsKLSAgICAvLyBBZGQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcwotICAgIHNvdXJjZS5hcHBlbmRM
aXRlcmFsKCJtaW46Iik7Ci0gICAgaWYgKCFtaW4uZW1wdHkoKSkKLSAgICAgICAgc291cmNlLmFw
cGVuZCgiJyIgKyBTdHJpbmcobWluKSArICInLCAiKTsKLSAgICBlbHNlCi0gICAgICAgIHNvdXJj
ZS5hcHBlbmRMaXRlcmFsKCJudWxsLCAiKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgibWF4
OiIpOwotICAgIGlmICghbWF4LmVtcHR5KCkpCi0gICAgICAgIHNvdXJjZS5hcHBlbmQoIiciICsg
U3RyaW5nKG1heCkgKyAiJywgIik7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2UuYXBwZW5kTGl0
ZXJhbCgibnVsbCwgIik7Ci0gICAgLy8gQWRkIHN0ZXAgc2l6ZQotICAgIHNvdXJjZS5hcHBlbmQo
InN0ZXA6IiArIFN0cmluZzo6bnVtYmVyKHN0ZXApICsgIiwgIik7Ci0gICAgLy8gQWRkIFVJIHRl
eHQKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgidWlUZXh0OiB7Iik7Ci0gICAgc291cmNlLmFw
cGVuZCgidGl0bGU6JyIgKyB0aXRsZSArICInLCIpOwotICAgIHNvdXJjZS5hcHBlbmQoImRvbmVC
dXR0b25MYWJlbDonIiArIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9ET05FX0JVVFRPTl9MQUJFTCkpICsgIicsIik7Ci0g
ICAgc291cmNlLmFwcGVuZCgiY2FuY2VsQnV0dG9uTGFiZWw6JyIgKyBTdHJpbmc6OmZyb21VVEY4
KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQSUNLRVJfQ0FOQ0VM
X0JVVFRPTl9MQUJFTCkpICsgIicsIik7Ci0gICAgc291cmNlLmFwcGVuZCgibW9udGhMYWJlbHM6
IiArIERhdGVQaWNrZXJDbGllbnQ6OmdlbmVyYXRlRGF0ZUxhYmVscyhVREFUX1NUQU5EQUxPTkVf
TU9OVEhTKSArICIsIik7Ci0gICAgc291cmNlLmFwcGVuZCgic2hvcnRNb250aExhYmVsczoiICsg
RGF0ZVBpY2tlckNsaWVudDo6Z2VuZXJhdGVEYXRlTGFiZWxzKFVEQVRfU0hPUlRfTU9OVEhTKSAr
ICIsIik7Ci0gICAgc291cmNlLmFwcGVuZCgiZGF5c09mV2Vla0xhYmVsczoiICsgRGF0ZVBpY2tl
ckNsaWVudDo6Z2VuZXJhdGVEYXRlTGFiZWxzKFVEQVRfU1RBTkRBTE9ORV9XRUVLREFZUykgKyAi
LCIpOwotICAgIHNvdXJjZS5hcHBlbmQoImFtUG1MYWJlbHM6IiArIERhdGVQaWNrZXJDbGllbnQ6
OmdlbmVyYXRlRGF0ZUxhYmVscyhVREFUX0FNX1BNUykgKyAiLCIpOwotICAgIHNvdXJjZS5hcHBl
bmRMaXRlcmFsKCJ9LCIpOwotICAgIC8vIEFkZCBkaXJlY3Rpb25hbGl0eQotICAgIGJvb2wgaXNS
dGwgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9jYWxlSGFuZGxlcjo6aW5zdGFuY2UoKS0+aXNS
dGxMb2NhbGUoKTsKLSAgICBzb3VyY2UuYXBwZW5kKCJkaXJlY3Rpb246JyIgKyBTdHJpbmcoaXNS
dGwgPyAicnRsIiA6ICJsdHIiKSArICInLCIpOwotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJ9
KTtcbiIpOwotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCIgd2luZG93LnJlbW92ZUV2ZW50TGlz
dGVuZXIoJ2xvYWQnLCBzaG93SXQpOyB9KTsgXG4iKTsKLSAgICBzb3VyY2UuYXBwZW5kKHRpbWVD
b250cm9sQmxhY2tCZXJyeUpzLCBzaXplb2YodGltZUNvbnRyb2xCbGFja0JlcnJ5SnMpKTsKLSAg
ICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPC9zY3JpcHQ+XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIjwvYm9keT4gPC9odG1sPlxuIik7Ci0gICAgbV9zb3VyY2UgPSBzb3VyY2UudG9TdHJp
bmcoKTsKLX0KLQotdm9pZCBEYXRlUGlja2VyQ2xpZW50OjpzZXRWYWx1ZUFuZENsb3NlUG9wdXAo
aW50LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIC8vIFJldHVybiAtMSBpZiB1c2VyIGNh
bmNlbCB0aGUgc2VsZWN0aW9uLgotICAgIEFTU0VSVChtX2VsZW1lbnQpOwotCi0gICAgLy8gV2Ug
aGlkZSBjYXJldCB3aGVuIHdlIHNlbGVjdCBkYXRlIGlucHV0IGZpZWxkLCByZXN0b3JlIGl0IHdo
ZW4gd2UgY2xvc2UgZGF0ZSBwaWNrZXIuCi0gICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+c2V0Q2FyZXRWaXNpYmxlKHRydWUpOwotCi0gICAgaWYgKHZhbHVl
ICE9ICItMSIpCi0gICAgICAgIG1fZWxlbWVudC0+c2V0VmFsdWUodmFsdWUsIERpc3BhdGNoQ2hh
bmdlRXZlbnQpOwotICAgIGNsb3NlUG9wdXAoKTsKLX0KLQotdm9pZCBEYXRlUGlja2VyQ2xpZW50
OjpkaWRDbG9zZVBvcHVwKCkKLXsKLSAgICBQYWdlUG9wdXBCbGFja0JlcnJ5Q2xpZW50OjpkaWRD
bG9zZVBvcHVwKCk7Ci0gICAgbV9lbGVtZW50ID0gMDsKLX0KLQotLy8gVURBVF9mb28gYXJlIGZv
ciBsYWJlbHMgdGhhdCBhcmUgbWVhbnQgdG8gYmUgZm9ybWF0dGVkIGFzIHBhcnQgb2YgYSBkYXRl
LgotLy8gVURBVF9TVEFOREFMT05FX2ZvbyBhcmUgZm9yIGxhYmVscyB0aGF0IGFyZSBkaXNwbGF5
ZWQgc2VwYXJhdGVseSBmcm9tIG90aGVyIGRhdGUgY29tcG9uZW50cy4KLS8vIEZvciBleGFtcGxl
LCBVREFUX1NIT1JUX01PTlRIUyBpbiBDYXRhbGFuIHB1dHMgYSBwcmVwb3NpdGlvbiBpbiBmcm9u
dCBvZiB0aGUgbW9udGggYnV0IFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9NT05USFMgZG9lcyBub3Qu
Ci1jb25zdCBTdHJpbmcgRGF0ZVBpY2tlckNsaWVudDo6Z2VuZXJhdGVEYXRlTGFiZWxzKFVEYXRl
Rm9ybWF0U3ltYm9sVHlwZSBzeW1ib2xUeXBlKQotewotICAgIFVFcnJvckNvZGUgdWVyclN0YXR1
cyA9IFVfWkVST19FUlJPUjsKLSAgICBEYXRlRm9ybWF0U3ltYm9scyBkYXRlU3ltYm9scyA9IERh
dGVGb3JtYXRTeW1ib2xzKHVlcnJTdGF0dXMpOyAvLyBjb25zdHJ1Y3RvciB3aWxsIG5ldmVyIGZh
aWwKLSAgICBjb25zdCBVbmljb2RlU3RyaW5nKiBsYWJlbHMgPSAwOwotICAgIGludDMyX3QgbGFi
ZWxDb3VudCA9IDA7Ci0KLSAgICBzd2l0Y2ggKHN5bWJvbFR5cGUpIHsKLSAgICAvLyBkYXRlU3lt
Ym9scyByZXRhaW4gb3duZXJzaGlwIG9mIHJldHVybiB2YWx1ZXMgZnJvbSBnZXRGb28gY2FsbHMK
LSAgICBjYXNlIFVEQVRfU1RBTkRBTE9ORV9NT05USFM6Ci0gICAgICAgIGxhYmVsQ291bnQgPSAx
MjsKLSAgICAgICAgbGFiZWxzID0gZGF0ZVN5bWJvbHMuZ2V0TW9udGhzKGxhYmVsQ291bnQsIERh
dGVGb3JtYXRTeW1ib2xzOjpTVEFOREFMT05FLCBEYXRlRm9ybWF0U3ltYm9sczo6V0lERSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgVURBVF9TVEFOREFMT05FX1NIT1JUX01PTlRIUzoKLSAg
ICAgICAgbGFiZWxDb3VudCA9IDEyOwotICAgICAgICBsYWJlbHMgPSBkYXRlU3ltYm9scy5nZXRN
b250aHMobGFiZWxDb3VudCwgRGF0ZUZvcm1hdFN5bWJvbHM6OlNUQU5EQUxPTkUsIERhdGVGb3Jt
YXRTeW1ib2xzOjpBQkJSRVZJQVRFRCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVURBVF9T
SE9SVF9NT05USFM6Ci0gICAgICAgIGxhYmVsQ291bnQgPSAxMjsKLSAgICAgICAgbGFiZWxzID0g
ZGF0ZVN5bWJvbHMuZ2V0TW9udGhzKGxhYmVsQ291bnQsIERhdGVGb3JtYXRTeW1ib2xzOjpGT1JN
QVQsIERhdGVGb3JtYXRTeW1ib2xzOjpBQkJSRVZJQVRFRCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgVURBVF9TVEFOREFMT05FX1dFRUtEQVlTOgotICAgICAgICBsYWJlbENvdW50ID0gODsK
LSAgICAgICAgLy8gZ2V0V2Vla2RheXMgcmV0dXJucyBhbiBhcnJheSB3aGVyZSB0aGUgemVyb2V0
aCBlbGVtZW50IGlzIGVtcHR5OyB0aGUgZmlyc3QgbGFiZWwgaXMgcGxhY2VkIGluIGluZGV4IDEK
LSAgICAgICAgbGFiZWxzID0gJihkYXRlU3ltYm9scy5nZXRXZWVrZGF5cyhsYWJlbENvdW50LCBE
YXRlRm9ybWF0U3ltYm9sczo6U1RBTkRBTE9ORSwgRGF0ZUZvcm1hdFN5bWJvbHM6OldJREUpKVsx
XTsgLy8gc2tpcCB6ZXJvZXRoIGVsZW1lbnQKLSAgICAgICAgLS1sYWJlbENvdW50OwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFVEQVRfQU1fUE1TOgotICAgICAgICBsYWJlbENvdW50ID0gMjsK
LSAgICAgICAgbGFiZWxzID0gZGF0ZVN5bWJvbHMuZ2V0QW1QbVN0cmluZ3MobGFiZWxDb3VudCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCgwKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgU3RyaW5nQnVpbGRlciBwcmludGVkTGFiZWxzOwotICAg
IHByaW50ZWRMYWJlbHMuYXBwZW5kTGl0ZXJhbCgiWyIpOwotICAgIGZvciAoaW50MzJfdCBpID0g
MDsgaSA8IGxhYmVsQ291bnQ7ICsraSkgewotICAgICAgICBTdHJpbmcgZXNjYXBlZExhYmVsID0g
U3RyaW5nKGxhYmVsc1tpXS5nZXRCdWZmZXIoKSwgbGFiZWxzW2ldLmxlbmd0aCgpKS5yZXBsYWNl
KCdcXCcsICJcXFxcIikucmVwbGFjZSgnXCcnLCAiXFwnIik7IC8vIFRPRE8gUFIgMjQzNTQ3OiBy
ZWZhY3RvciBlc2NhcGluZyBvZiBzdHJpbmdzIGZvciBEYXRlUGlja2VyQ2xpZW50IGFuZCBTZWxl
Y3RQb3B1cENsaWVudAotICAgICAgICBwcmludGVkTGFiZWxzLmFwcGVuZCgiJyIgKyBlc2NhcGVk
TGFiZWwgKyAiJyIpOwotICAgICAgICBpZiAoaSA8IGxhYmVsQ291bnQgLSAxKQotICAgICAgICAg
ICAgcHJpbnRlZExhYmVscy5hcHBlbmRMaXRlcmFsKCIsIik7Ci0gICAgfQotICAgIHByaW50ZWRM
YWJlbHMuYXBwZW5kTGl0ZXJhbCgiXSIpOwotICAgIHJldHVybiBwcmludGVkTGFiZWxzLnRvU3Ry
aW5nKCk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvRGF0ZVBpY2tlckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlODM5ZjljLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5k
ZWYgRGF0ZVBpY2tlckNsaWVudF9oCi0jZGVmaW5lIERhdGVQaWNrZXJDbGllbnRfaAotCi0jaW5j
bHVkZSAiUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudC5oIgotI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybUlucHV0RXZlbnRzLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91ZGF0Lmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7Ci19Ci0KLW5hbWVzcGFjZSBC
bGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViUGFnZVByaXZhdGU7Ci0KLWNsYXNzIERhdGVQaWNr
ZXJDbGllbnQgOiBwdWJsaWMgUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgRGF0ZVBpY2tlckNsaWVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6QmxhY2tCZXJyeUlucHV0
VHlwZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyYgbWF4LCBkb3VibGUgc3RlcCwgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
UHJpdmF0ZSosIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB+RGF0ZVBpY2tlckNs
aWVudCgpOwotCi0gICAgdm9pZCBzZXRWYWx1ZUFuZENsb3NlUG9wdXAoaW50LCBjb25zdCBTdHJp
bmcmKTsKLSAgICB2b2lkIGRpZENsb3NlUG9wdXAoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGdl
bmVyYXRlSFRNTChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6QmxhY2tCZXJyeUlucHV0VHlwZSwgY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcmIG1pbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyYgbWF4LCBkb3VibGUgc3RlcCk7Ci0gICAgc3RhdGljIGNvbnN0IFN0cmluZyBnZW5lcmF0ZURh
dGVMYWJlbHMoVURhdGVGb3JtYXRTeW1ib2xUeXBlKTsKLQotICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpCbGFja0JlcnJ5SW5wdXRUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudD4gbV9lbGVtZW50OwotfTsKLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tC
ZXJyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBv
cHVwQmxhY2tCZXJyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZmQ0ZTgu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1Bh
Z2VQb3B1cEJsYWNrQmVycnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQYWdlUG9wdXBCbGFja0JlcnJ5LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCi0jaW5jbHVkZSAiRW1wdHlDbGll
bnRzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
Ci0jaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNp
bmNsdWRlICJKU1JldGFpblB0ci5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJQYWdl
UG9wdXBCbGFja0JlcnJ5Q2xpZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZV9wLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTT2JqZWN0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+Ci0KLSNkZWZpbmUgUEFERElO
RyA4MAotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIEJsYWNrQmVycnkg
ewotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhZ2VQb3B1cEJsYWNrQmVycnk6OlBhZ2VQb3B1cEJs
YWNrQmVycnkoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2UsIFBhZ2VQb3B1cEJsYWNrQmVycnlDbGll
bnQqIGNsaWVudCkKLSAgICA6IG1fd2ViUGFnZVByaXZhdGUod2ViUGFnZSkKLSAgICAsIG1fY2xp
ZW50KGFkb3B0UHRyKGNsaWVudCkpCi0gICAgLCBtX3NoYXJlZENsaWVudFBvaW50ZXIoYWRvcHRS
ZWYobmV3IFBhZ2VQb3B1cEJsYWNrQmVycnk6OlNoYXJlZENsaWVudFBvaW50ZXIoY2xpZW50KSkp
Ci17Ci19Ci0KLVBhZ2VQb3B1cEJsYWNrQmVycnk6On5QYWdlUG9wdXBCbGFja0JlcnJ5KCkKLXsK
LSAgICBBU1NFUlQoIW1fc2hhcmVkQ2xpZW50UG9pbnRlci0+Z2V0KCkpOwotfQotCi1ib29sIFBh
Z2VQb3B1cEJsYWNrQmVycnk6OmluaXQoV2ViUGFnZSogd2VicGFnZSkKLXsKLSAgICAvLyBEb24n
dCB1c2UgYmFja2luZyBzdG9yZSBmb3IgdGhlIHBvcC11cCB3ZWIgcGFnZS4KLSAgICB3ZWJwYWdl
LT5zZXR0aW5ncygpLT5zZXRCYWNraW5nU3RvcmVFbmFibGVkKGZhbHNlKTsKLQotICAgIHdlYnBh
Z2UtPmQtPnNldExvYWRTdGF0ZShXZWJQYWdlUHJpdmF0ZTo6Q29tbWl0dGVkKTsKLQotICAgIGdl
bmVyYXRlSFRNTCh3ZWJwYWdlKTsKLSAgICBpbnN0YWxsRE9NRnVuY3Rpb24od2VicGFnZS0+ZC0+
bWFpbkZyYW1lKCkpOwotCi0gICAgd2VicGFnZS0+ZC0+c2V0TG9hZFN0YXRlKFdlYlBhZ2VQcml2
YXRlOjpGaW5pc2hlZCk7Ci0gICAgd2VicGFnZS0+Y2xpZW50KCktPm5vdGlmeUxvYWRGaW5pc2hl
ZCgwKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBhZ2VQb3B1cEJsYWNrQmVycnk6
OmdlbmVyYXRlSFRNTChXZWJQYWdlKiB3ZWJwYWdlKQotewotICAgIERvY3VtZW50V3JpdGVyKiB3
cml0ZXIgPSB3ZWJwYWdlLT5kLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50
TG9hZGVyKCktPndyaXRlcigpOwotICAgIHdyaXRlci0+c2V0TUlNRVR5cGUoInRleHQvaHRtbCIp
OwotICAgIHdyaXRlci0+YmVnaW4oS1VSTCgpKTsKLQotICAgIC8vIEFsbCB0aGUgcG9wdXBzIGhh
dmUgdGhlIHNhbWUgaHRtbCBoZWFkIGFuZCB0aGUgcGFnZSBjb250ZW50IHNob3VsZCBiZSBub24t
em9vbWFibGUuCi0gICAgU3RyaW5nQnVpbGRlciBzb3VyY2U7Ci0gICAgLy8gRklYTUU6IHRoZSBo
YXJkY29kaW5nIHBhZGRpbmcgd2lsbCBiZSByZW1vdmVkIHNvb24uCi0gICAgaW50IHNjcmVlbldp
ZHRoID0gd2VicGFnZS0+ZC0+c2NyZWVuU2l6ZSgpLndpZHRoKCkgLSBQQURESU5HOwotICAgIHNv
dXJjZS5hcHBlbmRMaXRlcmFsKCI8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PVwiQ29udGVu
dC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiLz5cbiIpOwotICAg
IHNvdXJjZS5hcHBlbmQoIjxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD0i
ICsgU3RyaW5nOjpudW1iZXIoc2NyZWVuV2lkdGgpKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJh
bCgiLCB1c2VyLXNjYWxhYmxlPW5vXCIgLz5cbiIpOwotICAgIHdyaXRlci0+YWRkRGF0YShzb3Vy
Y2UudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzb3VyY2UudG9TdHJpbmcoKS51dGY4KCkubGVu
Z3RoKCkpOwotCi0gICAgbV9jbGllbnQtPndyaXRlRG9jdW1lbnQoKndyaXRlcik7Ci0gICAgd3Jp
dGVyLT5lbmQoKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0VmFsdWVBbmRDbG9zZVBvcHVw
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqKQotewotICAgIEpTVmFsdWVSZWYganNSZXRWYWwgPSBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8PSAwKQotICAgICAgICByZXR1cm4g
anNSZXRWYWw7Ci0KLSAgICBKU1N0cmluZ1JlZiBzdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgMCk7Ci0gICAgc2l6ZV90IHNpemVVVEY4ID0gSlNTdHJp
bmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7Ci0gICAgVmVjdG9yPGNoYXI+IHN0
ckFyZ3Moc2l6ZVVURjggKyAxKTsKLSAgICBzdHJBcmdzW3NpemVVVEY4XSA9IDA7Ci0gICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmcsIHN0ckFyZ3MuZGF0YSgpLCBzaXplVVRGOCk7Ci0g
ICAgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7Ci0gICAgSlNPYmplY3RSZWYgcG9wVXBPYmplY3Qg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzW2FyZ3VtZW50Q291bnQgLSAxXSwg
MCk7Ci0gICAgUGFnZVBvcHVwQmxhY2tCZXJyeTo6U2hhcmVkQ2xpZW50UG9pbnRlciogY2xpZW50
ID0gcmVpbnRlcnByZXRfY2FzdDxQYWdlUG9wdXBCbGFja0JlcnJ5OjpTaGFyZWRDbGllbnRQb2lu
dGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHBvcFVwT2JqZWN0KSk7Ci0KLSAgICAvLyBDaGVjayB0
aGUgd2VhayBwb2ludGVyIGFzIHRoZSBvd25lciBwYWdlIG1heSBoYXZlIGRlc3Ryb3llZCB0aGUg
cG9wdXAuCi0gICAgaWYgKGNsaWVudC0+Z2V0KCkpCi0gICAgICAgIGNsaWVudC0+Z2V0KCktPnNl
dFZhbHVlQW5kQ2xvc2VQb3B1cCgwLCBzdHJBcmdzLmRhdGEoKSk7Ci0KLSAgICByZXR1cm4ganNS
ZXRWYWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHBvcFVwRXh0ZW5zaW9uSW5pdGlhbGl6ZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgcG9w
VXBFeHRlbnNpb25GaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCi17Ci0gICAgLy8gQ2xlYXIg
dGhlIHJlZmVyZW5jZS4gU2VlIGluc3RhbGxET01GdW5jdGlvbigpLgotICAgIFBhZ2VQb3B1cEJs
YWNrQmVycnk6OlNoYXJlZENsaWVudFBvaW50ZXIqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UGFnZVBvcHVwQmxhY2tCZXJyeTo6U2hhcmVkQ2xpZW50UG9pbnRlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKTsKLSAgICBjbGllbnQtPmRlcmVmKCk7Ci19Ci0KLXN0YXRpYyBKU1N0YXRp
Y0Z1bmN0aW9uIHBvcFVwRXh0ZW5zaW9uU3RhdGljRnVuY3Rpb25zW10gPQotewoteyAwLCAwLCAw
IH0sCi17IDAsIDAsIDAgfQotfTsKLQotc3RhdGljIEpTU3RhdGljVmFsdWUgcG9wVXBFeHRlbnNp
b25TdGF0aWNWYWx1ZXNbXSA9Ci17Ci17IDAsIDAsIDAsIDAgfQotfTsKLQotdm9pZCBQYWdlUG9w
dXBCbGFja0JlcnJ5OjppbnN0YWxsRE9NRnVuY3Rpb24oRnJhbWUqIGZyYW1lKQotewotICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGZyYW1lLCBtYWluVGhyZWFkTm9ybWFs
V29ybGQoKSk7Ci0gICAgQVNTRVJUKHdpbmRvdyk7Ci0KLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhl
YyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VSVChleGVjKTsKLSAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSA6OnRv
UmVmKGV4ZWMpOwotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEds
b2JhbE9iamVjdChjb250ZXh0KTsKLSAgICBKU1N0cmluZ1JlZiBmdW5jdGlvbk5hbWUgPSBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygic2V0VmFsdWVBbmRDbG9zZVBvcHVwIik7Ci0gICAg
SlNPYmplY3RSZWYgZnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhj
b250ZXh0LCBmdW5jdGlvbk5hbWUsIHNldFZhbHVlQW5kQ2xvc2VQb3B1cENhbGxiYWNrKTsKLSAg
ICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25OYW1l
LCBmdW5jdGlvbiwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSwgMCk7Ci0KLSAgICAvLyBSZWdpc3RlciBjbGllbnQgaW50byBET00K
LSAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1w
dHk7Ci0gICAgZGVmaW5pdGlvbi5zdGF0aWNWYWx1ZXMgPSBwb3BVcEV4dGVuc2lvblN0YXRpY1Zh
bHVlczsKLSAgICBkZWZpbml0aW9uLnN0YXRpY0Z1bmN0aW9ucyA9IHBvcFVwRXh0ZW5zaW9uU3Rh
dGljRnVuY3Rpb25zOwotICAgIGRlZmluaXRpb24uaW5pdGlhbGl6ZSA9IHBvcFVwRXh0ZW5zaW9u
SW5pdGlhbGl6ZTsKLSAgICBkZWZpbml0aW9uLmZpbmFsaXplID0gcG9wVXBFeHRlbnNpb25GaW5h
bGl6ZTsKLSAgICBKU0NsYXNzUmVmIGNsaWVudENsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5p
dGlvbik7Ci0KLSAgICBKU09iamVjdFJlZiBjbGllbnRDbGFzc09iamVjdCA9IEpTT2JqZWN0TWFr
ZShjb250ZXh0LCBjbGllbnRDbGFzcywgMCk7Ci0KLSAgICAvLyBBZGQgYSByZWZlcmVuY2UuIFNl
ZSBwb3BVcEV4dGVuc2lvbkZpbmFsaXplLgotICAgIG1fc2hhcmVkQ2xpZW50UG9pbnRlci0+cmVm
KCk7Ci0gICAgSlNPYmplY3RTZXRQcml2YXRlKGNsaWVudENsYXNzT2JqZWN0LCBtX3NoYXJlZENs
aWVudFBvaW50ZXIuZ2V0KCkpOwotCi0gICAgU3RyaW5nIG5hbWUoInBvcFVwIik7Ci0KLSAgICBK
U0M6OlB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIHdpbmRvdy0+cHV0KHdpbmRvdywgZXhlYywg
SlNDOjpJZGVudGlmaWVyKGV4ZWMsIG5hbWUpLCB0b0pTKGNsaWVudENsYXNzT2JqZWN0KSwgc2xv
dCk7Ci0KLSAgICBKU0NsYXNzUmVsZWFzZShjbGllbnRDbGFzcyk7Ci19Ci0KLXZvaWQgUGFnZVBv
cHVwQmxhY2tCZXJyeTo6Y2xvc2VQb3B1cCgpCi17Ci0gICAgLy8gUHJldmVudCB0aGUgcG9wdXAg
cGFnZSBmcm9tIGFjY2Vzc2luZyB0aGUgY2xpZW50LgotICAgIG1fc2hhcmVkQ2xpZW50UG9pbnRl
ci0+Y2xlYXIoKTsKLQotICAgIG1fY2xpZW50LT5kaWRDbG9zZVBvcHVwKCk7Ci19Ci0KLX0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdl
UG9wdXBCbGFja0JlcnJ5LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
NTY2ZGI0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9QYWdlUG9wdXBCbGFja0JlcnJ5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgUGFnZVBv
cHVwQmxhY2tCZXJyeV9oCi0jZGVmaW5lIFBhZ2VQb3B1cEJsYWNrQmVycnlfaAotCi0jaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGcmFtZTsKLX0KLQotbmFt
ZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJQYWdlOwot
Y2xhc3MgV2ViUGFnZVByaXZhdGU7Ci1jbGFzcyBQYWdlUG9wdXBCbGFja0JlcnJ5Q2xpZW50Owot
Ci1jbGFzcyBQYWdlUG9wdXBCbGFja0JlcnJ5IHsKLXB1YmxpYzoKLSAgICBQYWdlUG9wdXBCbGFj
a0JlcnJ5KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqLCBQYWdlUG9wdXBCbGFj
a0JlcnJ5Q2xpZW50Kik7Ci0gICAgflBhZ2VQb3B1cEJsYWNrQmVycnkoKTsKLQotICAgIGJvb2wg
aW5pdChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2UqKTsKLSAgICB2b2lkIGNsb3NlUG9wdXAo
KTsKLQotICAgIGNsYXNzIFNoYXJlZENsaWVudFBvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxT
aGFyZWRDbGllbnRQb2ludGVyPiB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBTaGFy
ZWRDbGllbnRQb2ludGVyKFBhZ2VQb3B1cEJsYWNrQmVycnlDbGllbnQqIGNsaWVudCkgOiBtX2Ns
aWVudChjbGllbnQpIHsgfQotICAgICAgICB2b2lkIGNsZWFyKCkgeyBtX2NsaWVudCA9IDA7IH0K
LSAgICAgICAgUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudCogZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQ7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBQYWdlUG9wdXBCbGFja0JlcnJ5Q2xp
ZW50KiBtX2NsaWVudDsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIHZvaWQgZ2VuZXJhdGVIVE1M
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZSopOwotICAgIHZvaWQgaW5zdGFsbERPTUZ1bmN0
aW9uKFdlYkNvcmU6OkZyYW1lKik7Ci0KLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQ
cml2YXRlKiBtX3dlYlBhZ2VQcml2YXRlOwotICAgIE93blB0cjxQYWdlUG9wdXBCbGFja0JlcnJ5
Q2xpZW50PiBtX2NsaWVudDsKLSAgICBSZWZQdHI8U2hhcmVkQ2xpZW50UG9pbnRlcj4gbV9zaGFy
ZWRDbGllbnRQb2ludGVyOwotfTsKLQotfQotfQotCi0jZW5kaWYgLy8gUGFnZVBvcHVwQmxhY2tC
ZXJyeV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMWVlNjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnlDbGllbnQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFnZVBvcHVw
QmxhY2tCZXJyeUNsaWVudC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRXcml0ZXIuaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZV9wLmgiCi0jaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZVBvcHVwQmxhY2tC
ZXJyeUNsaWVudDo6UGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlKQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi17Ci19
Ci0KLXZvaWQgUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudDo6Y2xvc2VQb3B1cCgpCi17Ci0gICAg
QVNTRVJUKG1fd2ViUGFnZSk7Ci0gICAgbV93ZWJQYWdlLT5jbG9zZVBhZ2VQb3B1cCgpOwotfQot
Ci12b2lkIFBhZ2VQb3B1cEJsYWNrQmVycnlDbGllbnQ6OmRpZENsb3NlUG9wdXAoKQotewotICAg
IG1fd2ViUGFnZSA9IDA7Ci19Ci0KLUludFNpemUgUGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudDo6
Y29udGVudFNpemUoKQotewotICAgIC8vIEZJWE1FOiB3aWxsIGdlbmVyYXRlIGNvbnRlbnQgc2l6
ZSBkeW5hbWljYWxseS4KLSAgICByZXR1cm4gSW50U2l6ZSgzMjAsIDI1Nik7Ci19Ci0KLXZvaWQg
UGFnZVBvcHVwQmxhY2tCZXJyeUNsaWVudDo6d3JpdGVEb2N1bWVudChEb2N1bWVudFdyaXRlciYg
d3JpdGVyKQotewotICAgIHdyaXRlci5hZGREYXRhKG1fc291cmNlLnV0ZjgoKS5kYXRhKCksIG1f
c291cmNlLnV0ZjgoKS5sZW5ndGgoKSk7Ci19Ci0KLX0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnlDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBC
bGFja0JlcnJ5Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NDIzZGMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1Bh
Z2VQb3B1cEJsYWNrQmVycnlDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotCi0jaWZuZGVmIFBhZ2VQ
b3B1cEJsYWNrQmVycnlDbGllbnRfaAotI2RlZmluZSBQYWdlUG9wdXBCbGFja0JlcnJ5Q2xpZW50
X2gKLQotI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBEb2N1bWVudFdyaXRlcjsKLWNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7Ci19Ci0KLW5hbWVz
cGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViUGFnZVByaXZh
dGU7Ci0KLWNsYXNzIFBhZ2VQb3B1cEJsYWNrQmVycnlDbGllbnQgewotcHVibGljOgotICAgIHZp
cnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50U2l6ZSgpOwotCi0gICAgLy8gUHJvdmlkZSBh
biBIVE1MIHNvdXJjZSB0aHJvdWdoIHRoZSBzcGVjaWZpZWQgRG9jdW1lbnRXcml0ZXIuIFRoZSBI
VE1MCi0gICAgLy8gc291cmNlIGlzIHJlbmRlcmVkIGluIGEgUGFnZVBvcHVwLgotICAgIC8vIFRo
ZSBjb250ZW50IEhUTUwgc3VwcG9ydHM6Ci0gICAgLy8gIC0gTm8gPHNlbGVjdD4gcG9wdXBzCi0g
ICAgLy8gIC0gd2luZG93LnNldFZhbHVlQW5kQ2xvc2VQb3B1cChudW1iZXIsIHN0cmluZykuCi0g
ICAgdmlydHVhbCB2b2lkIHdyaXRlRG9jdW1lbnQoV2ViQ29yZTo6RG9jdW1lbnRXcml0ZXImKTsK
LQotICAgIC8vIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBjb250ZW50IEhUTUwgb2YgYSBQYWdlUG9w
dXAuCi0gICAgLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgY2Fs
bCBDaHJvbWVDbGllbnQ6OmNsb3NlUGFnZVBvcHVwKCkuCi0gICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlQW5kQ2xvc2VQb3B1cChpbnQgbnVtVmFsdWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUp
ID0gMDsKLQotICAgIC8vIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBjb250ZW50IEhUTUwgb2YgYSBQ
YWdlUG9wdXAuCi0gICAgdmlydHVhbCB2b2lkIGNsb3NlUG9wdXAoKTsKLQotICAgIC8vIFRoaXMg
aXMgY2FsbGVkIHdoZW5ldmVyIGEgUGFnZVBvcHVwIHdhcyBjbG9zZWQuCi0gICAgdmlydHVhbCB2
b2lkIGRpZENsb3NlUG9wdXAoKTsKLQotICAgIHZpcnR1YWwgflBhZ2VQb3B1cEJsYWNrQmVycnlD
bGllbnQoKSB7IH0KLQotcHJvdGVjdGVkOgotICAgIFBhZ2VQb3B1cEJsYWNrQmVycnlDbGllbnQo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZSopOwotCi0gICAgQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOwotICAgIFN0cmluZyBtX3NvdXJjZTsK
LX07Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1ZmQxZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlbGVjdFBvcHVwQ2xpZW50
LmgiCi0KLSNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxTZWxl
Y3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiUG9wdXBQaWNrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKLSNpbmNsdWRlICJXZWJQYWdlX3AuaCIKLQotI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVN0cmluZy5oPgotI2luY2x1ZGUgPExvY2FsZUhhbmRsZXIuaD4KLSNpbmNsdWRlIDxM
b2NhbGl6ZVJlc291cmNlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgot
Ci0jZGVmaW5lIENFTExfSEVJR0hUIDMwCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotREVGSU5FX1NUQVRJ
Q19MT0NBTChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9jYWxpemVSZXNvdXJjZSwgc19yZXNvdXJj
ZSwgKCkpOwotCi1TZWxlY3RQb3B1cENsaWVudDo6U2VsZWN0UG9wdXBDbGllbnQoYm9vbCBtdWx0
aXBsZSwgaW50IHNpemUsIGNvbnN0IFNjb3BlQXJyYXk8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZz4mIGxhYmVscywgYm9vbCogZW5hYmxlZHMsCi0gICAgY29uc3QgaW50KiBpdGVtVHlwZSwg
Ym9vbCogc2VsZWN0ZWRzLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiB3ZWJQ
YWdlLCBIVE1MU2VsZWN0RWxlbWVudCogZWxlbWVudCkKLSAgICA6IFBhZ2VQb3B1cEJsYWNrQmVy
cnlDbGllbnQod2ViUGFnZSkKLSAgICAsIG1fbXVsdGlwbGUobXVsdGlwbGUpCi0gICAgLCBtX3Np
emUoc2l6ZSkKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9ub3RpZnlDaGFuZ2VU
aW1lcih0aGlzLCAmU2VsZWN0UG9wdXBDbGllbnQ6Om5vdGlmeVNlbGVjdGlvbkNoYW5nZSkKLXsK
LSAgICBnZW5lcmF0ZUhUTUwobXVsdGlwbGUsIHNpemUsIGxhYmVscywgZW5hYmxlZHMsIGl0ZW1U
eXBlLCBzZWxlY3RlZHMpOwotfQotCi1TZWxlY3RQb3B1cENsaWVudDo6flNlbGVjdFBvcHVwQ2xp
ZW50KCkKLXsKLX0KLQotdm9pZCBTZWxlY3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKGJvb2ws
IGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+
JiBsYWJlbHMsIGJvb2wqIGVuYWJsZWRzLAotICAgIGNvbnN0IGludCogaXRlbVR5cGUsIGJvb2wq
IHNlbGVjdGVkcykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHNvdXJjZTsKLSAgICBzb3VyY2UuYXBw
ZW5kTGl0ZXJhbCgiPHN0eWxlPlxuIik7Ci0gICAgLy8gSW5jbHVkZSBDU1MgZmlsZS4KLSAgICBz
b3VyY2UuYXBwZW5kKHBvcHVwQ29udHJvbEJsYWNrQmVycnlDc3MsCi0gICAgICAgICAgICBzaXpl
b2YocG9wdXBDb250cm9sQmxhY2tCZXJyeUNzcykpOwotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFs
KCI8L3N0eWxlPlxuPHN0eWxlPiIpOwotICAgIHNvdXJjZS5hcHBlbmQoc2VsZWN0Q29udHJvbEJs
YWNrQmVycnlDc3MsCi0gICAgICAgICAgICBzaXplb2Yoc2VsZWN0Q29udHJvbEJsYWNrQmVycnlD
c3MpKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPC9zdHlsZT48L2hlYWQ+PGJvZHk+XG4i
KTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPHNjcmlwdD5cbiIpOwotICAgIHNvdXJjZS5h
cHBlbmRMaXRlcmFsKCJ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uIHNo
b3dJdCgpIHsiKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgid2luZG93LnNlbGVjdC5zaG93
KHsiKTsKLSAgICAvLyBJbmRpY2F0ZSBpZiBpdCBpcyBhIG11bHRpc2VsZWN0LgotICAgIHNvdXJj
ZS5hcHBlbmRMaXRlcmFsKCJpc011bHRpU2VsZWN0OiIpOwotICAgIGlmIChtX211bHRpcGxlKQot
ICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgidHJ1ZSwiKTsKLSAgICBlbHNlCi0gICAgICAg
IHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJmYWxzZSwiKTsKLSAgICAvLyBBZGQgbGFiZWxzLgotICAg
IHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJsYWJlbHM6IFsiKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNpemU7IGkrKykgewotICAgICAgICBzb3VyY2UuYXBwZW5kKCInIiArIFN0cmluZyhsYWJl
bHNbaV0pLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXFwnLCAiXFxcXCIpLnJlcGxhY2VXaXRoTGl0ZXJh
bCgnXCcnLCAiXFwnIikgKyAiJyIpOwotICAgICAgICAvLyBEb24ndCBhcHBlbmQgJywnIHRvIGxh
c3QgZWxlbWVudC4KLSAgICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCi0gICAgICAgICAgICBzb3Vy
Y2UuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICB9Ci0gICAgc291cmNlLmFwcGVuZExpdGVyYWwo
Il0sICIpOwotICAgIC8vIEFkZCBlbmFibGVzLgotICAgIHNvdXJjZS5hcHBlbmQoImVuYWJsZWRz
OiBbIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgaWYg
KGVuYWJsZWRzW2ldKQotICAgICAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoInRydWUiKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoImZhbHNlIik7
Ci0gICAgICAgIC8vIERvbid0IGFwcGVuZCAnLCcgdG8gbGFzdCBlbGVtZW50LgotICAgICAgICBp
ZiAoaSAhPSBzaXplIC0gMSkKLSAgICAgICAgICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCIsICIp
OwotICAgIH0KLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiXSwgIik7Ci0gICAgLy8gQWRkIGl0
ZW1UeXBlLgotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJpdGVtVHlwZXM6IFsiKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBzb3VyY2UuYXBwZW5kTnVt
YmVyKGl0ZW1UeXBlW2ldKTsKLSAgICAgICAgLy8gRG9uJ3QgYXBwZW5kICcsJyB0byBsYXN0IGVs
ZW1lbnQuCi0gICAgICAgIGlmIChpICE9IHNpemUgLSAxKQotICAgICAgICAgICAgc291cmNlLmFw
cGVuZExpdGVyYWwoIiwgIik7Ci0gICAgfQotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJdLCAi
KTsKLSAgICAvLyBBZGQgc2VsZWN0ZWRzCi0gICAgc291cmNlLmFwcGVuZExpdGVyYWwoInNlbGVj
dGVkczogWyIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAg
IGlmIChzZWxlY3RlZHNbaV0pCi0gICAgICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgidHJ1
ZSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiZmFs
c2UiKTsKLSAgICAgICAgLy8gRG9uJ3QgYXBwZW5kICcsJyB0byBsYXN0IGVsZW1lbnQuCi0gICAg
ICAgIGlmIChpICE9IHNpemUgLSAxKQotICAgICAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwo
IiwgIik7Ci0gICAgfQotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJdLCAiKTsKLSAgICAvLyBB
ZGQgVUkgdGV4dAotICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJ1aVRleHQ6IHsiKTsKLSAgICBz
b3VyY2UuYXBwZW5kKCJ0aXRsZTonIiArIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRT
dHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9TRUxFQ1RfVElUTEUpKSArICInLCIp
OwotICAgIHNvdXJjZS5hcHBlbmQoImRvbmVCdXR0b25MYWJlbDonIiArIFN0cmluZzo6ZnJvbVVU
Rjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9ET05F
X0JVVFRPTl9MQUJFTCkpICsgIicsIik7Ci0gICAgc291cmNlLmFwcGVuZCgiY2FuY2VsQnV0dG9u
TGFiZWw6JyIgKyBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpQSUNLRVJfQ0FOQ0VMX0JVVFRPTl9MQUJFTCkpICsgIicsIik7Ci0gICAg
c291cmNlLmFwcGVuZExpdGVyYWwoIn0sIik7Ci0gICAgLy8gQWRkIGRpcmVjdGlvbmFsaXR5Ci0g
ICAgYm9vbCBpc1J0bCA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2NhbGVIYW5kbGVyOjppbnN0
YW5jZSgpLT5pc1J0bExvY2FsZSgpOwotICAgIHNvdXJjZS5hcHBlbmQoImRpcmVjdGlvbjonIiAr
IFN0cmluZyhpc1J0bCA/ICJydGwiIDogImx0ciIpICsgIicsIik7Ci0gICAgc291cmNlLmFwcGVu
ZExpdGVyYWwoIn0pO1xuIik7Ci0gICAgc291cmNlLmFwcGVuZExpdGVyYWwoIiB3aW5kb3cucmVt
b3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHNob3dJdCk7IH0pOyBcbiIpOwotICAgIHNvdXJjZS5h
cHBlbmQoc2VsZWN0Q29udHJvbEJsYWNrQmVycnlKcywgc2l6ZW9mKHNlbGVjdENvbnRyb2xCbGFj
a0JlcnJ5SnMpKTsKLSAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPC9zY3JpcHQ+XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIjwvYm9keT4gPC9odG1sPlxuIik7Ci0gICAgbV9zb3VyY2Ug
PSBzb3VyY2UudG9TdHJpbmcoKTsKLX0KLQotdm9pZCBTZWxlY3RQb3B1cENsaWVudDo6c2V0VmFs
dWVBbmRDbG9zZVBvcHVwKGludCwgY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSkKLXsKLSAgICBB
U1NFUlQobV9lbGVtZW50KTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjYW5jZWxWYWx1ZSA9
ICItMSI7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09IGNhbmNlbFZhbHVlKSB7Ci0gICAgICAgIGNs
b3NlUG9wdXAoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3NpemUgPiAw
KSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWRzW21fc2l6ZV07Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykKLSAgICAgICAgICAgIHNlbGVjdGVkc1tpXSA9IHN0
cmluZ1ZhbHVlW2ldIC0gJzAnOwotCi0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+
JiBpdGVtcyA9IG1fZWxlbWVudC0+bGlzdEl0ZW1zKCk7Ci0KLSAgICAgICAgLy8gSWYgZWxlbWVu
dCBjaGFuZ2VkIGFmdGVyIHNlbGVjdCBVSSBzaG93ZWQsIGRvIG5vdGhpbmcgYnV0IGNsb3NlUG9w
dXAoKS4KLSAgICAgICAgaWYgKGl0ZW1zLnNpemUoKSAhPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9zaXplKSkgewotICAgICAgICAgICAgY2xvc2VQb3B1cCgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbjsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBp
ZiAoaXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcpKSB7Ci0gICAgICAg
ICAgICAgICAgb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tp
XSk7Ci0gICAgICAgICAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3RlZFN0YXRlKHNlbGVjdGVkc1tp
XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gRm9yY2UgcmVwYWlu
dCBiZWNhdXNlIHdlIGRvIG5vdCBzZW5kIG1vdXNlIGV2ZW50cyB0byB0aGUgc2VsZWN0IGVsZW1l
bnQKLSAgICAvLyBhbmQgdGhlIGVsZW1lbnQgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHJlcGFpbnQg
aXRzZWxmLgotICAgIGlmIChtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIG1fZWxlbWVu
dC0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwotCi0gICAgbV9ub3RpZnlDaGFuZ2VUaW1lci5zdGFy
dE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgU2VsZWN0UG9wdXBDbGllbnQ6OmRpZENsb3NlUG9wdXAo
KQotewotICAgIFBhZ2VQb3B1cEJsYWNrQmVycnlDbGllbnQ6OmRpZENsb3NlUG9wdXAoKTsKLSAg
ICBtX2VsZW1lbnQgPSAwOwotfQotCi12b2lkIFNlbGVjdFBvcHVwQ2xpZW50Ojpub3RpZnlTZWxl
Y3Rpb25DaGFuZ2UoV2ViQ29yZTo6VGltZXI8U2VsZWN0UG9wdXBDbGllbnQ+KikKLXsKLSAgICBp
ZiAobV9lbGVtZW50KQotICAgICAgICBtX2VsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCgpOwotICAgIGNsb3NlUG9wdXAoKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGll
bnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFlZDk4OC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGll
bnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBTZWxlY3RQb3B1cENsaWVudF9oCi0jZGVmaW5l
IFNlbGVjdFBvcHVwQ2xpZW50X2gKLQotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJQ
YWdlUG9wdXBCbGFja0JlcnJ5Q2xpZW50LmgiCi0jaW5jbHVkZSAiU2NvcGVQb2ludGVyLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQ7Ci19Ci0KLW5hbWVzcGFj
ZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBQbGF0Zm9ybSB7Ci1jbGFzcyBTdHJpbmc7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBTZWxlY3RQb3B1cENsaWVudCA6IHB1YmxpYyBQ
YWdlUG9wdXBCbGFja0JlcnJ5Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBTZWxlY3RQb3B1cENsaWVu
dChib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywgY29uc3QgaW50KiBpdGVt
VHlwZSwgYm9vbCogc2VsZWN0ZWRzLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRl
KiwgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqKTsKLSAgICB+U2VsZWN0UG9wdXBDbGllbnQo
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFuZENsb3NlUG9wdXAoaW50LCBjb25zdCBT
dHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2VQb3B1cCgpOwotCi1wcml2YXRlOgot
ICAgIHZvaWQgZ2VuZXJhdGVIVE1MKGJvb2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBTY29w
ZUFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBsYWJlbHMsIGJvb2wqIGVuYWJs
ZWRzLCBjb25zdCBpbnQqIGl0ZW1UeXBlLCBib29sKiBzZWxlY3RlZHMpOwotICAgIHZvaWQgbm90
aWZ5U2VsZWN0aW9uQ2hhbmdlKFdlYkNvcmU6OlRpbWVyPFNlbGVjdFBvcHVwQ2xpZW50PiAqKTsK
LQotICAgIGJvb2wgbV9tdWx0aXBsZTsKLSAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50PiBtX2VsZW1lbnQ7Ci0gICAgV2ViQ29yZTo6VGlt
ZXI8U2VsZWN0UG9wdXBDbGllbnQ+IG1fbm90aWZ5Q2hhbmdlVGltZXI7Ci19OwotCi19Ci19Ci0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0NvbG9yUGlja2VyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0NvbG9yUGlja2VyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hZTA5MWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvQ29sb3JQaWNrZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDb2xvclBpY2tlckNsaWVudC5oIgorCisjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIlBvcHVwUGlja2VyLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZV9wLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KKyNpbmNsdWRl
IDxMb2NhbGVIYW5kbGVyLmg+CisjaW5jbHVkZSA8TG9jYWxpemVSZXNvdXJjZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitERUZJTkVf
U1RBVElDX0xPQ0FMKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2NhbGl6ZVJlc291cmNlLCBzX3Jl
c291cmNlLCAoKSk7CisKK0NvbG9yUGlja2VyQ2xpZW50OjpDb2xvclBpY2tlckNsaWVudChjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSwgV2ViUGFnZVByaXZhdGUqIHdl
YlBhZ2VQcml2YXRlLCBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQorICAgIDog
UGFnZVBvcHVwQ2xpZW50KHdlYlBhZ2VQcml2YXRlKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQp
Cit7CisgICAgZ2VuZXJhdGVIVE1MKHZhbHVlKTsKK30KKwordm9pZCBDb2xvclBpY2tlckNsaWVu
dDo6Z2VuZXJhdGVIVE1MKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZhbHVl
KQoreworICAgIFN0cmluZ0J1aWxkZXIgc291cmNlOworICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFs
KCI8c3R5bGU+XG4iKTsKKyAgICAvLyBJbmNsdWRlIENTUyBmaWxlLgorICAgIHNvdXJjZS5hcHBl
bmQocG9wdXBDb250cm9sQmxhY2tCZXJyeUNzcywgc2l6ZW9mKHBvcHVwQ29udHJvbEJsYWNrQmVy
cnlDc3MpKTsKKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPC9zdHlsZT5cbjxzdHlsZT4iKTsK
KyAgICBzb3VyY2UuYXBwZW5kKGNvbG9yQ29udHJvbEJsYWNrQmVycnlDc3MsIHNpemVvZihjb2xv
ckNvbnRyb2xCbGFja0JlcnJ5Q3NzKSk7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjwvc3R5
bGU+PC9oZWFkPjxib2R5PlxuIik7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjxzY3JpcHQ+
XG4iKTsKKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgid2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J2xvYWQnLCBmdW5jdGlvbiBzaG93SXQoKSB7Iik7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwo
IndpbmRvdy5wb3B1cGNvbnRyb2wuc2hvdyh7Iik7CisgICAgLy8gQWRkIGNvbG9yIHZhbHVlCisg
ICAgc291cmNlLmFwcGVuZExpdGVyYWwoImluaXRpYWxWYWx1ZToiKTsKKyAgICBpZiAoIXZhbHVl
LmVtcHR5KCkpCisgICAgICAgIHNvdXJjZS5hcHBlbmQoIiciICsgU3RyaW5nKHZhbHVlKSArICIn
LCIpOworICAgIGVsc2UKKyAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIm51bGwsIik7Cisg
ICAgLy8gQWRkIFVJIHRleHQKKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgidWlUZXh0OiB7Iik7
CisgICAgc291cmNlLmFwcGVuZCgidGl0bGU6JyIgKyBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3Vy
Y2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQSUNLRVJfQ09MT1JfVElUTEUpKSAr
ICInLCIpOworICAgIHNvdXJjZS5hcHBlbmQoInNsaWRlcnNMYWJlbDonIiArIFN0cmluZzo6ZnJv
bVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9D
T0xPUl9TTElERVJTX0xBQkVMKSkgKyAiJywiKTsKKyAgICBzb3VyY2UuYXBwZW5kKCJzd2F0Y2hl
c0xhYmVsOiciICsgU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6UElDS0VSX0NPTE9SX1NXQVRDSEVTX0xBQkVMKSkgKyAiJywiKTsKKyAg
ICBzb3VyY2UuYXBwZW5kKCJkb25lQnV0dG9uTGFiZWw6JyIgKyBTdHJpbmc6OmZyb21VVEY4KHNf
cmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQSUNLRVJfRE9ORV9CVVRU
T05fTEFCRUwpKSArICInLCIpOworICAgIHNvdXJjZS5hcHBlbmQoImNhbmNlbEJ1dHRvbkxhYmVs
OiciICsgU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6UElDS0VSX0NBTkNFTF9CVVRUT05fTEFCRUwpKSArICInLCIpOworICAgIHNvdXJj
ZS5hcHBlbmRMaXRlcmFsKCJ9LCIpOworICAgIC8vIEFkZCBkaXJlY3Rpb25hbGl0eQorICAgIGJv
b2wgaXNSdGwgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9jYWxlSGFuZGxlcjo6aW5zdGFuY2Uo
KS0+aXNSdGxMb2NhbGUoKTsKKyAgICBzb3VyY2UuYXBwZW5kKCJkaXJlY3Rpb246JyIgKyBTdHJp
bmcoaXNSdGwgPyAicnRsIiA6ICJsdHIiKSArICInLCIpOworICAgIHNvdXJjZS5hcHBlbmRMaXRl
cmFsKCJ9KTtcbiIpOworICAgIHNvdXJjZS5hcHBlbmQoIiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0
ZW5lcignbG9hZCcsIHNob3dJdCk7IH0pOyBcbiIpOworICAgIHNvdXJjZS5hcHBlbmQoY29sb3JD
b250cm9sQmxhY2tCZXJyeUpzLCBzaXplb2YoY29sb3JDb250cm9sQmxhY2tCZXJyeUpzKSk7Cisg
ICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjwvc2NyaXB0PlxuIik7CisgICAgc291cmNlLmFwcGVu
ZExpdGVyYWwoIjwvYm9keT4gPC9odG1sPlxuIik7CisgICAgbV9zb3VyY2UgPSBzb3VyY2UudG9T
dHJpbmcoKTsKK30KKwordm9pZCBDb2xvclBpY2tlckNsaWVudDo6c2V0VmFsdWVBbmRDbG9zZVBv
cHVwKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgLy8gUG9wdXAgY2xvc2VkLgorICAgIGlm
ICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y2FuY2VsVmFsdWUgPSAiLTEiOworICAgIGlmICh2YWx1ZSAhPSBjYW5jZWxWYWx1ZSkKKyAgICAg
ICAgbV9lbGVtZW50LT5zZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hDaGFuZ2VFdmVudCk7CisgICAg
Y2xvc2VQb3B1cCgpOworfQorCit2b2lkIENvbG9yUGlja2VyQ2xpZW50OjpkaWRDbG9zZVBvcHVw
KCkKK3sKKyAgICBQYWdlUG9wdXBDbGllbnQ6OmRpZENsb3NlUG9wdXAoKTsKKyAgICBtX2VsZW1l
bnQgPSAwOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9Db2xvclBpY2tlckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvQ29sb3JQaWNrZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hZDZlODEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQ29sb3JQaWNrZXJDbGllbnQuaApAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYg
Q29sb3JQaWNrZXJDbGllbnRfaAorI2RlZmluZSBDb2xvclBpY2tlckNsaWVudF9oCisKKyNpbmNs
dWRlICJQYWdlUG9wdXBDbGllbnQuaCIKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1JbnB1
dEV2ZW50cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIVE1MSW5wdXRFbGVtZW50
OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworY2xh
c3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ29sb3JQaWNrZXJD
bGllbnQgOiBwdWJsaWMgUGFnZVBvcHVwQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBDb2xvclBpY2tl
ckNsaWVudChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSwgV2ViUGFn
ZVByaXZhdGUqLCBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kik7CisKKyAgICB2b2lkIHNldFZh
bHVlQW5kQ2xvc2VQb3B1cChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGRpZENsb3NlUG9wdXAo
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGdlbmVyYXRlSFRNTChjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudD4gbV9lbGVtZW50OworfTsKKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RhdGVQaWNrZXJDbGllbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTdkMjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EYXRlUGlj
a2VyQ2xpZW50LmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0ZVBpY2tl
ckNsaWVudC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJQb3B1cFBpY2tlci5oIgor
I2luY2x1ZGUgIldlYlBhZ2VfcC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3Ry
aW5nLmg+CisjaW5jbHVkZSA8TG9jYWxlSGFuZGxlci5oPgorI2luY2x1ZGUgPExvY2FsaXplUmVz
b3VyY2UuaD4KKyNpbmNsdWRlIDx1bmljb2RlL2R0Zm10c3ltLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5h
bWVzcGFjZSBpY3U7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQg
eworCitERUZJTkVfU1RBVElDX0xPQ0FMKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2NhbGl6ZVJl
c291cmNlLCBzX3Jlc291cmNlLCAoKSk7CisKK0RhdGVQaWNrZXJDbGllbnQ6OkRhdGVQaWNrZXJD
bGllbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkJsYWNrQmVycnlJbnB1dFR5cGUgdHlwZSwgY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcmIG1pbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyYgbWF4LCBkb3VibGUgc3RlcCwgV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRlLCBXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQorICAgIDogUGFnZVBvcHVwQ2xpZW50KHdl
YlBhZ2VQcml2YXRlKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKK3sKKyAgICBnZW5lcmF0ZUhUTUwodHlwZSwgdmFsdWUsIG1pbiwgbWF4LCBzdGVwKTsKK30K
KworRGF0ZVBpY2tlckNsaWVudDo6fkRhdGVQaWNrZXJDbGllbnQoKQoreworfQorCit2b2lkIERh
dGVQaWNrZXJDbGllbnQ6OmdlbmVyYXRlSFRNTChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6QmxhY2tC
ZXJyeUlucHV0VHlwZSB0eXBlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB2
YWx1ZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWluLCBjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtYXgsIGRvdWJsZSBzdGVwKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgc291cmNlOworICAgIFN0cmluZyB0aXRsZSA9ICIiOworICAgIHNvdXJjZS5hcHBl
bmRMaXRlcmFsKCI8c3R5bGU+XG4iKTsKKyAgICAvLyBJbmNsdWRlIENTUyBmaWxlLgorICAgIHNv
dXJjZS5hcHBlbmQocG9wdXBDb250cm9sQmxhY2tCZXJyeUNzcywgc2l6ZW9mKHBvcHVwQ29udHJv
bEJsYWNrQmVycnlDc3MpKTsKKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPC9zdHlsZT5cbjxz
dHlsZT4iKTsKKyAgICBzb3VyY2UuYXBwZW5kKHRpbWVDb250cm9sQmxhY2tCZXJyeUNzcywgc2l6
ZW9mKHRpbWVDb250cm9sQmxhY2tCZXJyeUNzcykpOworICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFs
KCI8L3N0eWxlPjwvaGVhZD48Ym9keT5cbiIpOworICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCI8
c2NyaXB0PlxuIik7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIndpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gc2hvd0l0KCkgeyIpOworICAgIHNvdXJjZS5hcHBlbmRM
aXRlcmFsKCJ3aW5kb3cucG9wdXBjb250cm9sLnNob3coeyIpOworICAgIC8vIEFkZCBEYXRlUGlj
a2VyIHR5cGUKKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgidHlwZToiKTsKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnB1dFR5cGVEYXRlOgor
ICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiJ0RhdGUnLCAiKTsKKyAgICAgICAgdGl0bGUg
PSBTdHJpbmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpQSUNLRVJfREFURV9USVRMRSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpJbnB1dFR5cGVUaW1lOgorICAgICAgICBzb3VyY2UuYXBwZW5kTGl0
ZXJhbCgiJ1RpbWUnLCAiKTsKKyAgICAgICAgdGl0bGUgPSBTdHJpbmc6OmZyb21VVEY4KHNfcmVz
b3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQSUNLRVJfVElNRV9USVRMRSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnB1dFR5
cGVEYXRlVGltZToKKyAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIidEYXRlVGltZScsICIp
OworICAgICAgICB0aXRsZSA9IFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmco
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9EQVRFX1RJTUVfVElUTEUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW5wdXRUeXBlRGF0ZVRpbWVM
b2NhbDoKKyAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIidEYXRlVGltZUxvY2FsJywgIik7
CisgICAgICAgIHRpdGxlID0gU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6UElDS0VSX0RBVEVfVElNRV9MT0NBTF9USVRMRSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnB1dFR5cGVNb250
aDoKKyAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIidNb250aCcsICIpOworICAgICAgICB0
aXRsZSA9IFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5nZXRTdHJpbmcoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlBJQ0tFUl9NT05USF9USVRMRSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnB1dFR5cGVXZWVrOgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBBZGQgZGF0ZXRpbWUgdmFsdWUKKyAgICBzb3VyY2Uu
YXBwZW5kTGl0ZXJhbCgiaW5pdGlhbFZhbHVlOiIpOworICAgIGlmICghdmFsdWUuZW1wdHkoKSkK
KyAgICAgICAgc291cmNlLmFwcGVuZCgiJyIgKyBTdHJpbmcodmFsdWUpICsgIicsICIpOworICAg
IGVsc2UKKyAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIm51bGwsICIpOworICAgIC8vIEFk
ZCBsb3dlciBhbmQgdXBwZXIgYm91bmRzCisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIm1pbjoi
KTsKKyAgICBpZiAoIW1pbi5lbXB0eSgpKQorICAgICAgICBzb3VyY2UuYXBwZW5kKCInIiArIFN0
cmluZyhtaW4pICsgIicsICIpOworICAgIGVsc2UKKyAgICAgICAgc291cmNlLmFwcGVuZExpdGVy
YWwoIm51bGwsICIpOworICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJtYXg6Iik7CisgICAgaWYg
KCFtYXguZW1wdHkoKSkKKyAgICAgICAgc291cmNlLmFwcGVuZCgiJyIgKyBTdHJpbmcobWF4KSAr
ICInLCAiKTsKKyAgICBlbHNlCisgICAgICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJudWxsLCAi
KTsKKyAgICAvLyBBZGQgc3RlcCBzaXplCisgICAgc291cmNlLmFwcGVuZCgic3RlcDoiICsgU3Ry
aW5nOjpudW1iZXIoc3RlcCkgKyAiLCAiKTsKKyAgICAvLyBBZGQgVUkgdGV4dAorICAgIHNvdXJj
ZS5hcHBlbmRMaXRlcmFsKCJ1aVRleHQ6IHsiKTsKKyAgICBzb3VyY2UuYXBwZW5kKCJ0aXRsZTon
IiArIHRpdGxlICsgIicsIik7CisgICAgc291cmNlLmFwcGVuZCgiZG9uZUJ1dHRvbkxhYmVsOici
ICsgU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6UElDS0VSX0RPTkVfQlVUVE9OX0xBQkVMKSkgKyAiJywiKTsKKyAgICBzb3VyY2UuYXBw
ZW5kKCJjYW5jZWxCdXR0b25MYWJlbDonIiArIFN0cmluZzo6ZnJvbVVURjgoc19yZXNvdXJjZS5n
ZXRTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBJQ0tFUl9DQU5DRUxfQlVUVE9OX0xBQkVM
KSkgKyAiJywiKTsKKyAgICBzb3VyY2UuYXBwZW5kKCJtb250aExhYmVsczoiICsgRGF0ZVBpY2tl
ckNsaWVudDo6Z2VuZXJhdGVEYXRlTGFiZWxzKFVEQVRfU1RBTkRBTE9ORV9NT05USFMpICsgIiwi
KTsKKyAgICBzb3VyY2UuYXBwZW5kKCJzaG9ydE1vbnRoTGFiZWxzOiIgKyBEYXRlUGlja2VyQ2xp
ZW50OjpnZW5lcmF0ZURhdGVMYWJlbHMoVURBVF9TSE9SVF9NT05USFMpICsgIiwiKTsKKyAgICBz
b3VyY2UuYXBwZW5kKCJkYXlzT2ZXZWVrTGFiZWxzOiIgKyBEYXRlUGlja2VyQ2xpZW50OjpnZW5l
cmF0ZURhdGVMYWJlbHMoVURBVF9TVEFOREFMT05FX1dFRUtEQVlTKSArICIsIik7CisgICAgc291
cmNlLmFwcGVuZCgiYW1QbUxhYmVsczoiICsgRGF0ZVBpY2tlckNsaWVudDo6Z2VuZXJhdGVEYXRl
TGFiZWxzKFVEQVRfQU1fUE1TKSArICIsIik7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIn0s
Iik7CisgICAgLy8gQWRkIGRpcmVjdGlvbmFsaXR5CisgICAgYm9vbCBpc1J0bCA9IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpMb2NhbGVIYW5kbGVyOjppbnN0YW5jZSgpLT5pc1J0bExvY2FsZSgpOwor
ICAgIHNvdXJjZS5hcHBlbmQoImRpcmVjdGlvbjonIiArIFN0cmluZyhpc1J0bCA/ICJydGwiIDog
Imx0ciIpICsgIicsIik7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIn0pO1xuIik7CisgICAg
c291cmNlLmFwcGVuZExpdGVyYWwoIiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcs
IHNob3dJdCk7IH0pOyBcbiIpOworICAgIHNvdXJjZS5hcHBlbmQodGltZUNvbnRyb2xCbGFja0Jl
cnJ5SnMsIHNpemVvZih0aW1lQ29udHJvbEJsYWNrQmVycnlKcykpOworICAgIHNvdXJjZS5hcHBl
bmRMaXRlcmFsKCI8L3NjcmlwdD5cbjwvYm9keT4gPC9odG1sPlxuIik7CisgICAgbV9zb3VyY2Ug
PSBzb3VyY2UudG9TdHJpbmcoKTsKK30KKwordm9pZCBEYXRlUGlja2VyQ2xpZW50OjpzZXRWYWx1
ZUFuZENsb3NlUG9wdXAoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICAvLyBQb3B1cCBjbG9z
ZWQuCisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGhp
ZGUgY2FyZXQgd2hlbiB3ZSBzZWxlY3QgZGF0ZSBpbnB1dCBmaWVsZCwgcmVzdG9yZSBpdCB3aGVu
IHdlIGNsb3NlIGRhdGUgcGlja2VyLgorICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNldENhcmV0VmlzaWJsZSh0cnVlKTsKKworICAgIC8vIFJldHVybiAt
MSBpZiB1c2VyIGNhbmNlbCB0aGUgc2VsZWN0aW9uLgorICAgIGlmICh2YWx1ZSAhPSAiLTEiKQor
ICAgICAgICBtX2VsZW1lbnQtPnNldFZhbHVlKHZhbHVlLCBEaXNwYXRjaENoYW5nZUV2ZW50KTsK
KyAgICBjbG9zZVBvcHVwKCk7Cit9CisKK3ZvaWQgRGF0ZVBpY2tlckNsaWVudDo6ZGlkQ2xvc2VQ
b3B1cCgpCit7CisgICAgUGFnZVBvcHVwQ2xpZW50OjpkaWRDbG9zZVBvcHVwKCk7CisgICAgbV9l
bGVtZW50ID0gMDsKK30KKworLy8gVURBVF9mb28gYXJlIGZvciBsYWJlbHMgdGhhdCBhcmUgbWVh
bnQgdG8gYmUgZm9ybWF0dGVkIGFzIHBhcnQgb2YgYSBkYXRlLgorLy8gVURBVF9TVEFOREFMT05F
X2ZvbyBhcmUgZm9yIGxhYmVscyB0aGF0IGFyZSBkaXNwbGF5ZWQgc2VwYXJhdGVseSBmcm9tIG90
aGVyIGRhdGUgY29tcG9uZW50cy4KKy8vIEZvciBleGFtcGxlLCBVREFUX1NIT1JUX01PTlRIUyBp
biBDYXRhbGFuIHB1dHMgYSBwcmVwb3NpdGlvbiBpbiBmcm9udCBvZiB0aGUgbW9udGggYnV0IFVE
QVRfU1RBTkRBTE9ORV9TSE9SVF9NT05USFMgZG9lcyBub3QuCitjb25zdCBTdHJpbmcgRGF0ZVBp
Y2tlckNsaWVudDo6Z2VuZXJhdGVEYXRlTGFiZWxzKFVEYXRlRm9ybWF0U3ltYm9sVHlwZSBzeW1i
b2xUeXBlKQoreworICAgIFVFcnJvckNvZGUgdWVyclN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAg
ICBEYXRlRm9ybWF0U3ltYm9scyBkYXRlU3ltYm9scyA9IERhdGVGb3JtYXRTeW1ib2xzKHVlcnJT
dGF0dXMpOyAvLyBjb25zdHJ1Y3RvciB3aWxsIG5ldmVyIGZhaWwKKyAgICBjb25zdCBVbmljb2Rl
U3RyaW5nKiBsYWJlbHMgPSAwOworICAgIGludDMyX3QgbGFiZWxDb3VudCA9IDA7CisKKyAgICBz
d2l0Y2ggKHN5bWJvbFR5cGUpIHsKKyAgICAvLyBkYXRlU3ltYm9scyByZXRhaW4gb3duZXJzaGlw
IG9mIHJldHVybiB2YWx1ZXMgZnJvbSBnZXRGb28gY2FsbHMKKyAgICBjYXNlIFVEQVRfU1RBTkRB
TE9ORV9NT05USFM6CisgICAgICAgIGxhYmVsQ291bnQgPSAxMjsKKyAgICAgICAgbGFiZWxzID0g
ZGF0ZVN5bWJvbHMuZ2V0TW9udGhzKGxhYmVsQ291bnQsIERhdGVGb3JtYXRTeW1ib2xzOjpTVEFO
REFMT05FLCBEYXRlRm9ybWF0U3ltYm9sczo6V0lERSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVURBVF9TVEFOREFMT05FX1NIT1JUX01PTlRIUzoKKyAgICAgICAgbGFiZWxDb3VudCA9IDEy
OworICAgICAgICBsYWJlbHMgPSBkYXRlU3ltYm9scy5nZXRNb250aHMobGFiZWxDb3VudCwgRGF0
ZUZvcm1hdFN5bWJvbHM6OlNUQU5EQUxPTkUsIERhdGVGb3JtYXRTeW1ib2xzOjpBQkJSRVZJQVRF
RCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVURBVF9TSE9SVF9NT05USFM6CisgICAgICAg
IGxhYmVsQ291bnQgPSAxMjsKKyAgICAgICAgbGFiZWxzID0gZGF0ZVN5bWJvbHMuZ2V0TW9udGhz
KGxhYmVsQ291bnQsIERhdGVGb3JtYXRTeW1ib2xzOjpGT1JNQVQsIERhdGVGb3JtYXRTeW1ib2xz
OjpBQkJSRVZJQVRFRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVURBVF9TVEFOREFMT05F
X1dFRUtEQVlTOgorICAgICAgICBsYWJlbENvdW50ID0gODsKKyAgICAgICAgLy8gZ2V0V2Vla2Rh
eXMgcmV0dXJucyBhbiBhcnJheSB3aGVyZSB0aGUgemVyb2V0aCBlbGVtZW50IGlzIGVtcHR5OyB0
aGUgZmlyc3QgbGFiZWwgaXMgcGxhY2VkIGluIGluZGV4IDEKKyAgICAgICAgbGFiZWxzID0gJihk
YXRlU3ltYm9scy5nZXRXZWVrZGF5cyhsYWJlbENvdW50LCBEYXRlRm9ybWF0U3ltYm9sczo6U1RB
TkRBTE9ORSwgRGF0ZUZvcm1hdFN5bWJvbHM6OldJREUpKVsxXTsgLy8gc2tpcCB6ZXJvZXRoIGVs
ZW1lbnQKKyAgICAgICAgLS1sYWJlbENvdW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVE
QVRfQU1fUE1TOgorICAgICAgICBsYWJlbENvdW50ID0gMjsKKyAgICAgICAgbGFiZWxzID0gZGF0
ZVN5bWJvbHMuZ2V0QW1QbVN0cmluZ3MobGFiZWxDb3VudCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgU3RyaW5nQnVpbGRlciBwcmludGVkTGFiZWxzOworICAgIHByaW50ZWRMYWJlbHMuYXBwZW5k
TGl0ZXJhbCgiWyIpOworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxhYmVsQ291bnQ7ICsr
aSkgeworICAgICAgICBTdHJpbmcgZXNjYXBlZExhYmVsID0gU3RyaW5nKGxhYmVsc1tpXS5nZXRC
dWZmZXIoKSwgbGFiZWxzW2ldLmxlbmd0aCgpKS5yZXBsYWNlKCdcXCcsICJcXFxcIikucmVwbGFj
ZSgnXCcnLCAiXFwnIik7IC8vIFRPRE8gUFIgMjQzNTQ3OiByZWZhY3RvciBlc2NhcGluZyBvZiBz
dHJpbmdzIGZvciBEYXRlUGlja2VyQ2xpZW50IGFuZCBTZWxlY3RQb3B1cENsaWVudAorICAgICAg
ICBwcmludGVkTGFiZWxzLmFwcGVuZCgiJyIgKyBlc2NhcGVkTGFiZWwgKyAiJyIpOworICAgICAg
ICBpZiAoaSA8IGxhYmVsQ291bnQgLSAxKQorICAgICAgICAgICAgcHJpbnRlZExhYmVscy5hcHBl
bmRMaXRlcmFsKCIsIik7CisgICAgfQorICAgIHByaW50ZWRMYWJlbHMuYXBwZW5kTGl0ZXJhbCgi
XSIpOworICAgIHJldHVybiBwcmludGVkTGFiZWxzLnRvU3RyaW5nKCk7Cit9CisKK30KK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RhdGVQaWNr
ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RhdGVQ
aWNrZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzg0Njc0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvRGF0ZVBpY2tlckNsaWVudC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBEYXRlUGlja2VyQ2xpZW50X2gKKyNkZWZp
bmUgRGF0ZVBpY2tlckNsaWVudF9oCisKKyNpbmNsdWRlICJQYWdlUG9wdXBDbGllbnQuaCIKKyNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1JbnB1dEV2ZW50cy5oPgorI2luY2x1ZGUgPHVuaWNv
ZGUvdWRhdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIVE1MSW5wdXRFbGVtZW50
OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworY2xh
c3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcml2YXRl
OworCitjbGFzcyBEYXRlUGlja2VyQ2xpZW50IDogcHVibGljIFBhZ2VQb3B1cENsaWVudCB7Citw
dWJsaWM6CisgICAgRGF0ZVBpY2tlckNsaWVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6QmxhY2tC
ZXJyeUlucHV0VHlwZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUs
IGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbiwgY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgbWF4LCBkb3VibGUgc3RlcCwgV2ViUGFnZVByaXZhdGUqLCBX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgfkRhdGVQaWNrZXJDbGllbnQoKTsKKwor
ICAgIHZvaWQgc2V0VmFsdWVBbmRDbG9zZVBvcHVwKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQg
ZGlkQ2xvc2VQb3B1cCgpOworCitwcml2YXRlOgorICAgIHZvaWQgZ2VuZXJhdGVIVE1MKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpCbGFja0JlcnJ5SW5wdXRUeXBlLCBjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyYgbWluLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtYXgsIGRvdWJsZSBz
dGVwKTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGdlbmVyYXRlRGF0ZUxhYmVscyhVRGF0ZUZv
cm1hdFN5bWJvbFR5cGUpOworCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkJsYWNrQmVycnlJ
bnB1dFR5cGUgbV90eXBlOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50PiBt
X2VsZW1lbnQ7Cit9OworCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1BhZ2VQb3B1cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9QYWdlUG9wdXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmI4NDI0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9QYWdlUG9wdXAuY3BwCkBAIC0wLDAgKzEsMTY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZVBvcHVwLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCisjaW5jbHVkZSAiRW1wdHlDbGll
bnRzLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdl
UG9wdXBDbGllbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKKyNpbmNsdWRlICJXZWJQYWdlX3AuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVm
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFnZVBvcHVw
OjpQYWdlUG9wdXAoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2UsIFBhZ2VQb3B1cENsaWVudCogY2xp
ZW50KQorICAgIDogbV93ZWJQYWdlUHJpdmF0ZSh3ZWJQYWdlKQorICAgICwgbV9jbGllbnQoYWRv
cHRQdHIoY2xpZW50KSkKK3sKK30KKworUGFnZVBvcHVwOjp+UGFnZVBvcHVwKCkKK3sKK30KKwor
dm9pZCBQYWdlUG9wdXA6OmluaXRpYWxpemUoV2ViUGFnZSogd2ViUGFnZSkKK3sKKyAgICAvLyBE
b24ndCB1c2UgYmFja2luZyBzdG9yZSBmb3IgdGhlIHBvcC11cCB3ZWIgcGFnZS4KKyAgICB3ZWJQ
YWdlLT5zZXR0aW5ncygpLT5zZXRCYWNraW5nU3RvcmVFbmFibGVkKGZhbHNlKTsKKworICAgIHdl
YlBhZ2UtPmQtPnNldExvYWRTdGF0ZShXZWJQYWdlUHJpdmF0ZTo6Q29tbWl0dGVkKTsKKworICAg
IHdyaXRlRG9jdW1lbnQod2ViUGFnZS0+ZC0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5hY3RpdmVE
b2N1bWVudExvYWRlcigpLT53cml0ZXIoKSk7CisgICAgaW5zdGFsbERPTUZ1bmN0aW9uKHdlYlBh
Z2UtPmQtPm1haW5GcmFtZSgpKTsKKworICAgIHdlYlBhZ2UtPmQtPnNldExvYWRTdGF0ZShXZWJQ
YWdlUHJpdmF0ZTo6RmluaXNoZWQpOworICAgIHdlYlBhZ2UtPmNsaWVudCgpLT5ub3RpZnlMb2Fk
RmluaXNoZWQoMCk7Cit9CisKK3ZvaWQgUGFnZVBvcHVwOjp3cml0ZURvY3VtZW50KERvY3VtZW50
V3JpdGVyKiB3cml0ZXIpCit7CisgICAgQVNTRVJUKHdyaXR0ZXIpOworICAgIHdyaXRlci0+c2V0
TUlNRVR5cGUoInRleHQvaHRtbCIpOworICAgIHdyaXRlci0+YmVnaW4oS1VSTCgpKTsKKworICAg
IC8vIEFsbCB0aGUgcG9wdXBzIGhhdmUgdGhlIHNhbWUgaHRtbCBoZWFkIGFuZCB0aGUgcGFnZSBj
b250ZW50IHNob3VsZCBiZSBub24tem9vbWFibGUuCisgICAgU3RyaW5nQnVpbGRlciBzb3VyY2U7
CisgICAgLy8gRklYTUU6IHRoZSBoYXJkY29kaW5nIHBhZGRpbmcgd2lsbCBiZSByZW1vdmVkIHNv
b24uCisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1
aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIv
PlxuIik7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwi
IGNvbnRlbnQ9XCJ1c2VyLXNjYWxhYmxlPW5vLCB3aWR0aD1kZXZpY2Utd2lkdGhcIiAvPlxuIik7
CisgICAgQ1N0cmluZyB1dGY4RGF0YSA9IHNvdXJjZS50b1N0cmluZygpLnV0ZjgoKTsKKyAgICB3
cml0ZXItPmFkZERhdGEodXRmOERhdGEuZGF0YSgpLCB1dGY4RGF0YS5sZW5ndGgoKSk7CisKKyAg
ICBtX2NsaWVudC0+d3JpdGVEb2N1bWVudCgqd3JpdGVyKTsKKyAgICB3cml0ZXItPmVuZCgpOwor
fQorCitKU1ZhbHVlUmVmIFBhZ2VQb3B1cDo6c2V0VmFsdWVBbmRDbG9zZVBvcHVwQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqKQor
eworICAgIEpTVmFsdWVSZWYganNSZXRWYWwgPSBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8PSAwKQorICAgICAgICByZXR1cm4ganNSZXRWYWw7
CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgMCkpOworICAgIHNpemVfdCBzaXplVVRG
OCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmcuZ2V0KCkpOworICAg
IFZlY3RvcjxjaGFyPiB1dGY4U3RyaW5nKHNpemVVVEY4ICsgMSk7CisgICAgdXRmOFN0cmluZ1tz
aXplVVRGOF0gPSAwOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyaW5nLmdldCgpLCB1
dGY4U3RyaW5nLmRhdGEoKSwgc2l6ZVVURjgpOworICAgIEpTT2JqZWN0UmVmIHBvcFVwT2JqZWN0
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1thcmd1bWVudENvdW50IC0gMV0s
IDApOworICAgIFBhZ2VQb3B1cCogcGFnZVBvcHVwID0gc3RhdGljX2Nhc3Q8UGFnZVBvcHVwKj4o
SlNPYmplY3RHZXRQcml2YXRlKHBvcFVwT2JqZWN0KSk7CisgICAgcGFnZVBvcHVwLT5tX2NsaWVu
dC0+c2V0VmFsdWVBbmRDbG9zZVBvcHVwKFN0cmluZzo6ZnJvbVVURjgodXRmOFN0cmluZy5kYXRh
KCkpKTsKKworICAgIHJldHVybiBqc1JldFZhbDsKK30KKworc3RhdGljIHZvaWQgcG9wVXBFeHRl
bnNpb25Jbml0aWFsaXplKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFBhZ2VQb3B1cCogcGFnZVBvcHVw
ID0gc3RhdGljX2Nhc3Q8UGFnZVBvcHVwKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwor
ICAgIHBhZ2VQb3B1cC0+cmVmKCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcFVwRXh0ZW5zaW9uRmlu
YWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIFBhZ2VQb3B1cCogcGFnZVBvcHVwID0g
c3RhdGljX2Nhc3Q8UGFnZVBvcHVwKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAg
IHBhZ2VQb3B1cC0+ZGVyZWYoKTsKK30KKworc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gcG9wVXBF
eHRlbnNpb25TdGF0aWNGdW5jdGlvbnNbXSA9Cit7Cit7IDAsIDAsIDAgfSwKK3sgMCwgMCwgMCB9
Cit9OworCitzdGF0aWMgSlNTdGF0aWNWYWx1ZSBwb3BVcEV4dGVuc2lvblN0YXRpY1ZhbHVlc1td
ID0KK3sKK3sgMCwgMCwgMCwgMCB9Cit9OworCit2b2lkIFBhZ2VQb3B1cDo6aW5zdGFsbERPTUZ1
bmN0aW9uKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RP
TVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIEFTU0VSVCh3aW5k
b3cpOworCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsK
KyAgICBBU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKwor
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKKyAgICBKU09iamVjdFJl
ZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7CisgICAg
SlNTdHJpbmdSZWYgZnVuY3Rpb25OYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
InNldFZhbHVlQW5kQ2xvc2VQb3B1cCIpOworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uID0gSlNP
YmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgZnVuY3Rpb25OYW1lLCBzZXRW
YWx1ZUFuZENsb3NlUG9wdXBDYWxsYmFjayk7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250
ZXh0LCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb24sIGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOworCisg
ICAgLy8gUmVnaXN0ZXIgY2xpZW50IGludG8gRE9NCisgICAgSlNDbGFzc0RlZmluaXRpb24gZGVm
aW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIGRlZmluaXRpb24uc3RhdGlj
VmFsdWVzID0gcG9wVXBFeHRlbnNpb25TdGF0aWNWYWx1ZXM7CisgICAgZGVmaW5pdGlvbi5zdGF0
aWNGdW5jdGlvbnMgPSBwb3BVcEV4dGVuc2lvblN0YXRpY0Z1bmN0aW9uczsKKyAgICBkZWZpbml0
aW9uLmluaXRpYWxpemUgPSBwb3BVcEV4dGVuc2lvbkluaXRpYWxpemU7CisgICAgZGVmaW5pdGlv
bi5maW5hbGl6ZSA9IHBvcFVwRXh0ZW5zaW9uRmluYWxpemU7CisgICAgSlNDbGFzc1JlZiBjbGll
bnRDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworCisgICAgSlNPYmplY3RSZWYg
Y2xpZW50Q2xhc3NPYmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgY2xpZW50Q2xhc3MsIHRo
aXMpOworCisgICAgU3RyaW5nIG5hbWUoInBvcFVwIik7CisKKyAgICBKU0M6OlB1dFByb3BlcnR5
U2xvdCBzbG90OworICAgIHdpbmRvdy0+cHV0KHdpbmRvdywgZXhlYywgSlNDOjpJZGVudGlmaWVy
KGV4ZWMsIG5hbWUpLCB0b0pTKGNsaWVudENsYXNzT2JqZWN0KSwgc2xvdCk7CisKKyAgICBKU0Ns
YXNzUmVsZWFzZShjbGllbnRDbGFzcyk7Cit9CisKK3ZvaWQgUGFnZVBvcHVwOjpjbG9zZSgpCit7
CisgICAgbV9jbGllbnQtPmRpZENsb3NlUG9wdXAoKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUGFnZVBvcHVwLmggYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9QYWdlUG9wdXAuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTg2ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUGFnZVBvcHVwLmgKQEAgLTAsMCAr
MSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aWZuZGVmIFBhZ2VQb3B1cF9oCisjZGVmaW5lIFBhZ2VQb3B1cF9oCisKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVm
OwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7Cit0eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBEb2N1bWVudFdyaXRlcjsKK2NsYXNzIEZyYW1lOworfQorCituYW1lc3BhY2Ug
QmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBX
ZWJQYWdlUHJpdmF0ZTsKK2NsYXNzIFBhZ2VQb3B1cENsaWVudDsKKworY2xhc3MgUGFnZVBvcHVw
IDogcHVibGljIFJlZkNvdW50ZWQ8UGFnZVBvcHVwPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGFnZVBvcHVwPiBjcmVhdGUoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRl
LCBQYWdlUG9wdXBDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGFnZVBvcHVwKHdlYlBhZ2VQcml2YXRlLCBjbGllbnQpKTsKKyAgICB9CisgICAgflBh
Z2VQb3B1cCgpOworCisgICAgdm9pZCBpbml0aWFsaXplKFdlYlBhZ2UqKTsKKyAgICB2b2lkIGNs
b3NlKCk7CisKK3ByaXZhdGU6CisgICAgUGFnZVBvcHVwKFdlYlBhZ2VQcml2YXRlKiwgUGFnZVBv
cHVwQ2xpZW50Kik7CisKKyAgICB2b2lkIHdyaXRlRG9jdW1lbnQoV2ViQ29yZTo6RG9jdW1lbnRX
cml0ZXIqKTsKKyAgICB2b2lkIGluc3RhbGxET01GdW5jdGlvbihXZWJDb3JlOjpGcmFtZSopOwor
CisgICAgc3RhdGljIEpTVmFsdWVSZWYgc2V0VmFsdWVBbmRDbG9zZVBvcHVwQ2FsbGJhY2soSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKik7CisKKyAgICBXZWJQ
YWdlUHJpdmF0ZSogbV93ZWJQYWdlUHJpdmF0ZTsKKyAgICBPd25QdHI8UGFnZVBvcHVwQ2xpZW50
PiBtX2NsaWVudDsKK307CisKK30KK30KKworI2VuZGlmIC8vIFBhZ2VQb3B1cF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9QYWdlUG9wdXBDbGll
bnQuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUGFnZVBvcHVw
Q2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZiMzY2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
UGFnZVBvcHVwQ2xpZW50LmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdl
UG9wdXBDbGllbnQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgorI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK1BhZ2VQb3B1cENsaWVudDo6UGFn
ZVBvcHVwQ2xpZW50KFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlUHJpdmF0ZSkKKyAgICA6IG1fd2Vi
UGFnZVByaXZhdGUod2ViUGFnZVByaXZhdGUpCit7Cit9CisKK3ZvaWQgUGFnZVBvcHVwQ2xpZW50
OjpjbG9zZVBvcHVwKCkKK3sKKyAgICBBU1NFUlQobV93ZWJQYWdlUHJpdmF0ZSk7CisgICAgbV93
ZWJQYWdlUHJpdmF0ZS0+Y2xvc2VQYWdlUG9wdXAoKTsKK30KKwordm9pZCBQYWdlUG9wdXBDbGll
bnQ6OmRpZENsb3NlUG9wdXAoKQoreworICAgIG1fd2ViUGFnZVByaXZhdGUgPSAwOworfQorCitJ
bnRTaXplIFBhZ2VQb3B1cENsaWVudDo6Y29udGVudFNpemUoKQoreworICAgIC8vIEZJWE1FOiB3
aWxsIGdlbmVyYXRlIGNvbnRlbnQgc2l6ZSBkeW5hbWljYWxseS4KKyAgICByZXR1cm4gSW50U2l6
ZSgzMjAsIDI1Nik7Cit9CisKK3ZvaWQgUGFnZVBvcHVwQ2xpZW50Ojp3cml0ZURvY3VtZW50KERv
Y3VtZW50V3JpdGVyJiB3cml0ZXIpCit7CisgICAgd3JpdGVyLmFkZERhdGEobV9zb3VyY2UudXRm
OCgpLmRhdGEoKSwgbV9zb3VyY2UudXRmOCgpLmxlbmd0aCgpKTsKK30KKworfQorfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9QYWdlUG9wdXBD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1BhZ2VQb3B1
cENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWM1ZjgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Q
YWdlUG9wdXBDbGllbnQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKworI2lmbmRlZiBQYWdlUG9wdXBDbGllbnRfaAorI2RlZmluZSBQ
YWdlUG9wdXBDbGllbnRfaAorCisjaW5jbHVkZSAiRG9jdW1lbnRXcml0ZXIuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIERvY3VtZW50V3JpdGVyOworY2xhc3MgSFRNTElucHV0RWxlbWVu
dDsKK30KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBXZWJQYWdlUHJpdmF0ZTsKKworY2xhc3MgUGFnZVBvcHVwQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudFNpemUoKTsKKworICAgIC8vIFByb3Zp
ZGUgYW4gSFRNTCBzb3VyY2UgdGhyb3VnaCB0aGUgc3BlY2lmaWVkIERvY3VtZW50V3JpdGVyLiBU
aGUgSFRNTAorICAgIC8vIHNvdXJjZSBpcyByZW5kZXJlZCBpbiBhIFBhZ2VQb3B1cC4KKyAgICAv
LyBUaGUgY29udGVudCBIVE1MIHN1cHBvcnRzOgorICAgIC8vICAtIE5vIDxzZWxlY3Q+IHBvcHVw
cworICAgIC8vICAtIHdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAobnVtYmVyLCBzdHJpbmcp
LgorICAgIHZpcnR1YWwgdm9pZCB3cml0ZURvY3VtZW50KFdlYkNvcmU6OkRvY3VtZW50V3JpdGVy
Jik7CisKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBieSB0aGUgY29udGVudCBIVE1MIG9mIGEgUGFn
ZVBvcHVwLgorICAgIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxk
IGNhbGwgY2xvc2VQb3B1cCgpLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFuZENsb3NlUG9w
dXAoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSkgPSAwOworCisgICAgLy8gVGhpcyBpcyBjYWxs
ZWQgd2hlbmV2ZXIgYSBQYWdlUG9wdXAgd2FzIGNsb3NlZC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2xvc2VQb3B1cCgpOworCisgICAgdmlydHVhbCB+UGFnZVBvcHVwQ2xpZW50KCkgeyB9CisKK3By
b3RlY3RlZDoKKyAgICBQYWdlUG9wdXBDbGllbnQoV2ViUGFnZVByaXZhdGUqKTsKKworICAgIC8v
IFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBjb250ZW50IEhUTUwgb2YgYSBQYWdlUG9wdXAuCisgICAg
dmlydHVhbCB2b2lkIGNsb3NlUG9wdXAoKTsKKworICAgIFdlYlBhZ2VQcml2YXRlKiBtX3dlYlBh
Z2VQcml2YXRlOworICAgIFN0cmluZyBtX3NvdXJjZTsKK307CisKK30KK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TZWxlY3RQ
b3B1cENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9T
ZWxlY3RQb3B1cENsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDkxYmUwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2VsZWN0UG9wdXBDbGllbnQuaCIKKworI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJQb3B1cFBp
Y2tlci5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIldlYlBhZ2VfcC5o
IgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8TG9j
YWxlSGFuZGxlci5oPgorI2luY2x1ZGUgPExvY2FsaXplUmVzb3VyY2UuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworREVGSU5FX1NUQVRJ
Q19MT0NBTChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9jYWxpemVSZXNvdXJjZSwgc19yZXNvdXJj
ZSwgKCkpOworCitTZWxlY3RQb3B1cENsaWVudDo6U2VsZWN0UG9wdXBDbGllbnQoYm9vbCBtdWx0
aXBsZSwgaW50IHNpemUsIGNvbnN0IFNjb3BlQXJyYXk8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZz4mIGxhYmVscywgYm9vbCogZW5hYmxlZHMsIGNvbnN0IGludCogaXRlbVR5cGUsIGJvb2wq
IHNlbGVjdGVkcywgV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRlLCBIVE1MU2VsZWN0RWxl
bWVudCogZWxlbWVudCkKKyAgICA6IFBhZ2VQb3B1cENsaWVudCh3ZWJQYWdlUHJpdmF0ZSkKKyAg
ICAsIG1fbXVsdGlwbGUobXVsdGlwbGUpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fZWxl
bWVudChlbGVtZW50KQorICAgICwgbV9ub3RpZnlDaGFuZ2VUaW1lcih0aGlzLCAmU2VsZWN0UG9w
dXBDbGllbnQ6Om5vdGlmeVNlbGVjdGlvbkNoYW5nZSkKK3sKKyAgICBnZW5lcmF0ZUhUTUwobXVs
dGlwbGUsIHNpemUsIGxhYmVscywgZW5hYmxlZHMsIGl0ZW1UeXBlLCBzZWxlY3RlZHMpOworfQor
CitTZWxlY3RQb3B1cENsaWVudDo6flNlbGVjdFBvcHVwQ2xpZW50KCkKK3sKK30KKwordm9pZCBT
ZWxlY3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKGJvb2wsIGludCBzaXplLCBjb25zdCBTY29w
ZUFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBsYWJlbHMsIGJvb2wqIGVuYWJs
ZWRzLAorICAgIGNvbnN0IGludCogaXRlbVR5cGUsIGJvb2wqIHNlbGVjdGVkcykKK3sKKyAgICBT
dHJpbmdCdWlsZGVyIHNvdXJjZTsKKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiPHN0eWxlPlxu
Iik7CisgICAgLy8gSW5jbHVkZSBDU1MgZmlsZS4KKyAgICBzb3VyY2UuYXBwZW5kKHBvcHVwQ29u
dHJvbEJsYWNrQmVycnlDc3MsIHNpemVvZihwb3B1cENvbnRyb2xCbGFja0JlcnJ5Q3NzKSk7Cisg
ICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjwvc3R5bGU+XG48c3R5bGU+Iik7CisgICAgc291cmNl
LmFwcGVuZChzZWxlY3RDb250cm9sQmxhY2tCZXJyeUNzcywgc2l6ZW9mKHNlbGVjdENvbnRyb2xC
bGFja0JlcnJ5Q3NzKSk7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjwvc3R5bGU+PC9oZWFk
Pjxib2R5PlxuIik7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjxzY3JpcHQ+XG4iKTsKKyAg
ICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgid2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBm
dW5jdGlvbiBzaG93SXQoKSB7Iik7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIndpbmRvdy5z
ZWxlY3Quc2hvdyh7Iik7CisgICAgLy8gSW5kaWNhdGUgaWYgaXQgaXMgYSBtdWx0aXNlbGVjdC4K
KyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiaXNNdWx0aVNlbGVjdDoiKTsKKyAgICBpZiAobV9t
dWx0aXBsZSkKKyAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoInRydWUsIik7CisgICAgZWxz
ZQorICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiZmFsc2UsIik7CisgICAgLy8gQWRkIGxh
YmVscy4KKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgibGFiZWxzOiBbIik7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgc291cmNlLmFwcGVuZCgiJyIgKyBT
dHJpbmcobGFiZWxzW2ldKS5yZXBsYWNlV2l0aExpdGVyYWwoJ1xcJywgIlxcXFwiKS5yZXBsYWNl
V2l0aExpdGVyYWwoJ1wnJywgIlxcJyIpICsgIiciKTsKKyAgICAgICAgLy8gRG9uJ3QgYXBwZW5k
ICcsJyB0byBsYXN0IGVsZW1lbnQuCisgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQorICAgICAg
ICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgfQorICAgIHNvdXJjZS5hcHBl
bmRMaXRlcmFsKCJdLCAiKTsKKyAgICAvLyBBZGQgZW5hYmxlcy4KKyAgICBzb3VyY2UuYXBwZW5k
KCJlbmFibGVkczogWyIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cisg
ICAgICAgIGlmIChlbmFibGVkc1tpXSkKKyAgICAgICAgICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFs
KCJ0cnVlIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFs
KCJmYWxzZSIpOworICAgICAgICAvLyBEb24ndCBhcHBlbmQgJywnIHRvIGxhc3QgZWxlbWVudC4K
KyAgICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCisgICAgICAgICAgICBzb3VyY2UuYXBwZW5kTGl0
ZXJhbCgiLCAiKTsKKyAgICB9CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIl0sICIpOworICAg
IC8vIEFkZCBpdGVtVHlwZS4KKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiaXRlbVR5cGVzOiBb
Iik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgc291cmNl
LmFwcGVuZE51bWJlcihpdGVtVHlwZVtpXSk7CisgICAgICAgIC8vIERvbid0IGFwcGVuZCAnLCcg
dG8gbGFzdCBlbGVtZW50LgorICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKKyAgICAgICAgICAg
IHNvdXJjZS5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgIH0KKyAgICBzb3VyY2UuYXBwZW5kTGl0
ZXJhbCgiXSwgIik7CisgICAgLy8gQWRkIHNlbGVjdGVkcworICAgIHNvdXJjZS5hcHBlbmRMaXRl
cmFsKCJzZWxlY3RlZHM6IFsiKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICBpZiAoc2VsZWN0ZWRzW2ldKQorICAgICAgICAgICAgc291cmNlLmFwcGVuZExp
dGVyYWwoInRydWUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc291cmNlLmFwcGVuZExp
dGVyYWwoImZhbHNlIik7CisgICAgICAgIC8vIERvbid0IGFwcGVuZCAnLCcgdG8gbGFzdCBlbGVt
ZW50LgorICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKKyAgICAgICAgICAgIHNvdXJjZS5hcHBl
bmRMaXRlcmFsKCIsICIpOworICAgIH0KKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiXSwgIik7
CisgICAgLy8gQWRkIFVJIHRleHQKKyAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgidWlUZXh0OiB7
Iik7CisgICAgc291cmNlLmFwcGVuZCgidGl0bGU6JyIgKyBTdHJpbmc6OmZyb21VVEY4KHNfcmVz
b3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQSUNLRVJfU0VMRUNUX1RJVExF
KSkgKyAiJywiKTsKKyAgICBzb3VyY2UuYXBwZW5kKCJkb25lQnV0dG9uTGFiZWw6JyIgKyBTdHJp
bmc6OmZyb21VVEY4KHNfcmVzb3VyY2UuZ2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpQ
SUNLRVJfRE9ORV9CVVRUT05fTEFCRUwpKSArICInLCIpOworICAgIHNvdXJjZS5hcHBlbmQoImNh
bmNlbEJ1dHRvbkxhYmVsOiciICsgU3RyaW5nOjpmcm9tVVRGOChzX3Jlc291cmNlLmdldFN0cmlu
ZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6UElDS0VSX0NBTkNFTF9CVVRUT05fTEFCRUwpKSArICIn
LCIpOworICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJ9LCIpOworICAgIC8vIEFkZCBkaXJlY3Rp
b25hbGl0eQorICAgIGJvb2wgaXNSdGwgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9jYWxlSGFu
ZGxlcjo6aW5zdGFuY2UoKS0+aXNSdGxMb2NhbGUoKTsKKyAgICBzb3VyY2UuYXBwZW5kKCJkaXJl
Y3Rpb246JyIgKyBTdHJpbmcoaXNSdGwgPyAicnRsIiA6ICJsdHIiKSArICInLCIpOworICAgIHNv
dXJjZS5hcHBlbmRMaXRlcmFsKCJ9KTtcbiIpOworICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCIg
d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBzaG93SXQpOyB9KTsgXG4iKTsKKyAg
ICBzb3VyY2UuYXBwZW5kKHNlbGVjdENvbnRyb2xCbGFja0JlcnJ5SnMsIHNpemVvZihzZWxlY3RD
b250cm9sQmxhY2tCZXJyeUpzKSk7CisgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIjwvc2NyaXB0
PlxuPC9ib2R5PiA8L2h0bWw+XG4iKTsKKyAgICBtX3NvdXJjZSA9IHNvdXJjZS50b1N0cmluZygp
OworfQorCit2b2lkIFNlbGVjdFBvcHVwQ2xpZW50OjpzZXRWYWx1ZUFuZENsb3NlUG9wdXAoY29u
c3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSkKK3sKKyAgICAvLyBQb3B1cCBjbG9zZWQuCisgICAgaWYg
KCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
YW5jZWxWYWx1ZSA9ICItMSI7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09IGNhbmNlbFZhbHVlKSB7
CisgICAgICAgIGNsb3NlUG9wdXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX3NpemUgPiAwKSB7CisgICAgICAgIGJvb2wgc2VsZWN0ZWRzW21fc2l6ZV07CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykKKyAgICAgICAgICAgIHNlbGVj
dGVkc1tpXSA9IHN0cmluZ1ZhbHVlW2ldIC0gJzAnOworCisgICAgICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IG1fZWxlbWVudC0+bGlzdEl0ZW1zKCk7CisKKyAgICAgICAg
Ly8gSWYgZWxlbWVudCBjaGFuZ2VkIGFmdGVyIHNlbGVjdCBVSSBzaG93ZWQsIGRvIG5vdGhpbmcg
YnV0IGNsb3NlUG9wdXAoKS4KKyAgICAgICAgaWYgKGl0ZW1zLnNpemUoKSAhPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9zaXplKSkgeworICAgICAgICAgICAgY2xvc2VQb3B1cCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9w
dGlvbjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcp
KSB7CisgICAgICAgICAgICAgICAgb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQqPihpdGVtc1tpXSk7CisgICAgICAgICAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3RlZFN0YXRl
KHNlbGVjdGVkc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8g
Rm9yY2UgcmVwYWludCBiZWNhdXNlIHdlIGRvIG5vdCBzZW5kIG1vdXNlIGV2ZW50cyB0byB0aGUg
c2VsZWN0IGVsZW1lbnQKKyAgICAvLyBhbmQgdGhlIGVsZW1lbnQgZG9lc24ndCBhdXRvbWF0aWNh
bGx5IHJlcGFpbnQgaXRzZWxmLgorICAgIGlmIChtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAg
ICAgIG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworCisgICAgbV9ub3RpZnlDaGFu
Z2VUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgU2VsZWN0UG9wdXBDbGllbnQ6OmRp
ZENsb3NlUG9wdXAoKQoreworICAgIFBhZ2VQb3B1cENsaWVudDo6ZGlkQ2xvc2VQb3B1cCgpOwor
ICAgIG1fZWxlbWVudCA9IDA7Cit9CisKK3ZvaWQgU2VsZWN0UG9wdXBDbGllbnQ6Om5vdGlmeVNl
bGVjdGlvbkNoYW5nZShXZWJDb3JlOjpUaW1lcjxTZWxlY3RQb3B1cENsaWVudD4qKQoreworICAg
IGlmIChtX2VsZW1lbnQpCisgICAgICAgIG1fZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENo
YW5nZUV2ZW50KCk7CisgICAgY2xvc2VQb3B1cCgpOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5o
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU2VsZWN0UG9wdXBDbGll
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjI5YjUxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU2VsZWN0
UG9wdXBDbGllbnQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpZm5kZWYgU2VsZWN0UG9wdXBDbGllbnRfaAorI2RlZmluZSBTZWxl
Y3RQb3B1cENsaWVudF9oCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGFnZVBv
cHVwQ2xpZW50LmgiCisjaW5jbHVkZSAiU2NvcGVQb2ludGVyLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQ7Cit9CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsK
K25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBTZWxlY3RQb3B1cENsaWVudCA6IHB1YmxpYyBQYWdlUG9wdXBDbGllbnQg
eworcHVibGljOgorICAgIFNlbGVjdFBvcHVwQ2xpZW50KGJvb2wgbXVsdGlwbGUsIGludCBzaXpl
LCBjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBsYWJlbHMs
IGJvb2wqIGVuYWJsZWRzLCBjb25zdCBpbnQqIGl0ZW1UeXBlLCBib29sKiBzZWxlY3RlZHMsIFdl
YlBhZ2VQcml2YXRlKiwgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqKTsKKyAgICB+U2VsZWN0
UG9wdXBDbGllbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFuZENsb3NlUG9wdXAo
Y29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlUG9wdXAoKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGdlbmVyYXRlSFRNTChib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29u
c3QgU2NvcGVBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxzLCBib29s
KiBlbmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0ZWRzKTsKKyAgICB2
b2lkIG5vdGlmeVNlbGVjdGlvbkNoYW5nZShXZWJDb3JlOjpUaW1lcjxTZWxlY3RQb3B1cENsaWVu
dD4gKik7CisKKyAgICBib29sIG1fbXVsdGlwbGU7CisgICAgdW5zaWduZWQgbV9zaXplOworICAg
IFJlZlB0cjxXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudD4gbV9lbGVtZW50OworICAgIFdlYkNv
cmU6OlRpbWVyPFNlbGVjdFBvcHVwQ2xpZW50PiBtX25vdGlmeUNoYW5nZVRpbWVyOworfTsKKwor
fQorfQorI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>