<?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>21294</bug_id>
          
          <creation_ts>2008-10-01 23:01:21 -0700</creation_ts>
          <short_desc>Devirtualize getOwnPropertySlot()</short_desc>
          <delta_ts>2008-10-22 17:16:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>20813</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93669</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-01 23:01:21 -0700</bug_when>
    <thetext>We always use a virtual call for getOwnPropertySlot(), when we should really be able to inline the common cases in many of its callers, or at least use non-virtual calls. This could be achieved by a bit in the StructureID TypeInfo, just like was done for &apos;instanceof&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95699</commentid>
    <comment_count>1</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-16 22:02:38 -0700</bug_when>
    <thetext>Sam is now working on other tasks, so I will assign this to myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96187</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-22 09:39:10 -0700</bug_when>
    <thetext>*** Bug 21793 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96191</commentid>
    <comment_count>3</comment_count>
      <attachid>24559</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-22 10:08:51 -0700</bug_when>
    <thetext>Created attachment 24559
patch, working but ChangeLog not done yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96202</commentid>
    <comment_count>4</comment_count>
      <attachid>24561</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-22 12:00:55 -0700</bug_when>
    <thetext>Created attachment 24561
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96213</commentid>
    <comment_count>5</comment_count>
      <attachid>24561</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-22 13:08:24 -0700</bug_when>
    <thetext>Comment on attachment 24561
patch

-    // WebCore uses this to make document.all and style.filter undetectable.
     static const unsigned MasqueradesAsUndefined = 1;
+        // WebCore uses MasqueradesAsUndefined to make document.all and style.filter undetectable.
     static const unsigned ImplementsHasInstance = 1 &lt;&lt; 1;
The whitespace for this comment seems wrong.

+JSGlueGlobalObject::JSGlueGlobalObject(PassRefPtr&lt;StructureID&gt; structure, JSFlags flags)
+    : JSGlobalObject(structure, new Data, this)
+{
+    d()-&gt;flags = flags;
+    d()-&gt;userObjectStructure = UserObjectImp::createStructureID(jsNull());
+}
Might be cleaner to make the Data constructor take arguments.

+    if (prototype-&gt;isNull()) {
+        static StructureID* structureID = JSInspectorCallbackWrapper::createStructureID(jsNull()).releaseRef();
+        return new (unwrappedExec) JSInspectorCallbackWrapper(unwrappedExec, unwrappedObject, structureID);
+    }
Why is leaking the StructureID okay here?

For QtRuntimeMethod::createStructureID, why does it have the ImplementsHasInstance flag like InternalFunction?

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96258</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-22 16:25:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 24561 [edit])
&gt; -    // WebCore uses this to make document.all and style.filter undetectable.
&gt;      static const unsigned MasqueradesAsUndefined = 1;
&gt; +        // WebCore uses MasqueradesAsUndefined to make document.all and
&gt; style.filter undetectable.
&gt;      static const unsigned ImplementsHasInstance = 1 &lt;&lt; 1;
&gt; The whitespace for this comment seems wrong.

I&apos;ll move the comment back.

&gt; +    d()-&gt;flags = flags;
&gt;
&gt; Might be cleaner to make the Data constructor take arguments.

Sure, but since this is just JavaScriptGlue, I think I&apos;ll leave it as-is.

&gt; +    if (prototype-&gt;isNull()) {
&gt; +        static StructureID* structureID =
&gt; JSInspectorCallbackWrapper::createStructureID(jsNull()).releaseRef();
&gt; +        return new (unwrappedExec) JSInspectorCallbackWrapper(unwrappedExec,
&gt; unwrappedObject, structureID);
&gt; +    }
&gt;
&gt; Why is leaking the StructureID okay here?

As we discussed, I&apos;ll use StructureID::startIgnoringLeaks().

&gt; For QtRuntimeMethod::createStructureID, why does it have the
&gt; ImplementsHasInstance flag like InternalFunction?

Oops, will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96266</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-22 17:16:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/37799</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24559</attachid>
            <date>2008-10-22 10:08:51 -0700</date>
            <delta_ts>2008-10-22 12:00:55 -0700</delta_ts>
            <desc>patch, working but ChangeLog not done yet</desc>
            <filename>GetOwnPropertySlotPatch.txt</filename>
            <type>text/plain</type>
            <size>53700</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3NzgzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTYgQEAKKzIwMDgtMTAtMjIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTI5NAorICAgICAgICAgIEJ1ZyAyMTI5NDogRGV2aXJ0dWFsaXplIGdldE93blByb3Bl
