<?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>105892</bug_id>
          
          <creation_ts>2012-12-31 23:45:40 -0800</creation_ts>
          <short_desc>Objective-C API: Objective-C functions exposed to JavaScript have the wrong type (object instead of function)</short_desc>
          <delta_ts>2013-03-14 14:40:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>798413</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-12-31 23:45:40 -0800</bug_when>
    <thetext>The current implementation ttys to implement a JavaScript Function object via the C-API - it does so imperfectly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799798</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-03 15:58:51 -0800</bug_when>
    <thetext>ObjCCallbackFunction should subclass JSFunction or InternalFunction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852853</commentid>
    <comment_count>2</comment_count>
      <attachid>192590</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-11 16:26:20 -0700</bug_when>
    <thetext>Created attachment 192590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852857</commentid>
    <comment_count>3</comment_count>
      <attachid>192590</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-11 16:36:28 -0700</bug_when>
    <thetext>Comment on attachment 192590
Patch

Attachment 192590 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17121421</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852859</commentid>
    <comment_count>4</comment_count>
      <attachid>192590</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-11 16:38:44 -0700</bug_when>
    <thetext>Comment on attachment 192590
Patch

Attachment 192590 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17178092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852867</commentid>
    <comment_count>5</comment_count>
      <attachid>192592</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-11 16:42:18 -0700</bug_when>
    <thetext>Created attachment 192592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852880</commentid>
    <comment_count>6</comment_count>
      <attachid>192592</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-11 16:53:27 -0700</bug_when>
    <thetext>Comment on attachment 192592
Patch

Attachment 192592 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17013883</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852882</commentid>
    <comment_count>7</comment_count>
      <attachid>192592</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-11 16:54:14 -0700</bug_when>
    <thetext>Comment on attachment 192592
Patch

Attachment 192592 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17177390</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852887</commentid>
    <comment_count>8</comment_count>
      <attachid>192596</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-11 16:59:10 -0700</bug_when>
    <thetext>Created attachment 192596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852902</commentid>
    <comment_count>9</comment_count>
      <attachid>192596</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-11 17:13:14 -0700</bug_when>
    <thetext>Comment on attachment 192596
Patch

Attachment 192596 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17149383</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852907</commentid>
    <comment_count>10</comment_count>
      <attachid>192596</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-11 17:18:38 -0700</bug_when>
    <thetext>Comment on attachment 192596
Patch

Attachment 192596 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17024541</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852916</commentid>
    <comment_count>11</comment_count>
      <attachid>192606</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-11 17:36:00 -0700</bug_when>
    <thetext>Created attachment 192606
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852934</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-11 18:05:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/12954243&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853524</commentid>
    <comment_count>13</comment_count>
      <attachid>192606</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-12 09:06:03 -0700</bug_when>
    <thetext>Comment on attachment 192606
Patch

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

r=me

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:586
&gt; +    return toRef(JSC::ObjCCallbackFunction::create(exec, exec-&gt;lexicalGlobalObject(), &quot;Objective-C&quot;, impl.release()));

Should we just leave the function anonymous, instead? I agree that at the JS-mangled selector name would be better, but I don&apos;t think &quot;Objective-C&quot; adds all that much.

&gt; Source/JavaScriptCore/API/tests/testapi.mm:526
&gt; +        JSValue *result = [context evaluateScript:@&quot;Function.prototype.toString.call(testObject.callback)&quot;];
&gt; +        checkResult(@&quot;callback function typeof&quot;, !context.exception &amp;&amp; ![result isUndefined]);

This test doesn&apos;t actually test typeof. You should name this test &quot;toString&apos;, and write a separate test line for typeof that shows it&apos;s &quot;Function&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855486</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-14 14:16:14 -0700</bug_when>
    <thetext>Committed r145848: &lt;http://trac.webkit.org/changeset/145848&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855490</commentid>
    <comment_count>15</comment_count>
      <attachid>192606</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-14 14:40:09 -0700</bug_when>
    <thetext>Comment on attachment 192606
Patch

Clearing flags.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192590</attachid>
            <date>2013-03-11 16:26:20 -0700</date>
            <delta_ts>2013-03-11 16:42:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105892-20130311162220.patch</filename>
            <type>text/plain</type>
            <size>21295</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1NDIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEzLTAzLTExICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBPYmplY3RpdmUtQyBmdW5jdGlvbnMgZXhwb3NlZCB0
