<?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>115083</bug_id>
          
          <creation_ts>2013-04-23 21:26:08 -0700</creation_ts>
          <short_desc>fourthTier: CFA should defend against results seeming inconsistent due to a watchpoint firing during compilation</short_desc>
          <delta_ts>2013-04-26 22:43:51 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>115084</dependson>
          <blocked>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>880316</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-23 21:26:08 -0700</bug_when>
    <thetext>This is actually benign in release mode, but it will cause assertions to fire.  It&apos;s benign because the only way that we would prove something to be true incorrectly if a watchpoint fires during compilation, is if we had thought that the watchpoint was valid and used that to set a watchpoint instead of emitting a check.  But if we set a watchpoint then we would record this in the IR and then detect that the watchpoint was no longer valid, and preemptively jettison the compilation before even installing it.

But in debug mode, we would see a watchpoint in the IR on a structure that had an invalid watchpoint.  We would fire an assertion on this.  I&apos;d like to find a way to keep those assertions and make them do sensible things for the cases where we didn&apos;t have concurrent watchpoint firing, but to turn them off *exactly* in those cases where there was a race.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882078</commentid>
    <comment_count>1</comment_count>
      <attachid>199874</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-26 16:41:37 -0700</bug_when>
    <thetext>Created attachment 199874
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882094</commentid>
    <comment_count>2</comment_count>
      <attachid>199874</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-26 17:18:27 -0700</bug_when>
    <thetext>Comment on attachment 199874
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=199874&amp;action=review

