<?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>43464</bug_id>
          
          <creation_ts>2010-08-03 21:26:31 -0700</creation_ts>
          <short_desc>Remove the global object from the bytecode</short_desc>
          <delta_ts>2010-08-05 15:23:20 -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>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nathan Lawrence">nlawrence</reporter>
          <assigned_to name="Nathan Lawrence">nlawrence</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>259857</commentid>
    <comment_count>0</comment_count>
      <attachid>63411</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-03 21:26:31 -0700</bug_when>
    <thetext>Created attachment 63411
patch

Currently, the global object is being embedded in the JavaScriptCore bytecode, however since the global object is the same for all opcodes in a code block, we can have the global object just be a member of the associated code block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259858</commentid>
    <comment_count>1</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 21:28:47 -0700</bug_when>
    <thetext>Attachment 63411 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/bytecode/CodeBlock.cpp:1461:  Missing space before ( in if(  [whitespace/parens] [5]
JavaScriptCore/bytecode/Opcode.h:191:  One space before end of line comments  [whitespace/comments] [5]
JavaScriptCore/bytecode/Opcode.h:259:  Missing space before ( in switch(  [whitespace/parens] [5]
JavaScriptCore/bytecode/Opcode.h:260:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259885</commentid>
    <comment_count>2</comment_count>
      <attachid>63411</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-03 23:22:40 -0700</bug_when>
    <thetext>Comment on attachment 63411
patch

&gt; -        if(vPC[4].u.structure)
&gt; -            vPC[4].u.structure-&gt;deref();
&gt; +        if(vPC[3].u.structure)
&gt; +            vPC[3].u.structure-&gt;deref();

There&apos;s a missing space after the word if in this code.

&gt; -        macro(op_end, 2) // end must be the last opcode in the list
&gt; +        macro(op_end, 2)  // end must be the last opcode in the list

Why did you add this space?

&gt; +        switch(opcode)
&gt; +        {

There should be a space after the word &quot;switch&quot; and the brace should be on the same line as the switch.

&gt; +    #define OPCODE_ID_LENGTHS(id, length) case id: return OPCODE_LENGTH(id);
&gt; +         FOR_EACH_OPCODE_ID(OPCODE_ID_LENGTHS);
&gt; +    #undef OPCODE_ID_LENGTHS

I&apos;d indent the FOR_EACH_OPCODE one level further so it&apos;s in the place where the code would have gone.

That semicolon after the macro invocation is not needed or helpful.

&gt; +            default:
&gt; +                ASSERT_NOT_REACHED();
&gt; +                return 0;

Normally in switches like this where each case has a return, we put the default and the ASSERT_NOT_REACHED outside the switch statement so the compiler can warn us if there are any enum values that have no case.

In this case it&apos;s probably not an issue because we use the macro instead, but it would be nice to follow suit unless there is a reason not to.

&gt; +        };

There&apos;s no need for a semicolon after the switch statement&apos;s closing brace.

&gt; +    }
&gt; +

How did you test all those different code paths?

All these concerns are minor, so I&apos;m going to say r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260052</commentid>
    <comment_count>3</comment_count>
      <attachid>63458</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-04 09:34:01 -0700</bug_when>
    <thetext>Created attachment 63458
patch

(In reply to comment #2)

I think I&apos;ve addressed all of your concerns.

&gt; How did you test all those different code paths?

I compiled and ran javascriptcore tests on the 32 bit JIT, the 64 bit JIT and the 64 bit interpreter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260053</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-04 09:35:26 -0700</bug_when>
    <thetext>Attachment 63458 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/bytecode/Opcode.h:259:  Missing space before ( in switch(  [whitespace/parens] [5]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260087</commentid>
    <comment_count>5</comment_count>
      <attachid>63411</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-04 10:22:55 -0700</bug_when>
    <thetext>Comment on attachment 63411
patch

Cleared Darin Adler&apos;s review+ from obsolete attachment 63411 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260218</commentid>
    <comment_count>6</comment_count>
      <attachid>63492</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-04 14:31:45 -0700</bug_when>
    <thetext>Created attachment 63492
patch

forgot the space between swtich and &apos;(&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260900</commentid>
    <comment_count>7</comment_count>
      <attachid>63492</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-05 15:23:14 -0700</bug_when>
    <thetext>Comment on attachment 63492
patch

Clearing flags on attachment: 63492

Committed r64790: &lt;http://trac.webkit.org/changeset/64790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260901</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-05 15:23:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63411</attachid>
            <date>2010-08-03 21:26:31 -0700</date>
            <delta_ts>2010-08-04 10:22:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>globalObject.patch</filename>
            <type>text/plain</type>
            <size>27138</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNjQ1ODkp
CisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzQ0LDggKzEzNDQsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3MoKQog
I2VuZGlmCiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1U
YWIsIGJvb2wgaXNDb25zdHJ1Y3RvcikKLSAgICA6IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCitD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBT
eW1ib2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCisgICAgOiBtX2dsb2JhbE9i
amVjdChnbG9iYWxPYmplY3QpCisgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwg
bV9udW1WYXJzKDApCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkKICAgICAsIG1faXNDb25zdHJ1
Y3Rvcihpc0NvbnN0cnVjdG9yKQpAQCAtMTQ1Nyw4ICsxNDU4LDggQEAgdm9pZCBDb2RlQmxvY2s6
OmRlcmVmU3RydWN0dXJlcyhJbnN0cnVjdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICh2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9yZXNvbHZlX2ds
b2JhbCkgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcmVz
b2x2ZV9nbG9iYWxfZHluYW1pYykpIHsKLSAgICAgICAgaWYodlBDWzRdLnUuc3RydWN0dXJlKQot
ICAgICAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJlLT5kZXJlZigpOworICAgICAgICBpZih2UENb
M10udS5zdHJ1Y3R1cmUpCisgICAgICAgICAgICB2UENbM10udS5zdHJ1Y3R1cmUtPmRlcmVmKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCh2UENbMF0udS5vcGNvZGUgPT0gaW50
ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpCkBAIC0xNTE4LDYg
KzE1MTksNyBAQCB2b2lkIENvZGVCbG9jazo6bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smCiAgICAg
ICAgIG1fZnVuY3Rpb25FeHByc1tpXS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgKytpKQogICAgICAg
ICBtX2Z1bmN0aW9uRGVjbHNbaV0tPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKKyAgICBtYXJr
U3RhY2suYXBwZW5kKG1fZ2xvYmFsT2JqZWN0KTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6OnJlcGFy
c2VGb3JFeGNlcHRpb25JbmZvSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gNjQ1ODkpCisrKyBKYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcg
KzI3NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMg
RmFzdEFsbG9jQmFzZSB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBD
b2RlVHlwZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBib29sIGlzQ29uc3RydWN0b3IpOworICAgICAg
ICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIGJvb2wgaXNDb25zdHJ1Y3Rvcik7
CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OworCiAgICAgcHVibGlj
OgogICAgICAgICB2aXJ0dWFsIH5Db2RlQmxvY2soKTsKIApAQCAtNDgzLDYgKzQ4Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKiByKSB7IGNy
ZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1f
cmVnZXhwcy5zaXplKCk7IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBlbmQocik7IHJldHVybiBz
aXplOyB9CiAgICAgICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQo
bV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9
CiAKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIG1fZ2xv
YmFsT2JqZWN0OyB9CiAKICAgICAgICAgLy8gSnVtcCBUYWJsZXMKIApAQCAtNjAyLDkgKzYwNiw4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgR2xvYmFsQ29kZUJsb2NrIDogcHVibGlj
IENvZGVCbG9jayB7CiAgICAgcHVibGljOgotICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93
bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsICZt
X3Vuc2hhcmVkU3ltYm9sVGFibGUsIGZhbHNlKQotICAgICAgICAgICAgLCBtX2dsb2JhbE9iamVj
dChnbG9iYWxPYmplY3QpCisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5z
aWduZWQgc291cmNlT2Zmc2V0KQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRh
YmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0
LCAmbV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSkKICAgICAgICAgewogICAgICAgICAgICAg
bV9nbG9iYWxPYmplY3QtPmNvZGVCbG9ja3MoKS5hZGQodGhpcyk7CiAgICAgICAgIH0KQEAgLTYx
OCwxNCArNjIxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNsZWFyR2xvYmFs
T2JqZWN0KCkgeyBtX2dsb2JhbE9iamVjdCA9IDA7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsgLy8gRm9yIHByb2dyYW0gYW5kIGV2YWwg
bm9kZXMsIHRoZSBnbG9iYWwgb2JqZWN0IHRoYXQgbWFya3MgdGhlIGNvbnN0YW50IHBvb2wuCiAg
ICAgICAgIFN5bWJvbFRhYmxlIG1fdW5zaGFyZWRTeW1ib2xUYWJsZTsKICAgICB9OwogCiAgICAg
Y2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewogICAgIHB1
YmxpYzoKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgICAgICAg
ICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBzb3VyY2VQcm92
aWRlciwgMCwgZ2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3du
ZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgfTsKQEAgLTYzMyw3ICs2MzUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9j
ayB7CiAgICAgcHVibGljOgogICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgpCi0gICAg
ICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBzb3Vy
Y2VQcm92aWRlciwgMCwgZ2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxv
Y2sob3duZXJFeGVjdXRhYmxlLCBFdmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRl
ciwgMCkKICAgICAgICAgICAgICwgbV9iYXNlU2NvcGVEZXB0aChiYXNlU2NvcGVEZXB0aCkKICAg
ICAgICAgewogICAgICAgICB9CkBAIC02NTksOCArNjYxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIC8vIGFzIHdlIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGUgQ29kZUJsb2NrIGJlZm9yZSB3
ZSBjb3VsZCBpbml0aWFsaXNlIGFueSBSZWZQdHIgdG8gaG9sZCB0aGUgc2hhcmVkCiAgICAgICAg
IC8vIHN5bWJvbCB0YWJsZSwgc28gd2UganVzdCBwYXNzIGFzIGEgcmF3IHBvaW50ZXIgd2l0aCBh
IHJlZiBjb3VudCBvZiAxLiAgV2UgdGhlbiBtYW51YWxseSBkZXJlZgogICAgICAgICAvLyBpbiB0
aGUgZGVzdHJ1Y3Rvci4KLSAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlz
Q29uc3RydWN0b3IpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBTaGFyZWRTeW1ib2xUYWJsZTo6
Y3JlYXRlKCkucmVsZWFzZVJlZigpLCBpc0NvbnN0cnVjdG9yKQorICAgICAgICBGdW5jdGlvbkNv
ZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJvb2wgaXNDb25z
dHJ1Y3RvcikKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5
cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3lt
Ym9sVGFibGU6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKSwgaXNDb25zdHJ1Y3RvcikKICAgICAgICAg
ewogICAgICAgICB9CiAgICAgICAgIH5GdW5jdGlvbkNvZGVCbG9jaygpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gNjQ1ODkpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTIgKzkzLDEyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX3Jlc29sdmUsIDMpIFwKICAgICAg
ICAgbWFjcm8ob3BfcmVzb2x2ZV9za2lwLCA0KSBcCi0gICAgICAgIG1hY3JvKG9wX3Jlc29sdmVf
Z2xvYmFsLCA2KSBcCi0gICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMsIDcp
IFwKKyAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9nbG9iYWwsIDUpIFwKKyAgICAgICAgbWFjcm8o
b3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYywgNikgXAogICAgICAgICBtYWNybyhvcF9nZXRfc2Nv
cGVkX3ZhciwgNCkgXAogICAgICAgICBtYWNybyhvcF9wdXRfc2NvcGVkX3ZhciwgNCkgXAotICAg
ICAgICBtYWNybyhvcF9nZXRfZ2xvYmFsX3ZhciwgNCkgXAotICAgICAgICBtYWNybyhvcF9wdXRf
Z2xvYmFsX3ZhciwgNCkgXAorICAgICAgICBtYWNybyhvcF9nZXRfZ2xvYmFsX3ZhciwgMykgXAor
ICAgICAgICBtYWNybyhvcF9wdXRfZ2xvYmFsX3ZhciwgMykgXAogICAgICAgICBtYWNybyhvcF9y
ZXNvbHZlX2Jhc2UsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV93aXRoX2Jhc2UsIDQp
IFwKICAgICAgICAgbWFjcm8ob3BfZ2V0X2J5X2lkLCA4KSBcCkBAIC0xODgsNyArMTg4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1hY3JvKG9wX3Byb2ZpbGVfd2lsbF9jYWxsLCAyKSBc
CiAgICAgICAgIG1hY3JvKG9wX3Byb2ZpbGVfZGlkX2NhbGwsIDIpIFwKICAgICAgICAgXAotICAg
ICAgICBtYWNybyhvcF9lbmQsIDIpIC8vIGVuZCBtdXN0IGJlIHRoZSBsYXN0IG9wY29kZSBpbiB0
aGUgbGlzdAorICAgICAgICBtYWNybyhvcF9lbmQsIDIpICAvLyBlbmQgbXVzdCBiZSB0aGUgbGFz
dCBvcGNvZGUgaW4gdGhlIGxpc3QKIAogICAgICNkZWZpbmUgT1BDT0RFX0lEX0VOVU0ob3Bjb2Rl
LCBsZW5ndGgpIG9wY29kZSwKICAgICAgICAgdHlwZWRlZiBlbnVtIHsgRk9SX0VBQ0hfT1BDT0RF
X0lEKE9QQ09ERV9JRF9FTlVNKSB9IE9wY29kZUlEOwpAQCAtMjU0LDYgKzI1NCwxOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2VuZGlmCiAKKyAgICBpbmxpbmUgc2l6ZV90IG9wY29kZUxlbmd0aChP
cGNvZGVJRCBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2gob3Bjb2RlKQorICAgICAgICB7
CisgICAgI2RlZmluZSBPUENPREVfSURfTEVOR1RIUyhpZCwgbGVuZ3RoKSBjYXNlIGlkOiByZXR1
cm4gT1BDT0RFX0xFTkdUSChpZCk7CisgICAgICAgICBGT1JfRUFDSF9PUENPREVfSUQoT1BDT0RF
X0lEX0xFTkdUSFMpOworICAgICN1bmRlZiBPUENPREVfSURfTEVOR1RIUworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gT3Bjb2RlX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNjQ1ODkpCisrKyBKYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTYsNiArMjE2LDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKFBybwogICAgICwgbV9nbG9iYWxDb25zdGFudEluZGV4KDApCiAgICAgLCBtX2dsb2JhbERh
dGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKS0+Z2xvYmFsRGF0YSgp
KQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1f
bGFzdE9wY29kZVBvc2l0aW9uKDApCisjZW5kaWYKICAgICAsIG1fZW1pdE5vZGVEZXB0aCgwKQog
ICAgICwgbV91c2VzRXhjZXB0aW9ucyhmYWxzZSkKICAgICAsIG1fcmVnZW5lcmF0aW5nRm9yRXhj
ZXB0aW9uSW5mbyhmYWxzZSkKQEAgLTU4OCw2ICs1OTEsMTEgQEAgUGFzc1JlZlB0cjxMYWJlbD4g
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3Bj
b2RlKE9wY29kZUlEIG9wY29kZUlEKQogeworI2lmbmRlZiBOREVCVUcKKyAgICBzaXplX3Qgb3Bj
b2RlUG9zaXRpb24gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgQVNTRVJUKG9wY29kZVBv
c2l0aW9uIC0gbV9sYXN0T3Bjb2RlUG9zaXRpb24gPT0gb3Bjb2RlTGVuZ3RoKG1fbGFzdE9wY29k
ZUlEKSB8fCBtX2xhc3RPcGNvZGVJRCA9PSBvcF9lbmQpOworICAgIG1fbGFzdE9wY29kZVBvc2l0
aW9uID0gb3Bjb2RlUG9zaXRpb247CisjZW5kaWYKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wY29kZUlEKSk7CiAgICAgbV9s
YXN0T3Bjb2RlSUQgPSBvcGNvZGVJRDsKIH0KQEAgLTYxMywxMiArNjIxLDE0IEBAIHZvaWQgQUxX
QVlTX0lOTElORSBCeXRlY29kZUdlbmVyYXRvcjo6cmUKIHsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpID49IDQpOwogICAgIGluc3RydWN0aW9ucygpLnNocmluayhpbnN0cnVjdGlv
bnMoKS5zaXplKCkgLSA0KTsKKyAgICBtX2xhc3RPcGNvZGVJRCA9IG9wX2VuZDsKIH0KIAogdm9p
ZCBBTFdBWVNfSU5MSU5FIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXdpbmRVbmFyeU9wKCkKIHsKICAg
ICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDMpOwogICAgIGluc3RydWN0aW9ucygp
LnNocmluayhpbnN0cnVjdGlvbnMoKS5zaXplKCkgLSAzKTsKKyAgICBtX2xhc3RPcGNvZGVJRCA9
IG9wX2VuZDsKIH0KIAogUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRK
dW1wKExhYmVsKiB0YXJnZXQpCkBAIC0xMTA2LDcgKzExMTYsNiBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAjZW5kaWYKICAgICAgICAgZW1pdE9wY29kZShyZXF1
aXJlc0R5bmFtaWNDaGVja3MgPyBvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljIDogb3BfcmVzb2x2
ZV9nbG9iYWwpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsK
LSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsK
QEAgLTExNDIsNyArMTE1MSw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
R2V0U2MKICAgICBpZiAoZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfZ2V0
X2dsb2JhbF92YXIpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFzQ2VsbChnbG9iYWxPYmplY3QpKTsK
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKICAgICAgICAgcmV0dXJuIGRz
dDsKICAgICB9CkBAIC0xMTU4LDcgKzExNjYsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1dFNjCiB7CiAgICAgaWYgKGdsb2JhbE9iamVjdCkgewogICAgICAgICBlbWl0
T3Bjb2RlKG9wX3B1dF9nbG9iYWxfdmFyKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFzQ2VsbChnbG9iYWxPYmplY3QpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGlu
ZGV4KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMTIyOSw3ICsxMjM2LDYgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogI2VuZGlmCiAgICAgZW1pdE9wY29kZShyZXF1aXJl
c0R5bmFtaWNDaGVja3MgPyBvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljIDogb3BfcmVzb2x2ZV9n
bG9iYWwpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wRHN0LT5pbmRleCgpKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2xvYmFsT2JqZWN0KTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDY0NTg5
KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2MCw2ICs1NjAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAKICAgICAgICAgT3Bjb2RlSUQgbV9sYXN0T3Bj
b2RlSUQ7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBzaXplX3QgbV9sYXN0T3Bjb2RlUG9zaXRp
b247CisjZW5kaWYKIAogICAgICAgICB1bnNpZ25lZCBtX2VtaXROb2RlRGVwdGg7CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDY0
NTg5KQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQsMjggKzE0NCwyOCBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnBy
ZXRlcjo6cmVzb2x2ZVNrCiBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUds
b2JhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSYgZXhj
ZXB0aW9uVmFsdWUpCiB7CiAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
dlBDWzJdLnUuanNDZWxsKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVyZTsKLSAgICBpbnQgb2Zmc2V0ID0gdlBD
WzVdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVyYW5kOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzNdLnUuc3RydWN0dXJlOworICAgIGludCBvZmZz
ZXQgPSB2UENbNF0udS5vcGVyYW5kOwogCiAgICAgaWYgKHN0cnVjdHVyZSA9PSBnbG9iYWxPYmpl
Y3QtPnN0cnVjdHVyZSgpKSB7CiAgICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0gSlNWYWx1ZShn
bG9iYWxPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHBy
b3BlcnR5KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOwogICAgIGlmIChn
bG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewog
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7
CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSAmJiBzbG90LnNsb3RCYXNlKCkg
PT0gZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgICAgICBpZiAodlBDWzRdLnUuc3RydWN0dXJlKQot
ICAgICAgICAgICAgICAgIHZQQ1s0XS51LnN0cnVjdHVyZS0+ZGVyZWYoKTsKKyAgICAgICAgICAg
IGlmICh2UENbM10udS5zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgdlBDWzNdLnUuc3RydWN0
dXJlLT5kZXJlZigpOwogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cmVm
KCk7Ci0gICAgICAgICAgICB2UENbNF0gPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpOwotICAg
ICAgICAgICAgdlBDWzVdID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgIHZQQ1sz
XSA9IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICB2UENbNF0gPSBzbG90
LmNhY2hlZE9mZnNldCgpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGRzdCkgPSBKU1ZhbHVl
KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTg0LDEz
ICsxODQsMTMgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVHbAogTkVW
RVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVHbG9iYWxEeW5hbWljKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSkK
IHsKICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih2UENbMl0udS5qc0Nl
bGwpOwotICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwotICAgIGlu
dCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2UENbNF0udS5zdHJ1Y3R1cmU7Ci0gICAgaW50IG9mZnNldCA9IHZQQ1s1XS51Lm9wZXJhbmQ7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
IGludCBza2lwID0gdlBDWzZdLnUub3BlcmFuZDsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICBBU1NFUlQoZ2xvYmFsT2Jq
ZWN0LT5pc0dsb2JhbE9iamVjdCgpKTsKKyAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVy
YW5kOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzNdLnUuc3RydWN0dXJlOworICAg
IGludCBvZmZzZXQgPSB2UENbNF0udS5vcGVyYW5kOworICAgIGludCBza2lwID0gdlBDWzVdLnUu
b3BlcmFuZDsKICAgICAKICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFt
ZS0+c2NvcGVDaGFpbigpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFp
bi0+YmVnaW4oKTsKQEAgLTIzMSwxMSArMjMxLDExIEBAIE5FVkVSX0lOTElORSBib29sIEludGVy
cHJldGVyOjpyZXNvbHZlR2wKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3Qo
Y2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90
LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZVZhbHVlKCkgJiYgIWdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAgICAg
ICAgaWYgKHZQQ1s0XS51LnN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICB2UENbNF0udS5zdHJ1
Y3R1cmUtPmRlcmVmKCk7CisgICAgICAgICAgICBpZiAodlBDWzNdLnUuc3RydWN0dXJlKQorICAg
ICAgICAgICAgICAgIHZQQ1szXS51LnN0cnVjdHVyZS0+ZGVyZWYoKTsKICAgICAgICAgICAgIGds
b2JhbE9iamVjdC0+c3RydWN0dXJlKCktPnJlZigpOwotICAgICAgICAgICAgdlBDWzRdID0gZ2xv
YmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIHZQQ1s1XSA9IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7CisgICAgICAgICAgICB2UENbM10gPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgp
OworICAgICAgICAgICAgdlBDWzRdID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgICAg
IGNhbGxGcmFtZS0+cihkc3QpID0gSlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KQEAgLTIyODQsOSArMjI4NCw5IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgICAgR2V0cyB0aGUgZ2xvYmFsIHZhciBh
dCBnbG9iYWwgc2xvdCBpbmRleCBhbmQgcGxhY2VzIGl0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAg
ICAgICovCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU0ds
b2JhbE9iamVjdCogc2NvcGUgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHZQQ1syXS51
LmpzQ2VsbCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgICAgIEFTU0VSVChzY29wZS0+aXNHbG9iYWxPYmplY3QoKSk7Ci0g
ICAgICAgIGludCBpbmRleCA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBpbmRleCA9
IHZQQ1syXS51Lm9wZXJhbmQ7CiAKICAgICAgICAgY2FsbEZyYW1lLT5yKGRzdCkgPSBzY29wZS0+
cmVnaXN0ZXJBdChpbmRleCk7CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9n
bG9iYWxfdmFyKTsKQEAgLTIyOTcsMTAgKzIyOTcsMTAgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAgCiAgICAgICAgICAgIFB1dHMgdmFsdWUgaW50
byBnbG9iYWwgc2xvdCBpbmRleC4KICAgICAgICAgICovCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBzY29wZSA9IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odlBDWzFdLnUuanNDZWxsKTsK
KyAgICAgICAgSlNHbG9iYWxPYmplY3QqIHNjb3BlID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KTsKICAgICAgICAgQVNTRVJUKHNjb3BlLT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgaW50
IGluZGV4ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUu
b3BlcmFuZDsKKyAgICAgICAgaW50IGluZGV4ID0gdlBDWzFdLnUub3BlcmFuZDsKKyAgICAgICAg
aW50IHZhbHVlID0gdlBDWzJdLnUub3BlcmFuZDsKICAgICAgICAgCiAgICAgICAgIHNjb3BlLT5y
ZWdpc3RlckF0KGluZGV4KSA9IEpTVmFsdWUoY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkp
OwogICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3Zhcik7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gNjQ1ODkpCisr
KyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTE2LDkgKzUxNiw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jKEluc3RydWN0aW9u
KiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpT
R2xvYmFsT2JqZWN0Kj4oY3VycmVudEluc3RydWN0aW9uWzJdLnUuanNDZWxsKTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwog
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwotICAgIGludCBpbmRl
eCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAogICAgIGxvYWRQdHIoJmdsb2JhbE9iamVj
dC0+ZCgpLT5yZWdpc3RlcnMsIHJlZ1QyKTsKIApAQCAtNTI5LDEwICs1MjksMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2dsb2JhbF92YXIoSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LmpzQ2VsbCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICBBU1NFUlQoZ2xv
YmFsT2JqZWN0LT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwogCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTY2OSw3ICs2Njks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbChJbnN0cnVjCiAgICAgLy8gRklY
TUU6IE9wdGltaXplIHRvIHVzZSBwYXRjaGluZyBpbnN0ZWFkIG9mIHNvIG1hbnkgbWVtb3J5IGFj
Y2Vzc2VzLgogCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICB2b2lkKiBnbG9iYWxPYmplY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5q
c0NlbGw7CisgICAgdm9pZCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpOwogCiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gbV9nbG9iYWxSZXNvbHZlSW5mb0lu
ZGV4Kys7CiAgICAgdm9pZCogc3RydWN0dXJlQWRkcmVzcyA9ICYobV9jb2RlQmxvY2stPmdsb2Jh
bFJlc29sdmVJbmZvKGN1cnJlbnRJbmRleCkuc3RydWN0dXJlKTsKQEAgLTY5MiwxNCArNjkyLDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWMKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9yZXNvbHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIHVuc2lnbmVk
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdm9pZCogZ2xvYmFs
T2JqZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUuanNDZWxsOwotICAgIElkZW50aWZpZXIq
IGlkZW50ID0gJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOworICAgIElkZW50aWZpZXIqIGlkZW50ID0gJm1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogCiAgICAgdW5zaWduZWQgY3Vy
cmVudEluZGV4ID0gbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4Kys7CiAKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVf
Z2xvYmFsKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoZ2xvYmFsT2JqZWN0KSk7
CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKGlkZW50KSk7CiAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoSW1tMzIoY3VycmVudEluZGV4KSk7CiAgICAgc3R1YkNhbGwuY2FsbChkc3Qp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gNjQ1ODkpCisrKyBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miwx
OCArNDYyLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbioKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY3VycmVudEluc3RydWN0aW9uWzJdLnUuanNDZWxsKTsK
KyAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCk7CiAgICAgbW92ZShJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgcmVnVDApOwotICAgIGVt
aXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kLCByZWdUMCk7CisgICAgZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIocmVn
VDAsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCwgcmVnVDEpOwotICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5qc0NlbGwpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICBtb3ZlKEltbVB0cihnbG9iYWxP
YmplY3QpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIocmVnVDEs
IHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICBlbWl0UHV0VmFy
aWFibGVPYmplY3RSZWdpc3RlcihyZWdUMSwgcmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVkX3ZhcihJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjQ0LDcgKzY0NCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2tpcChJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
Z2xvYmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGJvb2wpCiB7CiAgICAgLy8g
RmFzdCBjYXNlCi0gICAgdm9pZCogZ2xvYmFsT2JqZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUuanNDZWxsOworICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKTsKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29sdmVJbmZv
SW5kZXgrKzsKICAgICB2b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0gJihtX2NvZGVCbG9jay0+Z2xv
YmFsUmVzb2x2ZUluZm8oY3VycmVudEluZGV4KS5zdHJ1Y3R1cmUpOwogICAgIHZvaWQqIG9mZnNl
dEFkZHIgPSAmKG1fY29kZUJsb2NrLT5nbG9iYWxSZXNvbHZlSW5mbyhjdXJyZW50SW5kZXgpLm9m
ZnNldCk7CkBAIC02NjUsMTYgKzY2NSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2ds
b2JhbChJbnN0cnVjCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
LmpzQ2VsbDsKLSAgICBJZGVudGlmaWVyKiBpZGVudCA9ICZtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICBJZGVudGlmaWVyKiBpZGVu
dCA9ICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKICAgICAKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29sdmVJ
bmZvSW5kZXgrKzsKICAgICAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVfZ2xvYmFsKTsKLSAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChJbW1QdHIoZ2xvYmFsT2JqZWN0KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoSW1tUHRyKGlkZW50KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVu
dEluZGV4KSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJDYWxs
LmNhbGwoZHN0KTsKIH0KIApAQCAtMTQ4OSw3ICsxNDg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RvX2pzbnVtYmVyKEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2Jh
bF9keW5hbWljKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNr
aXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOworICAgIGludCBza2lwID0gY3Vy
cmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QwKTsKICAgICB3aGls
ZSAoc2tpcC0tKSB7CkBAIC0xNTAzLDkgKzE1MDIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX2dsb2JhbF9keW5hbWljCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWxf
ZHluYW1pYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdm9pZCogZ2xvYmFsT2JqZWN0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUuanNDZWxsOwotICAgIElkZW50aWZpZXIqIGlkZW50ID0gJm1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgIGlu
dCBza2lwID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKKyAgICBJZGVudGlmaWVy
KiBpZGVudCA9ICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJh
bmQ7CiAgICAgd2hpbGUgKHNraXAtLSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAg
IEpJVFN0dWJDYWxsIHJlc29sdmVTdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZSk7CkBAIC0x
NTE3LDkgKzE1MTUsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWxfZHlu
CiAgICAgCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBXZSBtYW5hZ2VkIHRvIHNraXAgYWxs
IHRoZSBub2RlcyBpbiB0aGUgc2NvcGUgY2hhaW4sIGJ1dCB0aGUgY2FjaGUgbWlzc2VkLgogICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKGdsb2JhbE9iamVjdCkpOwogICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KEltbVB0cihpZGVudCkpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KElt
bTMyKGN1cnJlbnRJbmRleCkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAg
ICBzdHViQ2FsbC5jYWxsKGRzdCk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gNjQ1ODkpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjExLDE2ICsyNjExLDE3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF8KICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uZ2xvYmFs
T2JqZWN0KCk7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRl
bnRpZmllcigpOwotICAgIHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbmZvSW5kZXggPSBzdGFja0Zy
YW1lLmFyZ3NbMl0uaW50MzIoKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1l
LmFyZ3NbMF0uaWRlbnRpZmllcigpOworICAgIHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbmZvSW5k
ZXggPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKTsKICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
LT5pc0dsb2JhbE9iamVjdCgpKTsKIAogICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVj
dCk7CiAgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRl
bnQsIHNsb3QpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxs
RnJhbWUsIGlkZW50KTsKICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFn
bG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpICYmIHNs
b3Quc2xvdEJhc2UoKSA9PSBnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgICAgIEdsb2JhbFJlc29s
dmVJbmZvJiBnbG9iYWxSZXNvbHZlSW5mbyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmdsb2Jh
bFJlc29sdmVJbmZvKGdsb2JhbFJlc29sdmVJbmZvSW5kZXgpOworICAgICAgICAgICAgR2xvYmFs
UmVzb2x2ZUluZm8mIGdsb2JhbFJlc29sdmVJbmZvID0gY29kZUJsb2NrLT5nbG9iYWxSZXNvbHZl
SW5mbyhnbG9iYWxSZXNvbHZlSW5mb0luZGV4KTsKICAgICAgICAgICAgIGlmIChnbG9iYWxSZXNv
bHZlSW5mby5zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgZ2xvYmFsUmVzb2x2ZUluZm8uc3Ry
dWN0dXJlLT5kZXJlZigpOwogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
cmVmKCk7CkBAIC0yNjMzLDggKzI2MzQsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJ5
dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7Ci0gICAgc3RhY2tG
cmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9y
KGNhbGxGcmFtZSwgaWRlbnQsIHZQQ0luZGV4LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAg
ICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1l
LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2Vw
dGlvbiA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCwgdlBD
SW5kZXgsIGNvZGVCbG9jayk7CiAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiB9CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gNjQ1ODkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTIsNyArMTkyLDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluLmdsb2JhbE9iamVj
dCgpOwogCiAgICAgQVNTRVJUKCFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIG1fY29kZUJsb2Nr
Rm9yQ2FsbCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNv
ZGUsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlKSk7
CisgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2Nr
KHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
b3VyY2UoKS5zdGFydE9mZnNldCgpLCBmYWxzZSkpOwogICAgIE93blB0cjxCeXRlY29kZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgp
LCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG1fY29kZUJsb2NrRm9yQ2Fs
bC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkpOwogICAgIGdlbmVy
YXRvci0+Z2VuZXJhdGUoKTsKICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gbV9jb2RlQmxv
Y2tGb3JDYWxsLT5tX251bVBhcmFtZXRlcnM7CkBAIC0yMzMsNyArMjMzLDcgQEAgSlNPYmplY3Qq
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpOwogCiAgICAgQVNTRVJUKCFtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBhZG9w
dFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBzb3VyY2UoKS5w
cm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCB0cnVlKSk7CisgICAgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVu
Y3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0
YXJ0T2Zmc2V0KCksIHRydWUpKTsKICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVy
YXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgZ2xvYmFsT2Jq
ZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3lt
Ym9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCkpKSk7CiAgICAgZ2VuZXJh
dG9yLT5nZW5lcmF0ZSgpOwogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5tX251bVBhcmFtZXRlcnM7CkBAIC0yNzcsNyArMjc3LDcgQEAg
UGFzc093blB0cjxFeGNlcHRpb25JbmZvPiBGdW5jdGlvbkV4ZWN1dAogICAgIFNjb3BlQ2hhaW4g
c2NvcGVDaGFpbihzY29wZUNoYWluTm9kZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCk7CiAKLSAgICBPd25QdHI8Q29kZUJsb2Nr
PiBuZXdDb2RlQmxvY2soYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0
aW9uQ29kZSwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgY29k
ZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gbmV3Q29k
ZUJsb2NrKGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUs
IGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQo
KSwgY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IpKSk7CiAgICAgZ2xvYmFsRGF0YS0+ZnVuY3Rp
b25Db2RlQmxvY2tCZWluZ1JlcGFyc2VkID0gbmV3Q29kZUJsb2NrLmdldCgpOwogCiAgICAgT3du
UHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2Vu
ZXJhdG9yKG5ld0Z1bmN0aW9uQm9keS5nZXQoKSwgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBz
Y29wZUNoYWluLCBuZXdDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG5ld0NvZGVCbG9jay5nZXQo
KSkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63458</attachid>
            <date>2010-08-04 09:34:01 -0700</date>
            <delta_ts>2010-08-04 14:31:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>globalObject.patch</filename>
            <type>text/plain</type>
            <size>29878</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NjUzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTAtMDgtMDQgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzNDY0CisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgZ2xvYmFsIG9iamVjdCBpcyBi
ZWluZyBlbWJlZGRlZCBpbiB0aGUgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgYnl0ZWNvZGUsIGhv
d2V2ZXIgc2luY2UgdGhlIGdsb2JhbCBvYmplY3QgaXMgdGhlIHNhbWUgZm9yIGFsbCBvcGNvZGVz
CisgICAgICAgIGluIGEgY29kZSBibG9jaywgd2UgY2FuIGhhdmUgdGhlIGdsb2JhbCBvYmplY3Qg
anVzdCBiZSBhIG1lbWJlciBvZiB0aGUKKyAgICAgICAgYXNzb2NpYXRlZCBjb2RlIGJsb2NrLgor
CisgICAgICAgIEFkZGl0aW9uYWxseSwgSSBhZGRlZCBhbiBhc3NlcnQgaW5zaWRlIG9mIGVtaXRP
cGNvZGUgdGhhdCB2ZXJpZmllcworICAgICAgICB0aGF0IHRoZSBsYXN0IGdlbmVyYXRlZCBvcGNv
ZGUgd2FzIG9mIHRoZSBjb3JyZWN0IGxlbmd0aC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpkZXJlZlN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om1hcmtBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omdsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6Okdsb2Jh
bENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVC
bG9jazo6UHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OkV2
YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6RnVuY3Rpb25D
b2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDOjpv
cGNvZGVMZW5ndGgpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3Bjb2RlKToKKyAgICAgICAg
ICAgIEFkZGVkIGFuIGFzc2VydCB0byBjaGVjayB0aGF0IHRoZSBsYXN0IGdlbmVyYXRlZCBvcGNv
ZGUgaXMgdGhlCisgICAgICAgICAgICBjb3JyZWN0IGxlbmd0aC4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnJld2luZEJpbmFyeU9wKToKKyAgICAgICAgICAgIENoYW5nZWQgdGhl
IGxhc3Qgb3Bjb2RlIHRvIG9wX2VuZCBzaW5jZSB0aGUgbGVuZ3RoIHdpbGwgbm8gbG9uZ2VyCisg
ICAgICAgICAgICBiZSBjb3JyZWN0LgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
cmV3aW5kVW5hcnlPcCk6CisgICAgICAgICAgICBDaGFuZ2VkIHRoZSBsYXN0IG9wY29kZSB0byBv
cF9lbmQgc2luY2UgdGhlIGxlbmd0aCB3aWxsIG5vIGxvbmdlcgorICAgICAgICAgICAgYmUgY29y
cmVjdC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTY29wZWRWYXIpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNjb3BlZFZhcik6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXNvbHZlR2xvYmFs
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVHbG9iYWxEeW5hbWljKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQv
SklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3Zh
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3Zhcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cmVzb2x2ZV9nbG9iYWwpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChK
U0M6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbElu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29u
c3RydWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFy
c2VFeGNlcHRpb25JbmZvKToKKwogMjAxMC0wOC0wMyAgTmF0aGFuIExhd3JlbmNlICA8bmxhd3Jl
bmNlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNjQ1ODkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzQ0LDggKzEzNDQsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlm
CiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1UYWIsIGJv
b2wgaXNDb25zdHJ1Y3RvcikKLSAgICA6IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCitDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xU
YWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCisgICAgOiBtX2dsb2JhbE9iamVjdChn
bG9iYWxPYmplY3QpCisgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1W
YXJzKDApCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkKICAgICAsIG1faXNDb25zdHJ1Y3Rvcihp
c0NvbnN0cnVjdG9yKQpAQCAtMTQ1Nyw4ICsxNDU4LDggQEAgdm9pZCBDb2RlQmxvY2s6OmRlcmVm
U3RydWN0dXJlcyhJbnN0cnVjdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh2UENb
MF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9yZXNvbHZlX2dsb2JhbCkg
fHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcmVzb2x2ZV9n
bG9iYWxfZHluYW1pYykpIHsKLSAgICAgICAgaWYodlBDWzRdLnUuc3RydWN0dXJlKQotICAgICAg
ICAgICAgdlBDWzRdLnUuc3RydWN0dXJlLT5kZXJlZigpOworICAgICAgICBpZiAodlBDWzNdLnUu
c3RydWN0dXJlKQorICAgICAgICAgICAgdlBDWzNdLnUuc3RydWN0dXJlLT5kZXJlZigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICgodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJl
dGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKQpAQCAtMTUxOCw2ICsxNTE5
LDcgQEAgdm9pZCBDb2RlQmxvY2s6Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJgogICAgICAgICBt
X2Z1bmN0aW9uRXhwcnNbaV0tPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7ICsraSkKICAgICAgICAgbV9m
dW5jdGlvbkRlY2xzW2ldLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CisgICAgbWFya1N0YWNr
LmFwcGVuZChtX2dsb2JhbE9iamVjdCk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpyZXBhcnNlRm9y
RXhjZXB0aW9uSW5mb0lmTmVjZXNzYXJ5KENhbGxGcmFtZSogY2FsbEZyYW1lKQpJbmRleDogSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDY0NTg5KQorKysgSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEZhc3RB
bGxvY0Jhc2UgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5
cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgQ29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xv
YmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9m
ZnNldCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBib29sIGlzQ29uc3RydWN0b3IpOworCisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKKwogICAgIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB+Q29kZUJsb2NrKCk7CiAKQEAgLTQ4Myw2ICs0ODYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikgeyBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4
cHMuc2l6ZSgpOyBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKHIpOyByZXR1cm4gc2l6ZTsg
fQogICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFy
ZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQoKTsgfQogCisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBtX2dsb2JhbE9i
amVjdDsgfQogCiAgICAgICAgIC8vIEp1bXAgVGFibGVzCiAKQEAgLTYwMiw5ICs2MDYsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2Rl
QmxvY2sgewogICAgIHB1YmxpYzoKLSAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4
ZWN1dGFibGUsIGNvZGVUeXBlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAmbV91bnNo
YXJlZFN5bWJvbFRhYmxlLCBmYWxzZSkKLSAgICAgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xv
YmFsT2JqZWN0KQorICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVk
IHNvdXJjZU9mZnNldCkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwg
Y29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgJm1f
dW5zaGFyZWRTeW1ib2xUYWJsZSwgZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZ2xv
YmFsT2JqZWN0LT5jb2RlQmxvY2tzKCkuYWRkKHRoaXMpOwogICAgICAgICB9CkBAIC02MTgsMTQg
KzYyMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjbGVhckdsb2JhbE9iamVj
dCgpIHsgbV9nbG9iYWxPYmplY3QgPSAwOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU0ds
b2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7IC8vIEZvciBwcm9ncmFtIGFuZCBldmFsIG5vZGVz
LCB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG1hcmtzIHRoZSBjb25zdGFudCBwb29sLgogICAgICAg
ICBTeW1ib2xUYWJsZSBtX3Vuc2hhcmVkU3ltYm9sVGFibGU7CiAgICAgfTsKIAogICAgIGNsYXNz
IFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBh
c3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQotICAgICAgICAgICAgOiBH
bG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgc291cmNlUHJvdmlkZXIs
IDAsIGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgIH07CkBAIC02MzMsNyArNjM1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgRXZhbENvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewog
ICAgIHB1YmxpYzoKICAgICAgICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoKQotICAgICAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBFdmFsQ29kZSwgc291cmNlUHJv
dmlkZXIsIDAsIGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93
bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDAp
CiAgICAgICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoYmFzZVNjb3BlRGVwdGgpCiAgICAgICAg
IHsKICAgICAgICAgfQpAQCAtNjU5LDggKzY2MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyBhcyB3ZSBuZWVkIHRvIGluaXRpYWxpc2UgdGhlIENvZGVCbG9jayBiZWZvcmUgd2UgY291
bGQgaW5pdGlhbGlzZSBhbnkgUmVmUHRyIHRvIGhvbGQgdGhlIHNoYXJlZAogICAgICAgICAvLyBz
eW1ib2wgdGFibGUsIHNvIHdlIGp1c3QgcGFzcyBhcyBhIHJhdyBwb2ludGVyIHdpdGggYSByZWYg
Y291bnQgb2YgMS4gIFdlIHRoZW4gbWFudWFsbHkgZGVyZWYKICAgICAgICAgLy8gaW4gdGhlIGRl
c3RydWN0b3IuCi0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgYm9vbCBpc0NvbnN0
cnVjdG9yKQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlw
ZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0
ZSgpLnJlbGVhc2VSZWYoKSwgaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxv
Y2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlzQ29uc3RydWN0
b3IpCisgICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBn
bG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIFNoYXJlZFN5bWJvbFRh
YmxlOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCksIGlzQ29uc3RydWN0b3IpCiAgICAgICAgIHsKICAg
ICAgICAgfQogICAgICAgICB+RnVuY3Rpb25Db2RlQmxvY2soKQpJbmRleDogSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDY0NTg5KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDEyICs5MywxMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9yZXNvbHZlLCAzKSBcCiAgICAgICAgIG1h
Y3JvKG9wX3Jlc29sdmVfc2tpcCwgNCkgXAotICAgICAgICBtYWNybyhvcF9yZXNvbHZlX2dsb2Jh
bCwgNikgXAotICAgICAgICBtYWNybyhvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljLCA3KSBcCisg
ICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfZ2xvYmFsLCA1KSBcCisgICAgICAgIG1hY3JvKG9wX3Jl
c29sdmVfZ2xvYmFsX2R5bmFtaWMsIDYpIFwKICAgICAgICAgbWFjcm8ob3BfZ2V0X3Njb3BlZF92
YXIsIDQpIFwKICAgICAgICAgbWFjcm8ob3BfcHV0X3Njb3BlZF92YXIsIDQpIFwKLSAgICAgICAg
bWFjcm8ob3BfZ2V0X2dsb2JhbF92YXIsIDQpIFwKLSAgICAgICAgbWFjcm8ob3BfcHV0X2dsb2Jh
bF92YXIsIDQpIFwKKyAgICAgICAgbWFjcm8ob3BfZ2V0X2dsb2JhbF92YXIsIDMpIFwKKyAgICAg
ICAgbWFjcm8ob3BfcHV0X2dsb2JhbF92YXIsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfcmVzb2x2
ZV9iYXNlLCAzKSBcCiAgICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfd2l0aF9iYXNlLCA0KSBcCiAg
ICAgICAgIG1hY3JvKG9wX2dldF9ieV9pZCwgOCkgXApAQCAtMjU0LDYgKzI1NCwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2VuZGlmCiAKKyAgICBpbmxpbmUgc2l6ZV90IG9wY29kZUxlbmd0aChP
cGNvZGVJRCBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2gob3Bjb2RlKSB7CisjZGVmaW5l
IE9QQ09ERV9JRF9MRU5HVEhTKGlkLCBsZW5ndGgpIGNhc2UgaWQ6IHJldHVybiBPUENPREVfTEVO
R1RIKGlkKTsKKyAgICAgICAgICAgICBGT1JfRUFDSF9PUENPREVfSUQoT1BDT0RFX0lEX0xFTkdU
SFMpCisjdW5kZWYgT1BDT0RFX0lEX0xFTkdUSFMKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIE9wY29kZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDY0NTg5KQorKysg
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE2LDYgKzIxNiw5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihQcm8KICAgICAsIG1fZ2xvYmFsQ29uc3RhbnRJbmRleCgwKQogICAgICwgbV9nbG9i
YWxEYXRhKCZzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCktPmdsb2JhbERh
dGEoKSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKKyNpZm5kZWYgTkRFQlVHCisgICAg
LCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQorI2VuZGlmCiAgICAgLCBtX2VtaXROb2RlRGVwdGgo
MCkKICAgICAsIG1fdXNlc0V4Y2VwdGlvbnMoZmFsc2UpCiAgICAgLCBtX3JlZ2VuZXJhdGluZ0Zv
ckV4Y2VwdGlvbkluZm8oZmFsc2UpCkBAIC01ODgsNiArNTkxLDExIEBAIFBhc3NSZWZQdHI8TGFi
ZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWkKIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCkKIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgc2l6ZV90
IG9wY29kZVBvc2l0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIEFTU0VSVChvcGNv
ZGVQb3NpdGlvbiAtIG1fbGFzdE9wY29kZVBvc2l0aW9uID09IG9wY29kZUxlbmd0aChtX2xhc3RP
cGNvZGVJRCkgfHwgbV9sYXN0T3Bjb2RlSUQgPT0gb3BfZW5kKTsKKyAgICBtX2xhc3RPcGNvZGVQ
b3NpdGlvbiA9IG9wY29kZVBvc2l0aW9uOworI2VuZGlmCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcGNvZGVJRCkpOwogICAg
IG1fbGFzdE9wY29kZUlEID0gb3Bjb2RlSUQ7CiB9CkBAIC02MTMsMTIgKzYyMSwxNCBAQCB2b2lk
IEFMV0FZU19JTkxJTkUgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlCiB7CiAgICAgQVNTRVJUKGluc3Ry
dWN0aW9ucygpLnNpemUoKSA+PSA0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5zaHJpbmsoaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpIC0gNCk7CisgICAgbV9sYXN0T3Bjb2RlSUQgPSBvcF9lbmQ7CiB9CiAK
IHZvaWQgQUxXQVlTX0lOTElORSBCeXRlY29kZUdlbmVyYXRvcjo6cmV3aW5kVW5hcnlPcCgpCiB7
CiAgICAgQVNTRVJUKGluc3RydWN0aW9ucygpLnNpemUoKSA+PSAzKTsKICAgICBpbnN0cnVjdGlv
bnMoKS5zaHJpbmsoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIC0gMyk7CisgICAgbV9sYXN0T3Bjb2Rl
SUQgPSBvcF9lbmQ7CiB9CiAKIFBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0SnVtcChMYWJlbCogdGFyZ2V0KQpAQCAtMTEwNiw3ICsxMTE2LDYgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogI2VuZGlmCiAgICAgICAgIGVtaXRPcGNvZGUo
cmVxdWlyZXNEeW5hbWljQ2hlY2tzID8gb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyA6IG9wX3Jl
c29sdmVfZ2xvYmFsKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgo
KSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChnbG9iYWxPYmplY3QpOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
MCk7CkBAIC0xMTQyLDcgKzExNTEsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldFNjCiAgICAgaWYgKGdsb2JhbE9iamVjdCkgewogICAgICAgICBlbWl0T3Bjb2RlKG9w
X2dldF9nbG9iYWxfdmFyKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5k
ZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhc0NlbGwoZ2xvYmFsT2JqZWN0
KSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleCk7CiAgICAgICAgIHJldHVy
biBkc3Q7CiAgICAgfQpAQCAtMTE1OCw3ICsxMTY2LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRQdXRTYwogewogICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAgICAg
ZW1pdE9wY29kZShvcF9wdXRfZ2xvYmFsX3Zhcik7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChhc0NlbGwoZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChpbmRleCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7
CiAgICAgICAgIHJldHVybiB2YWx1ZTsKQEAgLTEyMjksNyArMTIzNiw2IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2wKICNlbmRpZgogICAgIGVtaXRPcGNvZGUocmVx
dWlyZXNEeW5hbWljQ2hlY2tzID8gb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyA6IG9wX3Jlc29s
dmVfZ2xvYmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcERzdC0+aW5kZXgoKSk7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdsb2JhbE9iamVjdCk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA2
NDU4OSkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNiArNTYwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCiAgICAgICAgIE9wY29kZUlEIG1fbGFz
dE9wY29kZUlEOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgc2l6ZV90IG1fbGFzdE9wY29kZVBv
c2l0aW9uOworI2VuZGlmCiAKICAgICAgICAgdW5zaWduZWQgbV9lbWl0Tm9kZURlcHRoOwogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biA2NDU4OSkKKysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ0LDI4ICsxNDQsMjggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50
ZXJwcmV0ZXI6OnJlc29sdmVTawogTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29s
dmVHbG9iYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUm
IGV4Y2VwdGlvblZhbHVlKQogewogICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVj
dCo+KHZQQ1syXS51LmpzQ2VsbCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFs
T2JqZWN0KCkpOwotICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmU7Ci0gICAgaW50IG9mZnNldCA9
IHZQQ1s1XS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZQQ1szXS51LnN0cnVjdHVyZTsKKyAgICBpbnQg
b2Zmc2V0ID0gdlBDWzRdLnUub3BlcmFuZDsKIAogICAgIGlmIChzdHJ1Y3R1cmUgPT0gZ2xvYmFs
T2JqZWN0LT5zdHJ1Y3R1cmUoKSkgewogICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9IEpTVmFs
dWUoZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKICAgICBp
ZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkp
IHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRl
bnQpOwogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgJiYgIWdsb2JhbE9iamVj
dC0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgJiYgc2xvdC5zbG90QmFz
ZSgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAgICAgICAgaWYgKHZQQ1s0XS51LnN0cnVjdHVy
ZSkKLSAgICAgICAgICAgICAgICB2UENbNF0udS5zdHJ1Y3R1cmUtPmRlcmVmKCk7CisgICAgICAg
ICAgICBpZiAodlBDWzNdLnUuc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHZQQ1szXS51LnN0
cnVjdHVyZS0+ZGVyZWYoKTsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkt
PnJlZigpOwotICAgICAgICAgICAgdlBDWzRdID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgIHZQQ1s1XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICB2
UENbM10gPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpOworICAgICAgICAgICAgdlBDWzRdID0g
c2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0gSlNW
YWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE4
NCwxMyArMTg0LDEzIEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlR2wK
IE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlR2xvYmFsRHluYW1pYyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSYgZXhjZXB0aW9uVmFs
dWUpCiB7CiAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odlBDWzJdLnUu
anNDZWxsKTsKLSAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5pc0dsb2JhbE9iamVjdCgpKTsKLSAg
ICBpbnQgcHJvcGVydHkgPSB2UENbM10udS5vcGVyYW5kOwotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlOwotICAgIGludCBvZmZzZXQgPSB2UENbNV0udS5vcGVy
YW5kOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
LSAgICBpbnQgc2tpcCA9IHZQQ1s2XS51Lm9wZXJhbmQ7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgQVNTRVJUKGdsb2Jh
bE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSk7CisgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUu
b3BlcmFuZDsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZQQ1szXS51LnN0cnVjdHVyZTsK
KyAgICBpbnQgb2Zmc2V0ID0gdlBDWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgc2tpcCA9IHZQQ1s1
XS51Lm9wZXJhbmQ7CiAgICAgCiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3Bl
Q2hhaW4tPmJlZ2luKCk7CkBAIC0yMzEsMTEgKzIzMSwxMSBAQCBORVZFUl9JTkxJTkUgYm9vbCBJ
bnRlcnByZXRlcjo6cmVzb2x2ZUdsCiAgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlT
bG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
c2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVWYWx1ZSgpICYmICFnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBnbG9iYWxPYmplY3QpIHsKLSAgICAg
ICAgICAgIGlmICh2UENbNF0udS5zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgdlBDWzRdLnUu
c3RydWN0dXJlLT5kZXJlZigpOworICAgICAgICAgICAgaWYgKHZQQ1szXS51LnN0cnVjdHVyZSkK
KyAgICAgICAgICAgICAgICB2UENbM10udS5zdHJ1Y3R1cmUtPmRlcmVmKCk7CiAgICAgICAgICAg
ICBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5yZWYoKTsKLSAgICAgICAgICAgIHZQQ1s0XSA9
IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICB2UENbNV0gPSBzbG90LmNh
Y2hlZE9mZnNldCgpOworICAgICAgICAgICAgdlBDWzNdID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgIHZQQ1s0XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAg
ICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9IEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yMjg0LDkgKzIyODQsOSBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICAgIEdldHMgdGhlIGdsb2JhbCB2
YXIgYXQgZ2xvYmFsIHNsb3QgaW5kZXggYW5kIHBsYWNlcyBpdCBpbiByZWdpc3RlciBkc3QuCiAg
ICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAg
SlNHbG9iYWxPYmplY3QqIHNjb3BlID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih2UENb
Ml0udS5qc0NlbGwpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogc2NvcGUgPSBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpOwogICAgICAgICBBU1NFUlQoc2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkp
OwotICAgICAgICBpbnQgaW5kZXggPSB2UENbM10udS5vcGVyYW5kOworICAgICAgICBpbnQgaW5k
ZXggPSB2UENbMl0udS5vcGVyYW5kOwogCiAgICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0gc2Nv
cGUtPnJlZ2lzdGVyQXQoaW5kZXgpOwogICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9n
ZXRfZ2xvYmFsX3Zhcik7CkBAIC0yMjk3LDEwICsyMjk3LDEwIEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgIAogICAgICAgICAgICBQdXRzIHZhbHVl
IGludG8gZ2xvYmFsIHNsb3QgaW5kZXguCiAgICAgICAgICAqLwotICAgICAgICBKU0dsb2JhbE9i
amVjdCogc2NvcGUgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHZQQ1sxXS51LmpzQ2Vs
bCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7CiAgICAgICAgIEFTU0VSVChzY29wZS0+aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAgICAg
IGludCBpbmRleCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWx1ZSA9IHZQQ1sz
XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBpbmRleCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAg
ICAgIGludCB2YWx1ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIAogICAgICAgICBzY29w
ZS0+cmVnaXN0ZXJBdChpbmRleCkgPSBKU1ZhbHVlKGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1
ZSgpKTsKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHV0X2dsb2JhbF92YXIpOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDY0NTg5
KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxNiw5ICs1MTYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuYyhJbnN0cnVj
dGlvbiogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0dsb2JhbE9iamVjdCo+KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LmpzQ2VsbCk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KTsKICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICBpbnQg
aW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICBsb2FkUHRyKCZnbG9iYWxP
YmplY3QtPmQoKS0+cmVnaXN0ZXJzLCByZWdUMik7CiAKQEAgLTUyOSwxMCArNTI5LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5qc0NlbGwpOworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgQVNTRVJU
KGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAgaW50IGluZGV4ID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogCkBAIC02NjksNyAr
NjY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1YwogICAgIC8v
IEZJWE1FOiBPcHRpbWl6ZSB0byB1c2UgcGF0Y2hpbmcgaW5zdGVhZCBvZiBzbyBtYW55IG1lbW9y
eSBhY2Nlc3Nlcy4KIAogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgdm9pZCogZ2xvYmFsT2JqZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUuanNDZWxsOworICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKTsKIAogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IG1fZ2xvYmFsUmVzb2x2ZUlu
Zm9JbmRleCsrOwogICAgIHZvaWQqIHN0cnVjdHVyZUFkZHJlc3MgPSAmKG1fY29kZUJsb2NrLT5n
bG9iYWxSZXNvbHZlSW5mbyhjdXJyZW50SW5kZXgpLnN0cnVjdHVyZSk7CkBAIC02OTIsMTQgKzY5
MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbChJbnN0cnVjCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICB1bnNp
Z25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHZvaWQqIGds
b2JhbE9iamVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LmpzQ2VsbDsKLSAgICBJZGVudGlm
aWVyKiBpZGVudCA9ICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKKyAgICBJZGVudGlmaWVyKiBpZGVudCA9ICZtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKIAogICAgIHVuc2lnbmVk
IGN1cnJlbnRJbmRleCA9IG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCsrOwogCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNv
bHZlX2dsb2JhbCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKGdsb2JhbE9iamVj
dCkpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cihpZGVudCkpOwogICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbmRleCkpOwogICAgIHN0dWJDYWxsLmNhbGwo
ZHN0KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDY0NTg5KQor
KysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NjIsMTggKzQ2MiwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24q
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LmpzQ2Vs
bCk7CisgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwogICAgIG1vdmUoSW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmFyaWFibGVPYmplY3RSZWdpc3RlcihyZWdUMCwgY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCwgcmVnVDApOworICAgIGVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVy
KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQsIHJlZ1QxKTsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY3VycmVudEluc3RydWN0aW9u
WzFdLnUuanNDZWxsKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxKTsKKyAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgbW92ZShJbW1QdHIoZ2xv
YmFsT2JqZWN0KSwgcmVnVDApOwotICAgIGVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKHJl
Z1QxLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgZW1pdFB1
dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIocmVnVDEsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlZF92YXIoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY0NCw3ICs2NDQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3NraXAoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBib29sKQogewogICAg
IC8vIEZhc3QgY2FzZQotICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51LmpzQ2VsbDsKKyAgICB2b2lkKiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gbV9nbG9iYWxSZXNvbHZl
SW5mb0luZGV4Kys7CiAgICAgdm9pZCogc3RydWN0dXJlQWRkcmVzcyA9ICYobV9jb2RlQmxvY2st
Pmdsb2JhbFJlc29sdmVJbmZvKGN1cnJlbnRJbmRleCkuc3RydWN0dXJlKTsKICAgICB2b2lkKiBv
ZmZzZXRBZGRyID0gJihtX2NvZGVCbG9jay0+Z2xvYmFsUmVzb2x2ZUluZm8oY3VycmVudEluZGV4
KS5vZmZzZXQpOwpAQCAtNjY1LDE2ICs2NjUsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9nbG9iYWwoSW5zdHJ1Ywogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfZ2xvYmFsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICB2b2lkKiBnbG9iYWxPYmplY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5qc0NlbGw7Ci0gICAgSWRlbnRpZmllciogaWRlbnQgPSAmbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgSWRlbnRpZmllciog
aWRlbnQgPSAmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CiAgICAgCiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gbV9nbG9iYWxSZXNv
bHZlSW5mb0luZGV4Kys7CiAgICAgCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoSW1tUHRyKGdsb2JhbE9iamVjdCkpOwogICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KEltbVB0cihpZGVudCkpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1
cnJlbnRJbmRleCkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBzdHVi
Q2FsbC5jYWxsKGRzdCk7CiB9CiAKQEAgLTE0ODksNyArMTQ4OCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF90b19qc251bWJlcihJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9n
bG9iYWxfZHluYW1pYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGlu
dCBza2lwID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKKyAgICBpbnQgc2tpcCA9
IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMCk7CiAgICAg
d2hpbGUgKHNraXAtLSkgewpAQCAtMTUwMyw5ICsxNTAyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfZ2xv
YmFsX2R5bmFtaWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51LmpzQ2VsbDsKLSAgICBJZGVudGlmaWVyKiBpZGVudCA9ICZtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAg
ICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CisgICAgSWRlbnRp
ZmllciogaWRlbnQgPSAmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CisgICAgaW50IHNraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5v
cGVyYW5kOwogICAgIHdoaWxlIChza2lwLS0pCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
ICAgICBKSVRTdHViQ2FsbCByZXNvbHZlU3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmUpOwpA
QCAtMTUxNyw5ICsxNTE1LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfZ2xvYmFs
X2R5bgogICAgIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gV2UgbWFuYWdlZCB0byBza2lw
IGFsbCB0aGUgbm9kZXMgaW4gdGhlIHNjb3BlIGNoYWluLCBidXQgdGhlIGNhY2hlIG1pc3NlZC4K
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV9nbG9iYWwpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cihnbG9iYWxPYmplY3QpKTsKICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChJbW1QdHIoaWRlbnQpKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChJbW0zMihjdXJyZW50SW5kZXgpKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7
CiAgICAgc3R1YkNhbGwuY2FsbChkc3QpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHJldmlzaW9uIDY0NTg5KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYxMSwxNiArMjYxMSwxNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
LSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmds
b2JhbE9iamVjdCgpOwotICAgIElkZW50aWZpZXImIGlkZW50ID0gc3RhY2tGcmFtZS5hcmdzWzFd
LmlkZW50aWZpZXIoKTsKLSAgICB1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5mb0luZGV4ID0gc3Rh
Y2tGcmFtZS5hcmdzWzJdLmludDMyKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIElkZW50aWZpZXImIGlkZW50ID0gc3RhY2tG
cmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKTsKKyAgICB1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5m
b0luZGV4ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCk7CiAgICAgQVNTRVJUKGdsb2JhbE9i
amVjdC0+aXNHbG9iYWxPYmplY3QoKSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxP
YmplY3QpOwogICAgIGlmIChnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUs
IGlkZW50LCBzbG90KSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUo
Y2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAm
JiAhZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSAm
JiBzbG90LnNsb3RCYXNlKCkgPT0gZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgICAgICBHbG9iYWxS
ZXNvbHZlSW5mbyYgZ2xvYmFsUmVzb2x2ZUluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5n
bG9iYWxSZXNvbHZlSW5mbyhnbG9iYWxSZXNvbHZlSW5mb0luZGV4KTsKKyAgICAgICAgICAgIEds
b2JhbFJlc29sdmVJbmZvJiBnbG9iYWxSZXNvbHZlSW5mbyA9IGNvZGVCbG9jay0+Z2xvYmFsUmVz
b2x2ZUluZm8oZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCk7CiAgICAgICAgICAgICBpZiAoZ2xvYmFs
UmVzb2x2ZUluZm8uc3RydWN0dXJlKQogICAgICAgICAgICAgICAgIGdsb2JhbFJlc29sdmVJbmZv
LnN0cnVjdHVyZS0+ZGVyZWYoKTsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RydWN0dXJl
KCktPnJlZigpOwpAQCAtMjYzMyw4ICsyNjM0LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiAgICAgfQogCi0gICAgdW5zaWduZWQgdlBDSW5kZXggPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotICAgIHN0
YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVF
cnJvcihjYWxsRnJhbWUsIGlkZW50LCB2UENJbmRleCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7
CisgICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxG
cmFtZSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CisgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5l
eGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnQs
IHZQQ0luZGV4LCBjb2RlQmxvY2spOwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDY0NTg5KQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkyLDcgKzE5Miw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3IKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxP
YmplY3QoKTsKIAogICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBtX2NvZGVC
bG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rp
b25Db2RlLCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBmYWxz
ZSkpOworICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVC
bG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIo
KSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgZmFsc2UpKTsKICAgICBPd25QdHI8Qnl0ZWNvZGVH
ZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5n
ZXQoKSwgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCBtX2NvZGVCbG9ja0Zv
ckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkpKTsKICAgICBn
ZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IG1fY29k
ZUJsb2NrRm9yQ2FsbC0+bV9udW1QYXJhbWV0ZXJzOwpAQCAtMjMzLDcgKzIzMyw3IEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKIAogICAgIEFTU0VSVCgh
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0g
YWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgc291cmNl
KCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgdHJ1ZSkpOworICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMs
IEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2Uo
KS5zdGFydE9mZnNldCgpLCB0cnVlKSk7CiAgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBn
ZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIGdsb2Jh
bE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qt
PnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKSkpOwogICAgIGdl
bmVyYXRvci0+Z2VuZXJhdGUoKTsKICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QgPSBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+bV9udW1QYXJhbWV0ZXJzOwpAQCAtMjc3LDcgKzI3Nyw3
IEBAIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gRnVuY3Rpb25FeGVjdXQKICAgICBTY29wZUNo
YWluIHNjb3BlQ2hhaW4oc2NvcGVDaGFpbk5vZGUpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpOwogCi0gICAgT3duUHRyPENvZGVC
bG9jaz4gbmV3Q29kZUJsb2NrKGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBG
dW5jdGlvbkNvZGUsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCks
IGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yKSkpOworICAgIE93blB0cjxDb2RlQmxvY2s+IG5l
d0NvZGVCbG9jayhhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25D
b2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zm
c2V0KCksIGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yKSkpOwogICAgIGdsb2JhbERhdGEtPmZ1
bmN0aW9uQ29kZUJsb2NrQmVpbmdSZXBhcnNlZCA9IG5ld0NvZGVCbG9jay5nZXQoKTsKIAogICAg
IE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29k
ZUdlbmVyYXRvcihuZXdGdW5jdGlvbkJvZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIo
KSwgc2NvcGVDaGFpbiwgbmV3Q29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBuZXdDb2RlQmxvY2su
Z2V0KCkpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63492</attachid>
            <date>2010-08-04 14:31:45 -0700</date>
            <delta_ts>2010-08-05 15:23:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>globalObject.patch</filename>
            <type>text/plain</type>
            <size>29888</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0Njc2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTAtMDgtMDQgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzNDY0CisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgZ2xvYmFsIG9iamVjdCBpcyBi
ZWluZyBlbWJlZGRlZCBpbiB0aGUgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgYnl0ZWNvZGUsIGhv
d2V2ZXIgc2luY2UgdGhlIGdsb2JhbCBvYmplY3QgaXMgdGhlIHNhbWUgZm9yIGFsbCBvcGNvZGVz
CisgICAgICAgIGluIGEgY29kZSBibG9jaywgd2UgY2FuIGhhdmUgdGhlIGdsb2JhbCBvYmplY3Qg
anVzdCBiZSBhIG1lbWJlciBvZiB0aGUKKyAgICAgICAgYXNzb2NpYXRlZCBjb2RlIGJsb2NrLgor
CisgICAgICAgIEFkZGl0aW9uYWxseSwgSSBhZGRlZCBhbiBhc3NlcnQgaW5zaWRlIG9mIGVtaXRP
cGNvZGUgdGhhdCB2ZXJpZmllcworICAgICAgICB0aGF0IHRoZSBsYXN0IGdlbmVyYXRlZCBvcGNv
ZGUgd2FzIG9mIHRoZSBjb3JyZWN0IGxlbmd0aC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpkZXJlZlN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om1hcmtBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omdsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6Okdsb2Jh
bENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVC
bG9jazo6UHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OkV2
YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6RnVuY3Rpb25D
b2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDOjpv
cGNvZGVMZW5ndGgpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3Bjb2RlKToKKyAgICAgICAg
ICAgIEFkZGVkIGFuIGFzc2VydCB0byBjaGVjayB0aGF0IHRoZSBsYXN0IGdlbmVyYXRlZCBvcGNv
ZGUgaXMgdGhlCisgICAgICAgICAgICBjb3JyZWN0IGxlbmd0aC4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnJld2luZEJpbmFyeU9wKToKKyAgICAgICAgICAgIENoYW5nZWQgdGhl
IGxhc3Qgb3Bjb2RlIHRvIG9wX2VuZCBzaW5jZSB0aGUgbGVuZ3RoIHdpbGwgbm8gbG9uZ2VyCisg
ICAgICAgICAgICBiZSBjb3JyZWN0LgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
cmV3aW5kVW5hcnlPcCk6CisgICAgICAgICAgICBDaGFuZ2VkIHRoZSBsYXN0IG9wY29kZSB0byBv
cF9lbmQgc2luY2UgdGhlIGxlbmd0aCB3aWxsIG5vIGxvbmdlcgorICAgICAgICAgICAgYmUgY29y
cmVjdC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTY29wZWRWYXIpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNjb3BlZFZhcik6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhCYXNlKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXNvbHZlR2xvYmFs
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVHbG9iYWxEeW5hbWljKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQv
SklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3Zh
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3Zhcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cmVzb2x2ZV9nbG9iYWwpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChK
U0M6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbElu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29u
c3RydWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFy
c2VFeGNlcHRpb25JbmZvKToKKwogMjAxMC0wOC0wNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJy
YWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgU2FtIFdlaW5p
Zy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNjQ2
NzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzQ0LDggKzEzNDQsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3Mo
KQogI2VuZGlmCiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBz
eW1UYWIsIGJvb2wgaXNDb25zdHJ1Y3RvcikKLSAgICA6IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDAp
CitDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0
LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCisgICAgOiBtX2dsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3QpCisgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQogICAg
ICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkKICAgICAsIG1faXNDb25z
dHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQpAQCAtMTQ1Nyw4ICsxNDU4LDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmRlcmVmU3RydWN0dXJlcyhJbnN0cnVjdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmICh2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9yZXNvbHZl
X2dsb2JhbCkgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3Bf
cmVzb2x2ZV9nbG9iYWxfZHluYW1pYykpIHsKLSAgICAgICAgaWYodlBDWzRdLnUuc3RydWN0dXJl
KQotICAgICAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJlLT5kZXJlZigpOworICAgICAgICBpZiAo
dlBDWzNdLnUuc3RydWN0dXJlKQorICAgICAgICAgICAgdlBDWzNdLnUuc3RydWN0dXJlLT5kZXJl
ZigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICgodlBDWzBdLnUub3Bjb2RlID09
IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKQpAQCAtMTUx
OCw2ICsxNTE5LDcgQEAgdm9pZCBDb2RlQmxvY2s6Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJgog
ICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0tPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7ICsraSkKICAg
ICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CisgICAg
bWFya1N0YWNrLmFwcGVuZChtX2dsb2JhbE9iamVjdCk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpy
ZXBhcnNlRm9yRXhjZXB0aW9uSW5mb0lmTmVjZXNzYXJ5KENhbGxGcmFtZSogY2FsbEZyYW1lKQpJ
bmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDY0Njc2KQorKysg
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
NSw3ICsyNzUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ29kZUJsb2NrIDogcHVi
bGljIEZhc3RBbGxvY0Jhc2UgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgQ29kZVR5cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VP
ZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9yKTsKKyAg
ICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5
cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVk
IHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBib29sIGlzQ29uc3RydWN0
b3IpOworCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKKwogICAgIHB1
YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q29kZUJsb2NrKCk7CiAKQEAgLTQ4Myw2ICs0ODYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikg
eyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRh
LT5tX3JlZ2V4cHMuc2l6ZSgpOyBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKHIpOyByZXR1
cm4gc2l6ZTsgfQogICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNT
RVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQo
KTsgfQogCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBt
X2dsb2JhbE9iamVjdDsgfQogCiAgICAgICAgIC8vIEp1bXAgVGFibGVzCiAKQEAgLTYwMiw5ICs2
MDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1
YmxpYyBDb2RlQmxvY2sgewogICAgIHB1YmxpYzoKLSAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICA6IENvZGVCbG9j
ayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0
LCAmbV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSkKLSAgICAgICAgICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQorICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIs
IHVuc2lnbmVkIHNvdXJjZU9mZnNldCkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9m
ZnNldCwgJm1fdW5zaGFyZWRTeW1ib2xUYWJsZSwgZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG1fZ2xvYmFsT2JqZWN0LT5jb2RlQmxvY2tzKCkuYWRkKHRoaXMpOwogICAgICAgICB9CkBA
IC02MTgsMTQgKzYyMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjbGVhckds
b2JhbE9iamVjdCgpIHsgbV9nbG9iYWxPYmplY3QgPSAwOyB9CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7IC8vIEZvciBwcm9ncmFtIGFuZCBl
dmFsIG5vZGVzLCB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG1hcmtzIHRoZSBjb25zdGFudCBwb29s
LgogICAgICAgICBTeW1ib2xUYWJsZSBtX3Vuc2hhcmVkU3ltYm9sVGFibGU7CiAgICAgfTsKIAog
ICAgIGNsYXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQotICAgICAg
ICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgc291cmNl
UHJvdmlkZXIsIDAsIGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIs
IDApCiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH07CkBAIC02MzMsNyArNjM1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXZhbENvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2Rl
QmxvY2sgewogICAgIHB1YmxpYzoKICAgICAgICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoKQot
ICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBFdmFsQ29kZSwg
c291cmNlUHJvdmlkZXIsIDAsIGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgIDogR2xvYmFsQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJv
dmlkZXIsIDApCiAgICAgICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoYmFzZVNjb3BlRGVwdGgp
CiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNjU5LDggKzY2MSw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAvLyBhcyB3ZSBuZWVkIHRvIGluaXRpYWxpc2UgdGhlIENvZGVCbG9jayBiZWZv
cmUgd2UgY291bGQgaW5pdGlhbGlzZSBhbnkgUmVmUHRyIHRvIGhvbGQgdGhlIHNoYXJlZAogICAg
ICAgICAvLyBzeW1ib2wgdGFibGUsIHNvIHdlIGp1c3QgcGFzcyBhcyBhIHJhdyBwb2ludGVyIHdp
dGggYSByZWYgY291bnQgb2YgMS4gIFdlIHRoZW4gbWFudWFsbHkgZGVyZWYKICAgICAgICAgLy8g
aW4gdGhlIGRlc3RydWN0b3IuCi0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgYm9v
bCBpc0NvbnN0cnVjdG9yKQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFi
bGU6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKSwgaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlz
Q29uc3RydWN0b3IpCisgICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIFNoYXJl
ZFN5bWJvbFRhYmxlOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCksIGlzQ29uc3RydWN0b3IpCiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgICAgICB+RnVuY3Rpb25Db2RlQmxvY2soKQpJbmRleDogSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDY0Njc2KQorKysgSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDEyICs5MywxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9yZXNvbHZlLCAzKSBcCiAg
ICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfc2tpcCwgNCkgXAotICAgICAgICBtYWNybyhvcF9yZXNv
bHZlX2dsb2JhbCwgNikgXAotICAgICAgICBtYWNybyhvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWlj
LCA3KSBcCisgICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfZ2xvYmFsLCA1KSBcCisgICAgICAgIG1h
Y3JvKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMsIDYpIFwKICAgICAgICAgbWFjcm8ob3BfZ2V0
X3Njb3BlZF92YXIsIDQpIFwKICAgICAgICAgbWFjcm8ob3BfcHV0X3Njb3BlZF92YXIsIDQpIFwK
LSAgICAgICAgbWFjcm8ob3BfZ2V0X2dsb2JhbF92YXIsIDQpIFwKLSAgICAgICAgbWFjcm8ob3Bf
cHV0X2dsb2JhbF92YXIsIDQpIFwKKyAgICAgICAgbWFjcm8ob3BfZ2V0X2dsb2JhbF92YXIsIDMp
IFwKKyAgICAgICAgbWFjcm8ob3BfcHV0X2dsb2JhbF92YXIsIDMpIFwKICAgICAgICAgbWFjcm8o
b3BfcmVzb2x2ZV9iYXNlLCAzKSBcCiAgICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfd2l0aF9iYXNl
LCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX2dldF9ieV9pZCwgOCkgXApAQCAtMjU0LDYgKzI1NCwx
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2VuZGlmCiAKKyAgICBpbmxpbmUgc2l6ZV90IG9wY29k
ZUxlbmd0aChPcGNvZGVJRCBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkg
eworI2RlZmluZSBPUENPREVfSURfTEVOR1RIUyhpZCwgbGVuZ3RoKSBjYXNlIGlkOiByZXR1cm4g
T1BDT0RFX0xFTkdUSChpZCk7CisgICAgICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX0lEKE9QQ09E
RV9JRF9MRU5HVEhTKQorI3VuZGVmIE9QQ09ERV9JRF9MRU5HVEhTCisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBPcGNvZGVfaApJbmRleDogSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA2
NDY3NikKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgLCBtX2dsb2JhbENvbnN0YW50SW5kZXgoMCkKICAg
ICAsIG1fZ2xvYmFsRGF0YSgmc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LT5nbG9iYWxEYXRhKCkpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCisjaWZuZGVmIE5E
RUJVRworICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKKyNlbmRpZgogICAgICwgbV9lbWl0
Tm9kZURlcHRoKDApCiAgICAgLCBtX3VzZXNFeGNlcHRpb25zKGZhbHNlKQogICAgICwgbV9yZWdl
bmVyYXRpbmdGb3JFeGNlcHRpb25JbmZvKGZhbHNlKQpAQCAtNTg4LDYgKzU5MSwxMSBAQCBQYXNz
UmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pCiAKIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CisjaWZuZGVmIE5ERUJVRwor
ICAgIHNpemVfdCBvcGNvZGVQb3NpdGlvbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBB
U1NFUlQob3Bjb2RlUG9zaXRpb24gLSBtX2xhc3RPcGNvZGVQb3NpdGlvbiA9PSBvcGNvZGVMZW5n
dGgobV9sYXN0T3Bjb2RlSUQpIHx8IG1fbGFzdE9wY29kZUlEID09IG9wX2VuZCk7CisgICAgbV9s
YXN0T3Bjb2RlUG9zaXRpb24gPSBvcGNvZGVQb3NpdGlvbjsKKyNlbmRpZgogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChnbG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3Bjb2Rl
SUQpKTsKICAgICBtX2xhc3RPcGNvZGVJRCA9IG9wY29kZUlEOwogfQpAQCAtNjEzLDEyICs2MjEs
MTQgQEAgdm9pZCBBTFdBWVNfSU5MSU5FIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZQogewogICAgIEFT
U0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gNCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuc2hy
aW5rKGluc3RydWN0aW9ucygpLnNpemUoKSAtIDQpOworICAgIG1fbGFzdE9wY29kZUlEID0gb3Bf
ZW5kOwogfQogCiB2b2lkIEFMV0FZU19JTkxJTkUgQnl0ZWNvZGVHZW5lcmF0b3I6OnJld2luZFVu
YXJ5T3AoKQogewogICAgIEFTU0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gMyk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuc2hyaW5rKGluc3RydWN0aW9ucygpLnNpemUoKSAtIDMpOworICAgIG1f
bGFzdE9wY29kZUlEID0gb3BfZW5kOwogfQogCiBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEp1bXAoTGFiZWwqIHRhcmdldCkKQEAgLTExMDYsNyArMTExNiw2IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2wKICNlbmRpZgogICAgICAgICBl
bWl0T3Bjb2RlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyA/IG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFt
aWMgOiBvcF9yZXNvbHZlX2dsb2JhbCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOwpAQCAtMTE0Miw3ICsxMTUxLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRTYwogICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAgICAgZW1p
dE9wY29kZShvcF9nZXRfZ2xvYmFsX3Zhcik7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChkc3QtPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXNDZWxsKGds
b2JhbE9iamVjdCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwogICAg
ICAgICByZXR1cm4gZHN0OwogICAgIH0KQEAgLTExNTgsNyArMTE2Niw2IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0U2MKIHsKICAgICBpZiAoZ2xvYmFsT2JqZWN0KSB7
CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X2dsb2JhbF92YXIpOwotICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYXNDZWxsKGdsb2JhbE9iamVjdCkpOwogICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoaW5kZXgpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUt
PmluZGV4KCkpOwogICAgICAgICByZXR1cm4gdmFsdWU7CkBAIC0xMjI5LDcgKzEyMzYsNiBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAjZW5kaWYKICAgICBlbWl0
T3Bjb2RlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyA/IG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMg
OiBvcF9yZXNvbHZlX2dsb2JhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BEc3Qt
PmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChnbG9iYWxPYmplY3QpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gNjQ2NzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDYgKzU2MCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKIAogICAgICAgICBPcGNv
ZGVJRCBtX2xhc3RPcGNvZGVJRDsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIHNpemVfdCBtX2xh
c3RPcGNvZGVQb3NpdGlvbjsKKyNlbmRpZgogCiAgICAgICAgIHVuc2lnbmVkIG1fZW1pdE5vZGVE
ZXB0aDsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gNjQ2NzYpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwyOCArMTQ0LDI4IEBAIE5FVkVSX0lOTElO
RSBib29sIEludGVycHJldGVyOjpyZXNvbHZlU2sKIE5FVkVSX0lOTElORSBib29sIEludGVycHJl
dGVyOjpyZXNvbHZlR2xvYmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBD
LCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3Bl
cmFuZDsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNH
bG9iYWxPYmplY3QqPih2UENbMl0udS5qc0NlbGwpOworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
LT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICBpbnQgcHJvcGVydHkgPSB2UENbM10udS5vcGVyYW5k
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzRdLnUuc3RydWN0dXJlOwotICAgIGlu
dCBvZmZzZXQgPSB2UENbNV0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51
Lm9wZXJhbmQ7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbM10udS5zdHJ1Y3R1cmU7
CisgICAgaW50IG9mZnNldCA9IHZQQ1s0XS51Lm9wZXJhbmQ7CiAKICAgICBpZiAoc3RydWN0dXJl
ID09IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkpIHsKICAgICAgICAgY2FsbEZyYW1lLT5yKGRz
dCkgPSBKU1ZhbHVlKGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2st
PmlkZW50aWZpZXIocHJvcGVydHkpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVj
dCk7CiAgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRl
bnQsIHNsb3QpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxs
RnJhbWUsIGlkZW50KTsKICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFn
bG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpICYmIHNs
b3Quc2xvdEJhc2UoKSA9PSBnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgICAgIGlmICh2UENbNF0u
dS5zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgdlBDWzRdLnUuc3RydWN0dXJlLT5kZXJlZigp
OworICAgICAgICAgICAgaWYgKHZQQ1szXS51LnN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICB2
UENbM10udS5zdHJ1Y3R1cmUtPmRlcmVmKCk7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnN0
cnVjdHVyZSgpLT5yZWYoKTsKLSAgICAgICAgICAgIHZQQ1s0XSA9IGdsb2JhbE9iamVjdC0+c3Ry
dWN0dXJlKCk7Ci0gICAgICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAg
ICAgICAgICAgdlBDWzNdID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAg
IHZQQ1s0XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnIo
ZHN0KSA9IEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC0xODQsMTMgKzE4NCwxMyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6
cmVzb2x2ZUdsCiBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUdsb2JhbER5
bmFtaWMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUmIGV4
Y2VwdGlvblZhbHVlKQogewogICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+
KHZQQ1syXS51LmpzQ2VsbCk7Ci0gICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHZQQ1s0XS51LnN0cnVjdHVyZTsKLSAgICBpbnQgb2Zmc2V0ID0gdlBD
WzVdLnUub3BlcmFuZDsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgaW50IHNraXAgPSB2UENbNl0udS5vcGVyYW5kOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIEFT
U0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOworICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbM10udS5z
dHJ1Y3R1cmU7CisgICAgaW50IG9mZnNldCA9IHZQQ1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IHNr
aXAgPSB2UENbNV0udS5vcGVyYW5kOwogICAgIAogICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0
ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwpAQCAtMjMxLDExICsyMzEsMTEgQEAgTkVWRVJfSU5M
SU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVHbAogICAgIGlmIChnbG9iYWxPYmplY3QtPmdl
dFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewogICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgIGlmIChz
bG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gZ2xvYmFsT2JqZWN0
KSB7Ci0gICAgICAgICAgICBpZiAodlBDWzRdLnUuc3RydWN0dXJlKQotICAgICAgICAgICAgICAg
IHZQQ1s0XS51LnN0cnVjdHVyZS0+ZGVyZWYoKTsKKyAgICAgICAgICAgIGlmICh2UENbM10udS5z
dHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgdlBDWzNdLnUuc3RydWN0dXJlLT5kZXJlZigpOwog
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cmVmKCk7Ci0gICAgICAgICAg
ICB2UENbNF0gPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgdlBDWzVd
ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgIHZQQ1szXSA9IGdsb2JhbE9iamVj
dC0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICB2UENbNF0gPSBzbG90LmNhY2hlZE9mZnNldCgp
OwogICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGRzdCkgPSBKU1ZhbHVlKHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjI4NCw5ICsyMjg0LDkgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAgICBHZXRzIHRo
ZSBnbG9iYWwgdmFyIGF0IGdsb2JhbCBzbG90IGluZGV4IGFuZCBwbGFjZXMgaXQgaW4gcmVnaXN0
ZXIgZHN0LgogICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IHN0YXRpY19jYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4odlBDWzJdLnUuanNDZWxsKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIHNjb3BlID0g
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgQVNTRVJUKHNjb3BlLT5pc0dsb2Jh
bE9iamVjdCgpKTsKLSAgICAgICAgaW50IGluZGV4ID0gdlBDWzNdLnUub3BlcmFuZDsKKyAgICAg
ICAgaW50IGluZGV4ID0gdlBDWzJdLnUub3BlcmFuZDsKIAogICAgICAgICBjYWxsRnJhbWUtPnIo
ZHN0KSA9IHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KTsKICAgICAgICAgdlBDICs9IE9QQ09ERV9M
RU5HVEgob3BfZ2V0X2dsb2JhbF92YXIpOwpAQCAtMjI5NywxMCArMjI5NywxMCBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICAKICAgICAgICAgICAg
UHV0cyB2YWx1ZSBpbnRvIGdsb2JhbCBzbG90IGluZGV4LgogICAgICAgICAgKi8KLSAgICAgICAg
SlNHbG9iYWxPYmplY3QqIHNjb3BlID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih2UENb
MV0udS5qc0NlbGwpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogc2NvcGUgPSBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpOwogICAgICAgICBBU1NFUlQoc2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkp
OwotICAgICAgICBpbnQgaW5kZXggPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdmFs
dWUgPSB2UENbM10udS5vcGVyYW5kOworICAgICAgICBpbnQgaW5kZXggPSB2UENbMV0udS5vcGVy
YW5kOworICAgICAgICBpbnQgdmFsdWUgPSB2UENbMl0udS5vcGVyYW5kOwogICAgICAgICAKICAg
ICAgICAgc2NvcGUtPnJlZ2lzdGVyQXQoaW5kZXgpID0gSlNWYWx1ZShjYWxsRnJhbWUtPnIodmFs
dWUpLmpzVmFsdWUoKSk7CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9i
YWxfdmFyKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZp
c2lvbiA2NDY3NikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MjUsOSArNTI1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1
bmMoSW5zdHJ1Y3Rpb24qIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2dsb2JhbF92YXIoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5qc0Nl
bGwpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSk7
Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBp
bnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgbG9hZFB0
cigmZ2xvYmFsT2JqZWN0LT5kKCktPnJlZ2lzdGVycywgcmVnVDIpOwogCkBAIC01MzgsMTAgKzUz
OCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjCiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpT
R2xvYmFsT2JqZWN0Kj4oY3VycmVudEluc3RydWN0aW9uWzFdLnUuanNDZWxsKTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwog
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwotICAgIGludCBpbmRl
eCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKIApA
QCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsKEluc3Ry
dWMKICAgICAvLyBGSVhNRTogT3B0aW1pemUgdG8gdXNlIHBhdGNoaW5nIGluc3RlYWQgb2Ygc28g
bWFueSBtZW1vcnkgYWNjZXNzZXMuCiAKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51LmpzQ2VsbDsKKyAgICB2b2lkKiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2Jh
bFJlc29sdmVJbmZvSW5kZXgrKzsKICAgICB2b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0gJihtX2Nv
ZGVCbG9jay0+Z2xvYmFsUmVzb2x2ZUluZm8oY3VycmVudEluZGV4KS5zdHJ1Y3R1cmUpOwpAQCAt
NzAxLDE0ICs3MDEsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1
Ywogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICB2b2lkKiBnbG9iYWxPYmplY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGw7Ci0g
ICAgSWRlbnRpZmllciogaWRlbnQgPSAmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgSWRlbnRpZmllciogaWRlbnQgPSAmbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAKICAg
ICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXgrKzsKIAog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfcmVzb2x2ZV9nbG9iYWwpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cihn
bG9iYWxPYmplY3QpKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoaWRlbnQpKTsK
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihjdXJyZW50SW5kZXgpKTsKICAgICBzdHVi
Q2FsbC5jYWxsKGRzdCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biA2NDY3NikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDY4LDE4ICs0NjgsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KElu
c3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5qc0NlbGwpOworICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICBtb3ZlKEltbVB0cihnbG9iYWxPYmplY3QpLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIocmVnVDAsIGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmFyaWFibGVPYmpl
Y3RSZWdpc3RlcihyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMSk7Ci0gICAgSlNWYXJpYWJsZU9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51LmpzQ2VsbCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7CisgICAgSlNWYXJpYWJsZU9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgIG1vdmUo
SW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmFyaWFibGVPYmplY3RS
ZWdpc3RlcihyZWdUMSwgcmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgIGVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKHJlZ1QxLCByZWdUMCwgY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZWRfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NTAsNyArNjUwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9za2lwKEluc3RydWN0aQogdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgYm9v
bCkKIHsKICAgICAvLyBGYXN0IGNhc2UKLSAgICB2b2lkKiBnbG9iYWxPYmplY3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGw7CisgICAgdm9pZCogZ2xvYmFsT2JqZWN0ID0gbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IG1fZ2xv
YmFsUmVzb2x2ZUluZm9JbmRleCsrOwogICAgIHZvaWQqIHN0cnVjdHVyZUFkZHJlc3MgPSAmKG1f
Y29kZUJsb2NrLT5nbG9iYWxSZXNvbHZlSW5mbyhjdXJyZW50SW5kZXgpLnN0cnVjdHVyZSk7CiAg
ICAgdm9pZCogb2Zmc2V0QWRkciA9ICYobV9jb2RlQmxvY2stPmdsb2JhbFJlc29sdmVJbmZvKGN1
cnJlbnRJbmRleCkub2Zmc2V0KTsKQEAgLTY3MSwxNiArNjcxLDE1IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWMKIHZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNvbHZl
X2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdm9pZCogZ2xvYmFsT2JqZWN0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUuanNDZWxsOwotICAgIElkZW50aWZpZXIqIGlkZW50ID0gJm1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIElk
ZW50aWZpZXIqIGlkZW50ID0gJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwogICAgIAogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IG1f
Z2xvYmFsUmVzb2x2ZUluZm9JbmRleCsrOwogICAgIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV9nbG9iYWwpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cihnbG9iYWxPYmplY3QpKTsKICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChJbW1QdHIoaWRlbnQpKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChJbW0zMihjdXJyZW50SW5kZXgpKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7
CiAgICAgc3R1YkNhbGwuY2FsbChkc3QpOwogfQogCkBAIC0xNDk1LDcgKzE0OTQsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdG9fanNudW1iZXIoSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CisgICAg
aW50IHNraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwogICAgIAogICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVn
VDApOwogICAgIHdoaWxlIChza2lwLS0pIHsKQEAgLTE1MDksOSArMTUwOCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMKIHZvaWQgSklUOjplbWl0U2xvd19vcF9y
ZXNvbHZlX2dsb2JhbF9keW5hbWljKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgdW5zaWduZWQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB2b2lkKiBnbG9iYWxPYmpl
Y3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGw7Ci0gICAgSWRlbnRpZmllciogaWRl
bnQgPSAmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Ci0gICAgaW50IHNraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwor
ICAgIElkZW50aWZpZXIqIGlkZW50ID0gJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgIGludCBza2lwID0gY3VycmVudEluc3RydWN0
aW9uWzVdLnUub3BlcmFuZDsKICAgICB3aGlsZSAoc2tpcC0tKQogICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAgICAgSklUU3R1YkNhbGwgcmVzb2x2ZVN0dWJDYWxsKHRoaXMsIGN0aV9vcF9y
ZXNvbHZlKTsKQEAgLTE1MjMsOSArMTUyMSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNv
bHZlX2dsb2JhbF9keW4KICAgICAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFdlIG1hbmFn
ZWQgdG8gc2tpcCBhbGwgdGhlIG5vZGVzIGluIHRoZSBzY29wZSBjaGFpbiwgYnV0IHRoZSBjYWNo
ZSBtaXNzZWQuCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVf
Z2xvYmFsKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoZ2xvYmFsT2JqZWN0KSk7
CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKGlkZW50KSk7CiAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoSW1tMzIoY3VycmVudEluZGV4KSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQocmVnVDApOwogICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKIH0KIApJbmRleDogSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCShyZXZpc2lvbiA2NDY3NikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MzAsMTYgKzI2MzAsMTcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YWNrRnJhbWUu
YXJnc1swXS5nbG9iYWxPYmplY3QoKTsKLSAgICBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJh
bWUuYXJnc1sxXS5pZGVudGlmaWVyKCk7Ci0gICAgdW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluZm9J
bmRleCA9IHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICBJZGVudGlmaWVyJiBpZGVu
dCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCk7CisgICAgdW5zaWduZWQgZ2xvYmFs
UmVzb2x2ZUluZm9JbmRleCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpOwogICAgIEFTU0VS
VChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNs
b3QoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3Qo
Y2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90
LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZVZhbHVlKCkgJiYgIWdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAgICAg
ICAgR2xvYmFsUmVzb2x2ZUluZm8mIGdsb2JhbFJlc29sdmVJbmZvID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+Z2xvYmFsUmVzb2x2ZUluZm8oZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCk7CisgICAg
ICAgICAgICBHbG9iYWxSZXNvbHZlSW5mbyYgZ2xvYmFsUmVzb2x2ZUluZm8gPSBjb2RlQmxvY2st
Pmdsb2JhbFJlc29sdmVJbmZvKGdsb2JhbFJlc29sdmVJbmZvSW5kZXgpOwogICAgICAgICAgICAg
aWYgKGdsb2JhbFJlc29sdmVJbmZvLnN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICBnbG9iYWxS
ZXNvbHZlSW5mby5zdHJ1Y3R1cmUtPmRlcmVmKCk7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3Qt
PnN0cnVjdHVyZSgpLT5yZWYoKTsKQEAgLTI2NTIsOCArMjY1Myw4IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERSRVNT
KTsKLSAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVVuZGVmaW5l
ZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCwgdlBDSW5kZXgsIGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCkpOworICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5ieXRlY29kZU9m
ZnNldChjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgIHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJh
bWUsIGlkZW50LCB2UENJbmRleCwgY29kZUJsb2NrKTsKICAgICBWTV9USFJPV19FWENFUFRJT04o
KTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biA2NDY3NikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMCw3ICsyMDAsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlRm9yCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hh
aW4uZ2xvYmFsT2JqZWN0KCk7CiAKICAgICBBU1NFUlQoIW1fY29kZUJsb2NrRm9yQ2FsbCk7Ci0g
ICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRo
aXMsIEZ1bmN0aW9uQ29kZSwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZz
ZXQoKSwgZmFsc2UpKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVu
Y3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgp
LnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlKSk7CiAgICAgT3duUHRy
PEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJh
dG9yKGJvZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgbV9j
b2RlQmxvY2tGb3JDYWxsLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkp
KSk7CiAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOwogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNh
bGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm1fbnVtUGFyYW1ldGVyczsKQEAgLTI0NSw3ICsyNDUs
NyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCk7CiAKICAg
ICBBU1NFUlQoIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNv
ZGUsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHRydWUpKTsK
KyAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVC
bG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIo
KSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgdHJ1ZSkpOwogICAgIE93blB0cjxCeXRlY29kZUdl
bmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5Lmdl
dCgpLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkp
KTsKICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29u
c3RydWN0ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPm1fbnVtUGFyYW1ldGVyczsKQEAgLTI5
Myw3ICsyOTMsNyBAQCBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IEZ1bmN0aW9uRXhlY3V0CiAg
ICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKIAotICAgIE93
blB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayhhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxv
Y2sodGhpcywgRnVuY3Rpb25Db2RlLCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFy
dE9mZnNldCgpLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvcikpKTsKKyAgICBPd25QdHI8Q29k
ZUJsb2NrPiBuZXdDb2RlQmxvY2soYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMs
IEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2Uo
KS5zdGFydE9mZnNldCgpLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvcikpKTsKICAgICBnbG9i
YWxEYXRhLT5mdW5jdGlvbkNvZGVCbG9ja0JlaW5nUmVwYXJzZWQgPSBuZXdDb2RlQmxvY2suZ2V0
KCk7CiAKICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihu
ZXcgQnl0ZWNvZGVHZW5lcmF0b3IobmV3RnVuY3Rpb25Cb2R5LmdldCgpLCBnbG9iYWxPYmplY3Qt
PmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG5ld0NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbmV3
Q29kZUJsb2NrLmdldCgpKSkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>