<?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>122757</bug_id>
          
          <creation_ts>2013-10-14 09:53:13 -0700</creation_ts>
          <short_desc>Transition *switch* and *scope* JITStubs to JIT operations</short_desc>
          <delta_ts>2013-10-14 20:03:35 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122287</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>939479</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-14 09:53:13 -0700</bug_when>
    <thetext>Transitioning:
    cti_op_switch_char
    cti_op_switch_imm
    cti_op_switch_string
    cti_op_resolve_scope
    cti_op_get_from_scope
    cti_op_put_to_scope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939689</commentid>
    <comment_count>1</comment_count>
      <attachid>214202</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-14 16:02:46 -0700</bug_when>
    <thetext>Created attachment 214202
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939800</commentid>
    <comment_count>2</comment_count>
      <attachid>214202</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-14 19:35:14 -0700</bug_when>
    <thetext>Comment on attachment 214202
the patch.

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

Needs some fixes before landing.

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1009
&gt; +    ASSERT(returnValueRegister == regT0);
&gt;      jump(regT0);

Please use returnValueRegister in the jump, and remove the ASSERT.

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1026
&gt; +    ASSERT(returnValueRegister == regT0);
&gt;      jump(regT0);

Ditto.

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1042
&gt; +    ASSERT(returnValueRegister == regT0);
&gt;      jump(regT0);

Ditto.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:695
&gt; +    emitGetVirtualRegister(scrutinee, regT1);
&gt; +    callOperation(operationSwitchImmWithUnknownKeyType, regT1, tableIndex);

This should be regT0.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:697
&gt; +    ASSERT(returnValueRegister == regT0);
&gt;      jump(regT0);

This should be returnValueRegister.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:712
&gt; +    emitGetVirtualRegister(scrutinee, regT1);
&gt; +    callOperation(operationSwitchCharWithUnknownKeyType, regT1, tableIndex);

regT0.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:714
&gt; +    ASSERT(returnValueRegister == regT0);
&gt;      jump(regT0);

returnValueRegister.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:730
&gt; +    emitGetVirtualRegister(scrutinee, regT1);
&gt; +    callOperation(operationSwitchStringWithUnknownKeyType, regT1, tableIndex);
&gt; +    ASSERT(returnValueRegister == regT0);
&gt;      jump(regT0);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939808</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-14 20:03:35 -0700</bug_when>
    <thetext>Thanks for the review.  Remaining issues have been fixed.  Landed in r157439: &lt;http://trac.webkit.org/r157439&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214202</attachid>
            <date>2013-10-14 16:02:46 -0700</date>
            <delta_ts>2013-10-14 19:35:14 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-122757.patch</filename>
            <type>text/plain</type>
            <size>31172</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NDI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDEzLTEwLTE0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBU
cmFuc2l0aW9uICpzd2l0Y2gqIGFuZCAqc2NvcGUqIEpJVFN0dWJzIHRvIEpJVCBvcGVyYXRpb25z
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNzU3
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb25pbmc6CisgICAgICAgICAgICBjdGlfb3Bfc3dpdGNoX2NoYXIKKyAgICAgICAgICAgIGN0
aV9vcF9zd2l0Y2hfaW1tCisgICAgICAgICAgICBjdGlfb3Bfc3dpdGNoX3N0cmluZworICAgICAg
ICAgICAgY3RpX29wX3Jlc29sdmVfc2NvcGUKKyAgICAgICAgICAgIGN0aV9vcF9nZXRfZnJvbV9z
Y29wZQorICAgICAgICAgICAgY3RpX29wX3B1dF90b19zY29wZQorCisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y2Fs
bE9wZXJhdGlvbik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9z
d2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToK
KyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKwogMjAxMy0xMC0xNCAgQ29tbWl0IFF1ZXVlICA8
Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjE1NzQxMy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTU3NDA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODg2LDEwICs4ODYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJZGMsIGludCwgR1BSUmVnLCBj
b25zdCBJZGVudGlmaWVyKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQUlJlZywgR1BSUmVnKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCwgaW50
LCB2b2lkKik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRVBjLCBpbnQsIEluc3RydWN0aW9uKik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVosIGludCwgaW50MzJfdCk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRp
b25fRUpTLCBHUFJSZWcsIHNpemVfdCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUNDLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlv
bl9FSiwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19KSVRPcGVyYXRpb25fRUpKLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FT0pz
cywgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVBjLCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24oSl9KSVRPcGVyYXRpb25fRSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9w
ZXJhdGlvbl9FQ2IsIENvZGVCbG9jayopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oWl9KSVRPcGVyYXRp
b25fRSk7CkBAIC04OTksNiArOTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUosIGludCwgR1BS
UmVnLCBHUFJSZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VKSWRjLCBpbnQsIEdQUlJlZywgR1BSUmVnLCBjb25zdCBJZGVudGlm
aWVyKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUpKLCBpbnQsIEdQUlJlZywgR1BSUmVnLCBHUFJSZWcsIEdQUlJlZyk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUpT
LCBHUFJSZWcsIEdQUlJlZywgc2l6ZV90KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRp
b25fRUpKLCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDE1NzQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTgsNiArMzE4LDI0IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOwogfQogCitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUGMg
b3BlcmF0aW9uLCBpbnQgZHN0LCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykKK3sKKyAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihieXRlY29kZVBDKSk7CisgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJh
dGlvbiwgZHN0KTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBpbnQgZHN0LCBpbnQz
Ml90IGFyZykKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
KGFyZykpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VKUyBvcGVyYXRpb24s
IEdQUlJlZyBhcmcxLCBzaXplX3QgYXJnMikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUNDIG9wZXJh
dGlvbiwgUmVnaXN0ZXJJRCByZWdPcDEsIFJlZ2lzdGVySUQgcmVnT3AyKQogewogICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDEsIHJlZ09wMik7CkBAIC0zNDIsNiArMzYwLDEy
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FUGMgb3BlcmF0aW9uLCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykKK3sKKyAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihieXRlY29kZVBDKSk7CisgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbikKIHsKICAg
ICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwpAQCAtNDA4LDYgKzQzMiwxMiBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0KIAor
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oUF9K
SVRPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCwgc2l6ZV90IGFyZzIpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVB
QklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKGFy
ZzIpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJh
dGlvbihTX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIFJlZ2lzdGVySUQgYXJnVGFnLCBSZWdp
c3RlcklEIGFyZ1BheWxvYWQpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVB
QklfMzJCSVRfRFVNTVlfQVJHIGFyZ1BheWxvYWQsIGFyZ1RhZyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTc0MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk5NCw3ICs5OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0
cnVjdGlvbiogY3VyCiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgc2NydXRpbmVl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIApAQCAtMTAwMywxNiArMTAwMywx
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9uCiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVm
YXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmN0
aU9mZnNldHMuZ3JvdyhqdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKIAotICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9zd2l0Y2hfaW1tKTsKLSAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChzY3J1dGluZWUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0
ZWRJbW0zMih0YWJsZUluZGV4KSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRMb2Fk
KHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgcmVnVDEsIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAg
ICBBU1NFUlQocmV0dXJuVmFsdWVSZWdpc3RlciA9PSByZWdUMCk7CiAgICAganVtcChyZWdUMCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAKQEAgLTEwMjEsMTYgKzEwMjAsMTUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3RpbwogICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5jdGlPZmZzZXRz
Lmdyb3coanVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAKLSAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfc3dpdGNoX2NoYXIpOwotICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KHNjcnV0aW5lZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMy
KHRhYmxlSW5kZXgpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdExvYWQoc2NydXRp
bmVlLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hh
cldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDEsIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBBU1NF
UlQocmV0dXJuVmFsdWVSZWdpc3RlciA9PSByZWdUMCk7CiAgICAganVtcChyZWdUMCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIApAQCAtMTAzOCwxMCArMTAzNiw5IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3QKICAgICBTdHJpbmdKdW1wVGFibGUqIGp1
bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNv
ZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9zd2l0Y2hfc3RyaW5nKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzY3J1
dGluZWUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMih0YWJsZUluZGV4
KSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtu
b3duS2V5VHlwZSwgcmVnVDEsIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBBU1NFUlQocmV0dXJu
VmFsdWVSZWdpc3RlciA9PSByZWdUMCk7CiAgICAganVtcChyZWdUMCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTU3NDA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgyLDcgKzY4Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9u
KiBjdXIKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogCkBAIC02OTEsMTYgKzY5MSwxNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9uCiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNl
dCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmN0aU9mZnNldHMu
Z3JvdyhqdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKIAotICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9zd2l0Y2hfaW1tKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChzY3J1dGluZWUsIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tMzIodGFibGVJbmRleCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCByZWdUMSwgdGFibGVJbmRleCk7CisgICAg
QVNTRVJUKHJldHVyblZhbHVlUmVnaXN0ZXIgPT0gcmVnVDApOwogICAgIGp1bXAocmVnVDApOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogCkBAIC03MDksMTYgKzcwOCwxNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNldCwg
U3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmN0aU9mZnNldHMuZ3Jv
dyhqdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9zd2l0Y2hfY2hhcik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoc2NydXRpbmVlLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bTMyKHRhYmxlSW5kZXgpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIHJlZ1QxLCB0YWJsZUluZGV4KTsKKyAgICBB
U1NFUlQocmV0dXJuVmFsdWVSZWdpc3RlciA9PSByZWdUMCk7CiAgICAganVtcChyZWdUMCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIApAQCAtNzI2LDEwICs3MjQsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0CiAgICAgU3RyaW5nSnVtcFRhYmxlKiBq
dW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVj
b2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3Bfc3dpdGNoX3N0cmluZyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoc2Ny
dXRpbmVlLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKHRh
YmxlSW5kZXgpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgcmVnVDEsIHRhYmxlSW5kZXgpOworICAgIEFTU0VS
VChyZXR1cm5WYWx1ZVJlZ2lzdGVyID09IHJlZ1QwKTsKICAgICBqdW1wKHJlZ1QwKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxNTc0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTUsNiArODk1LDEzMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlOjpkZWNvZGUodmFsdWUpLnRvT2JqZWN0KGV4ZWMpKTsKIH0KIAorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEtleSwgc2l6ZV90IHRhYmxlSW5kZXgpCit7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKworICAgIFNp
bXBsZUp1bXBUYWJsZSYganVtcFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgdm9pZCogcmVzdWx0ID0ganVtcFRhYmxlLmN0aURlZmF1bHQuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKworICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgeworICAgICAgICBTdHJp
bmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGV4ZWMpLmltcGwoKTsKKyAgICAg
ICAgaWYgKHZhbHVlLT5sZW5ndGgoKSA9PSAxKQorICAgICAgICAgICAgcmVzdWx0ID0ganVtcFRh
YmxlLmN0aUZvclZhbHVlKCgqdmFsdWUpWzBdKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIH0K
KworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOworfQorCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRLZXksIHNpemVfdCB0YWJsZUluZGV4
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRLZXkpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
CisKKyAgICBTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIHZvaWQqIHJlc3VsdDsKKyAgICBpZiAoa2V5LmlzSW50
MzIoKSkKKyAgICAgICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aUZvclZhbHVlKGtleS5hc0ludDMy
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgZWxzZSBpZiAoa2V5LmlzRG91YmxlKCkgJiYg
a2V5LmFzRG91YmxlKCkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oa2V5LmFzRG91YmxlKCkpKQor
ICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3RpRm9yVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oa2V5LmFzRG91YmxlKCkpKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGVsc2UKKyAgICAg
ICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKK30KKworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkS2V5LCBzaXplX3QgdGFibGVJbmRleCkK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkS2V5KTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwor
CisgICAgdm9pZCogcmVzdWx0OworICAgIFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlID0gY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisKKyAgICBpZiAoa2V5
LmlzU3RyaW5nKCkpIHsKKyAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkp
LT52YWx1ZShleGVjKS5pbXBsKCk7CisgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlGb3JW
YWx1ZSh2YWx1ZSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVz
dWx0ID0ganVtcFRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVTY29wZShFeGVjU3RhdGUqIGV4ZWMsIGlu
dDMyX3QgaWRlbnRpZmllckluZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllcklu
ZGV4KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmUoZXhlYywg
ZXhlYy0+c2NvcGUoKSwgaWRlbnQpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogYnl0
ZWNvZGVQQykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOworICAgIEluc3RydWN0aW9uKiBwYyA9IGJ5dGVjb2RlUEM7CisKKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwY1szXS51
Lm9wZXJhbmQpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGV4ZWMt
PnVuY2hlY2tlZFIocGNbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCkpOworICAgIFJlc29sdmVNb2Rl
QW5kVHlwZSBtb2RlQW5kVHlwZShwY1s0XS51Lm9wZXJhbmQpOworCisgICAgUHJvcGVydHlTbG90
IHNsb3Qoc2NvcGUpOworICAgIGlmICghc2NvcGUtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVu
dCwgc2xvdCkpIHsKKyAgICAgICAgaWYgKG1vZGVBbmRUeXBlLm1vZGUoKSA9PSBUaHJvd0lmTm90
Rm91bmQpCisgICAgICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVVbmRlZmlu
ZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorCisgICAgLy8gQ292ZXJzIGltcGxpY2l0IGds
b2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3
ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUuCisgICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBzY29wZSAmJiBz
Y29wZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgeworICAg
ICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5IHx8IG1vZGVBbmRU
eXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAg
ICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgcGNb
Nl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkpOwor
fQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFeGVjU3RhdGUqIGV4
ZWMsIEluc3RydWN0aW9uKiBieXRlY29kZVBDKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEluc3Ry
dWN0aW9uKiBwYyA9IGJ5dGVjb2RlUEM7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2Nr
LT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganND
YXN0PEpTT2JqZWN0Kj4oZXhlYy0+dW5jaGVja2VkUihwY1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUo
KSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnIocGNbM10udS5vcGVyYW5kKS5qc1ZhbHVl
KCk7CisgICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRU
eXBlKHBjWzRdLnUub3BlcmFuZCk7CisKKyAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRo
cm93SWZOb3RGb3VuZCAmJiAhc2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkgeworICAg
ICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVVuZGVmaW5lZFZhcmlh
YmxlRXJyb3IoZXhlYywgaWRlbnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOworICAgIHNjb3Bl
LT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cisg
ICAgCisgICAgaWYgKGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0IHVu
dGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93IHRvIGNhY2hlIHRoZW0g
YXQgY29tcGlsZSB0aW1lLgorICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJv
cGVydHkgfHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykgeworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZSgpICYmIHNsb3QuYmFz
ZSgpID09IHNjb3BlICYmIHNjb3BlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+
dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSgpKTsK
KyAgICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKIEpJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAko
cmV2aXNpb24gMTU3NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgSnNzOiBKU1N0cmluZyoKICAgICBPOiBKU09iamVjdCoKICAgICBQOiBwb2ludGVyIChjaGFy
KikKKyAgICBQYzogSW5zdHJ1Y3Rpb24qIGkuZS4gYnl0ZWNvZGUgUEMKICAgICBSOiBSZWdpc3Rl
cgogICAgIFM6IHNpemVfdAogICAgIFN0OiBTdHJ1Y3R1cmUqCkBAIC05MCw2ICs5MSw3IEBAIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkoKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lk
Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FUFApKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBz
aXplX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRVBjKShFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiopOwogdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXpl
X3QsIHNpemVfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGlu
dDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwpAQCAtMTMwLDYgKzEzMiw3IEBAIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpDSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRUpKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VKUFApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2b2lkKiwgdm9p
ZCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUGMpKEV4
ZWNTdGF0ZSosIEluc3RydWN0aW9uKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNW
YWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1cpKFdh
dGNocG9pbnRTZXQqKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0
aW9uX0UpKEV4ZWNTdGF0ZSopOwpAQCAtMjUwLDYgKzI1MywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluCiBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3QgZmlyc3RGcmVlUmVnaXN0ZXIpIFdURl9JTlRF
Uk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9PYmplY3QoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIAorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgpIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgp
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVz
b2x2ZVNjb3BlKEV4ZWNTdGF0ZSosIGludDMyX3QgaWRlbnRpZmllckluZGV4KSBXVEZfSU5URVJO
QUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShF
eGVjU3RhdGUqLCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykgV1RGX0lOVEVSTkFMOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24q
IGJ5dGVjb2RlUEMpIFdURl9JTlRFUk5BTDsKKwogfSAvLyBleHRlcm4gIkMiCiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTc0MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzAxLDEwICsxMzAxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfc2Nv
cGUoSW5zdAogICAgICAgICByZXR1cm47CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0KLSAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV9zY29wZSk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
LSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgaW50MzJfdCBpbmRlbnRpZmllckluZGV4ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblJlc29sdmVTY29wZSwgZHN0LCBpbmRlbnRpZmllckluZGV4KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCkKQEAgLTEzNzcsMTAgKzEzNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoSW5zCiAgICAgICAgIHJldHVybjsKIAogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfZnJvbV9zY29w
ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1
Y3Rpb24pKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0aW9uKTsKICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHJlZ1Q0KTsKIH0KIApAQCAtMTQ0OCwxMCArMTQ0Myw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoSW5zdHIKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX3B1dF90b19zY29wZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1NzQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYyLDEw
ICsxMjYyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfc2NvcGUoSW5zdAogICAg
ICAgICByZXR1cm47CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0KLSAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV9zY29wZSk7Ci0gICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBzdHViQ2Fs
bC5jYWxsKGRzdCk7CisgICAgaW50MzJfdCBpbmRlbnRpZmllckluZGV4ID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVT
Y29wZSwgZHN0LCBpbmRlbnRpZmllckluZGV4KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKQEAg
LTEzMzUsMTAgKzEzMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
SW5zCiAgICAgICAgIHJldHVybjsKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLQotICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfZnJvbV9zY29wZSk7Ci0gICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAg
ICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRGcm9t
U2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKHJlZ1Q0KTsKIH0KIApAQCAtMTQwMywxMCArMTM5OCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfdG9fc2NvcGUoSW5zdHIKICAgICAgICAgcmV0dXJuOwogCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF90
b19zY29wZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50
SW5zdHJ1Y3Rpb24pKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRUb1Njb3BlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1
NzQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzY3LDYzICsxMzY3LDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfcHV0X2J5X2luZAogICAgIGFzQXJyYXkoYXJyYXlWYWx1ZSktPnB1dERpcmVjdEluZGV4KGNh
bGxGcmFtZSwgcHJvcGVydHksIHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCkpOwogfQogCi1E
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3Bfc3dpdGNoX2ltbSkKLXsKLSAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIHNjcnV0aW5lZSA9IHN0
YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgdW5zaWduZWQgdGFibGVJbmRleCA9IHN0
YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotCi0gICAgaWYgKHNjcnV0aW5lZS5pc0ludDMyKCkpCi0gICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShz
Y3J1dGluZWUuYXNJbnQzMigpKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgIGlmIChzY3J1dGlu
ZWUuaXNEb3VibGUoKSAmJiBzY3J1dGluZWUuYXNEb3VibGUoKSA9PSBzdGF0aWNfY2FzdDxpbnQz
Ml90PihzY3J1dGluZWUuYXNEb3VibGUoKSkpCi0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90
PihzY3J1dGluZWUuYXNEb3VibGUoKSkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgcmV0dXJu
IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aURlZmF1bHQuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX3N3aXRj
aF9jaGFyKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAg
IEpTVmFsdWUgc2NydXRpbmVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICB1
bnNpZ25lZCB0YWJsZUluZGV4ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCk7Ci0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICB2b2lkKiByZXN1bHQg
PSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlEZWZhdWx0LmV4ZWN1
dGFibGVBZGRyZXNzKCk7Ci0KLSAgICBpZiAoc2NydXRpbmVlLmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhzY3J1dGluZWUpLT52YWx1ZShjYWxsRnJh
bWUpLmltcGwoKTsKLSAgICAgICAgaWYgKHZhbHVlLT5sZW5ndGgoKSA9PSAxKQotICAgICAgICAg
ICAgcmVzdWx0ID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9y
VmFsdWUoKCp2YWx1ZSlbMF0pLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgfQotCi0gICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3Bfc3dpdGNoX3N0cmluZykKLXsKLSAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIHNjcnV0aW5lZSA9IHN0
YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgdW5zaWduZWQgdGFibGVJbmRleCA9IHN0
YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotCi0gICAgdm9pZCogcmVzdWx0ID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwot
Ci0gICAgaWYgKHNjcnV0aW5lZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHZh
bHVlID0gYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFsdWUoY2FsbEZyYW1lKS5pbXBsKCk7Ci0gICAg
ICAgIHJlc3VsdCA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
LmN0aUZvclZhbHVlKHZhbHVlKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgIH0KLQotICAgIENI
RUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2dldHRlcl9zZXR0ZXIpCiB7CiAgICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMTUwOSw4NCArMTQ1Miw2IEBAIEV4
Y2VwdGlvbkhhbmRsZXIgSklUX1NUVUIgY3RpX3ZtX2hhbmRsZV8KIH0KICNlbmRpZgogCi1ERUZJ
TkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfcmVzb2x2ZV9zY29wZSkKLXsKLSAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgRXhlY1N0YXRlKiBleGVj
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSW5zdHJ1Y3Rpb24qIHBjID0gc3RhY2tGcmFt
ZS5hcmdzWzBdLnBjKCk7Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsIGV4ZWMtPnNjb3BlKCksIGlkZW50KSk7
Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfZnJvbV9z
Y29wZSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgRXhl
Y1N0YXRlKiBleGVjID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSW5zdHJ1Y3Rpb24qIHBj
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLnBjKCk7Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7Ci0gICAg
SlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+dW5jaGVja2VkUihwY1sy
XS51Lm9wZXJhbmQpLmpzVmFsdWUoKSk7Ci0gICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRU
eXBlKHBjWzRdLnUub3BlcmFuZCk7Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSk7Ci0g
ICAgaWYgKCFzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAg
ICAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RGb3VuZCkgewotICAgICAg
ICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7Ci0gICAgICAgICAgICBWTV9USFJPV19FWENFUFRJT04o
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIH0KLQotICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5
IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93
IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gc2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgp
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAgaWYgKG1vZGVBbmRU
eXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcGNbNV0u
dS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHNjb3BlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSk7Ci19Ci0KLURFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wX3B1dF90b19zY29wZSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gc3RhY2tGcmFtZS5jYWxsRnJh
bWU7Ci0gICAgSW5zdHJ1Y3Rpb24qIHBjID0gc3RhY2tGcmFtZS5hcmdzWzBdLnBjKCk7Ci0KLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7
Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+dW5jaGVja2Vk
UihwY1sxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMt
PnIocGNbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1v
ZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBjWzRdLnUub3BlcmFuZCk7Ci0KLSAgICBp
ZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RGb3VuZCAmJiAhc2NvcGUtPmhhc1By
b3BlcnR5KGV4ZWMsIGlkZW50KSkgewotICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKTsKLSAgICAg
ICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7Ci0g
ICAgc2NvcGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIHZhbHVlLCBz
bG90KTsKLSAgICAKLSAgICBpZiAoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkgewotICAgICAgICBW
TV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4gU2luY2UgdGhleSBkb24ndCBleGlzdCB1bnRp
bCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0byBjYWNoZSB0aGVtIGF0
IGNvbXBpbGUgdGltZS4KLSAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3Bl
cnR5IHx8IG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpIHsKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGUoKSAmJiBzbG90LmJhc2Uo
KSA9PSBzY29wZSAmJiBzY29wZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1Y3R1cmUoKSk7Ci0g
ICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAg
ICB9Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxNTc0
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2NywxNiArMzY3LDkgQEAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGhyb3dfc3RhdGlj
X2Vycm9yKAogI2lmIEVOQUJMRShERkdfSklUKQogdm9pZCBKSVRfU1RVQiBjdGlfb3B0aW1pemUo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYKLXZvaWQqIEpJVF9T
VFVCIGN0aV9vcF9zd2l0Y2hfY2hhcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKLXZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0Y2hfaW1tKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwotdm9pZCogSklUX1NUVUIgY3RpX29wX3N3aXRjaF9zdHJpbmcoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkKiBKSVRfU1RVQiBjdGlfb3Bf
dGhyb3coU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkKiBKSVRfU1RV
QiBjdGlfdm1fdGhyb3coU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBSRUZFUkVOQ0VEX0ZST01fQVNN
IFdURl9JTlRFUk5BTDsKIAotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX3Jlc29sdmVf
c2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1
ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2Zyb21fc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfdG9fc2NvcGUoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogRW5j
b2RlZEV4Y2VwdGlvbkhhbmRsZXIgSklUX1NUVUIgY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24oQ2Fs
bEZyYW1lKikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiAjZWxzZQo=
</data>
<flag name="review"
          id="236724"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>