r=me

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1353
&gt; +    if (m_jit.graph().m_watchpoints.isStillValid(m_jit.graph().globalObjectFor(node-&gt;codeOrigin)-&gt;masqueradesAsUndefinedWatchpoint())) {

Let&apos;s add a helper function for this, since it&apos;s repeated in so many places.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:-3005
&gt; -    stringPrototypeStructure-&gt;addTransitionWatchpoint(speculationWatchpoint(NotStringObject));

In future, when we have a compilation thread, let&apos;s add an ASSERT to WatchpointSet that prohibits access from the compilation thread.

We&apos;ll see -- it might be appropriate to add stuff like that to SymbolTable and/or Structure, as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882120</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-26 20:48:00 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 199874 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=199874&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1353
&gt; &gt; +    if (m_jit.graph().m_watchpoints.isStillValid(m_jit.graph().globalObjectFor(node-&gt;codeOrigin)-&gt;masqueradesAsUndefinedWatchpoint())) {
&gt; 
&gt; Let&apos;s add a helper function for this, since it&apos;s repeated in so many places.

I&apos;ll do that and also add a helper for:

        m_jit.addLazily(
            speculationWatchpoint(),
            m_jit.graph().globalObjectFor(node-&gt;codeOrigin)-&gt;masqueradesAsUndefinedWatchpoint());

These two things happen in pairs.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:-3005
&gt; &gt; -    stringPrototypeStructure-&gt;addTransitionWatchpoint(speculationWatchpoint(NotStringObject));
&gt; 
&gt; In future, when we have a compilation thread, let&apos;s add an ASSERT to WatchpointSet that prohibits access from the compilation thread.
&gt; 
&gt; We&apos;ll see -- it might be appropriate to add stuff like that to SymbolTable and/or Structure, as well.

Filed: https://bugs.webkit.org/show_bug.cgi?id=115297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882121</commentid>
    <comment_count>4</comment_count>
      <attachid>199886</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-26 21:03:28 -0700</bug_when>
    <thetext>Created attachment 199886
patch for landing

Includes suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882139</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-26 22:43:51 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/149233</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199874</attachid>
            <date>2013-04-26 16:41:37 -0700</date>
            <delta_ts>2013-04-26 21:03:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30855</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5MjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDEzLTA0LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogQ0ZBIHNob3VsZCBkZWZlbmQgYWdhaW5zdCByZXN1bHRzIHNlZW1pbmcgaW5j
b25zaXN0ZW50IGR1ZSB0byBhIHdhdGNocG9pbnQgZmlyaW5nIGR1cmluZyBjb21waWxhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MDgzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIHJ1Z2dlZGl6ZXMgb3VyIHJhY3luZXNzIHdpdGggcmVzcGVjdCB0byB3YXRjaHBvaW50cy4g
V2Ugd2FudCB0byBiZSBhYmxlIHRvIGFzc2VydCwKKyAgICAgICAgaW4gc29tZSBwbGFjZXMsIHRo
YXQgYSB3YXRjaHBvaW50LWJhc2VkIG9wdGltaXphdGlvbiBoYXMgb25seSBvY2N1cnJlZCBpZiB0
aGUKKyAgICAgICAgd2F0Y2hwb2ludCBzZXQgd2FzIHN0aWxsIHZhbGlkLiBCdXQgY3VycmVudGx5
IHdlICpjYW4qIHNvdW5kbHkgZG8gd2F0Y2hwb2ludC1iYXNlZAorICAgICAgICBvcHRpbWl6YXRp
b25zIGV2ZW4gZm9yIGludmFsaWQgd2F0Y2hwb2ludHMsIHNvIGxvbmcgYXMgd2UgcmVjb3JkZWQg
aW4gdGhlIElSIHRoYXQgd2UKKyAgICAgICAgaGFkIGRvbmUgc287IHRoaXMgd2lsbCB0aGVuIGxl
YWQgdG8gdGhlIGNvZGUgYmVpbmcgaW5zdGEtamV0dGlzb25lZCBhZnRlciBjb21waWxhdGlvbgor
ICAgICAgICBjb21wbGV0ZXMuIE9idmlvdXNseSwgd2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGhhcHBl
biBvZnRlbiAtIGJ1dCB3ZSBkbyB3YW50IHRvIGFsbG93IGl0CisgICAgICAgIHByZWNpc2VseSBp
biB0aGUgY2FzZSBvZiB3YXRjaHBvaW50IHJhY2VzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
ZGRzIHRoZSBhYmlsaXR5IHRvIGFzc2VydCB0aGF0IHdlIGhhZG4ndCBvdmVyLXdhdGNocG9pbnRl
ZCBvdXJzZWx2ZXMsIHdpdGggYW5kCisgICAgICAgIGV4ZW1wdGlvbiBmb3IgcmFjZXMuCisKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjayk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAg
ICAoR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6aXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpzaG91bGRBc3N1bWVNaXhlZFN0YXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjppc1ZhbGlkT3JNaXhlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1N0aWxsVmFsaWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6c2hvdWxkQXNzdW1lTWl4ZWRT
dGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1ZhbGlkT3JN
aXhlZCk6CisgICAgICAgIChEZXNpcmVkV2F0Y2hwb2ludHMpOgorICAgICAgICAqIGRmZy9ERkdG
aXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpjYW5PcHRpbWl6
ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjphZGRMYXppbHkpOgorICAgICAgICAoSklUQ29tcGlsZXIpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVy
TG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAoU3RhdGUpOgor
CiAyMDEzLTA0LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
Zm91cnRoVGllcjogQWJzdHJhY3RWYWx1ZSBtZXRob2RzIHRoYXQgZGVhbCB3aXRoIHdhdGNocG9p
bnRzIHNob3VsZCBoYXZlIGFjY2VzcyB0byBHcmFwaCwgc28gdGhhdCBpbiBkZWJ1ZyBtb2RlLCBH
cmFwaCBjYW4gdHJhY2sgdGhlIGhpc3Rvcnkgb2Ygd2F0Y2hwb2ludCBzdGF0ZXMgYW5kIGRldGVj
dCByYWNlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzcsMjMgKzY3NywxNiBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgY2FzZSBJc1N0
cmluZzoKICAgICBjYXNlIElzT2JqZWN0OgogICAgIGNhc2UgSXNGdW5jdGlvbjogewotICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KG5vZGUtPm9wKCkgPT0gSXNVbmRlZmluZWQgJiYgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KG5vZGUtPm9wKCkgPT0gSXNVbmRlZmluZWQgJiYgbV9ncmFwaC5tX3dhdGNocG9pbnRzLmlz
U3RpbGxWYWxpZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKSk7CiAgICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hp
bGQpIHsKICAgICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7CiAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZSwganNCb29sZWFuKAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2UgCi0gICAgICAgICAgICAgICAgICAgICAgICA6
IGNoaWxkLmlzVW5kZWZpbmVkKCkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9v
bGVhbigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
KQotICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGlsZC5pc1VuZGVmaW5lZCgpKSk7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZSwganNCb29sZWFuKAorICAgICAgICAgICAgICAgICAgICBjaGlsZC5pc0NlbGwo
KQorICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNv
ZGVPcmlnaW4pKQorICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmlzVW5kZWZpbmVkKCkpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSXNCb29sZWFuOgogICAg
ICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29s
ZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CkBAIC0xMzQyLDcgKzEzMzUsOSBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ug
b25seSBpc3N1ZSBzaW5nbGV0b24gd2F0Y2hwb2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVy
ZSkKICAgICAgICAgLy8gYW5kIG91ciBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9u
bHkgY29udGFpbiB6ZXJvLCBvbmUsIG9yIGFuCiAgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVj
dHVyZXMuCi0gICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlz
U3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpOworICAgICAgICBBU1NF
UlQoCisgICAgICAgICAgICB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0
T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgIHx8IG1fZ3Jh
cGgubV93YXRjaHBvaW50cy5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKG5vZGUtPnN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSk7CiAgICAgICAgIAogICAgICAgICB2YWx1ZS5m
aWx0ZXIobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTQ5MjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDE3ICsxMTAs
MTcgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLAogICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZShHcmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQordm9pZCBBYnN0cmFjdFZh
bHVlOjpzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpCisgICAgaWYgKGdyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlk
KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCiAgICAgICAgIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgZWxzZQogICAgICAgICBtX2Z1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpm
aWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQordm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFw
aCYgZ3JhcGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgaWYgKGdyYXBoLm1fd2F0
Y2hwb2ludHMuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSkpCiAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuZmlsdGVyKFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUoc3RydWN0dXJlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzkzLDcgKzc5Myw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGJlIGpldHRpc29u
ZWQgaWYgdGhlIG9iamVjdCBldmVyIGRpZXMuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSBj
ZWxsQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgCi0gICAgICAgIGlmIChvYmplY3QtPnN0cnVj
dHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3Ry
dWN0dXJlCisgICAgICAgICAgICAmJiBtX2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlk
KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpIHsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIE9wSW5mbyhzdHJ1Y3R1cmUp
LCBvYmplY3ROb2RlKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwogICAgICAgICB9
CkBAIC0xOTA5LDcgKzE5MTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVP
cGVyYXRpCiAKICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGlkZW50aWZpZXIpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFs
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgaWYgKCFl
bnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3dhdGNocG9p
bnRzLmlzU3RpbGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7CiAgICAgICAgICAgICAq
dmFsdWUgPSBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKGdsb2JhbE9iamVjdC0+YXNz
ZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwgT3BJbmZv
KHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0y
NjQ4LDYgKzI2NDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2socHJv
dG90eXBlLmFzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICAgICAgICAgICAg
ICBBU1NFUlQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0
OTIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNyArMzk1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0Nv
bnN0YW50LCBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKLSAgICAgICAgaWYg
KGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgp
KSB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKGNlbGwt
PnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkgewogICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwKICAg
ICAgICAgICAgICAgICBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25zdGFu
dCwgQ2VsbFVzZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJXYXRjaHBvaW50
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTYwLDYgKzYxLDkgQEAgdHlwZWRlZiBX
YXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZQogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hw
b2ludFNldFR5cGU+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKTsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgdHlwZWRlZiBIYXNoTWFwPFdhdGNocG9pbnRTZXRUeXBlKiwgYm9vbD4g
U3RhdGVNYXA7CisjZW5kaWYKIHB1YmxpYzoKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
KCkKICAgICAgICAgOiBtX3JlYWxseUFkZGVkKGZhbHNlKQpAQCAtODcsOSArOTEsNDYgQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICAKKyNpZiBB
U1NFUlRfRElTQUJMRUQKKyAgICBib29sIGlzU3RpbGxWYWxpZChXYXRjaHBvaW50U2V0VHlwZSog
c2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldC0+aXNTdGlsbFZhbGlkKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRjaHBvaW50U2V0VHlwZSog
c2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2Vsc2UKKyAgICBib29s
IGlzU3RpbGxWYWxpZChXYXRjaHBvaW50U2V0VHlwZSogc2V0KQorICAgIHsKKyAgICAgICAgYm9v
bCByZXN1bHQgPSBzZXQtPmlzU3RpbGxWYWxpZCgpOworICAgICAgICBtX2ZpcnN0S25vd25TdGF0
ZS5hZGQoc2V0LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBib29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkK
KyAgICB7CisgICAgICAgIHR5cGVuYW1lIFN0YXRlTWFwOjppdGVyYXRvciBpdGVyID0gbV9maXJz
dEtub3duU3RhdGUuZmluZChzZXQpOworICAgICAgICBpZiAoaXRlciA9PSBtX2ZpcnN0S25vd25T
dGF0ZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUgIT0gc2V0
LT5pc1N0aWxsVmFsaWQoKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBib29sIGlzVmFsaWRP
ck1peGVkKFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCisgICAgeworICAgICAgICByZXR1cm4gaXNT
dGlsbFZhbGlkKHNldCkgfHwgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShzZXQpOworICAgIH0KIAog
cHJpdmF0ZToKICAgICBWZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdh
dGNocG9pbnRTZXRUeXBlPiA+IG1fd2F0Y2hwb2ludHM7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIFN0YXRlTWFwIG1fZmlyc3RLbm93blN0YXRlOworI2VuZGlmCiAgICAgYm9vbCBtX3JlYWxs
eUFkZGVkOwogfTsKIApAQCAtMTA1LDYgKzE0NiwzMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9v
bCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CiAgICAgCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoV2F0
Y2hwb2ludFNldCogc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2V0cy5pc1N0aWxsVmFs
aWQoc2V0KTsKKyAgICB9CisgICAgYm9vbCBpc1N0aWxsVmFsaWQoSW5saW5lV2F0Y2hwb2ludFNl
dCYgc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1N0aWxsVmFsaWQo
JnNldCk7CisgICAgfQorICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRjaHBvaW50
U2V0KiBzZXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZXRzLnNob3VsZEFzc3VtZU1peGVk
U3RhdGUoc2V0KTsKKyAgICB9CisgICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKElubGlu
ZVdhdGNocG9pbnRTZXQmIHNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lubGluZVNldHMu
c2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZSgmc2V0KTsKKyAgICB9CisgICAgYm9vbCBpc1ZhbGlkT3JN
aXhlZChXYXRjaHBvaW50U2V0KiBzZXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZXRzLmlz
VmFsaWRPck1peGVkKHNldCk7CisgICAgfQorICAgIGJvb2wgaXNWYWxpZE9yTWl4ZWQoSW5saW5l
V2F0Y2hwb2ludFNldCYgc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5p
c1ZhbGlkT3JNaXhlZCgmc2V0KTsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNldD4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNp
cmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNldD4gbV9pbmxpbmVTZXRzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAx
NDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgSlNPYmplY3QqIHN0cmluZ1Byb3RvdHlwZU9iamVjdCA9IGFzT2JqZWN0KHN0cmluZ09i
amVjdFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSA9IHN0cmluZ1Byb3RvdHlwZU9iamVjdC0+c3RydWN0dXJl
KCk7Ci0gICAgICAgIGlmIChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIGlmICghbV9ncmFwaC5tX3dh
dGNocG9pbnRzLmlzU3RpbGxWYWxpZChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
ICAgICAgICAgaWYgKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDkyMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdBcmd1bWVudFBvc2l0aW9uLmgiCiAjaW5jbHVk
ZSAiREZHQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkRGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMu
aCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIK
QEAgLTcxNCw2ICs3MTUsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90
czsKICAgICB1bnNpZ25lZCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsKICAgICBPcGVyYW5kczxK
U1ZhbHVlPiBtX211c3RIYW5kbGVWYWx1ZXM7CisgICAgRGVzaXJlZFdhdGNocG9pbnRzIG1fd2F0
Y2hwb2ludHM7CiAgICAgCiAgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBtX2ZpeHBvaW50
U3RhdGU7CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQyLDcgKzI0Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICBtX2ppdENvZGUtPnNocmlua1RvRml0KCk7CiAgICAgY29kZUJsb2NrKCktPnNocmlua1Rv
Rml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAgICAgCi0gICAgbV93YXRjaHBvaW50cy5yZWFs
bHlBZGQoKTsKKyAgICBtX2dyYXBoLm1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKCk7CiB9CiAKIGJv
b2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KQpAQCAt
MjY1LDcgKzI2NSw3IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoUmVmUHRyPEpTQzo6SkkK
ICAgICBzcGVjdWxhdGl2ZS5jcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7
CiAKLSAgICBpZiAoIW1fd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZCgpKQorICAgIGlmICghbV9n
cmFwaC5tX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0zNTUsNyArMzU1LDcgQEAgYm9vbCBKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKFJlZlB0cgogICAgIHNwZWN1bGF0aXZlLmNyZWF0ZU9T
UkVudHJpZXMoKTsKICAgICBzZXRFbmRPZkNvZGUoKTsKICAgICAKLSAgICBpZiAoIW1fd2F0Y2hw
b2ludHMuYXJlU3RpbGxWYWxpZCgpKQorICAgIGlmICghbV9ncmFwaC5tX3dhdGNocG9pbnRzLmFy
ZVN0aWxsVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gPT09IExpbmsg
PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShy
ZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkRGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5oIgogI2luY2x1ZGUgIkRGR0Rpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
IkRGR0ZQUkluZm8uaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCkBAIC0yNTUsMTEgKzI1NCwx
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCwgV2F0Y2hwb2ludFNldCogc2V0KQogICAgIHsKLSAgICAgICAgbV93YXRjaHBvaW50cy5h
ZGRMYXppbHkod2F0Y2hwb2ludCwgc2V0KTsKKyAgICAgICAgbV9ncmFwaC5tX3dhdGNocG9pbnRz
LmFkZExhemlseSh3YXRjaHBvaW50LCBzZXQpOwogICAgIH0KICAgICB2b2lkIGFkZExhemlseShX
YXRjaHBvaW50KiB3YXRjaHBvaW50LCBJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCiAgICAgewot
ICAgICAgICBtX3dhdGNocG9pbnRzLmFkZExhemlseSh3YXRjaHBvaW50LCBzZXQpOworICAgICAg
ICBtX2dyYXBoLm1fd2F0Y2hwb2ludHMuYWRkTGF6aWx5KHdhdGNocG9pbnQsIHNldCk7CiAgICAg
fQogICAgIAogICAgIC8vIE1ldGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhlIGRpc2Fzc2VtYmxl
ci4KQEAgLTQ3OSw4ICs0NzgsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGls
YXRpb25JbmZvPiBtX2V4aXRDb21waWxhdGlvbkluZm87CiAgICAgVmVjdG9yPFZlY3RvcjxMYWJl
bD4gPiBtX2V4aXRTaXRlTGFiZWxzOwogICAgIHVuc2lnbmVkIG1fY3VycmVudENvZGVPcmlnaW5J
bmRleDsKLSAgICAKLSAgICBEZXNpcmVkV2F0Y2hwb2ludHMgbV93YXRjaHBvaW50czsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTQ5MjE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlTm9uUGUKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGw7CiAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsgICAKLSAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7
CisgICAgaWYgKG1faml0LmdyYXBoKCkubV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQobV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpKSB7CiAgICAgICAgIGlmICghaXNLbm93bkNl
bGwob3BlcmFuZC5ub2RlKCkpKQogICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpOwogCkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaAogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKIAot
ICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlk
KCkpIHsKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5tX3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZCht
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSkpIHsKICAgICAgICAgaWYgKCFpc0tu
b3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAgICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7CiAKQEAgLTEyODcsNyArMTI4Nyw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigp
OwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgCi0gICAgaWYgKG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgIGlmIChtX2ppdC5ncmFw
aCgpLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
KSkgewogICAgICAgICBtX2ppdC5hZGRMYXppbHkoCiAgICAgICAgICAgICBzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSwKICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKQEAg
LTEzNTYsNyArMTM1Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09i
amUKICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlOwogICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIg
PSBJbnZhbGlkR1BSUmVnOwogCi0gICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludFZhbGlkID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpOworICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCA9
IG1faml0LmdyYXBoKCkubV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoCisgICAgICAgIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKIAogICAgIGlmICghbWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewogICAgICAgICAvLyBUaGUgbWFzcXVlcmFkZXMg
YXMgdW5kZWZpbmVkIGNhc2Ugd2lsbCB1c2UgdGhlIHN0cnVjdHVyZSByZWdpc3Rlciwgc28gYWxs
b2NhdGUgaXQgaGVyZS4KQEAgLTE0NjgsNyArMTQ2OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlOwogICAgIEdQ
UlJlZyBzdHJ1Y3R1cmVHUFIgPSBJbnZhbGlkR1BSUmVnOwogCi0gICAgYm9vbCBtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50KCktPmlzU3RpbGxWYWxpZCgpOworICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRWYWxpZCA9IG1faml0LmdyYXBoKCkubV93YXRjaHBvaW50cy5pc1N0aWxsVmFs
aWQoCisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKIAogICAg
IGlmICghbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewogICAgICAgICAv
LyBUaGUgbWFzcXVlcmFkZXMgYXMgdW5kZWZpbmVkIGNhc2Ugd2lsbCB1c2UgdGhlIHN0cnVjdHVy
ZSByZWdpc3Rlciwgc28gYWxsb2NhdGUgaXQgaGVyZS4KQEAgLTE2MTYsNyArMTYxOCw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBHUFJUZW1wb3Jhcnkg
c3RydWN0dXJlOwogICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBJbnZhbGlkR1BSUmVnOwogCi0g
ICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkID0gbV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpOworICAgIGJvb2wgbWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCA9IG1faml0LmdyYXBoKCkubV93YXRj
aHBvaW50cy5pc1N0aWxsVmFsaWQoCisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpKTsKIAogICAgIGlmICghbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRW
YWxpZCkgewogICAgICAgICAvLyBUaGUgbWFzcXVlcmFkZXMgYXMgdW5kZWZpbmVkIGNhc2Ugd2ls
bCB1c2UgdGhlIHN0cnVjdHVyZSByZWdpc3Rlciwgc28gYWxsb2NhdGUgaXQgaGVyZS4KQEAgLTE3
NTksNyArMTc2Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIK
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0g
ICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQo
KSkgeworICAgIGlmIChtX2ppdC5ncmFwaCgpLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKSkgewogICAgICAgICBtX2ppdC5hZGRM
YXppbHkoCiAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKICAgICAgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKQEAgLTQzMTIsNyArNDMxNSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAg
ICAgICAgIGlzQ2VsbC5saW5rKCZtX2ppdCk7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ7Ci0gICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgaWYgKG1faml0LmdyYXBoKCkubV93
YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpKSB7CiAg
ICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25X
YXRjaHBvaW50KCksCiAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdENlbGw7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZDsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
b3BlcmFuZC0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmlzU3RpbGxWYWxpZCgpKSB7CisgICAgaWYgKG1faml0LmdyYXBoKCkubV93YXRjaHBvaW50cy5p
c1N0aWxsVmFsaWQobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iob3BlcmFuZC0+Y29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpKSB7CiAgICAgICAgIGlm
ICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQogICAgICAgICAgICAgbm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOwogCkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dENlbGw7CiAgICAgCi0gICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG9wZXJh
bmQtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0
aWxsVmFsaWQoKSkgeworICAgIGlmIChtX2ppdC5ncmFwaCgpLm1fd2F0Y2hwb2ludHMuaXNTdGls
bFZhbGlkKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG9wZXJhbmQtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKSkgewogICAgICAgICBpZiAoIWlz
S25vd25DZWxsKG9wZXJhbmQubm9kZSgpKSkKICAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKTsKIApAQCAtMTMxMyw3ICsxMzEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgIAotICAgIGlmIChtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICBpZiAobV9qaXQuZ3Jh
cGgoKS5tX3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KSkpIHsKICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAogICAgICAgICAgICAgc3BlY3VsYXRpb25X
YXRjaHBvaW50KCksCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CkBA
IC0xMzc4LDcgKzEzNzgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9P
YmplCiAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZTsKICAgICBHUFJSZWcgc3RydWN0dXJlR1BS
ID0gSW52YWxpZEdQUlJlZzsKIAotICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRWYWxpZCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxs
VmFsaWQoKTsKKyAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQg
PSBtX2ppdC5ncmFwaCgpLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKAorICAgICAgICBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CiAKICAgICBpZiAoIW1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKICAgICAgICAgLy8gVGhlIG1hc3F1ZXJhZGVz
IGFzIHVuZGVmaW5lZCBjYXNlIHdpbGwgdXNlIHRoZSBzdHJ1Y3R1cmUgcmVnaXN0ZXIsIHNvIGFs
bG9jYXRlIGl0IGhlcmUuCkBAIC0xNDg2LDcgKzE0ODcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZTsKICAgICBH
UFJSZWcgc3RydWN0dXJlR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICAKLSAgICBib29sIG1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCk7CisgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludFZhbGlkID0gbV9qaXQuZ3JhcGgoKS5tX3dhdGNocG9pbnRzLmlzU3Rp
bGxWYWxpZCgKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOwog
CiAgICAgaWYgKCFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7CiAgICAg
ICAgIC8vIFRoZSBtYXNxdWVyYWRlcyBhcyB1bmRlZmluZWQgY2FzZSB3aWxsIHVzZSB0aGUgc3Ry
dWN0dXJlIHJlZ2lzdGVyLCBzbyBhbGxvY2F0ZSBpdCBoZXJlLgpAQCAtMTYyOCw3ICsxNjMwLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIEdQUlRlbXBv
cmFyeSBzdHJ1Y3R1cmU7CiAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IEludmFsaWRHUFJSZWc7
CiAKLSAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCk7CisgICAgYm9v
bCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkID0gbV9qaXQuZ3JhcGgoKS5t
X3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZCgKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCkpOwogCiAgICAgaWYgKCFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludFZhbGlkKSB7CiAgICAgICAgIC8vIFRoZSBtYXNxdWVyYWRlcyBhcyB1bmRlZmluZWQgY2Fz
ZSB3aWxsIHVzZSB0aGUgc3RydWN0dXJlIHJlZ2lzdGVyLCBzbyBhbGxvY2F0ZSBpdCBoZXJlLgpA
QCAtMTc4Myw3ICsxNzg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3Ro
ZXJCcgogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgp
KSB7CisgICAgaWYgKG1faml0LmdyYXBoKCkubV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQobV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpKSB7CiAgICAgICAgIG1faml0LmFkZExh
emlseSgKICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAogICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOwpAQCAtNDE5NSw3ICs0MTk4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAg
ICAgICAgaXNDZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsKLSAgICAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5tX3dh
dGNocG9pbnRzLmlzU3RpbGxWYWxpZChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSkpIHsKICAg
ICAgICAgICAgIG1faml0LmFkZExhemlseSgKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSwKICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTQ5MjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTAsNyArMTM1MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICBHUFJSZWcgb3AxR1BS
ID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgCi0gICAg
aWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgIGlm
IChtX2ppdC5ncmFwaCgpLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpKSkgewogICAgICAgICBtX2ppdC5hZGRMYXppbHkoCiAgICAgICAgICAgICBz
cGVjdWxhdGlvbldhdGNocG9pbnQoKSwKICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDE0OTIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk5NiwxMyArMjk5NiwxNSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplCiAgICAgU3RydWN0dXJl
KiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAg
IFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlID0gc3RyaW5nT2JqZWN0U3RydWN0
dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgQVNTRVJU
KHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxs
VmFsaWQoKSk7CisgICAgQVNTRVJUKG1faml0LmdyYXBoKCkubV93YXRjaHBvaW50cy5pc1ZhbGlk
T3JNaXhlZChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
KCkpKTsKICAgICAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBOb3RTdHJpbmdPYmpl
Y3QsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlTG9jYXRpb24sIFRydXN0ZWRJbW1Q
dHIoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpOwotICAgIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVy
ZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3BlY3VsYXRpb25XYXRjaHBvaW50KE5vdFN0cmlu
Z09iamVjdCkpOworICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgc3BlY3VsYXRpb25XYXRj
aHBvaW50KE5vdFN0cmluZ09iamVjdCksCisgICAgICAgIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVy
ZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiB9CiAKICNkZWZpbmUgREZHX1RZUEVfQ0hF
Q0soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpIGRvIHsgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAx
NDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSwxMiArODUsMTIgQEAgYm9vbCBjb21waWxlKFN0YXRlJiBzdGF0ZSwg
UmVmUHRyPEpTQzo6SgogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxHZW5lcmF0ZWRGdW5jdGlvbj4oTExWTUdldFBvaW50ZXJUb0dsb2JhbChlbmdpbmUs
IHN0YXRlLmZ1bmN0aW9uKSk7CiAgICAgTExWTURpc3Bvc2VQYXNzTWFuYWdlcihwYXNzKTsKICAg
ICAKLSAgICBpZiAoIXN0YXRlLndhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkgeworICAgIGlm
ICghc3RhdGUuZ3JhcGgubV93YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpIHsKICAgICAgICAg
TExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUoZW5naW5lKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICAKLSAgICBzdGF0ZS53YXRjaHBvaW50cy5yZWFsbHlBZGQoKTsKKyAgICBz
dGF0ZS5ncmFwaC5tX3dhdGNocG9pbnRzLnJlYWxseUFkZCgpOwogICAgIAogICAgIC8vIENyZWF0
ZSB0aGUgZW50cnlwb2ludC4KICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRvdGFsIGtsdWRnZSAt
IExMVk0gc2hvdWxkIGp1c3QgdXNlIG91ciBjYWxsaW5nIGNvbnZlbnRpb24uCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDYgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCi0jaW5jbHVkZSAiREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRp
b25zLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgpAQCAtNTIsNyArNTEsNiBAQCBwdWJsaWM6
CiAgICAgTFZhbHVlIGZ1bmN0aW9uOwogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAg
IFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0OwotICAgIERGRzo6RGVzaXJl
ZFdhdGNocG9pbnRzIHdhdGNocG9pbnRzOwogICAgIAogICAgIHZvaWQgZHVtcFN0YXRlKGNvbnN0
IGNoYXIqIHdoZW4pOwogfTsK
</data>
<flag name="review"
          id="221375"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199886</attachid>
            <date>2013-04-26 21:03:28 -0700</date>
            <delta_ts>2013-04-26 21:03:28 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>39795</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5MjMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEzLTA0LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogQ0ZBIHNob3VsZCBkZWZlbmQgYWdhaW5zdCByZXN1bHRzIHNlZW1pbmcgaW5j
b25zaXN0ZW50IGR1ZSB0byBhIHdhdGNocG9pbnQgZmlyaW5nIGR1cmluZyBjb21waWxhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MDgzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisgICAgICAgIAorICAgICAgICBU
aGlzIHJ1Z2dlZGl6ZXMgb3VyIHJhY3luZXNzIHdpdGggcmVzcGVjdCB0byB3YXRjaHBvaW50cy4g
V2Ugd2FudCB0byBiZSBhYmxlIHRvIGFzc2VydCwKKyAgICAgICAgaW4gc29tZSBwbGFjZXMsIHRo
YXQgYSB3YXRjaHBvaW50LWJhc2VkIG9wdGltaXphdGlvbiBoYXMgb25seSBvY2N1cnJlZCBpZiB0
aGUKKyAgICAgICAgd2F0Y2hwb2ludCBzZXQgd2FzIHN0aWxsIHZhbGlkLiBCdXQgY3VycmVudGx5
IHdlICpjYW4qIHNvdW5kbHkgZG8gd2F0Y2hwb2ludC1iYXNlZAorICAgICAgICBvcHRpbWl6YXRp
b25zIGV2ZW4gZm9yIGludmFsaWQgd2F0Y2hwb2ludHMsIHNvIGxvbmcgYXMgd2UgcmVjb3JkZWQg
aW4gdGhlIElSIHRoYXQgd2UKKyAgICAgICAgaGFkIGRvbmUgc287IHRoaXMgd2lsbCB0aGVuIGxl
YWQgdG8gdGhlIGNvZGUgYmVpbmcgaW5zdGEtamV0dGlzb25lZCBhZnRlciBjb21waWxhdGlvbgor
ICAgICAgICBjb21wbGV0ZXMuIE9idmlvdXNseSwgd2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGhhcHBl
biBvZnRlbiAtIGJ1dCB3ZSBkbyB3YW50IHRvIGFsbG93IGl0CisgICAgICAgIHByZWNpc2VseSBp
biB0aGUgY2FzZSBvZiB3YXRjaHBvaW50IHJhY2VzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
ZGRzIHRoZSBhYmlsaXR5IHRvIGFzc2VydCB0aGF0IHdlIGhhZG4ndCBvdmVyLXdhdGNocG9pbnRl
ZCBvdXJzZWx2ZXMsIHdpdGggYW5kCisgICAgICAgIGV4ZW1wdGlvbiBmb3IgcmFjZXMuCisKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNl
UmVzb2x2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2spOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoKKyAg
ICAgICAgKEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6Okdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OmlzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6c2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNWYWxpZE9yTWl4
ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6aXNTdGlsbFZhbGlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OnNob3VsZEFzc3VtZU1p
eGVkU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6aXNWYWxp
ZE9yTWl4ZWQpOgorICAgICAgICAoRGVzaXJlZFdhdGNocG9pbnRzKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2FuT3B0
aW1pemVTdHJpbmdPYmplY3RBY2Nlc3MpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjptYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElz
U3RpbGxWYWxpZCk6CisgICAgICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRMYXppbHkpOgorICAgICAg
ICAoSklUQ29tcGlsZXIpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVx
dWFsaXR5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNw
ZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
U3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVx
dWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmpl
Y3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJh
bmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgor
ICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAoU3RhdGUpOgorCiAyMDEzLTA0LTIz
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjog
QWJzdHJhY3RWYWx1ZSBtZXRob2RzIHRoYXQgZGVhbCB3aXRoIHdhdGNocG9pbnRzIHNob3VsZCBo
YXZlIGFjY2VzcyB0byBHcmFwaCwgc28gdGhhdCBpbiBkZWJ1ZyBtb2RlLCBHcmFwaCBjYW4gdHJh
Y2sgdGhlIGhpc3Rvcnkgb2Ygd2F0Y2hwb2ludCBzdGF0ZXMgYW5kIGRldGVjdCByYWNlcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzcsMjMgKzY3NywxNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBj
YXNlIElzT2JqZWN0OgogICAgIGNhc2UgSXNGdW5jdGlvbjogewotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KG5vZGUtPm9wKCkgPT0gSXNVbmRlZmluZWQgJiYgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnQoKS0+aXNTdGlsbFZhbGlkKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KG5vZGUtPm9w
KCkgPT0gSXNVbmRlZmluZWQgJiYgbV9ncmFwaC5tX3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKSk7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKICAgICAg
ICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFu
KAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgID8gZmFsc2UgCi0gICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmlzVW5k
ZWZpbmVkKCkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKQotICAgICAgICAg
ICAgICAgICAgICAgICAgOiBjaGlsZC5pc1VuZGVmaW5lZCgpKSk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKAorICAgICAgICAgICAgICAgICAgICBjaGlsZC5pc0NlbGwoKQorICAgICAgICAg
ICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKQor
ICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmlzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSXNCb29sZWFuOgogICAgICAgICAgICAgICAg
IGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlz
Qm9vbGVhbigpKSk7CkBAIC0xMzQyLDcgKzEzMzUsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBz
aW5nbGV0b24gd2F0Y2hwb2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKICAgICAgICAg
Ly8gYW5kIG91ciBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6
ZXJvLCBvbmUsIG9yIGFuCiAgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCi0gICAg
ICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3Ry
dWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpOworICAgICAgICBBU1NFUlQoCisgICAgICAg
ICAgICB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJl
U2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgIHx8IG1fZ3JhcGgubV93YXRjaHBv
aW50cy5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKG5vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldCgpKSk7CiAgICAgICAgIAogICAgICAgICB2YWx1ZS5maWx0ZXIobV9ncmFw
aCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAkocmV2aXNpb24gMTQ5MjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDE3ICsxMTAsMTcgQEAgdm9pZCBB
YnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLAogICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShH
cmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRGdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewotICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlk
KCkpCisgICAgaWYgKGdyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCiAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgZWxzZQogICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLm1ha2VUb3AoKTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJGdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZShHcmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQordm9pZCBBYnN0
cmFjdFZhbHVlOjpmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgaWYgKGdyYXBoLm1fd2F0Y2hwb2ludHMuaXNT
dGlsbFZhbGlkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCiAgICAgICAg
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuZmlsdGVyKFN0cnVjdHVyZUFic3RyYWN0VmFsdWUo
c3RydWN0dXJlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzkz
LDcgKzc5Myw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGJlIGpldHRpc29uZWQgaWYgdGhlIG9i
amVjdCBldmVyIGRpZXMuCiAgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSBjZWxsQ29uc3RhbnQo
b2JqZWN0KTsKICAgICAgICAgCi0gICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0
cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlk
KCkpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlCisgICAg
ICAgICAgICAmJiBtX2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIE9wSW5mbyhzdHJ1Y3R1cmUpLCBvYmplY3ROb2Rl
KTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwogICAgICAgICB9CkBAIC0xOTA5LDcg
KzE5MTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAKICAg
ICAgICAgSWRlbnRpZmllciBpZGVudCA9IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZp
ZXIpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1i
b2xUYWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgaWYgKCFlbnRyeS5jb3VsZEJl
V2F0Y2hlZCgpKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3dhdGNocG9pbnRzLmlzU3RpbGxW
YWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7CiAgICAgICAgICAgICAqdmFsdWUgPSBhZGRU
b0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKGdsb2JhbE9iamVjdC0+YXNzZXJ0UmVnaXN0ZXJJ
c0luVGhpc09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwgT3BJbmZvKHByZWRpY3Rpb24p
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yNjQ4LDYgKzI2NDks
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2socHJvdG90eXBlLmFzQ2Vs
bCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHV0
QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSog
cHJvcGVydHlTdG9yYWdlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0OTIxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTUsNyArMzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogd2Vh
a0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBjb2Rl
T3JpZ2luLCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNlbGwtPnN0cnVj
dHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAg
IGlmIChtX2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKGNlbGwtPnN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkgewogICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAg
ICBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5oCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTYwLDYgKzYxLDkgQEAgdHlwZWRlZiBXYXRjaHBvaW50Rm9y
R2VuZXJpY1dhdGNocG9pbnRTZQogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGU+
CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgdHlwZWRlZiBIYXNoTWFwPFdhdGNocG9pbnRTZXRUeXBlKiwgYm9vbD4gU3RhdGVNYXA7Cisj
ZW5kaWYKIHB1YmxpYzoKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKCkKICAgICAgICAg
OiBtX3JlYWxseUFkZGVkKGZhbHNlKQpAQCAtODcsOSArOTEsNDYgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICAKKyNpZiBBU1NFUlRfRElTQUJM
RUQKKyAgICBib29sIGlzU3RpbGxWYWxpZChXYXRjaHBvaW50U2V0VHlwZSogc2V0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHNldC0+aXNTdGlsbFZhbGlkKCk7CisgICAgfQorICAgIAorICAgIGJv
b2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRjaHBvaW50U2V0VHlwZSogc2V0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2Vsc2UKKyAgICBib29sIGlzU3RpbGxWYWxp
ZChXYXRjaHBvaW50U2V0VHlwZSogc2V0KQorICAgIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBz
ZXQtPmlzU3RpbGxWYWxpZCgpOworICAgICAgICBtX2ZpcnN0S25vd25TdGF0ZS5hZGQoc2V0LCBy
ZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIHNo
b3VsZEFzc3VtZU1peGVkU3RhdGUoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKKyAgICB7CisgICAg
ICAgIHR5cGVuYW1lIFN0YXRlTWFwOjppdGVyYXRvciBpdGVyID0gbV9maXJzdEtub3duU3RhdGUu
ZmluZChzZXQpOworICAgICAgICBpZiAoaXRlciA9PSBtX2ZpcnN0S25vd25TdGF0ZS5lbmQoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIFdURjo6bG9hZExv
YWRGZW5jZSgpOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUgIT0gc2V0LT5pc1N0aWxsVmFs
aWQoKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBib29sIGlzVmFsaWRPck1peGVkKFdhdGNo
cG9pbnRTZXRUeXBlKiBzZXQpCisgICAgeworICAgICAgICByZXR1cm4gaXNTdGlsbFZhbGlkKHNl
dCkgfHwgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShzZXQpOworICAgIH0KIAogcHJpdmF0ZToKICAg
ICBWZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRU
eXBlPiA+IG1fd2F0Y2hwb2ludHM7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIFN0YXRlTWFw
IG1fZmlyc3RLbm93blN0YXRlOworI2VuZGlmCiAgICAgYm9vbCBtX3JlYWxseUFkZGVkOwogfTsK
IApAQCAtMTA1LDYgKzE0NiwzMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZh
bGlkKCkgY29uc3Q7CiAgICAgCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoV2F0Y2hwb2ludFNldCog
c2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2V0cy5pc1N0aWxsVmFsaWQoc2V0KTsKKyAg
ICB9CisgICAgYm9vbCBpc1N0aWxsVmFsaWQoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1N0aWxsVmFsaWQoJnNldCk7CisgICAg
fQorICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRjaHBvaW50U2V0KiBzZXQpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9zZXRzLnNob3VsZEFzc3VtZU1peGVkU3RhdGUoc2V0KTsK
KyAgICB9CisgICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKElubGluZVdhdGNocG9pbnRT
ZXQmIHNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lubGluZVNldHMuc2hvdWxkQXNzdW1l
TWl4ZWRTdGF0ZSgmc2V0KTsKKyAgICB9CisgICAgYm9vbCBpc1ZhbGlkT3JNaXhlZChXYXRjaHBv
aW50U2V0KiBzZXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZXRzLmlzVmFsaWRPck1peGVk
KHNldCk7CisgICAgfQorICAgIGJvb2wgaXNWYWxpZE9yTWl4ZWQoSW5saW5lV2F0Y2hwb2ludFNl
dCYgc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1ZhbGlkT3JNaXhl
ZCgmc2V0KTsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8V2F0Y2hwb2ludFNldD4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2lu
dHM8SW5saW5lV2F0Y2hwb2ludFNldD4gbV9pbmxpbmVTZXRzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgSlNPYmpl
Y3QqIHN0cmluZ1Byb3RvdHlwZU9iamVjdCA9IGFzT2JqZWN0KHN0cmluZ09iamVjdFN0cnVjdHVy
ZS0+c3RvcmVkUHJvdG90eXBlKCkpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlw
ZVN0cnVjdHVyZSA9IHN0cmluZ1Byb3RvdHlwZU9iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAg
IGlmIChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFz
QmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIGlmICghbV9ncmFwaC5tX3dhdGNocG9pbnRzLmlz
U3RpbGxWYWxpZChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgaWYg
KHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJERkdBcmd1bWVudFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHQXNzZW1i
bHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRl
ICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTM3Niw2ICsz
NzcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmln
aW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwogICAg
IH0KICAgICAKKyAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGls
bFZhbGlkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICByZXR1
cm4gbV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoCisgICAgICAgICAgICBnbG9iYWxPYmplY3RG
b3IoY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOworICAg
IH0KKyAgICAKICAgICBib29sIGhhc0dsb2JhbEV4aXRTaXRlKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5oYXNFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRl
KGV4aXRLaW5kKSk7CkBAIC03MTQsNiArNzIxLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1f
cGFyYW1ldGVyU2xvdHM7CiAgICAgdW5zaWduZWQgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAg
ICAgT3BlcmFuZHM8SlNWYWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOworICAgIERlc2lyZWRXYXRj
aHBvaW50cyBtX3dhdGNocG9pbnRzOwogICAgIAogICAgIE9wdGltaXphdGlvbkZpeHBvaW50U3Rh
dGUgbV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBoRm9ybSBtX2Zvcm07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTQ5MjE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgbV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvZGVCbG9j
aygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogICAgIAotICAgIG1fd2F0
Y2hwb2ludHMucmVhbGx5QWRkKCk7CisgICAgbV9ncmFwaC5tX3dhdGNocG9pbnRzLnJlYWxseUFk
ZCgpOwogfQogCiBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKFJlZlB0cjxKU0M6OkpJVENvZGU+
JiBlbnRyeSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKFJl
ZlB0cjxKU0M6OkpJCiAgICAgc3BlY3VsYXRpdmUuY3JlYXRlT1NSRW50cmllcygpOwogICAgIHNl
dEVuZE9mQ29kZSgpOwogCi0gICAgaWYgKCFtX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkK
KyAgICBpZiAoIW1fZ3JhcGgubV93YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sIHRo
aXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAtMzU1LDcgKzM1NSw3
IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihSZWZQdHIKICAgICBzcGVjdWxh
dGl2ZS5jcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAgICAgCi0gICAg
aWYgKCFtX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkKKyAgICBpZiAoIW1fZ3JhcGgubV93
YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vID09PSBMaW5rID09PQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkocmV2aXNpb24gMTQ5MjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKLSNpbmNs
dWRlICJERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCIKICNpbmNsdWRlICJERkdEaXNhc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJERkdGUFJJbmZvLmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgpAQCAt
MjU1LDExICsyNTQsMTEgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQsIFdhdGNocG9pbnRTZXQqIHNldCkKICAgICB7Ci0gICAgICAgIG1f
d2F0Y2hwb2ludHMuYWRkTGF6aWx5KHdhdGNocG9pbnQsIHNldCk7CisgICAgICAgIG1fZ3JhcGgu
bV93YXRjaHBvaW50cy5hZGRMYXppbHkod2F0Y2hwb2ludCwgc2V0KTsKICAgICB9CiAgICAgdm9p
ZCBhZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCwgSW5saW5lV2F0Y2hwb2ludFNldCYg
c2V0KQogICAgIHsKLSAgICAgICAgbV93YXRjaHBvaW50cy5hZGRMYXppbHkod2F0Y2hwb2ludCwg
c2V0KTsKKyAgICAgICAgbV9ncmFwaC5tX3dhdGNocG9pbnRzLmFkZExhemlseSh3YXRjaHBvaW50
LCBzZXQpOwogICAgIH0KICAgICAKICAgICAvLyBNZXRob2RzIHRvIHNldCBsYWJlbHMgZm9yIHRo
ZSBkaXNhc3NlbWJsZXIuCkBAIC00NzksOCArNDc4LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gbV9leGl0Q29tcGlsYXRpb25JbmZvOwogICAgIFZlY3Rv
cjxWZWN0b3I8TGFiZWw+ID4gbV9leGl0U2l0ZUxhYmVsczsKICAgICB1bnNpZ25lZCBtX2N1cnJl
bnRDb2RlT3JpZ2luSW5kZXg7Ci0gICAgCi0gICAgRGVzaXJlZFdhdGNocG9pbnRzIG1fd2F0Y2hw
b2ludHM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDE0OTIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NywxMyArMzg3LDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKIAogICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdENlbGw7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZDsgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlz
U3RpbGxWYWxpZCgpKSB7CisgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUo
KSkpCiAgICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAK
LSAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBv
aW50KCksCi0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7
CisgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQo
KTsKICAgICAgICAgbV9qaXQubW92ZShpbnZlcnQgPyBUcnVzdGVkSW1tMzIoMSkgOiBUcnVzdGVk
SW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gbV9qaXQuanVtcCgpOwogICAgIH0gZWxzZSB7CkBAIC00NTYsMTMgKzQ1NCwxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RDZWxsOwogCi0gICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIGlmICghaXNLbm93bkNlbGwo
b3BlcmFuZC5ub2RlKCkpKQogICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpOwogCi0gICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCkpOworICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIGp1bXAoaW52ZXJ0ID8gdGFrZW4gOiBub3RUYWtlbiwg
Rm9yY2VKdW1wKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3JhcnkgbG9jYWxHbG9i
YWxPYmplY3QodGhpcyk7CkBAIC0xMjg3LDEwICsxMjgzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CiAg
ICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIG1faml0LmFkZExhemls
eSgKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOworICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2lu
dEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xMzU2LDcgKzEzNTAsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZTsKICAg
ICBHUFJSZWcgc3RydWN0dXJlR1BSID0gSW52YWxpZEdQUlJlZzsKIAotICAgIGJvb2wgbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKTsKKyAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQgPQorICAgICAgICBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZCgpOwogCiAgICAgaWYgKCFtYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludFZhbGlkKSB7CiAgICAgICAgIC8vIFRoZSBtYXNxdWVyYWRlcyBhcyB1bmRlZmlu
ZWQgY2FzZSB3aWxsIHVzZSB0aGUgc3RydWN0dXJlIHJlZ2lzdGVyLCBzbyBhbGxvY2F0ZSBpdCBo
ZXJlLgpAQCAtMTM2Nyw5ICsxMzYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdFRvT2JqZQogICAgIH0KIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludFZhbGlkKSB7Ci0gICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCkpOworICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
QEAgLTEzOTcsOSArMTM5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RU
b09iamUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdo
dENoaWxkIG11c3QgYmUgYSBjZWxsLgogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludFZhbGlkKSB7Ci0gICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCkpOworICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVj
Q2VsbCkgfCBTcGVjT2JqZWN0LAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKApAQCAtMTQ2
OCw3ICsxNDU5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQog
ICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmU7CiAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IElu
dmFsaWRHUFJSZWc7CiAKLSAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
VmFsaWQgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlk
KCk7CisgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkID0KKyAg
ICAgICAgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKIAog
ICAgIGlmICghbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewogICAgICAg
ICAvLyBUaGUgbWFzcXVlcmFkZXMgYXMgdW5kZWZpbmVkIGNhc2Ugd2lsbCB1c2UgdGhlIHN0cnVj
dHVyZSByZWdpc3Rlciwgc28gYWxsb2NhdGUgaXQgaGVyZS4KQEAgLTE0NzksOSArMTQ3MSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICB9CiAKICAgICBp
ZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewotICAgICAgICBtX2pp
dC5hZGRMYXppbHkoCi0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAg
ICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBE
RkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xNTA4LDkgKzE0OTgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25v
dyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4KICAg
ICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewotICAgICAgICBt
X2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAg
ICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAg
ICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3Ay
UGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKQEAgLTE2MTYsNyArMTYwNCw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJl
OwogICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBJbnZhbGlkR1BSUmVnOwogCi0gICAgYm9vbCBt
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkID0gbV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpOworICAgIGJvb2wgbWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCA9CisgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAKICAgICBpZiAoIW1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKICAgICAgICAgLy8gVGhlIG1hc3F1ZXJhZGVzIGFzIHVu
ZGVmaW5lZCBjYXNlIHdpbGwgdXNlIHRoZSBzdHJ1Y3R1cmUgcmVnaXN0ZXIsIHNvIGFsbG9jYXRl
IGl0IGhlcmUuCkBAIC0xNjI4LDkgKzE2MTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0T3JPdGhlCiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRWYWxpZCkgewotICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVVc2Us
ICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKQEAgLTE3NTksMTEgKzE3NDYsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIGlmIChtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuYWRk
TGF6aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAg
ICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7Ci0KKyAgICBpZiAobWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBzcGVj
dWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgIERG
R19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVl
UGF5bG9hZEdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFB0cigKQEAgLTQzMTIsMTAgKzQyOTYsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAgICBpc0NlbGwubGlu
aygmbV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkOwotICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCkpOworICAgICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnRJc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9y
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gbV9qaXQuanVtcCgpOwogICAgICAgICB9IGVsc2UgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsMTMgKzMzNSwxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2Vs
bDsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
OwotICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihvcGVyYW5kLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkp
IHsKKyAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQo
KSkgewogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9kZSgpKSkKICAgICAgICAg
ICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKIAotICAgICAgICBtX2ppdC5hZGRM
YXppbHkoCi0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG9wZXJhbmQtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3BlY3VsYXRpb25XYXRj
aHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOworCiAgICAgICAgIG1faml0Lm1vdmUo
aW52ZXJ0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOwog
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgpOwogICAgIH0g
ZWxzZSB7CkBAIC00MDMsMTMgKzQwMiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBoCiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAK
LSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iob3BlcmFuZC0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7
CisgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkp
IHsKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAgICAgICAgICAg
ICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBh
cmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAKLSAgICAgICAgbV9qaXQuYWRkTGF6
aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihvcGVyYW5kLT5jb2RlT3JpZ2luKS0+bWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hw
b2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKKyAgICAgICAgCiAgICAgICAgIGp1bXAo
aW52ZXJ0ID8gdGFrZW4gOiBub3RUYWtlbiwgRm9yY2VKdW1wKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBHUFJUZW1wb3JhcnkgbG9jYWxHbG9iYWxPYmplY3QodGhpcyk7CkBAIC0xMzEzLDEwICsx
MzExLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIEdQ
UlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgIAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRp
b25XYXRjaHBvaW50KCksCi0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7
CisgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkp
IHsKKyAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCgpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5i
cmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKQEAgLTEz
NzgsNyArMTM3NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUK
ICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlOwogICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBJ
bnZhbGlkR1BSUmVnOwogCi0gICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dFZhbGlkID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxp
ZCgpOworICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCA9Cisg
ICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAK
ICAgICBpZiAoIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKICAgICAg
ICAgLy8gVGhlIG1hc3F1ZXJhZGVzIGFzIHVuZGVmaW5lZCBjYXNlIHdpbGwgdXNlIHRoZSBzdHJ1
Y3R1cmUgcmVnaXN0ZXIsIHNvIGFsbG9jYXRlIGl0IGhlcmUuCkBAIC0xMzg5LDkgKzEzODYsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgfQogCiAgICAg
aWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgbV9q
aXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCi0gICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CisgICAgICAgIHNw
ZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAg
REZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTQxNywxMCArMTQxMiw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5j
aCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCi0gICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQpIHsgCi0gICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOworICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludFZhbGlkKSB7CisgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIApAQCAtMTQ4Niw3ICsxNDc5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlT2JqZQogICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmU7CiAgICAgR1BSUmVnIHN0cnVj
dHVyZUdQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgCi0gICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludFZhbGlkID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
KCktPmlzU3RpbGxWYWxpZCgpOworICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRWYWxpZCA9CisgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNT
dGlsbFZhbGlkKCk7CiAKICAgICBpZiAoIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
VmFsaWQpIHsKICAgICAgICAgLy8gVGhlIG1hc3F1ZXJhZGVzIGFzIHVuZGVmaW5lZCBjYXNlIHdp
bGwgdXNlIHRoZSBzdHJ1Y3R1cmUgcmVnaXN0ZXIsIHNvIGFsbG9jYXRlIGl0IGhlcmUuCkBAIC0x
NDk3LDkgKzE0OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmpl
CiAgICAgfQogCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQp
IHsKLSAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRj
aHBvaW50KCksCi0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQoKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5j
aFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTUyNiw5
ICsxNTE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAg
IAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVz
dCBiZSBhIGNlbGwuIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZh
bGlkKSB7Ci0gICAgICAgIG1faml0LmFkZExhemlseSgKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpLAotICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCkpOworICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVJl
Z3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5i
cmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKQEAgLTE2
MjgsNyArMTYxOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUK
ICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlOwogICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBJ
bnZhbGlkR1BSUmVnOwogCi0gICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dFZhbGlkID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxp
ZCgpOworICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCA9Cisg
ICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAK
ICAgICBpZiAoIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKICAgICAg
ICAgLy8gVGhlIG1hc3F1ZXJhZGVzIGFzIHVuZGVmaW5lZCBjYXNlIHdpbGwgdXNlIHRoZSBzdHJ1
Y3R1cmUgcmVnaXN0ZXIsIHNvIGFsbG9jYXRlIGl0IGhlcmUuCkBAIC0xNjQwLDkgKzE2MzEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAo
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewotICAgICAgICBtX2ppdC5h
ZGRMYXppbHkoCi0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3BlY3Vs
YXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOwogICAgICAgICBERkdf
VFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwg
KH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLApAQCAtMTc4MywxMCArMTc3Miw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBtX2ppdC5hZGRMYXppbHko
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICBpZiAobWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBzcGVjdWxhdGlvbldh
dGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3Bl
Y0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKApAQCAtNDE5NSwxMCArNDE4Miw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAg
ICAgICAgIGlzQ2VsbC5saW5rKCZtX2ppdCk7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ7Ci0gICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgIG1faml0LmFkZExhemlseSgK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKLSAgICAgICAgICAgICAg
ICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CisgICAgICAgIGlmIChtYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIH0gZWxzZSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTQ5MjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTAsMTAgKzEzNTAsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMUdQ
UiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIAotICAg
IGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAg
ICAgbV9qaXQuYWRkTGF6aWx5KAotICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCks
Ci0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CisgICAgaWYgKG1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgc3Bl
Y3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpOworCiAgICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0
KSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHJldmlzaW9uIDE0OTIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCwyNSBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgYm9vbCBt
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChjb25zdCBDb2RlT3Jp
Z2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29kZU9yaWdpbik7Cisg
ICAgfQorICAgIHZvaWQgc3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgbV9qaXQu
YWRkTGF6aWx5KAorICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCisgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CisgICAgfQorICAgIGJvb2wgbWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4pOworICAgIH0KKyAgICB2b2lkIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZv
ck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRpb25XYXRj
aHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
KTsKKyAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXIm
LCBHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIy
LCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIApAQCAtMjk5NiwxMyArMzAxNSwxNSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplCiAgICAgU3RydWN0dXJlKiBzdHJpbmdP
YmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAgIFN0cnVjdHVy
ZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlID0gc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgQVNTRVJUKHN0cmluZ1By
b3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSk7
CisgICAgQVNTRVJUKG1faml0LmdyYXBoKCkubV93YXRjaHBvaW50cy5pc1ZhbGlkT3JNaXhlZChz
dHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKICAg
ICAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBOb3RTdHJpbmdPYmplY3QsIEpTVmFs
dWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlTG9jYXRpb24sIFRydXN0ZWRJbW1QdHIoc3RyaW5n
T2JqZWN0U3RydWN0dXJlKSkpOwotICAgIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+YWRkVHJh
bnNpdGlvbldhdGNocG9pbnQoc3BlY3VsYXRpb25XYXRjaHBvaW50KE5vdFN0cmluZ09iamVjdCkp
OworICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KE5v
dFN0cmluZ09iamVjdCksCisgICAgICAgIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXQoKSk7CiB9CiAKICNkZWZpbmUgREZHX1RZUEVfQ0hFQ0soc291cmNl
LCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpIGRvIHsgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSwxMiArODUsMTIgQEAgYm9vbCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpT
Qzo6SgogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxH
ZW5lcmF0ZWRGdW5jdGlvbj4oTExWTUdldFBvaW50ZXJUb0dsb2JhbChlbmdpbmUsIHN0YXRlLmZ1
bmN0aW9uKSk7CiAgICAgTExWTURpc3Bvc2VQYXNzTWFuYWdlcihwYXNzKTsKICAgICAKLSAgICBp
ZiAoIXN0YXRlLndhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkgeworICAgIGlmICghc3RhdGUu
Z3JhcGgubV93YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgTExWTURpc3Bv
c2VFeGVjdXRpb25FbmdpbmUoZW5naW5lKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAKLSAgICBzdGF0ZS53YXRjaHBvaW50cy5yZWFsbHlBZGQoKTsKKyAgICBzdGF0ZS5ncmFw
aC5tX3dhdGNocG9pbnRzLnJlYWxseUFkZCgpOwogICAgIAogICAgIC8vIENyZWF0ZSB0aGUgZW50
cnlwb2ludC4KICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRvdGFsIGtsdWRnZSAtIExMVk0gc2hv
dWxkIGp1c3QgdXNlIG91ciBjYWxsaW5nIGNvbnZlbnRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAog
I2lmIEVOQUJMRShGVExfSklUKQogCi0jaW5jbHVkZSAiREZHRGVzaXJlZFdhdGNocG9pbnRzLmgi
CiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCiAj
aW5jbHVkZSAiRlRMSklUQ29kZS5oIgpAQCAtNTIsNyArNTEsNiBAQCBwdWJsaWM6CiAgICAgTFZh
bHVlIGZ1bmN0aW9uOwogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAgIFZlY3RvcjxP
U1JFeGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0OwotICAgIERGRzo6RGVzaXJlZFdhdGNocG9p
bnRzIHdhdGNocG9pbnRzOwogICAgIAogICAgIHZvaWQgZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdo
ZW4pOwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>