<?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>38059</bug_id>
          
          <creation_ts>2010-04-23 14:32:03 -0700</creation_ts>
          <short_desc>Merge mac and win DrawingAreaUpdateChunk implementation</short_desc>
          <delta_ts>2010-04-23 14:58:30 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>216560</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 14:32:03 -0700</bug_when>
    <thetext>Merge mac and win DrawingAreaUpdateChunk implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216562</commentid>
    <comment_count>1</comment_count>
      <attachid>54192</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 14:33:00 -0700</bug_when>
    <thetext>Created attachment 54192
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216567</commentid>
    <comment_count>2</comment_count>
      <attachid>54192</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-23 14:37:52 -0700</bug_when>
    <thetext>Comment on attachment 54192
patch

Looks good! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216574</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-23 14:58:30 -0700</bug_when>
    <thetext>Fixed in r58189.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54192</attachid>
            <date>2010-04-23 14:33:00 -0700</date>
            <delta_ts>2010-04-23 14:37:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>drawingArea.diff</filename>
            <type>text/plain</type>
            <size>43242</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODE4NikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDQtMjMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODA1OQorICAgICAgICBN
ZXJnZSBtYWMgYW5kIHdpbiBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rIGltcGxlbWVudGF0aW9uLgor
CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6ZGlkU2V0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL0RyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
VXBkYXRlQ2h1bmsuY3BwOiBDb3BpZWQgZnJvbSBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdp
bmdBcmVhVXBkYXRlQ2h1bmsuY3BwLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVVwZGF0
ZUNodW5rOjpzZXRTaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFVcGRhdGVDaHVuay5oOiBDb3BpZWQgZnJvbSBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdp
bmdBcmVhVXBkYXRlQ2h1bmsuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0Ry
YXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5oOiBSZW1vdmVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvRHJhd2luZ0FyZWFVcGRhdGVDaHVua01hYy5jcHA6IENv
cGllZCBmcm9tIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5j
cHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9EcmF3aW5nQXJlYVVwZGF0ZUNo
dW5rLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL0RyYXdp
bmdBcmVhVXBkYXRlQ2h1bmsuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2Uvd2luL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmtXaW4uY3BwOiBDb3BpZWQgZnJvbSBXZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2luL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwLgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpwYWludEludG9VcGRhdGVDaHVuayk6CisgICAg
ICAgICogd2luL1dlYktpdDIudmNwcm9qOgorCiAyMDEwLTA0LTIzICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4K
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL3dpbi9EcmF3aW5nQXJlYVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vRHJhd2luZ0FyZWFQcm94eS5jcHAJKHJldmlz
aW9uIDU4MTg0KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL0RyYXdpbmdBcmVhUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsMTEgKzEzOCwxMiBAQCB2b2lkIERyYXdpbmdBcmVhUHJv
eHk6OnNldFNpemUoY29uc3QgSW50CiAgICAgcGFnZS0+cHJvY2VzcygpLT5jb25uZWN0aW9uKCkt
PnNlbmQoRHJhd2luZ0FyZWFNZXNzYWdlOjpTZXRTaXplLCBwYWdlLT5wYWdlSUQoKSwgQ29yZUlQ
Qzo6SW4odmlld1NpemUpKTsKIH0KIAotdm9pZCBEcmF3aW5nQXJlYVByb3h5OjpkaWRTZXRTaXpl
KGNvbnN0IEludFNpemUmIHZpZXdTaXplLCBVcGRhdGVDaHVuayogdXBkYXRlQ2h1bmspCit2b2lk
IERyYXdpbmdBcmVhUHJveHk6OmRpZFNldFNpemUoVXBkYXRlQ2h1bmsqIHVwZGF0ZUNodW5rKQog
ewogICAgIEFTU0VSVChtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0aW9uKTsKICAg
ICBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0aW9uID0gZmFsc2U7CiAKKyAgICBJ
bnRTaXplIHZpZXdTaXplID0gdXBkYXRlQ2h1bmstPmZyYW1lKCkuc2l6ZSgpOwogICAgIGlmICh2
aWV3U2l6ZSAhPSBtX2xhc3RTZXRWaWV3U2l6ZSkKICAgICAgICAgc2V0U2l6ZShtX2xhc3RTZXRW
aWV3U2l6ZSk7CiAKQEAgLTE3NCwxMiArMTc1LDExIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6
ZGlkUmVjZWl2ZU1lc3NhZ2UKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2U6OkRpZFNldFNpemU6IHsKLSAgICAgICAgICAg
IEludFNpemUgdmlld1NpemU7CiAgICAgICAgICAgICBVcGRhdGVDaHVuayB1cGRhdGVDaHVuazsK
LSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmRlY29kZShDb3JlSVBDOjpPdXQodmlld1NpemUs
IHVwZGF0ZUNodW5rKSkpCisgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5kZWNvZGUoQ29yZUlQ
Qzo6T3V0KHVwZGF0ZUNodW5rKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
ICAgICBkaWRTZXRTaXplKHZpZXdTaXplLCAmdXBkYXRlQ2h1bmspOworICAgICAgICAgICAgZGlk
U2V0U2l6ZSgmdXBkYXRlQ2h1bmspOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgZGVmYXVsdDoKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL3dpbi9EcmF3aW5nQXJlYVBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL0RyYXdpbmdBcmVhUHJv
eHkuaAkocmV2aXNpb24gNTgxODQpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vRHJhd2luZ0Fy
ZWFQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdm9pZCBlbnN1cmVCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGRyYXdVcGRhdGVD
aHVua0ludG9CYWNraW5nU3RvcmUoVXBkYXRlQ2h1bmsqKTsKLSAgICB2b2lkIGRpZFNldFNpemUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFVwZGF0ZUNodW5rKik7CisgICAgdm9pZCBkaWRTZXRT
aXplKFVwZGF0ZUNodW5rKik7CiAgICAgdm9pZCB1cGRhdGUoVXBkYXRlQ2h1bmsqKTsKIAogICAg
IE93blB0cjxIREM+IG1fYmFja2luZ1N0b3JlREM7CkluZGV4OiBXZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTgxODQpCisrKyBXZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA2LDEyICsx
MDYsMTMgQEAKIAkJQkMyRTZFOEUxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTZFN0UxMTQxOTcw
QzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovOyB9OwogCQlCQzU5NTM0MjEwRkMwNDUyMDA5OEY4
MkQgLyogV2ViTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzU5NTM0MDEwRkMwNDUyMDA5OEY4MkQgLyogV2ViTG9hZGVyQ2xpZW50
LmggKi87IH07CiAJCUJDNTk3MDc1MTE2NTkxRDAwMDU1MUZDQSAvKiBQcm9jZXNzTW9kZWwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTk3MDc0MTE2
NTkxRDAwMDU1MUZDQSAvKiBQcm9jZXNzTW9kZWwuaCAqLzsgfTsKKwkJQkM1RjdCQjQxMTgyMzc2
QzAwNTJDMDJDIC8qIERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RjdCQjIxMTgyMzc2QzAwNTJDMDJDIC8q
IERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwICovOyB9OworCQlCQzVGN0JCNTExODIzNzZDMDA1
MkMwMkMgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RjdCQjMxMTgyMzc2QzAwNTJDMDJDIC8qIERyYXdp
bmdBcmVhVXBkYXRlQ2h1bmsuaCAqLzsgfTsKKwkJQkM1RjdCQjkxMTgyMzc5OTAwNTJDMDJDIC8q
IERyYXdpbmdBcmVhVXBkYXRlQ2h1bmtNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RjdCQjgxMTgyMzc5OTAwNTJDMDJDIC8qIERyYXdpbmdB
cmVhVXBkYXRlQ2h1bmtNYWMuY3BwICovOyB9OwogCQlCQzYxN0VFODEwNENCMzQ3MDBGQjNGRTEg
LyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMUM3REUxMDBFODQ2RTAwNzhERUJDIC8qIEphdmFTY3Jp
cHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJQkM2RURBQTYxMTEyNzFDNjAwRTc2NzhCIC8qIFBh
Z2VDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDNkVEQUE1MTExMjcxQzYwMEU3Njc4QiAvKiBQYWdlQ2xpZW50LmggKi87IH07CiAJCUJDODQ1
MkE3MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg0NTJBNTExNjJDODA5MDBDQUI5QjUgLyog
RHJhd2luZ0FyZWEuY3BwICovOyB9OwogCQlCQzg0NTJBODExNjJDODA5MDBDQUI5QjUgLyogRHJh
d2luZ0FyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDODQ1MkE2MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5oICovOyB9OwotCQlCQzg0
NTJCQjExNjJDOTZGMDBDQUI5QjUgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg0NTJCOTExNjJDOTZG
MDBDQUI5QjUgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5jcHAgKi87IH07Ci0JCUJDODQ1MkJD
MTE2MkM5NkYwMENBQjlCNSAvKiBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg0NTJCQTExNjJDOTZGMDBDQUI5
QjUgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5oICovOyB9OwogCQlCQzg2OTlCNTExNkFBREFB
MDAyQTkyNUIgLyogV0tWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzg2OTlCMjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQlCQzg2OTlCNjExNkFBREFB
MDAyQTkyNUIgLyogV0tWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM4Njk5QjMxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSAqLzsgfTsK
IAkJQkM4Njk5QjcxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlld0ludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg2OTlCNDExNkFBREFBMDAy
QTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCAqLzsgfTsKQEAgLTMwMywxMSArMzA0LDEyIEBACiAJ
CUJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDNTk1MzQwMTBGQzA0NTIwMDk4RjgyRCAvKiBXZWJMb2FkZXJDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDNTk3MDc0MTE2NTkxRDAwMDU1MUZDQSAvKiBQcm9jZXNzTW9k
ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc01vZGVsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNUY3QkIyMTE4MjM3NkMwMDUyQzAyQyAvKiBE
cmF3aW5nQXJlYVVwZGF0ZUNodW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzVGN0JCMzExODIzNzZDMDA1MkMwMkMgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVu
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEcmF3aW5nQXJlYVVwZGF0ZUNo
dW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNUY3QkI4MTE4MjM3OTkwMDUy
QzAyQyAvKiBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERyYXdpbmdBcmVhVXBkYXRlQ2h1bmtNYWMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzZFREFBNTExMTI3MUM2MDBFNzY3OEIgLyogUGFnZUNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODQ1MkE1MTE2MkM4MDkwMENBQjlCNSAvKiBE
cmF3aW5nQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEcmF3
aW5nQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODQ1MkE2MTE2MkM4
MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEcmF3aW5nQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzg0NTJC
OTExNjJDOTZGMDBDQUI5QjUgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM4NDUyQkExMTYyQzk2RjAwQ0FCOUI1IC8q
IERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzg2OTlCMjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Qzg2OTlCMzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV0tWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzg2OTlCNDExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tWaWV3SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU3NCw2ICs1NzYsOCBAQAogCQkJCUJDOTYzRDZDMTEzREQxOTUw
MDU3NEJFMiAvKiBtYWMgKi8sCiAJCQkJQkM4NDUyQTUxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdp
bmdBcmVhLmNwcCAqLywKIAkJCQlCQzg0NTJBNjExNjJDODA5MDBDQUI5QjUgLyogRHJhd2luZ0Fy
ZWEuaCAqLywKKwkJCQlCQzVGN0JCMjExODIzNzZDMDA1MkMwMkMgLyogRHJhd2luZ0FyZWFVcGRh
dGVDaHVuay5jcHAgKi8sCisJCQkJQkM1RjdCQjMxMTgyMzc2QzAwNTJDMDJDIC8qIERyYXdpbmdB
cmVhVXBkYXRlQ2h1bmsuaCAqLywKIAkJCQlCQzExMUFEQzExMkY1QjkzMDAzMzdCQUIgLyogV2Vi
RnJhbWUuY3BwICovLAogCQkJCUJDMDMyRDg5MTBGNDM3QTAwMDU4QzE1QSAvKiBXZWJGcmFtZS5o
ICovLAogCQkJCUJDOTYzRDZBMTEzREQxOTIwMDU3NEJFMiAvKiBXZWJQYWdlLmNwcCAqLywKQEAg
LTc5NSw4ICs3OTksNyBAQAogCQlCQzk2M0Q2QzExM0REMTk1MDA1NzRCRTIgLyogbWFjICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlCQzg0NTJCOTExNjJD
OTZGMDBDQUI5QjUgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5jcHAgKi8sCi0JCQkJQkM4NDUy
QkExMTYyQzk2RjAwQ0FCOUI1IC8qIERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuaCAqLywKKwkJCQlC
QzVGN0JCODExODIzNzk5MDA1MkMwMkMgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVua01hYy5jcHAg
Ki8sCiAJCQkJQkM5NjNENkQxMTNERDFBNTAwNTc0QkUyIC8qIFdlYlBhZ2VNYWMubW0gKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IG1hYzsKQEAgLTg5MCw3ICs4OTMsNiBAQAogCQkJCUJDQzU3MTYyMTE1
QURCNDIwMDFDQ0FGOSAvKiBOb3RJbXBsZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4
NzgwRkMxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDODQ1MkE4MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQkM4NDUyQkMxMTYyQzk2RjAwQ0FCOUI1IC8qIERyYXdpbmdB
cmVhVXBkYXRlQ2h1bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTk3MDc1MTE2NTkxRDAwMDU1
MUZDQSAvKiBQcm9jZXNzTW9kZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODY5OUI1MTE2QUFE
QUEwMDJBOTI1QiAvKiBXS1ZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODY5OUI3MTE2QUFE
QUEwMDJBOTI1QiAvKiBXS1ZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDYsNiAr
OTA4LDcgQEAKIAkJCQlCQ0Y2OUZBMjExNzZEMDE0MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRjY5RkE5MTE3NkQxQ0IwMDQ3MUE1MiAvKiBXS05h
dmlnYXRpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0M5MzhFMTExODBERTQ0MDA4NUU1
RkUgLyogV0tDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM1RjdCQjUxMTgy
Mzc2QzAwNTJDMDJDIC8qIERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMTA0OSw3ICsxMDUyLDYgQEAKIAkJCQlCQ0M1NzE1QzExNUFEQUVGMDAxQ0NBRjkgLyogV2Vi
U3lzdGVtSW50ZXJmYWNlLm0gaW4gU291cmNlcyAqLywKIAkJCQkxQTMwRUFDNjExNUQ3REEzMDA1
M0U5MzcgLyogQ29ubmVjdGlvbk1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzg0NTJBNzEx
NjJDODA5MDBDQUI5QjUgLyogRHJhd2luZ0FyZWEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM4
NDUyQkIxMTYyQzk2RjAwQ0FCOUI1IC8qIERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM4Njk5QjYxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUJDMjBFQkIxMTE2RUVCMDgwMDA5NEE1MCAvKiBXS1N0cmluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzIwRUJCNTExNkVFRjdBMDAwOTRBNTAgLyogV0tVUkwuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0xMDU4LDYgKzEwNjAsOCBAQAogCQkJCUJDRjY5Rjg2MTE3NkNE
NkYwMDQ3MUE1MiAvKiBXZWJIaXN0b3J5Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
RjY5RkEzMTE3NkQwMTQwMDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0Y2OUZBQTExNzZEMUNCMDA0NzFBNTIgLyogV0tOYXZpZ2F0aW9uRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzVGN0JCNDExODIzNzZDMDA1MkMwMkMgLyogRHJhd2lu
Z0FyZWFVcGRhdGVDaHVuay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzVGN0JCOTExODIzNzk5
MDA1MkMwMkMgLyogRHJhd2luZ0FyZWFVcGRhdGVDaHVua01hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5jcHAJ
KHJldmlzaW9uIDU4MTg0KQkoZnJvbSBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdpbmdBcmVh
VXBkYXRlQ2h1bmsuY3BwOjU4MTg0KQorKysgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
VXBkYXRlQ2h1bmsuY3BwCSh3b3JraW5nIGNvcHkpCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmNwcAkocmV2aXNpb24g
NTgxODQpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYVVwZGF0ZUNo
dW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsNiBAQAogI2luY2x1ZGUgIldlYkNv
cmVUeXBlQXJndW1lbnRNYXJzaGFsbGluZy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC03OCwyMiArNzYsNiBAQCB2b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnNldE5lZWRz
RGlzCiAgICAgc2NoZWR1bGVEaXNwbGF5KCk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVD
aHVuazo6cGFpbnRJbnRvVXBkYXRlQ2h1bmsoVXBkYXRlQ2h1bmsqIHVwZGF0ZUNodW5rKQotewot
ICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xv
clNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJp
dG1hcENvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHVwZGF0ZUNodW5rLT5k
YXRhKCksIHVwZGF0ZUNodW5rLT5yZWN0KCkud2lkdGgoKSwgdXBkYXRlQ2h1bmstPnJlY3QoKS5o
ZWlnaHQoKSwgOCwgdXBkYXRlQ2h1bmstPnJlY3QoKS53aWR0aCgpICogNCwgY29sb3JTcGFjZS5n
ZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0KLSAgICAvLyBXZWJDb3Jl
IGV4cGVjdHMgYSBmbGlwcGVkIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIENHQ29udGV4dFRyYW5z
bGF0ZUNUTShiaXRtYXBDb250ZXh0LmdldCgpLCAwLjAsIHVwZGF0ZUNodW5rLT5yZWN0KCkuaGVp
Z2h0KCkpOwotICAgIENHQ29udGV4dFNjYWxlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDEuMCwg
LTEuMCk7Ci0KLSAgICAvLyBOb3cgcGFpbnQgaW50byB0aGUgYmFja2luZyBzdG9yZS4KLSAgICBH
cmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGJpdG1hcENvbnRleHQuZ2V0KCkpOwotICAg
IGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXVwZGF0ZUNodW5rLT5yZWN0KCkueCgpLCAtdXBk
YXRlQ2h1bmstPnJlY3QoKS55KCkpOwotICAgIAotICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3Jh
cGhpY3NDb250ZXh0LCB1cGRhdGVDaHVuay0+cmVjdCgpKTsKLX0KLQogdm9pZCBEcmF3aW5nQXJl
YVVwZGF0ZUNodW5rOjpkaXNwbGF5KCkKIHsKICAgICBBU1NFUlQoIW1faXNXYWl0aW5nRm9yVXBk
YXRlKTsKQEAgLTEzMCw2ICsxMTIsOCBAQCB2b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnNj
aGVkdWxlRGlzCiAKIHZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6c2V0U2l6ZShjb25zdCBJ
bnRTaXplJiB2aWV3U2l6ZSkKIHsKKyAgICBBU1NFUlRfQVJHKHZpZXdTaXplLCAhdmlld1NpemUu
aXNFbXB0eSgpKTsKKwogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgYW4gdXBkYXRl
IHVudGlsIHdlIGRpc3BsYXkuCiAgICAgbV9pc1dhaXRpbmdGb3JVcGRhdGUgPSBmYWxzZTsKICAg
ICAKSW5kZXg6IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuaAko
cmV2aXNpb24gNTgxODQpCShmcm9tIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvRHJhd2luZ0FyZWFV
cGRhdGVDaHVuay5oOjU4MTg0KQorKysgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhVXBk
YXRlQ2h1bmsuaAkod29ya2luZyBjb3B5KQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuaAkocmV2aXNpb24gNTgxODQpCisr
KyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDEzICs0OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgcGFp
bnRJbnRvVXBkYXRlQ2h1bmsoVXBkYXRlQ2h1bmsqKTsKLSAgICAKICAgICB2b2lkIHNjaGVkdWxl
RGlzcGxheSgpOwogICAgIHZvaWQgc2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3
U2l6ZSk7CiAKICAgICB2b2lkIGRpZFVwZGF0ZSgpOwogCisgICAgLy8gUGxhdGZvcm0gb3ZlcnJp
ZGVzCisgICAgdm9pZCBwYWludEludG9VcGRhdGVDaHVuayhVcGRhdGVDaHVuayopOworCiAgICAg
V2ViQ29yZTo6SW50UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1faXNXYWl0aW5nRm9yVXBk
YXRlOwogICAgIFJ1bkxvb3A6OlRpbWVyPERyYXdpbmdBcmVhVXBkYXRlQ2h1bms+IG1fZGlzcGxh
eVRpbWVyOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdpbmdBcmVh
VXBkYXRlQ2h1bmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmNwcAkocmV2aXNpb24gNTgxODQpCisrKyBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiRHJh
d2luZ0FyZWFVcGRhdGVDaHVuay5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlS2lu
ZHMuaCIKLSNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5TWVzc2FnZUtpbmRzLmgiCi0jaW5jbHVk
ZSAiTWVzc2FnZUlELmgiCi0jaW5jbHVkZSAiVXBkYXRlQ2h1bmsuaCIKLSNpbmNsdWRlICJXZWJD
b3JlVHlwZUFyZ3VtZW50TWFyc2hhbGxpbmcuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5j
bHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLURyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OkRyYXdpbmdB
cmVhVXBkYXRlQ2h1bmsoV2ViUGFnZSogd2ViUGFnZSkKLSAgICA6IERyYXdpbmdBcmVhKERyYXdp
bmdBcmVhVXBkYXRlQ2h1bmtUeXBlLCB3ZWJQYWdlKQotICAgICwgbV9pc1dhaXRpbmdGb3JVcGRh
dGUoZmFsc2UpCi0gICAgLCBtX2Rpc3BsYXlUaW1lcihXZWJQcm9jZXNzOjpzaGFyZWQoKS5ydW5M
b29wKCksIHRoaXMsICZEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpkaXNwbGF5KQotewotfQotCi1E
cmF3aW5nQXJlYVVwZGF0ZUNodW5rOjp+RHJhd2luZ0FyZWFVcGRhdGVDaHVuaygpCi17Ci19Ci0K
LXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6aW52YWxpZGF0ZVdpbmRvdyhjb25zdCBJbnRS
ZWN0JiByZWN0LCBib29sIGltbWVkaWF0ZSkKLXsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVVwZGF0
ZUNodW5rOjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVjdCYgcmVjdCwg
Ym9vbCBpbW1lZGlhdGUpCi17Ci0gICAgc2V0TmVlZHNEaXNwbGF5KHJlY3QpOwotfQotCi12b2lk
IERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwo
Y29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBpbW1lZGlhdGUpCi17Ci0gICAgc2V0TmVlZHNEaXNw
bGF5KHJlY3QpOwotfQotCi12b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnNjcm9sbChjb25z
dCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIG11Y2gg
c21hcnRlci4KLSAgICBzZXROZWVkc0Rpc3BsYXkocmVjdFRvU2Nyb2xsKTsKLX0KLQotdm9pZCBE
cmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICAvLyBGSVhNRTogQ29sbGVjdCBhIHNldCBvZiByZWN0cy9yZWdpb24gaW5zdGVh
ZCBvZiBqdXN0IHRoZSB1bmlvbgotICAgIC8vIG9mIGFsbCByZWN0cy4KLSAgICBtX2RpcnR5UmVj
dC51bml0ZShyZWN0KTsKLSAgICBzY2hlZHVsZURpc3BsYXkoKTsKLX0KLQotdm9pZCBEcmF3aW5n
QXJlYVVwZGF0ZUNodW5rOjpwYWludEludG9VcGRhdGVDaHVuayhVcGRhdGVDaHVuayogdXBkYXRl
Q2h1bmspCi17Ci0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9w
dENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgUmV0YWluUHRyPENHQ29u
dGV4dFJlZj4gYml0bWFwQ29udGV4dChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUodXBk
YXRlQ2h1bmstPmRhdGEoKSwgdXBkYXRlQ2h1bmstPnJlY3QoKS53aWR0aCgpLCB1cGRhdGVDaHVu
ay0+cmVjdCgpLmhlaWdodCgpLCA4LCB1cGRhdGVDaHVuay0+cmVjdCgpLndpZHRoKCkgKiA0LCBj
b2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLQotICAg
IC8vIFdlYkNvcmUgZXhwZWN0cyBhIGZsaXBwZWQgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDAuMCwgdXBkYXRlQ2h1bmst
PnJlY3QoKS5oZWlnaHQoKSk7Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4dC5n
ZXQoKSwgMS4wLCAtMS4wKTsKLQotICAgIC8vIE5vdyBwYWludCBpbnRvIHRoZSBiYWNraW5nIHN0
b3JlLgotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoYml0bWFwQ29udGV4dC5n
ZXQoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtdXBkYXRlQ2h1bmstPnJlY3Qo
KS54KCksIC11cGRhdGVDaHVuay0+cmVjdCgpLnkoKSk7Ci0gICAgCi0gICAgbV93ZWJQYWdlLT5k
cmF3UmVjdChncmFwaGljc0NvbnRleHQsIHVwZGF0ZUNodW5rLT5yZWN0KCkpOwotfQotCi12b2lk
IERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OmRpc3BsYXkoKQotewotICAgIEFTU0VSVCghbV9pc1dh
aXRpbmdGb3JVcGRhdGUpOwotCi0gICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gTGF5b3V0IGlmIG5lY2Vzc2FyeS4KLSAgICBtX3dlYlBhZ2Ut
PmxheW91dElmTmVlZGVkKCk7Ci0gCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtX2RpcnR5UmVj
dDsKLSAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKLQotICAgIC8vIENyZWF0ZSBhIG5ldyBV
cGRhdGVDaHVuayBhbmQgcGFpbnQgaW50byBpdC4KLSAgICBVcGRhdGVDaHVuayB1cGRhdGVDaHVu
ayhkaXJ0eVJlY3QpOwotICAgIHBhaW50SW50b1VwZGF0ZUNodW5rKCZ1cGRhdGVDaHVuayk7Ci0K
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoRHJhd2luZ0FyZWFQ
cm94eU1lc3NhZ2U6OlVwZGF0ZSwgbV93ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4odXBk
YXRlQ2h1bmspKTsKLQotICAgIG1faXNXYWl0aW5nRm9yVXBkYXRlID0gdHJ1ZTsKLSAgICBtX2Rp
c3BsYXlUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6c2No
ZWR1bGVEaXNwbGF5KCkKLXsKLSAgICBpZiAobV9pc1dhaXRpbmdGb3JVcGRhdGUpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAobV9kaXNwbGF5VGltZXIuaXNBY3RpdmUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9kaXNwbGF5VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12
b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgdmlld1Np
emUpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciBhbiB1cGRhdGUgdW50aWwg
d2UgZGlzcGxheS4KLSAgICBtX2lzV2FpdGluZ0ZvclVwZGF0ZSA9IGZhbHNlOwotICAgIAotICAg
IG1fd2ViUGFnZS0+c2V0U2l6ZSh2aWV3U2l6ZSk7Ci0KLSAgICAvLyBMYXlvdXQgaWYgbmVjZXNz
YXJ5LgotICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKLQotICAgIC8vIENyZWF0ZSBh
IG5ldyBVcGRhdGVDaHVuayBhbmQgcGFpbnQgaW50byBpdC4KLSAgICBVcGRhdGVDaHVuayB1cGRh
dGVDaHVuayhJbnRSZWN0KDAsIDAsIHZpZXdTaXplLndpZHRoKCksIHZpZXdTaXplLmhlaWdodCgp
KSk7Ci0gICAgcGFpbnRJbnRvVXBkYXRlQ2h1bmsoJnVwZGF0ZUNodW5rKTsKLQotICAgIG1fZGlz
cGxheVRpbWVyLnN0b3AoKTsKLQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24o
KS0+c2VuZChEcmF3aW5nQXJlYVByb3h5TWVzc2FnZTo6RGlkU2V0U2l6ZSwgbV93ZWJQYWdlLT5w
YWdlSUQoKSwgQ29yZUlQQzo6SW4odXBkYXRlQ2h1bmspKTsKLX0KLQotdm9pZCBEcmF3aW5nQXJl
YVVwZGF0ZUNodW5rOjpkaWRVcGRhdGUoKQotewotICAgIG1faXNXYWl0aW5nRm9yVXBkYXRlID0g
ZmFsc2U7Ci0KLSAgICAvLyBEaXNwbGF5IGlmIG5lZWRlZC4KLSAgICBkaXNwbGF5KCk7Ci19Ci0K
LXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciYgYXJndW1lbnRzKQotewotICAgIHN3aXRjaCAobWVzc2FnZUlELmdldDxEcmF3
aW5nQXJlYU1lc3NhZ2U6OktpbmQ+KCkpIHsKLSAgICAgICAgY2FzZSBEcmF3aW5nQXJlYU1lc3Nh
Z2U6OlNldFNpemU6IHsKLSAgICAgICAgICAgIEludFNpemUgc2l6ZTsKLSAgICAgICAgICAgIGlm
ICghYXJndW1lbnRzLmRlY29kZShDb3JlSVBDOjpPdXQoc2l6ZSkpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAgICAgc2V0U2l6ZShzaXplKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlIERyYXdpbmdBcmVhTWVzc2FnZTo6
RGlkVXBkYXRlOgotICAgICAgICAgICAgZGlkVXBkYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmsu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvRHJhd2luZ0Fy
ZWFVcGRhdGVDaHVuay5oCShyZXZpc2lvbiA1ODE4NCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRHJhd2luZ0FyZWFVcGRhdGVDaHVua19o
Ci0jZGVmaW5lIERyYXdpbmdBcmVhVXBkYXRlQ2h1bmtfaAotCi0jaW5jbHVkZSAiRHJhd2luZ0Fy
ZWEuaCIKLSNpbmNsdWRlICJSdW5Mb29wLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVXBkYXRlQ2h1bms7Ci0KLWNsYXNzIERy
YXdpbmdBcmVhVXBkYXRlQ2h1bmsgOiBwdWJsaWMgRHJhd2luZ0FyZWEgewotcHVibGljOgotICAg
IERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsoV2ViUGFnZSopOwotICAgIHZpcnR1YWwgfkRyYXdpbmdB
cmVhVXBkYXRlQ2h1bmsoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlV2luZG93KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QsIGJvb2wgaW1tZWRpYXRlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHJlY3QsIGJvb2wgaW1tZWRpYXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRl
bnRzRm9yU2xvd1Njcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0LCBib29sIGltbWVk
aWF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
Y3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlz
cGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BsYXko
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIHBhaW50SW50b1VwZGF0ZUNodW5rKFVwZGF0ZUNodW5rKik7Ci0g
ICAgCi0gICAgdm9pZCBzY2hlZHVsZURpc3BsYXkoKTsKLSAgICB2b2lkIHNldFNpemUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUpOwotCi0gICAgdm9pZCBkaWRVcGRhdGUoKTsKLQot
ICAgIFdlYkNvcmU6OkludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgYm9vbCBtX2lzV2FpdGluZ0Zv
clVwZGF0ZTsKLSAgICBSdW5Mb29wOjpUaW1lcjxEcmF3aW5nQXJlYVVwZGF0ZUNodW5rPiBtX2Rp
c3BsYXlUaW1lcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRHJh
d2luZ0FyZWFVcGRhdGVDaHVua19oCkluZGV4OiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdp
bmdBcmVhVXBkYXRlQ2h1bmtNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvRHJhd2luZ0FyZWFVcGRhdGVDaHVua01hYy5jcHAJKHJldmlzaW9uIDU4MTg0KQkoZnJv
bSBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwOjU4MTg0
KQorKysgV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rTWFjLmNw
cAkod29ya2luZyBjb3B5KQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0Ry
YXdpbmdBcmVhVXBkYXRlQ2h1bmtNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rTWFjLmNwcAkocmV2aXNpb24g
NTgxODQpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvRHJhd2luZ0FyZWFVcGRh
dGVDaHVua01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEzICsyNSw4IEBACiAKICNpbmNs
dWRlICJEcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmgiCiAKLSNpbmNsdWRlICJEcmF3aW5nQXJlYU1l
c3NhZ2VLaW5kcy5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlS2luZHMuaCIK
LSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJVcGRhdGVDaHVuay5oIgotI2luY2x1
ZGUgIldlYkNvcmVUeXBlQXJndW1lbnRNYXJzaGFsbGluZy5oIgogI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTM5LDQ1ICszNCw2IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotRHJhd2lu
Z0FyZWFVcGRhdGVDaHVuazo6RHJhd2luZ0FyZWFVcGRhdGVDaHVuayhXZWJQYWdlKiB3ZWJQYWdl
KQotICAgIDogRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFVcGRhdGVDaHVua1R5cGUsIHdlYlBhZ2Up
Ci0gICAgLCBtX2lzV2FpdGluZ0ZvclVwZGF0ZShmYWxzZSkKLSAgICAsIG1fZGlzcGxheVRpbWVy
KFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJ1bkxvb3AoKSwgdGhpcywgJkRyYXdpbmdBcmVhVXBkYXRl
Q2h1bms6OmRpc3BsYXkpCi17Ci19Ci0KLURyYXdpbmdBcmVhVXBkYXRlQ2h1bms6On5EcmF3aW5n
QXJlYVVwZGF0ZUNodW5rKCkKLXsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpp
bnZhbGlkYXRlV2luZG93KGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgaW1tZWRpYXRlKQotewot
fQotCi12b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OmludmFsaWRhdGVDb250ZW50c0FuZFdp
bmRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIGltbWVkaWF0ZSkKLXsKLSAgICBzZXROZWVk
c0Rpc3BsYXkocmVjdCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6aW52YWxp
ZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIGltbWVk
aWF0ZSkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkocmVjdCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0Fy
ZWFVcGRhdGVDaHVuazo6c2Nyb2xsKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJ
bnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQotewotICAgIC8v
IEZJWE1FOiBEbyBzb21ldGhpbmcgbXVjaCBzbWFydGVyLgotICAgIHNldE5lZWRzRGlzcGxheShy
ZWN0VG9TY3JvbGwpOwotfQotCi12b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnNldE5lZWRz
RGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIEZJWE1FOiBDb2xsZWN0IGEg
c2V0IG9mIHJlY3RzL3JlZ2lvbiBpbnN0ZWFkIG9mIGp1c3QgdGhlIHVuaW9uCi0gICAgLy8gb2Yg
YWxsIHJlY3RzLgotICAgIG1fZGlydHlSZWN0LnVuaXRlKHJlY3QpOwotICAgIHNjaGVkdWxlRGlz
cGxheSgpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnBhaW50SW50b1VwZGF0
ZUNodW5rKFVwZGF0ZUNodW5rKiB1cGRhdGVDaHVuaykKIHsKICAgICBSZXRhaW5QdHI8Q0dDb2xv
clNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJH
QigpKTsKQEAgLTk0LDg3ICs1MCw0IEBAIHZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6cGFp
bnRJbnRvVXAKICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgdXBkYXRl
Q2h1bmstPnJlY3QoKSk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6ZGlzcGxh
eSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzV2FpdGluZ0ZvclVwZGF0ZSk7Ci0KLSAgICBpZiAobV9k
aXJ0eVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMYXlvdXQgaWYg
bmVjZXNzYXJ5LgotICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKLSAKLSAgICBJbnRS
ZWN0IGRpcnR5UmVjdCA9IG1fZGlydHlSZWN0OwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgp
OwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IFVwZGF0ZUNodW5rIGFuZCBwYWludCBpbnRvIGl0Lgot
ICAgIFVwZGF0ZUNodW5rIHVwZGF0ZUNodW5rKGRpcnR5UmVjdCk7Ci0gICAgcGFpbnRJbnRvVXBk
YXRlQ2h1bmsoJnVwZGF0ZUNodW5rKTsKLQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChEcmF3aW5nQXJlYVByb3h5TWVzc2FnZTo6VXBkYXRlLCBtX3dlYlBhZ2Ut
PnBhZ2VJRCgpLCBDb3JlSVBDOjpJbih1cGRhdGVDaHVuaykpOwotCi0gICAgbV9pc1dhaXRpbmdG
b3JVcGRhdGUgPSB0cnVlOwotICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBE
cmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpzY2hlZHVsZURpc3BsYXkoKQotewotICAgIGlmIChtX2lz
V2FpdGluZ0ZvclVwZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChtX2Rpc3Bs
YXlUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rpc3BsYXlUaW1l
ci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6c2V0
U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKLXsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHdhaXQgZm9yIGFuIHVwZGF0ZSB1bnRpbCB3ZSBkaXNwbGF5LgotICAgIG1faXNXYWl0aW5nRm9y
VXBkYXRlID0gZmFsc2U7Ci0gICAgCi0gICAgbV93ZWJQYWdlLT5zZXRTaXplKHZpZXdTaXplKTsK
LQotICAgIC8vIExheW91dCBpZiBuZWNlc3NhcnkuCi0gICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5l
ZWRlZCgpOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IFVwZGF0ZUNodW5rIGFuZCBwYWludCBpbnRv
IGl0LgotICAgIFVwZGF0ZUNodW5rIHVwZGF0ZUNodW5rKEludFJlY3QoMCwgMCwgdmlld1NpemUu
d2lkdGgoKSwgdmlld1NpemUuaGVpZ2h0KCkpKTsKLSAgICBwYWludEludG9VcGRhdGVDaHVuaygm
dXBkYXRlQ2h1bmspOwotCi0gICAgbV9kaXNwbGF5VGltZXIuc3RvcCgpOwotCi0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKERyYXdpbmdBcmVhUHJveHlNZXNzYWdl
OjpEaWRTZXRTaXplLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbih1cGRhdGVDaHVu
aykpOwotfQotCi12b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OmRpZFVwZGF0ZSgpCi17Ci0g
ICAgbV9pc1dhaXRpbmdGb3JVcGRhdGUgPSBmYWxzZTsKLQotICAgIC8vIERpc3BsYXkgaWYgbmVl
ZGVkLgotICAgIGRpc3BsYXkoKTsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpk
aWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlE
IG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyJiBhcmd1bWVudHMpCi17Ci0gICAg
c3dpdGNoIChtZXNzYWdlSUQuZ2V0PERyYXdpbmdBcmVhTWVzc2FnZTo6S2luZD4oKSkgewotICAg
ICAgICBjYXNlIERyYXdpbmdBcmVhTWVzc2FnZTo6U2V0U2l6ZTogewotICAgICAgICAgICAgSW50
U2l6ZSBzaXplOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMuZGVjb2RlKENvcmVJUEM6Ok91
dChzaXplKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBzZXRTaXpl
KHNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGNhc2UgRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRVcGRhdGU6Ci0gICAgICAgICAgICBkaWRVcGRh
dGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93
aW4vRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2luL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwCShyZXZpc2lvbiA1
ODE4NCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9EcmF3aW5nQXJlYVVwZGF0
ZUNodW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxODcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJEcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmgiCi0KLSNpbmNsdWRlICJEcmF3aW5n
QXJlYU1lc3NhZ2VLaW5kcy5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlS2lu
ZHMuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJVcGRhdGVDaHVuay5oIgot
I2luY2x1ZGUgIldlYkNvcmVUeXBlQXJndW1lbnRNYXJzaGFsbGluZy5oIgotI2luY2x1ZGUgIldl
YlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9CaXRt
YXBJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1EcmF3aW5nQXJlYVVw
ZGF0ZUNodW5rOjpEcmF3aW5nQXJlYVVwZGF0ZUNodW5rKFdlYlBhZ2UqIHdlYlBhZ2UpCi0gICAg
OiBEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVVwZGF0ZUNodW5rVHlwZSwgd2ViUGFnZSkKLSAgICAs
IG1faXNXYWl0aW5nRm9yVXBkYXRlKGZhbHNlKQotICAgICwgbV9kaXNwbGF5VGltZXIoV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucnVuTG9vcCgpLCB0aGlzLCAmRHJhd2luZ0FyZWE6OmRpc3BsYXkpCi17
Ci19Ci0KLURyYXdpbmdBcmVhVXBkYXRlQ2h1bms6On5EcmF3aW5nQXJlYVVwZGF0ZUNodW5rKCkK
LXsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjppbnZhbGlkYXRlV2luZG93KGNv
bnN0IEludFJlY3QmIHJlY3QsIGJvb2wgaW1tZWRpYXRlKQotewotfQotCi12b2lkIERyYXdpbmdB
cmVhVXBkYXRlQ2h1bms6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0
JiByZWN0LCBib29sIGltbWVkaWF0ZSkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkocmVjdCk7Ci19
Ci0KLXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xv
d1Njcm9sbChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIGltbWVkaWF0ZSkKLXsKLSAgICBzZXRO
ZWVkc0Rpc3BsYXkocmVjdCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6c2Ny
b2xsKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3Jv
bGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQotewotICAgIHNldE5lZWRzRGlzcGxheShyZWN0
VG9TY3JvbGwpOwotfQotCi12b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnNldE5lZWRzRGlz
cGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIG1fZGlydHlSZWN0LnVu
aXRlKHJlY3QpOwotICAgIHNjaGVkdWxlRGlzcGxheSgpOwotfQotCi12b2lkIERyYXdpbmdBcmVh
VXBkYXRlQ2h1bms6OnBhaW50SW50b1VwZGF0ZUNodW5rKFVwZGF0ZUNodW5rKiB1cGRhdGVDaHVu
aykKLXsKLSAgICBPd25QdHI8SERDPiBoZGMoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwotCi0g
ICAgdm9pZCogYml0czsKLSAgICBCaXRtYXBJbmZvIGJtcCA9IEJpdG1hcEluZm86OmNyZWF0ZUJv
dHRvbVVwKHVwZGF0ZUNodW5rLT5mcmFtZSgpLnNpemUoKSk7Ci0gICAgT3duUHRyPEhCSVRNQVA+
IGhibXAoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZibXAsIERJQl9SR0JfQ09MT1JTLCAmYml0cywg
dXBkYXRlQ2h1bmstPm1lbW9yeSgpLCAwKSk7Ci0KLSAgICBIQklUTUFQIGhibXBPbGQgPSBzdGF0
aWNfY2FzdDxIQklUTUFQPig6OlNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0KCkpKTsK
LSAgICAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoaGRjLmdldCgpKTsKLSAgICBnYy5zYXZlKCk7
Ci0gICAgCi0gICAgLy8gRklYTUU6IElzIHRoaXMgd2hpdGUgZmlsbCBuZWVkZWQ/Ci0gICAgUkVD
VCByZWN0ID0gdXBkYXRlQ2h1bmstPmZyYW1lKCk7Ci0gICAgOjpGaWxsUmVjdChoZGMuZ2V0KCks
ICZyZWN0LCAoSEJSVVNIKTo6R2V0U3RvY2tPYmplY3QoV0hJVEVfQlJVU0gpKTsKLSAgICBnYy50
cmFuc2xhdGUoLXVwZGF0ZUNodW5rLT5mcmFtZSgpLngoKSwgLXVwZGF0ZUNodW5rLT5mcmFtZSgp
LnkoKSk7Ci0KLSAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdjLCB1cGRhdGVDaHVuay0+ZnJhbWUo
KSk7Ci0KLSAgICBnYy5yZXN0b3JlKCk7Ci0KLSAgICAvLyBSZS1zZWxlY3QgdGhlIG9sZCBIQklU
TUFQCi0gICAgOjpTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wT2xkKTsKLX0KLQotdm9pZCBE
cmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpkaXNwbGF5KCkKLXsKLSAgICBBU1NFUlQoIW1faXNXYWl0
aW5nRm9yVXBkYXRlKTsKLQotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIExheW91dCBpZiBuZWNlc3NhcnkuCi0gICAgbV93ZWJQYWdlLT5s
YXlvdXRJZk5lZWRlZCgpOwotCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtX2RpcnR5UmVjdDsK
LSAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKLQotICAgIFVwZGF0ZUNodW5rIHVwZGF0ZUNo
dW5rKGRpcnR5UmVjdCk7Ci0gICAgcGFpbnRJbnRvVXBkYXRlQ2h1bmsoJnVwZGF0ZUNodW5rKTsK
LQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChEcmF3aW5nQXJl
YVByb3h5TWVzc2FnZTo6VXBkYXRlLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbih1
cGRhdGVDaHVuaykpOwotCi0gICAgbV9pc1dhaXRpbmdGb3JVcGRhdGUgPSB0cnVlOwotICAgIG1f
ZGlzcGxheVRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpz
Y2hlZHVsZURpc3BsYXkoKQotewotICAgIGlmIChtX2lzV2FpdGluZ0ZvclVwZGF0ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fZGlzcGxheVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9p
ZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHZpZXdTaXplKQotewotICAgIEFTU0VSVF9BUkcodmlld1NpemUsICF2aWV3U2l6ZS5pc0VtcHR5
KCkpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciBhbiB1cGRhdGUgdW50aWwg
d2UgZGlzcGxheS4gCi0gICAgbV9pc1dhaXRpbmdGb3JVcGRhdGUgPSBmYWxzZTsgCi0KLSAgICBt
X3dlYlBhZ2UtPnNldFNpemUodmlld1NpemUpOwotCi0gICAgLy8gTGF5b3V0IGlmIG5lY2Vzc2Fy
eS4KLSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBu
ZXcgVXBkYXRlQ2h1bmsgYW5kIHBhaW50IGludG8gaXQuCi0gICAgVXBkYXRlQ2h1bmsgdXBkYXRl
Q2h1bmsoSW50UmVjdCgwLCAwLCB2aWV3U2l6ZS53aWR0aCgpLCB2aWV3U2l6ZS5oZWlnaHQoKSkp
OwotICAgIHBhaW50SW50b1VwZGF0ZUNodW5rKCZ1cGRhdGVDaHVuayk7Ci0KLSAgICBtX2Rpc3Bs
YXlUaW1lci5zdG9wKCk7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2U6OkRpZFNldFNpemUsIG1fd2ViUGFnZS0+cGFn
ZUlEKCksIENvcmVJUEM6OkluKHZpZXdTaXplLCB1cGRhdGVDaHVuaykpOwotfQotCi12b2lkIERy
YXdpbmdBcmVhVXBkYXRlQ2h1bms6OmRpZFVwZGF0ZSgpCi17Ci0gICAgbV9pc1dhaXRpbmdGb3JV
cGRhdGUgPSBmYWxzZTsKLQotICAgIC8vIERpc3BsYXkgaWYgbmVlZGVkLgotICAgIGRpc3BsYXko
KTsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpkaWRSZWNlaXZlTWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyJiBhcmd1bWVudHMpCi17Ci0gICAgc3dpdGNoIChtZXNzYWdlSUQu
Z2V0PERyYXdpbmdBcmVhTWVzc2FnZTo6S2luZD4oKSkgewotICAgICAgICBjYXNlIERyYXdpbmdB
cmVhTWVzc2FnZTo6U2V0U2l6ZTogewotICAgICAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudHMuZGVjb2RlKHNpemUpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIHNldFNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRVcGRhdGU6Ci0gICAg
ICAgICAgICBkaWRVcGRhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS93aW4vRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rLmgJ
KHJldmlzaW9uIDU4MTg0KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL0RyYXdp
bmdBcmVhVXBkYXRlQ2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rX2gKLSNkZWZpbmUgRHJhd2lu
Z0FyZWFVcGRhdGVDaHVua19oCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUg
IlJ1bkxvb3AuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFNpemU7Ci19
Ci0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLSAgICBjbGFzcyBBcmd1bWVudERlY29kZXI7Ci0gICAg
Y2xhc3MgQ29ubmVjdGlvbjsKLSAgICBjbGFzcyBNZXNzYWdlSUQ7Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBVcGRhdGVDaHVuazsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIERy
YXdpbmdBcmVhVXBkYXRlQ2h1bmsgOiBwdWJsaWMgRHJhd2luZ0FyZWEgewotcHVibGljOgotICAg
IERyYXdpbmdBcmVhVXBkYXRlQ2h1bmsoV2ViUGFnZSopOwotICAgIHZpcnR1YWwgfkRyYXdpbmdB
cmVhVXBkYXRlQ2h1bmsoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlV2luZG93KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QsIGJvb2wgaW1tZWRpYXRlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHJlY3QsIGJvb2wgaW1tZWRpYXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRl
bnRzRm9yU2xvd1Njcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0LCBib29sIGltbWVk
aWF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
Y3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlz
cGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BsYXko
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIHBhaW50SW50b1VwZGF0ZUNodW5rKFVwZGF0ZUNodW5rKik7Ci0g
ICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lkIGRpZFVw
ZGF0ZSgpOwotICAgIHZvaWQgc2NoZWR1bGVEaXNwbGF5KCk7Ci0KLSAgICBXZWJDb3JlOjpJbnRS
ZWN0IG1fZGlydHlSZWN0OwotICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JVcGRhdGU7Ci0gICAgUnVu
TG9vcDo6VGltZXI8RHJhd2luZ0FyZWE+IG1fZGlzcGxheVRpbWVyOwotfTsKLSAgICAKLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRHJhd2luZ0FyZWFVcGRhdGVDaHVua19oCklu
ZGV4OiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmtXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vRHJhd2luZ0FyZWFVcGRhdGVD
aHVua1dpbi5jcHAJKHJldmlzaW9uIDU4MTg0KQkoZnJvbSBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2lu
L0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmsuY3BwOjU4MTg0KQorKysgV2ViUHJvY2Vzcy9XZWJQYWdl
L3dpbi9EcmF3aW5nQXJlYVVwZGF0ZUNodW5rV2luLmNwcAkod29ya2luZyBjb3B5KQpJbmRleDog
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL0RyYXdpbmdBcmVhVXBkYXRlQ2h1bmtXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9EcmF3aW5n
QXJlYVVwZGF0ZUNodW5rV2luLmNwcAkocmV2aXNpb24gNTgxODQpCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS93aW4vRHJhd2luZ0FyZWFVcGRhdGVDaHVua1dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDEzICsyNSw4IEBACiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYVVwZGF0ZUNo
dW5rLmgiCiAKLSNpbmNsdWRlICJEcmF3aW5nQXJlYU1lc3NhZ2VLaW5kcy5oIgotI2luY2x1ZGUg
IkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlS2luZHMuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIK
ICNpbmNsdWRlICJVcGRhdGVDaHVuay5oIgotI2luY2x1ZGUgIldlYkNvcmVUeXBlQXJndW1lbnRN
YXJzaGFsbGluZy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KIApAQCAtMzksNDIgKzM0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1EcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpE
cmF3aW5nQXJlYVVwZGF0ZUNodW5rKFdlYlBhZ2UqIHdlYlBhZ2UpCi0gICAgOiBEcmF3aW5nQXJl
YShEcmF3aW5nQXJlYVVwZGF0ZUNodW5rVHlwZSwgd2ViUGFnZSkKLSAgICAsIG1faXNXYWl0aW5n
Rm9yVXBkYXRlKGZhbHNlKQotICAgICwgbV9kaXNwbGF5VGltZXIoV2ViUHJvY2Vzczo6c2hhcmVk
KCkucnVuTG9vcCgpLCB0aGlzLCAmRHJhd2luZ0FyZWE6OmRpc3BsYXkpCi17Ci19Ci0KLURyYXdp
bmdBcmVhVXBkYXRlQ2h1bms6On5EcmF3aW5nQXJlYVVwZGF0ZUNodW5rKCkKLXsKLX0KLQotdm9p
ZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjppbnZhbGlkYXRlV2luZG93KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGJvb2wgaW1tZWRpYXRlKQotewotfQotCi12b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1
bms6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBib29s
IGltbWVkaWF0ZSkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkocmVjdCk7Ci19Ci0KLXZvaWQgRHJh
d2luZ0FyZWFVcGRhdGVDaHVuazo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25z
dCBJbnRSZWN0JiByZWN0LCBib29sIGltbWVkaWF0ZSkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXko
cmVjdCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6c2Nyb2xsKGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KQotewotICAgIHNldE5lZWRzRGlzcGxheShyZWN0VG9TY3JvbGwpOwot
fQotCi12b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnNldE5lZWRzRGlzcGxheShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIG1fZGlydHlSZWN0LnVuaXRlKHJlY3QpOwot
ICAgIHNjaGVkdWxlRGlzcGxheSgpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6
OnBhaW50SW50b1VwZGF0ZUNodW5rKFVwZGF0ZUNodW5rKiB1cGRhdGVDaHVuaykKIHsKICAgICBP
d25QdHI8SERDPiBoZGMoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwpAQCAtODQsMTAgKzQzLDEw
IEBAIHZvaWQgRHJhd2luZ0FyZWFVcGRhdGVDaHVuazo6cGFpbnRJbnRvVXAKICAgICBPd25QdHI8
SEJJVE1BUD4gaGJtcCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJtcCwgRElCX1JHQl9DT0xPUlMs
ICZiaXRzLCB1cGRhdGVDaHVuay0+bWVtb3J5KCksIDApKTsKIAogICAgIEhCSVRNQVAgaGJtcE9s
ZCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KDo6U2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcC5n
ZXQoKSkpOwotICAgIAorCiAgICAgR3JhcGhpY3NDb250ZXh0IGdjKGhkYy5nZXQoKSk7CiAgICAg
Z2Muc2F2ZSgpOwotICAgIAorCiAgICAgLy8gRklYTUU6IElzIHRoaXMgd2hpdGUgZmlsbCBuZWVk
ZWQ/CiAgICAgUkVDVCByZWN0ID0gdXBkYXRlQ2h1bmstPmZyYW1lKCk7CiAgICAgOjpGaWxsUmVj
dChoZGMuZ2V0KCksICZyZWN0LCAoSEJSVVNIKTo6R2V0U3RvY2tPYmplY3QoV0hJVEVfQlJVU0gp
KTsKQEAgLTEwMSw4NyArNjAsNCBAQCB2b2lkIERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OnBhaW50
SW50b1VwCiAgICAgOjpTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wT2xkKTsKIH0KIAotdm9p
ZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpkaXNwbGF5KCkKLXsKLSAgICBBU1NFUlQoIW1faXNX
YWl0aW5nRm9yVXBkYXRlKTsKLQotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIExheW91dCBpZiBuZWNlc3NhcnkuCi0gICAgbV93ZWJQYWdl
LT5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtX2RpcnR5UmVj
dDsKLSAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKLQotICAgIFVwZGF0ZUNodW5rIHVwZGF0
ZUNodW5rKGRpcnR5UmVjdCk7Ci0gICAgcGFpbnRJbnRvVXBkYXRlQ2h1bmsoJnVwZGF0ZUNodW5r
KTsKLQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChEcmF3aW5n
QXJlYVByb3h5TWVzc2FnZTo6VXBkYXRlLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJ
bih1cGRhdGVDaHVuaykpOwotCi0gICAgbV9pc1dhaXRpbmdGb3JVcGRhdGUgPSB0cnVlOwotICAg
IG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5r
OjpzY2hlZHVsZURpc3BsYXkoKQotewotICAgIGlmIChtX2lzV2FpdGluZ0ZvclVwZGF0ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fZGlzcGxheVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
dm9pZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHZpZXdTaXplKQotewotICAgIEFTU0VSVF9BUkcodmlld1NpemUsICF2aWV3U2l6ZS5pc0Vt
cHR5KCkpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciBhbiB1cGRhdGUgdW50
aWwgd2UgZGlzcGxheS4gCi0gICAgbV9pc1dhaXRpbmdGb3JVcGRhdGUgPSBmYWxzZTsgCi0KLSAg
ICBtX3dlYlBhZ2UtPnNldFNpemUodmlld1NpemUpOwotCi0gICAgLy8gTGF5b3V0IGlmIG5lY2Vz
c2FyeS4KLSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci0KLSAgICAvLyBDcmVhdGUg
YSBuZXcgVXBkYXRlQ2h1bmsgYW5kIHBhaW50IGludG8gaXQuCi0gICAgVXBkYXRlQ2h1bmsgdXBk
YXRlQ2h1bmsoSW50UmVjdCgwLCAwLCB2aWV3U2l6ZS53aWR0aCgpLCB2aWV3U2l6ZS5oZWlnaHQo
KSkpOwotICAgIHBhaW50SW50b1VwZGF0ZUNodW5rKCZ1cGRhdGVDaHVuayk7Ci0KLSAgICBtX2Rp
c3BsYXlUaW1lci5zdG9wKCk7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9u
KCktPnNlbmQoRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2U6OkRpZFNldFNpemUsIG1fd2ViUGFnZS0+
cGFnZUlEKCksIENvcmVJUEM6OkluKHZpZXdTaXplLCB1cGRhdGVDaHVuaykpOwotfQotCi12b2lk
IERyYXdpbmdBcmVhVXBkYXRlQ2h1bms6OmRpZFVwZGF0ZSgpCi17Ci0gICAgbV9pc1dhaXRpbmdG
b3JVcGRhdGUgPSBmYWxzZTsKLQotICAgIC8vIERpc3BsYXkgaWYgbmVlZGVkLgotICAgIGRpc3Bs
YXkoKTsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVVwZGF0ZUNodW5rOjpkaWRSZWNlaXZlTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyJiBhcmd1bWVudHMpCi17Ci0gICAgc3dpdGNoIChtZXNzYWdl
SUQuZ2V0PERyYXdpbmdBcmVhTWVzc2FnZTo6S2luZD4oKSkgewotICAgICAgICBjYXNlIERyYXdp
bmdBcmVhTWVzc2FnZTo6U2V0U2l6ZTogewotICAgICAgICAgICAgSW50U2l6ZSBzaXplOwotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudHMuZGVjb2RlKHNpemUpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIHNldFNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRVcGRhdGU6Ci0g
ICAgICAgICAgICBkaWRVcGRhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL3dp
bi9XZWJLaXQyLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJv
agkocmV2aXNpb24gNTgxODQpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNjM5LDYgKzYzOSwxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJQYWdlXERyYXdpbmdB
cmVhVXBkYXRlQ2h1bmsuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYlByb2Nlc3NcV2ViUGFnZVxEcmF3aW5nQXJlYVVwZGF0
ZUNodW5rLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJQYWdlXFdlYkZyYW1lLmNwcCINCiAJCQkJCT4NCiAJ
CQkJPC9GaWxlPg0KQEAgLTY1OCwxMSArNjY2LDcgQEAKIAkJCQkJTmFtZT0id2luIg0KIAkJCQkJ
Pg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYlByb2Nlc3NcV2ViUGFn
ZVx3aW5cRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5jcHAiDQotCQkJCQkJPg0KLQkJCQkJPC9GaWxl
Pg0KLQkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYlByb2Nlc3NcV2ViUGFn
ZVx3aW5cRHJhd2luZ0FyZWFVcGRhdGVDaHVuay5oIg0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
V2ViUHJvY2Vzc1xXZWJQYWdlXHdpblxEcmF3aW5nQXJlYVVwZGF0ZUNodW5rV2luLmNwcCINCiAJ
CQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0K
</data>
<flag name="review"
          id="38096"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>