<?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>119987</bug_id>
          
          <creation_ts>2013-08-18 15:14:07 -0700</creation_ts>
          <short_desc>Make Element::attach standalone function</short_desc>
          <delta_ts>2013-08-20 11:37:47 -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>DOM</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>
          <dependson>120023</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dbates</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>918479</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-18 15:14:07 -0700</bug_when>
    <thetext>More refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918480</commentid>
    <comment_count>1</comment_count>
      <attachid>209042</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-18 15:34:59 -0700</bug_when>
    <thetext>Created attachment 209042
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918482</commentid>
    <comment_count>2</comment_count>
      <attachid>209042</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-18 15:47:24 -0700</bug_when>
    <thetext>Comment on attachment 209042
patch

r=me
I like how this change makes attach/detach much more understandable just from the new method names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919135</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-08-20 11:37:47 -0700</bug_when>
    <thetext>This change was committed in r154257: &lt;http://trac.webkit.org/changeset/154257&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209042</attachid>
            <date>2013-08-18 15:34:59 -0700</date>
            <delta_ts>2013-08-18 15:47:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>standalone-attach-2.patch</filename>
            <type>text/plain</type>
            <size>44923</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBAQAorMjAxMy0wOC0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzExOTk4Nz4gVHVybiBFbGVtZW50OjphdHRhY2ggaW50byBzdGFuZGFsb25lIGZ1bmN0aW9u
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCB0dXJucyBFbGVtZW50OjphdHRhY2goKSBhbmQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGlu
dG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphdHRhY2hDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXRhY2hDaGlsZCk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF0dGFjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGV0YWNoKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp+RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpsYXp5UmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6cmVtb3ZlU2hhZG93Um9vdCk6CisgICAgICAgIAorICAgICAgICAgICAgU2hhZG93IHJvb3Qg
c2hvdWxkIGJlIGRldGFjaGVkIGJ5IG5vdy4gUmVtb3ZlIHRoZSBkZXRhY2ggY2FsbC4KKworICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlQWZ0ZXJBdHRhY2hJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVQc2V1ZG9FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNsZWFyU3R5bGVEZXJpdmVkRGF0YUJlZm9y
ZURldGFjaGluZ1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNsZWFySG92
ZXJBbmRBY3RpdmVTdGF0dXNCZWZvcmVEZXRhY2hpbmdSZW5kZXJlcik6CisgICAgICAgIAorICAg
ICAgICAgICAgRmFjdG9yIHNvbWUgcGFydHMgb2YgZm9ybWVyIEVsZW1lbnQ6OmF0dGFjaC9kZXRh
Y2goKSBpbnRvIG1lbWJlciBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgor
ICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRSYXJlRGF0YTo6cmVsZWFzZVBzZXVkb0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Ob2RlUmVu
ZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nQ29udGV4
dDo6Tm9kZVJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGRvbS9Ob2RlUmVuZGVyaW5nQ29u
dGV4dC5oOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKiBkb20vU2hh
ZG93Um9vdC5oOgorICAgICAgICAqIGh0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAg
ICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJGYWxsYmFja0Nv
bnRlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNuYXBzaG90
dGVkUGx1Z0luKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNdWx0aXBsZUF0dHJpYnV0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhaW5pbmdUYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRTcGFuV2l0aENsYXNzTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRMaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmZpbmlzaExpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkQmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRMaW5rKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpleGVjdXRlVGFzayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdl
bmN5KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6d2lsbEF0dGFjaFJlbmRlcmVycyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6d2lsbERldGFjaFJlbmRlcmVycyk6CisgICAgICAg
ICogbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
Y2Vob2xkZXJEb2N1bWVudDo6YXR0YWNoKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVU
cmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVk
KToKKyAgICAgICAgCisgICAgICAgICAgICBGcm9tIEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVySWZO
ZWVkZWQoKQorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YXR0YWNoU2hhZG93Um9vdCk6Cisg
ICAgICAgIAorICAgICAgICAgICAgRnJvbSBTaGFkb3dSb290OjphdHRhY2goKQorCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6Y2hpbGRBdHRhY2hlZEFsbG93ZWRXaGVuQXR0YWNoaW5nQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmF0dGFjaENoaWxkcmVuKToKKyAgICAgICAg
CisgICAgICAgICAgICBGcm9tIEVsZW1lbnQ6OmF0dGFjaENoaWxkcmVuKCkKKworICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OmF0dGFjaFJlbmRlclRyZWUpOgorICAgICAgICAKKyAgICAgICAgICAg
IEZyb20gRWxlbWVudDo6YXR0YWNoKCkKKworICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmRldGFj
aFNoYWRvd1Jvb3QpOgorICAgICAgICAKKyAgICAgICAgICAgIEZyb20gU2hhZG93Um9vdDo6ZGV0
YWNoKCkKKworICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmRldGFjaENoaWxkcmVuKToKKyAgICAg
ICAgCisgICAgICAgICAgICBGcm9tIEVsZW1lbnQ6OmRldGFjaENoaWxkcmVuKCkKKworICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OmRldGFjaFJlbmRlclRyZWUpOgorICAgICAgICAKKyAgICAgICAg
ICAgIEZyb20gRWxlbWVudDo6ZGVhdGFjaCgpCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpy
ZWF0dGFjaFJlbmRlclRyZWUpOgorICAgICAgICAKKyAgICAgICAgICAgICBGcm9tIEVsZW1lbnQ6
OnJlYXR0YWNoKCkKKworICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnJlc29sdmVMb2NhbCk6Cisg
ICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkF0dGFjaENvbnRleHQ6OkF0dGFjaENvbnRleHQpOgorICAgICAgICAKKyAgICAgICAgICAg
IEZyb20gRWxlbWVudDo6QXR0YWNoQ29udGV4dAorCisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UpOgor
ICAgICAgICAqIHhtbC9YTUxFcnJvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRXJyb3Jz
OjppbnNlcnRFcnJvck1lc3NhZ2VCbG9jayk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OnN0YXJ0RWxlbWVudE5zKToKKwogMjAxMy0wOC0xOCAgQW50dGkgS29pdmlzdG8gIDxhbnR0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExOTk4Mj4gTWFr
ZSBFbGVtZW50OjphdHRhY2ggbm9uLXZpcnR1YWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZS5jcHAJKHJldmlzaW9uIDE1NDI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ29u
dGFpbmVyTm9kZTo6cmVtb3ZlRGV0YWNoZWRDaGlsZHIKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdHRh
Y2hDaGlsZChOb2RlKiBjaGlsZCkKIHsKICAgICBpZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkK
LSAgICAgICAgdG9FbGVtZW50KGNoaWxkKS0+YXR0YWNoKCk7CisgICAgICAgIFN0eWxlOjphdHRh
Y2hSZW5kZXJUcmVlKHRvRWxlbWVudChjaGlsZCkpOwogICAgIGVsc2UgaWYgKGNoaWxkLT5pc1Rl
eHROb2RlKCkpCiAgICAgICAgIHRvVGV4dChjaGlsZCktPmF0dGFjaFRleHQoKTsKIH0KQEAgLTEx
Niw3ICsxMTYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXR0YWNoQ2hpbGQoTm9kZSogY2hpCiBz
dGF0aWMgaW5saW5lIHZvaWQgZGV0YWNoQ2hpbGQoTm9kZSogY2hpbGQpCiB7CiAgICAgaWYgKGNo
aWxkLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHRvRWxlbWVudChjaGlsZCktPmRldGFjaCgp
OworICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZSh0b0VsZW1lbnQoY2hpbGQpKTsKICAg
ICBlbHNlIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgpKQogICAgICAgICB0b1RleHQoY2hpbGQpLT5k
ZXRhY2hUZXh0KCk7CiB9CkBAIC0xMDY1LDIwICsxMDY1LDQgQEAgc3RhdGljIHZvaWQgdXBkYXRl
VHJlZUFmdGVySW5zZXJ0aW9uKENvbgogICAgIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMo
Y2hpbGQpOwogfQogCi0jaWZuZGVmIE5ERUJVRwotYm9vbCBjaGlsZEF0dGFjaGVkQWxsb3dlZFdo
ZW5BdHRhY2hpbmdDaGlsZHJlbihDb250YWluZXJOb2RlKiBub2RlKQotewotICAgIGlmIChub2Rl
LT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAobm9kZS0+
aXNJbnNlcnRpb25Qb2ludCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChub2Rl
LT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5zaGFkb3dSb290KCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkocmV2
aXNpb24gMTU0MjUzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUxLDEwICsxNTEsNiBAQCBwcml2YXRlOgogICAgIE5vZGUqIG1fbGFz
dENoaWxkOwogfTsKIAotI2lmbmRlZiBOREVCVUcKLWJvb2wgY2hpbGRBdHRhY2hlZEFsbG93ZWRX
aGVuQXR0YWNoaW5nQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSopOwotI2VuZGlmCi0KIGlubGluZSBD
b250YWluZXJOb2RlKiB0b0NvbnRhaW5lck5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5pc0NvbnRhaW5lck5vZGUo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE1NDI1MykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5ODYsOSAr
MTk4Niw4IEBAIHZvaWQgRG9jdW1lbnQ6OmF0dGFjaCgpCiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXIgPSByZW5kZXJlcigpOwogICAgIHNldFJlbmRlcmVyKDApOwogCi0gICAgRWxlbWVudDo6QXR0
YWNoQ29udGV4dCBhdHRhY2hDb250ZXh0OwogICAgIGZvciAoRWxlbWVudCogY2hpbGQgPSBFbGVt
ZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRy
YXZlcnNhbDo6bmV4dFNpYmxpbmcoY2hpbGQpKQotICAgICAgICBjaGlsZC0+YXR0YWNoKGF0dGFj
aENvbnRleHQpOworICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZShjaGlsZCk7CiAKICAg
ICBzZXRSZW5kZXJlcihyZW5kZXIpOwogICAgIHNldEF0dGFjaGVkKHRydWUpOwpAQCAtMjA0NSw5
ICsyMDQ0LDggQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoKCkKICAgICBtX2ZvY3VzZWRFbGVtZW50
ID0gMDsKICAgICBtX2FjdGl2ZUVsZW1lbnQgPSAwOwogCi0gICAgRWxlbWVudDo6QXR0YWNoQ29u
dGV4dCBhdHRhY2hDb250ZXh0OwogICAgIGZvciAoRWxlbWVudCogY2hpbGQgPSBFbGVtZW50VHJh
dmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dFNpYmxpbmcoY2hpbGQpKQotICAgICAgICBjaGlsZC0+ZGV0YWNoKGF0dGFjaENvbnRl
eHQpOworICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZShjaGlsZCk7CiAKICAgICBjbGVh
ckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogICAgIHNldEF0dGFjaGVkKGZhbHNlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NDI1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDkgKzE4Nyw2IEBAIEVsZW1l
bnQ6On5FbGVtZW50KCkKICAgICAgICAgQVNTRVJUKCFoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwog
ICAgIH0KICNlbmRpZgotCi0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIGRldGFjaCgpOwog
fQogCiBpbmxpbmUgRWxlbWVudFJhcmVEYXRhKiBFbGVtZW50OjplbGVtZW50UmFyZURhdGEoKSBj
b25zdApAQCAtMTM4OSwxNzQgKzEzODYsMTkgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShD
b250YWluZXJOb2RlKgogI2VuZGlmCiB9CiAKLXZvaWQgRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXJJ
Zk5lZWRlZChjb25zdCBBdHRhY2hDb250ZXh0JiBjb250ZXh0KQotewotICAgIE5vZGVSZW5kZXJp
bmdDb250ZXh0KHRoaXMsIGNvbnRleHQpLmNyZWF0ZVJlbmRlcmVyRm9yRWxlbWVudElmTmVlZGVk
KCk7Ci19Ci0KLXZvaWQgRWxlbWVudDo6YXR0YWNoQ2hpbGRyZW4oY29uc3QgQXR0YWNoQ29udGV4
dCYgY29udGV4dCkKLXsKLSAgICBBdHRhY2hDb250ZXh0IGNoaWxkcmVuQ29udGV4dChjb250ZXh0
KTsKLSAgICBjaGlsZHJlbkNvbnRleHQucmVzb2x2ZWRTdHlsZSA9IDA7Ci0KLSAgICBmb3IgKE5v
ZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewotICAgICAgICBBU1NFUlQoIWNoaWxkLT5hdHRhY2hlZCgpIHx8IGNoaWxkQXR0YWNo
ZWRBbGxvd2VkV2hlbkF0dGFjaGluZ0NoaWxkcmVuKHRoaXMpKTsKLSAgICAgICAgaWYgKGNoaWxk
LT5hdHRhY2hlZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjaGlsZC0+
aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICB0b1RleHQoY2hpbGQpLT5hdHRhY2hUZXh0KCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNoaWxkLT5p
c0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdG9FbGVtZW50
KGNoaWxkKS0+YXR0YWNoKGNoaWxkcmVuQ29udGV4dCk7Ci0gICAgfQotfQotCi12b2lkIEVsZW1l
bnQ6OmF0dGFjaChjb25zdCBBdHRhY2hDb250ZXh0JiBjb250ZXh0KQotewotICAgIFBvc3RBdHRh
Y2hDYWxsYmFja0Rpc2FibGVyIGNhbGxiYWNrRGlzYWJsZXIodGhpcyk7Ci0gICAgV2lkZ2V0SGll
cmFyY2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZSBzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRl
czsKLQotICAgIGlmIChoYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkKLSAgICAgICAg
d2lsbEF0dGFjaFJlbmRlcmVycygpOwotCi0gICAgY3JlYXRlUmVuZGVyZXJJZk5lZWRlZChjb250
ZXh0KTsKLQotICAgIGlmIChwYXJlbnRFbGVtZW50KCkgJiYgcGFyZW50RWxlbWVudCgpLT5pc0lu
Q2FudmFzU3VidHJlZSgpKQotICAgICAgICBzZXRJc0luQ2FudmFzU3VidHJlZSh0cnVlKTsKLQot
ICAgIHVwZGF0ZVBzZXVkb0VsZW1lbnQoQkVGT1JFKTsKLQotICAgIFN0eWxlUmVzb2x2ZXJQYXJl
bnRQdXNoZXIgcGFyZW50UHVzaGVyKHRoaXMpOwotCi0gICAgLy8gV2hlbiBhIHNoYWRvdyByb290
IGV4aXN0cywgaXQgZG9lcyB0aGUgd29yayBvZiBhdHRhY2hpbmcgdGhlIGNoaWxkcmVuLgotICAg
IGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gdGhpcy0+c2hhZG93Um9vdCgpKSB7Ci0gICAg
ICAgIHBhcmVudFB1c2hlci5wdXNoKCk7Ci0gICAgICAgIHNoYWRvd1Jvb3QtPmF0dGFjaChjb250
ZXh0KTsKLSAgICB9IGVsc2UgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcGFyZW50UHVzaGVy
LnB1c2goKTsKLQotICAgIGF0dGFjaENoaWxkcmVuKGNvbnRleHQpOwotCi0gICAgTm9kZSogc2li
bGluZyA9IG5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgc2libGluZyAmJiAh
c2libGluZy0+cmVuZGVyZXIoKSAmJiBzaWJsaW5nLT5hdHRhY2hlZCgpKQotICAgICAgICBUZXh0
OjpjcmVhdGVUZXh0UmVuZGVyZXJzRm9yU2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKHNpYmxp
bmcpOwotCi0gICAgc2V0QXR0YWNoZWQodHJ1ZSk7Ci0gICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxj
KCk7Ci0KLSAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50SW50ZXJuYWwoKSkgewotICAg
ICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2MtPmF4T2JqZWN0Q2FjaGUoKSkKLSAg
ICAgICAgICAgIGNhY2hlLT51cGRhdGVDYWNoZUFmdGVyTm9kZUlzQXR0YWNoZWQodGhpcyk7Ci0g
ICAgfQotCi0gICAgdXBkYXRlUHNldWRvRWxlbWVudChBRlRFUik7Ci0KLSAgICBpZiAoaGFzUmFy
ZURhdGEoKSkgeyAgIAotICAgICAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSBlbGVtZW50UmFy
ZURhdGEoKTsKLSAgICAgICAgaWYgKGRhdGEtPm5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29v
bkFmdGVyQXR0YWNoKCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ZvY3VzYWJsZSgpICYmIGRvY3Vt
ZW50KCktPmZvY3VzZWRFbGVtZW50KCkgPT0gdGhpcykKLSAgICAgICAgICAgICAgICBkb2N1bWVu
dCgpLT51cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKGZhbHNlIC8qIGRvbid0IHJlc3RvcmUgc2Vs
ZWN0aW9uICovKTsKLSAgICAgICAgICAgIGRhdGEtPnNldE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBk
YXRlU29vbkFmdGVyQXR0YWNoKGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICho
YXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkKLSAgICAgICAgZGlkQXR0YWNoUmVuZGVy
ZXJzKCk7Ci19Ci0KIHZvaWQgRWxlbWVudDo6dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2Rl
KCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+Y3NzUmVnaW9uc0VuYWJsZWQoKSAmJiBpbk5hbWVk
RmxvdygpICYmIGRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+
cmVuZGVyVmlldygpLT5mbG93VGhyZWFkQ29udHJvbGxlcigpLT51bnJlZ2lzdGVyTmFtZWRGbG93
Q29udGVudE5vZGUodGhpcyk7CiB9CiAKLXZvaWQgRWxlbWVudDo6ZGV0YWNoQ2hpbGRyZW4oY29u
c3QgQXR0YWNoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBBdHRhY2hDb250ZXh0IGNoaWxkcmVu
Q29udGV4dChjb250ZXh0KTsKLSAgICBjaGlsZHJlbkNvbnRleHQucmVzb2x2ZWRTdHlsZSA9IDA7
Ci0KLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkg
ewotICAgICAgICAgICAgdG9UZXh0KGNoaWxkKS0+ZGV0YWNoVGV4dCgpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkp
Ci0gICAgICAgICAgICB0b0VsZW1lbnQoY2hpbGQpLT5kZXRhY2goY2hpbGRyZW5Db250ZXh0KTsK
LSAgICB9Ci0gICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKLX0KLQotdm9pZCBFbGVt
ZW50OjpkZXRhY2goY29uc3QgQXR0YWNoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBXaWRnZXRI
aWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlIHN1c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRh
dGVzOwotCi0gICAgaWYgKGhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKQotICAgICAg
ICB3aWxsRGV0YWNoUmVuZGVyZXJzKCk7Ci0KLSAgICB1bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVu
dE5vZGUoKTsKLSAgICBjYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKLSAgICBpZiAoaGFz
UmFyZURhdGEoKSkgewotICAgICAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSBlbGVtZW50UmFy
ZURhdGEoKTsKLSAgICAgICAgZGF0YS0+c2V0UHNldWRvRWxlbWVudChCRUZPUkUsIDApOwotICAg
ICAgICBkYXRhLT5zZXRQc2V1ZG9FbGVtZW50KEFGVEVSLCAwKTsKLSAgICAgICAgZGF0YS0+c2V0
SXNJbkNhbnZhc1N1YnRyZWUoZmFsc2UpOwotICAgICAgICBkYXRhLT5yZXNldENvbXB1dGVkU3R5
bGUoKTsKLSAgICAgICAgZGF0YS0+cmVzZXREeW5hbWljUmVzdHlsZU9ic2VydmF0aW9ucygpOwot
ICAgICAgICBkYXRhLT5zZXRJc0luc2lkZVJlZ2lvbihmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYg
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCkpCi0gICAgICAgIHNo
YWRvd1Jvb3QtPmRldGFjaChjb250ZXh0KTsKLQotICAgIC8vIERvIG5vdCByZW1vdmUgdGhlIGVs
ZW1lbnQncyBob3ZlcmVkIGFuZCBhY3RpdmUgc3RhdHVzCi0gICAgLy8gaWYgcGVyZm9ybWluZyBh
IHJlYXR0YWNoLgotICAgIGlmICghY29udGV4dC5wZXJmb3JtaW5nUmVhdHRhY2gpIHsKLSAgICAg
ICAgaWYgKGlzVXNlckFjdGlvbkVsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKGhvdmVyZWQo
KSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5ob3ZlcmVkRWxlbWVudERpZERldGFjaCh0
aGlzKTsKLSAgICAgICAgICAgIGlmIChpbkFjdGl2ZUNoYWluKCkpCi0gICAgICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+ZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2godGhpcyk7Ci0gICAgICAg
ICAgICBkb2N1bWVudCgpLT51c2VyQWN0aW9uRWxlbWVudHMoKS5kaWREZXRhY2godGhpcyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZXRhY2hDaGlsZHJlbihjb250ZXh0KTsKLQotICAgIGlm
IChyZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlcigpLT5kZXN0cm95QW5kQ2xlYW51cEFub255
bW91c1dyYXBwZXJzKCk7Ci0gICAgc2V0UmVuZGVyZXIoMCk7Ci0KLSAgICBzZXRBdHRhY2hlZChm
YWxzZSk7Ci0KLSAgICBpZiAoaGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpCi0gICAg
ICAgIGRpZERldGFjaFJlbmRlcmVycygpOwotfQotCi12b2lkIEVsZW1lbnQ6OnJlYXR0YWNoKGNv
bnN0IEF0dGFjaENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgQXR0YWNoQ29udGV4dCByZWF0dGFj
aENvbnRleHQoY29udGV4dCk7Ci0gICAgcmVhdHRhY2hDb250ZXh0LnBlcmZvcm1pbmdSZWF0dGFj
aCA9IHRydWU7Ci0KLSAgICBpZiAoYXR0YWNoZWQoKSkKLSAgICAgICAgZGV0YWNoKHJlYXR0YWNo
Q29udGV4dCk7Ci0gICAgYXR0YWNoKHJlYXR0YWNoQ29udGV4dCk7Ci19Ci0KLXZvaWQgRWxlbWVu
dDo6cmVhdHRhY2hJZkF0dGFjaGVkKGNvbnN0IEF0dGFjaENvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgaWYgKGF0dGFjaGVkKCkpCi0gICAgICAgIHJlYXR0YWNoKGNvbnRleHQpOwotfQotCiB2b2lk
IEVsZW1lbnQ6OmxhenlSZWF0dGFjaChTaG91bGRTZXRBdHRhY2hlZCBzaG91bGRTZXRBdHRhY2hl
ZCkKIHsKLSAgICBBdHRhY2hDb250ZXh0IGNvbnRleHQ7CisgICAgU3R5bGU6OkF0dGFjaENvbnRl
eHQgY29udGV4dDsKICAgICBjb250ZXh0LnBlcmZvcm1pbmdSZWF0dGFjaCA9IHRydWU7CiAKICAg
ICBpZiAoYXR0YWNoZWQoKSkKLSAgICAgICAgZGV0YWNoKGNvbnRleHQpOworICAgICAgICBTdHls
ZTo6ZGV0YWNoUmVuZGVyVHJlZSh0aGlzLCBjb250ZXh0KTsKICAgICBsYXp5QXR0YWNoKHNob3Vs
ZFNldEF0dGFjaGVkKTsKIH0KIApAQCAtMTYyOCw4ICsxNDcwLDcgQEAgdm9pZCBFbGVtZW50Ojpy
ZW1vdmVTaGFkb3dSb290KCkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQb3BT
aGFkb3dSb290KHRoaXMsIG9sZFJvb3QuZ2V0KCkpOwogICAgIGRvY3VtZW50KCktPnJlbW92ZUZv
Y3VzZWROb2RlT2ZTdWJ0cmVlKG9sZFJvb3QuZ2V0KCkpOwogCi0gICAgaWYgKG9sZFJvb3QtPmF0
dGFjaGVkKCkpCi0gICAgICAgIG9sZFJvb3QtPmRldGFjaChFbGVtZW50OjpBdHRhY2hDb250ZXh0
KCkpOworICAgIEFTU0VSVCghb2xkUm9vdC0+YXR0YWNoZWQoKSk7CiAKICAgICBlbGVtZW50UmFy
ZURhdGEoKS0+Y2xlYXJTaGFkb3dSb290KCk7CiAKQEAgLTIxMDksNiArMTk1MCwxOCBAQCB2b2lk
IEVsZW1lbnQ6OmZvY3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzCiAgICAgdXBkYXRlRm9jdXNBcHBl
YXJhbmNlKHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CiB9CiAKK3ZvaWQgRWxlbWVudDo6dXBk
YXRlRm9jdXNBcHBlYXJhbmNlQWZ0ZXJBdHRhY2hJZk5lZWRlZCgpCit7CisgICAgaWYgKCFoYXNS
YXJlRGF0YSgpKQorICAgICAgICByZXR1cm47CisgICAgRWxlbWVudFJhcmVEYXRhKiBkYXRhID0g
ZWxlbWVudFJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5uZWVkc0ZvY3VzQXBwZWFyYW5jZVVw
ZGF0ZVNvb25BZnRlckF0dGFjaCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlzRm9jdXNh
YmxlKCkgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSA9PSB0aGlzKQorICAgICAgICBk
b2N1bWVudCgpLT51cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKGZhbHNlIC8qIGRvbid0IHJlc3Rv
cmUgc2VsZWN0aW9uICovKTsKKyAgICBkYXRhLT5zZXROZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0
ZVNvb25BZnRlckF0dGFjaChmYWxzZSk7Cit9CisKIHZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNB
cHBlYXJhbmNlKGJvb2wgLypyZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24qLykKIHsKICAgICBpZiAo
aXNSb290RWRpdGFibGVFbGVtZW50KCkpIHsKQEAgLTI0NzcsNyArMjMzMCw3IEBAIHZvaWQgRWxl
bWVudDo6dXBkYXRlUHNldWRvRWxlbWVudChQc2V1ZG8KICAgICAgICAgaWYgKCFyZW5kZXJlcigp
IHx8ICFwc2V1ZG9FbGVtZW50UmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigpLT5nZXRDYWNoZWRQ
c2V1ZG9TdHlsZShwc2V1ZG9JZCkpKQogICAgICAgICAgICAgc2V0UHNldWRvRWxlbWVudChwc2V1
ZG9JZCwgMCk7CiAgICAgfSBlbHNlIGlmIChSZWZQdHI8UHNldWRvRWxlbWVudD4gZWxlbWVudCA9
IGNyZWF0ZVBzZXVkb0VsZW1lbnRJZk5lZWRlZChwc2V1ZG9JZCkpIHsKLSAgICAgICAgZWxlbWVu
dC0+YXR0YWNoKCk7CisgICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKGVsZW1lbnQuZ2V0
KCkpOwogICAgICAgICBzZXRQc2V1ZG9FbGVtZW50KHBzZXVkb0lkLCBlbGVtZW50LnJlbGVhc2Uo
KSk7CiAgICAgfQogfQpAQCAtMzExMiw2ICsyOTY1LDMyIEBAIHZvaWQgRWxlbWVudDo6cmVzZXRD
b21wdXRlZFN0eWxlKCkKICAgICBlbGVtZW50UmFyZURhdGEoKS0+cmVzZXRDb21wdXRlZFN0eWxl
KCk7CiB9CiAKK3ZvaWQgRWxlbWVudDo6Y2xlYXJTdHlsZURlcml2ZWREYXRhQmVmb3JlRGV0YWNo
aW5nUmVuZGVyZXIoKQoreworICAgIHVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZSgpOwor
ICAgIGNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOworICAgIGlmICghaGFzUmFyZURhdGEo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IGVsZW1lbnRS
YXJlRGF0YSgpOworICAgIGRhdGEtPnNldFBzZXVkb0VsZW1lbnQoQkVGT1JFLCAwKTsKKyAgICBk
YXRhLT5zZXRQc2V1ZG9FbGVtZW50KEFGVEVSLCAwKTsKKyAgICBkYXRhLT5zZXRJc0luQ2FudmFz
U3VidHJlZShmYWxzZSk7CisgICAgZGF0YS0+cmVzZXRDb21wdXRlZFN0eWxlKCk7CisgICAgZGF0
YS0+cmVzZXREeW5hbWljUmVzdHlsZU9ic2VydmF0aW9ucygpOworICAgIGRhdGEtPnNldElzSW5z
aWRlUmVnaW9uKGZhbHNlKTsKK30KKwordm9pZCBFbGVtZW50OjpjbGVhckhvdmVyQW5kQWN0aXZl
U3RhdHVzQmVmb3JlRGV0YWNoaW5nUmVuZGVyZXIoKQoreworICAgIGlmICghaXNVc2VyQWN0aW9u
RWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGhvdmVyZWQoKSkKKyAgICAgICAg
ZG9jdW1lbnQoKS0+aG92ZXJlZEVsZW1lbnREaWREZXRhY2godGhpcyk7CisgICAgaWYgKGluQWN0
aXZlQ2hhaW4oKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+ZWxlbWVudEluQWN0aXZlQ2hhaW5EaWRE
ZXRhY2godGhpcyk7CisgICAgZG9jdW1lbnQoKS0+dXNlckFjdGlvbkVsZW1lbnRzKCkuZGlkRGV0
YWNoKHRoaXMpOworfQorCiBib29sIEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hh
bmdlKQogewogICAgIEFTU0VSVChoYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDE1NDI1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MywxNiArMjkzLDYgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzRnJvbUVsZW1l
bnQoY29uc3QgRWxlbWVudCYpIHsgfQogCi0gICAgc3RydWN0IEF0dGFjaENvbnRleHQgewotICAg
ICAgICBSZW5kZXJTdHlsZSogcmVzb2x2ZWRTdHlsZTsKLSAgICAgICAgYm9vbCBwZXJmb3JtaW5n
UmVhdHRhY2g7Ci0KLSAgICAgICAgQXR0YWNoQ29udGV4dCgpIDogcmVzb2x2ZWRTdHlsZSgwKSwg
cGVyZm9ybWluZ1JlYXR0YWNoKGZhbHNlKSB7IH0KLSAgICB9OwotICAgIHZvaWQgYXR0YWNoKGNv
bnN0IEF0dGFjaENvbnRleHQmID0gQXR0YWNoQ29udGV4dCgpKTsKLSAgICB2b2lkIGRldGFjaChj
b25zdCBBdHRhY2hDb250ZXh0JiA9IEF0dGFjaENvbnRleHQoKSk7Ci0gICAgdm9pZCByZWF0dGFj
aChjb25zdCBBdHRhY2hDb250ZXh0JiA9IEF0dGFjaENvbnRleHQoKSk7Ci0gICAgdm9pZCByZWF0
dGFjaElmQXR0YWNoZWQoY29uc3QgQXR0YWNoQ29udGV4dCYgPSBBdHRhY2hDb250ZXh0KCkpOwog
ICAgIGVudW0gU2hvdWxkU2V0QXR0YWNoZWQgewogICAgICAgICBTZXRBdHRhY2hlZCwKICAgICAg
ICAgRG9Ob3RTZXRBdHRhY2hlZApAQCAtMzk1LDYgKzM4NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW1hZ2VTb3VyY2VVUkwoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFN0cmluZyB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogCisgICAgdm9p
ZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VBZnRlckF0dGFjaElmTmVlZGVkKCk7CiAgICAgdmlydHVh
bCB2b2lkIGZvY3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uID0gdHJ1ZSwgRm9jdXNE
aXJlY3Rpb24gPSBGb2N1c0RpcmVjdGlvbk5vbmUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVG
b2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwogICAgIHZpcnR1
YWwgdm9pZCBibHVyKCk7CkBAIC01NTUsOSArNTQ2LDE1IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCB3aWxsUmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5nZSk7CiAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsQXR0
YWNoUmVuZGVyZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpOwor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsRGV0YWNoUmVuZGVyZXJzKCk7CisgICAgdmlydHVhbCB2b2lk
IGRpZERldGFjaFJlbmRlcmVycygpOwogCiAgICAgdm9pZCB1cGRhdGVQc2V1ZG9FbGVtZW50KFBz
ZXVkb0lkLCBTdHlsZTo6Q2hhbmdlID0gU3R5bGU6Ok5vQ2hhbmdlKTsKICAgICB2b2lkIHJlc2V0
Q29tcHV0ZWRTdHlsZSgpOworICAgIHZvaWQgY2xlYXJTdHlsZURlcml2ZWREYXRhQmVmb3JlRGV0
YWNoaW5nUmVuZGVyZXIoKTsKKyAgICB2b2lkIGNsZWFySG92ZXJBbmRBY3RpdmVTdGF0dXNCZWZv
cmVEZXRhY2hpbmdSZW5kZXJlcigpOwogCiBwcm90ZWN0ZWQ6CiAgICAgRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5
cGUgdHlwZSkKQEAgLTY3MSwxNiArNjY4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRldGFjaEFs
bEF0dHJOb2Rlc0Zyb21FbGVtZW50KCk7CiAgICAgdm9pZCBkZXRhY2hBdHRyTm9kZUZyb21FbGVt
ZW50V2l0aFZhbHVlKEF0dHIqLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKIAotICAgIHZv
aWQgYXR0YWNoQ2hpbGRyZW4oY29uc3QgQXR0YWNoQ29udGV4dCYpOwotICAgIHZvaWQgZGV0YWNo
Q2hpbGRyZW4oY29uc3QgQXR0YWNoQ29udGV4dCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxB
dHRhY2hSZW5kZXJlcnMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJzKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkRGV0YWNoUmVuZGVyZXJzKCk7Ci0KLSAgICB2b2lkIGNyZWF0ZVJlbmRlcmVySWZOZWVk
ZWQoY29uc3QgQXR0YWNoQ29udGV4dCYpOwotCiAgICAgYm9vbCBpc0phdmFTY3JpcHRVUkxBdHRy
aWJ1dGUoY29uc3QgQXR0cmlidXRlJikgY29uc3Q7CiAKICAgICBRdWFsaWZpZWROYW1lIG1fdGFn
TmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDE1
NDI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIGlubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVs
ZWFzZVBzZXUKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZWxl
bWVudC0+YXR0YWNoZWQoKSkKLSAgICAgICAgZWxlbWVudC0+ZGV0YWNoKCk7CisgICAgICAgIFN0
eWxlOjpkZXRhY2hSZW5kZXJUcmVlKGVsZW1lbnQpOwogICAgIGVsZW1lbnQtPmNsZWFySG9zdEVs
ZW1lbnQoKTsKIAogICAgIEFTU0VSVCghZWxlbWVudC0+bmV4dFNpYmxpbmcoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1
NDI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgTm9kZVJlbmRlcmluZ0NvbnRleHQ6Ok5vZGVS
ZW5kZXJpbmdDb250ZQogewogfQogCi1Ob2RlUmVuZGVyaW5nQ29udGV4dDo6Tm9kZVJlbmRlcmlu
Z0NvbnRleHQoTm9kZSogbm9kZSwgY29uc3QgRWxlbWVudDo6QXR0YWNoQ29udGV4dCYgY29udGV4
dCkKK05vZGVSZW5kZXJpbmdDb250ZXh0OjpOb2RlUmVuZGVyaW5nQ29udGV4dChOb2RlKiBub2Rl
LCBjb25zdCBTdHlsZTo6QXR0YWNoQ29udGV4dCYgY29udGV4dCkKICAgICA6IG1fbm9kZShub2Rl
KQogICAgICwgbV9zdHlsZShjb250ZXh0LnJlc29sdmVkU3R5bGUpCiAgICAgLCBtX3BhcmVudEZs
b3dSZW5kZXJlcigwKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250
ZXh0LmgJKHJldmlzaW9uIDE1NDI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVy
aW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIE5v
ZGVSZW5kZXJpbmdDb250ZXh0X2gKIAogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdUcmF2ZXJzYWwu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVUcmVlLmgiCiAKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00Niw3ICs0Nyw3IEBAIGNsYXNz
IE5vZGVSZW5kZXJpbmdDb250ZXh0IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBOb2RlUmVuZGVy
aW5nQ29udGV4dChOb2RlKik7CiAgICAgTm9kZVJlbmRlcmluZ0NvbnRleHQoTm9kZSosIFJlbmRl
clN0eWxlKik7Ci0gICAgTm9kZVJlbmRlcmluZ0NvbnRleHQoTm9kZSosIGNvbnN0IEVsZW1lbnQ6
OkF0dGFjaENvbnRleHQmKTsKKyAgICBOb2RlUmVuZGVyaW5nQ29udGV4dChOb2RlKiwgY29uc3Qg
U3R5bGU6OkF0dGFjaENvbnRleHQmKTsKICAgICB+Tm9kZVJlbmRlcmluZ0NvbnRleHQoKTsKIAog
ICAgIHZvaWQgY3JlYXRlUmVuZGVyZXJGb3JUZXh0SWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDE1NDI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDQ4ICsxNDgsNiBAQCB2b2lk
IFNoYWRvd1Jvb3Q6OnNldFJlc2V0U3R5bGVJbmhlcml0YW5jCiAgICAgfQogfQogCi12b2lkIFNo
YWRvd1Jvb3Q6OmF0dGFjaChjb25zdCBFbGVtZW50OjpBdHRhY2hDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIGlmIChhdHRhY2hlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50KCktPmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnB1c2hQYXJlbnRTaGFkb3dSb290KHRoaXMpOwotCi0gICAgRWxlbWVu
dDo6QXR0YWNoQ29udGV4dCBjaGlsZHJlbkNvbnRleHQoY29udGV4dCk7Ci0gICAgY2hpbGRyZW5D
b250ZXh0LnJlc29sdmVkU3R5bGUgPSAwOwotICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlm
IChjaGlsZC0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICB0b1RleHQoY2hpbGQpLT5hdHRh
Y2hUZXh0KCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
Y2hpbGQtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHRvRWxlbWVudChjaGlsZCktPmF0
dGFjaChjaGlsZHJlbkNvbnRleHQpOwotICAgIH0KLQotICAgIHN0eWxlUmVzb2x2ZXIucG9wUGFy
ZW50U2hhZG93Um9vdCh0aGlzKTsKLQotICAgIGNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwotICAg
IHNldEF0dGFjaGVkKHRydWUpOwotfQotCi12b2lkIFNoYWRvd1Jvb3Q6OmRldGFjaChjb25zdCBF
bGVtZW50OjpBdHRhY2hDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmICghYXR0YWNoZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEVsZW1lbnQ6OkF0dGFjaENvbnRleHQgY2hpbGRyZW5Db250
ZXh0KGNvbnRleHQpOwotICAgIGNoaWxkcmVuQ29udGV4dC5yZXNvbHZlZFN0eWxlID0gMDsKLSAg
ICBmb3IgKE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAg
ICAgICAgICAgdG9UZXh0KGNoaWxkKS0+ZGV0YWNoVGV4dCgpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgICAgICB0b0VsZW1lbnQoY2hpbGQpLT5kZXRhY2goY29udGV4dCk7Ci0gICAgfQotICAgIGNs
ZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgc2V0QXR0YWNoZWQoZmFsc2UpOwotfQot
CiB2b2lkIFNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwg
Tm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0
YSkKIHsKICAgICBpZiAoaXNPcnBoYW4oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAko
cmV2aXNpb24gMTU0MjUzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQu
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZVRyZWUuaCIKICNpbmNsdWRlICJUcmVlU2NvcGUuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNjgsOSArNjksNiBAQCBwdWJsaWM6CiAKICAgICBFbGVtZW50
KiBhY3RpdmVFbGVtZW50KCkgY29uc3Q7CiAKLSAgICB2b2lkIGF0dGFjaChjb25zdCBFbGVtZW50
OjpBdHRhY2hDb250ZXh0Jik7Ci0gICAgdm9pZCBkZXRhY2goY29uc3QgRWxlbWVudDo6QXR0YWNo
Q29udGV4dCYpOwotCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjb3BlZEhUTUxTdHls
ZUNoaWxkKCkgT1ZFUlJJREU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFp
bHNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRh
aWxzRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NDI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERldGFpbHNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDggKzEzOCw4IEBA
IHZvaWQgSFRNTERldGFpbHNFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSgKICAgICBpZiAobmFtZSA9
PSBvcGVuQXR0cikgewogICAgICAgICBib29sIG9sZFZhbHVlID0gbV9pc09wZW47CiAgICAgICAg
IG1faXNPcGVuID0gIXZhbHVlLmlzTnVsbCgpOwotICAgICAgICBpZiAob2xkVmFsdWUgIT0gbV9p
c09wZW4pCi0gICAgICAgICAgICByZWF0dGFjaElmQXR0YWNoZWQoKTsKKyAgICAgICAgaWYgKG9s
ZFZhbHVlICE9IG1faXNPcGVuICYmIGF0dGFjaGVkKCkpCisgICAgICAgICAgICBTdHlsZTo6cmVh
dHRhY2hSZW5kZXJUcmVlKHRoaXMpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTQyNTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNyArNDc5
LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKIAogICAgIGJvb2wgd2Fz
QXR0YWNoZWQgPSBhdHRhY2hlZCgpOwogICAgIGlmICh3YXNBdHRhY2hlZCkKLSAgICAgICAgZGV0
YWNoKCk7CisgICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKHRoaXMpOwogCiAgICAgbV9p
bnB1dFR5cGUgPSBuZXdUeXBlLnJlbGVhc2UoKTsKICAgICBtX2lucHV0VHlwZS0+Y3JlYXRlU2hh
ZG93U3VidHJlZSgpOwpAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
dXBkYXRlVHlwZSgpCiAgICAgfQogCiAgICAgaWYgKHdhc0F0dGFjaGVkKSB7Ci0gICAgICAgIGF0
dGFjaCgpOworICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSh0aGlzKTsKICAgICAgICAg
aWYgKGRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkgPT0gdGhpcykKICAgICAgICAgICAgIHVw
ZGF0ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKICAgICB9CkBAIC02OTQsOCArNjk0LDggQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjbwogICAgICAgICBtX21heFJlc3Vs
dHMgPSAhdmFsdWUuaXNOdWxsKCkgPyBzdGQ6Om1pbih2YWx1ZS50b0ludCgpLCBtYXhTYXZlZFJl
c3VsdHMpIDogLTE7CiAgICAgICAgIC8vIEZJWE1FOiBEZXRhY2hpbmcganVzdCBmb3IgbWF4UmVz
dWx0cyBjaGFuZ2UgaXMgbm90IGlkZWFsLiAgV2Ugc2hvdWxkIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0
CiAgICAgICAgIC8vIHRpbWUgdG8gcmVsYXlvdXQgZm9yIHRoaXMgY2hhbmdlLgotICAgICAgICBp
ZiAobV9tYXhSZXN1bHRzICE9IG9sZFJlc3VsdHMgJiYgKG1fbWF4UmVzdWx0cyA8PSAwIHx8IG9s
ZFJlc3VsdHMgPD0gMCkpCi0gICAgICAgICAgICByZWF0dGFjaElmQXR0YWNoZWQoKTsKKyAgICAg
ICAgaWYgKG1fbWF4UmVzdWx0cyAhPSBvbGRSZXN1bHRzICYmIChtX21heFJlc3VsdHMgPD0gMCB8
fCBvbGRSZXN1bHRzIDw9IDApICYmIGF0dGFjaGVkKCkpCisgICAgICAgICAgICBTdHlsZTo6cmVh
dHRhY2hSZW5kZXJUcmVlKHRoaXMpOwogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAg
ICAgICAgIEZlYXR1cmVPYnNlcnZlcjo6b2JzZXJ2ZShkb2N1bWVudCgpLCBGZWF0dXJlT2JzZXJ2
ZXI6OlJlc3VsdHNBdHRyaWJ1dGUpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBhdXRvc2F2ZUF0
dHIpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTQyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ28KICAgICAgICAgaWYgKCFpc0ltYWdlVHlwZSgpKSB7CiAg
ICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCB0aGluayB3ZSBoYXZlIGFuIGltYWdlIHR5cGUgYW55
bW9yZSwgdGhlbiBjbGVhciB0aGUgaW1hZ2UgZnJvbSB0aGUgbG9hZGVyLgogICAgICAgICAgICAg
bV9pbWFnZUxvYWRlci0+c2V0SW1hZ2UoMCk7Ci0gICAgICAgICAgICByZWF0dGFjaCgpOworICAg
ICAgICAgICAgU3R5bGU6OnJlYXR0YWNoUmVuZGVyVHJlZSh0aGlzKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTM4OSw4ICszODksNyBAQCB2b2lkIEhUTUxPYmpl
Y3RFbGVtZW50OjpyZW5kZXJGYWxsYmFja0NvCiAgICAgbV91c2VGYWxsYmFja0NvbnRlbnQgPSB0
cnVlOwogCiAgICAgLy8gRklYTUU6IFN0eWxlIGdldHMgcmVjYWxjdWxhdGVkIHdoaWNoIGlzIHN1
Ym9wdGltYWwuCi0gICAgZGV0YWNoKCk7Ci0gICAgYXR0YWNoKCk7CisgICAgU3R5bGU6OnJlYXR0
YWNoUmVuZGVyVHJlZSh0aGlzKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlbW92
ZWQsIGFsbCBjYWxsZXJzIGFyZSBhbG1vc3QgY2VydGFpbmx5IHdyb25nLgpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NTQyNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNyArMjI3LDcgQEAgYm9vbCBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Ojp3aWxsUmVjYWxjUwogewogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBuZWNlc3Nh
cnk/ICBNYW51YWwgcmUtYXR0YWNoIGlzIGFsbW9zdCBhbHdheXMgd3JvbmcuCiAgICAgaWYgKCF1
c2VGYWxsYmFja0NvbnRlbnQoKSAmJiBuZWVkc1dpZGdldFVwZGF0ZSgpICYmIHJlbmRlcmVyKCkg
JiYgIWlzSW1hZ2VUeXBlKCkgJiYgKGRpc3BsYXlTdGF0ZSgpICE9IERpc3BsYXlpbmdTbmFwc2hv
dCkpCi0gICAgICAgIHJlYXR0YWNoKCk7CisgICAgICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRy
ZWUodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lk
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRTbmFwCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHNldERpc3BsYXlTdGF0ZShSZXN0YXJ0aW5nKTsKLSAgICByZWF0dGFjaCgpOworICAgIFN0
eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUodGhpcyk7CiB9CiAKIHZvaWQgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6ZGlzcGF0Y2hQZW5kaW5nTW91c2VDbGljaygpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTU0MjUzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
Nyw3ICszMDcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjCiAg
ICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwog
ICAgICAgICBpZiAobV9zaXplICE9IG9sZFNpemUgJiYgYXR0YWNoZWQoKSkgewotICAgICAgICAg
ICAgcmVhdHRhY2goKTsKKyAgICAgICAgICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUodGhp
cyk7CiAgICAgICAgICAgICBzZXRSZWNhbGNMaXN0SXRlbXMoKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSBtdWx0aXBsZUF0dHIpCkBAIC0xMDExLDggKzEwMTEsOCBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZU11bHRpcGxlQXR0CiAgICAgYm9vbCBvbGRVc2VzTWVu
dUxpc3QgPSB1c2VzTWVudUxpc3QoKTsKICAgICBtX211bHRpcGxlID0gIXZhbHVlLmlzTnVsbCgp
OwogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwotICAgIGlmIChvbGRVc2VzTWVudUxpc3Qg
IT0gdXNlc01lbnVMaXN0KCkpCi0gICAgICAgIHJlYXR0YWNoSWZBdHRhY2hlZCgpOworICAgIGlm
IChvbGRVc2VzTWVudUxpc3QgIT0gdXNlc01lbnVMaXN0KCkgJiYgYXR0YWNoZWQoKSkKKyAgICAg
ICAgU3R5bGU6OnJlYXR0YWNoUmVuZGVyVHJlZSh0aGlzKTsKIH0KIAogYm9vbCBIVE1MU2VsZWN0
RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBsaXN0LCBib29sKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCShyZXZp
c2lvbiAxNTQyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwyNSArNzIsMjEgQEAgdm9pZCBIVE1MVmlld1Nv
dXJjZURvY3VtZW50OjpjcmVhdGVDb250YQogewogICAgIFJlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+
IGh0bWwgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZSh0aGlzKTsKICAgICBwYXJzZXJBcHBlbmRD
aGlsZChodG1sKTsKLSAgICBodG1sLT5hdHRhY2goKTsKICAgICBSZWZQdHI8SFRNTEJvZHlFbGVt
ZW50PiBib2R5ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgaHRtbC0+cGFy
c2VyQXBwZW5kQ2hpbGQoYm9keSk7Ci0gICAgYm9keS0+YXR0YWNoKCk7Ci0KICAgICAvLyBDcmVh
dGUgYSBsaW5lIGd1dHRlciBkaXYgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIHN1cmUgdGhlIGd1
dHRlciBleHRlbmRzIGRvd24gdGhlIGhlaWdodCBvZiB0aGUgd2hvbGUKICAgICAvLyBkb2N1bWVu
dC4KICAgICBSZWZQdHI8SFRNTERpdkVsZW1lbnQ+IGRpdiA9IEhUTUxEaXZFbGVtZW50OjpjcmVh
dGUodGhpcyk7CiAgICAgZGl2LT5zZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCAid2Via2l0LWxpbmUt
Z3V0dGVyLWJhY2tkcm9wIik7CiAgICAgYm9keS0+cGFyc2VyQXBwZW5kQ2hpbGQoZGl2KTsKLSAg
ICBkaXYtPmF0dGFjaCgpOwogCiAgICAgUmVmUHRyPEhUTUxUYWJsZUVsZW1lbnQ+IHRhYmxlID0g
SFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIGJvZHktPnBhcnNlckFwcGVuZENo
aWxkKHRhYmxlKTsKLSAgICB0YWJsZS0+YXR0YWNoKCk7CiAgICAgbV90Ym9keSA9IEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50OjpjcmVhdGUodGJvZHlUYWcsIHRoaXMpOwogICAgIHRhYmxlLT5wYXJz
ZXJBcHBlbmRDaGlsZChtX3Rib2R5KTsKLSAgICBtX3Rib2R5LT5hdHRhY2goKTsKICAgICBtX2N1
cnJlbnQgPSBtX3Rib2R5OworCisgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUoaHRtbC5nZXQo
KSk7CiB9CiAKIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkU291cmNlKGNvbnN0IFN0
cmluZyYgc291cmNlLCBIVE1MVG9rZW4mIHRva2VuKQpAQCAtMTg4LDcgKzE4NCw3IEBAIFBhc3NS
ZWZQdHI8RWxlbWVudD4gSFRNTFZpZXdTb3VyY2VEb2N1bWUKICAgICBSZWZQdHI8SFRNTEVsZW1l
bnQ+IHNwYW4gPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHNwYW5UYWcsIHRoaXMpOwogICAgIHNwYW4t
PnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsIGNsYXNzTmFtZSk7CiAgICAgbV9jdXJyZW50LT5wYXJz
ZXJBcHBlbmRDaGlsZChzcGFuKTsKLSAgICBzcGFuLT5hdHRhY2goKTsKKyAgICBTdHlsZTo6YXR0
YWNoUmVuZGVyVHJlZShzcGFuLmdldCgpKTsKICAgICByZXR1cm4gc3Bhbi5yZWxlYXNlKCk7CiB9
CiAKQEAgLTE5NywyNSArMTkzLDI1IEBAIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRk
TGluZShjb24KICAgICAvLyBDcmVhdGUgYSB0YWJsZSByb3cuCiAgICAgUmVmUHRyPEhUTUxUYWJs
ZVJvd0VsZW1lbnQ+IHRyb3cgPSBIVE1MVGFibGVSb3dFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAg
ICAgbV90Ym9keS0+cGFyc2VyQXBwZW5kQ2hpbGQodHJvdyk7Ci0gICAgdHJvdy0+YXR0YWNoKCk7
CisgICAgU3R5bGU6OnJlYXR0YWNoUmVuZGVyVHJlZSh0cm93LmdldCgpKTsKIAogICAgIC8vIENy
ZWF0ZSBhIGNlbGwgdGhhdCB3aWxsIGhvbGQgdGhlIGxpbmUgbnVtYmVyIChpdCBpcyBnZW5lcmF0
ZWQgaW4gdGhlIHN0eWxlc2hlZXQgdXNpbmcgY291bnRlcnMpLgogICAgIFJlZlB0cjxIVE1MVGFi
bGVDZWxsRWxlbWVudD4gdGQgPSBIVE1MVGFibGVDZWxsRWxlbWVudDo6Y3JlYXRlKHRkVGFnLCB0
aGlzKTsKICAgICB0ZC0+c2V0QXR0cmlidXRlKGNsYXNzQXR0ciwgIndlYmtpdC1saW5lLW51bWJl
ciIpOwogICAgIHRyb3ctPnBhcnNlckFwcGVuZENoaWxkKHRkKTsKLSAgICB0ZC0+YXR0YWNoKCk7
CisgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUodGQuZ2V0KCkpOwogCiAgICAgLy8gQ3JlYXRl
IGEgc2Vjb25kIGNlbGwgZm9yIHRoZSBsaW5lIGNvbnRlbnRzCiAgICAgdGQgPSBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6Y3JlYXRlKHRkVGFnLCB0aGlzKTsKICAgICB0ZC0+c2V0QXR0cmlidXRlKGNs
YXNzQXR0ciwgIndlYmtpdC1saW5lLWNvbnRlbnQiKTsKICAgICB0cm93LT5wYXJzZXJBcHBlbmRD
aGlsZCh0ZCk7Ci0gICAgdGQtPmF0dGFjaCgpOworICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVl
KHRkLmdldCgpKTsKICAgICBtX2N1cnJlbnQgPSBtX3RkID0gdGQ7CiAKICNpZmRlZiBERUJVR19M
SU5FX05VTUJFUlMKICAgICBSZWZQdHI8VGV4dD4gbGluZU51bWJlclRleHQgPSBUZXh0OjpjcmVh
dGUodGhpcywgU3RyaW5nOjpudW1iZXIocGFyc2VyKCktPmxpbmVOdW1iZXIoKSArIDEpICsgIiAi
KTsKICAgICB0ZC0+YWRkQ2hpbGQobGluZU51bWJlclRleHQpOwotICAgIGxpbmVOdW1iZXJUZXh0
LT5hdHRhY2goKTsKKyAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZShsaW5lTnVtYmVyVGV4dC5n
ZXQoKSk7CiAjZW5kaWYKIAogICAgIC8vIE9wZW4gdXAgdGhlIG5lZWRlZCBzcGFucy4KQEAgLTIz
MSw3ICsyMjcsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmZpbmlzaExpbmUoCiAg
ICAgaWYgKCFtX2N1cnJlbnQtPmhhc0NoaWxkTm9kZXMoKSkgewogICAgICAgICBSZWZQdHI8SFRN
TEJSRWxlbWVudD4gYnIgPSBIVE1MQlJFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgICAgIG1f
Y3VycmVudC0+cGFyc2VyQXBwZW5kQ2hpbGQoYnIpOwotICAgICAgICBici0+YXR0YWNoKCk7Cisg
ICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKGJyLmdldCgpKTsKICAgICB9CiAgICAgbV9j
dXJyZW50ID0gbV90Ym9keTsKIH0KQEAgLTI4Nyw3ICsyODMsNyBAQCBQYXNzUmVmUHRyPEVsZW1l
bnQ+IEhUTUxWaWV3U291cmNlRG9jdW1lCiAgICAgUmVmUHRyPEhUTUxCYXNlRWxlbWVudD4gYmFz
ZSA9IEhUTUxCYXNlRWxlbWVudDo6Y3JlYXRlKGJhc2VUYWcsIHRoaXMpOwogICAgIGJhc2UtPnNl
dEF0dHJpYnV0ZShocmVmQXR0ciwgaHJlZik7CiAgICAgbV9jdXJyZW50LT5wYXJzZXJBcHBlbmRD
aGlsZChiYXNlKTsKLSAgICBiYXNlLT5hdHRhY2goKTsKKyAgICBTdHlsZTo6YXR0YWNoUmVuZGVy
VHJlZShiYXNlLmdldCgpKTsKICAgICByZXR1cm4gYmFzZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTMw
Nyw3ICszMDMsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxWaWV3U291cmNlRG9jdW1lCiAg
ICAgYW5jaG9yLT5zZXRBdHRyaWJ1dGUodGFyZ2V0QXR0ciwgIl9ibGFuayIpOwogICAgIGFuY2hv
ci0+c2V0QXR0cmlidXRlKGhyZWZBdHRyLCB1cmwpOwogICAgIG1fY3VycmVudC0+cGFyc2VyQXBw
ZW5kQ2hpbGQoYW5jaG9yKTsKLSAgICBhbmNob3ItPmF0dGFjaCgpOworICAgIFN0eWxlOjphdHRh
Y2hSZW5kZXJUcmVlKGFuY2hvci5nZXQoKSk7CiAgICAgcmV0dXJuIGFuY2hvci5yZWxlYXNlKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29u
c3RydWN0aW9uU2l0ZS5jcHAJKHJldmlzaW9uIDE1NDI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAx
LDcgKzEwMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleGVjdXRlVGFzayhIVE1MQ29uc3QKIAog
ICAgIGlmICh0YXNrLmNoaWxkLT5wYXJlbnROb2RlKCkgJiYgdGFzay5wYXJlbnQtPmF0dGFjaGVk
KCkgJiYgIXRhc2suY2hpbGQtPmF0dGFjaGVkKCkpIHsKICAgICAgICAgaWYgKHRhc2suY2hpbGQt
PmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHRvRWxlbWVudCh0YXNrLmNoaWxkLmdldCgp
KS0+YXR0YWNoKCk7CisgICAgICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSh0b0VsZW1l
bnQodGFzay5jaGlsZC5nZXQoKSkpOwogICAgICAgICBlbHNlIGlmICh0YXNrLmNoaWxkLT5pc1Rl
eHROb2RlKCkpCiAgICAgICAgICAgICB0b1RleHQodGFzay5jaGlsZC5nZXQoKSktPmF0dGFjaFRl
eHQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1NDI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzksNyArMTYz
OSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2UKICAgICAgICAg
aWYgKGZ1cnRoZXN0QmxvY2tFbGVtZW50LT5hdHRhY2hlZCgpICYmICFuZXdJdGVtLT5lbGVtZW50
KCktPmF0dGFjaGVkKCkpIHsKICAgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IG5ld0l0ZW0tPmVs
ZW1lbnQoKSBtaWdodCBhbHJlYWR5IGJlIGF0dGFjaGVkIGlmLCBmb3IgZXhhbXBsZSwgb25lIG9m
IHRoZSByZXBhcmVudGVkCiAgICAgICAgICAgICAvLyBjaGlsZHJlbiBpcyBhIHN0eWxlIGVsZW1l
bnQsIHdoaWNoIGF0dGFjaGVzIGl0c2VsZiBhdXRvbWF0aWNhbGx5LgotICAgICAgICAgICAgbmV3
SXRlbS0+ZWxlbWVudCgpLT5hdHRhY2goKTsKKyAgICAgICAgICAgIFN0eWxlOjphdHRhY2hSZW5k
ZXJUcmVlKG5ld0l0ZW0tPmVsZW1lbnQoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gMTQuCiAg
ICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+c3dhcFRvKGZvcm1hdHRp
bmdFbGVtZW50LCBuZXdJdGVtLCBib29rbWFyayk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwCShyZXZpc2lvbiAxNTQyNTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBJbnNlcnRpb25Qb2ludDo6d2lsbEF0dGFjaFJlbmRlcmVy
cwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQt
PmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHRvRWxlbWVudChjdXJyZW50KS0+YXR0YWNo
KCk7CisgICAgICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSh0b0VsZW1lbnQoY3VycmVu
dCkpOwogICAgIH0KIH0KIApAQCAtNzksNyArNzksNyBAQCB2b2lkIEluc2VydGlvblBvaW50Ojp3
aWxsRGV0YWNoUmVuZGVyZXJzCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoY3VycmVudC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgdG9FbGVtZW50
KGN1cnJlbnQpLT5kZXRhY2goKTsKKyAgICAgICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVl
KHRvRWxlbWVudChjdXJyZW50KSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTQyNTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDkgKzM0LDggQEAgdm9pZCBQbGFjZWhvbGRlckRvY3VtZW50OjphdHRhY2goKQog
ewogICAgIEFTU0VSVCghYXR0YWNoZWQoKSk7CiAKLSAgICBFbGVtZW50OjpBdHRhY2hDb250ZXh0
IGF0dGFjaENvbnRleHQ7CiAgICAgZm9yIChFbGVtZW50KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJz
YWw6OmZpcnN0V2l0aGluKHRoaXMpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0U2libGluZyhjaGlsZCkpCi0gICAgICAgIGNoaWxkLT5hdHRhY2goYXR0YWNoQ29udGV4dCk7
CisgICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKGNoaWxkKTsKIAogICAgIHNldEF0dGFj
aGVkKHRydWUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJl
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJl
ZS5jcHAJKHJldmlzaW9uIDE1NDI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVz
b2x2ZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMTYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVUcmVlLmgiCiAKKyNpbmNsdWRlICJB
WE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRS
YXJlRGF0YS5oIgogI2luY2x1ZGUgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJOb2Rl
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuaCIKQEAgLTEwMSw2ICsxMDQsMTg1IEBAIENoYW5nZSBkZXRlcm1pbmVDaGFu
Z2UoY29uc3QgUmVuZGVyU3R5bGUKICAgICByZXR1cm4gTm9DaGFuZ2U7CiB9CiAKK3N0YXRpYyB2
b2lkIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0YWNo
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBOb2RlUmVuZGVyaW5nQ29udGV4dChlbGVtZW50LCBj
b250ZXh0KS5jcmVhdGVSZW5kZXJlckZvckVsZW1lbnRJZk5lZWRlZCgpOworfQorCitzdGF0aWMg
dm9pZCBhdHRhY2hTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIGNvbnN0IEF0dGFj
aENvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKHNoYWRvd1Jvb3QtPmF0dGFjaGVkKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gc2hhZG93
Um9vdC0+ZG9jdW1lbnQoKS0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpOworICAgIHN0eWxlUmVzb2x2
ZXIucHVzaFBhcmVudFNoYWRvd1Jvb3Qoc2hhZG93Um9vdCk7CisKKyAgICBTdHlsZTo6QXR0YWNo
Q29udGV4dCBjaGlsZHJlbkNvbnRleHQoY29udGV4dCk7CisgICAgY2hpbGRyZW5Db250ZXh0LnJl
c29sdmVkU3R5bGUgPSAwOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBzaGFkb3dSb290LT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAg
IGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICB0b1RleHQoY2hpbGQpLT5h
dHRhY2hUZXh0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUo
dG9FbGVtZW50KGNoaWxkKSwgY2hpbGRyZW5Db250ZXh0KTsKKyAgICB9CisgICAgc3R5bGVSZXNv
bHZlci5wb3BQYXJlbnRTaGFkb3dSb290KHNoYWRvd1Jvb3QpOworCisgICAgc2hhZG93Um9vdC0+
Y2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgc2hhZG93Um9vdC0+c2V0QXR0YWNoZWQodHJ1
ZSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCitzdGF0aWMgYm9vbCBjaGlsZEF0dGFjaGVkQWxsb3dl
ZFdoZW5BdHRhY2hpbmdDaGlsZHJlbihDb250YWluZXJOb2RlKiBub2RlKQoreworICAgIGlmIChu
b2RlLT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUt
PmlzSW5zZXJ0aW9uUG9pbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPnNoYWRvd1Jvb3QoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3N0YXRpYyB2
b2lkIGF0dGFjaENoaWxkcmVuKEVsZW1lbnQqIGN1cnJlbnQsIGNvbnN0IEF0dGFjaENvbnRleHQm
IGNvbnRleHQpCit7CisgICAgQXR0YWNoQ29udGV4dCBjaGlsZHJlbkNvbnRleHQoY29udGV4dCk7
CisgICAgY2hpbGRyZW5Db250ZXh0LnJlc29sdmVkU3R5bGUgPSAwOworCisgICAgZm9yIChOb2Rl
KiBjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFjaGlsZC0+YXR0YWNoZWQoKSB8fCBjaGls
ZEF0dGFjaGVkQWxsb3dlZFdoZW5BdHRhY2hpbmdDaGlsZHJlbihjdXJyZW50KSk7CisgICAgICAg
IGlmIChjaGlsZC0+YXR0YWNoZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICAgICAgdG9UZXh0KGNoaWxkKS0+YXR0
YWNoVGV4dCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBhdHRhY2hSZW5kZXJUcmVlKHRv
RWxlbWVudChjaGlsZCksIGNoaWxkcmVuQ29udGV4dCk7CisgICAgfQorfQorCit2b2lkIGF0dGFj
aFJlbmRlclRyZWUoRWxlbWVudCogY3VycmVudCwgY29uc3QgQXR0YWNoQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBQb3N0QXR0YWNoQ2FsbGJhY2tEaXNhYmxlciBjYWxsYmFja0Rpc2FibGVyKGN1
cnJlbnQpOworICAgIFdpZGdldEhpZXJhcmNoeVVwZGF0ZXNTdXNwZW5zaW9uU2NvcGUgc3VzcGVu
ZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXM7CisKKyAgICBpZiAoY3VycmVudC0+aGFzQ3VzdG9tU3R5
bGVSZXNvbHZlQ2FsbGJhY2tzKCkpCisgICAgICAgIGN1cnJlbnQtPndpbGxBdHRhY2hSZW5kZXJl
cnMoKTsKKworICAgIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoY3VycmVudCwgY29udGV4dCk7CisK
KyAgICBpZiAoY3VycmVudC0+cGFyZW50RWxlbWVudCgpICYmIGN1cnJlbnQtPnBhcmVudEVsZW1l
bnQoKS0+aXNJbkNhbnZhc1N1YnRyZWUoKSkKKyAgICAgICAgY3VycmVudC0+c2V0SXNJbkNhbnZh
c1N1YnRyZWUodHJ1ZSk7CisKKyAgICBjdXJyZW50LT51cGRhdGVQc2V1ZG9FbGVtZW50KEJFRk9S
RSk7CisKKyAgICBTdHlsZVJlc29sdmVyUGFyZW50UHVzaGVyIHBhcmVudFB1c2hlcihjdXJyZW50
KTsKKworICAgIC8vIFdoZW4gYSBzaGFkb3cgcm9vdCBleGlzdHMsIGl0IGRvZXMgdGhlIHdvcmsg
b2YgYXR0YWNoaW5nIHRoZSBjaGlsZHJlbi4KKyAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9v
dCA9IGN1cnJlbnQtPnNoYWRvd1Jvb3QoKSkgeworICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgp
OworICAgICAgICBhdHRhY2hTaGFkb3dSb290KHNoYWRvd1Jvb3QsIGNvbnRleHQpOworICAgIH0g
ZWxzZSBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICBwYXJlbnRQdXNoZXIucHVz
aCgpOworCisgICAgYXR0YWNoQ2hpbGRyZW4oY3VycmVudCwgY29udGV4dCk7CisKKyAgICBOb2Rl
KiBzaWJsaW5nID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoY3VycmVudC0+cmVu
ZGVyZXIoKSAmJiBzaWJsaW5nICYmICFzaWJsaW5nLT5yZW5kZXJlcigpICYmIHNpYmxpbmctPmF0
dGFjaGVkKCkpCisgICAgICAgIFRleHQ6OmNyZWF0ZVRleHRSZW5kZXJlcnNGb3JTaWJsaW5nc0Fm
dGVyQXR0YWNoSWZOZWVkZWQoc2libGluZyk7CisKKyAgICBjdXJyZW50LT5zZXRBdHRhY2hlZCh0
cnVlKTsKKyAgICBjdXJyZW50LT5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKKworICAgIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBjdXJyZW50LT5kb2N1bWVudCgpKSB7CisgICAgICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50LT5heE9iamVjdENhY2hlKCkpCisgICAgICAg
ICAgICBjYWNoZS0+dXBkYXRlQ2FjaGVBZnRlck5vZGVJc0F0dGFjaGVkKGN1cnJlbnQpOworICAg
IH0KKworICAgIGN1cnJlbnQtPnVwZGF0ZVBzZXVkb0VsZW1lbnQoQUZURVIpOworCisgICAgY3Vy
cmVudC0+dXBkYXRlRm9jdXNBcHBlYXJhbmNlQWZ0ZXJBdHRhY2hJZk5lZWRlZCgpOworICAgIAor
ICAgIGlmIChjdXJyZW50LT5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkKKyAgICAg
ICAgY3VycmVudC0+ZGlkQXR0YWNoUmVuZGVyZXJzKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRldGFj
aFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogc2hhZG93Um9vdCwgY29uc3QgQXR0YWNoQ29udGV4dCYg
Y29udGV4dCkKK3sKKyAgICBpZiAoIXNoYWRvd1Jvb3QtPmF0dGFjaGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBTdHlsZTo6QXR0YWNoQ29udGV4dCBjaGlsZHJlbkNvbnRleHQoY29udGV4dCk7
CisgICAgY2hpbGRyZW5Db250ZXh0LnJlc29sdmVkU3R5bGUgPSAwOworICAgIGZvciAoTm9kZSog
Y2hpbGQgPSBzaGFkb3dSb290LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgpKSB7CisgICAg
ICAgICAgICB0b1RleHQoY2hpbGQpLT5kZXRhY2hUZXh0KCk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAg
ICAgICAgIGRldGFjaFJlbmRlclRyZWUodG9FbGVtZW50KGNoaWxkKSwgY29udGV4dCk7CisgICAg
fQorICAgIHNoYWRvd1Jvb3QtPmNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgc2hh
ZG93Um9vdC0+c2V0QXR0YWNoZWQoZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBkZXRhY2hDaGls
ZHJlbihFbGVtZW50KiBjdXJyZW50LCBjb25zdCBBdHRhY2hDb250ZXh0JiBjb250ZXh0KQorewor
ICAgIEF0dGFjaENvbnRleHQgY2hpbGRyZW5Db250ZXh0KGNvbnRleHQpOworICAgIGNoaWxkcmVu
Q29udGV4dC5yZXNvbHZlZFN0eWxlID0gMDsKKworICAgIGZvciAoTm9kZSogY2hpbGQgPSBjdXJy
ZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7
CisgICAgICAgIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICB0b1RleHQo
Y2hpbGQpLT5kZXRhY2hUZXh0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIGRldGFjaFJl
bmRlclRyZWUodG9FbGVtZW50KGNoaWxkKSwgY2hpbGRyZW5Db250ZXh0KTsKKyAgICB9CisgICAg
Y3VycmVudC0+Y2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKK30KKwordm9pZCBkZXRhY2hS
ZW5kZXJUcmVlKEVsZW1lbnQqIGN1cnJlbnQsIGNvbnN0IEF0dGFjaENvbnRleHQmIGNvbnRleHQp
Cit7CisgICAgV2lkZ2V0SGllcmFyY2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZSBzdXNwZW5kV2lk
Z2V0SGllcmFyY2h5VXBkYXRlczsKKworICAgIGlmIChjdXJyZW50LT5oYXNDdXN0b21TdHlsZVJl
c29sdmVDYWxsYmFja3MoKSkKKyAgICAgICAgY3VycmVudC0+d2lsbERldGFjaFJlbmRlcmVycygp
OworCisgICAgY3VycmVudC0+Y2xlYXJTdHlsZURlcml2ZWREYXRhQmVmb3JlRGV0YWNoaW5nUmVu
ZGVyZXIoKTsKKworICAgIC8vIERvIG5vdCByZW1vdmUgdGhlIGVsZW1lbnQncyBob3ZlcmVkIGFu
ZCBhY3RpdmUgc3RhdHVzCisgICAgLy8gaWYgcGVyZm9ybWluZyBhIHJlYXR0YWNoLgorICAgIGlm
ICghY29udGV4dC5wZXJmb3JtaW5nUmVhdHRhY2gpCisgICAgICAgIGN1cnJlbnQtPmNsZWFySG92
ZXJBbmRBY3RpdmVTdGF0dXNCZWZvcmVEZXRhY2hpbmdSZW5kZXJlcigpOworCisgICAgaWYgKFNo
YWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBjdXJyZW50LT5zaGFkb3dSb290KCkpCisgICAgICAgIGRl
dGFjaFNoYWRvd1Jvb3Qoc2hhZG93Um9vdCwgY29udGV4dCk7CisKKyAgICBkZXRhY2hDaGlsZHJl
bihjdXJyZW50LCBjb250ZXh0KTsKKworICAgIGlmIChjdXJyZW50LT5yZW5kZXJlcigpKQorICAg
ICAgICBjdXJyZW50LT5yZW5kZXJlcigpLT5kZXN0cm95QW5kQ2xlYW51cEFub255bW91c1dyYXBw
ZXJzKCk7CisgICAgY3VycmVudC0+c2V0UmVuZGVyZXIoMCk7CisKKyAgICBjdXJyZW50LT5zZXRB
dHRhY2hlZChmYWxzZSk7CisKKyAgICBpZiAoY3VycmVudC0+aGFzQ3VzdG9tU3R5bGVSZXNvbHZl
Q2FsbGJhY2tzKCkpCisgICAgICAgIGN1cnJlbnQtPmRpZERldGFjaFJlbmRlcmVycygpOworfQor
Cit2b2lkIHJlYXR0YWNoUmVuZGVyVHJlZShFbGVtZW50KiBjdXJyZW50LCBjb25zdCBBdHRhY2hD
b250ZXh0JiBjb250ZXh0KQoreworICAgIEF0dGFjaENvbnRleHQgcmVhdHRhY2hDb250ZXh0KGNv
bnRleHQpOworICAgIHJlYXR0YWNoQ29udGV4dC5wZXJmb3JtaW5nUmVhdHRhY2ggPSB0cnVlOwor
CisgICAgaWYgKGN1cnJlbnQtPmF0dGFjaGVkKCkpCisgICAgICAgIGRldGFjaFJlbmRlclRyZWUo
Y3VycmVudCwgcmVhdHRhY2hDb250ZXh0KTsKKworICAgIGF0dGFjaFJlbmRlclRyZWUoY3VycmVu
dCwgcmVhdHRhY2hDb250ZXh0KTsKK30KKwogc3RhdGljIGJvb2wgcHNldWRvU3R5bGVDYWNoZUlz
SW52YWxpZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7
CiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgp
OwpAQCAtMTQ3LDkgKzMyOSw5IEBAIHN0YXRpYyBDaGFuZ2UgcmVzb2x2ZUxvY2FsKEVsZW1lbnQq
IGN1cnIKICAgICAgICAgbG9jYWxDaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2UoY3VycmVudFN0eWxl
LmdldCgpLCBuZXdTdHlsZS5nZXQoKSwgZG9jdW1lbnQtPnNldHRpbmdzKCkpOwogICAgIH0KICAg
ICBpZiAobG9jYWxDaGFuZ2UgPT0gRGV0YWNoKSB7Ci0gICAgICAgIEVsZW1lbnQ6OkF0dGFjaENv
bnRleHQgcmVhdHRhY2hDb250ZXh0OworICAgICAgICBBdHRhY2hDb250ZXh0IHJlYXR0YWNoQ29u
dGV4dDsKICAgICAgICAgcmVhdHRhY2hDb250ZXh0LnJlc29sdmVkU3R5bGUgPSBuZXdTdHlsZS5n
ZXQoKTsKLSAgICAgICAgY3VycmVudC0+cmVhdHRhY2gocmVhdHRhY2hDb250ZXh0KTsKKyAgICAg
ICAgcmVhdHRhY2hSZW5kZXJUcmVlKGN1cnJlbnQsIHJlYXR0YWNoQ29udGV4dCk7CiAgICAgICAg
IHJldHVybiBEZXRhY2g7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVS
ZXNvbHZlVHJlZS5oCShyZXZpc2lvbiAxNTQyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVJlc29sdmVUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE2IEBAIGVudW0g
Q2hhbmdlIHsgTm9DaGFuZ2UsIE5vSW5oZXJpdCwgSW5oZXIKIHZvaWQgcmVzb2x2ZVRyZWUoRWxl
bWVudCosIENoYW5nZSk7CiB2b2lkIHJlc29sdmVUcmVlKERvY3VtZW50KiwgQ2hhbmdlKTsKIAor
c3RydWN0IEF0dGFjaENvbnRleHQgeworICAgIFJlbmRlclN0eWxlKiByZXNvbHZlZFN0eWxlOwor
ICAgIGJvb2wgcGVyZm9ybWluZ1JlYXR0YWNoOworCisgICAgQXR0YWNoQ29udGV4dCgpIDogcmVz
b2x2ZWRTdHlsZSgwKSwgcGVyZm9ybWluZ1JlYXR0YWNoKGZhbHNlKSB7IH0KK307Cit2b2lkIGF0
dGFjaFJlbmRlclRyZWUoRWxlbWVudCosIGNvbnN0IEF0dGFjaENvbnRleHQmID0gQXR0YWNoQ29u
dGV4dCgpKTsKK3ZvaWQgZGV0YWNoUmVuZGVyVHJlZShFbGVtZW50KiwgY29uc3QgQXR0YWNoQ29u
dGV4dCYgPSBBdHRhY2hDb250ZXh0KCkpOwordm9pZCByZWF0dGFjaFJlbmRlclRyZWUoRWxlbWVu
dCosIGNvbnN0IEF0dGFjaENvbnRleHQmID0gQXR0YWNoQ29udGV4dCgpKTsKKwogQ2hhbmdlIGRl
dGVybWluZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgU2V0
dGluZ3MqKTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCShyZXZpc2lvbiAxNTQy
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTksOSArMTU5LDkgQEAgYm9vbCBTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKFNW
RwogICAgIGJvb2wgdmFsaWQgPSB0YXJnZXRFbGVtZW50LT5pc1ZhbGlkKCk7CiAgICAgYm9vbCBh
dHRhY2hlZCA9IHRhcmdldEVsZW1lbnQtPmF0dGFjaGVkKCk7CiAgICAgaWYgKHZhbGlkICYmICFh
dHRhY2hlZCAmJiB0YXJnZXRFbGVtZW50LT5wYXJlbnROb2RlKCktPmF0dGFjaGVkKCkpCi0gICAg
ICAgIHRhcmdldEVsZW1lbnQtPmF0dGFjaCgpOworICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVy
VHJlZSh0YXJnZXRFbGVtZW50KTsKICAgICBlbHNlIGlmICghdmFsaWQgJiYgYXR0YWNoZWQpCi0g
ICAgICAgIHRhcmdldEVsZW1lbnQtPmRldGFjaCgpOworICAgICAgICBTdHlsZTo6ZGV0YWNoUmVu
ZGVyVHJlZSh0YXJnZXRFbGVtZW50KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUveG1sL1hNTEVycm9ycy5jcHAJKHJldmlzaW9uIDE1NDI1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3htbC9YTUxFcnJvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9p
ZCBYTUxFcnJvcnM6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKAogICAgICAgICByb290RWxlbWVu
dC0+cGFyc2VyQXBwZW5kQ2hpbGQoYm9keSk7CiAgICAgICAgIG1fZG9jdW1lbnQtPnBhcnNlckFw
cGVuZENoaWxkKHJvb3RFbGVtZW50KTsKICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmF0dGFjaGVk
KCkgJiYgIXJvb3RFbGVtZW50LT5hdHRhY2hlZCgpKQotICAgICAgICAgICAgcm9vdEVsZW1lbnQt
PmF0dGFjaCgpOworICAgICAgICAgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUocm9vdEVsZW1l
bnQuZ2V0KCkpOwogICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOwogICAgIH0K
ICNpZiBFTkFCTEUoU1ZHKQpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgWE1MRXJyb3JzOjppbnNl
cnRFcnJvck1lc3NhZ2VCbG9jaygKIAogICAgICAgICBkb2N1bWVudEVsZW1lbnQtPnBhcmVudE5v
ZGUoKS0+cGFyc2VyUmVtb3ZlQ2hpbGQoZG9jdW1lbnRFbGVtZW50LmdldCgpKTsKICAgICAgICAg
aWYgKGRvY3VtZW50RWxlbWVudC0+YXR0YWNoZWQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50RWxl
bWVudC0+ZGV0YWNoKCk7CisgICAgICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZShkb2N1
bWVudEVsZW1lbnQuZ2V0KCkpOwogCiAgICAgICAgIGJvZHktPnBhcnNlckFwcGVuZENoaWxkKGRv
Y3VtZW50RWxlbWVudCk7CiAgICAgICAgIG1fZG9jdW1lbnQtPnBhcnNlckFwcGVuZENoaWxkKHJv
b3RFbGVtZW50LmdldCgpKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFhNTEVycm9yczo6aW5z
ZXJ0RXJyb3JNZXNzYWdlQmxvY2soCiAgICAgICAgIGlmIChtX2RvY3VtZW50LT5hdHRhY2hlZCgp
KQogICAgICAgICAgICAgLy8gSW4gZ2VuZXJhbCwgcm9vdEVsZW1lbnQgc2hvdWxkbid0IGJlIGF0
dGFjaGVkIHJpZ2h0IG5vdywgYnV0IGl0IHdpbGwgYmUgaWYgdGhlcmUgaXMgYSBzdHlsZSBlbGVt
ZW50CiAgICAgICAgICAgICAvLyBpbiB0aGUgU1ZHIGNvbnRlbnQuCi0gICAgICAgICAgICByb290
RWxlbWVudC0+cmVhdHRhY2goKTsKKyAgICAgICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVl
KHJvb3RFbGVtZW50LmdldCgpKTsKIAogICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5Lmdl
dCgpOwogICAgIH0KQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFhNTEVycm9yczo6aW5zZXJ0RXJy
b3JNZXNzYWdlQmxvY2soCiAgICAgICAgIGRvY3VtZW50RWxlbWVudC0+cGFyc2VyQXBwZW5kQ2hp
bGQocmVwb3J0RWxlbWVudCk7CiAKICAgICBpZiAoZG9jdW1lbnRFbGVtZW50LT5hdHRhY2hlZCgp
ICYmICFyZXBvcnRFbGVtZW50LT5hdHRhY2hlZCgpKQotICAgICAgICByZXBvcnRFbGVtZW50LT5h
dHRhY2goKTsKKyAgICAgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUocmVwb3J0RWxlbWVudC5n
ZXQoKSk7CiAKICAgICBtX2RvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
ckxpYnhtbDIuY3BwCShyZXZpc2lvbiAxNTQyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2Miw3
ICs4NjIsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjCiAjZW5k
aWYKIAogICAgIGlmIChtX3ZpZXcgJiYgY3VycmVudE5vZGUtPmF0dGFjaGVkKCkgJiYgIW5ld0Vs
ZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOworICAgICAg
ICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZShuZXdFbGVtZW50LmdldCgpKTsKIAogICAgIGlmIChu
ZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpCiAgICAgICAgIHN0YXRp
Y19jYXN0PEhUTUxIdG1sRWxlbWVudCo+KG5ld0VsZW1lbnQuZ2V0KCkpLT5pbnNlcnRlZEJ5UGFy
c2VyKCk7Cg==
</data>
<flag name="review"
          id="231028"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>