byBKYXZhU2NyaXB0IGhhdmUgdGhlIHdyb25nIHR5cGUgKG9iamVjdCBpbnN0ZWFkIG9mIGZ1bmN0
aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1
ODkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hh
bmdlZCBPYmpDQ2FsbGJhY2tGdW5jdGlvbiB0byBzdWJjbGFzcyBKU0NhbGxiYWNrRnVuY3Rpb24g
d2hpY2ggYWxyZWFkeSBoYXMgYWxsIG9mIHRoZSBtYWNoaW5lcnkgdG8gY2FsbAorICAgICAgICBm
dW5jdGlvbnMgdXNpbmcgdGhlIEMgQVBJLiBTaW5jZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBpcyBu
b3cgYSBKU0NlbGwsIHdlIGNoYW5nZWQgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAg
ICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiB0byBiZSB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24g
YW5kIGtlZXAgdHJhY2sgb2YgYWxsIHRoZSBwcm9wZXIgZGF0YSBzbyB0aGF0IHdlIAorICAgICAg
ICBkb24ndCBoYXZlIHRvIHB1dCBhbGwgb2YgdGhhdCBpbiB0aGUgaGVhZGVyLCB3aGljaCB3aWxs
IG5vdyBiZSBpbmNsdWRlZCBmcm9tIEMrKyBmaWxlcyAoZS5nLiBKU0dsb2JhbE9iamVjdC5jcHAp
LgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHA6IENoYW5nZSBKU0NhbGxi
YWNrRnVuY3Rpb24gdG8gYWxsb3cgc3ViY2xhc3NpbmcuIE9yaWdpbmFsbHkgaXQgd2FzIGludGVy
bmFsbHkKKyAgICAgICAgcGFzc2luZyBpdHMgb3duIFN0cnVjdHVyZSB1cCB0aGUgY2hhaW4gb2Yg
Y29uc3RydWN0b3JzLCBidXQgd2Ugbm93IHdhbnQgdG8gYmUgYWJsZSB0byBwYXNzIG90aGVyIFN0
cnVjdHVyZXMgYXMgd2VsbC4KKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpKU0Nh
bGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0
ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDYWxs
YmFja0Z1bmN0aW9uKToKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBDaGFuZ2VkIGlu
dGVyZmFjZSB0byB0cnlVbndyYXBCbG9jay4KKyAgICAgICAgKHRyeVVud3JhcE9iamNPYmplY3Qp
OgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24pOiBNb3ZlZCBpbnRvIHRoZSBKU0MgbmFtZXNwYWNlLCBqdXN0IGxpa2Ug
SlNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKTogT3ZlcnJpZGRlbiBzbyB0aGF0IHRoZSBjb3JyZWN0IENsYXNzSW5m
byBnZXRzIHVzZWQgc2luY2Ugd2UgaGF2ZSAKKyAgICAgICAgYSBkZXN0cnVjdG9yLgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6aW1wbCk6IEdldHRlciBmb3IgdGhlIGludGVy
bmFsIGltcGwuCisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6Ok9iakNDYWxsYmFja0Z1bmN0aW9uSW1w
bCk6IFdoYXQgdXNlZCB0byBiZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBpcyBub3cgCisgICAgICAg
IE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbC4gSXQgaGFuZGxlcyB0aGUgT2JqZWN0aXZlLUMgc3Bl
Y2lmaWMgcGFydHMgb2YgbWFuYWdpbmcgY2FsbGJhY2sgZnVuY3Rpb25zLgorICAgICAgICAoSlND
OjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6On5PYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwpOgor
ICAgICAgICAoSlNDOjpvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uKTogU2FtZSBh
cyB0aGUgb2xkIG9uZSwgYnV0IG5vdyBpdCBjYXN0cyB0byBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBh
bmQgZ3JhYnMgdGhlIGltcGwgCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIEpTT2JqZWN0R2V0
UHJpdmF0ZS4KKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uKTogTmV3IGJpdHMgdG8gYWxsb3cgYmVpbmcgcGFydCBvZiB0aGUgSlNDZWxsIGhp
ZXJhcmNoeS4KKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxsKTogSGFuZGxlcyB0aGUgYWN0dWFsIGlu
dm9jYXRpb24sIGp1c3QgbGlrZSBpdCB1c2VkIHRvLgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JJbnZvY2F0aW9uKToKKyAgICAgICAgKHRyeVVud3JhcEJsb2NrKTogQ2hhbmdlZCB0
byBjaGVjayB0aGUgQ2xhc3NJbmZvIGZvciBpbmhlcml0YW5jZSBkaXJlY3RseSwgcmF0aGVyIHRo
YW4gZ29pbmcgdGhyb3VnaCB0aGUgQyBBUEkgY2FsbC4KKyAgICAgICAgKiBBUEkvdGVzdHMvdGVz
dGFwaS5tbTogQWRkZWQgbmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgZG9pbmcgRnVuY3Rpb24u
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZikgd29uJ3QgcmVzdWx0IGluIAorICAgICAgICBhbiBl
cnJvciB3aGVuIGYgaXMgYW4gT2JqZWN0aXZlLUMgbWV0aG9kIG9yIGJsb2NrIHVuZGVybmVhdGgg
dGhlIGNvdmVycy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDogQWRkZWQg
bmV3IFN0cnVjdHVyZSBmb3IgT2JqQ0NhbGxiYWNrRnVuY3Rpb24uCisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpvYmpjQ2Fs
bGJhY2tGdW5jdGlvblN0cnVjdHVyZSk6CisKIDIwMTMtMDMtMTEgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggYmVuZWF0aCBvcGVyYXRpb25DcmVh
dGVJbmxpbmVkQXJndW1lbnRzIHJ1bm5pbmcgZmFzdC9qcy9kZmctY3JlYXRlLWlubGluZWQtYXJn
dW1lbnRzLWluLWNsb3N1cmUtaW5saW5lLmh0bWwgKDMyLWJpdCBvbmx5KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gMTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIEFTU0VSVF9IQVNfVFJJVklB
TF9ERVNUUlVDVE9SKEpTQ2FsbGJhY2sKIAogY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tGdW5j
dGlvbjo6c19pbmZvID0geyAiQ2FsbGJhY2tGdW5jdGlvbiIsICZJbnRlcm5hbEZ1bmN0aW9uOjpz
X2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja0Z1bmN0aW9uKSB9Owog
Ci1KU0NhbGxiYWNrRnVuY3Rpb246OkpTQ2FsbGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2spCi0g
ICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5jYWxsYmFj
a0Z1bmN0aW9uU3RydWN0dXJlKCkpCitKU0NhbGxiYWNrRnVuY3Rpb246OkpTQ2FsbGJhY2tGdW5j
dGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxiYWNrKQorICAgIDogSW50ZXJuYWxG
dW5jdGlvbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fY2FsbGJhY2soY2FsbGJh
Y2spCiB7CiB9CkBAIC01Niw2ICs1NiwxMyBAQCB2b2lkIEpTQ2FsbGJhY2tGdW5jdGlvbjo6Zmlu
aXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAorSlNDYWxs
YmFja0Z1bmN0aW9uKiBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxs
YmFjayBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEpTQ2FsbGJhY2tGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVu
Y3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPmNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgY2FsbGJhY2spOworICAg
IGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAg
IHJldHVybiBmdW5jdGlvbjsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja0Z1bmN0aW9u
OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRv
UmVmKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDUzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQ2FsbGJhY2tGdW5jdGlvbiA6IHB1YmxpYyBJ
bnRlcm5hbEZ1bmN0aW9uIHsKIHByb3RlY3RlZDoKLSAgICBKU0NhbGxiYWNrRnVuY3Rpb24oSlNH
bG9iYWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2spOworICAgIEpTQ2Fs
bGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0Q2FsbEFz
RnVuY3Rpb25DYWxsYmFjayk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1
bmN0aW9uIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNDYWxsYmFja0Z1bmN0aW9uKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdENhbGxB
c0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICB7Ci0g
ICAgICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVu
Y3Rpb24oZ2xvYmFsT2JqZWN0LCBjYWxsYmFjayk7Ci0gICAgICAgIGZ1bmN0aW9uLT5maW5pc2hD
cmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOwotICAgICAgICByZXR1cm4gZnVuY3Rp
b247Ci0gICAgfQorICAgIHN0YXRpYyBKU0NhbGxiYWNrRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjaywgY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwog
ICAgIApAQCAtNTUsOSArNTAsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgfQogCi1wcml2YXRlOgorcHJv
dGVjdGVkOgogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0
YSYpOwogCitwcml2YXRlOgogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGwoRXhlY1N0YXRlKik7CiAKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sg
bV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFw
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFw
Lm1tCShyZXZpc2lvbiAxNDUzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3Jh
cHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMwLDcgKzUzMCw3IEBAIGlkIHRyeVVud3Jh
cE9iamNPYmplY3QoSlNHbG9iYWxDb250ZXh0UmUKICAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAg
ICAgaWYgKEpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY29udGV4dCwgb2JqZWN0LCB3cmFwcGVyQ2xh
c3MoKSkpCiAgICAgICAgIHJldHVybiAoaWQpSlNDOjpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJP
YmplY3QqPih0b0pTKG9iamVjdCkpLT53cmFwcGVkT2JqZWN0KCk7Ci0gICAgaWYgKGlkIHRhcmdl
dCA9IHRyeVVud3JhcEJsb2NrKGNvbnRleHQsIG9iamVjdCkpCisgICAgaWYgKGlkIHRhcmdldCA9
IHRyeVVud3JhcEJsb2NrKG9iamVjdCkpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgcmV0
dXJuIG5pbDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNr
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0NTM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTQg
KzIyLDUxIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCisjaWZuZGVm
IE9iakNDYWxsYmFja0Z1bmN0aW9uX2gKKyNkZWZpbmUgT2JqQ0NhbGxiYWNrRnVuY3Rpb25faCAK
IAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTQ2FsbGJhY2tGdW5jdGlvbi5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKIAorI2lmIGRlZmluZWQoX19PQkpDX18pCiBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tG
dW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQgKiwgQ2xhc3MsIFByb3RvY29sICosIEJPT0wgaXNJ
bnN0YW5jZU1ldGhvZCwgU0VMLCBjb25zdCBjaGFyKiB0eXBlcyk7CiBKU09iamVjdFJlZiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKEpTQ29udGV4dCAqLCBpZCk7CiAKLWlkIHRyeVVud3Jh
cEJsb2NrKEpTR2xvYmFsQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOworaWQgdHJ5VW53cmFwQmxv
Y2soSlNPYmplY3RSZWYpOworI2VuZGlmCiAKICNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOworCitjbGFzcyBPYmpDQ2FsbGJhY2tGdW5j
dGlvbiA6IHB1YmxpYyBKU0NhbGxiYWNrRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYg
SlNDYWxsYmFja0Z1bmN0aW9uIEJhc2U7CisKKyAgICBzdGF0aWMgT2JqQ0NhbGxiYWNrRnVuY3Rp
b24qIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+KTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CisKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwqIGltcGwoKSB7IHJldHVy
biBtX2ltcGwuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIE9iakNDYWxsYmFja0Z1bmN0aW9u
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrLCBQYXNzT3du
UHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4pOworCitwcml2YXRlOgorICAgIE93blB0cjxP
YmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+IG1faW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gT2JqQ0NhbGxiYWNrRnVuY3Rpb25faCAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkocmV2aXNpb24g
MTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzg5LDkgKzM4OSwxMSBAQCBlbnVtIENhbGxiYWNrVHlw
ZSB7CiAgICAgQ2FsbGJhY2tCbG9jawogfTsKIAotY2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb24g
eworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbCB7CiBw
dWJsaWM6Ci0gICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oSlNDb250ZXh0ICpjb250ZXh0LCBOU0lu
dm9jYXRpb24gKmludm9jYXRpb24sIENhbGxiYWNrVHlwZSB0eXBlLCBDbGFzcyBpbnN0YW5jZUNs
YXNzLCBQYXNzT3duUHRyPENhbGxiYWNrQXJndW1lbnQ+IGFyZ3VtZW50cywgUGFzc093blB0cjxD
YWxsYmFja1Jlc3VsdD4gcmVzdWx0KQorICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbChKU0Nv
bnRleHQgKmNvbnRleHQsIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgQ2FsbGJhY2tUeXBlIHR5
cGUsIENsYXNzIGluc3RhbmNlQ2xhc3MsIFBhc3NPd25QdHI8Q2FsbGJhY2tBcmd1bWVudD4gYXJn
dW1lbnRzLCBQYXNzT3duUHRyPENhbGxiYWNrUmVzdWx0PiByZXN1bHQpCiAgICAgICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9pbnN0
YW5jZUNsYXNzKFtpbnN0YW5jZUNsYXNzIHJldGFpbl0pCkBAIC00MDIsNyArNDA0LDcgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQodHlwZSAhPSBDYWxsYmFja0luc3RhbmNlTWV0aG9kIHx8IGlu
c3RhbmNlQ2xhc3MpOwogICAgIH0KIAotICAgIH5PYmpDQ2FsbGJhY2tGdW5jdGlvbigpCisgICAg
fk9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbCgpCiAgICAgewogICAgICAgICBpZiAobV90eXBlICE9
IENhbGxiYWNrSW5zdGFuY2VNZXRob2QpCiAgICAgICAgICAgICBbW21faW52b2NhdGlvbi5nZXQo
KSB0YXJnZXRdIHJlbGVhc2VdOwpAQCAtNDM2LDExICs0MzgsNiBAQCBwcml2YXRlOgogICAgIE93
blB0cjxDYWxsYmFja1Jlc3VsdD4gbV9yZXN1bHQ7CiB9OwogCi1zdGF0aWMgdm9pZCBvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPihKU09iamVjdEdldFByaXZhdGUob2Jq
ZWN0KSk7Ci19Ci0KIHN0YXRpYyBKU1ZhbHVlUmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFz
RnVuY3Rpb24oSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIFJl
dGFrZSB0aGUgQVBJIGxvY2sgLSB3ZSBuZWVkIHRoaXMgZm9yIGEgZmV3IHJlYXNvbnM6CkBAIC00
NDksMTggKzQ0NiwxOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNh
CiAgICAgLy8gKDMpIFdlIG5lZWQgdG8gYmUgbG9ja2VkIChwZXIgY29udGV4dCB3b3VsZCBiZSBm
aW5lKSBhZ2FpbnN0IGNvbmZsaWN0aW5nIHVzYWdlIG9mIHRoZSBPYmpDQ2FsbGJhY2tGdW5jdGlv
bidzIE5TSW52b2NhdGlvbi4KICAgICBKU0M6OkFQSUVudHJ5U2hpbSBlbnRyeVNoaW0odG9KUyhj
YWxsZXJDb250ZXh0KSk7CiAKLSAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJhY2sgPSBz
dGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KEpTT2JqZWN0R2V0UHJpdmF0ZShmdW5j
dGlvbikpOwotICAgIEpTQ29udGV4dCAqY29udGV4dCA9IGNhbGxiYWNrLT5jb250ZXh0KCk7Cisg
ICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8T2JqQ0NhbGxi
YWNrRnVuY3Rpb24qPih0b0pTKGZ1bmN0aW9uKSk7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25J
bXBsKiBpbXBsID0gY2FsbGJhY2stPmltcGwoKTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBp
bXBsLT5jb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQgPSBb
SlNDb250ZXh0IGNvbnRleHRXaXRoR2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZih0b0pTKGNh
bGxlckNvbnRleHQpLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSldOwotICAg
ICAgICBjYWxsYmFjay0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgaW1wbC0+c2V0Q29u
dGV4dChjb250ZXh0KTsKICAgICB9CiAKICAgICBDYWxsYmFja0RhdGEgY2FsbGJhY2tEYXRhOwog
ICAgIEpTVmFsdWVSZWYgcmVzdWx0OwogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBb
Y29udGV4dCBiZWdpbkNhbGxiYWNrV2l0aERhdGE6JmNhbGxiYWNrRGF0YSB0aGlzVmFsdWU6dGhp
c09iamVjdCBhcmd1bWVudENvdW50OmFyZ3VtZW50Q291bnQgYXJndW1lbnRzOmFyZ3VtZW50c107
Ci0gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrLT5jYWxsKGNvbnRleHQsIHRoaXNPYmplY3QsIGFy
Z3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0gaW1w
bC0+Y2FsbChjb250ZXh0LCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4
Y2VwdGlvbik7CiAgICAgICAgIGlmIChjb250ZXh0LmV4Y2VwdGlvbikKICAgICAgICAgICAgICpl
eGNlcHRpb24gPSB2YWx1ZUludGVybmFsVmFsdWUoY29udGV4dC5leGNlcHRpb24pOwogICAgICAg
ICBbY29udGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOiZjYWxsYmFja0RhdGFdOwpAQCAtNDY4LDI2
ICs0NjYsMjcgQEAgc3RhdGljIEpTVmFsdWVSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU0NsYXNzUmVmIGNyZWF0ZU9iakNDYWxsYmFj
a0Z1bmN0aW9uQ2xhc3MoKQorY29uc3QgSlNDOjpDbGFzc0luZm8gT2JqQ0NhbGxiYWNrRnVuY3Rp
b246OnNfaW5mbyA9IHsgIkNhbGxiYWNrRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKE9iakNDYWxsYmFja0Z1bmN0aW9uKSB9OworCitPYmpDQ2FsbGJh
Y2tGdW5jdGlvbjo6T2JqQ0NhbGxiYWNrRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIFBhc3NP
d25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsKQorICAgIDogQmFzZShnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+b2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgY2Fs
bGJhY2spCisgICAgLCBtX2ltcGwoaW1wbCkKIHsKLSAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZp
bml0aW9uOwotICAgIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKLSAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJGdW5jdGlvbiI7Ci0gICAgZGVmaW5pdGlvbi5maW5hbGl6
ZSA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemU7Ci0gICAgZGVmaW5pdGlvbi5jYWxsQXNG
dW5jdGlvbiA9IG9iakNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFzRnVuY3Rpb247Ci0gICAgcmV0dXJu
IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwogfQogCi1zdGF0aWMgSlNDbGFzc1JlZiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkNsYXNzKCkKK09iakNDYWxsYmFja0Z1bmN0aW9uKiBPYmpDQ2FsbGJh
Y2tGdW5jdGlvbjo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxPYmpDQ2Fs
bGJhY2tGdW5jdGlvbkltcGw+IGltcGwpCiB7Ci0gICAgc3RhdGljIFNwaW5Mb2NrIGluaXRMb2Nr
ID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigm
aW5pdExvY2spOworICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPE9iakNDYWxsYmFja0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkg
T2JqQ0NhbGxiYWNrRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNh
bGxBc0Z1bmN0aW9uLCBpbXBsKTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CiAKLSAgICBzdGF0
aWMgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGNyZWF0ZU9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3Mo
KTsKLSAgICByZXR1cm4gY2xhc3NSZWY7Cit2b2lkIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlv
bio+KGNlbGwpLT5PYmpDQ2FsbGJhY2tGdW5jdGlvbjo6fk9iakNDYWxsYmFja0Z1bmN0aW9uKCk7
CiB9CiAKLUpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNhbGwoSlNDb250ZXh0ICpj
b250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1
ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6OmNhbGwoSlNDb250ZXh0ICpjb250ZXh0LCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0UmVmID0gW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl07CiAKQEAg
LTUyMyw2ICs1MjIsOCBAQCBKU1ZhbHVlUmVmIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEpT
CiAgICAgcmV0dXJuIG1fcmVzdWx0LT5nZXQobV9pbnZvY2F0aW9uLmdldCgpLCBjb250ZXh0LCBl
eGNlcHRpb24pOwogfQogCit9IC8vIG5hbWVzcGFjZSBKU0MKKwogc3RhdGljIGJvb2wgYmxvY2tT
aWduYXR1cmVDb250YWluc0NsYXNzKCkKIHsKICAgICBzdGF0aWMgYm9vbCBjb250YWluc0NsYXNz
ID0gXnsKQEAgLTU3OCwyMCArNTc5LDExIEBAIHN0YXRpYyBKU09iamVjdFJlZiBvYmpDQ2FsbGJh
Y2tGdW5jdGlvbkYKICAgICAgICAgKythcmd1bWVudENvdW50OwogICAgIH0KIAotICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODkyCi0gICAg
Ly8gVGhlIHJlc3VsdCBzaG91bGQgYmUgYSByZWd1bGFyIGhvc3QgZnVuY3Rpb24sIHJhdGhlciB0
aGFuIGEgY2FsbGFibGUgQyBBUEkgb2JqZWN0LgotICAgIC8vIFBhdGNoIGluIHRoZSByaWdodCBs
ZW5ndGggJiBbUHJvdG90eXBlXSB2YWx1ZXMgZm9yIG5vdywgYnV0IHNob3VsZCBmaXggdGhpcy4K
LSAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgY3VycmVudGx5IGZhaWxzLCBzaW5j
ZSB0aGlzIGlzIG5vdCB5ZXQgYSBzdWJjbGFzcyBvZiBmdW5jdG9uLCBidXQgY2FsbCAmIGFwcGx5
IGRvIHdvcmsuCi0gICAgSlNPYmplY3RSZWYgZnVuY3Rpb25PYmplY3QgPSBKU09iamVjdE1ha2Uo
W2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKSwg
bmV3IE9iakNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGludm9jYXRpb24sIHR5cGUsIGluc3Rh
bmNlQ2xhc3MsIGFyZ3VtZW50cy5yZWxlYXNlKCksIHJlc3VsdC5yZWxlYXNlKCkpKTsKLSAgICBK
U1ZhbHVlICp2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmZ1bmN0aW9uT2JqZWN0IGlu
Q29udGV4dDpjb250ZXh0XTsKLSAgICB2YWx1ZVtAImxlbmd0aCJdID0gQChhcmd1bWVudENvdW50
KTsKLSAgICBKU09iamVjdFNldFByb3RvdHlwZShbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwg
ZnVuY3Rpb25PYmplY3QsIHZhbHVlSW50ZXJuYWxWYWx1ZShjb250ZXh0W0AiRnVuY3Rpb24iXVtA
InByb3RvdHlwZSJdKSk7Ci0gICAgdmFsdWVbQCJ0b1N0cmluZyJdID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCIoZnVuY3Rpb24oKXsgcmV0dXJuICciCi0gICAgICAgICJmdW5jdGlvbiA8T2Jq
ZWN0aXZlLUM+KCkgeyIgIlxcbiIKLSAgICAgICAgIiAgICBbbmF0aXZlIGNvZGVdIiAgICAgICAg
ICAiXFxuIgotICAgICAgICAifSIgICAgICAgICAgICAgICAgICAgICAgICAgICJcXG4iCi0gICAg
Iid9KSJdOwotICAgIHJldHVybiBmdW5jdGlvbk9iamVjdDsKKyAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0pOworICAgIEpTQzo6QVBJRW50
cnlTaGltIHNoaW0oZXhlYyk7CisgICAgT3duUHRyPEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25J
bXBsPiBpbXBsID0gYWRvcHRQdHIobmV3IEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKGNv
bnRleHQsIGludm9jYXRpb24sIHR5cGUsIGluc3RhbmNlQ2xhc3MsIGFyZ3VtZW50cy5yZWxlYXNl
KCksIHJlc3VsdC5yZWxlYXNlKCkpKTsKKyAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgc3Vw
cG9ydCBoYXZpbmcgdGhlIHNlbGVjdG9yIGFzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBt
YWtlIGl0IGEgYml0IG1vcmUgdXNlci1mcmllbmRseSBmcm9tIHRoZSBKUyBzaWRlPworICAgIHJl
dHVybiB0b1JlZihKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAiT2JqZWN0aXZlLUMiLCBpbXBsLnJlbGVhc2UoKSkpOwog
fQogCiBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQg
KmNvbnRleHQsIENsYXNzIGNscywgUHJvdG9jb2wgKnByb3RvY29sLCBCT09MIGlzSW5zdGFuY2VN
ZXRob2QsIFNFTCBzZWwsIGNvbnN0IGNoYXIqIHR5cGVzKQpAQCAtNjEzLDExICs2MDUsMTEgQEAg
SlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jawogICAgIHJldHVybiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oY29udGV4dCwgaW52b2NhdGlvbiwgQ2FsbGJh
Y2tCbG9jaywgbmlsLCBzaWduYXR1cmUpOwogfQogCi1pZCB0cnlVbndyYXBCbG9jayhKU0dsb2Jh
bENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoraWQgdHJ5VW53cmFwQmxv
Y2soSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFz
cyhjb250ZXh0LCBvYmplY3QsIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKSkpCisgICAgaWYg
KCF0b0pTKG9iamVjdCktPmluaGVyaXRzKCZKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpzX2lu
Zm8pKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8T2JqQ0Nh
bGxiYWNrRnVuY3Rpb24qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSkpLT53cmFwcGVkQmxv
Y2soKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbio+
KHRvSlMob2JqZWN0KSktPmltcGwoKS0+d3JhcHBlZEJsb2NrKCk7CiB9CiAKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24g
MTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01MTksNiArNTE5LDE0IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEko
KQogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIFRlc3RPYmplY3QgKnRl
c3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRl
c3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAiRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGVz
dE9iamVjdC5jYWxsYmFjaykiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJjYWxsYmFjayBmdW5j
dGlvbiB0eXBlb2YiLCAhY29udGV4dC5leGNlcHRpb24gJiYgIVtyZXN1bHQgaXNVbmRlZmluZWRd
KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0MSA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKICAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0MiA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRl
eHQxLnZpcnR1YWxNYWNoaW5lXTsKICAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2
YWx1ZVdpdGhEb3VibGU6NDIgaW5Db250ZXh0OmNvbnRleHQyXTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE0
NTM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUVycm9y
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJO
dW1iZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oIgogI2lu
Y2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtMjMwLDYgKzIzMSw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2FyZ3VtZW50c1N0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAgICAg
bV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX2NhbGxiYWNrT2Jq
ZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fb2JqY0NhbGxiYWNr
RnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgT2JqQ0NhbGxi
YWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlz
LCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CkBAIC01MTMsNiArNTE1LDcgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVj
dHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fb2JqY1dyYXBwZXJPYmpl
Y3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2RhdGVTdHJ1
Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX251bGxQcm90b3R5cGVP
YmplY3RTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNDUzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiAr
MTQxLDcgQEAgcHJvdGVjdGVkOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGJh
Y2tDb25zdHJ1Y3RvclN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Nh
bGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9j
YWxsYmFja09iamVjdFN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29i
amNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9kYXRlU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbnVsbFBy
b3RvdHlwZU9iamVjdFN0cnVjdHVyZTsKQEAgLTMwMSw2ICszMDIsNyBAQCBwdWJsaWM6CiAgICAg
U3RydWN0dXJlKiBjYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBj
YWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0
aW9uU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjYWxsYmFja09iamVjdFN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0K
KyAgICBTdHJ1Y3R1cmUqIG9iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVj
dHVyZSogb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNX
cmFwcGVyT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBkYXRlU3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRlU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0
dXJlKiBudWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9udWxs
UHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192592</attachid>
            <date>2013-03-11 16:42:18 -0700</date>
            <delta_ts>2013-03-11 16:59:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105892-20130311163817.patch</filename>
            <type>text/plain</type>
            <size>22872</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1NDIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEzLTAzLTExICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBPYmplY3RpdmUtQyBmdW5jdGlvbnMgZXhwb3NlZCB0
