<?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>184922</bug_id>
          
          <creation_ts>2018-04-24 11:32:18 -0700</creation_ts>
          <short_desc>Rename LayoutCtx.h/cpp to LayoutContext.h/cpp</short_desc>
          <delta_ts>2018-04-24 12:49:18 -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>Frames</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1417209</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-24 11:32:18 -0700</bug_when>
    <thetext>To achieve this the existing LayoutContext class is renamed to FrameViewLayoutContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1417212</commentid>
    <comment_count>1</comment_count>
      <attachid>338659</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-24 11:38:26 -0700</bug_when>
    <thetext>Created attachment 338659
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1417239</commentid>
    <comment_count>2</comment_count>
      <attachid>338659</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-24 12:48:58 -0700</bug_when>
    <thetext>Comment on attachment 338659
patch

Clearing flags on attachment: 338659

Committed r230966: &lt;https://trac.webkit.org/changeset/230966&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1417240</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-24 12:49:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1417244</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-24 12:49:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/39694087&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338659</attachid>
            <date>2018-04-24 11:38:26 -0700</date>
            <delta_ts>2018-04-24 12:48:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>layoutctx.patch</filename>
            <type>text/plain</type>
            <size>110148</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNiBAQAorMjAxOC0wNC0yNCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIExheW91dEN0eC5o
