<?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>126389</bug_id>
          
          <creation_ts>2014-01-02 11:07:55 -0800</creation_ts>
          <short_desc>Add AsyncScrollingCoordinator, which is a base class for threaded and future remote ScrollingCoordinators</short_desc>
          <delta_ts>2014-01-02 11:38:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>963787</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-02 11:07:55 -0800</bug_when>
    <thetext>Add AsyncScrollingCoordinator, which is a base class for threaded and future remote ScrollingCoordinators</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963790</commentid>
    <comment_count>1</comment_count>
      <attachid>220234</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-02 11:13:17 -0800</bug_when>
    <thetext>Created attachment 220234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963805</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-02 11:38:31 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/161212</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220234</attachid>
            <date>2014-01-02 11:13:17 -0800</date>
            <delta_ts>2014-01-02 11:16:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126389-20140102111316.patch</filename>
            <type>text/plain</type>
            <size>59923</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxMjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2UxZjIzN2Y1YWM5OWU3
ZmE1ZDk3OTg2NzUwNDcwZDBiYjQyMjE4Mi4uNmI1MjVkODQ0ZDg2MzNhYjMwYjM0ZDYwOTIwNWVj
ZTc5ZTBjOTFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE0LTAxLTAyICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLCB3aGljaCBpcyBhIGJhc2UgY2xhc3MgZm9yIHRocmVhZGVkIGFu
ZCBmdXR1cmUgcmVtb3RlIFNjcm9sbGluZ0Nvb3JkaW5hdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2Mzg5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3IsIGEgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhhdCBrbm93cyBhYm91dCBTY3JvbGxpbmdTdGF0
ZVRyZWVzCisgICAgICAgIGFuZCBTY3JvbGxpbmdUcmVlcywgYnV0IGxlYXZlcyBpdCB1cCB0byBz
dWJjbGFzc2VzIHRvIGRlY2lkZSB3aGVuIGFuZCBob3cgdG8gY29tbWl0LgorCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLioKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvcjo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp+QXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJs
ZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yOjphdHRhY2hUb1N0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN5bmNDaGlsZFBv
c2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpl
bnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlVmlld3BvcnRDb25zdHJhaW5l
ZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0
U2Nyb2xsTGF5ZXJGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNldENvdW50ZXJTY3JvbGxpbmdMYXllckZvck5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0SGVhZGVyTGF5ZXJGb3JOb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldEZvb3Rlckxh
eWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Ny
b2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxiYXJQYWludGVyc0Zyb21TY3JvbGxi
YXJzRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZWNvbXB1
dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6
OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsUGlubmlu
Z0JlaGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaC4KKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1RyZWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsaW5nVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdTdGF0
ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVs
ZWFzZVNjcm9sbGluZ1RyZWUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmg6IEFkZCBjYXN0aW5nIHN1cHBvcnQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6aXNBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaDogY29tbWl0TmV3VHJlZVN0
YXRlKCkgbmVlZHMgdG8gYmUgcHVibGljLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdDb29yZGluYXRvck1hYy5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdDb29yZGluYXRvck1hYy5tbTogTG90cyBvZiBjb2RlIG1vdmVkIHRvIEFzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
ck1hYzo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6On5TY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cGFnZURlc3Ryb3llZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y29tbWl0VHJlZVN0YXRlSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmhhbmRsZVdo
ZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNj
aGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjpjb21taXRUcmVlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKToKKwogMjAxNC0w
MS0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWx3YXlz
IHJlc29sdmUgc3R5bGUgZnJvbSByb290CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTViYTU1ZWUyZTc5ZGQ0MWZm
NzdiZDkwNDI5OTRhYzc3ODI5NWZkMy4uZjY0NTZjZjRkY2JlZTA5ZWZlZDc4MDZlMDVjMTI2NWMw
MzE1NGFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTAxLTAyICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBBc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLCB3aGljaCBpcyBhIGJhc2UgY2xhc3MgZm9yIHRocmVhZGVkIGFuZCBm
dXR1cmUgcmVtb3RlIFNjcm9sbGluZ0Nvb3JkaW5hdG9ycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2Mzg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvciwgYSBTY3JvbGxpbmdDb29yZGluYXRvciB0aGF0IGtub3dzIGFib3V0IFNjcm9sbGlu
Z1N0YXRlVHJlZXMKKyAgICAgICAgYW5kIFNjcm9sbGluZ1RyZWVzLCBidXQgbGVhdmVzIGl0IHVw
IHRvIHN1YmNsYXNzZXMgdG8gZGVjaWRlIHdoZW4gYW5kIGhvdyB0byBjb21taXQuCisgICAgICAg
IAorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OmFkZFNjcm9sbGluZ1RyZWVGb3JQYWdlKTog
VGhlIFNjcm9sbGluZ1RyZWUgaXMgZXhwb3NlZCBvbgorICAgICAgICBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yIG5vdywgbm90IFNjcm9sbGluZ0Nvb3JkaW5hdG9yLCBzbyB3ZSBoYXZlIHRvIGNh
c3QgaGVyZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6IG1fdXNl
VGhyZWFkZWRTY3JvbGxpbmcgLT4gbV91c2VBc3luY1Njcm9sbGluZyB0ZXJtaW5vbG9neSBjaGFu
Z2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjp+V2ViUGFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLm1tOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYTo6dXBkYXRlUHJlZmVyZW5jZXMpOiBDYXN0IHRvIEFzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IgaW4gb3JkZXIKKyAgICAgICAgdG8gZ2V0IHRvIHRoZSBTY3JvbGxpbmdUcmVlLgorCiAy
MDE0LTAxLTAxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIENyZWF0ZSBhIFRocmVhZGVkU2Nyb2xsaW5nVHJlZSBzdWJjbGFzcyBvZiBTY3JvbGxpbmdU
cmVlLCBhbmQgcHVzaCBhbGwga25vd2xlZGdlIG9mIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGludG8g
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBjNmFkNjIzOTljODhhNWQyMGI3MTNmMzRhYjMyNTY1YmM2NTgxMjQ3Li40ZjI3MjU1
YTk2OWM1YTZkM2VhM2JkOTlmMTE3ZWFiMjQ4NzQ1NzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OTgsNiArNDk4LDggQEAK
IAkJMEZGNTAyNkExMDJCQTk0MzAwNjZGMzlBIC8qIEpTU3R5bGVNZWRpYS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNTAyNjgxMDJCQTk0MzAwNjZG
MzlBIC8qIEpTU3R5bGVNZWRpYS5oICovOyB9OwogCQkwRkY1MDI3MTEwMkJBOTZBMDA2NkYzOUEg
LyogU3R5bGVNZWRpYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY1MDI2RTEwMkJBOTY2MDA2NkYzOUEgLyogU3R5bGVNZWRpYS5jcHAgKi87IH07
CiAJCTBGRjUwMjcyMTAyQkE5NkEwMDY2RjM5QSAvKiBTdHlsZU1lZGlhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1MDI2RjEwMkJBOTZBMDA2NkYz
OUEgLyogU3R5bGVNZWRpYS5oICovOyB9OworCQkwRkZENEQ2MDE4NjUxRkEzMDA1MTJGNkUgLyog
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZENEQ1RTE4NjUxRkEzMDA1MTJGNkUgLyogQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAgKi87IH07CisJCTBGRkQ0RDYxMTg2NTFGQTMwMDUxMkY2RSAv
KiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZENEQ1RjE4NjUxRkEzMDA1MTJGNkUgLyogQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTEwRkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMEZCMDg0
QTE0RTE1QzdFMDBBM0RCOTggLyogUHVibGljVVJMTWFuYWdlci5oICovOyB9OwogCQkxNDAwRDdB
ODE3MTM2RUE3MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMEQ3QTcxNzEzNkVBNzAwNzdD
RTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAyNjQ1RTBBRkRDMTlCMDA1OTE5RTIgLyogTG9n
Z2luZ01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MDI2NDVEMEFGREMxOUIwMDU5MTlFMiAvKiBMb2dnaW5nTWFjLm1tICovOyB9OwpAQCAtNzEy
OCw2ICs3MTMwLDggQEAKIAkJMEZGNTAyNkUxMDJCQTk2NjAwNjZGMzlBIC8qIFN0eWxlTWVkaWEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNZWRpYS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjUwMjZGMTAyQkE5NkEwMDY2RjM5QSAv
KiBTdHlsZU1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlTWVk
aWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNTAyNzAxMDJCQTk2QTAwNjZG
MzlBIC8qIFN0eWxlTWVkaWEuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0eWxlTWVkaWEu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZENEQ1RTE4NjUxRkEzMDA1MTJG
NkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRDRENUYxODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
MEZCMDg0QTE0RTE1QzdFMDBBM0RCOTggLyogUHVibGljVVJMTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQdWJsaWNVUkxNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFi
bGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBw
YWJsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjY0NUQwQUZE
QzE5QjAwNTkxOUUyIC8qIExvZ2dpbmdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gTG9nZ2luZ01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE0NDYyLDYgKzE0NDY2LDggQEAKIAkJMUFGNjJFRTExNERBMjJBNzAwNDE1NTZDIC8qIHNj
cm9sbGluZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MEZGRDRENUUxODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3Bw
ICovLAorCQkJCTBGRkQ0RDVGMTg2NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmggKi8sCiAJCQkJMUFGNjJFRTIxNERBMjJBNzAwNDE1NTZDIC8qIG1hYyAqLywKIAkJ
CQkwRjYwNUFFQTE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwICov
LAogCQkJCTBGNjA1QUVCMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5o
ICovLApAQCAtMjUxOTcsNiArMjUyMDMsNyBAQAogCQkJCTk3NTlFOTQzMTRFRjFDRjgwMDI2QTJE
RCAvKiBUZXh0VHJhY2tDdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MUE5RUMzMTY4RkJDNTUw
MDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzU5
RTk0NjE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlTGlzdC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGRDRENjExODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3Njk3MDg3MTQ2M0FEODcwMEY1MDJDRiAvKiBUZXh0
VHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMUFENEU3NDEzQTEyQTQ2MDA4NDZCMjcg
LyogVGV4dFRyYWNrTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTg3NzBGMTEyNDJDNTM1
MDAyMjI2QkEgLyogVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjQ1Nyw2ICsyNjQ2NCw3
IEBACiAJCQkJQTc1RThCODgwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTc1RThCOEEwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1RThCOEMwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGRDRENjAxODY1MUZBMzAwNTEy
RjZFIC8qIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc1RThCOEUwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg0NzMwRDc4MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNERDcwODk2MTgzNTlGNkYwMDJCM0RDNiAvKiBTYW1wbGVNYXAu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMGQ1
MTA5MWZiNTY1MjgwODgzMTlkMjZlZjE2ZjE3YzBjNmQ0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cApAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaW5jbHVkZSAiQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0NvbnN0cmFpbnRzLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuaCIKKyNp
bmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2Uq
IHBhZ2UpCisgICAgOiBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQorICAgICwgbV9zY3JvbGxp
bmdTdGF0ZVRyZWUoU2Nyb2xsaW5nU3RhdGVUcmVlOjpjcmVhdGUoKSkKK3sKK30KKworQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcjo6fkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQoreworfQor
Cit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQo
RnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQobV9wYWdlKTsKKworICAgIC8vIElmIHRoZXJlIGlzbid0IGEgcm9vdCBub2RlIHll
dCwgZG9uJ3QgZG8gYW55dGhpbmcuIFdlJ2xsIGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBjcmVhdGlu
ZyBvbmUuCisgICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gb2YgdGhlIHBhZ2Ug
dGhhdCB3ZSBjYW4ndCBkbyBmYXN0IHNjcm9sbGluZyBmb3IuIFRoaXMgY3VycmVudGx5IGluY2x1
ZGVzCisgICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVy
ZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUK
KyAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1h
aW4gZnJhbWUuCisgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uKCZtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsK
KworICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGhhdmUgdGhlIGFiaWxpdHkg
dG8gc2V0IG5vbi1mYXN0IHNjcm9sbGluZyByZWdpb25zIGZvciBtb3JlIHRoYW4KKyAgICAvLyBq
dXN0IHRoZSByb290IG5vZGUuIEJ1dCByaWdodCBub3csIHRoaXMgY29uY2VwdCBvbmx5IGFwcGxp
ZXMgdG8gdGhlIHJvb3QuCisgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKG5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uLCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpKTsKKworICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVW
aWV3KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBub2RlID0gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKSk7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xs
YmFyID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAg
IHNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnNGb3JOb2RlKHZlcnRpY2FsU2Nyb2xs
YmFyLCBob3Jpem9udGFsU2Nyb2xsYmFyLCBub2RlKTsKKworICAgIG5vZGUtPnNldEZyYW1lU2Nh
bGVGYWN0b3IoZnJhbWVWaWV3LT5mcmFtZSgpLmZyYW1lU2NhbGVGYWN0b3IoKSk7CisgICAgbm9k
ZS0+c2V0SGVhZGVySGVpZ2h0KGZyYW1lVmlldy0+aGVhZGVySGVpZ2h0KCkpOworICAgIG5vZGUt
PnNldEZvb3RlckhlaWdodChmcmFtZVZpZXctPmZvb3RlckhlaWdodCgpKTsKKworICAgIG5vZGUt
PnNldFNjcm9sbE9yaWdpbihmcmFtZVZpZXctPnNjcm9sbE9yaWdpbigpKTsKKyAgICBub2RlLT5z
ZXRWaWV3cG9ydFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPnZpc2libGVDb250
ZW50UmVjdCgpLnNpemUoKSkpOworICAgIG5vZGUtPnNldFRvdGFsQ29udGVudHNTaXplKGZyYW1l
Vmlldy0+dG90YWxDb250ZW50c1NpemUoKSk7CisKKyAgICBTY3JvbGxhYmxlQXJlYVBhcmFtZXRl
cnMgc2Nyb2xsUGFyYW1ldGVyczsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOwor
ICAgIHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3
LT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKTsKKyAgICBzY3JvbGxQYXJhbWV0ZXJzLmhhc0Vu
YWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhciAmJiBob3Jpem9u
dGFsU2Nyb2xsYmFyLT5lbmFibGVkKCk7CisgICAgc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVk
VmVydGljYWxTY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciAmJiB2ZXJ0aWNhbFNjcm9sbGJh
ci0+ZW5hYmxlZCgpOworICAgIHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1v
ZGUgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXJNb2RlKCk7CisgICAgc2Nyb2xsUGFy
YW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xs
YmFyTW9kZSgpOworCisgICAgbm9kZS0+c2V0U2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKHNjcm9s
bFBhcmFtZXRlcnMpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQg
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZy
YW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVW
aWV3KGZyYW1lVmlldykpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSByb290IGxh
eWVyIGRvZXMgbm90IGhhdmUgYSBTY3JvbGxpbmdTdGF0ZU5vZGUsIHRoZW4gd2Ugc2hvdWxkIGNy
ZWF0ZSBvbmUuCisgICAgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhmcmFtZVZpZXcp
OworICAgIEFTU0VSVChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKKwor
ICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoZnJh
bWVWaWV3KTsKKworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHRvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zdGF0ZU5vZGVG
b3JJRChmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSkpOworICAgIHNldFNjcm9sbExheWVyRm9y
Tm9kZShzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBub2RlKTsKKyAgICBzZXRD
b3VudGVyU2Nyb2xsaW5nTGF5ZXJGb3JOb2RlKGNvdW50ZXJTY3JvbGxpbmdMYXllckZvckZyYW1l
VmlldyhmcmFtZVZpZXcpLCBub2RlKTsKKyAgICBzZXRIZWFkZXJMYXllckZvck5vZGUoaGVhZGVy
TGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgbm9kZSk7CisgICAgc2V0Rm9vdGVyTGF5ZXJG
b3JOb2RlKGZvb3RlckxheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIG5vZGUpOworICAgIHNl
dFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50c0Zvck5vZGUoZnJhbWVWaWV3LT5zY3JvbGxC
ZWhhdmlvckZvckZpeGVkRWxlbWVudHMoKSwgbm9kZSk7Cit9CisKK2Jvb2wgQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJh
bWVWaWV3LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmICghY29vcmRpbmF0
ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSB8fCBmcmFtZVZp
ZXctPmZyYW1lKCkuZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKKyAgICAgICAgdXBkYXRlTWFp
bkZyYW1lU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFt
bWF0aWNTY3JvbGwoKSwgU2V0U2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbik7CisKKyAgICAvLyBJZiB0
aGlzIGZyYW1lIHZpZXcncyBkb2N1bWVudCBpcyBiZWluZyBwdXQgaW50byB0aGUgcGFnZSBjYWNo
ZSwgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgb3VyCisgICAgLy8gbWFpbiBmcmFtZSBzY3JvbGwg
cG9zaXRpb24uIEp1c3QgbGV0IHRoZSBGcmFtZVZpZXcgdGhpbmsgdGhhdCB3ZSBkaWQuCisgICAg
aWYgKGZyYW1lVmlldy0+ZnJhbWUoKS5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVO
b2RlID0gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUt
PnN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKSk7CisgICAgaWYgKCFz
dGF0ZU5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRlTm9kZS0+c2V0UmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFt
bWF0aWNTY3JvbGwoKSk7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxl
QXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChzY3JvbGxhYmxlQXJl
YSAhPSBzdGF0aWNfY2FzdDxTY3JvbGxhYmxlQXJlYSo+KG1fcGFnZS0+bWFpbkZyYW1lKCkudmll
dygpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2Fs
U2Nyb2xsYmFyKQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXJMYXll
ckRpZENoYW5nZSgpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250
YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSgpOworfQorCitTY3JvbGxpbmdOb2RlSUQgQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZVR5cGUg
bm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCBuZXdOb2RlSUQsIFNjcm9sbGluZ05vZGVJRCBwYXJl
bnRJRCkKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmF0dGFjaE5vZGUobm9k
ZVR5cGUsIG5ld05vZGVJRCwgcGFyZW50SUQpOworfQorCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKK3sK
KyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+ZGV0YWNoTm9kZShub2RlSUQpOworfQorCit2b2lk
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3sKKyAgICBtX3Nj
cm9sbGluZ1N0YXRlVHJlZS0+Y2xlYXIoKTsKK30KKwordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzeW5jQ2hpbGRQb3NpdGlvbnMoY29uc3QgTGF5b3V0UmVjdCYgdmlld3BvcnRSZWN0
KQoreworICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPE93blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+Piog
Y2hpbGRyZW4gPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5jaGlsZHJl
bigpOworICAgIGlmICghY2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1F
OiBXZSdsbCBoYXZlIHRvIHRyYXZlcnNlIGRlZXBlciBpbnRvIHRoZSB0cmVlIGF0IHNvbWUgcG9p
bnQuCisgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogY2hp
bGQgPSBjaGlsZHJlbi0+YXQoaSkuZ2V0KCk7CisgICAgICAgIGNoaWxkLT5zeW5jTGF5ZXJQb3Np
dGlvbkZvclZpZXdwb3J0UmVjdCh2aWV3cG9ydFJlY3QpOworICAgIH0KK30KKwordm9pZCBBc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZy
YW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIEFTU0VSVChmcmFtZVZpZXctPnNjcm9sbExheWVy
SUQoKSk7CisgICAgYXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZSwgZnJhbWVWaWV3LT5z
Y3JvbGxMYXllcklEKCksIDApOworfQorCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgR3JhcGhpY3NMYXll
ciogc2Nyb2xsTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIGNvdW50ZXJTY3JvbGxpbmdMYXllcikKK3sK
KyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSB0b1Njcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZShtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2RlRm9ySUQobm9kZUlE
KSk7CisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIpOworICAgIG5vZGUtPnNldENv
dW50ZXJTY3JvbGxpbmdMYXllcihjb3VudGVyU2Nyb2xsaW5nTGF5ZXIpOworICAgIHNjaGVkdWxl
VHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6
dXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZE5vZGUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgY29u
c3QgVmlld3BvcnRDb25zdHJhaW50cyYgY29uc3RyYWludHMsIEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCit7CisgICAgQVNTRVJUKHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpKTsK
KworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5z
dGF0ZU5vZGVGb3JJRChub2RlSUQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoIChjb25zdHJhaW50cy5jb25zdHJhaW50VHlwZSgpKSB7CisgICAgY2FzZSBW
aWV3cG9ydENvbnN0cmFpbnRzOjpGaXhlZFBvc2l0aW9uQ29uc3RyYWludDogeworICAgICAgICBT
Y3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSogZml4ZWROb2RlID0gdG9TY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZShub2RlKTsKKyAgICAgICAgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKGdyYXBoaWNzTGF5ZXIs
IGZpeGVkTm9kZSk7CisgICAgICAgIGZpeGVkTm9kZS0+dXBkYXRlQ29uc3RyYWludHMoKGNvbnN0
IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzJiljb25zdHJhaW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFZpZXdwb3J0Q29uc3RyYWludHM6OlN0aWNreVBvc2l0
aW9uQ29uc3RyYWludDogeworICAgICAgICBTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUqIHN0aWNr
eU5vZGUgPSB0b1Njcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZShub2RlKTsKKyAgICAgICAgc2V0U2Ny
b2xsTGF5ZXJGb3JOb2RlKGdyYXBoaWNzTGF5ZXIsIHN0aWNreU5vZGUpOworICAgICAgICBzdGlj
a3lOb2RlLT51cGRhdGVDb25zdHJhaW50cygoY29uc3QgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENv
bnN0cmFpbnRzJiljb25zdHJhaW50cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9Cisg
ICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwordm9pZCBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5
ZXIsIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKK3sKKyAgICBub2RlLT5zZXRTY3JvbGxMYXll
cihzY3JvbGxMYXllcik7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwordm9p
ZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRDb3VudGVyU2Nyb2xsaW5nTGF5ZXJGb3JO
b2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5v
ZGUpCit7CisgICAgbm9kZS0+c2V0Q291bnRlclNjcm9sbGluZ0xheWVyKGxheWVyKTsKKyAgICBz
Y2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldEhlYWRlckxheWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiBoZWFkZXJMYXllciwg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQoreworICAgIC8vIEhlYWRlcnMgYW5k
IGZvb3RlcnMgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIHRoZSByb290IG5vZGUuCisgICAgQVNTRVJU
KG5vZGUgPT0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CisKKyAgICBu
b2RlLT5zZXRIZWFkZXJMYXllcihoZWFkZXJMYXllcik7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVD
b21taXQoKTsKK30KKwordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRGb290ZXJM
YXllckZvck5vZGUoR3JhcGhpY3NMYXllciogZm9vdGVyTGF5ZXIsIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZSogbm9kZSkKK3sKKyAgICAvLyBIZWFkZXJzIGFuZCBmb290ZXJzIGFyZSBvbmx5
IHN1cHBvcnRlZCBvbiB0aGUgcm9vdCBub2RlLgorICAgIEFTU0VSVChub2RlID09IG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworCisgICAgbm9kZS0+c2V0Rm9vdGVyTGF5
ZXIoZm9vdGVyTGF5ZXIpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3Zv
aWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25G
b3JOb2RlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUq
IG5vZGUpCit7CisgICAgbm9kZS0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24ocmVnaW9uKTsK
KyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCit2b2lkIEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkIHdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkK
K3sKKyAgICBub2RlLT5zZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZlbnRIYW5kbGVy
Q291bnQpOworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzRm9y
Tm9kZShTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCwgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQoreworICAgIG5vZGUtPnNldFNjcm9sbEJl
aGF2aW9yRm9yRml4ZWRFbGVtZW50cyhiZWhhdmlvckZvckZpeGVkKTsKKyAgICBzY2hlZHVsZVRy
ZWVTdGF0ZUNvbW1pdCgpOworfQorCisvLyBGSVhNRTogbm90IHN1cmUgaWYgdGhpcyBiZWxvbmdz
IGhlcmUuCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbGJhclBhaW50
ZXJzRnJvbVNjcm9sbGJhcnNGb3JOb2RlKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIsIFNj
cm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBub2RlKQoreworICAgIG5vZGUtPnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnMo
dmVydGljYWxTY3JvbGxiYXIsIGhvcml6b250YWxTY3JvbGxiYXIpOworICAgIHNjaGVkdWxlVHJl
ZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0
U3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyBy
ZWFzb25zKQoreworICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5
ZXIgaXMgbGlrZWx5IHRvIGJlIG91dC1vZi1zeW5jaCB3aXRoIHRoZSBQbGF0Zm9ybUxheWVyCisg
ICAgLy8gYXQgdGhpcyBwb2ludC4gU28gd2UnbGwgdXBkYXRlIGl0IGJlZm9yZSB3ZSBzd2l0Y2gg
YmFjayB0byBtYWluIHRocmVhZCBzY3JvbGxpbmcKKyAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBs
YXllciBwb3NpdGlvbmluZyBidWdzLgorICAgIGlmIChyZWFzb25zKQorICAgICAgICB1cGRhdGVN
YWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUt
PnJvb3RTdGF0ZU5vZGUoKS0+c2V0U3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKHJlYXNvbnMp
OworICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Cit9CisKK3ZvaWQgQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9wYWdlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCku
dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
R3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFt
ZVZpZXcpKQorICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+c2Ny
b2xsUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVj
b21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1l
VmlldykKK3sKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSB0b1Njcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c3RhdGVOb2RlRm9y
SUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybjsKKyAgICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZShjb21wdXRlQ3Vy
cmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKSwgbm9kZSk7Cit9CisKK2Jvb2wgQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNjcm9sbGluZ1RyZWUoKS0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOworfQorCit2
b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihT
Y3JvbGxQaW5uaW5nQmVoYXZpb3IgcGlubmluZykKK3sKKyAgICBzY3JvbGxpbmdUcmVlKCktPnNl
dFNjcm9sbFBpbm5pbmdCZWhhdmlvcihwaW5uaW5nKTsKK30KKworU3RyaW5nIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCisgICAgICAgIHJldHVy
biBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zY3JvbGxpbmdTdGF0ZVRy
ZWVBc1RleHQoKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYjBkMDUyNzgzNWQzNDIwNmQwYzhmZTk4MTNhOGY2YzAyYmFiYTk0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yX2gKKyNkZWZpbmUgQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvcl9oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAi
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGFnZTsK
K2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlTm9kZTsKK2NsYXNzIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKKworLy8g
U2Nyb2xsaW5nQ29vcmRpbmF0b3Igc3ViY2xhc3MgdGhhdCBtYWludGFpbnMgYSBTY3JvbGxpbmdT
dGF0ZVRyZWUgYW5kIGEgU2Nyb2xsaW5nVHJlZSwKKy8vIGFsbG93aW5nIGFzeW5jaHJvbm91cyBz
Y3JvbGxpbmcgKGluIGFub3RoZXIgdGhyZWFkIG9yIHByb2Nlc3MpLgorY2xhc3MgQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvciA6IHB1YmxpYyBTY3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcj4gY3JlYXRl
KFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisKKyAg
ICBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxp
bmdUcmVlLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yKFBhZ2UqKTsKKworICAgIHZvaWQgc2V0U2Nyb2xsaW5nVHJlZShQYXNzUmVmUHRyPFNjcm9s
bGluZ1RyZWU+IHNjcm9sbGluZ1RyZWUpIHsgbV9zY3JvbGxpbmdUcmVlID0gc2Nyb2xsaW5nVHJl
ZTsgfQorCisgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKiBzY3JvbGxpbmdTdGF0ZVRyZWUoKSB7IHJl
dHVybiBtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKTsgfQorCisgICAgUGFzc1JlZlB0cjxTY3Jv
bGxpbmdUcmVlPiByZWxlYXNlU2Nyb2xsaW5nVHJlZSgpIHsgcmV0dXJuIG1fc2Nyb2xsaW5nVHJl
ZS5yZWxlYXNlKCk7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNBc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmlzaWJsZVNsb3dSZXBhaW50
Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoRnJhbWVWaWV3KikgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVk
KEZyYW1lVmlldyopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdSb290TGF5
ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyosIGNvbnN0IEludFBvaW50JikgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIFNjcm9sbGluZ05vZGVJRCBhdHRhY2hUb1N0YXRlVHJlZShT
Y3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5ld05vZGVJRCwgU2Nyb2xsaW5nTm9k
ZUlEIHBhcmVudElEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRl
VHJlZShTY3JvbGxpbmdOb2RlSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0
YXRlVHJlZSgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0Q29u
c3RyYWluZWROb2RlKFNjcm9sbGluZ05vZGVJRCwgY29uc3QgVmlld3BvcnRDb25zdHJhaW50cyYs
IEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xs
aW5nTm9kZShTY3JvbGxpbmdOb2RlSUQsIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyLCBHcmFw
aGljc0xheWVyKiBjb3VudGVyU2Nyb2xsaW5nTGF5ZXIpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
U3RyaW5nIHNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihTY3JvbGxQaW5uaW5nQmVoYXZp
b3IpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHN5bmNDaGlsZFBvc2l0aW9ucyhjb25z
dCBMYXlvdXRSZWN0JiB2aWV3cG9ydFJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgU2Ny
b2xsYmFyT3JpZW50YXRpb24pIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0
ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyhTeW5jaHJv
bm91c1Njcm9sbGluZ1JlYXNvbnMpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlVHJlZVN0YXRlQ29tbWl0KCkgPSAwOworCisgICAgdm9pZCBlbnN1cmVSb290U3RhdGVOb2Rl
Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOworICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xs
TGF5ZXJQb3NpdGlvbigpOworCisgICAgdm9pZCBzZXRTY3JvbGxMYXllckZvck5vZGUoR3JhcGhp
Y3NMYXllciosIFNjcm9sbGluZ1N0YXRlTm9kZSopOworICAgIHZvaWQgc2V0Q291bnRlclNjcm9s
bGluZ0xheWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7CisgICAgdm9pZCBzZXRIZWFkZXJMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciosIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworICAgIHZvaWQgc2V0Rm9vdGVyTGF5ZXJGb3JO
b2RlKEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2
b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24mLCBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVy
Q291bnRGb3JOb2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAg
ICB2b2lkIHNldFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50c0Zvck5vZGUoU2Nyb2xsQmVo
YXZpb3JGb3JGaXhlZEVsZW1lbnRzLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAg
ICAvLyBGSVhNRTogbW92ZSBzb21ld2hlcmUgZWxzZT8KKyAgICB2b2lkIHNldFNjcm9sbGJhclBh
aW50ZXJzRnJvbVNjcm9sbGJhcnNGb3JOb2RlKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIs
IFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7CisKKyAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBtX3Njcm9sbGluZ1N0YXRl
VHJlZTsKKyAgICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gbV9zY3JvbGxpbmdUcmVlOworfTsKKwor
U0NST0xMSU5HX0NPT1JESU5BVE9SX1RZUEVfQ0FTVFMoQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
ciwgaXNBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKCkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gQXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAppbmRleCA3ZDJjM2EyN2ExMTkwODZjNDNh
NGNjMGY3ZDE3Yjg0ODkwZTI1OGM4Li5hN2UzODRjNzUwYTRiMjg1MzU3MGExN2E4NGY0ZmYwNDhh
NTc3YjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTEwNiwxMCArMTA2LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgflNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ry
b3llZCgpOwotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICB2aXJ0dWFsIFNjcm9s
bGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0jZW5kaWYKKyAg
ICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMgc2Nyb2xsaW5n
IGNvb3JkaW5hdG9yIGhhbmRsZXMgc2Nyb2xsaW5nIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4K
ICAgICBib29sIGNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KEZyYW1lVmlldyopIGNv
bnN0OwpAQCAtMjE5LDYgKzIxNyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZvcmNlU3luY2hy
b25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlczsKIH07CiAKKyNkZWZpbmUgU0NST0xMSU5H
X0NPT1JESU5BVE9SX1RZUEVfQ0FTVFMoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKKyAg
ICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBTY3JvbGxpbmdDb29yZGluYXRvciwg
dmFsdWUsIHZhbHVlLT5wcmVkaWNhdGUsIHZhbHVlLnByZWRpY2F0ZSkKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaApp
bmRleCBiMDY1MTg3YzI2MDY3YmI4NjYxNjZjMjkwN2RmNGMzNzAxMmQ2ODhhLi5hOTAzYTg0ZmFm
ZWNlMmFiZTE4ZDJhY2M4NjQxNGEwNDdkZWNhMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaApAQCAtNDcsNiArNDcs
OCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUaHJlYWRlZFNjcm9sbGluZ1RyZWUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0TmV3VHJl
ZVN0YXRlKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPikgT1ZFUlJJREU7CisKICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBP
VkVSUklERTsKIAogICAgIC8vIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLiBXaWxsIHRy
eSB0byBoYW5kbGUgdGhlIHdoZWVsIGV2ZW50IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgpAQCAt
NTksNyArNjEsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFRocmVhZGVkU2Ny
b2xsaW5nVHJlZShTY3JvbGxpbmdDb29yZGluYXRvciopOwogCi0gICAgdmlydHVhbCB2b2lkIGNv
bW1pdE5ld1RyZWVTdGF0ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4pIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIFNldE9yU3luY1Njcm9sbGluZ0xheWVyUG9zaXRpb24g
PSBTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbikgT1ZFUlJJREU7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2UpIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAppbmRleCBhNDE3YzcxNWU0
MDYyMjVhNzUwZjEwNDRhNWQ2YmJiM2MxNGIwNzE3Li4xNTdlZWQ5YmFiN2U2NjIyYzhhNjE5YmJh
NDk2ZTI0ODczNjI5OTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaApAQCAtMjgsNyArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAotI2luY2x1ZGUgIlNjcm9sbGluZ0Nv
b3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDg0ICszOCwyNiBAQCBjbGFzcyBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CiBjbGFzcyBUaHJl
YWRlZFNjcm9sbGluZ1RyZWU7CiAKLWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjIDogcHVi
bGljIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHsKK2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
IDogcHVibGljIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IgewogcHVibGljOgogICAgIGV4cGxp
Y2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjKFBhZ2UqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxp
bmdDb29yZGluYXRvck1hYygpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsK
IAotICAgIHZpcnR1YWwgU2Nyb2xsaW5nVHJlZSogc2Nyb2xsaW5nVHJlZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpOwotCi0gICAgLy8gU2hvdWxk
IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBoYXMgYmVlbiBsYWlkIG91
dC4KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqKTsK
LQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJvb3QgbGF5ZXIgZm9yIHRo
ZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCi0gICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld1Jv
b3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqKTsKLQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQg
d2hlbmV2ZXIgdGhlIHNjcm9sbGJhciBsYXllciBmb3IgdGhlIGdpdmVuIHNjcm9sbGFibGUgYXJl
YSBjaGFuZ2VzLgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotCi0gICAg
Ly8gUmVxdWVzdHMgdGhhdCB0aGUgc2Nyb2xsaW5nIGNvb3JkaW5hdG9yIHVwZGF0ZXMgdGhlIHNj
cm9sbCBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gZnJhbWUgdmlldy4gSWYgdGhpcyBmdW5jdGlvbiBy
ZXR1cm5zIHRydWUsIGl0IG1lYW5zIHRoYXQgdGhlCi0gICAgLy8gcG9zaXRpb24gd2lsbCBiZSB1
cGRhdGVkIGFzeW5jaHJvbm91c2x5LiBJZiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgY2FsbGVyIHNo
b3VsZCB1cGRhdGUgdGhlIHNjcm9sbGluZyBwb3NpdGlvbiBpdHNlbGYuCi0gICAgdmlydHVhbCBi
b29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqLCBjb25zdCBJbnRQb2lu
dCYpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpIE9WRVJSSURF
OwogCiAgICAgLy8gSGFuZGxlIHRoZSB3aGVlbCBldmVudCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVh
ZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBldmVudCB3YXMgaGFuZGxlZCBvciBub3QuCi0gICAgdmly
dHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50Jik7Ci0KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gaW5kaWNhdGUg
dGhhdCBhIGxheWVyIHNob3VsZCBiZSAob3Igc2hvdWxkIG5vdCBsb25nZXIgYmUpIHJlcHJlc2Vu
dGVkIGJ5IGEgbm9kZQotICAgIC8vIGluIHRoZSBzY3JvbGxpbmcgdHJlZS4KLSAgICB2aXJ0dWFs
IFNjcm9sbGluZ05vZGVJRCBhdHRhY2hUb1N0YXRlVHJlZShTY3JvbGxpbmdOb2RlVHlwZSwgU2Ny
b2xsaW5nTm9kZUlEIG5ld05vZGVJRCwgU2Nyb2xsaW5nTm9kZUlEIHBhcmVudElEKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpOwotCi0gICAg
Ly8gVGhpcyBmdW5jdGlvbiB3aXBlcyBvdXQgdGhlIGN1cnJlbnQgdHJlZS4KLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJTdGF0ZVRyZWUoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIHNjcm9sbGluZ1N0
YXRlVHJlZUFzVGV4dCgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgdmlydHVhbCBib29sIGlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBPVkVSUklERTsKLSAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKFNjcm9sbFBpbm5pbmdCZWhhdmlvcikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3KiwgY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikgT1ZFUlJJREU7CiAKIHByaXZhdGU6Ci0gICAgLy8gUmV0dXJu
IHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0b3IgY2FuIGtlZXAgZml4ZWQgcG9zaXRp
b24gbGF5ZXJzIGZpeGVkIHRvIHRoZWlyCi0gICAgLy8gY29udGFpbmVycyB3aGlsZSBzY3JvbGxp
bmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCB1
cGRhdGUgdGhlIFNjcm9sbGluZ1N0YXRlTm9kZSBmb3IgdGhlIGdpdmVuIHZpZXdwb3J0IGNvbnN0
cmFpbmVkIG9iamVjdC4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRDb25zdHJhaW5l
ZE5vZGUoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBWaWV3cG9ydENvbnN0cmFpbnRzJiwgR3JhcGhp
Y3NMYXllciopIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNjcm9sbGluZ05v
ZGUoU2Nyb2xsaW5nTm9kZUlELCBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllciwgR3JhcGhpY3NM
YXllciogY291bnRlclNjcm9sbGluZ0xheWVyKSBPVkVSUklERTsKLQotICAgIC8vIENhbGxlZCB0
byBzeW5jaCB0aGUgR3JhcGhpY3NMYXllciBwb3NpdGlvbnMgZm9yIGNoaWxkIGxheWVycyB3aGVu
IHRoZWlyIENBTGF5ZXJzIGhhdmUgYmVlbiBtb3ZlZCBieSB0aGUgc2Nyb2xsaW5nIHRocmVhZC4K
LSAgICB2aXJ0dWFsIHZvaWQgc3luY0NoaWxkUG9zaXRpb25zKGNvbnN0IExheW91dFJlY3QmIHZp
ZXdwb3J0UmVjdCkgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hlZWxF
dmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVh
c29ucyk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmlzaWJsZVNsb3dSZXBhaW50Vmlld3BvcnRD
b25zdHJhaW5lZE9iamVjdHMoRnJhbWVWaWV3KikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQot
ICAgIHZvaWQgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKLQot
ICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKLSAgICB2b2lkIHNldENvdW50ZXJTY3JvbGxpbmdMYXllckZvck5vZGUoR3Jh
cGhpY3NMYXllciosIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOwotICAgIHZvaWQgc2V0
SGVhZGVyTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqKTsKLSAgICB2b2lkIHNldEZvb3RlckxheWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiwg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7Ci0gICAgdm9pZCBzZXRTY3JvbGxiYXJQYWlu
dGVyc0Zyb21TY3JvbGxiYXJzRm9yTm9kZShTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyLCBT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSopOwotICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJl
Z2lvbiYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOwotICAgIHZvaWQgc2V0V2hlZWxF
dmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSopOwotICAgIHZvaWQgc2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzRm9yTm9k
ZShTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSopOwotCi0gICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7
Ci0KLSAgICB2b2lkIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CisgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkgT1ZFUlJJREU7CiAKICAgICB2b2lkIHNjcm9sbGlu
Z1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM+Kik7CiAgICAgdm9pZCBjb21taXRUcmVlU3RhdGUoKTsKKyAgICAKKyAgICB2b2lkIHVwZGF0
ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCk7CiAKLSAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVU
cmVlPiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKLSAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdU
cmVlPiBtX3Njcm9sbGluZ1RyZWU7CiAgICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM+
IG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXI7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWMubW0KaW5kZXggNzk4YTE5NTBkZTk5ZDliMWVjZWM2ZGY3YmJmODY5NmFmYzYzZmQwYi4u
YjQzOTIxZWNjN2RlYWQyNGY2NzUzZTBkZTcyNjY1NGE5ZGFlZjc1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGlu
YXRvck1hYy5tbQpAQCAtMjksMjEgKzI5LDExIEBACiAKICNpbXBvcnQgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNs
dWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIlJl
bmRlckxheWVyQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ0NvbnN0cmFpbnRzLmgiCi0j
aW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUu
aCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdU
aHJlYWQuaCIKICNpbmNsdWRlICJUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaCIKQEAgLTUyLDM1NCAr
NDIsNTggQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JvbGxpbmdDb29y
ZGluYXRvclByaXZhdGUgewotfTsKLQogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjKFBhZ2UqIHBhZ2UpCi0gICAgOiBTY3JvbGxpbmdDb29yZGluYXRvcihw
YWdlKQotICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUoU2Nyb2xsaW5nU3RhdGVUcmVlOjpjcmVh
dGUoKSkKLSAgICAsIG1fc2Nyb2xsaW5nVHJlZShUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmNyZWF0
ZSh0aGlzKSkKKyAgICA6IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkKICAgICAsIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIodGhpcywgJlNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjOjpzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKQogeworICAgIHNl
dFNjcm9sbGluZ1RyZWUoVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpjcmVhdGUodGhpcykpOwogfQog
CiBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjKCkKIHsK
LSAgICBBU1NFUlQoIW1fc2Nyb2xsaW5nVHJlZSk7CisgICAgQVNTRVJUKCFzY3JvbGxpbmdUcmVl
KCkpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpwYWdlRGVzdHJveWVkKCkK
IHsKLSAgICBTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpOworICAgIEFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKIAogICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOwogCiAgICAgLy8gSW52YWxpZGF0aW5nIHRo
ZSBzY3JvbGxpbmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0d2VlbiB0
aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4KLSAgICBT
Y3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmludmFsaWRhdGUs
IG1fc2Nyb2xsaW5nVHJlZS5yZWxlYXNlKCkpKTsKLX0KLQotU2Nyb2xsaW5nVHJlZSogU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1RyZWUoKSBjb25zdAotewotICAgIEFTU0VSVCht
X3Njcm9sbGluZ1RyZWUpOwotICAgIHJldHVybiBtX3Njcm9sbGluZ1RyZWUuZ2V0KCk7Ci19Ci0K
LWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIHJldHVybiBzY3JvbGxpbmdUcmVlKCktPmlzUnViYmVyQmFuZEluUHJvZ3Jl
c3MoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xsUGlubmlu
Z0JlaGF2aW9yKFNjcm9sbFBpbm5pbmdCZWhhdmlvciBwaW5uaW5nKQotewotICAgIHNjcm9sbGlu
Z1RyZWUoKS0+c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKHBpbm5pbmcpOworICAgIFJlZlB0cjxU
aHJlYWRlZFNjcm9sbGluZ1RyZWU+IHNjcm9sbGluZ1RyZWUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0
PFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4ocmVsZWFzZVNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Ny
b2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmludmFs
aWRhdGUsIHNjcm9sbGluZ1RyZWUpKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yzo6Y29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKQogewotICAgIGlmICghbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpCisgICAgaWYgKCFzY3JvbGxpbmdTdGF0ZVRy
ZWUoKS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29t
bWl0VHJlZVN0YXRlKCk7CiAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5z
dG9wKCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld0xheW91
dFVwZGF0ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIC8vIElmIHRoZXJlIGlzbid0IGEgcm9v
dCBub2RlIHlldCwgZG9uJ3QgZG8gYW55dGhpbmcuIFdlJ2xsIGJlIGNhbGxlZCBhZ2FpbiBhZnRl
ciBjcmVhdGluZyBvbmUuCi0gICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRl
Tm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gb2Yg
dGhlIHBhZ2UgdGhhdCB3ZSBjYW4ndCBkbyBmYXN0IHNjcm9sbGluZyBmb3IuIFRoaXMgY3VycmVu
dGx5IGluY2x1ZGVzCi0gICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJh
bWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZl
biBpZiB0aGUKLSAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBu
b3QgdGhlIG1haW4gZnJhbWUuCi0gICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0g
Y29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCZtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQ
b2ludCgpKTsKLQotICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGhhdmUgdGhl
IGFiaWxpdHkgdG8gc2V0IG5vbi1mYXN0IHNjcm9sbGluZyByZWdpb25zIGZvciBtb3JlIHRoYW4K
LSAgICAvLyBqdXN0IHRoZSByb290IG5vZGUuIEJ1dCByaWdodCBub3csIHRoaXMgY29uY2VwdCBv
bmx5IGFwcGxpZXMgdG8gdGhlIHJvb3QuCi0gICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25G
b3JOb2RlKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpKTsKLQotICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZp
ZXcoZnJhbWVWaWV3KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKiBub2RlID0gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKSk7
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JvbGxiYXIqIHZlcnRp
Y2FsU2Nyb2xsYmFyID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpOwotICAgIHNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnNGb3JOb2RlKHZlcnRp
Y2FsU2Nyb2xsYmFyLCBob3Jpem9udGFsU2Nyb2xsYmFyLCBub2RlKTsKLQotICAgIG5vZGUtPnNl
dEZyYW1lU2NhbGVGYWN0b3IoZnJhbWVWaWV3LT5mcmFtZSgpLmZyYW1lU2NhbGVGYWN0b3IoKSk7
Ci0gICAgbm9kZS0+c2V0SGVhZGVySGVpZ2h0KGZyYW1lVmlldy0+aGVhZGVySGVpZ2h0KCkpOwot
ICAgIG5vZGUtPnNldEZvb3RlckhlaWdodChmcmFtZVZpZXctPmZvb3RlckhlaWdodCgpKTsKLQot
ICAgIG5vZGUtPnNldFNjcm9sbE9yaWdpbihmcmFtZVZpZXctPnNjcm9sbE9yaWdpbigpKTsKLSAg
ICBub2RlLT5zZXRWaWV3cG9ydFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPnZp
c2libGVDb250ZW50UmVjdCgpLnNpemUoKSkpOwotICAgIG5vZGUtPnNldFRvdGFsQ29udGVudHNT
aXplKGZyYW1lVmlldy0+dG90YWxDb250ZW50c1NpemUoKSk7Ci0KLSAgICBTY3JvbGxhYmxlQXJl
YVBhcmFtZXRlcnMgc2Nyb2xsUGFyYW1ldGVyczsKLSAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6
b250YWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3Rp
Y2l0eSgpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0g
ZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKTsKLSAgICBzY3JvbGxQYXJhbWV0
ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhciAm
JiBob3Jpem9udGFsU2Nyb2xsYmFyLT5lbmFibGVkKCk7Ci0gICAgc2Nyb2xsUGFyYW1ldGVycy5o
YXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciAmJiB2ZXJ0aWNh
bFNjcm9sbGJhci0+ZW5hYmxlZCgpOwotICAgIHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNj
cm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXJNb2RlKCk7Ci0gICAg
c2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSBmcmFtZVZpZXctPnZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZSgpOwotCi0gICAgbm9kZS0+c2V0U2Nyb2xsYWJsZUFyZWFQYXJhbWV0
ZXJzKHNjcm9sbFBhcmFtZXRlcnMpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci19
Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5k
bGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi17Ci0gICAgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xs
TGF5ZXJJRCgpKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgc2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUoY29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50KCksIG5vZGUpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFt
ZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCi17Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIGlmICghY29v
cmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0
YXRlTm9kZSwgdGhlbiB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KLSAgICBlbnN1cmVSb290U3RhdGVO
b2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5yb290U3RhdGVOb2RlKCkpOwotCi0gICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1l
Vmlld1Jvb3RMYXllckRpZENoYW5nZShmcmFtZVZpZXcpOwotCi0gICAgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiBub2RlID0gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgp
KSk7Ci0gICAgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KGZy
YW1lVmlldyksIG5vZGUpOwotICAgIHNldENvdW50ZXJTY3JvbGxpbmdMYXllckZvck5vZGUoY291
bnRlclNjcm9sbGluZ0xheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIG5vZGUpOwotICAgIHNl
dEhlYWRlckxheWVyRm9yTm9kZShoZWFkZXJMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBu
b2RlKTsKLSAgICBzZXRGb290ZXJMYXllckZvck5vZGUoZm9vdGVyTGF5ZXJGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KSwgbm9kZSk7Ci0gICAgc2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRz
Rm9yTm9kZShmcmFtZVZpZXctPnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpLCBub2Rl
KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xsYWJsZUFyZWFTY3Jv
bGxiYXJMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEgIT0gc3Rh
dGljX2Nhc3Q8U2Nyb2xsYWJsZUFyZWEqPihtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJh
cikKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UoKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoKTsKLX0KLQotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JG
cmFtZVZpZXcoZnJhbWVWaWV3KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZy
YW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSB8fCBmcmFtZVZpZXctPmZyYW1lKCkuZG9j
dW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKLSAgICAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSwg
U2V0U2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbik7Ci0KLSAgICAvLyBJZiB0aGlzIGZyYW1lIHZpZXcn
cyBkb2N1bWVudCBpcyBiZWluZyBwdXQgaW50byB0aGUgcGFnZSBjYWNoZSwgd2UgZG9uJ3Qgd2Fu
dCB0byB1cGRhdGUgb3VyCi0gICAgLy8gbWFpbiBmcmFtZSBzY3JvbGwgcG9zaXRpb24uIEp1c3Qg
bGV0IHRoZSBGcmFtZVZpZXcgdGhpbmsgdGhhdCB3ZSBkaWQuCi0gICAgaWYgKGZyYW1lVmlldy0+
ZnJhbWUoKS5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlID0gdG9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklE
KGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKSk7Ci0gICAgaWYgKCFzdGF0ZU5vZGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7
Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
Ym9vbCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6aGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcq
LCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsKIAotICAgIGlmIChtX3Njcm9sbGlu
Z1RyZWUtPndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCisgICAg
aWYgKHNjcm9sbGluZ1RyZWUoKS0+d2lsbFdoZWVsRXZlbnRTdGFydFN3aXBlR2VzdHVyZSh3aGVl
bEV2ZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU2Nyb2xsaW5nVGhyZWFkOjpk
aXNwYXRjaChiaW5kKCZUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZlbnQsIG1f
c2Nyb2xsaW5nVHJlZS5nZXQoKSwgd2hlZWxFdmVudCkpOworICAgIFNjcm9sbGluZ1RocmVhZDo6
ZGlzcGF0Y2goYmluZCgmVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50LCB0
b1RocmVhZGVkU2Nyb2xsaW5nVHJlZShzY3JvbGxpbmdUcmVlKCkpLCB3aGVlbEV2ZW50KSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLVNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRv
ck1hYzo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9s
bGluZ05vZGVJRCBuZXdOb2RlSUQsIFNjcm9sbGluZ05vZGVJRCBwYXJlbnRJRCkKLXsKLSAgICBy
ZXR1cm4gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmF0dGFjaE5vZGUobm9kZVR5cGUsIG5ld05vZGVJ
RCwgcGFyZW50SUQpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpkZXRhY2hG
cm9tU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCi17Ci0gICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPmRldGFjaE5vZGUobm9kZUlEKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvck1hYzo6Y2xlYXJTdGF0ZVRyZWUoKQotewotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5j
bGVhcigpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjplbnN1cmVSb290U3Rh
dGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQotewotICAgIEFTU0VSVChm
cmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7Ci0gICAgYXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xs
aW5nTm9kZSwgZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCksIDApOwotfQotCi12b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciog
c2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKLXsKLSAgICBub2RlLT5zZXRT
Y3JvbGxMYXllcihzY3JvbGxMYXllcik7Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsK
LX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0Q291bnRlclNjcm9sbGluZ0xh
eWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiBsYXllciwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKiBub2RlKQotewotICAgIG5vZGUtPnNldENvdW50ZXJTY3JvbGxpbmdMYXllcihsYXllcik7
Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYzo6c2V0SGVhZGVyTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqIGhlYWRlckxh
eWVyLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCi17Ci0gICAgLy8gSGVhZGVy
cyBhbmQgZm9vdGVycyBhcmUgb25seSBzdXBwb3J0ZWQgb24gdGhlIHJvb3Qgbm9kZS4KLSAgICBB
U1NFUlQobm9kZSA9PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKLQot
ICAgIG5vZGUtPnNldEhlYWRlckxheWVyKGhlYWRlckxheWVyKTsKLSAgICBzY2hlZHVsZVRyZWVT
dGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRGb290
ZXJMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciogZm9vdGVyTGF5ZXIsIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSogbm9kZSkKLXsKLSAgICAvLyBIZWFkZXJzIGFuZCBmb290ZXJzIGFyZSBv
bmx5IHN1cHBvcnRlZCBvbiB0aGUgcm9vdCBub2RlLgotICAgIEFTU0VSVChub2RlID09IG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOwotCi0gICAgbm9kZS0+c2V0Rm9vdGVy
TGF5ZXIoZm9vdGVyTGF5ZXIpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNj
cm9sbGJhcnNGb3JOb2RlKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIsIFNjcm9sbGJhciog
aG9yaXpvbnRhbFNjcm9sbGJhciwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQot
ewotICAgIG5vZGUtPnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnModmVydGljYWxT
Y3JvbGxiYXIsIGhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29t
bWl0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldE5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24mIHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiBub2RlKQotewotICAgIG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKHJlZ2lvbik7Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUo
dW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKiBub2RlKQotewotICAgIG5vZGUtPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxF
dmVudEhhbmRsZXJDb3VudCk7Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVs
ZW1lbnRzRm9yTm9kZShTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JG
aXhlZCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQotewotICAgIG5vZGUtPnNl
dFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyhiZWhhdmlvckZvckZpeGVkKTsKLSAgICBz
Y2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpzZXRTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMoU3luY2hyb25vdXNTY3JvbGxpbmdS
ZWFzb25zIHJlYXNvbnMpCi17Ci0gICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0
YXRlTm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgRnJhbWVWaWV3J3MgR3Jh
cGhpY3NMYXllciBpcyBsaWtlbHkgdG8gYmUgb3V0LW9mLXN5bmNoIHdpdGggdGhlIFBsYXRmb3Jt
TGF5ZXIKLSAgICAvLyBhdCB0aGlzIHBvaW50LiBTbyB3ZSdsbCB1cGRhdGUgaXQgYmVmb3JlIHdl
IHN3aXRjaCBiYWNrIHRvIG1haW4gdGhyZWFkIHNjcm9sbGluZwotICAgIC8vIGluIG9yZGVyIHRv
IGF2b2lkIGxheWVyIHBvc2l0aW9uaW5nIGJ1Z3MuCi0gICAgaWYgKHJlYXNvbnMpCi0gICAgICAg
IHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsKLSAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMo
cmVhc29ucyk7Ci0gICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKLX0KLQotdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvck1hYzo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV9wYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZy
YW1lKCkudmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmll
dyhmcmFtZVZpZXcpKQotICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmll
dy0+c2Nyb2xsUG9zaXRpb24oKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6
OnN5bmNDaGlsZFBvc2l0aW9ucyhjb25zdCBMYXlvdXRSZWN0JiB2aWV3cG9ydFJlY3QpCi17Ci0g
ICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBWZWN0b3I8T3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4+KiBjaGlsZHJl
biA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPmNoaWxkcmVuKCk7Ci0g
ICAgaWYgKCFjaGlsZHJlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlJ2xs
IGhhdmUgdG8gdHJhdmVyc2UgZGVlcGVyIGludG8gdGhlIHRyZWUgYXQgc29tZSBwb2ludC4KLSAg
ICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBjaGlsZCA9IGNo
aWxkcmVuLT5hdChpKS5nZXQoKTsKLSAgICAgICAgY2hpbGQtPnN5bmNMYXllclBvc2l0aW9uRm9y
Vmlld3BvcnRSZWN0KHZpZXdwb3J0UmVjdCk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjp1cGRhdGVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQs
IEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyLCBHcmFwaGljc0xheWVyKiBjb3VudGVyU2Nyb2xs
aW5nTGF5ZXIpCi17Ci0gICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gdG9T
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9k
ZUZvcklEKG5vZGVJRCkpOwotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIW5vZGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG5vZGUtPnNldFNjcm9sbExheWVyKHNjcm9sbExheWVyKTsKLSAg
ICBub2RlLT5zZXRDb3VudGVyU2Nyb2xsaW5nTGF5ZXIoY291bnRlclNjcm9sbGluZ0xheWVyKTsK
LSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQotCi12b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWFjOjp1cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTm9kZShTY3JvbGxpbmdOb2RlSUQg
bm9kZUlELCBjb25zdCBWaWV3cG9ydENvbnN0cmFpbnRzJiBjb25zdHJhaW50cywgR3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBBU1NFUlQoc3VwcG9ydHNGaXhlZFBvc2l0aW9u
TGF5ZXJzKCkpOwotCi0gICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlID0gbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKG5vZGVJRCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKGNvbnN0cmFpbnRzLmNvbnN0cmFpbnRUeXBlKCkpIHsK
LSAgICBjYXNlIFZpZXdwb3J0Q29uc3RyYWludHM6OkZpeGVkUG9zaXRpb25Db25zdHJhaW50OiB7
Ci0gICAgICAgIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKiBmaXhlZE5vZGUgPSB0b1Njcm9sbGlu
Z1N0YXRlRml4ZWROb2RlKG5vZGUpOwotICAgICAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoZ3Jh
cGhpY3NMYXllciwgZml4ZWROb2RlKTsKLSAgICAgICAgZml4ZWROb2RlLT51cGRhdGVDb25zdHJh
aW50cygoY29uc3QgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMmKWNvbnN0cmFpbnRz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVmlld3BvcnRDb25zdHJhaW50czo6
U3RpY2t5UG9zaXRpb25Db25zdHJhaW50OiB7Ci0gICAgICAgIFNjcm9sbGluZ1N0YXRlU3RpY2t5
Tm9kZSogc3RpY2t5Tm9kZSA9IHRvU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlKG5vZGUpOwotICAg
ICAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoZ3JhcGhpY3NMYXllciwgc3RpY2t5Tm9kZSk7Ci0g
ICAgICAgIHN0aWNreU5vZGUtPnVwZGF0ZUNvbnN0cmFpbnRzKChjb25zdCBTdGlja3lQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHMmKWNvbnN0cmFpbnRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIH0KLSAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwotfQotCiB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCiB7CiAgICAgaWYg
KG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3Bl
cnRpZXMoKSkKKyAgICBpZiAoIXNjcm9sbGluZ1N0YXRlVHJlZSgpLT5oYXNDaGFuZ2VkUHJvcGVy
dGllcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1p
dHRlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKQEAgLTQxMiwxMSArMTA2LDE2IEBAIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmly
ZWQoVGltZXI8U2Nyb2xsCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNvbW1pdFRy
ZWVTdGF0ZSgpCiB7Ci0gICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2Vk
UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoc2Nyb2xsaW5nU3RhdGVUcmVlKCktPmhhc0NoYW5n
ZWRQcm9wZXJ0aWVzKCkpOwogCi0gICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gdHJlZVN0
YXRlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmNvbW1pdCgpOwotICAgIFNjcm9sbGluZ1RocmVh
ZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlLCBtX3Nj
cm9sbGluZ1RyZWUuZ2V0KCksIHRyZWVTdGF0ZS5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8U2Ny
b2xsaW5nU3RhdGVUcmVlPiB0cmVlU3RhdGUgPSBzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+Y29tbWl0
KCk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZUaHJlYWRlZFNjcm9sbGlu
Z1RyZWU6OmNvbW1pdE5ld1RyZWVTdGF0ZSwgdG9UaHJlYWRlZFNjcm9sbGluZ1RyZWUoc2Nyb2xs
aW5nVHJlZSgpKSwgdHJlZVN0YXRlLnJlbGVhc2UoKSkpOwogCisgICAgdXBkYXRlVGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3IoKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6dXBk
YXRlVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoKQorewogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQyOCw3ICsxMjcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOjpjb21taXRUcmVlU3RhdGUoKQogICAgIFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uIGluZGlj
YXRvck1vZGU7CiAgICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJv
bm91c2x5KCkpCiAgICAgICAgIGluZGljYXRvck1vZGUgPSBTeW5jaHJvbm91c1Njcm9sbGluZ0Jl
Y2F1c2VPZlN0eWxlSW5kaWNhdGlvbjsKLSAgICBlbHNlIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+cm9vdFN0YXRlTm9kZSgpICYmIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2Rl
KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICBlbHNlIGlmIChzY3JvbGxpbmdTdGF0
ZVRyZWUoKS0+cm9vdFN0YXRlTm9kZSgpICYmIHNjcm9sbGluZ1N0YXRlVHJlZSgpLT5yb290U3Rh
dGVOb2RlKCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKSkKICAgICAgICAgaW5kaWNhdG9yTW9k
ZSA9ICBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJbmRpY2F0aW9u
OwogICAgIGVsc2UKICAgICAgICAgaW5kaWNhdG9yTW9kZSA9IEFzeW5jU2Nyb2xsaW5nSW5kaWNh
dGlvbjsKQEAgLTQzNiwxNCArMTM1LDYgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6
Y29tbWl0VHJlZVN0YXRlKCkKICAgICB0aWxlZEJhY2tpbmctPnNldFNjcm9sbGluZ01vZGVJbmRp
Y2F0aW9uKGluZGljYXRvck1vZGUpOwogfQogCi1TdHJpbmcgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHQoKTsK
LQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggYmU0N2ZlN2Uw
OGJhZGRhNzA1MTdhNWQ2MTVjYzJmOTE5Yjc5OGY2NS4uMmRjNDc1ODU2NTU3YjFiMjdhYTJmMGE4
YjEyZjExMDNlNTk0ZGQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSNpbmNsdWRl
IDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Bc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUaHJl
YWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5oPgogI2VuZGlm
CkBAIC02Nyw3ICs2Nyw5IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjphZGRTY3JvbGxpbmdUcmVl
Rm9yUGFnZShXZWJQYWdlKiB3ZWJQYWdlKQogCiAgICAgQVNTRVJUKHdlYlBhZ2UtPmNvcmVQYWdl
KCktPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpOwogICAgIEFTU0VSVCghbV9zY3JvbGxpbmdUcmVl
cy5jb250YWlucyh3ZWJQYWdlLT5wYWdlSUQoKSkpOwotICAgIG1fc2Nyb2xsaW5nVHJlZXMuc2V0
KHdlYlBhZ2UtPnBhZ2VJRCgpLCB0b1RocmVhZGVkU2Nyb2xsaW5nVHJlZSh3ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpLT5zY3JvbGxpbmdUcmVlKCkpKTsKKworICAg
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdG9Bc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yKHdlYlBhZ2UtPmNvcmVQYWdlKCktPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpOworICAgIG1fc2Nyb2xsaW5nVHJlZXMuc2V0KHdlYlBhZ2UtPnBhZ2VJRCgpLCB0
b1RocmVhZGVkU2Nyb2xsaW5nVHJlZShzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsaW5nVHJl
ZSgpKSk7CiB9CiAKIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpyZW1vdmVTY3JvbGxpbmdUcmVlRm9y
UGFnZShXZWJQYWdlKiB3ZWJQYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCmluZGV4IDkwNGE4OGVlZmU5NDk2ZWU0N2UwMWVhOGE2MGFlNThjYzQ0
OGJlZjAuLjhiZjE2MTZiNDNlNDExZGUzMGU3ZjAxZmYwZGUwMTljNWE5MWY5ODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTI4MSw3ICsy
ODEsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNy
ZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICAsIG1fYmFja2dyb3VuZENvbG9yKENv
bG9yOjp3aGl0ZSkKICAgICAsIG1fbWF4aW11bVJlbmRlcmluZ1N1cHByZXNzaW9uVG9rZW4oMCkK
ICAgICAsIG1fc2Nyb2xsUGlubmluZ0JlaGF2aW9yKERvTm90UGluKQotICAgICwgbV91c2VUaHJl
YWRlZFNjcm9sbGluZyhmYWxzZSkKKyAgICAsIG1fdXNlQXN5bmNTY3JvbGxpbmcoZmFsc2UpCiAg
ICAgLCBtX3ZpZXdTdGF0ZShwYXJhbWV0ZXJzLnZpZXdTdGF0ZSkKIHsKICAgICBBU1NFUlQobV9w
YWdlSUQpOwpAQCAtMzE1LDEwICszMTUsMTAgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBw
YWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAg
bV9kcmF3aW5nQXJlYS0+c2V0UGFpbnRpbmdFbmFibGVkKGZhbHNlKTsKIAogI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCi0gICAgbV91c2VUaHJlYWRlZFNjcm9sbGluZyA9IHBhcmFtZXRlcnMu
c3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp0aHJlYWRlZFNjcm9s
bGluZ0VuYWJsZWRLZXkoKSk7CisgICAgbV91c2VBc3luY1Njcm9sbGluZyA9IHBhcmFtZXRlcnMu
c3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp0aHJlYWRlZFNjcm9s
bGluZ0VuYWJsZWRLZXkoKSk7CiAgICAgaWYgKCFtX2RyYXdpbmdBcmVhLT5zdXBwb3J0c1RocmVh
ZGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIG1fdXNlVGhyZWFkZWRTY3JvbGxpbmcgPSBmYWxzZTsK
LSAgICBtX3BhZ2UtPnNldHRpbmdzKCkuc2V0U2Nyb2xsaW5nQ29vcmRpbmF0b3JFbmFibGVkKG1f
dXNlVGhyZWFkZWRTY3JvbGxpbmcpOworICAgICAgICBtX3VzZUFzeW5jU2Nyb2xsaW5nID0gZmFs
c2U7CisgICAgbV9wYWdlLT5zZXR0aW5ncygpLnNldFNjcm9sbGluZ0Nvb3JkaW5hdG9yRW5hYmxl
ZChtX3VzZUFzeW5jU2Nyb2xsaW5nKTsKICNlbmRpZgogCiAgICAgbV9tYWluRnJhbWUgPSBXZWJG
cmFtZTo6Y3JlYXRlV2l0aENvcmVNYWluRnJhbWUodGhpcywgJm1fcGFnZS0+bWFpbkZyYW1lKCkp
OwpAQCAtNDIxLDcgKzQyMSw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBj
b25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGlmIChtX3VzZVRocmVhZGVkU2Nyb2xsaW5n
KQorICAgIGlmIChtX3VzZUFzeW5jU2Nyb2xsaW5nKQogICAgICAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5ldmVudERpc3BhdGNoZXIoKS5hZGRTY3JvbGxpbmdUcmVlRm9yUGFnZSh0aGlzKTsKICNl
bmRpZgogCkBAIC00MzYsNyArNDM2LDcgQEAgV2ViUGFnZTo6fldlYlBhZ2UoKQogICAgIEFTU0VS
VCghbV9wYWdlKTsKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKG1fdXNl
VGhyZWFkZWRTY3JvbGxpbmcpCisgICAgaWYgKG1fdXNlQXN5bmNTY3JvbGxpbmcpCiAgICAgICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmV2ZW50RGlzcGF0Y2hlcigpLnJlbW92ZVNjcm9sbGluZ1Ry
ZWVGb3JQYWdlKHRoaXMpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCmluZGV4IDlmYmMyZTQ1Mzc5NTFiY2JlNzA4MzdhZTQzNTg3YWZmMTcw
YWY3YTYuLjcyZjIzNWQxYzQ2NTI3NzNiZDNhZTU5NTdkZjQ3OTRjNGFmOGNmNmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTA0Nyw3ICsxMDQ3
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3Ig
bV9zY3JvbGxQaW5uaW5nQmVoYXZpb3I7CiAKLSAgICBib29sIG1fdXNlVGhyZWFkZWRTY3JvbGxp
bmc7CisgICAgYm9vbCBtX3VzZUFzeW5jU2Nyb2xsaW5nOwogCiAgICAgVmlld1N0YXRlOjpGbGFn
cyBtX3ZpZXdTdGF0ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YS5tbQppbmRleCA2YTA3MDlmMGM5Y2YzMDk5OTFlYjJkZDU1YTJlNGFmM2FmZDYwOWNlLi5jMDlj
YjFlOGY2ZmQzYjllYmUyZTNkM2NhY2Q1MTM2OWNhZWMwMTc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KQEAgLTUzLDcgKzUzLDcgQEAKICNpbXBvcnQgPHd0
Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotI2ltcG9ydCA8
V2ViQ29yZS9TY3JvbGxpbmdDb29yZGluYXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Bc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RocmVhZC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlLmg+CiAjZW5kaWYKQEAgLTI0Myw3ICsy
NDMsNyBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJl
bmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJgogICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKTsKIAogI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCi0gICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewor
ICAgIGlmIChBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHRvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpKSB7CiAgICAgICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZCA9IG1fd2ViUGFnZS0+c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5h
YmxlZCgpOwogICAgICAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGlu
Z1RyZWU6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQsIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zY3JvbGxpbmdUcmVlKCksIHNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0Vu
YWJsZWQpKTsKICAgICB9Cg==
</data>
<flag name="review"
          id="243917"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>