byBKYXZhU2NyaXB0IGhhdmUgdGhlIHdyb25nIHR5cGUgKG9iamVjdCBpbnN0ZWFkIG9mIGZ1bmN0
aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1
ODkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hh
bmdlZCBPYmpDQ2FsbGJhY2tGdW5jdGlvbiB0byBzdWJjbGFzcyBKU0NhbGxiYWNrRnVuY3Rpb24g
d2hpY2ggYWxyZWFkeSBoYXMgYWxsIG9mIHRoZSBtYWNoaW5lcnkgdG8gY2FsbAorICAgICAgICBm
dW5jdGlvbnMgdXNpbmcgdGhlIEMgQVBJLiBTaW5jZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBpcyBu
b3cgYSBKU0NlbGwsIHdlIGNoYW5nZWQgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAg
ICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiB0byBiZSB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24g
YW5kIGtlZXAgdHJhY2sgb2YgYWxsIHRoZSBwcm9wZXIgZGF0YSBzbyB0aGF0IHdlIAorICAgICAg
ICBkb24ndCBoYXZlIHRvIHB1dCBhbGwgb2YgdGhhdCBpbiB0aGUgaGVhZGVyLCB3aGljaCB3aWxs
IG5vdyBiZSBpbmNsdWRlZCBmcm9tIEMrKyBmaWxlcyAoZS5nLiBKU0dsb2JhbE9iamVjdC5jcHAp
LgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHA6IENoYW5nZSBKU0NhbGxi
YWNrRnVuY3Rpb24gdG8gYWxsb3cgc3ViY2xhc3NpbmcuIE9yaWdpbmFsbHkgaXQgd2FzIGludGVy
bmFsbHkKKyAgICAgICAgcGFzc2luZyBpdHMgb3duIFN0cnVjdHVyZSB1cCB0aGUgY2hhaW4gb2Yg
Y29uc3RydWN0b3JzLCBidXQgd2Ugbm93IHdhbnQgdG8gYmUgYWJsZSB0byBwYXNzIG90aGVyIFN0
cnVjdHVyZXMgYXMgd2VsbC4KKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpKU0Nh
bGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0
ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDYWxs
YmFja0Z1bmN0aW9uKToKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBDaGFuZ2VkIGlu
dGVyZmFjZSB0byB0cnlVbndyYXBCbG9jay4KKyAgICAgICAgKHRyeVVud3JhcE9iamNPYmplY3Qp
OgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24pOiBNb3ZlZCBpbnRvIHRoZSBKU0MgbmFtZXNwYWNlLCBqdXN0IGxpa2Ug
SlNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKTogT3ZlcnJpZGRlbiBzbyB0aGF0IHRoZSBjb3JyZWN0IENsYXNzSW5m
byBnZXRzIHVzZWQgc2luY2Ugd2UgaGF2ZSAKKyAgICAgICAgYSBkZXN0cnVjdG9yLgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6aW1wbCk6IEdldHRlciBmb3IgdGhlIGludGVy
bmFsIGltcGwuCisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6Ok9iakNDYWxsYmFja0Z1bmN0aW9uSW1w
bCk6IFdoYXQgdXNlZCB0byBiZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBpcyBub3cgCisgICAgICAg
IE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbC4gSXQgaGFuZGxlcyB0aGUgT2JqZWN0aXZlLUMgc3Bl
Y2lmaWMgcGFydHMgb2YgbWFuYWdpbmcgY2FsbGJhY2sgZnVuY3Rpb25zLgorICAgICAgICAoSlND
OjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6On5PYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwpOgor
ICAgICAgICAoSlNDOjpvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uKTogU2FtZSBh
cyB0aGUgb2xkIG9uZSwgYnV0IG5vdyBpdCBjYXN0cyB0byBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBh
bmQgZ3JhYnMgdGhlIGltcGwgCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIEpTT2JqZWN0R2V0
UHJpdmF0ZS4KKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uKTogTmV3IGJpdHMgdG8gYWxsb3cgYmVpbmcgcGFydCBvZiB0aGUgSlNDZWxsIGhp
ZXJhcmNoeS4KKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxsKTogSGFuZGxlcyB0aGUgYWN0dWFsIGlu
dm9jYXRpb24sIGp1c3QgbGlrZSBpdCB1c2VkIHRvLgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JJbnZvY2F0aW9uKToKKyAgICAgICAgKHRyeVVud3JhcEJsb2NrKTogQ2hhbmdlZCB0
byBjaGVjayB0aGUgQ2xhc3NJbmZvIGZvciBpbmhlcml0YW5jZSBkaXJlY3RseSwgcmF0aGVyIHRo
YW4gZ29pbmcgdGhyb3VnaCB0aGUgQyBBUEkgY2FsbC4KKyAgICAgICAgKiBBUEkvdGVzdHMvdGVz
dGFwaS5tbTogQWRkZWQgbmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgZG9pbmcgRnVuY3Rpb24u
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZikgd29uJ3QgcmVzdWx0IGluIAorICAgICAgICBhbiBl
cnJvciB3aGVuIGYgaXMgYW4gT2JqZWN0aXZlLUMgbWV0aG9kIG9yIGJsb2NrIHVuZGVybmVhdGgg
dGhlIGNvdmVycy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDogQWRkZWQg
bmV3IFN0cnVjdHVyZSBmb3IgT2JqQ0NhbGxiYWNrRnVuY3Rpb24uCisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpvYmpjQ2Fs
bGJhY2tGdW5jdGlvblN0cnVjdHVyZSk6CisKIDIwMTMtMDMtMTEgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggYmVuZWF0aCBvcGVyYXRpb25DcmVh
dGVJbmxpbmVkQXJndW1lbnRzIHJ1bm5pbmcgZmFzdC9qcy9kZmctY3JlYXRlLWlubGluZWQtYXJn
dW1lbnRzLWluLWNsb3N1cmUtaW5saW5lLmh0bWwgKDMyLWJpdCBvbmx5KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE0NTM5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmFsdWVSZWYuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vh
a09iamVjdE1hcFJlZkludGVybmFsLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFx
dWVKU1N0cmluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJp
bmcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0
NCw4IEBAIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQ2FsbGJhY2sKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FsbGJhY2tGdW5jdGlvbjo6c19pbmZvID0geyAiQ2FsbGJhY2tGdW5jdGlv
biIsICZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNDYWxsYmFja0Z1bmN0aW9uKSB9OwogCi1KU0NhbGxiYWNrRnVuY3Rpb246OkpTQ2FsbGJhY2tG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0
aW9uQ2FsbGJhY2sgY2FsbGJhY2spCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkpCitKU0NhbGxiYWNr
RnVuY3Rpb246OkpTQ2FsbGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNh
bGxiYWNrKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkK
ICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiB7CiB9CkBAIC01Niw2ICs1NiwxMyBAQCB2b2lk
IEpTQ2FsbGJhY2tGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKIH0KIAorSlNDYWxsYmFja0Z1bmN0aW9uKiBKU0NhbGxiYWNrRnVuY3Rpb246
OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNr
RnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmNhbGxiYWNrRnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgY2FsbGJhY2spOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIG5hbWUpOworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKwogRW5jb2RlZEpT
VmFsdWUgSlNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBK
U0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDUzOTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxOCArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQ2Fs
bGJhY2tGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKIHByb3RlY3RlZDoKLSAg
ICBKU0NhbGxiYWNrRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0
aW9uQ2FsbGJhY2spOworICAgIEpTQ2FsbGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayk7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNDYWxs
YmFja0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0
IFN0cmluZyYgbmFtZSkKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rp
b24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVj
LT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBjYWxsYmFjayk7Ci0g
ICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUp
OwotICAgICAgICByZXR1cm4gZnVuY3Rpb247Ci0gICAgfQorICAgIHN0YXRpYyBKU0NhbGxiYWNr
RnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Q2Fs
bEFzRnVuY3Rpb25DYWxsYmFjaywgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgIApAQCAtNTUsOSArNTAsMTAgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsg
CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogCitwcml2YXRlOgogICAgIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKik7CiAKICAgICBKU09iamVj
dENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCShyZXZpc2lvbiAxNDUzOTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMw
LDcgKzUzMCw3IEBAIGlkIHRyeVVud3JhcE9iamNPYmplY3QoSlNHbG9iYWxDb250ZXh0UmUKICAg
ICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAgICAgaWYgKEpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY29u
dGV4dCwgb2JqZWN0LCB3cmFwcGVyQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiAoaWQpSlNDOjpq
c0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPih0b0pTKG9iamVjdCkpLT53cmFwcGVkT2Jq
ZWN0KCk7Ci0gICAgaWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJsb2NrKGNvbnRleHQsIG9iamVj
dCkpCisgICAgaWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJsb2NrKG9iamVjdCkpCiAgICAgICAg
IHJldHVybiB0YXJnZXQ7CiAgICAgcmV0dXJuIG5pbDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0NTM5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMTQgKzIyLDUxIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCisjaWZuZGVmIE9iakNDYWxsYmFja0Z1bmN0aW9uX2gKKyNkZWZpbmUg
T2JqQ0NhbGxiYWNrRnVuY3Rpb25faCAKIAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ2FsbGJhY2tGdW5jdGlvbi5o
PgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAorI2lmIGRlZmluZWQoX19PQkpDX18pCiBK
U09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQgKiwgQ2xh
c3MsIFByb3RvY29sICosIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMLCBjb25zdCBjaGFyKiB0
eXBlcyk7CiBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKEpTQ29udGV4
dCAqLCBpZCk7CiAKLWlkIHRyeVVud3JhcEJsb2NrKEpTR2xvYmFsQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYpOworaWQgdHJ5VW53cmFwQmxvY2soSlNPYmplY3RSZWYpOworI2VuZGlmCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw7CisKK2NsYXNzIE9i
akNDYWxsYmFja0Z1bmN0aW9uIDogcHVibGljIEpTQ2FsbGJhY2tGdW5jdGlvbiB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0NhbGxiYWNrRnVuY3Rpb24gQmFzZTsKKworICAgIHN0YXRpYyBPYmpD
Q2FsbGJhY2tGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4pOwor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbCog
aW1wbCgpIHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2Fs
bGJhY2ssIFBhc3NPd25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPik7CisKK3ByaXZhdGU6
CisgICAgT3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4gbV9pbXBsOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgorCisjZW5kaWYgLy8gT2JqQ0NhbGxiYWNrRnVuY3Rp
b25faCAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rp
b24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJh
Y2tGdW5jdGlvbi5tbQkocmV2aXNpb24gMTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzg5LDkgKzM4
OSwxMSBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgQ2FsbGJhY2tCbG9jawogfTsKIAotY2xh
c3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb24geworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE9iakND
YWxsYmFja0Z1bmN0aW9uSW1wbCB7CiBwdWJsaWM6Ci0gICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24o
SlNDb250ZXh0ICpjb250ZXh0LCBOU0ludm9jYXRpb24gKmludm9jYXRpb24sIENhbGxiYWNrVHlw
ZSB0eXBlLCBDbGFzcyBpbnN0YW5jZUNsYXNzLCBQYXNzT3duUHRyPENhbGxiYWNrQXJndW1lbnQ+
IGFyZ3VtZW50cywgUGFzc093blB0cjxDYWxsYmFja1Jlc3VsdD4gcmVzdWx0KQorICAgIE9iakND
YWxsYmFja0Z1bmN0aW9uSW1wbChKU0NvbnRleHQgKmNvbnRleHQsIE5TSW52b2NhdGlvbiAqaW52
b2NhdGlvbiwgQ2FsbGJhY2tUeXBlIHR5cGUsIENsYXNzIGluc3RhbmNlQ2xhc3MsIFBhc3NPd25Q
dHI8Q2FsbGJhY2tBcmd1bWVudD4gYXJndW1lbnRzLCBQYXNzT3duUHRyPENhbGxiYWNrUmVzdWx0
PiByZXN1bHQpCiAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgICAgICwgbV90eXBl
KHR5cGUpCiAgICAgICAgICwgbV9pbnN0YW5jZUNsYXNzKFtpbnN0YW5jZUNsYXNzIHJldGFpbl0p
CkBAIC00MDIsNyArNDA0LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodHlwZSAhPSBDYWxs
YmFja0luc3RhbmNlTWV0aG9kIHx8IGluc3RhbmNlQ2xhc3MpOwogICAgIH0KIAotICAgIH5PYmpD
Q2FsbGJhY2tGdW5jdGlvbigpCisgICAgfk9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbCgpCiAgICAg
ewogICAgICAgICBpZiAobV90eXBlICE9IENhbGxiYWNrSW5zdGFuY2VNZXRob2QpCiAgICAgICAg
ICAgICBbW21faW52b2NhdGlvbi5nZXQoKSB0YXJnZXRdIHJlbGVhc2VdOwpAQCAtNDM2LDExICs0
MzgsNiBAQCBwcml2YXRlOgogICAgIE93blB0cjxDYWxsYmFja1Jlc3VsdD4gbV9yZXN1bHQ7CiB9
OwogCi1zdGF0aWMgdm9pZCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZpbmFsaXplKEpTT2JqZWN0UmVm
IG9iamVjdCkKLXsKLSAgICBkZWxldGUgc3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24q
PihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7Ci19Ci0KIHN0YXRpYyBKU1ZhbHVlUmVmIG9i
akNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNhbGxlckNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQogewogICAgIC8vIFJldGFrZSB0aGUgQVBJIGxvY2sgLSB3ZSBuZWVkIHRoaXMg
Zm9yIGEgZmV3IHJlYXNvbnM6CkBAIC00NDksMTggKzQ0NiwxOSBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhCiAgICAgLy8gKDMpIFdlIG5lZWQgdG8gYmUgbG9ja2Vk
IChwZXIgY29udGV4dCB3b3VsZCBiZSBmaW5lKSBhZ2FpbnN0IGNvbmZsaWN0aW5nIHVzYWdlIG9m
IHRoZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbidzIE5TSW52b2NhdGlvbi4KICAgICBKU0M6OkFQSUVu
dHJ5U2hpbSBlbnRyeVNoaW0odG9KUyhjYWxsZXJDb250ZXh0KSk7CiAKLSAgICBPYmpDQ2FsbGJh
Y2tGdW5jdGlvbiogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+
KEpTT2JqZWN0R2V0UHJpdmF0ZShmdW5jdGlvbikpOwotICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IGNhbGxiYWNrLT5jb250ZXh0KCk7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGNhbGxiYWNr
ID0gc3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPih0b0pTKGZ1bmN0aW9uKSk7Cisg
ICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKiBpbXBsID0gY2FsbGJhY2stPmltcGwoKTsKKyAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBpbXBsLT5jb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0
KSB7CiAgICAgICAgIGNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoR2xvYmFsQ29udGV4
dFJlZjp0b0dsb2JhbFJlZih0b0pTKGNhbGxlckNvbnRleHQpLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSldOwotICAgICAgICBjYWxsYmFjay0+c2V0Q29udGV4dChjb250ZXh0
KTsKKyAgICAgICAgaW1wbC0+c2V0Q29udGV4dChjb250ZXh0KTsKICAgICB9CiAKICAgICBDYWxs
YmFja0RhdGEgY2FsbGJhY2tEYXRhOwogICAgIEpTVmFsdWVSZWYgcmVzdWx0OwogICAgIEBhdXRv
cmVsZWFzZXBvb2wgewogICAgICAgICBbY29udGV4dCBiZWdpbkNhbGxiYWNrV2l0aERhdGE6JmNh
bGxiYWNrRGF0YSB0aGlzVmFsdWU6dGhpc09iamVjdCBhcmd1bWVudENvdW50OmFyZ3VtZW50Q291
bnQgYXJndW1lbnRzOmFyZ3VtZW50c107Ci0gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrLT5jYWxs
KGNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9u
KTsKKyAgICAgICAgcmVzdWx0ID0gaW1wbC0+Y2FsbChjb250ZXh0LCB0aGlzT2JqZWN0LCBhcmd1
bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChjb250ZXh0LmV4
Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB2YWx1ZUludGVybmFsVmFsdWUoY29u
dGV4dC5leGNlcHRpb24pOwogICAgICAgICBbY29udGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOiZj
YWxsYmFja0RhdGFdOwpAQCAtNDY4LDI2ICs0NjYsMjcgQEAgc3RhdGljIEpTVmFsdWVSZWYgb2Jq
Q0NhbGxiYWNrRnVuY3Rpb25DYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU0Ns
YXNzUmVmIGNyZWF0ZU9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKQorY29uc3QgSlNDOjpDbGFz
c0luZm8gT2JqQ0NhbGxiYWNrRnVuY3Rpb246OnNfaW5mbyA9IHsgIkNhbGxiYWNrRnVuY3Rpb24i
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE9iakNDYWxsYmFja0Z1
bmN0aW9uKSB9OworCitPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6T2JqQ0NhbGxiYWNrRnVuY3Rpb24o
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9u
Q2FsbGJhY2sgY2FsbGJhY2ssIFBhc3NPd25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBp
bXBsKQorICAgIDogQmFzZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqY0NhbGxiYWNr
RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgY2FsbGJhY2spCisgICAgLCBtX2ltcGwoaW1wbCkKIHsKLSAg
ICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICAgIGRlZmluaXRpb24gPSBrSlNDbGFz
c0RlZmluaXRpb25FbXB0eTsKLSAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJGdW5jdGlvbiI7
Ci0gICAgZGVmaW5pdGlvbi5maW5hbGl6ZSA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemU7
Ci0gICAgZGVmaW5pdGlvbi5jYWxsQXNGdW5jdGlvbiA9IG9iakNDYWxsYmFja0Z1bmN0aW9uQ2Fs
bEFzRnVuY3Rpb247Ci0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwogfQog
Ci1zdGF0aWMgSlNDbGFzc1JlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNsYXNzKCkKK09iakNDYWxs
YmFja0Z1bmN0aW9uKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+IGltcGwpCiB7Ci0gICAg
c3RhdGljIFNwaW5Mb2NrIGluaXRMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmaW5pdExvY2spOworICAgIE9iakNDYWxsYmFja0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE9iakNDYWxsYmFja0Z1
bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oZ2xvYmFsT2JqZWN0
LCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uLCBpbXBsKTsKKyAgICBmdW5jdGlv
bi0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICByZXR1cm4g
ZnVuY3Rpb247Cit9CiAKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGNyZWF0ZU9i
akNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKTsKLSAgICByZXR1cm4gY2xhc3NSZWY7Cit2b2lkIE9i
akNDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNf
Y2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KGNlbGwpLT5PYmpDQ2FsbGJhY2tGdW5jdGlvbjo6
fk9iakNDYWxsYmFja0Z1bmN0aW9uKCk7CiB9CiAKLUpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVu
Y3Rpb246OmNhbGwoSlNDb250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6OmNh
bGwoSlNDb250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0UmVmID0gW2NvbnRleHQg
Z2xvYmFsQ29udGV4dFJlZl07CiAKQEAgLTUyMyw2ICs1MjIsOCBAQCBKU1ZhbHVlUmVmIE9iakND
YWxsYmFja0Z1bmN0aW9uOjpjYWxsKEpTCiAgICAgcmV0dXJuIG1fcmVzdWx0LT5nZXQobV9pbnZv
Y2F0aW9uLmdldCgpLCBjb250ZXh0LCBleGNlcHRpb24pOwogfQogCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwogc3RhdGljIGJvb2wgYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKCkKIHsKICAgICBz
dGF0aWMgYm9vbCBjb250YWluc0NsYXNzID0gXnsKQEAgLTU3OCwyMCArNTc5LDExIEBAIHN0YXRp
YyBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkYKICAgICAgICAgKythcmd1bWVudENv
dW50OwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA1ODkyCi0gICAgLy8gVGhlIHJlc3VsdCBzaG91bGQgYmUgYSByZWd1bGFy
IGhvc3QgZnVuY3Rpb24sIHJhdGhlciB0aGFuIGEgY2FsbGFibGUgQyBBUEkgb2JqZWN0LgotICAg
IC8vIFBhdGNoIGluIHRoZSByaWdodCBsZW5ndGggJiBbUHJvdG90eXBlXSB2YWx1ZXMgZm9yIG5v
dywgYnV0IHNob3VsZCBmaXggdGhpcy4KLSAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJp
bmcgY3VycmVudGx5IGZhaWxzLCBzaW5jZSB0aGlzIGlzIG5vdCB5ZXQgYSBzdWJjbGFzcyBvZiBm
dW5jdG9uLCBidXQgY2FsbCAmIGFwcGx5IGRvIHdvcmsuCi0gICAgSlNPYmplY3RSZWYgZnVuY3Rp
b25PYmplY3QgPSBKU09iamVjdE1ha2UoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIG9iakND
YWxsYmFja0Z1bmN0aW9uQ2xhc3MoKSwgbmV3IE9iakNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQs
IGludm9jYXRpb24sIHR5cGUsIGluc3RhbmNlQ2xhc3MsIGFyZ3VtZW50cy5yZWxlYXNlKCksIHJl
c3VsdC5yZWxlYXNlKCkpKTsKLSAgICBKU1ZhbHVlICp2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0
aFZhbHVlOmZ1bmN0aW9uT2JqZWN0IGluQ29udGV4dDpjb250ZXh0XTsKLSAgICB2YWx1ZVtAImxl
bmd0aCJdID0gQChhcmd1bWVudENvdW50KTsKLSAgICBKU09iamVjdFNldFByb3RvdHlwZShbY29u
dGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgZnVuY3Rpb25PYmplY3QsIHZhbHVlSW50ZXJuYWxWYWx1
ZShjb250ZXh0W0AiRnVuY3Rpb24iXVtAInByb3RvdHlwZSJdKSk7Ci0gICAgdmFsdWVbQCJ0b1N0
cmluZyJdID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIoZnVuY3Rpb24oKXsgcmV0dXJuICci
Ci0gICAgICAgICJmdW5jdGlvbiA8T2JqZWN0aXZlLUM+KCkgeyIgIlxcbiIKLSAgICAgICAgIiAg
ICBbbmF0aXZlIGNvZGVdIiAgICAgICAgICAiXFxuIgotICAgICAgICAifSIgICAgICAgICAgICAg
ICAgICAgICAgICAgICJcXG4iCi0gICAgIid9KSJdOwotICAgIHJldHVybiBmdW5jdGlvbk9iamVj
dDsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoW2NvbnRleHQgZ2xvYmFsQ29udGV4
dFJlZl0pOworICAgIEpTQzo6QVBJRW50cnlTaGltIHNoaW0oZXhlYyk7CisgICAgT3duUHRyPEpT
Qzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsID0gYWRvcHRQdHIobmV3IEpTQzo6T2Jq
Q0NhbGxiYWNrRnVuY3Rpb25JbXBsKGNvbnRleHQsIGludm9jYXRpb24sIHR5cGUsIGluc3RhbmNl
Q2xhc3MsIGFyZ3VtZW50cy5yZWxlYXNlKCksIHJlc3VsdC5yZWxlYXNlKCkpKTsKKyAgICAvLyBG
SVhNRTogTWF5YmUgd2UgY291bGQgc3VwcG9ydCBoYXZpbmcgdGhlIHNlbGVjdG9yIGFzIHRoZSBu
YW1lIG9mIHRoZSBmdW5jdGlvbiB0byBtYWtlIGl0IGEgYml0IG1vcmUgdXNlci1mcmllbmRseSBm
cm9tIHRoZSBKUyBzaWRlPworICAgIHJldHVybiB0b1JlZihKU0M6Ok9iakNDYWxsYmFja0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAiT2JqZWN0aXZl
LUMiLCBpbXBsLnJlbGVhc2UoKSkpOwogfQogCiBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5j
dGlvbkZvck1ldGhvZChKU0NvbnRleHQgKmNvbnRleHQsIENsYXNzIGNscywgUHJvdG9jb2wgKnBy
b3RvY29sLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIFNFTCBzZWwsIGNvbnN0IGNoYXIqIHR5cGVz
KQpAQCAtNjEzLDExICs2MDUsMTEgQEAgSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25G
b3JCbG9jawogICAgIHJldHVybiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oY29u
dGV4dCwgaW52b2NhdGlvbiwgQ2FsbGJhY2tCbG9jaywgbmlsLCBzaWduYXR1cmUpOwogfQogCi1p
ZCB0cnlVbndyYXBCbG9jayhKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
b2JqZWN0KQoraWQgdHJ5VW53cmFwQmxvY2soSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIGlm
ICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCBvYmplY3QsIG9iakNDYWxsYmFja0Z1
bmN0aW9uQ2xhc3MoKSkpCisgICAgaWYgKCF0b0pTKG9iamVjdCktPmluaGVyaXRzKCZKU0M6Ok9i
akNDYWxsYmFja0Z1bmN0aW9uOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJl
dHVybiAoc3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPihKU09iamVjdEdldFByaXZh
dGUob2JqZWN0KSkpLT53cmFwcGVkQmxvY2soKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlND
OjpPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KHRvSlMob2JqZWN0KSktPmltcGwoKS0+d3JhcHBlZEJs
b2NrKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTksNiArNTE5LDE0IEBA
IHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07
CisgICAgICAgIFRlc3RPYmplY3QgKnRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0
XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAg
IEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiRnVuY3Rpb24ucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwodGVzdE9iamVjdC5jYWxsYmFjaykiXTsKKyAgICAgICAgY2hl
Y2tSZXN1bHQoQCJjYWxsYmFjayBmdW5jdGlvbiB0eXBlb2YiLCAhY29udGV4dC5leGNlcHRpb24g
JiYgIVtyZXN1bHQgaXNVbmRlZmluZWRdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MSA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0
XTsKICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MiA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0
V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQxLnZpcnR1YWxNYWNoaW5lXTsKICAgICAgICAgSlNW
YWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6NDIgaW5Db250ZXh0OmNvbnRl
eHQyXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAxNDUzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU1MCw2ICsxNTUwLDEwIEBACiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEFQSVxPYmpDQ2FsbGJh
Y2tGdW5jdGlvbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxBUElcT3BhcXVlSlNTdHJpbmcuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDE0NTM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogI2luY2x1
ZGUgIk5hdGl2ZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJPYmpDQ2FsbGJhY2tG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtMjMwLDYgKzIzMSw5
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2FyZ3Vt
ZW50c1N0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcmd1bWVudHM6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSk7CiAgICAgbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAg
ICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgbV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVy
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSkpOworI2VuZGlmCiAgICAgbV9vYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSkpOwpAQCAtNTEzLDYgKzUxNyw5IEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdFN0cnVjdHVyZSk7CisjaWYgSlNDX09C
SkNfQVBJX0VOQUJMRUQKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9vYmpjQ2Fs
bGJhY2tGdW5jdGlvblN0cnVjdHVyZSk7CisjZW5kaWYKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9vYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fZGF0ZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE0
NTM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFp
bi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmFuZG9tTnVtYmVyLmg+CkBAIC0xNDEsNiArMTQyLDkgQEAgcHJvdGVjdGVkOgogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZTsKICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZTsKKyNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRAorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqY0Nh
bGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmU7CisjZW5kaWYKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fZGF0ZVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX251
bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmU7CkBAIC0zMDEsNiArMzA1LDkgQEAgcHVibGljOgog
ICAgIFN0cnVjdHVyZSogY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVy
ZSogY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tG
dW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogY2FsbGJhY2tPYmplY3RT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLmdldCgp
OyB9CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICBTdHJ1Y3R1cmUqIG9iamNDYWxsYmFj
a0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9vYmpjQ2FsbGJhY2tGdW5jdGlv
blN0cnVjdHVyZS5nZXQoKTsgfQorI2VuZGlmCiAgICAgU3RydWN0dXJlKiBvYmpjV3JhcHBlck9i
amVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIGRhdGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX2RhdGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIG51bGxQcm90b3R5cGVP
YmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192596</attachid>
            <date>2013-03-11 16:59:10 -0700</date>
            <delta_ts>2013-03-11 17:35:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105892-20130311165510.patch</filename>
            <type>text/plain</type>
            <size>22918</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1NDIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEzLTAzLTExICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBPYmplY3RpdmUtQyBmdW5jdGlvbnMgZXhwb3NlZCB0
