<?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>21158</bug_id>
          
          <creation_ts>2008-09-26 17:44:53 -0700</creation_ts>
          <short_desc>reduce use of virtual functions in Node for speed</short_desc>
          <delta_ts>2019-02-06 09:04:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92996</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-26 17:44:53 -0700</bug_when>
    <thetext>Use the element and container bits more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92998</commentid>
    <comment_count>1</comment_count>
      <attachid>23864</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-26 17:57:43 -0700</bug_when>
    <thetext>Created attachment 23864
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93060</commentid>
    <comment_count>2</comment_count>
      <attachid>23864</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-27 13:02:45 -0700</bug_when>
    <thetext>Comment on attachment 23864
patch

This looks good, but I am concerned about the change to ChildNodeList.  A ChildNodeList can contain non-Elements members and you have changed nodeMatches to take an Element (which makes the name weird now).  Does this work because nodeMatches is never called for a ChildNodeList as it implements its own item method?  If that is the case, can we remove the nodeMatches method from this subclass?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93082</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-27 15:17:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Does this work because
&gt; nodeMatches is never called for a ChildNodeList as it implements its own item
&gt; method?

Yes, that&apos;s why. The nodeMatches function there was just dead code!

There was no caller of nodeMatches that ever called it without first checking it was an Element. So the patch makes no behavior change.

I agree that we could give nodeMatches a better name. I didn&apos;t think of one while making this change; elementMatches does not seem like a better name. I also figured renaming in a separate patch would be better.

&gt; If that is the case, can we remove the nodeMatches method from this
&gt; subclass?

We can&apos;t, because nodeMatches is a pure virtual function in DynamicNodeList. But we could have it be empty with an ASSERT_NOT_REACHED() in it.

A cleaner fix would be to make all a class derived from DynamicNodeList that implements, length, item, and itemWithName and moving nodeMatches to that derived class, then using that as the base class for TagNodeList, NameNodeList, and ClassNodeList.

I really don&apos;t feel strongly about either of these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93084</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-27 15:18:39 -0700</bug_when>
    <thetext>Hmm, no, that&apos;s wrong. It looks like nodeMatches can get called by itemWithName. But since a non-Element can&apos;t have a name, that&apos;s still fine.

I think the patch is probably fine as-is. I didn&apos;t change the design at all. Let me know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93092</commentid>
    <comment_count>5</comment_count>
      <attachid>23864</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-27 15:59:51 -0700</bug_when>
    <thetext>Comment on attachment 23864
patch

Ah, I forgot about the itemWithName case.  That makes sense.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93137</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-28 02:35:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/37037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503137</commentid>
    <comment_count>7</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:04:16 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23864</attachid>
            <date>2008-09-26 17:57:43 -0700</date>
            <delta_ts>2008-09-27 15:59:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>DOMNoVirtualPatch.txt</filename>
            <type>text/plain</type>
            <size>30561</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjk3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMDgtMDktMjYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTU4CisgICAgICAgICAgcmVk
dWNlIHVzZSBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBOb2RlIGZvciBzcGVlZAorCisgICAgICAg
IFNwZWVkcyB1cCBEcm9tYWVvIGEgYml0IGxlc3MgdGhhbiAxJS4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwOiBJbmNsdWRlIEVsZW1lbnQuaCBpbnN0
ZWFkIG9mCisgICAgICAgIE5vZGUuaCBub3cgdGhhdCBzb21lIGlubGluZXMgYXJlIGluIHRoZXJl
LgorCisgICAgICAgICogZG9tL0F0dHIuaDogT3ZlcnJpZGUgYm90aCB0aGUgdmlydHVhbCBhbmQg
bm9uLXZpcnR1YWwgbmFtZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBkb20vQ2hpbGROb2RlTGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6IFVw
ZGF0ZWQgdG8gdGFrZSBhbiBFbGVtZW50LgorICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0Lmg6
IERpdHRvLgorICAgICAgICAqIGRvbS9DbGFzc05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsYXNzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKTogRGl0dG8uCisgICAgICAgICogZG9tL0Ns
YXNzTm9kZUxpc3QuaDogRGl0dG8uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogUHV0IHRo
ZSBOb2RlOjppc0RvY3VtZW50Tm9kZSgpIGZ1bmN0aW9uJ3MgaW5saW5lCisgICAgICAgIGRlZmlu
aXRpb24gaGVyZSB3aGVyZSBpdCBjYW4gc2VlIHRoZSBEb2N1bWVudCBjbGFzcyBkZWZpbml0aW9u
LgorCisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljTm9kZUxpc3Q6Omxlbmd0aCk6IENoYW5nZWQgdG8gcGFzcyBhbiBFbGVtZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjppdGVtQmFja3dh
cmRzRnJvbUN1cnJlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlz
dDo6aXRlbVdpdGhOYW1lKTogRGl0dG8uCisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlzdC5o
OiBEaXR0by4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDogUmVtb3ZlZCB2aXJ0dWFsSGFz
VGFnTmFtZS4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOiBNYWRlIGxvY2FsTmFtZSwgcHJlZml4
LCBuYW1lc3BhY2VVUkksIGFuZAorICAgICAgICBzdHlsZUZvclJlbmRlcmVyIG5vbi12aXJ0dWFs
LiBBZGRlZCB2aXJ0dWFsUHJlZml4LCB2aXJ0dWFsTG9jYWxOYW1lLAorICAgICAgICB2aXJ0dWFs
TmFtZXNwYWNlVVJJLCBhbmQgcmVtb3ZlZCB2aXJ0dWFsSGFzVGFnTmFtZS4gUHV0IHRoZQorICAg
ICAgICBOb2RlOjpoYXNUYWdOYW1lLCBOb2RlOjpoYXNBdHRyaWJ1dGVzLCBhbmQgTm9kZTo6YXR0
cmlidXRlcworICAgICAgICBmdW5jdGlvbnMnIGlubGluZSBkZWZpbml0aW9ucyBoZXJlIHdoZXJl
IHRoZXkgY2FuIHNlZSB0aGUgRWxlbWVudAorICAgICAgICBjbGFzcyBkZWZpbml0aW9uLgorCisg
ICAgICAgICogZG9tL05hbWVOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lTm9k
ZUxpc3Q6Om5vZGVNYXRjaGVzKTogVXBkYXRlZCB0byB0YWtlIGFuIEVsZW1lbnQuCisgICAgICAg
ICogZG9tL05hbWVOb2RlTGlzdC5oOiBEaXR0by4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnZpcnR1YWxQcmVmaXgpOiBSZW5hbWVkIGZyb20gcHJl
Zml4LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dmlydHVhbExvY2FsTmFtZSk6IFJlbmFtZWQg
ZnJvbSBsb2NhbE5hbWUuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp2aXJ0dWFsTmFtZXNwYWNl
VVJJKTogUmVuYW1lZCBmcm9tIG5hbWVzcGFjZVVSSS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnN0eWxlRm9yUmVuZGVyZXIpOiBIYW5kbGUgdGhlIEVsZW1lbnQgY2FzZSBoZXJlLgorCisgICAg
ICAgICogZG9tL05vZGUuaDogUmVtb3ZlZCBkZWZpbml0aW9uIG9mIGhhc1RhZ05hbWUgdGhhdCBj
YWxscyB2aXJ0dWFsLAorICAgICAgICBzaW5jZSB3ZSBub3cgaGF2ZSBhIG5vbi12aXJ0dWFsIHZl
cnNpb24uIE1hZGUgaGFzQXR0cmlidXRlcywKKyAgICAgICAgYXR0cmlidXRlcywgcmVtb3ZlLCBs
b2NhbE5hbWUsIG5hbWVzcGFjZVVSSSwgcHJlZml4LCBpc0RvY3VtZW50Tm9kZSwKKyAgICAgICAg
YW5kIHN0eWxlRm9yUmVuZGVyZXIgbm9uLXZpcnR1YWwuIEFkZGVkIHZpcnR1YWxQcmVmaXgsCisg
ICAgICAgIHZpcnR1YWxMb2NhbE5hbWUsIGFuZCB2aXJ0dWFsTmFtZXNwYWNlVVJJLiBSZW1vdmVk
IGlzTWFsZm9ybWVkCisgICAgICAgIGFuZCBzZXRNYWxmb3JtZWQsIHdoaWNoIGFyZSB1c2VkIG9u
bHkgb24gSFRNTEZvcm1FbGVtZW50IG9iamVjdHMuCisKKyAgICAgICAgKiBkb20vVGFnTm9kZUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGFnTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKTogVXBk
YXRlZCB0byB0YWtlIGFuIEVsZW1lbnQuCisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0Lmg6IERp
dHRvLgorCisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDogTWFkZSBpc01hbGZvcm1l
ZCBub24tdmlydHVhbC4KKworICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcik6IFVzZSB0aGUgYWxyZWFkeS1jYXN0
LXRvLUhUTUxFbGVtZW50CisgICAgICAgIHBvaW50ZXIgdG8gY2FsbCBsb2NhbE5hbWUgc2luY2Ug
dGhhdCBvbmUgZG9lcyBub3QgbmVlZCB0byBjYWxsIGEgdmlydHVhbAorICAgICAgICBmdW5jdGlv
bi4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOiBDYXN0IHRvIEhUTUxGb3JtRWxlbWVudCBi
ZWZvcmUKKyAgICAgICAgY2FsbGluZyBpc01hbGZvcm1lZC4gV2UgYWxyZWFkeSBkaWQgYSB0YWcg
bmFtZSBjaGVjayBzbyB3ZSBrbm93IGl0J3MKKyAgICAgICAgYW4gSFRNTEZvcm1FTGVtZW50Lgor
CisgICAgICAgICogeG1sL1hQYXRoVXRpbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
aXNWYWxpZENvbnRleHROb2RlKTogUmV3cm90ZSB0byBub3QgbWFrZSBzbyBtYW55IGNhbGxzCisg
ICAgICAgIHRvIG5vZGVUeXBlKCksIHNpbmNlIGl0J3MgYSB2aXJ0dWFsIGZ1bmN0aW9uLgorCiAy
MDA4LTA5LTI2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNDkKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMzY5
NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSAiSlNOYW1lZE5vZGVzQ29s
bGVjdGlvbi5oIgogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgotI2lu
Y2x1ZGUgIk5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL2Rv
bS9BdHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5oCShyZXZpc2lvbiAzNjk3
NSkKKysrIFdlYkNvcmUvZG9tL0F0dHIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSArNTcsOSBA
QCBwdWJsaWM6CiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tIHBhcmVudCBjbGFz
c2VzCiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5v
ZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
c3BhY2VVUkkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KCkgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdDsKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0OworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChj
b25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIFN0cmlu
ZyBub2RlVmFsdWUoKSBjb25zdDsKQEAgLTgxLDYgKzgxLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFNwZWNpZmllZChib29sIHNwZWNpZmllZCkgeyBtX3NwZWNpZmllZCA9IHNwZWNpZmllZDsg
fQogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB2aXJ0dWFsUHJl
Zml4KCkgY29uc3QgeyByZXR1cm4gcHJlZml4KCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmlydHVhbExvY2FsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGxvY2FsTmFtZSgpOyB9
CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHZpcnR1YWxOYW1lc3BhY2VVUkkoKSBj
b25zdCB7IHJldHVybiBuYW1lc3BhY2VVUkkoKTsgfQorCiAgICAgRWxlbWVudCogbV9lbGVtZW50
OwogICAgIFJlZlB0cjxBdHRyaWJ1dGU+IG1fYXR0cmlidXRlOwogICAgIHVuc2lnbmVkIG1faWdu
b3JlQ2hpbGRyZW5DaGFuZ2VkIDogMzE7CkluZGV4OiBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkocmV2aXNp
b24gMzY5NzUpCisrKyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDcgKzIzLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaGlsZE5vZGVMaXN0LmgiCiAKLSNp
bmNsdWRlICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTk4LDcgKzk4LDcgQEAgTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRl
bSh1bnNpZ25lZCBpbmRleAogICAgIHJldHVybiAwOwogfQogCi1ib29sIENoaWxkTm9kZUxpc3Q6
Om5vZGVNYXRjaGVzKE5vZGUqIHRlc3ROb2RlKSBjb25zdAorYm9vbCBDaGlsZE5vZGVMaXN0Ojpu
b2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gdGVzdE5v
ZGUtPnBhcmVudE5vZGUoKSA9PSBtX3Jvb3ROb2RlOwogfQpJbmRleDogV2ViQ29yZS9kb20vQ2hp
bGROb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAko
cmV2aXNpb24gMzY5NzUpCisrKyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgQ2hpbGROb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNo
ZXMqKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSopIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0OwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCShyZXZp
c2lvbiAzNjk3NSkKKysrIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIENsYXNzTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QoUGFzc1Jl
ZlB0cjwKIHsKIH0KIAotYm9vbCBDbGFzc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhOb2RlKiB0ZXN0
Tm9kZSkgY29uc3QKK2Jvb2wgQ2xhc3NOb2RlTGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVudCogdGVz
dE5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCF0ZXN0Tm9kZS0+aGFzQ2xhc3MoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAkocmV2aXNpb24gMzY5NzUpCisrKyBX
ZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIENsYXNzTm9kZUxp
c3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBD
YWNoZXMqKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSopIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0OwogCiAg
ICAgICAgIENsYXNzTmFtZXMgbV9jbGFzc05hbWVzOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlz
aW9uIDM2OTc1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgzLDcgKzI4Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkg
Y29uc3Q7CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCi0gICAgdmly
dHVhbCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzSW1hZ2VEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
aWYgRU5BQkxFKFNWRykKQEAgLTEwNzUsNiArMTA3NCwxMSBAQCBpbmxpbmUgYm9vbCBEb2N1bWVu
dDo6aGFzRWxlbWVudFdpdGhJZChBCiAgICAgQVNTRVJUKGlkKTsKICAgICByZXR1cm4gbV9lbGVt
ZW50c0J5SWQuY29udGFpbnMoaWQpIHx8IG1fZHVwbGljYXRlSWRzLmNvbnRhaW5zKGlkKTsKIH0K
KyAgICAKK2lubGluZSBib29sIE5vZGU6OmlzRG9jdW1lbnROb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdGhpcyA9PSBtX2RvY3VtZW50LmdldCgpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkocmV2aXNpb24gMzY5NzUpCisrKyBX
ZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEs
OCBAQAotLyoqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTks
MzUgKzU5LDI5IEBAIHVuc2lnbmVkIER5bmFtaWNOb2RlTGlzdDo6bGVuZ3RoKCkgY29uc3QKICAg
ICBpZiAobV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCkKICAgICAgICAgcmV0dXJuIG1fY2Fj
aGVzLT5jYWNoZWRMZW5ndGg7CiAKLSAgICB1bnNpZ25lZCBsZW4gPSAwOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7CiAKLSAgICBmb3IgKE5vZGUqIG4gPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxk
KCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7Ci0gICAg
ICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlTWF0Y2hl
cyhuKSkKLSAgICAgICAgICAgICAgICBsZW4rKzsKLSAgICAgICAgfQotICAgIH0KKyAgICBmb3Ig
KE5vZGUqIG4gPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5l
eHROb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKQorICAgICAgICBsZW5ndGggKz0gbi0+aXNFbGVtZW50
Tm9kZSgpICYmIG5vZGVNYXRjaGVzKHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSk7CiAKLSAgICBt
X2NhY2hlcy0+Y2FjaGVkTGVuZ3RoID0gbGVuOworICAgIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGgg
PSBsZW5ndGg7CiAgICAgbV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCA9IHRydWU7CiAKLSAg
ICByZXR1cm4gbGVuOworICAgIHJldHVybiBsZW5ndGg7CiB9CiAKIE5vZGUqIER5bmFtaWNOb2Rl
TGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNl
dCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zm
c2V0ID49IDApOwogICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VO
ZXh0Tm9kZShtX3Jvb3ROb2RlLmdldCgpKSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9k
ZSgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+
bGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZz
ZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZh
bGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldC0tOworICAgICAgICBpZiAobi0+
aXNFbGVtZW50Tm9kZSgpICYmIG5vZGVNYXRjaGVzKHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSkp
IHsKKyAgICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAg
bV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKKyAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0
ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hl
VmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLS1yZW1haW5pbmdPZmZzZXQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk4
LDE2ICs5MiwxNCBAQCBOb2RlKiBEeW5hbWljTm9kZUxpc3Q6Oml0ZW1CYWNrd2FyZHNGcm9tCiB7
CiAgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA8IDApOwogICAgIGZvciAoTm9kZSogbiA9IHN0
YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsK
LSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKG5vZGVN
YXRjaGVzKG4pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKLSAgICAgICAgICAgICAg
ICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZW1haW5p
bmdPZmZzZXQrKzsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hl
cyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpKSB7CisgICAgICAgICAgICBpZiAoIXJlbWFpbmlu
Z09mZnNldCkgeworICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47CisgICAg
ICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAg
ICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrcmVtYWluaW5nT2Zmc2V0
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzUsMjEgKzEyNywxOCBAQCBOb2RlKiBEeW5hbWlj
Tm9kZUxpc3Q6Oml0ZW0odW5zaWduZWQgb2ZmCiBOb2RlKiBEeW5hbWljTm9kZUxpc3Q6Oml0ZW1X
aXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKIHsKICAgICBpZiAo
bV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jvb3ROb2RlLT5pbkRvY3VtZW50KCkp
IHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVsZW1l
bnRCeUlkKGVsZW1lbnRJZCk7Ci0KLSAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlTWF0Y2hlcyhu
b2RlKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGZvciAoTm9kZSogcCA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsgcDsgcCA9IHAtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAg
aWYgKHAgPT0gbV9yb290Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAg
ICAgRWxlbWVudCogbm9kZSA9IG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlk
KGVsZW1lbnRJZCk7CisgICAgICAgIGlmIChub2RlICYmIG5vZGVNYXRjaGVzKG5vZGUpKSB7Cisg
ICAgICAgICAgICBmb3IgKE5vZGUqIHAgPSBub2RlLT5wYXJlbnROb2RlKCk7IHA7IHAgPSBwLT5w
YXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocCA9PSBtX3Jvb3ROb2RlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQot
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGwgPSBsZW5ndGgoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgdW5zaWduZWQgbGVu
Z3RoID0gdGhpcy0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBpdGVtKGkpOwogICAgICAgICBpZiAobm9k
ZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURB
dHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKSW5kZXg6
IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAzNjk3NSkKKysrIFdlYkNvcmUvZG9tL0R5bmFt
aWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xhc3MgRWxlbWVudDsK
ICAgICBjbGFzcyBOb2RlOwogCiAgICAgY2xhc3MgRHluYW1pY05vZGVMaXN0IDogcHVibGljIE5v
ZGVMaXN0IHsKQEAgLTY0LDcgKzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBE
eW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSk7CiAgICAgICAgIER5bmFt
aWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqKTsKIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSopIGNvbnN0ID0gMDsKKyAgICAgICAgdmly
dHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdCA9IDA7CiAKICAgICAgICAgUmVm
UHRyPE5vZGU+IG1fcm9vdE5vZGU7CiAgICAgICAgIG11dGFibGUgQ2FjaGVzKiBtX2NhY2hlczsK
SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzNjk3NSkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTk5LDExICsxMTk5LDYgQEAgdm9pZCBFbGVtZW50OjpjYW5j
ZWxGb2N1c0FwcGVhcmFuY2VVcGRhdAogICAgICAgICBkb2N1bWVudCgpLT5jYW5jZWxGb2N1c0Fw
cGVhcmFuY2VVcGRhdGUoKTsKIH0KIAotYm9vbCBFbGVtZW50Ojp2aXJ0dWFsSGFzVGFnTmFtZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAotewotICAgIHJldHVybiBoYXNUYWdOYW1l
KG5hbWUpOwotfQotCiB2b2lkIEVsZW1lbnQ6Om5vcm1hbGl6ZUF0dHJpYnV0ZXMoKQogewogICAg
IC8vIE5vcm1hbGl6ZSBhdHRyaWJ1dGVzLgpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gMzY5NzUpCisrKyBX
ZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMCArMTAxLDEwIEBA
IHB1YmxpYzoKICAgICBib29sIGhhc0xvY2FsTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCkgPT0gb3RoZXI7IH0KICAgICBi
b29sIGhhc0xvY2FsTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV90YWdOYW1lLmxvY2FsTmFtZSgpID09IG90aGVyLmxvY2FsTmFtZSgpOyB9CiAKLSAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90
YWdOYW1lLmxvY2FsTmFtZSgpOyB9Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5wcmVmaXgoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGFnTmFtZS5uYW1lc3BhY2VVUkkoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFtZSgpOyB9
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX3RhZ05h
bWUucHJlZml4KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5uYW1lc3BhY2VVUkkoKTsgfQogCiAgICAg
dmlydHVhbCBLVVJMIGJhc2VVUkkoKSBjb25zdDsKIApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
KCk7Ci0gICAgdmlydHVhbCBSZW5kZXJTdHlsZSogc3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmpl
Y3QqIHBhcmVudCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyT2Jq
ZWN0KiBwYXJlbnQpOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxl
KFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UpOwogCkBAIC0yMDgsOSArMjA4LDEwIEBAIHByaXZhdGU6
CiAgICAgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uQWZ0ZXJBdHRhY2goKTsKICAgICB2
b2lkIGNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOwogCi0gICAgdmlydHVhbCBib29sIHZp
cnR1YWxIYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLQotcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdmlydHVhbFByZWZpeCgpIGNvbnN0IHsg
cmV0dXJuIHByZWZpeCgpOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHZpcnR1
YWxMb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBsb2NhbE5hbWUoKTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2aXJ0dWFsTmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4g
bmFtZXNwYWNlVVJJKCk7IH0KKyAgICAKICAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsKICAg
ICB2aXJ0dWFsIE5vZGVSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsKIApAQCAtMjM0LDYgKzIz
NSwyMSBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGJvb2wgbV9wYXJzaW5nQ2hpbGRyZW5G
aW5pc2hlZCA6IDE7CiB9OworICAgIAoraW5saW5lIGJvb2wgTm9kZTo6aGFzVGFnTmFtZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIHJldHVybiBpc0VsZW1lbnROb2Rl
KCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KHRoaXMpLT5oYXNUYWdOYW1lKG5hbWUp
OworfQorCitpbmxpbmUgYm9vbCBOb2RlOjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPih0aGlz
KS0+aGFzQXR0cmlidXRlcygpOworfQorCitpbmxpbmUgTmFtZWRBdHRyTWFwKiBOb2RlOjphdHRy
aWJ1dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNFbGVtZW50Tm9kZSgpID8gc3RhdGljX2Nh
c3Q8Y29uc3QgRWxlbWVudCo+KHRoaXMpLT5hdHRyaWJ1dGVzKCkgOiAwOworfQogCiB9IC8vbmFt
ZXNwYWNlCiAKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkocmV2aXNpb24gMzY5NzUpCisrKyBXZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsOSBA
QCBOYW1lTm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdChQYXNzUmVmUHRyPE5vCiB7CiB9CiAKLWJvb2wg
TmFtZU5vZGVMaXN0Ojpub2RlTWF0Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3QKK2Jvb2wgTmFt
ZU5vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKIHsKLSAgICBB
U1NFUlQodGVzdE5vZGUtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PEVsZW1lbnQqPih0ZXN0Tm9kZSktPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9ub2RlTmFt
ZTsKKyAgICByZXR1cm4gdGVzdE5vZGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9ub2Rl
TmFtZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vTmFt
ZU5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmgJKHJl
dmlzaW9uIDM2OTc1KQorKysgV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAg
ICAgICAgIE5hbWVOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJp
bmcmIG5hbWUsIENhY2hlcyopOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhO
b2RlKikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50Kikg
Y29uc3Q7CiAKICAgICAgICAgQXRvbWljU3RyaW5nIG1fbm9kZU5hbWU7CiAgICAgfTsKSW5kZXg6
IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3Bw
CShyZXZpc2lvbiAzNjk3NSkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzEsMTEgKzI3MSw2IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmNoaWxkTm9k
ZXMoKQogICAgIHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhpcywgJmRhdGEtPm5vZGVM
aXN0cygpLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMpOwogfQogCi1ib29sIE5vZGU6OnZpcnR1YWxI
YXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdAotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogTm9kZSAqTm9kZTo6bGFzdERlc2NlbmRhbnQoKSBjb25zdAogewogICAgIE5vZGUg
Km4gPSBjb25zdF9jYXN0PE5vZGUgKj4odGhpcyk7CkBAIC0zNjksNyArMzY0LDcgQEAgdm9pZCBO
b2RlOjpub3JtYWxpemUoKQogICAgIH0KIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlOjpw
cmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlOjp2aXJ0dWFsUHJlZml4KCkg
Y29uc3QKIHsKICAgICAvLyBGb3Igbm9kZXMgb3RoZXIgdGhhbiBlbGVtZW50cyBhbmQgYXR0cmli
dXRlcywgdGhlIHByZWZpeCBpcyBhbHdheXMgbnVsbAogICAgIHJldHVybiBudWxsQXRvbTsKQEAg
LTM4MywxMiArMzc4LDEyIEBAIHZvaWQgTm9kZTo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmlu
ZyYKICAgICBlYyA9IE5BTUVTUEFDRV9FUlI7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTm9k
ZTo6bG9jYWxOYW1lKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgTm9kZTo6dmlydHVhbExv
Y2FsTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIE5vZGU6Om5hbWVzcGFjZVVSSSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcm
IE5vZGU6OnZpcnR1YWxOYW1lc3BhY2VVUkkoKSBjb25zdAogewogICAgIHJldHVybiBudWxsQXRv
bTsKIH0KQEAgLTEwNDksOSArMTA0NCwxMSBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZO
ZWVkZWQoKQogICAgIH0KIH0KIAotUmVuZGVyU3R5bGUgKk5vZGU6OnN0eWxlRm9yUmVuZGVyZXIo
UmVuZGVyT2JqZWN0ICpwYXJlbnQpCitSZW5kZXJTdHlsZSogTm9kZTo6c3R5bGVGb3JSZW5kZXJl
cihSZW5kZXJPYmplY3QqIHBhcmVudCkKIHsKLSAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBwYXJl
bnQtPnN0eWxlKCk7CisgICAgaWYgKGlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGRv
Y3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVs
ZW1lbnQqPih0aGlzKSk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcGFyZW50LT5zdHlsZSgp
OwogICAgIHN0eWxlLT5yZWYoKTsKICAgICByZXR1cm4gc3R5bGU7CiB9CkBAIC0xNDU4LDE2ICsx
NDU1LDYgQEAgRG9jdW1lbnQgKk5vZGU6Om93bmVyRG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVy
biBkb2MgPT0gdGhpcyA/IDAgOiBkb2M7CiB9CiAKLWJvb2wgTm9kZTo6aGFzQXR0cmlidXRlcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1OYW1lZEF0dHJNYXAqIE5vZGU6OmF0
dHJpYnV0ZXMoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCiBLVVJMIE5vZGU6OmJhc2VV
UkkoKSBjb25zdAogewogICAgIHJldHVybiBwYXJlbnROb2RlKCkgPyBwYXJlbnROb2RlKCktPmJh
c2VVUkkoKSA6IEtVUkwoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDM2OTc1KQorKysgV2ViQ29yZS9kb20vTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogCiAgICAgLy8g
RE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlCiAKLSAgICBib29sIGhhc1RhZ05hbWUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gdmlydHVhbEhhc1RhZ05h
bWUobmFtZSk7IH0KKyAgICBib29sIGhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNv
bnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFs
dWUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMTE1LDggKzExNSw4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMoKTsKICAg
ICBOb2RlKiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBj
b250YWluZXJGaXJzdENoaWxkKCkgOiAwOyB9CiAgICAgTm9kZSogbGFzdENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBjb250YWluZXJMYXN0Q2hpbGQoKSA6IDA7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmlidXRlcygpIGNvbnN0OwotICAgIHZpcnR1YWwgTmFt
ZWRBdHRyTWFwKiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkg
Y29uc3Q7CisgICAgTmFtZWRBdHRyTWFwKiBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIEtVUkwgYmFzZVVSSSgpIGNvbnN0OwogICAgIApAQCAtMTMwLDEyICsxMzAsMTIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCByZW1vdmVDaGlsZChOb2RlKiBjaGlsZCwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5l
d0NoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwog
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZW1v
dmUoRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0IHsgcmV0
dXJuIGZpcnN0Q2hpbGQoKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9uZU5v
ZGUoYm9vbCBkZWVwKSA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29u
c3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiB2
aXJ0dWFsTG9jYWxOYW1lKCk7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxOYW1lc3BhY2VVUkkoKTsgfQorICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFByZWZpeCgpOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBub3JtYWxpemUoKTsKIApAQCAtMTU5LDkgKzE1OSwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCiAjaWYgRU5BQkxFKFNWRykKLSAgICB2aXJ0dWFsCisgICAgdmlydHVhbCBib29sIGlz
U1ZHRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZWxzZQorICAgIHN0YXRpYyBi
b29sIGlzU1ZHRWxlbWVudCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKLSAgICAgICAgYm9v
bCBpc1NWR0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBi
b29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzRnJhbWVPd25lckVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAt
MTY5LDcgKzE3MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJhY3RlckRhdGFO
b2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVu
dE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNEb2N1bWVudE5vZGUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNFdmVudFRhcmdldE5vZGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRvd05vZGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgTm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0
dXJuIDA7IH0KQEAgLTE4MywxMSArMTg0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNCbG9ja0Zs
b3coKSBjb25zdDsKICAgICBib29sIGlzQmxvY2tGbG93T3JCbG9ja1RhYmxlKCkgY29uc3Q7CiAg
ICAgCi0gICAgLy8gVXNlZCBieSA8Zm9ybT4gZWxlbWVudHMgdG8gaW5kaWNhdGUgYSBtYWxmb3Jt
ZWQgc3RhdGUgb2Ygc29tZSBraW5kLCB0eXBpY2FsbHkKLSAgICAvLyB1c2VkIHRvIGtlZXAgZnJv
bSBhcHBseWluZyB0aGUgYm90dG9tIG1hcmdpbiBvZiB0aGUgZm9ybS4KLSAgICB2aXJ0dWFsIGJv
b2wgaXNNYWxmb3JtZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRN
YWxmb3JtZWQoYm9vbCBtYWxmb3JtZWQpIHsgfQotICAgIAogICAgIC8vIFRoZXNlIGxvdy1sZXZl
bCBjYWxscyBnaXZlIHRoZSBjYWxsZXIgcmVzcG9uc2liaWxpdHkgZm9yIG1haW50YWluaW5nIHRo
ZSBpbnRlZ3JpdHkgb2YgdGhlIHRyZWUuCiAgICAgdm9pZCBzZXRQcmV2aW91c1NpYmxpbmcoTm9k
ZSogcHJldmlvdXMpIHsgbV9wcmV2aW91cyA9IHByZXZpb3VzOyB9CiAgICAgdm9pZCBzZXROZXh0
U2libGluZyhOb2RlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KQEAgLTI3Miw3ICsyNjgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhbkxhenlBdHRhY2goKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRGb2N1cyhib29sIGIgPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0
aXZlKGJvb2wgYiA9IHRydWUsIGJvb2wgcGF1c2U9ZmFsc2UpIHsgbV9hY3RpdmUgPSBiOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sIGIgPSB0cnVlLCBib29sIC8qcGF1c2UqLyA9
IGZhbHNlKSB7IG1fYWN0aXZlID0gYjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRIb3ZlcmVkKGJv
b2wgYiA9IHRydWUpIHsgbV9ob3ZlcmVkID0gYjsgfQogCiAgICAgdmlydHVhbCBzaG9ydCB0YWJJ
bmRleCgpIGNvbnN0OwpAQCAtMzA5LDkgKzMwNSw5IEBAIHB1YmxpYzoKICAgICAvLyBvZiBhIERv
Y3VtZW50VHlwZSBub2RlIHRoYXQgaXMgbm90IHVzZWQgd2l0aCBhbnkgRG9jdW1lbnQgeWV0LiBB
IERvY3VtZW50IG5vZGUgcmV0dXJucyBpdHNlbGYuCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkg
Y29uc3QKICAgICB7Ci0gICAgICBBU1NFUlQodGhpcyk7Ci0gICAgICBBU1NFUlQobV9kb2N1bWVu
dCB8fCBub2RlVHlwZSgpID09IERPQ1VNRU5UX1RZUEVfTk9ERSAmJiAhaW5Eb2N1bWVudCgpKTsK
LSAgICAgIHJldHVybiBtX2RvY3VtZW50LmdldCgpOworICAgICAgICBBU1NFUlQodGhpcyk7Cisg
ICAgICAgIEFTU0VSVChtX2RvY3VtZW50IHx8IG5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfVFlQRV9O
T0RFICYmICFpbkRvY3VtZW50KCkpOworICAgICAgICByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsK
ICAgICB9CiAgICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCopOwogCkBAIC0zMTksMTAgKzMx
NSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gbm9kZSB0cmVlLCBmYWxzZSBvdGhlcndpc2UuCiAgICAg
Ym9vbCBpbkRvY3VtZW50KCkgY29uc3QgCiAgICAgeyAKLSAgICAgIEFTU0VSVChtX2RvY3VtZW50
IHx8ICFtX2luRG9jdW1lbnQpOwotICAgICAgcmV0dXJuIG1faW5Eb2N1bWVudDsgCisgICAgICAg
IEFTU0VSVChtX2RvY3VtZW50IHx8ICFtX2luRG9jdW1lbnQpOworICAgICAgICByZXR1cm4gbV9p
bkRvY3VtZW50OyAKICAgICB9Ci0gICAgCisKICAgICBib29sIGlzUmVhZE9ubHlOb2RlKCkgY29u
c3QgeyByZXR1cm4gbm9kZVR5cGUoKSA9PSBFTlRJVFlfUkVGRVJFTkNFX05PREU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB1bnNpZ25lZCBjaGlsZE5vZGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGlzQ29udGFpbmVy
Tm9kZSgpID8gY29udGFpbmVyQ2hpbGROb2RlQ291bnQoKSA6IDA7IH0KQEAgLTQxMiw3ICs0MDgs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOwogICAgIHZvaWQg
Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOwotICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIHN0eWxl
Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBwYXJlbnQpOworICAgIFJlbmRlclN0eWxlKiBzdHls
ZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcGFyZW50KTsKICAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogI2lmIEVOQUJMRShTVkcpCiAgICAgdmlydHVh
bCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KQEAgLTQ5NywxNCArNDkzLDEyIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpIHsgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7IH0K
LSAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCBpKTsKKyAgICB2b2lkIHNldFRh
YkluZGV4RXhwbGljaXRseShzaG9ydCk7CiAgICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGE7IH0KICAgICAKICAgICBOb2RlUmFyZURhdGEqIHJh
cmVEYXRhKCkgY29uc3Q7CiAgICAgTm9kZVJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOwotICAg
IAotICAgIHZpcnR1YWwgYm9vbCB2aXJ0dWFsSGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBOb2RlUmFyZURhdGEqIGNyZWF0ZVJh
cmVEYXRhKCk7CkBAIC01MTMsOCArNTA3LDEzIEBAIHByaXZhdGU6CiAgICAgTm9kZSogY29udGFp
bmVyRmlyc3RDaGlsZCgpIGNvbnN0OwogICAgIE5vZGUqIGNvbnRhaW5lckxhc3RDaGlsZCgpIGNv
bnN0OwogICAgIGJvb2wgcmFyZURhdGFGb2N1c2VkKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIFJl
bmRlclN0eWxlKiBub25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmlydHVhbFByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2aXJ0dWFsTG9jYWxOYW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIHZpcnR1YWxOYW1lc3BhY2VVUkkoKSBjb25zdDsKKyAgICAK
ICAgICBEb2NQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgTm9kZSogbV9wcmV2aW91czsK
ICAgICBOb2RlKiBtX25leHQ7CkluZGV4OiBXZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAzNjk3NSkK
KysrIFdlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAg
KzM3LDggQEAgVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZQogICAgIEFT
U0VSVChtX25hbWVzcGFjZVVSSS5pc051bGwoKSB8fCAhbV9uYW1lc3BhY2VVUkkuaXNFbXB0eSgp
KTsKIH0KIAotYm9vbCBUYWdOb2RlTGlzdDo6bm9kZU1hdGNoZXMoTm9kZSogdGVzdE5vZGUpIGNv
bnN0Citib29sIFRhZ05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29u
c3QKIHsKLSAgICBBU1NFUlQodGVzdE5vZGUtPmlzRWxlbWVudE5vZGUoKSk7Ci0KICAgICBpZiAo
bV9uYW1lc3BhY2VVUkkgIT0gc3RhckF0b20gJiYgbV9uYW1lc3BhY2VVUkkgIT0gdGVzdE5vZGUt
Pm5hbWVzcGFjZVVSSSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFdlYkNvcmUv
ZG9tL1RhZ05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGFnTm9kZUxpc3Qu
aAkocmV2aXNpb24gMzY5NzUpCisrKyBXZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRl
OgogICAgICAgICBUYWdOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUp
OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlKikgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7CiAKICAgICAgICAg
QXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOwogICAgICAgICBBdG9taWNTdHJpbmcgbV9sb2Nh
bE5hbWU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCShyZXZpc2lvbiAzNjk3NSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzksOCArNzks
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdWJtaXQoRXZlbnQqLCBib29sIGFjdGl2YXRlU3VibWl0
QnV0dG9uID0gZmFsc2UpOwogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIC8vIFVzZWQgdG8gaW5k
aWNhdGUgYSBtYWxmb3JtZWQgc3RhdGUgdG8ga2VlcCBmcm9tIGFwcGx5aW5nIHRoZSBib3R0b20g
bWFyZ2luIG9mIHRoZSBmb3JtLgogICAgIHZvaWQgc2V0TWFsZm9ybWVkKGJvb2wgbWFsZm9ybWVk
KSB7IG1fbWFsZm9ybWVkID0gbWFsZm9ybWVkOyB9Ci0gICAgdmlydHVhbCBib29sIGlzTWFsZm9y
bWVkKCkgeyByZXR1cm4gbV9tYWxmb3JtZWQ7IH0KKyAgICBib29sIGlzTWFsZm9ybWVkKCkgY29u
c3QgeyByZXR1cm4gbV9tYWxmb3JtZWQ7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlz
aW9uIDM2OTc1KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NzgsNyArNDc4LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBu
LCBibwogICAgIC8vIDIuIE5leHQgd2UgZXhhbWluZSBvdXIgY3VycmVudGx5IGFjdGl2ZSBlbGVt
ZW50IHRvIGRvIHNvbWUgZnVydGhlciBlcnJvciBoYW5kbGluZy4KICAgICBpZiAoY3VycmVudC0+
aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBoID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihjdXJyZW50KTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJy
ZW50VGFnTmFtZSA9IGN1cnJlbnQtPmxvY2FsTmFtZSgpOworICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGN1cnJlbnRUYWdOYW1lID0gaC0+bG9jYWxOYW1lKCk7CiAgICAgICAgIGlmIChoLT5o
YXNMb2NhbE5hbWUoaHRtbFRhZykpIHsKICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbHQgPSBu
LT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pIDogMDsKICAg
ICAgICAgICAgIGlmIChlbHQgJiYgKGVsdC0+aGFzTG9jYWxOYW1lKHNjcmlwdFRhZykgfHwgZWx0
LT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcpIHx8CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCShyZXZpc2lvbiAzNjk3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjI5LDEwICs2MjksMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICBtX3RvcE1hcmdpblF1aXJrID0gc3R5bGUo
KS0+bWFyZ2luVG9wKCkucXVpcmsoKTsKICAgICAgICAgbV9ib3R0b21NYXJnaW5RdWlyayA9IHN0
eWxlKCktPm1hcmdpbkJvdHRvbSgpLnF1aXJrKCk7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQoKSAm
JiBlbGVtZW50KCktPmhhc1RhZ05hbWUoZm9ybVRhZykgJiYgZWxlbWVudCgpLT5pc01hbGZvcm1l
ZCgpKQorICAgICAgICBOb2RlKiBub2RlID0gZWxlbWVudCgpOworICAgICAgICBpZiAobm9kZSAm
JiBub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpICYmIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVu
dCo+KG5vZGUpLT5pc01hbGZvcm1lZCgpKSB7CiAgICAgICAgICAgICAvLyBTZWUgaWYgdGhpcyBm
b3JtIGlzIG1hbGZvcm1lZCAoaS5lLiwgdW5jbG9zZWQpLiBJZiBzbywgZG9uJ3QgZ2l2ZSB0aGUg
Zm9ybQogICAgICAgICAgICAgLy8gYSBib3R0b20gbWFyZ2luLgogICAgICAgICAgICAgc2V0TWF4
Qm90dG9tTWFyZ2lucygwLCAwKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEZvciBvdmVy
ZmxvdzpzY3JvbGwgYmxvY2tzLCBlbnN1cmUgd2UgaGF2ZSBib3RoIHNjcm9sbGJhcnMgaW4gcGxh
Y2UgYWx3YXlzLgpJbmRleDogV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lvbiAzNjk3NSkKKysrIFdlYkNvcmUv
eG1sL1hQYXRoVXRpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE2ICs2NiwyOCBAQCBTdHJp
bmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSkKIAogYm9vbCBpc1ZhbGlkQ29udGV4dE5vZGUoTm9k
ZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZSAmJiAoCi0gICAgICAgICAgIG5vZGUtPm5vZGVU
eXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFIHx8Ci0gICAgICAgICAgIG5vZGUtPm5vZGVUeXBl
KCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwKLSAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpURVhUX05PREUgfHwKLSAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwKLSAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgfHwKLSAgICAgICAgICAgbm9kZS0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUgfHwKLSAgICAgICAgICAgbm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9OT0RFIHx8Ci0gICAgICAgICAgIG5vZGUtPm5vZGVU
eXBlKCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREUpICYmCi0gICAgICAgICAgICEobm9k
ZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgJiYgbm9kZS0+cGFyZW50Tm9kZSgpICYm
IG5vZGUtPnBhcmVudE5vZGUoKS0+aXNBdHRyaWJ1dGVOb2RlKCkpOworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgewor
ICAgICAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkNE
QVRBX1NFQ1RJT05fTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CisgICAg
ICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5U
X05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgor
ICAgICAgICBjYXNlIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKKyAg
ICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6
RU5USVRZX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgor
ICAgICAgICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgICAgICAgICAgcmV0dXJuICEo
bm9kZS0+cGFyZW50Tm9kZSgpICYmIG5vZGUtPnBhcmVudE5vZGUoKS0+aXNBdHRyaWJ1dGVOb2Rl
KCkpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIH0K
</data>
<flag name="review"
          id="10752"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>