L2NwcCB0byBMYXlvdXRDb250ZXh0LmgvY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODQ5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBaYWxhbiBC
dWp0YXMuCisKKyAgICAgICAgVG8gYWNoaWV2ZSB0aGlzIHRoZSBleGlzdGluZyBMYXlvdXRDb250
ZXh0IGNsYXNzIGlzIHJlbmFtZWQgdG8gRnJhbWVWaWV3TGF5b3V0Q29udGV4dC4KKworICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBsYXlvdXQvTGF5b3V0Q29udGV4dC5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDdHguY3BwLgorICAgICAgICAqIGxheW91dC9MYXlv
dXRDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDdHgu
aC4KKyAgICAgICAgKiBsYXlvdXQvTGF5b3V0Q3R4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBs
YXlvdXQvTGF5b3V0Q3R4Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzaG91bGREZWZlclNjcm9sbFVwZGF0ZUFm
dGVyQ29udGVudFNpemVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRh
dGVMYXlvdXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
Ojp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTGF5b3V0Q29udGV4dC5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXRTY29wZTo6TGF5b3V0U2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdMYXlvdXRDb250ZXh0Ojp+RnJhbWVWaWV3TGF5b3V0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6cnVuT3JTY2hl
ZHVsZUFzeW5jaHJvbm91c1Rhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlld0xheW91
dENvbnRleHQ6OnJ1bkFzeW5jaHJvbm91c1Rhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlld0xheW91dENvbnRleHQ6OmZsdXNoQXN5bmNocm9ub3VzVGFza3MpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6bmVlZHNMYXlvdXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6c2V0TmVlZHNMYXlvdXQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6ZW5hYmxlU2V0TmVlZHNMYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6ZGlzYWJsZVNldE5lZWRz
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlld0xheW91dENvbnRleHQ6OnNjaGVk
dWxlTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlld0xheW91dENvbnRleHQ6OnVu
c2NoZWR1bGVMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4
dDo6c2NoZWR1bGVTdWJ0cmVlTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlld0xh
eW91dENvbnRleHQ6OmxheW91dFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3TGF5b3V0Q29udGV4dDo6Y29udmVydFN1YnRyZWVMYXlvdXRUb0Z1bGxMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6c2V0U3VidHJlZUxheW91dFJv
b3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6Y2FuUGVyZm9y
bUxheW91dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdMYXlvdXRDb250ZXh0
OjphcHBseVRleHRTaXppbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdM
YXlvdXRDb250ZXh0Ojp1cGRhdGVTdHlsZUZvckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXdMYXlvdXRDb250ZXh0OjpoYW5kbGVMYXlvdXRXaXRoRnJhbWVGbGF0dGVuaW5nSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6c3RhcnRM
YXlvdXRBdE1haW5GcmFtZVZpZXdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXdMYXlvdXRDb250ZXh0OjpsYXlvdXREZWx0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXdMYXlvdXRDb250ZXh0OjphZGRMYXlvdXREZWx0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXREZWx0YU1hdGNoZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6bGF5b3V0U3RhdGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6cHVzaExheW91dFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlld0xheW91dENvbnRleHQ6OnB1c2hMYXlvdXRTdGF0
ZUZvclBhZ2luYXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdMYXlv
dXRDb250ZXh0Ojpwb3BMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpjaGVja0xheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlld0xheW91dENvbnRleHQ6OmZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlld0xheW91dENvbnRleHQ6OnZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3TGF5b3V0Q29udGV4dDo6cmVuZGVyVmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXdMYXlvdXRDb250ZXh0Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRDb250ZXh0OjpMYXlvdXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dENvbnRleHQ6On5MYXlvdXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dENvbnRleHQ6OmxheW91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRDb250ZXh0OjpydW5PclNjaGVkdWxlQXN5bmNocm9ub3VzVGFza3MpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6cnVuQXN5bmNocm9ub3VzVGFza3Mp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6Zmx1c2hBc3luY2hy
b25vdXNUYXNrcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0Ojpy
ZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0OjpuZWVkc0xh
eW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0Ojpz
ZXROZWVkc0xheW91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0
OjplbmFibGVTZXROZWVkc0xheW91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXRDb250ZXh0OjpkaXNhYmxlU2V0TmVlZHNMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0Q29udGV4dDo6c2NoZWR1bGVMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6dW5zY2hlZHVsZUxheW91dCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0OjpzY2hlZHVsZVN1YnRyZWVMYXlvdXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6bGF5b3V0VGltZXJGaXJlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0Ojpjb252ZXJ0U3VidHJl
ZUxheW91dFRvRnVsbExheW91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRD
b250ZXh0OjpzZXRTdWJ0cmVlTGF5b3V0Um9vdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRDb250ZXh0OjpjYW5QZXJmb3JtTGF5b3V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmFwcGx5VGV4dFNpemluZ0lmTmVlZGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OnVwZGF0ZVN0eWxlRm9yTGF5
b3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmhhbmRsZUxh
eW91dFdpdGhGcmFtZUZsYXR0ZW5pbmdJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRDb250ZXh0OjpzdGFydExheW91dEF0TWFpbkZyYW1lVmlld0lmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmxheW91dERlbHRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmFkZExheW91
dERlbHRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmxheW91
dERlbHRhTWF0Y2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0
OjpsYXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRD
b250ZXh0OjpwdXNoTGF5b3V0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0Q29udGV4dDo6cHVzaExheW91dFN0YXRlRm9yUGFnaW5hdGlvbklmTmVlZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OnBvcExheW91dFN0YXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmNoZWNrTGF5b3V0U3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6ZnJhbWUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6dmlldyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0OjpyZW5kZXJWaWV3IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmRvY3VtZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9MYXlvdXRDb250ZXh0LmguCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0OjpzdGFydERpc2FsbG93aW5nTGF5b3V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmVuZERpc2FsbG93aW5nTGF5
b3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmxheW91dFBo
YXNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6Omlz
TGF5b3V0TmVzdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENv
bnRleHQ6OmlzTGF5b3V0UGVuZGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRDb250ZXh0Ojppc0luTGF5b3V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dENvbnRleHQ6OmlzSW5SZW5kZXJUcmVlTGF5b3V0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmluUGFpbnRhYmxlU3RhdGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6bGF5b3V0Q291
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6c3Vi
dHJlZUxheW91dFJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
Q29udGV4dDo6Y2xlYXJTdWJ0cmVlTGF5b3V0Um9vdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRDb250ZXh0OjpyZXNldEZpcnN0TGF5b3V0RmxhZyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0OjpkaWRGaXJzdExheW91dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRDb250ZXh0OjpzZXROZWVkc0Z1bGxSZXBhaW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6Om5lZWRzRnVsbFJl
cGFpbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6
aXNQYWludE9mZnNldENhY2hlRW5hYmxlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRDb250ZXh0OjpsYXlvdXREaXNhbGxvd2VkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dENvbnRleHQ6OmlzTGF5b3V0U2NoZWR1bGluZ0VuYWJsZWQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Q29udGV4dDo6aW5Bc3lu
Y2hyb25vdXNUYXNrcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRD
b250ZXh0OjpkaXNhYmxlUGFpbnRPZmZzZXRDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRDb250ZXh0OjplbmFibGVQYWludE9mZnNldENhY2hlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwYWdlL0xheW91dENvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uv
TGF5b3V0Q29udGV4dC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OmNvbXB1dGVQYWdpbmF0aW9uSW5mb3JtYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OmVzdGFibGlzaExpbmVHcmlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlRGlzYWJsZXI6OkxheW91dFN0YXRlRGlzYWJsZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorCiAyMDE4LTA0LTI0ICBUYWRl
dSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIy
MTgzOSk6IEZpeCByZXF1ZXN0cyB3aXRoIEZvcm1EYXRhIGNvbnRhaW5pbmcgZW1wdHkgZmlsZXMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzA5NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIxNyw3ICsxMjE3LDcgQEAgbGF5b3V0L0Zs
b2F0aW5nQ29udGV4dC5jcHAKIGxheW91dC9GbG9hdGluZ1N0YXRlLmNwcAogbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0LmNwcAogbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5jcHAKLWxheW91dC9MYXlv
dXRDdHguY3BwCitsYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAKIGxheW91dC9ibG9ja2Zvcm1hdHRp
bmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxv
Y2tGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2lu
Q29sbGFwc2UuY3BwCkBAIC0xMzYxLDEwICsxMzYxLDEwIEBAIHBhZ2UvRnJhbWVEZXN0cnVjdGlv
bk9ic2VydmVyLmNwcAogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKIHBhZ2UvRnJhbWVUcmVl
LmNwcAogcGFnZS9GcmFtZVZpZXcuY3BwCitwYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3Bw
CiBwYWdlL0hpc3RvcnkuY3BwCiBwYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcAogcGFnZS9J
bnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5LmNwcAotcGFnZS9MYXlvdXRDb250ZXh0LmNwcAogcGFn
ZS9Mb2NhdGlvbi5jcHAKIHBhZ2UvTWVtb3J5UmVsZWFzZS5jcHAKIHBhZ2UvTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIzMDk2MikKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzkxLDcgKzM5MSw3IEBACiAJCTEwRkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQdWJsaWNV
UkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxMEZCMDg0QTE0RTE1QzdFMDBBM0RCOTggLyogUHVibGljVVJMTWFuYWdlci5oICovOyB9Owog
CQkxMTJCMzRENTFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExMkIzNEQ0
MUU2MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oICovOyB9Owog
CQkxMTM0MDlEQTIwM0UwMzgwMDBDNjY5MTUgLyogUmVuZGVyVHJlZUJ1aWxkZXJDb250aW51YXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExMzQw
OUQ4MjAzRTAzODAwMEM2NjkxNSAvKiBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5oICov
OyB9OwotCQkxMTNEMEI1MjFGOUZERDJCMDBGNjExQkIgLyogTGF5b3V0Q29udGV4dC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTEzRDBCNTAxRjlGREQy
QjAwRjYxMUJCIC8qIExheW91dENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkxMTNEMEI1MjFGOUZERDJCMDBGNjExQkIgLyogRnJhbWVW
aWV3TGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTEzRDBCNTAxRjlGREQyQjAwRjYxMUJCIC8qIEZyYW1lVmlld0xheW91dENvbnRl
eHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
MTVDRkE2QTIwOEFGN0QwMDAxRTY5OTEgLyogRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExNUNGQTY4MjA4QUY3RDAwMDFF
Njk5MSAvKiBGb3JtYXR0aW5nQ29udGV4dC5oICovOyB9OwogCQkxMTVDRkE2RTIwOEFGQUI3MDAx
RTY5OTEgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE1Q0ZBNkMyMDhBRkFCNjAwMUU2OTkxIC8qIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQuaCAqLzsgfTsKIAkJMTE1Q0ZBNzYyMDhBRkUzMDAwMUU2OTkxIC8q
IEZvcm1hdHRpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTE1Q0ZBNzQyMDhBRkUzMDAwMUU2OTkxIC8qIEZvcm1hdHRpbmdTdGF0ZS5oICov
OyB9OwpAQCAtMTk1NSw4ICsxOTU1LDggQEAKIAkJNkVEOEMzN0ExODNCRkY4QzAwOUU1M0JEIC8q
IEJveFNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RUQ4QzM3ODE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RUU4QTc3MzEwRjgwM0YzMDA1QTRB
MjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJH
TENvbnRleHRBdHRyaWJ1dGVzLmggKi87IH07CiAJCTZGMjIyQjc2MUFCNTJEOEEwMDk0NjUxQSAv
KiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjIyMkI3NTFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwICovOyB9OwotCQk2RjdDQTNDNjIwOEMyOTU3MDAyRjI5
QUIgLyogTGF5b3V0Q3R4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0Q3R4LmggKi87IH07Ci0J
CTZGN0NBM0M3MjA4QzI5NTcwMDJGMjlBQiAvKiBMYXlvdXRDdHguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzUyMDhDMjk1NjAwMkYyOUFC
IC8qIExheW91dEN0eC5jcHAgKi87IH07CisJCTZGN0NBM0M2MjA4QzI5NTcwMDJGMjlBQiAvKiBM
YXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0Q29udGV4dC5oICovOyB9Owor
CQk2RjdDQTNDNzIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0Q29udGV4dC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTNDNTIwOEMyOTU2MDAy
RjI5QUIgLyogTGF5b3V0Q29udGV4dC5jcHAgKi87IH07CiAJCTZGN0NBM0NBMjA4QzJCMkUwMDJG
MjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzgyMDhDMkIyRTAwMkYyOUFCIC8qIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmggKi87IH07CiAJCTZGN0NBM0NCMjA4QzJCMkUwMDJGMjlBQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTNDOTIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuY3BwICovOyB9OwogCQk2Rjk5NUExNTFBNzA3NTYyMDBBNzM1RjQgLyog
V2ViR0xTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZGOTk1QTEzMUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5bmMuY3BwICovOyB9OwpAQCAt
NTcyMyw4ICs1NzIzLDggQEAKIAkJMTEyQjM0RDQxRTYwQjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxp
bmVMYXlvdXRQYWdpbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
bXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTExMzQwOUQ3MjAzRTAzODAwMEM2NjkxNSAvKiBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExMzQwOUQ4MjAzRTAzODAwMEM2Njkx
NSAvKiBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxMTNEMEI0RjFGOUZERDJCMDBGNjExQkIgLyogTGF5b3V0Q29udGV4dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMYXlvdXRDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMTEzRDBCNTAxRjlGREQyQjAwRjYxMUJCIC8qIExheW91dENvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGF5b3V0Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMTNE
MEI0RjFGOUZERDJCMDBGNjExQkIgLyogRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTEzRDBCNTAxRjlGREQyQjAwRjYxMUJCIC8qIEZyYW1lVmlld0xheW91
dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTVDRkE2ODIwOEFGN0QwMDAxRTY5OTEgLyogRm9y
bWF0dGluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybWF0dGluZ0NvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE1Q0ZBNjkyMDhBRjdEMDAwMUU2OTkxIC8qIEZv
cm1hdHRpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdHRpbmdDb250ZXh0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE1Q0ZBNkMyMDhBRkFCNjAwMUU2
OTkxIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODg2Miw4ICs4
ODYyLDggQEAKIAkJNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1
MkQ2NDAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGN0NB
M0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRDdHguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0
Q3R4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGN0NBM0M1MjA4QzI5NTYwMDJG
MjlBQiAvKiBMYXlvdXRDdHguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0Q3R4LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8q
IExheW91dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Q29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2RjdDQTNDNTIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRDb250ZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3Q0EzQzgyMDhDMkIyRTAwMkYyOUFCIC8qIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUZvcm1hdHRpbmdDb250
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NBM0M5MjA4QzJCMkUwMDJG
MjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGOTk1QTA5MUE3MDcwRTYwMEE3MzVGNCAvKiBXZWJHTFF1ZXJ5LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBXZWJHTFF1ZXJ5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1NjQ4LDggKzE1NjQ4LDggQEAKIAkJCQkxMTVDRkE2ODIwOEFGN0QwMDAxRTY5OTEgLyogRm9y
bWF0dGluZ0NvbnRleHQuaCAqLywKIAkJCQkxMTVDRkE3NTIwOEFGRTMwMDAxRTY5OTEgLyogRm9y
bWF0dGluZ1N0YXRlLmNwcCAqLywKIAkJCQkxMTVDRkE3NDIwOEFGRTMwMDAxRTY5OTEgLyogRm9y
bWF0dGluZ1N0YXRlLmggKi8sCi0JCQkJNkY3Q0EzQzUyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91
dEN0eC5jcHAgKi8sCi0JCQkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dEN0eC5o
ICovLAorCQkJCTZGN0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRDb250ZXh0LmNwcCAq
LywKKwkJCQk2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0Q29udGV4dC5oICovLAog
CQkJKTsKIAkJCXBhdGggPSBsYXlvdXQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MTkyMDMsNiArMTkyMDMsOCBAQAogCQkJCTY1QTIxNDgzMDk3QTNGNTMwMEI5MDUwQSAvKiBGcmFt
ZVRyZWUuaCAqLywKIAkJCQk2NUNCRkVGNzA5NzRGNjA3MDAxREFDMjUgLyogRnJhbWVWaWV3LmNw
cCAqLywKIAkJCQk2NUNCRkVGODA5NzRGNjA3MDAxREFDMjUgLyogRnJhbWVWaWV3LmggKi8sCisJ
CQkJMTEzRDBCNEYxRjlGREQyQjAwRjYxMUJCIC8qIEZyYW1lVmlld0xheW91dENvbnRleHQuY3Bw
ICovLAorCQkJCTExM0QwQjUwMUY5RkREMkIwMEY2MTFCQiAvKiBGcmFtZVZpZXdMYXlvdXRDb250
ZXh0LmggKi8sCiAJCQkJNTc0RDQyNzkxRDU5NEZGNjAwMkNGNTBFIC8qIEdsb2JhbENyeXB0by5p
ZGwgKi8sCiAJCQkJNDZCOTUxOTEyMDdENjMyRDAwQTdEMkREIC8qIEdsb2JhbEZyYW1lSWRlbnRp
Zmllci5oICovLAogCQkJCTdDOTg5MjQ1MUY1QTA3NjUwMDkxREM3MCAvKiBHbG9iYWxQZXJmb3Jt
YW5jZS5pZGwgKi8sCkBAIC0xOTIxOSw4ICsxOTIyMSw2IEBACiAJCQkJMEY0NzEwRDkxREI2RkUy
MjAwMkRDRUMzIC8qIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkuaCAqLywKIAkJCQkwRjQ3MTBE
QTFEQjZGRTIyMDAyRENFQzMgLyogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeS5pZGwgKi8sCiAJ
CQkJRTQ5MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmgg
Ki8sCi0JCQkJMTEzRDBCNEYxRjlGREQyQjAwRjYxMUJCIC8qIExheW91dENvbnRleHQuY3BwICov
LAotCQkJCTExM0QwQjUwMUY5RkREMkIwMEY2MTFCQiAvKiBMYXlvdXRDb250ZXh0LmggKi8sCiAJ
CQkJOTMxRDcyRjUxNUZFNjk1MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZXMuaCAqLywKIAkJ
CQlCQ0UxQzQxQTBEOTgyOTgwMDAzQjAyRjIgLyogTG9jYXRpb24uY3BwICovLAogCQkJCUJDRTFD
NDE5MEQ5ODI5ODAwMDNCMDJGMiAvKiBMb2NhdGlvbi5oICovLApAQCAtMjkxMDcsOCArMjkxMDcs
OCBAQAogCQkJCTExOTlGQTRCMjA4RTM3QjYwMDIzNThDQyAvKiBMYXlvdXRCbG9ja0NvbnRhaW5l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1Q0ZBOTcyMDhCOTUyQjAwMUU2OTkxIC8qIExheW91
dEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExh
eW91dENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTEzRDBCNTIxRjlGREQyQjAwRjYx
MUJCIC8qIExheW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCTZGN0NBM0M2MjA4QzI5
NTcwMDJGMjlBQiAvKiBMYXlvdXRDdHguaCBpbiBIZWFkZXJzICovLAorCQkJCTExM0QwQjUyMUY5
RkREMkIwMEY2MTFCQiAvKiBGcmFtZVZpZXdMYXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk2RjdDQTNDNjIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0Q29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTE5OUZBNTMyMDhFMzhEMzAwMjM1OENDIC8qIExheW91dElubGluZUJveC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTE5OUZBNEYyMDhFMzg5OTAwMjM1OENDIC8qIExheW91dElu
bGluZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1MzAwQzRD
MDdFIC8qIExheW91dE1pbGVzdG9uZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzEzMDksNyArMzEz
MDksNyBAQAogCQkJCTZGN0NBM0NCMjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzhFQzkzRTFGOTlCRjVBMDA0RDIyQTgg
LyogSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzVDNDc3MDA5QUM0RDczMDBBNkFBQjQgLyogS2V5RXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywK
LQkJCQk2RjdDQTNDNzIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0Q3R4LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTZGN0NBM0M3MjA4QzI5NTcwMDJGMjlBQiAvKiBMYXlvdXRDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNEQTk4RTBCMTYwM0NENjAwMEZFQTNCMSAvKiBMZWdhY3lDRE0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFOEI1RUMxQTY5Nzc3MzAwQjRCNjZBIC8qIExlZ2Fj
eUNETVByaXZhdGVDbGVhcktleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRENBOThFQjE4QjJD
OEVCMDBDMTJGRjkgLyogTGVnYWN5Q0RNUHJpdmF0ZU1lZGlhUGxheWVyLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dENvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmNwcAkocmV2aXNp
b24gMjMwOTYyKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q3R4LmNwcDoyMzA5
NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJMYXlvdXRDdHguaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlv
dXRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0
Q29udGV4dC5jcHAJKHJldmlzaW9uIDIzMDk2MikKKysrIFNvdXJjZS9XZWJDb3JlL2xheW91dC9M
YXlvdXRDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNCArMjQsNCBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRDdHguaCIKKyNpbmNsdWRlICJM
YXlvdXRDb250ZXh0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmgJ
KHJldmlzaW9uIDIzMDk2MikJKGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dEN0eC5o
OjIzMDk2MikKKysrIFNvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIERpc3BsYXkgewor
Y2xhc3MgQm94OworfQorCituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgQm94OworY2xhc3Mg
Q29udGFpbmVyOworY2xhc3MgRm9ybWF0dGluZ0NvbnRleHQ7CitjbGFzcyBGb3JtYXR0aW5nU3Rh
dGU7CitjbGFzcyBTdHlsZURpZmY7CisKKy8vIExheW91dENvbnRleHQgaXMgdGhlIGVudHJ5IHBv
aW50IGZvciBsYXlvdXQuIEl0IHRha2VzIGEgKGZvcm1hdHRpbmcgcm9vdCljb250YWluZXIgd2hp
Y2ggYWN0cyBhcyB0aGUgcm9vdCBvZiB0aGUgbGF5b3V0IGNvbnRleHQuCisvLyBMYXlvdXRDb250
ZXh0OjpsYXlvdXQoKSBnZW5lcmF0ZXMgdGhlIGRpc3BsYXkgdHJlZSBmb3IgdGhlIHJvb3QgY29u
dGFpbmVyJ3Mgc3VidHJlZSAoaXQgZG9lcyBub3QgcnVuIGxheW91dCBvbiB0aGUgcm9vdCB0aG91
Z2gpLgorLy8gTm90ZSwgd2hpbGUgdGhlIHJvb3QgY29udGFpbmVyIGlzIHN1cHBwb3NlZCB0byBi
ZSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBpbml0aWFsIGxheW91dCwgaXQgZG9lcyBub3QgbmVj
ZXNzYXJpbHkgbmVlZCB0byBiZSB0aGUgZW50cnkgcG9pbnQgb2YgYW55CisvLyBzdWJzZXF1ZW50
IGxheW91dHMgKHN1YnRyZWUgbGF5b3V0KS4KKy8vIExheW91dENvbnRleHQgYWxzbyBob2xkcyB0
aGUgZm9ybWF0dGluZyBzdGF0ZXMuIFRoZXkgY2FjaGUgZm9ybWF0dGluZyBjb250ZXh0IHNwZWNp
ZmljIGRhdGEgdG8gZW5hYmxlIHBlcmZvcm1hbnQgaW5jcmVtZW50YWwgbGF5b3V0cy4KK2NsYXNz
IExheW91dENvbnRleHQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTGF5b3V0Q29udGV4
dCk7CitwdWJsaWM6CisgICAgTGF5b3V0Q29udGV4dChjb25zdCBDb250YWluZXImIHJvb3RDb250
YWluZXIpOworCisgICAgdm9pZCBsYXlvdXQoKTsKKworICAgIENvbnRhaW5lciYgcm9vdENvbnRh
aW5lcigpIGNvbnN0OworICAgIEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dChj
b25zdCBDb250YWluZXImIGZvcm1hdHRpbmdSb290KSBjb25zdDsKKyAgICBGb3JtYXR0aW5nU3Rh
dGUmIGVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGNvbnN0IENvbnRhaW5lciYgZm9ybWF0dGlu
Z1Jvb3QpOworICAgIEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKGNvbnN0IEJveCYp
OworCisgICAgdm9pZCBhZGREaXNwbGF5Qm94KGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpOwor
ICAgIERpc3BsYXk6OkJveCogZGlzcGxheUJveChjb25zdCBCb3gmKSBjb25zdDsKKworICAgIHZv
aWQgbWFya05lZWRzTGF5b3V0KGNvbnN0IEJveCYsIFN0eWxlRGlmZik7CisgICAgYm9vbCBuZWVk
c0xheW91dChjb25zdCBCb3gmKSBjb25zdDsKK307CisKK30KK30KKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dEN0eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbGF5b3V0L0xheW91dEN0eC5jcHAJKHJldmlzaW9uIDIzMDk2MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9MYXlvdXRDdHguY3BwCShub25leGlzdGVudCkKQEAgLTEsMjcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRDdHgu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDdHguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0Q3R4LmgJKHJldmlzaW9uIDIzMDk2MikKKysr
IFNvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDdHguaAkobm9uZXhpc3RlbnQpCkBAIC0xLDcy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBEaXNwbGF5IHsKLWNsYXNzIEJveDsKLX0KLQot
bmFtZXNwYWNlIExheW91dCB7Ci0KLWNsYXNzIEJveDsKLWNsYXNzIENvbnRhaW5lcjsKLWNsYXNz
IEZvcm1hdHRpbmdDb250ZXh0OwotY2xhc3MgRm9ybWF0dGluZ1N0YXRlOwotY2xhc3MgU3R5bGVE
aWZmOwotCi0vLyBMYXlvdXRDb250ZXh0IGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgbGF5b3V0LiBJ
dCB0YWtlcyBhIChmb3JtYXR0aW5nIHJvb3QpY29udGFpbmVyIHdoaWNoIGFjdHMgYXMgdGhlIHJv
b3Qgb2YgdGhlIGxheW91dCBjb250ZXh0LgotLy8gTGF5b3V0Q29udGV4dDo6bGF5b3V0KCkgZ2Vu
ZXJhdGVzIHRoZSBkaXNwbGF5IHRyZWUgZm9yIHRoZSByb290IGNvbnRhaW5lcidzIHN1YnRyZWUg
KGl0IGRvZXMgbm90IHJ1biBsYXlvdXQgb24gdGhlIHJvb3QgdGhvdWdoKS4KLS8vIE5vdGUsIHdo
aWxlIHRoZSByb290IGNvbnRhaW5lciBpcyBzdXBwcG9zZWQgdG8gYmUgdGhlIGVudHJ5IHBvaW50
IGZvciB0aGUgaW5pdGlhbCBsYXlvdXQsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG5lZWQgdG8g
YmUgdGhlIGVudHJ5IHBvaW50IG9mIGFueQotLy8gc3Vic2VxdWVudCBsYXlvdXRzIChzdWJ0cmVl
IGxheW91dCkuCi0vLyBMYXlvdXRDb250ZXh0IGFsc28gaG9sZHMgdGhlIGZvcm1hdHRpbmcgc3Rh
dGVzLiBUaGV5IGNhY2hlIGZvcm1hdHRpbmcgY29udGV4dCBzcGVjaWZpYyBkYXRhIHRvIGVuYWJs
ZSBwZXJmb3JtYW50IGluY3JlbWVudGFsIGxheW91dHMuCi1jbGFzcyBMYXlvdXRDb250ZXh0IHsK
LSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKExheW91dENvbnRleHQpOwotcHVibGljOgotICAg
IExheW91dENvbnRleHQoY29uc3QgQ29udGFpbmVyJiByb290Q29udGFpbmVyKTsKLQotICAgIHZv
aWQgbGF5b3V0KCk7Ci0KLSAgICBDb250YWluZXImIHJvb3RDb250YWluZXIoKSBjb25zdDsKLSAg
ICBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyJiBm
b3JtYXR0aW5nUm9vdCkgY29uc3Q7Ci0gICAgRm9ybWF0dGluZ1N0YXRlJiBlc3RhYmxpc2hlZEZv
cm1hdHRpbmdTdGF0ZShjb25zdCBDb250YWluZXImIGZvcm1hdHRpbmdSb290KTsKLSAgICBGb3Jt
YXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZShjb25zdCBCb3gmKTsKLQotICAgIHZvaWQgYWRk
RGlzcGxheUJveChjb25zdCBCb3gmLCBEaXNwbGF5OjpCb3gmKTsKLSAgICBEaXNwbGF5OjpCb3gq
IGRpc3BsYXlCb3goY29uc3QgQm94JikgY29uc3Q7Ci0KLSAgICB2b2lkIG1hcmtOZWVkc0xheW91
dChjb25zdCBCb3gmLCBTdHlsZURpZmYpOwotICAgIGJvb2wgbmVlZHNMYXlvdXQoY29uc3QgQm94
JikgY29uc3Q7Ci19OwotCi19Ci19Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAJKHJldmlzaW9uIDIzMDk2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOSw3ICsxMzA5LDcgQEAgdm9pZCBGcmFtZVZpZXc6
OmRpZExheW91dChXZWFrUHRyPFJlbmRlcgogCiBib29sIEZyYW1lVmlldzo6c2hvdWxkRGVmZXJT
Y3JvbGxVcGRhdGVBZnRlckNvbnRlbnRTaXplQ2hhbmdlKCkKIHsKLSAgICByZXR1cm4gKGxheW91
dENvbnRleHQoKS5sYXlvdXRQaGFzZSgpIDwgTGF5b3V0Q29udGV4dDo6TGF5b3V0UGhhc2U6Oklu
UG9zdExheW91dCkgJiYgKGxheW91dENvbnRleHQoKS5sYXlvdXRQaGFzZSgpICE9IExheW91dENv
bnRleHQ6OkxheW91dFBoYXNlOjpPdXRzaWRlTGF5b3V0KTsKKyAgICByZXR1cm4gKGxheW91dENv
bnRleHQoKS5sYXlvdXRQaGFzZSgpIDwgRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6TGF5b3V0UGhh
c2U6OkluUG9zdExheW91dCkgJiYgKGxheW91dENvbnRleHQoKS5sYXlvdXRQaGFzZSgpICE9IEZy
YW1lVmlld0xheW91dENvbnRleHQ6OkxheW91dFBoYXNlOjpPdXRzaWRlTGF5b3V0KTsKIH0KIAog
UmVuZGVyQm94KiBGcmFtZVZpZXc6OmVtYmVkZGVkQ29udGVudEJveCgpIGNvbnN0CkBAIC0xNjc3
LDcgKzE2NzcsNyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlTGF5b3V0Vmlld3BvcnQoKQogICAg
IAogICAgIC8vIERvbid0IHVwZGF0ZSB0aGUgbGF5b3V0IHZpZXdwb3J0IGlmIHdlJ3JlIGluIHRo
ZSBtaWRkbGUgb2YgYWRqdXN0aW5nIHNjcm9sbGJhcnMuIFdlJ2xsIGdldCBhbm90aGVyIGNhbGwK
ICAgICAvLyBhcyBhIHBvc3QtbGF5b3V0IHRhc2suCi0gICAgaWYgKGxheW91dENvbnRleHQoKS5s
YXlvdXRQaGFzZSgpID09IExheW91dENvbnRleHQ6OkxheW91dFBoYXNlOjpJblZpZXdTaXplQWRq
dXN0KQorICAgIGlmIChsYXlvdXRDb250ZXh0KCkubGF5b3V0UGhhc2UoKSA9PSBGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpMYXlvdXRQaGFzZTo6SW5WaWV3U2l6ZUFkanVzdCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgTGF5b3V0UmVjdCBsYXlvdXRWaWV3cG9ydCA9IGxheW91dFZpZXdwb3J0UmVj
dCgpOwpAQCAtMjQ3MCw3ICsyNDcwLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnJlc3VtZVZpc2libGVJ
bWFnZUFuaW1hdAogdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGxpbmcoKQogewogICAgIC8vIElmIHdlJ3JlIHNjcm9sbGluZyBhcyBhIHJlc3VsdCBvZiB1cGRh
dGluZyB0aGUgdmlldyBzaXplIGFmdGVyIGxheW91dCwgd2UnbGwgdXBkYXRlIHdpZGdldHMgYW5k
IGxheWVyIHBvc2l0aW9ucyBzb29uIGFueXdheS4KLSAgICBpZiAobGF5b3V0Q29udGV4dCgpLmxh
eW91dFBoYXNlKCkgPT0gTGF5b3V0Q29udGV4dDo6TGF5b3V0UGhhc2U6OkluVmlld1NpemVBZGp1
c3QpCisgICAgaWYgKGxheW91dENvbnRleHQoKS5sYXlvdXRQaGFzZSgpID09IEZyYW1lVmlld0xh
eW91dENvbnRleHQ6OkxheW91dFBoYXNlOjpJblZpZXdTaXplQWRqdXN0KQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIWxheW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpICYmIGhhc1Zp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsKQEAgLTI1MTAsNyArMjUxMCw3IEBAIGJvb2wg
RnJhbWVWaWV3OjpzaG91bGRVcGRhdGVDb21wb3NpdGluZ0wKIAogdm9pZCBGcmFtZVZpZXc6OnVw
ZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGxpbmcoKQogewotICAgIEFTU0VSVChsYXlv
dXRDb250ZXh0KCkubGF5b3V0UGhhc2UoKSA+PSBMYXlvdXRDb250ZXh0OjpMYXlvdXRQaGFzZTo6
SW5Qb3N0TGF5b3V0IHx8IGxheW91dENvbnRleHQoKS5sYXlvdXRQaGFzZSgpID09IExheW91dENv
bnRleHQ6OkxheW91dFBoYXNlOjpPdXRzaWRlTGF5b3V0KTsKKyAgICBBU1NFUlQobGF5b3V0Q29u
dGV4dCgpLmxheW91dFBoYXNlKCkgPj0gRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6TGF5b3V0UGhh
c2U6OkluUG9zdExheW91dCB8fCBsYXlvdXRDb250ZXh0KCkubGF5b3V0UGhhc2UoKSA9PSBGcmFt
ZVZpZXdMYXlvdXRDb250ZXh0OjpMYXlvdXRQaGFzZTo6T3V0c2lkZUxheW91dCk7CiAKICAgICBp
ZiAoIXNob3VsZFVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGxpbmcoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYxOCw3ICsyNjE4LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbgogICAgICAgICAvLyBGSVhNRTogTWVyZ2UgdGhpcyBsb2dpYyB3aXRo
IG1fc2V0TmVlZHNMYXlvdXRXYXNEZWZlcnJlZCBhbmQgZmluZCBhIG1vcmUgYXBwcm9wcmlhdGUK
ICAgICAgICAgLy8gd2F5IG9mIGhhbmRsaW5nIHBvdGVudGlhbCByZWN1cnNpdmUgbGF5b3V0cyB3
aGVuIHRoZSB2aWV3cG9ydCBpcyByZXNpemVkIHRvIGFjY29tb2RhdGUKICAgICAgICAgLy8gdGhl
IGNvbnRlbnQgYnV0IHRoZSBjb250ZW50IGFsd2F5cyBvdmVyZmxvd3MgdGhlIHZpZXdwb3J0LiBT
ZWUgd2Via2l0Lm9yZy9iLzE2NTc4MS4KLSAgICAgICAgaWYgKCEobGF5b3V0Q29udGV4dCgpLmxh
eW91dFBoYXNlKCkgPT0gTGF5b3V0Q29udGV4dDo6TGF5b3V0UGhhc2U6OkluVmlld1NpemVBZGp1
c3QgJiYgdXNlRml4ZWRMYXlvdXQoKSkpCisgICAgICAgIGlmICghKGxheW91dENvbnRleHQoKS5s
YXlvdXRQaGFzZSgpID09IEZyYW1lVmlld0xheW91dENvbnRleHQ6OkxheW91dFBoYXNlOjpJblZp
ZXdTaXplQWRqdXN0ICYmIHVzZUZpeGVkTGF5b3V0KCkpKQogICAgICAgICAgICAgZG9jdW1lbnQt
PnVwZGF0ZVZpZXdwb3J0VW5pdHNPblJlc2l6ZSgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5oCShyZXZpc2lvbiAyMzA5NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQWRq
dXN0Vmlld1NpemVPck5vdC5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29udGFp
bmVyTm9kZS5oIgotI2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXdMYXlvdXRDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgogI2luY2x1
ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQYWdpbmF0aW9uLmgiCkBAIC03Myw3ICs3Myw3
IEBAIGNsYXNzIEZyYW1lVmlldyBmaW5hbCA6IHB1YmxpYyBTY3JvbGxWaWUKIHB1YmxpYzoKICAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyVmlldzsKICAgICBmcmllbmQgY2xhc3MgSW50ZXJuYWxzOwot
ICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBGcmFtZVZp
ZXdMYXlvdXRDb250ZXh0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGcmFtZVZp
ZXc+IGNyZWF0ZShGcmFtZSYpOwogICAgIHN0YXRpYyBSZWY8RnJhbWVWaWV3PiBjcmVhdGUoRnJh
bWUmLCBjb25zdCBJbnRTaXplJiBpbml0aWFsU2l6ZSk7CkBAIC0xMDksOCArMTA5LDggQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbDsKICAg
ICB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZSgpIGZpbmFsOwogCi0gICAgY29uc3QgTGF5b3V0Q29u
dGV4dCYgbGF5b3V0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0Q29udGV4dDsgfQot
ICAgIExheW91dENvbnRleHQmIGxheW91dENvbnRleHQoKSB7IHJldHVybiBtX2xheW91dENvbnRl
eHQ7IH0KKyAgICBjb25zdCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9sYXlvdXRDb250ZXh0OyB9CisgICAgRnJhbWVWaWV3TGF5b3V0Q29u
dGV4dCYgbGF5b3V0Q29udGV4dCgpIHsgcmV0dXJuIG1fbGF5b3V0Q29udGV4dDsgfQogCiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBkaWRGaXJzdExheW91dCgpIGNvbnN0OwogICAgIHZvaWQgcXVl
dWVQb3N0TGF5b3V0Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmKTsKQEAgLTkxMiw3
ICs5MTIsNyBAQCBwcml2YXRlOgogICAgIEludFJlY3QqIG1fY2FjaGVkV2luZG93Q2xpcFJlY3Qg
eyBudWxscHRyIH07CiAgICAgVmVjdG9yPFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fcG9zdExh
eW91dENhbGxiYWNrUXVldWU7CiAKLSAgICBMYXlvdXRDb250ZXh0IG1fbGF5b3V0Q29udGV4dDsK
KyAgICBGcmFtZVZpZXdMYXlvdXRDb250ZXh0IG1fbGF5b3V0Q29udGV4dDsKIH07CiAKIGlubGlu
ZSB2b2lkIEZyYW1lVmlldzo6aW5jcmVtZW50VmlzdWFsbHlOb25FbXB0eUNoYXJhY3RlckNvdW50
KHVuc2lnbmVkIGNvdW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlv
dXRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
d0xheW91dENvbnRleHQuY3BwCShyZXZpc2lvbiAyMzA5NjIpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTGF5b3V0Q29udGV4dC5jcHA6MjMwOTYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCisKKyNpbmNsdWRlICJDU1NB
bmltYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRGVidWdQYWdlT3ZlcmxheXMuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkxheW91dERpc2FsbG93ZWRTY29w
ZS5oIgorI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVk
ZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBib29sIGlzT2JqZWN0QW5jZXN0b3JDb250YWluZXJPZihSZW5kZXJFbGVtZW50
JiBhbmNlc3RvciwgUmVuZGVyRWxlbWVudCYgZGVzY2VuZGFudCkKK3sKKyAgICBmb3IgKGF1dG8q
IHJlbmRlcmVyID0gJmRlc2NlbmRhbnQ7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5j
b250YWluZXIoKSkgeworICAgICAgICBpZiAocmVuZGVyZXIgPT0gJmFuY2VzdG9yKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmbmRl
ZiBOREVCVUcKK2NsYXNzIFJlbmRlclRyZWVOZWVkc0xheW91dENoZWNrZXIgeworcHVibGljIDoK
KyAgICBSZW5kZXJUcmVlTmVlZHNMYXlvdXRDaGVja2VyKGNvbnN0IFJlbmRlckVsZW1lbnQmIGxh
eW91dFJvb3QpCisgICAgICAgIDogbV9sYXlvdXRSb290KGxheW91dFJvb3QpCisgICAgeworICAg
IH0KKworICAgIH5SZW5kZXJUcmVlTmVlZHNMYXlvdXRDaGVja2VyKCkKKyAgICB7CisgICAgICAg
IGF1dG8gcmVwb3J0TmVlZHNMYXlvdXRFcnJvciA9IFtdIChjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlcmVyKSB7CisgICAgICAgICAgICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sICJwb3N0LWxheW91dDogZGlydHkgcmVuZGVyZXIocykiKTsK
KyAgICAgICAgICAgIHJlbmRlcmVyLnNob3dSZW5kZXJUcmVlRm9yVGhpcygpOworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG1fbGF5
b3V0Um9vdC5uZWVkc0xheW91dCgpKSB7CisgICAgICAgICAgICByZXBvcnROZWVkc0xheW91dEVy
cm9yKG1fbGF5b3V0Um9vdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKGF1dG8qIGRlc2NlbmRhbnQgPSBtX2xheW91dFJvb3QuZmlyc3RDaGlsZCgpOyBk
ZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+bmV4dEluUHJlT3JkZXIoJm1fbGF5
b3V0Um9vdCkpIHsKKyAgICAgICAgICAgIGlmICghZGVzY2VuZGFudC0+bmVlZHNMYXlvdXQoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVw
b3J0TmVlZHNMYXlvdXRFcnJvcigqZGVzY2VuZGFudCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyRWxlbWVudCYgbV9s
YXlvdXRSb290OworfTsKKyNlbmRpZgorCitjbGFzcyBMYXlvdXRTY29wZSB7CitwdWJsaWM6Cisg
ICAgTGF5b3V0U2NvcGUoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCkKKyAgICAgICAgOiBt
X3ZpZXcobGF5b3V0Q29udGV4dC52aWV3KCkpCisgICAgICAgICwgbV9uZXN0ZWRTdGF0ZShsYXlv
dXRDb250ZXh0Lm1fbGF5b3V0TmVzdGVkU3RhdGUsIGxheW91dENvbnRleHQubV9sYXlvdXROZXN0
ZWRTdGF0ZSA9PSBMYXlvdXRDb250ZXh0OjpMYXlvdXROZXN0ZWRTdGF0ZTo6Tm90SW5MYXlvdXQg
PyBMYXlvdXRDb250ZXh0OjpMYXlvdXROZXN0ZWRTdGF0ZTo6Tm90TmVzdGVkIDogTGF5b3V0Q29u
dGV4dDo6TGF5b3V0TmVzdGVkU3RhdGU6Ok5lc3RlZCkKKyAgICAgICAgLCBtX3NjaGVkdWxpbmdJ
c0VuYWJsZWQobGF5b3V0Q29udGV4dC5tX2xheW91dFNjaGVkdWxpbmdJc0VuYWJsZWQsIGZhbHNl
KQorICAgICAgICAsIG1faW5Qcm9ncmFtbWF0aWNTY3JvbGwobGF5b3V0Q29udGV4dC52aWV3KCku
aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSkKKyAgICB7CisgICAgICAgIG1fdmlldy5zZXRJblByb2dy
YW1tYXRpY1Njcm9sbCh0cnVlKTsKKyAgICB9CisgICAgICAgIAorICAgIH5MYXlvdXRTY29wZSgp
CisgICAgeworICAgICAgICBtX3ZpZXcuc2V0SW5Qcm9ncmFtbWF0aWNTY3JvbGwobV9pblByb2dy
YW1tYXRpY1Njcm9sbCk7CisgICAgfQorICAgICAgICAKK3ByaXZhdGU6CisgICAgRnJhbWVWaWV3
JiBtX3ZpZXc7CisgICAgU2V0Rm9yU2NvcGU8TGF5b3V0Q29udGV4dDo6TGF5b3V0TmVzdGVkU3Rh
dGU+IG1fbmVzdGVkU3RhdGU7CisgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gbV9zY2hlZHVsaW5nSXNF
bmFibGVkOworICAgIGJvb2wgbV9pblByb2dyYW1tYXRpY1Njcm9sbCB7IGZhbHNlIH07Cit9Owor
CitMYXlvdXRDb250ZXh0OjpMYXlvdXRDb250ZXh0KEZyYW1lVmlldyYgZnJhbWVWaWV3KQorICAg
IDogbV9mcmFtZVZpZXcoZnJhbWVWaWV3KQorICAgICwgbV9sYXlvdXRUaW1lcigqdGhpcywgJkxh
eW91dENvbnRleHQ6OmxheW91dFRpbWVyRmlyZWQpCisgICAgLCBtX2FzeW5jaHJvbm91c1Rhc2tz
VGltZXIoKnRoaXMsICZMYXlvdXRDb250ZXh0OjpydW5Bc3luY2hyb25vdXNUYXNrcykKK3sKK30K
KworTGF5b3V0Q29udGV4dDo6fkxheW91dENvbnRleHQoKQoreworfQorCit2b2lkIExheW91dENv
bnRleHQ6OmxheW91dCgpCit7CisgICAgTE9HX1dJVEhfU1RSRUFNKExheW91dCwgc3RyZWFtIDw8
ICJGcmFtZVZpZXcgIiA8PCAmdmlldygpIDw8ICIgTGF5b3V0Q29udGV4dDo6bGF5b3V0KCkgd2l0
aCBzaXplICIgPDwgdmlldygpLmxheW91dFNpemUoKSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmcmFtZSgpLmRvY3VtZW50KCktPmluUmVuZGVyVHJl
ZVVwZGF0ZSgpIHx8IFNjcmlwdERpc2FsbG93ZWRTY29wZTo6TGF5b3V0QXNzZXJ0aW9uRGlzYWJs
ZVNjb3BlOjpzaG91bGREaXNhYmxlKCkpOworICAgIEFTU0VSVChMYXlvdXREaXNhbGxvd2VkU2Nv
cGU6OmlzTGF5b3V0QWxsb3dlZCgpKTsKKyAgICBBU1NFUlQoIXZpZXcoKS5pc1BhaW50aW5nKCkp
OworICAgIEFTU0VSVChmcmFtZSgpLnZpZXcoKSA9PSAmdmlldygpKTsKKyAgICBBU1NFUlQoZnJh
bWUoKS5kb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoZnJhbWUoKS5kb2N1bWVudCgpLT5wYWdlQ2Fj
aGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7CisgICAgaWYgKCFjYW5QZXJm
b3JtTGF5b3V0KCkpIHsKKyAgICAgICAgTE9HKExheW91dCwgIiAgaXMgbm90IGFsbG93ZWQsIGJh
aWxpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZjxGcmFtZVZpZXc+IHBy
b3RlY3RWaWV3KHZpZXcoKSk7CisgICAgTGF5b3V0U2NvcGUgbGF5b3V0U2NvcGUoKnRoaXMpOwor
ICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKExheW91dFN0YXJ0LCBMYXlvdXRFbmQpOworICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBpbnNwZWN0b3JMYXlvdXRTY29wZShJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQodmlldygpLmZyYW1lKCkpKTsKKyAgICBB
bmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmdmlldygpLmZyYW1lKCku
YW5pbWF0aW9uKCkpOworICAgIFdlYWtQdHI8UmVuZGVyRWxlbWVudD4gbGF5b3V0Um9vdDsKKyAg
ICAKKyAgICBtX2xheW91dFRpbWVyLnN0b3AoKTsKKyAgICBtX2RlbGF5ZWRMYXlvdXQgPSBmYWxz
ZTsKKyAgICBtX3NldE5lZWRzTGF5b3V0V2FzRGVmZXJyZWQgPSBmYWxzZTsKKworI2lmICFMT0df
RElTQUJMRUQKKyAgICBpZiAobV9maXJzdExheW91dCAmJiAhZnJhbWUoKS5vd25lckVsZW1lbnQo
KSkKKyAgICAgICAgTE9HKExheW91dCwgIkZyYW1lVmlldyAlcCBlbGFwc2VkIHRpbWUgYmVmb3Jl
IGZpcnN0IGxheW91dDogJS4zZnMiLCB0aGlzLCBkb2N1bWVudCgpLT50aW1lU2luY2VEb2N1bWVu
dENyZWF0aW9uKCkudmFsdWUoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYg
KHZpZXcoKS51cGRhdGVGaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpICYmIHN1YnRyZWVMYXlvdXRS
b290KCkpCisgICAgICAgIGNvbnZlcnRTdWJ0cmVlTGF5b3V0VG9GdWxsTGF5b3V0KCk7CisjZW5k
aWYKKyAgICBpZiAoaGFuZGxlTGF5b3V0V2l0aEZyYW1lRmxhdHRlbmluZ0lmTmVlZGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHsKKyAgICAgICAgU2V0Rm9yU2NvcGU8TGF5b3V0UGhhc2U+
IGxheW91dFBoYXNlKG1fbGF5b3V0UGhhc2UsIExheW91dFBoYXNlOjpJblByZUxheW91dCk7CisK
KyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5ldyB0b3AtbGV2ZWwgbGF5b3V0IGFuZCB0aGVyZSBh
cmUgYW55IHJlbWFpbmluZyB0YXNrcyBmcm9tIHRoZSBwcmV2aW91cyBsYXlvdXQsIGZpbmlzaCB0
aGVtIG5vdy4KKyAgICAgICAgaWYgKCFpc0xheW91dE5lc3RlZCgpICYmIG1fYXN5bmNocm9ub3Vz
VGFza3NUaW1lci5pc0FjdGl2ZSgpICYmICF2aWV3KCkuaXNJbkNoaWxkRnJhbWVXaXRoRnJhbWVG
bGF0dGVuaW5nKCkpCisgICAgICAgICAgICBydW5Bc3luY2hyb25vdXNUYXNrcygpOworCisgICAg
ICAgIHVwZGF0ZVN0eWxlRm9yTGF5b3V0KCk7CisgICAgICAgIGlmICh2aWV3KCkuaGFzT25lUmVm
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmlldygpLmF1dG9TaXplSWZFbmFi
bGVkKCk7CisgICAgICAgIGlmICghcmVuZGVyVmlldygpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGxheW91dFJvb3QgPSBtYWtlV2Vha1B0cihzdWJ0cmVlTGF5b3V0Um9vdCgpID8g
c3VidHJlZUxheW91dFJvb3QoKSA6IHJlbmRlclZpZXcoKSk7CisgICAgICAgIG1fbmVlZHNGdWxs
UmVwYWludCA9IGlzPFJlbmRlclZpZXc+KGxheW91dFJvb3QuZ2V0KCkpICYmIChtX2ZpcnN0TGF5
b3V0IHx8IHJlbmRlclZpZXcoKS0+cHJpbnRpbmcoKSk7CisgICAgICAgIHZpZXcoKS53aWxsRG9M
YXlvdXQobGF5b3V0Um9vdCk7CisgICAgICAgIG1fZmlyc3RMYXlvdXQgPSBmYWxzZTsKKyAgICB9
CisgICAgeworICAgICAgICBTZXRGb3JTY29wZTxMYXlvdXRQaGFzZT4gbGF5b3V0UGhhc2UobV9s
YXlvdXRQaGFzZSwgTGF5b3V0UGhhc2U6OkluUmVuZGVyVHJlZUxheW91dCk7CisgICAgICAgIFNj
cmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsK
KyAgICAgICAgU3VidHJlZUxheW91dFN0YXRlTWFpbnRhaW5lciBzdWJ0cmVlTGF5b3V0U3RhdGVN
YWludGFpbmVyKHN1YnRyZWVMYXlvdXRSb290KCkpOworICAgICAgICBSZW5kZXJWaWV3OjpSZXBh
aW50UmVnaW9uQWNjdW11bGF0b3IgcmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yKHJlbmRlclZpZXco
KSk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBSZW5kZXJUcmVlTmVlZHNMYXlvdXRDaGVja2Vy
IGNoZWNrZXIoKmxheW91dFJvb3QpOworI2VuZGlmCisgICAgICAgIGxheW91dFJvb3QtPmxheW91
dCgpOworICAgICAgICArK21fbGF5b3V0Q291bnQ7CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklO
RykKKyAgICAgICAgYXBwbHlUZXh0U2l6aW5nSWZOZWVkZWQoKmxheW91dFJvb3QuZ2V0KCkpOwor
I2VuZGlmCisgICAgICAgIGNsZWFyU3VidHJlZUxheW91dFJvb3QoKTsKKyAgICB9CisgICAgewor
ICAgICAgICBTZXRGb3JTY29wZTxMYXlvdXRQaGFzZT4gbGF5b3V0UGhhc2UobV9sYXlvdXRQaGFz
ZSwgTGF5b3V0UGhhc2U6OkluVmlld1NpemVBZGp1c3QpOworICAgICAgICBpZiAoaXM8UmVuZGVy
Vmlldz4obGF5b3V0Um9vdC5nZXQoKSkgJiYgIXJlbmRlclZpZXcoKS0+cHJpbnRpbmcoKSkgewor
ICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBwcm90ZWN0IG1fbmVlZHNGdWxsUmVwYWludCdzIHZh
bHVlIHdoZW4gbGF5b3V0KCkgaXMgZ2V0dGluZyByZS1lbnRlcmVkIHRocm91Z2ggYWRqdXN0Vmll
d1NpemUoKS4KKyAgICAgICAgICAgIFNldEZvclNjb3BlPGJvb2w+IG5lZWRzRnVsbFJlcGFpbnQo
bV9uZWVkc0Z1bGxSZXBhaW50KTsKKyAgICAgICAgICAgIHZpZXcoKS5hZGp1c3RWaWV3U2l6ZSgp
OworICAgICAgICAgICAgLy8gRklYTUU6IEZpcmluZyBtZWRpYSBxdWVyeSBjYWxsYmFja3Mgc3lu
Y2hyb25vdXNseSBvbiBuZXN0ZWQgZnJhbWVzIGNvdWxkIHByb2R1Y2VkIGEgZGV0YWNoZWQgRnJh
bWVWaWV3IGhlcmUgYnkKKyAgICAgICAgICAgIC8vIG5hdmlnYXRpbmcgYXdheSBmcm9tIHRoZSBj
dXJyZW50IGRvY3VtZW50IChzZWUgd2Via2l0Lm9yZy9iLzE3MzMyOSkuCisgICAgICAgICAgICBp
ZiAodmlldygpLmhhc09uZVJlZigpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKyAgICB7CisgICAgICAgIFNldEZvclNjb3BlPExheW91dFBoYXNlPiBsYXlvdXRQ
aGFzZShtX2xheW91dFBoYXNlLCBMYXlvdXRQaGFzZTo6SW5Qb3N0TGF5b3V0KTsKKyAgICAgICAg
aWYgKG1fbmVlZHNGdWxsUmVwYWludCkKKyAgICAgICAgICAgIHJlbmRlclZpZXcoKS0+cmVwYWlu
dFJvb3RDb250ZW50cygpOworICAgICAgICBBU1NFUlQoIWxheW91dFJvb3QtPm5lZWRzTGF5b3V0
KCkpOworICAgICAgICB2aWV3KCkuZGlkTGF5b3V0KGxheW91dFJvb3QpOworICAgICAgICBydW5P
clNjaGVkdWxlQXN5bmNocm9ub3VzVGFza3MoKTsKKyAgICB9CisgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRMYXlvdXQoaW5zcGVjdG9yTGF5b3V0U2NvcGUsICpsYXlvdXRSb290KTsK
KyAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHZpZXcoKS5mcmFtZSgpKTsKK30KKwor
dm9pZCBMYXlvdXRDb250ZXh0OjpydW5PclNjaGVkdWxlQXN5bmNocm9ub3VzVGFza3MoKQorewor
ICAgIGlmIChtX2FzeW5jaHJvbm91c1Rhc2tzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKHZpZXcoKS5pc0luQ2hpbGRGcmFtZVdpdGhGcmFtZUZsYXR0ZW5pbmco
KSkgeworICAgICAgICAvLyBXaGlsZSBmbGF0dGVuaW5nIGZyYW1lcywgd2UgZGVmZXIgcG9zdCBs
YXlvdXQgdGFza3MgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiBhIGN5Y2xlLAorICAgICAgICAv
LyBleGNlcHQgdXBkYXRlV2lkZ2V0UG9zaXRpb25zKCkgd2hpY2ggaXMgcmVxdWlyZWQgdG8ga2lj
ayBvZmYgc3ViZnJhbWUgbGF5b3V0IGluIGNlcnRhaW4gY2FzZXMuCisgICAgICAgIGlmICghbV9p
bkFzeW5jaHJvbm91c1Rhc2tzKQorICAgICAgICAgICAgdmlldygpLnVwZGF0ZVdpZGdldFBvc2l0
aW9ucygpOworICAgICAgICBtX2FzeW5jaHJvbm91c1Rhc2tzVGltZXIuc3RhcnRPbmVTaG90KDBf
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBp
biBwZXJmb3JtUG9zdExheW91dFRhc2tzKCksIGRlZmVyIHBvc3QgbGF5b3V0IHRhc2tzIHVudGls
IGFmdGVyIHdlIHJldHVybgorICAgIC8vIHRvIGF2b2lkIHJlLWVudHJhbmN5LgorICAgIGlmICht
X2luQXN5bmNocm9ub3VzVGFza3MpIHsKKyAgICAgICAgbV9hc3luY2hyb25vdXNUYXNrc1RpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcnVuQXN5
bmNocm9ub3VzVGFza3MoKTsKKyAgICBpZiAobmVlZHNMYXlvdXQoKSkgeworICAgICAgICAvLyBJ
ZiBydW5Bc3luY2hyb25vdXNUYXNrcygpIG1hZGUgdXMgbGF5b3V0IGFnYWluLCBsZXQncyBkZWZl
ciB0aGUgdGFza3MgdW50aWwgYWZ0ZXIgd2UgcmV0dXJuLgorICAgICAgICBtX2FzeW5jaHJvbm91
c1Rhc2tzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CisgICAgICAgIGxheW91dCgpOworICAgIH0K
K30KKwordm9pZCBMYXlvdXRDb250ZXh0OjpydW5Bc3luY2hyb25vdXNUYXNrcygpCit7CisgICAg
bV9hc3luY2hyb25vdXNUYXNrc1RpbWVyLnN0b3AoKTsKKyAgICBpZiAobV9pbkFzeW5jaHJvbm91
c1Rhc2tzKQorICAgICAgICByZXR1cm47CisgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW5Bc3luY2hy
b25vdXNUYXNrcyhtX2luQXN5bmNocm9ub3VzVGFza3MsIHRydWUpOworICAgIHZpZXcoKS5wZXJm
b3JtUG9zdExheW91dFRhc2tzKCk7Cit9CisKK3ZvaWQgTGF5b3V0Q29udGV4dDo6Zmx1c2hBc3lu
Y2hyb25vdXNUYXNrcygpCit7CisgICAgaWYgKCFtX2FzeW5jaHJvbm91c1Rhc2tzVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHJ1bkFzeW5jaHJvbm91c1Rhc2tzKCk7Cit9
CisKK3ZvaWQgTGF5b3V0Q29udGV4dDo6cmVzZXQoKQoreworICAgIG1fbGF5b3V0UGhhc2UgPSBM
YXlvdXRQaGFzZTo6T3V0c2lkZUxheW91dDsKKyAgICBjbGVhclN1YnRyZWVMYXlvdXRSb290KCk7
CisgICAgbV9sYXlvdXRDb3VudCA9IDA7CisgICAgbV9sYXlvdXRTY2hlZHVsaW5nSXNFbmFibGVk
ID0gdHJ1ZTsKKyAgICBtX2RlbGF5ZWRMYXlvdXQgPSBmYWxzZTsKKyAgICBtX2xheW91dFRpbWVy
LnN0b3AoKTsKKyAgICBtX2ZpcnN0TGF5b3V0ID0gdHJ1ZTsKKyAgICBtX2FzeW5jaHJvbm91c1Rh
c2tzVGltZXIuc3RvcCgpOworICAgIG1fbmVlZHNGdWxsUmVwYWludCA9IHRydWU7Cit9CisKK2Jv
b2wgTGF5b3V0Q29udGV4dDo6bmVlZHNMYXlvdXQoKSBjb25zdAoreworICAgIC8vIFRoaXMgY2Fu
IHJldHVybiB0cnVlIGluIGNhc2VzIHdoZXJlIHRoZSBkb2N1bWVudCBkb2VzIG5vdCBoYXZlIGEg
Ym9keSB5ZXQuCisgICAgLy8gRG9jdW1lbnQ6OnNob3VsZFNjaGVkdWxlTGF5b3V0IHRha2VzIGNh
cmUgb2YgcHJldmVudGluZyB1cyBmcm9tIHNjaGVkdWxpbmcKKyAgICAvLyBsYXlvdXQgaW4gdGhh
dCBjYXNlLgorICAgIGF1dG8qIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7CisgICAg
cmV0dXJuIGlzTGF5b3V0UGVuZGluZygpCisgICAgICAgIHx8IChyZW5kZXJWaWV3ICYmIHJlbmRl
clZpZXctPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIHx8IHN1YnRyZWVMYXlvdXRSb290KCkKKyAg
ICAgICAgfHwgKG1fZGlzYWJsZVNldE5lZWRzTGF5b3V0Q291bnQgJiYgbV9zZXROZWVkc0xheW91
dFdhc0RlZmVycmVkKTsKK30KKwordm9pZCBMYXlvdXRDb250ZXh0OjpzZXROZWVkc0xheW91dCgp
Cit7CisgICAgaWYgKG1fZGlzYWJsZVNldE5lZWRzTGF5b3V0Q291bnQpIHsKKyAgICAgICAgbV9z
ZXROZWVkc0xheW91dFdhc0RlZmVycmVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpKSB7CisgICAg
ICAgIEFTU0VSVCghcmVuZGVyVmlldy0+aW5IaXRUZXN0aW5nKCkpOworICAgICAgICByZW5kZXJW
aWV3LT5zZXROZWVkc0xheW91dCgpOworICAgIH0KK30KKwordm9pZCBMYXlvdXRDb250ZXh0Ojpl
bmFibGVTZXROZWVkc0xheW91dCgpCit7CisgICAgQVNTRVJUKG1fZGlzYWJsZVNldE5lZWRzTGF5
b3V0Q291bnQpOworICAgIGlmICghLS1tX2Rpc2FibGVTZXROZWVkc0xheW91dENvdW50KQorICAg
ICAgICBtX3NldE5lZWRzTGF5b3V0V2FzRGVmZXJyZWQgPSBmYWxzZTsgLy8gRklYTUU6IEZpbmQg
YSB3YXkgdG8gbWFrZSB0aGUgZGVmZXJyZWQgbGF5b3V0IGFjdHVhbGx5IGhhcHBlbi4KK30KKwor
dm9pZCBMYXlvdXRDb250ZXh0OjpkaXNhYmxlU2V0TmVlZHNMYXlvdXQoKQoreworICAgICsrbV9k
aXNhYmxlU2V0TmVlZHNMYXlvdXRDb3VudDsKK30KKwordm9pZCBMYXlvdXRDb250ZXh0OjpzY2hl
ZHVsZUxheW91dCgpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhlIHBhZ2Ug
aXMgbm90IGluIHRoZSBwYWdlIGNhY2hlLCBidXQgdGhhdCBpcyBjYXVzaW5nCisgICAgLy8gdG9v
IG1hbnkgZmFsc2UgYXNzZXJ0aW9ucy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83MjE4MTE4Pi4KKyAg
ICBBU1NFUlQoZnJhbWUoKS52aWV3KCkgPT0gJnZpZXcoKSk7CisKKyAgICBpZiAoc3VidHJlZUxh
eW91dFJvb3QoKSkKKyAgICAgICAgY29udmVydFN1YnRyZWVMYXlvdXRUb0Z1bGxMYXlvdXQoKTsK
KyAgICBpZiAoIWlzTGF5b3V0U2NoZWR1bGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghbmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZnJhbWUo
KS5kb2N1bWVudCgpLT5zaG91bGRTY2hlZHVsZUxheW91dCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlTGF5b3V0KGZyYW1lKCkp
OworICAgIC8vIFdoZW4gZnJhbWUgZmxhdHRlbmluZyBpcyBlbmFibGVkLCB0aGUgY29udGVudHMg
b2YgdGhlIGZyYW1lIGNvdWxkIGFmZmVjdCB0aGUgbGF5b3V0IG9mIHRoZSBwYXJlbnQgZnJhbWVz
LgorICAgIC8vIEFsc28gaW52YWxpZGF0ZSBwYXJlbnQgZnJhbWUgc3RhcnRpbmcgZnJvbSB0aGUg
b3duZXIgZWxlbWVudCBvZiB0aGlzIGZyYW1lLgorICAgIGlmIChmcmFtZSgpLm93bmVyUmVuZGVy
ZXIoKSAmJiB2aWV3KCkuaXNJbkNoaWxkRnJhbWVXaXRoRnJhbWVGbGF0dGVuaW5nKCkpCisgICAg
ICAgIGZyYW1lKCkub3duZXJSZW5kZXJlcigpLT5zZXROZWVkc0xheW91dChNYXJrQ29udGFpbmlu
Z0Jsb2NrQ2hhaW4pOworCisgICAgU2Vjb25kcyBkZWxheSA9IGZyYW1lKCkuZG9jdW1lbnQoKS0+
bWluaW11bUxheW91dERlbGF5KCk7CisgICAgaWYgKG1fbGF5b3V0VGltZXIuaXNBY3RpdmUoKSAm
JiBtX2RlbGF5ZWRMYXlvdXQgJiYgIWRlbGF5KQorICAgICAgICB1bnNjaGVkdWxlTGF5b3V0KCk7
CisKKyAgICBpZiAobV9sYXlvdXRUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2RlbGF5ZWRMYXlvdXQgPSBkZWxheS52YWx1ZSgpOworCisjaWYgIUxPR19ESVNBQkxF
RAorICAgIGlmICghZnJhbWUoKS5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKKyAgICAgICAg
TE9HKExheW91dCwgIkZyYW1lVmlldyAlcCBzY2hlZHVsaW5nIGxheW91dCBmb3IgJS4zZnMiLCB0
aGlzLCBkZWxheS52YWx1ZSgpKTsKKyNlbmRpZgorCisgICAgbV9sYXlvdXRUaW1lci5zdGFydE9u
ZVNob3QoZGVsYXkpOworfQorCit2b2lkIExheW91dENvbnRleHQ6OnVuc2NoZWR1bGVMYXlvdXQo
KQoreworICAgIGlmIChtX2FzeW5jaHJvbm91c1Rhc2tzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9hc3luY2hyb25vdXNUYXNrc1RpbWVyLnN0b3AoKTsKKworICAgIGlmICghbV9sYXlvdXRU
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgaWYgKCFmcmFtZSgpLmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpKQorICAgICAgICBMT0co
TGF5b3V0LCAiRnJhbWVWaWV3ICVwIGxheW91dCB0aW1lciB1bnNjaGVkdWxlZCBhdCAlLjNmcyIs
IHRoaXMsIGZyYW1lKCkuZG9jdW1lbnQoKS0+dGltZVNpbmNlRG9jdW1lbnRDcmVhdGlvbigpLnZh
bHVlKCkpOworI2VuZGlmCisKKyAgICBtX2xheW91dFRpbWVyLnN0b3AoKTsKKyAgICBtX2RlbGF5
ZWRMYXlvdXQgPSBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRDb250ZXh0OjpzY2hlZHVsZVN1YnRy
ZWVMYXlvdXQoUmVuZGVyRWxlbWVudCYgbGF5b3V0Um9vdCkKK3sKKyAgICBBU1NFUlQocmVuZGVy
VmlldygpKTsKKyAgICBhdXRvJiByZW5kZXJWaWV3ID0gKnRoaXMtPnJlbmRlclZpZXcoKTsKKwor
ICAgIC8vIFRyeSB0byBjYXRjaCB1bm5lY2Vzc2FyeSB3b3JrIGR1cmluZyByZW5kZXIgdHJlZSB0
ZWFyZG93bi4KKyAgICBBU1NFUlQoIXJlbmRlclZpZXcucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVk
KCkpOworICAgIEFTU0VSVChmcmFtZSgpLnZpZXcoKSA9PSAmdmlldygpKTsKKworICAgIGlmIChy
ZW5kZXJWaWV3Lm5lZWRzTGF5b3V0KCkgJiYgIXN1YnRyZWVMYXlvdXRSb290KCkpIHsKKyAgICAg
ICAgbGF5b3V0Um9vdC5tYXJrQ29udGFpbmluZ0Jsb2Nrc0ZvckxheW91dChTY2hlZHVsZVJlbGF5
b3V0OjpObyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzTGF5b3V0UGVu
ZGluZygpICYmIGlzTGF5b3V0U2NoZWR1bGluZ0VuYWJsZWQoKSkgeworICAgICAgICBTZWNvbmRz
IGRlbGF5ID0gcmVuZGVyVmlldy5kb2N1bWVudCgpLm1pbmltdW1MYXlvdXREZWxheSgpOworICAg
ICAgICBBU1NFUlQoIWxheW91dFJvb3QuY29udGFpbmVyKCkgfHwgaXM8UmVuZGVyVmlldz4obGF5
b3V0Um9vdC5jb250YWluZXIoKSkgfHwgIWxheW91dFJvb3QuY29udGFpbmVyKCktPm5lZWRzTGF5
b3V0KCkpOworICAgICAgICBzZXRTdWJ0cmVlTGF5b3V0Um9vdChsYXlvdXRSb290KTsKKyAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlTGF5b3V0KGZyYW1lKCkp
OworICAgICAgICBtX2RlbGF5ZWRMYXlvdXQgPSBkZWxheS52YWx1ZSgpOworICAgICAgICBtX2xh
eW91dFRpbWVyLnN0YXJ0T25lU2hvdChkZWxheSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhdXRvKiBzdWJ0cmVlTGF5b3V0Um9vdCA9IHRoaXMtPnN1YnRyZWVMYXlvdXRSb290KCk7
CisgICAgaWYgKHN1YnRyZWVMYXlvdXRSb290ID09ICZsYXlvdXRSb290KQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIXN1YnRyZWVMYXlvdXRSb290KSB7CisgICAgICAgIC8vIFdlIGFscmVh
ZHkgaGF2ZSBhIHBlbmRpbmcgKGZ1bGwpIGxheW91dC4gSnVzdCBtYXJrIHRoZSBzdWJ0cmVlIGZv
ciBsYXlvdXQuCisgICAgICAgIGxheW91dFJvb3QubWFya0NvbnRhaW5pbmdCbG9ja3NGb3JMYXlv
dXQoU2NoZWR1bGVSZWxheW91dDo6Tm8pOworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEludmFsaWRhdGVMYXlvdXQoZnJhbWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoaXNPYmplY3RBbmNlc3RvckNvbnRhaW5lck9mKCpzdWJ0cmVlTGF5b3V0Um9v
dCwgbGF5b3V0Um9vdCkpIHsKKyAgICAgICAgLy8gS2VlcCB0aGUgY3VycmVudCByb290LgorICAg
ICAgICBsYXlvdXRSb290Lm1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KFNjaGVkdWxlUmVs
YXlvdXQ6Ok5vLCBzdWJ0cmVlTGF5b3V0Um9vdCk7CisgICAgICAgIEFTU0VSVCghc3VidHJlZUxh
eW91dFJvb3QtPmNvbnRhaW5lcigpIHx8IGlzPFJlbmRlclZpZXc+KHN1YnRyZWVMYXlvdXRSb290
LT5jb250YWluZXIoKSkgfHwgIXN1YnRyZWVMYXlvdXRSb290LT5jb250YWluZXIoKS0+bmVlZHNM
YXlvdXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNPYmplY3RBbmNl
c3RvckNvbnRhaW5lck9mKGxheW91dFJvb3QsICpzdWJ0cmVlTGF5b3V0Um9vdCkpIHsKKyAgICAg
ICAgLy8gUmUtcm9vdCBhdCBuZXdSZWxheW91dFJvb3QuCisgICAgICAgIHN1YnRyZWVMYXlvdXRS
b290LT5tYXJrQ29udGFpbmluZ0Jsb2Nrc0ZvckxheW91dChTY2hlZHVsZVJlbGF5b3V0OjpObywg
JmxheW91dFJvb3QpOworICAgICAgICBzZXRTdWJ0cmVlTGF5b3V0Um9vdChsYXlvdXRSb290KTsK
KyAgICAgICAgQVNTRVJUKCFsYXlvdXRSb290LmNvbnRhaW5lcigpIHx8IGlzPFJlbmRlclZpZXc+
KGxheW91dFJvb3QuY29udGFpbmVyKCkpIHx8ICFsYXlvdXRSb290LmNvbnRhaW5lcigpLT5uZWVk
c0xheW91dCgpKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlk
YXRlTGF5b3V0KGZyYW1lKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFR3byBk
aXNqb2ludCBzdWJ0cmVlcyBuZWVkIGxheW91dC4gTWFyayBib3RoIG9mIHRoZW0gYW5kIGlzc3Vl
IGEgZnVsbCBsYXlvdXQgaW5zdGVhZC4KKyAgICBjb252ZXJ0U3VidHJlZUxheW91dFRvRnVsbExh
eW91dCgpOworICAgIGxheW91dFJvb3QubWFya0NvbnRhaW5pbmdCbG9ja3NGb3JMYXlvdXQoU2No
ZWR1bGVSZWxheW91dDo6Tm8pOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52
YWxpZGF0ZUxheW91dChmcmFtZSgpKTsKK30KKwordm9pZCBMYXlvdXRDb250ZXh0OjpsYXlvdXRU
aW1lckZpcmVkKCkKK3sKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgaWYgKCFmcmFtZSgpLmRvY3Vt
ZW50KCktPm93bmVyRWxlbWVudCgpKQorICAgICAgICBMT0coTGF5b3V0LCAiRnJhbWVWaWV3ICVw
IGxheW91dCB0aW1lciBmaXJlZCBhdCAlLjNmcyIsIHRoaXMsIGZyYW1lKCkuZG9jdW1lbnQoKS0+
dGltZVNpbmNlRG9jdW1lbnRDcmVhdGlvbigpLnZhbHVlKCkpOworI2VuZGlmCisgICAgbGF5b3V0
KCk7Cit9CisKK3ZvaWQgTGF5b3V0Q29udGV4dDo6Y29udmVydFN1YnRyZWVMYXlvdXRUb0Z1bGxM
YXlvdXQoKQoreworICAgIEFTU0VSVChzdWJ0cmVlTGF5b3V0Um9vdCgpKTsKKyAgICBzdWJ0cmVl
TGF5b3V0Um9vdCgpLT5tYXJrQ29udGFpbmluZ0Jsb2Nrc0ZvckxheW91dChTY2hlZHVsZVJlbGF5
b3V0OjpObyk7CisgICAgY2xlYXJTdWJ0cmVlTGF5b3V0Um9vdCgpOworfQorCit2b2lkIExheW91
dENvbnRleHQ6OnNldFN1YnRyZWVMYXlvdXRSb290KFJlbmRlckVsZW1lbnQmIGxheW91dFJvb3Qp
Cit7CisgICAgbV9zdWJ0cmVlTGF5b3V0Um9vdCA9IG1ha2VXZWFrUHRyKGxheW91dFJvb3QpOwor
fQorCitib29sIExheW91dENvbnRleHQ6OmNhblBlcmZvcm1MYXlvdXQoKSBjb25zdAoreworICAg
IGlmIChpc0luUmVuZGVyVHJlZUxheW91dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobGF5b3V0RGlzYWxsb3dlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAodmlldygpLmlzUGFpbnRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFzdWJ0cmVlTGF5b3V0Um9vdCgpICYmICFmcmFtZSgpLmRvY3VtZW50KCktPnJlbmRlclZpZXco
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBF
TkFCTEUoVEVYVF9BVVRPU0laSU5HKQordm9pZCBMYXlvdXRDb250ZXh0OjphcHBseVRleHRTaXpp
bmdJZk5lZWRlZChSZW5kZXJFbGVtZW50JiBsYXlvdXRSb290KQoreworICAgIGF1dG8mIHNldHRp
bmdzID0gbGF5b3V0Um9vdC5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MudGV4dEF1dG9z
aXppbmdFbmFibGVkKCkgfHwgcmVuZGVyVmlldygpLT5wcmludGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgYXV0byBtaW5pbXVtWm9vbUZvbnRTaXplID0gc2V0dGluZ3MubWluaW11bVpvb21G
b250U2l6ZSgpOworICAgIGlmICghbWluaW11bVpvb21Gb250U2l6ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGF1dG8gdGV4dEF1dG9zaXppbmdXaWR0aCA9IGxheW91dFJvb3QucGFnZSgpLnRleHRB
dXRvc2l6aW5nV2lkdGgoKTsKKyAgICBpZiAoYXV0byBvdmVycmlkZVdpZHRoID0gc2V0dGluZ3Mu
dGV4dEF1dG9zaXppbmdXaW5kb3dTaXplT3ZlcnJpZGUoKS53aWR0aCgpKQorICAgICAgICB0ZXh0
QXV0b3NpemluZ1dpZHRoID0gb3ZlcnJpZGVXaWR0aDsKKyAgICBpZiAoIXRleHRBdXRvc2l6aW5n
V2lkdGgpCisgICAgICAgIHJldHVybjsKKyAgICBsYXlvdXRSb290LmFkanVzdENvbXB1dGVkRm9u
dFNpemVzT25CbG9ja3MobWluaW11bVpvb21Gb250U2l6ZSwgdGV4dEF1dG9zaXppbmdXaWR0aCk7
CisgICAgaWYgKCFsYXlvdXRSb290Lm5lZWRzTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBMT0coVGV4dEF1dG9zaXppbmcsICJUZXh0IEF1dG9zaXppbmc6IG1pbmltdW1ab29tRm9udFNp
emU9JS4yZiB0ZXh0QXV0b3NpemluZ1dpZHRoPSUuMmYiLCBtaW5pbXVtWm9vbUZvbnRTaXplLCB0
ZXh0QXV0b3NpemluZ1dpZHRoKTsKKyAgICBsYXlvdXRSb290LmxheW91dCgpOworfQorI2VuZGlm
CisKK3ZvaWQgTGF5b3V0Q29udGV4dDo6dXBkYXRlU3R5bGVGb3JMYXlvdXQoKQoreworICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9ICpmcmFtZSgpLmRvY3VtZW50KCk7CisKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgc2VlIHJkYXI6Ly9wcm9ibGVtLzM2Njcw
MjQ2LgorICAgIGlmICghZG9jdW1lbnQuc3R5bGVTY29wZSgpLnJlc29sdmVySWZFeGlzdHMoKSkK
KyAgICAgICAgZG9jdW1lbnQuc3R5bGVTY29wZSgpLmRpZENoYW5nZVN0eWxlU2hlZXRFbnZpcm9u
bWVudCgpOworCisgICAgLy8gVmlld3BvcnQtZGVwZW5kZW50IG1lZGlhIHF1ZXJpZXMgbWF5IGNh
dXNlIHVzIHRvIG5lZWQgY29tcGxldGVseSBkaWZmZXJlbnQgc3R5bGUgaW5mb3JtYXRpb24uCisg
ICAgZG9jdW1lbnQuc3R5bGVTY29wZSgpLmV2YWx1YXRlTWVkaWFRdWVyaWVzRm9yVmlld3BvcnRD
aGFuZ2UoKTsKKworICAgIGRvY3VtZW50LmV2YWx1YXRlTWVkaWFRdWVyeUxpc3QoKTsKKyAgICAv
LyBJZiB0aGVyZSBpcyBhbnkgcGFnaW5hdGlvbiB0byBhcHBseSwgaXQgd2lsbCBhZmZlY3QgdGhl
IFJlbmRlclZpZXcncyBzdHlsZSwgc28gd2Ugc2hvdWxkCisgICAgLy8gdGFrZSBjYXJlIG9mIHRo
YXQgbm93LgorICAgIHZpZXcoKS5hcHBseVBhZ2luYXRpb25Ub1ZpZXdwb3J0KCk7CisgICAgLy8g
QWx3YXlzIGVuc3VyZSBvdXIgc3R5bGUgaW5mbyBpcyB1cC10by1kYXRlLiBUaGlzIGNhbiBoYXBw
ZW4gaW4gc2l0dWF0aW9ucyB3aGVyZQorICAgIC8vIHRoZSBsYXlvdXQgYmVhdHMgYW55IHNvcnQg
b2Ygc3R5bGUgcmVjYWxjIHVwZGF0ZSB0aGF0IG5lZWRzIHRvIG9jY3VyLgorICAgIGRvY3VtZW50
LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKK30KKworYm9vbCBMYXlvdXRDb250ZXh0OjpoYW5kbGVM
YXlvdXRXaXRoRnJhbWVGbGF0dGVuaW5nSWZOZWVkZWQoKQoreworICAgIGlmICghdmlldygpLmlz
SW5DaGlsZEZyYW1lV2l0aEZyYW1lRmxhdHRlbmluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgc3RhcnRMYXlvdXRBdE1haW5GcmFtZVZpZXdJZk5lZWRlZCgpOworICAgIGF1
dG8qIGxheW91dFJvb3QgPSBzdWJ0cmVlTGF5b3V0Um9vdCgpID8gc3VidHJlZUxheW91dFJvb3Qo
KSA6IGZyYW1lKCkuZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpOworICAgIHJldHVybiAhbGF5b3V0
Um9vdCB8fCAhbGF5b3V0Um9vdC0+bmVlZHNMYXlvdXQoKTsKK30KKwordm9pZCBMYXlvdXRDb250
ZXh0OjpzdGFydExheW91dEF0TWFpbkZyYW1lVmlld0lmTmVlZGVkKCkKK3sKKyAgICAvLyBXaGVu
IHdlIHN0YXJ0IGEgbGF5b3V0IGF0IHRoZSBjaGlsZCBsZXZlbCBhcyBvcHBvc2VkIHRvIHRoZSB0
b3Btb3N0IGZyYW1lIHZpZXcgYW5kIHRoaXMgY2hpbGQKKyAgICAvLyBmcmFtZSByZXF1aXJlcyBm
bGF0dGVuaW5nLCB3ZSBuZWVkIHRvIHJlLWluaXRpYXRlIHRoZSBsYXlvdXQgYXQgdGhlIHRvcG1v
c3Qgdmlldy4gTGF5b3V0CisgICAgLy8gd2lsbCBoaXQgdGhpcyB2aWV3IGV2ZW50dWFsbHkuCisg
ICAgYXV0byogcGFyZW50VmlldyA9IHZpZXcoKS5wYXJlbnRGcmFtZVZpZXcoKTsKKyAgICBpZiAo
IXBhcmVudFZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEluIHRoZSBtaWRkbGUgb2Yg
cGFyZW50IGxheW91dCwgbm8gbmVlZCB0byByZXN0YXJ0IGZyb20gdG9wbW9zdC4KKyAgICBpZiAo
cGFyZW50Vmlldy0+bGF5b3V0Q29udGV4dCgpLmlzSW5MYXlvdXQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gUGFyZW50IHRyZWUgaXMgY2xlYW4uIFN0YXJ0aW5nIGxheW91dCBmcm9tIGl0
IHdvdWxkIGhhdmUgbm8gZWZmZWN0LgorICAgIGlmICghcGFyZW50Vmlldy0+bmVlZHNMYXlvdXQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKHBhcmVudFZpZXctPnBhcmVudEZyYW1l
VmlldygpKQorICAgICAgICBwYXJlbnRWaWV3ID0gcGFyZW50Vmlldy0+cGFyZW50RnJhbWVWaWV3
KCk7CisKKyAgICBMT0coTGF5b3V0LCAiICBmcmFtZSBmbGF0dGVuaW5nLCBzdGFydGluZyBmcm9t
IHJvb3QiKTsKKyAgICBwYXJlbnRWaWV3LT5sYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7Cit9CisK
K0xheW91dFNpemUgTGF5b3V0Q29udGV4dDo6bGF5b3V0RGVsdGEoKSBjb25zdAoreworICAgIGlm
IChhdXRvKiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCkpCisgICAgICAgIHJldHVy
biBsYXlvdXRTdGF0ZS0+bGF5b3V0RGVsdGEoKTsKKyAgICByZXR1cm4geyB9OworfQorICAgIAor
dm9pZCBMYXlvdXRDb250ZXh0OjphZGRMYXlvdXREZWx0YShjb25zdCBMYXlvdXRTaXplJiBkZWx0
YSkKK3sKKyAgICBpZiAoYXV0byogbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpKQor
ICAgICAgICBsYXlvdXRTdGF0ZS0+YWRkTGF5b3V0RGVsdGEoZGVsdGEpOworfQorICAgIAorI2lm
ICFBU1NFUlRfRElTQUJMRUQKK2Jvb2wgTGF5b3V0Q29udGV4dDo6bGF5b3V0RGVsdGFNYXRjaGVz
KGNvbnN0IExheW91dFNpemUmIGRlbHRhKQoreworICAgIGlmIChhdXRvKiBsYXlvdXRTdGF0ZSA9
IHRoaXMtPmxheW91dFN0YXRlKCkpCisgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZS0+bGF5b3V0
RGVsdGFNYXRjaGVzKGRlbHRhKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworTGF5
b3V0U3RhdGUqIExheW91dENvbnRleHQ6OmxheW91dFN0YXRlKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9sYXlvdXRTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIG1fbGF5b3V0U3RhdGVTdGFjay5sYXN0KCkuZ2V0KCk7Cit9CisKK3ZvaWQgTGF5
b3V0Q29udGV4dDo6cHVzaExheW91dFN0YXRlKFJlbmRlckVsZW1lbnQmIHJvb3QpCit7CisgICAg
QVNTRVJUKCFtX3BhaW50T2Zmc2V0Q2FjaGVEaXNhYmxlQ291bnQpOworICAgIEFTU0VSVCghbGF5
b3V0U3RhdGUoKSk7CisKKyAgICBtX2xheW91dFN0YXRlU3RhY2suYXBwZW5kKHN0ZDo6bWFrZV91
bmlxdWU8TGF5b3V0U3RhdGU+KHJvb3QpKTsKK30KKworYm9vbCBMYXlvdXRDb250ZXh0OjpwdXNo
TGF5b3V0U3RhdGVGb3JQYWdpbmF0aW9uSWZOZWVkZWQoUmVuZGVyQmxvY2tGbG93JiBsYXlvdXRS
b290KQoreworICAgIGlmIChsYXlvdXRTdGF0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgbV9sYXlvdXRTdGF0ZVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExheW91dFN0YXRl
PihsYXlvdXRSb290LCBMYXlvdXRTdGF0ZTo6SXNQYWdpbmF0ZWQ6OlllcykpOworICAgIHJldHVy
biB0cnVlOworfQorICAgIAorYm9vbCBMYXlvdXRDb250ZXh0OjpwdXNoTGF5b3V0U3RhdGUoUmVu
ZGVyQm94JiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBMYXlvdXRVbml0IHBh
Z2VIZWlnaHQsIGJvb2wgcGFnZUhlaWdodENoYW5nZWQpCit7CisgICAgLy8gV2UgcHVzaCBMYXlv
dXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVz
IGxheW91dERlbHRhIHRvby4KKyAgICBhdXRvKiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0
YXRlKCk7CisgICAgaWYgKCFsYXlvdXRTdGF0ZSB8fCAhbmVlZHNGdWxsUmVwYWludCgpIHx8IGxh
eW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpIHx8IHJlbmRlcmVyLmVuY2xvc2luZ0ZyYWdtZW50ZWRG
bG93KCkKKyAgICAgICAgfHwgbGF5b3V0U3RhdGUtPmxpbmVHcmlkKCkgfHwgKHJlbmRlcmVyLnN0
eWxlKCkubGluZUdyaWQoKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVHcmlkKCkgJiYgcmVu
ZGVyZXIuaXNSZW5kZXJCbG9ja0Zsb3coKSkpIHsKKyAgICAgICAgbV9sYXlvdXRTdGF0ZVN0YWNr
LmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExheW91dFN0YXRlPihtX2xheW91dFN0YXRlU3RhY2ss
IHJlbmRlcmVyLCBvZmZzZXQsIHBhZ2VIZWlnaHQsIHBhZ2VIZWlnaHRDaGFuZ2VkKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCit2b2lk
IExheW91dENvbnRleHQ6OnBvcExheW91dFN0YXRlKCkKK3sKKyAgICBtX2xheW91dFN0YXRlU3Rh
Y2sucmVtb3ZlTGFzdCgpOworfQorICAgIAorI2lmbmRlZiBOREVCVUcKK3ZvaWQgTGF5b3V0Q29u
dGV4dDo6Y2hlY2tMYXlvdXRTdGF0ZSgpCit7CisgICAgQVNTRVJUKGxheW91dERlbHRhTWF0Y2hl
cyhMYXlvdXRTaXplKCkpKTsKKyAgICBBU1NFUlQoIW1fcGFpbnRPZmZzZXRDYWNoZURpc2FibGVD
b3VudCk7Cit9CisjZW5kaWYKKworRnJhbWUmIExheW91dENvbnRleHQ6OmZyYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdmlldygpLmZyYW1lKCk7Cit9CisKK0ZyYW1lVmlldyYgTGF5b3V0Q29u
dGV4dDo6dmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWVWaWV3OworfQorCitSZW5k
ZXJWaWV3KiBMYXlvdXRDb250ZXh0OjpyZW5kZXJWaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dmlldygpLnJlbmRlclZpZXcoKTsKK30KKworRG9jdW1lbnQqIExheW91dENvbnRleHQ6OmRvY3Vt
ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWUoKS5kb2N1bWVudCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xh
eW91dENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3TGF5b3V0Q29udGV4dC5jcHAJKHJldmlzaW9uIDIzMDk2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29u
dGV4dC5oIgorI2luY2x1ZGUgIkZyYW1lVmlld0xheW91dENvbnRleHQuaCIKIAogI2luY2x1ZGUg
IkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEZWJ1Z1BhZ2VPdmVybGF5cy5o
IgpAQCAtOTEsOSArOTEsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBMYXlvdXRTY29wZSB7CiBwdWJs
aWM6Ci0gICAgTGF5b3V0U2NvcGUoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCkKKyAgICBM
YXlvdXRTY29wZShGcmFtZVZpZXdMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0KQogICAgICAg
ICA6IG1fdmlldyhsYXlvdXRDb250ZXh0LnZpZXcoKSkKLSAgICAgICAgLCBtX25lc3RlZFN0YXRl
KGxheW91dENvbnRleHQubV9sYXlvdXROZXN0ZWRTdGF0ZSwgbGF5b3V0Q29udGV4dC5tX2xheW91
dE5lc3RlZFN0YXRlID09IExheW91dENvbnRleHQ6OkxheW91dE5lc3RlZFN0YXRlOjpOb3RJbkxh
eW91dCA/IExheW91dENvbnRleHQ6OkxheW91dE5lc3RlZFN0YXRlOjpOb3ROZXN0ZWQgOiBMYXlv
dXRDb250ZXh0OjpMYXlvdXROZXN0ZWRTdGF0ZTo6TmVzdGVkKQorICAgICAgICAsIG1fbmVzdGVk
U3RhdGUobGF5b3V0Q29udGV4dC5tX2xheW91dE5lc3RlZFN0YXRlLCBsYXlvdXRDb250ZXh0Lm1f
bGF5b3V0TmVzdGVkU3RhdGUgPT0gRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6TGF5b3V0TmVzdGVk
U3RhdGU6Ok5vdEluTGF5b3V0ID8gRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6TGF5b3V0TmVzdGVk
U3RhdGU6Ok5vdE5lc3RlZCA6IEZyYW1lVmlld0xheW91dENvbnRleHQ6OkxheW91dE5lc3RlZFN0
YXRlOjpOZXN0ZWQpCiAgICAgICAgICwgbV9zY2hlZHVsaW5nSXNFbmFibGVkKGxheW91dENvbnRl
eHQubV9sYXlvdXRTY2hlZHVsaW5nSXNFbmFibGVkLCBmYWxzZSkKICAgICAgICAgLCBtX2luUHJv
Z3JhbW1hdGljU2Nyb2xsKGxheW91dENvbnRleHQudmlldygpLmluUHJvZ3JhbW1hdGljU2Nyb2xs
KCkpCiAgICAgewpAQCAtMTA3LDI1ICsxMDcsMjUgQEAgcHVibGljOgogICAgICAgICAKIHByaXZh
dGU6CiAgICAgRnJhbWVWaWV3JiBtX3ZpZXc7Ci0gICAgU2V0Rm9yU2NvcGU8TGF5b3V0Q29udGV4
dDo6TGF5b3V0TmVzdGVkU3RhdGU+IG1fbmVzdGVkU3RhdGU7CisgICAgU2V0Rm9yU2NvcGU8RnJh
bWVWaWV3TGF5b3V0Q29udGV4dDo6TGF5b3V0TmVzdGVkU3RhdGU+IG1fbmVzdGVkU3RhdGU7CiAg
ICAgU2V0Rm9yU2NvcGU8Ym9vbD4gbV9zY2hlZHVsaW5nSXNFbmFibGVkOwogICAgIGJvb2wgbV9p
blByb2dyYW1tYXRpY1Njcm9sbCB7IGZhbHNlIH07CiB9OwogCi1MYXlvdXRDb250ZXh0OjpMYXlv
dXRDb250ZXh0KEZyYW1lVmlldyYgZnJhbWVWaWV3KQorRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6
RnJhbWVWaWV3TGF5b3V0Q29udGV4dChGcmFtZVZpZXcmIGZyYW1lVmlldykKICAgICA6IG1fZnJh
bWVWaWV3KGZyYW1lVmlldykKLSAgICAsIG1fbGF5b3V0VGltZXIoKnRoaXMsICZMYXlvdXRDb250
ZXh0OjpsYXlvdXRUaW1lckZpcmVkKQotICAgICwgbV9hc3luY2hyb25vdXNUYXNrc1RpbWVyKCp0
aGlzLCAmTGF5b3V0Q29udGV4dDo6cnVuQXN5bmNocm9ub3VzVGFza3MpCisgICAgLCBtX2xheW91
dFRpbWVyKCp0aGlzLCAmRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6bGF5b3V0VGltZXJGaXJlZCkK
KyAgICAsIG1fYXN5bmNocm9ub3VzVGFza3NUaW1lcigqdGhpcywgJkZyYW1lVmlld0xheW91dENv
bnRleHQ6OnJ1bkFzeW5jaHJvbm91c1Rhc2tzKQogewogfQogCi1MYXlvdXRDb250ZXh0Ojp+TGF5
b3V0Q29udGV4dCgpCitGcmFtZVZpZXdMYXlvdXRDb250ZXh0Ojp+RnJhbWVWaWV3TGF5b3V0Q29u
dGV4dCgpCiB7CiB9CiAKLXZvaWQgTGF5b3V0Q29udGV4dDo6bGF5b3V0KCkKK3ZvaWQgRnJhbWVW
aWV3TGF5b3V0Q29udGV4dDo6bGF5b3V0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oTGF5b3V0
LCBzdHJlYW0gPDwgIkZyYW1lVmlldyAiIDw8ICZ2aWV3KCkgPDwgIiBMYXlvdXRDb250ZXh0Ojps
YXlvdXQoKSB3aXRoIHNpemUgIiA8PCB2aWV3KCkubGF5b3V0U2l6ZSgpKTsKKyAgICBMT0dfV0lU
SF9TVFJFQU0oTGF5b3V0LCBzdHJlYW0gPDwgIkZyYW1lVmlldyAiIDw8ICZ2aWV3KCkgPDwgIiBG
cmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXQoKSB3aXRoIHNpemUgIiA8PCB2aWV3KCkubGF5
b3V0U2l6ZSgpKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIWZyYW1lKCkuZG9jdW1lbnQoKS0+aW5SZW5kZXJUcmVlVXBkYXRlKCkgfHwgU2NyaXB0RGlz
YWxsb3dlZFNjb3BlOjpMYXlvdXRBc3NlcnRpb25EaXNhYmxlU2NvcGU6OnNob3VsZERpc2FibGUo
KSk7CiAgICAgQVNTRVJUKExheW91dERpc2FsbG93ZWRTY29wZTo6aXNMYXlvdXRBbGxvd2VkKCkp
OwpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgTGF5b3V0Q29udGV4dDo6bGF5b3V0KCkKICAgICBE
ZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHZpZXcoKS5mcmFtZSgpKTsKIH0KIAotdm9pZCBM
YXlvdXRDb250ZXh0OjpydW5PclNjaGVkdWxlQXN5bmNocm9ub3VzVGFza3MoKQordm9pZCBGcmFt
ZVZpZXdMYXlvdXRDb250ZXh0OjpydW5PclNjaGVkdWxlQXN5bmNocm9ub3VzVGFza3MoKQogewog
ICAgIGlmIChtX2FzeW5jaHJvbm91c1Rhc2tzVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgTGF5b3V0Q29udGV4dDo6cnVuT3JTY2hlZHVs
ZUFzeW5jaHIKICAgICB9CiB9CiAKLXZvaWQgTGF5b3V0Q29udGV4dDo6cnVuQXN5bmNocm9ub3Vz
VGFza3MoKQordm9pZCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpydW5Bc3luY2hyb25vdXNUYXNr
cygpCiB7CiAgICAgbV9hc3luY2hyb25vdXNUYXNrc1RpbWVyLnN0b3AoKTsKICAgICBpZiAobV9p
bkFzeW5jaHJvbm91c1Rhc2tzKQpAQCAtMjU3LDE0ICsyNTcsMTQgQEAgdm9pZCBMYXlvdXRDb250
ZXh0OjpydW5Bc3luY2hyb25vdXNUYXNrcwogICAgIHZpZXcoKS5wZXJmb3JtUG9zdExheW91dFRh
c2tzKCk7CiB9CiAKLXZvaWQgTGF5b3V0Q29udGV4dDo6Zmx1c2hBc3luY2hyb25vdXNUYXNrcygp
Cit2b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmZsdXNoQXN5bmNocm9ub3VzVGFza3MoKQog
ewogICAgIGlmICghbV9hc3luY2hyb25vdXNUYXNrc1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAg
IHJldHVybjsKICAgICBydW5Bc3luY2hyb25vdXNUYXNrcygpOwogfQogCi12b2lkIExheW91dENv
bnRleHQ6OnJlc2V0KCkKK3ZvaWQgRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6cmVzZXQoKQogewog
ICAgIG1fbGF5b3V0UGhhc2UgPSBMYXlvdXRQaGFzZTo6T3V0c2lkZUxheW91dDsKICAgICBjbGVh
clN1YnRyZWVMYXlvdXRSb290KCk7CkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBMYXlvdXRDb250
ZXh0OjpyZXNldCgpCiAgICAgbV9uZWVkc0Z1bGxSZXBhaW50ID0gdHJ1ZTsKIH0KIAotYm9vbCBM
YXlvdXRDb250ZXh0OjpuZWVkc0xheW91dCgpIGNvbnN0Citib29sIEZyYW1lVmlld0xheW91dENv
bnRleHQ6Om5lZWRzTGF5b3V0KCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGNhbiByZXR1cm4gdHJ1
ZSBpbiBjYXNlcyB3aGVyZSB0aGUgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhIGJvZHkgeWV0Lgog
ICAgIC8vIERvY3VtZW50OjpzaG91bGRTY2hlZHVsZUxheW91dCB0YWtlcyBjYXJlIG9mIHByZXZl
bnRpbmcgdXMgZnJvbSBzY2hlZHVsaW5nCkBAIC0yODksNyArMjg5LDcgQEAgYm9vbCBMYXlvdXRD
b250ZXh0OjpuZWVkc0xheW91dCgpIGNvbnN0CiAgICAgICAgIHx8IChtX2Rpc2FibGVTZXROZWVk
c0xheW91dENvdW50ICYmIG1fc2V0TmVlZHNMYXlvdXRXYXNEZWZlcnJlZCk7CiB9CiAKLXZvaWQg
TGF5b3V0Q29udGV4dDo6c2V0TmVlZHNMYXlvdXQoKQordm9pZCBGcmFtZVZpZXdMYXlvdXRDb250
ZXh0OjpzZXROZWVkc0xheW91dCgpCiB7CiAgICAgaWYgKG1fZGlzYWJsZVNldE5lZWRzTGF5b3V0
Q291bnQpIHsKICAgICAgICAgbV9zZXROZWVkc0xheW91dFdhc0RlZmVycmVkID0gdHJ1ZTsKQEAg
LTMwMiwxOSArMzAyLDE5IEBAIHZvaWQgTGF5b3V0Q29udGV4dDo6c2V0TmVlZHNMYXlvdXQoKQog
ICAgIH0KIH0KIAotdm9pZCBMYXlvdXRDb250ZXh0OjplbmFibGVTZXROZWVkc0xheW91dCgpCit2
b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmVuYWJsZVNldE5lZWRzTGF5b3V0KCkKIHsKICAg
ICBBU1NFUlQobV9kaXNhYmxlU2V0TmVlZHNMYXlvdXRDb3VudCk7CiAgICAgaWYgKCEtLW1fZGlz
YWJsZVNldE5lZWRzTGF5b3V0Q291bnQpCiAgICAgICAgIG1fc2V0TmVlZHNMYXlvdXRXYXNEZWZl
cnJlZCA9IGZhbHNlOyAvLyBGSVhNRTogRmluZCBhIHdheSB0byBtYWtlIHRoZSBkZWZlcnJlZCBs
YXlvdXQgYWN0dWFsbHkgaGFwcGVuLgogfQogCi12b2lkIExheW91dENvbnRleHQ6OmRpc2FibGVT
ZXROZWVkc0xheW91dCgpCit2b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmRpc2FibGVTZXRO
ZWVkc0xheW91dCgpCiB7CiAgICAgKyttX2Rpc2FibGVTZXROZWVkc0xheW91dENvdW50OwogfQog
Ci12b2lkIExheW91dENvbnRleHQ6OnNjaGVkdWxlTGF5b3V0KCkKK3ZvaWQgRnJhbWVWaWV3TGF5
b3V0Q29udGV4dDo6c2NoZWR1bGVMYXlvdXQoKQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YXNzZXJ0IHRoZSBwYWdlIGlzIG5vdCBpbiB0aGUgcGFnZSBjYWNoZSwgYnV0IHRoYXQgaXMgY2F1
c2luZwogICAgIC8vIHRvbyBtYW55IGZhbHNlIGFzc2VydGlvbnMuIFNlZSA8cmRhcjovL3Byb2Js
ZW0vNzIxODExOD4uCkBAIC0zNTEsNyArMzUxLDcgQEAgdm9pZCBMYXlvdXRDb250ZXh0OjpzY2hl
ZHVsZUxheW91dCgpCiAgICAgbV9sYXlvdXRUaW1lci5zdGFydE9uZVNob3QoZGVsYXkpOwogfQog
Ci12b2lkIExheW91dENvbnRleHQ6OnVuc2NoZWR1bGVMYXlvdXQoKQordm9pZCBGcmFtZVZpZXdM
YXlvdXRDb250ZXh0Ojp1bnNjaGVkdWxlTGF5b3V0KCkKIHsKICAgICBpZiAobV9hc3luY2hyb25v
dXNUYXNrc1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fYXN5bmNocm9ub3VzVGFza3NUaW1l
ci5zdG9wKCk7CkBAIC0zNjgsNyArMzY4LDcgQEAgdm9pZCBMYXlvdXRDb250ZXh0Ojp1bnNjaGVk
dWxlTGF5b3V0KCkKICAgICBtX2RlbGF5ZWRMYXlvdXQgPSBmYWxzZTsKIH0KIAotdm9pZCBMYXlv
dXRDb250ZXh0OjpzY2hlZHVsZVN1YnRyZWVMYXlvdXQoUmVuZGVyRWxlbWVudCYgbGF5b3V0Um9v
dCkKK3ZvaWQgRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6c2NoZWR1bGVTdWJ0cmVlTGF5b3V0KFJl
bmRlckVsZW1lbnQmIGxheW91dFJvb3QpCiB7CiAgICAgQVNTRVJUKHJlbmRlclZpZXcoKSk7CiAg
ICAgYXV0byYgcmVuZGVyVmlldyA9ICp0aGlzLT5yZW5kZXJWaWV3KCk7CkBAIC00MjQsNyArNDI0
LDcgQEAgdm9pZCBMYXlvdXRDb250ZXh0OjpzY2hlZHVsZVN1YnRyZWVMYXlvdQogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZUxheW91dChmcmFtZSgpKTsKIH0KIAot
dm9pZCBMYXlvdXRDb250ZXh0OjpsYXlvdXRUaW1lckZpcmVkKCkKK3ZvaWQgRnJhbWVWaWV3TGF5
b3V0Q29udGV4dDo6bGF5b3V0VGltZXJGaXJlZCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAogICAg
IGlmICghZnJhbWUoKS5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKQEAgLTQzMywxOSArNDMz
LDE5IEBAIHZvaWQgTGF5b3V0Q29udGV4dDo6bGF5b3V0VGltZXJGaXJlZCgpCiAgICAgbGF5b3V0
KCk7CiB9CiAKLXZvaWQgTGF5b3V0Q29udGV4dDo6Y29udmVydFN1YnRyZWVMYXlvdXRUb0Z1bGxM
YXlvdXQoKQordm9pZCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0Ojpjb252ZXJ0U3VidHJlZUxheW91
dFRvRnVsbExheW91dCgpCiB7CiAgICAgQVNTRVJUKHN1YnRyZWVMYXlvdXRSb290KCkpOwogICAg
IHN1YnRyZWVMYXlvdXRSb290KCktPm1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KFNjaGVk
dWxlUmVsYXlvdXQ6Ok5vKTsKICAgICBjbGVhclN1YnRyZWVMYXlvdXRSb290KCk7CiB9CiAKLXZv
aWQgTGF5b3V0Q29udGV4dDo6c2V0U3VidHJlZUxheW91dFJvb3QoUmVuZGVyRWxlbWVudCYgbGF5
b3V0Um9vdCkKK3ZvaWQgRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6c2V0U3VidHJlZUxheW91dFJv
b3QoUmVuZGVyRWxlbWVudCYgbGF5b3V0Um9vdCkKIHsKICAgICBtX3N1YnRyZWVMYXlvdXRSb290
ID0gbWFrZVdlYWtQdHIobGF5b3V0Um9vdCk7CiB9CiAKLWJvb2wgTGF5b3V0Q29udGV4dDo6Y2Fu
UGVyZm9ybUxheW91dCgpIGNvbnN0Citib29sIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmNhblBl
cmZvcm1MYXlvdXQoKSBjb25zdAogewogICAgIGlmIChpc0luUmVuZGVyVHJlZUxheW91dCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjMsNyArNDYzLDcgQEAgYm9vbCBMYXlvdXRDb250
ZXh0OjpjYW5QZXJmb3JtTGF5b3V0KCkgYwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklO
RykKLXZvaWQgTGF5b3V0Q29udGV4dDo6YXBwbHlUZXh0U2l6aW5nSWZOZWVkZWQoUmVuZGVyRWxl
bWVudCYgbGF5b3V0Um9vdCkKK3ZvaWQgRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6YXBwbHlUZXh0
U2l6aW5nSWZOZWVkZWQoUmVuZGVyRWxlbWVudCYgbGF5b3V0Um9vdCkKIHsKICAgICBhdXRvJiBz
ZXR0aW5ncyA9IGxheW91dFJvb3Quc2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzLnRleHRB
dXRvc2l6aW5nRW5hYmxlZCgpIHx8IHJlbmRlclZpZXcoKS0+cHJpbnRpbmcoKSkKQEAgLTQ4NCw3
ICs0ODQsNyBAQCB2b2lkIExheW91dENvbnRleHQ6OmFwcGx5VGV4dFNpemluZ0lmTmVlCiB9CiAj
ZW5kaWYKIAotdm9pZCBMYXlvdXRDb250ZXh0Ojp1cGRhdGVTdHlsZUZvckxheW91dCgpCit2b2lk
IEZyYW1lVmlld0xheW91dENvbnRleHQ6OnVwZGF0ZVN0eWxlRm9yTGF5b3V0KCkKIHsKICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSAqZnJhbWUoKS5kb2N1bWVudCgpOwogCkBAIC01MDQsNyArNTA0
LDcgQEAgdm9pZCBMYXlvdXRDb250ZXh0Ojp1cGRhdGVTdHlsZUZvckxheW91dAogICAgIGRvY3Vt
ZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIH0KIAotYm9vbCBMYXlvdXRDb250ZXh0OjpoYW5k
bGVMYXlvdXRXaXRoRnJhbWVGbGF0dGVuaW5nSWZOZWVkZWQoKQorYm9vbCBGcmFtZVZpZXdMYXlv
dXRDb250ZXh0OjpoYW5kbGVMYXlvdXRXaXRoRnJhbWVGbGF0dGVuaW5nSWZOZWVkZWQoKQogewog
ICAgIGlmICghdmlldygpLmlzSW5DaGlsZEZyYW1lV2l0aEZyYW1lRmxhdHRlbmluZygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC01MTQsNyArNTE0LDcgQEAgYm9vbCBMYXlvdXRDb250ZXh0
OjpoYW5kbGVMYXlvdXRXaXRoRnJhbQogICAgIHJldHVybiAhbGF5b3V0Um9vdCB8fCAhbGF5b3V0
Um9vdC0+bmVlZHNMYXlvdXQoKTsKIH0KIAotdm9pZCBMYXlvdXRDb250ZXh0OjpzdGFydExheW91
dEF0TWFpbkZyYW1lVmlld0lmTmVlZGVkKCkKK3ZvaWQgRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6
c3RhcnRMYXlvdXRBdE1haW5GcmFtZVZpZXdJZk5lZWRlZCgpCiB7CiAgICAgLy8gV2hlbiB3ZSBz
dGFydCBhIGxheW91dCBhdCB0aGUgY2hpbGQgbGV2ZWwgYXMgb3Bwb3NlZCB0byB0aGUgdG9wbW9z
dCBmcmFtZSB2aWV3IGFuZCB0aGlzIGNoaWxkCiAgICAgLy8gZnJhbWUgcmVxdWlyZXMgZmxhdHRl
bmluZywgd2UgbmVlZCB0byByZS1pbml0aWF0ZSB0aGUgbGF5b3V0IGF0IHRoZSB0b3Btb3N0IHZp
ZXcuIExheW91dApAQCAtNTM4LDIxICs1MzgsMjEgQEAgdm9pZCBMYXlvdXRDb250ZXh0OjpzdGFy
dExheW91dEF0TWFpbkZyYQogICAgIHBhcmVudFZpZXctPmxheW91dENvbnRleHQoKS5sYXlvdXQo
KTsKIH0KIAotTGF5b3V0U2l6ZSBMYXlvdXRDb250ZXh0OjpsYXlvdXREZWx0YSgpIGNvbnN0CitM
YXlvdXRTaXplIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmxheW91dERlbHRhKCkgY29uc3QKIHsK
ICAgICBpZiAoYXV0byogbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpKQogICAgICAg
ICByZXR1cm4gbGF5b3V0U3RhdGUtPmxheW91dERlbHRhKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
ICAgICAKLXZvaWQgTGF5b3V0Q29udGV4dDo6YWRkTGF5b3V0RGVsdGEoY29uc3QgTGF5b3V0U2l6
ZSYgZGVsdGEpCit2b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmFkZExheW91dERlbHRhKGNv
bnN0IExheW91dFNpemUmIGRlbHRhKQogewogICAgIGlmIChhdXRvKiBsYXlvdXRTdGF0ZSA9IHRo
aXMtPmxheW91dFN0YXRlKCkpCiAgICAgICAgIGxheW91dFN0YXRlLT5hZGRMYXlvdXREZWx0YShk
ZWx0YSk7CiB9CiAgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotYm9vbCBMYXlvdXRDb250ZXh0
OjpsYXlvdXREZWx0YU1hdGNoZXMoY29uc3QgTGF5b3V0U2l6ZSYgZGVsdGEpCitib29sIEZyYW1l
Vmlld0xheW91dENvbnRleHQ6OmxheW91dERlbHRhTWF0Y2hlcyhjb25zdCBMYXlvdXRTaXplJiBk
ZWx0YSkKIHsKICAgICBpZiAoYXV0byogbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgp
KQogICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUtPmxheW91dERlbHRhTWF0Y2hlcyhkZWx0YSk7
CkBAIC01NjAsMTQgKzU2MCwxNCBAQCBib29sIExheW91dENvbnRleHQ6OmxheW91dERlbHRhTWF0
Y2hlcyhjCiB9CiAjZW5kaWYKIAotTGF5b3V0U3RhdGUqIExheW91dENvbnRleHQ6OmxheW91dFN0
YXRlKCkgY29uc3QKK0xheW91dFN0YXRlKiBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXRT
dGF0ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fbGF5b3V0U3RhdGVTdGFjay5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBtX2xheW91dFN0YXRlU3RhY2subGFz
dCgpLmdldCgpOwogfQogCi12b2lkIExheW91dENvbnRleHQ6OnB1c2hMYXlvdXRTdGF0ZShSZW5k
ZXJFbGVtZW50JiByb290KQordm9pZCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpwdXNoTGF5b3V0
U3RhdGUoUmVuZGVyRWxlbWVudCYgcm9vdCkKIHsKICAgICBBU1NFUlQoIW1fcGFpbnRPZmZzZXRD
YWNoZURpc2FibGVDb3VudCk7CiAgICAgQVNTRVJUKCFsYXlvdXRTdGF0ZSgpKTsKQEAgLTU3NSw3
ICs1NzUsNyBAQCB2b2lkIExheW91dENvbnRleHQ6OnB1c2hMYXlvdXRTdGF0ZShSZW5kCiAgICAg
bV9sYXlvdXRTdGF0ZVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExheW91dFN0YXRlPihy
b290KSk7CiB9CiAKLWJvb2wgTGF5b3V0Q29udGV4dDo6cHVzaExheW91dFN0YXRlRm9yUGFnaW5h
dGlvbklmTmVlZGVkKFJlbmRlckJsb2NrRmxvdyYgbGF5b3V0Um9vdCkKK2Jvb2wgRnJhbWVWaWV3
TGF5b3V0Q29udGV4dDo6cHVzaExheW91dFN0YXRlRm9yUGFnaW5hdGlvbklmTmVlZGVkKFJlbmRl
ckJsb2NrRmxvdyYgbGF5b3V0Um9vdCkKIHsKICAgICBpZiAobGF5b3V0U3RhdGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNTgzLDcgKzU4Myw3IEBAIGJvb2wgTGF5b3V0Q29udGV4dDo6
cHVzaExheW91dFN0YXRlRm9yUGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKLWJvb2wgTGF5
b3V0Q29udGV4dDo6cHVzaExheW91dFN0YXRlKFJlbmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldCwgTGF5b3V0VW5pdCBwYWdlSGVpZ2h0LCBib29sIHBhZ2VIZWlnaHRD
aGFuZ2VkKQorYm9vbCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpwdXNoTGF5b3V0U3RhdGUoUmVu
ZGVyQm94JiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBMYXlvdXRVbml0IHBh
Z2VIZWlnaHQsIGJvb2wgcGFnZUhlaWdodENoYW5nZWQpCiB7CiAgICAgLy8gV2UgcHVzaCBMYXlv
dXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVz
IGxheW91dERlbHRhIHRvby4KICAgICBhdXRvKiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0
YXRlKCk7CkBAIC01OTUsMzUgKzU5NSwzNSBAQCBib29sIExheW91dENvbnRleHQ6OnB1c2hMYXlv
dXRTdGF0ZShSZW5kCiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAotdm9pZCBMYXlvdXRDb250
ZXh0Ojpwb3BMYXlvdXRTdGF0ZSgpCit2b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6OnBvcExh
eW91dFN0YXRlKCkKIHsKICAgICBtX2xheW91dFN0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwogfQog
ICAgIAogI2lmbmRlZiBOREVCVUcKLXZvaWQgTGF5b3V0Q29udGV4dDo6Y2hlY2tMYXlvdXRTdGF0
ZSgpCit2b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmNoZWNrTGF5b3V0U3RhdGUoKQogewog
ICAgIEFTU0VSVChsYXlvdXREZWx0YU1hdGNoZXMoTGF5b3V0U2l6ZSgpKSk7CiAgICAgQVNTRVJU
KCFtX3BhaW50T2Zmc2V0Q2FjaGVEaXNhYmxlQ291bnQpOwogfQogI2VuZGlmCiAKLUZyYW1lJiBM
YXlvdXRDb250ZXh0OjpmcmFtZSgpIGNvbnN0CitGcmFtZSYgRnJhbWVWaWV3TGF5b3V0Q29udGV4
dDo6ZnJhbWUoKSBjb25zdAogewogICAgIHJldHVybiB2aWV3KCkuZnJhbWUoKTsKIH0KIAotRnJh
bWVWaWV3JiBMYXlvdXRDb250ZXh0Ojp2aWV3KCkgY29uc3QKK0ZyYW1lVmlldyYgRnJhbWVWaWV3
TGF5b3V0Q29udGV4dDo6dmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZnJhbWVWaWV3Owog
fQogCi1SZW5kZXJWaWV3KiBMYXlvdXRDb250ZXh0OjpyZW5kZXJWaWV3KCkgY29uc3QKK1JlbmRl
clZpZXcqIEZyYW1lVmlld0xheW91dENvbnRleHQ6OnJlbmRlclZpZXcoKSBjb25zdAogewogICAg
IHJldHVybiB2aWV3KCkucmVuZGVyVmlldygpOwogfQogCi1Eb2N1bWVudCogTGF5b3V0Q29udGV4
dDo6ZG9jdW1lbnQoKSBjb25zdAorRG9jdW1lbnQqIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmRv
Y3VtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gZnJhbWUoKS5kb2N1bWVudCgpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmgJKHJldmlz
aW9uIDIzMDk2MikJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9MYXlvdXRDb250ZXh0Lmg6MjMw
OTYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEZyYW1lOworY2xhc3Mg
RnJhbWVWaWV3OworY2xhc3MgTGF5b3V0U2NvcGU7CitjbGFzcyBMYXlvdXRTaXplOworY2xhc3Mg
TGF5b3V0U3RhdGU7CitjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CitjbGFzcyBSZW5kZXJCb3g7Citj
bGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJFbGVtZW50OworY2xhc3MgUmVuZGVyVmll
dzsKKyAgICAKK2NsYXNzIExheW91dENvbnRleHQgeworcHVibGljOgorICAgIExheW91dENvbnRl
eHQoRnJhbWVWaWV3Jik7CisgICAgfkxheW91dENvbnRleHQoKTsKKworICAgIHZvaWQgbGF5b3V0
KCk7CisKKyAgICB2b2lkIHNldE5lZWRzTGF5b3V0KCk7CisgICAgYm9vbCBuZWVkc0xheW91dCgp
IGNvbnN0OworCisgICAgdm9pZCBzY2hlZHVsZUxheW91dCgpOworICAgIHZvaWQgc2NoZWR1bGVT
dWJ0cmVlTGF5b3V0KFJlbmRlckVsZW1lbnQmIGxheW91dFJvb3QpOworICAgIHZvaWQgdW5zY2hl
ZHVsZUxheW91dCgpOworCisgICAgdm9pZCBzdGFydERpc2FsbG93aW5nTGF5b3V0KCkgeyArK21f
bGF5b3V0RGlzYWxsb3dlZENvdW50OyB9CisgICAgdm9pZCBlbmREaXNhbGxvd2luZ0xheW91dCgp
IHsgQVNTRVJUKG1fbGF5b3V0RGlzYWxsb3dlZENvdW50ID4gMCk7IC0tbV9sYXlvdXREaXNhbGxv
d2VkQ291bnQ7IH0KKyAgICAKKyAgICB2b2lkIGRpc2FibGVTZXROZWVkc0xheW91dCgpOworICAg
IHZvaWQgZW5hYmxlU2V0TmVlZHNMYXlvdXQoKTsKKworICAgIGVudW0gY2xhc3MgTGF5b3V0UGhh
c2UgeworICAgICAgICBPdXRzaWRlTGF5b3V0LAorICAgICAgICBJblByZUxheW91dCwKKyAgICAg
ICAgSW5SZW5kZXJUcmVlTGF5b3V0LAorICAgICAgICBJblZpZXdTaXplQWRqdXN0LAorICAgICAg
ICBJblBvc3RMYXlvdXQKKyAgICB9OworICAgIExheW91dFBoYXNlIGxheW91dFBoYXNlKCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXRQaGFzZTsgfQorICAgIGJvb2wgaXNMYXlvdXROZXN0ZWQoKSBj
b25zdCB7IHJldHVybiBtX2xheW91dE5lc3RlZFN0YXRlID09IExheW91dE5lc3RlZFN0YXRlOjpO
ZXN0ZWQ7IH0KKyAgICBib29sIGlzTGF5b3V0UGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
b3V0VGltZXIuaXNBY3RpdmUoKTsgfQorICAgIGJvb2wgaXNJbkxheW91dCgpIGNvbnN0IHsgcmV0
dXJuIGxheW91dFBoYXNlKCkgIT0gTGF5b3V0UGhhc2U6Ok91dHNpZGVMYXlvdXQ7IH0KKyAgICBi
b29sIGlzSW5SZW5kZXJUcmVlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbGF5b3V0UGhhc2UoKSA9
PSBMYXlvdXRQaGFzZTo6SW5SZW5kZXJUcmVlTGF5b3V0OyB9CisgICAgYm9vbCBpblBhaW50YWJs
ZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbGF5b3V0UGhhc2UoKSAhPSBMYXlvdXRQaGFzZTo6SW5S
ZW5kZXJUcmVlTGF5b3V0ICYmIGxheW91dFBoYXNlKCkgIT0gTGF5b3V0UGhhc2U6OkluVmlld1Np
emVBZGp1c3QgJiYgKGxheW91dFBoYXNlKCkgIT0gTGF5b3V0UGhhc2U6OkluUG9zdExheW91dCB8
fCBpbkFzeW5jaHJvbm91c1Rhc2tzKCkpOyB9CisKKyAgICB1bnNpZ25lZCBsYXlvdXRDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0Q291bnQ7IH0KKworICAgIFJlbmRlckVsZW1lbnQqIHN1
YnRyZWVMYXlvdXRSb290KCkgY29uc3QgeyByZXR1cm4gbV9zdWJ0cmVlTGF5b3V0Um9vdC5nZXQo
KTsgfQorICAgIHZvaWQgY2xlYXJTdWJ0cmVlTGF5b3V0Um9vdCgpIHsgbV9zdWJ0cmVlTGF5b3V0
Um9vdC5jbGVhcigpOyB9CisgICAgdm9pZCBjb252ZXJ0U3VidHJlZUxheW91dFRvRnVsbExheW91
dCgpOworCisgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgcmVzZXRGaXJzdExheW91dEZsYWco
KSB7IG1fZmlyc3RMYXlvdXQgPSB0cnVlOyB9CisgICAgYm9vbCBkaWRGaXJzdExheW91dCgpIGNv
bnN0IHsgcmV0dXJuICFtX2ZpcnN0TGF5b3V0OyB9CisKKyAgICB2b2lkIHNldE5lZWRzRnVsbFJl
cGFpbnQoKSB7IG1fbmVlZHNGdWxsUmVwYWludCA9IHRydWU7IH0KKyAgICBib29sIG5lZWRzRnVs
bFJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBtX25lZWRzRnVsbFJlcGFpbnQ7IH0KKworICAgIHZv
aWQgZmx1c2hBc3luY2hyb25vdXNUYXNrcygpOworCisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0
YXRlKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGxheW91dFN0YXRlIHNob3VsZCBi
ZSB1c2VkIGZvciBpdHMgY2FjaGVkIG9mZnNldCBhbmQgY2xpcC4KKyAgICBib29sIGlzUGFpbnRP
ZmZzZXRDYWNoZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiAhbV9wYWludE9mZnNldENhY2hlRGlz
YWJsZUNvdW50ICYmIGxheW91dFN0YXRlKCk7IH0KKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBj
aGVja0xheW91dFN0YXRlKCk7CisjZW5kaWYKKyAgICAvLyBsYXlvdXREZWx0YSBpcyB1c2VkIHRy
YW5zaWVudGx5IGR1cmluZyBsYXlvdXQgdG8gc3RvcmUgaG93IGZhciBhbiBvYmplY3QgaGFzIG1v
dmVkIGZyb20gaXRzCisgICAgLy8gbGFzdCBsYXlvdXQgbG9jYXRpb24sIGluIG9yZGVyIHRvIHJl
cGFpbnQgY29ycmVjdGx5LgorICAgIC8vIElmIHdlJ3JlIGRvaW5nIGEgZnVsbCByZXBhaW50IG1f
bGF5b3V0U3RhdGUgd2lsbCBiZSAwLCBidXQgaW4gdGhhdCBjYXNlIGxheW91dERlbHRhIGRvZXNu
J3QgbWF0dGVyLgorICAgIExheW91dFNpemUgbGF5b3V0RGVsdGEoKSBjb25zdDsKKyAgICB2b2lk
IGFkZExheW91dERlbHRhKGNvbnN0IExheW91dFNpemUmIGRlbHRhKTsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgYm9vbCBsYXlvdXREZWx0YU1hdGNoZXMoY29uc3QgTGF5b3V0U2l6ZSYgZGVs
dGEpOworI2VuZGlmCisgICAgdXNpbmcgTGF5b3V0U3RhdGVTdGFjayA9IFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8TGF5b3V0U3RhdGU+PjsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTGF5
b3V0U2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKKyAgICBm
cmllbmQgY2xhc3MgTGF5b3V0U3RhdGVEaXNhYmxlcjsKKyAgICBmcmllbmQgY2xhc3MgU3VidHJl
ZUxheW91dFN0YXRlTWFpbnRhaW5lcjsKKyAgICBmcmllbmQgY2xhc3MgUGFnaW5hdGVkTGF5b3V0
U3RhdGVNYWludGFpbmVyOworCisgICAgYm9vbCBjYW5QZXJmb3JtTGF5b3V0KCkgY29uc3Q7Cisg
ICAgYm9vbCBsYXlvdXREaXNhbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXREaXNhbGxv
d2VkQ291bnQ7IH0KKyAgICBib29sIGlzTGF5b3V0U2NoZWR1bGluZ0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2xheW91dFNjaGVkdWxpbmdJc0VuYWJsZWQ7IH0KKworICAgIHZvaWQgbGF5b3V0
VGltZXJGaXJlZCgpOworICAgIHZvaWQgcnVuQXN5bmNocm9ub3VzVGFza3MoKTsKKyAgICB2b2lk
IHJ1bk9yU2NoZWR1bGVBc3luY2hyb25vdXNUYXNrcygpOworICAgIGJvb2wgaW5Bc3luY2hyb25v
dXNUYXNrcygpIGNvbnN0IHsgcmV0dXJuIG1faW5Bc3luY2hyb25vdXNUYXNrczsgfQorCisgICAg
dm9pZCBzZXRTdWJ0cmVlTGF5b3V0Um9vdChSZW5kZXJFbGVtZW50Jik7CisKKyNpZiBFTkFCTEUo
VEVYVF9BVVRPU0laSU5HKQorICAgIHZvaWQgYXBwbHlUZXh0U2l6aW5nSWZOZWVkZWQoUmVuZGVy
RWxlbWVudCYgbGF5b3V0Um9vdCk7CisjZW5kaWYKKyAgICB2b2lkIHVwZGF0ZVN0eWxlRm9yTGF5
b3V0KCk7CisKKyAgICBib29sIGhhbmRsZUxheW91dFdpdGhGcmFtZUZsYXR0ZW5pbmdJZk5lZWRl
ZCgpOworICAgIHZvaWQgc3RhcnRMYXlvdXRBdE1haW5GcmFtZVZpZXdJZk5lZWRlZCgpOworCisg
ICAgLy8gVGhlc2UgZnVuY3Rpb25zIG1heSBvbmx5IGJlIGFjY2Vzc2VkIGJ5IExheW91dFN0YXRl
TWFpbnRhaW5lci4KKyAgICAvLyBTdWJ0cmVlIHB1c2gvcG9wCisgICAgdm9pZCBwdXNoTGF5b3V0
U3RhdGUoUmVuZGVyRWxlbWVudCYpOworICAgIGJvb2wgcHVzaExheW91dFN0YXRlRm9yUGFnaW5h
dGlvbklmTmVlZGVkKFJlbmRlckJsb2NrRmxvdyYpOworICAgIGJvb2wgcHVzaExheW91dFN0YXRl
KFJlbmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwgTGF5b3V0VW5p
dCBwYWdlSGVpZ2h0ID0gMCwgYm9vbCBwYWdlSGVpZ2h0Q2hhbmdlZCA9IGZhbHNlKTsKKyAgICB2
b2lkIHBvcExheW91dFN0YXRlKCk7CisKKyAgICAvLyBTdXNwZW5kcyB0aGUgTGF5b3V0U3RhdGUg
b3B0aW1pemF0aW9uLiBVc2VkIHVuZGVyIHRyYW5zZm9ybXMgdGhhdCBjYW5ub3QgYmUgcmVwcmVz
ZW50ZWQgYnkKKyAgICAvLyBMYXlvdXRTdGF0ZSAoY29tbW9uIGluIFNWRykgYW5kIHdoZW4gbWFu
aXB1bGF0aW5nIHRoZSByZW5kZXIgdHJlZSBkdXJpbmcgbGF5b3V0IGluIHdheXMKKyAgICAvLyB0
aGF0IGNhbiB0cmlnZ2VyIHJlcGFpbnQgb2YgYSBub24tY2hpbGQgKGUuZy4gd2hlbiBhIGxpc3Qg
aXRlbSBtb3ZlcyBpdHMgbGlzdCBtYXJrZXIgYXJvdW5kKS4KKyAgICAvLyBOb3RlIHRoYXQgZXZl
biB3aGVuIGRpc2FibGVkLCBMYXlvdXRTdGF0ZSBpcyBzdGlsbCB1c2VkIHRvIHN0b3JlIGxheW91
dERlbHRhLgorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBtYXkgb25seSBiZSBhY2Nlc3NlZCBieSBM
YXlvdXRTdGF0ZU1haW50YWluZXIgb3IgTGF5b3V0U3RhdGVEaXNhYmxlci4KKyAgICB2b2lkIGRp
c2FibGVQYWludE9mZnNldENhY2hlKCkgeyBtX3BhaW50T2Zmc2V0Q2FjaGVEaXNhYmxlQ291bnQr
KzsgfQorICAgIHZvaWQgZW5hYmxlUGFpbnRPZmZzZXRDYWNoZSgpIHsgQVNTRVJUKG1fcGFpbnRP
ZmZzZXRDYWNoZURpc2FibGVDb3VudCA+IDApOyBtX3BhaW50T2Zmc2V0Q2FjaGVEaXNhYmxlQ291
bnQtLTsgfQorCisgICAgRnJhbWUmIGZyYW1lKCkgY29uc3Q7CisgICAgRnJhbWVWaWV3JiB2aWV3
KCkgY29uc3Q7CisgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldygpIGNvbnN0OworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCgpIGNvbnN0OworCisgICAgRnJhbWVWaWV3JiBtX2ZyYW1lVmlldzsKKyAg
ICBUaW1lciBtX2xheW91dFRpbWVyOworICAgIFRpbWVyIG1fYXN5bmNocm9ub3VzVGFza3NUaW1l
cjsKKworICAgIGJvb2wgbV9sYXlvdXRTY2hlZHVsaW5nSXNFbmFibGVkIHsgdHJ1ZSB9OworICAg
IGJvb2wgbV9kZWxheWVkTGF5b3V0IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZmlyc3RMYXlvdXQg
eyB0cnVlIH07CisgICAgYm9vbCBtX25lZWRzRnVsbFJlcGFpbnQgeyB0cnVlIH07CisgICAgYm9v
bCBtX2luQXN5bmNocm9ub3VzVGFza3MgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zZXROZWVkc0xh
eW91dFdhc0RlZmVycmVkIHsgZmFsc2UgfTsKKyAgICBMYXlvdXRQaGFzZSBtX2xheW91dFBoYXNl
IHsgTGF5b3V0UGhhc2U6Ok91dHNpZGVMYXlvdXQgfTsKKyAgICBlbnVtIGNsYXNzIExheW91dE5l
c3RlZFN0YXRlIHsgTm90SW5MYXlvdXQsIE5vdE5lc3RlZCwgTmVzdGVkIH07CisgICAgTGF5b3V0
TmVzdGVkU3RhdGUgbV9sYXlvdXROZXN0ZWRTdGF0ZSB7IExheW91dE5lc3RlZFN0YXRlOjpOb3RJ
bkxheW91dCB9OworICAgIHVuc2lnbmVkIG1fbGF5b3V0Q291bnQgeyAwIH07CisgICAgdW5zaWdu
ZWQgbV9kaXNhYmxlU2V0TmVlZHNMYXlvdXRDb3VudCB7IDAgfTsKKyAgICBpbnQgbV9sYXlvdXRE
aXNhbGxvd2VkQ291bnQgeyAwIH07CisgICAgV2Vha1B0cjxSZW5kZXJFbGVtZW50PiBtX3N1YnRy
ZWVMYXlvdXRSb290OworICAgIExheW91dFN0YXRlU3RhY2sgbV9sYXlvdXRTdGF0ZVN0YWNrOwor
ICAgIHVuc2lnbmVkIG1fcGFpbnRPZmZzZXRDYWNoZURpc2FibGVDb3VudCB7IDAgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3TGF5b3V0Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3TGF5b3V0Q29udGV4dC5oCShyZXZpc2lvbiAyMzA5NjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTAg
KzQ0LDEwIEBAIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFz
cyBSZW5kZXJWaWV3OwogICAgIAotY2xhc3MgTGF5b3V0Q29udGV4dCB7CitjbGFzcyBGcmFtZVZp
ZXdMYXlvdXRDb250ZXh0IHsKIHB1YmxpYzoKLSAgICBMYXlvdXRDb250ZXh0KEZyYW1lVmlldyYp
OwotICAgIH5MYXlvdXRDb250ZXh0KCk7CisgICAgRnJhbWVWaWV3TGF5b3V0Q29udGV4dChGcmFt
ZVZpZXcmKTsKKyAgICB+RnJhbWVWaWV3TGF5b3V0Q29udGV4dCgpOwogCiAgICAgdm9pZCBsYXlv
dXQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9MYXlvdXRDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0xheW91dENvbnRleHQuY3BwCShyZXZpc2lv
biAyMzA5NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0xheW91dENvbnRleHQuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsNjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29u
dGV4dC5oIgotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUg
IkRlYnVnUGFnZU92ZXJsYXlzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNs
dWRlICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKLSNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgot
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29wZS5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0KLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KLSNpbmNs
dWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBpc09iamVjdEFuY2VzdG9y
Q29udGFpbmVyT2YoUmVuZGVyRWxlbWVudCYgYW5jZXN0b3IsIFJlbmRlckVsZW1lbnQmIGRlc2Nl
bmRhbnQpCi17Ci0gICAgZm9yIChhdXRvKiByZW5kZXJlciA9ICZkZXNjZW5kYW50OyByZW5kZXJl
cjsgcmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmVyKCkpIHsKLSAgICAgICAgaWYgKHJlbmRl
cmVyID09ICZhbmNlc3RvcikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1jbGFzcyBSZW5kZXJUcmVlTmVlZHNM
YXlvdXRDaGVja2VyIHsKLXB1YmxpYyA6Ci0gICAgUmVuZGVyVHJlZU5lZWRzTGF5b3V0Q2hlY2tl
cihjb25zdCBSZW5kZXJFbGVtZW50JiBsYXlvdXRSb290KQotICAgICAgICA6IG1fbGF5b3V0Um9v
dChsYXlvdXRSb290KQotICAgIHsKLSAgICB9Ci0KLSAgICB+UmVuZGVyVHJlZU5lZWRzTGF5b3V0
Q2hlY2tlcigpCi0gICAgewotICAgICAgICBhdXRvIHJlcG9ydE5lZWRzTGF5b3V0RXJyb3IgPSBb
XSAoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgewotICAgICAgICAgICAgV1RGUmVwb3J0
RXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAicG9zdC1sYXlv
dXQ6IGRpcnR5IHJlbmRlcmVyKHMpIik7Ci0gICAgICAgICAgICByZW5kZXJlci5zaG93UmVuZGVy
VHJlZUZvclRoaXMoKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB9OwotCi0gICAgICAgIGlmIChtX2xheW91dFJvb3QubmVlZHNMYXlvdXQoKSkgewotICAgICAg
ICAgICAgcmVwb3J0TmVlZHNMYXlvdXRFcnJvcihtX2xheW91dFJvb3QpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChhdXRvKiBkZXNjZW5kYW50ID0gbV9s
YXlvdXRSb290LmZpcnN0Q2hpbGQoKTsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2NlbmRh
bnQtPm5leHRJblByZU9yZGVyKCZtX2xheW91dFJvb3QpKSB7Ci0gICAgICAgICAgICBpZiAoIWRl
c2NlbmRhbnQtPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJlcG9ydE5lZWRzTGF5b3V0RXJyb3IoKmRlc2NlbmRhbnQp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IGNvbnN0IFJlbmRlckVsZW1lbnQmIG1fbGF5b3V0Um9vdDsKLX07Ci0jZW5kaWYKLQotY2xhc3Mg
TGF5b3V0U2NvcGUgewotcHVibGljOgotICAgIExheW91dFNjb3BlKExheW91dENvbnRleHQmIGxh
eW91dENvbnRleHQpCi0gICAgICAgIDogbV92aWV3KGxheW91dENvbnRleHQudmlldygpKQotICAg
ICAgICAsIG1fbmVzdGVkU3RhdGUobGF5b3V0Q29udGV4dC5tX2xheW91dE5lc3RlZFN0YXRlLCBs
YXlvdXRDb250ZXh0Lm1fbGF5b3V0TmVzdGVkU3RhdGUgPT0gTGF5b3V0Q29udGV4dDo6TGF5b3V0
TmVzdGVkU3RhdGU6Ok5vdEluTGF5b3V0ID8gTGF5b3V0Q29udGV4dDo6TGF5b3V0TmVzdGVkU3Rh
dGU6Ok5vdE5lc3RlZCA6IExheW91dENvbnRleHQ6OkxheW91dE5lc3RlZFN0YXRlOjpOZXN0ZWQp
Ci0gICAgICAgICwgbV9zY2hlZHVsaW5nSXNFbmFibGVkKGxheW91dENvbnRleHQubV9sYXlvdXRT
Y2hlZHVsaW5nSXNFbmFibGVkLCBmYWxzZSkKLSAgICAgICAgLCBtX2luUHJvZ3JhbW1hdGljU2Ny
b2xsKGxheW91dENvbnRleHQudmlldygpLmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpCi0gICAgewot
ICAgICAgICBtX3ZpZXcuc2V0SW5Qcm9ncmFtbWF0aWNTY3JvbGwodHJ1ZSk7Ci0gICAgfQotICAg
ICAgICAKLSAgICB+TGF5b3V0U2NvcGUoKQotICAgIHsKLSAgICAgICAgbV92aWV3LnNldEluUHJv
Z3JhbW1hdGljU2Nyb2xsKG1faW5Qcm9ncmFtbWF0aWNTY3JvbGwpOwotICAgIH0KLSAgICAgICAg
Ci1wcml2YXRlOgotICAgIEZyYW1lVmlldyYgbV92aWV3OwotICAgIFNldEZvclNjb3BlPExheW91
dENvbnRleHQ6OkxheW91dE5lc3RlZFN0YXRlPiBtX25lc3RlZFN0YXRlOwotICAgIFNldEZvclNj
b3BlPGJvb2w+IG1fc2NoZWR1bGluZ0lzRW5hYmxlZDsKLSAgICBib29sIG1faW5Qcm9ncmFtbWF0
aWNTY3JvbGwgeyBmYWxzZSB9OwotfTsKLQotTGF5b3V0Q29udGV4dDo6TGF5b3V0Q29udGV4dChG
cmFtZVZpZXcmIGZyYW1lVmlldykKLSAgICA6IG1fZnJhbWVWaWV3KGZyYW1lVmlldykKLSAgICAs
IG1fbGF5b3V0VGltZXIoKnRoaXMsICZMYXlvdXRDb250ZXh0OjpsYXlvdXRUaW1lckZpcmVkKQot
ICAgICwgbV9hc3luY2hyb25vdXNUYXNrc1RpbWVyKCp0aGlzLCAmTGF5b3V0Q29udGV4dDo6cnVu
QXN5bmNocm9ub3VzVGFza3MpCi17Ci19Ci0KLUxheW91dENvbnRleHQ6On5MYXlvdXRDb250ZXh0
KCkKLXsKLX0KLQotdm9pZCBMYXlvdXRDb250ZXh0OjpsYXlvdXQoKQotewotICAgIExPR19XSVRI
X1NUUkVBTShMYXlvdXQsIHN0cmVhbSA8PCAiRnJhbWVWaWV3ICIgPDwgJnZpZXcoKSA8PCAiIExh
eW91dENvbnRleHQ6OmxheW91dCgpIHdpdGggc2l6ZSAiIDw8IHZpZXcoKS5sYXlvdXRTaXplKCkp
OwotCi0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighZnJhbWUo
KS5kb2N1bWVudCgpLT5pblJlbmRlclRyZWVVcGRhdGUoKSB8fCBTY3JpcHREaXNhbGxvd2VkU2Nv
cGU6OkxheW91dEFzc2VydGlvbkRpc2FibGVTY29wZTo6c2hvdWxkRGlzYWJsZSgpKTsKLSAgICBB
U1NFUlQoTGF5b3V0RGlzYWxsb3dlZFNjb3BlOjppc0xheW91dEFsbG93ZWQoKSk7Ci0gICAgQVNT
RVJUKCF2aWV3KCkuaXNQYWludGluZygpKTsKLSAgICBBU1NFUlQoZnJhbWUoKS52aWV3KCkgPT0g
JnZpZXcoKSk7Ci0gICAgQVNTRVJUKGZyYW1lKCkuZG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKGZy
YW1lKCkuZG9jdW1lbnQoKS0+cGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5QYWdl
Q2FjaGUpOwotICAgIGlmICghY2FuUGVyZm9ybUxheW91dCgpKSB7Ci0gICAgICAgIExPRyhMYXlv
dXQsICIgIGlzIG5vdCBhbGxvd2VkLCBiYWlsaW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZWY8RnJhbWVWaWV3PiBwcm90ZWN0Vmlldyh2aWV3KCkpOwotICAgIExheW91dFNj
b3BlIGxheW91dFNjb3BlKCp0aGlzKTsKLSAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShMYXlv
dXRTdGFydCwgTGF5b3V0RW5kKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
aW5zcGVjdG9yTGF5b3V0U2NvcGUoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTGF5b3V0
KHZpZXcoKS5mcmFtZSgpKSk7Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBk
YXRlQmxvY2soJnZpZXcoKS5mcmFtZSgpLmFuaW1hdGlvbigpKTsKLSAgICBXZWFrUHRyPFJlbmRl
ckVsZW1lbnQ+IGxheW91dFJvb3Q7Ci0gICAgCi0gICAgbV9sYXlvdXRUaW1lci5zdG9wKCk7Ci0g
ICAgbV9kZWxheWVkTGF5b3V0ID0gZmFsc2U7Ci0gICAgbV9zZXROZWVkc0xheW91dFdhc0RlZmVy
cmVkID0gZmFsc2U7Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKG1fZmlyc3RMYXlvdXQg
JiYgIWZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIExPRyhMYXlvdXQsICJGcmFtZVZp
ZXcgJXAgZWxhcHNlZCB0aW1lIGJlZm9yZSBmaXJzdCBsYXlvdXQ6ICUuM2ZzIiwgdGhpcywgZG9j
dW1lbnQoKS0+dGltZVNpbmNlRG9jdW1lbnRDcmVhdGlvbigpLnZhbHVlKCkpOwotI2VuZGlmCi0j
aWYgUExBVEZPUk0oSU9TKQotICAgIGlmICh2aWV3KCkudXBkYXRlRml4ZWRQb3NpdGlvbkxheW91
dFJlY3QoKSAmJiBzdWJ0cmVlTGF5b3V0Um9vdCgpKQotICAgICAgICBjb252ZXJ0U3VidHJlZUxh
eW91dFRvRnVsbExheW91dCgpOwotI2VuZGlmCi0gICAgaWYgKGhhbmRsZUxheW91dFdpdGhGcmFt
ZUZsYXR0ZW5pbmdJZk5lZWRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB7Ci0gICAgICAg
IFNldEZvclNjb3BlPExheW91dFBoYXNlPiBsYXlvdXRQaGFzZShtX2xheW91dFBoYXNlLCBMYXlv
dXRQaGFzZTo6SW5QcmVMYXlvdXQpOwotCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSBuZXcgdG9w
LWxldmVsIGxheW91dCBhbmQgdGhlcmUgYXJlIGFueSByZW1haW5pbmcgdGFza3MgZnJvbSB0aGUg
cHJldmlvdXMgbGF5b3V0LCBmaW5pc2ggdGhlbSBub3cuCi0gICAgICAgIGlmICghaXNMYXlvdXRO
ZXN0ZWQoKSAmJiBtX2FzeW5jaHJvbm91c1Rhc2tzVGltZXIuaXNBY3RpdmUoKSAmJiAhdmlldygp
LmlzSW5DaGlsZEZyYW1lV2l0aEZyYW1lRmxhdHRlbmluZygpKQotICAgICAgICAgICAgcnVuQXN5
bmNocm9ub3VzVGFza3MoKTsKLQotICAgICAgICB1cGRhdGVTdHlsZUZvckxheW91dCgpOwotICAg
ICAgICBpZiAodmlldygpLmhhc09uZVJlZigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHZpZXcoKS5hdXRvU2l6ZUlmRW5hYmxlZCgpOwotICAgICAgICBpZiAoIXJlbmRlclZpZXco
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBsYXlvdXRSb290ID0gbWFrZVdlYWtQ
dHIoc3VidHJlZUxheW91dFJvb3QoKSA/IHN1YnRyZWVMYXlvdXRSb290KCkgOiByZW5kZXJWaWV3
KCkpOwotICAgICAgICBtX25lZWRzRnVsbFJlcGFpbnQgPSBpczxSZW5kZXJWaWV3PihsYXlvdXRS
b290LmdldCgpKSAmJiAobV9maXJzdExheW91dCB8fCByZW5kZXJWaWV3KCktPnByaW50aW5nKCkp
OwotICAgICAgICB2aWV3KCkud2lsbERvTGF5b3V0KGxheW91dFJvb3QpOwotICAgICAgICBtX2Zp
cnN0TGF5b3V0ID0gZmFsc2U7Ci0gICAgfQotICAgIHsKLSAgICAgICAgU2V0Rm9yU2NvcGU8TGF5
b3V0UGhhc2U+IGxheW91dFBoYXNlKG1fbGF5b3V0UGhhc2UsIExheW91dFBoYXNlOjpJblJlbmRl
clRyZWVMYXlvdXQpOwotICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVh
ZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7Ci0gICAgICAgIFN1YnRyZWVMYXlvdXRTdGF0ZU1haW50
YWluZXIgc3VidHJlZUxheW91dFN0YXRlTWFpbnRhaW5lcihzdWJ0cmVlTGF5b3V0Um9vdCgpKTsK
LSAgICAgICAgUmVuZGVyVmlldzo6UmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yIHJlcGFpbnRSZWdp
b25BY2N1bXVsYXRvcihyZW5kZXJWaWV3KCkpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgUmVu
ZGVyVHJlZU5lZWRzTGF5b3V0Q2hlY2tlciBjaGVja2VyKCpsYXlvdXRSb290KTsKLSNlbmRpZgot
ICAgICAgICBsYXlvdXRSb290LT5sYXlvdXQoKTsKLSAgICAgICAgKyttX2xheW91dENvdW50Owot
I2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgICAgIGFwcGx5VGV4dFNpemluZ0lmTmVl
ZGVkKCpsYXlvdXRSb290LmdldCgpKTsKLSNlbmRpZgotICAgICAgICBjbGVhclN1YnRyZWVMYXlv
dXRSb290KCk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgU2V0Rm9yU2NvcGU8TGF5b3V0UGhhc2U+
IGxheW91dFBoYXNlKG1fbGF5b3V0UGhhc2UsIExheW91dFBoYXNlOjpJblZpZXdTaXplQWRqdXN0
KTsKLSAgICAgICAgaWYgKGlzPFJlbmRlclZpZXc+KGxheW91dFJvb3QuZ2V0KCkpICYmICFyZW5k
ZXJWaWV3KCktPnByaW50aW5nKCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gcHJvdGVj
dCBtX25lZWRzRnVsbFJlcGFpbnQncyB2YWx1ZSB3aGVuIGxheW91dCgpIGlzIGdldHRpbmcgcmUt
ZW50ZXJlZCB0aHJvdWdoIGFkanVzdFZpZXdTaXplKCkuCi0gICAgICAgICAgICBTZXRGb3JTY29w
ZTxib29sPiBuZWVkc0Z1bGxSZXBhaW50KG1fbmVlZHNGdWxsUmVwYWludCk7Ci0gICAgICAgICAg
ICB2aWV3KCkuYWRqdXN0Vmlld1NpemUoKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBGaXJpbmcg
bWVkaWEgcXVlcnkgY2FsbGJhY2tzIHN5bmNocm9ub3VzbHkgb24gbmVzdGVkIGZyYW1lcyBjb3Vs
ZCBwcm9kdWNlZCBhIGRldGFjaGVkIEZyYW1lVmlldyBoZXJlIGJ5Ci0gICAgICAgICAgICAvLyBu
YXZpZ2F0aW5nIGF3YXkgZnJvbSB0aGUgY3VycmVudCBkb2N1bWVudCAoc2VlIHdlYmtpdC5vcmcv
Yi8xNzMzMjkpLgotICAgICAgICAgICAgaWYgKHZpZXcoKS5oYXNPbmVSZWYoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgewotICAgICAgICBTZXRGb3JT
Y29wZTxMYXlvdXRQaGFzZT4gbGF5b3V0UGhhc2UobV9sYXlvdXRQaGFzZSwgTGF5b3V0UGhhc2U6
OkluUG9zdExheW91dCk7Ci0gICAgICAgIGlmIChtX25lZWRzRnVsbFJlcGFpbnQpCi0gICAgICAg
ICAgICByZW5kZXJWaWV3KCktPnJlcGFpbnRSb290Q29udGVudHMoKTsKLSAgICAgICAgQVNTRVJU
KCFsYXlvdXRSb290LT5uZWVkc0xheW91dCgpKTsKLSAgICAgICAgdmlldygpLmRpZExheW91dChs
YXlvdXRSb290KTsKLSAgICAgICAgcnVuT3JTY2hlZHVsZUFzeW5jaHJvbm91c1Rhc2tzKCk7Ci0g
ICAgfQotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTGF5b3V0KGluc3BlY3Rvckxh
eW91dFNjb3BlLCAqbGF5b3V0Um9vdCk7Ci0gICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91
dCh2aWV3KCkuZnJhbWUoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0Q29udGV4dDo6cnVuT3JTY2hlZHVs
ZUFzeW5jaHJvbm91c1Rhc2tzKCkKLXsKLSAgICBpZiAobV9hc3luY2hyb25vdXNUYXNrc1RpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh2aWV3KCkuaXNJbkNoaWxk
RnJhbWVXaXRoRnJhbWVGbGF0dGVuaW5nKCkpIHsKLSAgICAgICAgLy8gV2hpbGUgZmxhdHRlbmlu
ZyBmcmFtZXMsIHdlIGRlZmVyIHBvc3QgbGF5b3V0IHRhc2tzIHRvIGF2b2lkIGdldHRpbmcgc3R1
Y2sgaW4gYSBjeWNsZSwKLSAgICAgICAgLy8gZXhjZXB0IHVwZGF0ZVdpZGdldFBvc2l0aW9ucygp
IHdoaWNoIGlzIHJlcXVpcmVkIHRvIGtpY2sgb2ZmIHN1YmZyYW1lIGxheW91dCBpbiBjZXJ0YWlu
IGNhc2VzLgotICAgICAgICBpZiAoIW1faW5Bc3luY2hyb25vdXNUYXNrcykKLSAgICAgICAgICAg
IHZpZXcoKS51cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLSAgICAgICAgbV9hc3luY2hyb25vdXNU
YXNrc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgaW4gcGVyZm9ybVBvc3RMYXlvdXRUYXNrcygpLCBkZWZl
ciBwb3N0IGxheW91dCB0YXNrcyB1bnRpbCBhZnRlciB3ZSByZXR1cm4KLSAgICAvLyB0byBhdm9p
ZCByZS1lbnRyYW5jeS4KLSAgICBpZiAobV9pbkFzeW5jaHJvbm91c1Rhc2tzKSB7Ci0gICAgICAg
IG1fYXN5bmNocm9ub3VzVGFza3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHJ1bkFzeW5jaHJvbm91c1Rhc2tzKCk7Ci0gICAgaWYgKG5lZWRz
TGF5b3V0KCkpIHsKLSAgICAgICAgLy8gSWYgcnVuQXN5bmNocm9ub3VzVGFza3MoKSBtYWRlIHVz
IGxheW91dCBhZ2FpbiwgbGV0J3MgZGVmZXIgdGhlIHRhc2tzIHVudGlsIGFmdGVyIHdlIHJldHVy
bi4KLSAgICAgICAgbV9hc3luY2hyb25vdXNUYXNrc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwot
ICAgICAgICBsYXlvdXQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5b3V0Q29udGV4dDo6cnVuQXN5
bmNocm9ub3VzVGFza3MoKQotewotICAgIG1fYXN5bmNocm9ub3VzVGFza3NUaW1lci5zdG9wKCk7
Ci0gICAgaWYgKG1faW5Bc3luY2hyb25vdXNUYXNrcykKLSAgICAgICAgcmV0dXJuOwotICAgIFNl
dEZvclNjb3BlPGJvb2w+IGluQXN5bmNocm9ub3VzVGFza3MobV9pbkFzeW5jaHJvbm91c1Rhc2tz
LCB0cnVlKTsKLSAgICB2aWV3KCkucGVyZm9ybVBvc3RMYXlvdXRUYXNrcygpOwotfQotCi12b2lk
IExheW91dENvbnRleHQ6OmZsdXNoQXN5bmNocm9ub3VzVGFza3MoKQotewotICAgIGlmICghbV9h
c3luY2hyb25vdXNUYXNrc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBy
dW5Bc3luY2hyb25vdXNUYXNrcygpOwotfQotCi12b2lkIExheW91dENvbnRleHQ6OnJlc2V0KCkK
LXsKLSAgICBtX2xheW91dFBoYXNlID0gTGF5b3V0UGhhc2U6Ok91dHNpZGVMYXlvdXQ7Ci0gICAg
Y2xlYXJTdWJ0cmVlTGF5b3V0Um9vdCgpOwotICAgIG1fbGF5b3V0Q291bnQgPSAwOwotICAgIG1f
bGF5b3V0U2NoZWR1bGluZ0lzRW5hYmxlZCA9IHRydWU7Ci0gICAgbV9kZWxheWVkTGF5b3V0ID0g
ZmFsc2U7Ci0gICAgbV9sYXlvdXRUaW1lci5zdG9wKCk7Ci0gICAgbV9maXJzdExheW91dCA9IHRy
dWU7Ci0gICAgbV9hc3luY2hyb25vdXNUYXNrc1RpbWVyLnN0b3AoKTsKLSAgICBtX25lZWRzRnVs
bFJlcGFpbnQgPSB0cnVlOwotfQotCi1ib29sIExheW91dENvbnRleHQ6Om5lZWRzTGF5b3V0KCkg
Y29uc3QKLXsKLSAgICAvLyBUaGlzIGNhbiByZXR1cm4gdHJ1ZSBpbiBjYXNlcyB3aGVyZSB0aGUg
ZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhIGJvZHkgeWV0LgotICAgIC8vIERvY3VtZW50OjpzaG91
bGRTY2hlZHVsZUxheW91dCB0YWtlcyBjYXJlIG9mIHByZXZlbnRpbmcgdXMgZnJvbSBzY2hlZHVs
aW5nCi0gICAgLy8gbGF5b3V0IGluIHRoYXQgY2FzZS4KLSAgICBhdXRvKiByZW5kZXJWaWV3ID0g
dGhpcy0+cmVuZGVyVmlldygpOwotICAgIHJldHVybiBpc0xheW91dFBlbmRpbmcoKQotICAgICAg
ICB8fCAocmVuZGVyVmlldyAmJiByZW5kZXJWaWV3LT5uZWVkc0xheW91dCgpKQotICAgICAgICB8
fCBzdWJ0cmVlTGF5b3V0Um9vdCgpCi0gICAgICAgIHx8IChtX2Rpc2FibGVTZXROZWVkc0xheW91
dENvdW50ICYmIG1fc2V0TmVlZHNMYXlvdXRXYXNEZWZlcnJlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0
Q29udGV4dDo6c2V0TmVlZHNMYXlvdXQoKQotewotICAgIGlmIChtX2Rpc2FibGVTZXROZWVkc0xh
eW91dENvdW50KSB7Ci0gICAgICAgIG1fc2V0TmVlZHNMYXlvdXRXYXNEZWZlcnJlZCA9IHRydWU7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IHRo
aXMtPnJlbmRlclZpZXcoKSkgewotICAgICAgICBBU1NFUlQoIXJlbmRlclZpZXctPmluSGl0VGVz
dGluZygpKTsKLSAgICAgICAgcmVuZGVyVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgTGF5b3V0Q29udGV4dDo6ZW5hYmxlU2V0TmVlZHNMYXlvdXQoKQotewotICAgIEFT
U0VSVChtX2Rpc2FibGVTZXROZWVkc0xheW91dENvdW50KTsKLSAgICBpZiAoIS0tbV9kaXNhYmxl
U2V0TmVlZHNMYXlvdXRDb3VudCkKLSAgICAgICAgbV9zZXROZWVkc0xheW91dFdhc0RlZmVycmVk
ID0gZmFsc2U7IC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIG1ha2UgdGhlIGRlZmVycmVkIGxheW91
dCBhY3R1YWxseSBoYXBwZW4uCi19Ci0KLXZvaWQgTGF5b3V0Q29udGV4dDo6ZGlzYWJsZVNldE5l
ZWRzTGF5b3V0KCkKLXsKLSAgICArK21fZGlzYWJsZVNldE5lZWRzTGF5b3V0Q291bnQ7Ci19Ci0K
LXZvaWQgTGF5b3V0Q29udGV4dDo6c2NoZWR1bGVMYXlvdXQoKQotewotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYXNzZXJ0IHRoZSBwYWdlIGlzIG5vdCBpbiB0aGUgcGFnZSBjYWNoZSwgYnV0IHRo
YXQgaXMgY2F1c2luZwotICAgIC8vIHRvbyBtYW55IGZhbHNlIGFzc2VydGlvbnMuIFNlZSA8cmRh
cjovL3Byb2JsZW0vNzIxODExOD4uCi0gICAgQVNTRVJUKGZyYW1lKCkudmlldygpID09ICZ2aWV3
KCkpOwotCi0gICAgaWYgKHN1YnRyZWVMYXlvdXRSb290KCkpCi0gICAgICAgIGNvbnZlcnRTdWJ0
cmVlTGF5b3V0VG9GdWxsTGF5b3V0KCk7Ci0gICAgaWYgKCFpc0xheW91dFNjaGVkdWxpbmdFbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW5lZWRzTGF5b3V0KCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIWZyYW1lKCkuZG9jdW1lbnQoKS0+c2hvdWxkU2NoZWR1bGVMYXlv
dXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
SW52YWxpZGF0ZUxheW91dChmcmFtZSgpKTsKLSAgICAvLyBXaGVuIGZyYW1lIGZsYXR0ZW5pbmcg
aXMgZW5hYmxlZCwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmcmFtZSBjb3VsZCBhZmZlY3QgdGhlIGxh
eW91dCBvZiB0aGUgcGFyZW50IGZyYW1lcy4KLSAgICAvLyBBbHNvIGludmFsaWRhdGUgcGFyZW50
IGZyYW1lIHN0YXJ0aW5nIGZyb20gdGhlIG93bmVyIGVsZW1lbnQgb2YgdGhpcyBmcmFtZS4KLSAg
ICBpZiAoZnJhbWUoKS5vd25lclJlbmRlcmVyKCkgJiYgdmlldygpLmlzSW5DaGlsZEZyYW1lV2l0
aEZyYW1lRmxhdHRlbmluZygpKQotICAgICAgICBmcmFtZSgpLm93bmVyUmVuZGVyZXIoKS0+c2V0
TmVlZHNMYXlvdXQoTWFya0NvbnRhaW5pbmdCbG9ja0NoYWluKTsKLQotICAgIFNlY29uZHMgZGVs
YXkgPSBmcmFtZSgpLmRvY3VtZW50KCktPm1pbmltdW1MYXlvdXREZWxheSgpOwotICAgIGlmICht
X2xheW91dFRpbWVyLmlzQWN0aXZlKCkgJiYgbV9kZWxheWVkTGF5b3V0ICYmICFkZWxheSkKLSAg
ICAgICAgdW5zY2hlZHVsZUxheW91dCgpOwotCi0gICAgaWYgKG1fbGF5b3V0VGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kZWxheWVkTGF5b3V0ID0gZGVsYXkudmFs
dWUoKTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAoIWZyYW1lKCkuZG9jdW1lbnQoKS0+
b3duZXJFbGVtZW50KCkpCi0gICAgICAgIExPRyhMYXlvdXQsICJGcmFtZVZpZXcgJXAgc2NoZWR1
bGluZyBsYXlvdXQgZm9yICUuM2ZzIiwgdGhpcywgZGVsYXkudmFsdWUoKSk7Ci0jZW5kaWYKLQot
ICAgIG1fbGF5b3V0VGltZXIuc3RhcnRPbmVTaG90KGRlbGF5KTsKLX0KLQotdm9pZCBMYXlvdXRD
b250ZXh0Ojp1bnNjaGVkdWxlTGF5b3V0KCkKLXsKLSAgICBpZiAobV9hc3luY2hyb25vdXNUYXNr
c1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fYXN5bmNocm9ub3VzVGFza3NUaW1lci5zdG9w
KCk7Ci0KLSAgICBpZiAoIW1fbGF5b3V0VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGlmICghZnJhbWUoKS5kb2N1bWVudCgpLT5vd25l
ckVsZW1lbnQoKSkKLSAgICAgICAgTE9HKExheW91dCwgIkZyYW1lVmlldyAlcCBsYXlvdXQgdGlt
ZXIgdW5zY2hlZHVsZWQgYXQgJS4zZnMiLCB0aGlzLCBmcmFtZSgpLmRvY3VtZW50KCktPnRpbWVT
aW5jZURvY3VtZW50Q3JlYXRpb24oKS52YWx1ZSgpKTsKLSNlbmRpZgotCi0gICAgbV9sYXlvdXRU
aW1lci5zdG9wKCk7Ci0gICAgbV9kZWxheWVkTGF5b3V0ID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5
b3V0Q29udGV4dDo6c2NoZWR1bGVTdWJ0cmVlTGF5b3V0KFJlbmRlckVsZW1lbnQmIGxheW91dFJv
b3QpCi17Ci0gICAgQVNTRVJUKHJlbmRlclZpZXcoKSk7Ci0gICAgYXV0byYgcmVuZGVyVmlldyA9
ICp0aGlzLT5yZW5kZXJWaWV3KCk7Ci0KLSAgICAvLyBUcnkgdG8gY2F0Y2ggdW5uZWNlc3Nhcnkg
d29yayBkdXJpbmcgcmVuZGVyIHRyZWUgdGVhcmRvd24uCi0gICAgQVNTRVJUKCFyZW5kZXJWaWV3
LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKTsKLSAgICBBU1NFUlQoZnJhbWUoKS52aWV3KCkg
PT0gJnZpZXcoKSk7Ci0KLSAgICBpZiAocmVuZGVyVmlldy5uZWVkc0xheW91dCgpICYmICFzdWJ0
cmVlTGF5b3V0Um9vdCgpKSB7Ci0gICAgICAgIGxheW91dFJvb3QubWFya0NvbnRhaW5pbmdCbG9j
a3NGb3JMYXlvdXQoU2NoZWR1bGVSZWxheW91dDo6Tm8pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFpc0xheW91dFBlbmRpbmcoKSAmJiBpc0xheW91dFNjaGVkdWxpbmdFbmFi
bGVkKCkpIHsKLSAgICAgICAgU2Vjb25kcyBkZWxheSA9IHJlbmRlclZpZXcuZG9jdW1lbnQoKS5t
aW5pbXVtTGF5b3V0RGVsYXkoKTsKLSAgICAgICAgQVNTRVJUKCFsYXlvdXRSb290LmNvbnRhaW5l
cigpIHx8IGlzPFJlbmRlclZpZXc+KGxheW91dFJvb3QuY29udGFpbmVyKCkpIHx8ICFsYXlvdXRS
b290LmNvbnRhaW5lcigpLT5uZWVkc0xheW91dCgpKTsKLSAgICAgICAgc2V0U3VidHJlZUxheW91
dFJvb3QobGF5b3V0Um9vdCk7Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
SW52YWxpZGF0ZUxheW91dChmcmFtZSgpKTsKLSAgICAgICAgbV9kZWxheWVkTGF5b3V0ID0gZGVs
YXkudmFsdWUoKTsKLSAgICAgICAgbV9sYXlvdXRUaW1lci5zdGFydE9uZVNob3QoZGVsYXkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogc3VidHJlZUxheW91dFJvb3QgPSB0
aGlzLT5zdWJ0cmVlTGF5b3V0Um9vdCgpOwotICAgIGlmIChzdWJ0cmVlTGF5b3V0Um9vdCA9PSAm
bGF5b3V0Um9vdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzdWJ0cmVlTGF5b3V0Um9v
dCkgewotICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBwZW5kaW5nIChmdWxsKSBsYXlvdXQu
IEp1c3QgbWFyayB0aGUgc3VidHJlZSBmb3IgbGF5b3V0LgotICAgICAgICBsYXlvdXRSb290Lm1h
cmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KFNjaGVkdWxlUmVsYXlvdXQ6Ok5vKTsKLSAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlTGF5b3V0KGZyYW1lKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzT2JqZWN0QW5jZXN0b3JDb250
YWluZXJPZigqc3VidHJlZUxheW91dFJvb3QsIGxheW91dFJvb3QpKSB7Ci0gICAgICAgIC8vIEtl
ZXAgdGhlIGN1cnJlbnQgcm9vdC4KLSAgICAgICAgbGF5b3V0Um9vdC5tYXJrQ29udGFpbmluZ0Js
b2Nrc0ZvckxheW91dChTY2hlZHVsZVJlbGF5b3V0OjpObywgc3VidHJlZUxheW91dFJvb3QpOwot
ICAgICAgICBBU1NFUlQoIXN1YnRyZWVMYXlvdXRSb290LT5jb250YWluZXIoKSB8fCBpczxSZW5k
ZXJWaWV3PihzdWJ0cmVlTGF5b3V0Um9vdC0+Y29udGFpbmVyKCkpIHx8ICFzdWJ0cmVlTGF5b3V0
Um9vdC0+Y29udGFpbmVyKCktPm5lZWRzTGF5b3V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKGlzT2JqZWN0QW5jZXN0b3JDb250YWluZXJPZihsYXlvdXRSb290LCAqc3Vi
dHJlZUxheW91dFJvb3QpKSB7Ci0gICAgICAgIC8vIFJlLXJvb3QgYXQgbmV3UmVsYXlvdXRSb290
LgotICAgICAgICBzdWJ0cmVlTGF5b3V0Um9vdC0+bWFya0NvbnRhaW5pbmdCbG9ja3NGb3JMYXlv
dXQoU2NoZWR1bGVSZWxheW91dDo6Tm8sICZsYXlvdXRSb290KTsKLSAgICAgICAgc2V0U3VidHJl
ZUxheW91dFJvb3QobGF5b3V0Um9vdCk7Ci0gICAgICAgIEFTU0VSVCghbGF5b3V0Um9vdC5jb250
YWluZXIoKSB8fCBpczxSZW5kZXJWaWV3PihsYXlvdXRSb290LmNvbnRhaW5lcigpKSB8fCAhbGF5
b3V0Um9vdC5jb250YWluZXIoKS0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZUxheW91dChmcmFtZSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAvLyBUd28gZGlzam9pbnQgc3VidHJlZXMgbmVlZCBsYXlvdXQuIE1h
cmsgYm90aCBvZiB0aGVtIGFuZCBpc3N1ZSBhIGZ1bGwgbGF5b3V0IGluc3RlYWQuCi0gICAgY29u
dmVydFN1YnRyZWVMYXlvdXRUb0Z1bGxMYXlvdXQoKTsKLSAgICBsYXlvdXRSb290Lm1hcmtDb250
YWluaW5nQmxvY2tzRm9yTGF5b3V0KFNjaGVkdWxlUmVsYXlvdXQ6Ok5vKTsKLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVMYXlvdXQoZnJhbWUoKSk7Ci19Ci0KLXZv
aWQgTGF5b3V0Q29udGV4dDo6bGF5b3V0VGltZXJGaXJlZCgpCi17Ci0jaWYgIUxPR19ESVNBQkxF
RAotICAgIGlmICghZnJhbWUoKS5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKLSAgICAgICAg
TE9HKExheW91dCwgIkZyYW1lVmlldyAlcCBsYXlvdXQgdGltZXIgZmlyZWQgYXQgJS4zZnMiLCB0
aGlzLCBmcmFtZSgpLmRvY3VtZW50KCktPnRpbWVTaW5jZURvY3VtZW50Q3JlYXRpb24oKS52YWx1
ZSgpKTsKLSNlbmRpZgotICAgIGxheW91dCgpOwotfQotCi12b2lkIExheW91dENvbnRleHQ6OmNv
bnZlcnRTdWJ0cmVlTGF5b3V0VG9GdWxsTGF5b3V0KCkKLXsKLSAgICBBU1NFUlQoc3VidHJlZUxh
eW91dFJvb3QoKSk7Ci0gICAgc3VidHJlZUxheW91dFJvb3QoKS0+bWFya0NvbnRhaW5pbmdCbG9j
a3NGb3JMYXlvdXQoU2NoZWR1bGVSZWxheW91dDo6Tm8pOwotICAgIGNsZWFyU3VidHJlZUxheW91
dFJvb3QoKTsKLX0KLQotdm9pZCBMYXlvdXRDb250ZXh0OjpzZXRTdWJ0cmVlTGF5b3V0Um9vdChS
ZW5kZXJFbGVtZW50JiBsYXlvdXRSb290KQotewotICAgIG1fc3VidHJlZUxheW91dFJvb3QgPSBt
YWtlV2Vha1B0cihsYXlvdXRSb290KTsKLX0KLQotYm9vbCBMYXlvdXRDb250ZXh0OjpjYW5QZXJm
b3JtTGF5b3V0KCkgY29uc3QKLXsKLSAgICBpZiAoaXNJblJlbmRlclRyZWVMYXlvdXQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGxheW91dERpc2FsbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZpZXcoKS5pc1BhaW50aW5nKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3VidHJlZUxheW91dFJvb3QoKSAmJiAhZnJhbWUo
KS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKLXZvaWQgTGF5
b3V0Q29udGV4dDo6YXBwbHlUZXh0U2l6aW5nSWZOZWVkZWQoUmVuZGVyRWxlbWVudCYgbGF5b3V0
Um9vdCkKLXsKLSAgICBhdXRvJiBzZXR0aW5ncyA9IGxheW91dFJvb3Quc2V0dGluZ3MoKTsKLSAg
ICBpZiAoIXNldHRpbmdzLnRleHRBdXRvc2l6aW5nRW5hYmxlZCgpIHx8IHJlbmRlclZpZXcoKS0+
cHJpbnRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gbWluaW11bVpvb21Gb250U2l6
ZSA9IHNldHRpbmdzLm1pbmltdW1ab29tRm9udFNpemUoKTsKLSAgICBpZiAoIW1pbmltdW1ab29t
Rm9udFNpemUpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIHRleHRBdXRvc2l6aW5nV2lkdGgg
PSBsYXlvdXRSb290LnBhZ2UoKS50ZXh0QXV0b3NpemluZ1dpZHRoKCk7Ci0gICAgaWYgKGF1dG8g
b3ZlcnJpZGVXaWR0aCA9IHNldHRpbmdzLnRleHRBdXRvc2l6aW5nV2luZG93U2l6ZU92ZXJyaWRl
KCkud2lkdGgoKSkKLSAgICAgICAgdGV4dEF1dG9zaXppbmdXaWR0aCA9IG92ZXJyaWRlV2lkdGg7
Ci0gICAgaWYgKCF0ZXh0QXV0b3NpemluZ1dpZHRoKQotICAgICAgICByZXR1cm47Ci0gICAgbGF5
b3V0Um9vdC5hZGp1c3RDb21wdXRlZEZvbnRTaXplc09uQmxvY2tzKG1pbmltdW1ab29tRm9udFNp
emUsIHRleHRBdXRvc2l6aW5nV2lkdGgpOwotICAgIGlmICghbGF5b3V0Um9vdC5uZWVkc0xheW91
dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgTE9HKFRleHRBdXRvc2l6aW5nLCAiVGV4dCBBdXRv
c2l6aW5nOiBtaW5pbXVtWm9vbUZvbnRTaXplPSUuMmYgdGV4dEF1dG9zaXppbmdXaWR0aD0lLjJm
IiwgbWluaW11bVpvb21Gb250U2l6ZSwgdGV4dEF1dG9zaXppbmdXaWR0aCk7Ci0gICAgbGF5b3V0
Um9vdC5sYXlvdXQoKTsKLX0KLSNlbmRpZgotCi12b2lkIExheW91dENvbnRleHQ6OnVwZGF0ZVN0
eWxlRm9yTGF5b3V0KCkKLXsKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSAqZnJhbWUoKS5kb2N1
bWVudCgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0
IHNlZSByZGFyOi8vcHJvYmxlbS8zNjY3MDI0Ni4KLSAgICBpZiAoIWRvY3VtZW50LnN0eWxlU2Nv
cGUoKS5yZXNvbHZlcklmRXhpc3RzKCkpCi0gICAgICAgIGRvY3VtZW50LnN0eWxlU2NvcGUoKS5k
aWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKLQotICAgIC8vIFZpZXdwb3J0LWRlcGVu
ZGVudCBtZWRpYSBxdWVyaWVzIG1heSBjYXVzZSB1cyB0byBuZWVkIGNvbXBsZXRlbHkgZGlmZmVy
ZW50IHN0eWxlIGluZm9ybWF0aW9uLgotICAgIGRvY3VtZW50LnN0eWxlU2NvcGUoKS5ldmFsdWF0
ZU1lZGlhUXVlcmllc0ZvclZpZXdwb3J0Q2hhbmdlKCk7Ci0KLSAgICBkb2N1bWVudC5ldmFsdWF0
ZU1lZGlhUXVlcnlMaXN0KCk7Ci0gICAgLy8gSWYgdGhlcmUgaXMgYW55IHBhZ2luYXRpb24gdG8g
YXBwbHksIGl0IHdpbGwgYWZmZWN0IHRoZSBSZW5kZXJWaWV3J3Mgc3R5bGUsIHNvIHdlIHNob3Vs
ZAotICAgIC8vIHRha2UgY2FyZSBvZiB0aGF0IG5vdy4KLSAgICB2aWV3KCkuYXBwbHlQYWdpbmF0
aW9uVG9WaWV3cG9ydCgpOwotICAgIC8vIEFsd2F5cyBlbnN1cmUgb3VyIHN0eWxlIGluZm8gaXMg
dXAtdG8tZGF0ZS4gVGhpcyBjYW4gaGFwcGVuIGluIHNpdHVhdGlvbnMgd2hlcmUKLSAgICAvLyB0
aGUgbGF5b3V0IGJlYXRzIGFueSBzb3J0IG9mIHN0eWxlIHJlY2FsYyB1cGRhdGUgdGhhdCBuZWVk
cyB0byBvY2N1ci4KLSAgICBkb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci19Ci0KLWJv
b2wgTGF5b3V0Q29udGV4dDo6aGFuZGxlTGF5b3V0V2l0aEZyYW1lRmxhdHRlbmluZ0lmTmVlZGVk
KCkKLXsKLSAgICBpZiAoIXZpZXcoKS5pc0luQ2hpbGRGcmFtZVdpdGhGcmFtZUZsYXR0ZW5pbmco
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHN0YXJ0TGF5b3V0QXRNYWluRnJh
bWVWaWV3SWZOZWVkZWQoKTsKLSAgICBhdXRvKiBsYXlvdXRSb290ID0gc3VidHJlZUxheW91dFJv
b3QoKSA/IHN1YnRyZWVMYXlvdXRSb290KCkgOiBmcmFtZSgpLmRvY3VtZW50KCktPnJlbmRlclZp
ZXcoKTsKLSAgICByZXR1cm4gIWxheW91dFJvb3QgfHwgIWxheW91dFJvb3QtPm5lZWRzTGF5b3V0
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0Q29udGV4dDo6c3RhcnRMYXlvdXRBdE1haW5GcmFtZVZpZXdJ
Zk5lZWRlZCgpCi17Ci0gICAgLy8gV2hlbiB3ZSBzdGFydCBhIGxheW91dCBhdCB0aGUgY2hpbGQg
bGV2ZWwgYXMgb3Bwb3NlZCB0byB0aGUgdG9wbW9zdCBmcmFtZSB2aWV3IGFuZCB0aGlzIGNoaWxk
Ci0gICAgLy8gZnJhbWUgcmVxdWlyZXMgZmxhdHRlbmluZywgd2UgbmVlZCB0byByZS1pbml0aWF0
ZSB0aGUgbGF5b3V0IGF0IHRoZSB0b3Btb3N0IHZpZXcuIExheW91dAotICAgIC8vIHdpbGwgaGl0
IHRoaXMgdmlldyBldmVudHVhbGx5LgotICAgIGF1dG8qIHBhcmVudFZpZXcgPSB2aWV3KCkucGFy
ZW50RnJhbWVWaWV3KCk7Ci0gICAgaWYgKCFwYXJlbnRWaWV3KQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBJbiB0aGUgbWlkZGxlIG9mIHBhcmVudCBsYXlvdXQsIG5vIG5lZWQgdG8gcmVzdGFy
dCBmcm9tIHRvcG1vc3QuCi0gICAgaWYgKHBhcmVudFZpZXctPmxheW91dENvbnRleHQoKS5pc0lu
TGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFBhcmVudCB0cmVlIGlzIGNsZWFu
LiBTdGFydGluZyBsYXlvdXQgZnJvbSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdC4KLSAgICBpZiAo
IXBhcmVudFZpZXctPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxl
IChwYXJlbnRWaWV3LT5wYXJlbnRGcmFtZVZpZXcoKSkKLSAgICAgICAgcGFyZW50VmlldyA9IHBh
cmVudFZpZXctPnBhcmVudEZyYW1lVmlldygpOwotCi0gICAgTE9HKExheW91dCwgIiAgZnJhbWUg
ZmxhdHRlbmluZywgc3RhcnRpbmcgZnJvbSByb290Iik7Ci0gICAgcGFyZW50Vmlldy0+bGF5b3V0
Q29udGV4dCgpLmxheW91dCgpOwotfQotCi1MYXlvdXRTaXplIExheW91dENvbnRleHQ6OmxheW91
dERlbHRhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlv
dXRTdGF0ZSgpKQotICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUtPmxheW91dERlbHRhKCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLSAgICAKLXZvaWQgTGF5b3V0Q29udGV4dDo6YWRkTGF5b3V0RGVs
dGEoY29uc3QgTGF5b3V0U2l6ZSYgZGVsdGEpCi17Ci0gICAgaWYgKGF1dG8qIGxheW91dFN0YXRl
ID0gdGhpcy0+bGF5b3V0U3RhdGUoKSkKLSAgICAgICAgbGF5b3V0U3RhdGUtPmFkZExheW91dERl
bHRhKGRlbHRhKTsKLX0KLSAgICAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1ib29sIExheW91dENv
bnRleHQ6OmxheW91dERlbHRhTWF0Y2hlcyhjb25zdCBMYXlvdXRTaXplJiBkZWx0YSkKLXsKLSAg
ICBpZiAoYXV0byogbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpKQotICAgICAgICBy
ZXR1cm4gbGF5b3V0U3RhdGUtPmxheW91dERlbHRhTWF0Y2hlcyhkZWx0YSk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotI2VuZGlmCi0KLUxheW91dFN0YXRlKiBMYXlvdXRDb250ZXh0OjpsYXlvdXRT
dGF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbGF5b3V0U3RhdGVTdGFjay5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBtX2xheW91dFN0YXRlU3RhY2subGFz
dCgpLmdldCgpOwotfQotCi12b2lkIExheW91dENvbnRleHQ6OnB1c2hMYXlvdXRTdGF0ZShSZW5k
ZXJFbGVtZW50JiByb290KQotewotICAgIEFTU0VSVCghbV9wYWludE9mZnNldENhY2hlRGlzYWJs
ZUNvdW50KTsKLSAgICBBU1NFUlQoIWxheW91dFN0YXRlKCkpOwotCi0gICAgbV9sYXlvdXRTdGF0
ZVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExheW91dFN0YXRlPihyb290KSk7Ci19Ci0K
LWJvb2wgTGF5b3V0Q29udGV4dDo6cHVzaExheW91dFN0YXRlRm9yUGFnaW5hdGlvbklmTmVlZGVk
KFJlbmRlckJsb2NrRmxvdyYgbGF5b3V0Um9vdCkKLXsKLSAgICBpZiAobGF5b3V0U3RhdGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbGF5b3V0U3RhdGVTdGFjay5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxMYXlvdXRTdGF0ZT4obGF5b3V0Um9vdCwgTGF5b3V0U3RhdGU6OklzUGFn
aW5hdGVkOjpZZXMpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLWJvb2wgTGF5b3V0Q29u
dGV4dDo6cHVzaExheW91dFN0YXRlKFJlbmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFNp
emUmIG9mZnNldCwgTGF5b3V0VW5pdCBwYWdlSGVpZ2h0LCBib29sIHBhZ2VIZWlnaHRDaGFuZ2Vk
KQotewotICAgIC8vIFdlIHB1c2ggTGF5b3V0U3RhdGUgZXZlbiBpZiBsYXlvdXRTdGF0ZSBpcyBk
aXNhYmxlZCBiZWNhdXNlIGl0IHN0b3JlcyBsYXlvdXREZWx0YSB0b28uCi0gICAgYXV0byogbGF5
b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwotICAgIGlmICghbGF5b3V0U3RhdGUgfHwg
IW5lZWRzRnVsbFJlcGFpbnQoKSB8fCBsYXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSB8fCByZW5k
ZXJlci5lbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpCi0gICAgICAgIHx8IGxheW91dFN0YXRlLT5s
aW5lR3JpZCgpIHx8IChyZW5kZXJlci5zdHlsZSgpLmxpbmVHcmlkKCkgIT0gUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lR3JpZCgpICYmIHJlbmRlcmVyLmlzUmVuZGVyQmxvY2tGbG93KCkpKSB7Ci0g
ICAgICAgIG1fbGF5b3V0U3RhdGVTdGFjay5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxMYXlvdXRT
dGF0ZT4obV9sYXlvdXRTdGF0ZVN0YWNrLCByZW5kZXJlciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBw
YWdlSGVpZ2h0Q2hhbmdlZCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotICAgIAotdm9pZCBMYXlvdXRDb250ZXh0Ojpwb3BMYXlvdXRTdGF0ZSgp
Ci17Ci0gICAgbV9sYXlvdXRTdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLSAgICAKLSNpZm5k
ZWYgTkRFQlVHCi12b2lkIExheW91dENvbnRleHQ6OmNoZWNrTGF5b3V0U3RhdGUoKQotewotICAg
IEFTU0VSVChsYXlvdXREZWx0YU1hdGNoZXMoTGF5b3V0U2l6ZSgpKSk7Ci0gICAgQVNTRVJUKCFt
X3BhaW50T2Zmc2V0Q2FjaGVEaXNhYmxlQ291bnQpOwotfQotI2VuZGlmCi0KLUZyYW1lJiBMYXlv
dXRDb250ZXh0OjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZpZXcoKS5mcmFtZSgpOwot
fQotCi1GcmFtZVZpZXcmIExheW91dENvbnRleHQ6OnZpZXcoKSBjb25zdAotewotICAgIHJldHVy
biBtX2ZyYW1lVmlldzsKLX0KLQotUmVuZGVyVmlldyogTGF5b3V0Q29udGV4dDo6cmVuZGVyVmll
dygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZpZXcoKS5yZW5kZXJWaWV3KCk7Ci19Ci0KLURvY3Vt
ZW50KiBMYXlvdXRDb250ZXh0Ojpkb2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZyYW1l
KCkuZG9jdW1lbnQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9MYXlvdXRDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9MYXlvdXRDb250ZXh0LmgJKHJldmlzaW9uIDIzMDk2MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvTGF5b3V0Q29udGV4dC5oCShub25leGlzdGVudCkKQEAgLTEsMTc5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi0jaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEb2N1
bWVudDsKLWNsYXNzIEZyYW1lOwotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgTGF5b3V0U2NvcGU7
Ci1jbGFzcyBMYXlvdXRTaXplOwotY2xhc3MgTGF5b3V0U3RhdGU7Ci1jbGFzcyBSZW5kZXJCbG9j
a0Zsb3c7Ci1jbGFzcyBSZW5kZXJCb3g7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5k
ZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyVmlldzsKLSAgICAKLWNsYXNzIExheW91dENvbnRleHQg
ewotcHVibGljOgotICAgIExheW91dENvbnRleHQoRnJhbWVWaWV3Jik7Ci0gICAgfkxheW91dENv
bnRleHQoKTsKLQotICAgIHZvaWQgbGF5b3V0KCk7Ci0KLSAgICB2b2lkIHNldE5lZWRzTGF5b3V0
KCk7Ci0gICAgYm9vbCBuZWVkc0xheW91dCgpIGNvbnN0OwotCi0gICAgdm9pZCBzY2hlZHVsZUxh
eW91dCgpOwotICAgIHZvaWQgc2NoZWR1bGVTdWJ0cmVlTGF5b3V0KFJlbmRlckVsZW1lbnQmIGxh
eW91dFJvb3QpOwotICAgIHZvaWQgdW5zY2hlZHVsZUxheW91dCgpOwotCi0gICAgdm9pZCBzdGFy
dERpc2FsbG93aW5nTGF5b3V0KCkgeyArK21fbGF5b3V0RGlzYWxsb3dlZENvdW50OyB9Ci0gICAg
dm9pZCBlbmREaXNhbGxvd2luZ0xheW91dCgpIHsgQVNTRVJUKG1fbGF5b3V0RGlzYWxsb3dlZENv
dW50ID4gMCk7IC0tbV9sYXlvdXREaXNhbGxvd2VkQ291bnQ7IH0KLSAgICAKLSAgICB2b2lkIGRp
c2FibGVTZXROZWVkc0xheW91dCgpOwotICAgIHZvaWQgZW5hYmxlU2V0TmVlZHNMYXlvdXQoKTsK
LQotICAgIGVudW0gY2xhc3MgTGF5b3V0UGhhc2UgewotICAgICAgICBPdXRzaWRlTGF5b3V0LAot
ICAgICAgICBJblByZUxheW91dCwKLSAgICAgICAgSW5SZW5kZXJUcmVlTGF5b3V0LAotICAgICAg
ICBJblZpZXdTaXplQWRqdXN0LAotICAgICAgICBJblBvc3RMYXlvdXQKLSAgICB9OwotICAgIExh
eW91dFBoYXNlIGxheW91dFBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRQaGFzZTsgfQot
ICAgIGJvb2wgaXNMYXlvdXROZXN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2xheW91dE5lc3RlZFN0
YXRlID09IExheW91dE5lc3RlZFN0YXRlOjpOZXN0ZWQ7IH0KLSAgICBib29sIGlzTGF5b3V0UGVu
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0VGltZXIuaXNBY3RpdmUoKTsgfQotICAgIGJv
b2wgaXNJbkxheW91dCgpIGNvbnN0IHsgcmV0dXJuIGxheW91dFBoYXNlKCkgIT0gTGF5b3V0UGhh
c2U6Ok91dHNpZGVMYXlvdXQ7IH0KLSAgICBib29sIGlzSW5SZW5kZXJUcmVlTGF5b3V0KCkgY29u
c3QgeyByZXR1cm4gbGF5b3V0UGhhc2UoKSA9PSBMYXlvdXRQaGFzZTo6SW5SZW5kZXJUcmVlTGF5
b3V0OyB9Ci0gICAgYm9vbCBpblBhaW50YWJsZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbGF5b3V0
UGhhc2UoKSAhPSBMYXlvdXRQaGFzZTo6SW5SZW5kZXJUcmVlTGF5b3V0ICYmIGxheW91dFBoYXNl
KCkgIT0gTGF5b3V0UGhhc2U6OkluVmlld1NpemVBZGp1c3QgJiYgKGxheW91dFBoYXNlKCkgIT0g
TGF5b3V0UGhhc2U6OkluUG9zdExheW91dCB8fCBpbkFzeW5jaHJvbm91c1Rhc2tzKCkpOyB9Ci0K
LSAgICB1bnNpZ25lZCBsYXlvdXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0Q291bnQ7
IH0KLQotICAgIFJlbmRlckVsZW1lbnQqIHN1YnRyZWVMYXlvdXRSb290KCkgY29uc3QgeyByZXR1
cm4gbV9zdWJ0cmVlTGF5b3V0Um9vdC5nZXQoKTsgfQotICAgIHZvaWQgY2xlYXJTdWJ0cmVlTGF5
b3V0Um9vdCgpIHsgbV9zdWJ0cmVlTGF5b3V0Um9vdC5jbGVhcigpOyB9Ci0gICAgdm9pZCBjb252
ZXJ0U3VidHJlZUxheW91dFRvRnVsbExheW91dCgpOwotCi0gICAgdm9pZCByZXNldCgpOwotICAg
IHZvaWQgcmVzZXRGaXJzdExheW91dEZsYWcoKSB7IG1fZmlyc3RMYXlvdXQgPSB0cnVlOyB9Ci0g
ICAgYm9vbCBkaWRGaXJzdExheW91dCgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpcnN0TGF5b3V0OyB9
Ci0KLSAgICB2b2lkIHNldE5lZWRzRnVsbFJlcGFpbnQoKSB7IG1fbmVlZHNGdWxsUmVwYWludCA9
IHRydWU7IH0KLSAgICBib29sIG5lZWRzRnVsbFJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBtX25l
ZWRzRnVsbFJlcGFpbnQ7IH0KLQotICAgIHZvaWQgZmx1c2hBc3luY2hyb25vdXNUYXNrcygpOwot
Ci0gICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlKCkgY29uc3Q7Ci0gICAgLy8gUmV0dXJucyB0
cnVlIGlmIGxheW91dFN0YXRlIHNob3VsZCBiZSB1c2VkIGZvciBpdHMgY2FjaGVkIG9mZnNldCBh
bmQgY2xpcC4KLSAgICBib29sIGlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiAhbV9wYWludE9mZnNldENhY2hlRGlzYWJsZUNvdW50ICYmIGxheW91dFN0YXRlKCk7IH0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBjaGVja0xheW91dFN0YXRlKCk7Ci0jZW5kaWYKLSAg
ICAvLyBsYXlvdXREZWx0YSBpcyB1c2VkIHRyYW5zaWVudGx5IGR1cmluZyBsYXlvdXQgdG8gc3Rv
cmUgaG93IGZhciBhbiBvYmplY3QgaGFzIG1vdmVkIGZyb20gaXRzCi0gICAgLy8gbGFzdCBsYXlv
dXQgbG9jYXRpb24sIGluIG9yZGVyIHRvIHJlcGFpbnQgY29ycmVjdGx5LgotICAgIC8vIElmIHdl
J3JlIGRvaW5nIGEgZnVsbCByZXBhaW50IG1fbGF5b3V0U3RhdGUgd2lsbCBiZSAwLCBidXQgaW4g
dGhhdCBjYXNlIGxheW91dERlbHRhIGRvZXNuJ3QgbWF0dGVyLgotICAgIExheW91dFNpemUgbGF5
b3V0RGVsdGEoKSBjb25zdDsKLSAgICB2b2lkIGFkZExheW91dERlbHRhKGNvbnN0IExheW91dFNp
emUmIGRlbHRhKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgYm9vbCBsYXlvdXREZWx0YU1h
dGNoZXMoY29uc3QgTGF5b3V0U2l6ZSYgZGVsdGEpOwotI2VuZGlmCi0gICAgdXNpbmcgTGF5b3V0
U3RhdGVTdGFjayA9IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0U3RhdGU+PjsKLQotcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTGF5b3V0U2NvcGU7Ci0gICAgZnJpZW5kIGNsYXNzIExh
eW91dFN0YXRlTWFpbnRhaW5lcjsKLSAgICBmcmllbmQgY2xhc3MgTGF5b3V0U3RhdGVEaXNhYmxl
cjsKLSAgICBmcmllbmQgY2xhc3MgU3VidHJlZUxheW91dFN0YXRlTWFpbnRhaW5lcjsKLSAgICBm
cmllbmQgY2xhc3MgUGFnaW5hdGVkTGF5b3V0U3RhdGVNYWludGFpbmVyOwotCi0gICAgYm9vbCBj
YW5QZXJmb3JtTGF5b3V0KCkgY29uc3Q7Ci0gICAgYm9vbCBsYXlvdXREaXNhbGxvd2VkKCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXREaXNhbGxvd2VkQ291bnQ7IH0KLSAgICBib29sIGlzTGF5b3V0
U2NoZWR1bGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFNjaGVkdWxpbmdJc0Vu
YWJsZWQ7IH0KLQotICAgIHZvaWQgbGF5b3V0VGltZXJGaXJlZCgpOwotICAgIHZvaWQgcnVuQXN5
bmNocm9ub3VzVGFza3MoKTsKLSAgICB2b2lkIHJ1bk9yU2NoZWR1bGVBc3luY2hyb25vdXNUYXNr
cygpOwotICAgIGJvb2wgaW5Bc3luY2hyb25vdXNUYXNrcygpIGNvbnN0IHsgcmV0dXJuIG1faW5B
c3luY2hyb25vdXNUYXNrczsgfQotCi0gICAgdm9pZCBzZXRTdWJ0cmVlTGF5b3V0Um9vdChSZW5k
ZXJFbGVtZW50Jik7Ci0KLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHZvaWQgYXBw
bHlUZXh0U2l6aW5nSWZOZWVkZWQoUmVuZGVyRWxlbWVudCYgbGF5b3V0Um9vdCk7Ci0jZW5kaWYK
LSAgICB2b2lkIHVwZGF0ZVN0eWxlRm9yTGF5b3V0KCk7Ci0KLSAgICBib29sIGhhbmRsZUxheW91
dFdpdGhGcmFtZUZsYXR0ZW5pbmdJZk5lZWRlZCgpOwotICAgIHZvaWQgc3RhcnRMYXlvdXRBdE1h
aW5GcmFtZVZpZXdJZk5lZWRlZCgpOwotCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIG1heSBvbmx5
IGJlIGFjY2Vzc2VkIGJ5IExheW91dFN0YXRlTWFpbnRhaW5lci4KLSAgICAvLyBTdWJ0cmVlIHB1
c2gvcG9wCi0gICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyRWxlbWVudCYpOwotICAgIGJv
b2wgcHVzaExheW91dFN0YXRlRm9yUGFnaW5hdGlvbklmTmVlZGVkKFJlbmRlckJsb2NrRmxvdyYp
OwotICAgIGJvb2wgcHVzaExheW91dFN0YXRlKFJlbmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldCwgTGF5b3V0VW5pdCBwYWdlSGVpZ2h0ID0gMCwgYm9vbCBwYWdlSGVp
Z2h0Q2hhbmdlZCA9IGZhbHNlKTsKLSAgICB2b2lkIHBvcExheW91dFN0YXRlKCk7Ci0KLSAgICAv
LyBTdXNwZW5kcyB0aGUgTGF5b3V0U3RhdGUgb3B0aW1pemF0aW9uLiBVc2VkIHVuZGVyIHRyYW5z
Zm9ybXMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkKLSAgICAvLyBMYXlvdXRTdGF0ZSAo
Y29tbW9uIGluIFNWRykgYW5kIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSByZW5kZXIgdHJlZSBkdXJp
bmcgbGF5b3V0IGluIHdheXMKLSAgICAvLyB0aGF0IGNhbiB0cmlnZ2VyIHJlcGFpbnQgb2YgYSBu
b24tY2hpbGQgKGUuZy4gd2hlbiBhIGxpc3QgaXRlbSBtb3ZlcyBpdHMgbGlzdCBtYXJrZXIgYXJv
dW5kKS4KLSAgICAvLyBOb3RlIHRoYXQgZXZlbiB3aGVuIGRpc2FibGVkLCBMYXlvdXRTdGF0ZSBp
cyBzdGlsbCB1c2VkIHRvIHN0b3JlIGxheW91dERlbHRhLgotICAgIC8vIFRoZXNlIGZ1bmN0aW9u
cyBtYXkgb25seSBiZSBhY2Nlc3NlZCBieSBMYXlvdXRTdGF0ZU1haW50YWluZXIgb3IgTGF5b3V0
U3RhdGVEaXNhYmxlci4KLSAgICB2b2lkIGRpc2FibGVQYWludE9mZnNldENhY2hlKCkgeyBtX3Bh
aW50T2Zmc2V0Q2FjaGVEaXNhYmxlQ291bnQrKzsgfQotICAgIHZvaWQgZW5hYmxlUGFpbnRPZmZz
ZXRDYWNoZSgpIHsgQVNTRVJUKG1fcGFpbnRPZmZzZXRDYWNoZURpc2FibGVDb3VudCA+IDApOyBt
X3BhaW50T2Zmc2V0Q2FjaGVEaXNhYmxlQ291bnQtLTsgfQotCi0gICAgRnJhbWUmIGZyYW1lKCkg
Y29uc3Q7Ci0gICAgRnJhbWVWaWV3JiB2aWV3KCkgY29uc3Q7Ci0gICAgUmVuZGVyVmlldyogcmVu
ZGVyVmlldygpIGNvbnN0OwotICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwotCi0gICAg
RnJhbWVWaWV3JiBtX2ZyYW1lVmlldzsKLSAgICBUaW1lciBtX2xheW91dFRpbWVyOwotICAgIFRp
bWVyIG1fYXN5bmNocm9ub3VzVGFza3NUaW1lcjsKLQotICAgIGJvb2wgbV9sYXlvdXRTY2hlZHVs
aW5nSXNFbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9kZWxheWVkTGF5b3V0IHsgZmFsc2Ug
fTsKLSAgICBib29sIG1fZmlyc3RMYXlvdXQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX25lZWRzRnVs
bFJlcGFpbnQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX2luQXN5bmNocm9ub3VzVGFza3MgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9zZXROZWVkc0xheW91dFdhc0RlZmVycmVkIHsgZmFsc2UgfTsKLSAg
ICBMYXlvdXRQaGFzZSBtX2xheW91dFBoYXNlIHsgTGF5b3V0UGhhc2U6Ok91dHNpZGVMYXlvdXQg
fTsKLSAgICBlbnVtIGNsYXNzIExheW91dE5lc3RlZFN0YXRlIHsgTm90SW5MYXlvdXQsIE5vdE5l
c3RlZCwgTmVzdGVkIH07Ci0gICAgTGF5b3V0TmVzdGVkU3RhdGUgbV9sYXlvdXROZXN0ZWRTdGF0
ZSB7IExheW91dE5lc3RlZFN0YXRlOjpOb3RJbkxheW91dCB9OwotICAgIHVuc2lnbmVkIG1fbGF5
b3V0Q291bnQgeyAwIH07Ci0gICAgdW5zaWduZWQgbV9kaXNhYmxlU2V0TmVlZHNMYXlvdXRDb3Vu
dCB7IDAgfTsKLSAgICBpbnQgbV9sYXlvdXREaXNhbGxvd2VkQ291bnQgeyAwIH07Ci0gICAgV2Vh
a1B0cjxSZW5kZXJFbGVtZW50PiBtX3N1YnRyZWVMYXlvdXRSb290OwotICAgIExheW91dFN0YXRl
U3RhY2sgbV9sYXlvdXRTdGF0ZVN0YWNrOwotICAgIHVuc2lnbmVkIG1fcGFpbnRPZmZzZXRDYWNo
ZURpc2FibGVDb3VudCB7IDAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkocmV2aXNpb24gMjMwOTYy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyRWxl
bWVudCYgCiAgICAgfQogfQogCi1MYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoY29uc3QgTGF5b3V0
Q29udGV4dDo6TGF5b3V0U3RhdGVTdGFjayYgbGF5b3V0U3RhdGVTdGFjaywgUmVuZGVyQm94JiBy
ZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2Fs
SGVpZ2h0LCBib29sIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCkKK0xheW91dFN0YXRlOjpMYXlv
dXRTdGF0ZShjb25zdCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpMYXlvdXRTdGF0ZVN0YWNrJiBs
YXlvdXRTdGF0ZVN0YWNrLCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXQsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wgcGFnZUxvZ2ljYWxIZWln
aHRDaGFuZ2VkKQogICAgIDogbV9jbGlwcGVkKGZhbHNlKQogICAgICwgbV9pc1BhZ2luYXRlZChm
YWxzZSkKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKGZhbHNlKQpAQCAtMTMzLDcg
KzEzMyw3IEBAIHZvaWQgTGF5b3V0U3RhdGU6OmNvbXB1dGVDbGlwUmVjdChjb25zdCAKICAgICAv
LyBGSVhNRTogPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDQzPiBB
cHBseSBjb250cm9sIGNsaXAgaWYgcHJlc2VudC4KIH0KIAotdm9pZCBMYXlvdXRTdGF0ZTo6Y29t
cHV0ZVBhZ2luYXRpb25JbmZvcm1hdGlvbihjb25zdCBMYXlvdXRDb250ZXh0OjpMYXlvdXRTdGF0
ZVN0YWNrJiBsYXlvdXRTdGF0ZVN0YWNrLCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBMYXlvdXRVbml0
IHBhZ2VMb2dpY2FsSGVpZ2h0LCBib29sIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCkKK3ZvaWQg
TGF5b3V0U3RhdGU6OmNvbXB1dGVQYWdpbmF0aW9uSW5mb3JtYXRpb24oY29uc3QgRnJhbWVWaWV3
TGF5b3V0Q29udGV4dDo6TGF5b3V0U3RhdGVTdGFjayYgbGF5b3V0U3RhdGVTdGFjaywgUmVuZGVy
Qm94JiByZW5kZXJlciwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCBwYWdlTG9n
aWNhbEhlaWdodENoYW5nZWQpCiB7CiAgICAgYXV0byogYW5jZXN0b3IgPSBsYXlvdXRTdGF0ZVN0
YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBsYXlvdXRTdGF0ZVN0YWNrLmxhc3QoKS5nZXQoKTsK
ICAgICAvLyBJZiB3ZSBlc3RhYmxpc2ggYSBuZXcgcGFnZSBoZWlnaHQsIHRoZW4gY2FjaGUgdGhl
IG9mZnNldCB0byB0aGUgdG9wIG9mIHRoZSBmaXJzdCBwYWdlLgpAQCAtMjMwLDcgKzIzMCw3IEBA
IHZvaWQgTGF5b3V0U3RhdGU6OnByb3BhZ2F0ZUxpbmVHcmlkSW5mbygKICAgICBtX2xpbmVHcmlk
UGFnaW5hdGlvbk9yaWdpbiA9IGFuY2VzdG9yLmxpbmVHcmlkUGFnaW5hdGlvbk9yaWdpbigpOwog
fQogCi12b2lkIExheW91dFN0YXRlOjplc3RhYmxpc2hMaW5lR3JpZChjb25zdCBMYXlvdXRDb250
ZXh0OjpMYXlvdXRTdGF0ZVN0YWNrJiBsYXlvdXRTdGF0ZVN0YWNrLCBSZW5kZXJCbG9ja0Zsb3cm
IHJlbmRlcmVyKQordm9pZCBMYXlvdXRTdGF0ZTo6ZXN0YWJsaXNoTGluZUdyaWQoY29uc3QgRnJh
bWVWaWV3TGF5b3V0Q29udGV4dDo6TGF5b3V0U3RhdGVTdGFjayYgbGF5b3V0U3RhdGVTdGFjaywg
UmVuZGVyQmxvY2tGbG93JiByZW5kZXJlcikKIHsKICAgICAvLyBGaXJzdCBjaGVjayB0byBzZWUg
aWYgdGhpcyBncmlkIGhhcyBiZWVuIGVzdGFibGlzaGVkIGFscmVhZHkuCiAgICAgaWYgKG1fbGlu
ZUdyaWQpIHsKQEAgLTI5MSw3ICsyOTEsNyBAQCBMYXlvdXRTdGF0ZU1haW50YWluZXI6On5MYXlv
dXRTdGF0ZU1haW50CiAgICAgICAgIG1fY29udGV4dC5lbmFibGVQYWludE9mZnNldENhY2hlKCk7
CiB9CiAKLUxheW91dFN0YXRlRGlzYWJsZXI6OkxheW91dFN0YXRlRGlzYWJsZXIoTGF5b3V0Q29u
dGV4dCYgY29udGV4dCkKK0xheW91dFN0YXRlRGlzYWJsZXI6OkxheW91dFN0YXRlRGlzYWJsZXIo
RnJhbWVWaWV3TGF5b3V0Q29udGV4dCYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0
KQogewogICAgIG1fY29udGV4dC5kaXNhYmxlUGFpbnRPZmZzZXRDYWNoZSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJKHJldmlzaW9uIDIzMDk2MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxMyArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5oIgogI2luY2x1ZGUgIkxheW91
dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBMYXlvdXRDb250ZXh0OwogY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogY2xh
c3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyRWxlbWVudDsKQEAgLTUzLDcgKzUyLDcgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgewogICAgIH0KLSAgICBMYXlvdXRTdGF0ZShjb25zdCBMYXlvdXRD
b250ZXh0OjpMYXlvdXRTdGF0ZVN0YWNrJiwgUmVuZGVyQm94JiwgY29uc3QgTGF5b3V0U2l6ZSYg
b2Zmc2V0LCBMYXlvdXRVbml0IHBhZ2VIZWlnaHQsIGJvb2wgcGFnZUhlaWdodENoYW5nZWQpOwor
ICAgIExheW91dFN0YXRlKGNvbnN0IEZyYW1lVmlld0xheW91dENvbnRleHQ6OkxheW91dFN0YXRl
U3RhY2smLCBSZW5kZXJCb3gmLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQsIExheW91dFVuaXQg
cGFnZUhlaWdodCwgYm9vbCBwYWdlSGVpZ2h0Q2hhbmdlZCk7CiAgICAgZW51bSBjbGFzcyBJc1Bh
Z2luYXRlZCB7IE5vLCBZZXMgfTsKICAgICBleHBsaWNpdCBMYXlvdXRTdGF0ZShSZW5kZXJFbGVt
ZW50JiwgSXNQYWdpbmF0ZWQgPSBJc1BhZ2luYXRlZDo6Tm8pOwogCkBAIC05MiwxMCArOTEsMTAg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVPZmZzZXRzKGNvbnN0IExheW91
dFN0YXRlJiBhbmNlc3RvciwgUmVuZGVyQm94JiwgTGF5b3V0U2l6ZSBvZmZzZXQpOwogICAgIHZv
aWQgY29tcHV0ZUNsaXBSZWN0KGNvbnN0IExheW91dFN0YXRlJiBhbmNlc3RvciwgUmVuZGVyQm94
Jik7Ci0gICAgLy8gRklYTUU6IHdlYmtpdC5vcmcvYi8xNzk0NDAgdGhlc2UgZnVuY3Rpb25zIHNo
b3VsZCBiZSBwYXJ0IG9mIHRoZSBwYWdpbmF0aW9uIGNvZGUvTGF5b3V0Q29udGV4dC4KLSAgICB2
b2lkIGNvbXB1dGVQYWdpbmF0aW9uSW5mb3JtYXRpb24oY29uc3QgTGF5b3V0Q29udGV4dDo6TGF5
b3V0U3RhdGVTdGFjayYsIFJlbmRlckJveCYsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQs
IGJvb2wgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKTsKKyAgICAvLyBGSVhNRTogd2Via2l0Lm9y
Zy9iLzE3OTQ0MCB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHBhZ2luYXRp
b24gY29kZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LgorICAgIHZvaWQgY29tcHV0ZVBhZ2luYXRp
b25JbmZvcm1hdGlvbihjb25zdCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpMYXlvdXRTdGF0ZVN0
YWNrJiwgUmVuZGVyQm94JiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCBwYWdl
TG9naWNhbEhlaWdodENoYW5nZWQpOwogICAgIHZvaWQgcHJvcGFnYXRlTGluZUdyaWRJbmZvKGNv
bnN0IExheW91dFN0YXRlJiBhbmNlc3RvciwgUmVuZGVyQm94Jik7Ci0gICAgdm9pZCBlc3RhYmxp
c2hMaW5lR3JpZChjb25zdCBMYXlvdXRDb250ZXh0OjpMYXlvdXRTdGF0ZVN0YWNrJiwgUmVuZGVy
QmxvY2tGbG93Jik7CisgICAgdm9pZCBlc3RhYmxpc2hMaW5lR3JpZChjb25zdCBGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpMYXlvdXRTdGF0ZVN0YWNrJiwgUmVuZGVyQmxvY2tGbG93Jik7CiAgICAg
dm9pZCBjb21wdXRlTGluZUdyaWRQYWdpbmF0aW9uT3JpZ2luKGNvbnN0IFJlbmRlck11bHRpQ29s
dW1uRmxvdyYpOwogCiAgICAgLy8gRG8gbm90IGFkZCBhbnl0aGluZyBhcGFydCBmcm9tIGJpdGZp
ZWxkcy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAxNzMK
QEAgLTE0Miw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgfkxheW91dFN0YXRlTWFpbnRhaW5lcigp
OwogCiBwcml2YXRlOgotICAgIExheW91dENvbnRleHQmIG1fY29udGV4dDsKKyAgICBGcmFtZVZp
ZXdMYXlvdXRDb250ZXh0JiBtX2NvbnRleHQ7CiAgICAgYm9vbCBtX3BhaW50T2Zmc2V0Q2FjaGVJ
c0Rpc2FibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fZGlkUHVzaExheW91dFN0YXRlIHsgZmFs
c2UgfTsKIH07CkBAIC0xNTMsMTggKzE1MiwxOCBAQCBwdWJsaWM6CiAgICAgflN1YnRyZWVMYXlv
dXRTdGF0ZU1haW50YWluZXIoKTsKIAogcHJpdmF0ZToKLSAgICBMYXlvdXRDb250ZXh0KiBtX2Nv
bnRleHQgeyBudWxscHRyIH07CisgICAgRnJhbWVWaWV3TGF5b3V0Q29udGV4dCogbV9jb250ZXh0
IHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9kaWREaXNhYmxlUGFpbnRPZmZzZXRDYWNoZSB7IGZh
bHNlIH07CiB9OwogCiBjbGFzcyBMYXlvdXRTdGF0ZURpc2FibGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShMYXlvdXRTdGF0ZURpc2FibGVyKTsKIHB1YmxpYzoKLSAgICBMYXlvdXRTdGF0
ZURpc2FibGVyKExheW91dENvbnRleHQmKTsKKyAgICBMYXlvdXRTdGF0ZURpc2FibGVyKEZyYW1l
Vmlld0xheW91dENvbnRleHQmKTsKICAgICB+TGF5b3V0U3RhdGVEaXNhYmxlcigpOwogCiBwcml2
YXRlOgotICAgIExheW91dENvbnRleHQmIG1fY29udGV4dDsKKyAgICBGcmFtZVZpZXdMYXlvdXRD
b250ZXh0JiBtX2NvbnRleHQ7CiB9OwogCiBjbGFzcyBQYWdpbmF0ZWRMYXlvdXRTdGF0ZU1haW50
YWluZXIgewpAQCAtMTczLDcgKzE3Miw3IEBAIHB1YmxpYzoKICAgICB+UGFnaW5hdGVkTGF5b3V0
U3RhdGVNYWludGFpbmVyKCk7CiAKIHByaXZhdGU6Ci0gICAgTGF5b3V0Q29udGV4dCYgbV9jb250
ZXh0OworICAgIEZyYW1lVmlld0xheW91dENvbnRleHQmIG1fY29udGV4dDsKICAgICBib29sIG1f
cHVzaGVkIHsgZmFsc2UgfTsKIH07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>