cnR5U2xvdCgpCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAg
ICAgIChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQpOiBTZXQg
SGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QKKyAgICAgICAgc2luY2UgdGhpcyBjbGFzcyBk
b2Vzbid0IG92ZXJyaWRlIGdldFByb3BlcnR5U2xvdC4KKyAgICAgICAgKiBBUEkvSlNDYWxsYmFj
a0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlSUQpOiBEaXR0by4KKworICAgICAgICAqIFZNL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjpJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yKTogVXNlIGEgc3RydWN0dXJlCisgICAgICAgIHRoYXQncyBjcmVhdGVkIGp1c3Qg
Zm9yIHRoaXMgY2xhc3MgaW5zdGVhZCBvZiB0cnlpbmcgdG8gc2hhcmUgYSBzaW5nbGUgIm51bGwK
KyAgICAgICAgcHJvdG90eXBlIiBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBWTS9NYWNoaW5lLmNw
cDoKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFy
YW1zKTogUmVuYW1lCisgICAgICAgIEFyZ3VtZW50czo6QXJndW1lbnRzTm9QYXJhbWV0ZXJzIHRv
IEFyZ3VtZW50czo6Tm9QYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBranMvQXJndW1l
bnRzLmg6IFJlbmFtZSB0aGUgZW51bSBmcm9tIEFyZ3VtZW50czo6QXJndW1lbnRzUGFyYW1ldGVy
cyB0bworICAgICAgICBBcmd1bWVudHM6Ok5vUGFyYW1ldGVyc1R5cGUgYW5kIHRoZSB2YWx1ZSBm
cm9tIEFyZ3VtZW50czo6QXJndW1lbnRzTm9QYXJhbWV0ZXJzCisgICAgICAgIHRvIEFyZ3VtZW50
czo6Tm9QYXJhbWV0ZXJzLgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVy
ZUlEKTogQWRkZWQuIFJldHVybnMgYSBzdHJ1Y3R1cmUgd2l0aG91dAorICAgICAgICBIYXNTdGFu
ZGFyZEdldE93blByb3BlcnR5U2xvdCBzaW5jZSB0aGlzIGNsYXNzIG92ZXJyaWRlcyBnZXRPd25Q
cm9wZXJ0eVNsb3QuCisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6QXJndW1lbnRzKTogQWRkZWQg
YW4gYXNzZXJ0aW9uIHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMuCisKKyAgICAgICAgKiBr
anMvRGF0ZVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmVJRCk6IEFkZGVkLiBSZXR1cm5zIGEgc3RydWN0dXJlIHdpdGhvdXQKKyAgICAgICAg
SGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3Qgc2luY2UgdGhpcyBjbGFzcyBvdmVycmlkZXMg
Z2V0T3duUHJvcGVydHlTbG90LgorCisgICAgICAgICoga2pzL0Z1bmN0aW9uUHJvdG90eXBlLmg6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6IFNl
dCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdAorICAgICAgICBzaW5jZSB0aGlzIGNsYXNz
IGRvZXNuJ3Qgb3ZlcnJpZGUgZ2V0UHJvcGVydHlTbG90LgorICAgICAgICAqIGtqcy9JbnRlcm5h
bEZ1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVj
dHVyZUlEKTogRGl0dG8uCisKKyAgICAgICAgKiBranMvSlNBcnJheS5oOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmVJRCk6IEFkZGVkLiBSZXR1cm5zIGEgc3RydWN0dXJl
IHdpdGhvdXQKKyAgICAgICAgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3Qgc2luY2UgdGhp
cyBjbGFzcyBvdmVycmlkZXMgZ2V0T3duUHJvcGVydHlTbG90LgorCisgICAgICAgICoga2pzL0pT
Q2VsbC5oOiBBZGRlZCBkZWNsYXJhdGlvbiBvZiBmYXN0R2V0T3duUHJvcGVydHlTbG90OyBhIG5v
bi12aXJ0dWFsCisgICAgICAgIHZlcnNpb24gdGhhdCB1c2VzIHRoZSBzdHJ1Y3R1cmUgYml0IHRv
IGRlY2lkZSB3aGV0aGVyIHRvIGNhbGwgdGhlIHZpcnR1YWwKKyAgICAgICAgdmVyc2lvbi4KKwor
ICAgICAgICAqIGtqcy9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNy
ZWF0ZVN0cnVjdHVyZUlEKTogQWRkZWQuIFJldHVybnMgYSBzdHJ1Y3R1cmUgd2l0aG91dAorICAg
ICAgICBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCBzaW5jZSB0aGlzIGNsYXNzIG92ZXJy
aWRlcyBnZXRPd25Qcm9wZXJ0eVNsb3QuCisKKyAgICAgICAgKiBranMvSlNHbG9iYWxEYXRhLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOiBJbml0aWFsaXpl
IG5ldyBzdHJ1Y3R1cmVzOyByZW1vdmVkCisgICAgICAgIG51bGxQcm90b1N0cnVjdHVyZUlELgor
ICAgICAgICAqIGtqcy9KU0dsb2JhbERhdGEuaDogQWRkZWQgbmV3IHN0cnVjdHVyZXMuIFJlbW92
ZWQgbnVsbFByb3RvU3RydWN0dXJlSUQuCisKKyAgICAgICAgKiBranMvSlNHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZUlEKTogQWRk
ZWQuIFJldHVybnMgYSBzdHJ1Y3R1cmUgd2l0aG91dAorICAgICAgICBIYXNTdGFuZGFyZEdldE93
blByb3BlcnR5U2xvdCBzaW5jZSB0aGlzIGNsYXNzIG92ZXJyaWRlcyBnZXRPd25Qcm9wZXJ0eVNs
b3QuCisKKyAgICAgICAgKiBranMvSlNOb3RBbk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU05v
dEFuT2JqZWN0RXJyb3JTdHViOjpKU05vdEFuT2JqZWN0RXJyb3JTdHViKToKKyAgICAgICAgKEpT
Qzo6SlNOb3RBbk9iamVjdEVycm9yU3R1Yjo6aXNOb3RBbk9iamVjdEVycm9yU3R1Yik6CisgICAg
ICAgIChKU0M6OkpTTm90QW5PYmplY3Q6OkpTTm90QW5PYmplY3QpOgorICAgICAgICAoSlNDOjpK
U05vdEFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRCk6CisgICAgICAgICoga2pzL0pTTnVtYmVy
Q2VsbC5oOgorICAgICAgICAoSlNDOjpKU051bWJlckNlbGw6OmNyZWF0ZVN0cnVjdHVyZUlEKToK
KyAgICAgICAgKiBranMvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZUlEKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlubGluZUdldE93blByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OmZhc3RHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmdldCk6CisgICAgICAgICoga2pzL0pTU3Rh
dGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlSUQpOgorICAgICAgICAqIGtqcy9KU1N0cmluZy5oOgorICAgICAgICAoSlND
OjpKU1N0cmluZzo6Y3JlYXRlU3RydWN0dXJlSUQpOgorICAgICAgICAqIGtqcy9KU1dyYXBwZXJP
YmplY3QuaDoKKyAgICAgICAgKiBranMvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpNYXRo
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRCk6CisgICAgICAgICoga2pzL051bWJlckNvbnN0cnVj
dG9yLmg6CisgICAgICAgIChKU0M6Ok51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJ
RCk6CisgICAgICAgICoga2pzL1JlZ0V4cENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlJl
Z0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6CisgICAgICAgICoga2pzL1JlZ0V4
cE9iamVjdC5oOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZUlE
KToKKyAgICAgICAgKiBranMvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ09i
amVjdDo6Y3JlYXRlU3RydWN0dXJlSUQpOgorICAgICAgICAqIGtqcy9UeXBlSW5mby5oOgorICAg
ICAgICAoSlNDOjpUeXBlSW5mbzo6aGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpOgorCiAy
MDA4LTEwLTIyICBEYXJpbiBGaXNoZXIgIDxkYXJpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzNzc4MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0
ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgIHsgCi0gICAgICAgIHJldHVybiBT
dHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRz
SGFzSW5zdGFuY2UpKTsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3Rv
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBIYXNTdGFuZGFy
ZEdldE93blByb3BlcnR5U2xvdCkpOyAKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAzNzc4MSkKKysrIEphdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNyBAQCBwdWJsaWM6CiAgICAgLy8gcmVmYWN0b3IgdGhlIGNvZGUgc28gdGhpcyBvdmVy
cmlkZSBpc24ndCBuZWNlc3NhcnkKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4g
Y3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90bykgCiAgICAgeyAKLSAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsgCisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCkpOyAKICAgICB9CiAKIHByaXZhdGU6
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMzc3
ODEpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgdm9pZCBzdWJzdGl0dXRlKFVTdHJpbmcmIHN0
cmluZywgCiBjbGFzcyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTT2JqZWN0
IHsKIHB1YmxpYzoKICAgICBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKLSAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLT5udWxsUHJvdG9TdHJ1
Y3R1cmVJRCkKKyAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLT5pbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yU3RydWN0dXJlKQogICAgIHsKICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUu
Y3BwCShyZXZpc2lvbiAzNzc4MSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Nzg5LDcgKzQ3ODksNyBAQCB2b2lkIE1hY2hpbmU6OmN0aV9vcF9j
cmVhdGVfYXJndW1lbnRzX25vCiB7CiAgICAgQ1RJX1NUQUNLX0hBQ0soKTsKIAotICAgIEFyZ3Vt
ZW50cyogYXJndW1lbnRzID0gbmV3IChBUkdfZ2xvYmFsRGF0YSkgQXJndW1lbnRzKEFSR19jYWxs
RnJhbWUsIEFyZ3VtZW50czo6QXJndW1lbnRzTm9QYXJhbWV0ZXJzKTsKKyAgICBBcmd1bWVudHMq
IGFyZ3VtZW50cyA9IG5ldyAoQVJHX2dsb2JhbERhdGEpIEFyZ3VtZW50cyhBUkdfY2FsbEZyYW1l
LCBBcmd1bWVudHM6Ok5vUGFyYW1ldGVycyk7CiAgICAgQVJHX2NhbGxGcmFtZS0+c2V0Q2FsbGVl
QXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICAgQVJHX2NhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkFy
Z3VtZW50c1JlZ2lzdGVyXSA9IGFyZ3VtZW50czsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQXJndW1lbnRz
LmgJKHJldmlzaW9uIDM3NzgxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxMiArNTMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBBcmd1bWVudHMgOiBwdWJsaWMgSlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAg
ZW51bSBBcmd1bWVudHNQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAgIEFyZ3VtZW50c05vUGFyYW1l
dGVycwotICAgICAgICB9OworICAgICAgICBlbnVtIE5vUGFyYW1ldGVyc1R5cGUgeyBOb1BhcmFt
ZXRlcnMgfTsKIAogICAgICAgICBBcmd1bWVudHMoQ2FsbEZyYW1lKik7Ci0gICAgICAgIEFyZ3Vt
ZW50cyhDYWxsRnJhbWUqLCBlbnVtIEFyZ3VtZW50c1BhcmFtZXRlcnMpOworICAgICAgICBBcmd1
bWVudHMoQ2FsbEZyYW1lKiwgTm9QYXJhbWV0ZXJzVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgfkFy
Z3VtZW50cygpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTc1
LDYgKzczLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgZC0+cmVnaXN0ZXJzID0g
JmFjdGl2YXRpb24tPnJlZ2lzdGVyQXQoMCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90
b3R5cGUpIAorICAgICAgICB7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVh
dGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7IAorICAgICAgICB9CisKICAgICBw
cml2YXRlOgogICAgICAgICB2b2lkIGdldEFyZ3VtZW50c0RhdGEoQ2FsbEZyYW1lKiwgSlNGdW5j
dGlvbiomLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwg
aW50JiBhcmdjKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpA
QCAtMTUzLDEwICsxNTYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGQtPm92ZXJyb2Rl
Q2FsbGVlID0gZmFsc2U7CiAgICAgfQogCi0gICAgaW5saW5lIEFyZ3VtZW50czo6QXJndW1lbnRz
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBlbnVtIEFyZ3VtZW50c1BhcmFtZXRlcnMpCisgICAgaW5s
aW5lIEFyZ3VtZW50czo6QXJndW1lbnRzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBOb1BhcmFtZXRl
cnNUeXBlKQogICAgICAgICA6IEpTT2JqZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSkKICAgICAgICAgLCBkKG5ldyBBcmd1bWVudHNEYXRh
KQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmNhbGxlZSgpLT5tX2JvZHktPnBh
cmFtZXRlckNvdW50KCkpOworCiAgICAgICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50cyA9IGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIC0gMTsKIAogICAgICAgICBkLT5udW1QYXJhbWV0ZXJzID0g
MDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9EYXRlUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL0RhdGVQcm90b3R5cGUuaAkocmV2aXNpb24gMzc3ODEpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlKSk7CisgICAgICAgIH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvblByb3RvdHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvblByb3RvdHlwZS5oCShyZXZpc2lv
biAzNzc4MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvblByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlUHRy
IHByb3RvKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0
ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSkpOworICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIEhhc1N0YW5kYXJkR2V0
T3duUHJvcGVydHlTbG90KSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDM3NzgxKQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90bykgCiAgICAgICAgIHsg
Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlwZUluZm8o
T2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7IAorICAgICAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVu
dHNIYXNJbnN0YW5jZSB8IEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90KSk7IAogICAgICAg
ICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0FycmF5LmgJKHJldmlzaW9uIDM3
NzgxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNiArNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBmaWxsQXJnTGlz
dChFeGVjU3RhdGUqLCBBcmdMaXN0Jik7CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUpKTsKKyAgICAgICAgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9KU0NlbGwuaAkocmV2aXNpb24gMzc3ODEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQqIHZwdHIoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KHRoaXMpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBCYXNlIGltcGxl
bWVudGF0aW9uLCBidXQgZm9yIG5vbi1vYmplY3QgY2xhc3NlcyBpbXBsZW1lbnRzIGdldFByb3Bl
cnR5U2xvdC4KKyAgICAgICAgLy8gQmFzZSBpbXBsZW1lbnRhdGlvbjsgZm9yIG5vbi1vYmplY3Qg
Y2xhc3NlcyBpbXBsZW1lbnRzIGdldFByb3BlcnR5U2xvdC4KKyAgICAgICAgYm9vbCBmYXN0R2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMzc3ODEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHByaXZhdGUKICAg
ICAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG1fYm9keTsKIAorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90
b3R5cGUpIAorICAgICAgICB7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVh
dGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFzSW5zdGFuY2Up
KTsgCisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMzc3ODEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKKyNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNTdGF0aWNTY29wZU9iamVjdC5oIgogI2luY2x1ZGUgIk1hY2hpbmUuaCIKICNpbmNsdWRlICJQ
YXJzZXIuaCIKQEAgLTY4LDEwICs2OSwxMiBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShi
b29sIGlzU2hhcmVkCiAgICAgLCByZWdFeHBUYWJsZShuZXcgSGFzaFRhYmxlKEpTQzo6cmVnRXhw
VGFibGUpKQogICAgICwgcmVnRXhwQ29uc3RydWN0b3JUYWJsZShuZXcgSGFzaFRhYmxlKEpTQzo6
cmVnRXhwQ29uc3RydWN0b3JUYWJsZSkpCiAgICAgLCBzdHJpbmdUYWJsZShuZXcgSGFzaFRhYmxl
KEpTQzo6c3RyaW5nVGFibGUpKQotICAgICwgbnVsbFByb3RvU3RydWN0dXJlSUQoSlNPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKSkKICAgICAsIGFjdGl2YXRpb25TdHJ1Y3R1cmVJ
RChKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKSkKKyAgICAsIGludGVy
cnVwdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUoSlNPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZUlE
KGpzTnVsbCgpKSkKICAgICAsIHN0YXRpY1Njb3BlU3RydWN0dXJlSUQoSlNTdGF0aWNTY29wZU9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlSUQoanNOdWxsKCkpKQogICAgICwgc3RyaW5nU3RydWN0dXJl
SUQoSlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKSkKKyAgICAsIG5vdEFuT2Jq
ZWN0RXJyb3JTdHViU3RydWN0dXJlKEpTTm90QW5PYmplY3RFcnJvclN0dWI6OmNyZWF0ZVN0cnVj
dHVyZUlEKGpzTnVsbCgpKSkKKyAgICAsIG5vdEFuT2JqZWN0RXJyb3JTdHViU3RydWN0dXJlKEpT
Tm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKSkKICAgICAsIG51bWJlclN0
cnVjdHVyZUlEKEpTTnVtYmVyQ2VsbDo6Y3JlYXRlU3RydWN0dXJlSUQoanNOdWxsKCkpKQogICAg
ICwgaWRlbnRpZmllclRhYmxlKGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgpKQogICAgICwgcHJvcGVy
dHlOYW1lcyhuZXcgQ29tbW9uSWRlbnRpZmllcnModGhpcykpCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pT
R2xvYmFsRGF0YS5oCShyZXZpc2lvbiAzNzc4MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0ds
b2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTAgKzc4LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cENvbnN0cnVjdG9yVGFibGU7CiAg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogc3RyaW5nVGFibGU7CiAgICAgICAgIAotICAgICAgICBS
ZWZQdHI8U3RydWN0dXJlSUQ+IG51bGxQcm90b1N0cnVjdHVyZUlEOwogICAgICAgICBSZWZQdHI8
U3RydWN0dXJlSUQ+IGFjdGl2YXRpb25TdHJ1Y3R1cmVJRDsKKyAgICAgICAgUmVmUHRyPFN0cnVj
dHVyZUlEPiBpbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlOwogICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlSUQ+IHN0YXRpY1Njb3BlU3RydWN0dXJlSUQ7CiAgICAgICAgIFJlZlB0cjxT
dHJ1Y3R1cmVJRD4gc3RyaW5nU3RydWN0dXJlSUQ7CisgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVJ
RD4gbm90QW5PYmplY3RFcnJvclN0dWJTdHJ1Y3R1cmU7CisgICAgICAgIFJlZlB0cjxTdHJ1Y3R1
cmVJRD4gbm90QW5PYmplY3RFcnJvclN0dWJTdHJ1Y3R1cmU7CiAgICAgICAgIFJlZlB0cjxTdHJ1
Y3R1cmVJRD4gbnVtYmVyU3RydWN0dXJlSUQ7CiAKICAgICAgICAgSWRlbnRpZmllclRhYmxlKiBp
ZGVudGlmaWVyVGFibGU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkocmV2
aXNpb24gMzc3ODEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gZCgpLT5nbG9iYWxEYXRhLmdldCgp
OyB9CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0RGF0YSogZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEpTR2xvYmFsT2JqZWN0RGF0YSo+KEpTVmFyaWFibGVPYmplY3Q6OmQpOyB9CiAKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpT
VmFsdWVQdHIgcHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKKyAgICAgICAg
fQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsK
ICAgICAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhjb25zdCBJZGVudGlmaWVyJiBpLCBKU1Zh
bHVlUHRyIHYsIHVuc2lnbmVkIGEpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNOb3RBbk9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU05vdEFuT2JqZWN0LmgJ
KHJldmlzaW9uIDM3NzgxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTTm90QW5PYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEpTTm90QW5PYmplY3RFcnJvclN0dWIgOiBwdWJsaWMgSlNPYmplY3QgewogICAgIHB1Ymxp
YzoKICAgICAgICAgSlNOb3RBbk9iamVjdEVycm9yU3R1YihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wg
aXNOdWxsKQotICAgICAgICAgICAgOiBKU09iamVjdChleGVjLT5nbG9iYWxEYXRhKCkubnVsbFBy
b3RvU3RydWN0dXJlSUQpCisgICAgICAgICAgICA6IEpTT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KS5ub3RBbk9iamVjdEVycm9yU3R1YlN0cnVjdHVyZSkKICAgICAgICAgICAgICwgbV9pc051bGwo
aXNOdWxsKQogICAgICAgICB7CiAgICAgICAgIH0KKwogICAgICAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNOdWxsOyB9Ci0gICAgICAgIGJvb2wgaXNOb3RBbk9iamVjdEVycm9y
U3R1YigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHByaXZhdGU6CisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc05vdEFuT2JqZWN0RXJyb3JTdHViKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCiAgICAgICAgIGJvb2wgbV9pc051bGw7CiAgICAgfTsKICAgICAKQEAgLTUyLDExICs1NSwx
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU05vdEFuT2JqZWN0IDogcHVibGljIEpT
T2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTTm90QW5PYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU05vdEFuT2JqZWN0RXJyb3JTdHViKiBleGNlcHRpb24pCi0gICAgICAgICAgICA6IEpT
T2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKS5udWxsUHJvdG9TdHJ1Y3R1cmVJRCkKKyAgICAgICAg
ICAgIDogSlNPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLm5vdEFuT2JqZWN0RXJyb3JTdHViU3Ry
dWN0dXJlKQogICAgICAgICAgICAgLCBtX2V4Y2VwdGlvbihleGNlcHRpb24pCiAgICAgICAgIHsK
ICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVh
dGVTdHJ1Y3R1cmVJRChKU1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlKSk7CisgICAgICAgIH0KKwogICAgICBwcml2YXRlOgogICAgICAgICAvLyBKU1ZhbHVlIG1l
dGhvZHMKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSos
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L0pTTnVtYmVyQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU051bWJl
ckNlbGwuaAkocmV2aXNpb24gMzc3ODEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNOdW1iZXJD
ZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICNlbmRpZgogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0cnVj
dHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE51bWJlclR5cGUsIE5lZWRzVGhpc0NvbnZl
cnNpb24pKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRl
U3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyVHlw
ZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBKU051bWJlckNlbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgdmFsdWUp
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvSlNPYmplY3QuaAkocmV2aXNpb24gMzc3ODEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAg
ICBmcmllbmQgY2xhc3MgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXI7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBDVEk7CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU0NlbGw7CiAKICAgICBwdWJsaWM6
CiAgICAgICAgIGV4cGxpY2l0IEpTT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKQEAg
LTE4MywxMiArMTg0LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGlubGluZVN0b3JhZ2VDYXBhY2l0eSA9IDI7CiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3Qgbm9uSW5saW5lQmFzZVN0b3JhZ2VDYXBhY2l0eSA9IDE2OwogCi0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlUHRyIHBy
b3RvKSB7IHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RU
eXBlKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0
cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90KSk7CisgICAgICAgIH0KIAogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RGb3JXcml0ZShFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxl
KTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CisKICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBmaW5kUHJvcGVydHlIYXNoRW50cnkoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICAgICAg
U3RydWN0dXJlSUQqIGNyZWF0ZUluaGVyaXRvcklEKCk7CiAKQEAgLTI2Niw2MiArMjcyLDI1IEBA
IGlubGluZSBib29sIEpTVmFsdWU6OmlzT2JqZWN0KGNvbnN0IENsYXMKICAgICByZXR1cm4gIUpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpICYmIGFzQ2VsbCgpLT5pc09iamVjdChj
bGFzc0luZm8pOwogfQogCi1pbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAorQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKLSAgICBpZiAoY29uc3RfY2FzdDxKU09i
amVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkK
LSAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAK
LSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotaW5saW5lIEpTVmFsdWVQdHIgSlNPYmpl
Y3Q6OmdldChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKLXsK
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKLSAgICBpZiAoY29uc3RfY2FzdDxKU09iamVj
dCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAg
ICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLQotICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0vLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUg
YSBmdW5jdGlvbiB0aGlzIGxhcmdlIGJ1dCBpdCBtYWtlcyBhIGJpZyBkaWZmZXJlbmNlCi0vLyBz
aW5jZSB0aGlzIGlzIGZ1bmN0aW9uIHZlcnkgaG90IGluIHZhcmlhYmxlIGxvb2t1cAotaW5saW5l
IGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSB0aGlzOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChvYmpl
Y3QtPmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBvYmpl
Y3QtPnByb3RvdHlwZSgpOwotICAgICAgICBpZiAoIXByb3RvdHlwZS0+aXNPYmplY3QoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBvYmplY3QgPSBhc09iamVjdChwcm90
b3R5cGUpOworICAgIGlmIChKU1ZhbHVlUHRyKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9u
KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlSUQtPmhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMoKSAmJiBsb2NhdGlvblswXS0+aXNHZXR0ZXJTZXR0ZXIoKSkKKyAgICAg
ICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgbG9jYXRpb24pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCBsb2NhdGlvbiwgb2Zmc2V0
Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotfQog
Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHRoaXM7Ci0KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAob2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0gb2Jq
ZWN0LT5wcm90b3R5cGUoKTsKLSAgICAgICAgaWYgKCFwcm90b3R5cGUtPmlzT2JqZWN0KCkpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUp
OworICAgIC8vIG5vbi1zdGFuZGFyZCBOZXRzY2FwZSBleHRlbnNpb24KKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAg
ICAgc2xvdC5zZXRWYWx1ZShwcm90b3R5cGUoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5s
aW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24s
Ci0vLyBidXQgaXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZSB0byBwcm9wZXJ0eSBsb29rdXAgdGhh
dCBkZXJpdmVkIGNsYXNzZXMgY2FuIGlubGluZSB0aGVpcgotLy8gYmFzZSBjbGFzcyBjYWxsIHRv
IHRoaXMuCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEZv
cldyaXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKIHsKICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOwpAQCAtMzUxLDIxICszMjAsNjAgQEAgQUxXQVlTX0lOTElORSBib29sIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZQogLy8gYmFzZSBjbGFzcyBjYWxsIHRvIHRoaXMuCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICAgIGlmIChKU1ZhbHVlUHRyKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlSUQtPmhhc0dldHRlclNldHRlclByb3Bl
cnRpZXMoKSAmJiBsb2NhdGlvblswXS0+aXNHZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgIGZp
bGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgbG9jYXRpb24pOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCBsb2NhdGlvbiwgb2Zmc2V0Rm9yTG9jYXRp
b24obG9jYXRpb24pKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGlubGluZUdl
dE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitBTFdBWVNf
SU5MSU5FIGJvb2wgSlNDZWxsOjpmYXN0R2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgaWYgKHN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkuaGFzU3RhbmRhcmRHZXRPd25Qcm9w
ZXJ0eVNsb3QoKSkKKyAgICAgICAgcmV0dXJuIGFzT2JqZWN0KHRoaXMpLT5pbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gZ2V0T3du
UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKKy8vIEl0IG1heSBz
ZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UgYnV0IGl0IG1ha2VzIGEg
YmlnIGRpZmZlcmVuY2UKKy8vIHNpbmNlIHRoaXMgaXMgZnVuY3Rpb24gdmVyeSBob3QgaW4gdmFy
aWFibGUgbG9va3VwCitpbmxpbmUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgaWYgKG9iamVjdC0+ZmFzdEdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEpTVmFs
dWVQdHIgcHJvdG90eXBlID0gb2JqZWN0LT5wcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKCFwcm90
b3R5cGUtPmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG9i
amVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CiAgICAgfQorfQogCi0gICAgLy8gbm9uLXN0YW5k
YXJkIE5ldHNjYXBlIGV4dGVuc2lvbgotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bykgewotICAgICAgICBzbG90LnNldFZhbHVlKHBy
b3RvdHlwZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CitpbmxpbmUgYm9vbCBKU09iamVjdDo6
Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CisgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpOworICAgICAgICBp
ZiAoIXByb3RvdHlwZS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKICAgICB9Cit9CiAKLSAgICByZXR1
cm4gZmFsc2U7CitpbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIFByb3BlcnR5
U2xvdCBzbG90KHRoaXMpOworICAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdl
dFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4g
c2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworfQorCitpbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIFByb3BlcnR5U2xv
dCBzbG90KHRoaXMpOworICAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFBy
b3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gc2xv
dC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworCisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyKQpAQCAtNDYx
LDcgKzQ2OSw3IEBAIGlubGluZSBKU1ZhbHVlUHRyIEpTVmFsdWU6OmdldChFeGVjU3RhdGUKICAg
ICB9CiAgICAgSlNDZWxsKiBjZWxsID0gYXNDZWxsKCk7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgaWYgKGNlbGwtPmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKQorICAgICAgICBpZiAoY2VsbC0+ZmFzdEdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgQVNTRVJUKGNlbGwtPmlzT2JqZWN0KCkpOwogICAgICAg
ICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2VsbCktPnBy
b3RvdHlwZSgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTU3RhdGljU2NvcGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNTdGF0aWNTY29wZU9iamVjdC5o
CShyZXZpc2lvbiAzNzc4MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU1N0YXRpY1Njb3BlT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDEwIEBAIG5hbWVzcGFjZSBKU0N7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpT
VmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2b2lkIHB1dFdpdGhBdHRyaWJ1
dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3Jl
YXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlSUQ6OmNy
ZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJ
RChKU1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBOZWVkc1Ro
aXNDb252ZXJzaW9uKSk7CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIEpTU3Rh
dGljU2NvcGVPYmplY3REYXRhKiBkKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdGF0aWNTY29w
ZU9iamVjdERhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTU3Ry
aW5nLmgJKHJldmlzaW9uIDM3NzgxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV92YWx1ZS5zaXplKCkpOyB9CiAgICAgICAgIEpTU3RyaW5nKiBnZXRJbmRleChK
U0dsb2JhbERhdGEqLCB1bnNpZ25lZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0
cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5cGUsIE5lZWRzVGhpc0Nv
bnZlcnNpb24pKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3Jl
YXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oU3RyaW5n
VHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBlbnVtIFZQdHJTdGVhbGluZ0hhY2tUeXBlIHsgVlB0clN0ZWFsaW5nSGFjayB9OwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMzc3ODEpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDkgKzI5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIFRoaXMgY2xhc3MgaXMgdXNl
ZCBhcyBhIGJhc2UgZm9yIGNsYXNzZXMgc3VjaCBhcyBTdHJpbmcsCiAgICAgLy8gTnVtYmVyLCBC
b29sZWFuIGFuZCBEYXRlIHdoaWNoIGFyZSB3cmFwcGVycyBmb3IgcHJpbWl0aXZlIHR5cGVzLgog
ICAgIGNsYXNzIEpTV3JhcHBlck9iamVjdCA6IHB1YmxpYyBKU09iamVjdCB7Ci0gICAgcHVibGlj
OgorICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+KTsKLSAgICAgICAgCisKKyAgICBwdWJsaWM6CiAgICAgICAgIEpT
VmFsdWVQdHIgaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxWYWx1ZTsg
fQogICAgICAgICB2b2lkIHNldEludGVybmFsVmFsdWUoSlNWYWx1ZVB0cik7CiAgICAgICAgIApJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL01hdGhPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvTWF0aE9iamVjdC5oCShyZXZpc2lvbiAzNzc4MSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9NYXRoT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMzLDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlE
KEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKKyAgICAg
ICAgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL051bWJlckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM3NzgxKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIE51bWJlckNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBOdW1iZXJQcm90b3R5cGUqKTsK
IAotICAgICAgICBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwog
ICAgICAgICBKU1ZhbHVlUHRyIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2Vu
KSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFs
dWVQdHIgcHJvdG8pIAorICAgICAgICB7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlE
OjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5j
ZSkpOyAKKyAgICAgICAgfQorCiAgICAgICAgIGVudW0geyBOYU5WYWx1ZSwgTmVnSW5maW5pdHks
IFBvc0luZmluaXR5LCBNYXhWYWx1ZSwgTWluVmFsdWUgfTsKIAogICAgIHByaXZhdGU6CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzc3ODEpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBS
ZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgUmVn
RXhwUHJvdG90eXBlKik7CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+
IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOworICAgICAgICB9CisKICAgICAgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwT2JqZWN0LmgJ
KHJldmlzaW9uIDM3NzgxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBw
cm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3Jl
YXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOworICAgICAgICB9CisKICAgICBw
cml2YXRlOgogICAgICAgICBib29sIG1hdGNoKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
IApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMzc3ODEpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYg
KzQ1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTU3RyaW5nKiBpbnRlcm5hbFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gYXNTdHJpbmcoSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZh
bHVlKCkpO30KIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRl
U3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSkpOworICAgICAgICB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ09iamVjdChQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiwgSlNTdHJpbmcqKTsKIApJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1R5cGVJ
bmZvLmgJKHJldmlzaW9uIDM3NzgxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL1R5cGVJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
ICAgIC8vIFdlYkNvcmUgdXNlcyB0aGlzIHRvIG1ha2UgZG9jdW1lbnQuYWxsIGFuZCBzdHlsZS5m
aWx0ZXIgdW5kZXRlY3RhYmxlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gMTsKKyAgICAgICAgLy8gV2ViQ29yZSB1c2VzIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgdG8gbWFrZSBkb2N1bWVudC5hbGwgYW5kIHN0eWxlLmZpbHRlciB1bmRldGVjdGFi
bGUuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltcGxlbWVudHNIYXNJbnN0YW5jZSA9IDEg
PDwgMTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgPSAx
IDw8IDI7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5lZWRzVGhpc0NvbnZlcnNpb24gPSAx
IDw8IDM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEhhc1N0YW5kYXJkR2V0T3duUHJvcGVy
dHlTbG90ID0gMSA8PCA0OwogCiAgICAgY2xhc3MgVHlwZUluZm8gewogICAgICAgICBmcmllbmQg
Y2xhc3MgQ1RJOwpAQCAtNDgsOCArNDksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgaW1wbGVtZW50c0hhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIEltcGxl
bWVudHNIYXNJbnN0YW5jZTsgfQogICAgICAgICBib29sIG92ZXJyaWRlc0hhc0luc3RhbmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9mbGFncyAmIE92ZXJyaWRlc0hhc0luc3RhbmNlOyB9CiAgICAgICAg
IGJvb2wgbmVlZHNUaGlzQ29udmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBOZWVk
c1RoaXNDb252ZXJzaW9uOyB9CisgICAgICAgIGJvb2wgaGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0
eVNsb3QoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0
eVNsb3Q7IH0KIAogICAgICAgICB1bnNpZ25lZCBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxh
Z3M7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIEpTVHlwZSBtX3R5cGU7CiAgICAgICAgIHVu
c2lnbmVkIG1fZmxhZ3M7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNzc4MykKKysrIEphdmFT
Y3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDA4
LTEwLTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZpeCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTQKKyAgICAgICAgICBCdWcgMjEyOTQ6IERldmlydHVh
bGl6ZSBnZXRPd25Qcm9wZXJ0eVNsb3QoKQorCisgICAgICAgICogSlNSdW4uY3BwOgorICAgICAg
ICAoSlNHbHVlR2xvYmFsT2JqZWN0OjpKU0dsdWVHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNS
dW46OkpTUnVuKToKKyAgICAgICAgKiBKU1J1bi5oOgorICAgICAgICAoSlNHbHVlR2xvYmFsT2Jq
ZWN0OjpGbGFncyk6CisgICAgICAgIChKU0dsdWVHbG9iYWxPYmplY3Q6OnVzZXJPYmplY3RTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNHbHVlR2xvYmFsT2JqZWN0OjpkKToKKyAgICAgICAgKiBKU1V0
aWxzLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0S0pTVmFsdWUpOgorICAgICAgICAodW5wcm90ZWN0
R2xvYmFsT2JqZWN0KToKKyAgICAgICAgKGluaXRpYWxpemVHbG9iYWxPYmplY3RLZXkpOgorICAg
ICAgICAoZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKGdldFRocmVhZEdsb2JhbEV4
ZWNTdGF0ZSk6CisgICAgICAgIChnZXRUaHJlYWRHbG9iYWxVc2VyT2JqZWN0U3RydWN0dXJlKToK
KyAgICAgICAgKiBKU1V0aWxzLmg6CisgICAgICAgICogVXNlck9iamVjdEltcC5jcHA6CisgICAg
ICAgIChVc2VyT2JqZWN0SW1wOjpVc2VyT2JqZWN0SW1wKToKKyAgICAgICAgKiBVc2VyT2JqZWN0
SW1wLmg6CisgICAgICAgIChVc2VyT2JqZWN0SW1wOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6CisKIDIw
MDgtMTAtMjAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBDYW1lcm9uIFp3YXJpY2guCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCShyZXZpc2lvbiAzNzc4MSkKKysr
IEphdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwx
MyArMjksMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1J1bi5oIgogCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgIlVzZXJPYmpl
Y3RJbXAuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Tb3VyY2VSYW5nZS5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL2NvbXBsZXRpb24uaD4KKworSlNHbHVlR2xvYmFsT2JqZWN0OjpK
U0dsdWVHbG9iYWxPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBKU0Zs
YWdzIGZsYWdzKQorICAgIDogSlNHbG9iYWxPYmplY3Qoc3RydWN0dXJlLCBuZXcgRGF0YSwgdGhp
cykKK3sKKyAgICBkKCktPmZsYWdzID0gZmxhZ3M7CisgICAgZCgpLT51c2VyT2JqZWN0U3RydWN0
dXJlID0gVXNlck9iamVjdEltcDo6Y3JlYXRlU3RydWN0dXJlSUQoanNOdWxsKCkpOworfQogCiBK
U1J1bjo6SlNSdW4oQ0ZTdHJpbmdSZWYgc291cmNlLCBKU0ZsYWdzIGluRmxhZ3MpCiAgICAgOiAg
IEpTQmFzZShrSlNSdW5UeXBlSUQpLAogICAgICAgICBmU291cmNlKENGU3RyaW5nVG9VU3RyaW5n
KHNvdXJjZSkpLAotICAgICAgICBmR2xvYmFsT2JqZWN0KG5ldyAoJmdldFRocmVhZEdsb2JhbEV4
ZWNTdGF0ZSgpLT5nbG9iYWxEYXRhKCkpIEpTR2x1ZUdsb2JhbE9iamVjdChpbkZsYWdzKSksCisg
ICAgICAgIGZHbG9iYWxPYmplY3QobmV3ICgmZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmds
b2JhbERhdGEoKSkgSlNHbHVlR2xvYmFsT2JqZWN0KEpTR2x1ZUdsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlSUQoanNOdWxsKCkpLCBpbkZsYWdzKSksCiAgICAgICAgIGZGbGFncyhpbkZsYWdz
KQogewogfQpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0R2x1ZS9KU1J1bi5oCShyZXZpc2lvbiAzNzc4MSkKKysrIEphdmFTY3JpcHRHbHVlL0pT
UnVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE2ICszNCwxOCBAQAogCiBjbGFzcyBKU0dsdWVH
bG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgSlNHbHVlR2xvYmFsT2JqZWN0KEpTRmxhZ3MgZmxhZ3MgPSBrSlNGbGFnTm9uZSkKLSAgICAg
ICAgICAgIDogSlNHbG9iYWxPYmplY3QoKQotICAgICAgICAgICAgLCBmSlNGbGFncyhmbGFncykK
LSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIEpTR2x1ZUdsb2JhbE9iamVjdChQYXNzUmVm
UHRyPFN0cnVjdHVyZUlEPiwgSlNGbGFncyA9IGtKU0ZsYWdOb25lKTsKIAotICAgICAgICBKU0Zs
YWdzIEZsYWdzKCkgY29uc3QgeyByZXR1cm4gZkpTRmxhZ3M7IH0KKyAgICAgICAgSlNGbGFncyBG
bGFncygpIGNvbnN0IHsgcmV0dXJuIGQoKS0+ZmxhZ3M7IH0KKyAgICAgICAgU3RydWN0dXJlSUQq
IHVzZXJPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPnVzZXJPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTRmxhZ3MgZkpTRmxhZ3M7
CisgICAgICAgIHN0cnVjdCBEYXRhIDogSlNHbG9iYWxPYmplY3REYXRhIHsKKyAgICAgICAgICAg
IFJlZlB0cjxTdHJ1Y3R1cmVJRD4gdXNlck9iamVjdFN0cnVjdHVyZTsKKyAgICAgICAgICAgIEpT
RmxhZ3MgZmxhZ3M7CisgICAgICAgIH07CisKKyAgICAgICAgRGF0YSogZCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PERhdGEqPihKU0dsb2JhbE9iamVjdDo6ZCgpKTsgfQogfTsKIAogY2xh
c3MgSlNSdW4gOiBwdWJsaWMgSlNCYXNlIHsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVXRpbHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCShyZXZpc2lvbiAz
Nzc4MSkKKysrIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODMsNyArMTgzLDcgQEAgSlNWYWx1ZVB0ciBKU09iamVjdEtKU1ZhbHVlKEpTVXNlck9iamVjdAog
ICAgICAgICBpZiAoIWhhbmRsZWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpOwotICAgICAgICAgICAgcmVzdWx0ID0g
bmV3IChleGVjKSBVc2VyT2JqZWN0SW1wKGV4ZWMsIHB0cik7CisgICAgICAgICAgICByZXN1bHQg
PSBuZXcgKGV4ZWMpIFVzZXJPYmplY3RJbXAoZ2V0VGhyZWFkR2xvYmFsVXNlck9iamVjdFN0cnVj
dHVyZSgpLCBwdHIpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0z
OTEsMzIgKzM5MSwzNCBAQCBDRlR5cGVSZWYgR2V0Q0ZOdWxsKHZvaWQpCiAKIHN0YXRpYyBwdGhy
ZWFkX2tleV90IGdsb2JhbE9iamVjdEtleTsKIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBnbG9iYWxP
YmplY3RLZXlPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci1KU0dsb2JhbERhdGEqIHNoYXJlZEds
b2JhbERhdGE7CiAKIHN0YXRpYyB2b2lkIHVucHJvdGVjdEdsb2JhbE9iamVjdCh2b2lkKiBkYXRh
KSAKIHsKICAgICBKU0xvY2sgbG9jayh0cnVlKTsKLSAgICBnY1VucHJvdGVjdChzdGF0aWNfY2Fz
dDxKU0dsb2JhbE9iamVjdCo+KGRhdGEpKTsKKyAgICBnY1VucHJvdGVjdChzdGF0aWNfY2FzdDxK
U0dsdWVHbG9iYWxPYmplY3QqPihkYXRhKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVH
bG9iYWxPYmplY3RLZXkoKQogewotICAgIHNoYXJlZEdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6
OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKTsKICAgICBwdGhyZWFkX2tleV9jcmVhdGUoJmdsb2JhbE9i
amVjdEtleSwgdW5wcm90ZWN0R2xvYmFsT2JqZWN0KTsKIH0KIAotRXhlY1N0YXRlKiBnZXRUaHJl
YWRHbG9iYWxFeGVjU3RhdGUoKQorc3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogZ2V0VGhyZWFk
R2xvYmFsT2JqZWN0KCkKIHsKICAgICBwdGhyZWFkX29uY2UoJmdsb2JhbE9iamVjdEtleU9uY2Us
IGluaXRpYWxpemVHbG9iYWxPYmplY3RLZXkpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMo
Z2xvYmFsT2JqZWN0S2V5KSk7CisgICAgSlNHbHVlR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0dsdWVHbG9iYWxPYmplY3QqPihwdGhyZWFkX2dldHNwZWNpZmljKGds
b2JhbE9iamVjdEtleSkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIFJlZlB0
cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZSgpOwotICAg
ICAgICBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTR2x1ZUdsb2JhbE9i
amVjdDsKKyAgICAgICAgZ2xvYmFsT2JqZWN0ID0gbmV3IChnbG9iYWxEYXRhLmdldCgpKSBKU0ds
dWVHbG9iYWxPYmplY3QoSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRChqc051
bGwoKSkpOwogICAgICAgICBnY1Byb3RlY3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcHRocmVh
ZF9zZXRzcGVjaWZpYyhnbG9iYWxPYmplY3RLZXksIGdsb2JhbE9iamVjdCk7CiAgICAgfQotICAg
IAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAg
IHJldHVybiBnbG9iYWxPYmplY3Q7Cit9CisKK0V4ZWNTdGF0ZSogZ2V0VGhyZWFkR2xvYmFsRXhl
Y1N0YXRlKCkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnZXRUaHJlYWRHbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwogCiAgICAgLy8gRGlzY2FyZCBleGNlcHRpb25zIC0tIG90aGVyd2lz
ZSBhbiBleGNlcHRpb24gd291bGQgZm9yZXN0YWxsIEpTIAogICAgIC8vIGV2YWx1YXRpb24gdGhy
b3VnaG91dCB0aGUgdGhyZWFkCkBAIC00MjQsMyArNDI2LDcgQEAgRXhlY1N0YXRlKiBnZXRUaHJl
YWRHbG9iYWxFeGVjU3RhdGUoKQogICAgIHJldHVybiBleGVjOwogfQogCitTdHJ1Y3R1cmVJRCog
Z2V0VGhyZWFkR2xvYmFsVXNlck9iamVjdFN0cnVjdHVyZSgpCit7CisgICAgcmV0dXJuIGdldFRo
cmVhZEdsb2JhbE9iamVjdCgpLT51c2VyT2JqZWN0U3RydWN0dXJlKCk7Cit9CkluZGV4OiBKYXZh
U2NyaXB0R2x1ZS9KU1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNVdGls
cy5oCShyZXZpc2lvbiAzNzc4MSkKKysrIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02Myw2ICs2Myw3IEBAIGlubGluZSBDRlR5cGVSZWYgUmV0YWlu
Q0ZUeXBlKENGVHlwZVJlZiAKIGlubGluZSB2b2lkIFJlbGVhc2VDRlR5cGUoQ0ZUeXBlUmVmIHgp
IHsgaWYgKHgpIENGUmVsZWFzZSh4KTsgIH0KIAogRXhlY1N0YXRlKiBnZXRUaHJlYWRHbG9iYWxF
eGVjU3RhdGUoKTsKK1N0cnVjdHVyZUlEKiBnZXRUaHJlYWRHbG9iYWxVc2VyT2JqZWN0U3RydWN0
dXJlKCk7CiAKIGVudW0gewogICAgIGtKU0ludmFsaWRUeXBlSUQgPSAwLApJbmRleDogSmF2YVNj
cmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUv
VXNlck9iamVjdEltcC5jcHAJKHJldmlzaW9uIDM3NzgxKQorKysgSmF2YVNjcmlwdEdsdWUvVXNl
ck9iamVjdEltcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw4ICszNCw4IEBACiAK
IGNvbnN0IENsYXNzSW5mbyBVc2VyT2JqZWN0SW1wOjppbmZvID0geyAiVXNlck9iamVjdCIsIDAs
IDAsIDAgfTsKIAotVXNlck9iamVjdEltcDo6VXNlck9iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMs
IEpTVXNlck9iamVjdCogdXNlck9iamVjdCkKLSAgICA6IEpTT2JqZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKS5udWxsUHJvdG9TdHJ1Y3R1cmVJRCkKK1VzZXJPYmplY3RJbXA6OlVzZXJPYmplY3RJbXAo
UGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBKU1VzZXJPYmplY3QqIHVzZXJPYmpl
Y3QpCisgICAgOiBKU09iamVjdChzdHJ1Y3R1cmUpCiAgICAgLCBmSlNVc2VyT2JqZWN0KChKU1Vz
ZXJPYmplY3QqKXVzZXJPYmplY3QtPlJldGFpbigpKQogewogfQpJbmRleDogSmF2YVNjcmlwdEds
dWUvVXNlck9iamVjdEltcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL1VzZXJPYmpl
Y3RJbXAuaAkocmV2aXNpb24gMzc3ODEpCisrKyBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1w
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTAgKzM0LDkgQEAKICNpbmNsdWRlICJK
U09iamVjdC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVHlwZS5oPgogCi1jbGFzcyBV
c2VyT2JqZWN0SW1wIDogcHVibGljIEpTT2JqZWN0Ci17CitjbGFzcyBVc2VyT2JqZWN0SW1wIDog
cHVibGljIEpTT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBVc2VyT2JqZWN0SW1wKEV4ZWNTdGF0ZSog
ZXhlYywgSlNVc2VyT2JqZWN0KiB1c2VyT2JqZWN0KTsKKyAgICBVc2VyT2JqZWN0SW1wKFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+LCBKU1VzZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIH5Vc2VyT2Jq
ZWN0SW1wKCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29u
c3Q7CkBAIC02MCw2ICs1OSwxMSBAQCBwdWJsaWM6CiAKICAgICBKU1VzZXJPYmplY3QgKkdldEpT
VXNlck9iamVjdCgpIGNvbnN0OwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+
IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
KSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlUHRyIHVzZXJPYmplY3RH
ZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKIApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3NzgzKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAwOC0xMC0yMiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjk0CisgICAgICAgICAgQnVnIDIxMjk0OiBEZXZpcnR1YWxpemUgZ2V0T3duUHJvcGVydHlT
bG90KCkKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVyZUlEKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6
SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6Y3JlYXRlU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y3JlYXRlU3RydWN0dXJlSUQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTUkdCQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUkdCQ29s
b3I6OmNyZWF0ZVN0cnVjdHVyZUlEKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaDoKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxsYmFja09iamVjdEltcDo6Y3JlYXRlU3RydWN0
dXJlSUQpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmg6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmNyZWF0ZVN0cnVjdHVyZUlEKToKKyAgICAgICAg
KiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmNy
ZWF0ZVN0cnVjdHVyZUlEKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuaDoKKyAg
ICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6Y3JlYXRlU3RydWN0dXJlSUQpOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX29iamVjdC5oOgorICAgICAgICAoSlNDOjpSdW50aW1lT2JqZWN0SW1w
OjpjcmVhdGVTdHJ1Y3R1cmVJRCk6CisKIDIwMDgtMTAtMjIgIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVy
LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHJldmlzaW9uIDM3
NzgxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDYgKzYwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KTsKIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxK
U0M6OlN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU0M6OkpTVmFsdWVQdHIgcHJvdG90
eXBlKSAKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlSUQ6OmNy
ZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlKSk7IAorICAgICAg
ICB9CisKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogICAgICAg
ICB2aXJ0dWFsIEpTQzo6VVN0cmluZyBjbGFzc05hbWUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwCShyZXZp
c2lvbiAzNzc4MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dy
YXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCwxMCBAQCBKU1ZhbHVlUHRyIEpT
SW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjp3CiAgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSB1
bndyYXBwZWRPYmplY3QtPnByb3RvdHlwZSgpOwogICAgIEFTU0VSVChwcm90b3R5cGUtPmlzTnVs
bCgpIHx8IHByb3RvdHlwZS0+aXNPYmplY3QoKSk7CiAKLSAgICBpZiAocHJvdG90eXBlLT5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIG5ldyAodW53cmFwcGVkRXhlYykgSlNJbnNwZWN0b3JDYWxs
YmFja1dyYXBwZXIodW53cmFwcGVkRXhlYywgdW53cmFwcGVkT2JqZWN0LCB1bndyYXBwZWRFeGVj
LT5nbG9iYWxEYXRhKCkubnVsbFByb3RvU3RydWN0dXJlSUQpOworICAgIGlmIChwcm90b3R5cGUt
PmlzTnVsbCgpKSB7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQgPSBK
U0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6Y3JlYXRlU3RydWN0dXJlSUQoanNOdWxsKCkpLnJl
bGVhc2VSZWYoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAodW53cmFwcGVkRXhlYykgSlNJbnNwZWN0
b3JDYWxsYmFja1dyYXBwZXIodW53cmFwcGVkRXhlYywgdW53cmFwcGVkT2JqZWN0LCBzdHJ1Y3R1
cmVJRCk7CisgICAgfQogICAgIHJldHVybiBuZXcgKHVud3JhcHBlZEV4ZWMpIEpTSW5zcGVjdG9y
Q2FsbGJhY2tXcmFwcGVyKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZE9iamVjdCwgYXNPYmplY3Qo
d3JhcCh1bndyYXBwZWRFeGVjLCBwcm90b3R5cGUpKS0+aW5oZXJpdG9ySUQoKSk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCShyZXZp
c2lvbiAzNzc4MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQ
cm90b3R5cGUoKTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6
U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTQzo6SlNWYWx1ZVB0ciBwcm90b3R5cGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUo
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSkpOworICAgICAgICB9CisK
ICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIGxlbmd0aEdldHRl
cihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgaW5kZXhHZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXIuaAkocmV2aXNpb24gMzc3ODEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1
cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNDOjpKU1ZhbHVlUHRyIHByb3RvKSAKLSAgICAgICAg
eyAKLSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IEpTQzo6T3ZlcnJpZGVzSGFzSW5zdGFuY2UpKTsgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEpTQzo6U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTQzo6SlNWYWx1ZVB0ciBwcm90
b3R5cGUpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmVJRDo6
Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIEpTQzo6SW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpPdmVycmlkZXNIYXNJbnN0YW5jZSkpOyAKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNv
bG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNvbG9yLmgJKHJl
dmlzaW9uIDM3NzgxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNvbG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgp
OwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJ
RD4gY3JlYXRlU3RydWN0dXJlSUQoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlKSk7CisgICAgICAgIH0KKwogICAgIHByaXZh
dGU6CiAgICAgICAgIHVuc2lnbmVkIG1fY29sb3I7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMzc3ODEpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC00NTksMTEgKzQ1OSwxOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgU3RydWN0
dXJlIElECiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1
cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNDOjpKU1ZhbHVlUHRyIHByb3RvKVxuIiAuCi0gICAg
ICAgICAgICAgIiAgICB7XG4iIC4KLSAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
SlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6Ok5lZWRzVGhpc0NvbnZlcnNpb24pKTtc
biIgLgotICAgICAgICAgICAgICIgICAgfVxuXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwKKyAgICAgICAgICAgICIgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJ
RD4gY3JlYXRlU3RydWN0dXJlSUQoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSlcbiIgLgorICAg
ICAgICAgICAgIiAgICB7XG4iIC4KKyAgICAgICAgICAgICIgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6Ok5lZWRzVGhpc0NvbnZlcnNpb24p
KTtcbiIgLgorICAgICAgICAgICAgIiAgICB9XG5cbiIpOworICAgIH0gZWxzaWYgKCRoYXNHZXR0
ZXIpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwKKyAgICAgICAgICAgICIgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNDOjpK
U1ZhbHVlUHRyIHByb3RvdHlwZSlcbiIgLgorICAgICAgICAgICAgIiAgICB7XG4iIC4KKyAgICAg
ICAgICAgICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSkpO1xuIiAuCisgICAgICAgICAgICAiICAg
IH1cblxuIik7CiAgICAgfQorCiAgICAgIyBDdXN0b20gbWFyayBmdW5jdGlvbgogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB2b2lkIG1hcmsoKTtcblxuIikgaWYgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn07CiAKQEAgLTYz
Nyw2ICs2NDUsMTEgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvO1xuIik7CiAgICAgaWYg
KCRudW1GdW5jdGlvbnMgPiAwIHx8ICRudW1Db25zdGFudHMgPiAwKSB7CiAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7
XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwKKyAgICAgICAgICAgICIgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNDOjpK
U1ZhbHVlUHRyIHByb3RvdHlwZSlcbiIgLgorICAgICAgICAgICAgIiAgICB7XG4iIC4KKyAgICAg
ICAgICAgICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSkpO1xuIiAuCisgICAgICAgICAgICAiICAg
IH1cbiIpOwogICAgIH0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICR7Y2xhc3NOYW1l
fVByb3RvdHlwZShQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSkgOiBKU0M6
OkpTT2JqZWN0KHN0cnVjdHVyZSkgeyB9XG4iKTsKIApAQCAtNjUxLDcgKzY2NCw3IEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogICAgIH0KIAogICAgIGlmICgkbnVtQXR0cmlidXRlcyA+IDAgfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVDb25zdHJ1Y3RvciJ9KSB7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIi8vIEF0dGlidXRlc1xuXG4iKTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwiLy8gQXR0cmlidXRlc1xuXG4iKTsKICAgICAgICAgZm9yZWFj
aCBteSAkYXR0cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKICAgICAgICAgICAg
IG15ICRnZXR0ZXIgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tf
dWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLyA/ICJDb25zdHJ1Y3RvciIgOiAiIik7CiAgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyICR7Z2V0dGVyfShK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVy
dHlTbG90Jik7XG4iKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDM3Nzgx
KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw2ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmFycmF5UHJvdG90eXBlKCk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVl
UHRyIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIEpTVmFsdWVQdHIgaW5kZXhHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwpJbmRleDogV2ViQ29y
ZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9y
dW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAzNzc4MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b3R5
cGUoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRl
U3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxl
bWVudHNIYXNJbnN0YW5jZSkpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNWYWx1
ZVB0ciBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwpJbmRleDogV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5oCShyZXZpc2lvbiAzNzc4MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7
CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVj
dHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CisgICAgfQor
CiBwcm90ZWN0ZWQ6CiAgICAgUnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqLCBQYXNzUmVmUHRy
PFN0cnVjdHVyZUlEPiwgUGFzc1JlZlB0cjxCaW5kaW5nczo6SW5zdGFuY2U+KTsKIApJbmRleDog
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCShyZXZpc2lvbiAzNzc4MSkKKysrIFdlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQs
MTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuaAkocmV2aXNpb24gMzc3ODEpCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50
aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsNyBAQCBjbGFzcyBRdFJ1bnRpbWVD
b25uZWN0aW9uTWV0aG9kRGF0YSA6IHB1CiB9OwogCiAvLyBDb21tb24gYmFzZSBjbGFzcyAoZG9l
c24ndCByZWFsbHkgZG8gYW55dGhpbmcgaW50ZXJlc3RpbmcpCi1jbGFzcyBRdFJ1bnRpbWVNZXRo
b2QgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbgoteworY2xhc3MgUXRSdW50aW1lTWV0aG9kIDog
cHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHVibGljOgogICAgIHZpcnR1YWwgflF0UnVudGlt
ZU1ldGhvZCgpOwogCkBAIC0xNTAsNiArMTQ5LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b3R5cGUoKTsKICAgICB9
CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQo
SlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlSUQ6
OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSkpOworICAgIH0KKwogcHJvdGVjdGVk
OgogICAgIFF0UnVudGltZU1ldGhvZERhdGEgKmRfZnVuYygpIGNvbnN0IHtyZXR1cm4gZF9wdHI7
fQogICAgIFF0UnVudGltZU1ldGhvZChRdFJ1bnRpbWVNZXRob2REYXRhICpkZCwgRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZuLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3Qp
OwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9kby13ZWJjb3JlLXJlbmFtZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL2RvLXdlYmNvcmUtcmVuYW1lCShyZXZpc2lvbiAzNzc4
MSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvZG8td2ViY29yZS1yZW5hbWUJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCwyMiBAQCBzdWIgd2FudGVkCiB9CiAKIG15ICVyZW5hbWVzID0gKAor
ICAgICJpbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlSUQiID0+ICJpbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlIiwKKyAgICAibm90QW5PYmplY3RFcnJvclN0dWJTdHJ1
Y3R1cmVJRCIgPT4gIm5vdEFuT2JqZWN0RXJyb3JTdHViU3RydWN0dXJlIiwKKyAgICAibm90QW5P
YmplY3RTdHJ1Y3R1cmVJRCIgPT4gIm5vdEFuT2JqZWN0RXJyb3JTdHViU3RydWN0dXJlIgogKTsK
IAogbXkgJXJlbmFtZXNDb250ZW1wbGF0ZWRGb3JUaGVGdXR1cmUgPSAoCiAgICAgIlN0cnVjdHVy
ZUlEIiA9PiAiU3RydWN0dXJlIiwKICAgICAic3RydWN0dXJlSUQiID0+ICJzdHJ1Y3R1cmUiLAog
CisgICAgImNyZWF0ZVN0cnVjdHVyZUlEIiA9PiAiY3JlYXRlU3RydWN0dXJlIiwKKworICAgICJh
Y3RpdmF0aW9uU3RydWN0dXJlSUQiID0+ICJhY3RpdmF0aW9uU3RydWN0dXJlIiwKKyAgICAic3Rh
dGljU2NvcGVTdHJ1Y3R1cmVJRCIgPT4gInN0YXRpY1Njb3BlU3RydWN0dXJlIiwKKyAgICAic3Ry
aW5nU3RydWN0dXJlSUQiID0+ICJzdHJpbmdTdHJ1Y3R1cmUiLAorICAgICJudW1iZXJTdHJ1Y3R1
cmVJRCIgPT4gIm51bWJlclN0cnVjdHVyZSIsCisKICAgICAiRE9NT2JqZWN0IiA9PiAiSlNET01P
YmplY3QiLAogCiAgICAgInJ1bnRpbWVPYmplY3RHZXR0ZXIiID0+ICJwbHVnaW5FbGVtZW50R2V0
dGVyIiwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24561</attachid>
            <date>2008-10-22 12:00:55 -0700</date>
            <delta_ts>2008-10-22 13:08:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>GetOwnPropSlotPatch.txt</filename>
            <type>text/plain</type>
            <size>51609</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3Nzg0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA4IEBACisyMDA4LTEwLTIyICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEyOTQKKyAgICAgICAgICBCdWcgMjEyOTQ6IERldmlydHVhbGl6ZSBnZXRPd25Qcm9w