byBKYXZhU2NyaXB0IGhhdmUgdGhlIHdyb25nIHR5cGUgKG9iamVjdCBpbnN0ZWFkIG9mIGZ1bmN0
aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1
ODkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hh
bmdlZCBPYmpDQ2FsbGJhY2tGdW5jdGlvbiB0byBzdWJjbGFzcyBKU0NhbGxiYWNrRnVuY3Rpb24g
d2hpY2ggYWxyZWFkeSBoYXMgYWxsIG9mIHRoZSBtYWNoaW5lcnkgdG8gY2FsbAorICAgICAgICBm
dW5jdGlvbnMgdXNpbmcgdGhlIEMgQVBJLiBTaW5jZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBpcyBu
b3cgYSBKU0NlbGwsIHdlIGNoYW5nZWQgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAg
ICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiB0byBiZSB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24g
YW5kIGtlZXAgdHJhY2sgb2YgYWxsIHRoZSBwcm9wZXIgZGF0YSBzbyB0aGF0IHdlIAorICAgICAg
ICBkb24ndCBoYXZlIHRvIHB1dCBhbGwgb2YgdGhhdCBpbiB0aGUgaGVhZGVyLCB3aGljaCB3aWxs
IG5vdyBiZSBpbmNsdWRlZCBmcm9tIEMrKyBmaWxlcyAoZS5nLiBKU0dsb2JhbE9iamVjdC5jcHAp
LgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHA6IENoYW5nZSBKU0NhbGxi
YWNrRnVuY3Rpb24gdG8gYWxsb3cgc3ViY2xhc3NpbmcuIE9yaWdpbmFsbHkgaXQgd2FzIGludGVy
bmFsbHkKKyAgICAgICAgcGFzc2luZyBpdHMgb3duIFN0cnVjdHVyZSB1cCB0aGUgY2hhaW4gb2Yg
Y29uc3RydWN0b3JzLCBidXQgd2Ugbm93IHdhbnQgdG8gYmUgYWJsZSB0byBwYXNzIG90aGVyIFN0
cnVjdHVyZXMgYXMgd2VsbC4KKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpKU0Nh
bGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0
ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDYWxs
YmFja0Z1bmN0aW9uKToKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBDaGFuZ2VkIGlu
dGVyZmFjZSB0byB0cnlVbndyYXBCbG9jay4KKyAgICAgICAgKHRyeVVud3JhcE9iamNPYmplY3Qp
OgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24pOiBNb3ZlZCBpbnRvIHRoZSBKU0MgbmFtZXNwYWNlLCBqdXN0IGxpa2Ug
SlNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKTogT3ZlcnJpZGRlbiBzbyB0aGF0IHRoZSBjb3JyZWN0IENsYXNzSW5m
byBnZXRzIHVzZWQgc2luY2Ugd2UgaGF2ZSAKKyAgICAgICAgYSBkZXN0cnVjdG9yLgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6aW1wbCk6IEdldHRlciBmb3IgdGhlIGludGVy
bmFsIGltcGwuCisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6Ok9iakNDYWxsYmFja0Z1bmN0aW9uSW1w
bCk6IFdoYXQgdXNlZCB0byBiZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBpcyBub3cgCisgICAgICAg
IE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbC4gSXQgaGFuZGxlcyB0aGUgT2JqZWN0aXZlLUMgc3Bl
Y2lmaWMgcGFydHMgb2YgbWFuYWdpbmcgY2FsbGJhY2sgZnVuY3Rpb25zLgorICAgICAgICAoSlND
OjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6On5PYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwpOgor
ICAgICAgICAoSlNDOjpvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uKTogU2FtZSBh
cyB0aGUgb2xkIG9uZSwgYnV0IG5vdyBpdCBjYXN0cyB0byBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBh
bmQgZ3JhYnMgdGhlIGltcGwgCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIEpTT2JqZWN0R2V0
UHJpdmF0ZS4KKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uKTogTmV3IGJpdHMgdG8gYWxsb3cgYmVpbmcgcGFydCBvZiB0aGUgSlNDZWxsIGhp
ZXJhcmNoeS4KKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxsKTogSGFuZGxlcyB0aGUgYWN0dWFsIGlu
dm9jYXRpb24sIGp1c3QgbGlrZSBpdCB1c2VkIHRvLgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JJbnZvY2F0aW9uKToKKyAgICAgICAgKHRyeVVud3JhcEJsb2NrKTogQ2hhbmdlZCB0
byBjaGVjayB0aGUgQ2xhc3NJbmZvIGZvciBpbmhlcml0YW5jZSBkaXJlY3RseSwgcmF0aGVyIHRo
YW4gZ29pbmcgdGhyb3VnaCB0aGUgQyBBUEkgY2FsbC4KKyAgICAgICAgKiBBUEkvdGVzdHMvdGVz
dGFwaS5tbTogQWRkZWQgbmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgZG9pbmcgRnVuY3Rpb24u
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZikgd29uJ3QgcmVzdWx0IGluIAorICAgICAgICBhbiBl
cnJvciB3aGVuIGYgaXMgYW4gT2JqZWN0aXZlLUMgbWV0aG9kIG9yIGJsb2NrIHVuZGVybmVhdGgg
dGhlIGNvdmVycy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDogQWRkZWQg
bmV3IFN0cnVjdHVyZSBmb3IgT2JqQ0NhbGxiYWNrRnVuY3Rpb24uCisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpvYmpjQ2Fs
bGJhY2tGdW5jdGlvblN0cnVjdHVyZSk6CisKIDIwMTMtMDMtMTEgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggYmVuZWF0aCBvcGVyYXRpb25DcmVh
dGVJbmxpbmVkQXJndW1lbnRzIHJ1bm5pbmcgZmFzdC9qcy9kZmctY3JlYXRlLWlubGluZWQtYXJn
dW1lbnRzLWluLWNsb3N1cmUtaW5saW5lLmh0bWwgKDMyLWJpdCBvbmx5KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE0NTM5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmFsdWVSZWYuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vh
a09iamVjdE1hcFJlZkludGVybmFsLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFx
dWVKU1N0cmluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJp
bmcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0
NCw4IEBAIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQ2FsbGJhY2sKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FsbGJhY2tGdW5jdGlvbjo6c19pbmZvID0geyAiQ2FsbGJhY2tGdW5jdGlv
biIsICZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNDYWxsYmFja0Z1bmN0aW9uKSB9OwogCi1KU0NhbGxiYWNrRnVuY3Rpb246OkpTQ2FsbGJhY2tG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0
aW9uQ2FsbGJhY2sgY2FsbGJhY2spCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkpCitKU0NhbGxiYWNr
RnVuY3Rpb246OkpTQ2FsbGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNh
bGxiYWNrKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkK
ICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiB7CiB9CkBAIC01Niw2ICs1NiwxMyBAQCB2b2lk
IEpTQ2FsbGJhY2tGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKIH0KIAorSlNDYWxsYmFja0Z1bmN0aW9uKiBKU0NhbGxiYWNrRnVuY3Rpb246
OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNr
RnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmNhbGxiYWNrRnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgY2FsbGJhY2spOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIG5hbWUpOworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKwogRW5jb2RlZEpT
VmFsdWUgSlNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBK
U0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDUzOTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxOCArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQ2Fs
bGJhY2tGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKIHByb3RlY3RlZDoKLSAg
ICBKU0NhbGxiYWNrRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0
aW9uQ2FsbGJhY2spOworICAgIEpTQ2FsbGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayk7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNDYWxs
YmFja0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0
IFN0cmluZyYgbmFtZSkKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rp
b24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVj
LT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBjYWxsYmFjayk7Ci0g
ICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUp
OwotICAgICAgICByZXR1cm4gZnVuY3Rpb247Ci0gICAgfQorICAgIHN0YXRpYyBKU0NhbGxiYWNr
RnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Q2Fs
bEFzRnVuY3Rpb25DYWxsYmFjaywgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgIApAQCAtNTUsOSArNTAsMTAgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsg
CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogCitwcml2YXRlOgogICAgIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKik7CiAKICAgICBKU09iamVj
dENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCShyZXZpc2lvbiAxNDUzOTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMw
LDcgKzUzMCw3IEBAIGlkIHRyeVVud3JhcE9iamNPYmplY3QoSlNHbG9iYWxDb250ZXh0UmUKICAg
ICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAgICAgaWYgKEpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY29u
dGV4dCwgb2JqZWN0LCB3cmFwcGVyQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiAoaWQpSlNDOjpq
c0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPih0b0pTKG9iamVjdCkpLT53cmFwcGVkT2Jq
ZWN0KCk7Ci0gICAgaWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJsb2NrKGNvbnRleHQsIG9iamVj
dCkpCisgICAgaWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJsb2NrKG9iamVjdCkpCiAgICAgICAg
IHJldHVybiB0YXJnZXQ7CiAgICAgcmV0dXJuIG5pbDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0NTM5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMTQgKzIyLDUyIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCisjaWZuZGVmIE9iakNDYWxsYmFja0Z1bmN0aW9uX2gKKyNkZWZpbmUg
T2JqQ0NhbGxiYWNrRnVuY3Rpb25faCAKIAotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgog
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlND
YWxsYmFja0Z1bmN0aW9uLmg+CisKKyNpZiBkZWZpbmVkKF9fT0JKQ19fKQogSlNPYmplY3RSZWYg
b2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2QoSlNDb250ZXh0ICosIENsYXNzLCBQcm90b2Nv
bCAqLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIFNFTCwgY29uc3QgY2hhciogdHlwZXMpOwogSlNP
YmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayhKU0NvbnRleHQgKiwgaWQpOwog
Ci1pZCB0cnlVbndyYXBCbG9jayhKU0dsb2JhbENvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsKK2lk
IHRyeVVud3JhcEJsb2NrKEpTT2JqZWN0UmVmKTsKKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOworCitjbGFzcyBPYmpDQ2FsbGJhY2tG
dW5jdGlvbiA6IHB1YmxpYyBKU0NhbGxiYWNrRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDYWxsYmFja0Z1bmN0aW9uIEJhc2U7CisKKyAgICBzdGF0aWMgT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+KTsKKyAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CisKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwqIGltcGwoKSB7IHJl
dHVybiBtX2ltcGwuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIE9iakNDYWxsYmFja0Z1bmN0
aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrLCBQYXNz
T3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4pOworCitwcml2YXRlOgorICAgIE93blB0
cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+IG1faW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYKKworI2VuZGlmIC8vIE9iakNDYWxsYmFja0Z1bmN0aW9uX2ggCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24u
bW0JKHJldmlzaW9uIDE0NTM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4OSw5ICszODksMTEgQEAgZW51
bSBDYWxsYmFja1R5cGUgewogICAgIENhbGxiYWNrQmxvY2sKIH07CiAKLWNsYXNzIE9iakNDYWxs
YmFja0Z1bmN0aW9uIHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBPYmpDQ2FsbGJhY2tGdW5j
dGlvbkltcGwgewogcHVibGljOgotICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKEpTQ29udGV4dCAq
Y29udGV4dCwgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uLCBDYWxsYmFja1R5cGUgdHlwZSwgQ2xh
c3MgaW5zdGFuY2VDbGFzcywgUGFzc093blB0cjxDYWxsYmFja0FyZ3VtZW50PiBhcmd1bWVudHMs
IFBhc3NPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+IHJlc3VsdCkKKyAgICBPYmpDQ2FsbGJhY2tGdW5j
dGlvbkltcGwoSlNDb250ZXh0ICpjb250ZXh0LCBOU0ludm9jYXRpb24gKmludm9jYXRpb24sIENh
bGxiYWNrVHlwZSB0eXBlLCBDbGFzcyBpbnN0YW5jZUNsYXNzLCBQYXNzT3duUHRyPENhbGxiYWNr
QXJndW1lbnQ+IGFyZ3VtZW50cywgUGFzc093blB0cjxDYWxsYmFja1Jlc3VsdD4gcmVzdWx0KQog
ICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAg
ICAgICAsIG1faW5zdGFuY2VDbGFzcyhbaW5zdGFuY2VDbGFzcyByZXRhaW5dKQpAQCAtNDAyLDcg
KzQwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHR5cGUgIT0gQ2FsbGJhY2tJbnN0YW5j
ZU1ldGhvZCB8fCBpbnN0YW5jZUNsYXNzKTsKICAgICB9CiAKLSAgICB+T2JqQ0NhbGxiYWNrRnVu
Y3Rpb24oKQorICAgIH5PYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwoKQogICAgIHsKICAgICAgICAg
aWYgKG1fdHlwZSAhPSBDYWxsYmFja0luc3RhbmNlTWV0aG9kKQogICAgICAgICAgICAgW1ttX2lu
dm9jYXRpb24uZ2V0KCkgdGFyZ2V0XSByZWxlYXNlXTsKQEAgLTQzNiwxMSArNDM4LDYgQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+IG1fcmVzdWx0OwogfTsKIAotc3RhdGlj
IHZvaWQgb2JqQ0NhbGxiYWNrRnVuY3Rpb25GaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCi17
Ci0gICAgZGVsZXRlIHN0YXRpY19jYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4oSlNPYmplY3RH
ZXRQcml2YXRlKG9iamVjdCkpOwotfQotCiBzdGF0aWMgSlNWYWx1ZVJlZiBvYmpDQ2FsbGJhY2tG
dW5jdGlvbkNhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKICAgICAvLyBSZXRha2UgdGhlIEFQSSBsb2NrIC0gd2UgbmVlZCB0aGlzIGZvciBhIGZldyBy
ZWFzb25zOgpAQCAtNDQ5LDE4ICs0NDYsMTkgQEAgc3RhdGljIEpTVmFsdWVSZWYgb2JqQ0NhbGxi
YWNrRnVuY3Rpb25DYQogICAgIC8vICgzKSBXZSBuZWVkIHRvIGJlIGxvY2tlZCAocGVyIGNvbnRl
eHQgd291bGQgYmUgZmluZSkgYWdhaW5zdCBjb25mbGljdGluZyB1c2FnZSBvZiB0aGUgT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24ncyBOU0ludm9jYXRpb24uCiAgICAgSlNDOjpBUElFbnRyeVNoaW0gZW50
cnlTaGltKHRvSlMoY2FsbGVyQ29udGV4dCkpOwogCi0gICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24q
IGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPihKU09iamVjdEdl
dFByaXZhdGUoZnVuY3Rpb24pKTsKLSAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBjYWxsYmFjay0+
Y29udGV4dCgpOworICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBjYWxsYmFjayA9IHN0YXRpY19j
YXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4odG9KUyhmdW5jdGlvbikpOworICAgIE9iakNDYWxs
YmFja0Z1bmN0aW9uSW1wbCogaW1wbCA9IGNhbGxiYWNrLT5pbXBsKCk7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gaW1wbC0+Y29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkgewogICAgICAg
ICBjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEdsb2JhbENvbnRleHRSZWY6dG9HbG9i
YWxSZWYodG9KUyhjYWxsZXJDb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCkpXTsKLSAgICAgICAgY2FsbGJhY2stPnNldENvbnRleHQoY29udGV4dCk7CisgICAgICAg
IGltcGwtPnNldENvbnRleHQoY29udGV4dCk7CiAgICAgfQogCiAgICAgQ2FsbGJhY2tEYXRhIGNh
bGxiYWNrRGF0YTsKICAgICBKU1ZhbHVlUmVmIHJlc3VsdDsKICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKICAgICAgICAgW2NvbnRleHQgYmVnaW5DYWxsYmFja1dpdGhEYXRhOiZjYWxsYmFja0RhdGEg
dGhpc1ZhbHVlOnRoaXNPYmplY3QgYXJndW1lbnRDb3VudDphcmd1bWVudENvdW50IGFyZ3VtZW50
czphcmd1bWVudHNdOwotICAgICAgICByZXN1bHQgPSBjYWxsYmFjay0+Y2FsbChjb250ZXh0LCB0
aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CisgICAgICAg
IHJlc3VsdCA9IGltcGwtPmNhbGwoY29udGV4dCwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwg
YXJndW1lbnRzLCBleGNlcHRpb24pOwogICAgICAgICBpZiAoY29udGV4dC5leGNlcHRpb24pCiAg
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdmFsdWVJbnRlcm5hbFZhbHVlKGNvbnRleHQuZXhjZXB0
aW9uKTsKICAgICAgICAgW2NvbnRleHQgZW5kQ2FsbGJhY2tXaXRoRGF0YTomY2FsbGJhY2tEYXRh
XTsKQEAgLTQ2OCwyNiArNDY2LDI3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG9iakNDYWxsYmFja0Z1
bmN0aW9uQ2EKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgSlNDbGFzc1JlZiBjcmVh
dGVPYmpDQ2FsbGJhY2tGdW5jdGlvbkNsYXNzKCkKK2NvbnN0IEpTQzo6Q2xhc3NJbmZvIE9iakND
YWxsYmFja0Z1bmN0aW9uOjpzX2luZm8gPSB7ICJDYWxsYmFja0Z1bmN0aW9uIiwgJkJhc2U6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShPYmpDQ2FsbGJhY2tGdW5jdGlvbikgfTsK
KworT2JqQ0NhbGxiYWNrRnVuY3Rpb246Ok9iakNDYWxsYmFja0Z1bmN0aW9uKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNh
bGxiYWNrLCBQYXNzT3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4gaW1wbCkKKyAgICA6
IEJhc2UoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamNDYWxsYmFja0Z1bmN0aW9uU3Ry
dWN0dXJlKCksIGNhbGxiYWNrKQorICAgICwgbV9pbXBsKGltcGwpCiB7Ci0gICAgSlNDbGFzc0Rl
ZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgICBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9u
RW1wdHk7Ci0gICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAiRnVuY3Rpb24iOwotICAgIGRlZmlu
aXRpb24uZmluYWxpemUgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZpbmFsaXplOwotICAgIGRlZmlu
aXRpb24uY2FsbEFzRnVuY3Rpb24gPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9u
OwotICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKIH0KIAotc3RhdGljIEpT
Q2xhc3NSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DbGFzcygpCitPYmpDQ2FsbGJhY2tGdW5jdGlv
biogT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NP
d25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsKQogewotICAgIHN0YXRpYyBTcGlu
TG9jayBpbml0TG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwotICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tIb2xkZXIoJmluaXRMb2NrKTsKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rp
b24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxPYmpDQ2FsbGJhY2tGdW5jdGlvbj4oKmV4
ZWMtPmhlYXAoKSkpIE9iakNDYWxsYmFja0Z1bmN0aW9uKGdsb2JhbE9iamVjdCwgb2JqQ0NhbGxi
YWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbiwgaW1wbCk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uOwor
fQogCi0gICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSBjcmVhdGVPYmpDQ2FsbGJhY2tG
dW5jdGlvbkNsYXNzKCk7Ci0gICAgcmV0dXJuIGNsYXNzUmVmOwordm9pZCBPYmpDQ2FsbGJhY2tG
dW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8T2JqQ0Nh
bGxiYWNrRnVuY3Rpb24qPihjZWxsKS0+T2JqQ0NhbGxiYWNrRnVuY3Rpb246On5PYmpDQ2FsbGJh
Y2tGdW5jdGlvbigpOwogfQogCi1KU1ZhbHVlUmVmIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpjYWxs
KEpTQ29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK0pTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxsKEpTQ29udGV4
dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtjb250ZXh0IGdsb2JhbENvbnRl
eHRSZWZdOwogCkBAIC01MjMsNiArNTIyLDggQEAgSlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5j
dGlvbjo6Y2FsbChKUwogICAgIHJldHVybiBtX3Jlc3VsdC0+Z2V0KG1faW52b2NhdGlvbi5nZXQo
KSwgY29udGV4dCwgZXhjZXB0aW9uKTsKIH0KIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKIHN0YXRp
YyBib29sIGJsb2NrU2lnbmF0dXJlQ29udGFpbnNDbGFzcygpCiB7CiAgICAgc3RhdGljIGJvb2wg
Y29udGFpbnNDbGFzcyA9IF57CkBAIC01NzgsMjAgKzU3OSwxMSBAQCBzdGF0aWMgSlNPYmplY3RS
ZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25GCiAgICAgICAgICsrYXJndW1lbnRDb3VudDsKICAgICB9
CiAKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNTg5MgotICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGEgcmVndWxhciBob3N0IGZ1bmN0
aW9uLCByYXRoZXIgdGhhbiBhIGNhbGxhYmxlIEMgQVBJIG9iamVjdC4KLSAgICAvLyBQYXRjaCBp
biB0aGUgcmlnaHQgbGVuZ3RoICYgW1Byb3RvdHlwZV0gdmFsdWVzIGZvciBub3csIGJ1dCBzaG91
bGQgZml4IHRoaXMuCi0gICAgLy8gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nIGN1cnJlbnRs
eSBmYWlscywgc2luY2UgdGhpcyBpcyBub3QgeWV0IGEgc3ViY2xhc3Mgb2YgZnVuY3RvbiwgYnV0
IGNhbGwgJiBhcHBseSBkbyB3b3JrLgotICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uT2JqZWN0ID0g
SlNPYmplY3RNYWtlKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBvYmpDQ2FsbGJhY2tGdW5j
dGlvbkNsYXNzKCksIG5ldyBPYmpDQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBpbnZvY2F0aW9u
LCB0eXBlLCBpbnN0YW5jZUNsYXNzLCBhcmd1bWVudHMucmVsZWFzZSgpLCByZXN1bHQucmVsZWFz
ZSgpKSk7Ci0gICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpmdW5j
dGlvbk9iamVjdCBpbkNvbnRleHQ6Y29udGV4dF07Ci0gICAgdmFsdWVbQCJsZW5ndGgiXSA9IEAo
YXJndW1lbnRDb3VudCk7Ci0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoW2NvbnRleHQgZ2xvYmFs
Q29udGV4dFJlZl0sIGZ1bmN0aW9uT2JqZWN0LCB2YWx1ZUludGVybmFsVmFsdWUoY29udGV4dFtA
IkZ1bmN0aW9uIl1bQCJwcm90b3R5cGUiXSkpOwotICAgIHZhbHVlW0AidG9TdHJpbmciXSA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKGZ1bmN0aW9uKCl7IHJldHVybiAnIgotICAgICAgICAi
ZnVuY3Rpb24gPE9iamVjdGl2ZS1DPigpIHsiICJcXG4iCi0gICAgICAgICIgICAgW25hdGl2ZSBj
b2RlXSIgICAgICAgICAgIlxcbiIKLSAgICAgICAgIn0iICAgICAgICAgICAgICAgICAgICAgICAg
ICAiXFxuIgotICAgICInfSkiXTsKLSAgICByZXR1cm4gZnVuY3Rpb25PYmplY3Q7CisgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdKTsKKyAg
ICBKU0M6OkFQSUVudHJ5U2hpbSBzaGltKGV4ZWMpOworICAgIE93blB0cjxKU0M6Ok9iakNDYWxs
YmFja0Z1bmN0aW9uSW1wbD4gaW1wbCA9IGFkb3B0UHRyKG5ldyBKU0M6Ok9iakNDYWxsYmFja0Z1
bmN0aW9uSW1wbChjb250ZXh0LCBpbnZvY2F0aW9uLCB0eXBlLCBpbnN0YW5jZUNsYXNzLCBhcmd1
bWVudHMucmVsZWFzZSgpLCByZXN1bHQucmVsZWFzZSgpKSk7CisgICAgLy8gRklYTUU6IE1heWJl
IHdlIGNvdWxkIHN1cHBvcnQgaGF2aW5nIHRoZSBzZWxlY3RvciBhcyB0aGUgbmFtZSBvZiB0aGUg
ZnVuY3Rpb24gdG8gbWFrZSBpdCBhIGJpdCBtb3JlIHVzZXItZnJpZW5kbHkgZnJvbSB0aGUgSlMg
c2lkZT8KKyAgICByZXR1cm4gdG9SZWYoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgIk9iamVjdGl2ZS1DIiwgaW1wbC5y
ZWxlYXNlKCkpKTsKIH0KIAogSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRo
b2QoSlNDb250ZXh0ICpjb250ZXh0LCBDbGFzcyBjbHMsIFByb3RvY29sICpwcm90b2NvbCwgQk9P
TCBpc0luc3RhbmNlTWV0aG9kLCBTRUwgc2VsLCBjb25zdCBjaGFyKiB0eXBlcykKQEAgLTYxMywx
MSArNjA1LDExIEBAIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yQmxvY2sKICAg
ICByZXR1cm4gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JJbnZvY2F0aW9uKGNvbnRleHQsIGludm9j
YXRpb24sIENhbGxiYWNrQmxvY2ssIG5pbCwgc2lnbmF0dXJlKTsKIH0KIAotaWQgdHJ5VW53cmFw
QmxvY2soSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCkKK2lk
IHRyeVVud3JhcEJsb2NrKEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKLSAgICBpZiAoIUpTVmFsdWVJ
c09iamVjdE9mQ2xhc3MoY29udGV4dCwgb2JqZWN0LCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNsYXNz
KCkpKQorICAgIGlmICghdG9KUyhvYmplY3QpLT5pbmhlcml0cygmSlNDOjpPYmpDQ2FsbGJhY2tG
dW5jdGlvbjo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gKHN0YXRp
Y19jYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkp
KS0+d3JhcHBlZEJsb2NrKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQzo6T2JqQ0NhbGxi
YWNrRnVuY3Rpb24qPih0b0pTKG9iamVjdCkpLT5pbXBsKCktPndyYXBwZWRCbG9jaygpOwogfQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0JKHJldmlzaW9uIDE0NTM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTE5LDYgKzUxOSwxNCBAQCB2b2lkIHRlc3RP
YmplY3RpdmVDQVBJKCkKICAgICB9CiAKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
SlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworICAgICAgICBU
ZXN0T2JqZWN0ICp0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAg
IGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0
cmluZy5jYWxsKHRlc3RPYmplY3QuY2FsbGJhY2spIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
Y2FsbGJhY2sgZnVuY3Rpb24gdHlwZW9mIiwgIWNvbnRleHQuZXhjZXB0aW9uICYmICFbcmVzdWx0
IGlzVW5kZWZpbmVkXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dDEgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CiAgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dDIgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFs
TWFjaGluZTpjb250ZXh0MS52aXJ0dWFsTWFjaGluZV07CiAgICAgICAgIEpTVmFsdWUgKnZhbHVl
ID0gW0pTVmFsdWUgdmFsdWVXaXRoRG91YmxlOjQyIGluQ29udGV4dDpjb250ZXh0Ml07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvagkocmV2aXNpb24gMTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdv
cmtpbmcgY29weSkKQEAgLTE1NTAsNiArMTU1MCwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxBUElcT2JqQ0NhbGxiYWNrRnVuY3Rpb24u
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
QVBJXE9wYXF1ZUpTU3RyaW5nLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAxNDUzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJOYXRpdmVF
cnJvclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk51bWJlckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiTnVtYmVyUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTIzMCw2ICsyMzEsOSBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9hcmd1bWVudHNTdHJ1Y3R1
cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwog
ICAgIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9jYWxsYmFj
a09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNr
T2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKKyNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAorICAgIG1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsK
KyNlbmRpZgogICAgIG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpOwogCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpKTsKQEAgLTUxMyw2ICs1MTcsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGJh
Y2tDb25zdHJ1Y3RvclN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUpOworI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fb2JqY0NhbGxiYWNrRnVuY3Rp
b25TdHJ1Y3R1cmUpOworI2VuZGlmCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
b2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2RhdGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNDUzOTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJl
ci5oPgpAQCAtMTQxLDYgKzE0Miw5IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmU7CisjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamNDYWxsYmFja0Z1bmN0
aW9uU3RydWN0dXJlOworI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmpj
V3JhcHBlck9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Rh
dGVTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9udWxsUHJvdG90eXBl
T2JqZWN0U3RydWN0dXJlOwpAQCAtMzAxLDYgKzMwNSw5IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1
cmUqIGNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxi
YWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNr
RnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrRnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorI2lmIEpT
Q19PQkpDX0FQSV9FTkFCTEVECisgICAgU3RydWN0dXJlKiBvYmpjQ2FsbGJhY2tGdW5jdGlvblN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUu
Z2V0KCk7IH0KKyNlbmRpZgogICAgIFN0cnVjdHVyZSogb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1
cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9
CiAgICAgU3RydWN0dXJlKiBkYXRlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRlU3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBudWxsUHJvdG90eXBlT2JqZWN0U3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLmdldCgp
OyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192606</attachid>
            <date>2013-03-11 17:36:00 -0700</date>
            <delta_ts>2013-03-14 14:40:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105892-20130311173200.patch</filename>
            <type>text/plain</type>
            <size>22910</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1NDIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEzLTAzLTExICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBPYmplY3RpdmUtQyBmdW5jdGlvbnMgZXhwb3NlZCB0
