<?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>19457</bug_id>
          
          <creation_ts>2008-06-09 20:49:10 -0700</creation_ts>
          <short_desc>Create fused opcodes for tests and conditional jumps</short_desc>
          <delta_ts>2012-09-07 00:31:16 -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>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>82795</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-09 20:49:10 -0700</bug_when>
    <thetext>We have been talking about creating superinstructions for a while now. I added some instrumentation to the VM (enable DUMP_OPCODE_STATS in Opcode.h in a debug build to use it) in order to see which pairs of opcodes are most common. The most common pairs are of the form (&lt;test&gt;, &lt;conditional jump&gt;), so I figured that would be a good place to start.

The most common of these is (less, jtrue), which is 6.41% of all instruction pairs on SunSpider. I made a patch that adds a new jless instruction, which gives a 3.6% improvement on SunSpider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82796</commentid>
    <comment_count>1</comment_count>
      <attachid>21598</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-09 20:57:39 -0700</bug_when>
    <thetext>Created attachment 21598
Proposed patch

Here&apos;s the patch. One issue I see is that CodeGenerator::lastOpcodeID is uninitialized. I wasn&apos;t sure of the best way to do it, because OpcodeID is an enum. Any suggestions? The documentation for j_less is also wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82872</commentid>
    <comment_count>2</comment_count>
      <attachid>21613</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-10 17:28:23 -0700</bug_when>
    <thetext>Created attachment 21613
Revised proposed patch

Maciej says that this method of doing peephole optimizations won&apos;t conflict with his plans for fusing loads into other operations, so here&apos;s a cleaned up version of the patch for review. I initialize m_lastOpcodeID to op_end, since no optimization will ever optimize a sequence starting with op_end.

We still might want to consider a different method of code generation that incorporates all of these optimizations, but we might as well test them out incrementally before we go rewriting everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82982</commentid>
    <comment_count>3</comment_count>
      <attachid>21613</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-11 11:57:40 -0700</bug_when>
    <thetext>Comment on attachment 21613
Revised proposed patch

 395 void CodeGenerator::retrieveLastBinaryOp(int&amp; dstIndex, int&amp; src1Index, int&amp; src2Index)
 396 {
 397     size_t size = instructions().size();
 398     dstIndex = instructions().at(size - 3).u.operand;
 399     src1Index = instructions().at(size - 2).u.operand;
 400     src2Index = instructions().at(size - 1).u.operand;
 401 }

This should assert that size is &gt;= 4.

 405     instructions().shrink(instructions().size() - 4);

 403 void CodeGenerator::rewindBinaryOp()
 404 {
 405     instructions().shrink(instructions().size() - 4);
 406 }

This too.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83008</commentid>
    <comment_count>4</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-11 12:52:09 -0700</bug_when>
    <thetext>Landed in r34497. I will keep this bug open to discuss other possibilities for test / jump opcode fusion, but this was definitely the most common case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84309</commentid>
    <comment_count>5</comment_count>
      <attachid>21613</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-24 14:38:09 -0700</bug_when>
    <thetext>Comment on attachment 21613
Revised proposed patch

Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237187</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-11 17:41:37 -0700</bug_when>
    <thetext>Is this bug still actionable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714213</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-09-07 00:31:16 -0700</bug_when>
    <thetext>Further bytecode superinstructions is not something we&apos;re likely to do right now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21598</attachid>
            <date>2008-06-09 20:57:39 -0700</date>
            <delta_ts>2008-06-10 17:28:23 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>jless.diff</filename>
            <type>text/plain</type>
            <size>34731</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM0NDc0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTcgQEAKKzIwMDgtMDYt
MDkgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE5NDU3OiBDcmVhdGUg
ZnVzZWQgb3Bjb2RlcyBmb3IgdGVzdHMgYW5kIGNvbmRpdGlvbmFsIGp1bXBzCisgICAgICAgIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0NTc+CisKKyAgICAgICAg
QWRkIGEgbmV3IGpsZXNzIGluc3RydWN0aW9uLCBhbmQgbW9kaWZ5IHRoZSBjb2RlIGdlbmVyYXRv
ciB0byBlbWl0IGl0CisgICAgICAgIGluc3RlYWQgb2YgdGhlIHBhaXIgKGxlc3MsIGp0cnVlKS4K
KworICAgICAgICBHaXZlcyBhIDMuNiUgaW1wcm92ZW1lbnQgb24gU3VuU3BpZGVyLgorCisgICAg
ICAgICogVk0vQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEtKUzo6Q29kZUJsb2NrOjpkdW1wKToK
KyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVy
YXRvcjo6ZW1pdE9wY29kZSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OnJldHJpZXZl
TGFzdEJpbmFyeU9wKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6cmV3aW5kQmluYXJ5
T3ApOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0SnVtcCk6CisgICAgICAgIChL
SlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZUcnVlKToKKyAgICAgICAgKEtKUzo6Q29kZUdl
bmVyYXRvcjo6ZW1pdEp1bXBJZkZhbHNlKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6
ZW1pdE1vdmUpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0Tm90KToKKyAgICAg
ICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsKToKKyAgICAgICAgKEtKUzo6Q29kZUdl
bmVyYXRvcjo6ZW1pdE5vdEVxdWFsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1p
dFN0cmljdEVxdWFsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5vdFN0cmlj
dEVxdWFsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdExlc3MpOgorICAgICAg
ICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0TGVzc0VxKToKKyAgICAgICAgKEtKUzo6Q29kZUdl
bmVyYXRvcjo6ZW1pdFByZUluYyk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRQ
cmVEZWMpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0UG9zdEluYyk6CisgICAg
ICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRQb3N0RGVjKToKKyAgICAgICAgKEtKUzo6Q29k
ZUdlbmVyYXRvcjo6ZW1pdFRvSlNOdW1iZXIpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9y
OjplbWl0TmVnYXRlKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEFkZCk6Cisg
ICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRNdWwpOgorICAgICAgICAoS0pTOjpDb2Rl
R2VuZXJhdG9yOjplbWl0RGl2KToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE1v
ZCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRTdWIpOgorICAgICAgICAoS0pT
OjpDb2RlR2VuZXJhdG9yOjplbWl0TGVmdFNoaWZ0KToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVy
YXRvcjo6ZW1pdFJpZ2h0U2hpZnQpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0
VW5zaWduZWRSaWdodFNoaWZ0KToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEJp
dEFuZCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRCaXRYT3IpOgorICAgICAg
ICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0Qml0T3IpOgorICAgICAgICAoS0pTOjpDb2RlR2Vu
ZXJhdG9yOjplbWl0Qml0Tm90KToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdElu
c3RhbmNlT2YpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0VHlwZU9mKToKKyAg
ICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEluKToKKyAgICAgICAgKEtKUzo6Q29kZUdl
bmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0TmV3
T2JqZWN0KToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5ld0FycmF5KToKKyAg
ICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmUpOgorICAgICAgICAoS0pTOjpD
b2RlR2VuZXJhdG9yOjplbWl0R2V0U2NvcGVkVmFyKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVy
YXRvcjo6ZW1pdFB1dFNjb3BlZFZhcik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVt
aXRSZXNvbHZlQmFzZSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZl
V2l0aEJhc2UpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUZ1bmN0
aW9uKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5SWQpOgorICAgICAg
ICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChLSlM6OkNvZGVH
ZW5lcmF0b3I6OmVtaXRQdXRHZXR0ZXIpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjpl
bWl0UHV0U2V0dGVyKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdERlbGV0ZUJ5
SWQpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwpOgorICAgICAg
ICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0UHV0QnlWYWwpOgorICAgICAgICAoS0pTOjpDb2Rl
R2VuZXJhdG9yOjplbWl0RGVsZXRlQnlWYWwpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9y
OjplbWl0UHV0QnlJbmRleCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXROZXdG
dW5jdGlvbik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXROZXdSZWdFeHApOgor
ICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKToK
KyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoS0pTOjpD
b2RlR2VuZXJhdG9yOjplbWl0UmV0dXJuKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6
ZW1pdEVuZCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QpOgor
ICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKToKKyAgICAgICAgKEtK
Uzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFBvcFNjb3BlKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVy
YXRvcjo6ZW1pdERlYnVnSG9vayk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRD
b21wbGV4SnVtcFNjb3Blcyk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRKdW1w
U2NvcGVzKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5leHRQcm9wZXJ0eU5h
bWUpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRDYXRjaCk6CisgICAgICAgIChLSlM6
OkNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvdyk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6
OmVtaXROZXdFcnJvcik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wU3Vi
cm91dGluZSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRTdWJyb3V0aW5lUmV0
dXJuKToKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogVk0vTWFjaGlu
ZS5jcHA6CisgICAgICAgIChLSlM6Ok1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAg
KiBWTS9PcGNvZGUuY3BwOgorICAgICAgICAoS0pTOjopOgorICAgICAgICAqIFZNL09wY29kZS5o
OgorCiAyMDA4LTA2LTA5ICBDYW1lcm9uIFp3YXJpY2ggIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNh
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4KSW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMzQ0NzIpCisrKyBWTS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDE0IEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAgIHByaW50Q29uZGl0aW9u
YWxKdW1wKGJlZ2luLCBpdCwgbG9jYXRpb24sICJqZmFsc2UiKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfamxlc3M6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludGYoIlslNGRdIGpsZXNzXHRcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBsb2Nh
dGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCks
IG9mZnNldCwganVtcFRhcmdldChiZWdpbiwgaXQsIG9mZnNldCkpOworICAgICAgICAgICAgLy8g
cHJpbnRmKCJbJTRkXSAlc1x0XHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIG9wLCByZWdpc3Rl
ck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19zdHIoKSwgcmVnaXN0ZXJOYW1l
KHIyKS5jX3N0cigpKTsgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsKICAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2Vu
ZXJhdG9yLmNwcAkocmV2aXNpb24gMzQ0NzIpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgzLDE2ICszODMsNTIgQEAgUGFzc1JlZlB0cjxMYWJlbElEPiBDb2Rl
R2VuZXJhdG9yOjplbWl0TAogICAgIHJldHVybiBsMDsKIH0KIAordm9pZCBDb2RlR2VuZXJhdG9y
OjplbWl0T3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wY29kZUlEKSk7CisgICAgbV9sYXN0T3Bjb2RlSUQg
PSBvcGNvZGVJRDsKK30KKwordm9pZCBDb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxhc3RCaW5hcnlP
cChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgpCit7CisgICAg
c2l6ZV90IHNpemUgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZHN0SW5kZXggPSBpbnN0
cnVjdGlvbnMoKS5hdChzaXplIC0gMykudS5vcGVyYW5kOworICAgIHNyYzFJbmRleCA9IGluc3Ry
dWN0aW9ucygpLmF0KHNpemUgLSAyKS51Lm9wZXJhbmQ7CisgICAgc3JjMkluZGV4ID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoc2l6ZSAtIDEpLnUub3BlcmFuZDsKK30KKwordm9pZCBDb2RlR2VuZXJhdG9y
OjpyZXdpbmRCaW5hcnlPcCgpCit7CisgICAgaW5zdHJ1Y3Rpb25zKCkuc2hyaW5rKGluc3RydWN0
aW9ucygpLnNpemUoKSAtIDQpOworfQorCiBQYXNzUmVmUHRyPExhYmVsSUQ+IENvZGVHZW5lcmF0
b3I6OmVtaXRKdW1wKExhYmVsSUQqIHRhcmdldCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobWFjaGluZSgpLmdldE9wY29kZShvcF9qbXApKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2ptcCk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+b2Zmc2V0RnJvbShpbnN0cnVjdGlv
bnMoKS5zaXplKCkpKTsKICAgICByZXR1cm4gdGFyZ2V0OwogfQogCiBQYXNzUmVmUHRyPExhYmVs
SUQ+IENvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZUcnVlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVs
SUQqIHRhcmdldCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9w
Y29kZShvcF9qdHJ1ZSkpOworICAgIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9sZXNzKSB7Cisg
ICAgICAgIGludCBkc3RJbmRleDsKKyAgICAgICAgaW50IHNyYzFJbmRleDsKKyAgICAgICAgaW50
IHNyYzJJbmRleDsKKyAgICAgICAgCisgICAgICAgIHJldHJpZXZlTGFzdEJpbmFyeU9wKGRzdElu
ZGV4LCBzcmMxSW5kZXgsIHNyYzJJbmRleCk7CisgICAgICAgIAorICAgICAgICBpZiAoY29uZC0+
aW5kZXgoKSA9PSBkc3RJbmRleCkgeworICAgICAgICAgICAgcmV3aW5kQmluYXJ5T3AoKTsKKyAg
ICAgICAgICAgIGVtaXRPcGNvZGUob3Bfamxlc3MpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHNyYzFJbmRleCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
c3JjMkluZGV4KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPm9m
ZnNldEZyb20oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXR1cm4gdGFy
Z2V0OworICAgICAgICB9ICAgICAgICAKKyAgICB9CisgICAgCisgICAgZW1pdE9wY29kZShvcF9q
dHJ1ZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbmQtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPm9mZnNldEZyb20oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKSk7CiAgICAgcmV0dXJuIHRhcmdldDsKQEAgLTQwMCw3ICs0MzYsNyBAQCBQYXNzUmVmUHRy
PExhYmVsSUQ+IENvZGVHZW5lcmF0b3I6OmVtaXRKCiAKIFBhc3NSZWZQdHI8TGFiZWxJRD4gQ29k
ZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsSUQqIHRh
cmdldCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShv
cF9qZmFsc2UpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2pmYWxzZSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGNvbmQtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJn
ZXQtPm9mZnNldEZyb20oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CiAgICAgcmV0dXJuIHRhcmdl
dDsKQEAgLTQ1MCw3ICs0ODYsNyBAQCB1bnNpZ25lZCBDb2RlR2VuZXJhdG9yOjphZGRSZWdFeHAo
UmVnRXhwCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNo
aW5lKCkuZ2V0T3Bjb2RlKG9wX21vdikpOworICAgIGVtaXRPcGNvZGUob3BfbW92KTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoc3JjLT5pbmRleCgpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtNDU4LDcgKzQ5NCw3IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKFJlZ2kKIAogUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdE5vdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykK
IHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9ub3Qp
KTsKKyAgICBlbWl0T3Bjb2RlKG9wX25vdCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CiAg
ICAgcmV0dXJuIGRzdDsKQEAgLTQ2Niw3ICs1MDIsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJh
dG9yOjplbWl0Tm90KFJlZ2lzCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRFcXVh
bChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpCiB7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfZXEpKTsK
KyAgICBlbWl0T3Bjb2RlKG9wX2VxKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMS0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzItPmluZGV4KCkpOwpAQCAtNDc1LDcgKzUxMSw3IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbChSZWcKIAogUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdE5vdEVxdWFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjMSwgUmVnaXN0ZXJJRCogc3JjMikKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFj
aGluZSgpLmdldE9wY29kZShvcF9uZXEpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX25lcSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHNyYzEtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMyLT5p
bmRleCgpKTsKQEAgLTQ4NCw3ICs1MjAsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0Tm90RXF1YWwoCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRTdHJpY3RFcXVh
bChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpCiB7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bfc3RyaWN0
ZXEpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3N0cmljdGVxKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMS0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzItPmluZGV4KCkpOwpAQCAtNDkz
LDcgKzUyOSw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRTdHJpY3RFcXUKIAog
UmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdE5vdFN0cmljdEVxdWFsKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMikKIHsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9uc3RyaWN0ZXEpKTsKKyAgICBl
bWl0T3Bjb2RlKG9wX3N0cmljdGVxKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMS0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzItPmluZGV4KCkpOwpAQCAtNTAyLDcgKzUzOCw3IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROb3RTdHJpY3QKIAogUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdExlc3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMx
LCBSZWdpc3RlcklEKiBzcmMyKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5l
KCkuZ2V0T3Bjb2RlKG9wX2xlc3MpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2xlc3MpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChzcmMxLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMi0+aW5k
ZXgoKSk7CkBAIC01MTEsNyArNTQ3LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dExlc3MoUmVnaQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TGVzc0VxKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMikKIHsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9sZXNzZXEpKTsKKyAg
ICBlbWl0T3Bjb2RlKG9wX2xlc3NlcSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzEtPmluZGV4KCkpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMyLT5pbmRleCgpKTsKQEAgLTUyMCwyMSArNTU2LDIx
IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRMZXNzRXEoUmUKIAogUmVnaXN0ZXJJ
RCogQ29kZUdlbmVyYXRvcjo6ZW1pdFByZUluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcHJlX2luYykpOwor
ICAgIGVtaXRPcGNvZGUob3BfcHJlX2luYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNy
Y0RzdC0+aW5kZXgoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQ29k
ZUdlbmVyYXRvcjo6ZW1pdFByZURlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcHJlX2RlYykpOworICAgIGVt
aXRPcGNvZGUob3BfcHJlX2RlYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyY0RzdC0+
aW5kZXgoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVy
YXRvcjo6ZW1pdFBvc3RJbmMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmNEc3QpCiB7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcG9zdF9p
bmMpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3Bvc3RfaW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjRHN0LT5p
bmRleCgpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtNTQyLDcgKzU3OCw3IEBAIFJlZ2lzdGVySUQq
IENvZGVHZW5lcmF0b3I6OmVtaXRQb3N0SW5jKFIKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRv
cjo6ZW1pdFBvc3REZWMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcG9zdF9kZWMp
KTsKKyAgICBlbWl0T3Bjb2RlKG9wX3Bvc3RfZGVjKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjRHN0LT5pbmRl
eCgpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtNTUwLDcgKzU4Niw3IEBAIFJlZ2lzdGVySUQqIENv
ZGVHZW5lcmF0b3I6OmVtaXRQb3N0RGVjKFIKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6
ZW1pdFRvSlNOdW1iZXIoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiB7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfdG9fanNudW1iZXIp
KTsKKyAgICBlbWl0T3Bjb2RlKG9wX3RvX2pzbnVtYmVyKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRl
eCgpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtNTU4LDcgKzU5NCw3IEBAIFJlZ2lzdGVySUQqIENv
ZGVHZW5lcmF0b3I6OmVtaXRUb0pTTnVtYmUKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6
ZW1pdE5lZ2F0ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKIHsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9uZWdhdGUpKTsKKyAgICBl
bWl0T3Bjb2RlKG9wX25lZ2F0ZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CiAgICAgcmV0
dXJuIGRzdDsKQEAgLTU2Niw3ICs2MDIsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0TmVnYXRlKFJlCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRBZGQoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyKQogewotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2FkZCkpOworICAgIGVt
aXRPcGNvZGUob3BfYWRkKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHNyYzItPmluZGV4KCkpOwpAQCAtNTc1LDcgKzYxMSw3IEBAIFJlZ2lz
dGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRBZGQoUmVnaXMKIAogUmVnaXN0ZXJJRCogQ29kZUdl
bmVyYXRvcjo6ZW1pdE11bChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lz
dGVySUQqIHNyYzIpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRP
cGNvZGUob3BfbXVsKSk7CisgICAgZW1pdE9wY29kZShvcF9tdWwpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMx
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMi0+aW5kZXgoKSk7CkBA
IC01ODQsNyArNjIwLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdE11bChSZWdp
cwogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0RGl2KFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZGl2aWRlbmQsIFJlZ2lzdGVySUQqIGRpdmlzb3IpCiB7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfZGl2KSk7CisgICAgZW1pdE9w
Y29kZShvcF9kaXYpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkaXZpZGVuZC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGRpdmlzb3ItPmluZGV4KCkpOwpAQCAtNTkzLDcgKzYyOSw3IEBAIFJl
Z2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXREaXYoUmVnaXMKIAogUmVnaXN0ZXJJRCogQ29k
ZUdlbmVyYXRvcjo6ZW1pdE1vZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGRpdmlkZW5k
LCBSZWdpc3RlcklEKiBkaXZpc29yKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNo
aW5lKCkuZ2V0T3Bjb2RlKG9wX21vZCkpOworICAgIGVtaXRPcGNvZGUob3BfbW9kKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZGl2aWRlbmQtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkaXZp
c29yLT5pbmRleCgpKTsKQEAgLTYwMiw3ICs2MzgsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJh
dG9yOjplbWl0TW9kKFJlZ2lzCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRTdWIo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyKQogewot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3N1YikpOwor
ICAgIGVtaXRPcGNvZGUob3Bfc3ViKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMS0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzItPmluZGV4KCkpOwpAQCAtNjExLDcgKzY0Nyw3IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRTdWIoUmVnaXMKIAogUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdExlZnRTaGlmdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHZhbCwgUmVnaXN0ZXJJRCogc2hpZnQpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1h
Y2hpbmUoKS5nZXRPcGNvZGUob3BfbHNoaWZ0KSk7CisgICAgZW1pdE9wY29kZShvcF9sc2hpZnQp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCh2YWwtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChz
aGlmdC0+aW5kZXgoKSk7CkBAIC02MjAsNyArNjU2LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVy
YXRvcjo6ZW1pdExlZnRTaGlmdAogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Umln
aHRTaGlmdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHZhbCwgUmVnaXN0ZXJJRCogc2hp
ZnQpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bf
cnNoaWZ0KSk7CisgICAgZW1pdE9wY29kZShvcF9yc2hpZnQpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWwtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzaGlmdC0+aW5kZXgoKSk7CkBAIC02
MjksNyArNjY1LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFJpZ2h0U2hpZgog
CiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0VW5zaWduZWRSaWdodFNoaWZ0KFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsLCBSZWdpc3RlcklEKiBzaGlmdCkKIHsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF91cnNoaWZ0KSk7Cisg
ICAgZW1pdE9wY29kZShvcF91cnNoaWZ0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsLT5pbmRleCgpKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2hpZnQtPmluZGV4KCkpOwpAQCAtNjM4LDcgKzY3NCw3
IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRVbnNpZ25lZFIKIAogUmVnaXN0ZXJJ
RCogQ29kZUdlbmVyYXRvcjo6ZW1pdEJpdEFuZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1h
Y2hpbmUoKS5nZXRPcGNvZGUob3BfYml0YW5kKSk7CisgICAgZW1pdE9wY29kZShvcF9iaXRhbmQp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChzcmMxLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
c3JjMi0+aW5kZXgoKSk7CkBAIC02NDcsNyArNjgzLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVy
YXRvcjo6ZW1pdEJpdEFuZChSZQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Qml0
WE9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMikK
IHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9iaXR4
b3IpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2JpdHhvcik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzEtPmluZGV4
KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMyLT5pbmRleCgpKTsKQEAgLTY1Niw3
ICs2OTIsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Qml0WE9yKFJlCiAKIFJl
Z2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRCaXRPcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfYml0b3IpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2Jp
dG9yKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoc3JjMS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHNyYzItPmluZGV4KCkpOwpAQCAtNjY1LDcgKzcwMSw3IEBAIFJlZ2lzdGVySUQqIENvZGVH
ZW5lcmF0b3I6OmVtaXRCaXRPcihSZWcKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dEJpdE5vdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKIHsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9iaXRub3QpKTsKKyAgICBlbWl0
T3Bjb2RlKG9wX2JpdG5vdCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CiAgICAgcmV0dXJu
IGRzdDsKQEAgLTY3Myw3ICs3MDksNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0
Qml0Tm90KFJlCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5jZU9mKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2UpCiB7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfaW5zdGFuY2Vv
ZikpOworICAgIGVtaXRPcGNvZGUob3BfaW5zdGFuY2VvZik7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CkBAIC02
ODIsNyArNzE4LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEluc3RhbmNlTwog
CiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0VHlwZU9mKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCku
Z2V0T3Bjb2RlKG9wX3R5cGVvZikpOworICAgIGVtaXRPcGNvZGUob3BfdHlwZW9mKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoc3JjLT5pbmRleCgpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtNjkwLDcgKzcyNiw3IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRUeXBlT2YoUmUKIAogUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdEluKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogcHJvcGVy
dHksIFJlZ2lzdGVySUQqIGJhc2UpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hp
bmUoKS5nZXRPcGNvZGUob3BfaW4pKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2luKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocHJvcGVydHktPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5p
bmRleCgpKTsKQEAgLTY5OSw3ICs3MzUsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0SW4oUmVnaXN0CiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lz
dGVySUQqIGRzdCwgYm9vbCBiKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5l
KCkuZ2V0T3Bjb2RlKG9wX2xvYWQpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2xvYWQpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChhZGRDb25zdGFudChqc0Jvb2xlYW4oYikpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtNzA3
LDcgKzc0Myw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2kKIAog
UmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3Vi
bGUgZCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShv
cF9sb2FkKSk7CisgICAgZW1pdE9wY29kZShvcF9sb2FkKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3Rh
bnQoanNOdW1iZXIoZCkpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtNzE1LDcgKzc1MSw3IEBAIFJl
Z2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2kKIAogUmVnaXN0ZXJJRCogQ29k
ZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlKiB2KQogewotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2xvYWQpKTsKKyAg
ICBlbWl0T3Bjb2RlKG9wX2xvYWQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2KSk7CiAgICAg
cmV0dXJuIGRzdDsKQEAgLTcyMywxNCArNzU5LDE0IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRMb2FkKFJlZ2kKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdE5ld09i
amVjdChSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hp
bmUoKS5nZXRPcGNvZGUob3BfbmV3X29iamVjdCkpOworICAgIGVtaXRPcGNvZGUob3BfbmV3X29i
amVjdCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgcmV0
dXJuIGRzdDsKIH0KIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdE5ld0FycmF5KFJl
Z2lzdGVySUQqIGRzdCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdl
dE9wY29kZShvcF9uZXdfYXJyYXkpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX25ld19hcnJheSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgcmV0dXJuIGRzdDsK
IH0KQEAgLTc3Nyw3ICs4MTMsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmVz
b2x2ZShSCiAgICAgaW50IGluZGV4ID0gMDsKICAgICBpZiAoIWZpbmRTY29wZWRQcm9wZXJ0eShw
cm9wZXJ0eSwgaW5kZXgsIGRlcHRoKSkgewogICAgICAgICAvLyBXZSBjYW4ndCBvcHRpbWlzZSBh
dCBhbGwgOi0oCi0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bj
b2RlKG9wX3Jlc29sdmUpKTsKKyAgICAgICAgZW1pdE9wY29kZShvcF9yZXNvbHZlKTsKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAgICAgICByZXR1cm4gZHN0
OwpAQCAtNzg2LDcgKzgyMiw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRSZXNv
bHZlKFIKICAgICBpZiAoaW5kZXggPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7CiAgICAgICAg
IC8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgYXQgbGVhc3QgYWJsZSB0byBkcm9wIGEgZmV3IHNjb3Bl
IGNoYWlucyBmcm9tIHRoZQogICAgICAgICAvLyBsb29rdXAgY2hhaW4sIGFsdGhvdWdoIHdlIHN0
aWxsIG5lZWQgdG8gaGFzaCBmcm9tIHRoZW4gb24uCi0gICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3Jlc29sdmVfc2tpcCkpOworICAgICAgICBlbWl0
T3Bjb2RlKG9wX3Jlc29sdmVfc2tpcCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
cHJvcGVydHkpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRlcHRoKTsKQEAgLTc5
OSw3ICs4MzUsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZShSCiAK
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRHZXRTY29wZWRWYXIoUmVnaXN0ZXJJRCog
ZHN0LCBzaXplX3QgZGVwdGgsIGludCBpbmRleCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobWFjaGluZSgpLmdldE9wY29kZShvcF9nZXRfc2NvcGVkX3ZhcikpOworICAgIGVtaXRPcGNv
ZGUob3BfZ2V0X3Njb3BlZF92YXIpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleCk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRlcHRoKTsKQEAgLTgwOCw3ICs4NDQsNyBAQCBSZWdpc3RlcklEKiBDb2Rl
R2VuZXJhdG9yOjplbWl0R2V0U2NvcGVkCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVt
aXRQdXRTY29wZWRWYXIoc2l6ZV90IGRlcHRoLCBpbnQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVl
KQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3B1
dF9zY29wZWRfdmFyKSk7CisgICAgZW1pdE9wY29kZShvcF9wdXRfc2NvcGVkX3Zhcik7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZGVwdGgpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CkBAIC04
MTcsNyArODUzLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNjb3BlZAog
CiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2UoUmVnaXN0ZXJJRCog
ZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9yZXNvbHZlX2Jhc2UpKTsKKyAgICBlbWl0T3Bj
b2RlKG9wX3Jlc29sdmVfYmFzZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7
CiAgICAgcmV0dXJuIGRzdDsKQEAgLTgyNSw3ICs4NjEsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2Vu
ZXJhdG9yOjplbWl0UmVzb2x2ZUJhCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRS
ZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX2Jhc2UpKTsKKyAgICBlbWl0T3Bj
b2RlKG9wX3Jlc29sdmVfd2l0aF9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFz
ZURzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BEc3QtPmluZGV4
KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwpA
QCAtODM0LDcgKzg3MCw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZl
V2kKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVGdW5jdGlvbihSZWdp
c3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcklEKiBmdW5jRHN0LCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29k
ZShvcF9yZXNvbHZlX2Z1bmMpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfZnVuYyk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2VEc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChmdW5jRHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKQEAgLTg0Myw3ICs4NzksNyBAQCBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUZ1CiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRHZXRCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHkpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hp
bmUoKS5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkKSk7CisgICAgZW1pdE9wY29kZShvcF9nZXRfYnlf
aWQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKQEAgLTg1Miw3ICs4ODgsNyBAQCBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlJZChSCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRQdXRCeUlkKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5LCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFj
aGluZSgpLmdldE9wY29kZShvcF9wdXRfYnlfaWQpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3B1dF9i
eV9pZCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CkBAIC04NjEsNyArODk3LDcgQEAgUmVnaXN0
ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5SWQoUgogCiBSZWdpc3RlcklEKiBDb2RlR2Vu
ZXJhdG9yOjplbWl0UHV0R2V0dGVyKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobWFjaGluZSgpLmdldE9wY29kZShvcF9wdXRfZ2V0dGVyKSk7CisgICAgZW1pdE9wY29kZShv
cF9wdXRfZ2V0dGVyKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKQEAgLTg3MCw3ICs5MDYsNyBA
QCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UHV0R2V0dGVyCiAKIFJlZ2lzdGVySUQq
IENvZGVHZW5lcmF0b3I6OmVtaXRQdXRTZXR0ZXIoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewotICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3B1dF9zZXR0ZXIpKTsKKyAgICBlbWl0
T3Bjb2RlKG9wX3B1dF9zZXR0ZXIpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwpAQCAtODc5LDcg
KzkxNSw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRQdXRTZXR0ZXIKIAogUmVn
aXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdERlbGV0ZUJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9kZWxfYnlfaWQpKTsKKyAg
ICBlbWl0T3Bjb2RlKG9wX2RlbF9ieV9pZCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwpAQCAtODg4
LDcgKzkyNCw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXREZWxldGVCeUkKIAog
UmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfZ2V0X2J5X3ZhbCkpOworICAgIGVt
aXRPcGNvZGUob3BfZ2V0X2J5X3ZhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7CkBAIC04OTcsNyArOTMz
LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKAogCiBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UHV0QnlWYWwoUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0
ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3B1dF9ieV92YWwpKTsKKyAgICBlbWl0T3Bj
b2RlKG9wX3B1dF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CkBAIC05MDYsNyArOTQyLDcg
QEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5VmFsKAogCiBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0RGVsZXRlQnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9kZWxfYnlfdmFsKSk7CisgICAgZW1pdE9wY29k
ZShvcF9kZWxfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKQEAgLTkxNSw3ICs5NTEsNyBAQCBS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0RGVsZXRlQnlWCiAKIFJlZ2lzdGVySUQqIENv
ZGVHZW5lcmF0b3I6OmVtaXRQdXRCeUluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVuc2lnbmVkIGlu
ZGV4LCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFj
aGluZSgpLmdldE9wY29kZShvcF9wdXRfYnlfaW5kZXgpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3B1
dF9ieV9pbmRleCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHZhbHVlLT5pbmRleCgpKTsKQEAgLTkyNCw3ICs5NjAsNyBAQCBSZWdpc3RlcklEKiBDb2Rl
R2VuZXJhdG9yOjplbWl0UHV0QnlJbmRlCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVt
aXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiByMCwgRnVuY0RlY2xOb2RlKiBuKQogewotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX25ld19mdW5jKSk7Cisg
ICAgZW1pdE9wY29kZShvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIw
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQobikpOwog
ICAgIHJldHVybiByMDsKQEAgLTkzMiw3ICs5NjgsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJh
dG9yOjplbWl0TmV3RnVuY3RpCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROZXdS
ZWdFeHAoUmVnaXN0ZXJJRCogZHN0LCBSZWdFeHAqIHJlZ0V4cCkKIHsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9uZXdfcmVnZXhwKSk7CisgICAgZW1p
dE9wY29kZShvcF9uZXdfcmVnZXhwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkUmVnRXhwKHJlZ0V4cCkpOwog
ICAgIHJldHVybiBkc3Q7CkBAIC05NDEsNyArOTc3LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVy
YXRvcjo6ZW1pdE5ld1JlZ0V4cAogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TmV3
RnVuY3Rpb25FeHByZXNzaW9uKFJlZ2lzdGVySUQqIHIwLCBGdW5jRXhwck5vZGUqIG4pCiB7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfbmV3X2Z1bmNf
ZXhwKSk7CisgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuY19leHApOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyMC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50KG4pKTsKICAgICByZXR1cm4gcjA7CkBAIC05NzcsNyArMTAxMyw3IEBAIFJlZ2lzdGVy
SUQqIENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY28KICAgICAgICAgZW1pdE5vZGUoYXJndi5s
YXN0KCkuZ2V0KCksIG4pOwogICAgIH0KIAotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNo
aW5lKCkuZ2V0T3Bjb2RlKG9wY29kZUlEKSk7CisgICAgZW1pdE9wY29kZShvcGNvZGVJRCk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNl
ID8gYmFzZS0+aW5kZXgoKSA6IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkpOyAvLyBXZSBlbmNv
ZGUgdGhlICJ0aGlzIiB2YWx1ZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCB0byBhdm9pZCBh
biBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgY29weWluZyBvciBsb2FkaW5nIGl0LgpAQCAtOTg4
LDE0ICsxMDI0LDE0IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY28K
IAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFJldHVybihSZWdpc3RlcklEKiByMCkK
IHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9yZXQp
KTsKKyAgICBlbWl0T3Bjb2RlKG9wX3JldCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIw
LT5pbmRleCgpKTsKICAgICByZXR1cm4gcjA7CiB9CiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRFbmQoUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2VuZCkpOworICAgIGVtaXRPcGNvZGUob3BfZW5kKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICByZXR1cm4gZHN0
OwogfQpAQCAtMTAxNSw3ICsxMDUxLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dENvbnN0cnVjdAogICAgICAgICBlbWl0Tm9kZShhcmd2Lmxhc3QoKS5nZXQoKSwgbik7CiAgICAg
fQogCi0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfY29u
c3RydWN0KSk7CisgICAgZW1pdE9wY29kZShvcF9jb25zdHJ1Y3QpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5j
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkgPyBhcmd2
WzBdLT5pbmRleCgpIDogbV90ZW1wb3Jhcmllcy5zaXplKCkpOyAvLyBhcmd2CkBAIC0xMDI2LDcg
KzEwNjIsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0CiBSZWdp
c3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKQog
ewogICAgIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluID0gdHJ1ZTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9wdXNoX3Njb3BlKSk7Cisg
ICAgZW1pdE9wY29kZShvcF9wdXNoX3Njb3BlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
c2NvcGUtPmluZGV4KCkpOwogCiAgICAgQ29udHJvbEZsb3dDb250ZXh0IGNvbnRleHQ7CkBAIC0x
MDQxLDcgKzEwNzcsNyBAQCB2b2lkIENvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSgpCiAgICAg
QVNTRVJUKG1fc2NvcGVDb250ZXh0U3RhY2suc2l6ZSgpKTsKICAgICBBU1NFUlQoIW1fc2NvcGVD
b250ZXh0U3RhY2subGFzdCgpLmlzRmluYWxseUJsb2NrKTsKIAotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3BvcF9zY29wZSkpOworICAgIGVtaXRPcGNv
ZGUob3BfcG9wX3Njb3BlKTsKIAogICAgIG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgp
OwogICAgIG1fZHluYW1pY1Njb3BlRGVwdGgtLTsKQEAgLTEwNTEsNyArMTA4Nyw3IEBAIHZvaWQg
Q29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZWJ1Z0gKIHsKICAgICBpZiAoIW1fc2hvdWxk
RW1pdERlYnVnSG9va3MpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobWFjaGluZSgpLmdldE9wY29kZShvcF9kZWJ1ZykpOworICAgIGVtaXRPcGNvZGUob3BfZGVi
dWcpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkZWJ1Z0hvb2tJRCk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGZpcnN0TGluZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGxh
c3RMaW5lKTsKQEAgLTExNTIsNyArMTE4OCw3IEBAIFBhc3NSZWZQdHI8TGFiZWxJRD4gQ29kZUdl
bmVyYXRvcjo6ZW1pdEMKICAgICAgICAgaWYgKG5Ob3JtYWxTY29wZXMpIHsKICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gcmVtb3ZlIGEgbnVtYmVyIG9mIGR5bmFtaWMgc2NvcGVzIHRvIGdldCB0
byB0aGUgbmV4dAogICAgICAgICAgICAgLy8gZmluYWxseSBibG9jawotICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bfam1wX3Njb3BlcykpOwor
ICAgICAgICAgICAgZW1pdE9wY29kZShvcF9qbXBfc2NvcGVzKTsKICAgICAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChuTm9ybWFsU2NvcGVzKTsKIAogICAgICAgICAgICAgLy8gSWYgdG9w
U2NvcGUgPT0gYm90dG9tU2NvcGUgdGhlbiB0aGVyZSBpc24ndCBhY3R1YWxseSBhIGZpbmFsbHkg
YmxvY2sKQEAgLTExOTMsNyArMTIyOSw3IEBAIFBhc3NSZWZQdHI8TGFiZWxJRD4gQ29kZUdlbmVy
YXRvcjo6ZW1pdEoKICAgICBpZiAobV9maW5hbGx5RGVwdGgpCiAgICAgICAgIHJldHVybiBlbWl0
Q29tcGxleEp1bXBTY29wZXModGFyZ2V0LCAmbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCksICZt
X3Njb3BlQ29udGV4dFN0YWNrLmxhc3QoKSAtIHNjb3BlRGVsdGEpOwogCi0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bfam1wX3Njb3BlcykpOworICAgIGVt
aXRPcGNvZGUob3Bfam1wX3Njb3Blcyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3Bl
RGVsdGEpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPm9mZnNldEZyb20oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CiAgICAgcmV0dXJuIHRhcmdldDsKQEAgLTEyMDEsNyArMTIz
Nyw3IEBAIFBhc3NSZWZQdHI8TGFiZWxJRD4gQ29kZUdlbmVyYXRvcjo6ZW1pdEoKIAogUmVnaXN0
ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdE5leHRQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBpdGVyLCBMYWJlbElEKiB0YXJnZXQpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfbmV4dF9wbmFtZSkpOworICAgIGVtaXRP
cGNvZGUob3BfbmV4dF9wbmFtZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGl0ZXItPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPm9mZnNldEZyb20oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKSk7CkBAIC0xMjEwLDcgKzEyNDYsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0TmV4dFByb3BlCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRHZXRQcm9wZXJ0
eU5hbWVzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKIHsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9nZXRfcG5hbWVzKSk7CisgICAg
ZW1pdE9wY29kZShvcF9nZXRfcG5hbWVzKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAg
ICAgcmV0dXJuIGRzdDsKQEAgLTEyMjAsMjAgKzEyNTYsMjAgQEAgUmVnaXN0ZXJJRCogQ29kZUdl
bmVyYXRvcjo6ZW1pdENhdGNoKFJlZwogewogICAgIEhhbmRsZXJJbmZvIGluZm8gPSB7IHN0YXJ0
LT5vZmZzZXRGcm9tKDApLCBlbmQtPm9mZnNldEZyb20oMCksIGluc3RydWN0aW9ucygpLnNpemUo
KSwgbV9keW5hbWljU2NvcGVEZXB0aCB9OwogICAgIGV4Y2VwdGlvbkhhbmRsZXJzKCkuYXBwZW5k
KGluZm8pOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9w
X2NhdGNoKSk7CisgICAgZW1pdE9wY29kZShvcF9jYXRjaCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHRhcmdldFJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICByZXR1cm4gdGFyZ2V0UmVnaXN0
ZXI7CiB9CiAKIHZvaWQgQ29kZUdlbmVyYXRvcjo6ZW1pdFRocm93KFJlZ2lzdGVySUQqIGV4Y2Vw
dGlvbikKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShv
cF90aHJvdykpOworICAgIGVtaXRPcGNvZGUob3BfdGhyb3cpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChleGNlcHRpb24tPmluZGV4KCkpOwogfQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJh
dG9yOjplbWl0TmV3RXJyb3IoUmVnaXN0ZXJJRCogZHN0LCBFcnJvclR5cGUgdHlwZSwgSlNWYWx1
ZSogbWVzc2FnZSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9w
Y29kZShvcF9uZXdfZXJyb3IpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX25ld19lcnJvcik7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHN0YXRpY19jYXN0PGludD4odHlwZSkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChhZGRDb25zdGFudChtZXNzYWdlKSk7CkBAIC0xMjQyLDcgKzEyNzgsNyBAQCBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0TmV3RXJyb3IoCiAKIFBhc3NSZWZQdHI8TGFiZWxJRD4gQ29k
ZUdlbmVyYXRvcjo6ZW1pdEp1bXBTdWJyb3V0aW5lKFJlZ2lzdGVySUQqIHJldEFkZHJEc3QsIExh
YmVsSUQqIGZpbmFsbHkpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5n
ZXRPcGNvZGUob3BfanNyKSk7CisgICAgZW1pdE9wY29kZShvcF9qc3IpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChyZXRBZGRyRHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZmluYWxseS0+b2Zmc2V0RnJvbShpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKICAgICBy
ZXR1cm4gZmluYWxseTsKQEAgLTEyNTAsNyArMTI4Niw3IEBAIFBhc3NSZWZQdHI8TGFiZWxJRD4g
Q29kZUdlbmVyYXRvcjo6ZW1pdEoKIAogdm9pZCBDb2RlR2VuZXJhdG9yOjplbWl0U3Vicm91dGlu
ZVJldHVybihSZWdpc3RlcklEKiByZXRBZGRyU3JjKQogewotICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3NyZXQpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3Ny
ZXQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXRBZGRyU3JjLT5pbmRleCgpKTsKIH0K
IApJbmRleDogVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0
b3IuaAkocmV2aXNpb24gMzQ0NzIpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5Myw2ICsyOTMsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIENvZGVUeXBl
IGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQogCiAgICAgcHJpdmF0ZToK
KyAgICAgICAgdm9pZCBlbWl0T3Bjb2RlKE9wY29kZUlEKTsKKyAgICAgICAgdm9pZCByZXRyaWV2
ZUxhc3RCaW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5k
ZXgpOworICAgICAgICB2b2lkIHJld2luZEJpbmFyeU9wKCk7CisKICAgICAgICAgUGFzc1JlZlB0
cjxMYWJlbElEPiBlbWl0Q29tcGxleEp1bXBTY29wZXMoTGFiZWxJRCogdGFyZ2V0LCBDb250cm9s
Rmxvd0NvbnRleHQqIHRvcFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3BlKTsK
ICAgICAgICAgc3RydWN0IEpTVmFsdWVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxKU1ZhbHVlKj4g
ewogICAgICAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEpTVmFsdWUq
KiBzbG90KSB7ICpzbG90ID0gSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpOyB9CkBAIC0z
NjcsNiArMzcxLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGludCBtX25leHRWYXI7CiAg
ICAgICAgIGludCBtX25leHRQYXJhbWV0ZXI7CiAKKyAgICAgICAgT3Bjb2RlSUQgbV9sYXN0T3Bj
b2RlSUQ7CisKICAgICAgICAgLy8gQ29uc3RhbnQgcG9vbAogICAgICAgICBJZGVudGlmaWVyTWFw
IG1faWRlbnRpZmllck1hcDsKICAgICAgICAgSlNWYWx1ZU1hcCBtX2pzVmFsdWVNYXA7CkluZGV4
OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmNwcAkocmV2aXNpb24g
MzQ0NzIpCisrKyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxMiw2ICsxOTEy
LDI3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
Kyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KKyAgICBCRUdJTl9PUENPREUob3Bf
amxlc3MpIHsKKyAgICAgICAgLyogamZhbHNlIGNvbmQocikgdGFyZ2V0KG9mZnNldCkKKworICAg
ICAgICAgICBKdW1wcyB0byBvZmZzZXQgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rp
b24sIGlmIGFuZAorICAgICAgICAgICBvbmx5IGlmIHJlZ2lzdGVyIGNvbmQgY29udmVydHMgdG8g
Ym9vbGVhbiBhcyBmYWxzZS4KKyAgICAgICAgKi8KKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJb
KCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSBy
WygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBpbnQgdGFyZ2V0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOworCisgICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzKGV4ZWMsIHNy
YzEsIHNyYzIpOworICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CisgICAgICAgICAg
ICBORVhUX09QQ09ERTsKKyAgICAgICAgfQorCisgICAgICAgICsrdlBDOworICAgICAgICBORVhU
X09QQ09ERTsKKyAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX25ld19mdW5jKSB7CiAgICAgICAg
IC8qIG5ld19mdW5jIGRzdChyKSBmdW5jKGYpCiAKSW5kZXg6IFZNL09wY29kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVk0vT3Bjb2RlLmNwcAkocmV2aXNpb24gMzQ0NzIpCisrKyBWTS9PcGNvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIG9w
Y29kZU5hbWVzW10gPSB7CiAgICAgImptcCIsCiAgICAgImp0cnVlIiwKICAgICAiamZhbHNlIiwK
KyAgICAiamxlc3MiLAogICAgICJqbXBfc2NvcGVzIiwKIAogICAgICJuZXdfZnVuYyIsCkluZGV4
OiBWTS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9PcGNvZGUuaAkocmV2aXNpb24gMzQ0NzIp
CisrKyBWTS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgbWFjcm8ob3Bfam1wKSBcCiAgICAgICAgIG1hY3JvKG9wX2p0cnVl
KSBcCiAgICAgICAgIG1hY3JvKG9wX2pmYWxzZSkgXAorICAgICAgICBtYWNybyhvcF9qbGVzcykg
XAogICAgICAgICBtYWNybyhvcF9qbXBfc2NvcGVzKSBcCiAgICAgICAgIFwKICAgICAgICAgbWFj
cm8ob3BfbmV3X2Z1bmMpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21613</attachid>
            <date>2008-06-10 17:28:23 -0700</date>
            <delta_ts>2010-06-10 15:43:45 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>jless.diff</filename>
            <type>text/plain</type>
            <size>35692</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM0NDg1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMDgtMDYt
MTAgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE5NDU3OiBDcmVhdGUg
ZnVzZWQgb3Bjb2RlcyBmb3IgdGVzdHMgYW5kIGNvbmRpdGlvbmFsIGp1bXBzCisgICAgICAgIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0NTc+CisKKyAgICAgICAg
QWRkIGEgbmV3IGpsZXNzIGluc3RydWN0aW9uLCBhbmQgbW9kaWZ5IHRoZSBjb2RlIGdlbmVyYXRv
ciB0byBlbWl0IGl0CisgICAgICAgIGluc3RlYWQgb2YgdGhlIHBhaXIgKGxlc3MsIGp0cnVlKS4K
KworICAgICAgICBHaXZlcyBhIDMuNiUgaW1wcm92ZW1lbnQgb24gU3VuU3BpZGVyLgorCisgICAg
ICAgICogVk0vQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEtKUzo6Q29kZUJsb2NrOjpkdW1wKToK
KyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVy
YXRvcjo6Q29kZUdlbmVyYXRvcik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRP
cGNvZGUpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxhc3RCaW5hcnlP
cCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OnJld2luZEJpbmFyeU9wKToKKyAgICAg
ICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEp1bXApOgorICAgICAgICAoS0pTOjpDb2RlR2Vu
ZXJhdG9yOjplbWl0SnVtcElmVHJ1ZSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVt
aXRKdW1wSWZGYWxzZSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKToK
KyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5vdCk6CisgICAgICAgIChLSlM6OkNv
ZGVHZW5lcmF0b3I6OmVtaXRFcXVhbCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVt
aXROb3RFcXVhbCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRTdHJpY3RFcXVh
bCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXROb3RTdHJpY3RFcXVhbCk6Cisg
ICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRMZXNzKToKKyAgICAgICAgKEtKUzo6Q29k
ZUdlbmVyYXRvcjo6ZW1pdExlc3NFcSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVt
aXRQcmVJbmMpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0UHJlRGVjKToKKyAg
ICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFBvc3RJbmMpOgorICAgICAgICAoS0pTOjpD
b2RlR2VuZXJhdG9yOjplbWl0UG9zdERlYyk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6
OmVtaXRUb0pTTnVtYmVyKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5lZ2F0
ZSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRBZGQpOgorICAgICAgICAoS0pT
OjpDb2RlR2VuZXJhdG9yOjplbWl0TXVsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6
ZW1pdERpdik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRNb2QpOgorICAgICAg
ICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0U3ViKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVy
YXRvcjo6ZW1pdExlZnRTaGlmdCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRS
aWdodFNoaWZ0KToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFVuc2lnbmVkUmln
aHRTaGlmdCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRCaXRBbmQpOgorICAg
ICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0Qml0WE9yKToKKyAgICAgICAgKEtKUzo6Q29k
ZUdlbmVyYXRvcjo6ZW1pdEJpdE9yKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1p
dEJpdE5vdCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5jZU9mKToK
KyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPZik6CisgICAgICAgIChLSlM6
OkNvZGVHZW5lcmF0b3I6OmVtaXRJbik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVt
aXRMb2FkKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5ld09iamVjdCk6Cisg
ICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXROZXdBcnJheSk6CisgICAgICAgIChLSlM6
OkNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRv
cjo6ZW1pdEdldFNjb3BlZFZhcik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXRTY29wZWRWYXIpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJh
c2UpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKToK
KyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVGdW5jdGlvbik6CisgICAg
ICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeUlkKToKKyAgICAgICAgKEtKUzo6Q29k
ZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5SWQpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjpl
bWl0UHV0R2V0dGVyKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNldHRl
cik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXREZWxldGVCeUlkKToKKyAgICAg
ICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKToKKyAgICAgICAgKEtKUzo6Q29k
ZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5VmFsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6
ZW1pdERlbGV0ZUJ5VmFsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5
SW5kZXgpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb24pOgor
ICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0TmV3UmVnRXhwKToKKyAgICAgICAgKEtK
Uzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbik6CisgICAgICAgIChL
SlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRv
cjo6ZW1pdFJldHVybik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRFbmQpOgor
ICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KToKKyAgICAgICAgKEtK
Uzo6Q29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hTY29wZSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5l
cmF0b3I6OmVtaXRQb3BTY29wZSk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRE
ZWJ1Z0hvb2spOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleEp1bXBT
Y29wZXMpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0SnVtcFNjb3Blcyk6Cisg
ICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXROZXh0UHJvcGVydHlOYW1lKToKKyAgICAg
ICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEdldFByb3BlcnR5TmFtZXMpOgorICAgICAgICAo
S0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0Q2F0Y2gpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJh
dG9yOjplbWl0VGhyb3cpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0TmV3RXJy
b3IpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0SnVtcFN1YnJvdXRpbmUpOgor
ICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0U3Vicm91dGluZVJldHVybik6CisgICAg
ICAgICogVk0vQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgorICAg
ICAgICAoS0pTOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogVk0vT3Bjb2Rl
LmNwcDoKKyAgICAgICAgKEtKUzo6KToKKyAgICAgICAgKiBWTS9PcGNvZGUuaDoKKwogMjAwOC0w
Ni0xMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBWTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZN
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM0NDg0KQorKysgVk0vQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDY3LDYgKzQ2NywxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVj
U3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChiZWdpbiwg
aXQsIGxvY2F0aW9uLCAiamZhbHNlIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2psZXNzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRm
KCJbJTRkXSBqbGVzc1x0XHQgJXMsICVzLCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIHJlZ2lzdGVy
TmFtZShyMCkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpLCBvZmZzZXQsIGp1bXBU
YXJnZXQoYmVnaW4sIGl0LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cklu
ZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMzQ0ODQpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgwLDYgKzE4MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJv
Z3JhbU5vZGUKICAgICAsIG1fY29udGludWVEZXB0aCgwKQogICAgICwgbV9uZXh0VmFyKC0xKQog
ICAgICwgbV9wcm9wZXJ0eU5hbWVzKCZzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCktPnByb3BlcnR5TmFtZXMoKSkKKyAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKIHsK
ICAgICAvLyBHbG9iYWwgY29kZSBjYW4gaW5oZXJpdCBwcmV2aW91c2x5IGRlZmluZWQgc3ltYm9s
cy4KICAgICBpbnQgc2l6ZSA9IHN5bWJvbFRhYmxlLT5zaXplKCkgKyAxOyAvLyArIDEgc2xvdCBm
b3IgICJ0aGlzIgpAQCAtMjM4LDYgKzIzOSw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0
b3IoRnVuY3Rpb25Cb2QKICAgICAsIG1fY29udGludWVEZXB0aCgwKQogICAgICwgbV9uZXh0VmFy
KC0xKQogICAgICwgbV9wcm9wZXJ0eU5hbWVzKCZzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCktPnByb3BlcnR5TmFtZXMoKSkKKyAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2Vu
ZCkKIHsKICAgICBjb25zdCBOb2RlOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0gZnVu
Y3Rpb25Cb2R5LT5mdW5jdGlvblN0YWNrKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7CkBAIC0yODUsNiArMjg3LDcgQEAgQ29kZUdlbmVy
YXRvcjo6Q29kZUdlbmVyYXRvcihFdmFsTm9kZSogZQogICAgICwgbV9jb250aW51ZURlcHRoKDAp
CiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoJnNjb3BlQ2hhaW4u
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKS0+cHJvcGVydHlOYW1lcygpKQorICAgICwgbV9s
YXN0T3Bjb2RlSUQob3BfZW5kKQogewogICAgIG1fY29kZUJsb2NrLT5udW1WYXJzID0gMTsgLy8g
QWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgogfQpAQCAtMzgzLDE2ICszODYsNTIgQEAgUGFzc1Jl
ZlB0cjxMYWJlbElEPiBDb2RlR2VuZXJhdG9yOjplbWl0TAogICAgIHJldHVybiBsMDsKIH0KIAor
dm9pZCBDb2RlR2VuZXJhdG9yOjplbWl0T3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQoreworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wY29kZUlEKSk7Cisg
ICAgbV9sYXN0T3Bjb2RlSUQgPSBvcGNvZGVJRDsKK30KKwordm9pZCBDb2RlR2VuZXJhdG9yOjpy
ZXRyaWV2ZUxhc3RCaW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBz
cmMySW5kZXgpCit7CisgICAgc2l6ZV90IHNpemUgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Cisg
ICAgZHN0SW5kZXggPSBpbnN0cnVjdGlvbnMoKS5hdChzaXplIC0gMykudS5vcGVyYW5kOworICAg
IHNyYzFJbmRleCA9IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAyKS51Lm9wZXJhbmQ7CisgICAg
c3JjMkluZGV4ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoc2l6ZSAtIDEpLnUub3BlcmFuZDsKK30KKwor
dm9pZCBDb2RlR2VuZXJhdG9yOjpyZXdpbmRCaW5hcnlPcCgpCit7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuc2hyaW5rKGluc3RydWN0aW9ucygpLnNpemUoKSAtIDQpOworfQorCiBQYXNzUmVmUHRyPExh
YmVsSUQ+IENvZGVHZW5lcmF0b3I6OmVtaXRKdW1wKExhYmVsSUQqIHRhcmdldCkKIHsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9qbXApKTsKKyAgICBl
bWl0T3Bjb2RlKG9wX2ptcCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+b2Zm
c2V0RnJvbShpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKICAgICByZXR1cm4gdGFyZ2V0OwogfQog
CiBQYXNzUmVmUHRyPExhYmVsSUQ+IENvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZUcnVlKFJlZ2lz
dGVySUQqIGNvbmQsIExhYmVsSUQqIHRhcmdldCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobWFjaGluZSgpLmdldE9wY29kZShvcF9qdHJ1ZSkpOworICAgIGlmIChtX2xhc3RPcGNvZGVJ
RCA9PSBvcF9sZXNzKSB7CisgICAgICAgIGludCBkc3RJbmRleDsKKyAgICAgICAgaW50IHNyYzFJ
bmRleDsKKyAgICAgICAgaW50IHNyYzJJbmRleDsKKyAgICAgICAgCisgICAgICAgIHJldHJpZXZl
TGFzdEJpbmFyeU9wKGRzdEluZGV4LCBzcmMxSW5kZXgsIHNyYzJJbmRleCk7CisgICAgICAgIAor
ICAgICAgICBpZiAoY29uZC0+aW5kZXgoKSA9PSBkc3RJbmRleCkgeworICAgICAgICAgICAgcmV3
aW5kQmluYXJ5T3AoKTsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3Bfamxlc3MpOworICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzFJbmRleCk7CisgICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoc3JjMkluZGV4KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh0YXJnZXQtPm9mZnNldEZyb20oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAg
ICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGVtaXRP
cGNvZGUob3BfanRydWUpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb25kLT5pbmRleCgp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5vZmZzZXRGcm9tKGluc3RydWN0
aW9ucygpLnNpemUoKSkpOwogICAgIHJldHVybiB0YXJnZXQ7CkBAIC00MDAsNyArNDM5LDcgQEAg
UGFzc1JlZlB0cjxMYWJlbElEPiBDb2RlR2VuZXJhdG9yOjplbWl0SgogCiBQYXNzUmVmUHRyPExh
YmVsSUQ+IENvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZGYWxzZShSZWdpc3RlcklEKiBjb25kLCBM
YWJlbElEKiB0YXJnZXQpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5n
ZXRPcGNvZGUob3BfamZhbHNlKSk7CisgICAgZW1pdE9wY29kZShvcF9qZmFsc2UpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChjb25kLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQodGFyZ2V0LT5vZmZzZXRGcm9tKGluc3RydWN0aW9ucygpLnNpemUoKSkpOwogICAgIHJl
dHVybiB0YXJnZXQ7CkBAIC00NTAsNyArNDg5LDcgQEAgdW5zaWduZWQgQ29kZUdlbmVyYXRvcjo6
YWRkUmVnRXhwKFJlZ0V4cAogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TW92ZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9tb3YpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX21v
dik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CiAgICAgcmV0dXJuIGRzdDsKQEAgLTQ1OCw3
ICs0OTcsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TW92ZShSZWdpCiAKIFJl
Z2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROb3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNv
ZGUob3Bfbm90KSk7CisgICAgZW1pdE9wY29kZShvcF9ub3QpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmlu
ZGV4KCkpOwogICAgIHJldHVybiBkc3Q7CkBAIC00NjYsNyArNTA1LDcgQEAgUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdE5vdChSZWdpcwogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9y
OjplbWl0RXF1YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklE
KiBzcmMyKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2Rl
KG9wX2VxKSk7CisgICAgZW1pdE9wY29kZShvcF9lcSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzEtPmluZGV4
KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMyLT5pbmRleCgpKTsKQEAgLTQ3NSw3
ICs1MTQsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0RXF1YWwoUmVnCiAKIFJl
Z2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROb3RFcXVhbChSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfbmVxKSk7CisgICAgZW1pdE9wY29kZShvcF9u
ZXEpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChzcmMxLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc3JjMi0+aW5kZXgoKSk7CkBAIC00ODQsNyArNTIzLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdl
bmVyYXRvcjo6ZW1pdE5vdEVxdWFsKAogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0
U3RyaWN0RXF1YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklE
KiBzcmMyKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2Rl
KG9wX3N0cmljdGVxKSk7CisgICAgZW1pdE9wY29kZShvcF9zdHJpY3RlcSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHNyYzEtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMyLT5pbmRleCgp
KTsKQEAgLTQ5Myw3ICs1MzIsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0U3Ry
aWN0RXF1CiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROb3RTdHJpY3RFcXVhbChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpCiB7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfbnN0cmljdGVx
KSk7CisgICAgZW1pdE9wY29kZShvcF9uc3RyaWN0ZXEpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMxLT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMi0+aW5kZXgoKSk7CkBAIC01MDIs
NyArNTQxLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdE5vdFN0cmljdAogCiBS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TGVzcyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfbGVzcykpOworICAgIGVtaXRPcGNvZGUob3BfbGVz
cyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHNyYzEtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChzcmMyLT5pbmRleCgpKTsKQEAgLTUxMSw3ICs1NTAsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2Vu
ZXJhdG9yOjplbWl0TGVzcyhSZWdpCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRM
ZXNzRXEoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMy
KQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2xl
c3NlcSkpOworICAgIGVtaXRPcGNvZGUob3BfbGVzc2VxKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMS0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzItPmluZGV4KCkpOwpAQCAtNTIw
LDIxICs1NTksMjEgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdExlc3NFcShSZQog
CiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UHJlSW5jKFJlZ2lzdGVySUQqIHNyY0Rz
dCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9w
cmVfaW5jKSk7CisgICAgZW1pdE9wY29kZShvcF9wcmVfaW5jKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoc3JjRHN0LT5pbmRleCgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdp
c3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UHJlRGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9wcmVfZGVj
KSk7CisgICAgZW1pdE9wY29kZShvcF9wcmVfZGVjKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc3JjRHN0LT5pbmRleCgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0UG9zdEluYyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHNyY0RzdCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29k
ZShvcF9wb3N0X2luYykpOworICAgIGVtaXRPcGNvZGUob3BfcG9zdF9pbmMpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChzcmNEc3QtPmluZGV4KCkpOwogICAgIHJldHVybiBkc3Q7CkBAIC01NDIsNyArNTgxLDcgQEAg
UmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFBvc3RJbmMoUgogCiBSZWdpc3RlcklEKiBD
b2RlR2VuZXJhdG9yOjplbWl0UG9zdERlYyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
Y0RzdCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShv
cF9wb3N0X2RlYykpOworICAgIGVtaXRPcGNvZGUob3BfcG9zdF9kZWMpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChz
cmNEc3QtPmluZGV4KCkpOwogICAgIHJldHVybiBkc3Q7CkBAIC01NTAsNyArNTg5LDcgQEAgUmVn
aXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFBvc3REZWMoUgogCiBSZWdpc3RlcklEKiBDb2Rl
R2VuZXJhdG9yOjplbWl0VG9KU051bWJlcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
YykKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF90
b19qc251bWJlcikpOworICAgIGVtaXRPcGNvZGUob3BfdG9fanNudW1iZXIpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChzcmMtPmluZGV4KCkpOwogICAgIHJldHVybiBkc3Q7CkBAIC01NTgsNyArNTk3LDcgQEAgUmVn
aXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFRvSlNOdW1iZQogCiBSZWdpc3RlcklEKiBDb2Rl
R2VuZXJhdG9yOjplbWl0TmVnYXRlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQog
ewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX25lZ2F0
ZSkpOworICAgIGVtaXRPcGNvZGUob3BfbmVnYXRlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgp
KTsKICAgICByZXR1cm4gZHN0OwpAQCAtNTY2LDcgKzYwNSw3IEBAIFJlZ2lzdGVySUQqIENvZGVH
ZW5lcmF0b3I6OmVtaXROZWdhdGUoUmUKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dEFkZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIp
CiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfYWRk
KSk7CisgICAgZW1pdE9wY29kZShvcF9hZGQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMxLT5pbmRleCgpKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMi0+aW5kZXgoKSk7CkBAIC01NzUsNyArNjE0
LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEFkZChSZWdpcwogCiBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TXVsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjMSwgUmVnaXN0ZXJJRCogc3JjMikKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFj
aGluZSgpLmdldE9wY29kZShvcF9tdWwpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX211bCk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHNyYzEtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMyLT5p
bmRleCgpKTsKQEAgLTU4NCw3ICs2MjMsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0TXVsKFJlZ2lzCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXREaXYoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBkaXZpZGVuZCwgUmVnaXN0ZXJJRCogZGl2aXNvcikKIHsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9kaXYpKTsK
KyAgICBlbWl0T3Bjb2RlKG9wX2Rpdik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRpdmlkZW5kLT5pbmRleCgpKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZGl2aXNvci0+aW5kZXgoKSk7CkBAIC01OTMsNyAr
NjMyLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdERpdihSZWdpcwogCiBSZWdp
c3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TW9kKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogZGl2aWRlbmQsIFJlZ2lzdGVySUQqIGRpdmlzb3IpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfbW9kKSk7CisgICAgZW1pdE9wY29kZShvcF9t
b2QpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkaXZpZGVuZC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGRpdmlzb3ItPmluZGV4KCkpOwpAQCAtNjAyLDcgKzY0MSw3IEBAIFJlZ2lzdGVySUQq
IENvZGVHZW5lcmF0b3I6OmVtaXRNb2QoUmVnaXMKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRv
cjo6ZW1pdFN1YihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQq
IHNyYzIpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUo
b3Bfc3ViKSk7CisgICAgZW1pdE9wY29kZShvcF9zdWIpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMxLT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMi0+aW5kZXgoKSk7CkBAIC02MTEs
NyArNjUwLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFN1YihSZWdpcwogCiBS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TGVmdFNoaWZ0KFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogdmFsLCBSZWdpc3RlcklEKiBzaGlmdCkKIHsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9sc2hpZnQpKTsKKyAgICBlbWl0T3Bjb2Rl
KG9wX2xzaGlmdCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHNoaWZ0LT5pbmRleCgpKTsKQEAgLTYyMCw3ICs2NTksNyBAQCBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0TGVmdFNoaWZ0CiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRSaWdodFNoaWZ0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsLCBSZWdp
c3RlcklEKiBzaGlmdCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdl
dE9wY29kZShvcF9yc2hpZnQpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3JzaGlmdCk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHZhbC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNoaWZ0LT5pbmRl
eCgpKTsKQEAgLTYyOSw3ICs2NjgsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0
UmlnaHRTaGlmCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRVbnNpZ25lZFJpZ2h0
U2hpZnQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWwsIFJlZ2lzdGVySUQqIHNoaWZ0
KQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3Vy
c2hpZnQpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3Vyc2hpZnQpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWwtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzaGlmdC0+aW5kZXgoKSk7CkBAIC02
MzgsNyArNjc3LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFVuc2lnbmVkUgog
CiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Qml0QW5kKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMikKIHsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9iaXRhbmQpKTsKKyAgICBlbWl0T3Bjb2Rl
KG9wX2JpdGFuZCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzEtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChzcmMyLT5pbmRleCgpKTsKQEAgLTY0Nyw3ICs2ODYsNyBAQCBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0Qml0QW5kKFJlCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRCaXRYT3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3Rl
cklEKiBzcmMyKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bj
b2RlKG9wX2JpdHhvcikpOworICAgIGVtaXRPcGNvZGUob3BfYml0eG9yKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
c3JjMS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzItPmluZGV4KCkp
OwpAQCAtNjU2LDcgKzY5NSw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRCaXRY
T3IoUmUKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEJpdE9yKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMikKIHsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9iaXRvcikpOworICAgIGVtaXRP
cGNvZGUob3BfYml0b3IpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMxLT5pbmRleCgpKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoc3JjMi0+aW5kZXgoKSk7CkBAIC02NjUsNyArNzA0LDcgQEAgUmVnaXN0
ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEJpdE9yKFJlZwogCiBSZWdpc3RlcklEKiBDb2RlR2Vu
ZXJhdG9yOjplbWl0Qml0Tm90KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogewot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2JpdG5vdCkp
OworICAgIGVtaXRPcGNvZGUob3BfYml0bm90KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsK
ICAgICByZXR1cm4gZHN0OwpAQCAtNjczLDcgKzcxMiw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5l
cmF0b3I6OmVtaXRCaXROb3QoUmUKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdElu
c3RhbmNlT2YoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCog
YmFzZSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShv
cF9pbnN0YW5jZW9mKSk7CisgICAgZW1pdE9wY29kZShvcF9pbnN0YW5jZW9mKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodmFsdWUtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRl
eCgpKTsKQEAgLTY4Miw3ICs3MjEsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0
SW5zdGFuY2VPCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRUeXBlT2YoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfdHlwZW9mKSk7CisgICAgZW1pdE9wY29kZShvcF90eXBl
b2YpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOwogICAgIHJldHVybiBkc3Q7CkBAIC02OTAs
NyArNzI5LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPZihSZQogCiBS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0SW4oUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogYmFzZSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9pbikpOworICAgIGVtaXRPcGNvZGUob3BfaW4p
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGJhc2UtPmluZGV4KCkpOwpAQCAtNjk5LDcgKzczOCw3IEBAIFJlZ2lzdGVySUQqIENvZGVH
ZW5lcmF0b3I6OmVtaXRJbihSZWdpc3QKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGIpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfbG9hZCkpOworICAgIGVtaXRPcGNvZGUob3BfbG9h
ZCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGpzQm9vbGVhbihiKSkpOwogICAgIHJldHVybiBk
c3Q7CkBAIC03MDcsNyArNzQ2LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdExv
YWQoUmVnaQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklE
KiBkc3QsIGRvdWJsZSBkKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCku
Z2V0T3Bjb2RlKG9wX2xvYWQpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2xvYWQpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChhZGRDb25zdGFudChqc051bWJlcihkKSkpOwogICAgIHJldHVybiBkc3Q7CkBAIC03MTUsNyAr
NzU0LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaQogCiBSZWdp
c3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUq
IHYpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bf
bG9hZCkpOworICAgIGVtaXRPcGNvZGUob3BfbG9hZCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50
KHYpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtNzIzLDE0ICs3NjIsMTQgQEAgUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9y
OjplbWl0TmV3T2JqZWN0KFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9uZXdfb2JqZWN0KSk7CisgICAgZW1pdE9wY29k
ZShvcF9uZXdfb2JqZWN0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKICAgICByZXR1cm4gZHN0OwogfQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0
TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCht
YWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX25ld19hcnJheSkpOworICAgIGVtaXRPcGNvZGUob3BfbmV3
X2FycmF5KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBy
ZXR1cm4gZHN0OwogfQpAQCAtNzc3LDcgKzgxNiw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRSZXNvbHZlKFIKICAgICBpbnQgaW5kZXggPSAwOwogICAgIGlmICghZmluZFNjb3Bl
ZFByb3BlcnR5KHByb3BlcnR5LCBpbmRleCwgZGVwdGgpKSB7CiAgICAgICAgIC8vIFdlIGNhbid0
IG9wdGltaXNlIGF0IGFsbCA6LSgKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hp
bmUoKS5nZXRPcGNvZGUob3BfcmVzb2x2ZSkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29s
dmUpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAgICAgICAg
IHJldHVybiBkc3Q7CkBAIC03ODYsNyArODI1LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRv
cjo6ZW1pdFJlc29sdmUoUgogICAgIGlmIChpbmRleCA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkp
IHsKICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSBhdCBsZWFzdCBhYmxlIHRvIGRyb3Ag
YSBmZXcgc2NvcGUgY2hhaW5zIGZyb20gdGhlCiAgICAgICAgIC8vIGxvb2t1cCBjaGFpbiwgYWx0
aG91Z2ggd2Ugc3RpbGwgbmVlZCB0byBoYXNoIGZyb20gdGhlbiBvbi4KLSAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcmVzb2x2ZV9za2lwKSk7Cisg
ICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9za2lwKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
ZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZGVw
dGgpOwpAQCAtNzk5LDcgKzgzOCw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRS
ZXNvbHZlKFIKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEdldFNjb3BlZFZhcihS
ZWdpc3RlcklEKiBkc3QsIHNpemVfdCBkZXB0aCwgaW50IGluZGV4KQogewotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2dldF9zY29wZWRfdmFyKSk7Cisg
ICAgZW1pdE9wY29kZShvcF9nZXRfc2NvcGVkX3Zhcik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZGVwdGgpOwpAQCAtODA4LDcgKzg0Nyw3IEBAIFJlZ2lz
dGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRHZXRTY29wZWQKIAogUmVnaXN0ZXJJRCogQ29kZUdl
bmVyYXRvcjo6ZW1pdFB1dFNjb3BlZFZhcihzaXplX3QgZGVwdGgsIGludCBpbmRleCwgUmVnaXN0
ZXJJRCogdmFsdWUpCiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRP
cGNvZGUob3BfcHV0X3Njb3BlZF92YXIpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3B1dF9zY29wZWRf
dmFyKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkZXB0aCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRl
eCgpKTsKQEAgLTgxNyw3ICs4NTYsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0
UHV0U2NvcGVkCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZShS
ZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogewotICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3Jlc29sdmVfYmFzZSkpOwor
ICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
cHJvcGVydHkpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtODI1LDcgKzg2NCw3IEBAIFJlZ2lzdGVy
SUQqIENvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmEKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVy
YXRvcjo6ZW1pdFJlc29sdmVXaXRoQmFzZShSZWdpc3RlcklEKiBiYXNlRHN0LCBSZWdpc3RlcklE
KiBwcm9wRHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9yZXNvbHZlX3dpdGhfYmFzZSkpOwor
ICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX2Jhc2UpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChiYXNlRHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJv
cERzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHBy
b3BlcnR5KSk7CkBAIC04MzQsNyArODczLDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6
ZW1pdFJlc29sdmVXaQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUZ1
bmN0aW9uKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVySUQqIGZ1bmNEc3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5KQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5l
KCkuZ2V0T3Bjb2RlKG9wX3Jlc29sdmVfZnVuYykpOworICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2
ZV9mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmNEc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwpAQCAtODQzLDcgKzg4Miw3IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlRnUKIAogUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9nZXRfYnlfaWQpKTsKKyAgICBlbWl0T3Bjb2Rl
KG9wX2dldF9ieV9pZCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwpAQCAtODUyLDcgKzg5MSw3IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeUlkKFIKIAogUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5SWQoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZCkpOworICAgIGVtaXRPcGNv
ZGUob3BfcHV0X2J5X2lkKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKQEAgLTg2MSw3ICs5MDAs
NyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UHV0QnlJZChSCiAKIFJlZ2lzdGVy
SUQqIENvZGVHZW5lcmF0b3I6OmVtaXRQdXRHZXR0ZXIoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3B1dF9nZXR0ZXIpKTsKKyAgICBl
bWl0T3Bjb2RlKG9wX3B1dF9nZXR0ZXIpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNl
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVy
dHkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwpAQCAtODcw
LDcgKzkwOSw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRQdXRHZXR0ZXIKIAog
UmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNldHRlcihSZWdpc3RlcklEKiBiYXNl
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpCiB7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcHV0X3NldHRlcikp
OworICAgIGVtaXRPcGNvZGUob3BfcHV0X3NldHRlcik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFu
dChwcm9wZXJ0eSkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7
CkBAIC04NzksNyArOTE4LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNl
dHRlcgogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0RGVsZXRlQnlJZChSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQog
ewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2RlbF9i
eV9pZCkpOworICAgIGVtaXRPcGNvZGUob3BfZGVsX2J5X2lkKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+
aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5
KSk7CkBAIC04ODgsNyArOTI3LDcgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdERl
bGV0ZUJ5SQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSkKIHsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9nZXRfYnlfdmFs
KSk7CisgICAgZW1pdE9wY29kZShvcF9nZXRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKQEAg
LTg5Nyw3ICs5MzYsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwo
CiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRQdXRCeVZhbChSZWdpc3RlcklEKiBi
YXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpCiB7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcHV0X2J5X3ZhbCkpOwor
ICAgIGVtaXRPcGNvZGUob3BfcHV0X2J5X3ZhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKQEAgLTkw
Niw3ICs5NDUsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UHV0QnlWYWwoCiAK
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXREZWxldGVCeVZhbChSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5KQogewotICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2RlbF9ieV92YWwpKTsKKyAg
ICBlbWl0T3Bjb2RlKG9wX2RlbF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwpAQCAtOTE1LDcg
Kzk1NCw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXREZWxldGVCeVYKIAogUmVn
aXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5SW5kZXgoUmVnaXN0ZXJJRCogYmFzZSwg
dW5zaWduZWQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVlKQogewotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pbmRleCkpOworICAgIGVtaXRP
cGNvZGUob3BfcHV0X2J5X2luZGV4KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+
aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwpAQCAtOTI0LDcgKzk2Myw3IEBAIFJlZ2lz
dGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRQdXRCeUluZGUKIAogUmVnaXN0ZXJJRCogQ29kZUdl
bmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIHIwLCBGdW5jRGVjbE5vZGUqIG4p
CiB7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfbmV3
X2Z1bmMpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocjAtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25z
dGFudChuKSk7CiAgICAgcmV0dXJuIHIwOwpAQCAtOTMyLDcgKzk3MSw3IEBAIFJlZ2lzdGVySUQq
IENvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGkKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRv
cjo6ZW1pdE5ld1JlZ0V4cChSZWdpc3RlcklEKiBkc3QsIFJlZ0V4cCogcmVnRXhwKQogewotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX25ld19yZWdleHAp
KTsKKyAgICBlbWl0T3Bjb2RlKG9wX25ld19yZWdleHApOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRSZWdFeHAo
cmVnRXhwKSk7CiAgICAgcmV0dXJuIGRzdDsKQEAgLTk0MSw3ICs5ODAsNyBAQCBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0TmV3UmVnRXhwCiAKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCogcjAsIEZ1bmNFeHByTm9k
ZSogbikKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShv
cF9uZXdfZnVuY19leHApKTsKKyAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jX2V4cCk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIwLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYWRkQ29uc3RhbnQobikpOwogICAgIHJldHVybiByMDsKQEAgLTk3Nyw3ICsxMDE2LDcg
QEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3BjbwogICAgICAgICBlbWl0
Tm9kZShhcmd2Lmxhc3QoKS5nZXQoKSwgbik7CiAgICAgfQogCi0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bjb2RlSUQpKTsKKyAgICBlbWl0T3Bjb2RlKG9w
Y29kZUlEKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2UgPyBiYXNlLT5pbmRleCgpIDogbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSk7
IC8vIFdlIGVuY29kZSB0aGUgInRoaXMiIHZhbHVlIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0s
IHRvIGF2b2lkIGFuIGV4cGxpY2l0IGluc3RydWN0aW9uIGZvciBjb3B5aW5nIG9yIGxvYWRpbmcg
aXQuCkBAIC05ODgsMTQgKzEwMjcsMTQgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dENhbGwoT3BjbwogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmV0dXJuKFJlZ2lz
dGVySUQqIHIwKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bj
b2RlKG9wX3JldCkpOworICAgIGVtaXRPcGNvZGUob3BfcmV0KTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocjAtPmluZGV4KCkpOwogICAgIHJldHVybiByMDsKIH0KIAogUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6ZW1pdEVuZChSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfZW5kKSk7CisgICAgZW1pdE9wY29k
ZShvcF9lbmQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAg
IHJldHVybiBkc3Q7CiB9CkBAIC0xMDE1LDcgKzEwNTQsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2Vu
ZXJhdG9yOjplbWl0Q29uc3RydWN0CiAgICAgICAgIGVtaXROb2RlKGFyZ3YubGFzdCgpLmdldCgp
LCBuKTsKICAgICB9CiAKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9w
Y29kZShvcF9jb25zdHJ1Y3QpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2NvbnN0cnVjdCk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGZ1bmMtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNp
emUoKSA/IGFyZ3ZbMF0tPmluZGV4KCkgOiBtX3RlbXBvcmFyaWVzLnNpemUoKSk7IC8vIGFyZ3YK
QEAgLTEwMjYsNyArMTA2NSw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRDb25z
dHJ1Y3QKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRQdXNoU2NvcGUoUmVnaXN0ZXJJ
RCogc2NvcGUpCiB7CiAgICAgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4gPSB0cnVl
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3B1c2hf
c2NvcGUpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3B1c2hfc2NvcGUpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7CiAKICAgICBDb250cm9sRmxvd0NvbnRleHQgY29u
dGV4dDsKQEAgLTEwNDEsNyArMTA4MCw3IEBAIHZvaWQgQ29kZUdlbmVyYXRvcjo6ZW1pdFBvcFNj
b3BlKCkKICAgICBBU1NFUlQobV9zY29wZUNvbnRleHRTdGFjay5zaXplKCkpOwogICAgIEFTU0VS
VCghbV9zY29wZUNvbnRleHRTdGFjay5sYXN0KCkuaXNGaW5hbGx5QmxvY2spOwogCi0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3BfcG9wX3Njb3BlKSk7Cisg
ICAgZW1pdE9wY29kZShvcF9wb3Bfc2NvcGUpOwogCiAgICAgbV9zY29wZUNvbnRleHRTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgbV9keW5hbWljU2NvcGVEZXB0aC0tOwpAQCAtMTA1MSw3ICsxMDkw
LDcgQEAgdm9pZCBDb2RlR2VuZXJhdG9yOjplbWl0RGVidWdIb29rKERlYnVnSAogewogICAgIGlm
ICghbV9zaG91bGRFbWl0RGVidWdIb29rcykKICAgICAgICAgcmV0dXJuOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2RlYnVnKSk7CisgICAgZW1pdE9w
Y29kZShvcF9kZWJ1Zyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRlYnVnSG9va0lEKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmlyc3RMaW5lKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobGFzdExpbmUpOwpAQCAtMTE1Miw3ICsxMTkxLDcgQEAgUGFzc1JlZlB0cjxMYWJl
bElEPiBDb2RlR2VuZXJhdG9yOjplbWl0QwogICAgICAgICBpZiAobk5vcm1hbFNjb3Blcykgewog
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgYSBudW1iZXIgb2YgZHluYW1pYyBzY29w
ZXMgdG8gZ2V0IHRvIHRoZSBuZXh0CiAgICAgICAgICAgICAvLyBmaW5hbGx5IGJsb2NrCi0gICAg
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9qbXBf
c2NvcGVzKSk7CisgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2ptcF9zY29wZXMpOwogICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG5Ob3JtYWxTY29wZXMpOwogCiAgICAgICAgICAg
ICAvLyBJZiB0b3BTY29wZSA9PSBib3R0b21TY29wZSB0aGVuIHRoZXJlIGlzbid0IGFjdHVhbGx5
IGEgZmluYWxseSBibG9jawpAQCAtMTE5Myw3ICsxMjMyLDcgQEAgUGFzc1JlZlB0cjxMYWJlbElE
PiBDb2RlR2VuZXJhdG9yOjplbWl0SgogICAgIGlmIChtX2ZpbmFsbHlEZXB0aCkKICAgICAgICAg
cmV0dXJuIGVtaXRDb21wbGV4SnVtcFNjb3Blcyh0YXJnZXQsICZtX3Njb3BlQ29udGV4dFN0YWNr
Lmxhc3QoKSwgJm1fc2NvcGVDb250ZXh0U3RhY2subGFzdCgpIC0gc2NvcGVEZWx0YSk7CiAKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9qbXBfc2NvcGVz
KSk7CisgICAgZW1pdE9wY29kZShvcF9qbXBfc2NvcGVzKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoc2NvcGVEZWx0YSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+b2Zm
c2V0RnJvbShpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKICAgICByZXR1cm4gdGFyZ2V0OwpAQCAt
MTIwMSw3ICsxMjQwLDcgQEAgUGFzc1JlZlB0cjxMYWJlbElEPiBDb2RlR2VuZXJhdG9yOjplbWl0
SgogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TmV4dFByb3BlcnR5TmFtZShSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGl0ZXIsIExhYmVsSUQqIHRhcmdldCkKIHsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9uZXh0X3BuYW1lKSk7
CisgICAgZW1pdE9wY29kZShvcF9uZXh0X3BuYW1lKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXRlci0+aW5kZXgo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+b2Zmc2V0RnJvbShpbnN0cnVj
dGlvbnMoKS5zaXplKCkpKTsKQEAgLTEyMTAsNyArMTI0OSw3IEBAIFJlZ2lzdGVySUQqIENvZGVH
ZW5lcmF0b3I6OmVtaXROZXh0UHJvcGUKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dEdldFByb3BlcnR5TmFtZXMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQogewot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2dldF9wbmFt
ZXMpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2dldF9wbmFtZXMpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5p
bmRleCgpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtMTIyMCwyMCArMTI1OSwyMCBAQCBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2F0Y2goUmVnCiB7CiAgICAgSGFuZGxlckluZm8gaW5m
byA9IHsgc3RhcnQtPm9mZnNldEZyb20oMCksIGVuZC0+b2Zmc2V0RnJvbSgwKSwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoIH07CiAgICAgZXhjZXB0aW9uSGFuZGxl
cnMoKS5hcHBlbmQoaW5mbyk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5n
ZXRPcGNvZGUob3BfY2F0Y2gpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2NhdGNoKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0UmVnaXN0ZXItPmluZGV4KCkpOwogICAgIHJldHVybiB0
YXJnZXRSZWdpc3RlcjsKIH0KIAogdm9pZCBDb2RlR2VuZXJhdG9yOjplbWl0VGhyb3coUmVnaXN0
ZXJJRCogZXhjZXB0aW9uKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCku
Z2V0T3Bjb2RlKG9wX3Rocm93KSk7CisgICAgZW1pdE9wY29kZShvcF90aHJvdyk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGV4Y2VwdGlvbi0+aW5kZXgoKSk7CiB9CiAKIFJlZ2lzdGVySUQq
IENvZGVHZW5lcmF0b3I6OmVtaXROZXdFcnJvcihSZWdpc3RlcklEKiBkc3QsIEVycm9yVHlwZSB0
eXBlLCBKU1ZhbHVlKiBtZXNzYWdlKQogewotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNo
aW5lKCkuZ2V0T3Bjb2RlKG9wX25ld19lcnJvcikpOworICAgIGVtaXRPcGNvZGUob3BfbmV3X2Vy
cm9yKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50Pih0eXBlKSk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50KG1lc3NhZ2UpKTsKQEAgLTEyNDIsNyArMTI4MSw3IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROZXdFcnJvcigKIAogUGFzc1JlZlB0cjxM
YWJlbElEPiBDb2RlR2VuZXJhdG9yOjplbWl0SnVtcFN1YnJvdXRpbmUoUmVnaXN0ZXJJRCogcmV0
QWRkckRzdCwgTGFiZWxJRCogZmluYWxseSkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
bWFjaGluZSgpLmdldE9wY29kZShvcF9qc3IpKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2pzcik7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJldEFkZHJEc3QtPmluZGV4KCkpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChmaW5hbGx5LT5vZmZzZXRGcm9tKGluc3RydWN0aW9ucygpLnNpemUo
KSkpOwogICAgIHJldHVybiBmaW5hbGx5OwpAQCAtMTI1MCw3ICsxMjg5LDcgQEAgUGFzc1JlZlB0
cjxMYWJlbElEPiBDb2RlR2VuZXJhdG9yOjplbWl0SgogCiB2b2lkIENvZGVHZW5lcmF0b3I6OmVt
aXRTdWJyb3V0aW5lUmV0dXJuKFJlZ2lzdGVySUQqIHJldEFkZHJTcmMpCiB7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bfc3JldCkpOworICAgIGVtaXRP
cGNvZGUob3Bfc3JldCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJldEFkZHJTcmMtPmlu
ZGV4KCkpOwogfQogCkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0v
Q29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAzNDQ4NCkKKysrIFZNL0NvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjkzLDYgKzI5MywxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CiAKICAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIGVtaXRPcGNvZGUoT3Bjb2RlSUQpOworICAgICAgICB2
b2lkIHJldHJpZXZlTGFzdEJpbmFyeU9wKGludCYgZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBp
bnQmIHNyYzJJbmRleCk7CisgICAgICAgIHZvaWQgcmV3aW5kQmluYXJ5T3AoKTsKKwogICAgICAg
ICBQYXNzUmVmUHRyPExhYmVsSUQ+IGVtaXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbElEKiB0YXJn
ZXQsIENvbnRyb2xGbG93Q29udGV4dCogdG9wU2NvcGUsIENvbnRyb2xGbG93Q29udGV4dCogYm90
dG9tU2NvcGUpOwogICAgICAgICBzdHJ1Y3QgSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRz
PEpTVmFsdWUqPiB7CiAgICAgICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoSlNWYWx1ZSoqIHNsb3QpIHsgKnNsb3QgPSBKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVl
KCk7IH0KQEAgLTM3Myw2ICszNzcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBjb25z
dCBDb21tb25JZGVudGlmaWVycyogbV9wcm9wZXJ0eU5hbWVzOwogCisgICAgICAgIE9wY29kZUlE
IG1fbGFzdE9wY29kZUlEOworCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBzdGF0aWMgYm9vbCBz
X2R1bXBzR2VuZXJhdGVkQ29kZTsKICNlbmRpZgpJbmRleDogVk0vTWFjaGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM0NDg0KQorKysgVk0vTWFjaGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MTIsNiArMTkxMiwyOSBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09Q
Q09ERTsKICAgICB9CisgICAgQkVHSU5fT1BDT0RFKG9wX2psZXNzKSB7CisgICAgICAgIC8qIGps
ZXNzIHNyYzEocikgc3JjMihyKSB0YXJnZXQob2Zmc2V0KQorCisgICAgICAgICAgIENoZWNrcyB3
aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgbGVzcyB0aGFuIHJlZ2lzdGVyIHNyYzIsIGFzCisgICAg
ICAgICAgIHdpdGggdGhlIEVDTUFTY3JpcHQgJzwnIG9wZXJhdG9yLCBhbmQgdGhlbiBqdW1wcyB0
byBvZmZzZXQKKyAgICAgICAgICAgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24s
IGlmIGFuZCBvbmx5IGlmIHRoZSAKKyAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29u
IGlzIHRydWUuCisgICAgICAgICovCisgICAgICAgIEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQykt
PnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiBzcmMyID0gclsoKyt2UEMp
LT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKKworICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzcyhleGVjLCBzcmMxLCBzcmMy
KTsKKyAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgIAorICAgICAgICBpZiAo
cmVzdWx0KSB7CisgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OworICAgICAgICAgICAgTkVYVF9P
UENPREU7CisgICAgICAgIH0KKworICAgICAgICArK3ZQQzsKKyAgICAgICAgTkVYVF9PUENPREU7
CisgICAgfQogICAgIEJFR0lOX09QQ09ERShvcF9uZXdfZnVuYykgewogICAgICAgICAvKiBuZXdf
ZnVuYyBkc3QocikgZnVuYyhmKQogCkluZGV4OiBWTS9PcGNvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFZNL09wY29kZS5jcHAJKHJldmlzaW9uIDM0NDg0KQorKysgVk0vT3Bjb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBvcGNvZGVOYW1l
c1tdID0gewogICAgICJqbXAiLAogICAgICJqdHJ1ZSIsCiAgICAgImpmYWxzZSIsCisgICAgImps
ZXNzIiwKICAgICAiam1wX3Njb3BlcyIsCiAKICAgICAibmV3X2Z1bmMiLApJbmRleDogVk0vT3Bj
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVk0vT3Bjb2RlLmgJKHJldmlzaW9uIDM0NDg0KQorKysgVk0v
T3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIG1hY3JvKG9wX2ptcCkgXAogICAgICAgICBtYWNybyhvcF9qdHJ1ZSkgXAogICAg
ICAgICBtYWNybyhvcF9qZmFsc2UpIFwKKyAgICAgICAgbWFjcm8ob3Bfamxlc3MpIFwKICAgICAg
ICAgbWFjcm8ob3Bfam1wX3Njb3BlcykgXAogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX25l
d19mdW5jKSBcCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>