ZXJ0eVNsb3QoKQorCisgICAgICAgIEEgYml0IG92ZXIgMyUgZmFzdGVyIG9uIFY4IHRlc3RzLgor
CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZUlEKTogU2V0IEhhc1N0YW5kYXJk
R2V0T3duUHJvcGVydHlTbG90CisgICAgICAgIHNpbmNlIHRoaXMgY2xhc3MgZG9lc24ndCBvdmVy
cmlkZSBnZXRQcm9wZXJ0eVNsb3QuCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5o
OgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZUlEKTog
RGl0dG8uCisKKyAgICAgICAgKiBWTS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcik6
IFVzZSBhIHN0cnVjdHVyZQorICAgICAgICB0aGF0J3MgY3JlYXRlZCBqdXN0IGZvciB0aGlzIGNs
YXNzIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHNoYXJlIGEgc2luZ2xlICJudWxsCisgICAgICAgIHBy
b3RvdHlwZSIgc3RydWN0dXJlLgorCisgICAgICAgICogVk0vTWFjaGluZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRzX25vX3BhcmFtcyk6IFJlbmFt
ZQorICAgICAgICBBcmd1bWVudHM6OkFyZ3VtZW50c05vUGFyYW1ldGVycyB0byBBcmd1bWVudHM6
Ok5vUGFyYW1ldGVycy4KKyAgICAgICAgCisgICAgICAgICoga2pzL0FyZ3VtZW50cy5oOiBSZW5h
bWUgdGhlIGVudW0gZnJvbSBBcmd1bWVudHM6OkFyZ3VtZW50c1BhcmFtZXRlcnMgdG8KKyAgICAg
ICAgQXJndW1lbnRzOjpOb1BhcmFtZXRlcnNUeXBlIGFuZCB0aGUgdmFsdWUgZnJvbSBBcmd1bWVu
dHM6OkFyZ3VtZW50c05vUGFyYW1ldGVycworICAgICAgICB0byBBcmd1bWVudHM6Ok5vUGFyYW1l
dGVycy4KKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6IEFkZGVk
LiBSZXR1cm5zIGEgc3RydWN0dXJlIHdpdGhvdXQKKyAgICAgICAgSGFzU3RhbmRhcmRHZXRPd25Q
cm9wZXJ0eVNsb3Qgc2luY2UgdGhpcyBjbGFzcyBvdmVycmlkZXMgZ2V0T3duUHJvcGVydHlTbG90
LgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OkFyZ3VtZW50cyk6IEFkZGVkIGFuIGFzc2VydGlv
biB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzLgorCisgICAgICAgICoga2pzL0RhdGVQcm90
b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQp
OiBBZGRlZC4gUmV0dXJucyBhIHN0cnVjdHVyZSB3aXRob3V0CisgICAgICAgIEhhc1N0YW5kYXJk
R2V0T3duUHJvcGVydHlTbG90IHNpbmNlIHRoaXMgY2xhc3Mgb3ZlcnJpZGVzIGdldE93blByb3Bl
cnR5U2xvdC4KKworICAgICAgICAqIGtqcy9GdW5jdGlvblByb3RvdHlwZS5oOgorICAgICAgICAo
SlNDOjpGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQpOiBTZXQgSGFzU3RhbmRh
cmRHZXRPd25Qcm9wZXJ0eVNsb3QKKyAgICAgICAgc2luY2UgdGhpcyBjbGFzcyBkb2Vzbid0IG92
ZXJyaWRlIGdldFByb3BlcnR5U2xvdC4KKyAgICAgICAgKiBranMvSW50ZXJuYWxGdW5jdGlvbi5o
OgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6IERp
dHRvLgorCisgICAgICAgICoga2pzL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlSUQpOiBBZGRlZC4gUmV0dXJucyBhIHN0cnVjdHVyZSB3aXRob3V0Cisg
ICAgICAgIEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90IHNpbmNlIHRoaXMgY2xhc3Mgb3Zl
cnJpZGVzIGdldE93blByb3BlcnR5U2xvdC4KKworICAgICAgICAqIGtqcy9KU0NlbGwuaDogQWRk
ZWQgZGVjbGFyYXRpb24gb2YgZmFzdEdldE93blByb3BlcnR5U2xvdDsgYSBub24tdmlydHVhbAor
ICAgICAgICB2ZXJzaW9uIHRoYXQgdXNlcyB0aGUgc3RydWN0dXJlIGJpdCB0byBkZWNpZGUgd2hl
dGhlciB0byBjYWxsIHRoZSB2aXJ0dWFsCisgICAgICAgIHZlcnNpb24uCisKKyAgICAgICAgKiBr
anMvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmVJRCk6IEFkZGVkLiBSZXR1cm5zIGEgc3RydWN0dXJlIHdpdGhvdXQKKyAgICAgICAgSGFzU3Rh
bmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3Qgc2luY2UgdGhpcyBjbGFzcyBvdmVycmlkZXMgZ2V0T3du
UHJvcGVydHlTbG90LgorCisgICAgICAgICoga2pzL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKTogSW5pdGlhbGl6ZSBuZXcgc3RydWN0
dXJlczsgcmVtb3ZlZAorICAgICAgICBudWxsUHJvdG9TdHJ1Y3R1cmVJRC4KKyAgICAgICAgKiBr
anMvSlNHbG9iYWxEYXRhLmg6IEFkZGVkIG5ldyBzdHJ1Y3R1cmVzLiBSZW1vdmVkIG51bGxQcm90
b1N0cnVjdHVyZUlELgorCisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRCk6IEFkZGVkLiBSZXR1cm5z
IGEgc3RydWN0dXJlIHdpdGhvdXQKKyAgICAgICAgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNs
b3Qgc2luY2UgdGhpcyBjbGFzcyBvdmVycmlkZXMgZ2V0T3duUHJvcGVydHlTbG90LgorCisgICAg
ICAgICoga2pzL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdEVy
cm9yU3R1Yjo6SlNOb3RBbk9iamVjdEVycm9yU3R1Yik6IFVzZSBhIHN0cnVjdHVyZQorICAgICAg
ICB0aGF0J3MgY3JlYXRlZCBqdXN0IGZvciB0aGlzIGNsYXNzIGluc3RlYWQgb2YgdHJ5aW5nIHRv
IHNoYXJlIGEgc2luZ2xlICJudWxsCisgICAgICAgIHByb3RvdHlwZSIgc3RydWN0dXJlLgorICAg
ICAgICAoSlNDOjpKU05vdEFuT2JqZWN0RXJyb3JTdHViOjppc05vdEFuT2JqZWN0RXJyb3JTdHVi
KTogTWFya2VkIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgdmlydHVhbCBmb3IgY2xhcml0eSBhbmQg
bWFkZSBpdCBwcml2YXRlIHNpbmNlIG5vIG9uZSBzaG91bGQgY2FsbCBpdCBpZiB0aGV5CisgICAg
ICAgIGFscmVhZHkgaGF2ZSBhIHBvaW50ZXIgdG8gdGhpcyBzcGVjaWZpYyB0eXBlLgorICAgICAg
ICAoSlNDOjpKU05vdEFuT2JqZWN0OjpKU05vdEFuT2JqZWN0KTogVXNlIGEgc3RydWN0dXJlIHRo
YXQncyBjcmVhdGVkIGp1c3QKKyAgICAgICAgZm9yIHRoaXMgY2xhc3MgaW5zdGVhZCBvZiB0cnlp
bmcgdG8gc2hhcmUgYSBzaW5nbGUgIm51bGwgcHJvdG90eXBlIiBzdHJ1Y3R1cmUuCisgICAgICAg
IChKU0M6OkpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZUlEKTogQWRkZWQuIFJldHVybnMg
YSBzdHJ1Y3R1cmUgd2l0aG91dAorICAgICAgICBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xv
dCBzaW5jZSB0aGlzIGNsYXNzIG92ZXJyaWRlcyBnZXRPd25Qcm9wZXJ0eVNsb3QuCisKKyAgICAg
ICAgKiBranMvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZUlEKTogQWRkZWQgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOiBBZGRlZC4gVXNlZCBzbyB3
ZSBjYW4gc2hhcmUgY29kZQorICAgICAgICBiZXR3ZWVuIGdldE93blByb3BlcnR5U2xvdCBhbmQg
ZmFzdEdldE93blByb3BlcnR5U2xvdC4KKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdCk6IE1vdmVkIHNvIHRoYXQgZnVuY3Rpb25zIGFyZSBhYm92ZSB0aGUKKyAgICAg
ICAgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLiBNb3ZlZCB0aGUgZ3V0cyBvZiB0aGlzIGZ1bmN0
aW9uIGludG8KKyAgICAgICAgaW5saW5lR2V0T3duUHJvcGVydHlTbG90LgorICAgICAgICAoSlND
OjpKU0NlbGw6OmZhc3RHZXRPd25Qcm9wZXJ0eVNsb3QpOiBBZGRlZC4gQ2hlY2tzIHRoZQorICAg
ICAgICBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCBiaXQgYW5kIGlmIGl0J3Mgc2V0LCBj
YWxscworICAgICAgICBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QsIG90aGVyd2lzZSBjYWxscyBn
ZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNs
b3QpOiBDaGFuZ2VkIHRvIGNhbGwgZmFzdEdldE93blByb3BlcnR5U2xvdC4KKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6Z2V0KTogQ2hhbmdlZCB0byBjYWxsIGZhc3RHZXRPd25Qcm9wZXJ0eVNsb3Qu
CisKKyAgICAgICAgKiBranMvSlNXcmFwcGVyT2JqZWN0Lmg6IE1hZGUgY29uc3RydWN0b3IgcHJv
dGVjdGVkIHRvIGVtcGhhc2l6ZSB0aGF0CisgICAgICAgIHRoaXMgY2xhc3MgaXMgb25seSBhIGJh
c2UgY2xhc3MgYW5kIG5ldmVyIGluc3RhbnRpYXRlZC4KKworICAgICAgICAqIGtqcy9NYXRoT2Jq
ZWN0Lmg6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZUlEKTogQWRk
ZWQuIFJldHVybnMgYSBzdHJ1Y3R1cmUgd2l0aG91dAorICAgICAgICBIYXNTdGFuZGFyZEdldE93
blByb3BlcnR5U2xvdCBzaW5jZSB0aGlzIGNsYXNzIG92ZXJyaWRlcyBnZXRPd25Qcm9wZXJ0eVNs
b3QuCisgICAgICAgICoga2pzL051bWJlckNvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6Ok51
bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6IERpdHRvLgorICAgICAgICAqIGtq
cy9SZWdFeHBDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlSUQpOiBEaXR0by4KKyAgICAgICAgKiBranMvUmVnRXhwT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQpOiBEaXR0by4K
KyAgICAgICAgKiBranMvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVj
dDo6Y3JlYXRlU3RydWN0dXJlSUQpOiBEaXR0by4KKworICAgICAgICAqIGtqcy9UeXBlSW5mby5o
OiBBZGRlZCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCBmbGFnIGFuZAorICAgICAgICBo
YXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCBhY2Nlc3NvciBmdW5jdGlvbi4KKwogMjAwOC0x
MC0yMiAgRGFyaW4gRmlzaGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMzc3ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1
Y3R1cmVJRChKU1ZhbHVlUHRyIHByb3RvKSAKICAgICB7IAotICAgICAgICByZXR1cm4gU3RydWN0
dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0lu
c3RhbmNlKSk7IAorICAgICAgICByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSGFzU3RhbmRhcmRHZXRP
d25Qcm9wZXJ0eVNsb3QpKTsgCiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMzc3ODQpCisrKyBKYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgcHVibGljOgogICAgIC8vIHJlZmFjdG9yIHRoZSBjb2RlIHNvIHRoaXMgb3ZlcnJpZGUg
aXNuJ3QgbmVjZXNzYXJ5CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0
ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgIHsgCi0gICAgICAgIHJldHVybiBT
dHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7IAorICAgICAg
ICByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwg
SGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpKTsgCiAgICAgfQogCiBwcml2YXRlOgpJbmRl
eDogSmF2YVNjcmlwdENvcmUvVk0vRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvVk0vRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDM3Nzg0KQor
KysgSmF2YVNjcmlwdENvcmUvVk0vRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5nJiBzdHJpbmcs
IAogY2xhc3MgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciA6IHB1YmxpYyBKU09iamVjdCB7CiBw
dWJsaWM6CiAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCi0gICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YS0+bnVsbFByb3RvU3RydWN0dXJl
SUQpCisgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YS0+aW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvclN0cnVjdHVyZSkKICAgICB7CiAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9N
YWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAko
cmV2aXNpb24gMzc3ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc4OSw3ICs0Nzg5LDcgQEAgdm9pZCBNYWNoaW5lOjpjdGlfb3BfY3JlYXRl
X2FyZ3VtZW50c19ubwogewogICAgIENUSV9TVEFDS19IQUNLKCk7CiAKLSAgICBBcmd1bWVudHMq
IGFyZ3VtZW50cyA9IG5ldyAoQVJHX2dsb2JhbERhdGEpIEFyZ3VtZW50cyhBUkdfY2FsbEZyYW1l
LCBBcmd1bWVudHM6OkFyZ3VtZW50c05vUGFyYW1ldGVycyk7CisgICAgQXJndW1lbnRzKiBhcmd1
bWVudHMgPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBBcmd1bWVudHMoQVJHX2NhbGxGcmFtZSwgQXJn
dW1lbnRzOjpOb1BhcmFtZXRlcnMpOwogICAgIEFSR19jYWxsRnJhbWUtPnNldENhbGxlZUFyZ3Vt
ZW50cyhhcmd1bWVudHMpOwogICAgIEFSR19jYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpBcmd1bWVu
dHNSZWdpc3Rlcl0gPSBhcmd1bWVudHM7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQXJn
dW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5oCShy
ZXZpc2lvbiAzNzc4NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsMTIgKzUzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
QXJndW1lbnRzIDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0g
QXJndW1lbnRzUGFyYW1ldGVycyB7Ci0gICAgICAgICAgICBBcmd1bWVudHNOb1BhcmFtZXRlcnMK
LSAgICAgICAgfTsKKyAgICAgICAgZW51bSBOb1BhcmFtZXRlcnNUeXBlIHsgTm9QYXJhbWV0ZXJz
IH07CiAKICAgICAgICAgQXJndW1lbnRzKENhbGxGcmFtZSopOwotICAgICAgICBBcmd1bWVudHMo
Q2FsbEZyYW1lKiwgZW51bSBBcmd1bWVudHNQYXJhbWV0ZXJzKTsKKyAgICAgICAgQXJndW1lbnRz
KENhbGxGcmFtZSosIE5vUGFyYW1ldGVyc1R5cGUpOwogICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVu
dHMoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC03NSw2ICs3
MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGQtPnJlZ2lzdGVycyA9ICZhY3Rp
dmF0aW9uLT5yZWdpc3RlckF0KDApOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBl
KSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOyAKKyAgICAgICAgfQorCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rpb24q
JiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYg
YXJnYyk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTE1
MywxMCArMTU2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkLT5vdmVycm9kZUNhbGxl
ZSA9IGZhbHNlOwogICAgIH0KIAotICAgIGlubGluZSBBcmd1bWVudHM6OkFyZ3VtZW50cyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgZW51bSBBcmd1bWVudHNQYXJhbWV0ZXJzKQorICAgIGlubGluZSBB
cmd1bWVudHM6OkFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgTm9QYXJhbWV0ZXJzVHlw
ZSkKICAgICAgICAgOiBKU09iamVjdChjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpCiAgICAgICAgICwgZChuZXcgQXJndW1lbnRzRGF0YSkKICAg
ICB7CisgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5jYWxsZWUoKS0+bV9ib2R5LT5wYXJhbWV0
ZXJDb3VudCgpKTsKKwogICAgICAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSAtIDE7CiAKICAgICAgICAgZC0+bnVtUGFyYW1ldGVycyA9IDA7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9EYXRlUHJvdG90eXBlLmgJKHJldmlzaW9uIDM3Nzg0KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL0RhdGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSkpOworICAgICAgICB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMzc3
ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90
bykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJv
dG8sIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJ
RDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBIYXNTdGFuZGFyZEdldE93blBy
b3BlcnR5U2xvdCkpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL0ludGVybmFsRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAzNzc4NCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJl
SUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgICAgICB7IAotICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVj
dFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCkpOyAKICAgICAgICAgfQog
CiAgICAgcHJvdGVjdGVkOgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBcnJheS5oCShyZXZpc2lvbiAzNzc4NCkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYg
Kzc2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhl
Y1N0YXRlKiwgQXJnTGlzdCYpOwogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlKSk7CisgICAgICAgIH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNDZWxsLmgJKHJldmlzaW9uIDM3Nzg0KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkKiB2cHRyKCkgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPih0aGlzKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gQmFzZSBpbXBsZW1lbnRh
dGlvbiwgYnV0IGZvciBub24tb2JqZWN0IGNsYXNzZXMgaW1wbGVtZW50cyBnZXRQcm9wZXJ0eVNs
b3QuCisgICAgICAgIC8vIEJhc2UgaW1wbGVtZW50YXRpb247IGZvciBub24tb2JqZWN0IGNsYXNz
ZXMgaW1wbGVtZW50cyBnZXRQcm9wZXJ0eVNsb3QuCisgICAgICAgIGJvb2wgZmFzdEdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDM3Nzg0KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwcml2YXRlCiAgICAgICAg
IFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBtX2JvZHk7CiAKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBl
KSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7IAor
ICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KIApJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDM3Nzg0KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAjaW5jbHVk
ZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgogI2luY2x1ZGUgIkpTU3Rh
dGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJNYWNoaW5lLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
LmgiCkBAIC02OCwxMCArNjksMTIgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoYm9vbCBp
c1NoYXJlZAogICAgICwgcmVnRXhwVGFibGUobmV3IEhhc2hUYWJsZShKU0M6OnJlZ0V4cFRhYmxl
KSkKICAgICAsIHJlZ0V4cENvbnN0cnVjdG9yVGFibGUobmV3IEhhc2hUYWJsZShKU0M6OnJlZ0V4
cENvbnN0cnVjdG9yVGFibGUpKQogICAgICwgc3RyaW5nVGFibGUobmV3IEhhc2hUYWJsZShKU0M6
OnN0cmluZ1RhYmxlKSkKLSAgICAsIG51bGxQcm90b1N0cnVjdHVyZUlEKEpTT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmVJRChqc051bGwoKSkpCiAgICAgLCBhY3RpdmF0aW9uU3RydWN0dXJlSUQoSlNB
Y3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmVJRChqc051bGwoKSkpCisgICAgLCBpbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlKEpTT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRChqc051
bGwoKSkpCiAgICAgLCBzdGF0aWNTY29wZVN0cnVjdHVyZUlEKEpTU3RhdGljU2NvcGVPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKSkKICAgICAsIHN0cmluZ1N0cnVjdHVyZUlEKEpT
U3RyaW5nOjpjcmVhdGVTdHJ1Y3R1cmVJRChqc051bGwoKSkpCisgICAgLCBub3RBbk9iamVjdEVy
cm9yU3R1YlN0cnVjdHVyZShKU05vdEFuT2JqZWN0RXJyb3JTdHViOjpjcmVhdGVTdHJ1Y3R1cmVJ
RChqc051bGwoKSkpCisgICAgLCBub3RBbk9iamVjdFN0cnVjdHVyZShKU05vdEFuT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmVJRChqc051bGwoKSkpCiAgICAgLCBudW1iZXJTdHJ1Y3R1cmVJRChKU051
bWJlckNlbGw6OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKSkKICAgICAsIGlkZW50aWZpZXJU
YWJsZShjcmVhdGVJZGVudGlmaWVyVGFibGUoKSkKICAgICAsIHByb3BlcnR5TmFtZXMobmV3IENv
bW1vbklkZW50aWZpZXJzKHRoaXMpKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFs
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbERhdGEuaAko
cmV2aXNpb24gMzc3ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRhYmxlOwogICAgICAgICBjb25zdCBI
YXNoVGFibGUqIHN0cmluZ1RhYmxlOwogICAgICAgICAKLSAgICAgICAgUmVmUHRyPFN0cnVjdHVy
ZUlEPiBudWxsUHJvdG9TdHJ1Y3R1cmVJRDsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBh
Y3RpdmF0aW9uU3RydWN0dXJlSUQ7CisgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gaW50ZXJy
dXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZUlE
PiBzdGF0aWNTY29wZVN0cnVjdHVyZUlEOwogICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IHN0
cmluZ1N0cnVjdHVyZUlEOworICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IG5vdEFuT2JqZWN0
RXJyb3JTdHViU3RydWN0dXJlOworICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IG5vdEFuT2Jq
ZWN0U3RydWN0dXJlOwogICAgICAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IG51bWJlclN0cnVjdHVy
ZUlEOwogCiAgICAgICAgIElkZW50aWZpZXJUYWJsZSogaWRlbnRpZmllclRhYmxlOwpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDM3Nzg0KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw2ICsy
NTEsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSgpIHsgcmV0dXJuIGQoKS0+Z2xvYmFsRGF0YS5nZXQoKTsgfQogICAgICAgICBKU0dsb2JhbE9i
amVjdERhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdERh
dGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CisgICAgICAgIH0KKwogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgc3RydWN0IEdsb2JhbFByb3BlcnR5SW5mbyB7CiAgICAgICAgICAgICBHbG9iYWxQcm9w
ZXJ0eUluZm8oY29uc3QgSWRlbnRpZmllciYgaSwgSlNWYWx1ZVB0ciB2LCB1bnNpZ25lZCBhKQpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTTm90QW5PYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvSlNOb3RBbk9iamVjdC5oCShyZXZpc2lvbiAzNzc4NCkKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEz
ICszNiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU05vdEFuT2JqZWN0RXJyb3JT
dHViIDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTTm90QW5PYmpl
Y3RFcnJvclN0dWIoRXhlY1N0YXRlKiBleGVjLCBib29sIGlzTnVsbCkKLSAgICAgICAgICAgIDog
SlNPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLm51bGxQcm90b1N0cnVjdHVyZUlEKQorICAgICAg
ICAgICAgOiBKU09iamVjdChleGVjLT5nbG9iYWxEYXRhKCkubm90QW5PYmplY3RFcnJvclN0dWJT
dHJ1Y3R1cmUpCiAgICAgICAgICAgICAsIG1faXNOdWxsKGlzTnVsbCkKICAgICAgICAgewogICAg
ICAgICB9CisKICAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsg
fQotICAgICAgICBib29sIGlzTm90QW5PYmplY3RFcnJvclN0dWIoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisKICAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNOb3RBbk9iamVj
dEVycm9yU3R1YigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAgICAgICBib29sIG1faXNO
dWxsOwogICAgIH07CiAgICAgCkBAIC01MiwxMSArNTUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgSlNOb3RBbk9iamVjdCA6IHB1YmxpYyBKU09iamVjdCB7CiAgICAgcHVibGljOgog
ICAgICAgICBKU05vdEFuT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNOb3RBbk9iamVjdEVycm9y
U3R1YiogZXhjZXB0aW9uKQotICAgICAgICAgICAgOiBKU09iamVjdChleGVjLT5nbG9iYWxEYXRh
KCkubnVsbFByb3RvU3RydWN0dXJlSUQpCisgICAgICAgICAgICA6IEpTT2JqZWN0KGV4ZWMtPmds
b2JhbERhdGEoKS5ub3RBbk9iamVjdFN0cnVjdHVyZSkKICAgICAgICAgICAgICwgbV9leGNlcHRp
b24oZXhjZXB0aW9uKQogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOworICAgICAgICB9CisKICAgICAgcHJpdmF0
ZToKICAgICAgICAgLy8gSlNWYWx1ZSBtZXRob2RzCiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0
ciB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9KU09iamVjdC5oCShyZXZpc2lvbiAzNzc4NCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplcjsKICAgICAgICAgZnJpZW5k
IGNsYXNzIENUSTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpTQ2VsbDsKIAogICAgIHB1YmxpYzoK
ICAgICAgICAgZXhwbGljaXQgSlNPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4pOwpAQCAt
MTgzLDEyICsxODQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgaW5saW5lU3RvcmFnZUNhcGFjaXR5ID0gMjsKICAgICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBub25JbmxpbmVCYXNlU3RvcmFnZUNhcGFjaXR5ID0gMTY7CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJv
dG8pIHsgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5
cGUpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3Ry
dWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
SGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpKTsKKyAgICAgICAgfQogCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBib29sIGdldE93blByb3BlcnR5U2xvdEZvcldyaXRlKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUp
OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKKwogICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBT
dHJ1Y3R1cmVJRCogY3JlYXRlSW5oZXJpdG9ySUQoKTsKIApAQCAtMjY2LDYyICsyNzIsMjUgQEAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNPYmplY3QoY29uc3QgQ2xhcwogICAgIHJldHVybiAhSlNJ
bW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkgJiYgYXNDZWxsKCktPmlzT2JqZWN0KGNs
YXNzSW5mbyk7CiB9CiAKLWlubGluZSBKU1ZhbHVlUHRyIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CitBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ewotICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwotICAgIGlmIChjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQot
ICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIAot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1pbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVj
dDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAotewot
ICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwotICAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0
Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAg
ICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwotCi0gICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLS8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBh
IGZ1bmN0aW9uIHRoaXMgbGFyZ2UgYnV0IGl0IG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UKLS8vIHNp
bmNlIHRoaXMgaXMgZnVuY3Rpb24gdmVyeSBob3QgaW4gdmFyaWFibGUgbG9va3VwCi1pbmxpbmUg
Ym9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHRoaXM7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKG9iamVj
dC0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IG9iamVj
dC0+cHJvdG90eXBlKCk7Ci0gICAgICAgIGlmICghcHJvdG90eXBlLT5pc09iamVjdCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3Rv
dHlwZSk7CisgICAgaWYgKEpTVmFsdWVQdHIqIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24o
cHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmVJRC0+aGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcygpICYmIGxvY2F0aW9uWzBdLT5pc0dldHRlclNldHRlcigpKQorICAgICAg
ICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBsb2NhdGlvbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsIGxvY2F0aW9uLCBvZmZzZXRG
b3JMb2NhdGlvbihsb2NhdGlvbikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci19CiAK
LWlubGluZSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU09iamVj
dCogb2JqZWN0ID0gdGhpczsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChvYmpl
Y3QtPmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBvYmpl
Y3QtPnByb3RvdHlwZSgpOwotICAgICAgICBpZiAoIXByb3RvdHlwZS0+aXNPYmplY3QoKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7
CisgICAgLy8gbm9uLXN0YW5kYXJkIE5ldHNjYXBlIGV4dGVuc2lvbgorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bykgeworICAgICAg
ICBzbG90LnNldFZhbHVlKHByb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxp
bmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwK
LS8vIGJ1dCBpdCBtYWtlcyBhIGJpZyBkaWZmZXJlbmNlIHRvIHByb3BlcnR5IGxvb2t1cCB0aGF0
IGRlcml2ZWQgY2xhc3NlcyBjYW4gaW5saW5lIHRoZWlyCi0vLyBiYXNlIGNsYXNzIGNhbGwgdG8g
dGhpcy4KIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90Rm9y
V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKQogewogICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7CkBAIC0zNTEsMjEgKzMyMCw2MCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlCiAvLyBiYXNlIGNsYXNzIGNhbGwgdG8gdGhpcy4KIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0g
ICAgaWYgKEpTVmFsdWVQdHIqIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlO
YW1lKSkgewotICAgICAgICBpZiAobV9zdHJ1Y3R1cmVJRC0+aGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcygpICYmIGxvY2F0aW9uWzBdLT5pc0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgZmls
bEdldHRlclByb3BlcnR5U2xvdChzbG90LCBsb2NhdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsIGxvY2F0aW9uLCBvZmZzZXRGb3JMb2NhdGlv
bihsb2NhdGlvbikpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW5saW5lR2V0
T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBKU0NlbGw6OmZhc3RHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBpZiAoc3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5oYXNTdGFuZGFyZEdldE93blByb3Bl
cnR5U2xvdCgpKQorICAgICAgICByZXR1cm4gYXNPYmplY3QodGhpcyktPmlubGluZUdldE93blBy
b3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBnZXRPd25Q
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworLy8gSXQgbWF5IHNl
ZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSBidXQgaXQgbWFrZXMgYSBi
aWcgZGlmZmVyZW5jZQorLy8gc2luY2UgdGhpcyBpcyBmdW5jdGlvbiB2ZXJ5IGhvdCBpbiB2YXJp
YWJsZSBsb29rdXAKK2lubGluZSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICBpZiAob2JqZWN0LT5mYXN0R2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpOworICAgICAgICBpZiAoIXByb3Rv
dHlwZS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2Jq
ZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKICAgICB9Cit9CiAKLSAgICAvLyBub24tc3RhbmRh
cmQgTmV0c2NhcGUgZXh0ZW5zaW9uCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUocHJv
dG90eXBlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKK2lubGluZSBib29sIEpTT2JqZWN0Ojpn
ZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAob2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7CisgICAgICAgIGlm
ICghcHJvdG90eXBlLT5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOwogICAgIH0KK30KIAotICAgIHJldHVy
biBmYWxzZTsKK2lubGluZSBKU1ZhbHVlUHRyIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgUHJvcGVydHlT
bG90IHNsb3QodGhpcyk7CisgICAgaWYgKGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiBz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgCisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Cit9CisKK2lubGluZSBKU1ZhbHVlUHRyIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgUHJvcGVydHlTbG90
IHNsb3QodGhpcyk7CisgICAgaWYgKGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiBzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHIpCkBAIC00NjEs
NyArNDY5LDcgQEAgaW5saW5lIEpTVmFsdWVQdHIgSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZQogICAg
IH0KICAgICBKU0NlbGwqIGNlbGwgPSBhc0NlbGwoKTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICBpZiAoY2VsbC0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCkpCisgICAgICAgIGlmIChjZWxsLT5mYXN0R2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICBBU1NFUlQoY2VsbC0+aXNPYmplY3QoKSk7CiAgICAgICAg
IEpTVmFsdWVQdHIgcHJvdG90eXBlID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+cHJv
dG90eXBlKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNXcmFwcGVyT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lv
biAzNzc4NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU1dyYXBwZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksOSArMjksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gVGhpcyBj
bGFzcyBpcyB1c2VkIGFzIGEgYmFzZSBmb3IgY2xhc3NlcyBzdWNoIGFzIFN0cmluZywKICAgICAv
LyBOdW1iZXIsIEJvb2xlYW4gYW5kIERhdGUgd2hpY2ggYXJlIHdyYXBwZXJzIGZvciBwcmltaXRp
dmUgdHlwZXMuCiAgICAgY2xhc3MgSlNXcmFwcGVyT2JqZWN0IDogcHVibGljIEpTT2JqZWN0IHsK
LSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBleHBsaWNpdCBKU1dyYXBwZXJP
YmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4pOwotICAgICAgICAKKworICAgIHB1YmxpYzoK
ICAgICAgICAgSlNWYWx1ZVB0ciBpbnRlcm5hbFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbnRl
cm5hbFZhbHVlOyB9CiAgICAgICAgIHZvaWQgc2V0SW50ZXJuYWxWYWx1ZShKU1ZhbHVlUHRyKTsK
ICAgICAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvTWF0aE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9NYXRoT2JqZWN0LmgJKHJldmlzaW9uIDM3Nzg0KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL01hdGhPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzMsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gaW5mbzsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRl
U3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSkpOworICAgICAgICB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvTnVtYmVyQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvTnVtYmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzc3ODQpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvTnVtYmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTEgKzMxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgTnVtYmVy
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIE51bWJlclBy
b3RvdHlwZSopOwogCi0gICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIEpTVmFsdWVQdHIgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUq
LCBpbnQgdG9rZW4pIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5m
bzsKIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0
dXJlSUQoSlNWYWx1ZVB0ciBwcm90bykgCisgICAgICAgIHsgCisgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50
c0hhc0luc3RhbmNlKSk7IAorICAgICAgICB9CisKICAgICAgICAgZW51bSB7IE5hTlZhbHVlLCBO
ZWdJbmZpbml0eSwgUG9zSW5maW5pdHksIE1heFZhbHVlLCBNaW5WYWx1ZSB9OwogCiAgICAgcHJp
dmF0ZToKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBDb25zdHJ1Y3Rvci5oCShyZXZpc2lv
biAzNzc4NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0
dXJlSUQ+LCBSZWdFeHBQcm90b3R5cGUqKTsKIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7CisgICAgICAgIH0K
KwogICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdF
eHBPYmplY3QuaAkocmV2aXNpb24gMzc3ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhw
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChK
U1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CisgICAgICAg
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbWF0Y2goRXhlY1N0YXRlKiwgY29uc3Qg
QXJnTGlzdCYpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvU3RyaW5nT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAz
Nzc4NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNTdHJpbmcq
IGludGVybmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBhc1N0cmluZyhKU1dyYXBwZXJPYmplY3Q6
OmludGVybmFsVmFsdWUoKSk7fQogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlKSk7CisgICAgICAgIH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgU3Ry
aW5nT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBKU1N0cmluZyopOwogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvVHlwZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvVHlwZUluZm8uaAkocmV2aXNpb24gMzc3ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
VHlwZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDEyIEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi0gICAgLy8gV2ViQ29yZSB1c2VzIHRoaXMgdG8gbWFrZSBkb2N1bWVudC5hbGwg
YW5kIHN0eWxlLmZpbHRlciB1bmRldGVjdGFibGUuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAxOworICAgICAgICAvLyBXZWJDb3JlIHVzZXMgTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCB0byBtYWtlIGRvY3VtZW50LmFsbCBhbmQgc3R5bGUuZmlsdGVy
IHVuZGV0ZWN0YWJsZS4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1wbGVtZW50c0hhc0lu
c3RhbmNlID0gMSA8PCAxOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNIYXNJ
bnN0YW5jZSA9IDEgPDwgMjsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTmVlZHNUaGlzQ29u
dmVyc2lvbiA9IDEgPDwgMzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSGFzU3RhbmRhcmRH
ZXRPd25Qcm9wZXJ0eVNsb3QgPSAxIDw8IDQ7CiAKICAgICBjbGFzcyBUeXBlSW5mbyB7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBDVEk7CkBAIC00OCw4ICs0OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBpbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2Zs
YWdzICYgSW1wbGVtZW50c0hhc0luc3RhbmNlOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzSGFz
SW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgT3ZlcnJpZGVzSGFzSW5zdGFuY2U7
IH0KICAgICAgICAgYm9vbCBuZWVkc1RoaXNDb252ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
bGFncyAmIE5lZWRzVGhpc0NvbnZlcnNpb247IH0KKyAgICAgICAgYm9vbCBoYXNTdGFuZGFyZEdl
dE93blByb3BlcnR5U2xvdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBIYXNTdGFuZGFyZEdl
dE93blByb3BlcnR5U2xvdDsgfQogCiAgICAgICAgIHVuc2lnbmVkIGZsYWdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9mbGFnczsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNUeXBlIG1fdHlwZTsK
ICAgICAgICAgdW5zaWduZWQgbV9mbGFnczsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3Nzg0
KQorKysgSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzYgQEAKKzIwMDgtMTAtMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NAorICAgICAgICAgIEJ1ZyAyMTI5
NDogRGV2aXJ0dWFsaXplIGdldE93blByb3BlcnR5U2xvdCgpCisKKyAgICAgICAgKiBKU1J1bi5j
cHA6CisgICAgICAgIChKU0dsdWVHbG9iYWxPYmplY3Q6OkpTR2x1ZUdsb2JhbE9iamVjdCk6IE1v
dmVkIGNvbnN0cnVjdG9yIGhlcmUuCisgICAgICAgIFNldCB1cCBmbGFncyBpbiBpdHMgbmV3IGxv
Y2F0aW9uIGluIGdsb2JhbCBvYmplY3QgZGF0YSwgYW5kIHNldCB1cAorICAgICAgICBhIHN0cnVj
dHVyZSBmb3IgVXNlck9iamVjdEltcCB0b28uCisgICAgICAgIChKU1J1bjo6SlNSdW4pOiBBZGRl
ZCBjb2RlIHRvIGdpdmUgdGhlIEpTR2x1ZUdsb2JhbE9iamVjdCBpdHMgb3duIHVuaXF1ZQorICAg
ICAgICBzdHJ1Y3R1cmUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBkZWZhdWx0IG9uZSBmcm9tIEpT
R2xvYmFsT2JqZWN0LgorCisgICAgICAgICogSlNSdW4uaDogTWFkZSBKU0dsdWVHbG9iYWxPYmpl
Y3QgdGFrZSBhIHN0cnVjdHVyZSBJRC4gQWxzbyBtb3ZlZAorICAgICAgICB0aGUgZGF0YSBpbnRv
IGEgc2VwYXJhdGUgZGF0YSBvYmplY3QuIEFuZCBhZGRlZCB1c2VyT2JqZWN0U3RydWN0dXJlLAor
ICAgICAgICBhIFN0cnVjdHVyZSB0byBiZSB1c2VkIGJ5IFVzZXJPYmplY3RJbXAuCisKKyAgICAg
ICAgKiBKU1V0aWxzLmNwcDogUmVtb3ZlZCB1bnVzZWQgc2hhcmVkR2xvYmFsRGF0YSBnbG9iYWwu
CisgICAgICAgIChKU09iamVjdEtKU1ZhbHVlKTogUGFzcyBTdHJ1Y3R1cmUgaW4gd2hlbiBjcmVh
dGluZyBVc2VyT2JqZWN0SW1wLgorICAgICAgICAodW5wcm90ZWN0R2xvYmFsT2JqZWN0KTogVXNl
IEpTR2x1ZUdMb2JhbE9iamVjdCB0eXBlIHNwZWNpZmljYWxseS4KKyAgICAgICAgKGluaXRpYWxp
emVHbG9iYWxPYmplY3RLZXkpOiBSZW1vdmVkIGNvZGUgdG8gc2V0IHVwIHVudXNlZCBzaGFyZWRH
bG9iYWxEYXRhLgorICAgICAgICAoZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KTogQWRkZWQuIFNoYXJl
ZCBieSBKU09iamVjdEtKU1ZhbHVlIGFuZAorICAgICAgICBnZXRUaHJlYWRHbG9iYWxFeGVjU3Rh
dGUuIEFsc28gbm93IHBhc3NlcyBpbiBhIHN0cnVjdHVyZSBJRCB3aGVuIGNyZWF0aW5nCisgICAg
ICAgIHRoZSBnbG9iYWwgb2JqZWN0LgorICAgICAgICAoZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRl
KTogQ2hhbmdlZCB0byBjYWxsIGdldFRocmVhZEdsb2JhbE9iamVjdC4KKworICAgICAgICAqIFVz
ZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNlck9iamVjdEltcDo6VXNlck9iamVjdEltcCk6
IENoYW5nZWQgdG8gdGFrZSBhIHN0cnVjdHVyZS4KKyAgICAgICAgKiBVc2VyT2JqZWN0SW1wLmg6
CisgICAgICAgIChVc2VyT2JqZWN0SW1wOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6IEFkZGVkLiBSZXR1
cm5zIGEgc3RydWN0dXJlIHdpdGhvdXQKKyAgICAgICAgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0
eVNsb3Qgc2luY2UgdGhpcyBjbGFzcyBvdmVycmlkZXMgZ2V0T3duUHJvcGVydHlTbG90LgorCiAy
MDA4LTEwLTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQ2FtZXJvbiBad2FyaWNoLgpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gMzc3ODQpCisr
KyBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNSdW4uaCIKIAot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlICJVc2VyT2Jq
ZWN0SW1wLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU291cmNlUmFuZ2UuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9jb21wbGV0aW9uLmg+CisKK0pTR2x1ZUdsb2JhbE9iamVjdDo6
SlNHbHVlR2xvYmFsT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgSlNG
bGFncyBmbGFncykKKyAgICA6IEpTR2xvYmFsT2JqZWN0KHN0cnVjdHVyZSwgbmV3IERhdGEsIHRo
aXMpCit7CisgICAgZCgpLT5mbGFncyA9IGZsYWdzOworICAgIGQoKS0+dXNlck9iamVjdFN0cnVj
dHVyZSA9IFVzZXJPYmplY3RJbXA6OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKTsKK30KIAog
SlNSdW46OkpTUnVuKENGU3RyaW5nUmVmIHNvdXJjZSwgSlNGbGFncyBpbkZsYWdzKQogICAgIDog
ICBKU0Jhc2Uoa0pTUnVuVHlwZUlEKSwKICAgICAgICAgZlNvdXJjZShDRlN0cmluZ1RvVVN0cmlu
Zyhzb3VyY2UpKSwKLSAgICAgICAgZkdsb2JhbE9iamVjdChuZXcgKCZnZXRUaHJlYWRHbG9iYWxF
eGVjU3RhdGUoKS0+Z2xvYmFsRGF0YSgpKSBKU0dsdWVHbG9iYWxPYmplY3QoaW5GbGFncykpLAor
ICAgICAgICBmR2xvYmFsT2JqZWN0KG5ldyAoJmdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpLT5n
bG9iYWxEYXRhKCkpIEpTR2x1ZUdsb2JhbE9iamVjdChKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKSwgaW5GbGFncykpLAogICAgICAgICBmRmxhZ3MoaW5GbGFn
cykKIHsKIH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTUnVuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdEdsdWUvSlNSdW4uaAkocmV2aXNpb24gMzc3ODQpCisrKyBKYXZhU2NyaXB0R2x1ZS9K
U1J1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNiArMzQsMTggQEAKIAogY2xhc3MgSlNHbHVl
R2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEpTR2x1ZUdsb2JhbE9iamVjdChKU0ZsYWdzIGZsYWdzID0ga0pTRmxhZ05vbmUpCi0gICAg
ICAgICAgICA6IEpTR2xvYmFsT2JqZWN0KCkKLSAgICAgICAgICAgICwgZkpTRmxhZ3MoZmxhZ3Mp
Ci0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICBKU0dsdWVHbG9iYWxPYmplY3QoUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRD4sIEpTRmxhZ3MgPSBrSlNGbGFnTm9uZSk7CiAKLSAgICAgICAgSlNG
bGFncyBGbGFncygpIGNvbnN0IHsgcmV0dXJuIGZKU0ZsYWdzOyB9CisgICAgICAgIEpTRmxhZ3Mg
RmxhZ3MoKSBjb25zdCB7IHJldHVybiBkKCktPmZsYWdzOyB9CisgICAgICAgIFN0cnVjdHVyZUlE
KiB1c2VyT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT51c2VyT2JqZWN0U3Ry
dWN0dXJlLmdldCgpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU0ZsYWdzIGZKU0ZsYWdz
OworICAgICAgICBzdHJ1Y3QgRGF0YSA6IEpTR2xvYmFsT2JqZWN0RGF0YSB7CisgICAgICAgICAg
ICBSZWZQdHI8U3RydWN0dXJlSUQ+IHVzZXJPYmplY3RTdHJ1Y3R1cmU7CisgICAgICAgICAgICBK
U0ZsYWdzIGZsYWdzOworICAgICAgICB9OworCisgICAgICAgIERhdGEqIGQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxEYXRhKj4oSlNHbG9iYWxPYmplY3Q6OmQoKSk7IH0KIH07CiAKIGNs
YXNzIEpTUnVuIDogcHVibGljIEpTQmFzZSB7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1V0aWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNwcAkocmV2aXNpb24g
Mzc3ODQpCisrKyBKYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBPYmplY3RJbXBMaXN0IHsKIH07CiAKIHN0YXRp
YyBDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsdWVQdHIgaW5WYWx1ZSwg
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXBMaXN0KiBpbkltcHMpOwotCitzdGF0aWMgSlNHbHVl
R2xvYmFsT2JqZWN0KiBnZXRUaHJlYWRHbG9iYWxPYmplY3QoKTsKIAogLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogLy8gQ0ZTdHJpbmdUb1VTdHJpbmcKQEAgLTE4Myw3ICsxODMsNyBAQCBKU1ZhbHVlUHRy
IEpTT2JqZWN0S0pTVmFsdWUoSlNVc2VyT2JqZWN0CiAgICAgICAgIGlmICghaGFuZGxlZCkKICAg
ICAgICAgewogICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2V0VGhyZWFkR2xvYmFsRXhl
Y1N0YXRlKCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBuZXcgKGV4ZWMpIFVzZXJPYmplY3RJbXAo
ZXhlYywgcHRyKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAoZXhlYykgVXNlck9iamVjdElt
cChnZXRUaHJlYWRHbG9iYWxPYmplY3QoKS0+dXNlck9iamVjdFN0cnVjdHVyZSgpLCBwdHIpOwog
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zOTEsMzYgKzM5MSwzNyBA
QCBDRlR5cGVSZWYgR2V0Q0ZOdWxsKHZvaWQpCiAKIHN0YXRpYyBwdGhyZWFkX2tleV90IGdsb2Jh
bE9iamVjdEtleTsKIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBnbG9iYWxPYmplY3RLZXlPbmNlID0g
UFRIUkVBRF9PTkNFX0lOSVQ7Ci1KU0dsb2JhbERhdGEqIHNoYXJlZEdsb2JhbERhdGE7CiAKIHN0
YXRpYyB2b2lkIHVucHJvdGVjdEdsb2JhbE9iamVjdCh2b2lkKiBkYXRhKSAKIHsKICAgICBKU0xv
Y2sgbG9jayh0cnVlKTsKLSAgICBnY1VucHJvdGVjdChzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVj
dCo+KGRhdGEpKTsKKyAgICBnY1VucHJvdGVjdChzdGF0aWNfY2FzdDxKU0dsdWVHbG9iYWxPYmpl
Y3QqPihkYXRhKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxPYmplY3RLZXko
KQogewotICAgIHNoYXJlZEdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZSgpLnJlbGVh
c2VSZWYoKTsKICAgICBwdGhyZWFkX2tleV9jcmVhdGUoJmdsb2JhbE9iamVjdEtleSwgdW5wcm90
ZWN0R2xvYmFsT2JqZWN0KTsKIH0KIAotRXhlY1N0YXRlKiBnZXRUaHJlYWRHbG9iYWxFeGVjU3Rh
dGUoKQorc3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KCkK
IHsKICAgICBwdGhyZWFkX29uY2UoJmdsb2JhbE9iamVjdEtleU9uY2UsIGluaXRpYWxpemVHbG9i
YWxPYmplY3RLZXkpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU0dsb2JhbE9iamVjdCo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoZ2xvYmFsT2JqZWN0S2V5
KSk7CisgICAgSlNHbHVlR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxK
U0dsdWVHbG9iYWxPYmplY3QqPihwdGhyZWFkX2dldHNwZWNpZmljKGdsb2JhbE9iamVjdEtleSkp
OwogICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+
IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZSgpOwotICAgICAgICBnbG9iYWxPYmpl
Y3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTR2x1ZUdsb2JhbE9iamVjdDsKKyAgICAgICAg
Z2xvYmFsT2JqZWN0ID0gbmV3IChnbG9iYWxEYXRhLmdldCgpKSBKU0dsdWVHbG9iYWxPYmplY3Qo
SlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRChqc051bGwoKSkpOwogICAgICAg
ICBnY1Byb3RlY3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhn
bG9iYWxPYmplY3RLZXksIGdsb2JhbE9iamVjdCk7CiAgICAgfQotICAgIAotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIHJldHVybiBnbG9iYWxP
YmplY3Q7Cit9CisKK0V4ZWNTdGF0ZSogZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCkKK3sKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnZXRUaHJlYWRHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwogCiAgICAgLy8gRGlzY2FyZCBleGNlcHRpb25zIC0tIG90aGVyd2lzZSBhbiBleGNlcHRpb24g
d291bGQgZm9yZXN0YWxsIEpTIAogICAgIC8vIGV2YWx1YXRpb24gdGhyb3VnaG91dCB0aGUgdGhy
ZWFkCiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gZXhlYzsKIH0KLQpJ
bmRleDogSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHJldmlzaW9uIDM3Nzg0KQorKysgSmF2YVNj
cmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw4
ICszNCw4IEBACiAKIGNvbnN0IENsYXNzSW5mbyBVc2VyT2JqZWN0SW1wOjppbmZvID0geyAiVXNl
ck9iamVjdCIsIDAsIDAsIDAgfTsKIAotVXNlck9iamVjdEltcDo6VXNlck9iamVjdEltcChFeGVj
U3RhdGUqIGV4ZWMsIEpTVXNlck9iamVjdCogdXNlck9iamVjdCkKLSAgICA6IEpTT2JqZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKS5udWxsUHJvdG9TdHJ1Y3R1cmVJRCkKK1VzZXJPYmplY3RJbXA6OlVz
ZXJPYmplY3RJbXAoUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBKU1VzZXJPYmpl
Y3QqIHVzZXJPYmplY3QpCisgICAgOiBKU09iamVjdChzdHJ1Y3R1cmUpCiAgICAgLCBmSlNVc2Vy
T2JqZWN0KChKU1VzZXJPYmplY3QqKXVzZXJPYmplY3QtPlJldGFpbigpKQogewogfQpJbmRleDog
SmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRH
bHVlL1VzZXJPYmplY3RJbXAuaAkocmV2aXNpb24gMzc3ODQpCisrKyBKYXZhU2NyaXB0R2x1ZS9V
c2VyT2JqZWN0SW1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTAgKzM0LDkgQEAK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVHlwZS5o
PgogCi1jbGFzcyBVc2VyT2JqZWN0SW1wIDogcHVibGljIEpTT2JqZWN0Ci17CitjbGFzcyBVc2Vy
T2JqZWN0SW1wIDogcHVibGljIEpTT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBVc2VyT2JqZWN0SW1w
KEV4ZWNTdGF0ZSogZXhlYywgSlNVc2VyT2JqZWN0KiB1c2VyT2JqZWN0KTsKKyAgICBVc2VyT2Jq
ZWN0SW1wKFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBKU1VzZXJPYmplY3QqKTsKICAgICB2aXJ0
dWFsIH5Vc2VyT2JqZWN0SW1wKCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xh
c3NJbmZvKCkgY29uc3Q7CkBAIC02MCw2ICs1OSwxMSBAQCBwdWJsaWM6CiAKICAgICBKU1VzZXJP
YmplY3QgKkdldEpTVXNlck9iamVjdCgpIGNvbnN0OwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlUHRy
IHVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3Nzg0KQorKysgV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAwOC0xMC0yMiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgLSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMjk0CisgICAgICAgICAgQnVnIDIxMjk0OiBEZXZpcnR1YWxpemUgZ2V0
T3duUHJvcGVydHlTbG90KCkKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hl
bGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVy
ZUlEKTogQWRkZWQuIFJldHVybnMgYSBzdHJ1Y3R1cmUgd2l0aG91dAorICAgICAgICBIYXNTdGFu
ZGFyZEdldE93blByb3BlcnR5U2xvdCBzaW5jZSB0aGlzIGNsYXNzIG92ZXJyaWRlcyBnZXRPd25Q
cm9wZXJ0eVNsb3QuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNr
V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBl
cjo6d3JhcCk6IENoYW5nZSB0byB1c2UgYSB1bmlxdWUgc3RydWN0dXJlCisgICAgICAgIGZvciB0
aGlzIGNsYXNzIHJhdGhlciB0aGFuIHNoYXJpbmcgbnVsbFByb3RvU3RydWN0dXJlSUQsIHdoaWNo
IG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXND
b2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmVJRCk6IEFkZGVkLiBSZXR1cm5zIGEgc3RydWN0dXJlIHdpdGhvdXQKKyAg
ICAgICAgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3Qgc2luY2UgdGhpcyBjbGFzcyBvdmVy
cmlkZXMgZ2V0T3duUHJvcGVydHlTbG90LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUkdCQ29s
b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUkdCQ29sb3I6OmNyZWF0ZVN0cnVjdHVyZUlEKTog
RGl0dG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTog
QWRkZWQgY3JlYXRlU3RydWN0dXJlSUQgZnVuY3Rpb25zIGZvciB0aGUgd3JhcHBlcnMsCisgICAg
ICAgIGNvbnN0cnVjdG9ycywgYW5kIHByb3RvdHlwZXMgaW4gYW55IGNhc2Ugd2hlcmUgdGhleSBv
dmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNsb3QsIHdpdGhvdXQKKyAgICAgICAgSGFzU3RhbmRhcmRH
ZXRPd25Qcm9wZXJ0eVNsb3QuCisKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
aDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxsYmFja09iamVjdEltcDo6Y3JlYXRl
U3RydWN0dXJlSUQpOiBBZGRlZC4gUmV0dXJucyBhIHN0cnVjdHVyZQorICAgICAgICB3aXRob3V0
IEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90IHNpbmNlIHRoaXMgY2xhc3Mgb3ZlcnJpZGVz
IGdldE93blByb3BlcnR5U2xvdC4KKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcnVudGltZS5oOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmVJ
RCk6IERpdHRvLgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAgIChK
U0M6OlJ1bnRpbWVBcnJheTo6Y3JlYXRlU3RydWN0dXJlSUQpOiBEaXR0by4KKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9tZXRob2QuaDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6Y3Jl
YXRlU3RydWN0dXJlSUQpOiBEaXR0by4KKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdEltcDo6Y3JlYXRlU3RydWN0dXJlSUQpOiBE
aXR0by4KKwogMjAwOC0xMC0yMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dTaGVsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dTaGVsbC5oCShyZXZpc2lvbiAzNzc4NCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dTaGVsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCk7CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4gY3JlYXRl
U3RydWN0dXJlSUQoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSkgCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSkpOyAKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKICAgICAgICAgdmlydHVhbCBKU0M6OlVTdHJpbmcg
Y2xhc3NOYW1lKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9y
Q2FsbGJhY2tXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcAkocmV2aXNpb24gMzc3ODQpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjAsOCArNjAsMTAgQEAgSlNWYWx1ZVB0ciBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBl
cjo6dwogICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0gdW53cmFwcGVkT2JqZWN0LT5wcm90b3R5
cGUoKTsKICAgICBBU1NFUlQocHJvdG90eXBlLT5pc051bGwoKSB8fCBwcm90b3R5cGUtPmlzT2Jq
ZWN0KCkpOwogCi0gICAgaWYgKHByb3RvdHlwZS0+aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBu
ZXcgKHVud3JhcHBlZEV4ZWMpIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKHVud3JhcHBlZEV4
ZWMsIHVud3JhcHBlZE9iamVjdCwgdW53cmFwcGVkRXhlYy0+Z2xvYmFsRGF0YSgpLm51bGxQcm90
b1N0cnVjdHVyZUlEKTsKKyAgICBpZiAocHJvdG90eXBlLT5pc051bGwoKSkgeworICAgICAgICBz
dGF0aWMgU3RydWN0dXJlSUQqIHN0cnVjdHVyZUlEID0gSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBw
ZXI6OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKS5yZWxlYXNlUmVmKCk7CisgICAgICAgIHJl
dHVybiBuZXcgKHVud3JhcHBlZEV4ZWMpIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKHVud3Jh
cHBlZEV4ZWMsIHVud3JhcHBlZE9iamVjdCwgc3RydWN0dXJlSUQpOworICAgIH0KICAgICByZXR1
cm4gbmV3ICh1bndyYXBwZWRFeGVjKSBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcih1bndyYXBw
ZWRFeGVjLCB1bndyYXBwZWRPYmplY3QsIGFzT2JqZWN0KHdyYXAodW53cmFwcGVkRXhlYywgcHJv
dG90eXBlKSktPmluaGVyaXRvcklEKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMzc3ODQpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNiArNDksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgICAgIH0K
IAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1
Y3R1cmVJRChKU0M6OkpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUpKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZVB0ciBsZW5ndGhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgICAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlUHRyIGluZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNSR0JDb2xvci5oCShyZXZpc2lvbiAzNzc4NCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNSR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5vYmplY3RQcm90b3R5cGUoKTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTQzo6SlNWYWx1ZVB0
ciBwcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZUlEOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSkpOwor
ICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBtX2NvbG9yOwogICAg
IH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDM3Nzg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNDgyLDExICs0ODIsMTkgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAKICAgICAjIFN0cnVjdHVyZSBJRAogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAi
RE9NV2luZG93IikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTQzo6SlNWYWx1
ZVB0ciBwcm90bylcbiIgLgotICAgICAgICAgICAgICIgICAge1xuIiAuCi0gICAgICAgICAgICAg
IiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90bywgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpO
ZWVkc1RoaXNDb252ZXJzaW9uKSk7XG4iIC4KLSAgICAgICAgICAgICAiICAgIH1cblxuIik7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsCisgICAgICAgICAgICAiICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTQzo6SlNWYWx1ZVB0
ciBwcm90b3R5cGUpXG4iIC4KKyAgICAgICAgICAgICIgICAge1xuIiAuCisgICAgICAgICAgICAi
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlND
OjpOZWVkc1RoaXNDb252ZXJzaW9uKSk7XG4iIC4KKyAgICAgICAgICAgICIgICAgfVxuXG4iKTsK
KyAgICB9IGVsc2lmICgkaGFzR2V0dGVyKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
CisgICAgICAgICAgICAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+IGNy
ZWF0ZVN0cnVjdHVyZUlEKEpTQzo6SlNWYWx1ZVB0ciBwcm90b3R5cGUpXG4iIC4KKyAgICAgICAg
ICAgICIgICAge1xuIiAuCisgICAgICAgICAgICAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUpKTtc
biIgLgorICAgICAgICAgICAgIiAgICB9XG5cbiIpOwogICAgIH0KKwogICAgICMgQ3VzdG9tIG1h
cmsgZnVuY3Rpb24KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBt
YXJrKCk7XG5cbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU1h
cmtGdW5jdGlvbiJ9OwogCkBAIC02NjAsNiArNjY4LDExIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbztcbiIpOwogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCB8fCAkbnVtQ29uc3RhbnRz
ID4gMCkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
LCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
CisgICAgICAgICAgICAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+IGNy
ZWF0ZVN0cnVjdHVyZUlEKEpTQzo6SlNWYWx1ZVB0ciBwcm90b3R5cGUpXG4iIC4KKyAgICAgICAg
ICAgICIgICAge1xuIiAuCisgICAgICAgICAgICAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUpKTtc
biIgLgorICAgICAgICAgICAgIiAgICB9XG4iKTsKICAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUoUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVy
ZUlEPiBzdHJ1Y3R1cmUpIDogSlNDOjpKU09iamVjdChzdHJ1Y3R1cmUpIHsgfVxuIik7CiAKQEAg
LTY3NCw3ICs2ODcsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICB9CiAKICAgICBpZiAoJG51
bUF0dHJpYnV0ZXMgPiAwIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVy
YXRlQ29uc3RydWN0b3IifSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCIvLyBBdHRp
YnV0ZXNcblxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIi8vIEF0dHJpYnV0ZXNc
blxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJp
YnV0ZXN9KSB7CiAgICAgICAgICAgICBteSAkZ2V0dGVyID0gImpzIiAuICRpbnRlcmZhY2VOYW1l
IC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1l
KSAuICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8gPyAiQ29u
c3RydWN0b3IiIDogIiIpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6
SlNWYWx1ZVB0ciAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5oCShyZXZpc2lvbiAzNzc4NCkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVByb3RvdHlwZSgpOwogICAgIH0K
IAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChK
U1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6
Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOworICAgIH0KKwogcHJpdmF0
ZToKICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBKU1ZhbHVlUHRy
IGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMzc3ODQpCisr
KyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmZ1bmN0aW9uUHJvdG90eXBlKCk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UpKTsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgc3RhdGljIEpTVmFsdWVQdHIgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNs
b3QmKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNpb24gMzc3ODQpCisrKyBX
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1
NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm9iamVjdFByb3RvdHlwZSgpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlUHRyIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSkpOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIFJ1bnRpbWVPYmplY3RJbXAo
RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4sIFBhc3NSZWZQdHI8QmluZGluZ3M6
Okluc3RhbmNlPik7CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNp
b24gMzc3ODQpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsNiArMTA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgfQogCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQ
dHIgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUo
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CisgICAgfQorCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgJKHJldmlzaW9uIDM3Nzg0KQorKysgV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOCArMTM4
LDcgQEAgY2xhc3MgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEgOiBwdQogfTsKIAogLy8g
Q29tbW9uIGJhc2UgY2xhc3MgKGRvZXNuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIGludGVyZXN0aW5n
KQotY2xhc3MgUXRSdW50aW1lTWV0aG9kIDogcHVibGljIEludGVybmFsRnVuY3Rpb24KLXsKK2Ns
YXNzIFF0UnVudGltZU1ldGhvZCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5RdFJ1bnRpbWVNZXRob2QoKTsKIApAQCAtMTUwLDYgKzE0OSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0
aW9uUHJvdG90eXBlKCk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJl
SUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUp
KTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBRdFJ1bnRpbWVNZXRob2REYXRhICpkX2Z1bmMo
KSBjb25zdCB7cmV0dXJuIGRfcHRyO30KICAgICBRdFJ1bnRpbWVNZXRob2QoUXRSdW50aW1lTWV0
aG9kRGF0YSAqZGQsIEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmbiwgUGFzc1Jl
ZlB0cjxRdEluc3RhbmNlPiBpbnN0KTsK
</data>
<flag name="review"
          id="11194"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>