byBKYXZhU2NyaXB0IGhhdmUgdGhlIHdyb25nIHR5cGUgKG9iamVjdCBpbnN0ZWFkIG9mIGZ1bmN0
aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1
ODkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hh
bmdlZCBPYmpDQ2FsbGJhY2tGdW5jdGlvbiB0byBzdWJjbGFzcyBKU0NhbGxiYWNrRnVuY3Rpb24g
d2hpY2ggYWxyZWFkeSBoYXMgYWxsIG9mIHRoZSBtYWNoaW5lcnkgdG8gY2FsbAorICAgICAgICBm
dW5jdGlvbnMgdXNpbmcgdGhlIEMgQVBJLiBTaW5jZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBpcyBu
b3cgYSBKU0NlbGwsIHdlIGNoYW5nZWQgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAg
ICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiB0byBiZSB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24g
YW5kIGtlZXAgdHJhY2sgb2YgYWxsIHRoZSBwcm9wZXIgZGF0YSBzbyB0aGF0IHdlIAorICAgICAg
ICBkb24ndCBoYXZlIHRvIHB1dCBhbGwgb2YgdGhhdCBpbiB0aGUgaGVhZGVyLCB3aGljaCB3aWxs
IG5vdyBiZSBpbmNsdWRlZCBmcm9tIEMrKyBmaWxlcyAoZS5nLiBKU0dsb2JhbE9iamVjdC5jcHAp
LgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHA6IENoYW5nZSBKU0NhbGxi
YWNrRnVuY3Rpb24gdG8gYWxsb3cgc3ViY2xhc3NpbmcuIE9yaWdpbmFsbHkgaXQgd2FzIGludGVy
bmFsbHkKKyAgICAgICAgcGFzc2luZyBpdHMgb3duIFN0cnVjdHVyZSB1cCB0aGUgY2hhaW4gb2Yg
Y29uc3RydWN0b3JzLCBidXQgd2Ugbm93IHdhbnQgdG8gYmUgYWJsZSB0byBwYXNzIG90aGVyIFN0
cnVjdHVyZXMgYXMgd2VsbC4KKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpKU0Nh
bGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0
ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDYWxs
YmFja0Z1bmN0aW9uKToKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBDaGFuZ2VkIGlu
dGVyZmFjZSB0byB0cnlVbndyYXBCbG9jay4KKyAgICAgICAgKHRyeVVud3JhcE9iamNPYmplY3Qp
OgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24pOiBNb3ZlZCBpbnRvIHRoZSBKU0MgbmFtZXNwYWNlLCBqdXN0IGxpa2Ug
SlNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKTogT3ZlcnJpZGRlbiBzbyB0aGF0IHRoZSBjb3JyZWN0IENsYXNzSW5m
byBnZXRzIHVzZWQgc2luY2Ugd2UgaGF2ZSAKKyAgICAgICAgYSBkZXN0cnVjdG9yLgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6aW1wbCk6IEdldHRlciBmb3IgdGhlIGludGVy
bmFsIGltcGwuCisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6Ok9iakNDYWxsYmFja0Z1bmN0aW9uSW1w
bCk6IFdoYXQgdXNlZCB0byBiZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBpcyBub3cgCisgICAgICAg
IE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbC4gSXQgaGFuZGxlcyB0aGUgT2JqZWN0aXZlLUMgc3Bl
Y2lmaWMgcGFydHMgb2YgbWFuYWdpbmcgY2FsbGJhY2sgZnVuY3Rpb25zLgorICAgICAgICAoSlND
OjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6On5PYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwpOgor
ICAgICAgICAoSlNDOjpvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uKTogU2FtZSBh
cyB0aGUgb2xkIG9uZSwgYnV0IG5vdyBpdCBjYXN0cyB0byBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBh
bmQgZ3JhYnMgdGhlIGltcGwgCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIEpTT2JqZWN0R2V0
UHJpdmF0ZS4KKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uKTogTmV3IGJpdHMgdG8gYWxsb3cgYmVpbmcgcGFydCBvZiB0aGUgSlNDZWxsIGhp
ZXJhcmNoeS4KKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxsKTogSGFuZGxlcyB0aGUgYWN0dWFsIGlu
dm9jYXRpb24sIGp1c3QgbGlrZSBpdCB1c2VkIHRvLgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JJbnZvY2F0aW9uKToKKyAgICAgICAgKHRyeVVud3JhcEJsb2NrKTogQ2hhbmdlZCB0
byBjaGVjayB0aGUgQ2xhc3NJbmZvIGZvciBpbmhlcml0YW5jZSBkaXJlY3RseSwgcmF0aGVyIHRo
YW4gZ29pbmcgdGhyb3VnaCB0aGUgQyBBUEkgY2FsbC4KKyAgICAgICAgKiBBUEkvdGVzdHMvdGVz
dGFwaS5tbTogQWRkZWQgbmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgZG9pbmcgRnVuY3Rpb24u
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZikgd29uJ3QgcmVzdWx0IGluIAorICAgICAgICBhbiBl
cnJvciB3aGVuIGYgaXMgYW4gT2JqZWN0aXZlLUMgbWV0aG9kIG9yIGJsb2NrIHVuZGVybmVhdGgg
dGhlIGNvdmVycy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDogQWRkZWQg
bmV3IFN0cnVjdHVyZSBmb3IgT2JqQ0NhbGxiYWNrRnVuY3Rpb24uCisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpvYmpjQ2Fs
bGJhY2tGdW5jdGlvblN0cnVjdHVyZSk6CisKIDIwMTMtMDMtMTEgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggYmVuZWF0aCBvcGVyYXRpb25DcmVh
dGVJbmxpbmVkQXJndW1lbnRzIHJ1bm5pbmcgZmFzdC9qcy9kZmctY3JlYXRlLWlubGluZWQtYXJn
dW1lbnRzLWluLWNsb3N1cmUtaW5saW5lLmh0bWwgKDMyLWJpdCBvbmx5KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE0NTM5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmFsdWVSZWYuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vh
a09iamVjdE1hcFJlZkludGVybmFsLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFx
dWVKU1N0cmluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJp
bmcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQ1Mzk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0
NCw4IEBAIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQ2FsbGJhY2sKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTQ2FsbGJhY2tGdW5jdGlvbjo6c19pbmZvID0geyAiQ2FsbGJhY2tGdW5jdGlv
biIsICZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNDYWxsYmFja0Z1bmN0aW9uKSB9OwogCi1KU0NhbGxiYWNrRnVuY3Rpb246OkpTQ2FsbGJhY2tG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0
aW9uQ2FsbGJhY2sgY2FsbGJhY2spCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkpCitKU0NhbGxiYWNr
RnVuY3Rpb246OkpTQ2FsbGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNh
bGxiYWNrKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkK
ICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiB7CiB9CkBAIC01Niw2ICs1NiwxMyBAQCB2b2lk
IEpTQ2FsbGJhY2tGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oCiAgICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKIH0KIAorSlNDYWxsYmFja0Z1bmN0aW9uKiBKU0NhbGxiYWNrRnVuY3Rpb246
OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNr
RnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmNhbGxiYWNrRnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgY2FsbGJhY2spOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIG5hbWUpOworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKwogRW5jb2RlZEpT
VmFsdWUgSlNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBK
U0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDUzOTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxOCArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQ2Fs
bGJhY2tGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKIHByb3RlY3RlZDoKLSAg
ICBKU0NhbGxiYWNrRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0
aW9uQ2FsbGJhY2spOworICAgIEpTQ2FsbGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayk7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNDYWxs
YmFja0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0
IFN0cmluZyYgbmFtZSkKLSAgICB7Ci0gICAgICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rp
b24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVj
LT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBjYWxsYmFjayk7Ci0g
ICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUp
OwotICAgICAgICByZXR1cm4gZnVuY3Rpb247Ci0gICAgfQorICAgIHN0YXRpYyBKU0NhbGxiYWNr
RnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Q2Fs
bEFzRnVuY3Rpb25DYWxsYmFjaywgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgIApAQCAtNTUsOSArNTAsMTAgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsg
CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogCitwcml2YXRlOgogICAgIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKik7CiAKICAgICBKU09iamVj
dENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCShyZXZpc2lvbiAxNDUzOTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMw
LDcgKzUzMCw3IEBAIGlkIHRyeVVud3JhcE9iamNPYmplY3QoSlNHbG9iYWxDb250ZXh0UmUKICAg
ICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAgICAgaWYgKEpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY29u
dGV4dCwgb2JqZWN0LCB3cmFwcGVyQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiAoaWQpSlNDOjpq
c0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPih0b0pTKG9iamVjdCkpLT53cmFwcGVkT2Jq
ZWN0KCk7Ci0gICAgaWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJsb2NrKGNvbnRleHQsIG9iamVj
dCkpCisgICAgaWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJsb2NrKG9iamVjdCkpCiAgICAgICAg
IHJldHVybiB0YXJnZXQ7CiAgICAgcmV0dXJuIG5pbDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0NTM5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMTQgKzIyLDUyIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCisjaWZuZGVmIE9iakNDYWxsYmFja0Z1bmN0aW9uX2gKKyNkZWZpbmUg
T2JqQ0NhbGxiYWNrRnVuY3Rpb25faCAKIAotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KIAogI2lmIEpT
Q19PQkpDX0FQSV9FTkFCTEVECiAKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ2FsbGJhY2tG
dW5jdGlvbi5oPgorCisjaWYgZGVmaW5lZChfX09CSkNfXykKIEpTT2JqZWN0UmVmIG9iakNDYWxs
YmFja0Z1bmN0aW9uRm9yTWV0aG9kKEpTQ29udGV4dCAqLCBDbGFzcywgUHJvdG9jb2wgKiwgQk9P
TCBpc0luc3RhbmNlTWV0aG9kLCBTRUwsIGNvbnN0IGNoYXIqIHR5cGVzKTsKIEpTT2JqZWN0UmVm
IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yQmxvY2soSlNDb250ZXh0ICosIGlkKTsKIAotaWQgdHJ5
VW53cmFwQmxvY2soSlNHbG9iYWxDb250ZXh0UmVmLCBKU09iamVjdFJlZik7CitpZCB0cnlVbndy
YXBCbG9jayhKU09iamVjdFJlZik7CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbDsKKworY2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb24g
OiBwdWJsaWMgSlNDYWxsYmFja0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2Fs
bGJhY2tGdW5jdGlvbiBCYXNlOworCisgICAgc3RhdGljIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBj
cmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NPd25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPik7CisgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19p
bmZvOworCisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKiBpbXBsKCkgeyByZXR1cm4gbV9p
bXBsLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbihKU0ds
b2JhbE9iamVjdCosIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjaywgUGFzc093blB0cjxP
YmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+KTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8T2JqQ0Nh
bGxiYWNrRnVuY3Rpb25JbXBsPiBtX2ltcGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmCisKKyNlbmRpZiAvLyBPYmpDQ2FsbGJhY2tGdW5jdGlvbl9oIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCShyZXZp
c2lvbiAxNDUzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1
bmN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zODksOSArMzg5LDExIEBAIGVudW0gQ2FsbGJh
Y2tUeXBlIHsKICAgICBDYWxsYmFja0Jsb2NrCiB9OwogCi1jbGFzcyBPYmpDQ2FsbGJhY2tGdW5j
dGlvbiB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBs
IHsKIHB1YmxpYzoKLSAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbihKU0NvbnRleHQgKmNvbnRleHQs
IE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgQ2FsbGJhY2tUeXBlIHR5cGUsIENsYXNzIGluc3Rh
bmNlQ2xhc3MsIFBhc3NPd25QdHI8Q2FsbGJhY2tBcmd1bWVudD4gYXJndW1lbnRzLCBQYXNzT3du
UHRyPENhbGxiYWNrUmVzdWx0PiByZXN1bHQpCisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBs
KEpTQ29udGV4dCAqY29udGV4dCwgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uLCBDYWxsYmFja1R5
cGUgdHlwZSwgQ2xhc3MgaW5zdGFuY2VDbGFzcywgUGFzc093blB0cjxDYWxsYmFja0FyZ3VtZW50
PiBhcmd1bWVudHMsIFBhc3NPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+IHJlc3VsdCkKICAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgLCBt
X2luc3RhbmNlQ2xhc3MoW2luc3RhbmNlQ2xhc3MgcmV0YWluXSkKQEAgLTQwMiw3ICs0MDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0eXBlICE9IENhbGxiYWNrSW5zdGFuY2VNZXRob2Qg
fHwgaW5zdGFuY2VDbGFzcyk7CiAgICAgfQogCi0gICAgfk9iakNDYWxsYmFja0Z1bmN0aW9uKCkK
KyAgICB+T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKCkKICAgICB7CiAgICAgICAgIGlmIChtX3R5
cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCkKICAgICAgICAgICAgIFtbbV9pbnZvY2F0aW9u
LmdldCgpIHRhcmdldF0gcmVsZWFzZV07CkBAIC00MzYsMTEgKzQzOCw2IEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPENhbGxiYWNrUmVzdWx0PiBtX3Jlc3VsdDsKIH07CiAKLXN0YXRpYyB2b2lkIG9i
akNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIGRl
bGV0ZSBzdGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KEpTT2JqZWN0R2V0UHJpdmF0
ZShvYmplY3QpKTsKLX0KLQogc3RhdGljIEpTVmFsdWVSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25D
YWxsQXNGdW5jdGlvbihKU0NvbnRleHRSZWYgY2FsbGVyQ29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAg
Ly8gUmV0YWtlIHRoZSBBUEkgbG9jayAtIHdlIG5lZWQgdGhpcyBmb3IgYSBmZXcgcmVhc29uczoK
QEAgLTQ0OSwxOCArNDQ2LDE5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG9iakNDYWxsYmFja0Z1bmN0
aW9uQ2EKICAgICAvLyAoMykgV2UgbmVlZCB0byBiZSBsb2NrZWQgKHBlciBjb250ZXh0IHdvdWxk
IGJlIGZpbmUpIGFnYWluc3QgY29uZmxpY3RpbmcgdXNhZ2Ugb2YgdGhlIE9iakNDYWxsYmFja0Z1
bmN0aW9uJ3MgTlNJbnZvY2F0aW9uLgogICAgIEpTQzo6QVBJRW50cnlTaGltIGVudHJ5U2hpbSh0
b0pTKGNhbGxlckNvbnRleHQpKTsKIAotICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBjYWxsYmFj
ayA9IHN0YXRpY19jYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4oSlNPYmplY3RHZXRQcml2YXRl
KGZ1bmN0aW9uKSk7Ci0gICAgSlNDb250ZXh0ICpjb250ZXh0ID0gY2FsbGJhY2stPmNvbnRleHQo
KTsKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxPYmpD
Q2FsbGJhY2tGdW5jdGlvbio+KHRvSlMoZnVuY3Rpb24pKTsKKyAgICBPYmpDQ2FsbGJhY2tGdW5j
dGlvbkltcGwqIGltcGwgPSBjYWxsYmFjay0+aW1wbCgpOworICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IGltcGwtPmNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgY29udGV4
dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKHRv
SlMoY2FsbGVyQ29udGV4dCktPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKV07
Ci0gICAgICAgIGNhbGxiYWNrLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgICAgICBpbXBsLT5z
ZXRDb250ZXh0KGNvbnRleHQpOwogICAgIH0KIAogICAgIENhbGxiYWNrRGF0YSBjYWxsYmFja0Rh
dGE7CiAgICAgSlNWYWx1ZVJlZiByZXN1bHQ7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAg
ICAgIFtjb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0YTomY2FsbGJhY2tEYXRhIHRoaXNWYWx1
ZTp0aGlzT2JqZWN0IGFyZ3VtZW50Q291bnQ6YXJndW1lbnRDb3VudCBhcmd1bWVudHM6YXJndW1l
bnRzXTsKLSAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2stPmNhbGwoY29udGV4dCwgdGhpc09iamVj
dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24pOworICAgICAgICByZXN1bHQg
PSBpbXBsLT5jYWxsKGNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50
cywgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGNvbnRleHQuZXhjZXB0aW9uKQogICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHZhbHVlSW50ZXJuYWxWYWx1ZShjb250ZXh0LmV4Y2VwdGlvbik7CiAg
ICAgICAgIFtjb250ZXh0IGVuZENhbGxiYWNrV2l0aERhdGE6JmNhbGxiYWNrRGF0YV07CkBAIC00
NjgsMjYgKzQ2NiwyNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNh
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTQ2xhc3NSZWYgY3JlYXRlT2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DbGFzcygpCitjb25zdCBKU0M6OkNsYXNzSW5mbyBPYmpDQ2FsbGJhY2tG
dW5jdGlvbjo6c19pbmZvID0geyAiQ2FsbGJhY2tGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pIH07CisKK09iakND
YWxsYmFja0Z1bmN0aW9uOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywg
UGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+IGltcGwpCisgICAgOiBCYXNlKGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgp
LCBjYWxsYmFjaykKKyAgICAsIG1faW1wbChpbXBsKQogewotICAgIEpTQ2xhc3NEZWZpbml0aW9u
IGRlZmluaXRpb247Ci0gICAgZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5Owot
ICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIkZ1bmN0aW9uIjsKLSAgICBkZWZpbml0aW9uLmZp
bmFsaXplID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25GaW5hbGl6ZTsKLSAgICBkZWZpbml0aW9uLmNh
bGxBc0Z1bmN0aW9uID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbjsKLSAgICBy
ZXR1cm4gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CiB9CiAKLXN0YXRpYyBKU0NsYXNzUmVm
IG9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKQorT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIE9iakND
YWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPE9i
akNDYWxsYmFja0Z1bmN0aW9uSW1wbD4gaW1wbCkKIHsKLSAgICBzdGF0aWMgU3BpbkxvY2sgaW5p
dExvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9s
ZGVyKCZpbml0TG9jayk7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8T2JqQ0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFw
KCkpKSBPYmpDQ2FsbGJhY2tGdW5jdGlvbihnbG9iYWxPYmplY3QsIG9iakNDYWxsYmFja0Z1bmN0
aW9uQ2FsbEFzRnVuY3Rpb24sIGltcGwpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAgIHJldHVybiBmdW5jdGlvbjsKK30KIAotICAg
IHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmID0gY3JlYXRlT2JqQ0NhbGxiYWNrRnVuY3Rpb25D
bGFzcygpOwotICAgIHJldHVybiBjbGFzc1JlZjsKK3ZvaWQgT2JqQ0NhbGxiYWNrRnVuY3Rpb246
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PE9iakNDYWxsYmFja0Z1
bmN0aW9uKj4oY2VsbCktPk9iakNDYWxsYmFja0Z1bmN0aW9uOjp+T2JqQ0NhbGxiYWNrRnVuY3Rp
b24oKTsKIH0KIAotSlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbChKU0NvbnRl
eHQgKmNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitK
U1ZhbHVlUmVmIE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbDo6Y2FsbChKU0NvbnRleHQgKmNvbnRl
eHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgSlNH
bG9iYWxDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXTsK
IApAQCAtNTIzLDYgKzUyMiw4IEBAIEpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNh
bGwoSlMKICAgICByZXR1cm4gbV9yZXN1bHQtPmdldChtX2ludm9jYXRpb24uZ2V0KCksIGNvbnRl
eHQsIGV4Y2VwdGlvbik7CiB9CiAKK30gLy8gbmFtZXNwYWNlIEpTQworCiBzdGF0aWMgYm9vbCBi
bG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKQogewogICAgIHN0YXRpYyBib29sIGNvbnRhaW5z
Q2xhc3MgPSBeewpAQCAtNTc4LDIwICs1NzksMTEgQEAgc3RhdGljIEpTT2JqZWN0UmVmIG9iakND
YWxsYmFja0Z1bmN0aW9uRgogICAgICAgICArK2FyZ3VtZW50Q291bnQ7CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4OTIK
LSAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBhIHJlZ3VsYXIgaG9zdCBmdW5jdGlvbiwgcmF0
aGVyIHRoYW4gYSBjYWxsYWJsZSBDIEFQSSBvYmplY3QuCi0gICAgLy8gUGF0Y2ggaW4gdGhlIHJp
Z2h0IGxlbmd0aCAmIFtQcm90b3R5cGVdIHZhbHVlcyBmb3Igbm93LCBidXQgc2hvdWxkIGZpeCB0
aGlzLgotICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyBjdXJyZW50bHkgZmFpbHMs
IHNpbmNlIHRoaXMgaXMgbm90IHlldCBhIHN1YmNsYXNzIG9mIGZ1bmN0b24sIGJ1dCBjYWxsICYg
YXBwbHkgZG8gd29yay4KLSAgICBKU09iamVjdFJlZiBmdW5jdGlvbk9iamVjdCA9IEpTT2JqZWN0
TWFrZShbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DbGFz
cygpLCBuZXcgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgaW52b2NhdGlvbiwgdHlwZSwg
aW5zdGFuY2VDbGFzcywgYXJndW1lbnRzLnJlbGVhc2UoKSwgcmVzdWx0LnJlbGVhc2UoKSkpOwot
ICAgIEpTVmFsdWUgKnZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6ZnVuY3Rpb25PYmpl
Y3QgaW5Db250ZXh0OmNvbnRleHRdOwotICAgIHZhbHVlW0AibGVuZ3RoIl0gPSBAKGFyZ3VtZW50
Q291bnQpOwotICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKFtjb250ZXh0IGdsb2JhbENvbnRleHRS
ZWZdLCBmdW5jdGlvbk9iamVjdCwgdmFsdWVJbnRlcm5hbFZhbHVlKGNvbnRleHRbQCJGdW5jdGlv
biJdW0AicHJvdG90eXBlIl0pKTsKLSAgICB2YWx1ZVtAInRvU3RyaW5nIl0gPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAIihmdW5jdGlvbigpeyByZXR1cm4gJyIKLSAgICAgICAgImZ1bmN0aW9u
IDxPYmplY3RpdmUtQz4oKSB7IiAiXFxuIgotICAgICAgICAiICAgIFtuYXRpdmUgY29kZV0iICAg
ICAgICAgICJcXG4iCi0gICAgICAgICJ9IiAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcbiIK
LSAgICAiJ30pIl07Ci0gICAgcmV0dXJuIGZ1bmN0aW9uT2JqZWN0OworICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gdG9KUyhbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSk7CisgICAgSlNDOjpB
UElFbnRyeVNoaW0gc2hpbShleGVjKTsKKyAgICBPd25QdHI8SlNDOjpPYmpDQ2FsbGJhY2tGdW5j
dGlvbkltcGw+IGltcGwgPSBhZG9wdFB0cihuZXcgSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbklt
cGwoY29udGV4dCwgaW52b2NhdGlvbiwgdHlwZSwgaW5zdGFuY2VDbGFzcywgYXJndW1lbnRzLnJl
bGVhc2UoKSwgcmVzdWx0LnJlbGVhc2UoKSkpOworICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3Vs
ZCBzdXBwb3J0IGhhdmluZyB0aGUgc2VsZWN0b3IgYXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9u
IHRvIG1ha2UgaXQgYSBiaXQgbW9yZSB1c2VyLWZyaWVuZGx5IGZyb20gdGhlIEpTIHNpZGU/Cisg
ICAgcmV0dXJuIHRvUmVmKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksICJPYmplY3RpdmUtQyIsIGltcGwucmVsZWFzZSgp
KSk7CiB9CiAKIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKEpTQ29u
dGV4dCAqY29udGV4dCwgQ2xhc3MgY2xzLCBQcm90b2NvbCAqcHJvdG9jb2wsIEJPT0wgaXNJbnN0
YW5jZU1ldGhvZCwgU0VMIHNlbCwgY29uc3QgY2hhciogdHlwZXMpCkBAIC02MTMsMTEgKzYwNSwx
MSBAQCBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrCiAgICAgcmV0dXJu
IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbihjb250ZXh0LCBpbnZvY2F0aW9uLCBD
YWxsYmFja0Jsb2NrLCBuaWwsIHNpZ25hdHVyZSk7CiB9CiAKLWlkIHRyeVVud3JhcEJsb2NrKEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCitpZCB0cnlVbndy
YXBCbG9jayhKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RP
ZkNsYXNzKGNvbnRleHQsIG9iamVjdCwgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DbGFzcygpKSkKKyAg
ICBpZiAoIXRvSlMob2JqZWN0KS0+aW5oZXJpdHMoJkpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246
OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIChzdGF0aWNfY2FzdDxP
YmpDQ2FsbGJhY2tGdW5jdGlvbio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKSktPndyYXBw
ZWRCbG9jaygpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0M6Ok9iakNDYWxsYmFja0Z1bmN0
aW9uKj4odG9KUyhvYmplY3QpKS0+aW1wbCgpLT53cmFwcGVkQmxvY2soKTsKIH0KIAogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShyZXZp
c2lvbiAxNDUzOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0JKHdvcmtpbmcgY29weSkKQEAgLTUxOSw2ICs1MTksMTQgQEAgdm9pZCB0ZXN0T2JqZWN0aXZl
Q0FQSSgpCiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgVGVzdE9iamVj
dCAqdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0
W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0g
W2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2Fs
bCh0ZXN0T2JqZWN0LmNhbGxiYWNrKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAImNhbGxiYWNr
IGZ1bmN0aW9uIHR5cGVvZiIsICFjb250ZXh0LmV4Y2VwdGlvbiAmJiAhW3Jlc3VsdCBpc1VuZGVm
aW5lZF0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQxID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwogICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQyID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6
Y29udGV4dDEudmlydHVhbE1hY2hpbmVdOwogICAgICAgICBKU1ZhbHVlICp2YWx1ZSA9IFtKU1Zh
bHVlIHZhbHVlV2l0aERvdWJsZTo0MiBpbkNvbnRleHQ6Y29udGV4dDJdOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDE0NTM5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTUwLDYgKzE1NTAsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cQVBJXE9iakNDYWxsYmFja0Z1bmN0aW9uLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEFQSVxPcGFx
dWVKU1N0cmluZy5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ1Mzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAiTmF0aXZlRXJyb3JQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk51bWJl
clByb3RvdHlwZS5oIgorI2luY2x1ZGUgIk9iakNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC0yMzAsNiArMjMxLDkgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fYXJndW1lbnRzU3RydWN0dXJlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX2Nh
bGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fY2FsbGJhY2tPYmplY3RT
dHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxK
U0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKKyAgICBtX29iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisjZW5kaWYK
ICAgICBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsK
IAogICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJy
YXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KSk7CkBAIC01MTMsNiArNTE3LDkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrQ29uc3Ry
dWN0b3JTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxi
YWNrRnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlKTsKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX29iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0
dXJlKTsKKyNlbmRpZgogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX29iamNXcmFw
cGVyT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9k
YXRlU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9udWxsUHJv
dG90eXBlT2JqZWN0U3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTQ1Mzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KQEAg
LTE0MSw2ICsxNDIsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlOworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVj
dHVyZTsKKyNlbmRpZgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqY1dyYXBwZXJP
YmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9kYXRlU3RydWN0
dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbnVsbFByb3RvdHlwZU9iamVjdFN0
cnVjdHVyZTsKQEAgLTMwMSw2ICszMDUsOSBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiBjYWxs
YmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0NvbnN0
cnVjdG9yU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9u
U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgU3RydWN0dXJlKiBjYWxsYmFja09iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAorICAgIFN0cnVjdHVyZSogb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX29iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9
CisjZW5kaWYKICAgICBTdHJ1Y3R1cmUqIG9iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9vYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0
cnVjdHVyZSogZGF0ZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0ZVN0cnVjdHVyZS5n
ZXQoKTsgfQogICAgIFN0cnVjdHVyZSogbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>