<?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>19721</bug_id>
          
          <creation_ts>2008-06-22 23:29:24 -0700</creation_ts>
          <short_desc>speed up JavaScriptCore by not wrapping strings in objects just to call functions on them</short_desc>
          <delta_ts>2008-06-26 19:53:59 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>84112</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-22 23:29:24 -0700</bug_when>
    <thetext>We can speed up JavaScriptCore by making wrappers for primitive objects less often.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84113</commentid>
    <comment_count>1</comment_count>
      <attachid>21878</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-22 23:30:32 -0700</bug_when>
    <thetext>Created attachment 21878
patch for a step along the way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84124</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-06-23 02:41:58 -0700</bug_when>
    <thetext>How would this interact with our need to fix primitive types toString/valueOf implementations be user overridable (eg. String.prototype.toString = function() {return &quot;foo&quot;; } -- that&apos;s a different bug, but i&apos;d want it to still be possible to fix it with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84148</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-23 09:55:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; How would this interact with our need to fix primitive types toString/valueOf
&gt; implementations be user overridable (eg. String.prototype.toString = function()
&gt; {return &quot;foo&quot;; } -- that&apos;s a different bug, but i&apos;d want it to still be
&gt; possible to fix it with this patch.

This patch should not make it any harder to fix. It sounds really simple to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84203</commentid>
    <comment_count>4</comment_count>
      <attachid>21878</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-06-23 17:08:12 -0700</bug_when>
    <thetext>Comment on attachment 21878
patch for a step along the way

This patch does a lot at once, but I like everything it does, so I guess I shouldn&apos;t complain.

+    JSObject* thisObj = thisValue-&gt;toThisObject(exec);

I&apos;m a little worried about how many places in the code need to know to call toThisObject. I guess the JSValue* in some function signatures mitigates the problem, but I wish we could do better.

+    // FIXME: What does implementing instanceof have to do with being a function?
+    // Is this really right for JSFunction? Is it right for other classes derived from this one?
+    // Maybe add a class called Constructor that is derived from this one for use of the classes
+    // that do implement instanceof.

The answer to your questions is that we should just nix implementsHasInstance() and all uses of it. Yes, a host object can choose not to &quot;implement hasInstance&quot; -- whatever that means -- but why would we ever want to do that? (Or, to answer my own question, &quot;We never want to do that.&quot;)

-    if (!thisObj-&gt;inherits(&amp;JSArray::info))
+    if (!thisValue-&gt;isObject(&amp;JSArray::info))

All these conversions to &quot;isObject&quot; are a net performance loss, because isObject calls two virtual functions, whereas inherits was one virtual function call.  You could easily fix this by changing JSCell::isObject to be virtual, returning false, and then renaming &quot;inherits&quot; to &quot;isObject&quot;.

-    if (v-&gt;isObject() &amp;&amp; static_cast&lt;JSObject*&gt;(v)-&gt;implementsCall()) {

Why is it suddenly OK to install a timer for something that is not a function?

Please add a SunSpider result to the ChangeLog.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84217</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-23 22:19:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m a little worried about how many places in the code need to know to call
&gt; toThisObject.

It&apos;s annoying. And it&apos;s also annoying that it&apos;s hard to know when toThisObject is needed and when toObject would suffice.

&gt; I guess the JSValue* in some function signatures mitigates the
&gt; problem, but I wish we could do better.

It&apos;s very difficult to forget that you&apos;re dealing with a value that may not be an object. But it&apos;s easy to forget that you could be dealing with a window object that needs to be wrapped with a shell. I&apos;m pretty sure I got it right, but I&apos;m not sure how safe it will be in the future.

&gt; The answer to your questions is that we should just nix implementsHasInstance()
&gt; and all uses of it.

I&apos;ll look into that in the future.

&gt; -    if (!thisObj-&gt;inherits(&amp;JSArray::info))
&gt; +    if (!thisValue-&gt;isObject(&amp;JSArray::info))
&gt; 
&gt; All these conversions to &quot;isObject&quot; are a net performance loss, because
&gt; isObject calls two virtual functions, whereas inherits was one virtual function
&gt; call.  You could easily fix this by changing JSCell::isObject to be virtual,
&gt; returning false, and then renaming &quot;inherits&quot; to &quot;isObject&quot;.

Not exactly. Because inherits isn&apos;t a virtual function. But classInfo is. I did what you suggested by moving classInfo into JSCell.

&gt; -    if (v-&gt;isObject() &amp;&amp; static_cast&lt;JSObject*&gt;(v)-&gt;implementsCall()) {
&gt; 
&gt; Why is it suddenly OK to install a timer for something that is not a function?

I changed the behavior back by adding a getCallData there.

&gt; Please add a SunSpider result to the ChangeLog.

SunSpider says this has no measurable performance impact, and I now say so in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84218</commentid>
    <comment_count>6</comment_count>
      <attachid>21878</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-23 22:23:48 -0700</bug_when>
    <thetext>Comment on attachment 21878
patch for a step along the way

Committed revision 34754.

Clearing review flag now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84260</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-24 08:51:50 -0700</bug_when>
    <thetext>Here&apos;s an interesting discovery. To call a function on a string, we actually make *2* string wrappers. The first is made to perform the &quot;get&quot; operation, and the second is made to call the retrieved function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84270</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-06-24 09:18:02 -0700</bug_when>
    <thetext>Functions implement hasInstance because JS functions can be ued as constructors. We could of course choose to have hasInstance just always return false for objects that can&apos;t be constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84308</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-06-24 14:31:48 -0700</bug_when>
    <thetext>hasInstance is generic enough that it would suffice just to run the normal hasInstance function for any object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84452</commentid>
    <comment_count>10</comment_count>
      <attachid>21941</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-25 23:59:55 -0700</bug_when>
    <thetext>Created attachment 21941
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84529</commentid>
    <comment_count>11</comment_count>
      <attachid>21941</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-06-26 16:01:24 -0700</bug_when>
    <thetext>Comment on attachment 21941
patch

+2008-06-25  Darin Adler  &lt;darin@apple.com&gt;
+
+        Reviewed by NOBODY (OOPS!).
+
+        * ChangeLog:
+        * JavaScriptCore.exp:
+        * VM/JSPropertyNameIterator.cpp:
+        * VM/Machine.cpp:


Looks like you got two ChangeLogs for the price of one.

+JSObject* JSImmediate::prototype(const JSValue* v, ExecState* exec)
+{
+    ASSERT(isImmediate(v));
+    if (v == jsNull())
+        return new (exec) JSNotAnObject(throwError(exec, TypeError, &quot;Null value&quot;));
+    if (v == jsUndefined())
+        return new (exec) JSNotAnObject(throwError(exec, TypeError, &quot;Undefined value&quot;));
+    if (isBoolean(v))
+        return exec-&gt;lexicalGlobalObject()-&gt;booleanPrototype();
+    ASSERT(isNumber(v));
+    return exec-&gt;lexicalGlobalObject()-&gt;numberPrototype();
+}

It surprised me that you put the ifs for error cases before the ifs for normal cases. I would expect number to be most likely, followed by boolean, undefined, null. Maybe that order would speed things up a little.

I will trade not asking you to split this patch up in exchange for asking you for a couple of string replacement regression tests (unless there&apos;s a bunch of coverage in the Mozilla tests?)

r=me
Geoff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84531</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-26 18:03:27 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; +JSObject* JSImmediate::prototype(const JSValue* v, ExecState* exec)
&gt; +{
&gt; +    ASSERT(isImmediate(v));
&gt; +    if (v == jsNull())
&gt; +        return new (exec) JSNotAnObject(throwError(exec, TypeError, &quot;Null
&gt; value&quot;));
&gt; +    if (v == jsUndefined())
&gt; +        return new (exec) JSNotAnObject(throwError(exec, TypeError, &quot;Undefined
&gt; value&quot;));
&gt; +    if (isBoolean(v))
&gt; +        return exec-&gt;lexicalGlobalObject()-&gt;booleanPrototype();
&gt; +    ASSERT(isNumber(v));
&gt; +    return exec-&gt;lexicalGlobalObject()-&gt;numberPrototype();
&gt; +}
&gt; 
&gt; It surprised me that you put the ifs for error cases before the ifs for normal
&gt; cases. I would expect number to be most likely, followed by boolean, undefined,
&gt; null. Maybe that order would speed things up a little.

Good idea. I just copied this from JSImmediate::toObject. I&apos;ll reorder both.

&gt; I will trade not asking you to split this patch up in exchange for asking you
&gt; for a couple of string replacement regression tests (unless there&apos;s a bunch of
&gt; coverage in the Mozilla tests?)

There are lots of replace tests in LayoutTests, particularly in fast/js/kde/RegExp.html, fast/js/kde/StringObject.html, fast/js/regexp*.html, and fast/js/string-replace*.html. But I don&apos;t object to adding some new ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84538</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-26 19:53:59 -0700</bug_when>
    <thetext>Committed revision 34821.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21878</attachid>
            <date>2008-06-22 23:30:32 -0700</date>
            <delta_ts>2008-06-24 08:25:25 -0700</delta_ts>
            <desc>patch for a step along the way</desc>
            <filename>NextWrapperPatch.txt</filename>
            <type>text/plain</type>
            <size>439066</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDA1IEBACisyMDA4LTA2LTIyICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIHdvcmsgdG93YXJkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTcyMQorCisgICAgICAgIE1vcmUgcHJlcGFyYXRpb24gdG93YXJkIG1h
a2luZyBmdW5jdGlvbnMgd29yayBvbiBwcmltaXRpdmUgdHlwZXMgd2l0aG91dAorICAgICAgICBj
cmVhdGluZyB3cmFwcGVyIG9iamVjdHMuIE5vIHNwZWVkdXAgdGhpcyB0aW1lLCBidXQgcHJlcGFy
ZXMgZm9yIGEgZnV0dXJlCisgICAgICAgIHNwZWVkdXAgd2l0aG91dCBzbG93aW5nIHRoaW5ncyBk
b3duLgorCisgICAgICAgIC0gRWxpbWluYXRlZCB0aGUgaW1wbGVtZW50c0NhbGwsIGNhbGxBc0Z1
bmN0aW9uIGFuZCBjb25zdHJ1Y3QgdmlydHVhbAorICAgICAgICAgIGZ1bmN0aW9ucyBmcm9tIEpT
T2JqZWN0LiBJbnN0ZWFkLCB0aGUgQ2FsbERhdGEgYW5kIENvbnN0cnVjdERhdGEgZm9yCisgICAg
ICAgICAgYSBuYXRpdmUgZnVuY3Rpb24gaW5jbHVkZXMgYSBmdW5jdGlvbiBwb2ludGVyIHRoYXQg
dGhlIGNhbGxlciBjYW4gdXNlCisgICAgICAgICAgZGlyZWN0bHkuIENoYW5nZWQgYWxsIGNhbGwg
c2l0ZXMgdG8gdXNlIENhbGxEYXRhIGFuZCBDb25zdHJ1Y3REYXRhLgorCisgICAgICAgIC0gQ2hh
bmdlZCB0aGUgInRoaXMiIGFyZ3VtZW50IHRvIG5hdGl2ZSBmdW5jdGlvbnMgdG8gYmUgYSBKU1Zh
bHVlIHJhdGhlcgorICAgICAgICAgIHRoYW4gYSBKU09iamVjdC4gVGhpcyBwcmVwYXJlcyB1cyBm
b3IgcGFzc2luZyBwcmltaXRpdmVzIGludG8gdGhlc2UKKyAgICAgICAgICBmdW5jdGlvbnMuIFRo
ZSBjb252ZXJzaW9uIHRvIGFuIG9iamVjdCBub3cgbXVzdCBiZSBkb25lIGluc2lkZSB0aGUKKyAg
ICAgICAgICBmdW5jdGlvbi4gQ3JpdGljYWxseSwgaWYgaXQncyBhIGZ1bmN0aW9uIHRoYXQgY2Fu
IGJlIGNhbGxlZCBvbiBhIERPTQorICAgICAgICAgIHdpbmRvdyBvYmplY3QsIHRoZW4gd2UgaGF2
ZSB0byBiZSBzdXJlIHRvIGNhbGwgdG9UaGlzT2JqZWN0IG9uIHRoZQorICAgICAgICAgIGFyZ3Vt
ZW50IGJlZm9yZSB3ZSB1c2UgaXQgZm9yIGFueXRoaW5nIGV2ZW4gaWYgaXQncyBhbHJlYWR5IGFu
IG9iamVjdC4KKworICAgICAgICAtIEVsaW1pbmF0ZWQgdGhlIHByYWN0aWNlIG9mIHVzaW5nIGNv
bnN0cnVjdG9yIG9iamVjdHMgaW4gdGhlIGdsb2JhbAorICAgICAgICAgIG9iamVjdCB0byBtYWtl
IG9iamVjdHMgb2YgdGhlIHZhcmlvdXMgYmFzaWMgdHlwZXMuIFNpbmNlIHRoZXNlCisgICAgICAg
ICAgY29uc3RydWN0b3JzIGNhbid0IGJlIHJlcGxhY2VkIGJ5IHNjcmlwdCwgdGhlcmUncyBubyBy
ZWFzb24gdG8gaW52b2x2ZQorICAgICAgICAgIGEgY29uc3RydWN0b3Igb2JqZWN0IGF0IGFsbC4g
QWRkZWQgZnVuY3Rpb25zIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24KKyAgICAgICAgICBkaXJlY3Rs
eS4KKworICAgICAgICAtIE1hZGUgc29tZSBtb3JlIGNsYXNzIG1lbWJlcnMgcHJpdmF0ZSBhbmQg
cHJvdGVjdGVkLCBpbmNsdWRpbmcgdmlydHVhbAorICAgICAgICAgIGZ1bmN0aW9uIG92ZXJyaWRl
cy4gVGhpcyBjYW4gY2F0Y2ggY29kZSB1c2luZyB1bm5lY2Vzc2FyaWx5IHNsb3cgdmlydHVhbAor
ICAgICAgICAgIGZ1bmN0aW9uIGNvZGUgcGF0aHMgd2hlbiB0aGUgdHlwZSBvZiBhbiBvYmplY3Qg
aXMga25vd24gc3RhdGljYWxseS4gSWYgd2UKKyAgICAgICAgICBsYXRlciBmaW5kIGEgbmV3IHJl
YXNvbiB1c2UgdGhlIG1lbWJlcnMgb3V0c2lkZSB0aGUgY2xhc3MgaXQncyBlYXN5IHRvCisgICAg
ICAgICAgbWFrZSB0aGVtIHB1YmxpYyBhZ2Fpbi4KKworICAgICAgICAtIE1vdmVkIHRoZSBkZWNs
YXJhdGlvbnMgb2YgdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgZm9yIGZ1bmN0aW9ucyBvdXQK
KyAgICAgICAgICBvZiBoZWFkZXIgZmlsZXMuIFRoZXNlIGNhbiBoYXZlIGludGVybmFsIGxpbmth
Z2UgYW5kIGJlIGRlY2xhcmVkIGluc2lkZQorICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZS4KKwor
ICAgICAgICAtIENoYW5nZWQgUHJvdG90eXBlRnVuY3Rpb24gdG8gdGFrZSBmdW5jdGlvbiBwb2lu
dGVycyB3aXRoIHRoZSByaWdodAorICAgICAgICAgIGFyZ3VtZW50cyB0byBiZSBwdXQgZGlyZWN0
bHkgaW50byBDYWxsRGF0YS4gVGhpcyBlbGltaW5hdGVzIHRoZQorICAgICAgICAgIG5lZWQgdG8g
aGF2ZSBhIHNlcGFyYXRlIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uLCBhbmQgcmV2ZWFscyB0
aGF0IHRoZQorICAgICAgICAgIHJlYWwgcHVycG9zZSBvZiB0aGF0IGNsYXNzIGluY2x1ZGVkIHNv
bWV0aGluZyBlbHNlIHNwZWNpZmljIHRvIGV2YWwgLS0KKyAgICAgICAgICBzdG9yYWdlIG9mIGEg
Y2FjaGVkIGdsb2JhbCBvYmplY3QuIFNvIHJlbmFtZWQgUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rp
b24KKyAgICAgICAgICB0byBHbG9iYWxFdmFsRnVuY3Rpb24uCisKKyAgICAgICAgKiBBUEkvSlND
YWxsYmFja0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEtKUzo6Y29uc3RydWN0SlNDYWxsYmFj
ayk6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0
YSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIEFQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwOgorICAgICAgICAoS0pTOjpKU0NhbGxiYWNrRnVuY3Rp
b246OmltcGxlbWVudHNIYXNJbnN0YW5jZSk6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tGdW5j
dGlvbjo6Y2FsbCk6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Z2V0Q2FsbERh
dGEpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEtKUzo6
SlNDYWxsYmFja0Z1bmN0aW9uOjpjbGFzc0luZm8pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNr
T2JqZWN0Lmg6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tPYmplY3Q6OmNsYXNzUmVmKToKKyAg
ICAgICAgKEtKUzo6SlNDYWxsYmFja09iamVjdDo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoS0pTOjo6OmdldENvbnN0cnVj
dERhdGEpOgorICAgICAgICAoS0pTOjo6OmNvbnN0cnVjdCk6CisgICAgICAgIChLSlM6Ojo6Z2V0
Q2FsbERhdGEpOgorICAgICAgICAoS0pTOjo6OmNhbGwpOgorICAgICAgICAqIEFQSS9KU09iamVj
dFJlZi5jcHA6CisgICAgICAgIChKU09iamVjdE1ha2VGdW5jdGlvbik6CisgICAgICAgIChKU09i
amVjdElzRnVuY3Rpb24pOgorICAgICAgICAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbik6CisgICAg
ICAgIChKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5leHA6CisgICAgICAgICogVk0vTWFjaGluZS5jcHA6CisgICAgICAgIChLSlM6OmpzVHlwZVN0
cmluZ0ZvclZhbHVlKToKKyAgICAgICAgKEtKUzo6TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUpOgor
ICAgICAgICAqIGtqcy9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChLSlM6OmFycmF5UHJv
dG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoS0pTOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKToKKyAgICAgICAgKEtKUzo6YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKEtKUzo6
YXJyYXlQcm90b0Z1bmNDb25jYXQpOgorICAgICAgICAoS0pTOjphcnJheVByb3RvRnVuY1BvcCk6
CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChLSlM6OmFycmF5
UHJvdG9GdW5jUmV2ZXJzZSk6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jU2hpZnQpOgor
ICAgICAgICAoS0pTOjphcnJheVByb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEtKUzo6YXJyYXlQ
cm90b0Z1bmNTb3J0KToKKyAgICAgICAgKEtKUzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAg
ICAgICAoS0pTOjphcnJheVByb3RvRnVuY1VuU2hpZnQpOgorICAgICAgICAoS0pTOjphcnJheVBy
b3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jTWFwKToKKyAgICAg
ICAgKEtKUzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9G
dW5jRm9yRWFjaCk6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jU29tZSk6CisgICAgICAg
IChLSlM6OmFycmF5UHJvdG9GdW5jSW5kZXhPZik6CisgICAgICAgIChLSlM6OmFycmF5UHJvdG9G
dW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoS0pTOjpBcnJheUNvbnN0cnVjdG9yOjpBcnJheUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKEtKUzo6Y29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKToK
KyAgICAgICAgKEtKUzo6Y29uc3RydWN0V2l0aEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAo
S0pTOjpBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEtKUzo6
Y2FsbEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAoS0pTOjpBcnJheUNvbnN0cnVjdG9yOjpn
ZXRDYWxsRGF0YSk6CisgICAgICAgICoga2pzL0FycmF5UHJvdG90eXBlLmg6CisgICAgICAgICog
a2pzL0Jvb2xlYW5PYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpib29sZWFuUHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoS0pTOjpib29sZWFuUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAg
IChLSlM6OmNvbnN0cnVjdEJvb2xlYW4pOgorICAgICAgICAoS0pTOjpjb25zdHJ1Y3RXaXRoQm9v
bGVhbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKEtKUzo6Qm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEtKUzo6Y2FsbEJvb2xlYW5Db25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChLSlM6OkJvb2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAo
S0pTOjpjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIGtq
cy9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgICoga2pzL0NhbGxEYXRhLmg6CisgICAgICAgIChL
SlM6Oik6CisgICAgICAgICoga2pzL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKEtKUzo6KToK
KyAgICAgICAgKiBranMvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoS0pTOjpjYWxs
RnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAoS0pTOjpGdW5jdGlvblByb3RvdHlwZTo6Z2V0
Q2FsbERhdGEpOgorICAgICAgICAoS0pTOjpmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKToKKyAg
ICAgICAgKEtKUzo6ZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk6CisgICAgICAgIChLSlM6OmZ1bmN0
aW9uUHJvdG9GdW5jQ2FsbCk6CisgICAgICAgIChLSlM6OmNvbnN0cnVjdFdpdGhGdW5jdGlvbkNv
bnN0cnVjdG9yKToKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0RGF0YSk6CisgICAgICAgIChLSlM6OmNhbGxGdW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKEtKUzo6RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAoS0pT
Ojpjb25zdHJ1Y3RGdW5jdGlvbik6CisgICAgICAgICoga2pzL0Z1bmN0aW9uUHJvdG90eXBlLmg6
CisgICAgICAgICoga2pzL0pTQXJyYXkuY3BwOgorICAgICAgICAoS0pTOjpBVkxUcmVlQWJzdHJh
Y3RvckZvckFycmF5Q29tcGFyZTo6Y29tcGFyZV9rZXlfa2V5KToKKyAgICAgICAgKEtKUzo6SlNB
cnJheTo6c29ydCk6CisgICAgICAgIChLSlM6OmNvbnN0cnVjdEVtcHR5QXJyYXkpOgorICAgICAg
ICAoS0pTOjpjb25zdHJ1Y3RBcnJheSk6CisgICAgICAgICoga2pzL0pTQXJyYXkuaDoKKyAgICAg
ICAgKEtKUzo6SlNBcnJheTo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBranMvSlNGdW5jdGlvbi5j
cHA6CisgICAgICAgIChLSlM6OkpTRnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoS0pTOjpnbG9i
YWxGdW5jRXZhbCk6CisgICAgICAgIChLSlM6Omdsb2JhbEZ1bmNQYXJzZUludCk6CisgICAgICAg
IChLSlM6Omdsb2JhbEZ1bmNQYXJzZUZsb2F0KToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY0lz
TmFOKToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY0lzRmluaXRlKToKKyAgICAgICAgKEtKUzo6
Z2xvYmFsRnVuY0RlY29kZVVSSSk6CisgICAgICAgIChLSlM6Omdsb2JhbEZ1bmNEZWNvZGVVUklD
b21wb25lbnQpOgorICAgICAgICAoS0pTOjpnbG9iYWxGdW5jRW5jb2RlVVJJKToKKyAgICAgICAg
KEtKUzo6Z2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudCk6CisgICAgICAgIChLSlM6Omdsb2Jh
bEZ1bmNFc2NhcGUpOgorICAgICAgICAoS0pTOjpnbG9iYWxGdW5jVW5lc2NhcGUpOgorICAgICAg
ICAoS0pTOjpnbG9iYWxGdW5jS0pTUHJpbnQpOgorICAgICAgICAoS0pTOjpQcm90b3R5cGVGdW5j
dGlvbjo6UHJvdG90eXBlRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpQcm90b3R5cGVGdW5jdGlv
bjo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAoS0pTOjpHbG9iYWxFdmFsRnVuY3Rpb246Okdsb2Jh
bEV2YWxGdW5jdGlvbik6CisgICAgICAgIChLSlM6Okdsb2JhbEV2YWxGdW5jdGlvbjo6bWFyayk6
CisgICAgICAgICoga2pzL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEtKUzo6SW50ZXJuYWxGdW5j
dGlvbjo6Y2xhc3NJbmZvKToKKyAgICAgICAgKEtKUzo6SW50ZXJuYWxGdW5jdGlvbjo6ZnVuY3Rp
b25OYW1lKToKKyAgICAgICAgKEtKUzo6SlNGdW5jdGlvbjo6Y2xhc3NJbmZvKToKKyAgICAgICAg
KEtKUzo6R2xvYmFsRXZhbEZ1bmN0aW9uOjpjYWNoZWRHbG9iYWxPYmplY3QpOgorICAgICAgICAq
IGtqcy9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTR2xvYmFsT2JqZWN0Ojpy
ZXNldCk6CisgICAgICAgIChLSlM6OkpTR2xvYmFsT2JqZWN0OjptYXJrKToKKyAgICAgICAgKiBr
anMvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xv
YmFsT2JqZWN0KToKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OmV2YWxGdW5jdGlvbik6
CisgICAgICAgICoga2pzL0pTSW1tZWRpYXRlLmNwcDoKKyAgICAgICAgKEtKUzo6SlNJbW1lZGlh
dGU6OnRvT2JqZWN0KToKKyAgICAgICAgKiBranMvSlNOb3RBbk9iamVjdC5jcHA6CisgICAgICAg
ICoga2pzL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKiBranMvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoS0pTOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEtKUzo6Y2FsbERlZmF1bHRWYWx1
ZUZ1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6SlNPYmplY3Q6OmRlZmF1bHRWYWx1ZSk6CisgICAg
ICAgIChLSlM6OkpTT2JqZWN0Ojpsb29rdXBHZXR0ZXIpOgorICAgICAgICAoS0pTOjpKU09iamVj
dDo6bG9va3VwU2V0dGVyKToKKyAgICAgICAgKEtKUzo6SlNPYmplY3Q6Omhhc0luc3RhbmNlKToK
KyAgICAgICAgKEtKUzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoS0pTOjpFcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKEtKUzo6Y29uc3RydWN0RW1wdHlPYmpl
Y3QpOgorICAgICAgICAqIGtqcy9KU09iamVjdC5oOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0
ZXI6OkdldHRlclNldHRlcik6CisgICAgICAgIChLSlM6OkdldHRlclNldHRlcjo6Z2V0dGVyKToK
KyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVyOjpzZXRHZXR0ZXIpOgorICAgICAgICAoS0pTOjpH
ZXR0ZXJTZXR0ZXI6OnNldHRlcik6CisgICAgICAgIChLSlM6OkdldHRlclNldHRlcjo6c2V0U2V0
dGVyKToKKyAgICAgICAgKiBranMvSlNWYWx1ZS5jcHA6CisgICAgICAgIChLSlM6OkpTQ2VsbDo6
ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpjYWxsKToKKyAgICAgICAgKEtKUzo6Y29u
c3RydWN0KToKKyAgICAgICAgKiBranMvSlNWYWx1ZS5oOgorICAgICAgICAqIGtqcy9NYXRoT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY0Ficyk6CisgICAgICAgIChLSlM6
Om1hdGhQcm90b0Z1bmNBQ29zKToKKyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY0FTaW4pOgor
ICAgICAgICAoS0pTOjptYXRoUHJvdG9GdW5jQVRhbik6CisgICAgICAgIChLSlM6Om1hdGhQcm90
b0Z1bmNBVGFuMik6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNDZWlsKToKKyAgICAgICAg
KEtKUzo6bWF0aFByb3RvRnVuY0Nvcyk6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNFeHAp
OgorICAgICAgICAoS0pTOjptYXRoUHJvdG9GdW5jRmxvb3IpOgorICAgICAgICAoS0pTOjptYXRo
UHJvdG9GdW5jTG9nKToKKyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY01heCk6CisgICAgICAg
IChLSlM6Om1hdGhQcm90b0Z1bmNNaW4pOgorICAgICAgICAoS0pTOjptYXRoUHJvdG9GdW5jUG93
KToKKyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY1JhbmRvbSk6CisgICAgICAgIChLSlM6Om1h
dGhQcm90b0Z1bmNSb3VuZCk6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNTaW4pOgorICAg
ICAgICAoS0pTOjptYXRoUHJvdG9GdW5jU3FydCk6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1
bmNUYW4pOgorICAgICAgICAqIGtqcy9NYXRoT2JqZWN0Lmg6CisgICAgICAgICoga2pzL051bWJl
ck9iamVjdC5jcHA6CisgICAgICAgIChLSlM6Om51bWJlclByb3RvRnVuY1RvU3RyaW5nKToKKyAg
ICAgICAgKEtKUzo6bnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoS0pT
OjpudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKEtKUzo6bnVtYmVyUHJvdG9GdW5j
VG9GaXhlZCk6CisgICAgICAgIChLSlM6Om51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwpOgor
ICAgICAgICAoS0pTOjpudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbik6CisgICAgICAgIChLSlM6
Ok51bWJlckNvbnN0cnVjdG9yOjpOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChLSlM6OmNv
bnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChLSlM6Ok51bWJlckNvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEtKUzo6Y2FsbE51bWJlckNvbnN0
cnVjdG9yKToKKyAgICAgICAgKEtKUzo6TnVtYmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKToK
KyAgICAgICAgKEtKUzo6Y29uc3RydWN0TnVtYmVyKToKKyAgICAgICAgKEtKUzo6Y29uc3RydWN0
TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJlcik6CisgICAgICAgICoga2pzL051bWJlck9iamVjdC5o
OgorICAgICAgICAoS0pTOjpOdW1iZXJPYmplY3Q6OmNsYXNzSW5mbyk6CisgICAgICAgIChLSlM6
Ok51bWJlckNvbnN0cnVjdG9yOjpjbGFzc0luZm8pOgorICAgICAgICAqIGtqcy9Qcm9wZXJ0eVNs
b3QuY3BwOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKToKKyAg
ICAgICAgKiBranMvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6cmVnRXhwUHJvdG9G
dW5jVGVzdCk6CisgICAgICAgIChLSlM6OnJlZ0V4cFByb3RvRnVuY0V4ZWMpOgorICAgICAgICAo
S0pTOjpyZWdFeHBQcm90b0Z1bmNDb21waWxlKToKKyAgICAgICAgKEtKUzo6cmVnRXhwUHJvdG9G
dW5jVG9TdHJpbmcpOgorICAgICAgICAoS0pTOjpjYWxsUmVnRXhwT2JqZWN0KToKKyAgICAgICAg
KEtKUzo6UmVnRXhwT2JqZWN0OjpnZXRDYWxsRGF0YSk6CisgICAgICAgIChLSlM6OmNvbnN0cnVj
dFJlZ0V4cCk6CisgICAgICAgIChLSlM6OmNvbnN0cnVjdFdpdGhSZWdFeHBDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChLSlM6OlJlZ0V4cENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAg
ICAgICAgKEtKUzo6Y2FsbFJlZ0V4cENvbnN0cnVjdG9yKToKKyAgICAgICAgKEtKUzo6UmVnRXhw
Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKToKKyAgICAgICAgKiBranMvUmVnRXhwT2JqZWN0Lmg6
CisgICAgICAgIChLSlM6OlJlZ0V4cENvbnN0cnVjdG9yOjpjbGFzc0luZm8pOgorICAgICAgICAq
IGtqcy9TaGVsbC5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6Cisg
ICAgICAgIChmdW5jdGlvblByaW50KToKKyAgICAgICAgKGZ1bmN0aW9uRGVidWcpOgorICAgICAg
ICAoZnVuY3Rpb25HQyk6CisgICAgICAgIChmdW5jdGlvblZlcnNpb24pOgorICAgICAgICAoZnVu
Y3Rpb25SdW4pOgorICAgICAgICAoZnVuY3Rpb25Mb2FkKToKKyAgICAgICAgKGZ1bmN0aW9uUmVh
ZGxpbmUpOgorICAgICAgICAoZnVuY3Rpb25RdWl0KToKKyAgICAgICAgKiBranMvZGF0ZV9vYmpl
Y3QuY3BwOgorICAgICAgICAoS0pTOjpnbXRvZmZzZXQpOgorICAgICAgICAoS0pTOjpmb3JtYXRM
b2NhbGVEYXRlKToKKyAgICAgICAgKEtKUzo6ZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKToK
KyAgICAgICAgKEtKUzo6RGF0ZUluc3RhbmNlOjpnZXRUaW1lKToKKyAgICAgICAgKEtKUzo6RGF0
ZUluc3RhbmNlOjpnZXRVVENUaW1lKToKKyAgICAgICAgKEtKUzo6RGF0ZUNvbnN0cnVjdG9yOjpE
YXRlQ29uc3RydWN0b3IpOgorICAgICAgICAoS0pTOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAg
KEtKUzo6RGF0ZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEtKUzo6
Y2FsbERhdGUpOgorICAgICAgICAoS0pTOjpEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKToK
KyAgICAgICAgKEtKUzo6ZGF0ZVBhcnNlKToKKyAgICAgICAgKEtKUzo6ZGF0ZU5vdyk6CisgICAg
ICAgIChLSlM6OmRhdGVVVEMpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jVG9TdHJpbmcp
OgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcpOgorICAgICAgICAoS0pT
OjpkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVu
Y1RvVGltZVN0cmluZyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
Zyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcpOgorICAg
ICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAgICAgICAgKEtK
Uzo6ZGF0ZVByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jR2V0
VGltZSk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcik6CisgICAgICAg
IChLSlM6OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcik6CisgICAgICAgIChLSlM6OmRhdGVQ
cm90b0Z1bmNUb0dNVFN0cmluZyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRNb250
aCk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6CisgICAgICAgIChL
SlM6OmRhdGVQcm90b0Z1bmNHZXREYXRlKToKKyAgICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVuY0dl
dFVUQ0RhdGUpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToKKyAgICAgICAg
KEtKUzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RheSk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1
bmNHZXRIb3Vycyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRVVENIb3Vycyk6Cisg
ICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAgKEtKUzo6ZGF0
ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jR2V0
U2Vjb25kcyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKToKKyAg
ICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChLSlM6
OmRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoS0pTOjpkYXRlUHJv
dG9GdW5jR2V0VGltZXpvbmVPZmZzZXQpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jU2V0
VGltZSk6CisgICAgICAgIChLSlM6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAg
KEtKUzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9G
dW5jU2V0TWlsbGlTZWNvbmRzKToKKyAgICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVuY1NldFVUQ01p
bGxpc2Vjb25kcyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKToKKyAg
ICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMpOgorICAgICAgICAoS0pTOjpk
YXRlUHJvdG9GdW5jU2V0TWludXRlcyk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNTZXRV
VENNaW51dGVzKToKKyAgICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVuY1NldEhvdXJzKToKKyAgICAg
ICAgKEtKUzo6ZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKToKKyAgICAgICAgKEtKUzo6ZGF0ZVBy
b3RvRnVuY1NldERhdGUpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZSk6
CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNTZXRNb250aCk6CisgICAgICAgIChLSlM6OmRh
dGVQcm90b0Z1bmNTZXRVVENNb250aCk6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNTZXRG
dWxsWWVhcik6CisgICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcik6Cisg
ICAgICAgIChLSlM6OmRhdGVQcm90b0Z1bmNTZXRZZWFyKToKKyAgICAgICAgKEtKUzo6ZGF0ZVBy
b3RvRnVuY0dldFllYXIpOgorICAgICAgICAqIGtqcy9kYXRlX29iamVjdC5oOgorICAgICAgICAo
S0pTOjpEYXRlSW5zdGFuY2U6OmludGVybmFsTnVtYmVyKToKKyAgICAgICAgKEtKUzo6RGF0ZUlu
c3RhbmNlOjpjbGFzc0luZm8pOgorICAgICAgICAqIGtqcy9lcnJvcl9vYmplY3QuY3BwOgorICAg
ICAgICAoS0pTOjplcnJvclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEtKUzo6Y29uc3Ry
dWN0RXJyb3IpOgorICAgICAgICAoS0pTOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChLSlM6OkVycm9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAg
ICAgICAoS0pTOjpjYWxsRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChLSlM6OkVycm9yQ29u
c3RydWN0b3I6OmdldENhbGxEYXRhKToKKyAgICAgICAgKEtKUzo6TmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKEtKUzo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IpOgorICAgICAgICAoS0pTOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEtKUzo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3Ip
OgorICAgICAgICAoS0pTOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YSk6Cisg
ICAgICAgICoga2pzL2Vycm9yX29iamVjdC5oOgorICAgICAgICAoS0pTOjpOYXRpdmVFcnJvckNv
bnN0cnVjdG9yOjpjbGFzc0luZm8pOgorICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6CisgICAg
ICAgIChLSlM6OkpTTnVtYmVyQ2VsbDo6dG9PYmplY3QpOgorICAgICAgICAoS0pTOjpKU051bWJl
ckNlbGw6OnRvVGhpc09iamVjdCk6CisgICAgICAgIChLSlM6OkdldHRlclNldHRlcjo6bWFyayk6
CisgICAgICAgIChLSlM6OkdldHRlclNldHRlcjo6dG9QcmltaXRpdmUpOgorICAgICAgICAoS0pT
OjpHZXR0ZXJTZXR0ZXI6OnRvQm9vbGVhbik6CisgICAgICAgIChLSlM6OkdldHRlclNldHRlcjo6
dG9OdW1iZXIpOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXI6OnRvU3RyaW5nKToKKyAgICAg
ICAgKEtKUzo6R2V0dGVyU2V0dGVyOjp0b09iamVjdCk6CisgICAgICAgIChLSlM6OkludGVybmFs
RnVuY3Rpb246OkludGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpJbnRlcm5hbEZ1bmN0
aW9uOjppbXBsZW1lbnRzSGFzSW5zdGFuY2UpOgorICAgICAgICAqIGtqcy9sb29rdXAuaDoKKyAg
ICAgICAgKEtKUzo6SGFzaEVudHJ5OjopOgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAg
ICAgIChLSlM6OkZ1bmNEZWNsTm9kZTo6bWFrZUZ1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6RnVu
Y0V4cHJOb2RlOjptYWtlRnVuY3Rpb24pOgorICAgICAgICAqIGtqcy9vYmplY3Rfb2JqZWN0LmNw
cDoKKyAgICAgICAgKEtKUzo6b2JqZWN0UHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChLSlM6
Om9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6b2JqZWN0UHJv
dG9GdW5jSXNQcm90b3R5cGVPZik6CisgICAgICAgIChLSlM6Om9iamVjdFByb3RvRnVuY0RlZmlu
ZUdldHRlcik6CisgICAgICAgIChLSlM6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6Cisg
ICAgICAgIChLSlM6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChLSlM6
Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChLSlM6Om9iamVjdFByb3Rv
RnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEtKUzo6b2JqZWN0UHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoS0pTOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6
CisgICAgICAgIChLSlM6Ok9iamVjdENvbnN0cnVjdG9yOjpPYmplY3RDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChLSlM6OmNvbnN0cnVjdE9iamVjdCk6CisgICAgICAgIChLSlM6OmNvbnN0cnVjdFdp
dGhPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChLSlM6Ok9iamVjdENvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEtKUzo6Y2FsbE9iamVjdENvbnN0cnVjdG9yKToK
KyAgICAgICAgKEtKUzo6T2JqZWN0Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKToKKyAgICAgICAg
KiBranMvb2JqZWN0X29iamVjdC5oOgorICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoK
KyAgICAgICAgKEtKUzo6cmVwbGFjZSk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1Rv
U3RyaW5nKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAg
IChLSlM6OnN0cmluZ1Byb3RvRnVuY0NoYXJBdCk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3Rv
RnVuY0NoYXJDb2RlQXQpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNDb25jYXQpOgor
ICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEtKUzo6c3Ry
aW5nUHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNN
YXRjaCk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1NlYXJjaCk6CisgICAgICAgIChL
SlM6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2UpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1
bmNTbGljZSk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1NwbGl0KToKKyAgICAgICAg
KEtKUzo6c3RyaW5nUHJvdG9GdW5jU3Vic3RyKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9G
dW5jU3Vic3RyaW5nKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Up
OgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSk6CisgICAgICAgIChL
SlM6OnN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlTG93ZXJDYXNlKToKKyAgICAgICAgKEtKUzo6c3Ry
aW5nUHJvdG9GdW5jVG9Mb2NhbGVVcHBlckNhc2UpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90
b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jQmlnKToK
KyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAgICAgICAoS0pTOjpzdHJp
bmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY0JvbGQpOgor
ICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAgICAgIChLSlM6OnN0cmlu
Z1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNTdHJpa2Up
OgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAgICAgICAoS0pTOjpzdHJp
bmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNGb250Y29sb3Ip
OgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6CisgICAgICAgIChLSlM6
OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY0xp
bmspOgorICAgICAgICAoS0pTOjpzdHJpbmdGcm9tQ2hhckNvZGUpOgorICAgICAgICAoS0pTOjpT
dHJpbmdDb25zdHJ1Y3Rvcjo6U3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoS0pTOjpjb25z
dHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoS0pTOjpTdHJpbmdDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChLSlM6OmNhbGxTdHJpbmdDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChLSlM6OlN0cmluZ0NvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YSk6Cisg
ICAgICAgICoga2pzL3N0cmluZ19vYmplY3QuaDoKKwogMjAwOC0wNi0yMSAgTWFyayBSb3dlICA8
bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAzNDczNikKKysrIEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDggKzEyMyw4
IEBAIF9fWk4zS0pTMTRKU0dsb2JhbE9iamVjdDRtYXJrRXYKIF9fWk4zS0pTMTRKU0dsb2JhbE9i
amVjdEQyRXYKIF9fWk4zS0pTMTRKU0dsb2JhbE9iamVjdG53RW0KIF9fWk4zS0pTMTRKU0dsb2Jh
bE9iamVjdG53RW1OUzBfOVNoYXJlZFRhZ0UKK19fWk4zS0pTMTRjb25zdHJ1Y3RBcnJheUVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzdBcmdMaXN0RQogX19aTjNLSlMxNUpTV3JhcHBlck9iamVjdDRtYXJr
RXYKLV9fWk4zS0pTMTZJbnRlcm5hbEZ1bmN0aW9uMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRh
RQogX19aTjNLSlMxNkludGVybmFsRnVuY3Rpb240aW5mb0UKIF9fWk4zS0pTMTZJbnRlcm5hbEZ1
bmN0aW9uQzJFUE5TXzE3RnVuY3Rpb25Qcm90b3R5cGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pO
M0tKUzE2SlNWYXJpYWJsZU9iamVjdDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFCkBAIC0xMzIsMTEgKzEzMiwxMyBAQCBfX1pOM0tKUzE2SlNWYXJpYWJs
ZU9iamVjdDE2Z2V0UHJvcGVydHlOCiBfX1pOM0tKUzE2UGFyc2VyUmVmQ291bnRlZDNyZWZFdgog
X19aTjNLSlMxNlBhcnNlclJlZkNvdW50ZWQ1ZGVyZWZFdgogX19aTjNLSlMxN1Byb3BlcnR5TmFt
ZUFycmF5M2FkZEVQTlNfN1VTdHJpbmczUmVwRQotX19aTjNLSlMxN1Byb3RvdHlwZUZ1bmN0aW9u
QzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE3RnVuY3Rpb25Qcm90b3R5cGVFaVJLTlNfMTBJZGVudGlm
aWVyRVBGUE5TXzdKU1ZhbHVlRVMyX1BOU184SlNPYmplY3RFUktOU183QXJnTGlzdEVFCi1fX1pO
M0tKUzE3UHJvdG90eXBlRnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVpUktOU18xMElkZW50aWZp
ZXJFUEZQTlNfN0pTVmFsdWVFUzJfUE5TXzhKU09iamVjdEVSS05TXzdBcmdMaXN0RUUKK19fWk4z
S0pTMTdQcm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRVBOU18xN0Z1bmN0aW9uUHJv
dG90eXBlRWlSS05TXzEwSWRlbnRpZmllckVQRlBOU183SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0
RVM5X1JLTlNfN0FyZ0xpc3RFRQorX19aTjNLSlMxN1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlF
eGVjU3RhdGVFaVJLTlNfMTBJZGVudGlmaWVyRVBGUE5TXzdKU1ZhbHVlRVMyX1BOU184SlNPYmpl
Y3RFUzdfUktOU183QXJnTGlzdEVFCiBfX1pOM0tKUzE3UmVnaXN0ZXJGaWxlU3RhY2syMGFsbG9j
YXRlUmVnaXN0ZXJGaWxlRW1QUzBfCitfX1pOM0tKUzE3Y29uc3RydWN0RnVuY3Rpb25FUE5TXzlF
eGVjU3RhdGVFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3RyaW5nRWkK
K19fWk4zS0pTMTljb25zdHJ1Y3RFbXB0eUFycmF5RVBOU185RXhlY1N0YXRlRQogX19aTjNLSlMx
OWluaXRpYWxpemVUaHJlYWRpbmdFdgotX19aTjNLSlMyM29iamVjdFByb3RvRnVuY1RvU3RyaW5n
RVBOU185RXhlY1N0YXRlRVBOU184SlNPYmplY3RFUktOU183QXJnTGlzdEUKK19fWk4zS0pTMjNv
YmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0RVBOU183
SlNWYWx1ZUVSS05TXzdBcmdMaXN0RQogX19aTjNLSlM0SGVhcDE0YWxsb2NhdGVOdW1iZXJFbQog
X19aTjNLSlM0SGVhcDE1cmVjb3JkRXh0cmFDb3N0RW0KIF9fWk4zS0pTNEhlYXAxN2dsb2JhbE9i
amVjdENvdW50RXYKQEAgLTE1MCw4ICsxNTIsMTEgQEAgX19aTjNLSlM0SGVhcDdjb2xsZWN0RXYK
IF9fWk4zS0pTNEhlYXA3cHJvdGVjdEVQTlNfN0pTVmFsdWVFCiBfX1pOM0tKUzRIZWFwOGFsbG9j
YXRlRW0KIF9fWk4zS0pTNEhlYXA5dW5wcm90ZWN0RVBOU183SlNWYWx1ZUUKK19fWk4zS0pTNGNh
bGxFUE5TXzlFeGVjU3RhdGVFUE5TXzdKU1ZhbHVlRU5TXzhDYWxsVHlwZUVSS05TXzhDYWxsRGF0
YUVTM19SS05TXzdBcmdMaXN0RQogX19aTjNLSlM1ZXF1YWxFUEtOU183VVN0cmluZzNSZXBFUzNf
CiBfX1pOM0tKUzZKU0NlbGwxMWdldENhbGxEYXRhRVJOU184Q2FsbERhdGFFCitfX1pOM0tKUzZK
U0NlbGwxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQor
X19aTjNLSlM2SlNDZWxsMTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVqCiBfX1pOM0tK
UzZKU0NlbGwxNmdldENvbnN0cnVjdERhdGFFUk5TXzEzQ29uc3RydWN0RGF0YUUKIF9fWk4zS0pT
NkpTQ2VsbDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlm
aWVyRVJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4zS0pTNkpTQ2VsbDE4Z2V0T3duUHJvcGVydHlT
bG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCkBAIC0xOTMsMTAgKzE5OCw4
IEBAIF9fWk4zS0pTOEpTT2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlFeGUKIF9fWk4zS0pTOEpT
T2JqZWN0MTJkZWZpbmVTZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUFMw
XwogX19aTjNLSlM4SlNPYmplY3QxMmxvb2t1cEdldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEw
SWRlbnRpZmllckUKIF9fWk4zS0pTOEpTT2JqZWN0MTJsb29rdXBTZXR0ZXJFUE5TXzlFeGVjU3Rh
dGVFUktOU18xMElkZW50aWZpZXJFCi1fX1pOM0tKUzhKU09iamVjdDE0Y2FsbEFzRnVuY3Rpb25F
UE5TXzlFeGVjU3RhdGVFUFMwX1JLTlNfN0FyZ0xpc3RFCiBfX1pOM0tKUzhKU09iamVjdDE0ZGVs
ZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0tKUzhK
U09iamVjdDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFagotX19aTjNLSlM4SlNPYmpl
Y3QxNGltcGxlbWVudHNDYWxsRXYKIF9fWk4zS0pTOEpTT2JqZWN0MTZnZXRQcm9wZXJ0eU5hbWVz
RVBOU185RXhlY1N0YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RQogX19aTjNLSlM4SlNPYmpl
Y3QxN3B1dERpcmVjdEZ1bmN0aW9uRVBOU18xNkludGVybmFsRnVuY3Rpb25FaQogX19aTjNLSlM4
SlNPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlm
aWVyRVBOU183SlNWYWx1ZUVqCkBAIC0yMDcsMTMgKzIxMCwxMiBAQCBfX1pOM0tKUzhKU09iamVj
dDIyZmlsbEdldHRlclByb3BlcnR5U2xvCiBfX1pOM0tKUzhKU09iamVjdDNwdXRFUE5TXzlFeGVj
U3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRQogX19aTjNLSlM4SlNPYmplY3Qz
cHV0RVBOU185RXhlY1N0YXRlRWpQTlNfN0pTVmFsdWVFCiBfX1pOM0tKUzhKU09iamVjdDRtYXJr
RXYKLV9fWk4zS0pTOEpTT2JqZWN0OWNvbnN0cnVjdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdBcmdM
aXN0RQotX19aTjNLSlM4SlNPYmplY3Q5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRVJLTlNfN0Fy
Z0xpc3RFUktOU18xMElkZW50aWZpZXJFUktOU183VVN0cmluZ0VpCiBfX1pOM0tKUzhQcm9maWxl
cjEzc3RvcFByb2ZpbGluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQogX19aTjNLSlM4
UHJvZmlsZXIxNHN0YXJ0UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFUE5T
XzE0UHJvZmlsZXJDbGllbnRFCiBfX1pOM0tKUzhQcm9maWxlcjhwcm9maWxlckV2CiBfX1pOM0tK
Uzhqc1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVQS2MKIF9fWk4zS0pTOGpzU3RyaW5nRVBOU185RXhl
Y1N0YXRlRVJLTlNfN1VTdHJpbmdFCitfX1pOM0tKUzljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVF
UE5TXzdKU1ZhbHVlRU5TXzEzQ29uc3RydWN0VHlwZUVSS05TXzEzQ29uc3RydWN0RGF0YUVSS05T
XzdBcmdMaXN0RQogX19aTjNLSlNlcUVSS05TXzdVU3RyaW5nRVBLYwogX19aTjNLSlNndEVSS05T
XzdVU3RyaW5nRVMyXwogX19aTjNLSlNsdEVSS05TXzdVU3RyaW5nRVMyXwpJbmRleDogSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM0NzM2
KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNl
dDogNCAtKi0KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTYsMjcgKzU2LDI5IEBAIGJvb2wgSlNDYWxsYmFja0NvbnN0cnVjdG9yOjppbXBsZW1l
bnRzSGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQ29uc3RydWN0VHlwZSBKU0NhbGxiYWNrQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpCi17Ci0gICAgcmV0dXJu
IENvbnN0cnVjdFR5cGVOYXRpdmU7Ci19Ci0KLUpTT2JqZWN0KiBKU0NhbGxiYWNrQ29uc3RydWN0
b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitzdGF0
aWMgSlNPYmplY3QqIGNvbnN0cnVjdEpTQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNDb250ZXh0UmVm
IGN0eCA9IHRvUmVmKGV4ZWMpOwotICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlz
KTsKKyAgICBKU09iamVjdFJlZiBjb25zdHJ1Y3RvclJlZiA9IHRvUmVmKGNvbnN0cnVjdG9yKTsK
IAotICAgIGlmIChtX2NhbGxiYWNrKSB7CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNh
bGxiYWNrIGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY29u
c3RydWN0b3IpLT5jYWxsYmFjaygpOworICAgIGlmIChjYWxsYmFjaykgewogICAgICAgICBpbnQg
YXJndW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PGludD4oYXJncy5zaXplKCkpOwogICAgICAgICBW
ZWN0b3I8SlNWYWx1ZVJlZiwgMTY+IGFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKyspCiAgICAgICAgICAgICBhcmd1
bWVudHNbaV0gPSB0b1JlZihhcmdzW2ldKTsKICAgICAgICAgICAgIAogICAgICAgICBKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7Ci0gICAgICAgIHJldHVybiB0b0pTKG1fY2FsbGJh
Y2soY3R4LCB0aGlzUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihl
eGVjLT5leGNlcHRpb25TbG90KCkpKSk7CisgICAgICAgIHJldHVybiB0b0pTKGNhbGxiYWNrKGN0
eCwgY29uc3RydWN0b3JSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRhKCksIHRvUmVm
KGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSkpKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHRvSlMo
SlNPYmplY3RNYWtlKGN0eCwgbV9jbGFzcywgMCkpOworICAgIHJldHVybiB0b0pTKEpTT2JqZWN0
TWFrZShjdHgsIHN0YXRpY19jYXN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9y
KS0+Y2xhc3NSZWYoKSwgMCkpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQ2FsbGJhY2tDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQorewor
ICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0SlNDYWxsYmFjazsK
KyAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgS0pT
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCShyZXZp
c2lvbiAzNDczNikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFz
aWMtb2Zmc2V0OiA0IC0qLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDIwICszNCwxNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogY2xhc3MgSlND
YWxsYmFja0NvbnN0cnVjdG9yIDogcHVibGljIEpTT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBKU0Nh
bGxiYWNrQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpT
T2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjayk7CisgICAgSlNDYWxsYmFj
a0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTQ2xhc3NSZWYsIEpTT2JqZWN0Q2FsbEFzQ29uc3Ry
dWN0b3JDYWxsYmFjayk7CiAgICAgdmlydHVhbCB+SlNDYWxsYmFja0NvbnN0cnVjdG9yKCk7Ci0g
ICAgCi0gICAgdmlydHVhbCBib29sIGltcGxlbWVudHNIYXNJbnN0YW5jZSgpIGNvbnN0OwotICAg
IAotICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERh
dGEmKTsKLSAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3Qg
QXJnTGlzdCYgYXJncyk7Ci0gICAgCi0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgSlNDbGFzc1JlZiBjbGFzc1JlZigp
IGNvbnN0IHsgcmV0dXJuIG1fY2xhc3M7IH0KKyAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9y
Q2FsbGJhY2sgY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrOyB9CiAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIAogcHJpdmF0ZToKLSAgICBKU0NhbGxiYWNr
Q29uc3RydWN0b3IoKTsgLy8gcHJldmVudCBkZWZhdWx0IGNvbnN0cnVjdGlvbgotICAgIEpTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvcihjb25zdCBKU0NhbGxiYWNrQ29uc3RydWN0b3ImKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaW1wbGVtZW50c0hhc0luc3RhbmNlKCkgY29uc3Q7ICAgIAorICAgIHZpcnR1YWwg
Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKKyAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
IAogICAgIEpTQ2xhc3NSZWYgbV9jbGFzczsKICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9y
Q2FsbGJhY2sgbV9jYWxsYmFjazsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzNDczNikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLy8gLSot
IG1vZGU6IGMrKzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsMTUgKzQ2LDE2IEBAIEpTQ2FsbGJhY2tG
dW5jdGlvbjo6SlNDYWxsYmFja0Z1bmN0aW9uKEUKIAogLy8gSW50ZXJuYWxGdW5jdGlvbiBtaXNo
LW1hc2hlcyBjb25zdHJ1Y3RvciBhbmQgZnVuY3Rpb24gYmVoYXZpb3IgLS0gd2Ugc2hvdWxkIAog
Ly8gcmVmYWN0b3IgdGhlIGNvZGUgc28gdGhpcyBvdmVycmlkZSBpc24ndCBuZWNlc3NhcnkKLWJv
b2wgSlNDYWxsYmFja0Z1bmN0aW9uOjppbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdCB7IAor
Ym9vbCBKU0NhbGxiYWNrRnVuY3Rpb246OmltcGxlbWVudHNIYXNJbnN0YW5jZSgpIGNvbnN0Cit7
IAogICAgIHJldHVybiBmYWxzZTsgCiB9CiAKLUpTVmFsdWUqIEpTQ2FsbGJhY2tGdW5jdGlvbjo6
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
QXJnTGlzdCAmYXJncykKK0pTVmFsdWUqIEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9SZWYo
ZXhlYyk7Ci0gICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXMpOwotICAgIEpTT2Jq
ZWN0UmVmIHRoaXNPYmpSZWYgPSB0b1JlZih0aGlzT2JqKTsKKyAgICBKU09iamVjdFJlZiBmdW5j
dGlvblJlZiA9IHRvUmVmKGZ1bmN0aW9uT2JqZWN0KTsKKyAgICBKU09iamVjdFJlZiB0aGlzT2Jq
UmVmID0gdG9SZWYodGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYykpOwogCiAgICAgaW50IGFy
Z3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGFyZ3Muc2l6ZSgpKTsKICAgICBWZWN0b3I8
SlNWYWx1ZVJlZiwgMTY+IGFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKQEAgLTYyLDcgKzYzLDEz
IEBAIEpTVmFsdWUqIEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbEFzRnVuY3QKICAgICAgICAgYXJn
dW1lbnRzW2ldID0gdG9SZWYoYXJnc1tpXSk7CiAKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3M7Ci0gICAgcmV0dXJuIHRvSlMobV9jYWxsYmFjayhleGVjUmVmLCB0aGlzUmVm
LCB0aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVj
LT5leGNlcHRpb25TbG90KCkpKSk7CisgICAgcmV0dXJuIHRvSlMoc3RhdGljX2Nhc3Q8SlNDYWxs
YmFja0Z1bmN0aW9uKj4oZnVuY3Rpb25PYmplY3QpLT5tX2NhbGxiYWNrKGV4ZWNSZWYsIGZ1bmN0
aW9uUmVmLCB0aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1Jl
ZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7Cit9CisKK0NhbGxUeXBlIEpTQ2FsbGJhY2tGdW5j
dGlvbjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5h
dGl2ZS5mdW5jdGlvbiA9IGNhbGw7CisgICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLy8gLSotIG1vZGU6IGMr
KzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMjcgKzI3LDI0IEBACiAjaWZuZGVmIEpTQ2FsbGJhY2tG
dW5jdGlvbl9oCiAjZGVmaW5lIEpTQ2FsbGJhY2tGdW5jdGlvbl9oCiAKLSNpbmNsdWRlICJKU09i
amVjdFJlZi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIkpTT2JqZWN0UmVmLmgiCiAKIG5hbWVzcGFjZSBLSlMgewogCi1jbGFzcyBK
U0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbgoteworY2xhc3MgSlND
YWxsYmFja0Z1bmN0aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHVibGljOgotICAg
IEpTQ2FsbGJhY2tGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rp
b25DYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSWRlbnRpZmllciYgbmFtZSk7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaW1wbGVtZW50c0hhc0luc3RhbmNlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1Zh
bHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
QXJnTGlzdCAmYXJncyk7CisgICAgSlNDYWxsYmFja0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjaywgY29uc3QgSWRlbnRpZmllciYgbmFtZSk7CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgCiBwcml2YXRlOgot
ICAgIEpTQ2FsbGJhY2tGdW5jdGlvbigpOyAvLyBwcmV2ZW50IGRlZmF1bHQgY29uc3RydWN0aW9u
Ci0gICAgSlNDYWxsYmFja0Z1bmN0aW9uKGNvbnN0IEpTQ2FsbGJhY2tGdW5jdGlvbiYpOwotICAg
IAorICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CisgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisKKyAgICBz
dGF0aWMgSlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7CisKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9jYWxs
YmFjazsKIH07CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2
aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLy8gLSotIG1vZGU6IGMrKzsgYy1iYXNpYy1v
ZmZzZXQ6IDQgLSotCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzUs
MTMgKzM1LDIxIEBACiBuYW1lc3BhY2UgS0pTIHsKIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1j
bGFzcyBKU0NhbGxiYWNrT2JqZWN0IDogcHVibGljIEJhc2UKLXsKK2NsYXNzIEpTQ2FsbGJhY2tP
YmplY3QgOiBwdWJsaWMgQmFzZSB7CiBwdWJsaWM6CiAgICAgSlNDYWxsYmFja09iamVjdChFeGVj
U3RhdGUqLCBKU0NsYXNzUmVmLCBKU1ZhbHVlKiBwcm90b3R5cGUsIHZvaWQqIGRhdGEpOwogICAg
IEpTQ2FsbGJhY2tPYmplY3QoSlNDbGFzc1JlZik7CiAgICAgdmlydHVhbCB+SlNDYWxsYmFja09i
amVjdCgpOwogCisgICAgdm9pZCBzZXRQcml2YXRlKHZvaWQqIGRhdGEpOworICAgIHZvaWQqIGdl
dFByaXZhdGUoKTsKKworICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKworICAgIEpT
Q2xhc3NSZWYgY2xhc3NSZWYoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzOyB9CisgICAgYm9vbCBp
bmhlcml0cyhKU0NsYXNzUmVmKSBjb25zdDsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIFVTdHJp
bmcgY2xhc3NOYW1lKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTUz
LDMxICs2MSwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJv
cGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQpOwogCi0gICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwotICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKLQogICAgIHZpcnR1
YWwgYm9vbCBpbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aGFzSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlICp2YWx1ZSk7CiAKLSAgICB2aXJ0
dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7Ci0gICAgdmlydHVhbCBKU1ZhbHVl
KiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJn
TGlzdCAmYXJncyk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCiAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIo
RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0
ZSopIGNvbnN0OwogCi0gICAgdm9pZCBzZXRQcml2YXRlKHZvaWQqIGRhdGEpOwotICAgIHZvaWQq
IGdldFByaXZhdGUoKTsKLSAgICAKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IGluZm87CisgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3Ry
dWN0RGF0YSYpOworICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsK
KyAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JmluZm87IH0KIAotICAgIGJvb2wgaW5oZXJpdHMoSlNDbGFzc1JlZikgY29uc3Q7Ci0gICAgCi1w
cml2YXRlOgogICAgIHZvaWQgaW5pdChFeGVjU3RhdGUqKTsKLSAgICAKKyAKKyAgICBzdGF0aWMg
SlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgIHN0YXRpYyBKU09iamVjdCogY29u
c3RydWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYp
OworICAgCiAgICAgc3RhdGljIEpTVmFsdWUqIGNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgSlNW
YWx1ZSogc3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBKU1ZhbHVlKiBzdGF0aWNGdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTUgKzI1LDE0IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSAiQVBJ
Q2FzdC5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2xh
c3NSZWYuaCIKLSNpbmNsdWRlICJKU09iamVjdFJlZi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiSlNPYmplY3RSZWYuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nUmVmLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIK
LSNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIEtKUyB7CkBAIC00Nyw3ICs0Niw4IEBAIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OkpTQ2Fs
bGJhY2tPYmplY3QKICAgICBpbml0KGV4ZWMpOwogfQogCi0vLyBHbG9iYWwgb2JqZWN0IGNvbnN0
cnVjdG9yLiBGSVhNRTogTW92ZSB0aGlzIGludG8gYSBKU0dsb2JhbENhbGxiYWNrT2JqZWN0IHN1
YmNsYXNzLgorLy8gR2xvYmFsIG9iamVjdCBjb25zdHJ1Y3Rvci4KKy8vIEZJWE1FOiBNb3ZlIHRo
aXMgaW50byBhIHNlcGFyYXRlIEpTR2xvYmFsQ2FsbGJhY2tPYmplY3QgY2xhc3MgZGVyaXZlZCBm
cm9tIHRoaXMgb25lLgogdGVtcGxhdGUgPGNsYXNzIEJhc2U+CiBKU0NhbGxiYWNrT2JqZWN0PEJh
c2U+OjpKU0NhbGxiYWNrT2JqZWN0KEpTQ2xhc3NSZWYganNDbGFzcykKICAgICA6IG1fcHJpdmF0
ZURhdGEoMCkKQEAgLTIzNywzMyArMjM3LDM1IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxCYXNl
Pjo6ZGVsZXRlUHJvcGUKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1Db25zdHJ1Y3RUeXBl
IEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYp
CitDb25zdHJ1Y3RUeXBlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKLSAgICBmb3IgKEpTQ2xhc3NSZWYganND
bGFzcyA9IG1fY2xhc3M7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykK
LSAgICAgICAgaWYgKGpzQ2xhc3MtPmNhbGxBc0NvbnN0cnVjdG9yKQorICAgIGZvciAoSlNDbGFz
c1JlZiBqc0NsYXNzID0gbV9jbGFzczsganNDbGFzczsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVu
dENsYXNzKSB7CisgICAgICAgIGlmIChqc0NsYXNzLT5jYWxsQXNDb25zdHJ1Y3RvcikgeworICAg
ICAgICAgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3Q7CiAgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKLSAgICAKKyAgICAgICAgfQorICAg
IH0KICAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5vbmU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBC
YXNlPgotSlNPYmplY3QqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNvbnN0cnVjdChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU09iamVjdCogSlNDYWxsYmFja09iamVj
dDxCYXNlPjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9y
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9S
ZWYoZXhlYyk7Ci0gICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXMpOworICAgIEpT
T2JqZWN0UmVmIGNvbnN0cnVjdG9yUmVmID0gdG9SZWYoY29uc3RydWN0b3IpOwogICAgIAotICAg
IGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gbV9jbGFzczsganNDbGFzczsganNDbGFzcyA9IGpz
Q2xhc3MtPnBhcmVudENsYXNzKSB7CisgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBzdGF0
aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0PEJhc2U+Kj4oY29uc3RydWN0b3IpLT5jbGFzc1JlZigp
OyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYg
KEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsQXNDb25zdHJ1Y3RvciA9IGpz
Q2xhc3MtPmNhbGxBc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICBpbnQgYXJndW1lbnRDb3Vu
dCA9IHN0YXRpY19jYXN0PGludD4oYXJncy5zaXplKCkpOwogICAgICAgICAgICAgVmVjdG9yPEpT
VmFsdWVSZWYsIDE2PiBhcmd1bWVudHMoYXJndW1lbnRDb3VudCk7CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBhcmd1
bWVudHNbaV0gPSB0b1JlZihhcmdzW2ldKTsKICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrczsKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGNhbGxBc0NvbnN0cnVj
dG9yKGV4ZWNSZWYsIHRoaXNSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRhKCksIHRv
UmVmKGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKGNh
bGxBc0NvbnN0cnVjdG9yKGV4ZWNSZWYsIGNvbnN0cnVjdG9yUmVmLCBhcmd1bWVudENvdW50LCBh
cmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgQVNTRVJUKDApOyAvLyBnZXRDb25zdHJ1Y3REYXRhIHNob3Vs
ZCBwcmV2ZW50IHVzIGZyb20gcmVhY2hpbmcgaGVyZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBnZXRDb25zdHJ1Y3REYXRhIHNob3VsZCBwcmV2ZW50IHVzIGZyb20gcmVhY2hpbmcgaGVy
ZQogICAgIHJldHVybiAwOwogfQogCkBAIC0yOTQsMzAgKzI5NiwzMiBAQCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8QmFzZT46Omhhc0luc3RhbmNlCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgot
Q2FsbFR5cGUgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmKQor
Q2FsbFR5cGUgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNh
bGxEYXRhKQogewotICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gbV9jbGFzczsganNDbGFz
czsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKQotICAgICAgICBpZiAoanNDbGFzcy0+
Y2FsbEFzRnVuY3Rpb24pCisgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBtX2NsYXNzOyBq
c0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKKyAgICAgICAgaWYgKGpz
Q2xhc3MtPmNhbGxBc0Z1bmN0aW9uKSB7CisgICAgICAgICAgICBjYWxsRGF0YS5uYXRpdmUuZnVu
Y3Rpb24gPSBjYWxsOwogICAgICAgICAgICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOwotICAgIAor
ICAgICAgICB9CisgICAgfQogICAgIHJldHVybiBDYWxsVHlwZU5vbmU7CiB9CiAKIHRlbXBsYXRl
IDxjbGFzcyBCYXNlPgotSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCAm
YXJncykKK0pTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhbGwoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMp
OwotICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzKTsKLSAgICBKU09iamVjdFJl
ZiB0aGlzT2JqUmVmID0gdG9SZWYodGhpc09iaik7CisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb25S
ZWYgPSB0b1JlZihmdW5jdGlvbk9iamVjdCk7CisgICAgSlNPYmplY3RSZWYgdGhpc09ialJlZiA9
IHRvUmVmKHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpKTsKICAgICAKLSAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzcyA9IG1fY2xhc3M7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5w
YXJlbnRDbGFzcykgeworICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gc3RhdGljX2Nhc3Q8
SlNDYWxsYmFja09iamVjdDxCYXNlPio+KGZ1bmN0aW9uT2JqZWN0KS0+bV9jbGFzczsganNDbGFz
czsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKSB7CiAgICAgICAgIGlmIChKU09iamVj
dENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBqc0NsYXNzLT5jYWxsQXNG
dW5jdGlvbikgewogICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KGFyZ3Muc2l6ZSgpKTsKICAgICAgICAgICAgIFZlY3RvcjxKU1ZhbHVlUmVmLCAxNj4gYXJn
dW1lbnRzKGFyZ3VtZW50Q291bnQpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBh
cmd1bWVudENvdW50OyBpKyspCiAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9SZWYo
YXJnc1tpXSk7CiAgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7
Ci0gICAgICAgICAgICByZXR1cm4gdG9KUyhjYWxsQXNGdW5jdGlvbihleGVjUmVmLCB0aGlzUmVm
LCB0aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCB0b1JlZihleGVj
LT5leGNlcHRpb25TbG90KCkpKSk7CisgICAgICAgICAgICByZXR1cm4gdG9KUyhjYWxsQXNGdW5j
dGlvbihleGVjUmVmLCBmdW5jdGlvblJlZiwgdGhpc09ialJlZiwgYXJndW1lbnRDb3VudCwgYXJn
dW1lbnRzLmRhdGEoKSwgdG9SZWYoZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSkpOwogICAgICAgICB9
CiAgICAgfQogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lv
biAzNDczNikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlv
bihKU0NvbnRlCiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcodG9K
UyhwYXJhbWV0ZXJOYW1lc1tpXSkpKSk7CiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXhlYywg
VVN0cmluZyhib2R5UmVwKSkpOwogCi0gICAgSlNPYmplY3QqIHJlc3VsdCA9IGV4ZWMtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Db25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywg
YXJncywgbmFtZUlELCBVU3RyaW5nKHNvdXJjZVVSTFJlcCksIHN0YXJ0aW5nTGluZU51bWJlcik7
CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFyZ3MsIG5h
bWVJRCwgVVN0cmluZyhzb3VyY2VVUkxSZXApLCBzdGFydGluZ0xpbmVOdW1iZXIpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMtPmV4Y2VwdGlvbigpKTsKQEAgLTI2Nyw4ICsy
NjcsOCBAQCBib29sIEpTT2JqZWN0U2V0UHJpdmF0ZShKU09iamVjdFJlZiBvYmplCiAKIGJvb2wg
SlNPYmplY3RJc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQogewot
ICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKLSAgICByZXR1cm4ganNPYmpl
Y3QtPmltcGxlbWVudHNDYWxsKCk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgcmV0dXJu
IHRvSlMob2JqZWN0KS0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZTsKIH0K
IAogSlNWYWx1ZVJlZiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIG9iamVjdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKQEAgLTI4NSw3ICsyODUsMTIgQEAgSlNWYWx1ZVJlZiBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KEpTQ29udAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsrKQog
ICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGFyZ3VtZW50c1tpXSkpOwogCi0gICAgSlNWYWx1
ZVJlZiByZXN1bHQgPSB0b1JlZihqc09iamVjdC0+Y2FsbEFzRnVuY3Rpb24oZXhlYywganNUaGlz
T2JqZWN0LCBhcmdMaXN0KSk7IC8vIHJldHVybnMgTlVMTCBpZiBvYmplY3QtPmltcGxlbWVudHND
YWxsKCkgaXMgZmFsc2UKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGpzT2JqZWN0LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1ZhbHVlUmVmIHJl
c3VsdCA9IHRvUmVmKGNhbGwoZXhlYywganNPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNU
aGlzT2JqZWN0LCBhcmdMaXN0KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAg
ICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
Yy0+ZXhjZXB0aW9uKCkpOwpAQCAtMzA3LDEyICszMTIsMTYgQEAgSlNPYmplY3RSZWYgSlNPYmpl
Y3RDYWxsQXNDb25zdHJ1Y3RvcihKUwogICAgIEpTTG9jayBsb2NrOwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7
Ci0gICAgCisKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgQ29uc3RydWN0
VHlwZSBjb25zdHJ1Y3RUeXBlID0ganNPYmplY3QtPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0
RGF0YSk7CisgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpCisgICAg
ICAgIHJldHVybiAwOworCiAgICAgQXJnTGlzdCBhcmdMaXN0OwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsrKQogICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pT
KGFyZ3VtZW50c1tpXSkpOwotICAgIAotICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IHRvUmVmKGpz
T2JqZWN0LT5jb25zdHJ1Y3QoZXhlYywgYXJnTGlzdCkpOyAvLyByZXR1cm5zIE5VTEwgaWYgb2Jq
ZWN0LT5pbXBsZW1lbnRzQ2FsbCgpIGlzIGZhbHNlCisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0g
dG9SZWYoY29uc3RydWN0KGV4ZWMsIGpzT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3RE
YXRhLCBhcmdMaXN0KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAg
IGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYy0+ZXhj
ZXB0aW9uKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysg
SmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsx
ODQsOCBAQCBzdGF0aWMgSlNWYWx1ZSoganNUeXBlU3RyaW5nRm9yVmFsdWUoRXhlCiAgICAgICAg
ICAgICAgICAgLy8gYXMgbnVsbCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zLgogICAgICAgICAgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5tYXNxdWVyYWRlQXNVbmRlZmluZWQo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJ1bmRlZmluZWQi
KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5p
bXBsZW1lbnRzQ2FsbCgpKQorICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAg
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5nZXRDYWxsRGF0YShj
YWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgImZ1bmN0aW9uIik7CiAgICAgICAgICAgICB9CiAKQEAgLTk0Niw3ICs5NDcs
NyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAg
IGNvbnN0cnVjdG9yLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAg
ICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgcltk
c3RdLnUuanNWYWx1ZSA9IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5vYmplY3RDb25zdHJ1
Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgICAgICByW2Rz
dF0udS5qc1ZhbHVlID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAKICAgICAgICAgKyt2
UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtOTU4LDcgKzk1OSw3IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgY29uc3RydWN0b3IsIGFu
ZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBp
bnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0g
c2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0
KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYyk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRf
T1BDT0RFOwpAQCAtMjExNCwxMiArMjExNSwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRl
RXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0gKCpy
ZWdpc3RlckJhc2UpOwogCiAgICAgICAgICAgICByW2ZpcnN0QXJnXS51LmpzVmFsdWUgPSB0aGlz
VmFsID09IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUo
KSA6IChyW3RoaXNWYWxdLnUuanNWYWx1ZSktPnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbZmlyc3RBcmddLnUu
anNWYWx1ZSk7CisgICAgICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWUgPSByW2ZpcnN0QXJnXS51
LmpzVmFsdWU7CiAKICAgICAgICAgICAgIEFyZ0xpc3QgYXJncyhyZWludGVycHJldF9jYXN0PEpT
VmFsdWUqKio+KHJlZ2lzdGVyQmFzZSksIHJlZ2lzdGVyT2Zmc2V0ICsgZmlyc3RBcmcgKyAxLCBh
cmdDb3VudCAtIDEpOwogCiAgICAgICAgICAgICByZWdpc3RlckZpbGUtPnNldFNhZmVGb3JSZWVu
dHJ5KHRydWUpOwotICAgICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KHYpLT5jYWxsQXNGdW5jdGlvbihleGVjLCB0aGlzT2JqLCBhcmdzKTsKKyAg
ICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiksIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAg
ICAgICAgICByZWdpc3RlckZpbGUtPnNldFNhZmVGb3JSZWVudHJ5KGZhbHNlKTsKIAogICAgICAg
ICAgICAgciA9ICgqcmVnaXN0ZXJCYXNlKSArIHJlZ2lzdGVyT2Zmc2V0OwpAQCAtMjI1Niw3ICsy
MjU3LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICAgICAgQXJnTGlzdCBhcmdzKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSoqKj4ocmVnaXN0ZXJC
YXNlKSwgcmVnaXN0ZXJPZmZzZXQgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CiAKICAg
ICAgICAgICAgIHJlZ2lzdGVyRmlsZS0+c2V0U2FmZUZvclJlZW50cnkodHJ1ZSk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdG9yLT5jb25zdHJ1Y3QoZXhlYywg
YXJncyk7CisgICAgICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzKTsKICAgICAgICAgICAgIHJl
Z2lzdGVyRmlsZS0+c2V0U2FmZUZvclJlZW50cnkoZmFsc2UpOwogCiAgICAgICAgICAgICByID0g
KCpyZWdpc3RlckJhc2UpICsgcmVnaXN0ZXJPZmZzZXQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9B
cnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKLSNpbmNsdWRl
ICJBcnJheVByb3RvdHlwZS5sdXQuaCIKIAogI2luY2x1ZGUgIk1hY2hpbmUuaCIKICNpbmNsdWRl
ICJlcnJvcl9vYmplY3QuaCIKQEAgLTM3LDYgKzM2LDMyIEBACiAKIG5hbWVzcGFjZSBLSlMgewog
CitzdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogYXJyYXlQ
cm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNQb3AoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNl
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5j
U3BsaWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGFycmF5UHJv
dG9GdW5jRXZlcnkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogYXJy
YXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZSogYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7CisKK30KKworI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmx1
dC5oIgorCituYW1lc3BhY2UgS0pTIHsKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEFycmF5UHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY29uc3Qg
Q2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjppbmZvID0geyJBcnJheSIsICZKU0FycmF5OjppbmZv
LCAwLCBFeGVjU3RhdGU6OmFycmF5VGFibGV9OwpAQCAtODgsMTAgKzExMywxMSBAQCBzdGF0aWMg
SlNWYWx1ZSogZ2V0UHJvcGVydHkoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIHNsb3QuZ2V0VmFs
dWUoZXhlYywgaW5kZXgpOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZSogYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZKU0FycmF5OjppbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkpT
QXJyYXk6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNBcnJheSo+KHRoaXNWYWx1
ZSk7CiAKICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4mIGFycmF5VmlzaXRlZEVsZW1lbnRzID0gZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5hcnJheVZpc2l0ZWRFbGVtZW50cygpOwogICAgIGlm
IChhcnJheVZpc2l0ZWRFbGVtZW50cy5zaXplKCkgPiBNYXhSZWVudHJ5RGVwdGgpCkBAIC0xMzEs
MTAgKzE1NywxMSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoc3RyQnVmZmVyLmRhdGEoKSwgc3RyQnVm
ZmVyLmRhdGEoKSA/IHN0ckJ1ZmZlci5zaXplKCkgOiAwKSk7CiB9CiAKLUpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pKQor
ICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmSlNBcnJheTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgSlNPYmplY3QqIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDxKU0FycmF5Kj4odGhpc1ZhbHVlKTsKIAogICAgIEhhc2hTZXQ8SlNPYmpl
Y3QqPiYgYXJyYXlWaXNpdGVkRWxlbWVudHMgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkt
PmFycmF5VmlzaXRlZEVsZW1lbnRzKCk7CiAgICAgaWYgKGFycmF5VmlzaXRlZEVsZW1lbnRzLnNp
emUoKSA+IE1heFJlZW50cnlEZXB0aCkKQEAgLTE2Miw4ICsxODksMTAgQEAgSlNWYWx1ZSogYXJy
YXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeAogICAgICAgICBKU09iamVjdCogbyA9IGVsZW1l
bnQtPnRvT2JqZWN0KGV4ZWMpOwogICAgICAgICBKU1ZhbHVlKiBjb252ZXJzaW9uRnVuY3Rpb24g
PSBvLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKICAg
ICAgICAgVVN0cmluZyBzdHI7Ci0gICAgICAgIGlmIChjb252ZXJzaW9uRnVuY3Rpb24tPmlzT2Jq
ZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjb252ZXJzaW9uRnVuY3Rpb24pLT5pbXBs
ZW1lbnRzQ2FsbCgpKQotICAgICAgICAgICAgc3RyID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihj
b252ZXJzaW9uRnVuY3Rpb24pLT5jYWxsQXNGdW5jdGlvbihleGVjLCBvLCBleGVjLT5lbXB0eUxp
c3QoKSktPnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBjb252ZXJzaW9uRnVuY3Rpb24tPmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKKyAgICAgICAg
ICAgIHN0ciA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlzdCgpKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHN0ciA9IGVsZW1lbnQtPnRvU3RyaW5nKGV4ZWMpOwogICAgICAg
ICBzdHJCdWZmZXIuYXBwZW5kKHN0ci5kYXRhKCksIHN0ci5zaXplKCkpOwpAQCAtMTgwLDggKzIw
OSwxMCBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4CiAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoc3RyQnVmZmVyLmRhdGEoKSwgc3RyQnVmZmVyLmRh
dGEoKSA/IHN0ckJ1ZmZlci5zaXplKCkgOiAwKSk7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CisgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKKwogICAg
IEhhc2hTZXQ8SlNPYmplY3QqPiYgYXJyYXlWaXNpdGVkRWxlbWVudHMgPSBleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPmFycmF5VmlzaXRlZEVsZW1lbnRzKCk7CiAgICAgaWYgKGFycmF5Vmlz
aXRlZEVsZW1lbnRzLnNpemUoKSA+IE1heFJlZW50cnlEZXB0aCkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2Vl
ZGVkLiIpOwpAQCAtMjIzLDI1ICsyNTQsMjEgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNKb2lu
KEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKHN0ckJ1ZmZl
ci5kYXRhKCksIHN0ckJ1ZmZlci5kYXRhKCkgPyBzdHJCdWZmZXIuc2l6ZSgpIDogMCkpOwogfQog
Ci1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmND
b25jYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU09iamVjdCogYXJyID0gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+
Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7CisgICAgSlNBcnJheSogYXJyID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjKTsKICAgICBpbnQgbiA9IDA7Ci0gICAgSlNWYWx1ZSog
Y3VyQXJnID0gdGhpc09iajsKLSAgICBKU09iamVjdCogY3VyT2JqID0gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqID4odGhpc09iaik7CisgICAgSlNWYWx1ZSogY3VyQXJnID0gdGhpc1ZhbHVlLT50b1Ro
aXNPYmplY3QoZXhlYyk7CiAgICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJl
Z2luKCk7CiAgICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKICAg
ICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoY3VyQXJnLT5pc09iamVjdCgpICYmIGN1ck9iai0+
aW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBrID0gMDsK
LSAgICAgICAgICAgIC8vIE9sZGVyIHZlcnNpb25zIHRyaWVkIHRvIG9wdGltaXplIG91dCBnZXR0
aW5nIHRoZSBsZW5ndGggb2YgdGhpc09iagotICAgICAgICAgICAgLy8gYnkgY2hlY2tpbmcgZm9y
IG4gIT0gMCwgYnV0IHRoYXQgZG9lc24ndCB3b3JrIGlmIHRoaXNPYmogaXMgYW4gZW1wdHkgYXJy
YXkuCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBjdXJPYmotPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICB3
aGlsZSAoayA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2ID0gZ2V0
UHJvcGVydHkoZXhlYywgY3VyT2JqLCBrKSkKKyAgICAgICAgaWYgKGN1ckFyZy0+aXNPYmplY3Qo
JkpTQXJyYXk6OmluZm8pKSB7CisgICAgICAgICAgICBKU0FycmF5KiBjdXJBcnJheSA9IHN0YXRp
Y19jYXN0PEpTQXJyYXkqPihjdXJBcmcpOworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
Y3VyQXJyYXktPmdldExlbmd0aCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGxlbmd0aDsgKytrKSB7CisgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHYgPSBjdXJB
cnJheS0+Z2V0SXRlbShrKSkKICAgICAgICAgICAgICAgICAgICAgYXJyLT5wdXQoZXhlYywgbiwg
dik7CiAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIGsrKzsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFyci0+cHV0KGV4ZWMsIG4sIGN1
ckFyZyk7CkBAIC0yNTAsMTUgKzI3NywxNSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0NvbmNh
dChFeGVjU3RhdGUqCiAgICAgICAgIGlmIChpdCA9PSBlbmQpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY3VyQXJnID0gKml0OwotICAgICAgICBjdXJPYmogPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KGN1ckFyZyk7IC8vIG1heSBiZSAwCiAgICAgICAgICsraXQ7CiAgICAgfQotICAgIGFy
ci0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMs
IG4pKTsKKyAgICBhcnItPnNldExlbmd0aChuKTsKICAgICByZXR1cm4gYXJyOwogfQogCi1KU1Zh
bHVlKiBhcnJheVByb3RvRnVuY1BvcChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewor
ICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwog
ICAgIGlmIChsZW5ndGggPT0gMCkgewpAQCAtMjcyLDggKzI5OSw5IEBAIEpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1Zh
bHVlKiBhcnJheVByb3RvRnVuY1B1c2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGFycmF5UHJvdG9GdW5jUHVzaChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogeworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmpl
Y3QoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsKICAgICBmb3IgKHVuc2ln
bmVkIG4gPSAwOyBuIDwgYXJncy5zaXplKCk7IG4rKykKICAgICAgICAgdGhpc09iai0+cHV0KGV4
ZWMsIGxlbmd0aCArIG4sIGFyZ3Nbbl0pOwpAQCAtMjgyLDggKzMxMCw5IEBAIEpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
bGVuZ3RoKTsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogYXJyYXlQ
cm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogeworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1Zh
bHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsK
ICAgICB1bnNpZ25lZCBtaWRkbGUgPSBsZW5ndGggLyAyOwogCkBAIC0zMDUsOCArMzM0LDkgQEAg
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZQogICAgIHJldHVybiB0aGlz
T2JqOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogYXJyYXlQcm90b0Z1
bmNTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKIHsKKyAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9U
aGlzT2JqZWN0KGV4ZWMpOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IDA7CiAKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCktPnRvVUludDMyKGV4ZWMpOwpAQCAtMzI3LDEyICszNTcsMTQgQEAgSlNWYWx1ZSogYXJyYXlQ
cm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFs
dWUqIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21h
bnVhbHMvanMvY2xpZW50L2pzcmVmL2FycmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogCisg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKKwog
ICAgIC8vIFdlIHJldHVybiBhIG5ldyBhcnJheQotICAgIEpTT2JqZWN0KiByZXNPYmogPSBzdGF0
aWNfY2FzdDxKU09iamVjdCogPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29u
c3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7CisgICAgSlNB
cnJheSogcmVzT2JqID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjKTsKICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSByZXNPYmo7CiAgICAgZG91YmxlIGJlZ2luID0gYXJnc1swXS0+dG9JbnRlZ2VyKGV4
ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CkBAIC0zNjYsMjIgKzM5OCwyMSBA
QCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogCiAgICAgICAgIGlmIChK
U1ZhbHVlKiB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaykpCiAgICAgICAgICAgICBy
ZXNPYmotPnB1dChleGVjLCBuLCB2KTsKICAgICB9Ci0gICAgcmVzT2JqLT5wdXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbikpOworICAgIHJlc09i
ai0+c2V0TGVuZ3RoKG4pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
Ci0gICAgSlNPYmplY3QqIHNvcnRGdW5jdGlvbiA9IDA7Ci0gICAgaWYgKCFhcmdzWzBdLT5pc1Vu
ZGVmaW5lZCgpKSB7Ci0gICAgICAgIHNvcnRGdW5jdGlvbiA9IGFyZ3NbMF0tPnRvT2JqZWN0KGV4
ZWMpOwotICAgICAgICBpZiAoIXNvcnRGdW5jdGlvbi0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAg
ICAgICAgIHNvcnRGdW5jdGlvbiA9IDA7Ci0gICAgfQorICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
dGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CisKKyAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9
IGFyZ3NbMF07CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogCiAgICAgaWYgKHRoaXNPYmotPmNs
YXNzSW5mbygpID09ICZKU0FycmF5OjppbmZvKSB7Ci0gICAgICAgIGlmIChzb3J0RnVuY3Rpb24p
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxKU0FycmF5Kj4odGhpc09iaiktPnNvcnQoZXhlYywg
c29ydEZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEpTQXJyYXkqPih0aGlzT2JqKS0+c29ydChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8SlNBcnJheSo+KHRoaXNPYmopLT5zb3J0KGV4ZWMpOwogICAgICAgICByZXR1cm4g
dGhpc09iajsKQEAgLTQwNSwxMSArNDM2LDExIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29y
dChFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBjb21wYXJlUmVzdWx0ID0gMTsgLy8gZG9u
J3QgY2hlY2sgbWluT2JqIGJlY2F1c2UgdGhlcmUncyBubyBuZWVkIHRvIGRpZmZlcmVudGlhdGUg
PT0gKDApIGZyb20gPiAoMSkKICAgICAgICAgICAgIGVsc2UgaWYgKG1pbk9iai0+aXNVbmRlZmlu
ZWQoKSkKICAgICAgICAgICAgICAgICBjb21wYXJlUmVzdWx0ID0gLTE7Ci0gICAgICAgICAgICBl
bHNlIGlmIChzb3J0RnVuY3Rpb24pIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNhbGxUeXBlICE9
IENhbGxUeXBlTm9uZSkgewogICAgICAgICAgICAgICAgIEFyZ0xpc3QgbDsKICAgICAgICAgICAg
ICAgICBsLmFwcGVuZChqT2JqKTsKICAgICAgICAgICAgICAgICBsLmFwcGVuZChtaW5PYmopOwot
ICAgICAgICAgICAgICAgIGNvbXBhcmVSZXN1bHQgPSBzb3J0RnVuY3Rpb24tPmNhbGxBc0Z1bmN0
aW9uKGV4ZWMsIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpLCBsKS0+dG9OdW1iZXIoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgY29tcGFyZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCksIGwpLT50b051bWJlcihleGVj
KTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGNvbXBhcmVSZXN1bHQgPSAo
ak9iai0+dG9TdHJpbmcoZXhlYykgPCBtaW5PYmotPnRvU3RyaW5nKGV4ZWMpKSA/IC0xIDogMTsK
IApAQCAtNDI3LDEwICs0NTgsMTIgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNT
dGF0ZSogZQogICAgIHJldHVybiB0aGlzT2JqOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVu
Y1NwbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKKyAg
ICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOworCiAg
ICAgLy8gMTUuNC40LjEyCi0gICAgSlNPYmplY3QqIHJlc09iaiA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0KiA+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5j
b25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpKTsKKyAgICBKU0FycmF5KiByZXNPYmog
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IHJlc09i
ajsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGlmICghYXJncy5zaXplKCkp
CkBAIC00NTEsNyArNDg0LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0
YXRlKgogICAgICAgICBpZiAoSlNWYWx1ZSogdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmos
IGsgKyBiZWdpbikpCiAgICAgICAgICAgICByZXNPYmotPnB1dChleGVjLCBrLCB2KTsKICAgICB9
Ci0gICAgcmVzT2JqLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNO
dW1iZXIoZXhlYywgZGVsZXRlQ291bnQpKTsKKyAgICByZXNPYmotPnNldExlbmd0aChkZWxldGVD
b3VudCk7CiAKICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oYXJn
cy5zaXplKCkgLSAyLCAwKTsKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgIT0gZGVsZXRlQ291bnQp
IHsKQEAgLTQ4MCw4ICs1MTMsMTAgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhl
Y1N0YXRlKgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5j
VW5TaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Cisg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKKwog
ICAgIC8vIDE1LjQuNC4xMwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgdW5z
aWduZWQgbnJBcmdzID0gYXJncy5zaXplKCk7CkBAIC01MDAsMTUgKzUzNSwxOCBAQCBKU1ZhbHVl
KiBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGFycmF5UHJvdG9GdW5j
RmlsdGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNPYmplY3QqIGVhY2hGdW5jdGlvbiA9IGFyZ3Nb
MF0tPnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50
b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoIWVhY2hGdW5jdGlvbi0+aW1wbGVtZW50c0Nh
bGwoKSkKKyAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IGFyZ3NbMF07CisgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2Fs
bERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU09iamVjdCogYXBwbHlUaGlz
ID0gYXJnc1sxXS0+aXNVbmRlZmluZWRPck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgp
IDogIGFyZ3NbMV0tPnRvT2JqZWN0KGV4ZWMpOwotICAgIEpTT2JqZWN0KiByZXN1bHRBcnJheSA9
IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJh
eUNvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSkpOworICAg
IEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzWzFdLT5pc1VuZGVmaW5lZE9yTnVsbCgpID8gZXhl
Yy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBhcmdzWzFdLT50b09iamVjdChleGVjKTsKKyAgICBKU0Fy
cmF5KiByZXN1bHRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYyk7CiAKICAgICB1bnNp
Z25lZCBmaWx0ZXJJbmRleCA9IDA7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsKQEAg
LTUyNiw3ICs1NjQsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZpbHRlcihFeGVjU3RhdGUq
CiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGspKTsKICAgICAg
ICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQodGhpc09iaik7CiAKLSAgICAgICAgSlNWYWx1ZSogcmVz
dWx0ID0gZWFjaEZ1bmN0aW9uLT5jYWxsQXNGdW5jdGlvbihleGVjLCBhcHBseVRoaXMsIGVhY2hB
cmd1bWVudHMpOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7CiAKICAgICAg
ICAgaWYgKHJlc3VsdC0+dG9Cb29sZWFuKGV4ZWMpKQogICAgICAgICAgICAgcmVzdWx0QXJyYXkt
PnB1dChleGVjLCBmaWx0ZXJJbmRleCsrLCB2KTsKQEAgLTUzNCwxOSArNTcyLDIxIEBAIEpTVmFs
dWUqIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gcmVzdWx0QXJy
YXk7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY01hcChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTT2JqZWN0KiBlYWNoRnVuY3Rpb24gPSBhcmdz
WzBdLT50b09iamVjdChleGVjKTsKLSAgICBpZiAoIWVhY2hGdW5jdGlvbi0+aW1wbGVtZW50c0Nh
bGwoKSkKKyAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4
ZWMpOworCisgICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBhcmdzWzBdOworICAgIENhbGxEYXRhIGNh
bGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNPYmplY3QqIGFwcGx5VGhp
cyA9IGFyZ3NbMV0tPmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUo
KSA6ICBhcmdzWzFdLT50b09iamVjdChleGVjKTsKKyAgICBKU09iamVjdCogYXBwbHlUaGlzID0g
YXJnc1sxXS0+aXNVbmRlZmluZWRPck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDog
YXJnc1sxXS0+dG9PYmplY3QoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2Jq
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMp
OwogCi0gICAgQXJnTGlzdCBtYXBBcmdzOwotICAgIG1hcEFyZ3MuYXBwZW5kKGpzTnVtYmVyKGV4
ZWMsIGxlbmd0aCkpOwotICAgIEpTT2JqZWN0KiByZXN1bHRBcnJheSA9IHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheUNvbnN0cnVjdG9yKCkt
PmNvbnN0cnVjdChleGVjLCBtYXBBcmdzKSk7CisgICAgSlNBcnJheSogcmVzdWx0QXJyYXkgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIGxlbmd0aCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7CiAgICAgICAg
IFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmopOwpAQCAtNTYxLDcgKzYwMSw3IEBAIEpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgZWFjaEFyZ3VtZW50cy5h
cHBlbmQoanNOdW1iZXIoZXhlYywgaykpOwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0
aGlzT2JqKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBlYWNoRnVuY3Rpb24tPmNhbGxB
c0Z1bmN0aW9uKGV4ZWMsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7CisgICAgICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBw
bHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dChleGVjLCBr
LCByZXN1bHQpOwogICAgIH0KIApAQCAtNTczLDE0ICs2MTMsMTcgQEAgSlNWYWx1ZSogYXJyYXlQ
cm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleAogLy8gaHR0cDovL2RldmVsb3Blci10ZXN0Lm1vemls
bGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6T2JqZWN0czpBcnJh
eTpmb3JFYWNoCiAvLyBodHRwOi8vZGV2ZWxvcGVyLXRlc3QubW96aWxsYS5vcmcvZW4vZG9jcy9D
b3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZTpPYmplY3RzOkFycmF5OnNvbWUKIAotSlNWYWx1
ZSogYXJyYXlQcm90b0Z1bmNFdmVyeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNFdmVyeShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewotICAgIEpTT2JqZWN0KiBlYWNoRnVuY3Rpb24gPSBhcmdzWzBdLT50b09iamVj
dChleGVjKTsKKyAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0
KGV4ZWMpOwogCi0gICAgaWYgKCFlYWNoRnVuY3Rpb24tPmltcGxlbWVudHNDYWxsKCkpCisgICAg
SlNWYWx1ZSogZnVuY3Rpb24gPSBhcmdzWzBdOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAg
ICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGFyZ3NbMV0t
PmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6ICBhcmdzWzFd
LT50b09iamVjdChleGVjKTsKKyAgICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJnc1sxXS0+aXNV
bmRlZmluZWRPck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJnc1sxXS0+dG9P
YmplY3QoZXhlYyk7CiAKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CiAK
QEAgLTU5Nyw3ICs2NDAsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNTdGF0
ZSogCiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGspKTsKICAg
ICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQodGhpc09iaik7CiAKLSAgICAgICAgYm9vbCBwcmVk
aWNhdGVSZXN1bHQgPSBlYWNoRnVuY3Rpb24tPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIGFwcGx5VGhp
cywgZWFjaEFyZ3VtZW50cyktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBwcmVkaWNh
dGVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5
VGhpcywgZWFjaEFyZ3VtZW50cyktPnRvQm9vbGVhbihleGVjKTsKIAogICAgICAgICBpZiAoIXBy
ZWRpY2F0ZVJlc3VsdCkgewogICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGZhbHNlKTsK
QEAgLTYwOCwxNCArNjUxLDE3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0
YXRlKiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0Zv
ckVhY2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUqIGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAg
IEpTT2JqZWN0KiBlYWNoRnVuY3Rpb24gPSBhcmdzWzBdLT50b09iamVjdChleGVjKTsKKyAgICBK
U09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCi0gICAg
aWYgKCFlYWNoRnVuY3Rpb24tPmltcGxlbWVudHNDYWxsKCkpCisgICAgSlNWYWx1ZSogZnVuY3Rp
b24gPSBhcmdzWzBdOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwogCi0gICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGFyZ3NbMV0tPmlzVW5kZWZpbmVkT3JO
dWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6ICBhcmdzWzFdLT50b09iamVjdChleGVj
KTsKKyAgICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJnc1sxXS0+aXNVbmRlZmluZWRPck51bGwo
KSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJnc1sxXS0+dG9PYmplY3QoZXhlYyk7CiAK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7
IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKQEAgLTYyOCwxOSAr
Njc0LDIyIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUKICAgICAg
ICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoZXhlYywgaykpOwogICAgICAgICBlYWNo
QXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIAotICAgICAgICBlYWNoRnVuY3Rpb24tPmNhbGxB
c0Z1bmN0aW9uKGV4ZWMsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7CisgICAgICAgIGNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1l
bnRzKTsKICAgICB9CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7Ci0gICAgSlNPYmplY3QqIGVhY2hGdW5jdGlvbiA9IGFyZ3NbMF0tPnRvT2JqZWN0KGV4ZWMp
OworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7
CiAKLSAgICBpZiAoIWVhY2hGdW5jdGlvbi0+aW1wbGVtZW50c0NhbGwoKSkKKyAgICBKU1ZhbHVl
KiBmdW5jdGlvbiA9IGFyZ3NbMF07CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOworICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CiAKLSAgICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJnc1sxXS0+aXNVbmRl
ZmluZWRPck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogIGFyZ3NbMV0tPnRvT2Jq
ZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzWzFdLT5pc1VuZGVmaW5l
ZE9yTnVsbCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBhcmdzWzFdLT50b09iamVjdChl
eGVjKTsKIAogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CiAKQEAgLTY1
NSw3ICs3MDQsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBlCiAg
ICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGspKTsKICAgICAgICAg
ZWFjaEFyZ3VtZW50cy5hcHBlbmQodGhpc09iaik7CiAKLSAgICAgICAgYm9vbCBwcmVkaWNhdGVS
ZXN1bHQgPSBlYWNoRnVuY3Rpb24tPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIGFwcGx5VGhpcywgZWFj
aEFyZ3VtZW50cyktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1
bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywg
ZWFjaEFyZ3VtZW50cyktPnRvQm9vbGVhbihleGVjKTsKIAogICAgICAgICBpZiAocHJlZGljYXRl
UmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CkBAIC02NjUs
MTEgKzcxNCwxMyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBlCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBKYXZh
U2NyaXB0IDEuNSBFeHRlbnNpb24gYnkgTW96aWxsYQogICAgIC8vIERvY3VtZW50YXRpb246IGh0
dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41X1Jl
ZmVyZW5jZTpHbG9iYWxfT2JqZWN0czpBcnJheTppbmRleE9mCiAKKyAgICBKU09iamVjdCogdGhp
c09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOworCiAgICAgdW5zaWduZWQgaW5k
ZXggPSAwOwogICAgIGRvdWJsZSBkID0gYXJnc1sxXS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CkBAIC02OTQsMTEgKzc0NSwxMyBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IC0xKTsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEphdmFTY3Jp
cHQgMS42IEV4dGVuc2lvbiBieSBNb3ppbGxhCiAgICAgLy8gRG9jdW1lbnRhdGlvbjogaHR0cDov
L2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJl
bmNlOkdsb2JhbF9PYmplY3RzOkFycmF5Omxhc3RJbmRleE9mCiAKKyAgICBKU09iamVjdCogdGhp
c09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOworCiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50
b1VJbnQzMihleGVjKTsKICAgICBpbnQgaW5kZXggPSBsZW5ndGggLSAxOwogICAgIGRvdWJsZSBk
ID0gYXJnc1sxXS0+dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CkBAIC03MzIsMTYgKzc4NSwx
MCBAQCBBcnJheUNvbnN0cnVjdG9yOjpBcnJheUNvbnN0cnVjdG9yKEV4ZWNTCiAgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGFycmF5UHJvdG8sIERvbnRFbnVt
fERvbnREZWxldGV8UmVhZE9ubHkpOwogCiAgICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3IgY29u
c3RydWN0b3IKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNO
dW1iZXIoZXhlYywgMSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICAgIHB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVh
ZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogfQogCi1Db25zdHJ1Y3RUeXBlIEFycmF5
Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpCi17Ci0gICAgcmV0
dXJuIENvbnN0cnVjdFR5cGVOYXRpdmU7Ci19Ci0KLS8vIEVDTUEgMTUuNC4yCi1KU09iamVjdCog
QXJyYXlDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBhIHNpbmdsZSBu
dW1lcmljIGFyZ3VtZW50IGRlbm90ZXMgdGhlIGFycmF5IHNpemUgKCEpCiAgICAgaWYgKGFyZ3Mu
c2l6ZSgpID09IDEgJiYgYXJnc1swXS0+aXNOdW1iZXIoKSkgewpAQCAtNzU1LDExICs4MDIsMjkg
QEAgSlNPYmplY3QqIEFycmF5Q29uc3RydWN0b3I6OmNvbnN0cnVjdChFeAogICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVByb3Rv
dHlwZSgpLCBhcmdzKTsKIH0KIAorc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXaXRoQXJyYXlD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3sKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKGV4ZWMsIGFyZ3Mp
OworfQorCisvLyBFQ01BIDE1LjQuMgorQ29uc3RydWN0VHlwZSBBcnJheUNvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXaXRoQXJyYXlDb25zdHJ1Y3Rv
cjsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKK30KKworc3RhdGljIEpTVmFsdWUq
IGNhbGxBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXlXaXRo
U2l6ZVF1aXJrKGV4ZWMsIGFyZ3MpOworfQorCiAvLyBFQ01BIDE1LjYuMQotSlNWYWx1ZSogQXJy
YXlDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitDYWxsVHlwZSBBcnJheUNvbnN0cnVjdG9yOjpnZXRDYWxs
RGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCiB7CiAgICAgLy8gZXF1aXZhbGVudCB0byAnbmV3IEFy
cmF5KC4uLi4pJwotICAgIHJldHVybiBjb25zdHJ1Y3QoZXhlYywgYXJncyk7CisgICAgY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbEFycmF5Q29uc3RydWN0b3I7CisgICAgcmV0dXJuIENh
bGxUeXBlTmF0aXZlOwogfQogCiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlQcm90b3R5cGUu
aAkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvQXJyYXlQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksMzQgKzM5LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICBj
bGFzcyBBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICBwdWJs
aWM6CiAgICAgQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSos
IEFycmF5UHJvdG90eXBlKik7Ci0KICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3Ry
dWN0RGF0YShDb25zdHJ1Y3REYXRhJik7Ci0gICAgdmlydHVhbCBKU09iamVjdCogY29uc3RydWN0
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLQotICAgIHZpcnR1YWwgSlNWYWx1ZSogY2Fs
bEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0KKyAg
ICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAgIH07CiAKLSAgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0
IEFyZ0xpc3QmKTsKLSAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFy
Z0xpc3QmKTsKLSAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUHVzaChFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBK
U1ZhbHVlKiBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3Qg
QXJnTGlzdCYpOwotICBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvcnQo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwot
ICBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBj
b25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5j
Rm9yRWFjaChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNWYWx1
ZSogYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlz
dCYpOwotICBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBhcnJheVBy
b3RvRnVuY01hcChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IEFyZ0xpc3QmKTsKLQogfSAvLyBuYW1lc3BhY2UgS0pTCiAKICNlbmRpZiAvLyBBcnJheVBy
b3RvdHlwZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhbk9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0Jvb2xlYW5PYmplY3QuY3BwCShyZXZpc2lv
biAzNDczNikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9Cb29sZWFuT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQCBCb29sZWFuT2JqZWN0OjpCb29sZWFuT2JqZWN0KEpT
T2JqZWN0KiBwCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQm9vbGVhblByb3Rv
dHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBGdW5jdGlvbnMKLXN0YXRpYyBK
U1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1ZhbHVlT2Yo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSog
Ym9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVmFsdWVP
ZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiAKIC8v
IEVDTUEgMTUuNi40CiAKQEAgLTU5LDI2ICs1OSwyNiBAQCBCb29sZWFuUHJvdG90eXBlOjpCb29s
ZWFuUHJvdG90eXBlKEV4ZWNTCiAKIC8vIEVDTUEgMTUuNi40LjIgKyAxNS42LjQuMwogCi1KU1Zh
bHVlKiBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6
aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAg
aWYgKEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4odGhpc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIEpTSW1tZWRpYXRlOjp0b1N0cmluZyh0aGlzVmFsdWUpKTsKIAotICAgIEpT
VmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxCb29sZWFuT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFs
VmFsdWUoKTsKLSAgICBBU1NFUlQodik7CisgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZC
b29sZWFuT2JqZWN0OjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKIAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB2LT50b1N0cmluZyhleGVjKSk7
CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIEpTSW1tZWRpYXRlOjp0b1N0cmluZyhzdGF0aWNf
Y2FzdDxCb29sZWFuT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpKSk7CiB9Ci1K
U1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKKworSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1Zh
bHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmQm9vbGVhbk9iamVj
dDo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Cisg
ICAgaWYgKEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4odGhpc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IHRoaXNWYWx1ZTsKIAotICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxCb29sZWFuT2JqZWN0
Kj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKTsKLSAgICBBU1NFUlQodik7CisgICAgaWYgKCF0
aGlzVmFsdWUtPmlzT2JqZWN0KCZCb29sZWFuT2JqZWN0OjppbmZvKSkKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIC8vIFRPRE86IG9wdGltaXplIGZv
ciBib29sIGNhc2UKLSAgICByZXR1cm4ganNCb29sZWFuKHYtPnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEJvb2xlYW5PYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5h
bFZhbHVlKCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCb29sZWFu
Q29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkzLDI0ICs5Myw0
MiBAQCBCb29sZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3RvcihFCiAgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFk
T25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKLUNvbnN0cnVjdFR5cGUgQm9vbGVh
bkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKQotewotICAgIHJl
dHVybiBDb25zdHJ1Y3RUeXBlTmF0aXZlOwotfQotCiAvLyBFQ01BIDE1LjYuMgotSlNPYmplY3Qq
IEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBCb29sZWFuT2JqZWN0KiBvYmoobmV3IChleGVj
KSBCb29sZWFuT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Ym9vbGVhblByb3Rv
dHlwZSgpKSk7CisgICAgQm9vbGVhbk9iamVjdCogb2JqID0gbmV3IChleGVjKSBCb29sZWFuT2Jq
ZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Ym9vbGVhblByb3RvdHlwZSgpKTsKICAg
ICBvYmotPnNldEludGVybmFsVmFsdWUoanNCb29sZWFuKGFyZ3NbMF0tPnRvQm9vbGVhbihleGVj
KSkpOwogICAgIHJldHVybiBvYmo7CiB9CiAKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0V2l0
aEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJn
TGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gY29uc3RydWN0Qm9vbGVhbihleGVjLCBhcmdzKTsK
K30KKworQ29uc3RydWN0VHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2
ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFdpdGhCb29sZWFuQ29uc3RydWN0b3I7CisgICAgcmV0dXJu
IENvbnN0cnVjdFR5cGVOYXRpdmU7Cit9CisKIC8vIEVDTUEgMTUuNi4xCi1KU1ZhbHVlKiBCb29s
ZWFuQ29uc3RydWN0b3I6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUqIGNhbGxCb29sZWFuQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewotICAgIC8vIFRPRE86IG9wdGltaXplIGZvciBib29sIGNhc2UKICAgICByZXR1
cm4ganNCb29sZWFuKGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKSk7CiB9CiAKK0NhbGxUeXBlIEJv
b2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAg
IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxCb29sZWFuQ29uc3RydWN0b3I7CisgICAg
cmV0dXJuIENhbGxUeXBlTmF0aXZlOworfQorCitKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbkZy
b21JbW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogaW1tZWRpYXRlQm9v
bGVhblZhbHVlKQoreworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgQm9vbGVh
bk9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmJvb2xlYW5Qcm90b3R5cGUoKSk7
CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSk7CisgICAg
cmV0dXJuIG9iajsKK30KKwogfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvQm9vbGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9C
b29sZWFuT2JqZWN0LmgJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0Jv
b2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDE0IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIGNsYXNzIEJvb2xlYW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3Rh
dGUqLCBGdW5jdGlvblByb3RvdHlwZSosIEJvb2xlYW5Qcm90b3R5cGUqKTsKLQorICAgIHByaXZh
dGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0
cnVjdERhdGEmKTsKLSAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOworICAgICAgICB2
aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAgICAgfTsKIAorICAgIEpT
T2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oRXhlY1N0YXRlKiwg
SlNWYWx1ZSopOworICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNTdGF0ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKKwogfSAvLyBuYW1lc3BhY2UgS0pTCiAKICNlbmRpZiAvLyBCb29sZWFu
T2JqZWN0X2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9DYWxsRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9DYWxsRGF0YS5oCShyZXZpc2lvbiAzNDczNikKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9DYWxsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSwx
MSBAQAogCiBuYW1lc3BhY2UgS0pTIHsKIAorICAgIGNsYXNzIEFyZ0xpc3Q7CisgICAgY2xhc3Mg
RXhlY1N0YXRlOwogICAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CisgICAgY2xhc3MgSlNPYmpl
Y3Q7CisgICAgY2xhc3MgSlNWYWx1ZTsKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKIAogICAg
IGVudW0gQ2FsbFR5cGUgewpAQCAtNDAsMTMgKzQ0LDIwIEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICBDYWxsVHlwZUpTCiAgICAgfTsKIAorICAgIHR5cGVkZWYgSlNWYWx1ZSogKCpOYXRpdmVG
dW5jdGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKKwogICAgIHVuaW9uIENhbGxEYXRhIHsKICAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uOworICAgICAgICB9IG5hdGl2ZTsKKyAg
ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9k
eTsKICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluOwogICAgICAgICB9IGpz
OwogICAgIH07CiAKKyAgICBKU1ZhbHVlKiBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIGZ1bmN0
aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKKwogfSAvLyBuYW1lc3BhY2UgS0pTCiAKICNlbmRpZiAvLyBDYWxs
RGF0YV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQ29uc3RydWN0RGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9Db25zdHJ1Y3REYXRhLmgJKHJldmlzaW9uIDM0NzM2
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0NvbnN0cnVjdERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOCArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKKyAgICBjbGFzcyBBcmdMaXN0
OworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOwotICAg
IGNsYXNzIFNjb3BlQ2hhaW47CisgICAgY2xhc3MgSlNPYmplY3Q7CisgICAgY2xhc3MgSlNWYWx1
ZTsKKyAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKIAogICAgIGVudW0gQ29uc3RydWN0VHlwZSB7
CiAgICAgICAgIENvbnN0cnVjdFR5cGVOb25lLApAQCAtNDAsMTMgKzQ0LDIwIEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICBDb25zdHJ1Y3RUeXBlSlMKICAgICB9OwogCisgICAgdHlwZWRlZiBK
U09iamVjdCogKCpOYXRpdmVDb25zdHJ1Y3RvcikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBBcmdMaXN0Jik7CisKICAgICB1bmlvbiBDb25zdHJ1Y3REYXRhIHsKICAgICAgICAgc3RydWN0
IHsKKyAgICAgICAgICAgIE5hdGl2ZUNvbnN0cnVjdG9yIGZ1bmN0aW9uOworICAgICAgICB9IG5h
dGl2ZTsKKyAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1
bmN0aW9uQm9keTsKICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluOwogICAg
ICAgICB9IGpzOwogICAgIH07CiAKKyAgICBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSos
IEpTVmFsdWUqIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRh
JiwgY29uc3QgQXJnTGlzdCYpOworCiB9IC8vIG5hbWVzcGFjZSBLSlMKIAogI2VuZGlmIC8vIENv
bnN0cnVjdERhdGFfaApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAzNDczNikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvblByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDkgQEAgbmFtZXNwYWNlIEtKUyB7
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvblByb3RvdHlwZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvblByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUqIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxs
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUq
IGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUHJvdG9GdW5jQXBw
bHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWUqIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiAKIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlv
blByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMpCiB7CkBAIC01MSw0MCArNTEsNDYgQEAgRnVuY3Rp
b25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJvdG90eXBlKEV4ZQogICAgIHB1dERpcmVjdEZ1bmN0aW9u
KG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCksIERvbnRFbnVtKTsKIH0KIAot
Ly8gRUNNQSAxNS4zLjQKLUpTVmFsdWUqIEZ1bmN0aW9uUHJvdG90eXBlOjpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKQorc3RhdGljIEpTVmFsdWUq
IGNhbGxGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAorLy8gRUNN
QSAxNS4zLjQKK0NhbGxUeXBlIEZ1bmN0aW9uUHJvdG90eXBlOjpnZXRDYWxsRGF0YShDYWxsRGF0
YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbEZ1bmN0
aW9uUHJvdG90eXBlOworICAgIHJldHVybiBDYWxsVHlwZU5hdGl2ZTsKK30KKwogLy8gRnVuY3Rp
b25zCiAKLUpTVmFsdWUqIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBmdW5jdGlvblBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09iaiB8fCAhdGhpc09iai0+
aW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb246OmluZm8pKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwiYXR0ZW1wdGVkIHRvU3RyaW5nKCkgY2FsbCBvbiBudWxsIG9y
IG5vbi1mdW5jdGlvbiBvYmplY3RcbiIpOwotI2VuZGlmCisgICAgaWYgKCF0aGlzVmFsdWUtPmlz
T2JqZWN0KCZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICB9CiAKLSAgICBpZiAodGhpc09iai0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OmluZm8pKSB7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZpID0gc3RhdGljX2Nh
c3Q8SlNGdW5jdGlvbio+KHRoaXNPYmopOworICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHRoaXNWYWx1ZSk7CisKKyAgICBpZiAo
ZnVuY3Rpb24tPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSkgeworICAgICAgICBKU0Z1bmN0
aW9uKiBmaSA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPih0aGlzVmFsdWUpOwogICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1bmN0aW9uICIgKyBmaS0+ZnVuY3Rpb25OYW1lKCkudXN0
cmluZygpICsgIigiICsgZmktPmJvZHktPnBhcmFtU3RyaW5nKCkgKyAiKSAiICsgZmktPmJvZHkt
PnRvU291cmNlU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAi
ZnVuY3Rpb24gIiArIHN0YXRpY19jYXN0PEludGVybmFsRnVuY3Rpb24qPih0aGlzT2JqKS0+ZnVu
Y3Rpb25OYW1lKCkudXN0cmluZygpICsgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59Iik7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiICsgZnVuY3Rpb24tPmZ1bmN0aW9u
TmFtZSgpLnVzdHJpbmcoKSArICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpOwogfQogCi1K
U1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVu
Y0FwcGx5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbXBsZW1lbnRzQ2FsbCgp
KQorICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGhpc1Zh
bHVlLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
Tm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAg
IEpTVmFsdWUqIHRoaXNBcmcgPSBhcmdzWzBdOwogICAgIEpTVmFsdWUqIGFyZ0FycmF5ID0gYXJn
c1sxXTsKIAotICAgIEpTT2JqZWN0KiBhcHBseVRoaXM7CisgICAgSlNWYWx1ZSogYXBwbHlUaGlz
OwogICAgIGlmICh0aGlzQXJnLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBhcHBseVRo
aXMgPSBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKICAgICBlbHNlCkBAIC0xMDQsMTIgKzExMCwx
NCBAQCBKU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0CiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIH0KIAotICAgIHJldHVy
biB0aGlzT2JqLT5jYWxsQXNGdW5jdGlvbihleGVjLCBhcHBseVRoaXMsIGFwcGx5QXJncyk7Cisg
ICAgcmV0dXJuIGNhbGwoZXhlYywgdGhpc1ZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5
VGhpcywgYXBwbHlBcmdzKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRo
aXNPYmotPmltcGxlbWVudHNDYWxsKCkpCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSB0aGlzVmFsdWUtPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogCiAgICAgSlNWYWx1ZSogdGhpc0FyZyA9IGFyZ3NbMF07CkBAIC0x
MjIsNyArMTMwLDcgQEAgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZQog
CiAgICAgQXJnTGlzdCBhcmdzVGFpbDsKICAgICBhcmdzLmdldFNsaWNlKDEsIGFyZ3NUYWlsKTsK
LSAgICByZXR1cm4gdGhpc09iai0+Y2FsbEFzRnVuY3Rpb24oZXhlYywgY2FsbFRoaXMsIGFyZ3NU
YWlsKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCB0aGlzVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgY2FsbFRoaXMsIGFyZ3NUYWlsKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9uQ29uc3RydWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMTM2LDEzICsxNDQsMzEgQEAgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6RnVuY3Rpb25Db25zdHJ1
Y3RvcgogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJl
cihleGVjLCAxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCi1Db25z
dHJ1Y3RUeXBlIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0
RGF0YSYpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdpdGhGdW5jdGlvbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeworICAg
IHJldHVybiBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhcmdzKTsKK30KKworQ29uc3RydWN0VHlw
ZSBGdW5jdGlvbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25z
dHJ1Y3RXaXRoRnVuY3Rpb25Db25zdHJ1Y3RvcjsKICAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5h
dGl2ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUqIGNhbGxGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sK
KyAgICByZXR1cm4gY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXJncyk7Cit9CisKKy8vIEVDTUEg
MTUuMy4xIFRoZSBGdW5jdGlvbiBDb25zdHJ1Y3RvciBDYWxsZWQgYXMgYSBGdW5jdGlvbgorQ2Fs
bFR5cGUgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRh
KQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxGdW5jdGlvbkNvbnN0cnVj
dG9yOworICAgIHJldHVybiBDYWxsVHlwZU5hdGl2ZTsKK30KKwogLy8gRUNNQSAxNS4zLjIgVGhl
IEZ1bmN0aW9uIENvbnN0cnVjdG9yCi1KU09iamVjdCogRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y29u
c3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgSWRlbnRp
ZmllciYgZnVuY3Rpb25OYW1lLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVt
YmVyKQorSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncywgY29uc3QgSWRlbnRpZmllciYgZnVuY3Rpb25OYW1lLCBjb25zdCBVU3Ry
aW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKQogewogICAgIFVTdHJpbmcgcCgiIik7CiAg
ICAgVVN0cmluZyBib2R5OwpAQCAtMTc0LDcgKzIwMCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkNv
bnN0cnVjdG9yOjpjb25zdHJ1Y3QKICAgICBmdW5jdGlvbkJvZHktPnNldFNvdXJjZShTb3VyY2VS
YW5nZShzb3VyY2UsIDAsIHNvdXJjZS0+bGVuZ3RoKCkpKTsKICAgICBTY29wZUNoYWluIHNjb3Bl
Q2hhaW4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5nbG9iYWxUaGlzVmFsdWUo
KSk7CiAKLSAgICBKU0Z1bmN0aW9uKiBmaW1wID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMs
IGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25Cb2R5LmdldCgpLCBzY29wZUNoYWluLm5vZGUoKSk7Cisg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZnVu
Y3Rpb25OYW1lLCBmdW5jdGlvbkJvZHkuZ2V0KCksIHNjb3BlQ2hhaW4ubm9kZSgpKTsKIAogICAg
IC8vIHBhcnNlIHBhcmFtZXRlciBsaXN0LiB0aHJvdyBzeW50YXggZXJyb3Igb24gaWxsZWdhbCBp
ZGVudGlmaWVycwogICAgIGludCBsZW4gPSBwLnNpemUoKTsKQEAgLTIwNywyMyArMjMzLDE2IEBA
IEpTT2JqZWN0KiBGdW5jdGlvbkNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJTeW50YXggZXJyb3IgaW4gcGFyYW1ldGVy
IGxpc3QiKTsKICAgICB9CiAgIAotICAgIEpTT2JqZWN0KiBvYmpDb25zID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5vYmplY3RDb25zdHJ1Y3RvcigpOwotICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBvYmpDb25zLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAg
IHByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
ZmltcCwgRG9udEVudW0pOwotICAgIGZpbXAtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnREZWxldGUpOwotICAgIHJldHVybiBmaW1wOwor
ICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAg
ICBwcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IGZ1bmN0aW9uLCBEb250RW51bSk7CisgICAgZnVuY3Rpb24tPnB1dERpcmVjdChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnREZWxldGUpOworICAgIHJldHVy
biBmdW5jdGlvbjsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9uIENvbnN0cnVjdG9y
Ci1KU09iamVjdCogRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIGFy
Z3MsIElkZW50aWZpZXIoZXhlYywgImFub255bW91cyIpLCBVU3RyaW5nKCksIDEpOwotfQotCi0v
LyBFQ01BIDE1LjMuMSBUaGUgRnVuY3Rpb24gQ29uc3RydWN0b3IgQ2FsbGVkIGFzIGEgRnVuY3Rp
b24KLUpTVmFsdWUqIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNPYmplY3QqIGNvbnN0
cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAg
ICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIGFyZ3MpOworICAgIHJldHVybiBjb25zdHJ1Y3RGdW5j
dGlvbihleGVjLCBhcmdzLCBJZGVudGlmaWVyKGV4ZWMsICJhbm9ueW1vdXMiKSwgVVN0cmluZygp
LCAxKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
RnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRnVu
Y3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
RnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZSA6IHB1YmxpYyBJbnRlcm5h
bEZ1bmN0aW9uIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNT
dGF0ZSopOwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
dmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAgIH07CiAKICAgICAv
KioKQEAgLTQ5LDE0ICs0OSwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBGdW5jdGlv
bkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoKICAg
ICAgICAgRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSop
OwotCisgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwotICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25z
dHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwotICAgICAgICB2aXJ0dWFsIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJl
cik7Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAgIH07CiAKKyAgICBKU09iamVjdCogY29uc3RydWN0
RnVuY3Rpb24oRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IElkZW50aWZpZXImIGZ1
bmN0aW9uTmFtZSwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7Cisg
ICAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKKwogfSAvLyBuYW1lc3BhY2UgS0pTCiAKICNlbmRpZiAvLyBfRlVOQ1RJT05fT0JKRUNUX0hf
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAzNDczNikKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKIAorI2luY2x1ZGUgIkFy
cmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9BVkxUcmVlLmg+CkBAIC01NTcsOCAr
NTU4LDEwIEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIAogICAg
IFZlY3RvcjxBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZT4gbV9ub2RlczsKICAgICBFeGVjU3Rh
dGUqIG1fZXhlYzsKLSAgICBKU09iamVjdCogbV9jb21wYXJlRnVuY3Rpb247Ci0gICAgSlNPYmpl
Y3QqIG1fZ2xvYmFsVGhpc1ZhbHVlOworICAgIEpTVmFsdWUqIG1fY29tcGFyZUZ1bmN0aW9uOwor
ICAgIENhbGxUeXBlIG1fY29tcGFyZUNhbGxUeXBlOworICAgIGNvbnN0IENhbGxEYXRhKiBtX2Nv
bXBhcmVDYWxsRGF0YTsKKyAgICBKU1ZhbHVlKiBtX2dsb2JhbFRoaXNWYWx1ZTsKIAogICAgIGhh
bmRsZSBnZXRfbGVzcyhoYW5kbGUgaCkgeyByZXR1cm4gbV9ub2Rlc1toXS5sdCAmIDB4N0ZGRkZG
RkY7IH0KICAgICB2b2lkIHNldF9sZXNzKGhhbmRsZSBoLCBoYW5kbGUgbGgpIHsgbV9ub2Rlc1to
XS5sdCAmPSAweDgwMDAwMDAwOyBtX25vZGVzW2hdLmx0IHw9IGxoOyB9CkBAIC01OTUsNyArNTk4
LDcgQEAgc3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlIAogICAgICAgICBB
cmdMaXN0IGFyZ3VtZW50czsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YSk7CiAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQodmIpOwotICAgICAgICBkb3VibGUgY29tcGFyZVJlc3VsdCA9IG1f
Y29tcGFyZUZ1bmN0aW9uLT5jYWxsQXNGdW5jdGlvbihtX2V4ZWMsIG1fZ2xvYmFsVGhpc1ZhbHVl
LCBhcmd1bWVudHMpLT50b051bWJlcihtX2V4ZWMpOworICAgICAgICBkb3VibGUgY29tcGFyZVJl
c3VsdCA9IGNhbGwobV9leGVjLCBtX2NvbXBhcmVGdW5jdGlvbiwgbV9jb21wYXJlQ2FsbFR5cGUs
ICptX2NvbXBhcmVDYWxsRGF0YSwgbV9nbG9iYWxUaGlzVmFsdWUsIGFyZ3VtZW50cyktPnRvTnVt
YmVyKG1fZXhlYyk7CiAgICAgICAgIHJldHVybiAoY29tcGFyZVJlc3VsdCA8IDApID8gLTEgOiAx
OyAvLyBOb3QgcGFzc2luZyBlcXVhbGl0eSB0aHJvdWdoLCBiZWNhdXNlIHdlIG5lZWQgdG8gc3Rv
cmUgYWxsIHZhbHVlcywgZXZlbiBpZiBlcXVpdmFsZW50LgogICAgIH0KIApAQCAtNjA1LDcgKzYw
OCw3IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKICAgICBzdGF0
aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAweDdGRkZGRkZGOyB9CiB9OwogCi12b2lkIEpTQXJy
YXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29tcGFyZUZ1bmN0aW9uKQordm9p
ZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogY29tcGFyZUZ1bmN0aW9u
LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtNjI1LDYgKzYyOCw4IEBAIHZvaWQgSlNBcnJheTo6c29y
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2IKICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9y
QXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0
ZW1zCiAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKICAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOworICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwogICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fZ2xvYmFsVGhpc1ZhbHVlID0gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCk7CiAgICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5yZXNpemUodXNlZFZlY3Rvckxlbmd0aCArIChtX3N0b3Jh
Z2UtPm1fc3BhcnNlVmFsdWVNYXAgPyBtX3N0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAtPnNpemUo
KSA6IDApKTsKIApAQCAtODEwLDQgKzgxNSwyNiBAQCB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lz
dGVuY3koQ29uc2lzdGVuCiAKICNlbmRpZgogCitKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKSwgMCk7Cit9CisKK0pTQXJy
YXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQoreworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcnJheVByb3RvdHlwZSgpLCBpbml0aWFsTGVuZ3RoKTsKK30KKworSlNB
cnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBzaW5nbGVJdGVt
VmFsdWUpCit7CisgICAgQXJnTGlzdCB2YWx1ZXM7CisgICAgdmFsdWVzLmFwcGVuZChzaW5nbGVJ
dGVtVmFsdWUpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcnJheVByb3RvdHlwZSgpLCB2YWx1ZXMpOworfQorCitKU0FycmF5KiBj
b25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKK3sK
KyAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+YXJyYXlQcm90b3R5cGUoKSwgdmFsdWVzKTsKK30KKwogfQpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBcnJh
eS5oCShyZXZpc2lvbiAzNDczNikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0FycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDM2ICszMiwzOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGlj
OgogICAgIEpTQXJyYXkoSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCk7CiAgICAgSlNBcnJheShKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBBcmdMaXN0JiBpbml0
aWFsVmFsdWVzKTsKLSAgICB+SlNBcnJheSgpOworICAgIHZpcnR1YWwgfkpTQXJyYXkoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOwotICAgIHZpcnR1YWwg
Ym9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMo
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJr
KCk7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUqKTsgLy8gRklYTUU6IE1ha2UgcHJvdGVjdGVkIGFuZCBhZGQgc2V0SXRlbS4K
IAotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAogICAgIHVuc2ln
bmVkIGdldExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdm9pZCBzZXRM
ZW5ndGgodW5zaWduZWQpOyAvLyBPSyB0byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBp
dCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNoQXJyYXkuCiAgICAgSlNWYWx1ZSogZ2V0SXRlbSh1bnNp
Z25lZCkgY29uc3Q7CiAKICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlKik7Ci0gICAgdm9pZCBzb3J0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBjb21wYXJlRnVuY3Rpb24pOworICAgIHZvaWQgc29ydChF
eGVjU3RhdGUqLCBKU1ZhbHVlKiBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxs
RGF0YSYpOwogCiAgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgIHZpcnR1YWwg
Ym9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CisgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KwogICAgIHZvaWQqIGxhenlDcmVhdGlvbkRhdGEoKTsKICAgICB2b2lkIHNldExhenlDcmVhdGlv
bkRhdGEodm9pZCopOwogCiAgIHByaXZhdGU6CisgICAgdXNpbmcgSlNPYmplY3Q6OmdldDsKKwor
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQorCiAgICAgc3RhdGljIEpTVmFsdWUqIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBpbmxpbmVH
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKIAotICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkKTsKICAgICBib29sIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgCiAgICAgdW5zaWdu
ZWQgY29tcGFjdEZvclNvcnRpbmcoKTsKQEAgLTc0LDYgKzc3LDExIEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIEFycmF5U3RvcmFnZSogbV9zdG9yYWdlOwogICB9OwogCisgIEpTQXJyYXkqIGNvbnN0
cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKik7CisgIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJy
YXkoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CisgIEpTQXJyYXkqIGNvbnN0
cnVjdEFycmF5KEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHNpbmdsZUl0ZW1WYWx1ZSk7CisgIEpTQXJy
YXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcyk7CisK
IH0gLy8gbmFtZXNwYWNlIEtKUwogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9K
U0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNGdW5jdGlv
bi5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTRnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxOSArODAsMTkgQEAgQ2FsbFR5cGUgSlNGdW5jdGlv
bjo6Z2V0Q2FsbERhdGEoQ2FsbERhdAogICAgIHJldHVybiBDYWxsVHlwZUpTOwogfQogCi1KU1Zh
bHVlKiBKU0Z1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogSlNGdW5jdGlvbjo6Y2Fs
bChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwogICAgIFJlZ2lzdGVyRmlsZVN0YWNr
KiBzdGFjayA9ICZleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnJlZ2lzdGVyRmlsZVN0YWNr
KCk7CiAgICAgUmVnaXN0ZXJGaWxlKiBjdXJyZW50ID0gc3RhY2stPmN1cnJlbnQoKTsKICAgICBp
ZiAoIWN1cnJlbnQtPnNhZmVGb3JSZWVudHJ5KCkpIHsKICAgICAgICAgc3RhY2stPnB1c2hGdW5j
dGlvblJlZ2lzdGVyRmlsZSgpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBleGVjLT5tYWNo
aW5lKCktPmV4ZWN1dGUoYm9keS5nZXQoKSwgZXhlYywgdGhpcywgdGhpc09iaiwgYXJncywgc3Rh
Y2ssIF9zY29wZS5ub2RlKCksICZleGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBleGVjLT5tYWNoaW5lKCktPmV4ZWN1dGUoYm9keS5nZXQoKSwgZXhlYywgdGhpcywgdGhpc1Zh
bHVlLT50b1RoaXNPYmplY3QoZXhlYyksIGFyZ3MsIHN0YWNrLCBfc2NvcGUubm9kZSgpLCAmZXhj
ZXB0aW9uKTsKICAgICAgICAgc3RhY2stPnBvcEZ1bmN0aW9uUmVnaXN0ZXJGaWxlKCk7CiAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4ZWMtPm1hY2hpbmUo
KS0+ZXhlY3V0ZShib2R5LmdldCgpLCBleGVjLCB0aGlzLCB0aGlzT2JqLCBhcmdzLCBzdGFjaywg
X3Njb3BlLm5vZGUoKSwgJmV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4
ZWMtPm1hY2hpbmUoKS0+ZXhlY3V0ZShib2R5LmdldCgpLCBleGVjLCB0aGlzLCB0aGlzVmFsdWUt
PnRvVGhpc09iamVjdChleGVjKSwgYXJncywgc3RhY2ssIF9zY29wZS5ub2RlKCksICZleGNlcHRp
b24pOwogICAgICAgICBjdXJyZW50LT5zZXRTYWZlRm9yUmVlbnRyeSh0cnVlKTsKICAgICAgICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xNTgsMTQgKzE1OCwxNCBAQCBib29sIEpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5KEV4ZWNT
dGF0CiAgKiBpdCBhcHBlYXJzIGFzc29jaWF0ZXMgd2l0aCBpdC4gZWc6CiAgKiBmdW5jdGlvbiBm
Mih4LCB4KTogZ2V0UGFyYW1ldGVyTmFtZSgwKSAtLT4gbnVsbAogICovCi1JZGVudGlmaWVyIEpT
RnVuY3Rpb246OmdldFBhcmFtZXRlck5hbWUoaW50IGluZGV4KQorY29uc3QgSWRlbnRpZmllciYg
SlNGdW5jdGlvbjo6Z2V0UGFyYW1ldGVyTmFtZShpbnQgaW5kZXgpCiB7CiAgICAgVmVjdG9yPElk
ZW50aWZpZXI+JiBwYXJhbWV0ZXJzID0gYm9keS0+cGFyYW1ldGVycygpOwogCiAgICAgaWYgKHN0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpID49IGJvZHktPnBhcmFtZXRlcnMoKS5zaXplKCkpCiAg
ICAgICAgIHJldHVybiBKU0dsb2JhbERhdGE6OnRocmVhZEluc3RhbmNlKCkucHJvcGVydHlOYW1l
cy0+bnVsbElkZW50aWZpZXI7CiAgIAotICAgIElkZW50aWZpZXIgbmFtZSA9IHBhcmFtZXRlcnNb
aW5kZXhdOworICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUgPSBwYXJhbWV0ZXJzW2luZGV4XTsK
IAogICAgIC8vIEFyZSB0aGVyZSBhbnkgc3Vic2VxdWVudCBwYXJhbWV0ZXJzIHdpdGggdGhlIHNh
bWUgbmFtZT8KICAgICBzaXplX3Qgc2l6ZSA9IHBhcmFtZXRlcnMuc2l6ZSgpOwpAQCAtNTU1LDEw
ICs1NTUsMTAgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUZsb2F0KGNvbnN0IFVTdHJpbmcmIAogICAg
IHJldHVybiBzLnRvRG91YmxlKCB0cnVlIC8qdG9sZXJhbnQqLywgZmFsc2UgLyogTmFOIGZvciBl
bXB0eSBzdHJpbmcgKi8gKTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRl
KiBleGVjLCBQcm90b3R5cGVSZWZsZXhpdmVGdW5jdGlvbiogZnVuY3Rpb24sIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dGhpc09iai0+dG9HbG9iYWxPYmplY3QoZXhlYyk7Ci0KKyAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSB0aGlzT2JqZWN0LT50b0dsb2JhbE9iamVjdChleGVjKTsKICAgICBpZiAo
IWdsb2JhbE9iamVjdCB8fCBnbG9iYWxPYmplY3QtPmV2YWxGdW5jdGlvbigpICE9IGZ1bmN0aW9u
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJyb3IsICJUaGUgXCJ0aGlz
XCIgdmFsdWUgcGFzc2VkIHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHdo
aWNoIGV2YWwgb3JpZ2luYXRlZCIpOwogCkBAIC01NzgsNyArNTc4LDcgQEAgSlNWYWx1ZSogZ2xv
YmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgTlVMTCk7CiAKICAg
ICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwotICAgIEpTVmFsdWUqIHZhbHVlID0gZXhlYy0+bWFj
aGluZSgpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBleGVjLCB0aGlzT2JqLCAmZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpLT5yZWdpc3RlckZpbGVTdGFjaygpLCBnbG9iYWxPYmplY3QtPmds
b2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCksICZleGNlcHRpb24pOworICAgIEpTVmFsdWUqIHZhbHVl
ID0gZXhlYy0+bWFjaGluZSgpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBleGVjLCB0aGlzT2Jq
ZWN0LCAmZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5yZWdpc3RlckZpbGVTdGFjaygpLCBn
bG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCksICZleGNlcHRpb24pOwogCiAg
ICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9u
KTsKQEAgLTU4OCwyOCArNTg4LDI4IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0
ZSogZXhlYywKICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlSW50KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
LCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJz
ZUZsb2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBwYXJzZUZsb2F0KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUq
IGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWUqIGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzQm9v
bGVhbihpc25hbihhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBnbG9i
YWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlKiBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGRvdWJsZSBuID0g
YXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIGpzQm9vbGVhbighaXNuYW4obikg
JiYgIWlzaW5mKG4pKTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGdsb2Jh
bEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF91bmVzY2Fw
ZV93aGVuX2RlY29kaW5nX1VSSVtdID0KICAgICAgICAgIiMkJissLzo7PT9AIjsKQEAgLTYxNywx
MiArNjE3LDEyIEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiAKICAg
ICByZXR1cm4gZGVjb2RlKGV4ZWMsIGFyZ3MsIGRvX25vdF91bmVzY2FwZV93aGVuX2RlY29kaW5n
X1VSSSwgdHJ1ZSk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
KiBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4gZGVjb2RlKGV4
ZWMsIGFyZ3MsICIiLCB0cnVlKTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUq
IGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF9l
c2NhcGVfd2hlbl9lbmNvZGluZ19VUklbXSA9CiAgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJT
VFVWV1hZWiIKQEAgLTYzMyw3ICs2MzMsNyBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jRW5jb2RlVVJJ
KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGVuY29kZShleGVjLCBhcmdzLCBkb19ub3RfZXNjYXBl
X3doZW5fZW5jb2RpbmdfVVJJKTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSUNv
bXBvbmVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUqIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHN0YXRpYyBj
b25zdCBjaGFyIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklfY29tcG9uZW50W10gPQog
ICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC02NDQsNyArNjQ0LDcgQEAg
SlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeAogICAgIHJldHVybiBlbmNv
ZGUoZXhlYywgYXJncywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSV9jb21wb25lbnQp
OwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogZ2xvYmFsRnVuY0VzY2FwZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgZG9fbm90X2VzY2FwZVtdID0KICAgICAgICAgIkFCQ0RF
RkdISUpLTE1OT1BRUlNUVVZXWFlaIgpAQCAtNjczLDcgKzY3Myw3IEBAIEpTVmFsdWUqIGdsb2Jh
bEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcik7
CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGdsb2JhbEZ1bmNVbmVzY2FwZShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgVVN0cmluZyBzID0gIiIsIHN0ciA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwog
ICAgIGludCBrID0gMCwgbGVuID0gc3RyLnNpemUoKTsKQEAgLTY5OSw3ICs2OTksNyBAQCBKU1Zh
bHVlKiBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBlCiB9CiAKICNpZm5kZWYgTkRFQlVH
Ci1KU1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIENTdHJpbmdCdWZmZXIgc3RyaW5nOwogICAgIGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmdl
dENTdHJpbmcoc3RyaW5nKTsKQEAgLTcxMCw3ICs3MTAsNyBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5j
S0pTUHJpbnQoRXhlY1N0YXRlKiBlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBQcm90b3R5cGVGdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVBy
b3RvdHlwZUZ1bmN0aW9uOjpQcm90b3R5cGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGludCBs
ZW4sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTTWVtYmVyRnVuY3Rpb24gZnVuY3Rpb24pCitQ
cm90b3R5cGVGdW5jdGlvbjo6UHJvdG90eXBlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBpbnQg
bGVuLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKICAg
ICA6IEludGVybmFsRnVuY3Rpb24oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blByb3RvdHlwZSgpLCBuYW1lKQogICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKIHsKQEAgLTcx
OCw3ICs3MTgsNyBAQCBQcm90b3R5cGVGdW5jdGlvbjo6UHJvdG90eXBlRnVuY3Rpb24oRXhlCiAg
ICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMs
IGxlbiksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAotUHJvdG90eXBl
RnVuY3Rpb246OlByb3RvdHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90
b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCBKU01lbWJlckZ1bmN0aW9uIGZ1bmN0aW9uKQorUHJvdG90eXBlRnVuY3Rpb246OlByb3RvdHlw
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJv
dG90eXBlLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBm
dW5jdGlvbikKICAgICA6IEludGVybmFsRnVuY3Rpb24oZnVuY3Rpb25Qcm90b3R5cGUsIG5hbWUp
CiAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogewpAQCAtNzI2LDMxICs3MjYsMjQgQEAgUHJv
dG90eXBlRnVuY3Rpb246OlByb3RvdHlwZUZ1bmN0aW9uKEV4ZQogICAgIHB1dERpcmVjdChleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCBsZW4pLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKLUpTVmFsdWUqIFByb3RvdHlwZUZ1bmN0aW9u
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorQ2FsbFR5cGUgUHJvdG90eXBlRnVuY3Rpb246OmdldENhbGxEYXRh
KENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKLSAgICByZXR1cm4gbV9mdW5jdGlvbihleGVjLCB0aGlz
T2JqLCBhcmdzKTsKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBtX2Z1bmN0aW9uOwor
ICAgIHJldHVybiBDYWxsVHlwZU5hdGl2ZTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb246OlByb3RvdHlwZVJlZmxl
eGl2ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9u
UHJvdG90eXBlLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU01lbWJlckZ1bmN0
aW9uIGZ1bmN0aW9uLCBKU0dsb2JhbE9iamVjdCogY2FjaGVkR2xvYmFsT2JqZWN0KQotICAgIDog
SW50ZXJuYWxGdW5jdGlvbihmdW5jdGlvblByb3RvdHlwZSwgbmFtZSkKLSAgICAsIG1fZnVuY3Rp
b24oZnVuY3Rpb24pCitHbG9iYWxFdmFsRnVuY3Rpb246Okdsb2JhbEV2YWxGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3RvdHlwZSwgaW50IGxl
biwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIEpTR2xv
YmFsT2JqZWN0KiBjYWNoZWRHbG9iYWxPYmplY3QpCisgICAgOiBQcm90b3R5cGVGdW5jdGlvbihl
eGVjLCBmdW5jdGlvblByb3RvdHlwZSwgbGVuLCBuYW1lLCBmdW5jdGlvbikKICAgICAsIG1fY2Fj
aGVkR2xvYmFsT2JqZWN0KGNhY2hlZEdsb2JhbE9iamVjdCkKIHsKLSAgICBBU1NFUlRfQVJHKGZ1
bmN0aW9uLCBmdW5jdGlvbik7CiAgICAgQVNTRVJUX0FSRyhjYWNoZWRHbG9iYWxPYmplY3QsIGNh
Y2hlZEdsb2JhbE9iamVjdCk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIGxlbiksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRF
bnVtKTsKLX0KLQotSlNWYWx1ZSogUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb246OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCi17Ci0gICAgcmV0dXJuIG1fZnVuY3Rpb24oZXhlYywgdGhpcywgdGhpc09iaiwgYXJn
cyk7CiB9CiAKLXZvaWQgUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb246Om1hcmsoKQordm9pZCBH
bG9iYWxFdmFsRnVuY3Rpb246Om1hcmsoKQogewotICAgIEludGVybmFsRnVuY3Rpb246Om1hcmso
KTsKKyAgICBQcm90b3R5cGVGdW5jdGlvbjo6bWFyaygpOwogICAgIGlmICghbV9jYWNoZWRHbG9i
YWxPYmplY3QtPm1hcmtlZCgpKQogICAgICAgICBtX2NhY2hlZEdsb2JhbE9iamVjdC0+bWFyaygp
OwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAzNDczNikKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE5ICsz
OSwxOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uIDogcHVi
bGljIEpTT2JqZWN0IHsKICAgcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5m
bzsKKyAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KKyAgICBjb25zdCBJZGVudGlmaWVyJiBmdW5jdGlvbk5hbWUoKSBjb25zdCB7
IHJldHVybiBtX25hbWU7IH0KKworICBwcm90ZWN0ZWQ6CiAgICAgSW50ZXJuYWxGdW5jdGlvbigp
OwogICAgIEludGVybmFsRnVuY3Rpb24oRnVuY3Rpb25Qcm90b3R5cGUqLCBjb25zdCBJZGVudGlm
aWVyJik7CiAKLSAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7Ci0K
LSAgICB2aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiB0aGlzT2JqZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpID0gMDsKKyAgcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJikgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBpbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBmdW5jdGlvbk5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLQotICBwcml2YXRlOgogICAgIElkZW50aWZp
ZXIgbV9uYW1lOwogICB9OwogCkBAIC02MywxNyArNjIsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUqKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAotICAgIHZpcnR1YWwgQ29u
c3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKLSAgICB2aXJ0dWFs
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYgYXJncyk7Ci0K
LSAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7Ci0gICAgdmlydHVh
bCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgQXJnTGlzdCYgYXJncyk7CisgICAgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUq
LCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAotICAgIC8vIE5vdGU6IHVubGlrZSBib2R5
LT5wYXJhbU5hbWUsIHRoaXMgcmV0dXJucyBJZGVudGlmaWVyOjpudWxsIGZvciBwYXJhbWV0ZXJz
IAotICAgIC8vIHRoYXQgd2lsbCBuZXZlciBnZXQgc2V0LCBkdWUgdG8gbGF0ZXIgcGFyYW0gaGF2
aW5nIHRoZSBzYW1lIG5hbWUKLSAgICBJZGVudGlmaWVyIGdldFBhcmFtZXRlck5hbWUoaW50IGlu
ZGV4KTsKKyAgICAvLyBOb3RlOiBSZXR1cm5zIGEgbnVsbCBpZGVudGlmaWVyIGZvciBhbnkgcGFy
YW1ldGVycyB0aGF0IHdpbGwgbmV2ZXIgZ2V0IHNldAorICAgIC8vIGR1ZSB0byBhIGxhdGVyIHBh
cmFtZXRlciB3aXRoIHRoZSBzYW1lIG5hbWUuCisgICAgY29uc3QgSWRlbnRpZmllciYgZ2V0UGFy
YW1ldGVyTmFtZShpbnQgaW5kZXgpOwogCi0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwogCiAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHk7CkBAIC04NCw2
ICs3OSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogCiAg
IHByaXZhdGU6CisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9CisgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoQ29uc3RydWN0RGF0YSYpOworICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEo
Q2FsbERhdGEmKTsKKwogICAgIFNjb3BlQ2hhaW4gX3Njb3BlOwogCiAgICAgc3RhdGljIEpTVmFs
dWUqIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90Jik7CkBAIC05Myw3ICs5Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNs
YXNzIEluZGV4VG9OYW1lTWFwIHsKICAgcHVibGljOgotICAgIEluZGV4VG9OYW1lTWFwKEpTRnVu
Y3Rpb24qLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKyAgICBJbmRleFRvTmFtZU1hcChKU0Z1bmN0
aW9uKiwgY29uc3QgQXJnTGlzdCYpOwogICAgIH5JbmRleFRvTmFtZU1hcCgpOwogICAgIAogICAg
IElkZW50aWZpZXImIG9wZXJhdG9yW10oY29uc3QgSWRlbnRpZmllciYgaW5kZXgpOwpAQCAtMTIz
LDQ5ICsxMjIsNDAgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgUHJvdG90eXBlRnVuY3Rp
b24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAgIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpT
VmFsdWUqICgqSlNNZW1iZXJGdW5jdGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IEFyZ0xpc3QmKTsKLQotICAgIFByb3RvdHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIGlu
dCBsZW4sIGNvbnN0IElkZW50aWZpZXImLCBKU01lbWJlckZ1bmN0aW9uKTsKLSAgICBQcm90b3R5
cGVGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBsZW4sIGNvbnN0
IElkZW50aWZpZXImLCBKU01lbWJlckZ1bmN0aW9uKTsKLQotICAgIHZpcnR1YWwgSlNWYWx1ZSog
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
QXJnTGlzdCYpOworICAgIFByb3RvdHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIGludCBsZW4sIGNv
bnN0IElkZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbik7CisgICAgUHJvdG90eXBlRnVuY3Rpb24o
RXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVy
JiwgTmF0aXZlRnVuY3Rpb24pOwogCiAgIHByaXZhdGU6Ci0gICAgY29uc3QgSlNNZW1iZXJGdW5j
dGlvbiBtX2Z1bmN0aW9uOwotICB9OwotCisgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0
YShDYWxsRGF0YSYpOwogCi0gIC8vIEp1c3QgbGlrZSBQcm90b3R5cGVGdW5jdGlvbiwgYnV0IGNh
bGxiYWNrcyBhbHNvIGdldCBwYXNzZWQgdGhlIEpTIGZ1bmN0aW9uIG9iamVjdC4KLSAgY2xhc3Mg
UHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0g
IHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTVmFsdWUqICgqSlNNZW1iZXJGdW5jdGlvbikoRXhlY1N0
YXRlKiwgUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb24qLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgQXJnTGlzdCYpOworICAgIGNvbnN0IE5hdGl2ZUZ1bmN0aW9uIG1fZnVuY3Rpb247CisgIH07
CiAKLSAgICBQcm90b3R5cGVSZWZsZXhpdmVGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvblBy
b3RvdHlwZSosIGludCBsZW4sIGNvbnN0IElkZW50aWZpZXImLCBKU01lbWJlckZ1bmN0aW9uLCBK
U0dsb2JhbE9iamVjdCogZXhwZWN0ZWRUaGlzT2JqZWN0KTsKKyAgICBjbGFzcyBHbG9iYWxFdmFs
RnVuY3Rpb24gOiBwdWJsaWMgUHJvdG90eXBlRnVuY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAg
ICAgR2xvYmFsRXZhbEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKiwgaW50
IGxlbiwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2ZUZ1bmN0aW9uLCBKU0dsb2JhbE9iamVjdCog
ZXhwZWN0ZWRUaGlzT2JqZWN0KTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGNhY2hlZEdsb2Jh
bE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkR2xvYmFsT2JqZWN0OyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOwotICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpOworICAg
IHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKLSAgICBKU0dsb2JhbE9i
amVjdCogY2FjaGVkR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRHbG9iYWxP
YmplY3Q7IH0KLQotICBwcml2YXRlOgotICAgIGNvbnN0IEpTTWVtYmVyRnVuY3Rpb24gbV9mdW5j
dGlvbjsKLSAgICBKU0dsb2JhbE9iamVjdCogbV9jYWNoZWRHbG9iYWxPYmplY3Q7Ci0gIH07Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBtX2NhY2hlZEdsb2JhbE9iamVjdDsKKyAgICB9OwogCiAg
ICAgLy8gR2xvYmFsIEZ1bmN0aW9ucwotICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNT
dGF0ZSosIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uKiwgSlNPYmplY3QqLCBjb25zdCBBcmdM
aXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUZsb2F0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGds
b2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAg
ICBKU1ZhbHVlKiBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRGVj
b2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwot
ICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBj
b25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVu
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBn
bG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwot
ICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZSogZ2xvYmFs
RnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZSogZ2xvYmFsRnVu
Y0lzTmFOKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
KyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNEZWNvZGVV
UkkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworICAg
IEpTVmFsdWUqIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNF
bmNvZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
OworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2Jh
bEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiAjaWZuZGVmIE5ERUJVRwotICAgIEpTVmFs
dWUqIGdsb2JhbEZ1bmNLSlNQcmludChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xp
c3QmKTsKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogI2VuZGlmCiAKICAgICBzdGF0aWMgY29u
c3QgZG91YmxlIG1hbnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5kID0gOTAwNzE5OTI1NDc0MDk5Mi4w
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAzNDcz
NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMiwxMyArMjEyLDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1
ZSogcHJvdAogICAgIGQoKS0+VVJJRXJyb3JQcm90b3R5cGUgPSAwOwogCiAgICAgLy8gQ29uc3Ry
dWN0b3JzCi0gICAgZCgpLT5vYmplY3RDb25zdHJ1Y3RvciA9IDA7Ci0gICAgZCgpLT5mdW5jdGlv
bkNvbnN0cnVjdG9yID0gMDsKLSAgICBkKCktPmFycmF5Q29uc3RydWN0b3IgPSAwOwotICAgIGQo
KS0+c3RyaW5nQ29uc3RydWN0b3IgPSAwOwotICAgIGQoKS0+Ym9vbGVhbkNvbnN0cnVjdG9yID0g
MDsKLSAgICBkKCktPm51bWJlckNvbnN0cnVjdG9yID0gMDsKLSAgICBkKCktPmRhdGVDb25zdHJ1
Y3RvciA9IDA7CiAgICAgZCgpLT5yZWdFeHBDb25zdHJ1Y3RvciA9IDA7CiAgICAgZCgpLT5lcnJv
ckNvbnN0cnVjdG9yID0gMDsKICAgICAKQEAgLTIzNCw2ICsyMjcsNyBAQCB2b2lkIEpTR2xvYmFs
T2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZCgpLT5n
bG9iYWxFeGVjLmdldCgpOwogCiAgICAgLy8gUHJvdG90eXBlcworCiAgICAgZCgpLT5mdW5jdGlv
blByb3RvdHlwZSA9IG5ldyAoZXhlYykgRnVuY3Rpb25Qcm90b3R5cGUoZXhlYyk7CiAgICAgZCgp
LT5vYmplY3RQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE9iamVjdFByb3RvdHlwZShleGVjLCBkKCkt
PmZ1bmN0aW9uUHJvdG90eXBlKTsKICAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLT5zZXRQcm90
b3R5cGUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwpAQCAtMjU0LDE0ICsyNDgsMTcgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdAogICAgIGQoKS0+VVJJRXJyb3JQcm90
b3R5cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGQoKS0+ZXJyb3JQ
cm90b3R5cGUsICJVUklFcnJvciIsICJVUklFcnJvciIpOwogCiAgICAgLy8gQ29uc3RydWN0b3Jz
Ci0gICAgZCgpLT5vYmplY3RDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgT2JqZWN0Q29uc3RydWN0
b3IoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwot
ICAgIGQoKS0+ZnVuY3Rpb25Db25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRnVuY3Rpb25Db25zdHJ1
Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBkKCktPmFycmF5Q29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIEFycmF5Q29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSwgZCgpLT5hcnJheVByb3RvdHlwZSk7Ci0gICAgZCgpLT5zdHJpbmdDb25zdHJ1Y3Rv
ciA9IG5ldyAoZXhlYykgU3RyaW5nQ29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSwgZCgpLT5zdHJpbmdQcm90b3R5cGUpOwotICAgIGQoKS0+Ym9vbGVhbkNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSwgZCgpLT5ib29sZWFuUHJvdG90eXBlKTsKLSAgICBkKCktPm51bWJlckNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90
eXBlLCBkKCktPm51bWJlclByb3RvdHlwZSk7Ci0gICAgZCgpLT5kYXRlQ29uc3RydWN0b3IgPSBu
ZXcgKGV4ZWMpIERhdGVDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBk
KCktPmRhdGVQcm90b3R5cGUpOworCisgICAgSlNWYWx1ZSogb2JqZWN0Q29uc3RydWN0b3IgPSBu
ZXcgKGV4ZWMpIE9iamVjdENvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBk
KCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlKiBmdW5jdGlvbkNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUpOworICAgIEpTVmFsdWUqIGFycmF5Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEFycmF5
Q29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5hcnJheVByb3Rv
dHlwZSk7CisgICAgSlNWYWx1ZSogc3RyaW5nQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIFN0cmlu
Z0NvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIGQoKS0+c3RyaW5nUHJv
dG90eXBlKTsKKyAgICBKU1ZhbHVlKiBib29sZWFuQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEJv
b2xlYW5Db25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBkKCktPmJvb2xl
YW5Qcm90b3R5cGUpOworICAgIEpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yID0gbmV3IChleGVj
KSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBkKCktPm51
bWJlclByb3RvdHlwZSk7CisgICAgSlNWYWx1ZSogZGF0ZUNvbnN0cnVjdG9yID0gbmV3IChleGVj
KSBEYXRlQ29uc3RydWN0b3IoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5kYXRl
UHJvdG90eXBlKTsKKwogICAgIGQoKS0+cmVnRXhwQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIFJl
Z0V4cENvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIGQoKS0+cmVnRXhw
UHJvdG90eXBlKTsKKwogICAgIGQoKS0+ZXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRXJy
b3JDb25zdHJ1Y3RvcihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBkKCktPmVycm9yUHJv
dG90eXBlKTsKICAgICAKICAgICBkKCktPmV2YWxFcnJvckNvbnN0cnVjdG9yID0gbmV3IChleGVj
KSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIGQo
KS0+ZXZhbEVycm9yUHJvdG90eXBlKTsKQEAgLTI3MSwxNSArMjY4LDE1IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKICAgICBkKCktPnR5cGVFcnJvckNvbnN0cnVj
dG9yID0gbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIGQoKS0+ZnVuY3Rp
b25Qcm90b3R5cGUsIGQoKS0+dHlwZUVycm9yUHJvdG90eXBlKTsKICAgICBkKCktPlVSSUVycm9y
Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgZCgp
LT5mdW5jdGlvblByb3RvdHlwZSwgZCgpLT5VUklFcnJvclByb3RvdHlwZSk7CiAgICAgCi0gICAg
ZCgpLT5mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgZCgpLT5mdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgZCgp
LT5mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9udEVudW0pOwogCi0gICAgZCgpLT5vYmpl
Y3RQcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IGQoKS0+b2JqZWN0Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBkKCktPmZ1bmN0aW9uUHJv
dG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkKCkt
PmZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBkKCktPmFycmF5UHJvdG90eXBl
LT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkKCktPmFycmF5
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBkKCktPmJvb2xlYW5Qcm90b3R5cGUtPnB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGQoKS0+Ym9vbGVhbkNvbnN0
cnVjdG9yLCBEb250RW51bSk7Ci0gICAgZCgpLT5zdHJpbmdQcm90b3R5cGUtPnB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGQoKS0+c3RyaW5nQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKLSAgICBkKCktPm51bWJlclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5udW1iZXJDb25zdHJ1Y3RvciwgRG9udEVu
dW0pOwotICAgIGQoKS0+ZGF0ZVByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5kYXRlQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBk
KCktPm9iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3Rvciwgb2JqZWN0Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBkKCktPmZ1bmN0aW9u
UHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBm
dW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgZCgpLT5hcnJheVByb3RvdHlwZS0+
cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYXJyYXlDb25zdHJ1
Y3RvciwgRG9udEVudW0pOworICAgIGQoKS0+Ym9vbGVhblByb3RvdHlwZS0+cHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYm9vbGVhbkNvbnN0cnVjdG9yLCBEb250
RW51bSk7CisgICAgZCgpLT5zdHJpbmdQcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIHN0cmluZ0NvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAg
ZCgpLT5udW1iZXJQcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29u
c3RydWN0b3IsIG51bWJlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgZCgpLT5kYXRlUHJv
dG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkYXRl
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBkKCktPnJlZ0V4cFByb3RvdHlwZS0+cHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5yZWdFeHBDb25zdHJ1
Y3RvciwgRG9udEVudW0pOwogICAgIGQoKS0+ZXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdChleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGQoKS0+ZXJyb3JDb25zdHJ1Y3RvciwgRG9u
dEVudW0pOwogICAgIGQoKS0+ZXZhbEVycm9yUHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkKCktPmV2YWxFcnJvckNvbnN0cnVjdG9yLCBEb250
RW51bSk7CkBAIC0yOTMsMTMgKzI5MCwxMyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChK
U1ZhbHVlKiBwcm90CiAKICAgICAvLyBGSVhNRTogVGhlc2UgcHJvcGVydGllcyBjb3VsZCBiZSBo
YW5kbGVkIGJ5IGEgc3RhdGljIGhhc2ggdGFibGUuCiAKLSAgICBwdXREaXJlY3QoSWRlbnRpZmll
cihleGVjLCAiT2JqZWN0IiksIGQoKS0+b2JqZWN0Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAg
ICBwdXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiRnVuY3Rpb24iKSwgZCgpLT5mdW5jdGlvbkNv
bnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkFy
cmF5IiksIGQoKS0+YXJyYXlDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdChJ
ZGVudGlmaWVyKGV4ZWMsICJCb29sZWFuIiksIGQoKS0+Ym9vbGVhbkNvbnN0cnVjdG9yLCBEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIlN0cmluZyIpLCBkKCktPnN0
cmluZ0NvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhl
YywgIk51bWJlciIpLCBkKCktPm51bWJlckNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkRhdGUiKSwgZCgpLT5kYXRlQ29uc3RydWN0b3IsIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiT2JqZWN0IiksIG9iamVj
dENvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywg
IkZ1bmN0aW9uIiksIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3QoSWRlbnRpZmllcihleGVjLCAiQXJyYXkiKSwgYXJyYXlDb25zdHJ1Y3RvciwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJCb29sZWFuIiksIGJvb2xlYW5Db25z
dHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJTdHJp
bmciKSwgc3RyaW5nQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoSWRlbnRp
ZmllcihleGVjLCAiTnVtYmVyIiksIG51bWJlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkRhdGUiKSwgZGF0ZUNvbnN0cnVjdG9yLCBEb250
RW51bSk7CiAgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIlJlZ0V4cCIpLCBkKCktPnJl
Z0V4cENvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhl
YywgIkVycm9yIiksIGQoKS0+ZXJyb3JDb25zdHJ1Y3RvciwgRG9udEVudW0pOwogICAgIHB1dERp
cmVjdChJZGVudGlmaWVyKGV4ZWMsICJFdmFsRXJyb3IiKSwgZCgpLT5ldmFsRXJyb3JDb25zdHJ1
Y3Rvcik7CkBAIC0zMjEsNyArMzE4LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNW
YWx1ZSogcHJvdAogCiAgICAgLy8gU2V0IGdsb2JhbCBmdW5jdGlvbnMuCiAKLSAgICBkKCktPmV2
YWxGdW5jdGlvbiA9IG5ldyAoZXhlYykgUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb24oZXhlYywg
ZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWwsIGds
b2JhbEZ1bmNFdmFsLCB0aGlzKTsKKyAgICBkKCktPmV2YWxGdW5jdGlvbiA9IG5ldyAoZXhlYykg
R2xvYmFsRXZhbEZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ldmFsLCBnbG9iYWxGdW5jRXZhbCwgdGhpcyk7CiAgICAgcHV0RGly
ZWN0RnVuY3Rpb24oZCgpLT5ldmFsRnVuY3Rpb24sIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RG
dW5jdGlvbihuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Q
cm90b3R5cGUsIDIsIElkZW50aWZpZXIoZXhlYywgInBhcnNlSW50IiksIGdsb2JhbEZ1bmNQYXJz
ZUludCksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgKGV4ZWMpIFByb3Rv
dHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsIElkZW50aWZpZXIo
ZXhlYywgInBhcnNlRmxvYXQiKSwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQpLCBEb250RW51bSk7CkBA
IC00MTUsMTMgKzQxMiw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Om1hcmsoKQogCiAgICAgbWFy
a0lmTmVlZGVkKGQoKS0+Z2xvYmFsRXhlYy0+ZXhjZXB0aW9uKCkpOwogCi0gICAgbWFya0lmTmVl
ZGVkKGQoKS0+b2JqZWN0Q29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmZ1bmN0
aW9uQ29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmFycmF5Q29uc3RydWN0b3Ip
OwotICAgIG1hcmtJZk5lZWRlZChkKCktPmJvb2xlYW5Db25zdHJ1Y3Rvcik7Ci0gICAgbWFya0lm
TmVlZGVkKGQoKS0+c3RyaW5nQ29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPm51
bWJlckNvbnN0cnVjdG9yKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5kYXRlQ29uc3RydWN0b3Ip
OwogICAgIG1hcmtJZk5lZWRlZChkKCktPnJlZ0V4cENvbnN0cnVjdG9yKTsKICAgICBtYXJrSWZO
ZWVkZWQoZCgpLT5lcnJvckNvbnN0cnVjdG9yKTsKICAgICBtYXJrSWZOZWVkZWQoZCgpLT5ldmFs
RXJyb3JDb25zdHJ1Y3Rvcik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAko
cmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMjkgKzMyLDIyIEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi0g
ICAgY2xhc3MgQXJyYXlDb25zdHJ1Y3RvcjsKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZTsKLSAg
ICBjbGFzcyBCb29sZWFuQ29uc3RydWN0b3I7CiAgICAgY2xhc3MgQm9vbGVhblByb3RvdHlwZTsK
LSAgICBjbGFzcyBEYXRlQ29uc3RydWN0b3I7CiAgICAgY2xhc3MgRGF0ZVByb3RvdHlwZTsKICAg
ICBjbGFzcyBEZWJ1Z2dlcjsKICAgICBjbGFzcyBFcnJvckNvbnN0cnVjdG9yOwogICAgIGNsYXNz
IEVycm9yUHJvdG90eXBlOwogICAgIGNsYXNzIEV2YWxFcnJvcjsKICAgICBjbGFzcyBFdmFsRXJy
b3JQcm90b3R5cGU7Ci0gICAgY2xhc3MgRnVuY3Rpb25Db25zdHJ1Y3RvcjsKICAgICBjbGFzcyBG
dW5jdGlvblByb3RvdHlwZTsKLSAgICBzdHJ1Y3QgSGFzaFRhYmxlOworICAgIGNsYXNzIEdsb2Jh
bEV2YWxGdW5jdGlvbjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yOwogICAgIGNsYXNzIE5hdGl2ZUVycm9yUHJvdG90eXBlOwotICAg
IGNsYXNzIE51bWJlckNvbnN0cnVjdG9yOwogICAgIGNsYXNzIE51bWJlclByb3RvdHlwZTsKLSAg
ICBjbGFzcyBPYmplY3RDb25zdHJ1Y3RvcjsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAg
ICAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKLSAgICBjbGFzcyBQcm90b3R5cGVSZWZsZXhpdmVG
dW5jdGlvbjsKICAgICBjbGFzcyBSYW5nZUVycm9yOwogICAgIGNsYXNzIFJhbmdlRXJyb3JQcm90
b3R5cGU7CiAgICAgY2xhc3MgUmVmZXJlbmNlRXJyb3I7CkBAIC02NCwxNCArNTcsMTUgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlOwogICAgIGNsYXNzIFJ1bnRp
bWVNZXRob2Q7CiAgICAgY2xhc3MgU2NvcGVDaGFpbjsKLSAgICBjbGFzcyBTdHJpbmdDb25zdHJ1
Y3RvcjsKICAgICBjbGFzcyBTdHJpbmdQcm90b3R5cGU7CiAgICAgY2xhc3MgU3ludGF4RXJyb3JQ
cm90b3R5cGU7CiAgICAgY2xhc3MgVHlwZUVycm9yOwogICAgIGNsYXNzIFR5cGVFcnJvclByb3Rv
dHlwZTsKICAgICBjbGFzcyBVcmlFcnJvcjsKICAgICBjbGFzcyBVcmlFcnJvclByb3RvdHlwZTsK
KwogICAgIHN0cnVjdCBBY3RpdmF0aW9uU3RhY2tOb2RlOworICAgIHN0cnVjdCBIYXNoVGFibGU7
CiAKICAgICB0eXBlZGVmIFZlY3RvcjxFeGVjU3RhdGUqLCAxNj4gRXhlY1N0YXRlU3RhY2s7CiAK
QEAgLTEwNCwxMyArOTgsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHRpY2tDb3VudDsKICAgICAgICAgICAgIHVuc2lnbmVkIHRpY2tzVW50aWxOZXh0VGltZW91dENo
ZWNrOwogCi0gICAgICAgICAgICBPYmplY3RDb25zdHJ1Y3Rvciogb2JqZWN0Q29uc3RydWN0b3I7
Ci0gICAgICAgICAgICBGdW5jdGlvbkNvbnN0cnVjdG9yKiBmdW5jdGlvbkNvbnN0cnVjdG9yOwot
ICAgICAgICAgICAgQXJyYXlDb25zdHJ1Y3RvciogYXJyYXlDb25zdHJ1Y3RvcjsKLSAgICAgICAg
ICAgIEJvb2xlYW5Db25zdHJ1Y3RvciogYm9vbGVhbkNvbnN0cnVjdG9yOwotICAgICAgICAgICAg
U3RyaW5nQ29uc3RydWN0b3IqIHN0cmluZ0NvbnN0cnVjdG9yOwotICAgICAgICAgICAgTnVtYmVy
Q29uc3RydWN0b3IqIG51bWJlckNvbnN0cnVjdG9yOwotICAgICAgICAgICAgRGF0ZUNvbnN0cnVj
dG9yKiBkYXRlQ29uc3RydWN0b3I7CiAgICAgICAgICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVn
RXhwQ29uc3RydWN0b3I7CiAgICAgICAgICAgICBFcnJvckNvbnN0cnVjdG9yKiBlcnJvckNvbnN0
cnVjdG9yOwogICAgICAgICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciogZXZhbEVycm9yQ29u
c3RydWN0b3I7CkBAIC0xMjAsNyArMTA3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAg
ICBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKiB0eXBlRXJyb3JDb25zdHJ1Y3RvcjsKICAgICAgICAg
ICAgIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqIFVSSUVycm9yQ29uc3RydWN0b3I7CiAKLSAgICAg
ICAgICAgIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uKiBldmFsRnVuY3Rpb247CisgICAgICAg
ICAgICBHbG9iYWxFdmFsRnVuY3Rpb24qIGV2YWxGdW5jdGlvbjsKIAogICAgICAgICAgICAgT2Jq
ZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGU7CiAgICAgICAgICAgICBGdW5jdGlvblByb3Rv
dHlwZSogZnVuY3Rpb25Qcm90b3R5cGU7CkBAIC0xNTYsOCArMTQzLDggQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNHbG9iYWxPYmplY3Qo
SlNWYWx1ZSogcHJvdG8sIEpTT2JqZWN0KiBnbG9iYWxUaGlzVmFsdWUpCi0gICAgICAgICAgICA6
IEpTVmFyaWFibGVPYmplY3QocHJvdG8sIG5ldyBKU0dsb2JhbE9iamVjdERhdGEodGhpcywgZ2xv
YmFsVGhpc1ZhbHVlKSkKKyAgICAgICAgSlNHbG9iYWxPYmplY3QoSlNWYWx1ZSogcHJvdG90eXBl
LCBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKQorICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2Jq
ZWN0KHByb3RvdHlwZSwgbmV3IEpTR2xvYmFsT2JqZWN0RGF0YSh0aGlzLCBnbG9iYWxUaGlzVmFs
dWUpKQogICAgICAgICB7CiAgICAgICAgICAgICBpbml0KGdsb2JhbFRoaXNWYWx1ZSk7CiAgICAg
ICAgIH0KQEAgLTE4NiwxNCArMTczLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIC8vIFRo
ZSBmb2xsb3dpbmcgYWNjZXNzb3JzIHJldHVybiBwcmlzdGluZSB2YWx1ZXMsIGV2ZW4gaWYgYSBz
Y3JpcHQgCiAgICAgICAgIC8vIHJlcGxhY2VzIHRoZSBnbG9iYWwgb2JqZWN0J3MgYXNzb2NpYXRl
ZCBwcm9wZXJ0eS4KIAotICAgICAgICBPYmplY3RDb25zdHJ1Y3Rvciogb2JqZWN0Q29uc3RydWN0
b3IoKSBjb25zdCB7IHJldHVybiBkKCktPm9iamVjdENvbnN0cnVjdG9yOyB9Ci0gICAgICAgIEZ1
bmN0aW9uQ29uc3RydWN0b3IqIGZ1bmN0aW9uQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBk
KCktPmZ1bmN0aW9uQ29uc3RydWN0b3I7IH0KLSAgICAgICAgQXJyYXlDb25zdHJ1Y3RvciogYXJy
YXlDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIGQoKS0+YXJyYXlDb25zdHJ1Y3RvcjsgfQot
ICAgICAgICBCb29sZWFuQ29uc3RydWN0b3IqIGJvb2xlYW5Db25zdHJ1Y3RvcigpIGNvbnN0IHsg
cmV0dXJuIGQoKS0+Ym9vbGVhbkNvbnN0cnVjdG9yOyB9Ci0gICAgICAgIFN0cmluZ0NvbnN0cnVj
dG9yKiBzdHJpbmdDb25zdHJ1Y3RvcigpIGNvbnN0eyByZXR1cm4gZCgpLT5zdHJpbmdDb25zdHJ1
Y3RvcjsgfQotICAgICAgICBOdW1iZXJDb25zdHJ1Y3RvciogbnVtYmVyQ29uc3RydWN0b3IoKSBj
b25zdHsgcmV0dXJuIGQoKS0+bnVtYmVyQ29uc3RydWN0b3I7IH0KLSAgICAgICAgRGF0ZUNvbnN0
cnVjdG9yKiBkYXRlQ29uc3RydWN0b3IoKSBjb25zdHsgcmV0dXJuIGQoKS0+ZGF0ZUNvbnN0cnVj
dG9yOyB9CiAgICAgICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvcigpIGNv
bnN0IHsgcmV0dXJuIGQoKS0+cmVnRXhwQ29uc3RydWN0b3I7IH0KKwogICAgICAgICBFcnJvckNv
bnN0cnVjdG9yKiBlcnJvckNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gZCgpLT5lcnJvckNv
bnN0cnVjdG9yOyB9CiAgICAgICAgIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqIGV2YWxFcnJvckNv
bnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gZCgpLT5ldmFsRXJyb3JDb25zdHJ1Y3RvcjsgfQog
ICAgICAgICBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKiByYW5nZUVycm9yQ29uc3RydWN0b3IoKSBj
b25zdCB7IHJldHVybiBkKCktPnJhbmdlRXJyb3JDb25zdHJ1Y3RvcjsgfQpAQCAtMjAyLDcgKzE4
Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKiB0
eXBlRXJyb3JDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIGQoKS0+dHlwZUVycm9yQ29uc3Ry
dWN0b3I7IH0KICAgICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciogVVJJRXJyb3JDb25zdHJ1
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIGQoKS0+VVJJRXJyb3JDb25zdHJ1Y3RvcjsgfQogCi0gICAg
ICAgIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uKiBldmFsRnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBkKCktPmV2YWxGdW5jdGlvbjsgfQorICAgICAgICBHbG9iYWxFdmFsRnVuY3Rpb24qIGV2
YWxGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGQoKS0+ZXZhbEZ1bmN0aW9uOyB9CiAKICAgICAg
ICAgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBkKCkt
Pm9iamVjdFByb3RvdHlwZTsgfQogICAgICAgICBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Q
cm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBkKCktPmZ1bmN0aW9uUHJvdG90eXBlOyB9CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNJbW1lZGlhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9KU0ltbWVkaWF0ZS5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMjMgKzI5
LDE3IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi1KU09iamVjdCAqSlNJbW1lZGlhdGU6OnRvT2Jq
ZWN0KGNvbnN0IEpTVmFsdWUgKnYsIEV4ZWNTdGF0ZSAqZXhlYykKK0pTT2JqZWN0KiBKU0ltbWVk
aWF0ZTo6dG9PYmplY3QoY29uc3QgSlNWYWx1ZSAqdiwgRXhlY1N0YXRlICpleGVjKQogewogICAg
IEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CiAgICAgaWYgKHYgPT0ganNOdWxsKCkpCiAgICAgICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QodGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IsICJOdWxsIHZhbHVlIikpOwotICAgIGVsc2UgaWYgKHYgPT0ganNVbmRlZmluZWQoKSkKKyAg
ICBpZiAodiA9PSBqc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU05v
dEFuT2JqZWN0KHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVW5kZWZpbmVkIHZhbHVlIikp
OwotICAgIGVsc2UgaWYgKGlzQm9vbGVhbih2KSkgewotICAgICAgICBBcmdMaXN0IGFyZ3M7Ci0g
ICAgICAgIGFyZ3MuYXBwZW5kKGNvbnN0X2Nhc3Q8SlNWYWx1ZSAqPih2KSk7Ci0gICAgICAgIHJl
dHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmJvb2xlYW5Db25zdHJ1Y3RvcigpLT5j
b25zdHJ1Y3QoZXhlYywgYXJncyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGlzTnVt
YmVyKHYpKTsKLSAgICAgICAgQXJnTGlzdCBhcmdzOwotICAgICAgICBhcmdzLmFwcGVuZChjb25z
dF9jYXN0PEpTVmFsdWUgKj4odikpOwotICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5udW1iZXJDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgYXJncyk7Ci0g
ICAgfQorICAgIGlmIChpc0Jvb2xlYW4odikpCisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oZXhlYywgY29uc3RfY2FzdDxKU1ZhbHVlKj4odikpOwor
ICAgIEFTU0VSVChpc051bWJlcih2KSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdE51bWJlckZyb21J
bW1lZGlhdGVOdW1iZXIoZXhlYywgY29uc3RfY2FzdDxKU1ZhbHVlKj4odikpOwogfQogCiBVU3Ry
aW5nIEpTSW1tZWRpYXRlOjp0b1N0cmluZyhjb25zdCBKU1ZhbHVlKiB2KQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL0pTTm90QW5PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9KU05vdEFuT2JqZWN0LmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvSlNOb3RBbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwzNCArMTI2
LDYgQEAgYm9vbCBKU05vdEFuT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjUwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotSlNWYWx1ZSogSlNOb3RBbk9iamVjdDo6ZGVmYXVsdFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNUeXBlKSBjb25zdAotewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAg
ICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgZXhlYy0+ZXhjZXB0aW9uKCkgPT0gbV9l
eGNlcHRpb24pOwotICAgIHJldHVybiBtX2V4Y2VwdGlvbjsKLX0KLQotSlNPYmplY3QqIEpTTm90
QW5PYmplY3Q6OmNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQotewot
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkg
JiYgZXhlYy0+ZXhjZXB0aW9uKCkgPT0gbV9leGNlcHRpb24pOwotICAgIHJldHVybiBtX2V4Y2Vw
dGlvbjsKLX0KLQotSlNPYmplY3QqIEpTTm90QW5PYmplY3Q6OmNvbnN0cnVjdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgVVN0cmluZyYs
IGludCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpICYmIGV4ZWMtPmV4Y2VwdGlvbigpID09IG1fZXhjZXB0aW9uKTsKLSAgICByZXR1
cm4gbV9leGNlcHRpb247Ci19Ci0KLUpTVmFsdWUqIEpTTm90QW5PYmplY3Q6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JikKLXsKLSAgICBV
TlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4
ZWMtPmV4Y2VwdGlvbigpID09IG1fZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gbV9leGNlcHRpb247
Ci19Ci0KIHZvaWQgSlNOb3RBbk9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JikKIHsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNOb3RBbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9KU05vdEFuT2JqZWN0LmgJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0pTTm90QW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgLy8g
SlNWYWx1ZSBtZXRob2RzCisgICAgIHByaXZhdGU6CisgICAgICAgLy8gSlNWYWx1ZSBtZXRob2Rz
CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBl
IHByZWZlcnJlZFR5cGUgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OwogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1Zh
bHVlKiYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0
OwpAQCAtNjQsMTYgKzY1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lKTsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGRlZmF1bHRW
YWx1ZShFeGVjU3RhdGUqLCBKU1R5cGUgaGludCkgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBK
U09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICAgICAg
dmlydHVhbCBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmLCBj
b25zdCBJZGVudGlmaWVyJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwg
aW50IGxpbmVOdW1iZXIpOwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKTsKLQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYpOwogCi0gICAgcHJpdmF0ZToKICAgICAgICAgSlNPYmplY3QqIG1fZXhjZXB0aW9u
OwogICAgIH07CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMzQ3MzYp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw3ICs5Myw3IEBAIHN0YXRpYyB2b2lkIHRocm93U2V0dGVyRXJyb3IoRXhlY1N0YXRlICoKIH0K
IAogLy8gRUNNQSA4LjYuMi4yCi12b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlKQordm9pZCBKU09i
amVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSkKIHsKICAgQVNTRVJUKHZhbHVlKTsKICAgQVNTRVJUKCFIZWFwOjpo
ZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKQEAg
LTEwMSw3ICsxMDEsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
CiAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQ
cm90bykgewogICAgIEpTT2JqZWN0KiBwcm90byA9IHZhbHVlLT5nZXRPYmplY3QoKTsKIAotICAg
IC8vIFNldHRpbmcgX19wcm90b19fIHRvIGEgbm9uLW9iamVjdCwgbm9uLW51bGwgdmFsdWUgaXMg
c2lsZW50bHkgaWdub3JlZCB0byBtYXRjaCBNb3ppbGxhCisgICAgLy8gU2V0dGluZyBfX3Byb3Rv
X18gdG8gYSBub24tb2JqZWN0LCBub24tbnVsbCB2YWx1ZSBpcyBzaWxlbnRseSBpZ25vcmVkIHRv
IG1hdGNoIE1vemlsbGEuCiAgICAgaWYgKCFwcm90byAmJiB2YWx1ZSAhPSBqc051bGwoKSkKICAg
ICAgIHJldHVybjsKIApAQCAtMTEyLDYxICsxMTIsNTMgQEAgdm9pZCBKU09iamVjdDo6cHV0KEV4
ZWNTdGF0ZSogZXhlYywgY29ucwogICAgICAgfQogICAgICAgcHJvdG8gPSBwcm90by0+cHJvdG90
eXBlKCkgPyBwcm90by0+cHJvdG90eXBlKCktPmdldE9iamVjdCgpIDogMDsKICAgICB9Ci0gICAg
CisKICAgICBzZXRQcm90b3R5cGUodmFsdWUpOwogICAgIHJldHVybjsKICAgfQogCiAgIC8vIENo
ZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUg
Y2hhaW4KLSAgSlNPYmplY3QgKm9iaiA9IHRoaXM7Ci0gIGJvb2wgaGFzR2V0dGVyc09yU2V0dGVy
cyA9IGZhbHNlOwotICB3aGlsZSAodHJ1ZSkgewotICAgIGlmIChvYmotPl9wcm9wLmhhc0dldHRl
clNldHRlclByb3BlcnRpZXMoKSkgewotICAgICAgaGFzR2V0dGVyc09yU2V0dGVycyA9IHRydWU7
Ci0gICAgICBicmVhazsKKyAgSlNPYmplY3QqIG9iajsKKyAgSlNWYWx1ZSogcHJvdG90eXBlOwor
ICBmb3IgKG9iaiA9IHRoaXM7ICFvYmotPl9wcm9wLmhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KTsgb2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihwcm90b3R5cGUpKSB7CisgICAgcHJvdG90
eXBlID0gb2JqLT5fcHJvdG87CisgICAgaWYgKHByb3RvdHlwZSA9PSBqc051bGwoKSkgeworICAg
ICAgX3Byb3AucHV0KHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHRydWUpOworICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICAgIAotICAgIGlmIChvYmotPl9wcm90byA9PSBqc051bGwoKSkKLSAgICAg
IGJyZWFrOwotICAgICAgCi0gICAgb2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4ob2JqLT5f
cHJvdG8pOwogICB9Ci0gIAotICBpZiAoaGFzR2V0dGVyc09yU2V0dGVycykgewotICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7Ci0gICAgaWYgKF9wcm9wLmdldChwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpICYmIGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgb2Jq
ID0gdGhpczsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgaWYgKEpTVmFsdWUgKmdzID0gb2Jq
LT5fcHJvcC5nZXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSkgewotICAgICAgICBpZiAoYXR0
cmlidXRlcyAmIElzR2V0dGVyU2V0dGVyKSB7Ci0gICAgICAgICAgSlNPYmplY3QgKnNldHRlckZ1
bmMgPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXIgKj4oZ3MpLT5nZXRTZXR0ZXIoKTsKLSAgICAg
ICAgCi0gICAgICAgICAgaWYgKCFzZXR0ZXJGdW5jKSB7Ci0gICAgICAgICAgICB0aHJvd1NldHRl
ckVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgIEFyZ0xpc3QgYXJnczsKLSAgICAgICAgICBhcmdzLmFwcGVuZCh2YWx1
ZSk7Ci0gICAgICAgIAotICAgICAgICAgIHNldHRlckZ1bmMtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMs
IHRoaXMtPnRvVGhpc09iamVjdChleGVjKSwgYXJncyk7CisgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7
CisgIGlmIChfcHJvcC5nZXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSAmJiBhdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpCisgICAgcmV0dXJuOworCisgIGZvciAoOyA7IG9iaiA9IHN0YXRpY19jYXN0
PEpTT2JqZWN0Kj4ocHJvdG90eXBlKSkgeworICAgIGlmIChKU1ZhbHVlKiBncyA9IG9iai0+X3By
b3AuZ2V0KHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpIHsKKyAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgSXNHZXR0ZXJTZXR0ZXIpIHsKKyAgICAgICAgSlNPYmplY3QqIHNldHRlckZ1bmMgPSBzdGF0
aWNfY2FzdDxHZXR0ZXJTZXR0ZXIqPihncyktPnNldHRlcigpOyAgICAgICAgCisgICAgICAgIGlm
ICghc2V0dGVyRnVuYykgeworICAgICAgICAgIHRocm93U2V0dGVyRXJyb3IoZXhlYyk7CiAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIElmIHRoZXJlJ3Mg
YW4gZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBvbmUgb2YgaXRzIAotICAgICAg
ICAgIC8vIHByb3RvdHlwZSBpdCBzaG91bGQgYmUgcmVwbGFjZWQsIHNvIHdlIGp1c3QgYnJlYWsg
aGVyZS4KLSAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIENhbGxEYXRhIGNh
bGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlckZ1bmMtPmdldENhbGxE
YXRhKGNhbGxEYXRhKTsKKyAgICAgICAgQXJnTGlzdCBhcmdzOworICAgICAgICBhcmdzLmFwcGVu
ZCh2YWx1ZSk7CisgICAgICAgIGNhbGwoZXhlYywgc2V0dGVyRnVuYywgY2FsbFR5cGUsIGNhbGxE
YXRhLCB0aGlzLCBhcmdzKTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgfQotICAgICAKLSAgICAg
IGlmICghb2JqLT5fcHJvdG8tPmlzT2JqZWN0KCkpCi0gICAgICAgIGJyZWFrOwotICAgICAgICAK
LSAgICAgIG9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KG9iai0+X3Byb3RvKTsKKworICAg
ICAgLy8gSWYgdGhlcmUncyBhbiBleGlzdGluZyBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IG9yIG9u
ZSBvZiBpdHMgCisgICAgICAvLyBwcm90b3R5cGVzIGl0IHNob3VsZCBiZSByZXBsYWNlZCwgc28g
YnJlYWsgaGVyZS4KKyAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHByb3RvdHlwZSA9IG9iai0+
X3Byb3RvOworICAgIGlmIChwcm90b3R5cGUgPT0ganNOdWxsKCkpCisgICAgICBicmVhazsKICAg
fQotICAKKwogICBfcHJvcC5wdXQocHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgdHJ1ZSk7CiB9CiAK
QEAgLTIzMCwyMyArMjIyLDIwIEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAKICAgcmV0dXJuIGRlbGV0ZVByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgcHJvcGVydHlOYW1lKSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgKnRy
eUdldEFuZENhbGxQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEpTT2JqZWN0ICpvYmpl
Y3QsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgewotICBKU1ZhbHVlKiB2ID0gb2Jq
ZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgaWYgKHYtPmlzT2JqZWN0KCkpIHsKLSAg
ICAgIEpTT2JqZWN0KiBvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KTsKLSAgICAgIENhbGxE
YXRhIGRhdGE7Ci0gICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG8tPmdldENhbGxEYXRhKGRhdGEp
OwotICAgICAgLy8gc3BlYyBzYXlzICJub3QgcHJpbWl0aXZlIHR5cGUiIGJ1dCAuLi4KLSAgICAg
IGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgICBKU09iamVjdCogdGhp
c09iaiA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpOwotICAgICAgICAgIEpTVmFsdWUq
IGRlZiA9IG8tPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHRoaXNPYmotPnRvVGhpc09iamVjdChleGVj
KSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgICAgICAgIEpTVHlwZSBkZWZUeXBlID0gZGVmLT50
eXBlKCk7Ci0gICAgICAgICAgQVNTRVJUKGRlZlR5cGUgIT0gR2V0dGVyU2V0dGVyVHlwZSk7Ci0g
ICAgICAgICAgaWYgKGRlZlR5cGUgIT0gT2JqZWN0VHlwZSkKLSAgICAgICAgICAgICAgcmV0dXJu
IGRlZjsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIE5VTEw7CitzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlKiBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBK
U09iamVjdCogb2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAg
SlNWYWx1ZSogZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOworICAg
IENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdl
dENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBl
eGVjLT5lbXB0eUxpc3QoKSk7CisgICAgQVNTRVJUKHJlc3VsdC0+dHlwZSgpICE9IEdldHRlclNl
dHRlclR5cGUpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIGlmIChyZXN1bHQtPmlzT2JqZWN0KCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFBy
aW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYg
cmVzdWx0KQpAQCAtMjU5LDI4ICsyNDgsMjggQEAgYm9vbCBKU09iamVjdDo6Z2V0UHJpbWl0aXZl
TnVtYmVyKEV4ZWNTdAogLy8gRUNNQSA4LjYuMi42CiBKU1ZhbHVlKiBKU09iamVjdDo6ZGVmYXVs
dFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNUeXBlIGhpbnQpIGNvbnN0CiB7Ci0gIC8vIFdlIG5l
ZWQgdGhpcyBjaGVjayB0byBndWFyZCBhZ2FpbnN0IHRoZSBjYXNlIHdoZXJlIHRoaXMgb2JqZWN0
IGlzIHJocyBvZgotICAvLyBhIGJpbmFyeSBleHByZXNzaW9uIHdoZXJlIGxocyB0aHJldyBhbiBl
eGNlcHRpb24gaW4gaXRzIGNvbnZlcnNpb24gdG8KLSAgLy8gcHJpbWl0aXZlCi0gIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gIC8qIFBy
ZWZlciBTdHJpbmcgZm9yIERhdGUgb2JqZWN0cyAqLwotICBpZiAoKGhpbnQgPT0gU3RyaW5nVHlw
ZSkgfHwgKGhpbnQgIT0gTnVtYmVyVHlwZSAmJiBfcHJvdG8gPT0gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5kYXRlUHJvdG90eXBlKCkpKSB7Ci0gICAgaWYgKEpTVmFsdWUqIHYgPSB0cnlH
ZXRBbmRDYWxsUHJvcGVydHkoZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3Ry
aW5nKSkKLSAgICAgIHJldHVybiB2OwotICAgIGlmIChKU1ZhbHVlKiB2ID0gdHJ5R2V0QW5kQ2Fs
bFByb3BlcnR5KGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKSkKLSAg
ICAgIHJldHVybiB2OwotICB9IGVsc2UgewotICAgIGlmIChKU1ZhbHVlKiB2ID0gdHJ5R2V0QW5k
Q2FsbFByb3BlcnR5KGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKSkK
LSAgICAgIHJldHVybiB2OwotICAgIGlmIChKU1ZhbHVlKiB2ID0gdHJ5R2V0QW5kQ2FsbFByb3Bl
cnR5KGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZykpCi0gICAgICBy
ZXR1cm4gdjsKLSAgfQorICAgIC8vIFdlIG5lZWQgdGhpcyBjaGVjayB0byBndWFyZCBhZ2FpbnN0
IHRoZSBjYXNlIHdoZXJlIHRoaXMgb2JqZWN0IGlzIHJocyBvZgorICAgIC8vIGEgYmluYXJ5IGV4
cHJlc3Npb24gd2hlcmUgbGhzIHRocmV3IGFuIGV4Y2VwdGlvbiBpbiBpdHMgY29udmVyc2lvbiB0
bworICAgIC8vIHByaW1pdGl2ZS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKTsKKworICAgIC8vIE11c3QgY2FsbCB0b1N0cmlu
ZyBmaXJzdCBmb3IgRGF0ZSBvYmplY3RzLgorICAgIGlmICgoaGludCA9PSBTdHJpbmdUeXBlKSB8
fCAoaGludCAhPSBOdW1iZXJUeXBlICYmIF9wcm90byA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmRhdGVQcm90b3R5cGUoKSkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0g
Y2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS50b1N0cmluZykpCisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIGlmIChKU1Zh
bHVlKiB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkudmFsdWVPZikpCisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gY2FsbERlZmF1bHRWYWx1ZUZ1
bmN0aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKSkKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gY2FsbERl
ZmF1bHRWYWx1ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0
cmluZykpCisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQogCi0gIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgQVNTRVJU
KCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiTm8gZGVmYXVsdCB2YWx1ZSIpOworICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIk5vIGRlZmF1bHQgdmFsdWUiKTsKIH0KIAogY29uc3QgSGFzaEVudHJ5KiBK
U09iamVjdDo6ZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdApAQCAtMzM0LDcgKzMyMyw3IEBAIEpTVmFsdWUq
IEpTT2JqZWN0Ojpsb29rdXBHZXR0ZXIoRXhlY1N0YXQKICAgICAgICAgaWYgKHYpIHsKICAgICAg
ICAgICAgIGlmICh2LT50eXBlKCkgIT0gR2V0dGVyU2V0dGVyVHlwZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jT2JqID0g
c3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVyKj4odiktPmdldEdldHRlcigpOworICAgICAgICAgICAg
SlNPYmplY3QqIGZ1bmNPYmogPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXIqPih2KS0+Z2V0dGVy
KCk7CiAgICAgICAgICAgICBpZiAoIWZ1bmNPYmopCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgICAgICByZXR1cm4gZnVuY09iajsKQEAgLTM1NCw3ICszNDMs
NyBAQCBKU1ZhbHVlKiBKU09iamVjdDo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0CiAgICAgICAgIGlm
ICh2KSB7CiAgICAgICAgICAgICBpZiAodi0+dHlwZSgpICE9IEdldHRlclNldHRlclR5cGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICBKU09iamVj
dCogZnVuY09iaiA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlcio+KHYpLT5nZXRTZXR0ZXIoKTsK
KyAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jT2JqID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVy
Kj4odiktPnNldHRlcigpOwogICAgICAgICAgICAgaWYgKCFmdW5jT2JqKQogICAgICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgcmV0dXJuIGZ1bmNPYmo7CkBA
IC0zNjYsMjkgKzM1NSw2IEBAIEpTVmFsdWUqIEpTT2JqZWN0Ojpsb29rdXBTZXR0ZXIoRXhlY1N0
YXQKICAgICB9CiB9CiAKLUpTT2JqZWN0KiBKU09iamVjdDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSos
IGNvbnN0IEFyZ0xpc3QmIC8qYXJncyovKQotewotICBBU1NFUlQoZmFsc2UpOwotICByZXR1cm4g
TlVMTDsKLX0KLQotSlNPYmplY3QqIEpTT2JqZWN0Ojpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBJZGVudGlmaWVyJiAvKmZ1bmN0aW9uTmFtZSov
LCBjb25zdCBVU3RyaW5nJiAvKnNvdXJjZVVSTCovLCBpbnQgLypsaW5lTnVtYmVyKi8pCi17Ci0g
IHJldHVybiBjb25zdHJ1Y3QoZXhlYywgYXJncyk7Ci19Ci0KLWJvb2wgSlNPYmplY3Q6OmltcGxl
bWVudHNDYWxsKCkKLXsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICByZXR1cm4gZ2V0Q2Fs
bERhdGEoY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZTsKLX0KLQotSlNWYWx1ZSAqSlNPYmplY3Q6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogLypleGVjKi8sIEpTT2JqZWN0KiAvKnRoaXNPYmoq
LywgY29uc3QgQXJnTGlzdCAmLyphcmdzKi8pCi17Ci0gIEFTU0VSVChmYWxzZSk7Ci0gIHJldHVy
biBOVUxMOwotfQotCiBib29sIEpTT2JqZWN0OjppbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25z
dAogewogICByZXR1cm4gZmFsc2U7CkBAIC0zOTgsNyArMzY0LDcgQEAgYm9vbCBKU09iamVjdDo6
aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleAogewogICAgIEpTVmFsdWUqIHByb3RvID0gZ2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwogICAgIGlmICghcHJvdG8tPmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJpbnRhbmNl
b2YgY2FsbGVkIG9uIGFuIG9iamVjdCB3aXRoIGFuIGludmFsaWQgcHJvdG90eXBlIHByb3BlcnR5
LiIpOworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgImluc3RhbmNlb2YgY2Fs
bGVkIG9uIGFuIG9iamVjdCB3aXRoIGFuIGludmFsaWQgcHJvdG90eXBlIHByb3BlcnR5LiIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtNTA3LDExICs0NzMsOSBAQCB2
b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RGdW5jdGlvbihJbnRlcm5hCiAgICAgcHV0RGlyZWN0KGZ1
bmMtPmZ1bmN0aW9uTmFtZSgpLCBmdW5jLCBhdHRyKTsgCiB9CiAKLXZvaWQgSlNPYmplY3Q6OmZp
bGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlICoqbG9jYXRp
b24pCit2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYg
c2xvdCwgSlNWYWx1ZSoqIGxvY2F0aW9uKQogewotICAgIEdldHRlclNldHRlciAqZ3MgPSBzdGF0
aWNfY2FzdDxHZXR0ZXJTZXR0ZXIgKj4oKmxvY2F0aW9uKTsKLSAgICBKU09iamVjdCAqZ2V0dGVy
RnVuYyA9IGdzLT5nZXRHZXR0ZXIoKTsKLSAgICBpZiAoZ2V0dGVyRnVuYykKKyAgICBpZiAoSlNP
YmplY3QqIGdldHRlckZ1bmMgPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXIqPigqbG9jYXRpb24p
LT5nZXR0ZXIoKSkKICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmMpOwogICAg
IGVsc2UKICAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKQEAgLTU2MCw3ICs1MjQsOSBAQCBK
U09iamVjdCogRXJyb3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgYXJncy5hcHBlbmQo
anNTdHJpbmcoZXhlYywgbmFtZSkpOwogICBlbHNlCiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmco
ZXhlYywgbWVzc2FnZSkpOwotICBKU09iamVjdCAqZXJyID0gc3RhdGljX2Nhc3Q8SlNPYmplY3Qg
Kj4oY29ucy0+Y29uc3RydWN0KGV4ZWMsYXJncykpOworICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVj
dERhdGE7CisgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGNvbnMtPmdldENvbnN0cnVj
dERhdGEoY29uc3RydWN0RGF0YSk7CisgIEpTT2JqZWN0KiBlcnIgPSBjb25zdHJ1Y3QoZXhlYywg
Y29ucywgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncyk7CiAKICAgaWYgKGxpbmVu
byAhPSAtMSkKICAgICBlcnItPnB1dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lIiksIGpz
TnVtYmVyKGV4ZWMsIGxpbmVubykpOwpAQCAtNjA2LDQgKzU3Miw5IEBAIEpTT2JqZWN0ICp0aHJv
d0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywgRXIKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKK0pTT2Jq
ZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQ
cm90b3R5cGUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTT2Jq
ZWN0LmgJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDMyICs4NCwyNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVi
bGljOgogICAgIEpTVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gR2V0dGVyU2V0dGVyVHlwZTsg
fQogICAgICAgCi0gICAgR2V0dGVyU2V0dGVyKCkgOiBnZXR0ZXIoMCksIHNldHRlcigwKSB7IH0K
LSAgICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNU
eXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSom
IHZhbHVlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqZXhlYykgY29u
c3Q7Ci0gICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEpTT2JqZWN0ICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OworICAg
IEdldHRlclNldHRlcigpIDogbV9nZXR0ZXIoMCksIG1fc2V0dGVyKDApIHsgfQogICAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKICAgICAgIAotICAgIEpTT2JqZWN0ICpnZXRHZXR0ZXIo
KSB7IHJldHVybiBnZXR0ZXI7IH0KLSAgICB2b2lkIHNldEdldHRlcihKU09iamVjdCAqZykgeyBn
ZXR0ZXIgPSBnOyB9Ci0gICAgSlNPYmplY3QgKmdldFNldHRlcigpIHsgcmV0dXJuIHNldHRlcjsg
fQotICAgIHZvaWQgc2V0U2V0dGVyKEpTT2JqZWN0ICpzKSB7IHNldHRlciA9IHM7IH0KKyAgICBK
U09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9nZXR0ZXI7IH0KKyAgICB2b2lkIHNl
dEdldHRlcihKU09iamVjdCogZ2V0dGVyKSB7IG1fZ2V0dGVyID0gZ2V0dGVyOyB9CisgICAgSlNP
YmplY3QqIHNldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGVyOyB9CisgICAgdm9pZCBzZXRT
ZXR0ZXIoSlNPYmplY3QqIHNldHRlcikgeyBtX3NldHRlciA9IHNldHRlcjsgfQogICAgICAgCiAg
IHByaXZhdGU6Ci0gICAgLy8gT2JqZWN0IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9w
ZXJhdGlvbiBpbmNsdWRlZC4KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7Ci0gICAgdmlydHVhbCBK
U09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNW
YWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBlIHByZWZlcnJlZCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51
bWJlciwgSlNWYWx1ZSomIHZhbHVlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNT
dGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNv
bnN0OworICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKIAotICAgIEpT
T2JqZWN0ICpnZXR0ZXI7Ci0gICAgSlNPYmplY3QgKnNldHRlcjsgIAorICAgIEpTT2JqZWN0KiBt
X2dldHRlcjsKKyAgICBKU09iamVjdCogbV9zZXR0ZXI7ICAKICAgfTsKICAgCiAgIGNsYXNzIEpT
T2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CkBAIC0yMzAsNyArMjIzLDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBm
cm9tIHRoZSBvYmplY3QuIElmIG5laXRoZXIgdGhlIG9iamVjdAotICAgICAqIG9yIGFueSBvdGhl
ciBvYmplY3QgaW4gaXQncyBwcm90b3R5cGUgY2hhaW4gaGF2ZSB0aGUgcHJvcGVydHksIHRoaXMK
KyAgICAgKiBvciBhbnkgb3RoZXIgb2JqZWN0IGluIGl0cyBwcm90b3R5cGUgY2hhaW4gaGF2ZSB0
aGUgcHJvcGVydHksIHRoaXMKICAgICAgKiBmdW5jdGlvbiB3aWxsIHJldHVybiBVbmRlZmluZWQu
CiAgICAgICoKICAgICAgKiBTZWUgRUNNQSA4LjYuMi4xCkBAIC0yNzYsNyArMjY5LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgYm9vbCBwcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICAvKioKLSAg
ICAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIG9iamVjdCAob3IgYW55IG9iamVjdCBpbiBp
dCdzIHByb3RvdHlwZSBjaGFpbikKKyAgICAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIG9i
amVjdCAob3IgYW55IG9iamVjdCBpbiBpdHMgcHJvdG90eXBlIGNoYWluKQogICAgICAqIGhhcyBh
IHByb3BlcnR5IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgogICAgICAqCiAgICAgICogU2VlIEVD
TUEgOC42LjIuNApAQCAtMzE5LDU4ICszMTIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBJ
bXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tEZWZhdWx0VmFsdWVdXSBpbnRlcm5hbCBwcm9wZXJ0eSAo
aW1wbGVtZW50ZWQgYnkKICAgICAgKiBhbGwgT2JqZWN0cykKICAgICAgKi8KLSAgICB2aXJ0dWFs
IEpTVmFsdWUgKmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIEpTVHlwZSBoaW50KSBjb25z
dDsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IGJhc2VkIG9uIHRoaXMg
b2JqZWN0LiBUeXBpY2FsbHkgdGhpcyBtZWFucyB0aGUKLSAgICAgKiBmb2xsb3dpbmc6Ci0gICAg
ICogMS4gQSBuZXcgb2JqZWN0IGlzIGNyZWF0ZWQKLSAgICAgKiAyLiBUaGUgcHJvdG90eXBlIG9m
IHRoZSBuZXcgb2JqZWN0IGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyBvYmplY3QncwotICAg
ICAqICAgICJwcm90b3R5cGUiIHByb3BlcnR5Ci0gICAgICogMy4gVGhlIGNhbGwoKSBtZXRob2Qg
b2YgdGhpcyBvYmplY3QgaXMgY2FsbGVkLCB3aXRoIHRoZSBuZXcgb2JqZWN0Ci0gICAgICogICAg
cGFzc2VkIGFzIHRoZSB0aGlzIHZhbHVlCi0gICAgICogNC4gVGhlIG5ldyBvYmplY3QgaXMgcmV0
dXJuZWQKLSAgICAgKgotICAgICAqIEluIHNvbWUgY2FzZXMsIEhvc3Qgb2JqZWN0cyBtYXkgZGlm
ZmVyIGZyb20gdGhlc2Ugc2VtYW50aWNzLCBhbHRob3VnaAotICAgICAqIHRoaXMgaXMgZGlzY291
cmFnZWQuCi0gICAgICoKLSAgICAgKiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGNvbnN0cnVj
dGlvbiwgdGhlIGV4ZWN1dGlvbiBzdGF0ZSdzIGV4Y2VwdGlvbgotICAgICAqIHdpbGwgYmUgc2V0
LiBUaGlzIGNhbiBiZSB0ZXN0ZWQgZm9yIHdpdGggRXhlY1N0YXRlOjpoYWRFeGNlcHRpb24oKS4K
LSAgICAgKiBVbmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIHRoZSBleGNlcHRpb24gb2JqZWN0IG1h
eSBhbHNvIGJlIHJldHVybmVkLgotICAgICAqCi0gICAgICogTm90ZTogVGhpcyBmdW5jdGlvbiBz
aG91bGQgbm90IGJlIGNhbGxlZCBpZiBnZXRDb25zdHJ1Y3REYXRhKCkgcmV0dXJucwotICAgICAq
IENvbnN0cnVjdFR5cGVOb25lLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmVzdWx0IGluIGFuIGFz
c2VydGlvbiBmYWlsdXJlLgotICAgICAqCi0gICAgICogQHBhcmFtIGV4ZWMgVGhlIGN1cnJlbnQg
ZXhlY3V0aW9uIHN0YXRlCi0gICAgICogQHBhcmFtIGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBiZSBw
YXNzZWQgdG8gY2FsbCgpIG9uY2UgdGhlIG5ldyBvYmplY3QgaGFzCi0gICAgICogYmVlbiBjcmVh
dGVkCi0gICAgICogQHJldHVybiBUaGUgbmV3bHkgY3JlYXRlZCAmYW1wOyBpbml0aWFsaXplZCBv
YmplY3QKLSAgICAgKi8KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tD
b25zdHJ1Y3RdXSBpbnRlcm5hbCBwcm9wZXJ0eQotICAgICAqLwotICAgIHZpcnR1YWwgSlNPYmpl
Y3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpOwotICAg
IHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MsIGNvbnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSwgY29uc3QgVVN0cmluZyYg
c291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxscyB0aGlz
IG9iamVjdCBhcyBpZiBpdCBpcyBhIGZ1bmN0aW9uLgotICAgICAqCi0gICAgICogTm90ZTogVGhp
cyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiBpbXBsZW1lbnRzQ2FsbCgpIHJldHVy
bnMKLSAgICAgKiBmYWxzZSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHJlc3VsdCBpbiBhbiBhc3Nl
cnRpb24gZmFpbHVyZS4KLSAgICAgKgotICAgICAqIFNlZSBFQ01BIDguNi4yLjMKLSAgICAgKgot
ICAgICAqIEBwYXJhbSBleGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQotICAgICAqIEBw
YXJhbSB0aGlzT2JqIFRoZSBvYmogdG8gYmUgdXNlZCBhcyAidGhpcyIgd2l0aGluIGZ1bmN0aW9u
IGV4ZWN1dGlvbi4KLSAgICAgKiBOb3RlIHRoYXQgaW4gbW9zdCBjYXNlcyB0aGlzIHdpbGwgYmUg
ZGlmZmVyZW50IGZyb20gdGhlIEMrKyAidGhpcyIKLSAgICAgKiBvYmplY3QuIEZvciBleGFtcGxl
LCBpZiB0aGUgRUNNQVNjcmlwdCBjb2RlICJ3aW5kb3cubG9jYXRpb24tPnRvU3RyaW5nKCkiCi0g
ICAgICogaXMgZXhlY3V0ZWQsIGNhbGwoKSB3aWxsIGJlIGludm9rZWQgb24gdGhlIEMrKyBvYmpl
Y3Qgd2hpY2ggaW1wbGVtZW50cwotICAgICAqIHRoZSB0b1N0cmluZyBtZXRob2QsIHdpdGggdGhl
IHRoaXNPYmogYmVpbmcgd2luZG93LmxvY2F0aW9uCi0gICAgICogQHBhcmFtIGFyZ3MgQXJnTGlz
dCBvZiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbgotICAgICAqIEByZXR1
cm4gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBmdW5jdGlvbgotICAgICAqLwotICAgIGJvb2wg
aW1wbGVtZW50c0NhbGwoKTsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpOwor
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIEpTVHlwZSBoaW50
KSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaW1w
bGVtZW50cyB0aGUgaGFzSW5zdGFuY2UoKSBtZXRob2QuIElmIHRoaXMKQEAgLTQ0Niw2ICszODgs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBKU1ZhbHVlICpfcHJvdG87CiAgIH07CiAKKyAgICBK
U09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKik7CisKICAgLyoqCiAgICAq
IFR5cGVzIG9mIE5hdGl2ZSBFcnJvcnMgYXZhaWxhYmxlLiBGb3IgY3VzdG9tIGVycm9ycywgR2Vu
ZXJhbEVycm9yCiAgICAqIHNob3VsZCBiZSB1c2VkLgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU1ZhbHVlLmNw
cAkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1NSw2ICsyNTUsMTYgQEAgdm9pZCBKU0NlbGw6OnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbgogICAgIHRvT2JqZWN0KGV4ZWMpLT5wdXQoZXhlYywgaWRlbnRpZmll
ciwgdmFsdWUpOwogfQogCitib29sIEpTQ2VsbDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIHJldHVybiB0b09iamVj
dChleGVjKS0+ZGVsZXRlUHJvcGVydHkoZXhlYywgaWRlbnRpZmllcik7Cit9CisKK2Jvb2wgSlND
ZWxsOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlkZW50aWZpZXIp
Cit7CisgICAgcmV0dXJuIHRvT2JqZWN0KGV4ZWMpLT5kZWxldGVQcm9wZXJ0eShleGVjLCBpZGVu
dGlmaWVyKTsKK30KKwogSlNPYmplY3QqIEpTQ2VsbDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIHsKICAgICByZXR1cm4gdG9PYmplY3QoZXhlYyk7CkBAIC0yNzUsNCArMjg1
LDIyIEBAIEpTQ2VsbCoganNPd25lZFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGMKICAgICByZXR1
cm4gcy5pc051bGwoKSA/IG5ldyAoZXhlYykgSlNTdHJpbmcoIiIsIEpTU3RyaW5nOjpIYXNPdGhl
ck93bmVyKSA6IG5ldyAoZXhlYykgSlNTdHJpbmcocywgSlNTdHJpbmc6Okhhc090aGVyT3duZXIp
OwogfQogCitKU1ZhbHVlKiBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogZnVuY3Rpb25P
YmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVOYXRpdmUpCisgICAgICAgIHJldHVybiBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rp
b24oZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jdGlvbk9iamVjdCksIHRoaXNWYWx1
ZSwgYXJncyk7CisgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlSlMpOworICAgIC8vIEZJ
WE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGNhbGxEYXRh
LgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb25PYmplY3QpLT5j
YWxsKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncyk7Cit9CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBvYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlw
ZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3sKKyAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTmF0aXZlKQorICAg
ICAgICByZXR1cm4gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPihvYmplY3QpLCBhcmdzKTsKKyAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9
PSBDb25zdHJ1Y3RUeXBlSlMpOworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUg
ZWZmaWNpZW50bHkgdXNpbmcgdGhlIGNvbnN0cnVjdERhdGEuCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEpTRnVuY3Rpb24qPihvYmplY3QpLT5jb25zdHJ1Y3QoZXhlYywgYXJncyk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNWYWx1ZS5oCShyZXZpc2lvbiAzNDczNikK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw2
ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSogZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7CiAgICAgdm9pZCBwdXQoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7CisgICAgYm9vbCBkZWxldGVQcm9w
ZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOworICAgIGJv
b2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAg
ICBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogCiBwcml2YXRlOgpA
QCAtMTkzLDYgKzE5NSw4IEBAIHB1YmxpYzoKICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0
aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgogICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7CiAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJv
cGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICB2aXJ0dWFsIEpT
T2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiAzNDczNikKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNiBA
QAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWF0aE9iamVjdC5oIgotI2luY2x1
ZGUgIk1hdGhPYmplY3QubHV0LmgiCiAKICNpbmNsdWRlICJvcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSA8dGltZS5oPgpAQCAtMjksMTIgKzI4LDM3IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCitzdGF0
aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FDb3Mo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQVRhbihF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQ2VpbChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZSogbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0V4cChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNW
YWx1ZSogbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlKiBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
KiBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
KiBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUq
IG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKworfQorCisjaW5jbHVkZSAi
TWF0aE9iamVjdC5sdXQuaCIKKworbmFtZXNwYWNlIEtKUyB7CisKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBNYXRoT2JqZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIGNvbnN0IENsYXNzSW5mbyBNYXRoT2JqZWN0OjppbmZvID0geyAiTWF0aCIsIDAsIDAs
IEV4ZWNTdGF0ZTo6bWF0aFRhYmxlIH07CiAKIC8qIFNvdXJjZSBmb3IgTWF0aE9iamVjdC5sdXQu
aAotQGJlZ2luIG1hdGhUYWJsZSAyMQorQGJlZ2luIG1hdGhUYWJsZQogICBFICAgICAgICAgICAg
IE1hdGhPYmplY3Q6OkV1bGVyICAgICAgICAgICBEb250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5
CiAgIExOMiAgICAgICAgICAgTWF0aE9iamVjdDo6TG4yICAgICAgICAgICAgIERvbnRFbnVtfERv
bnREZWxldGV8UmVhZE9ubHkKICAgTE4xMCAgICAgICAgICBNYXRoT2JqZWN0OjpMbjEwICAgICAg
ICAgICAgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seQpAQCAtMTAzLDMzICsxMjcsMzMgQEAg
SlNWYWx1ZSogTWF0aE9iamVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQWJzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBkb3VibGUgYXJnID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJu
IHNpZ25iaXQoYXJnKSA/IGpzTnVtYmVyKGV4ZWMsIC1hcmcpIDoganNOdW1iZXIoZXhlYywgYXJn
KTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQUNvcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFjb3MoYXJnc1swXS0+dG9OdW1iZXIoZXhl
YykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQVNp
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFzaW4oYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
QVRhbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGF0YW4oYXJnc1swXS0+dG9OdW1i
ZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogbWF0aFByb3Rv
RnVuY0FUYW4yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYXRhbjIoYXJnc1swXS0+
dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUq
IG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZSogbWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGRvdWJsZSBh
cmcgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICBpZiAoc2lnbmJpdChhcmcpICYmIGFy
ZyA+IC0xLjApCkBAIC0xMzcsMTcgKzE2MSwxNyBAQCBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQ2Vp
bChFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGNlaWwoYXJnKSk7CiB9
CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgY29zKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiB9
CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jRXhwKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgZXhwKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiB9
CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgZG91YmxlIGFyZyA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChzaWdu
Yml0KGFyZykgJiYgYXJnID09IDAuMCkKQEAgLTE1NSwxMiArMTc5LDEyIEBAIEpTVmFsdWUqIG1h
dGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqIGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
Zmxvb3IoYXJnKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9G
dW5jTG9nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbG9nKGFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9G
dW5jTWF4KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICB1bnNpZ25lZCBhcmdzQ291bnQgPSBhcmdzLnNpemUoKTsKICAgICBk
b3VibGUgcmVzdWx0ID0gLUluZjsKQEAgLTE3Niw3ICsyMDAsNyBAQCBKU1ZhbHVlKiBtYXRoUHJv
dG9GdW5jTWF4KEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3Vs
dCk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWluKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICB1bnNpZ25lZCBhcmdzQ291bnQgPSBhcmdzLnNpemUoKTsKICAgICBkb3VibGUgcmVz
dWx0ID0gK0luZjsKQEAgLTE5Miw3ICsyMTYsNyBAQCBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWlu
KEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CiB9CiAK
LUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAv
LyBFQ01BIDE1LjguMi4xLjEzCiAKQEAgLTIwNiw3ICsyMzAsNyBAQCBKU1ZhbHVlKiBtYXRoUHJv
dG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvdyhh
cmcsIGFyZzIpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
UmFuZG9tKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpCiB7CiAjaWYgIVVTRShNVUxUSVBMRV9USFJFQURTKQogICAgIHN0YXRpYyBib29sIGRpZElu
aXRSYW5kb207CkBAIC0yMTksNyArMjQzLDcgQEAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY1JhbmRv
bShFeGVjU3RhdGUqIAogICAgIHJldHVybiBqc051bWJlcihleGVjLCB3dGZfcmFuZG9tKCkpOwog
fQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUm91bmQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIGRvdWJsZSBhcmcgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICBpZiAoc2ln
bmJpdChhcmcpICYmIGFyZyA+PSAtMC41KQpAQCAtMjI3LDE3ICsyNTEsMTcgQEAgSlNWYWx1ZSog
bWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiBqc051bWJlcihleGVj
LCBmbG9vcihhcmcgKyAwLjUpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1NpbihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIG1h
dGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBzaW4oYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1NxcnQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBt
YXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHNxcnQoYXJn
c1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1RhbihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUq
IG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0YW4oYXJn
c1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9NYXRo
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL01hdGhPYmplY3QuaAko
cmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvTWF0aE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAotLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQog
LyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTQwLDI2ICszOCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBlbnVtIHsg
RXVsZXIsIExuMiwgTG4xMCwgTG9nMkUsIExvZzEwRSwgUGksIFNxcnQxXzIsIFNxcnQyIH07CiAg
ICAgfTsKIAotICAgIC8vIEZ1bmN0aW9ucwotICAgIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBYnMo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogbWF0
aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0g
ICAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FU
YW4yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUq
IG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYp
OwotICAgIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBj
b25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
Rmxvb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1
ZSogbWF0aFByb3RvRnVuY0xvZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3Qm
KTsKLSAgICBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
Y29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogbWF0aFByb3RvRnVu
Y1BvdyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVl
KiBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlz
dCYpOwotICAgIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqLCBKU09iamVj
dCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jU2luKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIG1hdGhQcm90
b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpT
VmFsdWUqIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdM
aXN0Jik7Ci0KIH0gLy8gbmFtZXNwYWNlIEtKUwogCiAjZW5kaWYgLy8gTWF0aE9iamVjdF9oCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
MTIgKzQzLDEyIEBAIE51bWJlck9iamVjdDo6TnVtYmVyT2JqZWN0KEpTT2JqZWN0KiBwcm8KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlclByb3RvdHlwZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51
bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
KiBudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5j
VmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogbnVtYmVy
UHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNp
b24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogCiAv
LyBFQ01BIDE1LjcuNAogCkBAIC0xNDIsMTIgKzE0MiwxMiBAQCBzdGF0aWMgZG91YmxlIGludFBv
dzEwKGludCBlKQogfQogCiAKLUpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlKiBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJk51bWJlck9iamVjdDo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUt
PmlzT2JqZWN0KCZOdW1iZXJPYmplY3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PE51bWJl
ck9iamVjdCo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCk7CisgICAgSlNWYWx1ZSogdiA9IHN0
YXRpY19jYXN0PE51bWJlck9iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKTsKIAog
ICAgIGRvdWJsZSByYWRpeEFzRG91YmxlID0gYXJnc1swXS0+dG9JbnRlZ2VyKGV4ZWMpOyAvLyBu
YW4gLT4gMAogICAgIGlmIChyYWRpeEFzRG91YmxlID09IDEwIHx8IGFyZ3NbMF0tPmlzVW5kZWZp
bmVkKCkpCkBAIC0xNjMsNyArMTYzLDcgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YQogICAgIC8vIHVubGVzcyBzb21lb25lIGZpbmRzIGEgcHJlY2lzZSBydWxlLgog
ICAgIGNoYXIgc1syMDQ4ICsgM107CiAgICAgY29uc3QgY2hhciogbGFzdENoYXJJblN0cmluZyA9
IHMgKyBzaXplb2YocykgLSAxOwotICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7Cisg
ICAgZG91YmxlIHggPSB2LT51bmNoZWNrZWRHZXROdW1iZXIoKTsKICAgICBpZiAoaXNuYW4oeCkg
fHwgaXNpbmYoeCkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpmcm9t
KHgpKTsKIApAQCAtMjA3LDI5ICsyMDcsMjkgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdGFydE9mUmVzdWx0U3Ry
aW5nKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBu
dW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICBpZiAoIXRoaXNPYmot
PmluaGVyaXRzKCZOdW1iZXJPYmplY3Q6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09i
amVjdCgmTnVtYmVyT2JqZWN0OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIAogICAgIC8vIFRPRE8KLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
c3RhdGljX2Nhc3Q8TnVtYmVyT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKS0+dG9T
dHJpbmcoZXhlYykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdGF0aWNfY2FzdDxOdW1i
ZXJPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCktPnRvU3RyaW5nKGV4ZWMpKTsK
IH0KIAotSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIG51bWJlclByb3RvRnVu
Y1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTnVtYmVyT2Jq
ZWN0OjppbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJk51bWJlck9iamVjdDo6
aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8TnVtYmVyT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFsVmFs
dWUoKS0+dG9KU051bWJlcihleGVjKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TnVtYmVyT2Jq
ZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpOwogfQogCi1KU1ZhbHVlKiBudW1iZXJQ
cm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTnVtYmVyT2JqZWN0OjppbmZvKSkK
KyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJk51bWJlck9iamVjdDo6aW5mbykpCiAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU1ZhbHVlKiB2
ID0gc3RhdGljX2Nhc3Q8TnVtYmVyT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKTsK
KyAgICBKU1ZhbHVlKiB2ID0gc3RhdGljX2Nhc3Q8TnVtYmVyT2JqZWN0Kj4odGhpc1ZhbHVlKS0+
aW50ZXJuYWxWYWx1ZSgpOwogCiAgICAgSlNWYWx1ZSogZnJhY3Rpb25EaWdpdHMgPSBhcmdzWzBd
OwogICAgIGRvdWJsZSBkZiA9IGZyYWN0aW9uRGlnaXRzLT50b0ludGVnZXIoZXhlYyk7CkBAIC0y
MzcsNyArMjM3LDcgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdAog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9GaXhlZCgpIGRp
Z2l0cyBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjAiKTsKICAgICBpbnQgZiA9IChp
bnQpZGY7CiAKLSAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSB4
ID0gdi0+dW5jaGVja2VkR2V0TnVtYmVyKCk7CiAgICAgaWYgKGlzbmFuKHgpKQogICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgIk5hTiIpOwogCkBAIC0zMTAsMTQgKzMxMCwxMiBAQCBzdGF0
aWMgdm9pZCBleHBvbmVudGlhbFBhcnRUb1N0cmluZyhjaGFyCiAgICAgYnVmW2krK10gPSBzdGF0
aWNfY2FzdDxjaGFyPignMCcgKyBleHBvbmVudGlhbCAlIDEwKTsKIH0KIAotSlNWYWx1ZSogbnVt
YmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9FeHBv
bmVudGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJk51bWJl
ck9iamVjdDo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZOdW1iZXJPYmpl
Y3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
Ci0gICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PE51bWJlck9iamVjdCo+KHRoaXNPYmopLT5p
bnRlcm5hbFZhbHVlKCk7Ci0KLSAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOworICAg
IGRvdWJsZSB4ID0gc3RhdGljX2Nhc3Q8TnVtYmVyT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJu
YWxWYWx1ZSgpLT51bmNoZWNrZWRHZXROdW1iZXIoKTsKIAogICAgIGlmIChpc25hbih4KSB8fCBp
c2luZih4KSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmZyb20oeCkp
OwpAQCAtMzgxLDE1ICszNzksMTUgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVu
dGlhbChFeAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBidWYpOwogfQogCi1KU1ZhbHVlKiBu
dW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVj
aXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZOdW1iZXJP
YmplY3Q6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmTnVtYmVyT2JqZWN0
OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAot
ICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxOdW1iZXJPYmplY3QqPih0aGlzT2JqKS0+aW50
ZXJuYWxWYWx1ZSgpOworICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxOdW1iZXJPYmplY3Qq
Pih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCk7CiAKICAgICBkb3VibGUgZG91YmxlUHJlY2lz
aW9uID0gYXJnc1swXS0+dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7Ci0gICAgZG91YmxlIHgg
PSB2LT50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgeCA9IHYtPnVuY2hlY2tlZEdldE51bWJl
cigpOwogICAgIGlmIChhcmdzWzBdLT5pc1VuZGVmaW5lZCgpIHx8IGlzbmFuKHgpIHx8IGlzaW5m
KHgpKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdi0+dG9TdHJpbmcoZXhlYykpOwog
CkBAIC00NTMsNyArNDUxLDcgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24o
RXhlYwogY29uc3QgQ2xhc3NJbmZvIE51bWJlckNvbnN0cnVjdG9yOjppbmZvID0geyAiRnVuY3Rp
b24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbywgMCwgRXhlY1N0YXRlOjpudW1iZXJUYWJsZSB9
OwogCiAvKiBTb3VyY2UgZm9yIE51bWJlck9iamVjdC5sdXQuaAotQGJlZ2luIG51bWJlclRhYmxl
IDUKK0BiZWdpbiBudW1iZXJUYWJsZQogICBOYU4gICAgICAgICAgICAgICAgICAgTnVtYmVyQ29u
c3RydWN0b3I6Ok5hTlZhbHVlICAgICAgIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkKICAg
TkVHQVRJVkVfSU5GSU5JVFkgICAgIE51bWJlckNvbnN0cnVjdG9yOjpOZWdJbmZpbml0eSAgICBE
b250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5CiAgIFBPU0lUSVZFX0lORklOSVRZICAgICBOdW1i
ZXJDb25zdHJ1Y3Rvcjo6UG9zSW5maW5pdHkgICAgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25s
eQpAQCAtNDYyLDEzICs0NjAsMTMgQEAgY29uc3QgQ2xhc3NJbmZvIE51bWJlckNvbnN0cnVjdG9y
OjppbmZvIAogQGVuZAogKi8KIE51bWJlckNvbnN0cnVjdG9yOjpOdW1iZXJDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jUHJvdG8sIE51bWJlclByb3Rv
dHlwZSogbnVtYmVyUHJvdG8pCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGZ1bmNQcm90bywgSWRl
bnRpZmllcihleGVjLCBudW1iZXJQcm90by0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSkpCisgICAg
OiBJbnRlcm5hbEZ1bmN0aW9uKGZ1bmNQcm90bywgSWRlbnRpZmllcihleGVjLCBudW1iZXJQcm90
by0+aW5mby5jbGFzc05hbWUpKQogewogICAgIC8vIE51bWJlci5Qcm90b3R5cGUKICAgICBwdXRE
aXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgbnVtYmVyUHJvdG8sIERvbnRF
bnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwogCiAgICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3Ig
Y29uc3RydWN0b3IKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoZXhlYywgMSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICAgIHB1
dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwg
UmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogfQogCiBib29sIE51bWJlckNvbnN0
cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTQ5NSwyOCArNDkzLDQ1
IEBAIEpTVmFsdWUqIE51bWJlckNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3AKICAgICByZXR1cm4g
anNOdWxsKCk7CiB9CiAKLUNvbnN0cnVjdFR5cGUgTnVtYmVyQ29uc3RydWN0b3I6OmdldENvbnN0
cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpCi17Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRp
dmU7Ci19Ci0KIC8vIEVDTUEgMTUuNy4xCi1KU09iamVjdCogTnVtYmVyQ29uc3RydWN0b3I6OmNv
bnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNP
YmplY3QqIGNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU09iamVjdCogcHJvdG8gPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlclByb3RvdHlwZSgpOwotICAgIE51bWJl
ck9iamVjdCogb2JqID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QocHJvdG8pOwotCi0gICAgLy8g
RklYTUU6IENoZWNrIGFyZ3NbMF0tPmlzVW5kZWZpbmVkKCkgaW5zdGVhZCBvZiBhcmdzLmlzRW1w
dHkoKT8KKyAgICBOdW1iZXJPYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgTnVtYmVyT2JqZWN0KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVyUHJvdG90eXBlKCkpOwogICAgIGRvdWJs
ZSBuID0gYXJncy5pc0VtcHR5KCkgPyAwIDogYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAg
b2JqLT5zZXRJbnRlcm5hbFZhbHVlKGpzTnVtYmVyKGV4ZWMsIG4pKTsKICAgICByZXR1cm4gb2Jq
OwogfQogCitDb25zdHJ1Y3RUeXBlIE51bWJlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRh
KENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3I7CisgICAgcmV0dXJu
IENvbnN0cnVjdFR5cGVOYXRpdmU7Cit9CisKIC8vIEVDTUEgMTUuNy4yCi1KU1ZhbHVlKiBOdW1i
ZXJDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSogY2FsbE51bWJlckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKLSAgICAvLyBGSVhNRTogQ2hlY2sgYXJnc1swXS0+aXNVbmRlZmluZWQoKSBpbnN0
ZWFkIG9mIGFyZ3MuaXNFbXB0eSgpPwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBhcmdzLmlz
RW1wdHkoKSA/IDAgOiBhcmdzWzBdLT50b051bWJlcihleGVjKSk7CiB9CiAKK0NhbGxUeXBlIE51
bWJlckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAg
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbE51bWJlckNvbnN0cnVjdG9yOworICAgIHJl
dHVybiBDYWxsVHlwZU5hdGl2ZTsKK30KKworTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIo
RXhlY1N0YXRlKiBleGVjLCBKU051bWJlckNlbGwqIG51bWJlcikKK3sKKyAgICBOdW1iZXJPYmpl
Y3QqIG9iaiA9IG5ldyAoZXhlYykgTnVtYmVyT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+bnVtYmVyUHJvdG90eXBlKCkpOworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShudW1i
ZXIpOworICAgIHJldHVybiBvYmo7Cit9CisKK051bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVy
RnJvbUltbWVkaWF0ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQorewor
ICAgIE51bWJlck9iamVjdCogb2JqID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJQcm90b3R5cGUoKSk7CisgICAgb2JqLT5zZXRJbnRl
cm5hbFZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4gb2JqOworfQorCiB9IC8vIG5hbWVzcGFjZSBL
SlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyT2JqZWN0LmgJKHJldmlzaW9uIDM0NzM2KQorKysg
SmF2YVNjcmlwdENvcmUva2pzL051bWJlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
NCArMjcsMjAgQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKKyAgICBjbGFzcyBKU051bWJlckNlbGw7
CisKICAgICBjbGFzcyBOdW1iZXJPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIE51bWJlck9iamVjdChKU09iamVjdCogcHJvdG90eXBlKTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCisgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICB9OwogCisg
ICAgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhlY1N0YXRlKiwgSlNOdW1iZXJDZWxs
Kik7CisgICAgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXJGcm9tSW1tZWRpYXRlTnVtYmVy
KEV4ZWNTdGF0ZSosIEpTVmFsdWUqKTsKKwogICAgIC8qKgogICAgICAqIEBpbnRlcm5hbAogICAg
ICAqCkBAIC01NSwyMCArNjEsMTcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgcHVibGljOgogICAg
ICAgICBOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIE51
bWJlclByb3RvdHlwZSopOwogCi0gICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKLSAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29u
c3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLQotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlz
dCYpOwotCiAgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAg
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKICAgICAgICAgZW51bSB7IE5hTlZh
bHVlLCBOZWdJbmZpbml0eSwgUG9zSW5maW5pdHksIE1heFZhbHVlLCBNaW5WYWx1ZSB9OwogCi0g
ICAgICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3QoY29uc3QgQXJnTGlzdCYpOworICAgIHByaXZhdGU6
CisgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVj
dERhdGEmKTsKKyAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYp
OworICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9Qcm9wZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9Qcm9wZXJ0eVNsb3QuY3BwCShyZXZpc2lvbiAzNDczNikKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9Qcm9wZXJ0eVNsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNiArMzYsMTcg
QEAgSlNWYWx1ZSogUHJvcGVydHlTbG90Ojp1bmRlZmluZWRHZXR0ZXIoRQogCiBKU1ZhbHVlKiBQ
cm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBDYWxsRGF0YSBkYXRhOwot
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2xvdC5tX2RhdGEuZ2V0dGVyRnVuYy0+Z2V0Q2FsbERh
dGEoZGF0YSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlTmF0aXZlKQotICAgICAgICByZXR1cm4gc2xvdC5tX2RhdGEu
Z2V0dGVyRnVuYy0+Y2FsbEFzRnVuY3Rpb24oZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihz
bG90LnNsb3RCYXNlKCkpLCBleGVjLT5lbXB0eUxpc3QoKSk7CisgICAgICAgIHJldHVybiBjYWxs
RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgc2xvdC5tX2RhdGEuZ2V0dGVyRnVuYywgc2xvdC5z
bG90QmFzZSgpLCBleGVjLT5lbXB0eUxpc3QoKSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlID09IENh
bGxUeXBlSlMpOwogICAgIFJlZ2lzdGVyRmlsZVN0YWNrKiBzdGFjayA9ICZleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPnJlZ2lzdGVyRmlsZVN0YWNrKCk7CiAgICAgc3RhY2stPnB1c2hGdW5j
dGlvblJlZ2lzdGVyRmlsZSgpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QubV9kYXRhLmdl
dHRlckZ1bmMtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oc2xv
dC5zbG90QmFzZSgpKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgIC8vIEZJWE1FOiBUaGlzIGNh
biBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGNhbGxEYXRhLgorICAgIEpTVmFs
dWUqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihzbG90Lm1fZGF0YS5nZXR0ZXJG
dW5jKS0+Y2FsbChleGVjLCBzbG90LnNsb3RCYXNlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAg
ICBzdGFjay0+cG9wRnVuY3Rpb25SZWdpc3RlckZpbGUoKTsKLSAgICByZXR1cm4gcmVzdWx0OyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
UmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhw
T2JqZWN0LmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhw
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBL
SlMgewogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVnRXhwUHJvdG90eXBl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJv
dG9GdW5jVGVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNFeGVjKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVn
RXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0
Jik7CitzdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogcmVnRXhw
UHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSog
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwogCiAvLyBFQ01BIDE1LjEwLjUKIApAQCAtNTgsMjUgKzU4LDIzIEBA
IFJlZ0V4cFByb3RvdHlwZTo6UmVnRXhwUHJvdG90eXBlKEV4ZWNTdGEKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICAgICAKLUpTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY1Rlc3QoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIHJlZ0V4cFBy
b3RvRnVuY1Rlc3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZS
ZWdFeHBPYmplY3Q6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmUmVnRXhw
T2JqZWN0OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPih0aGlzT2JqKS0+dGVz
dChleGVjLCBhcmdzKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4odGhp
c1ZhbHVlKS0+dGVzdChleGVjLCBhcmdzKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5j
RXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJlJlZ0V4cE9iamVjdDo6aW5mbykpCisgICAgaWYgKCF0aGlz
VmFsdWUtPmlzT2JqZWN0KCZSZWdFeHBPYmplY3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ0V4
cE9iamVjdCo+KHRoaXNPYmopLT5leGVjKGV4ZWMsIGFyZ3MpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxSZWdFeHBPYmplY3QqPih0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGFyZ3MpOwogfQogCi1K
U1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmND
b21waWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmUmVnRXhw
T2JqZWN0OjppbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJlJlZ0V4cE9iamVj
dDo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAK
ICAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHA7CkBAIC05NiwyNSArOTQsMjUgQEAgSlNWYWx1ZSog
cmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBVU3RyaW5n
KCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogIikuYXBwZW5kKHJlZ0V4cC0+ZXJyb3JNZXNz
YWdlKCkpKTsKIAotICAgIHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KHRoaXNPYmopLT5zZXRS
ZWdFeHAocmVnRXhwLnJlbGVhc2UoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4o
dGhpc09iaiktPnNldExhc3RJbmRleCgwKTsKKyAgICBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3Qq
Pih0aGlzVmFsdWUpLT5zZXRSZWdFeHAocmVnRXhwLnJlbGVhc2UoKSk7CisgICAgc3RhdGljX2Nh
c3Q8UmVnRXhwT2JqZWN0Kj4odGhpc1ZhbHVlKS0+c2V0TGFzdEluZGV4KDApOwogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUqIHJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09iai0+
aW5oZXJpdHMoJlJlZ0V4cE9iamVjdDo6aW5mbykpIHsKLSAgICAgICAgaWYgKHRoaXNPYmotPmlu
aGVyaXRzKCZSZWdFeHBQcm90b3R5cGU6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09i
amVjdCgmUmVnRXhwT2JqZWN0OjppbmZvKSkgeworICAgICAgICBpZiAodGhpc1ZhbHVlLT5pc09i
amVjdCgmUmVnRXhwUHJvdG90eXBlOjppbmZvKSkKICAgICAgICAgICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCAiLy8iKTsKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKICAgICB9CiAKLSAgICBVU3RyaW5nIHJlc3VsdCA9ICIvIiArIHRoaXNPYmotPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS0+dG9TdHJpbmcoZXhlYykgKyAiLyI7Ci0g
ICAgaWYgKHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS0+
dG9Cb29sZWFuKGV4ZWMpKQorICAgIFVTdHJpbmcgcmVzdWx0ID0gIi8iICsgc3RhdGljX2Nhc3Q8
UmVnRXhwT2JqZWN0Kj4odGhpc1ZhbHVlKS0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5zb3VyY2UpLT50b1N0cmluZyhleGVjKSArICIvIjsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8UmVn
RXhwT2JqZWN0Kj4odGhpc1ZhbHVlKS0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5n
bG9iYWwpLT50b0Jvb2xlYW4oZXhlYykpCiAgICAgICAgIHJlc3VsdCArPSAiZyI7Ci0gICAgaWYg
KHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWdub3JlQ2FzZSktPnRv
Qm9vbGVhbihleGVjKSkKKyAgICBpZiAoc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4odGhpc1Zh
bHVlKS0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25vcmVDYXNlKS0+dG9Cb29s
ZWFuKGV4ZWMpKQogICAgICAgICByZXN1bHQgKz0gImkiOwotICAgIGlmICh0aGlzT2JqLT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSktPnRvQm9vbGVhbihleGVjKSkK
KyAgICBpZiAoc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4odGhpc1ZhbHVlKS0+Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpLT50b0Jvb2xlYW4oZXhlYykpCiAgICAg
ICAgIHJlc3VsdCArPSAibSI7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHJlc3VsdCk7CiB9
CkBAIC0xMjQsNyArMTIyLDcgQEAgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YQogY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cE9iamVjdDo6aW5mbyA9IHsgIlJlZ0V4cCIsIDAs
IDAsIEV4ZWNTdGF0ZTo6cmVnRXhwVGFibGUgfTsKIAogLyogU291cmNlIGZvciBSZWdFeHBPYmpl
Y3QubHV0LmgKLUBiZWdpbiByZWdFeHBUYWJsZSA1CitAYmVnaW4gcmVnRXhwVGFibGUKICAgICBn
bG9iYWwgICAgICAgIFJlZ0V4cE9iamVjdDo6R2xvYmFsICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHl8RG9udEVudW0KICAgICBpZ25vcmVDYXNlICAgIFJlZ0V4cE9iamVjdDo6SWdub3JlQ2FzZSAg
IERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0KICAgICBtdWx0aWxpbmUgICAgIFJlZ0V4cE9i
amVjdDo6TXVsdGlsaW5lICAgIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0KQEAgLTIyOSwx
NCArMjI3LDE1IEBAIEpTVmFsdWUqIFJlZ0V4cE9iamVjdDo6ZXhlYyhFeGVjU3RhdGUqIGUKICAg
ICAgICAgOiAganNOdWxsKCk7CiB9CiAKLUNhbGxUeXBlIFJlZ0V4cE9iamVjdDo6Z2V0Q2FsbERh
dGEoQ2FsbERhdGEmKQorc3RhdGljIEpTVmFsdWUqIGNhbGxSZWdFeHBPYmplY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewotICAgIHJldHVybiBDYWxsVHlwZU5hdGl2ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVnRXhwT2JqZWN0Kj4oZnVuY3Rpb24pLT5leGVjKGV4ZWMsIGFyZ3MpOwogfQogCi1KU1ZhbHVl
KiBSZWdFeHBPYmplY3Q6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorQ2FsbFR5cGUgUmVnRXhwT2JqZWN0OjpnZXRDYWxsRGF0
YShDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6ZXhlYyhl
eGVjLCBhcmdzKTsKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsUmVnRXhwT2Jq
ZWN0OworICAgIHJldHVybiBDYWxsVHlwZU5hdGl2ZTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFJlZ0V4cENvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtMjQ0LDcgKzI0Myw3IEBAIEpTVmFsdWUqIFJlZ0V4cE9iamVjdDo6Y2FsbEFz
RnVuY3Rpb24oRXgKIGNvbnN0IENsYXNzSW5mbyBSZWdFeHBDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsg
IkZ1bmN0aW9uIiwgJkludGVybmFsRnVuY3Rpb246OmluZm8sIDAsIEV4ZWNTdGF0ZTo6cmVnRXhw
Q29uc3RydWN0b3JUYWJsZSB9OwogCiAvKiBTb3VyY2UgZm9yIFJlZ0V4cE9iamVjdC5sdXQuaAot
QGJlZ2luIHJlZ0V4cENvbnN0cnVjdG9yVGFibGUgMjEKK0BiZWdpbiByZWdFeHBDb25zdHJ1Y3Rv
clRhYmxlCiAgIGlucHV0ICAgICAgICAgICBSZWdFeHBDb25zdHJ1Y3Rvcjo6SW5wdXQgICAgICAg
ICAgTm9uZQogICAkXyAgICAgICAgICAgICAgUmVnRXhwQ29uc3RydWN0b3I6OklucHV0ICAgICAg
ICAgIERvbnRFbnVtCiAgIG11bHRpbGluZSAgICAgICBSZWdFeHBDb25zdHJ1Y3Rvcjo6TXVsdGls
aW5lICAgICAgTm9uZQpAQCAtMzE2LDkgKzMxNSw5IEBAIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6
OnBlcmZvcm1NYXRjaChSZWcKIGNsYXNzIFJlZ0V4cE1hdGNoZXNBcnJheSA6IHB1YmxpYyBKU0Fy
cmF5IHsKIHB1YmxpYzoKICAgICBSZWdFeHBNYXRjaGVzQXJyYXkoRXhlY1N0YXRlKiwgUmVnRXhw
Q29uc3RydWN0b3JQcml2YXRlKik7Ci0KICAgICB2aXJ0dWFsIH5SZWdFeHBNYXRjaGVzQXJyYXko
KTsKIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpIHsgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7
IHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgeyBpZiAobGF6
eUNyZWF0aW9uRGF0YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgcmV0dXJuIEpTQXJyYXk6
OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOyB9CiAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdikgeyBpZiAobGF6eUNyZWF0aW9uRGF0YSgpKSBmaWxsQXJyYXlJbnN0
YW5jZShleGVjKTsgSlNBcnJheTo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdik7IH0KQEAgLTMy
Nyw3ICszMjYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSB7IGlmIChsYXp5Q3JlYXRpb25E
YXRhKCkpIGZpbGxBcnJheUluc3RhbmNlKGV4ZWMpOyByZXR1cm4gSlNBcnJheTo6ZGVsZXRlUHJv
cGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsgfQogICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0
eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycikgeyBpZiAobGF6
eUNyZWF0aW9uRGF0YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgSlNBcnJheTo6Z2V0UHJv
cGVydHlOYW1lcyhleGVjLCBhcnIpOyB9CiAKLXByaXZhdGU6CiAgICAgdm9pZCBmaWxsQXJyYXlJ
bnN0YW5jZShFeGVjU3RhdGUqKTsKIH07CiAKQEAgLTQ3MSwxMyArNDY5LDggQEAgdm9pZCBSZWdF
eHBDb25zdHJ1Y3Rvcjo6cHV0VmFsdWVQcm9wZXJ0eQogICB9CiB9CiAgIAotQ29uc3RydWN0VHlw
ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJikKLXsK
LSAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKLX0KLQogLy8gRUNNQSAxNS4xMC40Ci1K
U09iamVjdCAqUmVnRXhwQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEFyZ0xpc3QgJmFyZ3MpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgIEpTVmFsdWUqIGFyZzAgPSBh
cmdzWzBdOwogICBKU1ZhbHVlKiBhcmcxID0gYXJnc1sxXTsKQEAgLTQ5NywxMCArNDkwLDI3IEBA
IEpTT2JqZWN0ICpSZWdFeHBDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEUKICAgICA6IHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IsIFVTdHJpbmcoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9u
OiAiKS5hcHBlbmQocmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwogfQogCitzdGF0aWMgSlNPYmpl
Y3QqIGNvbnN0cnVjdFdpdGhSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gY29uc3RydWN0UmVnRXhw
KGV4ZWMsIGFyZ3MpOworfQorCitDb25zdHJ1Y3RUeXBlIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3I7
CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRpdmU7Cit9CisKIC8vIEVDTUEgMTUuMTAuMwot
SlNWYWx1ZSAqUmVnRXhwQ29uc3RydWN0b3I6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgSlNPYmplY3QgKiAvKnRoaXNPYmoqLywgY29uc3QgQXJnTGlzdCAmYXJncykKK3N0YXRpYyBK
U1ZhbHVlKiBjYWxsUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICByZXR1cm4gY29uc3RydWN0KGV4
ZWMsIGFyZ3MpOworICAgIHJldHVybiBjb25zdHJ1Y3RSZWdFeHAoZXhlYywgYXJncyk7Cit9CisK
K0NhbGxUeXBlIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERh
dGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbFJlZ0V4cENvbnN0cnVj
dG9yOworICAgIHJldHVybiBDYWxsVHlwZU5hdGl2ZTsKIH0KIAogY29uc3QgVVN0cmluZyYgUmVn
RXhwQ29uc3RydWN0b3I6OmlucHV0KCkgY29uc3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9S
ZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwT2Jq
ZWN0LmgJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgdm9pZCBzZXRSZWdFeHAoUGFzc1JlZlB0cjxSZWdFeHA+IHIpIHsgbV9yZWdFeHAgPSBy
OyB9CiAgICAgICAgIFJlZ0V4cCogcmVnRXhwKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHAuZ2V0
KCk7IH0KIAotICAgICAgICBKU1ZhbHVlKiB0ZXN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpOwotICAgICAgICBKU1ZhbHVlKiBleGVjKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpOwotCi0gICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEm
KTsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICAgICAgSlNWYWx1ZSogdGVzdChFeGVjU3Rh
dGUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgICAgIEpTVmFsdWUqIGV4ZWMoRXhlY1N0YXRlKiwg
Y29uc3QgQXJnTGlzdCYpOwogCiAgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNWYWx1
ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwpAQCAtNjMs
NyArNjAsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgdm9pZCBzZXRMYXN0SW5kZXgoZG91
YmxlIGxhc3RJbmRleCkgeyBtX2xhc3RJbmRleCA9IGxhc3RJbmRleDsgfQogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgYm9vbCBtYXRjaChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsK
KyAgICAgICAgYm9vbCBtYXRjaChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CisKKyAgICAg
ICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogCiAgICAgICAgIFJl
ZlB0cjxSZWdFeHA+IG1fcmVnRXhwOwogICAgICAgICBkb3VibGUgbV9sYXN0SW5kZXg7CkBAIC03
NiwxNyArNzUsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgUmVnRXhwQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBSZWdFeHBQcm90b3R5cGUqKTsKIAot
ICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3RE
YXRhJik7Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBj
b25zdCBBcmdMaXN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKik7CiAg
ICAgICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTVmFs
dWUqKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTVmFsdWUqIGdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKIAotICAgICAgICB2
aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCiAgICAgICAgIHZvaWQg
cGVyZm9ybU1hdGNoKFJlZ0V4cCosIGNvbnN0IFVTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCYgcG9zaXRpb24sIGludCYgbGVuZ3RoLCBpbnQqKiBvdmVjdG9yID0gMCk7CkBAIC05NCw2ICs4
NywxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgY29uc3QgVVN0cmluZyYgaW5wdXQoKSBj
b25zdDsKIAogICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRD
b25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKKyAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShDYWxsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKwogICAgICAgICBKU1ZhbHVlKiBn
ZXRCYWNrcmVmKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKSBjb25zdDsKICAgICAgICAgSlNWYWx1ZSog
Z2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBKU1ZhbHVlKiBnZXRMZWZ0
Q29udGV4dChFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9TaGVs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1NoZWxsLmNwcAkocmV2aXNp
b24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvU2hlbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MiwxNCArNzIsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogc3RhdGljIGJvb2wg
ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShjb25zdCBVU3RyaW5nJiBmaWxlTmFtZSwgVmVj
dG9yPGNoYXI+JiBidWZmZXIpOwogCi1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25QcmludChFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBmdW5j
dGlvbkRlYnVnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9u
TG9hZChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlKiBmdW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvblByaW50KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
KiBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvblZl
cnNpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkxvYWQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWUqIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiAKIHN0cnVjdCBPcHRpb25zIHsK
ICAgICBPcHRpb25zKCkKQEAgLTE3Myw3ICsxNzMsNyBAQCBHbG9iYWxPYmplY3Q6Okdsb2JhbE9i
amVjdChWZWN0b3I8VVN0cmluCiAgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChnbG9iYWxFeGVj
KCkpIFByb3RvdHlwZUZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgZnVuY3Rpb25Qcm90b3R5cGUoKSwg
MSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOwogICAg
IHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZ2xvYmFsRXhlYygpKSBQcm90b3R5cGVGdW5jdGlvbihn
bG9iYWxFeGVjKCksIGZ1bmN0aW9uUHJvdG90eXBlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhl
YygpLCAicmVhZGxpbmUiKSwgZnVuY3Rpb25SZWFkbGluZSkpOwogCi0gICAgSlNPYmplY3QqIGFy
cmF5ID0gYXJyYXlDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZ2xvYmFsRXhlYygpLCBnbG9iYWxF
eGVjKCktPmVtcHR5TGlzdCgpKTsKKyAgICBKU09iamVjdCogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0
eUFycmF5KGdsb2JhbEV4ZWMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVu
dHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFycmF5LT5wdXQoZ2xvYmFsRXhlYygpLCBpLCBqc1N0
cmluZyhnbG9iYWxFeGVjKCksIGFyZ3VtZW50c1tpXSkpOwogICAgIHB1dERpcmVjdChJZGVudGlm
aWVyKGdsb2JhbEV4ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CkBAIC0xODEsNyArMTgxLDcg
QEAgR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVmVjdG9yPFVTdHJpbgogICAgIEludGVycHJl
dGVyOjpzZXRTaG91bGRQcmludEV4Y2VwdGlvbnModHJ1ZSk7CiB9CiAKLUpTVmFsdWUqIGZ1bmN0
aW9uUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlKiBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSAhPSAwKQpAQCAtMTk1LDI3ICsx
OTUsMjcgQEAgSlNWYWx1ZSogZnVuY3Rpb25QcmludChFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogZnVuY3Rp
b25EZWJ1ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGFyZ3NbMF0tPnRv
U3RyaW5nKGV4ZWMpLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNMb2NrIGxvY2s7
CiAgICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0KCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUqIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIC8vIFdlIG5lZWQgdGhpcyBm
dW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBNb3ppbGxhIEpTIHRlc3RzIGJ1dCBm
b3Igbm93CiAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgZG8gYW55IHZlcnNpb24tc3BlY2lmaWMg
aGFuZGxpbmcKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rp
b25SdW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlKiBmdW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAgICBV
U3RyaW5nIGZpbGVOYW1lID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CkBAIC0yMzIsNyArMjMy
LDcgQEAgSlNWYWx1ZSogZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIHJldHVy
biBqc051bWJlcihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc3RvcFdhdGNoLmdldEVsYXBz
ZWRNUygpKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogZnVuY3Rpb25Mb2FkKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBVU3RyaW5nIGZpbGVOYW1lID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgVmVj
dG9yPGNoYXI+IHNjcmlwdDsKQEAgLTI0NSw3ICsyNDUsNyBAQCBKU1ZhbHVlKiBmdW5jdGlvbkxv
YWQoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUqIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZSogZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFZlY3RvcjxjaGFyLCAy
NTY+IGxpbmU7CiAgICAgaW50IGM7CkBAIC0yNTksNyArMjU5LDcgQEAgSlNWYWx1ZSogZnVuY3Rp
b25SZWFkbGluZShFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBsaW5l
LmRhdGEoKSk7CiB9CiAKLUpTVmFsdWUqIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGV4aXQoMCk7CiAjaWYg
IUNPTVBJTEVSKE1TVkMpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAJKHJldmlz
aW9uIDM0NzM2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsOCArMjEsMjQgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgImRhdGVfb2JqZWN0LmgiCi0jaW5jbHVkZSAiZGF0ZV9vYmplY3QubHV0LmgiCisKKyNpbmNs
dWRlICJEYXRlTWF0aC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiZXJyb3Jf
b2JqZWN0LmgiCisjaW5jbHVkZSAib3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPGZsb2F0Lmg+Cisj
aW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8bWF0aC5o
PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0u
aD4KIAogI2lmIEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtNDAsNTkgKzU2
LDcyIEBACiAjaW5jbHVkZSA8c3lzL3RpbWViLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGZsb2F0
Lmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0jaW5jbHVkZSA8
bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi0jaW5jbHVkZSAiZXJyb3Jfb2JqZWN0
LmgiCi0jaW5jbHVkZSAib3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkRhdGVNYXRoLmgiCi0KLSNp
bmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KICNpZiBQTEFURk9STShNQUMpCi0gICAg
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8Q29y
ZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCiBuYW1lc3BhY2UgS0pTIHsKIAotc3RhdGljIGRvdWJsZSBwYXJzZURhdGUoY29uc3Qg
VVN0cmluZyYpOwotc3RhdGljIGRvdWJsZSB0aW1lQ2xpcChkb3VibGUpOworc3RhdGljIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNb250aChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRUaW1lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRGF5
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25k
cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0RGF0
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jU2V0SG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0TW9u
dGgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jU2V0VGltZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0RhdGUoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0hv
dXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ01v
bnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9j
YWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1ZhbHVlT2Yo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogCi1pbmxp
bmUgaW50IGdtdG9mZnNldChjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYgdCkKLXsKLSAgICByZXR1
cm4gdC51dGNPZmZzZXQ7CiB9CiAKKyNpbmNsdWRlICJkYXRlX29iamVjdC5sdXQuaCIKIAotLyoq
Ci0gKiBAaW50ZXJuYWwKLSAqCi0gKiBDbGFzcyB0byBpbXBsZW1lbnQgYWxsIG1ldGhvZHMgdGhh
dCBhcmUgcHJvcGVydGllcyBvZiB0aGUKLSAqIERhdGUgb2JqZWN0Ci0gKi8KLWNsYXNzIERhdGVG
dW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLXB1YmxpYzoKLSAgICBEYXRlRnVu
Y3Rpb24oRXhlY1N0YXRlICosIEZ1bmN0aW9uUHJvdG90eXBlICosIGludCBpLCBpbnQgbGVuLCBj
b25zdCBJZGVudGlmaWVyJiApOwotCi0gICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpOwor
bmFtZXNwYWNlIEtKUyB7CiAKLSAgICBlbnVtIHsgUGFyc2UsIFVUQywgTm93IH07CitzdGF0aWMg
ZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nJik7CitzdGF0aWMgZG91YmxlIHRpbWVDbGlw
KGRvdWJsZSk7CiAKLXByaXZhdGU6Ci0gICAgaW50IGlkOwotfTsKK3N0YXRpYyBpbmxpbmUgaW50
IGdtdG9mZnNldChjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYgdCkKK3sKKyAgICByZXR1cm4gdC51
dGNPZmZzZXQ7Cit9CiAKIHN0cnVjdCBEYXRlSW5zdGFuY2U6OkNhY2hlIHsKICAgICBkb3VibGUg
bV9ncmVnb3JpYW5EYXRlVGltZUNhY2hlZEZvck1TOwpAQCAtMTE2LDcgKzE0NSw3IEBAIHN0YXRp
YyBDRkRhdGVGb3JtYXR0ZXJTdHlsZSBzdHlsZUZyb21BcmcKICAgICByZXR1cm4gZGVmYXVsdFN0
eWxlOwogfQogCi1zdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSAqZXhl
YywgZG91YmxlIHRpbWUsIGJvb2wgaW5jbHVkZURhdGUsIGJvb2wgaW5jbHVkZVRpbWUsIGNvbnN0
IEFyZ0xpc3QgJmFyZ3MpCitzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0
ZSAqZXhlYywgZG91YmxlIHRpbWUsIGJvb2wgaW5jbHVkZURhdGUsIGJvb2wgaW5jbHVkZVRpbWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ0ZEYXRlRm9ybWF0dGVyU3R5bGUgZGF0ZVN0
eWxlID0gKGluY2x1ZGVEYXRlID8ga0NGRGF0ZUZvcm1hdHRlckxvbmdTdHlsZSA6IGtDRkRhdGVG
b3JtYXR0ZXJOb1N0eWxlKTsKICAgICBDRkRhdGVGb3JtYXR0ZXJTdHlsZSB0aW1lU3R5bGUgPSAo
aW5jbHVkZVRpbWUgPyBrQ0ZEYXRlRm9ybWF0dGVyTG9uZ1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRl
ck5vU3R5bGUpOwpAQCAtMzAxLDcgKzMzMCw3IEBAIHN0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVz
VXNpbmdUaW1lQXJncygKIC8vIG1zIChyZXByZXNlbnRpbmcgbWlsbGlzZWNvbmRzKSBhbmQgdCAo
cmVwcmVzZW50aW5nIHRoZSByZXN0IG9mIHRoZSBkYXRlIHN0cnVjdHVyZSkgYXBwcm9wcmlhdGVs
eS4KIC8vCiAvLyBGb3JtYXQgb2YgbWVtYmVyIGZ1bmN0aW9uOiBmKFt5ZWFycyxdIFttb250aHMs
XSBbZGF5c10pCi1zdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBBcmdMaXN0ICZhcmdzLCBpbnQgbWF4QXJncywgZG91YmxlICptcywg
R3JlZ29yaWFuRGF0ZVRpbWUgKnQpCitzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nRGF0
ZUFyZ3MoRXhlY1N0YXRlICpleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgbWF4QXJncywg
ZG91YmxlICptcywgR3JlZ29yaWFuRGF0ZVRpbWUgKnQpCiB7CiAgICAgaW50IGlkeCA9IDA7CiAg
ICAgYm9vbCBvayA9IHRydWU7CkBAIC0zNjgsNyArMzk3LDcgQEAgdm9pZCBEYXRlSW5zdGFuY2U6
Om1zVG9HcmVnb3JpYW5EYXRlVGltZQogCiBib29sIERhdGVJbnN0YW5jZTo6Z2V0VGltZShHcmVn
b3JpYW5EYXRlVGltZSAmdCwgaW50ICZvZmZzZXQpIGNvbnN0CiB7Ci0gICAgZG91YmxlIG1pbGxp
ID0gaW50ZXJuYWxWYWx1ZSgpLT5nZXROdW1iZXIoKTsKKyAgICBkb3VibGUgbWlsbGkgPSBpbnRl
cm5hbE51bWJlcigpOwogICAgIGlmIChpc25hbihtaWxsaSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKQEAgLTM3OSw3ICs0MDgsNyBAQCBib29sIERhdGVJbnN0YW5jZTo6Z2V0VGltZShH
cmVnb3JpYW5EYXRlCiAKIGJvb2wgRGF0ZUluc3RhbmNlOjpnZXRVVENUaW1lKEdyZWdvcmlhbkRh
dGVUaW1lICZ0KSBjb25zdAogewotICAgIGRvdWJsZSBtaWxsaSA9IGludGVybmFsVmFsdWUoKS0+
Z2V0TnVtYmVyKCk7CisgICAgZG91YmxlIG1pbGxpID0gaW50ZXJuYWxOdW1iZXIoKTsKICAgICBp
ZiAoaXNuYW4obWlsbGkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0zODksNyAr
NDE4LDcgQEAgYm9vbCBEYXRlSW5zdGFuY2U6OmdldFVUQ1RpbWUoR3JlZ29yaWFuRAogCiBib29s
IERhdGVJbnN0YW5jZTo6Z2V0VGltZShkb3VibGUgJm1pbGxpLCBpbnQgJm9mZnNldCkgY29uc3QK
IHsKLSAgICBtaWxsaSA9IGludGVybmFsVmFsdWUoKS0+Z2V0TnVtYmVyKCk7CisgICAgbWlsbGkg
PSBpbnRlcm5hbE51bWJlcigpOwogICAgIGlmIChpc25hbihtaWxsaSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKQEAgLTQwMSw3ICs0MzAsNyBAQCBib29sIERhdGVJbnN0YW5jZTo6Z2V0
VGltZShkb3VibGUgJm1pbGxpCiAKIGJvb2wgRGF0ZUluc3RhbmNlOjpnZXRVVENUaW1lKGRvdWJs
ZSAmbWlsbGkpIGNvbnN0CiB7Ci0gICAgbWlsbGkgPSBpbnRlcm5hbFZhbHVlKCktPmdldE51bWJl
cigpOworICAgIG1pbGxpID0gaW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC00MTksOCArNDQ4LDggQEAgc3RhdGlj
IGlubGluZSBib29sIGlzVGltZV90U2lnbmVkKCkKIGNvbnN0IENsYXNzSW5mbyBEYXRlUHJvdG90
eXBlOjppbmZvID0geyJEYXRlIiwgJkRhdGVJbnN0YW5jZTo6aW5mbywgMCwgRXhlY1N0YXRlOjpk
YXRlVGFibGV9OwogCiAvKiBTb3VyY2UgZm9yIGRhdGVfb2JqZWN0Lmx1dC5oCi0gICBGSVhNRUwg
V2UgY291bGQgdXNlIHRlbXBsYXRlcyB0byBzaW1wbGlmeSB0aGUgVVRDIHZhcmlhbnRzLgotQGJl
Z2luIGRhdGVUYWJsZSA2MQorICAgRklYTUU6IFdlIGNvdWxkIHVzZSB0ZW1wbGF0ZXMgdG8gc2lt
cGxpZnkgdGhlIFVUQyB2YXJpYW50cy4KK0BiZWdpbiBkYXRlVGFibGUKICAgdG9TdHJpbmcgICAg
ICAgICAgICAgIGRhdGVQcm90b0Z1bmNUb1N0cmluZyAgICAgICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAwCiAgIHRvVVRDU3RyaW5nICAgICAgICAgICBkYXRlUHJvdG9GdW5jVG9V
VENTdHJpbmcgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAogICB0b0RhdGVT
dHJpbmcgICAgICAgICAgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uICAgICAgIDAKQEAgLTQ4NSwyMyArNTE0LDIyIEBAIGJvb2wgRGF0ZVByb3Rv
dHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEUKIAogLy8gVE9ETzogTWFrZVRpbWUgKDE1LjkuMTEu
MSkgZXRjLiA/CiAKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlUGFyc2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGRhdGVOb3co
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWUqIGRhdGVVVEMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYpOworCiBEYXRlQ29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jUHJvdG8sIERhdGVQcm90b3R5cGUqIGRhdGVQ
cm90bykKICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGZ1bmNQcm90bywgSWRlbnRpZmllcihleGVjLCBk
YXRlUHJvdG8tPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQogewogICBwdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZGF0ZVByb3RvLCBEb250RW51bXxEb250RGVsZXRl
fFJlYWRPbmx5KTsKLSAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBEYXRlRnVuY3Rpb24o
ZXhlYywgZnVuY1Byb3RvLCBEYXRlRnVuY3Rpb246OlBhcnNlLCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucGFyc2UpLCBEb250RW51bSk7Ci0gIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykg
RGF0ZUZ1bmN0aW9uKGV4ZWMsIGZ1bmNQcm90bywgRGF0ZUZ1bmN0aW9uOjpVVEMsIDcsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5VVEMpLCBEb250RW51bSk7Ci0gIHB1dERpcmVjdEZ1bmN0aW9uKG5l
dyAoZXhlYykgRGF0ZUZ1bmN0aW9uKGV4ZWMsIGZ1bmNQcm90bywgRGF0ZUZ1bmN0aW9uOjpOb3cs
IDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ub3cpLCBEb250RW51bSk7Ci0gIHB1dERpcmVjdChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCA3LCBSZWFkT25seXxEb250RGVsZXRl
fERvbnRFbnVtKTsKLX0KLQotQ29uc3RydWN0VHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENvbnN0
cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpCi17Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRp
dmU7CisgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgZnVuY1Byb3RvLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucGFyc2UsIGRhdGVQYXJzZSks
IERvbnRFbnVtKTsKKyAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBmdW5jUHJvdG8sIDcsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5VVEMsIGRhdGVV
VEMpLCBEb250RW51bSk7CisgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAoZXhlYykgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgZnVuY1Byb3RvLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubm93LCBk
YXRlTm93KSwgRG9udEVudW0pOworICBwdXREaXJlY3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCwgNywgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogfQogCiAv
LyBFQ01BIDE1LjkuMwotSlNPYmplY3QgKkRhdGVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgQXJnTGlzdCAmYXJncykKK3N0YXRpYyBKU09iamVjdCogY29uc3Ry
dWN0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKIApAQCAtNTExLDcgKzUzOSw3IEBAIEpT
T2JqZWN0ICpEYXRlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGUKICAgICB2YWx1ZSA9IGdldEN1
cnJlbnRVVENUaW1lKCk7CiAgIH0gZWxzZSBpZiAobnVtQXJncyA9PSAxKSB7CiAgICAgaWYgKGFy
Z3NbMF0tPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQotICAgICAgdmFsdWUgPSBzdGF0
aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihhcmdzWzBdKS0+aW50ZXJuYWxWYWx1ZSgpLT50b051bWJl
cihleGVjKTsKKyAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4oYXJnc1sw
XSktPmludGVybmFsTnVtYmVyKCk7CiAgICAgZWxzZSB7CiAgICAgICBKU1ZhbHVlKiBwcmltaXRp
dmUgPSBhcmdzWzBdLT50b1ByaW1pdGl2ZShleGVjKTsKICAgICAgIGlmIChwcmltaXRpdmUtPmlz
U3RyaW5nKCkpCkBAIC01NDgsOCArNTc2LDE0IEBAIEpTT2JqZWN0ICpEYXRlQ29uc3RydWN0b3I6
OmNvbnN0cnVjdChFeGUKICAgcmV0dXJuIHJldDsKIH0KIAorQ29uc3RydWN0VHlwZSBEYXRlQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
K3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdERhdGU7Cisg
ICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRpdmU7Cit9CisKIC8vIEVDTUEgMTUuOS4yCi1KU1Zh
bHVlKiBEYXRlQ29uc3RydWN0b3I6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QgKiAvKnRoaXNPYmoqLywgY29uc3QgQXJnTGlzdCAmLyphcmdzKi8pCitzdGF0aWMgSlNW
YWx1ZSogY2FsbERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICB0aW1lX3QgbG9jYWxUaW1lID0gdGltZSgwKTsKICAgICB0bSBs
b2NhbFRNOwpAQCAtNTU4LDMxICs1OTIsMzMgQEAgSlNWYWx1ZSogRGF0ZUNvbnN0cnVjdG9yOjpj
YWxsQXNGdW5jdGlvbgogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBmb3JtYXREYXRlKHRzKSAr
ICIgIiArIGZvcm1hdFRpbWUodHMsIGZhbHNlKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBEYXRlRnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1EYXRlRnVuY3Rpb246OkRhdGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJv
dG90eXBlKiBmdW5jUHJvdG8sIGludCBpLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
KQotICAgIDogSW50ZXJuYWxGdW5jdGlvbihmdW5jUHJvdG8sIG5hbWUpLCBpZChpKQorQ2FsbFR5
cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0g
ICAgcHV0RGlyZWN0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGxlbiwgRG9u
dERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9u
ID0gY2FsbERhdGU7CisgICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOwogfQogCi0vLyBFQ01BIDE1
LjkuNC4yIC0gMwotSlNWYWx1ZSAqRGF0ZUZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVl
KiBkYXRlUGFyc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewotICBpZiAoaWQgPT0gUGFyc2UpCiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHBhcnNlRGF0ZShhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwotICBlbHNlIGlmIChp
ZCA9PSBOb3cpCit9CisKK3N0YXRpYyBKU1ZhbHVlKiBkYXRlTm93KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCit7CiAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIGdldEN1cnJlbnRVVENUaW1lKCkpOwotICBlbHNlIHsgLy8gVVRDCit9CisKK3N0
YXRpYyBKU1ZhbHVlKiBkYXRlVVRDKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKICAgICBpbnQgbiA9IGFyZ3Muc2l6ZSgpOwogICAg
IGlmIChpc25hbihhcmdzWzBdLT50b051bWJlcihleGVjKSkKLSAgICAgICAgfHwgaXNuYW4oYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYykpCi0gICAgICAgIHx8IChuID49IDMgJiYgaXNuYW4oYXJnc1sy
XS0+dG9OdW1iZXIoZXhlYykpKQotICAgICAgICB8fCAobiA+PSA0ICYmIGlzbmFuKGFyZ3NbM10t
PnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAgICAgfHwgKG4gPj0gNSAmJiBpc25hbihhcmdzWzRdLT50
b051bWJlcihleGVjKSkpCi0gICAgICAgIHx8IChuID49IDYgJiYgaXNuYW4oYXJnc1s1XS0+dG9O
dW1iZXIoZXhlYykpKQotICAgICAgICB8fCAobiA+PSA3ICYmIGlzbmFuKGFyZ3NbNl0tPnRvTnVt
YmVyKGV4ZWMpKSkpIHsKLSAgICAgIHJldHVybiBqc05hTihleGVjKTsKKyAgICAgICAgICAgIHx8
IGlzbmFuKGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKQorICAgICAgICAgICAgfHwgKG4gPj0gMyAm
JiBpc25hbihhcmdzWzJdLT50b051bWJlcihleGVjKSkpCisgICAgICAgICAgICB8fCAobiA+PSA0
ICYmIGlzbmFuKGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpKSkKKyAgICAgICAgICAgIHx8IChuID49
IDUgJiYgaXNuYW4oYXJnc1s0XS0+dG9OdW1iZXIoZXhlYykpKQorICAgICAgICAgICAgfHwgKG4g
Pj0gNiAmJiBpc25hbihhcmdzWzVdLT50b051bWJlcihleGVjKSkpCisgICAgICAgICAgICB8fCAo
biA+PSA3ICYmIGlzbmFuKGFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpKSkpIHsKKyAgICAgICAgcmV0
dXJuIGpzTmFOKGV4ZWMpOwogICAgIH0KIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CkBAIC01
OTUsNyArNjMxLDYgQEAgSlNWYWx1ZSAqRGF0ZUZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeAog
ICAgIHQuc2Vjb25kID0gYXJnc1s1XS0+dG9JbnQzMihleGVjKTsKICAgICBkb3VibGUgbXMgPSAo
biA+PSA3KSA/IGFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpIDogMDsKICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCB0cnVlKSk7Ci0gIH0KIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk3OCwxNiArMTAxMywxNSBAQCBkb3VibGUgdGlt
ZUNsaXAoZG91YmxlIHQpCiAKIC8vIEZ1bmN0aW9ucwogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
VG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0
aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1
ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBjb25zdCBib29sIHV0YyA9IGZhbHNlOwogCi0g
ICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+
KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUo
KTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFu
Y2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsg
CisgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAg
aWYgKGlzbmFuKG1pbGxpKSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJJbnZhbGlk
IERhdGUiKTsKIApAQCAtOTk2LDE2ICsxMDMwLDE1IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNU
b1N0cmluZyhFeGVjU3RhdGUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZSh0
KSArICIgIiArIGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKLSAg
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQorICAgIGlmICgh
dGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIGNvbnN0IGJvb2wgdXRjID0gdHJ1
ZTsKIAotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5z
dGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5h
bFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAgRGF0
ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNW
YWx1ZSk7IAorICAgIGRvdWJsZSBtaWxsaSA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigp
OwogICAgIGlmIChpc25hbihtaWxsaSkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAi
SW52YWxpZCBEYXRlIik7CiAKQEAgLTEwMTQsMTYgKzEwNDcsMTUgQEAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBmb3Jt
YXREYXRlVVRDVmFyaWFudCh0KSArICIgIiArIGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9EYXRl
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRhdGVJbnN0YW5j
ZTo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAg
Y29uc3QgYm9vbCB1dGMgPSBmYWxzZTsKIAotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmog
PSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1ZSogdiA9
IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0gdi0+dG9O
dW1iZXIoZXhlYyk7CisgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0
PERhdGVJbnN0YW5jZSo+KHRoaXNWYWx1ZSk7IAorICAgIGRvdWJsZSBtaWxsaSA9IHRoaXNEYXRl
T2JqLT5pbnRlcm5hbE51bWJlcigpOwogICAgIGlmIChpc25hbihtaWxsaSkpCiAgICAgICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIik7CiAKQEAgLTEwMzIsMTYgKzEwNjQs
MTUgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjUwogICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBmb3JtYXREYXRlKHQpKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3Rv
RnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7
Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBp
ZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBjb25zdCBib29sIHV0YyA9
IGZhbHNlOwogCi0gICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERh
dGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmlu
dGVybmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAg
ICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4o
dGhpc1ZhbHVlKTsgCisgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVt
YmVyKCk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsICJJbnZhbGlkIERhdGUiKTsKIApAQCAtMTA1MCwxNCArMTA4MSwxMyBAQCBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5nKEV4ZWNTCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAg
ICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBEYXRlSW5zdGFuY2Uq
IHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7IAotICAg
IEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBt
aWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOworICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmog
PSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzVmFsdWUpOyAKKyAgICBkb3VibGUgbWls
bGkgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkp
KQogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwogCkBAIC0x
MDc1LDE0ICsxMTA1LDEzIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhF
eGUKICNlbmRpZgogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBp
ZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBEYXRlSW5zdGFuY2UqIHRo
aXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7IAotICAgIEpT
VmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxs
aSA9IHYtPnRvTnVtYmVyKGV4ZWMpOworICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBz
dGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzVmFsdWUpOyAKKyAgICBkb3VibGUgbWlsbGkg
PSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQog
ICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwogCkBAIC0xMTAw
LDE0ICsxMTI5LDEzIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcK
ICNlbmRpZgogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0g
ICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBpZiAo
IXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBEYXRlSW5zdGFuY2UqIHRoaXNE
YXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7IAotICAgIEpTVmFs
dWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9
IHYtPnRvTnVtYmVyKGV4ZWMpOworICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0
aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzVmFsdWUpOyAKKyAgICBkb3VibGUgbWlsbGkgPSB0
aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQogICAg
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwogCkBAIC0xMTI1LDQ0
ICsxMTUzLDQxIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcKICNl
bmRpZgogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGRhdGVQcm90b0Z1
bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRhdGVJbnN0
YW5jZTo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6
OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0g
ICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+
KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUo
KTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFu
Y2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsg
CisgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAg
aWYgKGlzbmFuKG1pbGxpKSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCiAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIG1pbGxpKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dl
dFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5p
c09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKIAotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0
aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1ZSogdiA9IHRoaXNE
YXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIo
ZXhlYyk7CisgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJ
bnN0YW5jZSo+KHRoaXNWYWx1ZSk7IAorICAgIGRvdWJsZSBtaWxsaSA9IHRoaXNEYXRlT2JqLT5p
bnRlcm5hbE51bWJlcigpOwogICAgIGlmIChpc25hbihtaWxsaSkpCiAgICAgICAgIHJldHVybiBq
c05hTihleGVjKTsKIAogICAgIHJldHVybiBqc051bWJlcihleGVjLCBtaWxsaSk7CiB9CiAKLUpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRGdWxs
WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6
OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZv
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIGNv
bnN0IGJvb2wgdXRjID0gZmFsc2U7CiAKLSAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0g
c3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7IAotICAgIEpTVmFsdWUqIHYgPSB0
aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVt
YmVyKGV4ZWMpOworICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxE
YXRlSW5zdGFuY2UqPih0aGlzVmFsdWUpOyAKKyAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9i
ai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQogICAgICAgICByZXR1
cm4ganNOYU4oZXhlYyk7CiAKQEAgLTExNzEsMTYgKzExOTYsMTUgQEAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNTdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCAxOTAw
ICsgdC55ZWFyKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09i
ai0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUtPmlz
T2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogCiAgICAgY29uc3QgYm9vbCB1dGMgPSB0cnVlOwogCi0gICAgRGF0
ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNP
YmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAg
ICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFuY2UqIHRo
aXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsgCisgICAg
ZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKGlz
bmFuKG1pbGxpKSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCkBAIC0xMTg5LDE2ICsx
MjEzLDE1IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGUKICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgMTkwMCArIHQueWVhcik7CiB9CiAKLUpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
IHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQorICAg
IGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIGNvbnN0IGJvb2wgdXRj
ID0gdHJ1ZTsKIAotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxE
YXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5p
bnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7Cisg
ICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+
KHRoaXNWYWx1ZSk7IAorICAgIGRvdWJsZSBtaWxsaSA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51
bWJlcigpOwogICAgIGlmIChpc25hbihtaWxsaSkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCAiSW52YWxpZCBEYXRlIik7CiAKQEAgLTEyMDcsMTYgKzEyMzAsMTUgQEAgSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNTdAogICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBmb3JtYXREYXRlVVRDVmFyaWFudCh0KSArICIgIiArIGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9
CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRN
b250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6
OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZv
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIGNv
bnN0IGJvb2wgdXRjID0gZmFsc2U7CiAKLSAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0g
c3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7IAotICAgIEpTVmFsdWUqIHYgPSB0
aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVt
YmVyKGV4ZWMpOworICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxE
YXRlSW5zdGFuY2UqPih0aGlzVmFsdWUpOyAKKyAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9i
ai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQogICAgICAgICByZXR1
cm4ganNOYU4oZXhlYyk7CiAKQEAgLTEyMjUsMTYgKzEyNDcsMTUgQEAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1v
bnRoKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JkRhdGVJbnN0YW5jZTo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRl
SW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwogCiAgICAgY29uc3QgYm9vbCB1dGMgPSB0cnVlOwogCi0gICAgRGF0ZUluc3RhbmNlKiB0
aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKLSAgICBK
U1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWls
bGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0g
c3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsgCisgICAgZG91YmxlIG1pbGxp
ID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkK
ICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCkBAIC0xMjQzLDE2ICsxMjY0LDE1IEBAIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3QKICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgdC5tb250aCk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3Qo
JkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAKICAgICBjb25zdCBib29sIHV0YyA9IGZhbHNlOwogCi0gICAgRGF0ZUluc3Rh
bmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAK
LSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAgICBkb3Vi
bGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRl
T2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsgCisgICAgZG91Ymxl
IG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKGlzbmFuKG1p
bGxpKSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCkBAIC0xMjYxLDE2ICsxMjgxLDE1
IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgdC5tb250aERheSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRVVENEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBpZiAoIXRoaXNW
YWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBjb25zdCBib29sIHV0YyA9IHRydWU7CiAK
LSAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNl
Kj4odGhpc09iaik7IAotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1
ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOworICAgIERhdGVJbnN0
YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzVmFsdWUp
OyAKKyAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAg
ICBpZiAoaXNuYW4obWlsbGkpKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiAKQEAgLTEy
NzksMTYgKzEyOTgsMTUgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0
YQogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1vbnRoRGF5KTsKIH0KIAotSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY0dldERheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7Ci0g
ICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBpZiAo
IXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBjb25zdCBib29sIHV0YyA9IGZh
bHNlOwogCi0gICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJ
bnN0YW5jZSo+KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVy
bmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBE
YXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhp
c1ZhbHVlKTsgCisgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVy
KCk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwog
CkBAIC0xMjk3LDE2ICsxMzE1LDE1IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhl
Y1N0YXRlKiAKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC53ZWVrRGF5KTsKIH0KIAotSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENEYXko
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZv
KSkKKyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBjb25zdCBi
b29sIHV0YyA9IHRydWU7CiAKLSAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGlj
X2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7IAotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0
ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4
ZWMpOworICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5z
dGFuY2UqPih0aGlzVmFsdWUpOyAKKyAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50
ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQogICAgICAgICByZXR1cm4ganNO
YU4oZXhlYyk7CiAKQEAgLTEzMTUsMTYgKzEzMzIsMTUgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y0dldFVUQ0RheShFeGVjU3RhdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0LndlZWtEYXkp
OwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3Rh
bmNlOjppbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6
aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAg
ICBjb25zdCBib29sIHV0YyA9IGZhbHNlOwogCi0gICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9i
aiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2
ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50
b051bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nh
c3Q8RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsgCisgICAgZG91YmxlIG1pbGxpID0gdGhpc0Rh
dGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKICAgICAgICAg
cmV0dXJuIGpzTmFOKGV4ZWMpOwogCkBAIC0xMzMzLDE2ICsxMzQ5LDE1IEBAIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
dC5ob3VyKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZE
YXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwogCiAgICAgY29uc3QgYm9vbCB1dGMgPSB0cnVlOwogCi0gICAgRGF0ZUluc3RhbmNl
KiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKLSAg
ICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAgICBkb3VibGUg
bWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2Jq
ID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsgCisgICAgZG91YmxlIG1p
bGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKGlzbmFuKG1pbGxp
KSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCkBAIC0xMzUxLDE2ICsxMzY2LDE1IEBA
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3QKICAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgdC5ob3VyKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbnV0
ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5p
c09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKIAogICAgIGNvbnN0IGJvb2wgdXRjID0gZmFsc2U7CiAKLSAgICBE
YXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhp
c09iaik7IAotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwot
ICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOworICAgIERhdGVJbnN0YW5jZSog
dGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzVmFsdWUpOyAKKyAg
ICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAo
aXNuYW4obWlsbGkpKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiAKQEAgLTEzNjksMTYg
KzEzODMsMTUgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YQogICAg
IHJldHVybiBqc051bWJlcihleGVjLCB0Lm1pbnV0ZSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAg
ICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBjb25zdCBib29sIHV0
YyA9IHRydWU7CiAKLSAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8
RGF0ZUluc3RhbmNlKj4odGhpc09iaik7IAotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+
aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwor
ICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2Uq
Pih0aGlzVmFsdWUpOyAKKyAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxO
dW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQogICAgICAgICByZXR1cm4ganNOYU4oZXhl
Yyk7CiAKQEAgLTEzODcsMTYgKzE0MDAsMTUgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVU
Q01pbnV0ZXMoRXhlYwogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1pbnV0ZSk7CiB9CiAK
LUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFNl
Y29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNl
OjppbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBj
b25zdCBib29sIHV0YyA9IGZhbHNlOwogCi0gICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9
IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0g
dGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051
bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8
RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsgCisgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVP
YmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKICAgICAgICAgcmV0
dXJuIGpzTmFOKGV4ZWMpOwogCkBAIC0xNDA1LDE2ICsxNDE3LDE1IEBAIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGEKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5z
ZWNvbmQpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGRh
dGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09iai0+aW5o
ZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCiAgICAgY29uc3QgYm9vbCB1dGMgPSB0cnVlOwogCi0gICAgRGF0ZUluc3Rh
bmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAK
LSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAgICBkb3Vi
bGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRl
T2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc1ZhbHVlKTsgCisgICAgZG91Ymxl
IG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKGlzbmFuKG1p
bGxpKSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCkBAIC0xNDIzLDE0ICsxNDM0LDEz
IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWMKICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgdC5zZWNvbmQpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0
TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFy
Z0xpc3QmKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsK
LSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQorICAgIGlm
ICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIERhdGVJbnN0YW5jZSogdGhp
c0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNW
YWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxp
ID0gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0
YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNWYWx1ZSk7IAorICAgIGRvdWJsZSBtaWxsaSA9
IHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpOwogICAgIGlmIChpc25hbihtaWxsaSkpCiAg
ICAgICAgIHJldHVybiBqc05hTihleGVjKTsKIApAQCAtMTQzOSwxNCArMTQ0OSwxMyBAQCBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIG1zKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25k
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBpZiAoIXRoaXNW
YWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2Jq
ID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7IAotICAgIEpTVmFsdWUqIHYg
PSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRv
TnVtYmVyKGV4ZWMpOworICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2Fz
dDxEYXRlSW5zdGFuY2UqPih0aGlzVmFsdWUpOyAKKyAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0
ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNuYW4obWlsbGkpKQogICAgICAgICBy
ZXR1cm4ganNOYU4oZXhlYyk7CiAKQEAgLTE0NTUsMTYgKzE0NjQsMTUgQEAgSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBt
cyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIGRh
dGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICBpZiAoIXRoaXNPYmot
PmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09i
amVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIAogICAgIGNvbnN0IGJvb2wgdXRjID0gZmFsc2U7CiAKLSAgICBEYXRl
SW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09i
aik7IAotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAg
IGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOworICAgIERhdGVJbnN0YW5jZSogdGhp
c0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzVmFsdWUpOyAKKyAgICBk
b3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBpZiAoaXNu
YW4obWlsbGkpKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiAKQEAgLTE0NzMsMTIgKzE0
ODEsMTIgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KAogICAgIHJl
dHVybiBqc051bWJlcihleGVjLCAtZ210b2Zmc2V0KHQpIC8gbWludXRlc1BlckhvdXIpOwogfQog
Ci1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1Nl
dFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5z
dGFuY2U6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNl
OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAot
ICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2Uq
Pih0aGlzT2JqKTsgCisgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0
PERhdGVJbnN0YW5jZSo+KHRoaXNWYWx1ZSk7IAogCiAgICAgZG91YmxlIG1pbGxpID0gdGltZUNs
aXAoYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIG1pbGxpKTsKQEAgLTE0ODYsMTQgKzE0OTQsMTMgQEAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgbnVtQXJnc1RvVXNlLCBib29s
IGlucHV0SXNVVEMpCitzdGF0aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGlu
dCBudW1BcmdzVG9Vc2UsIGJvb2wgaW5wdXRJc1VUQykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVj
dCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKIAotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2Fz
dDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmot
PmludGVybmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsK
KyAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNl
Kj4odGhpc1ZhbHVlKTsKKyAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxO
dW1iZXIoKTsKICAgICAKICAgICBpZiAoYXJncy5pc0VtcHR5KCkgfHwgaXNuYW4obWlsbGkpKSB7
CiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwpAQCAtMTUxOCwyMCArMTUy
NSwxOSBAQCBzdGF0aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdz
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IGludCBudW1BcmdzVG9Vc2UsIGJvb2wgaW5wdXRJc1VUQykKK3N0YXRpYyBKU1ZhbHVlKiBzZXRO
ZXdWYWx1ZUZyb21EYXRlQXJncyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQog
ewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCisgICAg
aWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgRGF0ZUluc3RhbmNlKiB0
aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOworICAgIERh
dGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlz
VmFsdWUpOwogICAgIGlmIChhcmdzLmlzRW1wdHkoKSkgewogICAgICAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUo
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9ICAgICAgCiAgICAgCi0gICAg
SlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1p
bGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmot
PmludGVybmFsTnVtYmVyKCk7CiAgICAgZG91YmxlIG1zID0gMDsKIAogICAgIEdyZWdvcmlhbkRh
dGVUaW1lIHQ7CkBAIC0xNTU2LDEwNiArMTU2MiwxMDUgQEAgc3RhdGljIEpTVmFsdWUqIHNldE5l
d1ZhbHVlRnJvbURhdGVBcmdzKAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNaWxs
aVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxz
ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc09iaiwgYXJn
cywgMSwgaW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4
ZWMsIHRoaXNWYWx1ZSwgYXJncywgMSwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENN
aWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0
cnVlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzT2JqLCBh
cmdzLCAxLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3Mo
ZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1NldFNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0
dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNPYmosIGFyZ3MsIDIsIGlucHV0
SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFs
dWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0
VVRDU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwotICAgIHJldHVybiBzZXRO
ZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzT2JqLCBhcmdzLCAyLCBpbnB1dElzVVRDKTsK
KyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdz
LCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29u
c3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRp
bWVBcmdzKGV4ZWMsIHRoaXNPYmosIGFyZ3MsIDMsIGlucHV0SXNVVEMpOworICAgIHJldHVybiBz
ZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMsIGlucHV0SXNV
VEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY1NldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29s
IGlucHV0SXNVVEMgPSB0cnVlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhl
eGVjLCB0aGlzT2JqLCBhcmdzLCAzLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFs
dWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAzLCBpbnB1dElzVVRDKTsKIH0K
IAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
U2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxz
ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc09iaiwgYXJn
cywgNCwgaW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4
ZWMsIHRoaXNWYWx1ZSwgYXJncywgNCwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNTZXRVVENIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKLSAgICByZXR1
cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc09iaiwgYXJncywgNCwgaW5wdXRJ
c1VUQyk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1
ZSwgYXJncywgNCwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRE
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNv
bnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21E
YXRlQXJncyhleGVjLCB0aGlzT2JqLCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4g
c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1dElz
VVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0RhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGRh
dGVQcm90b0Z1bmNTZXRVVENEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1
dElzVVRDID0gdHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywg
dGhpc09iaiwgYXJncywgMSwgaW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJv
bURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMSwgaW5wdXRJc1VUQyk7CiB9CiAKLUpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldE1v
bnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0g
ICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNPYmosIGFyZ3MsIDIs
IGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0
aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jU2V0VVRDTW9udGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7Ci0gICAgcmV0dXJuIHNl
dE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNPYmosIGFyZ3MsIDIsIGlucHV0SXNVVEMp
OworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFy
Z3MsIDIsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0RnVsbFll
YXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZy
b21EYXRlQXJncyhleGVjLCB0aGlzT2JqLCBhcmdzLCAzLCBpbnB1dElzVVRDKTsKKyAgICByZXR1
cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAzLCBpbnB1
dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25z
dCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRl
QXJncyhleGVjLCB0aGlzT2JqLCBhcmdzLCAzLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0
TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAzLCBpbnB1dElzVVRD
KTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGRhdGVQcm90
b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
RGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAKICAgICBjb25zdCBib29sIHV0YyA9IGZhbHNlOwogCi0gICAgRGF0ZUluc3RhbmNlKiB0
aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAgICAgCisg
ICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+
KHRoaXNWYWx1ZSk7ICAgICAKICAgICBpZiAoYXJncy5pc0VtcHR5KCkpIHsgCiAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50
ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
LSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAgICBkb3Vi
bGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0
ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBkb3VibGUgbXMgPSAwOwogCiAgICAgR3JlZ29y
aWFuRGF0ZVRpbWUgdDsKQEAgLTE2ODMsMTYgKzE2ODgsMTUgQEAgSlNWYWx1ZSogZGF0ZVByb3Rv
RnVuY1NldFllYXIoRXhlY1N0YXRlKgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7
Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKKyAgICBp
ZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBjb25zdCBib29sIHV0YyA9
IGZhbHNlOwogCi0gICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERh
dGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmlu
dGVybmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKKyAg
ICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4o
dGhpc1ZhbHVlKTsgCisgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVt
YmVyKCk7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMp
OwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAkocmV2aXNpb24gMzQ3MzYpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjAg
KzMzLDI1IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgY2xhc3MgRGF0ZUluc3RhbmNlIDogcHVi
bGljIEpTV3JhcHBlck9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBEYXRlSW5zdGFuY2Uo
SlNPYmplY3QgKnByb3RvKTsKKyAgICAgICAgRGF0ZUluc3RhbmNlKEpTT2JqZWN0KiBwcm90b3R5
cGUpOwogICAgICAgICB2aXJ0dWFsIH5EYXRlSW5zdGFuY2UoKTsKLSAgICAgICAgCisKKyAgICAg
ICAgZG91YmxlIGludGVybmFsTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxWYWx1ZSgp
LT51bmNoZWNrZWRHZXROdW1iZXIoKTsgfQorCiAgICAgICAgIGJvb2wgZ2V0VGltZShHcmVnb3Jp
YW5EYXRlVGltZSYsIGludCYgb2Zmc2V0KSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRVVENUaW1l
KEdyZWdvcmlhbkRhdGVUaW1lJikgY29uc3Q7Ci0gICAgICAgIGJvb2wgZ2V0VGltZShkb3VibGUm
IG1pbGxpLCBpbnQmIG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgZ2V0VVRDVGltZShkb3Vi
bGUmIG1pbGxpKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXRUaW1lKGRvdWJsZSYgbWlsbGlzZWNv
bmRzLCBpbnQmIG9mZnNldCkgY29uc3Q7CisgICAgICAgIGJvb2wgZ2V0VVRDVGltZShkb3VibGUm
IG1pbGxpc2Vjb25kcykgY29uc3Q7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCiAgICAgICAgIHZvaWQgbXNUb0dyZWdvcmlhbkRh
dGVUaW1lKGRvdWJsZSwgYm9vbCBvdXRwdXRJc1VUQywgR3JlZ29yaWFuRGF0ZVRpbWUmKSBjb25z
dDsKIAogICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQorCisgICAgICAgIHVzaW5nIEpTV3JhcHBl
ck9iamVjdDo6aW50ZXJuYWxWYWx1ZTsKKwogICAgICAgICBzdHJ1Y3QgQ2FjaGU7CiAgICAgICAg
IG11dGFibGUgQ2FjaGUqIG1fY2FjaGU7CiAgICAgfTsKQEAgLTY4LDczICs3MywxNCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAvKioKICAgICAgKiBAaW50ZXJuYWwKICAgICAgKgotICAgICAqIEZ1
bmN0aW9ucyB0byBpbXBsZW1lbnQgYWxsIG1ldGhvZHMgdGhhdCBhcmUgcHJvcGVydGllcyBvZiB0
aGUKLSAgICAgKiBEYXRlLnByb3RvdHlwZSBvYmplY3QKLSAgICAgKi8KLSAgICAKLSAgICAvLyBO
b24tbm9ybWF0aXZlIHByb3BlcnRpZXMgKEFwcGVuZGl4IEIpCi0gICAgLy8gR2V0WWVhciwgU2V0
WWVhciwgVG9HTVRTdHJpbmcKLQotICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRl
UHJvdG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0
Jik7Ci0gICAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9U
aW1lU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRl
U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1ZhbHVlT2YoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0g
ICAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxs
WWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jVG9HTVRTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBB
cmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0
IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jR2V0RGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAg
ICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRl
cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xp
c3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwot
ICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dl
dFRpbWV6b25lT2Zmc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwot
ICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
Y29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29u
ZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJv
dG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3Qm
KTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRD
TWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBB
cmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNTZXREYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29u
c3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jU2V0VVRDTW9udGgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0g
ICAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxs
WWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xp
c3QmKTsKLSAgICBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAg
ICAqCiAgICAgICogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRoZSBnbG9iYWwgdmFyaWFibGUn
cyAiRGF0ZSIgcHJvcGVydHkKICAgICAgKi8KICAgICBjbGFzcyBEYXRlQ29uc3RydWN0b3IgOiBw
dWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgcHVibGljOgogICAgICAgICBEYXRlQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBEYXRlUHJvdG90eXBlKik7Ci0K
KyAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0
RGF0YShDb25zdHJ1Y3REYXRhJik7Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVj
dChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKLQotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKTsKLQotICAgICAgICBKU09iamVjdCogY29uc3RydWN0KGNvbnN0IEFy
Z0xpc3QmKTsKKyAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYp
OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZXJy
b3Jfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2Jq
ZWN0LmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQCBFcnJvckluc3RhbmNlOjpF
cnJvckluc3RhbmNlKEpTT2JqZWN0KiBwCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBFcnJvclByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3N0YXRp
YyBKU1ZhbHVlKiBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKwogLy8gRUNNQSAxNS45LjQKIEVycm9yUHJvdG90
eXBlOjpFcnJvclByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFByb3RvdHlwZSogb2Jq
ZWN0UHJvdG90eXBlLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUpCiAgICAg
OiBFcnJvckluc3RhbmNlKG9iamVjdFByb3RvdHlwZSkKQEAgLTUxLDggKzUzLDEwIEBAIEVycm9y
UHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShFeGVjU3RhdGUKICAgICBwdXREaXJlY3RGdW5jdGlv
bihuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAw
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcp
LCBEb250RW51bSk7CiB9CiAKLUpTVmFsdWUqIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBl
cnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogeworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
dGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CisKICAgICBVU3RyaW5nIHMgPSAiRXJyb3Ii
OwogCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubmFtZSk7CkBAIC02MCw5ICs2NCwxMSBAQCBKU1ZhbHVlKiBlcnJvclByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0CiAgICAgICAgIHMgPSB2LT50b1N0cmluZyhleGVjKTsKIAogICAgIHYg
PSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm1lc3NhZ2UpOwotICAg
IGlmICghdi0+aXNVbmRlZmluZWQoKSkKLSAgICAgICAgLy8gTW96aWxsYSBjb21wYXRpYmxlIGZv
cm1hdAotICAgICAgICBzICs9ICI6ICIgKyB2LT50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoIXYt
PmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgLy8gTW96aWxsYS1jb21wYXRpYmxlIGZvcm1hdC4K
KyAgICAgICAgcyArPSAiOiAiOworICAgICAgICBzICs9IHYtPnRvU3RyaW5nKGV4ZWMpOworICAg
IH0KIAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KQEAgLTc3LDI5ICs4MywzNyBA
QCBFcnJvckNvbnN0cnVjdG9yOjpFcnJvckNvbnN0cnVjdG9yKEV4ZWNTCiAgICAgcHV0RGlyZWN0
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBEb250RGVs
ZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0KIAotQ29uc3RydWN0VHlwZSBFcnJvckNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKQorLy8gRUNNQSAxNS45LjMKK3N0
YXRpYyBFcnJvckluc3RhbmNlKiBjb25zdHJ1Y3RFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRpdmU7CisgICAg
RXJyb3JJbnN0YW5jZSogb2JqID0gbmV3IChleGVjKSBFcnJvckluc3RhbmNlKGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZXJyb3JQcm90b3R5cGUoKSk7CisgICAgaWYgKCFhcmdzWzBdLT5p
c1VuZGVmaW5lZCgpKQorICAgICAgICBvYmotPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubWVzc2FnZSwganNTdHJpbmcoZXhlYywgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKTsKKyAg
ICByZXR1cm4gb2JqOwogfQogCi0vLyBFQ01BIDE1LjkuMwotSlNPYmplY3QqIEVycm9yQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitz
dGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTT2JqZWN0KiBw
cm90byA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5lcnJvclByb3RvdHlwZSgpKTsKLSAgICBKU09iamVjdCogaW1wID0gbmV3IChleGVjKSBFcnJv
ckluc3RhbmNlKHByb3RvKTsKLSAgICBKU09iamVjdCogb2JqKGltcCk7Ci0KLSAgICBpZiAoIWFy
Z3NbMF0tPmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGltcC0+cHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5tZXNzYWdlLCBqc1N0cmluZyhleGVjLCBhcmdzWzBdLT50b1N0cmluZyhleGVj
KSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RFcnJvcihleGVjLCBhcmdzKTsKK30KIAotICAgIHJl
dHVybiBvYmo7CitDb25zdHJ1Y3RUeXBlIEVycm9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERh
dGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5h
dGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yOworICAgIHJldHVy
biBDb25zdHJ1Y3RUeXBlTmF0aXZlOwogfQogCiAvLyBFQ01BIDE1LjkuMgotSlNWYWx1ZSogRXJy
b3JDb25zdHJ1Y3Rvcjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
Lyp0aGlzT2JqKi8sIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSogY2FsbEVy
cm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vICJFcnJvcigpIiBnaXZlcyB0aGUgc2FtZXMgcmVz
dWx0IGFzICJuZXcgRXJyb3IoKSIKLSAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIGFyZ3MpOwor
ICAgIHJldHVybiBjb25zdHJ1Y3RFcnJvcihleGVjLCBhcmdzKTsKK30KKworQ2FsbFR5cGUgRXJy
b3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNh
bGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxFcnJvckNvbnN0cnVjdG9yOworICAgIHJldHVy
biBDYWxsVHlwZU5hdGl2ZTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE5hdGl2ZUVycm9yUHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyMywyMyAr
MTM3LDM0IEBAIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3QKICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG8sIERvbnREZWxl
dGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCi1Db25zdHJ1Y3RUeXBlIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpCitFcnJvckluc3RhbmNl
KiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogeworICAgIEVycm9ySW5zdGFuY2UqIG9iamVjdCA9IG5ldyAoZXhl
YykgRXJyb3JJbnN0YW5jZShwcm90byk7CisgICAgaWYgKCFhcmdzWzBdLT5pc1VuZGVmaW5lZCgp
KQorICAgICAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2Fn
ZSwganNTdHJpbmcoZXhlYywgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4g
b2JqZWN0OworfQorCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVFcnJvckNvbnN0
cnVjdG9yKj4oY29uc3RydWN0b3IpLT5jb25zdHJ1Y3QoZXhlYywgYXJncyk7Cit9CisKK0NvbnN0
cnVjdFR5cGUgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3I7CiAgICAgcmV0dXJuIENv
bnN0cnVjdFR5cGVOYXRpdmU7CiB9CiAKLUpTT2JqZWN0KiBOYXRpdmVFcnJvckNvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGlj
IEpTVmFsdWUqIGNhbGxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGNvbnN0cnVjdG9yLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAg
ICBKU09iamVjdCogaW1wID0gbmV3IChleGVjKSBFcnJvckluc3RhbmNlKHByb3RvKTsKLSAgICBK
U09iamVjdCogb2JqKGltcCk7Ci0gICAgaWYgKCFhcmdzWzBdLT5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICBpbXAtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSwganNTdHJp
bmcoZXhlYywgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKTsKLSAgICByZXR1cm4gb2JqOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3Ip
LT5jb25zdHJ1Y3QoZXhlYywgYXJncyk7CiB9CiAKLUpTVmFsdWUqIE5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3I6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorQ2FsbFR5cGUgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERh
dGEoQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIHJldHVybiBjb25zdHJ1Y3QoZXhlYywgYXJn
cyk7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbE5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3I7CisgICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOwogfQogCiB2b2lkIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3I6Om1hcmsoKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9lcnJvcl9vYmplY3QuaAkocmV2
aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDE2ICszOCwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgRXJy
b3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKiwgRnVuY3Rpb25Qcm90b3R5
cGUqKTsKICAgICB9OwogCi0gICAgSlNWYWx1ZSogZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLQogICAgIGNsYXNzIEVycm9yQ29u
c3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgcHVibGljOgogICAgICAg
ICBFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKiwgRXJyb3JQ
cm90b3R5cGUqKTsKIAorICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKLSAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLQotICAgICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29u
c3QgQXJnTGlzdCYpOworICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxE
YXRhJik7CiAgICAgfTsKIAogICAgIGNsYXNzIE5hdGl2ZUVycm9yUHJvdG90eXBlIDogcHVibGlj
IEpTT2JqZWN0IHsKQEAgLTU4LDE5ICs1NSwxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFz
cyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAg
IHB1YmxpYzoKICAgICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBGdW5j
dGlvblByb3RvdHlwZSosIE5hdGl2ZUVycm9yUHJvdG90eXBlKik7Ci0KLSAgICAgICAgdmlydHVh
bCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwotICAgICAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYp
OwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmso
KTsKLQotICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwor
ICAgICAgICBFcnJvckluc3RhbmNlKiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlz
dCYpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNPYmplY3QqIHByb3RvOworICAgICAgICB2
aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KKyAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3Ry
dWN0RGF0YSYpOworICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRh
Jik7CisKKyAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHByb3RvOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCShyZXZpc2lvbiAz
NDczNikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3NSwxOCArMTc1LDE0IEBAIFVTdHJpbmcgSlNOdW1iZXJDZWxsOjp0b1N0cmluZyhFeGVj
U3RhdGUKICAgcmV0dXJuIFVTdHJpbmc6OmZyb20odmFsKTsKIH0KIAotSlNPYmplY3QgKkpTTnVt
YmVyQ2VsbDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAorSlNPYmplY3QqIEpTTnVt
YmVyQ2VsbDo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICBBcmdMaXN0IGFy
Z3M7Ci0gIGFyZ3MuYXBwZW5kKGNvbnN0X2Nhc3Q8SlNOdW1iZXJDZWxsKj4odGhpcykpOwotICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5udW1iZXJDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYyxhcmdzKSk7CisgICAgcmV0dXJu
IGNvbnN0cnVjdE51bWJlcihleGVjLCBjb25zdF9jYXN0PEpTTnVtYmVyQ2VsbCo+KHRoaXMpKTsK
IH0KIAogSlNPYmplY3QqIEpTTnVtYmVyQ2VsbDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKLSAgICBBcmdMaXN0IGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQoY29uc3RfY2Fz
dDxKU051bWJlckNlbGwqPih0aGlzKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJDb25zdHJ1Y3RvcigpLT5jb25z
dHJ1Y3QoZXhlYywgYXJncykpOworICAgIHJldHVybiBjb25zdHJ1Y3ROdW1iZXIoZXhlYywgY29u
c3RfY2FzdDxKU051bWJlckNlbGwqPih0aGlzKSk7CiB9CiAKIGJvb2wgSlNOdW1iZXJDZWxsOjpn
ZXRVSW50MzIodWludDMyX3QmIHVpbnQzMikgY29uc3QKQEAgLTIxMiwxOSArMjA4LDIwIEBAIGJv
b2wgSlNOdW1iZXJDZWxsOjpnZXRUcnVuY2F0ZWRVSW50MzIodWkKIH0KIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEdldHRlclNldHRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwogdm9pZCBHZXR0ZXJTZXR0ZXI6Om1hcmsoKQogewogICAgIEpTQ2VsbDo6bWFy
aygpOwotICAgIAotICAgIGlmIChnZXR0ZXIgJiYgIWdldHRlci0+bWFya2VkKCkpCi0gICAgICAg
IGdldHRlci0+bWFyaygpOwotICAgIGlmIChzZXR0ZXIgJiYgIXNldHRlci0+bWFya2VkKCkpCi0g
ICAgICAgIHNldHRlci0+bWFyaygpOworCisgICAgaWYgKG1fZ2V0dGVyICYmICFtX2dldHRlci0+
bWFya2VkKCkpCisgICAgICAgIG1fZ2V0dGVyLT5tYXJrKCk7CisgICAgaWYgKG1fc2V0dGVyICYm
ICFtX3NldHRlci0+bWFya2VkKCkpCisgICAgICAgIG1fc2V0dGVyLT5tYXJrKCk7CiB9CiAKIEpT
VmFsdWUqIEdldHRlclNldHRlcjo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBlKSBjb25z
dAogewotICAgIEFTU0VSVChmYWxzZSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIGpzTnVsbCgpOwogfQogCkBAIC0yMzgsNTQgKzIzNSwyNiBAQCBib29sIEdldHRlclNl
dHRlcjo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4CiAKIGJvb2wgR2V0dGVyU2V0dGVyOjp0b0Jvb2xl
YW4oRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgICBBU1NFUlQoZmFsc2UpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotZG91YmxlIEdldHRlclNldHRlcjo6dG9OdW1iZXIoRXhlY1N0YXRlICopIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKGZhbHNlKTsKLSAgICByZXR1cm4gMC4wOwotfQotCi1VU3RyaW5n
IEdldHRlclNldHRlcjo6dG9TdHJpbmcoRXhlY1N0YXRlICopIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGZhbHNlKTsKLSAgICByZXR1cm4gVVN0cmluZzo6bnVsbCgpOwotfQotCi1KU09iamVjdCAqR2V0
dGVyU2V0dGVyOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGZhbHNlKTsKLSAgICByZXR1cm4ganNOdWxsKCktPnRvT2JqZWN0KGV4ZWMpOwotfQotCi1ib29s
IEdldHRlclNldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBHZXR0ZXJTZXR0ZXI6OmdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90JikKLXsKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR2V0dGVyU2V0dGVyOjpw
dXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqKQorZG91YmxlIEdldHRl
clNldHRlcjo6dG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMC4wOwogfQogCi12b2lkIEdldHRlclNldHRlcjo6cHV0KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU1ZhbHVlKikKK1VTdHJpbmcgR2V0dGVyU2V0dGVyOjp0b1N0
cmluZyhFeGVjU3RhdGUqKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBVU3RyaW5nOjpudWxsKCk7CiB9CiAKLUpTT2JqZWN0KiBHZXR0ZXJTZXR0ZXI6OnRv
VGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdAorSlNPYmplY3QqIEdldHRlclNldHRlcjo6dG9P
YmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiAwOworICAgIHJldHVybiBqc051bGwoKS0+dG9PYmplY3QoZXhlYyk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMYWJlbFN0YWNrIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjIsMjAgKzI5MSwxOSBAQCBJbnRlcm5h
bEZ1bmN0aW9uOjpJbnRlcm5hbEZ1bmN0aW9uKCkKIHsKIH0KIAotSW50ZXJuYWxGdW5jdGlvbjo6
SW50ZXJuYWxGdW5jdGlvbihGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvLCBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lKQotICA6IEpTT2JqZWN0KGZ1bmNQcm90bykKLSAgLCBtX25hbWUobmFtZSkK
LXsKLX0KLQotQ2FsbFR5cGUgSW50ZXJuYWxGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEm
KQorSW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihGdW5jdGlvblByb3RvdHlwZSog
cHJvdG90eXBlLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQorICAgIDogSlNPYmplY3QocHJvdG90
eXBlKQorICAgICwgbV9uYW1lKG5hbWUpCiB7Ci0gICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOwog
fQogCiBib29sIEludGVybmFsRnVuY3Rpb246OmltcGxlbWVudHNIYXNJbnN0YW5jZSgpIGNvbnN0
CiB7Ci0gIHJldHVybiB0cnVlOworICAgIC8vIEZJWE1FOiBXaGF0IGRvZXMgaW1wbGVtZW50aW5n
IGluc3RhbmNlb2YgaGF2ZSB0byBkbyB3aXRoIGJlaW5nIGEgZnVuY3Rpb24/CisgICAgLy8gSXMg
dGhpcyByZWFsbHkgcmlnaHQgZm9yIEpTRnVuY3Rpb24/IElzIGl0IHJpZ2h0IGZvciBvdGhlciBj
bGFzc2VzIGRlcml2ZWQgZnJvbSB0aGlzIG9uZT8KKyAgICAvLyBNYXliZSBhZGQgYSBjbGFzcyBj
YWxsZWQgQ29uc3RydWN0b3IgdGhhdCBpcyBkZXJpdmVkIGZyb20gdGhpcyBvbmUgZm9yIHVzZSBv
ZiB0aGUgY2xhc3NlcworICAgIC8vIHRoYXQgZG8gaW1wbGVtZW50IGluc3RhbmNlb2YuCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgJKHJldmlzaW9uIDM0NzM2
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3
ICs0NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBVU3RyaW5nOjpSZXAqIGtleTsKICAg
ICAgICAgdW5pb24gewogICAgICAgICAgICAgaW50cHRyX3QgaW50ZWdlclZhbHVlOwotICAgICAg
ICAgICAgUHJvdG90eXBlRnVuY3Rpb246OkpTTWVtYmVyRnVuY3Rpb24gZnVuY3Rpb25WYWx1ZTsK
KyAgICAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uVmFsdWU7CiAgICAgICAgIH07CiAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYXR0cmlidXRlczsgLy8gSlNPYmplY3QgYXR0cmlidXRlcwog
ICAgICAgICB1bnNpZ25lZCBjaGFyIGxlbmd0aDsgLy8gbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Ig
ZnVuY3Rpb24KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgyLDcgKzE2ODIs
NyBAQCBKU0Z1bmN0aW9uKiBGdW5jRGVjbE5vZGU6Om1ha2VGdW5jdGlvbihFCiB7CiAgICAgSlNG
dW5jdGlvbiogZnVuYyA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBtX2lkZW50LCBtX2Jv
ZHkuZ2V0KCksIHNjb3BlQ2hhaW4pOwogCi0gICAgSlNPYmplY3QqIHByb3RvID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywg
ZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgIEpTT2JqZWN0KiBwcm90byA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMpOwogICAgIHByb3RvLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yLCBmdW5jLCBEb250RW51bSk7CiAgICAgZnVuYy0+cHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvLCBEb250RGVsZXRlKTsKICAgICBmdW5j
LT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywg
bV9ib2R5LT5wYXJhbWV0ZXJzKCkuc2l6ZSgpKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOwpAQCAtMTcwNCw3ICsxNzA0LDcgQEAgUmVnaXN0ZXJJRCogRnVuY0V4cHJOb2RlOjpl
bWl0Q29kZShDb2RlRwogSlNGdW5jdGlvbiogRnVuY0V4cHJOb2RlOjptYWtlRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKIHsKICAgICBKU0Z1bmN0
aW9uKiBmdW5jID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIG1faWRlbnQsIG1fYm9keS5n
ZXQoKSwgc2NvcGVDaGFpbik7Ci0gICAgSlNPYmplY3QqIHByb3RvID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5vYmplY3RDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+
ZW1wdHlMaXN0KCkpOworICAgIEpTT2JqZWN0KiBwcm90byA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwogICAgIHByb3RvLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0
cnVjdG9yLCBmdW5jLCBEb250RW51bSk7CiAgICAgZnVuYy0+cHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvLCBEb250RGVsZXRlKTsKIApJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE1ICszMCwx
NSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE9iamVjdFByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0
aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNIYXNPd25Q
cm9wZXJ0eShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmlu
ZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jTG9va3Vw
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0
eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1
bmNWYWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZSogb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5j
RGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWUqIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5j
TG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJs
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogCiBPYmplY3RQcm90b3R5cGU6Ok9i
amVjdFByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlv
blByb3RvdHlwZSkKICAgICA6IEpTT2JqZWN0KCkgLy8gW1tQcm90b3R5cGVdXSBpcyBudWxsCkBA
IC02MiwxOCArNjIsMjAgQEAgT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0
YQogCiAvLyBFQ01BIDE1LjIuNC4yLCAxNS4yLjQuNCwgMTUuMi40LjUsIDE1LjIuNC43CiAKLUpT
VmFsdWUqIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNP
YmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikKIHsKLSAgICByZXR1cm4gdGhpc09iajsKKyAgICByZXR1cm4gdGhpc1ZhbHVlLT50b1RoaXNP
YmplY3QoZXhlYyk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewot
ICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc09iai0+aGFzT3duUHJvcGVydHkoZXhlYywgSWRlbnRp
ZmllcihleGVjLCBhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpKTsKKyAgICByZXR1cm4ganNCb29s
ZWFuKHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsIGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSkpOwogfQogCi1KU1ZhbHVl
KiBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jSXNQcm90
b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogeworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVl
LT50b1RoaXNPYmplY3QoZXhlYyk7CisKICAgICBpZiAoIWFyZ3NbMF0tPmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogCkBAIC04Miw1MyArODQsNTMgQEAgSlNW
YWx1ZSogb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeAogICAgIHdoaWxlICh0cnVlKSB7
CiAgICAgICAgIGlmICghdi0+aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oZmFsc2UpOwotICAgICAgICBpZiAodGhpc09iaiA9PSBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHYpKQsKKyAgICAgICAgaWYgKHRoaXNPYmogPT0gdikLCiAgICAgICAgICAgICByZXR1cm4ganNC
b29sZWFuKHRydWUpOwogICAgICAgICB2ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+cHJv
dG90eXBlKCk7CiAgICAgfQogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewot
ICAgIGlmICghYXJnc1sxXS0+aXNPYmplY3QoKSB8fCAhc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihh
cmdzWzFdKS0+aW1wbGVtZW50c0NhbGwoKSkKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBp
ZiAoYXJnc1sxXS0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJpbnZhbGlkIGdldHRlciB1
c2FnZSIpOwotCi0gICAgdGhpc09iai0+ZGVmaW5lR2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLCBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihhcmdz
WzFdKSk7CisgICAgdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyktPmRlZmluZUdldHRlcihl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSwgc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPihhcmdzWzFdKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogb2JqZWN0UHJv
dG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgaWYgKCFhcmdzWzFdLT5pc09i
amVjdCgpIHx8ICFzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFyZ3NbMV0pLT5pbXBsZW1lbnRzQ2Fs
bCgpKQorICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIGlmIChhcmdzWzFdLT5nZXRDYWxsRGF0
YShjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgImludmFsaWQgc2V0dGVyIHVzYWdlIik7Ci0KLSAgICB0aGlzT2Jq
LT5kZWZpbmVTZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBhcmdzWzBdLT50b1N0cmluZyhl
eGVjKSksIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZ3NbMV0pKTsKKyAgICB0aGlzVmFsdWUt
PnRvVGhpc09iamVjdChleGVjKS0+ZGVmaW5lU2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywg
YXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFyZ3NbMV0p
KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0UHJvdG9G
dW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKLSAgICByZXR1cm4gdGhpc09iai0+bG9va3VwR2V0dGVyKGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gdGhpc1Zh
bHVlLT50b1RoaXNPYmplY3QoZXhlYyktPmxvb2t1cEdldHRlcihleGVjLCBJZGVudGlmaWVyKGV4
ZWMsIGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3Rv
RnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIHRoaXNPYmotPmxvb2t1cFNldHRlcihleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIHRoaXNW
YWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT5sb29rdXBTZXR0ZXIoZXhlYywgSWRlbnRpZmllcihl
eGVjLCBhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90
b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jUHJvcGVy
dHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4ganNCb29sZWFuKHRoaXNP
YmotPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJnc1swXS0+
dG9TdHJpbmcoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbih0aGlzVmFsdWUtPnRvVGhp
c09iamVjdChleGVjKS0+cHJvcGVydHlJc0VudW1lcmFibGUoZXhlYywgSWRlbnRpZmllcihleGVj
LCBhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpKTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0UHJvdG9G
dW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikKIHsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdGhpc09iai0+dG9TdHJpbmcoZXhlYykp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVj
KS0+dG9TdHJpbmcoZXhlYykpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWUqIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCAiW29iamVjdCAiICsgdGhpc09iai0+Y2xhc3NOYW1lKCkgKyAiXSIpOworICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCAiW29iamVjdCAiICsgdGhpc1ZhbHVlLT50b1RoaXNPYmpl
Y3QoZXhlYyktPmNsYXNzTmFtZSgpICsgIl0iKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIE9iamVjdENvbnN0cnVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC0xNDAsMzYgKzE0MiwzOCBAQCBPYmplY3RDb25zdHJ1Y3Rvcjo6T2JqZWN0Q29u
c3RydWN0b3IoRXhlCiAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCBvYmpQcm90bywgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAKICAgLy8gbm8uIG9m
IGFyZ3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRF
bnVtKTsKKyAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVy
KGV4ZWMsIDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKLUNvbnN0
cnVjdFR5cGUgT2JqZWN0Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0
YSYpCisvLyBFQ01BIDE1LjIuMgorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0
cnVjdE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CisgICAg
SlNWYWx1ZSogYXJnID0gYXJnc1swXTsKKyAgICBpZiAoYXJnLT5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICByZXR1cm4gYXJnLT50b09iamVjdChl
eGVjKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXaXRoT2JqZWN0Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7Cisg
ICAgcmV0dXJuIGNvbnN0cnVjdE9iamVjdChleGVjLCBhcmdzKTsKK30KKworQ29uc3RydWN0VHlw
ZSBPYmplY3RDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25z
dHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3Ry
dWN0V2l0aE9iamVjdENvbnN0cnVjdG9yOwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlTmF0aXZl
OwogfQogCi0vLyBFQ01BIDE1LjIuMgotSlNPYmplY3QqIE9iamVjdENvbnN0cnVjdG9yOjpjb25z
dHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFs
dWUqIGNhbGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gIEpTVmFsdWUqIGFyZyA9IGFyZ3NbMF07
Ci0gIHN3aXRjaCAoYXJnLT50eXBlKCkpIHsKLSAgY2FzZSBTdHJpbmdUeXBlOgotICBjYXNlIEJv
b2xlYW5UeXBlOgotICBjYXNlIE51bWJlclR5cGU6Ci0gIGNhc2UgT2JqZWN0VHlwZToKLSAgICAg
IHJldHVybiBhcmctPnRvT2JqZWN0KGV4ZWMpOwotICBjYXNlIE51bGxUeXBlOgotICBjYXNlIFVu
ZGVmaW5lZFR5cGU6Ci0gICAgICByZXR1cm4gbmV3IChleGVjKSBKU09iamVjdChleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKLSAgZGVmYXVsdDoKLSAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgcmV0dXJuIDA7Ci0gIH0KKyAgICByZXR1cm4g
Y29uc3RydWN0T2JqZWN0KGV4ZWMsIGFyZ3MpOwogfQogCi1KU1ZhbHVlKiBPYmplY3RDb25zdHJ1
Y3Rvcjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyp0aGlzT2Jq
Ki8sIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitDYWxsVHlwZSBPYmplY3RDb25zdHJ1Y3Rvcjo6Z2V0
Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIHJldHVybiBjb25zdHJ1Y3QoZXhl
YywgYXJncyk7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbE9iamVjdENvbnN0
cnVjdG9yOworICAgIHJldHVybiBDYWxsVHlwZU5hdGl2ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
S0pTCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmgJKHJldmlzaW9uIDM0NzM2KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgT2JqZWN0UHJvdG90eXBlKEV4
ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKik7CiAgICAgfTsKIAotICAgIEpTVmFsdWUqIG9i
amVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlz
dCYpOworICAgIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIAogICAgIC8qKgogICAgICAqIEBp
bnRlcm5hbApAQCAtNDYsMTEgKzQ2LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3MgT2Jq
ZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgcHVibGljOgog
ICAgICAgICBPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUqLCBG
dW5jdGlvblByb3RvdHlwZSopOwotCisgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25z
dHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwotICAgICAgICB2aXJ0
dWFsIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwotCi0g
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERh
dGEoQ2FsbERhdGEmKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJzdHJpbmdfb2JqZWN0LmgiCi0j
aW5jbHVkZSAic3RyaW5nX29iamVjdC5sdXQuaCIKIAogI2luY2x1ZGUgIkpTV3JhcHBlck9iamVj
dC5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCkBAIC0zNiw2ICszNSw0NiBAQCB1
c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgS0pTIHsKIAorc3RhdGljIEpTVmFsdWUq
IHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNWYWx1ZU9m
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y0NoYXJDb2RlQXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2Yo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNS
ZXBsYWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2Uo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlVXBwZXJDYXNlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBzdHJp
bmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKKworc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0JpZyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0Js
aW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNCb2xkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNGaXhlZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jU3RyaWtlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWIoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY1N1cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQW5j
aG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKworfQorCisjaW5jbHVkZSAic3RyaW5nX29iamVj
dC5sdXQuaCIKKworbmFtZXNwYWNlIEtKUyB7CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBTdHJpbmdPYmplY3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjb25z
dCBDbGFzc0luZm8gU3RyaW5nT2JqZWN0OjppbmZvID0geyAiU3RyaW5nIiwgMCwgMCwgMCB9OwpA
QCAtOTgsMzkgKzEzNywzOSBAQCB2b2lkIFN0cmluZ09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhF
eGVjCiBjb25zdCBDbGFzc0luZm8gU3RyaW5nUHJvdG90eXBlOjppbmZvID0geyAiU3RyaW5nIiwg
JlN0cmluZ09iamVjdDo6aW5mbywgMCwgRXhlY1N0YXRlOjpzdHJpbmdUYWJsZSB9OwogLyogU291
cmNlIGZvciBzdHJpbmdfb2JqZWN0Lmx1dC5oCiBAYmVnaW4gc3RyaW5nVGFibGUgMjYKLSAgdG9T
dHJpbmcgICAgICAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAwCi0gIHZhbHVlT2YgICAgICAgICAgICAgICAmc3RyaW5nUHJv
dG9GdW5jVmFsdWVPZiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAotICBjaGFy
QXQgICAgICAgICAgICAgICAgJnN0cmluZ1Byb3RvRnVuY0NoYXJBdCAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uICAgICAgIDEKLSAgY2hhckNvZGVBdCAgICAgICAgICAgICZzdHJpbmdQcm90
b0Z1bmNDaGFyQ29kZUF0ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCi0gIGNvbmNh
dCAgICAgICAgICAgICAgICAmc3RyaW5nUHJvdG9GdW5jQ29uY2F0ICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gICAgICAgMQotICBpbmRleE9mICAgICAgICAgICAgICAgJnN0cmluZ1Byb3Rv
RnVuY0luZGV4T2YgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDEKLSAgbGFzdElu
ZGV4T2YgICAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZiAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAxCi0gIG1hdGNoICAgICAgICAgICAgICAgICAmc3RyaW5nUHJvdG9G
dW5jTWF0Y2ggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMQotICByZXBsYWNl
ICAgICAgICAgICAgICAgJnN0cmluZ1Byb3RvRnVuY1JlcGxhY2UgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDIKLSAgc2VhcmNoICAgICAgICAgICAgICAgICZzdHJpbmdQcm90b0Z1
bmNTZWFyY2ggICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCi0gIHNsaWNlICAg
ICAgICAgICAgICAgICAmc3RyaW5nUHJvdG9GdW5jU2xpY2UgICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMgotICBzcGxpdCAgICAgICAgICAgICAgICAgJnN0cmluZ1Byb3RvRnVu
Y1NwbGl0ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDIKLSAgc3Vic3RyICAg
ICAgICAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNTdWJzdHIgICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAyCi0gIHN1YnN0cmluZyAgICAgICAgICAgICAmc3RyaW5nUHJvdG9GdW5j
U3Vic3RyaW5nICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMgotICB0b0xvd2VyQ2Fz
ZSAgICAgICAgICAgJnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uICAgICAgIDAKLSAgdG9VcHBlckNhc2UgICAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNU
b1VwcGVyQ2FzZSAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCi0gIHRvTG9jYWxlTG93
ZXJDYXNlICAgICAmc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAotICB0b0xvY2FsZVVwcGVyQ2FzZSAgICAgJnN0cmluZ1Byb3RvRnVuY1Rv
TG9jYWxlVXBwZXJDYXNlIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKLSAgbG9jYWxlQ29tcGFy
ZSAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAxCi0KLSAgYmlnICAgICAgICAgICAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNC
aWcgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCi0gIHNtYWxsICAgICAg
ICAgICAgICAgICAmc3RyaW5nUHJvdG9GdW5jU21hbGwgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAotICBibGluayAgICAgICAgICAgICAgICAgJnN0cmluZ1Byb3RvRnVuY0Js
aW5rICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKLSAgYm9sZCAgICAgICAg
ICAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNCb2xkICAgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCi0gIGZpeGVkICAgICAgICAgICAgICAgICAmc3RyaW5nUHJvdG9GdW5jRml4
ZWQgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAotICBpdGFsaWNzICAgICAg
ICAgICAgICAgJnN0cmluZ1Byb3RvRnVuY0l0YWxpY3MgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKLSAgc3RyaWtlICAgICAgICAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNTdHJp
a2UgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCi0gIHN1YiAgICAgICAgICAg
ICAgICAgICAmc3RyaW5nUHJvdG9GdW5jU3ViICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAotICBzdXAgICAgICAgICAgICAgICAgICAgJnN0cmluZ1Byb3RvRnVuY1N1cCAg
ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKLSAgZm9udGNvbG9yICAgICAg
ICAgICAgICZzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAgICAgICAxCi0gIGZvbnRzaXplICAgICAgICAgICAgICAmc3RyaW5nUHJvdG9GdW5jRm9udHNp
emUgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMQotICBhbmNob3IgICAgICAgICAg
ICAgICAgJnN0cmluZ1Byb3RvRnVuY0FuY2hvciAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDEKLSAgbGluayAgICAgICAgICAgICAgICAgICZzdHJpbmdQcm90b0Z1bmNMaW5rICAg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCisgIHRvU3RyaW5nICAgICAgICAg
ICAgICBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgIHZhbHVlT2YgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNWYWx1ZU9mICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGNoYXJBdCAgICAgICAgICAgICAg
ICBzdHJpbmdQcm90b0Z1bmNDaGFyQXQgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAxCisgIGNoYXJDb2RlQXQgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0ICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCisgIGNvbmNhdCAgICAgICAgICAgICAgICBz
dHJpbmdQcm90b0Z1bmNDb25jYXQgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAx
CisgIGluZGV4T2YgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNJbmRleE9mICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCisgIGxhc3RJbmRleE9mICAgICAgICAgICBzdHJp
bmdQcm90b0Z1bmNMYXN0SW5kZXhPZiAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCisg
IG1hdGNoICAgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNNYXRjaCAgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAgICAgICAxCisgIHJlcGxhY2UgICAgICAgICAgICAgICBzdHJpbmdQ
cm90b0Z1bmNSZXBsYWNlICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAyCisgIHNl
YXJjaCAgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNTZWFyY2ggICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAxCisgIHNsaWNlICAgICAgICAgICAgICAgICBzdHJpbmdQcm90
b0Z1bmNTbGljZSAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAyCisgIHNwbGl0
ICAgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNTcGxpdCAgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAyCisgIHN1YnN0ciAgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1
bmNTdWJzdHIgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAyCisgIHN1YnN0cmlu
ZyAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAyCisgIHRvTG93ZXJDYXNlICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNU
b0xvd2VyQ2FzZSAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHRvVXBwZXJDYXNl
ICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCisgIHRvTG9jYWxlTG93ZXJDYXNlICAgICBzdHJpbmdQcm90b0Z1bmNUb0xv
Y2FsZUxvd2VyQ2FzZSBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHRvTG9jYWxlVXBwZXJD
YXNlICAgICBzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZVVwcGVyQ2FzZSBEb250RW51bXxGdW5jdGlv
biAgICAgICAwCisgIGxvY2FsZUNvbXBhcmUgICAgICAgICBzdHJpbmdQcm90b0Z1bmNMb2NhbGVD
b21wYXJlICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCisKKyAgYmlnICAgICAgICAgICAg
ICAgICAgIHN0cmluZ1Byb3RvRnVuY0JpZyAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgc21hbGwgICAgICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1NtYWxsICAg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgYmxpbmsgICAgICAgICAgICAg
ICAgIHN0cmluZ1Byb3RvRnVuY0JsaW5rICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAg
ICAgIDAKKyAgYm9sZCAgICAgICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY0JvbGQgICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZml4ZWQgICAgICAgICAgICAgICAg
IHN0cmluZ1Byb3RvRnVuY0ZpeGVkICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgaXRhbGljcyAgICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc3RyaWtlICAgICAgICAgICAgICAgIHN0
cmluZ1Byb3RvRnVuY1N0cmlrZSAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAK
KyAgc3ViICAgICAgICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1N1YiAgICAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc3VwICAgICAgICAgICAgICAgICAgIHN0cmlu
Z1Byb3RvRnVuY1N1cCAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
Zm9udGNvbG9yICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvciAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDEKKyAgZm9udHNpemUgICAgICAgICAgICAgIHN0cmluZ1By
b3RvRnVuY0ZvbnRzaXplICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDEKKyAgYW5j
aG9yICAgICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY0FuY2hvciAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uICAgICAgIDEKKyAgbGluayAgICAgICAgICAgICAgICAgIHN0cmluZ1Byb3Rv
RnVuY0xpbmsgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDEKIEBlbmQKICov
CiAvLyBFQ01BIDE1LjUuNApAQCAtMjY3LDEyICszMDYsMTEgQEAgc3RhdGljIGlubGluZSBpbnQg
bG9jYWxlQ29tcGFyZShjb25zdCBVUwogc3RhdGljIEpTVmFsdWUgKnJlcGxhY2UoRXhlY1N0YXRl
ICpleGVjLCBKU1N0cmluZyogc291cmNlVmFsLCBKU1ZhbHVlICpwYXR0ZXJuLCBKU1ZhbHVlICpy
ZXBsYWNlbWVudCkKIHsKICAgVVN0cmluZyBzb3VyY2UgPSBzb3VyY2VWYWwtPnZhbHVlKCk7Ci0g
IEpTT2JqZWN0ICpyZXBsYWNlbWVudEZ1bmN0aW9uID0gMDsKKyAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgIFVTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7CiAKLSAgaWYgKHJlcGxhY2VtZW50LT5pc09i
amVjdCgpICYmIHJlcGxhY2VtZW50LT50b09iamVjdChleGVjKS0+aW1wbGVtZW50c0NhbGwoKSkK
LSAgICByZXBsYWNlbWVudEZ1bmN0aW9uID0gcmVwbGFjZW1lbnQtPnRvT2JqZWN0KGV4ZWMpOwot
ICBlbHNlCisgIENhbGxUeXBlIGNhbGxUeXBlID0gcmVwbGFjZW1lbnQtPmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKKyAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICByZXBsYWNlbWVu
dFN0cmluZyA9IHJlcGxhY2VtZW50LT50b1N0cmluZyhleGVjKTsKIAogICBpZiAocGF0dGVybi0+
aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihwYXR0ZXJuKS0+aW5oZXJpdHMo
JlJlZ0V4cE9iamVjdDo6aW5mbykpIHsKQEAgLTMwMyw3ICszNDEsNyBAQCBzdGF0aWMgSlNWYWx1
ZSAqcmVwbGFjZShFeGVjU3RhdGUgKmV4ZWMsCiAgICAgICBwdXNoU291cmNlUmFuZ2Uoc291cmNl
UmFuZ2VzLCBzb3VyY2VSYW5nZUNvdW50LCBzb3VyY2VSYW5nZUNhcGFjaXR5LCBVU3RyaW5nOjpS
YW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKIAogICAgICAgVVN0cmlu
ZyBzdWJzdGl0dXRlZFJlcGxhY2VtZW50OwotICAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24p
IHsKKyAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgICBpbnQg
Y29tcGxldGVNYXRjaFN0YXJ0ID0gb3ZlY3RvclswXTsKICAgICAgICAgICBBcmdMaXN0IGFyZ3M7
CiAKQEAgLTMyMCw3ICszNTgsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqcmVwbGFjZShFeGVjU3RhdGUg
KmV4ZWMsCiAgICAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXhlYywgY29tcGxldGVNYXRj
aFN0YXJ0KSk7CiAgICAgICAgICAgYXJncy5hcHBlbmQoc291cmNlVmFsKTsKIAotICAgICAgICAg
IHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudEZ1bmN0aW9uLT5jYWxsQXNGdW5j
dGlvbihleGVjLCBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSwgYXJncyktPnRvU3RyaW5nKGV4ZWMp
OworICAgICAgICAgIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJlcGxhY2Vt
ZW50LCBjYWxsVHlwZSwgY2FsbERhdGEsIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpLCBhcmdzKS0+
dG9TdHJpbmcoZXhlYyk7CiAgICAgICB9IGVsc2UKICAgICAgICAgICBzdWJzdGl0dXRlZFJlcGxh
Y2VtZW50ID0gc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VtZW50U3RyaW5nLCBzb3Vy
Y2UsIG92ZWN0b3IsIHJlZyk7CiAKQEAgLTM2MiwzOSArNDAwLDM5IEBAIHN0YXRpYyBKU1ZhbHVl
ICpyZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywKICAgaWYgKG1hdGNoUG9zID09IC0xKQogICAgIHJl
dHVybiBzb3VyY2VWYWw7CiAgIAotICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbikgeworICBpZiAo
Y2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICBBcmdMaXN0IGFyZ3M7CiAgICAgICAK
ICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHNvdXJjZS5zdWJzdHIobWF0Y2hQb3Ms
IG1hdGNoTGVuKSkpOwogICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXhlYywgbWF0Y2hQb3Mp
KTsKICAgICAgIGFyZ3MuYXBwZW5kKHNvdXJjZVZhbCk7CiAgICAgICAKLSAgICAgIHJlcGxhY2Vt
ZW50U3RyaW5nID0gcmVwbGFjZW1lbnRGdW5jdGlvbi0+Y2FsbEFzRnVuY3Rpb24oZXhlYywgZXhl
Yy0+Z2xvYmFsVGhpc1ZhbHVlKCksIGFyZ3MpLT50b1N0cmluZyhleGVjKTsKKyAgICAgIHJlcGxh
Y2VtZW50U3RyaW5nID0gY2FsbChleGVjLCByZXBsYWNlbWVudCwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSwgYXJncyktPnRvU3RyaW5nKGV4ZWMpOwogICB9CiAK
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHNvdXJjZS5zdWJzdHIoMCwgbWF0Y2hQb3MpICsgcmVw
bGFjZW1lbnRTdHJpbmcgKyBzb3VyY2Uuc3Vic3RyKG1hdGNoUG9zICsgbWF0Y2hMZW4pKTsKIH0K
IAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNU
b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdPYmpl
Y3Q6OmluZm8pKQorICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0Ojpp
bmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1
ZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5p
bnRlcm5hbFZhbHVlKCk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1ZhbHVlT2YoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmICghdGhpc09iai0+aW5o
ZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykpCisgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0
KCZTdHJpbmdPYmplY3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNP
YmopLT5pbnRlcm5hbFZhbHVlKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cmluZ09iamVj
dCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlz
IGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmlu
Z09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50
ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRp
Y19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUo
KSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICBp
bnQgbGVuID0gcy5zaXplKCk7CiAKICAgICBVU3RyaW5nIHU7CkBAIC00MDcsMTAgKzQ0NSwxMCBA
QCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIHUpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
Ly8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmlu
Z09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6
OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFsVmFs
dWUoKS0+dmFsdWUoKSA6IHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxT
dHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlz
VmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9
IHMuc2l6ZSgpOwogCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gMDsKQEAgLTQyNCwxMCArNDYyLDEw
IEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQoRXhlY1MKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIFRoaXMgb3B0aW1pemVz
IHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3Ry
aW5nIHMgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19j
YXN0PFN0cmluZ09iamVjdCo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0
aGlzT2JqLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2Jq
ZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhp
c1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmpl
Y3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOwogCiAgICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gYXJncy5lbmQoKTsKICAgICBmb3IgKEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
YXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTQzNiwxMCArNDc0LDEwIEBAIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUKICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgcyk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBUaGlzIG9w
dGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0g
ICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBz
dGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1
ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVj
dCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9U
aGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7
CiAKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CkBAIC00NTMsMTAgKzQ5MSwxMCBAQCBKU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHMuZmluZCh1Miwgc3RhdGljX2Nhc3Q8aW50PihkcG9zKSkpOwogfQogCi1KU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGFz
dEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9u
IGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhp
c09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdP
YmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5n
T2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmlu
dGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50
b1N0cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKICAgICBKU1ZhbHVlKiBh
MCA9IGFyZ3NbMF07CkBAIC00NzEsMTAgKzUwOSwxMCBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNMYXN0SW5kZXhPZihFeGVjCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHMucmZpbmQodTIs
IHN0YXRpY19jYXN0PGludD4oZHBvcykpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
TWF0Y2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
Ly8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmlu
Z09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6
OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFsVmFs
dWUoKS0+dmFsdWUoKSA6IHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxT
dHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlz
VmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJpbmcoZXhlYyk7CiAKICAgICBKU1ZhbHVl
KiBhMCA9IGFyZ3NbMF07CiAKQEAgLTUyMCwxNiArNTU4LDE2IEBAIEpTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSoKICAgICAgICAgLy8gb3RoZXIgYnJvd3NlcnMgYW5kIGJl
Y2F1c2UgTnVsbCBpcyBhIGZhbHNlIHZhbHVlLgogICAgICAgICByZXN1bHQgPSBqc051bGwoKTsK
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgbGlzdCk7CisgICAgICAg
IHJlc3VsdCA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIGxpc3QpOwogICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIFRoaXMg
b3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QK
LSAgICBVU3RyaW5nIHMgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjppbmZvKSA/
IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZh
bHVlKCkgOiB0aGlzT2JqLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUtPmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2Jq
ZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50
b1RoaXNPYmplY3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSogYTAgPSBh
cmdzWzBdOwogCkBAIC01NTIsMTMgKzU5MCwxMyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNT
ZWFyY2goRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvcyk7CiB9CiAKLUpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1Jl
cGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNh
c2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc09i
ai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmpl
Y3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2Jq
ZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVy
bmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0
cmluZyhleGVjKTsKIAotICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc09iai0+aW5oZXJpdHMoJlN0
cmluZ09iamVjdDo6aW5mbykgPwotICAgICAgc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhp
c09iaiktPmludGVybmFsVmFsdWUoKSA6CisgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUt
PmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8KKyAgICAgIHN0YXRpY19jYXN0PFN0cmlu
Z09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKSA6CiAgICAgICBzdGF0aWNfY2Fz
dDxKU1N0cmluZyo+KGpzU3RyaW5nKGV4ZWMsIHMpKTsKIAogICAgIEpTVmFsdWUqIGEwID0gYXJn
c1swXTsKQEAgLTU2NywxMCArNjA1LDEwIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1JlcGxh
Y2UoRXhlY1N0YXQKICAgICByZXR1cm4gcmVwbGFjZShleGVjLCBzVmFsLCBhMCwgYTEpOwogfQog
Ci1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
U2xpY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNh
c2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc09i
ai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmpl
Y3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2Jq
ZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVy
bmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0
cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKICAgICBKU1ZhbHVlKiBhMCA9
IGFyZ3NbMF07CkBAIC01OTIsMTYgKzYzMCwxNSBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNT
bGljZShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICIiKTsKIH0KIAotSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NwbGl0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRo
YXQgdGhpc09iaiBpcyBhIFN0cmluZ09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNPYmotPmlu
aGVyaXRzKCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4o
dGhpc09iaiktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNPYmotPnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6
aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZh
bHVlKCktPnZhbHVlKCkgOiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJpbmco
ZXhlYyk7CiAKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CiAgICAgSlNWYWx1ZSogYTEgPSBh
cmdzWzFdOwogCi0gICAgSlNPYmplY3QgKmNvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5hcnJheUNvbnN0cnVjdG9yKCk7Ci0gICAgSlNPYmplY3QqIHJlcyA9IHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4oY29uc3RydWN0b3ItPmNvbnN0cnVjdChleGVjLCBleGVjLT5lbXB0
eUxpc3QoKSkpOworICAgIEpTT2JqZWN0KiByZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMp
OwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IHJlczsKICAgICBVU3RyaW5nIHUgPSBzOwogICAgIGlu
dCBwb3M7CkBAIC02NjIsMTAgKzY5OSwxMCBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTcGxp
dChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlz
IGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmlu
Z09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50
ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRp
Y19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUo
KSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICBp
bnQgbGVuID0gcy5zaXplKCk7CiAKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CkBAIC02ODcs
MTAgKzcyNCwxMCBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRlCiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMuc3Vic3RyKHN0YXRpY19jYXN0PGludD4oc3RhcnQp
LCBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9G
dW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2Jq
IGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0
cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+
aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAg
VVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0
YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFs
dWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAg
ICBpbnQgbGVuID0gcy5zaXplKCk7CiAKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CkBAIC03
MjAsMTMgKzc1NywxMyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMuc3Vic3RyKChpbnQpc3RhcnQsIChpbnQpZW5k
LShpbnQpc3RhcnQpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBUaGlzIG9w
dGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0g
ICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBz
dGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1
ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVj
dCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9U
aGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICAKLSAgICBKU1N0cmluZyogc1Zh
bCA9IHRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6OmluZm8pCi0gICAgICAgID8gc3Rh
dGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKQorICAgIEpT
U3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKQor
ICAgICAgICA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFs
VmFsdWUoKQogICAgICAgICA6IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oanNTdHJpbmcoZXhlYywg
cykpOwogICAgIGludCBzc2l6ZSA9IHMuc2l6ZSgpOwogICAgIGlmICghc3NpemUpCkBAIC03NDUs
MTMgKzc4MiwxMyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjCiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLnJlbGVhc2VCdWZmZXIoKSwg
bGVuZ3RoLCBmYWxzZSkpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2Fz
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIC8vIFRoaXMg
b3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QK
LSAgICBVU3RyaW5nIHMgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjppbmZvKSA/
IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZh
bHVlKCkgOiB0aGlzT2JqLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUtPmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2Jq
ZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50
b1RoaXNPYmplY3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOwogCi0gICAgSlNTdHJpbmcqIHNWYWwg
PSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjppbmZvKQotICAgICAgICA/IHN0YXRp
Y19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCkKKyAgICBKU1N0
cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykKKyAg
ICAgICAgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZh
bHVlKCkKICAgICAgICAgOiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGpzU3RyaW5nKGV4ZWMsIHMp
KTsKICAgICBpbnQgc3NpemUgPSBzLnNpemUoKTsKICAgICBpZiAoIXNzaXplKQpAQCAtNzcwLDE0
ICs4MDcsMTQgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlYwogICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIGxl
bmd0aCwgZmFsc2UpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dl
ckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZUxvd2VyQ2FzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAg
ICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3Ry
aW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVj
dDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxW
YWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0
PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRo
aXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICAKICAgICAv
LyBGSVhNRTogU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VOSURBVEEvU3BlY2lh
bENhc2luZy50eHQgZm9yIGxvY2FsZS1zZW5zaXRpdmUgbWFwcGluZ3MgdGhhdCBhcmVuJ3QgaW1w
bGVtZW50ZWQuCi0gICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5n
T2JqZWN0OjppbmZvKQotICAgICAgICA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNP
YmopLT5pbnRlcm5hbFZhbHVlKCkKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS0+aXNP
YmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykKKyAgICAgICAgPyBzdGF0aWNfY2FzdDxTdHJpbmdP
YmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkKICAgICAgICAgOiBzdGF0aWNfY2Fz
dDxKU1N0cmluZyo+KGpzU3RyaW5nKGV4ZWMsIHMpKTsKICAgICBpbnQgc3NpemUgPSBzLnNpemUo
KTsKICAgICBpZiAoIXNzaXplKQpAQCAtNzk2LDEzICs4MzMsMTMgQEAgSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhcwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3Ry
aW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsKIH0KIAotSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVVcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNU
b0xvY2FsZVVwcGVyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29t
bW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0g
dGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJp
bmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3Ry
aW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSkt
PmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
LT50b1N0cmluZyhleGVjKTsKIAotICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc09iai0+aW5oZXJp
dHMoJlN0cmluZ09iamVjdDo6aW5mbykKLSAgICAgICAgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmpl
Y3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpCisgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlz
VmFsdWUtPmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pCisgICAgICAgID8gc3RhdGljX2Nh
c3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpCiAgICAgICAgIDog
c3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihqc1N0cmluZyhleGVjLCBzKSk7CiAgICAgaW50IHNzaXpl
ID0gcy5zaXplKCk7CiAgICAgaWYgKCFzc2l6ZSkKQEAgLTgyMSwxNzcgKzg1OCwxNzAgQEAgSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVVcHBlckNhcwogICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBVU3RyaW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsK
IH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNp
emUoKSA8IDEpCiAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgMCk7CiAKICAgICAvLyBUaGlz
IG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0
Ci0gICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykg
PyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52
YWx1ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1Zh
bHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09i
amVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+
dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICBKU1ZhbHVlKiBhMCA9IGFy
Z3NbMF07CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxvY2FsZUNvbXBhcmUocywgYTAtPnRv
U3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0JpZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY0JpZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29t
bW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0g
dGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJp
bmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3Ry
aW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSkt
PmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
LT50b1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxiaWc+IiArIHMg
KyAiPC9iaWc+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNv
bW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmluZ09iamVjdAotICAgIFVTdHJpbmcgcyA9
IHRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3Ry
aW5nT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNPYmot
PnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0
cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUp
LT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVj
KS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8c21hbGw+IiAr
IHMgKyAiPC9zbWFsbD4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0
aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmlu
ZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2Fz
dDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhp
c09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVj
dCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNW
YWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0
KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxibGlu
az4iICsgcyArICI8L2JsaW5rPiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNCb2xk
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXpl
cyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0
cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNf
Y2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDog
dGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09i
amVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRo
aXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2Jq
ZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxi
PiIgKyBzICsgIjwvYj4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0
aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmlu
ZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2Fz
dDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhp
c09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVj
dCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNW
YWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0
KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjx0dD4i
ICsgcyArICI8L3R0PiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBUaGlzIG9wdGltaXpl
cyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0
cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNf
Y2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDog
dGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09i
amVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRo
aXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2Jq
ZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxp
PiIgKyBzICsgIjwvaT4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIC8vIFRoaXMgb3B0aW1pemVz
IHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3Ry
aW5nIHMgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19j
YXN0PFN0cmluZ09iamVjdCo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0
aGlzT2JqLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2Jq
ZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhp
c1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmpl
Y3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPHN0
cmlrZT4iICsgcyArICI8L3N0cmlrZT4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
U3ViKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIC8vIFRoaXMgb3B0aW1p
emVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBV
U3RyaW5nIHMgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRp
Y19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkg
OiB0aGlzT2JqLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlz
T2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4o
dGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNP
YmplY3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAi
PHN1Yj4iICsgcyArICI8L3N1Yj4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vw
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIC8vIFRoaXMgb3B0aW1pemVz
IHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3Ry
aW5nIHMgPSB0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19j
YXN0PFN0cmluZ09iamVjdCo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0
aGlzT2JqLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2Jq
ZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhp
c1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmpl
Y3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPHN1
cD4iICsgcyArICI8L3N1cD4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jRm9udGNv
bG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3Ry
aW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVj
dDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxW
YWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0
PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRo
aXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKICAgICBKU1ZhbHVl
KiBhMCA9IGFyZ3NbMF07CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8Zm9udCBjb2xvcj1c
IiIgKyBhMC0+dG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9mb250PiIpOwogfQogCi1K
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
Rm9udHNpemUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9u
IGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhp
c09iai0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdP
YmplY3QqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc09iai0+dG9T
dHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5n
T2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmlu
dGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50
b1N0cmluZyhleGVjKTsKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CiAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4i
ICsgcyArICI8L2ZvbnQ+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gVGhp
cyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmluZ09iamVj
dAotICAgIFVTdHJpbmcgcyA9IHRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdPYmplY3Q6OmluZm8p
ID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKS0+
dmFsdWUoKSA6IHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdP
YmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzVmFsdWUt
PnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgSlNWYWx1ZSogYTAgPSBh
cmdzWzBdOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIgKyBhMC0+dG9T
dHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9hPiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBh
IFN0cmluZ09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdP
YmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc09iaiktPmludGVy
bmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJp
bmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNf
Y2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkg
OiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgSlNW
YWx1ZSogYTAgPSBhcmdzWzBdOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGEgaHJlZj1c
IiIgKyBhMC0+dG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9hPiIpOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RyaW5nQ29uc3RydWN0b3IgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdGcm9tQ2hhckNv
ZGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQoreworICAgIFVTdHJpbmcgczsKKyAgICBpZiAoYXJncy5zaXplKCkpIHsKKyAgICAgICAg
VUNoYXIqIGJ1ZiA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhhcmdzLnNpemUoKSAq
IHNpemVvZihVQ2hhcikpKTsKKyAgICAgICAgVUNoYXIqIHAgPSBidWY7CisgICAgICAgIEFyZ0xp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7CisgICAgICAgIGZvciAoQXJnTGlz
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgICAqcCsrID0gc3RhdGljX2Nhc3Q8VUNoYXI+KCgqaXQpLT50b1VJbnQzMihleGVjKSk7
CisgICAgICAgIHMgPSBVU3RyaW5nKGJ1ZiwgYXJncy5zaXplKCksIGZhbHNlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcyA9ICIiOworCisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMpOworfQor
CiBTdHJpbmdDb25zdHJ1Y3Rvcjo6U3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBG
dW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvLCBTdHJpbmdQcm90b3R5cGUqIHN0cmluZ1Byb3Rv
KQogICA6IEludGVybmFsRnVuY3Rpb24oZnVuY1Byb3RvLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmlu
Z1Byb3RvLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKIHsKICAgLy8gRUNNQSAxNS41LjMuMSBT
dHJpbmcucHJvdG90eXBlCi0gIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBzdHJpbmdQcm90bywgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CisgIHB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBzdHJpbmdQcm90bywgUmVhZE9u
bHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogCi0gIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyAo
ZXhlYykgU3RyaW5nQ29uc3RydWN0b3JGdW5jdGlvbihleGVjLCBmdW5jUHJvdG8sIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5mcm9tQ2hhckNvZGUpLCBEb250RW51bSk7CisgIC8vIEVDTUEgMTUuNS4z
LjIgZnJvbUNoYXJDb2RlKCkKKyAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IChleGVjKSBQcm90b3R5
cGVGdW5jdGlvbihleGVjLCBmdW5jUHJvdG8sIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5mcm9t
Q2hhckNvZGUsIHN0cmluZ0Zyb21DaGFyQ29kZSksIERvbnRFbnVtKTsKIAogICAvLyBuby4gb2Yg
YXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVu
dW0pOwotfQotCi0KLUNvbnN0cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dERhdGEoQ29uc3RydWN0RGF0YSYpCi17Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRpdmU7
CisgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVj
LCAxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogfQogCiAvLyBFQ01BIDE1
LjUuMgotSlNPYmplY3QqIFN0cmluZ0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXaXRo
U3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7Ci0gIEpTT2JqZWN0KiBwcm90byA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+c3RyaW5nUHJvdG90eXBlKCk7Ci0gIGlmICghYXJncy5zaXplKCkpCi0gICAgcmV0dXJu
IG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMsIHByb3RvKTsKLSAgcmV0dXJuIG5ldyAoZXhl
YykgU3RyaW5nT2JqZWN0KGV4ZWMsIHByb3RvLCBhcmdzWzBdLT50b1N0cmluZyhleGVjKSk7Cisg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3Ry
aW5nUHJvdG90eXBlKCk7CisgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBTdHJpbmdPYmplY3QoZXhlYywgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gbmV3
IChleGVjKSBTdHJpbmdPYmplY3QoZXhlYywgcHJvdG90eXBlLCBhcmdzWzBdLT50b1N0cmluZyhl
eGVjKSk7CiB9CiAKLS8vIEVDTUEgMTUuNS4xCi1KU1ZhbHVlICpTdHJpbmdDb25zdHJ1Y3Rvcjo6
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCogLyp0aGlzT2JqKi8sIGNv
bnN0IEFyZ0xpc3QgJmFyZ3MpCitDb25zdHJ1Y3RUeXBlIFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7Ci0gIGlmIChhcmdz
LmlzRW1wdHkoKSkKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIiIpOwotICBlbHNlIHsKLSAg
ICBKU1ZhbHVlICp2ID0gYXJnc1swXTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdi0+dG9T
dHJpbmcoZXhlYykpOwotICB9CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBj
b25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3I7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVO
YXRpdmU7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdHJpbmdDb25z
dHJ1Y3RvckZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEVDTUEgMTUu
NS4zLjIgZnJvbUNoYXJDb2RlKCkKLVN0cmluZ0NvbnN0cnVjdG9yRnVuY3Rpb246OlN0cmluZ0Nv
bnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVu
Y1Byb3RvLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQotICA6IEludGVybmFsRnVuY3Rpb24oZnVu
Y1Byb3RvLCBuYW1lKQorLy8gRUNNQSAxNS41LjEKK3N0YXRpYyBKU1ZhbHVlKiBjYWxsU3RyaW5n
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoZXhlYywgMSksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOworICAg
IGlmIChhcmdzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICIiKTsK
KyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpOwogfQog
Ci1KU1ZhbHVlICpTdHJpbmdDb25zdHJ1Y3RvckZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVj
U3RhdGUgKmV4ZWMsIEpTT2JqZWN0KiAvKnRoaXNPYmoqLywgY29uc3QgQXJnTGlzdCAmYXJncykK
K0NhbGxUeXBlIFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERh
dGEpCiB7Ci0gIFVTdHJpbmcgczsKLSAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgVUNoYXIgKmJ1
ZiA9IHN0YXRpY19jYXN0PFVDaGFyICo+KGZhc3RNYWxsb2MoYXJncy5zaXplKCkgKiBzaXplb2Yo
VUNoYXIpKSk7Ci0gICAgVUNoYXIgKnAgPSBidWY7Ci0gICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gYXJncy5lbmQoKTsKLSAgICBmb3IgKEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgIHVuc2lnbmVkIHNob3J0
IHUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oKCppdCktPnRvVUludDMyKGV4ZWMpKTsK
LSAgICAgICpwKysgPSBVQ2hhcih1KTsKLSAgICB9Ci0gICAgcyA9IFVTdHJpbmcoYnVmLCBhcmdz
LnNpemUoKSwgZmFsc2UpOwotICB9IGVsc2UKLSAgICBzID0gIiI7Ci0KLSAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIHMpOworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxTdHJpbmdD
b25zdHJ1Y3RvcjsKKyAgICByZXR1cm4gQ2FsbFR5cGVOYXRpdmU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCShyZXZpc2lvbiAzNDcz
NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDU3ICs3OSwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgLyoqCiAgICAqIEBpbnRlcm5h
bAogICAgKgotICAgKiBGdW5jdGlvbnMgdG8gaW1wbGVtZW50IGFsbCBtZXRob2RzIHRoYXQgYXJl
IHByb3BlcnRpZXMgb2YgdGhlCi0gICAqIFN0cmluZy5wcm90b3R5cGUgb2JqZWN0Ci0gICAqLwot
Ci0gIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNWYWx1ZU9mKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0g
IEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAg
SlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBK
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNT
cGxpdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlz
dCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvTG93
ZXJDYXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0
IEFyZ0xpc3QmKTsKLSAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2Uo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY1RvTG9jYWxlVXBwZXJDYXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3Qg
QXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotCi0gIEpTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY0JpZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBB
cmdMaXN0Jik7Ci0gIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNCb2xk
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJp
bmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsK
LSAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNTdWIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7Ci0gIEpTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY1N1cChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xp
c3QmKTsKLSAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNGb250
c2l6ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlz
dCYpOwotICBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYpOwotCi0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICoKICAgICog
VGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRoZSBnbG9iYWwgdmFyaWFibGUncyAiU3RyaW5nIiBw
cm9wZXJ0eQogICAgKi8KICAgY2xhc3MgU3RyaW5nQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJu
YWxGdW5jdGlvbiB7CiAgIHB1YmxpYzoKICAgICBTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
LCBGdW5jdGlvblByb3RvdHlwZSosIFN0cmluZ1Byb3RvdHlwZSopOwotCiAgICAgdmlydHVhbCBD
b25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwotICAgIHZpcnR1
YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7Ci0KLSAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENh
bGxEYXRhKENhbGxEYXRhJik7CiAgIH07CiAKICAgLyoqCkBAIC0xNDEsNyArOTcsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgY2xhc3MgU3RyaW5nQ29uc3RydWN0b3JGdW5jdGlvbiA6IHB1YmxpYyBJ
bnRlcm5hbEZ1bmN0aW9uIHsKICAgcHVibGljOgogICAgIFN0cmluZ0NvbnN0cnVjdG9yRnVuY3Rp
b24oRXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0g
ICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncyk7CisgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRD
YWxsRGF0YShDYWxsRGF0YSYpOwogICB9OwogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogSmF2YVNj
cmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMzQ3MzYpCisrKyBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAwOC0wNi0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBKU1ZhbHVlV3JhcHBlci5jcHA6CisgICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6SlNPYmpl
Y3RDYWxsRnVuY3Rpb24pOiBVcGRhdGVkIHRvIHVzZSBnZXRDYWxsRGF0YSBhbmQgY2FsbCBpbnN0
ZWFkCisgICAgICAgIG9mIHRoZSBvbGQgY2FsbEFzRnVuY3Rpb24uCisKIDIwMDgtMDYtMTcgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluLgpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAkocmV2aXNpb24gMzQ3MzYp
CisrKyBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2MCw3ICsxNjAsMTEgQEAgSlNPYmplY3RSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q2Fs
bAogICAgICAgICAgICAgbGlzdEFyZ3MuYXBwZW5kKGtnc0FyZyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBKU1ZhbHVlICpyZXN1bHRWYWx1ZSA9IG9ialZhbHVlLT5jYWxsQXNGdW5jdGlvbihleGVj
LCBrc2pUaGlzT2JqLCBsaXN0QXJncyk7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAg
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9ialZhbHVlLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7
CisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0VmFsdWUgPSBjYWxsKGV4ZWMsIG9ialZhbHVl
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGtzalRoaXNPYmosIGxpc3RBcmdzKTsKICAgICAgICAgSlNW
YWx1ZVdyYXBwZXIqIHdyYXBwZXJWYWx1ZSA9IG5ldyBKU1ZhbHVlV3JhcHBlcihyZXN1bHRWYWx1
ZSk7CiAgICAgICAgIEpTT2JqZWN0Q2FsbEJhY2tzIGNhbGxCYWNrczsKICAgICAgICAgR2V0SlNP
YmVjdENhbGxCYWNrcyhjYWxsQmFja3MpOwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMDcgQEAKKzIwMDgtMDYtMjIgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBmb3IgSmF2YVNjcmlwdCBjaGFuZ2VzLgorCisg
ICAgICAgIC0gVXNlIENhbGxEYXRhIGFuZCBDb25zdHJ1Y3REYXRhIGluc3RlYWQgb2YgdGhlIG9i
c29sZXRlIGltcGxlbWVudHNDYWxsLAorICAgICAgICAgIGNhbGxBc0Z1bmN0aW9uLCBhbmQgY29u
c3RydWN0IGZ1bmN0aW9ucy4KKworICAgICAgICAtIFVwZGF0ZWQgbmF0aXZlIGZ1bmN0aW9uIGFy
Z3VtZW50cywgc3BlY2lmaWNhbGx5IHRvIGFsbG93IGEgSlNWYWx1ZQorICAgICAgICAgIHJhdGhl
ciB0aGFuIGEgSlNPYmplY3QgZm9yIHRoZSB0aGlzIGFyZ3VtZW50LCBhbmQgdG8gY2FsbCB0b1Ro
aXNPYmplY3QKKyAgICAgICAgICBhcyBuZWVkZWQgd2hlbiB0cmVhdGluZyBpdCBhcyBhbiBvYmpl
Y3QuCisKKyAgICAgICAgLSBNYWRlIHNvbWUgbW9yZSBjbGFzcyBtZW1iZXJzIHByaXZhdGUgYW5k
IHByb3RlY3RlZCwgaW5jbHVkaW5nIHZpcnR1YWwKKyAgICAgICAgICBmdW5jdGlvbiBvdmVycmlk
ZXMuCisKKyAgICAgICAgLSBFbGltaW5hdGVkIHRoZSB1c2Ugb2YgZ2V0Q2FsbERhdGEgaW4gdGhl
IEphdmFTY3JpcHQgYnJpZGdpbmcgY29kZSBhcworICAgICAgICAgIGEgd2F5IHRvIGNoZWNrIGlm
IGFuIGluc3RhbmNlIHN1cHBvcnRzIGludm9rZURlZmF1bHRNZXRob2QuCisKKyAgICAgICAgLSBF
bGltaW5hdGVkIHVubmVjZXNzYXJ5IHBvbHltb3JwaGlzbSBpbiB0aGUgTm9kZUl0ZXJhdG9yIGFu
ZCBUcmVlV2Fsa2VyCisgICAgICAgICAgY2xhc3Nlcy4gVGhleSB3ZXJlIHVzaW5nIHZpcnR1YWwg
ZnVuY3Rpb25zIHNpbXBseSB0byBzaGFyZSBhbiBpbnN0YW5jZQorICAgICAgICAgIG9mIHRoZSBS
ZWZDb3VudGVkIHRlbXBsYXRlLCB3aGljaCB3YXMgbm90IGhlbHBmdWwuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29u
c3RydWN0QXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb0NvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQXVkaW9Db25zdHJ1Y3Rvcjo6ZG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNBdWRpb0NvbnN0cnVjdG9yOjpjbGFzc0luZm8pOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q2xpcGJvYXJkOjp0eXBlcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0
ZW1lbnRDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFN0YXRlbWVu
dENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9t
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6
aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tVm9pZENhbGxiYWNrOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFj
ZVVSSSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChX
ZWJDb3JlOjpET01PYmplY3Q6OkRPTU9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd1Byb3RvRnVuY0FUb0Ip
OgorICAgICAgICAoV2ViQ29yZTo6d2luZG93UHJvdG9GdW5jQlRvQSk6CisgICAgICAgIChXZWJD
b3JlOjp3aW5kb3dQcm90b0Z1bmNPcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd1Byb3Rv
RnVuY1NldFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93UHJvdG9GdW5jQ2xlYXJU
aW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd1Byb3RvRnVuY1NldEludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OndpbmRvd1Byb3RvRnVuY0FkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6d2luZG93UHJvdG9GdW5jUmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjp3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAo
V2ViQ29yZTo6d2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KU0RPTVdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50
TGlzdGVuZXI6OnBhcnNlQ29kZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVFdmVudFRhcmdldEFuZENvcnJl
c3BvbmRpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzRXZlbnRUYXJnZXRBZGRFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzRXZlbnRUYXJnZXRSZW1vdmVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzRXZlbnRUYXJnZXREaXNwYXRjaEV2ZW50KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MQXBwbGV0RWxlbWVudDo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTEFwcGxldEVsZW1lbnQ6OmN1c3RvbVB1dCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0hUTUxBcHBsZXRFbGVtZW50OjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxs
SFRNTENvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6Z2V0
Q2FsbERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpvcGVuKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNIVE1MRW1iZWRFbGVtZW50OjpjdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MRW1iZWRFbGVtZW50OjpjdXN0b21QdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNIVE1MRW1iZWRFbGVtZW50OjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc0hU
TUxJbnB1dEVsZW1lbnRCYXNlRnVuY3Rpb25TZXRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MT2JqZWN0RWxlbWVudDo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSFRNTE9iamVjdEVsZW1lbnQ6OmN1c3RvbVB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxPYmplY3RFbGVtZW50OjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnN0cnVjdEhUTUxPcHRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9w
dGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y2xhc3NJbmZvKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29uc3RydWN0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbWFnZUNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29u
c3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW1hZ2VDb25zdHJ1Y3Rvcjo6ZG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpjbGFzc0luZm8pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjpjbGFzc0luZm8pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjpwcmVwYXJlSW5jb21pbmdWYWx1
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVDaGFpbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6bWFyayk6CisgICAg
ICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTm9kZUZpbHRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b05vZGVGaWx0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y2FsbE5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxpc3Q6Omdl
dENhbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxpc3Q6OmNhbkdldEl0ZW1zRm9y
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVMaXN0OjpuYW1lR2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cnVudGltZU9iamVjdEdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1l
T2JqZWN0UHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6cnVudGltZU9iamVjdEN1
c3RvbUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0
Q3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OnJ1bnRpbWVPYmplY3RHZXRDYWxsRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpwbHVnaW5JbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxQbHVnaW4pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6aGFzSW5zdGFuY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmdldENhbGxEYXRhKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNsYXNzTmFtZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNSR0JDb2xvci5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0
cnVjdFhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3RD
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3I6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0
cFJlcXVlc3RDb25zdHJ1Y3Rvcjo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1
Y3RYU0xUUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3NvckNvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hTTFRQ
cm9jZXNzb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29y
Q29uc3RydWN0b3I6OmNsYXNzSW5mbyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1bGVk
QWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVk
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmg6CisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBj
YWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0
LmNwcDoKKyAgICAgICAgKF9OUE5fSW52b2tlRGVmYXVsdCk6CisgICAgICAgIChfTlBOX0ludm9r
ZSk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChLSlM6OkJp
bmRpbmdzOjpDSW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAgICAg
ICogYnJpZGdlL2MvY19pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pzb2Jq
ZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpjYWxsKToKKyAgICAgICAgKiBicmlkZ2Uv
b2JqYy9vYmpjX2luc3RhbmNlLmg6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19pbnN0YW5j
ZS5tbToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9k
KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKEtKUzo6
QmluZGluZ3M6Ok9iamNGYWxsYmFja09iamVjdEltcDo6cHJvcGVydHlOYW1lKToKKyAgICAgICAg
KEtKUzo6QmluZGluZ3M6Ok9iamNGYWxsYmFja09iamVjdEltcDo6Y2xhc3NJbmZvKToKKyAgICAg
ICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChCaW5kaW5nczo6d2Vi
U2NyaXB0T2JqZWN0Q2xhc3MpOgorICAgICAgICAoQmluZGluZ3M6OndlYlVuZGVmaW5lZENsYXNz
KToKKyAgICAgICAgKE9iamNGYWxsYmFja09iamVjdEltcDo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1w
KToKKyAgICAgICAgKGNhbGxPYmpDRmFsbGJhY2tPYmplY3QpOgorICAgICAgICAoT2JqY0ZhbGxi
YWNrT2JqZWN0SW1wOjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3Rh
bmNlLmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWUuY3BwOgorICAgICAgICAoS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QpOgorICAgICAgICAoS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2U6OmdldEluc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZS5o
OgorICAgICAgICAoS0pTOjpCaW5kaW5nczo6RmllbGQ6On5GaWVsZCk6CisgICAgICAgIChLSlM6
OkJpbmRpbmdzOjpNZXRob2Q6On5NZXRob2QpOgorICAgICAgICAoS0pTOjpCaW5kaW5nczo6Q2xh
c3M6On5DbGFzcyk6CisgICAgICAgIChLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6c3VwcG9ydHNJ
bnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3Bw
OgorICAgICAgICAoS0pTOjpjYWxsUnVudGltZU1ldGhvZCk6CisgICAgICAgIChLSlM6OlJ1bnRp
bWVNZXRob2Q6OmdldENhbGxEYXRhKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2Qu
aDoKKyAgICAgICAgKEtKUzo6UnVudGltZU1ldGhvZDo6bWV0aG9kcyk6CisgICAgICAgICogYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKFJ1bnRpbWVPYmplY3RJbXA6OmRlZmF1
bHRWYWx1ZSk6CisgICAgICAgIChjYWxsUnVudGltZU9iamVjdCk6CisgICAgICAgIChSdW50aW1l
T2JqZWN0SW1wOjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0
Lmg6CisgICAgICAgIChLSlM6OlJ1bnRpbWVPYmplY3RJbXA6OmdldEludGVybmFsSW5zdGFuY2Up
OgorICAgICAgICAoS0pTOjpSdW50aW1lT2JqZWN0SW1wOjpjbGFzc0luZm8pOgorICAgICAgICAq
IGRvbS9Ob2RlSXRlcmF0b3IuaDoKKyAgICAgICAgKiBkb20vVHJhdmVyc2FsLmNwcDoKKyAgICAg
ICAgKiBkb20vVHJhdmVyc2FsLmg6CisgICAgICAgICogZG9tL1RyZWVXYWxrZXIuaDoKKwogMjAw
OC0wNi0yMiAgSm9uYXRob24gSm9uZ3NtYSAgPGpvbmF0aG9uLmpvbmdzbWFAY29sbGFib3JhLmNv
LnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUo
VklERU8pCisKICNpbmNsdWRlICJKU0F1ZGlvQ29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCkBAIC00NiwyNiArNDcsMjIgQEAgSlNBdWRpb0NvbnN0cnVjdG9yOjpKU0F1ZGlv
Q29uc3RydWN0b3IoRQogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CiAK
LUNvbnN0cnVjdFR5cGUgSlNBdWRpb0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0
cnVjdERhdGEmKQorc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RBdWRpbyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBy
ZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKLX0KKyAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3Qg
dGhpcyBuZWVkIHRoZSBjYWxsIHRvSlMgb24gdGhlIGRvY3VtZW50IGxpa2UgSlNJbWFnZUNvbnN0
cnVjdG9yPwogCi1KU09iamVjdCogSlNBdWRpb0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZXhj
ZXB0aW9uID0gMDsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQtPmNy
ZWF0ZUVsZW1lbnQoImF1ZGlvIiwgZXhjZXB0aW9uKTsKLSAgICBIVE1MQXVkaW9FbGVtZW50KiBh
dWRpbyA9IDA7Ci0gICAgaWYgKGVsZW1lbnQgJiYgIWV4Y2VwdGlvbikgewotICAgICAgICBhdWRp
byA9IHN0YXRpY19jYXN0PEhUTUxBdWRpb0VsZW1lbnQqPihlbGVtZW50LmdldCgpKTsKLSAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgYXVkaW8tPnNldFNyYyhhcmdz
WzBdLT50b1N0cmluZyhleGVjKSk7Ci0gICAgICAgICAgICBhdWRpby0+c2NoZWR1bGVMb2FkKCk7
Ci0gICAgICAgIH0KKyAgICBSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gYXVkaW8gPSBuZXcgSFRN
TEF1ZGlvRWxlbWVudChzdGF0aWNfY2FzdDxKU0F1ZGlvQ29uc3RydWN0b3IqPihjb25zdHJ1Y3Rv
ciktPmRvY3VtZW50KCkpOworICAgIGlmIChhcmdzLnNpemUoKSA+IDApIHsKKyAgICAgICAgYXVk
aW8tPnNldFNyYyhhcmdzWzBdLT50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGF1ZGlvLT5zY2hl
ZHVsZUxvYWQoKTsKICAgICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odG9K
UyhleGVjLCBhdWRpby5yZWxlYXNlKCkpKTsKK30KIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHRvSlMoZXhl
YywgYXVkaW8pKTsKK0NvbnN0cnVjdFR5cGUgSlNBdWRpb0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1
Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBdWRpbzsKKyAgICByZXR1cm4gQ29uc3RydWN0
VHlwZU5hdGl2ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDE3ICszNywyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBK
U0F1ZGlvQ29uc3RydWN0b3IoS0pTOjpFeGVjU3RhdGUqLCBEb2N1bWVudCopOwogCi0gICAgICAg
IHZpcnR1YWwgS0pTOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoS0pTOjpDb25zdHJ1
Y3REYXRhJik7Ci0gICAgICAgIHZpcnR1YWwgS0pTOjpKU09iamVjdCogY29uc3RydWN0KEtKUzo6
RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7CisgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0
dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19p
bmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBzX2luZm87CiAKICAg
ICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIEtKUzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1
Y3REYXRhKEtKUzo6Q29uc3RydWN0RGF0YSYpOworCisgICAgICAgIHZpcnR1YWwgY29uc3QgS0pT
OjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKwogICAg
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCiAjZW5kaWYgLy8gSlNBdWRp
b0NvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0
b20uY3BwCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9h
cmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEpTVmFsdWUqIEpT
Q2xpcGJvYXJkOjp0eXBlcyhFeGVjU3RhdGUqIGUKICAgICBIYXNoU2V0PFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAg
ICAgbGlzdC5hcHBlbmQoanNTdHJpbmcoZXhlYywgVVN0cmluZygqaXQpKSk7Ci0gICAgcmV0dXJu
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5jb25zdHJ1
Y3QoZXhlYywgbGlzdCk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGxpc3QpOwog
fQogCiBKU1ZhbHVlKiBKU0NsaXBib2FyZDo6Y2xlYXJEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxT
dGF0ZW1lbnRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MCwxNyArNjAsMTYgQEAgdm9pZCBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxi
YWNrOjpoYW5kbAogICAgICAgICAKICAgICBLSlM6OkpTTG9jayBsb2NrOwogICAgICAgICAKLSAg
ICBKU1ZhbHVlKiBoYW5kbGVFdmVudEZ1bmNWYWx1ZSA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKLSAgICBKU09iamVjdCogaGFuZGxlRXZl
bnRGdW5jID0gMDsKLSAgICBpZiAoaGFuZGxlRXZlbnRGdW5jVmFsdWUtPmlzT2JqZWN0KCkpIHsK
LSAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihoYW5kbGVF
dmVudEZ1bmNWYWx1ZSk7Ci0gICAgICAgIGlmICghaGFuZGxlRXZlbnRGdW5jLT5pbXBsZW1lbnRz
Q2FsbCgpKQotICAgICAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gMDsKLSAgICB9Ci0gICAgICAg
IAotICAgIGlmICghaGFuZGxlRXZlbnRGdW5jICYmICFtX2NhbGxiYWNrLT5pbXBsZW1lbnRzQ2Fs
bCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYW4gZXhjZXB0aW9uIGJlIHRocm93biBo
ZXJlPwotICAgICAgICByZXR1cm47CisgICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBtX2NhbGxiYWNr
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERh
dGEoY2FsbERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAg
ICAgY2FsbFR5cGUgPSBtX2NhbGxiYWNrLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgYW4gZXhjZXB0aW9uIGJlIHRocm93biBoZXJlPworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uID0gbV9jYWxsYmFjazsKICAgICB9CiAgICAgICAg
IAogICAgIFJlZlB0cjxKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrPiBwcm90ZWN0KHRoaXMp
OwpAQCAtODAsMTAgKzc5LDcgQEAgdm9pZCBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpo
YW5kbAogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0U2V0KSk7CiAgICAgICAgIAog
ICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICBpZiAoaGFuZGxlRXZl
bnRGdW5jKQotICAgICAgICBoYW5kbGVFdmVudEZ1bmMtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIG1f
Y2FsbGJhY2ssIGFyZ3MpOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsYmFjay0+Y2FsbEFzRnVu
Y3Rpb24oZXhlYywgbV9jYWxsYmFjaywgYXJncyk7CisgICAgY2FsbChleGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBtX2NhbGxiYWNrLCBhcmdzKTsKICAgICBnbG9iYWxPYmplY3Qt
PnN0b3BUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsMTcgKzYwLDE4IEBAIGJvb2wgSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrOjoKICAgICAgICAgCiAgICAgS0pTOjpKU0xvY2sgbG9jazsKICAgICAgICAg
Ci0gICAgSlNWYWx1ZSogaGFuZGxlRXZlbnRGdW5jVmFsdWUgPSBtX2NhbGxiYWNrLT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7Ci0gICAgSlNPYmplY3QqIGhhbmRs
ZUV2ZW50RnVuYyA9IDA7Ci0gICAgaWYgKGhhbmRsZUV2ZW50RnVuY1ZhbHVlLT5pc09iamVjdCgp
KSB7Ci0gICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oaGFu
ZGxlRXZlbnRGdW5jVmFsdWUpOwotICAgICAgICBpZiAoIWhhbmRsZUV2ZW50RnVuYy0+aW1wbGVt
ZW50c0NhbGwoKSkKLSAgICAgICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IDA7Ci0gICAgfQotICAg
ICAgICAKLSAgICBpZiAoIWhhbmRsZUV2ZW50RnVuYyAmJiAhbV9jYWxsYmFjay0+aW1wbGVtZW50
c0NhbGwoKSkgewotICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGFuIGV4Y2VwdGlvbiBiZSB0aHJv
d24gaGVyZT8KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSogaGFuZGxlRXZlbnRG
dW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVF
dmVudCIpKTsKKyAgICBDYWxsRGF0YSBoYW5kbGVFdmVudENhbGxEYXRhOworICAgIENhbGxUeXBl
IGhhbmRsZUV2ZW50Q2FsbFR5cGUgPSBoYW5kbGVFdmVudEZ1bmN0aW9uLT5nZXRDYWxsRGF0YSho
YW5kbGVFdmVudENhbGxEYXRhKTsKKyAgICBDYWxsRGF0YSBjYWxsYmFja0NhbGxEYXRhOworICAg
IENhbGxUeXBlIGNhbGxiYWNrQ2FsbFR5cGU7CisKKyAgICBpZiAoaGFuZGxlRXZlbnRDYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgY2FsbGJhY2tDYWxsVHlwZSA9IG1fY2FsbGJh
Y2stPmdldENhbGxEYXRhKGNhbGxiYWNrQ2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbGJhY2tD
YWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
YW4gZXhjZXB0aW9uIGJlIHRocm93biBoZXJlPworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgICAgIAogICAgIFJlZlB0cjxKU0N1c3RvbVNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CkBAIC03OSwxMiArODAsMTIgQEAgYm9vbCBK
U0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OgogICAgIGFyZ3MuYXBwZW5kKHRvSlMo
ZXhlYywgdHJhbnNhY3Rpb24pKTsKICAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGVycm9yKSk7
CiAgICAgICAgIAotICAgIEpTVmFsdWUgKnJlc3VsdDsKKyAgICBKU1ZhbHVlKiByZXN1bHQ7CiAg
ICAgZ2xvYmFsT2JqZWN0LT5zdGFydFRpbWVvdXRDaGVjaygpOwotICAgIGlmIChoYW5kbGVFdmVu
dEZ1bmMpCi0gICAgICAgIHJlc3VsdCA9IGhhbmRsZUV2ZW50RnVuYy0+Y2FsbEFzRnVuY3Rpb24o
ZXhlYywgbV9jYWxsYmFjaywgYXJncyk7CisgICAgaWYgKGhhbmRsZUV2ZW50Q2FsbFR5cGUgIT0g
Q2FsbFR5cGVOb25lKQorICAgICAgICByZXN1bHQgPSBjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVu
Y3Rpb24sIGhhbmRsZUV2ZW50Q2FsbFR5cGUsIGhhbmRsZUV2ZW50Q2FsbERhdGEsIG1fY2FsbGJh
Y2ssIGFyZ3MpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbV9jYWxsYmFjay0+Y2FsbEFz
RnVuY3Rpb24oZXhlYywgbV9jYWxsYmFjaywgYXJncyk7CisgICAgICAgIHJlc3VsdCA9IGNhbGwo
ZXhlYywgbV9jYWxsYmFjaywgY2FsbGJhY2tDYWxsVHlwZSwgY2FsbGJhY2tDYWxsRGF0YSwgbV9j
YWxsYmFjaywgYXJncyk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAg
ICAgICAgIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNw
cAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNyArMTE0LDE4IEBA
IHZvaWQgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpoYW4KICAgICAgICAgCiAgICAg
S0pTOjpKU0xvY2sgbG9jazsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogaGFuZGxlRXZlbnRGdW5j
VmFsdWUgPSBtX2RhdGEtPmNhbGxiYWNrKCktPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJo
YW5kbGVFdmVudCIpKTsKLSAgICBKU09iamVjdCogaGFuZGxlRXZlbnRGdW5jID0gMDsKLSAgICBp
ZiAoaGFuZGxlRXZlbnRGdW5jVmFsdWUtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgaGFuZGxlRXZl
bnRGdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihoYW5kbGVFdmVudEZ1bmNWYWx1ZSk7Ci0g
ICAgICAgIGlmICghaGFuZGxlRXZlbnRGdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAgICAgICAg
ICAgaGFuZGxlRXZlbnRGdW5jID0gMDsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmICghaGFuZGxl
RXZlbnRGdW5jICYmICFtX2RhdGEtPmNhbGxiYWNrKCktPmltcGxlbWVudHNDYWxsKCkpIHsKLSAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCBhbiBleGNlcHRpb24gYmUgdGhyb3duIGhlcmU/Ci0gICAg
ICAgIHJldHVybjsKKyAgICBKU1ZhbHVlKiBoYW5kbGVFdmVudEZ1bmN0aW9uID0gbV9kYXRhLT5j
YWxsYmFjaygpLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7Cisg
ICAgQ2FsbERhdGEgaGFuZGxlRXZlbnRDYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBoYW5kbGVFdmVu
dENhbGxUeXBlID0gaGFuZGxlRXZlbnRGdW5jdGlvbi0+Z2V0Q2FsbERhdGEoaGFuZGxlRXZlbnRD
YWxsRGF0YSk7CisgICAgQ2FsbERhdGEgY2FsbGJhY2tDYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBj
YWxsYmFja0NhbGxUeXBlOworCisgICAgaWYgKGhhbmRsZUV2ZW50Q2FsbFR5cGUgPT0gQ2FsbFR5
cGVOb25lKSB7CisgICAgICAgIGNhbGxiYWNrQ2FsbFR5cGUgPSBtX2RhdGEtPmNhbGxiYWNrKCkt
PmdldENhbGxEYXRhKGNhbGxiYWNrQ2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbGJhY2tDYWxs
VHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYW4g
ZXhjZXB0aW9uIGJlIHRocm93biBoZXJlPworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAgICAgfQogICAgICAgICAKICAgICBSZWZQdHI8SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxi
YWNrPiBwcm90ZWN0KHRoaXMpOwpAQCAtMTMzLDEwICsxMzQsMTAgQEAgdm9pZCBKU0N1c3RvbVNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbgogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgdHJh
bnNhY3Rpb24pKTsKIAogICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAg
ICBpZiAoaGFuZGxlRXZlbnRGdW5jKQotICAgICAgICBoYW5kbGVFdmVudEZ1bmMtPmNhbGxBc0Z1
bmN0aW9uKGV4ZWMsIG1fZGF0YS0+Y2FsbGJhY2soKSwgYXJncyk7CisgICAgaWYgKGhhbmRsZUV2
ZW50Q2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICBjYWxsKGV4ZWMsIGhhbmRsZUV2
ZW50RnVuY3Rpb24sIGhhbmRsZUV2ZW50Q2FsbFR5cGUsIGhhbmRsZUV2ZW50Q2FsbERhdGEsIG1f
ZGF0YS0+Y2FsbGJhY2soKSwgYXJncyk7CiAgICAgZWxzZQotICAgICAgICBtX2RhdGEtPmNhbGxi
YWNrKCktPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIG1fZGF0YS0+Y2FsbGJhY2soKSwgYXJncyk7Cisg
ICAgICAgIGNhbGwoZXhlYywgbV9kYXRhLT5jYWxsYmFjaygpLCBjYWxsYmFja0NhbGxUeXBlLCBj
YWxsYmFja0NhbGxEYXRhLCBtX2RhdGEtPmNhbGxiYWNrKCksIGFyZ3MpOwogICAgIGdsb2JhbE9i
amVjdC0+c3RvcFRpbWVvdXRDaGVjaygpOwogICAgICAgICAKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAzNDczNikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxOSArNTksMTggQEAgYm9vbCBKU0N1c3RvbVNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjawogICAgICAgICAKICAgICBLSlM6OkpTTG9jayBsb2Nr
OwogICAgICAgICAKLSAgICBKU1ZhbHVlKiBoYW5kbGVFdmVudEZ1bmNWYWx1ZSA9IG1fY2FsbGJh
Y2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKLSAgICBKU09i
amVjdCogaGFuZGxlRXZlbnRGdW5jID0gMDsKLSAgICBpZiAoaGFuZGxlRXZlbnRGdW5jVmFsdWUt
PmlzT2JqZWN0KCkpIHsKLSAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihoYW5kbGVFdmVudEZ1bmNWYWx1ZSk7Ci0gICAgICAgIGlmICghaGFuZGxlRXZlbnRG
dW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAgICAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gMDsK
KyAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgeworICAgICAgICBjYWxsVHlwZSA9IG1fY2FsbGJh
Y2stPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBhbiBleGNlcHRpb24gYmUg
dGhyb3duIGhlcmU/CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBmdW5jdGlvbiA9IG1fY2FsbGJhY2s7CiAgICAgfQotICAgICAgICAKLSAgICBpZiAoIWhhbmRs
ZUV2ZW50RnVuYyAmJiAhbV9jYWxsYmFjay0+aW1wbGVtZW50c0NhbGwoKSkgewotICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIGFuIGV4Y2VwdGlvbiBiZSB0aHJvd24gaGVyZT8KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgICAgICAKKwogICAgIFJlZlB0cjxKU0N1c3RvbVNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKICAgICAgICAgCiAgICAgQXJnTGlz
dCBhcmdzOwpAQCAtNzksMTAgKzc4LDcgQEAgYm9vbCBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjawogCiAgICAgSlNWYWx1ZSAqcmVzdWx0OwogICAgIGdsb2JhbE9iamVjdC0+c3Rh
cnRUaW1lb3V0Q2hlY2soKTsKLSAgICBpZiAoaGFuZGxlRXZlbnRGdW5jKQotICAgICAgICByZXN1
bHQgPSBoYW5kbGVFdmVudEZ1bmMtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIG1fY2FsbGJhY2ssIGFy
Z3MpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbV9jYWxsYmFjay0+Y2FsbEFzRnVuY3Rp
b24oZXhlYywgbV9jYWxsYmFjaywgYXJncyk7CisgICAgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2NhbGxiYWNrLCBhcmdzKTsKICAgICBnbG9iYWxP
YmplY3QtPnN0b3BUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxi
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENh
bGxiYWNrLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tVm9pZENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTcgKzYwLDE2IEBAIHZv
aWQgSlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KCkKICAgICAgICAgCiAgICAgS0pT
OjpKU0xvY2sgbG9jazsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogaGFuZGxlRXZlbnRGdW5jVmFs
dWUgPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQi
KSk7Ci0gICAgSlNPYmplY3QqIGhhbmRsZUV2ZW50RnVuYyA9IDA7Ci0gICAgaWYgKGhhbmRsZUV2
ZW50RnVuY1ZhbHVlLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IHN0
YXRpY19jYXN0PEpTT2JqZWN0Kj4oaGFuZGxlRXZlbnRGdW5jVmFsdWUpOwotICAgICAgICBpZiAo
IWhhbmRsZUV2ZW50RnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgICAgIGhhbmRsZUV2
ZW50RnVuYyA9IDA7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoIWhhbmRsZUV2ZW50RnVuYyAm
JiAhbV9jYWxsYmFjay0+aW1wbGVtZW50c0NhbGwoKSkgewotICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIGFuIGV4Y2VwdGlvbiBiZSB0aHJvd24gaGVyZT8KLSAgICAgICAgcmV0dXJuOworICAgIEpT
VmFsdWUqIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywg
ImhhbmRsZUV2ZW50IikpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgIGNhbGxUeXBlID0gbV9jYWxsYmFjay0+Z2V0
Q2FsbERhdGEoY2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25l
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGFuIGV4Y2VwdGlvbiBiZSB0aHJvd24g
aGVyZT8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiA9
IG1fY2FsbGJhY2s7CiAgICAgfQogICAgICAgICAKICAgICBSZWZQdHI8SlNDdXN0b21Wb2lkQ2Fs
bGJhY2s+IHByb3RlY3QodGhpcyk7CkBAIC03OCwxMCArNzcsNyBAQCB2b2lkIEpTQ3VzdG9tVm9p
ZENhbGxiYWNrOjpoYW5kbGVFdmVudCgpCiAgICAgQXJnTGlzdCBhcmdzOwogICAgIAogICAgIGds
b2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICBpZiAoaGFuZGxlRXZlbnRGdW5j
KQotICAgICAgICBoYW5kbGVFdmVudEZ1bmMtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIG1fY2FsbGJh
Y2ssIGFyZ3MpOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsYmFjay0+Y2FsbEFzRnVuY3Rpb24o
ZXhlYywgbV9jYWxsYmFjaywgYXJncyk7CisgICAgY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBtX2NhbGxiYWNrLCBhcmdzKTsKICAgICBnbG9iYWxPYmplY3QtPnN0b3BU
aW1lb3V0Q2hlY2soKTsKICAgICAgICAgCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTggKzgwLDE3IEBAIFN0cmlu
ZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpOwogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKLSAg
ICBKU1ZhbHVlKiBsb29rdXBOYW1lc3BhY2VVUklGdW5jVmFsdWUgPSBtX2N1c3RvbVJlc29sdmVy
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibG9va3VwTmFtZXNwYWNlVVJJIikpOwotICAg
IEpTT2JqZWN0KiBsb29rdXBOYW1lc3BhY2VVUklGdW5jID0gMDsKLSAgICBpZiAobG9va3VwTmFt
ZXNwYWNlVVJJRnVuY1ZhbHVlLT5pc09iamVjdCgpKSB7ICAgICAgCi0gICAgICAgIGxvb2t1cE5h
bWVzcGFjZVVSSUZ1bmMgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGxvb2t1cE5hbWVzcGFjZVVS
SUZ1bmNWYWx1ZSk7Ci0gICAgICAgIGlmICghbG9va3VwTmFtZXNwYWNlVVJJRnVuYy0+aW1wbGVt
ZW50c0NhbGwoKSkKLSAgICAgICAgICAgIGxvb2t1cE5hbWVzcGFjZVVSSUZ1bmMgPSAwOwotICAg
IH0KLQotICAgIGlmICghbG9va3VwTmFtZXNwYWNlVVJJRnVuYyAmJiAhbV9jdXN0b21SZXNvbHZl
ci0+aW1wbGVtZW50c0NhbGwoKSkgewotICAgICAgICAvLyBGSVhNRTogcGFzcyBhY3R1YWwgbGlu
ZSBudW1iZXIgYW5kIHNvdXJjZSBVUkwuCi0gICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5j
b25zb2xlKCktPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
IlhQYXRoTlNSZXNvbHZlciBkb2VzIG5vdCBoYXZlIGEgbG9va3VwTmFtZXNwYWNlVVJJIG1ldGhv
ZC4iLCAwLCBTdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBKU1ZhbHVl
KiBmdW5jdGlvbiA9IG1fY3VzdG9tUmVzb2x2ZXItPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJsb29rdXBOYW1lc3BhY2VVUkkiKSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOworICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgY2FsbFR5cGUgPSBtX2N1c3Rv
bVJlc29sdmVyLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQYXNzIGFjdHVhbCBsaW5l
IG51bWJlciBhbmQgc291cmNlIFVSTC4KKyAgICAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygp
LT5jb25zb2xlKCktPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZl
bCwgIlhQYXRoTlNSZXNvbHZlciBkb2VzIG5vdCBoYXZlIGEgbG9va3VwTmFtZXNwYWNlVVJJIG1l
dGhvZC4iLCAwLCBTdHJpbmcoKSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZnVuY3Rpb24gPSBtX2N1c3RvbVJlc29sdmVyOwogICAgIH0KIAogICAg
IFJlZlB0cjxKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcj4gc2VsZlByb3RlY3Rvcih0aGlzKTsKQEAg
LTk5LDE1ICs5OCwxMSBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5h
CiAgICAgQXJnTGlzdCBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHByZWZp
eCkpOwogCi0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBKU1ZhbHVlKiByZXR2YWw7CiAgICAgZ2xv
YmFsT2JqZWN0LT5zdGFydFRpbWVvdXRDaGVjaygpOwotICAgIGlmIChsb29rdXBOYW1lc3BhY2VV
UklGdW5jKQotICAgICAgICByZXR2YWwgPSBsb29rdXBOYW1lc3BhY2VVUklGdW5jLT5jYWxsQXNG
dW5jdGlvbihleGVjLCBtX2N1c3RvbVJlc29sdmVyLCBhcmdzKTsKLSAgICBlbHNlCi0gICAgICAg
IHJldHZhbCA9IG1fY3VzdG9tUmVzb2x2ZXItPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIG1fY3VzdG9t
UmVzb2x2ZXIsIGFyZ3MpOworICAgIEpTVmFsdWUqIHJldHZhbCA9IGNhbGwoZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlciwgYXJncyk7CiAgICAgZ2xv
YmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAKKyAgICBTdHJpbmcgcmVzdWx0OwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBKU09iamVjdCogZXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCktPnRvT2JqZWN0KGV4ZWMpOwogICAgICAgICBTdHJpbmcgbWVz
c2FnZSA9IGV4Y2VwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdl
KS0+dG9TdHJpbmcoZXhlYyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJl
dmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8g
QmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgaW4gdGhpcyBiaW5kaW5nIGV4Y2VwdCBXaW5kb3cu
CiAgICAgY2xhc3MgRE9NT2JqZWN0IDogcHVibGljIEtKUzo6SlNPYmplY3QgewogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgZXhwbGljaXQgRE9NT2JqZWN0KEtKUzo6SlNWYWx1ZSogcHJvdG90eXBl
KSAvLyBGSVhNRTogdGhpcyBzaG91bGQgdGFrZSBhIEpTT2JqZWN0IG9uY2UgSlNMb2NhdGlvbiBo
YXMgYSByZWFsIHByb3RvdHlwZQorICAgICAgICBleHBsaWNpdCBET01PYmplY3QoS0pTOjpKU1Zh
bHVlKiBwcm90b3R5cGUpIC8vIEZJWE1FOiBUaGlzIGNvdWxkIHRha2UgYSBKU09iamVjdCBpZiBK
U0RPTVdpbmRvd1NoZWxsIGhhZCBhIHByb3RvdHlwZS4KICAgICAgICAgICAgIDogSlNPYmplY3Qo
cHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTU0LDkgKzU0LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdmlydHVhbCB+RE9NT2JqZWN0
KCk7CiAjZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIERPTU9iamVjdCgpOwogICAgIH07
CiAKICAgICBjbGFzcyBTY3JpcHRJbnRlcnByZXRlciA6IHB1YmxpYyBLSlM6OkludGVycHJldGVy
IHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9u
IDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NywxMiArNjcsMjcgQEAKICNpbmNsdWRlICJKU1hTTFRQcm9jZXNzb3JD
b25zdHJ1Y3Rvci5oIgogI2VuZGlmCiAKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UubHV0Lmgi
Ci0KIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGlj
IEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY0FUb0IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY0JU
b0EoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY09wZW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVu
Y1NldFRpbWVvdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY0NsZWFyVGltZW91dChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZSogd2luZG93UHJvdG9GdW5jU2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY0Fk
ZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1JlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSogd2lu
ZG93UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOworCit9CisKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UubHV0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7
CiAKIHN0YXRpYyBpbnQgbGFzdFVzZWRUaW1lb3V0SWQ7CkBAIC0xMTksNyArMTM0LDcgQEAgcHJp
dmF0ZToKIGNvbnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd0Jhc2U6OnNfaW5mbyA9IHsgIldpbmRv
dyIsIDAsICZKU0RPTVdpbmRvd0Jhc2VUYWJsZSwgMCB9OwogCiAvKgotQGJlZ2luIEpTRE9NV2lu
ZG93QmFzZVRhYmxlIDExOAorQGJlZ2luIEpTRE9NV2luZG93QmFzZVRhYmxlCiAjIC0tIEZ1bmN0
aW9ucyAtLQogICBhdG9iICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6d2luZG93UHJvdG9GdW5j
QVRvQiAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCiAgIGJ0b2EgICAgICAg
ICAgICAgICAgICBXZWJDb3JlOjp3aW5kb3dQcm90b0Z1bmNCVG9BICAgICAgICAgICAgICAgICBE
b250RGVsZXRlfEZ1bmN0aW9uIDEKQEAgLTg4NywxMiArOTAyLDExIEBAIEpTRE9NV2luZG93U2hl
bGwqIEpTRE9NV2luZG93QmFzZTo6c2hlbGwKICAgICByZXR1cm4gZC0+bV9zaGVsbDsKIH0KIAot
SlNWYWx1ZSogd2luZG93UHJvdG9GdW5jQVRvQihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jQVRv
QihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewotICAgIEFTU0VSVCghdGhpc09iai0+aW5oZXJpdHMoJkpTRE9NV2lu
ZG93OjpzX2luZm8pKTsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU0RPTVdpbmRvd1No
ZWxsOjpzX2luZm8pKQorICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHRo
aXNWYWx1ZSk7CisgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7Ci0gICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PEpT
RE9NV2luZG93U2hlbGwqPih0aGlzT2JqKS0+d2luZG93KCk7CiAgICAgaWYgKCF3aW5kb3ctPmFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCkBA
IC05MjAsMTIgKzkzNCwxMSBAQCBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNBVG9CKEV4ZWNTdGF0
ZSogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhvdXQuZGF0YSgpLCBvdXQuc2l6
ZSgpKSk7CiB9CiAKLUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY0JUb0EoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIHdpbmRv
d1Byb3RvRnVuY0JUb0EoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBBU1NFUlQoIXRoaXNPYmotPmluaGVy
aXRzKCZKU0RPTVdpbmRvdzo6c19pbmZvKSk7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
SlNET01XaW5kb3dTaGVsbDo6c19pbmZvKSkKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9K
U0RPTVdpbmRvdyh0aGlzVmFsdWUpOworICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBz
dGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4odGhpc09iaiktPndpbmRvdygpOwogICAgIGlm
ICghd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIApAQCAtOTUyLDEyICs5NjUsMTEgQEAgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5j
QlRvQShFeGVjU3RhdGUqIAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcob3V0LmRh
dGEoKSwgb3V0LnNpemUoKSkpOwogfQogCi1KU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNPcGVuKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNPcGVuKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgQVNTRVJUKCF0
aGlzT2JqLT5pbmhlcml0cygmSlNET01XaW5kb3c6OnNfaW5mbykpOwotICAgIGlmICghdGhpc09i
ai0+aW5oZXJpdHMoJkpTRE9NV2luZG93U2hlbGw6OnNfaW5mbykpCisgICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IHRvSlNET01XaW5kb3codGhpc1ZhbHVlKTsKKyAgICBpZiAoIXdpbmRvdykKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICBKU0RPTVdpbmRv
dyogd2luZG93ID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KHRoaXNPYmopLT53aW5k
b3coKTsKICAgICBpZiAoIXdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAgLTEwMjMsMzQgKzEwMzUsMjggQEAgSlNWYWx1ZSog
d2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUqIAogICAgIHJldHVybiB0b0pTKGV4ZWMsIGZy
YW1lLT5kb21XaW5kb3coKSk7IC8vIGdsb2JhbCBvYmplY3QKIH0KIAotSlNWYWx1ZSogd2luZG93
UHJvdG9GdW5jU2V0VGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jU2V0VGltZW91dChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewotICAgIEFTU0VSVCghdGhpc09iai0+aW5oZXJpdHMoJkpTRE9NV2luZG93
OjpzX2luZm8pKTsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU0RPTVdpbmRvd1NoZWxs
OjpzX2luZm8pKQorICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHRoaXNW
YWx1ZSk7CisgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7Ci0gICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PEpTRE9N
V2luZG93U2hlbGwqPih0aGlzT2JqKS0+d2luZG93KCk7CiAgICAgaWYgKCF3aW5kb3ctPmFsbG93
c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
SlNWYWx1ZSogdiA9IGFyZ3NbMF07CiAgICAgaWYgKHYtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJl
dHVybiBqc051bWJlcihleGVjLCB3aW5kb3ctPmluc3RhbGxUaW1lb3V0KHYtPnRvU3RyaW5nKGV4
ZWMpLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpLCB0cnVlIC8qc2luZ2xlIHNob3QqLykpOwotICAg
IGlmICh2LT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPmltcGxlbWVu
dHNDYWxsKCkpIHsKLSAgICAgICAgQXJnTGlzdCBhcmdzVGFpbDsKLSAgICAgICAgYXJncy5nZXRT
bGljZSgyLCBhcmdzVGFpbCk7Ci0gICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5kb3ct
Pmluc3RhbGxUaW1lb3V0KHYsIGFyZ3NUYWlsLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpLCB0cnVl
IC8qc2luZ2xlIHNob3QqLykpOwotICAgIH0KLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIEFyZ0xpc3QgYXJnc1RhaWw7CisgICAgYXJncy5nZXRTbGljZSgyLCBhcmdzVGFpbCk7Cisg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHdpbmRvdy0+aW5zdGFsbFRpbWVvdXQodiwgYXJnc1Rh
aWwsIGFyZ3NbMV0tPnRvSW50MzIoZXhlYyksIHRydWUgLypzaW5nbGUgc2hvdCovKSk7CiB9CiAK
LUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY0NsZWFyVGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogd2luZG93UHJv
dG9GdW5jQ2xlYXJUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gQWxzbyB0aGUgaW1wbGVt
ZW50YXRpb24gZm9yIHdpbmRvdy5jbGVhckludGVydmFsKCkKLSAgICBBU1NFUlQoIXRoaXNPYmot
PmluaGVyaXRzKCZKU0RPTVdpbmRvdzo6c19pbmZvKSk7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmSlNET01XaW5kb3dTaGVsbDo6c19pbmZvKSkKKyAgICBKU0RPTVdpbmRvdyogd2luZG93
ID0gdG9KU0RPTVdpbmRvdyh0aGlzVmFsdWUpOworICAgIGlmICghd2luZG93KQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIEpTRE9NV2luZG93KiB3aW5k
b3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4odGhpc09iaiktPndpbmRvdygpOwog
ICAgIGlmICghd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIApAQCAtMTA1OCwxMiArMTA2NCwxMSBAQCBKU1ZhbHVlKiB3aW5kb3dQ
cm90b0Z1bmNDbGVhclRpbWVvdXQoRXhlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1NldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiB3aW5kb3dQcm90
b0Z1bmNTZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEFTU0VSVCghdGhpc09iai0+aW5o
ZXJpdHMoJkpTRE9NV2luZG93OjpzX2luZm8pKTsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQorICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0
b0pTRE9NV2luZG93KHRoaXNWYWx1ZSk7CisgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgSlNET01XaW5kb3cqIHdpbmRvdyA9
IHN0YXRpY19jYXN0PEpTRE9NV2luZG93U2hlbGwqPih0aGlzT2JqKS0+d2luZG93KCk7CiAgICAg
aWYgKCF3aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCkBAIC0xMDcyLDIzICsxMDc3LDIwIEBAIEpTVmFsdWUqIHdpbmRvd1Byb3Rv
RnVuY1NldEludGVydmFsKEV4ZWMKICAgICAgICAgaW50IGRlbGF5ID0gYXJnc1sxXS0+dG9JbnQz
MihleGVjKTsKICAgICAgICAgaWYgKHYtPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgd2luZG93LT5pbnN0YWxsVGltZW91dCh2LT50b1N0cmluZyhleGVjKSwg
ZGVsYXksIGZhbHNlKSk7Ci0gICAgICAgIGlmICh2LT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0
PEpTT2JqZWN0Kj4odiktPmltcGxlbWVudHNDYWxsKCkpIHsKLSAgICAgICAgICAgIEFyZ0xpc3Qg
YXJnc1RhaWw7Ci0gICAgICAgICAgICBhcmdzLmdldFNsaWNlKDIsIGFyZ3NUYWlsKTsKLSAgICAg
ICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5kb3ctPmluc3RhbGxUaW1lb3V0KHYsIGFy
Z3NUYWlsLCBkZWxheSwgZmFsc2UpKTsKLSAgICAgICAgfQorICAgICAgICBBcmdMaXN0IGFyZ3NU
YWlsOworICAgICAgICBhcmdzLmdldFNsaWNlKDIsIGFyZ3NUYWlsKTsKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIHdpbmRvdy0+aW5zdGFsbFRpbWVvdXQodiwgYXJnc1RhaWwsIGRlbGF5
LCBmYWxzZSkpOwogICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiB9CiAKLUpT
VmFsdWUqIHdpbmRvd1Byb3RvRnVuY0FkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIHdpbmRvd1By
b3RvRnVuY0FkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBBU1NFUlQoIXRoaXNP
YmotPmluaGVyaXRzKCZKU0RPTVdpbmRvdzo6c19pbmZvKSk7Ci0gICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmSlNET01XaW5kb3dTaGVsbDo6c19pbmZvKSkKKyAgICBKU0RPTVdpbmRvdyogd2lu
ZG93ID0gdG9KU0RPTVdpbmRvdyh0aGlzVmFsdWUpOworICAgIGlmICghd2luZG93KQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIEpTRE9NV2luZG93KiB3
aW5kb3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4odGhpc09iaiktPndpbmRvdygp
OwogICAgIGlmICghd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMTEwNCwxMiArMTEwNiwxMSBAQCBKU1ZhbHVlKiB3aW5k
b3dQcm90b0Z1bmNBZGRFdmVudExpc3RlbmVyCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1JlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUq
IHdpbmRvd1Byb3RvRnVuY1JlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBB
U1NFUlQoIXRoaXNPYmotPmluaGVyaXRzKCZKU0RPTVdpbmRvdzo6c19pbmZvKSk7Ci0gICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmSlNET01XaW5kb3dTaGVsbDo6c19pbmZvKSkKKyAgICBKU0RP
TVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyh0aGlzVmFsdWUpOworICAgIGlmICghd2lu
ZG93KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4odGhpc09i
aiktPndpbmRvdygpOwogICAgIGlmICghd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMTEyNSwxMiArMTEyNiwxMSBAQCBK
U1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNSZW1vdmVFdmVudExpc3RlCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSogd2luZG93UHJvdG9GdW5jU2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0g
ICAgQVNTRVJUKCF0aGlzT2JqLT5pbmhlcml0cygmSlNET01XaW5kb3c6OnNfaW5mbykpOwotICAg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJkpTRE9NV2luZG93U2hlbGw6OnNfaW5mbykpCisgICAg
SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3codGhpc1ZhbHVlKTsKKyAgICBpZiAo
IXdpbmRvdykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAg
ICBKU0RPTVdpbmRvdyogd2luZG93ID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KHRo
aXNPYmopLT53aW5kb3coKTsKICAgICBpZiAoIXdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVj
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAgLTExNDEsMTAgKzExNDEsOSBA
QCBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2coCiAgICAgcmV0dXJuIHNo
b3dNb2RhbERpYWxvZyhleGVjLCBmcmFtZSwgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51
bGxDaGVjayhleGVjLCBhcmdzWzBdKSwgYXJnc1sxXSwgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBhcmdzWzJdKSk7CiB9CiAKLUpTVmFsdWUqIHdpbmRvd1Byb3Rv
RnVuY05vdEltcGxlbWVudGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNOb3RJbXBsZW1lbnRl
ZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKIHsKLSAgICBBU1NFUlQoIXRoaXNPYmotPmluaGVyaXRzKCZKU0RPTVdpbmRvdzo6
c19pbmZvKSk7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNET01XaW5kb3dTaGVsbDo6
c19pbmZvKSkKKyAgICBpZiAoIXRvSlNET01XaW5kb3codGhpc1ZhbHVlKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KQEAgLTEzMzAsNCArMTMyOSwxNiBAQCBKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhG
cmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+
d2luZG93KCk7CiB9CiAKK0pTRE9NV2luZG93KiB0b0pTRE9NV2luZG93KEpTVmFsdWUqIHZhbHVl
KQoreworICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworICAg
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1
ZSktPmNsYXNzSW5mbygpOworICAgIGlmIChjbGFzc0luZm8gPT0gJkpTRE9NV2luZG93OjpzX2lu
Zm8pCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHZhbHVlKTsKKyAg
ICBpZiAoY2xhc3NJbmZvID09ICZKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4odmFsdWUpLT53aW5kb3coKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwyMyArMTYw
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgT3duUHRyPEpTRE9NV2luZG93QmFz
ZVByaXZhdGU+IGQ7CiAgICAgfTsKIAotICAgIC8vIEZ1bmN0aW9ucwotICAgIEtKUzo6SlNWYWx1
ZSogd2luZG93UHJvdG9GdW5jQVRvQihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBj
b25zdCBLSlM6OkFyZ0xpc3QmKTsKLSAgICBLSlM6OkpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY0JU
b0EoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7
Ci0gICAgS0pTOjpKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNPcGVuKEtKUzo6RXhlY1N0YXRlKiwg
S0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6QXJnTGlzdCYpOwotICAgIEtKUzo6SlNWYWx1ZSog
d2luZG93UHJvdG9GdW5jU2V0VGltZW91dChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3Qq
LCBjb25zdCBLSlM6OkFyZ0xpc3QmKTsKLSAgICBLSlM6OkpTVmFsdWUqIHdpbmRvd1Byb3RvRnVu
Y0NsZWFyVGltZW91dChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6
OkFyZ0xpc3QmKTsKLSAgICBLSlM6OkpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1NldEludGVydmFs
KEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6QXJnTGlzdCYpOwot
ICAgIEtKUzo6SlNWYWx1ZSogd2luZG93UHJvdG9GdW5jQWRkRXZlbnRMaXN0ZW5lcihLSlM6OkV4
ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OkFyZ0xpc3QmKTsKLSAgICBLSlM6
OkpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1JlbW92ZUV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3Rh
dGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7Ci0gICAgS0pTOjpKU1Zh
bHVlKiB3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2coS0pTOjpFeGVjU3RhdGUqLCBLSlM6
OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7Ci0gICAgS0pTOjpKU1ZhbHVlKiB3aW5k
b3dQcm90b0Z1bmNOb3RJbXBsZW1lbnRlZChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3Qq
LCBjb25zdCBLSlM6OkFyZ0xpc3QmKTsKLQogICAgIC8vIFJldHVybnMgYSBKU0RPTVdpbmRvdyBv
ciBqc051bGwoKQogICAgIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIERPTVdp
bmRvdyopOwogCiAgICAgLy8gUmV0dXJucyBKU0RPTVdpbmRvdyBvciAwCiAgICAgSlNET01XaW5k
b3cqIHRvSlNET01XaW5kb3coRnJhbWUqKTsKKyAgICBKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRv
dyhLSlM6OkpTVmFsdWUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MTEgKzUyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgICAgIHZpcnR1YWwgY29uc3Qg
S0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KIAot
ICAgICAgICAvLyBGb3J3YXJkZWQgbWV0aG9kcworICAgICAgICBET01XaW5kb3cqIGltcGwoKSBj
b25zdDsKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKKyAgICAgICAgdm9pZCBjbGVh
cigpOworCisgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpOwogCi0gICAgICAgIC8v
IEpTT2JqZWN0IG1ldGhvZHMKKyAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy
aygpOwogICAgICAgICB2aXJ0dWFsIEtKUzo6VVN0cmluZyBjbGFzc05hbWUoKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNv
bnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBLSlM6OlByb3BlcnR5U2xvdCYpOwpA
QCAtNzAsMTUgKzczLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEtK
Uzo6SlNWYWx1ZSogbG9va3VwR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogbG9v
a3VwU2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICB2aXJ0dWFsIEtKUzo6SlNHbG9iYWxPYmplY3QqIHRvR2xvYmFsT2Jq
ZWN0KEtKUzo6RXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgY29uc3QgS0pTOjpD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KIAotICAgICAg
ICAvLyBKU0RPTVdpbmRvdyBtZXRob2RzCi0gICAgICAgIERPTVdpbmRvdyogaW1wbCgpIGNvbnN0
OwotICAgICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpOwotICAgICAgICB2b2lkIGNsZWFyKCk7
Ci0KLSAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7Ci0KLSAgICBwcml2YXRlOgog
ICAgICAgICBKU0RPTVdpbmRvdyogbV93aW5kb3c7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE1
ICs2MiwxNSBAQCB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVuCiAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTVmFsdWUq
IGhhbmRsZUV2ZW50RnVuY1ZhbHVlID0gbGlzdGVuZXItPmdldChleGVjLCBJZGVudGlmaWVyKGV4
ZWMsICJoYW5kbGVFdmVudCIpKTsKLSAgICBKU09iamVjdCogaGFuZGxlRXZlbnRGdW5jID0gMDsK
LSAgICBpZiAoaGFuZGxlRXZlbnRGdW5jVmFsdWUtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgaGFu
ZGxlRXZlbnRGdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihoYW5kbGVFdmVudEZ1bmNWYWx1
ZSk7Ci0gICAgICAgIGlmICghaGFuZGxlRXZlbnRGdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAg
ICAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gMDsKKyAgICBKU1ZhbHVlKiBoYW5kbGVFdmVudEZ1
bmN0aW9uID0gbGlzdGVuZXItPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVu
dCIpKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGhh
bmRsZUV2ZW50RnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSAwOwor
ICAgICAgICBjYWxsVHlwZSA9IGxpc3RlbmVyLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAg
fQogCi0gICAgaWYgKGhhbmRsZUV2ZW50RnVuYyB8fCBsaXN0ZW5lci0+aW1wbGVtZW50c0NhbGwo
KSkgeworICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgcmVmKCk7
CiAKICAgICAgICAgQXJnTGlzdCBhcmdzOwpAQCAtODAsMTcgKzgwLDE3IEBAIHZvaWQgSlNBYnN0
cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4KICAgICAgICAgd2luZG93LT5zZXRDdXJyZW50
RXZlbnQoZXZlbnQpOwogCiAgICAgICAgIEpTVmFsdWUqIHJldHZhbDsKLSAgICAgICAgaWYgKGhh
bmRsZUV2ZW50RnVuYykgeworICAgICAgICBpZiAoaGFuZGxlRXZlbnRGdW5jdGlvbikgewogICAg
ICAgICAgICAgd2luZG93LT5zdGFydFRpbWVvdXRDaGVjaygpOwotICAgICAgICAgICAgcmV0dmFs
ID0gaGFuZGxlRXZlbnRGdW5jLT5jYWxsQXNGdW5jdGlvbihleGVjLCBsaXN0ZW5lciwgYXJncyk7
CisgICAgICAgICAgICByZXR2YWwgPSBjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgbGlzdGVuZXIsIGFyZ3MpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmo7CisgICAgICAgICAgICBKU1ZhbHVlKiB0aGlzVmFs
dWU7CiAgICAgICAgICAgICBpZiAoaXNXaW5kb3dFdmVudCkKLSAgICAgICAgICAgICAgICB0aGlz
T2JqID0gd2luZG93LT5zaGVsbCgpOworICAgICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IHdpbmRv
dy0+c2hlbGwoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPih0b0pTKGV4ZWMsIGV2ZW50LT5jdXJyZW50VGFyZ2V0KCkp
KTsKKyAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSB0b0pTKGV4ZWMsIGV2ZW50LT5jdXJyZW50
VGFyZ2V0KCkpOwogICAgICAgICAgICAgd2luZG93LT5zdGFydFRpbWVvdXRDaGVjaygpOwotICAg
ICAgICAgICAgcmV0dmFsID0gbGlzdGVuZXItPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHRoaXNPYmos
IGFyZ3MpOworICAgICAgICAgICAgcmV0dmFsID0gY2FsbChleGVjLCBsaXN0ZW5lciwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOwogICAgICAgICB9CiAgICAgICAgIHdpbmRv
dy0+c3RvcFRpbWVvdXRDaGVjaygpOwogCkBAIC0yNzQsNyArMjc0LDYgQEAgdm9pZCBKU0xhenlF
dmVudExpc3RlbmVyOjpwYXJzZUNvZGUoKSBjbwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB3
aW5kb3coKS0+Z2xvYmFsRXhlYygpOwogCiAgICAgICAgIEpTTG9jayBsb2NrOwotICAgICAgICBK
U09iamVjdCogY29uc3RyID0gd2luZG93KCktPmZ1bmN0aW9uQ29uc3RydWN0b3IoKTsKICAgICAg
ICAgQXJnTGlzdCBhcmdzOwogCiAgICAgICAgIFVTdHJpbmcgc291cmNlVVJMKGZyYW1lLT5sb2Fk
ZXIoKS0+dXJsKCkuc3RyaW5nKCkpOwpAQCAtMjgzLDcgKzI4Miw3IEBAIHZvaWQgSlNMYXp5RXZl
bnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgY28KIAogICAgICAgICAvLyBGSVhNRTogUGFzc2luZyB0
aGUgZG9jdW1lbnQncyBVUkwgdG8gY29uc3RydWN0IGlzIG5vdCBhbHdheXMgY29ycmVjdCwgc2lu
Y2UgdGhpcyBldmVudCBsaXN0ZW5lciBtaWdodAogICAgICAgICAvLyBoYXZlIGJlZW4gYWRkZWQg
d2l0aCBzZXRBdHRyaWJ1dGUgZnJvbSBhIHNjcmlwdCwgYW5kIHdlIHNob3VsZCBwYXNzIFN0cmlu
ZygpIGluIHRoYXQgY2FzZS4KLSAgICAgICAgbV9saXN0ZW5lciA9IGNvbnN0ci0+Y29uc3RydWN0
KGV4ZWMsIGFyZ3MsIElkZW50aWZpZXIoZXhlYywgbV9mdW5jdGlvbk5hbWUpLCBzb3VyY2VVUkws
IG1fbGluZU51bWJlcik7IC8vIEZJWE1FOiBpcyBnbG9iYWxFeGVjIG9rID8KKyAgICAgICAgbV9s
aXN0ZW5lciA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFyZ3MsIElkZW50aWZpZXIoZXhlYywg
bV9mdW5jdGlvbk5hbWUpLCBzb3VyY2VVUkwsIG1fbGluZU51bWJlcik7IC8vIEZJWE1FOiBpcyBn
bG9iYWxFeGVjIG9rPwogCiAgICAgICAgIEpTRnVuY3Rpb24qIGxpc3RlbmVyQXNGdW5jdGlvbiA9
IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihtX2xpc3RlbmVyLmdldCgpKTsKIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAJKHJldmlzaW9uIDM0NzM2KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDE0ICszNSwyMiBAQAogI2luY2x1ZGUgIkpTU1ZHRWxlbWVudEluc3RhbmNlLmgi
CiAjZW5kaWYKIAotI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oIgotCiB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBKU1ZhbHVlKiBq
c0V2ZW50VGFyZ2V0QWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSoganNFdmVudFRhcmdldFJlbW92
ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWUqIGpzRXZlbnRUYXJnZXREaXNwYXRjaEV2ZW50KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKworfQorCisjaW5j
bHVkZSAiSlNFdmVudFRhcmdldEJhc2UubHV0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwog
LyogU291cmNlIGZvciBKU0V2ZW50VGFyZ2V0UHJvcGVydGllc1RhYmxlCi1AYmVnaW4gSlNFdmVu
dFRhcmdldFByb3BlcnRpZXNUYWJsZSA1MAorQGJlZ2luIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVz
VGFibGUKIG9uYWJvcnQgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9u
QWJvcnQgICAgICAgICAgICAgICAgRG9udERlbGV0ZQogb25ibHVyICAgICAgICBXZWJDb3JlOjpK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CbHVyICAgICAgICAgICAgICAgICBEb250RGVsZXRl
CiBvbmNoYW5nZSAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNoYW5n
ZSAgICAgICAgICAgICAgIERvbnREZWxldGUKQEAgLTg3LDIwICs5NSwzNCBAQCBvbnVubG9hZCAg
ICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wCiAqLwogCiAvKgotQGJlZ2luIEpTRXZlbnRU
YXJnZXRQcm90b3R5cGVUYWJsZSA1CitAYmVnaW4gSlNFdmVudFRhcmdldFByb3RvdHlwZVRhYmxl
CiBhZGRFdmVudExpc3RlbmVyICAgICAgICBXZWJDb3JlOjpqc0V2ZW50VGFyZ2V0QWRkRXZlbnRM
aXN0ZW5lciAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDMKIHJlbW92ZUV2ZW50TGlzdGVuZXIgICAg
IFdlYkNvcmU6OmpzRXZlbnRUYXJnZXRSZW1vdmVFdmVudExpc3RlbmVyIERvbnREZWxldGV8RnVu
Y3Rpb24gMwogZGlzcGF0Y2hFdmVudCAgICAgICAgICAgV2ViQ29yZTo6anNFdmVudFRhcmdldERp
c3BhdGNoRXZlbnQgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCiBAZW5kCiAqLwogCi1KU1Zh
bHVlKiBqc0V2ZW50VGFyZ2V0QWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIGJvb2wgcmV0cmlldmVF
dmVudFRhcmdldEFuZENvcnJlc3BvbmRpbmdOb2RlKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgTm9kZSomIGV2ZW50Tm9kZSwgRXZlbnRUYXJnZXQqJiBldmVudFRhcmdldCkKIHsKLSAg
ICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKyAgICBpZiAoIXRoaXNW
YWx1ZS0+aXNPYmplY3QoJkpTTm9kZTo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSlNFdmVudFRhcmdldE5vZGUqIGpzTm9kZSA9IHN0YXRpY19jYXN0PEpTRXZlbnRUYXJn
ZXROb2RlKj4odGhpc1ZhbHVlKTsKKyAgICBBU1NFUlQoanNOb2RlKTsKIAorICAgIEV2ZW50VGFy
Z2V0Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGpzTm9kZS0+aW1w
bCgpKTsKKyAgICBBU1NFUlQobm9kZSk7CisKKyAgICBldmVudE5vZGUgPSBub2RlOworICAgIGV2
ZW50VGFyZ2V0ID0gbm9kZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSlNWYWx1ZSoganNFdmVu
dFRhcmdldEFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKICAgICBOb2RlKiBldmVudE5v
ZGUgPSAwOwogICAgIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IDA7Ci0gICAgaWYgKCFyZXRy
aWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05vZGUoZXhlYywgdGhpc09iaiwgZXZlbnRO
b2RlLCBldmVudFRhcmdldCkpCisgICAgaWYgKCFyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVz
cG9uZGluZ05vZGUoZXhlYywgdGhpc1ZhbHVlLCBldmVudE5vZGUsIGV2ZW50VGFyZ2V0KSkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIEZyYW1lKiBm
cmFtZSA9IGV2ZW50Tm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTExMywxMyArMTM1LDEx
IEBAIEpTVmFsdWUqIGpzRXZlbnRUYXJnZXRBZGRFdmVudExpc3RlbmVyKEUKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSoganNFdmVudFRhcmdldFJlbW92ZUV2ZW50TGlz
dGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUqIGpzRXZlbnRUYXJnZXRSZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7Ci0gICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0KICAg
ICBOb2RlKiBldmVudE5vZGUgPSAwOwogICAgIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IDA7
Ci0gICAgaWYgKCFyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05vZGUoZXhlYywg
dGhpc09iaiwgZXZlbnROb2RlLCBldmVudFRhcmdldCkpCisgICAgaWYgKCFyZXRyaWV2ZUV2ZW50
VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05vZGUoZXhlYywgdGhpc1ZhbHVlLCBldmVudE5vZGUsIGV2
ZW50VGFyZ2V0KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
IAogICAgIEZyYW1lKiBmcmFtZSA9IGV2ZW50Tm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAg
LTEzMiwzMyArMTUyLDE3IEBAIEpTVmFsdWUqIGpzRXZlbnRUYXJnZXRSZW1vdmVFdmVudExpc3Rl
bmUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSoganNFdmVudFRhcmdl
dERpc3BhdGNoRXZlbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIGpzRXZlbnRUYXJnZXREaXNwYXRjaEV2ZW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgTm9kZSogZXZlbnROb2RlID0gMDsKICAgICBFdmVudFRhcmdldCogZXZl
bnRUYXJnZXQgPSAwOwotICAgIGlmICghcmV0cmlldmVFdmVudFRhcmdldEFuZENvcnJlc3BvbmRp
bmdOb2RlKGV4ZWMsIHRoaXNPYmosIGV2ZW50Tm9kZSwgZXZlbnRUYXJnZXQpKQorICAgIGlmICgh
cmV0cmlldmVFdmVudFRhcmdldEFuZENvcnJlc3BvbmRpbmdOb2RlKGV4ZWMsIHRoaXNWYWx1ZSwg
ZXZlbnROb2RlLCBldmVudFRhcmdldCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CiAKICAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVj
KTsKICAgICByZXR1cm4ganNCb29sZWFuKGV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KHRvRXZl
bnQoYXJnc1swXSksIGV4Y2VwdGlvbikpOwogfQogCi1ib29sIHJldHJpZXZlRXZlbnRUYXJnZXRB
bmRDb3JyZXNwb25kaW5nTm9kZShLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqIHRoaXNP
YmosIE5vZGUqJiBldmVudE5vZGUsIEV2ZW50VGFyZ2V0KiYgZXZlbnRUYXJnZXQpCi17Ci0gICAg
aWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNOb2RlOjpzX2luZm8pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBKU0V2ZW50VGFyZ2V0Tm9kZSoganNOb2RlID0gc3RhdGljX2Nhc3Q8SlNF
dmVudFRhcmdldE5vZGUqPih0aGlzT2JqKTsKLSAgICBBU1NFUlQoanNOb2RlKTsKLQotICAgIEV2
ZW50VGFyZ2V0Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGpzTm9k
ZS0+aW1wbCgpKTsKLSAgICBBU1NFUlQobm9kZSk7Ci0KLSAgICBldmVudE5vZGUgPSBub2RlOwot
ICAgIGV2ZW50VGFyZ2V0ID0gbm9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudE5hbWVGb3JQcm9wZXJ0eVRva2VuKGludCB0b2tlbikKIHsgICAgCiAg
ICAgc3dpdGNoICh0b2tlbikgewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dEJhc2UuaAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE0ICs1OSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgfTsKICAgICB9OwogCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZv
ciB0aGUgcGFydGlhbCBzcGVjaWFsaXphdGVkIHRlbXBsYXRlIGZ1bmN0aW9ucyBiZWxvdyAKLSAg
ICBib29sIHJldHJpZXZlRXZlbnRUYXJnZXRBbmRDb3JyZXNwb25kaW5nTm9kZShLSlM6OkV4ZWNT
dGF0ZSosIEtKUzo6SlNPYmplY3QqIHRoaXNPYmosIE5vZGUqJiwgRXZlbnRUYXJnZXQqJik7Ci0K
LSAgICAvLyBGdW5jdGlvbnMKLSAgICBLSlM6OkpTVmFsdWUqIGpzRXZlbnRUYXJnZXRBZGRFdmVu
dExpc3RlbmVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6QXJn
TGlzdCYpOwotICAgIEtKUzo6SlNWYWx1ZSoganNFdmVudFRhcmdldFJlbW92ZUV2ZW50TGlzdGVu
ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7
Ci0gICAgS0pTOjpKU1ZhbHVlKiBqc0V2ZW50VGFyZ2V0RGlzcGF0Y2hFdmVudChLSlM6OkV4ZWNT
dGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OkFyZ0xpc3QmKTsKLQogICAgIC8vIEhl
bHBlciBmdW5jdGlvbiBmb3IgZ2V0VmFsdWVQcm9wZXJ0eS9wdXRWYWx1ZVByb3BlcnR5CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWVGb3JQcm9wZXJ0eVRva2VuKGludCB0b2tlbik7
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEFwcGxldEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMiArMzUsMTcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4gcnVudGltZU9i
amVjdEN1c3RvbUdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRo
aXMsIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIHJ1bnRp
bWVPYmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
LCB0aGlzKTsKIH0KIAogYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjdXN0b21QdXQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVl
KQogewotICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oaW1wbCgpKSk7CisgICAgcmV0dXJu
IHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgaW1wbCgp
KTsKIH0KIAotQ2FsbFR5cGUgSlNIVE1MQXBwbGV0RWxlbWVudDo6Z2V0Q2FsbERhdGEoQ2FsbERh
dGEmKQorQ2FsbFR5cGUgSlNIVE1MQXBwbGV0RWxlbWVudDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEm
IGNhbGxEYXRhKQogewotICAgIHJldHVybiBydW50aW1lT2JqZWN0SW1wbGVtZW50c0NhbGwoc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihpbXBsKCkpKSA/IENhbGxUeXBlTmF0aXZlIDogQ2FsbFR5
cGVOb25lOwotfQotCi1KU1ZhbHVlKiBKU0hUTUxBcHBsZXRFbGVtZW50OjpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQotewotICAgIHJldHVybiBydW50aW1lT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZXhlYywgdGhpc09i
aiwgYXJncywgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihpbXBsKCkpKTsKKyAgICByZXR1cm4g
cnVudGltZU9iamVjdEdldENhbGxEYXRhKGltcGwoKSwgY2FsbERhdGEpOwogfQogCiBib29sIEpT
SFRNTEFwcGxldEVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBIVE1MQXBw
bGV0RWxlbWVudCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24g
MzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMyArNTEsMTMgQEAgc3RhdGljIEpTVmFsdWUqIGdldE5h
bWVkSXRlbXMoRXhlY1N0YXRlKgogCiAvLyBIVE1MQ29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2Jq
ZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBjYWxsLAogLy8gc28gdGhhdCBkb2N1bWVu
dC5mb3Jtcy5pdGVtKDApIGFuZCBkb2N1bWVudC5mb3JtcygwKSBib3RoIHdvcmsuCi1KU1ZhbHVl
KiBKU0hUTUxDb2xsZWN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlKiBjYWxsSFRNTENvbGxl
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gRG8gbm90IHVzZSB0aGlzT2JqIGhlcmUuIEl0
IGNhbiBiZSB0aGUgSlNIVE1MRG9jdW1lbnQsIGluIHRoZSBkb2N1bWVudC5mb3JtcyhpKSBjYXNl
LgotICAgIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gaW1wbCgpOworICAgIEhUTUxDb2xs
ZWN0aW9uKiBjb2xsZWN0aW9uID0gc3RhdGljX2Nhc3Q8SlNIVE1MQ29sbGVjdGlvbio+KGZ1bmN0
aW9uKS0+aW1wbCgpOwogCiAgICAgLy8gQWxzbywgZG8gd2UgbmVlZCB0aGUgVHlwZUVycm9yIHRl
c3QgaGVyZSA/CiAKQEAgLTkxLDggKzkxLDkgQEAgSlNWYWx1ZSogSlNIVE1MQ29sbGVjdGlvbjo6
Y2FsbEFzRnVuY3RpbwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1DYWxsVHlwZSBK
U0hUTUxDb2xsZWN0aW9uOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYpCitDYWxsVHlwZSBKU0hUTUxD
b2xsZWN0aW9uOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCiB7CisgICAgY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbEhUTUxDb2xsZWN0aW9uOwogICAgIHJldHVybiBDYWxs
VHlwZU5hdGl2ZTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1
bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDEy
IEBAIEpTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSoKICAgICAgICAgaWYg
KGZyYW1lKSB7CiAgICAgICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3cmFwcGVyID0gdG9KU0RP
TVdpbmRvd1NoZWxsKGZyYW1lKTsKICAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7Ci0gICAgICAg
ICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0ID0gd3JhcHBlci0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgIm9wZW4iKSktPmdldE9iamVjdCgpOwotICAgICAgICAgICAgICAgIGlm
ICghZnVuY3Rpb25PYmplY3QgfHwgIWZ1bmN0aW9uT2JqZWN0LT5pbXBsZW1lbnRzQ2FsbCgpKQor
ICAgICAgICAgICAgICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gd3JhcHBlci0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgIm9wZW4iKSk7CisgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CisgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2Fs
bERhdGEoY2FsbERhdGEpOworICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uT2JqZWN0LT5jYWxsQXNGdW5j
dGlvbihleGVjLCB3cmFwcGVyLCBhcmdzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChl
eGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB3cmFwcGVyLCBhcmdzKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMiArMzUsMTcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtKUzsKIAogYm9vbCBKU0hUTUxFbWJlZEVsZW1lbnQ6OmN1c3RvbUdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tR2V0
T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcywgc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3Rv
bUdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQog
CiBib29sIEpTSFRNTEVtYmVkRWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gcnVudGltZU9iamVjdEN1c3RvbVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudCo+KGltcGwoKSkpOworICAgIHJldHVybiBydW50aW1lT2JqZWN0
Q3VzdG9tUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGltcGwoKSk7CiB9CiAKLUNhbGxU
eXBlIEpTSFRNTEVtYmVkRWxlbWVudDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmKQorQ2FsbFR5cGUg
SlNIVE1MRW1iZWRFbGVtZW50OjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0g
ICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RJbXBsZW1lbnRzQ2FsbChzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KGltcGwoKSkpID8gQ2FsbFR5cGVOYXRpdmUgOiBDYWxsVHlwZU5vbmU7Ci19Ci0KLUpT
VmFsdWUqIEpTSFRNTEVtYmVkRWxlbWVudDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4g
cnVudGltZU9iamVjdENhbGxBc0Z1bmN0aW9uKGV4ZWMsIHRoaXNPYmosIGFyZ3MsIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RHZXRD
YWxsRGF0YShpbXBsKCksIGNhbGxEYXRhKTsKIH0KIAogYm9vbCBKU0hUTUxFbWJlZEVsZW1lbnQ6
OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBIVE1MRW1iZWRFbGVtZW50KiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxJbnB1dEVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTElucHV0RWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwyOSArMjIsMzcgQEAKIAogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkpTSFRNTElucHV0RWxlbWVudEJh
c2VUYWJsZS5jcHAiCi0KIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RhdGljIEpTVmFsdWUqIGpzSFRNTElucHV0RWxlbWVudEJhc2VGdW5jdGlvblNldFNl
bGVjdGlvblJhbmdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKKworfQorCisjaW5jbHVkZSAiSlNIVE1MSW5wdXRFbGVtZW50QmFzZVRhYmxlLmNwcCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCiAvKgotQGJlZ2luIEpTSFRNTElucHV0RWxlbWVudEJh
c2VUYWJsZSAzCitAYmVnaW4gSlNIVE1MSW5wdXRFbGVtZW50QmFzZVRhYmxlCiAgIHNlbGVjdGlv
blN0YXJ0ICAgICAgICBXZWJDb3JlOjpKU0hUTUxJbnB1dEVsZW1lbnRCYXNlOjpTZWxlY3Rpb25T
dGFydCAgICAgICAgICAgIERvbnREZWxldGUKICAgc2VsZWN0aW9uRW5kICAgICAgICAgIFdlYkNv
cmU6OkpTSFRNTElucHV0RWxlbWVudEJhc2U6OlNlbGVjdGlvbkVuZCAgICAgICAgICAgICAgRG9u
dERlbGV0ZQogQGVuZAotQGJlZ2luIEpTSFRNTElucHV0RWxlbWVudEJhc2VQcm90b3R5cGVUYWJs
ZSAwCitAYmVnaW4gSlNIVE1MSW5wdXRFbGVtZW50QmFzZVByb3RvdHlwZVRhYmxlCiBAZW5kCi1A
YmVnaW4gSlNIVE1MSW5wdXRFbGVtZW50QmFzZUZ1bmN0aW9uVGFibGUgMQorQGJlZ2luIEpTSFRN
TElucHV0RWxlbWVudEJhc2VGdW5jdGlvblRhYmxlCiAgIHNldFNlbGVjdGlvblJhbmdlICAgICBX
ZWJDb3JlOjpqc0hUTUxJbnB1dEVsZW1lbnRCYXNlRnVuY3Rpb25TZXRTZWxlY3Rpb25SYW5nZSAg
ICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMgogQGVuZAogKi8KIAogS0pTX0lNUExFTUVOVF9Q
Uk9UT1RZUEUoIkhUTUxJbnB1dEVsZW1lbnRCYXNlIiwgSlNIVE1MSW5wdXRFbGVtZW50QmFzZVBy
b3RvdHlwZSkKIAotSlNWYWx1ZSoganNIVE1MSW5wdXRFbGVtZW50QmFzZUZ1bmN0aW9uU2V0U2Vs
ZWN0aW9uUmFuZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJn
TGlzdCYgYXJncykKKy8vIFNldFNlbGVjdGlvblJhbmdlIGlzIGltcGxlbWVudGVkIG9uIHRoZSBj
bGFzcyBpbnN0ZWFkIG9mIG9uIHRoZSBwcm90b3R5cGUKKy8vIHRvIG1ha2UgaXQgZWFzaWVyIHRv
IGVuYWJsZS9kaXNhYmxlIGxvb2t1cCBvZiB0aGUgZnVuY3Rpb24gYmFzZWQgb24gaW5wdXQgdHlw
ZS4KK0pTVmFsdWUqIGpzSFRNTElucHV0RWxlbWVudEJhc2VGdW5jdGlvblNldFNlbGVjdGlvblJh
bmdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTElucHV0RWxlbWVudEJh
c2UqPih0aGlzT2JqKS0+aW1wbCgpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9ICpz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MSW5wdXRFbGVt
ZW50QmFzZSo+KHRoaXNWYWx1ZSktPmltcGwoKSk7CiAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFu
Z2UoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TElucHV0RWxlbWVudEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTElucHV0RWxlbWVudEJhc2UuaAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAg
KzQyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBlbnVtIHsgU2VsZWN0aW9uU3Rh
cnQsIFNlbGVjdGlvbkVuZCB9OwogICAgIH07CiAKLSAgICAvLyBTZXRTZWxlY3Rpb25SYW5nZSBp
cyBpbXBsZW1lbnRlZCBvbiB0aGUgY2xhc3MgaW5zdGVhZCBvZiBvbiB0aGUgcHJvdG90eXBlCi0g
ICAgLy8gdG8gbWFrZSBpdCBlYXNpZXIgdG8gZW5hYmxlL2Rpc2FibGUgbG9va3VwIG9mIHRoZSBm
dW5jdGlvbiBiYXNlZCBvbiBpbnB1dCB0eXBlLgotICAgIEtKUzo6SlNWYWx1ZSoganNIVE1MSW5w
dXRFbGVtZW50QmFzZUZ1bmN0aW9uU2V0U2VsZWN0aW9uUmFuZ2UoS0pTOjpFeGVjU3RhdGUqLCBL
SlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEpTSFRNTElucHV0RWxlbWVudEJhc2VfaApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAzNDczNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDIyICszNSwxNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S0pTOwogCiBib29sIEpTSFRNTE9iamVjdEVsZW1lbnQ6OmN1c3RvbUdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcywgc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnQqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbUdldE93
blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQogCiBib29s
IEpTSFRNTE9iamVjdEVsZW1lbnQ6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHJ1
bnRpbWVPYmplY3RDdXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3Rv
bVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBpbXBsKCkpOwogfQogCi1DYWxsVHlwZSBK
U0hUTUxPYmplY3RFbGVtZW50OjpnZXRDYWxsRGF0YShDYWxsRGF0YSYpCitDYWxsVHlwZSBKU0hU
TUxPYmplY3RFbGVtZW50OjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAg
cmV0dXJuIHJ1bnRpbWVPYmplY3RJbXBsZW1lbnRzQ2FsbChzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KGltcGwoKSkpID8gQ2FsbFR5cGVOYXRpdmUgOiBDYWxsVHlwZU5vbmU7Ci19Ci0KLUpTVmFs
dWUqIEpTSFRNTE9iamVjdEVsZW1lbnQ6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgcmV0dXJuIHJ1
bnRpbWVPYmplY3RDYWxsQXNGdW5jdGlvbihleGVjLCB0aGlzT2JqLCBhcmdzLCBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KGltcGwoKSkpOworICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0Q2Fs
bERhdGEoaW1wbCgpLCBjYWxsRGF0YSk7CiB9CiAKIGJvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6
Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIEhUTUxPYmplY3RFbGVtZW50KiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzQ3
MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDM1ICszOCwzOSBAQCBKU0hUTUxPcHRpb25FbGVt
ZW50Q29uc3RydWN0b3I6OkpTSFRNTE9wCiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDQpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRF
bnVtKTsKIH0KIAotQ29uc3RydWN0VHlwZSBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I6
OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0
cnVjdEhUTUxPcHRpb25FbGVtZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVj
dG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlTmF0
aXZlOwotfQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEpTSFRNTE9wdGlv
bkVsZW1lbnRDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+ZG9jdW1lbnQoKTsKIAotSlNPYmpl
Y3QqIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
IAotICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gZWxlbWVudCA9IHN0YXRpY19wb2ludGVy
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoIm9wdGlv
biIsIGVjKSk7Ci0gICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHQg
PSBtX2RvY3VtZW50LT5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0gICAgICAgIGlmICghYXJnc1swXS0+
aXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIHRleHQtPnNldERhdGEoYXJnc1swXS0+dG9TdHJp
bmcoZXhlYyksIGVjKTsKLSAgICAgICAgaWYgKGVjID09IDApCi0gICAgICAgICAgICBlbGVtZW50
LT5hcHBlbmRDaGlsZCh0ZXh0LnJlbGVhc2UoKSwgZWMpOwotICAgICAgICBpZiAoZWMgPT0gMCAm
JiAhYXJnc1sxXS0+aXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGVsZW1lbnQtPnNldFZhbHVl
KGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgaWYgKGVjID09IDApCi0gICAgICAg
ICAgICBlbGVtZW50LT5zZXREZWZhdWx0U2VsZWN0ZWQoYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMp
KTsKLSAgICAgICAgaWYgKGVjID09IDApCi0gICAgICAgICAgICBlbGVtZW50LT5zZXRTZWxlY3Rl
ZChhcmdzWzNdLT50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0KKyAgICBSZWZQdHI8SFRNTE9wdGlv
bkVsZW1lbnQ+IGVsZW1lbnQgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxPcHRpb25FbGVtZW50
Pihkb2N1bWVudC0+Y3JlYXRlRWxlbWVudCgib3B0aW9uIiwgZWMpKTsKKyAgICBSZWZQdHI8VGV4
dD4gdGV4dDsKKyAgICBpZiAoZWMgPT0gMCkKKyAgICAgICAgdGV4dCA9IGRvY3VtZW50LT5jcmVh
dGVUZXh0Tm9kZSgiIik7CisgICAgaWYgKGVjID09IDAgJiYgIWFyZ3NbMF0tPmlzVW5kZWZpbmVk
KCkpCisgICAgICAgIHRleHQtPnNldERhdGEoYXJnc1swXS0+dG9TdHJpbmcoZXhlYyksIGVjKTsK
KyAgICBpZiAoZWMgPT0gMCkKKyAgICAgICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQodGV4dC5yZWxl
YXNlKCksIGVjKTsKKyAgICBpZiAoZWMgPT0gMCAmJiAhYXJnc1sxXS0+aXNVbmRlZmluZWQoKSkK
KyAgICAgICAgZWxlbWVudC0+c2V0VmFsdWUoYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykpOworICAg
IGlmIChlYyA9PSAwKQorICAgICAgICBlbGVtZW50LT5zZXREZWZhdWx0U2VsZWN0ZWQoYXJnc1sy
XS0+dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpZiAoZWMgPT0gMCkKKyAgICAgICAgZWxlbWVudC0+
c2V0U2VsZWN0ZWQoYXJnc1szXS0+dG9Cb29sZWFuKGV4ZWMpKTsKIAotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgaWYgKGVjIHx8ICFlbGVtZW50KQorICAgIGlmIChlYykgewor
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CiAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih0b0pTKGV4ZWMsIGVsZW1l
bnQucmVsZWFzZSgpKSk7CiB9CiAKK0NvbnN0cnVjdFR5cGUgSlNIVE1MT3B0aW9uRWxlbWVudENv
bnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEp
Cit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RIVE1MT3B0
aW9uRWxlbWVudDsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25F
bGVtZW50Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDE0ICsyOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CiAgICAg
cHVibGljOgogICAgICAgICBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IoS0pTOjpFeGVj
U3RhdGUqLCBEb2N1bWVudCopOworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2RvY3VtZW50LmdldCgpOyB9CiAKLSAgICAgICAgdmlydHVhbCBLSlM6OkNvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShLSlM6OkNvbnN0cnVjdERhdGEmKTsKLSAgICAgICAg
dmlydHVhbCBLSlM6OkpTT2JqZWN0KiBjb25zdHJ1Y3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBL
SlM6OkFyZ0xpc3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25z
dCBLSlM6OkNsYXNzSW5mbyBzX2luZm87CiAKICAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFs
IEtKUzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEtKUzo6Q29uc3RydWN0RGF0YSYp
OworICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmc19pbmZvOyB9CisKICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3Vt
ZW50OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdl
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw0NCArMzYsNDAgQEAgSlNJbWFn
ZUNvbnN0cnVjdG9yOjpKU0ltYWdlQ29uc3RydWN0b3IoRQogewogfQogCi1Db25zdHJ1Y3RUeXBl
IEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJikKLXsK
LSAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKLX0KLQotSlNPYmplY3QqIEpTSW1hZ2VD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0SW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgYm9vbCB3aWR0
aFNldCA9IGZhbHNlOwogICAgIGJvb2wgaGVpZ2h0U2V0ID0gZmFsc2U7CiAgICAgaW50IHdpZHRo
ID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsKLQogICAgIGlmIChhcmdzLnNpemUoKSA+IDApIHsK
ICAgICAgICAgd2lkdGhTZXQgPSB0cnVlOwogICAgICAgICB3aWR0aCA9IGFyZ3NbMF0tPnRvSW50
MzIoZXhlYyk7CiAgICAgfQotCiAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkgewogICAgICAgICBo
ZWlnaHRTZXQgPSB0cnVlOwogICAgICAgICBoZWlnaHQgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMp
OwogICAgIH0KIAorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEpTSW1hZ2VD
b25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+ZG9jdW1lbnQoKTsKKwogICAgIC8vIENhbGxpbmcg
dG9KUyBvbiB0aGUgZG9jdW1lbnQgY2F1c2VzIHRoZSBKUyBkb2N1bWVudCB3cmFwcGVyIHRvIGJl
CiAgICAgLy8gYWRkZWQgdG8gdGhlIHdpbmRvdyBvYmplY3QuIFRoaXMgaXMgZG9uZSB0byBlbnN1
cmUgdGhhdCBKU0RvY3VtZW50OjptYXJrCiAgICAgLy8gd2lsbCBiZSBjYWxsZWQgKHdoaWNoIHdp
bGwgY2F1c2UgdGhlIGltYWdlIGVsZW1lbnQgdG8gYmUgbWFya2VkIGlmIG5lY2Vzc2FyeSkuCi0g
ICAgLy8gVGhpcyBpcyBvbmx5IGEgcHJvYmxlbSBmb3IgZWxlbWVudHMgY3JlYXRlZCB1c2luZyB0
aGUgSW1hZ2UgY29uc3RydWN0b3Igc2luY2UgYWxsCi0gICAgLy8gb3RoZXIgZWxlbWVudHMgYXJl
IGNyZWF0ZWQgdGhyb3VnaCB0aGUgZG9jdW1lbnQsIHVzaW5nIGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQgZm9yIGV4YW1wbGUuCi0gICAgdG9KUyhleGVjLCBtX2RvY3VtZW50LmdldCgpKTsKLQotICAg
IEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQobV9kb2N1bWVu
dC5nZXQoKSk7Ci0gICAgSlNPYmplY3QqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
dG9KUyhleGVjLCBpbWFnZSkpOworICAgIHRvSlMoZXhlYywgZG9jdW1lbnQpOwogCisgICAgUmVm
UHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoZG9jdW1l
bnQpOwogICAgIGlmICh3aWR0aFNldCkKICAgICAgICAgaW1hZ2UtPnNldFdpZHRoKHdpZHRoKTsK
ICAgICBpZiAoaGVpZ2h0U2V0KQogICAgICAgICBpbWFnZS0+c2V0SGVpZ2h0KGhlaWdodCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odG9KUyhleGVjLCBpbWFnZS5yZWxlYXNl
KCkpKTsKK30KIAotICAgIHJldHVybiByZXN1bHQ7CitDb25zdHJ1Y3RUeXBlIEpTSW1hZ2VDb25z
dHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQor
eworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0SW1hZ2U7Cisg
ICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRpdmU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaAkocmV2aXNp
b24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEpTSW1hZ2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgewogICAgIHB1Ymxp
YzoKICAgICAgICAgSlNJbWFnZUNvbnN0cnVjdG9yKEtKUzo6RXhlY1N0YXRlKiwgRG9jdW1lbnQq
KTsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVu
dC5nZXQoKTsgfQogCi0gICAgICAgIHZpcnR1YWwgS0pTOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoS0pTOjpDb25zdHJ1Y3REYXRhJik7Ci0gICAgICAgIHZpcnR1YWwgS0pTOjpKU09i
amVjdCogY29uc3RydWN0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7Ci0K
LSAgICAgICAgdmlydHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJnNfaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8g
c19pbmZvOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBLSlM6OkNvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShLSlM6OkNvbnN0cnVjdERhdGEmKTsKKyAgICAgICAgdmlydHVh
bCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5m
bzsgfQorCiAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICB9OwogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgJ
KHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVj
dFdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTMgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIgOiBwdWJsaWMgSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEtKUzo6SlNWYWx1
ZSogd3JhcChLSlM6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgS0pTOjpKU1ZhbHVlKiB1bndy
YXBwZWRWYWx1ZSk7Ci0KICAgICAgICAgdmlydHVhbCB+SlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
KCk7CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFz
c0luZm8gc19pbmZvOwogCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIEpT
SW5zcGVjdGVkT2JqZWN0V3JhcHBlcihLSlM6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgS0pT
OjpKU09iamVjdCogdW53cmFwcGVkT2JqZWN0LCBLSlM6OkpTVmFsdWUqIHdyYXBwZWRQcm90b3R5
cGUpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NHZXRQcm9wZXJ0eSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KQEAgLTUyLDYgKzUwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHZpcnR1YWwgS0pTOjpKU1ZhbHVlKiBwcmVwYXJlSW5jb21pbmdWYWx1ZShLSlM6OkV4
ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgS0pTOjpKU1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSkgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgS0pTOjpKU1ZhbHVlKiB3cmFwT3V0Z29pbmdWYWx1ZShLSlM6
OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgS0pTOjpKU1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSkg
Y29uc3QgeyByZXR1cm4gd3JhcCh1bndyYXBwZWRFeGVjLCB1bndyYXBwZWRWYWx1ZSk7IH0KKwor
ICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmc19pbmZvOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBl
ci5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rv
ckNhbGxiYWNrV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgSlNW
YWx1ZSogSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6OnByZQogICAgICAgICAvLyBpcyBjYWxs
ZWQuIChUaGUgY2xpZW50LXNpZGUgc3RvcmFnZSBBUEkgY2FsbHMgdGhlIGNhbGxiYWNrIHdpdGgg
dGhlIGB0aGlzYCBvYmplY3Qgc2V0IHRvIHRoZSBjYWxsYmFjayBpdHNlbGYuKQogICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKHdyYXBwZXIgPT0gdGhpcywgIkEgZGlmZmVyZW50IHdyYXBwZXIg
d2FzIHBhc3NlZCBpbnRvIGEgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIiKTsKICAgICAgICAg
aWYgKHdyYXBwZXIgIT0gdGhpcykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgcmV0dXJuIHdyYXBwZXItPnVud3JhcHBl
ZE9iamVjdCgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw3ICs4MCw3IEBAIEpTVmFsdWUqIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c2Nv
cGVDaGEKICAgICAgICAgKytpdGVyOwogICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKIAotICAg
IHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+
Y29uc3RydWN0KGV4ZWMsIGxpc3QpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBs
aXN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDE0ICszOSwxNSBAQCBzdGF0aWMgSlNWYWx1ZSogdGFrZUV4Y2VwdGlvbihFeGVj
U3RhdGUqCiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNOb2RlRmlsdGVyQ29uZGl0aW9u
OjpKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNPYmplY3QqIGZpbHRlcikKK0pTTm9kZUZpbHRlckNv
bmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTVmFsdWUqIGZpbHRlcikKICAgICA6IG1f
ZmlsdGVyKGZpbHRlcikKIHsKIH0KIAogdm9pZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmso
KQogewotICAgIG1fZmlsdGVyLT5tYXJrKCk7CisgICAgaWYgKCFtX2ZpbHRlci0+bWFya2VkKCkp
CisgICAgICAgIG1fZmlsdGVyLT5tYXJrKCk7CiB9CiAKIHNob3J0IEpTTm9kZUZpbHRlckNvbmRp
dGlvbjo6YWNjZXB0Tm9kZShOb2RlKiBmaWx0ZXJOb2RlLCBKU1ZhbHVlKiYgZXhjZXB0aW9uKSBj
b25zdApAQCAtNTgsOCArNTksMTAgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2Nl
cHROb2RlKAogCiAgICAgSlNMb2NrIGxvY2s7CiAKLSAgICBpZiAoIW1fZmlsdGVyLT5pbXBsZW1l
bnRzQ2FsbCgpKQotICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKKyAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG1fZmlsdGVyLT5n
ZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkK
KyAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CiAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CiAgICAgQXJnTGlzdCBhcmdzOwpAQCAtNjgsNyArNzEsNyBAQCBzaG9ydCBKU05vZGVGaWx0ZXJD
b25kaXRpb246OmFjY2VwdE5vZGUoCiAgICAgICAgIGV4Y2VwdGlvbiA9IHRha2VFeGNlcHRpb24o
ZXhlYyk7CiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogICAgIH0K
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBtX2ZpbHRlci0+Y2FsbEFzRnVuY3Rpb24oZXhlYywgbV9m
aWx0ZXIsIGFyZ3MpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNhbGwoZXhlYywgbV9maWx0ZXIs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9maWx0ZXIsIGFyZ3MpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewogICAgICAgICBleGNlcHRpb24gPSB0YWtlRXhjZXB0aW9uKGV4ZWMpOwog
ICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAkocmV2aXNpb24gMzQ3MzYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFt
ZXNwYWNlIEtKUyB7Ci0gICAgY2xhc3MgSlNPYmplY3Q7CisgICAgY2xhc3MgSlNWYWx1ZTsKIH0K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMsMTcgKzMzLDE4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEpTTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBOb2RlRmls
dGVyQ29uZGl0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpT
Tm9kZUZpbHRlckNvbmRpdGlvbj4gY3JlYXRlKEtKUzo6SlNPYmplY3QqIGZpbHRlcikKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SlNOb2RlRmlsdGVyQ29uZGl0aW9uPiBjcmVhdGUoS0pTOjpK
U1ZhbHVlKiBmaWx0ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKGZpbHRlcikpOwogICAgICAgICB9CiAKKyAgICBwcml2
YXRlOgorICAgICAgICBKU05vZGVGaWx0ZXJDb25kaXRpb24oS0pTOjpKU1ZhbHVlKiBmaWx0ZXIp
OworCiAgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiwgS0pTOjpKU1ZhbHVl
KiYgZXhjZXB0aW9uKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihLSlM6OkpTT2JqZWN0KiBm
aWx0ZXIpOwotICAgICAgICBLSlM6OkpTT2JqZWN0KiBtX2ZpbHRlcjsKKyAgICAgICAgS0pTOjpK
U1ZhbHVlKiBtX2ZpbHRlcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAz
NDczNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAsMTkgKzUwLDEyIEBAIEpTVmFsdWUqIEpTTm9kZUZpbHRlcjo6YWNj
ZXB0Tm9kZShFeGVjU3QKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAot
UGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoS0pTOjpKU1ZhbHVlKiB2YWwpCitQ
YXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU1ZhbHVlKiB2YWx1ZSkKIHsKLSAg
ICBpZiAoIXZhbCB8fCAhdmFsLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAodmFsdWUtPmlzT2JqZWN0KCZKU05vZGVGaWx0ZXI6OnNfaW5mbykpCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxKU05vZGVGaWx0ZXIqPih2YWx1ZSktPmltcGwoKTsKIAotICAgIGlmICh2
YWwtPmlzT2JqZWN0KCZKU05vZGVGaWx0ZXI6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxKU05vZGVGaWx0ZXIqPih2YWwpLT5pbXBsKCk7Ci0KLSAgICBLSlM6OkpTT2JqZWN0
KiBvID0gc3RhdGljX2Nhc3Q8S0pTOjpKU09iamVjdCo+KHZhbCk7Ci0gICAgaWYgKCFvLT5pbXBs
ZW1lbnRzQ2FsbCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBOb2RlRmlsdGVy
OjpjcmVhdGUoSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUobykpOworICAgIHJldHVybiBO
b2RlRmlsdGVyOjpjcmVhdGUoSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUodmFsdWUpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDMwICszNSwyOCBA
QCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIE5lZWQg
dG8gc3VwcG9ydCBib3RoIGdldCBhbmQgY2FsbCwgc28gdGhhdCBsaXN0WzBdIGFuZCBsaXN0KDAp
IHdvcmsuCi1LSlM6OkpTVmFsdWUqIEpTTm9kZUxpc3Q6OmNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhl
Y1N0YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBLSlM6OkFyZ0xpc3Qm
IGFyZ3MpCisvLyBOZWVkIHRvIHN1cHBvcnQgY2FsbCBzbyB0aGF0IGxpc3QoMCkgd29ya3MuCitz
dGF0aWMgSlNWYWx1ZSogY2FsbE5vZGVMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1
bmN0aW9uLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICAvLyBEbyBub3Qg
dXNlIHRoaXNPYmogaGVyZS4gU2VlIEpTSFRNTENvbGxlY3Rpb24uCi0gICAgS0pTOjpVU3RyaW5n
IHMgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKICAgICBib29sIG9rOwotICAgIHVuc2lnbmVk
IHUgPSBzLnRvVUludDMyKCZvayk7Ci0gICAgaWYgKG9rKQotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBpbXBsKCktPml0ZW0odSkpOwotCi0gICAgcmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnRvVUludDMyKCZv
ayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0
dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNOb2RlTGlzdCo+KGZ1bmN0aW9uKS0+aW1wbCgp
LT5pdGVtKGluZGV4KSk7CiB9CiAKLUNhbGxUeXBlIEpTTm9kZUxpc3Q6OmdldENhbGxEYXRhKENh
bGxEYXRhJikKK0NhbGxUeXBlIEpTTm9kZUxpc3Q6OmdldENhbGxEYXRhKENhbGxEYXRhJiBjYWxs
RGF0YSkKIHsKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsTm9kZUxpc3Q7CiAg
ICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOwogfQogCi1ib29sIEpTTm9kZUxpc3Q6OmNhbkdldEl0
ZW1zRm9yTmFtZShLSlM6OkV4ZWNTdGF0ZSosIE5vZGVMaXN0KiBpbXBsLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNOb2RlTGlzdDo6Y2FuR2V0SXRlbXNGb3JO
YW1lKEV4ZWNTdGF0ZSosIE5vZGVMaXN0KiBpbXBsLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIGltcGwtPml0ZW1XaXRoTmFtZShwcm9wZXJ0eU5hbWUpOwog
fQogCi1LSlM6OkpTVmFsdWUqIEpTTm9kZUxpc3Q6Om5hbWVHZXR0ZXIoS0pTOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlBy
b3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTTm9kZUxpc3Q6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBKU05vZGVMaXN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNO
b2RlTGlzdCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09i
ai0+aW1wbCgpLT5pdGVtV2l0aE5hbWUocHJvcGVydHlOYW1lKSk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAz
NDczNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAsNzUgKzIwLDExMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oIgogCisjaWYgVVNFKEpBVkFT
Q1JJUFRDT1JFX0JJTkRJTkdTKQorCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNIVE1MRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJIVE1MUGx1
Z0luRWxlbWVudC5oIgotCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQogI2luY2x1
ZGUgInJ1bnRpbWUuaCIKKyNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgorCiAjZW5kaWYKIAog
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVVTRShK
QVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKKworSlNWYWx1ZSogcnVudGltZU9iamVjdEdldHRlcihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK3sKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSogcnVudGltZU9iamVjdFByb3Bl
cnR5R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKQoreworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitib29sIHJ1bnRpbWVPYmpl
Y3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYsIEpTSFRNTEVsZW1lbnQqKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBKU1ZhbHVlKiwgSFRNTEVsZW1lbnQqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Q2FsbFR5cGUgcnVudGltZU9iamVjdEdldENhbGxEYXRhKEhUTUxFbGVtZW50KiwgQ2FsbERhdGEm
KQoreworICAgIHJldHVybiBDYWxsVHlwZU5vbmU7Cit9CisKKyNlbHNlCisKK3VzaW5nIG5hbWVz
cGFjZSBCaW5kaW5nczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIC8vIFJ1bnRpbWUg
b2JqZWN0IHN1cHBvcnQgY29kZSBmb3IgSlNIVE1MQXBwbGV0RWxlbWVudCwgSlNIVE1MRW1iZWRF
bGVtZW50IGFuZCBKU0hUTUxPYmplY3RFbGVtZW50LgogCi1zdGF0aWMgSlNPYmplY3QqIGdldFJ1
bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKQorc3RhdGljIEluc3RhbmNl
KiBwbHVnaW5JbnN0YW5jZShOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKCEobm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkpCisg
ICAgICAgIHJldHVybiAwOworICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnSW5FbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihub2RlKTsKKyAgICBJbnN0YW5jZSogaW5z
dGFuY2UgPSBwbHVnSW5FbGVtZW50LT5nZXRJbnN0YW5jZSgpOworICAgIGlmICghaW5zdGFuY2Ug
fHwgIWluc3RhbmNlLT5yb290T2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBpbnN0YW5jZTsKK30KIAotI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLSAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoZW1iZWRU
YWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkgewotICAgICAgICBIVE1MUGx1Z0lu
RWxlbWVudCogcGx1Z0luRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4o
bm9kZSk7Ci0gICAgICAgIGlmIChwbHVnSW5FbGVtZW50LT5nZXRJbnN0YW5jZSgpICYmIHBsdWdJ
bkVsZW1lbnQtPmdldEluc3RhbmNlKCktPnJvb3RPYmplY3QoKSkKLSAgICAgICAgICAgIC8vIFRo
ZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0aGUgUGx1Z0luIGVsZW1lbnQuCi0gICAgICAgICAgICBy
ZXR1cm4gS0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYywg
cGx1Z0luRWxlbWVudC0+Z2V0SW5zdGFuY2UoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBJ
ZiB3ZSBkb24ndCBoYXZlIGEgcnVudGltZSBvYmplY3QgcmV0dXJuIDAuCi0gICAgcmV0dXJuIDA7
CitzdGF0aWMgUnVudGltZU9iamVjdEltcCogZ2V0UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIE5vZGUqIG5vZGUpCit7CisgICAgSW5zdGFuY2UqIGluc3RhbmNlID0gcGx1Z2luSW5zdGFu
Y2Uobm9kZSk7CisgICAgaWYgKCFpbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMsIGlu
c3RhbmNlKTsKIH0KIAogSlNWYWx1ZSogcnVudGltZU9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxF
bGVtZW50Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKLSAgICByZXR1cm4gZ2V0
UnVudGltZU9iamVjdChleGVjLCBlbGVtZW50KTsKKyAgICBSdW50aW1lT2JqZWN0SW1wKiBydW50
aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCBlbGVtZW50KTsKKyAgICByZXR1cm4g
cnVudGltZU9iamVjdCA/IHJ1bnRpbWVPYmplY3QgOiBqc1VuZGVmaW5lZCgpOwogfQogCiBKU1Zh
bHVlKiBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBKU0hUTUxFbGVtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KHNs
b3Quc2xvdEJhc2UoKSk7CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KHRoaXNPYmotPmltcGwoKSk7Ci0gICAgSlNPYmplY3QqIHJ1bnRpbWVPYmpl
Y3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsIGVsZW1lbnQpOworICAgIFJ1bnRpbWVPYmplY3RJ
bXAqIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsIGVsZW1lbnQpOwogICAg
IGlmICghcnVudGltZU9iamVjdCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
cmV0dXJuIHJ1bnRpbWVPYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29s
IHJ1bnRpbWVPYmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgSlNIVE1M
RWxlbWVudCogb3JpZ2luYWxPYmosIEhUTUxFbGVtZW50KiB0aGlzSW1wKQorYm9vbCBydW50aW1l
T2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTSFRNTEVsZW1lbnQq
IGVsZW1lbnQpCiB7Ci0gICAgSlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2Jq
ZWN0KGV4ZWMsIHRoaXNJbXApOworICAgIFJ1bnRpbWVPYmplY3RJbXAqIHJ1bnRpbWVPYmplY3Qg
PSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsIGVsZW1lbnQtPmltcGwoKSk7CiAgICAgaWYgKCFydW50
aW1lT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFydW50aW1lT2JqZWN0
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgc2xvdC5zZXRDdXN0b20ob3JpZ2luYWxPYmosIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdl
dHRlcik7CisgICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwgcnVudGltZU9iamVjdFByb3BlcnR5
R2V0dGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9t
UHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlKiB2YWx1ZSwgSFRNTEVsZW1lbnQqIHRoaXNJbXApCitib29sIHJ1bnRpbWVPYmplY3RDdXN0
b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUqIHZhbHVlLCBIVE1MRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBKU09iamVjdCogcnVu
dGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywgdGhpc0ltcCk7CisgICAgUnVudGlt
ZU9iamVjdEltcCogcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywgZWxlbWVu
dCk7CiAgICAgaWYgKCFydW50aW1lT2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAo
IXJ1bnRpbWVPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCkBAIC05Nywy
NCArMTMzLDI0IEBAIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbVB1dChFeGVjU3RhdGUqIGUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBydW50aW1lT2JqZWN0SW1wbGVtZW50c0NhbGwoSFRN
TEVsZW1lbnQqIHRoaXNJbXApCitzdGF0aWMgSlNWYWx1ZSogY2FsbFBsdWdpbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gdGhpc0ltcC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
T2JqZWN0KiBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCB0aGlzSW1wKTsK
LSAgICBpZiAoIXJ1bnRpbWVPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gcnVudGltZU9iamVjdC0+aW1wbGVtZW50c0NhbGwoKTsKKyAgICBJbnN0YW5jZSogaW5zdGFu
Y2UgPSBwbHVnaW5JbnN0YW5jZShzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oZnVuY3Rpb24p
LT5pbXBsKCkpOworICAgIGluc3RhbmNlLT5iZWdpbigpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGluc3RhbmNlLT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMsIGFyZ3MpOworICAgIGluc3RhbmNl
LT5lbmQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDYWxsVHlwZSBydW50aW1lT2JqZWN0
R2V0Q2FsbERhdGEoSFRNTEVsZW1lbnQqIGVsZW1lbnQsIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sK
KyAgICBJbnN0YW5jZSogaW5zdGFuY2UgPSBwbHVnaW5JbnN0YW5jZShlbGVtZW50KTsKKyAgICBp
ZiAoIWluc3RhbmNlIHx8ICFpbnN0YW5jZS0+c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkp
CisgICAgICAgIHJldHVybiBDYWxsVHlwZU5vbmU7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY2FsbFBsdWdpbjsKKyAgICByZXR1cm4gQ2FsbFR5cGVOYXRpdmU7CiB9CiAKLUpTVmFs
dWUqIHJ1bnRpbWVPYmplY3RDYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBIVE1MRWxlbWVudCogdGhpc0ltcCkKLXsK
LSAgICBKU09iamVjdCogcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywgdGhp
c0ltcCk7Ci0gICAgaWYgKCFydW50aW1lT2JqZWN0KQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICByZXR1cm4gcnVudGltZU9iamVjdC0+Y2FsbEFzRnVuY3Rpb24oZXhlYywgdGhp
c09iaiwgYXJncyk7Ci19CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oCShyZXZp
c2lvbiAzNDczNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgTm9kZTsKIAogICAgIC8vIFJ1bnRpbWUgb2JqZWN0IHN1cHBvcnQgY29k
ZSBmb3IgSlNIVE1MQXBwbGV0RWxlbWVudCwgSlNIVE1MRW1iZWRFbGVtZW50IGFuZCBKU0hUTUxP
YmplY3RFbGVtZW50LgotICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIGEgbW9yZSBhcHByb3By
aWF0ZSBwbGFjZS4KIAogICAgIEtKUzo6SlNWYWx1ZSogcnVudGltZU9iamVjdEdldHRlcihLSlM6
OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlT
bG90Jik7CiAgICAgS0pTOjpKU1ZhbHVlKiBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoS0pT
OjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5
U2xvdCYpOwotICAgIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2xvdChL
SlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90
JiwgSlNIVE1MRWxlbWVudCosIEhUTUxFbGVtZW50Kik7CisgICAgYm9vbCBydW50aW1lT2JqZWN0
Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVu
dGlmaWVyJiwgS0pTOjpQcm9wZXJ0eVNsb3QmLCBKU0hUTUxFbGVtZW50Kik7CiAgICAgYm9vbCBy
dW50aW1lT2JqZWN0Q3VzdG9tUHV0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlm
aWVyJiwgS0pTOjpKU1ZhbHVlKiwgSFRNTEVsZW1lbnQqKTsKLSAgICBib29sIHJ1bnRpbWVPYmpl
Y3RJbXBsZW1lbnRzQ2FsbChIVE1MRWxlbWVudCopOwotICAgIEtKUzo6SlNWYWx1ZSogcnVudGlt
ZU9iamVjdENhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNv
bnN0IEtKUzo6QXJnTGlzdCYsIEhUTUxFbGVtZW50Kik7CisgICAgS0pTOjpDYWxsVHlwZSBydW50
aW1lT2JqZWN0R2V0Q2FsbERhdGEoSFRNTEVsZW1lbnQqLCBLSlM6OkNhbGxEYXRhJik7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MywxMSArMTQzLDcgQEAgdm9pZCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
cjo6cHV0KEV4ZQogICAgIGlmICghYWxsb3dzU2V0UHJvcGVydHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSlNWYWx1ZSogcHJlcGFyZWRWYWx1ZSA9IHByZXBhcmVJbmNvbWluZ1ZhbHVlKGV4
ZWMsIHZhbHVlKTsKLSAgICBpZiAoIXByZXBhcmVkVmFsdWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fdW53cmFwcGVkT2JqZWN0LT5wdXQodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZp
ZXIsIHByZXBhcmVkVmFsdWUpOworICAgIG1fdW53cmFwcGVkT2JqZWN0LT5wdXQodW53cmFwcGVk
RXhlY1N0YXRlKCksIGlkZW50aWZpZXIsIHByZXBhcmVJbmNvbWluZ1ZhbHVlKGV4ZWMsIHZhbHVl
KSk7CiAKICAgICB0cmFuc2ZlckV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogfQpAQCAtMTU3
LDExICsxNTMsNyBAQCB2b2lkIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpwdXQoRXhlCiAg
ICAgaWYgKCFhbGxvd3NTZXRQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU1Zh
bHVlKiBwcmVwYXJlZFZhbHVlID0gcHJlcGFyZUluY29taW5nVmFsdWUoZXhlYywgdmFsdWUpOwot
ICAgIGlmICghcHJlcGFyZWRWYWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91bndyYXBw
ZWRPYmplY3QtPnB1dCh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllciwgcHJlcGFyZWRW
YWx1ZSk7CisgICAgbV91bndyYXBwZWRPYmplY3QtPnB1dCh1bndyYXBwZWRFeGVjU3RhdGUoKSwg
aWRlbnRpZmllciwgcHJlcGFyZUluY29taW5nVmFsdWUoZXhlYywgdmFsdWUpKTsKIAogICAgIHRy
YW5zZmVyRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiB9CkBAIC0xOTAsMzMgKzE4Miw0MiBA
QCBib29sIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpkZWxldGVQCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotS0pTOjpDb25zdHJ1Y3RUeXBlIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
OjpnZXRDb25zdHJ1Y3REYXRhKEtKUzo6Q29uc3RydWN0RGF0YSYgZGF0YSkKK0pTT2JqZWN0KiBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBt
X3Vud3JhcHBlZE9iamVjdC0+Z2V0Q29uc3RydWN0RGF0YShkYXRhKTsKLX0KKyAgICBKU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlciogd3JhcHBlciA9IHN0YXRpY19jYXN0PEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyKj4oY29uc3RydWN0b3IpOwogCi1KU09iamVjdCogSlNRdWFyYW50aW5lZE9i
amVjdFdyYXBwZXI6OmNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCi17Ci0gICAgaWYgKCFhbGxvd3NDb25zdHJ1Y3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgQXJnTGlzdCBwcmVwYXJlZEFyZ3M7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdz
LnNpemUoKTsgKytpKQorICAgICAgICBwcmVwYXJlZEFyZ3MuYXBwZW5kKHdyYXBwZXItPnByZXBh
cmVJbmNvbWluZ1ZhbHVlKGV4ZWMsIGFyZ3NbaV0pKTsKKworICAgIC8vIEZJWE1FOiBXb3VsZCBi
ZSBuaWNlIHRvIGZpbmQgYSB3YXkgdG8gcmV1c2UgdGhlIHJlc3VsdCBvZiBtX3Vud3JhcHBlZE9i
amVjdC0+Z2V0Q29uc3RydWN0RGF0YQorICAgIC8vIGZyb20gd2hlbiB3ZSBjYWxsZWQgaXQgaW4g
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmdldENvbnN0cnVjdERhdGEuCisgICAgQ29uc3Ry
dWN0RGF0YSB1bndyYXBwZWRDb25zdHJ1Y3REYXRhOworICAgIENvbnN0cnVjdFR5cGUgdW53cmFw
cGVkQ29uc3RydWN0VHlwZSA9IHdyYXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LT5nZXRDb25zdHJ1
Y3REYXRhKHVud3JhcHBlZENvbnN0cnVjdERhdGEpOworICAgIEFTU0VSVCh1bndyYXBwZWRDb25z
dHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVOb25lKTsKIAotICAgIEFyZ0xpc3QgYXJnc0NvcHk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEpTVmFsdWUqIHByZXBhcmVkVmFsdWUgPSBwcmVwYXJlSW5jb21pbmdWYWx1ZShleGVjLCBhcmdz
W2ldKTsKLSAgICAgICAgaWYgKCFwcmVwYXJlZFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIGFyZ3NDb3B5LmFwcGVuZChwcmVwYXJlZFZhbHVlKTsKLSAgICB9CisgICAgSlNW
YWx1ZSogdW53cmFwcGVkUmVzdWx0ID0gS0pTOjpjb25zdHJ1Y3QoZXhlYywgd3JhcHBlci0+bV91
bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENvbnN0cnVjdFR5cGUsIHVud3JhcHBlZENvbnN0cnVj
dERhdGEsIHByZXBhcmVkQXJncyk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHRWYWx1ZSA9IHdyYXBP
dXRnb2luZ1ZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBtX3Vud3JhcHBlZE9iamVjdC0+Y29u
c3RydWN0KHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBhcmdzQ29weSkpOworICAgIEpTVmFsdWUqIHJl
c3VsdFZhbHVlID0gd3JhcHBlci0+d3JhcE91dGdvaW5nVmFsdWUod3JhcHBlci0+dW53cmFwcGVk
RXhlY1N0YXRlKCksIHVud3JhcHBlZFJlc3VsdCk7CiAgICAgQVNTRVJUKHJlc3VsdFZhbHVlLT5p
c09iamVjdCgpKTsKLSAgICBKU09iamVjdCogcmVzdWx0ID0gcmVzdWx0VmFsdWUtPnRvT2JqZWN0
KGV4ZWMpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJl
c3VsdFZhbHVlKTsKIAotICAgIHRyYW5zZmVyRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7Cisg
ICAgd3JhcHBlci0+dHJhbnNmZXJFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK0NvbnN0cnVjdFR5cGUgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBw
ZXI6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAg
ICBpZiAoIWFsbG93c0NvbnN0cnVjdCgpKQorICAgICAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5v
bmU7CisgICAgQ29uc3RydWN0RGF0YSB1bndyYXBwZWRDb25zdHJ1Y3REYXRhOworICAgIGlmICht
X3Vud3JhcHBlZE9iamVjdC0+Z2V0Q29uc3RydWN0RGF0YSh1bndyYXBwZWRDb25zdHJ1Y3REYXRh
KSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSkKKyAgICAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOb25l
OworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0OworICAgIHJl
dHVybiBDb25zdHJ1Y3RUeXBlTmF0aXZlOworfQorCiBib29sIEpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjppbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdAogewogICAgIHJldHVybiBtX3Vu
d3JhcHBlZE9iamVjdC0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCk7CkBAIC0yMjcsNDcgKzIyOCw0
OSBAQCBib29sIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpoYXNJbnN0CiAgICAgaWYgKCFh
bGxvd3NIYXNJbnN0YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1ZhbHVl
KiBwcmVwYXJlZFZhbHVlID0gcHJlcGFyZUluY29taW5nVmFsdWUoZXhlYywgdmFsdWUpOwotICAg
IGlmICghcHJlcGFyZWRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBy
ZXN1bHQgPSBtX3Vud3JhcHBlZE9iamVjdC0+aGFzSW5zdGFuY2UodW53cmFwcGVkRXhlY1N0YXRl
KCksIHByZXBhcmVkVmFsdWUpOworICAgIGJvb2wgcmVzdWx0ID0gbV91bndyYXBwZWRPYmplY3Qt
Pmhhc0luc3RhbmNlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBwcmVwYXJlSW5jb21pbmdWYWx1ZShl
eGVjLCB2YWx1ZSkpOwogCiAgICAgdHJhbnNmZXJFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsK
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNhbGxUeXBlIEpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYpCitKU1ZhbHVlKiBKU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlcjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIENhbGxEYXRhIHRl
bXA7Ci0gICAgcmV0dXJuIG1fdW53cmFwcGVkT2JqZWN0LT5nZXRDYWxsRGF0YSh0ZW1wKSAhPSBD
YWxsVHlwZU5vbmUgPyBDYWxsVHlwZU5hdGl2ZSA6IENhbGxUeXBlTm9uZTsKLX0KKyAgICBKU1F1
YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogd3JhcHBlciA9IHN0YXRpY19jYXN0PEpTUXVhcmFudGlu
ZWRPYmplY3RXcmFwcGVyKj4oZnVuY3Rpb24pOwogCi1KU1ZhbHVlKiBKU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlcjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIWFsbG93c0NhbGxBc0Z1bmN0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgSlNPYmplY3QqIHBy
ZXBhcmVkVGhpc09iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocHJlcGFyZUluY29taW5nVmFs
dWUoZXhlYywgdGhpc09iaikpOwotICAgIGlmICghcHJlcGFyZWRUaGlzT2JqKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlKiBwcmVwYXJlZFRoaXNWYWx1ZSA9IHdy
YXBwZXItPnByZXBhcmVJbmNvbWluZ1ZhbHVlKGV4ZWMsIHRoaXNWYWx1ZSk7CiAKICAgICBBcmdM
aXN0IHByZXBhcmVkQXJnczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSogcHJlcGFyZWRWYWx1ZSA9IHByZXBhcmVJbmNvbWlu
Z1ZhbHVlKGV4ZWMsIGFyZ3NbaV0pOwotICAgICAgICBpZiAoIXByZXBhcmVkVmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgcHJlcGFyZWRBcmdzLmFwcGVu
ZChwcmVwYXJlZFZhbHVlKTsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdz
LnNpemUoKTsgKytpKQorICAgICAgICBwcmVwYXJlZEFyZ3MuYXBwZW5kKHdyYXBwZXItPnByZXBh
cmVJbmNvbWluZ1ZhbHVlKGV4ZWMsIGFyZ3NbaV0pKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IHdyYXBPdXRnb2luZ1ZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBtX3Vud3JhcHBlZE9iamVj
dC0+Y2FsbEFzRnVuY3Rpb24odW53cmFwcGVkRXhlY1N0YXRlKCksIHByZXBhcmVkVGhpc09iaiwg
cHJlcGFyZWRBcmdzKSk7CisgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gZmluZCBhIHdh
eSB0byByZXVzZSB0aGUgcmVzdWx0IG9mIG1fdW53cmFwcGVkT2JqZWN0LT5nZXRDYWxsRGF0YQor
ICAgIC8vIGZyb20gd2hlbiB3ZSBjYWxsZWQgaXQgaW4gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBw
ZXI6OmdldENhbGxEYXRhLgorICAgIENhbGxEYXRhIHVud3JhcHBlZENhbGxEYXRhOworICAgIENh
bGxUeXBlIHVud3JhcHBlZENhbGxUeXBlID0gd3JhcHBlci0+bV91bndyYXBwZWRPYmplY3QtPmdl
dENhbGxEYXRhKHVud3JhcHBlZENhbGxEYXRhKTsKKyAgICBBU1NFUlQodW53cmFwcGVkQ2FsbFR5
cGUgIT0gQ2FsbFR5cGVOb25lKTsKIAotICAgIHRyYW5zZmVyRXhjZXB0aW9uVG9FeGVjU3RhdGUo
ZXhlYyk7CisgICAgSlNWYWx1ZSogdW53cmFwcGVkUmVzdWx0ID0gS0pTOjpjYWxsKGV4ZWMsIHdy
YXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LCB1bndyYXBwZWRDYWxsVHlwZSwgdW53cmFwcGVkQ2Fs
bERhdGEsIHByZXBhcmVkVGhpc1ZhbHVlLCBwcmVwYXJlZEFyZ3MpOworCisgICAgSlNWYWx1ZSog
cmVzdWx0ID0gd3JhcHBlci0+d3JhcE91dGdvaW5nVmFsdWUod3JhcHBlci0+dW53cmFwcGVkRXhl
Y1N0YXRlKCksIHVud3JhcHBlZFJlc3VsdCk7CisKKyAgICB3cmFwcGVyLT50cmFuc2ZlckV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorQ2FsbFR5
cGUgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmdldENhbGxEYXRhKENhbGxEYXRhJiBjYWxs
RGF0YSkKK3sKKyAgICBpZiAoIWFsbG93c0NhbGxBc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVy
biBDYWxsVHlwZU5vbmU7CisgICAgQ2FsbERhdGEgdW53cmFwcGVkQ2FsbERhdGE7CisgICAgaWYg
KG1fdW53cmFwcGVkT2JqZWN0LT5nZXRDYWxsRGF0YSh1bndyYXBwZWRDYWxsRGF0YSkgPT0gQ2Fs
bFR5cGVOb25lKQorICAgICAgICByZXR1cm4gQ2FsbFR5cGVOb25lOworICAgIGNhbGxEYXRhLm5h
dGl2ZS5mdW5jdGlvbiA9IGNhbGw7CisgICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOworfQorCiB2
b2lkIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5KQogewogICAgIGlmICghYWxsb3dzR2V0
UHJvcGVydHlOYW1lcygpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVk
T2JqZWN0V3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIuaAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDYgKzQyLDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGFsbG93c1Vud3JhcHBlZEFj
Y2Vzc0Zyb20oY29uc3QgS0pTOjpFeGVjU3RhdGUqKSBjb25zdDsKIAorICAgICAgICBzdGF0aWMg
Y29uc3QgS0pTOjpDbGFzc0luZm8gc19pbmZvOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcihLSlM6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywg
S0pTOjpKU09iamVjdCogdW53cmFwcGVkT2JqZWN0LCBLSlM6OkpTVmFsdWUqIHdyYXBwZWRQcm90
b3R5cGUpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisKKyAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRlKiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBL
SlM6OlByb3BlcnR5U2xvdCYpOwogCkBAIC01MSwyNSArNTksMTUgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUq
LCBjb25zdCBLSlM6OklkZW50aWZpZXImKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwgdW5zaWduZWQpOwogCisgICAgICAgIHZpcnR1YWwgS0pT
OjpDYWxsVHlwZSBnZXRDYWxsRGF0YShLSlM6OkNhbGxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwg
S0pTOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoS0pTOjpDb25zdHJ1Y3REYXRhJik7
Ci0gICAgICAgIHZpcnR1YWwgS0pTOjpKU09iamVjdCogY29uc3RydWN0KEtKUzo6RXhlY1N0YXRl
KiwgY29uc3QgS0pTOjpBcmdMaXN0JiBhcmdzKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaW1w
bGVtZW50c0hhc0luc3RhbmNlKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0
YW5jZShLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNWYWx1ZSopOwogCi0gICAgICAgIHZpcnR1YWwg
S0pTOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShLSlM6OkNhbGxEYXRhJik7Ci0gICAgICAgIHZpcnR1
YWwgS0pTOjpKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IEtKUzo6QXJnTGlzdCYgYXJncyk7Ci0KICAgICAgICAgdmly
dHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OlByb3BlcnR5
TmFtZUFycmF5Jik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKLQogICAgICAgICB2
aXJ0dWFsIEtKUzo6VVN0cmluZyBjbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiBtX3Vud3JhcHBl
ZE9iamVjdC0+Y2xhc3NOYW1lKCk7IH0KLSAgICAgICAgdmlydHVhbCBjb25zdCBLSlM6OkNsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQotICAgICAgICBzdGF0
aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gc19pbmZvOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcihLSlM6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhl
YywgS0pTOjpKU09iamVjdCogdW53cmFwcGVkT2JqZWN0LCBLSlM6OkpTVmFsdWUqIHdyYXBwZWRQ
cm90b3R5cGUpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NHZXRQcm9wZXJ0eSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NTZXRQcm9w
ZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC04MiwxMSArODAsMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogcHJlcGFyZUluY29t
aW5nVmFsdWUoS0pTOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEtKUzo6SlNWYWx1ZSogdW53
cmFwcGVkVmFsdWUpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIHdy
YXBPdXRnb2luZ1ZhbHVlKEtKUzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBLSlM6OkpTVmFs
dWUqIHVud3JhcHBlZFZhbHVlKSBjb25zdCA9IDA7CiAKLSAgICBwcml2YXRlOgogICAgICAgICBz
dGF0aWMgS0pTOjpKU1ZhbHVlKiBjYWNoZWRWYWx1ZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNv
bnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAg
ICAgdm9pZCB0cmFuc2ZlckV4Y2VwdGlvblRvRXhlY1N0YXRlKEtKUzo6RXhlY1N0YXRlKikgY29u
c3Q7CiAKKyAgICAgICAgc3RhdGljIEtKUzo6SlNWYWx1ZSogY2FsbChLSlM6OkV4ZWNTdGF0ZSos
IEtKUzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBLSlM6OkpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
S0pTOjpBcmdMaXN0Jik7CisgICAgICAgIHN0YXRpYyBLSlM6OkpTT2JqZWN0KiBjb25zdHJ1Y3Qo
S0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7CisK
ICAgICAgICAgS0pTOjpKU0dsb2JhbE9iamVjdCogbV91bndyYXBwZWRHbG9iYWxPYmplY3Q7CiAg
ICAgICAgIEtKUzo6SlNPYmplY3QqIG1fdW53cmFwcGVkT2JqZWN0OwogICAgIH07CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNSR0JDb2xvci5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JHQkNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjb25zdCBDbGFzc0luZm8gSlNSR0JDb2xvcjo6c19pbmZv
ID0geyAiUkdCQ29sb3IiLCAwLCAmSlNSR0JDb2xvclRhYmxlLCAwIH07CiAKIC8qCi1AYmVnaW4g
SlNSR0JDb2xvclRhYmxlIDMKK0BiZWdpbiBKU1JHQkNvbG9yVGFibGUKICAgcmVkICAgV2ViQ29y
ZTo6SlNSR0JDb2xvcjo6UmVkICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5CiAgIGdyZWVuIFdl
YkNvcmU6OkpTUkdCQ29sb3I6OkdyZWVuICAgICAgRG9udERlbGV0ZXxSZWFkT25seQogICBibHVl
ICBXZWJDb3JlOjpKU1JHQkNvbG9yOjpCbHVlICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTgg
QEAgSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yOjpKU1hNTEh0dHBSZQogICAgIHB1dERpcmVj
dChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1hNTEh0dHBSZXF1ZXN0UHJvdG90
eXBlOjpzZWxmKGV4ZWMpLCBOb25lKTsKIH0KIAotS0pTOjpDb25zdHJ1Y3RUeXBlIEpTWE1MSHR0
cFJlcXVlc3RDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShLSlM6OkNvbnN0cnVjdERhdGEm
IGRhdGEpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICBy
ZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKKyAgICBSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IHht
bEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZShzdGF0aWNfY2FzdDxKU1hNTEh0
dHBSZXF1ZXN0Q29uc3RydWN0b3IqPihjb25zdHJ1Y3RvciktPmRvY3VtZW50KCkpOworICAgIEpT
WE1MSHR0cFJlcXVlc3QqIHJlc3VsdCA9IG5ldyAoZXhlYykgSlNYTUxIdHRwUmVxdWVzdChKU1hN
TEh0dHBSZXF1ZXN0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCB4bWxIdHRwUmVxdWVzdC5nZXQoKSk7
CisgICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdCh4bWxIdHRwUmVxdWVzdC5nZXQo
KSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU09iamVjdCogSlNYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JikKK0NvbnN0cnVjdFR5cGUgSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7Ci0gICAgUmVmUHRyPFhN
TEh0dHBSZXF1ZXN0PiB4bWxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGUobV9k
b2N1bWVudC5nZXQoKSk7Ci0gICAgSlNYTUxIdHRwUmVxdWVzdCogcmV0ID0gbmV3IChleGVjKSBK
U1hNTEh0dHBSZXF1ZXN0KEpTWE1MSHR0cFJlcXVlc3RQcm90b3R5cGU6OnNlbGYoZXhlYyksIHht
bEh0dHBSZXF1ZXN0LmdldCgpKTsKLSAgICBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0
KHhtbEh0dHBSZXF1ZXN0LmdldCgpLCByZXQpOwotICAgIHJldHVybiByZXQ7CisgICAgY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RYTUxIdHRwUmVxdWVzdDsKKyAgICBy
ZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwxMyBAQCBj
bGFzcyBEb2N1bWVudDsKIGNsYXNzIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01PYmplY3QgewogcHVibGljOgogICAgIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvcihL
SlM6OkV4ZWNTdGF0ZSosIERvY3VtZW50Kik7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQorICAgIHN0YXRpYyBjb25zdCBLSlM6OkNs
YXNzSW5mbyBzX2luZm87CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBLSlM6OkNvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShLSlM6OkNvbnN0cnVjdERhdGEmKTsKLSAgICB2aXJ0dWFsIEtK
Uzo6SlNPYmplY3QqIGNvbnN0cnVjdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6QXJnTGlz
dCYpOwotCiAgICAgdmlydHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJnNfaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBz
X2luZm87CiAKLXByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogfTsK
IApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hT
TFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE1ICs0NSwx
NSBAQCBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcjo6SlNYU0xUUHJvY2VzCiAgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTWFNMVFByb2Nlc3NvclByb3Rv
dHlwZTo6c2VsZihleGVjKSwgTm9uZSk7CiB9CiAKLUNvbnN0cnVjdFR5cGUgSlNYU0xUUHJvY2Vz
c29yQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpCitzdGF0aWMg
SlNPYmplY3QqIGNvbnN0cnVjdFhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRp
dmU7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNYU0xUUHJvY2Vzc29yKEpTWFNMVFByb2Nlc3Nv
clByb3RvdHlwZTo6c2VsZihleGVjKSwgWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlKCkuZ2V0KCkpOwog
fQogCi1KU09iamVjdCogSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitDb25zdHJ1Y3RUeXBlIEpTWFNMVFBy
b2Nlc3NvckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEpCiB7Ci0gICAgUmVmUHRyPFhTTFRQcm9jZXNzb3I+IHhzbHRQcm9jZXNzb3IgPSBY
U0xUUHJvY2Vzc29yOjpjcmVhdGUoKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU1hTTFRQcm9j
ZXNzb3IoSlNYU0xUUHJvY2Vzc29yUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCB4c2x0UHJvY2Vzc29y
LmdldCgpKTsKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFhT
TFRQcm9jZXNzb3I7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOYXRpdmU7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vz
c29yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNM
VFByb2Nlc3NvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMiArMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEpTWFNMVFByb2Nl
c3NvckNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CiAgICAgcHVibGljOgogICAgICAg
ICBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvcihLSlM6OkV4ZWNTdGF0ZSopOworICAgICAgICBz
dGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gc19pbmZvOwogCisgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBLSlM6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShLSlM6OkNvbnN0
cnVjdERhdGEmKTsKLSAgICAgICAgdmlydHVhbCBLSlM6OkpTT2JqZWN0KiBjb25zdHJ1Y3QoS0pT
OjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OkFyZ0xpc3QmKTsKLQogICAgICAgICB2aXJ0dWFsIGNv
bnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVs
ZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVk
QWN0aW9uLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAgdXNpbmcgbmFt
ZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY2hlZHVsZWRBY3Rpb246OlNj
aGVkdWxlZEFjdGlvbihKU1ZhbHVlKiBmdW5jLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotICAgIDog
bV9mdW5jKGZ1bmMpCitTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihKU1ZhbHVlKiBm
dW5jdGlvbiwgY29uc3QgQXJnTGlzdCYgYXJncykKKyAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24p
CiB7CiAgICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKICAgICBm
b3IgKEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCkBAIC01NCwxNCArNTQsMTQgQEAgdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUo
SlNET01XaW5kbwogICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLT5pc0VuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gZnJhbWUtPnNjcmlw
dCgpOwotICAgIAorICAgIGZyYW1lLT5zY3JpcHQoKS0+c2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJh
Y2sodHJ1ZSk7CiAKLSAgICBzY3JpcHQtPnNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKHRydWUp
OworICAgIEpTTG9jayBsb2NrOwogCi0gICAgaWYgKEpTVmFsdWUqIGZ1bmMgPSBtX2Z1bmMuZ2V0
KCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2s7Ci0gICAgICAgIGlmIChmdW5jLT5pc09iamVjdCgp
ICYmIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZnVuYyktPmltcGxlbWVudHNDYWxsKCkpIHsKKyAg
ICBpZiAobV9mdW5jdGlvbikgeworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBtX2Z1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7Cisg
ICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgICAgIEpTRE9N
V2luZG93KiB3aW5kb3cgPSB3aW5kb3dTaGVsbC0+d2luZG93KCk7CiAgICAgICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKIApAQCAtNzEsNyArNzEsNyBAQCB2
b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShKU0RPTVdpbmRvCiAgICAgICAgICAgICAgICAg
YXJncy5hcHBlbmQobV9hcmdzW2ldKTsKIAogICAgICAgICAgICAgd2luZG93LT5zdGFydFRpbWVv
dXRDaGVjaygpOwotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jKS0+Y2Fs
bEFzRnVuY3Rpb24oZXhlYywgd2luZG93U2hlbGwsIGFyZ3MpOworICAgICAgICAgICAgY2FsbChl
eGVjLCBtX2Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHdpbmRvd1NoZWxsLCBhcmdzKTsK
ICAgICAgICAgICAgIHdpbmRvdy0+c3RvcFRpbWVvdXRDaGVjaygpOwogICAgICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGV4Y2Vw
dGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT50b09iamVjdChleGVjKTsKQEAgLTg5LDEwICs4OSwx
MCBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShKU0RPTVdpbmRvCiAgICAgLy8gRklY
TUU6IElzIHRoaXMgcmVhbGx5IHRoZSByaWdodCBwb2ludCB0byBkbyB0aGUgdXBkYXRlPyBXZSBu
ZWVkIGEgcGxhY2UgdGhhdCB3b3JrcwogICAgIC8vIGZvciBhbGwgcG9zc2libGUgZW50cnkgcG9p
bnRzIHRoYXQgbWlnaHQgcG9zc2libHkgZXhlY3V0ZSBzY3JpcHQsIGJ1dCB0aGlzIHNlZW1zCiAg
ICAgLy8gdG8gYmUgYSBiaXQgdG9vIGxvdy1sZXZlbC4KLSAgICBpZiAoRG9jdW1lbnQqIGRvYyA9
IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBkb2MtPnVwZGF0ZVJlbmRlcmluZygpOworICAg
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgZG9j
dW1lbnQtPnVwZGF0ZVJlbmRlcmluZygpOwogCi0gICAgc2NyaXB0LT5zZXRQcm9jZXNzaW5nVGlt
ZXJDYWxsYmFjayhmYWxzZSk7CisgICAgZnJhbWUtPnNjcmlwdCgpLT5zZXRQcm9jZXNzaW5nVGlt
ZXJDYWxsYmFjayhmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwy
MyArMjQsMTcgQEAKICNpbmNsdWRlIDxranMvcHJvdGVjdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAotbmFtZXNwYWNlIEtKUyB7Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLSAgICBjbGFzcyBB
cmdMaXN0OwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0RPTVdpbmRv
d1NoZWxsOwogCi0gICAvKioKLSAgICAqIEFuIGFjdGlvbiAoZWl0aGVyIGZ1bmN0aW9uIG9yIHN0
cmluZykgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgYSBzcGVjaWZpZWQKKyAgIC8qIEFuIGFjdGlvbiAo
ZWl0aGVyIGZ1bmN0aW9uIG9yIHN0cmluZykgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgYSBzcGVjaWZp
ZWQKICAgICAqIHRpbWUgaW50ZXJ2YWwsIGVpdGhlciBvbmNlIG9yIHJlcGVhdGVkbHkuIFVzZWQg
Zm9yIHdpbmRvdy5zZXRUaW1lb3V0KCkKICAgICAqIGFuZCB3aW5kb3cuc2V0SW50ZXJ2YWwoKQog
ICAgICovCiAgICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IFNjaGVkdWxlZEFjdGlvbihLSlM6OkpTVmFsdWUqIGZ1bmMsIGNvbnN0IEtKUzo6QXJnTGlzdCYg
YXJncyk7CisgICAgICAgIFNjaGVkdWxlZEFjdGlvbihLSlM6OkpTVmFsdWUqIGZ1bmN0aW9uLCBj
b25zdCBLSlM6OkFyZ0xpc3QmKTsKICAgICAgICAgU2NoZWR1bGVkQWN0aW9uKGNvbnN0IFN0cmlu
ZyYgY29kZSkKICAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAgICAgICAgIHsKQEAgLTQ5LDcg
KzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGV4ZWN1dGUoSlNET01X
aW5kb3dTaGVsbCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgS0pTOjpQcm90ZWN0ZWRQdHI8
S0pTOjpKU1ZhbHVlPiBtX2Z1bmM7CisgICAgICAgIEtKUzo6UHJvdGVjdGVkUHRyPEtKUzo6SlNW
YWx1ZT4gbV9mdW5jdGlvbjsKICAgICAgICAgVmVjdG9yPEtKUzo6UHJvdGVjdGVkUHRyPEtKUzo6
SlNWYWx1ZT4gPiBtX2FyZ3M7CiAgICAgICAgIFN0cmluZyBtX2NvZGU7CiAgICAgfTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMzQ3MzYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yODEsMjIgKzI4MSwxNyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXko
RXhlY1N0YXRlCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIAorICAgIEpTTG9jayBsb2NrOworICAgIAogICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0
aW9uIG9iamVjdC4KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CiAKLSAgICBKU0xvY2sgbG9jazsKLSAgICAKLSAgICBKU1ZhbHVlKiBmdW5jID0gW3Nl
bGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmluZyhuYW1lKSkpOwotCi0g
ICAgaWYgKCFmdW5jIHx8ICFmdW5jLT5pc09iamVjdCgpKQotICAgICAgICAvLyBNYXliZSB0aHJv
dyBhbiBleGNlcHRpb24gaGVyZT8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBDYWxsIHRo
ZSBmdW5jdGlvbiBvYmplY3QuCi0gICAgSlNPYmplY3QgKmZ1bmNJbXAgPSBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KGZ1bmMpOwotICAgIGlmICghZnVuY0ltcC0+aW1wbGVtZW50c0NhbGwoKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKG5hbWUpKSk7CisgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2Fs
bERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCisgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICBBcmdMaXN0IGFyZ0xpc3Q7CiAgICAgZ2V0TGlzdEZyb21OU0FycmF5KGV4
ZWMsIGFyZ3MsIFtzZWxmIF9yb290T2JqZWN0XSwgYXJnTGlzdCk7CkBAIC0zMDUsNyArMzAwLDcg
QEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZQogICAgICAgICByZXR1
cm4gbmlsOwogCiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+c3RhcnRU
aW1lb3V0Q2hlY2soKTsKLSAgICBKU1ZhbHVlICpyZXN1bHQgPSBmdW5jSW1wLT5jYWxsQXNGdW5j
dGlvbihleGVjLCBbc2VsZiBfaW1wXSwgYXJnTGlzdCk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0g
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJn
TGlzdCk7CiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+c3RvcFRpbWVv
dXRDaGVjaygpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDM0NzM2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDU5LDEwICs0NTksNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBwdXNoRXZlbnRIYW5kbGVyU2NvcGUo
S0pTOjpFeGVjU3RhdGUqLCBLSlM6OlNjb3BlQ2hhaW4mKSBjb25zdDtcblxuIikgaWYgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlIn07
CiAKICAgICAjIEN1c3RvbSBjYWxsIGZ1bmN0aW9ucwotICAgIGlmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21DYWxsIn0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVj
U3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpBcmdMaXN0Jik7XG4iKTsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIEtKUzo6Q2FsbFR5cGUgZ2V0Q2Fs
bERhdGEoS0pTOjpDYWxsRGF0YSYpO1xuXG4iKTsKLSAgICB9CisgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB2aXJ0dWFsIEtKUzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoS0pTOjpDYWxsRGF0
YSYpO1xuXG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21DYWxs
In07CiAKICAgICAjIEN1c3RvbSBkZWxldGVQcm9wZXJ0eSBmdW5jdGlvbgogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21EZWxldGVQcm9wZXJ0eSJ9OwpAQCAtNjU3LDcgKzY1NCw3IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCIvLyBGdW5j
dGlvbnNcblxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+
ZnVuY3Rpb25zfSkgewogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJh
dG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2Rl
R2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLSAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJLSlM6OkpTVmFsdWUqICR7ZnVuY3Rpb25OYW1l
fShLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OkFyZ0xpc3QmKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIktKUzo6SlNWYWx1ZSogJHtm
dW5jdGlvbk5hbWV9KEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIEtKUzo6SlNWYWx1
ZSosIGNvbnN0IEtKUzo6QXJnTGlzdCYpO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEy
MDQsMjIgKzEyMDEsMTkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
IG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1l
KSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1l
bnRhdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkltcGxlbWVudGF0aW9uRnVuY3Rpb24ifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiSlNWYWx1ZSogJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNWYWx1ZSogJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAKICAgICAgICAgICAgIGlmICgk
aW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICAgICAgICAgIEFkZEluY2x1
ZGVzRm9yVHlwZSgiSlNET01XaW5kb3dTaGVsbCIpOwotICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEFTU0VSVCghdGhpc09iai0+aW5oZXJpdHMoJkpTRE9NV2luZG93Ojpz
X2luZm8pKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJkpTRE9NV2luZG93U2hlbGw6OnNfaW5mbykpXG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRU
aGlzT2JqID0gdG9KU0RPTVdpbmRvdyh0aGlzVmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYXN0ZWRUaGlzT2JqKVxuIik7CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dT
aGVsbCo+KHRoaXNPYmopLT53aW5kb3coKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCYke2NsYXNzTmFtZX06OnNfaW5mbykpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJiR7Y2xhc3NOYW1lfTo6
c19pbmZvKSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpO1xuIik7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpc09iaiA9IHN0
YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXNPYmogPSBzdGF0aWNf
Y2FzdDwkY2xhc3NOYW1lKj4odGhpc1ZhbHVlKTtcbiIpOwogICAgICAgICAgICAgfQogCi0KICAg
ICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0RvbWFp
blNlY3VyaXR5In0gJiYgCiAgICAgICAgICAgICAgICAgISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5In0pIHsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXNPYmotPmFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpXG4iKTsKQEAgLTE3OTcsOCArMTc5MSwxNSBAQCBFT0YKIAog
ICAgIGlmICgkY2FuQ29uc3RydWN0KSB7CiAkaW1wbENvbnRlbnQgLj0gPDwgIkVPRiI7Ci0gICAg
dmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpIHsg
cmV0dXJuIENvbnN0cnVjdFR5cGVOYXRpdmU7IH0KLSAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25z
dHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxKU09iamVjdCo+KHRvSlMoZXhlYywgJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCkp
KTsgfQorICAgIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBjb25zdCBBcmdMaXN0JikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KHRvSlMoZXhlYywgJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCkpKTsKKyAg
ICB9CisgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdERhdGEubmF0aXZl
LmZ1bmN0aW9uID0gY29uc3RydWN0OworICAgICAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5hdGl2
ZTsKKyAgICB9CiBFT0YKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlz
aW9uIDM0NzM2KQorKysgV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDcsMTQgKzEwNywxNiBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5Q
T2JqZWN0KiBvCiAgICAgICAgIEpTTG9jayBsb2NrOwogICAgICAgICAKICAgICAgICAgLy8gQ2Fs
bCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU09iamVjdCAqZnVuY0ltcCA9IHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4ob2JqLT5pbXApOwotICAgICAgICBpZiAoIWZ1bmNJbXAtPmltcGxl
bWVudHNDYWxsKCkpCisgICAgICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gb2JqLT5pbXA7CisgICAg
ICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0
aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBB
cmdMaXN0IGFyZ0xpc3Q7CiAgICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoZXhlYywgYXJn
cywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwogICAgICAgICByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ViA9IGZ1bmNJbXAtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIGZ1bmNJbXAsIGFyZ0xpc3QpOwor
ICAgICAgICBKU1ZhbHVlICpyZXN1bHRWID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBmdW5jdGlvbiwgYXJnTGlzdCk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICAgICAgLy8gQ29udmVydCBhbmQg
cmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCkBAIC0xNDYsMjkgKzE0OCwy
MyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAgICAg
ICByZXR1cm4gX05QTl9FdmFsdWF0ZShucHAsIG8sIChOUFN0cmluZyAqKSZhcmdzWzBdLnZhbHVl
LnN0cmluZ1ZhbHVlLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gTG9va3VwIHRo
ZSBmdW5jdGlvbiBvYmplY3QuCisgICAgICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVj
dC4KICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKICAg
ICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSlNMb2NrIGxvY2s7Ci0g
ICAgICAgIEpTVmFsdWUqIGZ1bmMgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9t
TlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykpOwotICAgICAgICBpZiAoZnVuYy0+aXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIE5VTExfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IAotICAgICAgICBpZiAoZnVuYy0+aXNVbmRlZmlu
ZWQoKSkgewotICAgICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisgICAgICAg
IEpTVmFsdWUqIGZ1bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5Q
SWRlbnRpZmllcihpLT52YWx1ZS5zdHJpbmcpKTsKKyAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CisgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxE
YXRhKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9u
IG9iamVjdC4KLSAgICAgICAgSlNPYmplY3QgKmZ1bmNJbXAgPSBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KGZ1bmMpOwotICAgICAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPihvYmotPmltcCk7CiAgICAgICAgIEFyZ0xpc3QgYXJnTGlzdDsKICAgICAgICAgZ2V0TGlz
dEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBhcmdDb3VudCwgcm9vdE9iamVjdCwgYXJnTGlz
dCk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5zdGFydFRpbWVvdXRDaGVj
aygpOwotICAgICAgICBKU1ZhbHVlICpyZXN1bHRWID0gZnVuY0ltcC0+Y2FsbEFzRnVuY3Rpb24o
ZXhlYywgdGhpc09iaiwgYXJnTGlzdCk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdFYgPSBjYWxs
KGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iai0+aW1wLCBhcmdMaXN0KTsK
ICAgICAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnN0b3BUaW1lb3V0Q2hlY2soKTsK
IAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rp
b24gY2FsbC4KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuY3BwCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUv
YnJpZGdlL3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQg
SW5zdGFuY2U6OnNldFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUKICAgICBhRmllbGQtPnNldFZhbHVl
VG9JbnN0YW5jZShleGVjLCB0aGlzLCBhVmFsdWUpOwogfQogCi1KU09iamVjdCogSW5zdGFuY2U6
OmNyZWF0ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPEluc3RhbmNl
PiBpbnN0YW5jZSkKK1J1bnRpbWVPYmplY3RJbXAqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UpCiB7CiAj
aWYgUExBVEZPUk0oUVQpCiAgICAgaWYgKGluc3RhbmNlLT5nZXRCaW5kaW5nTGFuZ3VhZ2UoKSA9
PSBRdExhbmd1YWdlKQpAQCAtMTA0LDcgKzEwNCw3IEBAIEluc3RhbmNlKiBJbnN0YW5jZTo6Z2V0
SW5zdGFuY2UoSlNPYmplY3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFvYmplY3QtPmlu
aGVyaXRzKCZSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBJbnN0YW5jZSogaW5zdGFuY2UgPSAoc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KG9i
amVjdCkpLT5nZXRJbnRlcm5hbEluc3RhbmNlKCk7CisgICAgSW5zdGFuY2UqIGluc3RhbmNlID0g
c3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KG9iamVjdCktPmdldEludGVybmFsSW5zdGFu
Y2UoKTsKICAgICBpZiAoIWluc3RhbmNlKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoaW5z
dGFuY2UtPmdldEJpbmRpbmdMYW5ndWFnZSgpICE9IGxhbmd1YWdlKQpJbmRleDogV2ViQ29yZS9i
cmlkZ2UvcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuaAko
cmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDEwICszNCwxMSBAQAogCiBuYW1lc3BhY2UgS0pTICB7CiAKK2NsYXNzIEFyZ0xp
c3Q7CiBjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBBcmdM
aXN0OwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CitjbGFzcyBSdW50aW1lT2JqZWN0SW1wOwog
CiBuYW1lc3BhY2UgQmluZGluZ3MgewogCkBAIC00NywzOSArNDgsMzEgQEAgY2xhc3MgUm9vdE9i
amVjdDsKIAogdHlwZWRlZiBWZWN0b3I8TWV0aG9kKj4gTWV0aG9kTGlzdDsKIAotY2xhc3MgRmll
bGQKLXsKK2NsYXNzIEZpZWxkIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5h
bWUoKSBjb25zdCA9IDA7Ci0KICAgICB2aXJ0dWFsIEpTVmFsdWUqIHZhbHVlRnJvbUluc3RhbmNl
KEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVl
KikgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCB+RmllbGQoKSB7fQorICAgIHZpcnR1YWwgfkZp
ZWxkKCkgeyB9CiB9OwogCi1jbGFzcyBNZXRob2QgOiBOb25jb3B5YWJsZQoteworY2xhc3MgTWV0
aG9kIDogTm9uY29weWFibGUgewogcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqbmFt
ZSgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCA9
IDA7CiAgICAgICAgIAotICAgIHZpcnR1YWwgfk1ldGhvZCgpIHt9CisgICAgdmlydHVhbCB+TWV0
aG9kKCkgeyB9CiB9OwogCi1jbGFzcyBDbGFzcyA6IE5vbmNvcHlhYmxlCi17CitjbGFzcyBDbGFz
cyA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5hbWUo
KSBjb25zdCA9IDA7Ci0gICAgCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgTWV0aG9kTGlzdCBtZXRob2RzTmFtZWQoY29uc3QgSWRlbnRpZmll
ciYsIEluc3RhbmNlKikgY29uc3QgPSAwOwotICAgIAotICAgIHZpcnR1YWwgRmllbGQgKmZpZWxk
TmFtZWQoY29uc3QgSWRlbnRpZmllciYsIEluc3RhbmNlKikgY29uc3QgPSAwOwotCisgICAgdmly
dHVhbCBGaWVsZCogZmllbGROYW1lZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UqKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBmYWxsYmFja09iamVjdChFeGVjU3RhdGUqLCBJ
bnN0YW5jZSosIGNvbnN0IElkZW50aWZpZXImKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9Ci0g
ICAgCi0gICAgdmlydHVhbCB+Q2xhc3MoKSB7fQorCisgICAgdmlydHVhbCB+Q2xhc3MoKSB7IH0K
IH07CiAKIHR5cGVkZWYgdm9pZCAoKktKU0RpZEV4ZWN1dGVGdW5jdGlvblB0cikoRXhlY1N0YXRl
KiwgSlNPYmplY3QqIHJvb3RPYmplY3QpOwpAQCAtMTA0LDcgKzk3LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHNldERpZEV4ZWN1dGVGdW5jdGlvbihLSlNEaWRFeGVjdXRlRnVuY3Rpb25Q
dHIgZnVuYyk7CiAgICAgc3RhdGljIEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBkaWRFeGVjdXRl
RnVuY3Rpb24oKTsKIAotICAgIHN0YXRpYyBKU09iamVjdCogY3JlYXRlUnVudGltZU9iamVjdChF
eGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3RhbmNlPik7CisgICAgc3RhdGljIFJ1bnRpbWVPYmpl
Y3RJbXAqIGNyZWF0ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnN0YW5j
ZT4pOwogICAgIHN0YXRpYyBJbnN0YW5jZSogZ2V0SW5zdGFuY2UoSlNPYmplY3QqLCBCaW5kaW5n
TGFuZ3VhZ2UpOwogCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYmVmb3JlIGFu
ZCBhZnRlciB0aGUgbWFpbiBlbnRyeSBwb2ludHMgaW50bwpAQCAtMTIxLDkgKzExNCw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQo
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mVW5kZWZpbmVk
RmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqKSB7fQogCi0gICAg
dmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpIHsgcmV0dXJuIENhbGxUeXBl
Tm9uZTsgfQotICAgIAogICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tlTWV0aG9kKEV4ZWNTdGF0
ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0JiBhcmdzKSA9IDA7CisKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0
YXRlKiwgY29uc3QgQXJnTGlzdCYpIHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0KICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYpIHsgfQpAQCAtMTQ1LDggKzEzOCw3IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8Um9v
dE9iamVjdD4gX3Jvb3RPYmplY3Q7CiB9OwogCi1jbGFzcyBBcnJheSA6IE5vbmNvcHlhYmxlCi17
CitjbGFzcyBBcnJheSA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBBcnJheShQYXNzUmVm
UHRyPFJvb3RPYmplY3Q+KTsKICAgICB2aXJ0dWFsIH5BcnJheSgpOwpAQCAtMTU0LDYgKzE0Niw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKiwgdW5z
aWduZWQgaW5kZXgsIEpTVmFsdWUqKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiB2
YWx1ZUF0KEV4ZWNTdGF0ZSAqLCB1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAg
IFJlZlB0cjxSb290T2JqZWN0PiBfcm9vdE9iamVjdDsKIH07CkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX21ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9tZXRob2QuY3BwCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4ICsyOSw5IEBACiAjaW5j
bHVkZSA8a2pzL0pTR2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIK
IAotdXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2UgS0pTOwor
bmFtZXNwYWNlIEtKUyB7CisKK3VzaW5nIG5hbWVzcGFjZSBCaW5kaW5nczsKIAogUnVudGltZU1l
dGhvZDo6UnVudGltZU1ldGhvZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJmlk
ZW50LCBCaW5kaW5nczo6TWV0aG9kTGlzdCAmbSkgCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b3R5cGUoKSwgaWRlbnQpCkBA
IC02MSwzMiArNjIsNDEgQEAgYm9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RQogICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotSlNWYWx1ZSAqUnVudGltZU1ldGhvZDo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgQXJnTGlz
dCAmYXJncykKK3N0YXRpYyBKU1ZhbHVlKiBjYWxsUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewotICAgIGlmIChfbWV0aG9kTGlzdC0+aXNFbXB0eSgpKQorICAgIFJ1bnRpbWVN
ZXRob2QqIG1ldGhvZCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVNZXRob2QqPihmdW5jdGlvbik7CisK
KyAgICBpZiAobWV0aG9kLT5tZXRob2RzKCktPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgCi0gICAgUnVudGltZU9iamVjdEltcCAqaW1wID0gMDsKKyAgICBS
dW50aW1lT2JqZWN0SW1wKiBpbXA7CiAKLSAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0g
JktKUzo6UnVudGltZU9iamVjdEltcDo6c19pbmZvKSB7Ci0gICAgICAgIGltcCA9IHN0YXRpY19j
YXN0PFJ1bnRpbWVPYmplY3RJbXAqPih0aGlzT2JqKTsKKyAgICBpZiAodGhpc1ZhbHVlLT5pc09i
amVjdCgmUnVudGltZU9iamVjdEltcDo6c19pbmZvKSkgeworICAgICAgICBpbXAgPSBzdGF0aWNf
Y2FzdDxSdW50aW1lT2JqZWN0SW1wKj4odGhpc1ZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAg
ICAvLyBJZiB0aGlzT2JqIGlzIHRoZSBET00gb2JqZWN0IGZvciBhIHBsdWdpbiwgZ2V0IHRoZSBj
b3JyZXNwb25kaW5nCiAgICAgICAgIC8vIHJ1bnRpbWUgb2JqZWN0IGZyb20gdGhlIERPTSBvYmpl
Y3QuCi0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gdGhpc09iai0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKSk7Ci0gICAgICAgIGlmICh2YWx1ZS0+
aXNPYmplY3QoJktKUzo6UnVudGltZU9iamVjdEltcDo6c19pbmZvKSkgICAgCisgICAgICAgIEpT
VmFsdWUqIHZhbHVlID0gdGhpc1ZhbHVlLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiX19h
cHBsZV9ydW50aW1lX29iamVjdCIpKTsKKyAgICAgICAgaWYgKHZhbHVlLT5pc09iamVjdCgmUnVu
dGltZU9iamVjdEltcDo6c19pbmZvKSkgICAgCiAgICAgICAgICAgICBpbXAgPSBzdGF0aWNfY2Fz
dDxSdW50aW1lT2JqZWN0SW1wKj4odmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIH0KIAotICAgIGlmICghaW1w
KQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotCiAgICAgUmVm
UHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpOwogICAg
IGlmICghaW5zdGFuY2UpIAogICAgICAgICByZXR1cm4gUnVudGltZU9iamVjdEltcDo6dGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CiAgICAgICAgIAogICAgIGluc3RhbmNlLT5iZWdpbigp
OwotICAgIEpTVmFsdWUgKmFWYWx1ZSA9IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgKl9t
ZXRob2RMaXN0LCBhcmdzKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tl
TWV0aG9kKGV4ZWMsICptZXRob2QtPm1ldGhvZHMoKSwgYXJncyk7CiAgICAgaW5zdGFuY2UtPmVu
ZCgpOwotICAgIHJldHVybiBhVmFsdWU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ2FsbFR5
cGUgUnVudGltZU1ldGhvZDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAg
IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxSdW50aW1lTWV0aG9kOworICAgIHJldHVy
biBDYWxsVHlwZU5hdGl2ZTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9t
ZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCShy
ZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQgKzMzLDEzIEBAIG5hbWVzcGFjZSBLSlMgewogCiBj
bGFzcyBSdW50aW1lTWV0aG9kIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHVibGljOgot
ICAgIFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZuLCBC
aW5kaW5nczo6TWV0aG9kTGlzdCAmbWV0aG9kTGlzdCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3Bl
cnR5U2xvdCYpOwotCi0gICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKTsKKyAgICBS
dW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdz
OjpNZXRob2RMaXN0Jik7CisgICAgQmluZGluZ3M6Ok1ldGhvZExpc3QqIG1ldGhvZHMoKSBjb25z
dCB7IHJldHVybiBfbWV0aG9kTGlzdC5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIHN0YXRpYyBK
U1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwg
Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKIAogICAgIE93blB0cjxCaW5kaW5nczo6
TWV0aG9kTGlzdD4gX21ldGhvZExpc3Q7CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0
LmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw0NCArMTc5LDMzIEBAIGJvb2wgUnVudGltZU9iamVj
dEltcDo6ZGVsZXRlUHJvcGVydHkoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTVmFsdWUg
KlJ1bnRpbWVPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVHlwZSBo
aW50KSBjb25zdAorSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6ZGVmYXVsdFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNUeXBlIGhpbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFpbnN0YW5jZSkKICAg
ICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMpOwogICAgIAotICAgIEpT
VmFsdWUgKnJlc3VsdDsKLSAgICAKICAgICBSZWZQdHI8QmluZGluZ3M6Okluc3RhbmNlPiBwcm90
ZWN0b3IoaW5zdGFuY2UpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwotCi0gICAgcmVzdWx0ID0g
aW5zdGFuY2UtPmRlZmF1bHRWYWx1ZShleGVjLCBoaW50KTsKLSAgICAKKyAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBpbnN0YW5jZS0+ZGVmYXVsdFZhbHVlKGV4ZWMsIGhpbnQpOwogICAgIGluc3RhbmNl
LT5lbmQoKTsKLSAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1DYWxsVHlwZSBSdW50aW1l
T2JqZWN0SW1wOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYpCitzdGF0aWMgSlNWYWx1ZSogY2FsbFJ1
bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIGlmICghaW5zdGFuY2UpCi0gICAgICAgIHJl
dHVybiBDYWxsVHlwZU5vbmU7Ci0gICAgQ2FsbERhdGEgZGF0YTsKLSAgICByZXR1cm4gaW5zdGFu
Y2UtPmdldENhbGxEYXRhKGRhdGEpICE9IENhbGxUeXBlTm9uZSA/IENhbGxUeXBlTmF0aXZlIDog
Q2FsbFR5cGVOb25lOworICAgIFJlZlB0cjxCaW5kaW5nczo6SW5zdGFuY2U+IGluc3RhbmNlKHN0
YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihmdW5jdGlvbiktPmdldEludGVybmFsSW5zdGFu
Y2UoKSk7CisgICAgaW5zdGFuY2UtPmJlZ2luKCk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gaW5z
dGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhlYywgYXJncyk7CisgICAgaW5zdGFuY2UtPmVu
ZCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorQ2FsbFR5cGUgUnVudGltZU9iamVjdEltcDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEm
IGNhbGxEYXRhKQogewotICAgIGlmICghaW5zdGFuY2UpCi0gICAgICAgIHJldHVybiB0aHJvd0lu
dmFsaWRBY2Nlc3NFcnJvcihleGVjKTsKLQotICAgIFJlZlB0cjxCaW5kaW5nczo6SW5zdGFuY2U+
IHByb3RlY3RvcihpbnN0YW5jZSk7Ci0gICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0KLSAgICBKU1Zh
bHVlICphVmFsdWUgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsK
LSAgICAKLSAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgCi0gICAgcmV0dXJuIGFWYWx1ZTsKKyAg
ICBpZiAoIWluc3RhbmNlIHx8ICFpbnN0YW5jZS0+c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9k
KCkpCisgICAgICAgIHJldHVybiBDYWxsVHlwZU5vbmU7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1
bmN0aW9uID0gY2FsbFJ1bnRpbWVPYmplY3Q7CisgICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOwog
fQogCiB2b2lkIFJ1bnRpbWVPYmplY3RJbXA6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKSW5kZXg6IFdlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9vYmplY3QuaAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDMzICsyNiwyNyBAQAogI2lmbmRl
ZiBLSlNfUlVOVElNRV9PQkpFQ1RfSAogI2RlZmluZSBLSlNfUlVOVElNRV9PQkpFQ1RfSAogCi0j
aW5jbHVkZSA8a2pzL0pTT2JqZWN0Lmg+Ci0KICNpbmNsdWRlICJydW50aW1lLmgiCi0KLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDxranMvSlNPYmplY3QuaD4KIAogbmFt
ZXNwYWNlIEtKUyB7CiAKIGNsYXNzIFJ1bnRpbWVPYmplY3RJbXAgOiBwdWJsaWMgSlNPYmplY3Qg
ewogcHVibGljOgogICAgIHZpcnR1YWwgflJ1bnRpbWVPYmplY3RJbXAoKTsKLSAgICAKLSAgICBj
b25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KIAot
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSk7
Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgKmRlZmF1bHRW
YWx1ZShFeGVjU3RhdGUgKmV4ZWMsIEpTVHlwZSBoaW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiAsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSk7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwg
SlNUeXBlIGhpbnQpIGNvbnN0OwogICAgIHZpcnR1YWwgS0pTOjpDYWxsVHlwZSBnZXRDYWxsRGF0
YShLSlM6OkNhbGxEYXRhJik7Ci0gICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYpOwogCiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLSAgICBCaW5kaW5n
czo6SW5zdGFuY2UgKmdldEludGVybmFsSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpbnN0YW5j
ZS5nZXQoKTsgfQotICAgIAorICAgIEJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW50ZXJuYWxJbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RhbmNlLmdldCgpOyB9CisKICAgICBzdGF0aWMgSlNP
YmplY3QqIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKEV4ZWNTdGF0ZSopOwotICAgIAorCiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKIHByb3RlY3RlZDoKQEAgLTYwLDcgKzU0
LDcgQEAgcHJvdGVjdGVkOgogICAgIFJ1bnRpbWVPYmplY3RJbXAoUGFzc1JlZlB0cjxCaW5kaW5n
czo6SW5zdGFuY2U+KTsgLy8gT25seSBhbGxvdyBJbnN0YW5jZXMgYW5kIGRlcml2ZWQgY2xhc3Nl
cyB0byBjcmVhdGUgdXMKIAogcHJpdmF0ZToKLSAgICBSdW50aW1lT2JqZWN0SW1wKCk7IC8vIHBy
ZXZlbnQgZGVmYXVsdCBjb25zdHJ1Y3Rpb24KKyAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogICAgIAogICAgIHN0YXRpYyBK
U1ZhbHVlKiBmYWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIEpTVmFsdWUqIGZpZWxkR2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKSW5k
ZXg6IFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2Jy
aWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2Miw5IEBAIENs
YXNzICpDSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKICAgICByZXR1cm4gX2NsYXNzOwogfQog
Ci1DYWxsVHlwZSBDSW5zdGFuY2U6OmdldENhbGxEYXRhKENhbGxEYXRhJikKK2Jvb2wgQ0luc3Rh
bmNlOjpzdXBwb3J0c0ludm9rZURlZmF1bHRNZXRob2QoKSBjb25zdAogewotICAgIHJldHVybiBf
b2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQgPyBDYWxsVHlwZU5hdGl2ZSA6IENhbGxUeXBl
Tm9uZTsKKyAgICByZXR1cm4gX29iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0OwogfQogCiBK
U1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE1l
dGhvZExpc3QmIG1ldGhvZExpc3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9jL2NfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2Nf
aW5zdGFuY2UuaAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBKU1ZhbHVlKiB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgSlNWYWx1
ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIEpTVHlwZSBoaW50KSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIEtKUzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoS0pTOjpDYWxsRGF0YSYpOwotICAg
IAogICAgIHZpcnR1YWwgSlNWYWx1ZSAqaW52b2tlTWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IE1ldGhvZExpc3QgJm1ldGhvZCwgY29uc3QgQXJnTGlzdCAmYXJncyk7CisgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
SlNWYWx1ZSAqaW52b2tlRGVmYXVsdE1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBBcmdM
aXN0ICZhcmdzKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pz
b2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3Qu
bW0JKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjkxLDE3ICsyOTEsMTcgQEAgam9iamVjdCBKYXZhSlNPYmpl
Y3Q6OmNhbGwoanN0cmluZyBtZXRobwogICAgIEpTTG9jayBsb2NrOwogICAgIAogICAgIElkZW50
aWZpZXIgaWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1ldGhvZE5hbWUpLnVzdHJpbmcoKSk7
Ci0gICAgSlNWYWx1ZSogZnVuYyA9IF9pbXAtPmdldChleGVjLCBpZGVudGlmaWVyKTsKLSAgICBp
ZiAoZnVuYy0+aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IF9p
bXAtPmdldChleGVjLCBpZGVudGlmaWVyKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAv
LyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCi0gICAgSlNPYmplY3QgKmZ1bmNJbXAgPSBzdGF0
aWNfY2FzdDxKU09iamVjdCo+KGZ1bmMpOwotICAgIEpTT2JqZWN0ICp0aGlzT2JqID0gY29uc3Rf
Y2FzdDxKU09iamVjdCo+KF9pbXApOwogICAgIEFyZ0xpc3QgYXJnTGlzdDsKICAgICBnZXRMaXN0
RnJvbUpBcnJheShleGVjLCBhcmdzLCBhcmdMaXN0KTsKICAgICByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICBKU1ZhbHVlICpyZXN1bHQgPSBmdW5j
SW1wLT5jYWxsQXNGdW5jdGlvbihleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKKyAgICBKU1ZhbHVl
KiByZXN1bHQgPSBLSlM6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
X2ltcCwgYXJnTGlzdCk7CiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnN0b3BUaW1l
b3V0Q2hlY2soKTsKIAogICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsK
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCShyZXZpc2lvbiAzNDczNikKKysr
IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw5ICs1MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEpTVmFsdWUqIHZhbHVlT2YoRXhlY1N0
YXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFsdWUoRXhlY1N0YXRl
KiwgSlNUeXBlIGhpbnQpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2Fs
bERhdGEoQ2FsbERhdGEmKTsKLSAgICAKICAgICB2aXJ0dWFsIEpTVmFsdWUgKmludm9rZU1ldGhv
ZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZCwgY29uc3QgQXJnTGlz
dCAmYXJncyk7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgSlNWYWx1ZSAqaW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzU2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfaW5zdGFuY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X2luc3RhbmNlLm1tCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE3LDkgKzExNyw5IEBAIEJpbmRpbmdz
OjpDbGFzcyogT2JqY0luc3RhbmNlOjpnZXRDbGFzcygKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QmluZGluZ3M6OkNsYXNzKj4oX2NsYXNzKTsKIH0KIAotQ2FsbFR5cGUgT2JqY0luc3RhbmNlOjpn
ZXRDYWxsRGF0YShDYWxsRGF0YSYpCitib29sIE9iamNJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VE
ZWZhdWx0TWV0aG9kKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW19pbnN0YW5jZS5nZXQoKSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGludm9rZURlZmF1bHRNZXRob2RXaXRoQXJndW1lbnRz
OildID8gQ2FsbFR5cGVOYXRpdmUgOiBDYWxsVHlwZU5vbmU7CisgICAgcmV0dXJuIFtfaW5zdGFu
Y2UuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnZva2VEZWZhdWx0TWV0aG9k
V2l0aEFyZ3VtZW50czopXTsKIH0KIAogSlNWYWx1ZSogT2JqY0luc3RhbmNlOjppbnZva2VNZXRo
b2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0LCBjb25zdCBB
cmdMaXN0ICZhcmdzKQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCShyZXZpc2lv
biAzNDczNikKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsMjUgKzI2LDIzIEBACiAjaWZuZGVmIEtKU19CSU5ESU5HU19P
QkpDX1JVTlRJTUVfSAogI2RlZmluZSBLSlNfQklORElOR1NfT0JKQ19SVU5USU1FX0gKIAotI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8a2pzL0pT
T2JqZWN0Lmg+CiAjaW5jbHVkZSAib2JqY19oZWFkZXIuaCIKICNpbmNsdWRlICJydW50aW1lLmgi
Ci0KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUg
PGtqcy9KU09iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogbmFtZXNwYWNl
IEtKUyB7CiBuYW1lc3BhY2UgQmluZGluZ3MgewogCi1leHRlcm4gQ2xhc3NTdHJ1Y3RQdHIgd2Vi
U2NyaXB0T2JqZWN0Q2xhc3MoKTsKLWV4dGVybiBDbGFzc1N0cnVjdFB0ciB3ZWJVbmRlZmluZWRD
bGFzcygpOworQ2xhc3NTdHJ1Y3RQdHIgd2ViU2NyaXB0T2JqZWN0Q2xhc3MoKTsKK0NsYXNzU3Ry
dWN0UHRyIHdlYlVuZGVmaW5lZENsYXNzKCk7CiAKIGNsYXNzIE9iamNJbnN0YW5jZTsKIAotY2xh
c3MgT2JqY0ZpZWxkIDogcHVibGljIEZpZWxkCi17CitjbGFzcyBPYmpjRmllbGQgOiBwdWJsaWMg
RmllbGQgewogcHVibGljOgotICAgIE9iamNGaWVsZChJdmFyU3RydWN0UHRyIGl2YXIpOworICAg
IE9iamNGaWVsZChJdmFyU3RydWN0UHRyKTsKICAgICBPYmpjRmllbGQoQ0ZTdHJpbmdSZWYgbmFt
ZSk7CiAgICAgCiAgICAgdmlydHVhbCBKU1ZhbHVlICp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CkBAIC01Nyw4ICs1NSw3
IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBfbmFtZTsKIH07CiAKLWNs
YXNzIE9iamNNZXRob2QgOiBwdWJsaWMgTWV0aG9kCi17CitjbGFzcyBPYmpjTWV0aG9kIDogcHVi
bGljIE1ldGhvZCB7CiBwdWJsaWM6CiAgICAgT2JqY01ldGhvZCgpIDogX29iamNDbGFzcygwKSwg
X3NlbGVjdG9yKDApLCBfamF2YVNjcmlwdE5hbWUoMCkge30KICAgICBPYmpjTWV0aG9kKENsYXNz
U3RydWN0UHRyIGFDbGFzcywgY29uc3QgY2hhciAqX3NlbGVjdG9yKTsKQEAgLTc5LDggKzc2LDcg
QEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IF9qYXZhU2NyaXB0TmFtZTsK
IH07CiAKLWNsYXNzIE9iamNBcnJheSA6IHB1YmxpYyBBcnJheQoteworY2xhc3MgT2JqY0FycmF5
IDogcHVibGljIEFycmF5IHsKIHB1YmxpYzoKICAgICBPYmpjQXJyYXkoT2JqZWN0U3RydWN0UHRy
LCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKIApAQCAtOTgsMjQgKzk0LDIzIEBAIHByaXZhdGU6
CiAKIGNsYXNzIE9iamNGYWxsYmFja09iamVjdEltcCA6IHB1YmxpYyBKU09iamVjdCB7CiBwdWJs
aWM6Ci0gICAgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKE9iamNJbnN0YW5jZSAqaSwgY29uc3QgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUpOworICAgIE9iamNGYWxsYmFja09iamVjdEltcChPYmpjSW5z
dGFuY2UqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogCi0gICAgY29uc3QgQ2xh
c3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJldHVybiBfaXRlbTsgfQor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgdm9pZCBw
dXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7
CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwotICAgIHZpcnR1
YWwgSlNWYWx1ZSAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhp
c09iaiwgY29uc3QgQXJnTGlzdCAmYXJncyk7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKLSAg
ICB2aXJ0dWFsIEpTVmFsdWUgKmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIEpTVHlwZSBo
aW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGRl
ZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBKU1R5cGUgaGludCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IEpTVHlwZSB0eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKCk7IC8vIHByZXZl
bnQgZGVmYXVsdCBjb25zdHJ1Y3Rpb24KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IGluZm87CisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CiAKICAgICBSZWZQdHI8T2JqY0luc3RhbmNlPiBfaW5zdGFuY2U7CiAg
ICAgSWRlbnRpZmllciBfaXRlbTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1t
CShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDE3ICszMCwxOCBAQAogI2luY2x1ZGUgInJ1
bnRpbWVfYXJyYXkuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgogI2luY2x1ZGUgIldl
YlNjcmlwdE9iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEtKUzsKIHVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwogCi1leHRlcm4gQ2xh
c3NTdHJ1Y3RQdHIgS0pTOjpCaW5kaW5nczo6d2ViU2NyaXB0T2JqZWN0Q2xhc3MoKQorZXh0ZXJu
IENsYXNzU3RydWN0UHRyIEJpbmRpbmdzOjp3ZWJTY3JpcHRPYmplY3RDbGFzcygpCiB7CiAgICAg
c3RhdGljIENsYXNzU3RydWN0UHRyPFdlYlNjcmlwdE9iamVjdD4gd2ViU2NyaXB0T2JqZWN0Q2xh
c3MgPSBOU0NsYXNzRnJvbVN0cmluZyhAIldlYlNjcmlwdE9iamVjdCIpOwogICAgIHJldHVybiB3
ZWJTY3JpcHRPYmplY3RDbGFzczsKIH0KIAotZXh0ZXJuIENsYXNzU3RydWN0UHRyIEtKUzo6Qmlu
ZGluZ3M6OndlYlVuZGVmaW5lZENsYXNzKCkKK2V4dGVybiBDbGFzc1N0cnVjdFB0ciBCaW5kaW5n
czo6d2ViVW5kZWZpbmVkQ2xhc3MoKQogewogICAgIHN0YXRpYyBDbGFzc1N0cnVjdFB0cjxXZWJV
bmRlZmluZWQ+IHdlYlVuZGVmaW5lZENsYXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJVbmRl
ZmluZWQiKTsKICAgICByZXR1cm4gd2ViVW5kZWZpbmVkQ2xhc3M7CkBAIC0xOTgsNyArMTk5LDcg
QEAgdW5zaWduZWQgaW50IE9iamNBcnJheTo6Z2V0TGVuZ3RoKCkgY29ucwogCiBjb25zdCBDbGFz
c0luZm8gT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjppbmZvID0geyAiT2JqY0ZhbGxiYWNrT2JqZWN0
IiwgMCwgMCwgMCB9OwogCi1PYmpjRmFsbGJhY2tPYmplY3RJbXA6Ok9iamNGYWxsYmFja09iamVj
dEltcChPYmpjSW5zdGFuY2UqIGksIGNvbnN0IEtKUzo6SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUp
CitPYmpjRmFsbGJhY2tPYmplY3RJbXA6Ok9iamNGYWxsYmFja09iamVjdEltcChPYmpjSW5zdGFu
Y2UqIGksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIDogX2luc3RhbmNlKGkpCiAs
IF9pdGVtKHByb3BlcnR5TmFtZSkKIHsKQEAgLTIyNSwyMCArMjI2LDE0IEBAIEpTVHlwZSBPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OnR5cGUoKSBjb24KICAgICByZXR1cm4gVW5kZWZpbmVkVHlwZTsK
IH0KIAotQ2FsbFR5cGUgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRDYWxsRGF0YShDYWxsRGF0
YSYpCitzdGF0aWMgSlNWYWx1ZSogY2FsbE9iakNGYWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewotICAgIGlkIHRhcmdldE9iamVjdCA9IF9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7
Ci0gICAgcmV0dXJuIFt0YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihp
bnZva2VVbmRlZmluZWRNZXRob2RGcm9tV2ViU2NyaXB0OndpdGhBcmd1bWVudHM6KV0gPyBDYWxs
VHlwZU5hdGl2ZSA6IENhbGxUeXBlTm9uZTsKLX0KLQotSlNWYWx1ZSogT2JqY0ZhbGxiYWNrT2Jq
ZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBBcmdMaXN0ICZhcmdzKQotewotICAgIGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSAh
PSAmS0pTOjpSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8pCisgICAgaWYgKCF0aGlzVmFsdWUtPmlz
T2JqZWN0KCZSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmlu
ZWQoKTsKIAotICAgIFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVP
YmplY3RJbXAqPih0aGlzT2JqKTsKKyAgICBSdW50aW1lT2JqZWN0SW1wKiBpbXAgPSBzdGF0aWNf
Y2FzdDxSdW50aW1lT2JqZWN0SW1wKj4odGhpc1ZhbHVlKTsKICAgICBJbnN0YW5jZSogaW5zdGFu
Y2UgPSBpbXAtPmdldEludGVybmFsSW5zdGFuY2UoKTsKIAogICAgIGlmICghaW5zdGFuY2UpCkBA
IC0yNTAsMTMgKzI0NSwxNCBAQCBKU1ZhbHVlKiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmNhbGxB
c0Z1CiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gb2JqY0luc3RhbmNlLT5nZXRPYmplY3QoKTsKICAg
ICAKICAgICBpZiAoW3RhcmdldE9iamVjdCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGlu
dm9rZVVuZGVmaW5lZE1ldGhvZEZyb21XZWJTY3JpcHQ6d2l0aEFyZ3VtZW50czopXSl7Ci0gICAg
ICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdDsKICAgICAgICAgT2JqY0NsYXNzKiBvYmpjQ2xhc3Mg
PSBzdGF0aWNfY2FzdDxPYmpjQ2xhc3MqPihpbnN0YW5jZS0+Z2V0Q2xhc3MoKSk7Ci0gICAgICAg
IE9iamNNZXRob2QqIGZhbGxiYWNrTWV0aG9kID0gbmV3IE9iamNNZXRob2QgKG9iamNDbGFzcy0+
aXNhKCksIHNlbF9nZXROYW1lKEBzZWxlY3RvcihpbnZva2VVbmRlZmluZWRNZXRob2RGcm9tV2Vi
U2NyaXB0OndpdGhBcmd1bWVudHM6KSkpOwotICAgICAgICBmYWxsYmFja01ldGhvZC0+c2V0SmF2
YVNjcmlwdE5hbWUoKENGU3RyaW5nUmVmKVtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpfaXRl
bS5hc2NpaSgpIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZ10pOwotICAgICAgICBtZXRo
b2RMaXN0LmFwcGVuZChmYWxsYmFja01ldGhvZCk7CisgICAgICAgIE93blB0cjxPYmpjTWV0aG9k
PiBmYWxsYmFja01ldGhvZChuZXcgT2JqY01ldGhvZChvYmpjQ2xhc3MtPmlzYSgpLCBzZWxfZ2V0
TmFtZShAc2VsZWN0b3IoaW52b2tlVW5kZWZpbmVkTWV0aG9kRnJvbVdlYlNjcmlwdDp3aXRoQXJn
dW1lbnRzOikpKSk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWVJZGVudGlmaWVyID0g
c3RhdGljX2Nhc3Q8T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKj4oZnVuY3Rpb24pLT5wcm9wZXJ0eU5h
bWUoKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lKEFkb3B0Q0YsIENGU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgbmFtZUlkZW50aWZpZXIuZGF0YSgpLCBuYW1lSWRl
bnRpZmllci5zaXplKCkpKTsKKyAgICAgICAgZmFsbGJhY2tNZXRob2QtPnNldEphdmFTY3JpcHRO
YW1lKG5hbWUuZ2V0KCkpOworICAgICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7CisgICAgICAg
IG1ldGhvZExpc3QuYXBwZW5kKGZhbGxiYWNrTWV0aG9kLmdldCgpKTsKICAgICAgICAgcmVzdWx0
ID0gaW5zdGFuY2UtPmludm9rZU1ldGhvZChleGVjLCBtZXRob2RMaXN0LCBhcmdzKTsKLSAgICAg
ICAgZGVsZXRlIGZhbGxiYWNrTWV0aG9kOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGluc3Rh
bmNlLT5lbmQoKTsKQEAgLTI2NCw2ICsyNjAsMTUgQEAgSlNWYWx1ZSogT2JqY0ZhbGxiYWNrT2Jq
ZWN0SW1wOjpjYWxsQXNGdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0NhbGxUeXBlIE9iamNG
YWxsYmFja09iamVjdEltcDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAg
IGlkIHRhcmdldE9iamVjdCA9IF9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CisgICAgaWYgKCFbdGFy
Z2V0T2JqZWN0IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW52b2tlVW5kZWZpbmVkTWV0
aG9kRnJvbVdlYlNjcmlwdDp3aXRoQXJndW1lbnRzOildKQorICAgICAgICByZXR1cm4gQ2FsbFR5
cGVOb25lOworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxPYmpDRmFsbGJhY2tP
YmplY3Q7CisgICAgcmV0dXJuIENhbGxUeXBlTmF0aXZlOworfQorCiBib29sIE9iamNGYWxsYmFj
a09iamVjdEltcDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFu
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5oCShyZXZp
c2lvbiAzNDczNikKKysrIFdlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIFFPYmplY3QqIGdldE9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxRdElu
c3RhbmNlPiBnZXRRdEluc3RhbmNlKFFPYmplY3QqLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsK
LSAgICBzdGF0aWMgSlNPYmplY3QqIGdldFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQ
YXNzUmVmUHRyPFF0SW5zdGFuY2U+KTsKKyAgICBzdGF0aWMgUnVudGltZU9iamVjdEltcCogZ2V0
UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4pOwog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBRdENsYXNzOwpJbmRleDogV2ViQ29yZS9kb20v
Tm9kZUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgJ
KHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDE4ICsyNywxOSBAQAogCiAjaW5jbHVkZSAiVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0g
ICAgY2xhc3MgTm9kZUl0ZXJhdG9yIDogcHVibGljIFRyYXZlcnNhbCB7CisgICAgY2xhc3MgTm9k
ZUl0ZXJhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUl0ZXJhdG9yPiwgcHVibGljIFRyYXZl
cnNhbCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlSXRlcmF0
b3I+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93
LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVu
Y2VzKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVJdGVy
YXRvcihyb290Tm9kZSwgd2hhdFRvU2hvdywgZmlsdGVyLCBleHBhbmRFbnRpdHlSZWZlcmVuY2Vz
KSk7CiAgICAgICAgIH0KLSAgICAgICAgdmlydHVhbCB+Tm9kZUl0ZXJhdG9yKCk7CisgICAgICAg
IH5Ob2RlSXRlcmF0b3IoKTsKIAogICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4
Y2VwdGlvbkNvZGUmLCBLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOwogICAgICAgICBQYXNzUmVm
UHRyPE5vZGU+IHByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiwgS0pTOjpKU1ZhbHVlKiYgZXhj
ZXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcAkocmV2aXNpb24gMzQ3MzYpCisrKyBXZWJDb3JlL2Rv
bS9UcmF2ZXJzYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsNiBAQCBUcmF2ZXJz
YWw6OlRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+IHJvCiB7CiB9CiAKLVRyYXZlcnNhbDo6flRy
YXZlcnNhbCgpCi17Ci19Ci0KIHNob3J0IFRyYXZlcnNhbDo6YWNjZXB0Tm9kZShOb2RlKiBub2Rl
LCBKU1ZhbHVlKiYgZXhjZXB0aW9uKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUbyBoYW5kbGUg
WE1MIHByb3Blcmx5IHdlIHdvdWxkIGhhdmUgdG8gY2hlY2sgbV9leHBhbmRFbnRpdHlSZWZlcmVu
Y2VzLgpJbmRleDogV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vVHJhdmVyc2FsLmgJKHJldmlzaW9uIDM0NzM2KQorKysgV2ViQ29yZS9kb20vVHJhdmVy
c2FsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgVHJhdmVyc2Fs
X2gKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBLSlMgewpAQCAtMzgsMTAg
KzM3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3Mg
Tm9kZUZpbHRlcjsKIAotICAgIGNsYXNzIFRyYXZlcnNhbCA6IHB1YmxpYyBSZWZDb3VudGVkPFRy
YXZlcnNhbD4geworICAgIGNsYXNzIFRyYXZlcnNhbCB7CiAgICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIH5UcmF2ZXJzYWwoKTsKLQogICAgICAgICBOb2RlKiByb290KCkgY29uc3QgeyByZXR1
cm4gbV9yb290LmdldCgpOyB9CiAgICAgICAgIHVuc2lnbmVkIHdoYXRUb1Nob3coKSBjb25zdCB7
IHJldHVybiBtX3doYXRUb1Nob3c7IH0KICAgICAgICAgTm9kZUZpbHRlciogZmlsdGVyKCkgY29u
c3QgeyByZXR1cm4gbV9maWx0ZXIuZ2V0KCk7IH0KQEAgLTQ5LDcgKzQ2LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBUcmF2ZXJzYWwoUGFzc1JlZlB0
cjxOb2RlPiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9v
bCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSAgICAgICAgCiAgICAgICAgIHNob3J0IGFjY2Vw
dE5vZGUoTm9kZSosIEtKUzo6SlNWYWx1ZSomIGpzRXhjZXB0aW9uKSBjb25zdDsKIAogICAgIHBy
aXZhdGU6CkluZGV4OiBXZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vVHJlZVdhbGtlci5oCShyZXZpc2lvbiAzNDczNikKKysrIFdlYkNvcmUvZG9tL1Ry
ZWVXYWxrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAjZGVmaW5lIFRy
ZWVXYWxrZXJfaAogCiAjaW5jbHVkZSAiVHJhdmVyc2FsLmgiCi0KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLSAgICBjbGFzcyBUcmVl
V2Fsa2VyIDogcHVibGljIFRyYXZlcnNhbCB7CisgICAgY2xhc3MgVHJlZVdhbGtlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFRyZWVXYWxrZXI+LCBwdWJsaWMgVHJhdmVyc2FsIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyZWVXYWxrZXI+IGNyZWF0ZShQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0
ZXI+IGZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQogICAgICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21941</attachid>
            <date>2008-06-25 23:59:55 -0700</date>
            <delta_ts>2008-06-26 16:01:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>NoWrappersPatch.txt</filename>
            <type>text/plain</type>
            <size>72771</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUwIEBACisyMDA4LTA2LTI1ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTcyMQorICAgICAgICAgIHNwZWVkIHVwIEphdmFTY3JpcHRDb3JlIGJ5IG5vdCB3cmFwcGlu
ZyBzdHJpbmdzIGluIG9iamVjdHMganVzdAorICAgICAgICAgIHRvIGNhbGwgZnVuY3Rpb25zIG9u
IHRoZW0KKworICAgICAgICAtIG9wdGltaXplIFVTdHJpbmcgYXBwZW5kIGFuZCB0aGUgcmVwbGFj
ZSBmdW5jdGlvbiBhIGJpdAorCisgICAgICAgIFN1blNwaWRlciBzYXlzIDEuOCUgZmFzdGVyLgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOiBVcGRhdGVkLgorCisgICAgICAgICogVk0v
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6IEFkZGVkIGluY2x1ZGUgb2YgSlNTdHJpbmcuaCwg
bm93IG5lZWRlZAorICAgICAgICBiZWNhdXNlIGpzU3RyaW5nIHJldHVybnMgYSBKU1N0cmluZyou
CisKKyAgICAgICAgKiBWTS9NYWNoaW5lLmNwcDoKKyAgICAgICAgKEtKUzo6TWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUpOiBSZW1vdmVkIHRoZSB0b09iamVjdCBjYWxsIGZyb20gbmF0aXZlCisgICAg
ICAgIGZ1bmN0aW9uIGNhbGxzLiBBbHNvIHJlbW92ZWQgY29kZSB0byBwdXQgdGhlIHRoaXMgdmFs
dWUgaW50byBhIHJlZ2lzdGVyLgorCisgICAgICAgICoga2pzL0Jvb2xlYW5PYmplY3QuY3BwOgor
ICAgICAgICAoS0pTOjpib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcpOiBSZXdyaXRlIHRvIGhhbmRs
ZSBmYWxzZSBhbmQgdHJ1ZQorICAgICAgICBzZXBhcmF0ZWx5LgorCisgICAgICAgICoga2pzL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEtKUzo6Y29uc3RydWN0RnVuY3Rpb24pOiBV
c2Ugc2luZ2xlLWNoYXJhY3RlciBhcHBlbmQgcmF0aGVyIHRoYW4gYnVpbGRpbmcKKyAgICAgICAg
YSBzdHJpbmcgZm9yIGVhY2ggY2hhcmFjdGVyLgorICAgICAgICAqIGtqcy9KU0Z1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY1VuZXNjYXBlKTogRGl0dG8uCisKKyAgICAgICAg
KiBranMvSlNJbW1lZGlhdGUuY3BwOgorICAgICAgICAoS0pTOjpKU0ltbWVkaWF0ZTo6cHJvdG90
eXBlKTogQWRkZWQuIEdldHMgdGhlIGFwcHJvcHJpYXRlIHByb3RvdHlwZSBmb3IKKyAgICAgICAg
dXNlIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLiBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdG9PYmpl
Y3Qgd2hlbiBkb2luZyBhCisgICAgICAgIGdldCBvbiBhbiBpbW1lZGlhdGUgdmFsdWUuCisgICAg
ICAgICoga2pzL0pTSW1tZWRpYXRlLmg6IEFkZGVkIHByb3RvdHlwZS4KKworICAgICAgICAqIGtq
cy9KU09iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTT2JqZWN0Ojp0b1N0cmluZyk6IFR3ZWFr
ZWQgZm9ybWF0dGluZy4KKworICAgICAgICAqIGtqcy9KU09iamVjdC5oOgorICAgICAgICAoS0pT
OjpKU1ZhbHVlOjpnZXQpOiBVc2UgcHJvdG90eXBlIGluc3RlYWQgb2YgdG9PYmplY3QgdG8gYXZv
aWQgY3JlYXRpbmcKKyAgICAgICAgYW4gb2JqZWN0IHdyYXBwZXIganVzdCB0byBzZWFyY2ggZm9y
IHByb3BlcnRpZXMuIFRoaXMgYWxzbyBzYXZlcyBhbgorICAgICAgICB1bm5lY2Vzc2FyeSBoYXNo
IHRhYmxlIGxvb2t1cCBzaW5jZSB0aGUgb2JqZWN0IHdyYXBwZXJzIHRoZW1zZWx2ZXMgZG9uJ3QK
KyAgICAgICAgaGF2ZSBhbnkgcHJvcGVydGllcy4KKworICAgICAgICAqIGtqcy9KU1N0cmluZy5o
OiBBZGRlZCB0b1RoaXNTdHJpbmcgYW5kIHRvVGhpc0pTU3RyaW5nLgorCisgICAgICAgICoga2pz
L0pTVmFsdWUuY3BwOgorICAgICAgICAoS0pTOjpKU0NlbGw6OnRvVGhpc1N0cmluZyk6IEFkZGVk
LgorICAgICAgICAoS0pTOjpKU0NlbGw6OnRvVGhpc0pTU3RyaW5nKTogQWRkZWQuCisgICAgICAg
IChLSlM6OkpTQ2VsbDo6Z2V0SlNOdW1iZXIpOiBBZGRlZC4KKyAgICAgICAgKEtKUzo6anNTdHJp
bmcpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIEpTU3RyaW5nKi4KKyAgICAgICAgKEtKUzo6anNP
d25lZFN0cmluZyk6IERpdHRvLgorCisgICAgICAgICoga2pzL0pTVmFsdWUuaDoKKyAgICAgICAg
KEtKUzo6SlNWYWx1ZTo6dG9UaGlzU3RyaW5nKTogQWRkZWQuCisgICAgICAgIChLSlM6OkpTVmFs
dWU6OnRvVGhpc0pTU3RyaW5nKTogQWRkZWQuCisgICAgICAgIChLSlM6OkpTVmFsdWU6OmdldEpT
TnVtYmVyKTogQWRkZWQuCisKKyAgICAgICAgKiBranMvTnVtYmVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEtKUzo6TnVtYmVyT2JqZWN0OjpnZXRKU051bWJlcik6IEFkZGVkLgorICAgICAgICAoS0pT
OjppbnRlZ2VyX3BhcnRfbm9leHApOiBBcHBlbmQgQyBzdHJpbmcgZGlyZWN0bHkgcmF0aGVyIHRo
YW4gZmlyc3QKKyAgICAgICAgdHVybmluZyBpdCBpbnRvIGEgVVN0cmluZy4KKyAgICAgICAgKEtK
Uzo6bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpOiBVc2UgZ2V0SlNOdW1iZXIgdG8gY2hlY2sgaWYg
dGhlIHZhbHVlCisgICAgICAgIGlzIGEgbnVtYmVyIHJhdGhlciB0aGFuIGlzT2JqZWN0KCZOdW1i
ZXJPYmplY3Q6OmluZm8pLiBUaGlzIHdvcmtzIGZvcgorICAgICAgICBpbW1lZGlhdGUgbnVtYmVy
cywgbnVtYmVyIGNlbGxzLCBhbmQgTnVtYmVyT2JqZWN0IGluc3RhbmNlcy4KKyAgICAgICAgKEtK
Uzo6bnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6
bnVtYmVyUHJvdG9GdW5jVmFsdWVPZik6IERpdHRvLgorICAgICAgICAoS0pTOjpudW1iZXJQcm90
b0Z1bmNUb0ZpeGVkKTogRGl0dG8uCisgICAgICAgIChLSlM6Om51bWJlclByb3RvRnVuY1RvRXhw
b25lbnRpYWwpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNp
b24pOiBEaXR0by4KKyAgICAgICAgKiBranMvTnVtYmVyT2JqZWN0Lmg6IEFkZGVkIGdldEpTTnVt
YmVyLgorCisgICAgICAgICoga2pzL1Byb3BlcnR5U2xvdC5jcHA6IFR3ZWFrZWQgY29tbWVudC4K
KworICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6CisgICAgICAgIChLSlM6OkpTU3RyaW5nOjp0
b1RoaXNTdHJpbmcpOiBBZGRlZC4KKyAgICAgICAgKEtKUzo6SlNTdHJpbmc6OnRvVGhpc0pTU3Ry
aW5nKTogQWRkZWQuCisgICAgICAgIChLSlM6OkpTU3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3Qp
OiBDaGFuZ2VkIGNvZGUgdGhhdCBzZWFyY2hlcyB0aGUKKyAgICAgICAgcHJvdG90eXBlIGNoYWlu
IHRvIHN0YXJ0IHdpdGggdGhlIHN0cmluZyBwcm90b3R5cGUgYW5kIG5vdCBjcmVhdGUgYQorICAg
ICAgICBzdHJpbmcgb2JqZWN0LgorICAgICAgICAoS0pTOjpKU051bWJlckNlbGw6OnRvVGhpc1N0
cmluZyk6IEFkZGVkLgorICAgICAgICAoS0pTOjpKU051bWJlckNlbGw6OmdldEpTTnVtYmVyKTog
QWRkZWQuCisKKyAgICAgICAgKiBranMvbG9va3VwLmNwcDoKKyAgICAgICAgKEtKUzo6c3RhdGlj
RnVuY3Rpb25HZXR0ZXIpOiBNb3ZlZCBoZXJlLCBiZWNhdXNlIHRoZXJlJ3Mgbm8gcG9pbnQgaW4K
KyAgICAgICAgaGF2aW5nIGEgZnVuY3Rpb24gdGhhdCdzIG9ubHkgdXNlZCBmb3IgYSBmdW5jdGlv
biBwb2ludGVyIGJlIGlubGluZS4KKyAgICAgICAgKEtKUzo6c2V0VXBTdGF0aWNGdW5jdGlvblNs
b3QpOiBOZXcgZnVuY3Rpb24gZm9yIGdldFN0YXRpY0Z1bmN0aW9uU2xvdC4KKworICAgICAgICAq
IGtqcy9sb29rdXAuaDoKKyAgICAgICAgKEtKUzo6c3RhdGljVmFsdWVHZXR0ZXIpOiBEb24ndCBt
YXJrIHRoaXMgaW5saW5lLiBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAgICAgICAgdG8gaGF2ZSBh
IGZ1bmN0aW9uIHRoYXQncyBvbmx5IHVzZWQgZm9yIGEgZnVuY3Rpb24gcG9pbnRlciBiZSBpbmxp
bmUuCisgICAgICAgIChLSlM6OmdldFN0YXRpY0Z1bmN0aW9uU2xvdCk6IENoYW5nZWQgdG8gZ2V0
IHByb3BlcnRpZXMgZnJvbSB0aGUgcGFyZW50CisgICAgICAgIGZpcnN0IGJlZm9yZSBkb2luZyBh
bnkgaGFuZGxpbmcgb2YgZnVuY3Rpb25zLiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheQorICAgICAg
ICB0byByZXR1cm4gdGhlIGZ1bmN0aW9uIG9uY2UgdGhlIGluaXRpYWwgc2V0dXAgaXMgZG9uZS4K
KworICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6U3RyaW5n
T2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKTogQ2FsbCB2YWx1ZSgpIGluc3RlYWQgb2YgZ2V0U3Ry
aW5nKCksCisgICAgICAgIGF2b2lkaW5nIGFuIHVubmVjZXNzYXJ5IHZpcnR1YWwgZnVuY3Rpb24g
Y2FsbCAodGhlIGNhbGwgdG8gdGhlIHR5cGUoKQorICAgICAgICBmdW5jdGlvbiBpbiB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhlIGlzU3RyaW5nKCkgZnVuY3Rpb24pLgorICAgICAgICAoS0pTOjpT
dHJpbmdPYmplY3Q6OnRvU3RyaW5nKTogQWRkZWQuCisgICAgICAgIChLSlM6OlN0cmluZ09iamVj
dDo6dG9UaGlzU3RyaW5nKTogQWRkZWQuCisgICAgICAgIChLSlM6OlN0cmluZ09iamVjdDo6dG9U
aGlzSlNTdHJpbmcpOiBBZGRlZC4KKyAgICAgICAgKEtKUzo6c3Vic3RpdHV0ZUJhY2tyZWZlcmVu
Y2VzKTogUmV3cm90ZSB0byB1c2UgYSBhcHBlbmRpbmcgYWxnb3JpdGhtCisgICAgICAgIGluc3Rl
YWQgb2YgYSB0aGUgb2xkIG9uZSB0aGF0IHRyaWVkIHRvIHJlcGxhY2UgaW4gcGxhY2UuCisgICAg
ICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2UpOiBNZXJnZWQgdGhpcyBmdW5jdGlvbiBh
bmQgdGhlIHJlcGxhY2UgZnVuY3Rpb24uCisgICAgICAgIFJlcGxhY2VkIHRoZSBoYW5kLXJvbGxl
ZCBkeW5hbWljIGFycmF5cyBmb3Igc291cmNlIHJhbmdlcyBhbmQgcmVwbGFjZW1lbnRzCisgICAg
ICAgIHdpdGggVmVjdG9yLgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyk6
IEhhbmRsZSBKU1N0cmluZyBhcyB3ZWxsIGFzIFN0cmluZ09iamVjdC4KKyAgICAgICAgUmVtb3Zl
ZCB0aGUgc2VwYXJhdGUgdmFsdWVPZiBpbXBsZW1lbnRhdGlvbiwgc2luY2UgaXQgY2FuIGp1c3Qg
c2hhcmUgdGhpcy4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jQ2hhckF0KTogVXNlIHRv
VGhpc1N0cmluZywgd2hpY2ggaGFuZGxlcyBKU1N0cmluZyBhcworICAgICAgICB3ZWxsIGFzIFN0
cmluZ09iamVjdCwgYW5kIGlzIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9sZCBj
b2RlIHRvby4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6IERpdHRv
LgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNDb25jYXQpOiBEaXR0by4KKyAgICAgICAg
KEtKUzo6c3RyaW5nUHJvdG9GdW5jSW5kZXhPZik6IERpdHRvLgorICAgICAgICAoS0pTOjpzdHJp
bmdQcm90b0Z1bmNMYXN0SW5kZXhPZik6IERpdHRvLgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90
b0Z1bmNNYXRjaCk6IERpdHRvLgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNTZWFyY2gp
OiBEaXR0by4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU2xpY2UpOiBEaXR0by4KKyAg
ICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU3BsaXQpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6
c3RyaW5nUHJvdG9GdW5jU3Vic3RyKTogRGl0dG8uCisgICAgICAgIChLSlM6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyk6IERpdHRvLgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNUb0xv
d2VyQ2FzZSk6IFVzZSB0b1RoaXNKU1N0cmluZy4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9G
dW5jVG9VcHBlckNhc2UpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jVG9M
b2NhbGVMb3dlckNhc2UpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jVG9M
b2NhbGVVcHBlckNhc2UpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jTG9j
YWxlQ29tcGFyZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNCaWcpOiBV
c2UgdG9UaGlzU3RyaW5nLgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNTbWFsbCk6IERp
dHRvLgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNCbGluayk6IERpdHRvLgorICAgICAg
ICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNCb2xkKTogRGl0dG8uCisgICAgICAgIChLSlM6OnN0cmlu
Z1Byb3RvRnVuY0ZpeGVkKTogRGl0dG8uCisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY0l0
YWxpY3MpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKTogRGl0
dG8uCisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1N1Yik6IERpdHRvLgorICAgICAgICAo
S0pTOjpzdHJpbmdQcm90b0Z1bmNTdXApOiBEaXR0by4KKyAgICAgICAgKEtKUzo6c3RyaW5nUHJv
dG9GdW5jRm9udGNvbG9yKTogRGl0dG8uCisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY0Zv
bnRzaXplKTogRGl0dG8uCisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6IERp
dHRvLgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNMaW5rKTogRGl0dG8uCisKKyAgICAg
ICAgKiBranMvc3RyaW5nX29iamVjdC5oOiBBZGRlZCB0b1N0cmluZywgdG9UaGlzU3RyaW5nLCBh
bmQgdG9UaGlzSlNTdHJpbmcuCisKKyAgICAgICAgKiBranMvdXN0cmluZy5jcHA6CisgICAgICAg
IChLSlM6OlVTdHJpbmc6OmFwcGVuZCk6IEFkZGVkIGEgdmVyc2lvbiB0aGF0IHRha2VzIGEgY2hh
cmFjdGVyIHBvaW50ZXIgYW5kCisgICAgICAgIHNpemUsIHNvIHdlIGRvbid0IGhhdmUgdG8gY3Jl
YXRlIGEgVVN0cmluZyBqdXN0IHRvIGFwcGVuZCB0byBhbm90aGVyIFVTdHJpbmcuCisgICAgICAg
ICoga2pzL3VzdHJpbmcuaDoKKworMjAwOC0wNi0yNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBDaGFuZ2VMb2c6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIFZN
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgor
ICAgICAgICAoS0pTOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICoga2pzL0Jv
b2xlYW5PYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcp
OgorICAgICAgICAqIGtqcy9KU0ltbWVkaWF0ZS5jcHA6CisgICAgICAgIChLSlM6OkpTSW1tZWRp
YXRlOjpwcm90b3R5cGUpOgorICAgICAgICAqIGtqcy9KU0ltbWVkaWF0ZS5oOgorICAgICAgICAq
IGtqcy9KU09iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTT2JqZWN0Ojp0b1N0cmluZyk6Cisg
ICAgICAgICoga2pzL0pTT2JqZWN0Lmg6CisgICAgICAgIChLSlM6OkpTVmFsdWU6OmdldCk6Cisg
ICAgICAgICoga2pzL0pTU3RyaW5nLmg6CisgICAgICAgICoga2pzL0pTVmFsdWUuY3BwOgorICAg
ICAgICAoS0pTOjpKU0NlbGw6OnRvVGhpc1N0cmluZyk6CisgICAgICAgIChLSlM6OkpTQ2VsbDo6
dG9UaGlzSlNTdHJpbmcpOgorICAgICAgICAoS0pTOjpKU0NlbGw6OmdldEpTTnVtYmVyKToKKyAg
ICAgICAgKEtKUzo6anNTdHJpbmcpOgorICAgICAgICAoS0pTOjpqc093bmVkU3RyaW5nKToKKyAg
ICAgICAgKEtKUzo6Y2FsbCk6CisgICAgICAgIChLSlM6OmNvbnN0cnVjdCk6CisgICAgICAgICog
a2pzL0pTVmFsdWUuaDoKKyAgICAgICAgKEtKUzo6SlNWYWx1ZTo6dG9UaGlzU3RyaW5nKToKKyAg
ICAgICAgKEtKUzo6SlNWYWx1ZTo6dG9UaGlzSlNTdHJpbmcpOgorICAgICAgICAoS0pTOjpKU1Zh
bHVlOjpnZXRKU051bWJlcik6CisgICAgICAgICoga2pzL051bWJlck9iamVjdC5jcHA6CisgICAg
ICAgIChLSlM6Ok51bWJlck9iamVjdDo6Z2V0SlNOdW1iZXIpOgorICAgICAgICAoS0pTOjppbnRl
Z2VyX3BhcnRfbm9leHApOgorICAgICAgICAoS0pTOjpudW1iZXJQcm90b0Z1bmNUb1N0cmluZyk6
CisgICAgICAgIChLSlM6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAg
KEtKUzo6bnVtYmVyUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChLSlM6Om51bWJlclByb3Rv
RnVuY1RvRml4ZWQpOgorICAgICAgICAoS0pTOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFs
KToKKyAgICAgICAgKEtKUzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAq
IGtqcy9OdW1iZXJPYmplY3QuaDoKKyAgICAgICAgKiBranMvUHJvcGVydHlTbG90LmNwcDoKKyAg
ICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcik6CisgICAgICAgICoga2pz
L2ludGVybmFsLmNwcDoKKyAgICAgICAgKEtKUzo6SlNTdHJpbmc6OnRvVGhpc1N0cmluZyk6Cisg
ICAgICAgIChLSlM6OkpTU3RyaW5nOjp0b1RoaXNKU1N0cmluZyk6CisgICAgICAgIChLSlM6OkpT
U3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoS0pTOjpKU051bWJlckNlbGw6
OnRvU3RyaW5nKToKKyAgICAgICAgKEtKUzo6SlNOdW1iZXJDZWxsOjp0b1RoaXNTdHJpbmcpOgor
ICAgICAgICAoS0pTOjpKU051bWJlckNlbGw6OmdldEpTTnVtYmVyKToKKyAgICAgICAgKiBranMv
bG9va3VwLmNwcDoKKyAgICAgICAgKEtKUzo6c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAg
ICAoS0pTOjpzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICoga2pzL2xvb2t1cC5o
OgorICAgICAgICAoS0pTOjpzdGF0aWNWYWx1ZUdldHRlcik6CisgICAgICAgIChLSlM6OmdldFN0
YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICoga2pzL3N0cmluZ19vYmplY3QuY3BwOgorICAg
ICAgICAoS0pTOjpTdHJpbmdPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoS0pT
OjpTdHJpbmdPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKEtKUzo6U3RyaW5nT2JqZWN0Ojp0
b1RoaXNTdHJpbmcpOgorICAgICAgICAoS0pTOjpTdHJpbmdPYmplY3Q6OnRvVGhpc0pTU3RyaW5n
KToKKyAgICAgICAgKEtKUzo6c3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKToKKyAgICAgICAgKEtK
Uzo6c3RyaW5nUHJvdG9GdW5jUmVwbGFjZSk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVu
Y1RvU3RyaW5nKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jQ2hhckF0KToKKyAgICAg
ICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6CisgICAgICAgIChLSlM6OnN0cmlu
Z1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY0luZGV4T2Yp
OgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgIChL
SlM6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5j
U2VhcmNoKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAo
S0pTOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVu
Y1N1YnN0cik6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyk6CisgICAg
ICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKToKKyAgICAgICAgKEtKUzo6c3Ry
aW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNU
b0xvY2FsZUxvd2VyQ2FzZSk6CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY1RvTG9jYWxl
VXBwZXJDYXNlKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZSk6
CisgICAgICAgIChLSlM6OnN0cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAgIChLSlM6OnN0cmlu
Z1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jQmxpbmspOgor
ICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAgKEtKUzo6c3RyaW5n
UHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKToK
KyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAgICAgKEtKUzo6c3Ry
aW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jU3VwKToKKyAg
ICAgICAgKEtKUzo6c3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAgICAgKEtKUzo6c3Ry
aW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNBbmNo
b3IpOgorICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAgICAgICAgKiBranMv
c3RyaW5nX29iamVjdC5oOgorICAgICAgICAqIGtqcy91c3RyaW5nLmNwcDoKKyAgICAgICAgKEtK
Uzo6VVN0cmluZzo6YXBwZW5kKToKKyAgICAgICAgKiBranMvdXN0cmluZy5oOgorCiAyMDA4LTA2
LTI1ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXhl
cyBhbiBBU1NFUlQgaW4gdGhlIHByb2ZpbGVyIHdoZW4gc3RhcnRpbmcgbXVsdGlwbGUgcHJvZmls
ZXMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM0ODA0KQorKysg
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2
ICs5MCw3IEBAIF9fWk4zS0pTMTFJbnRlcnByZXRlcjhldmFsdWF0ZUVQTlNfOUV4ZWMKIF9fWk4z
S0pTMTFJbnRlcnByZXRlcjhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVSTlNfMTBTY29wZUNoYWlu
RVJLTlNfN1VTdHJpbmdFaVM3X1BOU183SlNWYWx1ZUUKIF9fWk4zS0pTMTFKU0ltbWVkaWF0ZTh0
b09iamVjdEVQS05TXzdKU1ZhbHVlRVBOU185RXhlY1N0YXRlRQogX19aTjNLSlMxMUpTSW1tZWRp
YXRlOHRvU3RyaW5nRVBLTlNfN0pTVmFsdWVFCitfX1pOM0tKUzExSlNJbW1lZGlhdGU5cHJvdG90
eXBlRVBLTlNfN0pTVmFsdWVFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0tKUzExUHJvZmlsZU5vZGU0
c29ydEVQRmJSS04zV1RGNlJlZlB0cklTMF9FRVM1X0UKIF9fWk4zS0pTMTFQcm9ncmFtTm9kZTZj
cmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBOM1dURjZWZWN0
b3JJU3Q0cGFpcklOU18xMElkZW50aWZpZXJFakVMbTE2RUVFUE5TNl9JTlM1XzZSZWZQdHJJTlNf
MTJGdW5jRGVjbE5vZGVFRUVMbTE2RUVFYmIKIF9fWk4zS0pTMTFQcm9wZXJ0eU1hcDExZ2V0TG9j
YXRpb25FUktOU18xMElkZW50aWZpZXJFCkBAIC0xMDIsNiArMTAzLDcgQEAgX19aTjNLSlMxMkpT
R2xvYmFsRGF0YTE0dGhyZWFkSW5zdGFuY2VFdgogX19aTjNLSlMxMlByb3BlcnR5U2xvdDE1dW5k
ZWZpbmVkR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJLUzBfCiBfX1pO
M0tKUzEyUmVnaXN0ZXJGaWxlMTRhZGRHbG9iYWxTbG90c0VtCiBfX1pOM0tKUzEyU3RyaW5nT2Jq
ZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKK19f
Wk4zS0pTMTJTdHJpbmdPYmplY3QxNHRvVGhpc0pTU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19a
TjNLSlMxMlN0cmluZ09iamVjdDE2Z2V0UHJvcGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNf
MTdQcm9wZXJ0eU5hbWVBcnJheUUKIF9fWk4zS0pTMTJTdHJpbmdPYmplY3QxOGdldE93blByb3Bl
cnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNs
b3RFCiBfX1pOM0tKUzEyU3RyaW5nT2JqZWN0MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVj
U3RhdGVFalJOU18xMlByb3BlcnR5U2xvdEUKQEAgLTEzOCw3ICsxNDAsOSBAQCBfX1pOM0tKUzE3
UmVnaXN0ZXJGaWxlU3RhY2syMGFsbG9jYXRlUmVnCiBfX1pOM0tKUzE3Y29uc3RydWN0RnVuY3Rp
b25FUE5TXzlFeGVjU3RhdGVFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdV
U3RyaW5nRWkKIF9fWk4zS0pTMTljb25zdHJ1Y3RFbXB0eUFycmF5RVBOU185RXhlY1N0YXRlRQog
X19aTjNLSlMxOWluaXRpYWxpemVUaHJlYWRpbmdFdgorX19aTjNLSlMyMHN0YXRpY0Z1bmN0aW9u
R2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfMTJQcm9wZXJ0eVNs
b3RFCiBfX1pOM0tKUzIzb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFUE5T
XzhKU09iamVjdEVQTlNfN0pTVmFsdWVFUktOU183QXJnTGlzdEUKK19fWk4zS0pTMjNzZXRVcFN0
YXRpY0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoRW50cnlFUE5TXzhKU09i
amVjdEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0tKUzRIZWFw
MTRhbGxvY2F0ZU51bWJlckVtCiBfX1pOM0tKUzRIZWFwMTVyZWNvcmRFeHRyYUNvc3RFbQogX19a
TjNLSlM0SGVhcDE3Z2xvYmFsT2JqZWN0Q291bnRFdgpAQCAtMTU1LDggKzE1OSwxMCBAQCBfX1pO
M0tKUzRIZWFwOXVucHJvdGVjdEVQTlNfN0pTVmFsdWVFCiBfX1pOM0tKUzRjYWxsRVBOU185RXhl
Y1N0YXRlRVBOU183SlNWYWx1ZUVOU184Q2FsbFR5cGVFUktOU184Q2FsbERhdGFFUzNfUktOU183
QXJnTGlzdEUKIF9fWk4zS0pTNWVxdWFsRVBLTlNfN1VTdHJpbmczUmVwRVMzXwogX19aTjNLSlM2
SlNDZWxsMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQorX19aTjNLSlM2SlNDZWxsMTFnZXRK
U051bWJlckV2CiBfX1pOM0tKUzZKU0NlbGwxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRl
RVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlM2SlNDZWxsMTRkZWxldGVQcm9wZXJ0eUVQTlNf
OUV4ZWNTdGF0ZUVqCitfX1pOM0tKUzZKU0NlbGwxNHRvVGhpc0pTU3RyaW5nRVBOU185RXhlY1N0
YXRlRQogX19aTjNLSlM2SlNDZWxsMTZnZXRDb25zdHJ1Y3REYXRhRVJOU18xM0NvbnN0cnVjdERh
dGFFCiBfX1pOM0tKUzZKU0NlbGwxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0tKUzZKU0NlbGwxOGdl
dE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQpAQCAt
MjQ4LDYgKzI1NCw4IEBAIF9fWk4zV1RGOENvbGxhdG9yRDFFdgogX19aTjNXVEY4ZmFzdEZyZWVF
UHYKIF9fWk5LM0tKUzExUHJvcGVydHlNYXAzZ2V0RVJLTlNfMTBJZGVudGlmaWVyRQogX19aTksz
S0pTMTJEYXRlSW5zdGFuY2U3Z2V0VGltZUVSZFJpCitfX1pOSzNLSlMxMlN0cmluZ09iamVjdDEy
dG9UaGlzU3RyaW5nRVBOU185RXhlY1N0YXRlRQorX19aTkszS0pTMTJTdHJpbmdPYmplY3Q4dG9T
dHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNLSlMxNEpTR2xvYmFsT2JqZWN0MTRpc0R5bmFt
aWNTY29wZUV2CiBfX1pOSzNLSlMxNEpTR2xvYmFsT2JqZWN0MTR0b0dsb2JhbE9iamVjdEVQTlNf
OUV4ZWNTdGF0ZUUKIF9fWk5LM0tKUzE2SW50ZXJuYWxGdW5jdGlvbjIxaW1wbGVtZW50c0hhc0lu
c3RhbmNlRXYKQEAgLTI1OSw2ICsyNjcsNyBAQCBfX1pOSzNLSlMxN0RlYnVnZ2VyQ2FsbEZyYW1l
NHR5cGVFdgogX19aTkszS0pTMTdEZWJ1Z2dlckNhbGxGcmFtZThldmFsdWF0ZUVSS05TXzdVU3Ry
aW5nRVJQTlNfN0pTVmFsdWVFCiBfX1pOSzNLSlM0Tm9kZTh0b1N0cmluZ0V2CiBfX1pOSzNLSlM2
SlNDZWxsMTJ0b1RoaXNPYmplY3RFUE5TXzlFeGVjU3RhdGVFCitfX1pOSzNLSlM2SlNDZWxsMTJ0
b1RoaXNTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNLSlM2SlNDZWxsMTdnZXRUcnVuY2F0
ZWRJbnQzMkVSaQogX19aTkszS0pTNkpTQ2VsbDE4Z2V0VHJ1bmNhdGVkVUludDMyRVJqCiBfX1pO
SzNLSlM2SlNDZWxsOWNsYXNzSW5mb0V2CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMzQ4MDQpCisrKyBKYXZhU2NyaXB0Q29y
ZS9WTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOSAr
MjksMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJpZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5Lmgi
CisjaW5jbHVkZSAiaWRlbnRpZmllci5oIgogCiBuYW1lc3BhY2UgS0pTIHsKIApJbmRleDogSmF2
YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
Vk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFj
aGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTQsOCArMjExNCw3IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAgICAoKmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4odikpOwogICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJC
YXNlKTsKIAotICAgICAgICAgICAgcltmaXJzdEFyZ10udS5qc1ZhbHVlID0gdGhpc1ZhbCA9PSBt
aXNzaW5nVGhpc09iamVjdE1hcmtlcigpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiAoclt0
aGlzVmFsXS51LmpzVmFsdWUpLT50b09iamVjdChleGVjKTsKLSAgICAgICAgICAgIEpTVmFsdWUq
IHRoaXNWYWx1ZSA9IHJbZmlyc3RBcmddLnUuanNWYWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWUq
IHRoaXNWYWx1ZSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSA/IGV4ZWMt
Pmdsb2JhbFRoaXNWYWx1ZSgpIDogclt0aGlzVmFsXS51LmpzVmFsdWU7CiAKICAgICAgICAgICAg
IEFyZ0xpc3QgYXJncyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqKio+KHJlZ2lzdGVyQmFzZSks
IHJlZ2lzdGVyT2Zmc2V0ICsgZmlyc3RBcmcgKyAxLCBhcmdDb3VudCAtIDEpOwogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvQm9vbGVhbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL0Jvb2xlYW5PYmplY3QuY3BwCShyZXZpc2lvbiAzNDgwNCkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9Cb29sZWFuT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTMg
KzYxLDIwIEBAIEJvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5cGUoRXhlY1MKIAogSlNW
YWx1ZSogYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIGlmIChKU0ltbWVk
aWF0ZTo6aXNCb29sZWFuKHRoaXNWYWx1ZSkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBKU0ltbWVkaWF0ZTo6dG9TdHJpbmcodGhpc1ZhbHVlKSk7CisgICAgaWYgKHRoaXNWYWx1ZSA9
PSBqc0Jvb2xlYW4oZmFsc2UpKQorICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZhbHNl
Iik7CisKKyAgICBpZiAodGhpc1ZhbHVlID09IGpzQm9vbGVhbih0cnVlKSkKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsICJ0cnVlIik7CiAKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmpl
Y3QoJkJvb2xlYW5PYmplY3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwogCi0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIEpTSW1tZWRpYXRlOjp0
b1N0cmluZyhzdGF0aWNfY2FzdDxCb29sZWFuT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxW
YWx1ZSgpKSk7CisgICAgaWYgKHN0YXRpY19jYXN0PEJvb2xlYW5PYmplY3QqPih0aGlzVmFsdWUp
LT5pbnRlcm5hbFZhbHVlKCkgPT0ganNCb29sZWFuKGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsICJmYWxzZSIpOworCisgICAgQVNTRVJUKHN0YXRpY19jYXN0PEJvb2xlYW5P
YmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkgPT0ganNCb29sZWFuKHRydWUpKTsK
KyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgInRydWUiKTsKIH0KIAogSlNWYWx1ZSogYm9vbGVh
blByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rp
b25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlv
blByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIEpT
T2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvbihFeGVjU3RhdGUqIGUKICAgICAgICAgICAgIHBhcmFt
ID0gVVN0cmluZyhjLCAxKTsKICAgICAgICAgICAgIGMrKywgaSsrOwogICAgICAgICAgICAgd2hp
bGUgKGkgPCBsZW4gJiYgKExleGVyOjppc0lkZW50UGFydChjWzBdKSkpIHsKLSAgICAgICAgICAg
ICAgICBwYXJhbSArPSBVU3RyaW5nKGMsIDEpOworICAgICAgICAgICAgICAgIHBhcmFtLmFwcGVu
ZCgqYyk7CiAgICAgICAgICAgICAgICAgYysrLCBpKys7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB3aGlsZSAoaSA8IGxlbiAmJiAqYyA9PSAnICcpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAzNDgwNCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0Z1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDcgKzY5Miw3IEBAIEpTVmFsdWUqIGdsb2Jh
bEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqIGUKICAgICAgICAgICAgIGsgKz0gMjsKICAgICAgICAg
fQogICAgICAgICBrKys7Ci0gICAgICAgIHMgKz0gVVN0cmluZyhjLCAxKTsKKyAgICAgICAgcy5h
cHBlbmQoKmMpOwogICAgIH0KIAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9KU0ltbWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmNwcAkocmV2aXNpb24gMzQ4MDQpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNJbW1lZGlhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miwx
OSBAQCBKU09iamVjdCogSlNJbW1lZGlhdGU6OnRvT2JqZWN0KGNvbnN0IEpTCiAgICAgcmV0dXJu
IGNvbnN0cnVjdE51bWJlckZyb21JbW1lZGlhdGVOdW1iZXIoZXhlYywgY29uc3RfY2FzdDxKU1Zh
bHVlKj4odikpOwogfQogCitKU09iamVjdCogSlNJbW1lZGlhdGU6OnByb3RvdHlwZShjb25zdCBK
U1ZhbHVlKiB2LCBFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYp
KTsKKyAgICBpZiAodiA9PSBqc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNO
b3RBbk9iamVjdCh0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIk51bGwgdmFsdWUiKSk7Cisg
ICAgaWYgKHYgPT0ganNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNO
b3RBbk9iamVjdCh0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlVuZGVmaW5lZCB2YWx1ZSIp
KTsKKyAgICBpZiAoaXNCb29sZWFuKHYpKQorICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5ib29sZWFuUHJvdG90eXBlKCk7CisgICAgQVNTRVJUKGlzTnVtYmVyKHYp
KTsKKyAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJQcm90b3R5
cGUoKTsKK30KKwogVVN0cmluZyBKU0ltbWVkaWF0ZTo6dG9TdHJpbmcoY29uc3QgSlNWYWx1ZSog
dikKIHsKICAgICBBU1NFUlQoaXNJbW1lZGlhdGUodikpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL0pTSW1tZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTSW1t
ZWRpYXRlLmgJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRp
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsOCBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgSlNWYWx1ZSogaW1wb3NzaWJsZVZhbHVlKCk7CiAgICAgCisgICAgc3RhdGljIEpTT2Jq
ZWN0KiBwcm90b3R5cGUoY29uc3QgSlNWYWx1ZSosIEV4ZWNTdGF0ZSopOworCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgVGFnTWFzayA9IDM7IC8vIHR5cGUgdGFncyBhcmUg
MiBiaXRzIGxvbmcKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAzNDgw
NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzNCwxMiArNDM0LDEyIEBAIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlICpl
eGUKICAgcmV0dXJuIHByaW0tPnRvTnVtYmVyKGV4ZWMpOwogfQogCi1VU3RyaW5nIEpTT2JqZWN0
Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitVU3RyaW5nIEpTT2JqZWN0Ojp0b1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gIEpTVmFsdWUgKnByaW0gPSB0b1ByaW1p
dGl2ZShleGVjLFN0cmluZ1R5cGUpOwotICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIC8vIHNo
b3VsZCBiZSBwaWNrZWQgdXAgc29vbiBpbiBub2Rlcy5jcHAKLSAgICByZXR1cm4gIiI7Ci0gIHJl
dHVybiBwcmltLT50b1N0cmluZyhleGVjKTsKKyAgICBKU1ZhbHVlKiBwcmltaXRpdmUgPSB0b1By
aW1pdGl2ZShleGVjLCBTdHJpbmdUeXBlKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gcHJpbWl0aXZlLT50b1N0cmluZyhleGVj
KTsKIH0KIAogSlNPYmplY3QgKkpTT2JqZWN0Ojp0b09iamVjdChFeGVjU3RhdGUqKSBjb25zdApJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL0pTT2JqZWN0LmgJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw5ICs1ODEsOSBAQCBpbmxp
bmUgSlNWYWx1ZSogSlNPYmplY3Q6OnRvUHJpbWl0aXZlKEV4CiBpbmxpbmUgSlNWYWx1ZSogSlNW
YWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KSBjb25zdAogewogICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhp
cykpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0ltbWVkaWF0ZTo6dG9PYmplY3Qo
dGhpcywgZXhlYyk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7Ci0gICAgICAg
IGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkK
KyAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IEpTSW1tZWRpYXRlOjpwcm90b3R5cGUodGhp
cywgZXhlYyk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+
KHRoaXMpKTsKKyAgICAgICAgaWYgKCFwcm90b3R5cGUtPmdldFByb3BlcnR5U2xvdChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgfQpA
QCAtNjAzLDkgKzYwMyw5IEBAIGlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRl
KiAKIGlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRlOjpp
c0ltbWVkaWF0ZSh0aGlzKSkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTSW1tZWRp
YXRlOjp0b09iamVjdCh0aGlzLCBleGVjKTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0KTsKLSAgICAgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKQorICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gSlNJbW1lZGlhdGU6
OnByb3RvdHlwZSh0aGlzLCBleGVjKTsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoY29uc3Rf
Y2FzdDxKU1ZhbHVlKj4odGhpcykpOworICAgICAgICBpZiAoIXByb3RvdHlwZS0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlO
YW1lKTsKICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNTdHJpbmcuaAkocmV2aXNpb24gMzQ4MDQpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyAr
NDksMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhl
Y1N0YXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRl
KikgY29uc3Q7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0
OworCiAgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0
OworICAgIHZpcnR1YWwgVVN0cmluZyB0b1RoaXNTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7Cisg
ICAgdmlydHVhbCBKU1N0cmluZyogdG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRlKik7CiAKICAgICAv
LyBBY3R1YWxseSBnZXRQcm9wZXJ0eVNsb3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QgKHNlZSBK
U0NlbGwpLgogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMjIgKzI3MCwzNyBAQCBKU09iamVj
dCogSlNDZWxsOjp0b1RoaXNPYmplY3QoRXhlY1N0YXRlCiAgICAgcmV0dXJuIHRvT2JqZWN0KGV4
ZWMpOwogfQogCitVU3RyaW5nIEpTQ2VsbDo6dG9UaGlzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKK3sKKyAgICByZXR1cm4gdG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsK
K30KKworSlNTdHJpbmcqIEpTQ2VsbDo6dG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB0b1RoaXNTdHJpbmcoZXhlYykpOworfQorCiBj
b25zdCBDbGFzc0luZm8qIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgY29uc3QKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotSlNDZWxsKiBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIHMp
CitKU1ZhbHVlKiBKU0NlbGw6OmdldEpTTnVtYmVyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
SlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogcykKIHsKICAg
ICByZXR1cm4gbmV3IChleGVjKSBKU1N0cmluZyhzID8gcyA6ICIiKTsKIH0KIAotSlNDZWxsKiBq
c1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpCitKU1N0cmluZyoganNT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKQogewogICAgIHJldHVybiBz
LmlzTnVsbCgpID8gbmV3IChleGVjKSBKU1N0cmluZygiIikgOiBuZXcgKGV4ZWMpIEpTU3RyaW5n
KHMpOwogfQogCi1KU0NlbGwqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBV
U3RyaW5nJiBzKQorSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBVU3RyaW5nJiBzKQogewogICAgIHJldHVybiBzLmlzTnVsbCgpID8gbmV3IChleGVjKSBKU1N0
cmluZygiIiwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpIDogbmV3IChleGVjKSBKU1N0cmluZyhz
LCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CiB9CkBAIC0yOTUsNyArMzEwLDcgQEAgSlNWYWx1
ZSogY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIAogICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZU5hdGl2ZSkKICAgICAgICAgcmV0dXJuIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihl
eGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGZ1bmN0aW9uT2JqZWN0KSwgdGhpc1ZhbHVlLCBh
cmdzKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7Ci0gICAgLy8gRklYTUU6
IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB1c2luZyB0aGUgY2FsbERhdGEuCisg
ICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB1c2luZyB0aGUg
Y2FsbERhdGE/CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbk9i
amVjdCktPmNhbGwoZXhlYywgdGhpc1ZhbHVlLCBhcmdzKTsKIH0KIApAQCAtMzA0LDcgKzMxOSw3
IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU1YKICAgICBpZiAoY29u
c3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTmF0aXZlKQogICAgICAgICByZXR1cm4gY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihvYmpl
Y3QpLCBhcmdzKTsKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSlMp
OwotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkgdXNpbmcg
dGhlIGNvbnN0cnVjdERhdGEuCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGRvbmUgbW9yZSBl
ZmZpY2llbnRseSB1c2luZyB0aGUgY29uc3RydWN0RGF0YT8KICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNGdW5jdGlvbio+KG9iamVjdCktPmNvbnN0cnVjdChleGVjLCBhcmdzKTsKIH0KIApJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvSlNWYWx1ZS5oCShyZXZpc2lvbiAzNDgwNCkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAgbmFtZXNwYWNlIEtK
UyB7CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIElkZW50aWZpZXI7Ci1jbGFzcyBKU09iamVj
dDsKIGNsYXNzIEpTQ2VsbDsKK2NsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNTdHJpbmc7CiBjbGFz
cyBQcm9wZXJ0eVNsb3Q7CiAKIHN0cnVjdCBDbGFzc0luZm87CkBAIC0xMzAsNyArMTMxLDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqKTsKICAgICBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworCiAgICAgSlNPYmplY3QqIHRvVGhpc09iamVj
dChFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBVU3RyaW5nIHRvVGhpc1N0cmluZyhFeGVjU3RhdGUq
KSBjb25zdDsKKyAgICBKU1N0cmluZyogdG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRlKik7CisKKyAg
ICBKU1ZhbHVlKiBnZXRKU051bWJlcigpOyAvLyAwIGlmIHRoaXMgaXMgbm90IGEgSlNOdW1iZXIg
b3IgbnVtYmVyIG9iamVjdAogCiBwcml2YXRlOgogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CkBAIC0xOTgsNyArMjA0LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOwogICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpOworCiAgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4
ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgVVN0cmluZyB0b1RoaXNTdHJpbmcoRXhlY1N0
YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBKU1N0cmluZyogdG9UaGlzSlNTdHJpbmcoRXhlY1N0
YXRlKik7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRKU051bWJlcigpOwogCiBwcml2YXRlOgog
ICAgIC8vIEJhc2UgaW1wbGVtZW50YXRpb24sIGJ1dCBmb3Igbm9uLW9iamVjdCBjbGFzc2VzIGlt
cGxlbWVudHMgZ2V0UHJvcGVydHlTbG90LgpAQCAtMjE5LDcgKzIyOSwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdmlydHVh
bCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgSlNPYmpl
Y3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OworCisgICAgdmlydHVhbCBVU3RyaW5nIHRv
VGhpc1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1Ro
aXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRKU051
bWJlcigpOwogCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgewpAQCAtMjQzLDEzICsyNTYsMTMgQEAgcHJpdmF0ZToKICAgICBkb3VibGUg
dmFsOwogfTsKIAotSlNDZWxsKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJik7
IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwotSlNDZWxsKiBq
c1N0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiA9ICIiKTsgLy8gcmV0dXJucyBlbXB0eSBz
dHJpbmcgaWYgcGFzc2VkIDAKK0pTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBV
U3RyaW5nJik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwor
SlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqID0gIiIpOyAvLyByZXR1
cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgMAogCiAvLyBzaG91bGQgYmUgdXNlZCBmb3Igc3Ry
aW5ncyB0aGF0IGFyZSBvd25lZCBieSBhbiBvYmplY3QgdGhhdCB3aWxsCiAvLyBsaWtlbHkgb3V0
bGl2ZSB0aGUgSlNWYWx1ZSB0aGlzIG1ha2VzLCBzdWNoIGFzIHRoZSBwYXJzZSB0cmVlIG9yIGEK
IC8vIERPTSBvYmplY3QgdGhhdCBjb250YWlucyBhIFVTdHJpbmcKLUpTQ2VsbCoganNPd25lZFN0
cmluZyhFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJik7IAorSlNTdHJpbmcqIGpzT3duZWRTdHJp
bmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYpOyAKIAogZXh0ZXJuIGNvbnN0IGRvdWJsZSBO
YU47CiBleHRlcm4gY29uc3QgZG91YmxlIEluZjsKQEAgLTU5NSw2ICs2MDgsMjEgQEAgaW5saW5l
IEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogICAgIHJldHVybiBhc0NlbGwoKS0+
dG9UaGlzT2JqZWN0KGV4ZWMpOwogfQogCitpbmxpbmUgVVN0cmluZyBKU1ZhbHVlOjp0b1RoaXNT
dHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6
aXNJbW1lZGlhdGUodGhpcykgPyBKU0ltbWVkaWF0ZTo6dG9TdHJpbmcodGhpcykgOiBhc0NlbGwo
KS0+dG9UaGlzU3RyaW5nKGV4ZWMpOworfQorCitpbmxpbmUgSlNTdHJpbmcqIEpTVmFsdWU6OnRv
VGhpc0pTU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNJbW1lZGlhdGU6
OmlzSW1tZWRpYXRlKHRoaXMpID8ganNTdHJpbmcoZXhlYywgSlNJbW1lZGlhdGU6OnRvU3RyaW5n
KHRoaXMpKSA6IGFzQ2VsbCgpLT50b1RoaXNKU1N0cmluZyhleGVjKTsKK30KKworaW5saW5lIEpT
VmFsdWUqIEpTVmFsdWU6OmdldEpTTnVtYmVyKCkKK3sKKyAgICByZXR1cm4gSlNJbW1lZGlhdGU6
OmlzTnVtYmVyKHRoaXMpID8gdGhpcyA6IChKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykg
PyAwIDogYXNDZWxsKCktPmdldEpTTnVtYmVyKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBLSlMK
IAogI2VuZGlmIC8vIEpTVmFsdWVfaApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL051bWJlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL051bWJlck9iamVjdC5j
cHAJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL051bWJlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDExIEBAIE51bWJlck9iamVjdDo6TnVtYmVy
T2JqZWN0KEpTT2JqZWN0KiBwcm8KIHsKIH0KIAorSlNWYWx1ZSogTnVtYmVyT2JqZWN0OjpnZXRK
U051bWJlcigpCit7CisgICAgcmV0dXJuIGludGVybmFsVmFsdWUoKTsKK30KKwogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlclByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKQEAgLTk0LDcg
Kzk5LDcgQEAgc3RhdGljIFVTdHJpbmcgaW50ZWdlcl9wYXJ0X25vZXhwKGRvdWJsZQogICAgICAg
ICAgICAgc3RybmNweShidWYuZGF0YSgpLCByZXN1bHQsIGRlY2ltYWxQb2ludCk7CiAKICAgICAg
ICAgYnVmW2RlY2ltYWxQb2ludF0gPSAnXDAnOwotICAgICAgICBzdHIgKz0gVVN0cmluZyhidWYu
ZGF0YSgpKTsKKyAgICAgICAgc3RyLmFwcGVuZChidWYuZGF0YSgpKTsKICAgICB9CiAKICAgICBm
cmVlZHRvYShyZXN1bHQpOwpAQCAtMTQ0LDExICsxNDksMTAgQEAgc3RhdGljIGRvdWJsZSBpbnRQ
b3cxMChpbnQgZSkKIAogSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKLSAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJk51bWJlck9iamVjdDo6aW5mbykp
CisgICAgSlNWYWx1ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKKyAgICBpZiAoIXYp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU1Zh
bHVlKiB2ID0gc3RhdGljX2Nhc3Q8TnVtYmVyT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxW
YWx1ZSgpOwotCiAgICAgZG91YmxlIHJhZGl4QXNEb3VibGUgPSBhcmdzWzBdLT50b0ludGVnZXIo
ZXhlYyk7IC8vIG5hbiAtPiAwCiAgICAgaWYgKHJhZGl4QXNEb3VibGUgPT0gMTAgfHwgYXJnc1sw
XS0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHYtPnRvU3Ry
aW5nKGV4ZWMpKTsKQEAgLTIwOSwyOCArMjEzLDMwIEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGEKIAogSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZOdW1iZXJPYmplY3Q6
OmluZm8pKQorICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgorCisgICAgSlNWYWx1
ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKKyAgICBpZiAoIXYpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICAvLyBUT0RPCi0gICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIHN0YXRpY19jYXN0PE51bWJlck9iamVjdCo+KHRoaXNWYWx1ZSkt
PmludGVybmFsVmFsdWUoKS0+dG9TdHJpbmcoZXhlYykpOworICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCB2LT50b1N0cmluZyhleGVjKSk7CiB9CiAKIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1Zh
bHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCiB7Ci0gICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZOdW1iZXJPYmpl
Y3Q6OmluZm8pKQorICAgIEpTVmFsdWUqIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7Cisg
ICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE51bWJlck9iamVjdCo+KHRoaXNWYWx1ZSktPmludGVy
bmFsVmFsdWUoKTsKKyAgICByZXR1cm4gdjsKIH0KIAogSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5j
VG9GaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmTnVt
YmVyT2JqZWN0OjppbmZvKSkKKyAgICBKU1ZhbHVlKiB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJl
cigpOworICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKIAotICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxOdW1iZXJPYmplY3QqPih0aGlz
VmFsdWUpLT5pbnRlcm5hbFZhbHVlKCk7Ci0KICAgICBKU1ZhbHVlKiBmcmFjdGlvbkRpZ2l0cyA9
IGFyZ3NbMF07CiAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdpdHMtPnRvSW50ZWdlcihleGVj
KTsKICAgICBpZiAoIShkZiA+PSAwICYmIGRmIDw9IDIwKSkKQEAgLTMxMiwxMCArMzE4LDExIEBA
IHN0YXRpYyB2b2lkIGV4cG9uZW50aWFsUGFydFRvU3RyaW5nKGNoYXIKIAogSlNWYWx1ZSogbnVt
YmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc1Zh
bHVlLT5pc09iamVjdCgmTnVtYmVyT2JqZWN0OjppbmZvKSkKKyAgICBKU1ZhbHVlKiB2ID0gdGhp
c1ZhbHVlLT5nZXRKU051bWJlcigpOworICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIGRvdWJsZSB4ID0gc3RhdGljX2Nhc3Q8TnVt
YmVyT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT51bmNoZWNrZWRHZXROdW1i
ZXIoKTsKKyAgICBkb3VibGUgeCA9IHYtPnVuY2hlY2tlZEdldE51bWJlcigpOwogCiAgICAgaWYg
KGlzbmFuKHgpIHx8IGlzaW5mKHgpKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0
cmluZzo6ZnJvbSh4KSk7CkBAIC0zODEsMTEgKzM4OCwxMCBAQCBKU1ZhbHVlKiBudW1iZXJQcm90
b0Z1bmNUb0V4cG9uZW50aWFsKEV4CiAKIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvUHJlY2lz
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZOdW1iZXJP
YmplY3Q6OmluZm8pKQorICAgIEpTVmFsdWUqIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7
CisgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogCi0gICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PE51bWJlck9iamVjdCo+KHRoaXNWYWx1
ZSktPmludGVybmFsVmFsdWUoKTsKLQogICAgIGRvdWJsZSBkb3VibGVQcmVjaXNpb24gPSBhcmdz
WzBdLT50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAgICBkb3VibGUgeCA9IHYtPnVuY2hl
Y2tlZEdldE51bWJlcigpOwogICAgIGlmIChhcmdzWzBdLT5pc1VuZGVmaW5lZCgpIHx8IGlzbmFu
KHgpIHx8IGlzaW5mKHgpKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL051bWJlck9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9OdW1iZXJPYmplY3QuaAkocmV2aXNp
b24gMzQ4MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvTnVtYmVyT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRKU051bWJlcigpOwogICAg
IH07CiAKICAgICBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqLCBKU051
bWJlckNlbGwqKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9Qcm9wZXJ0eVNsb3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9Qcm9wZXJ0eVNsb3QuY3BwCShyZXZpc2lv
biAzNDgwNCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9Qcm9wZXJ0eVNsb3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIEpTVmFsdWUqIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25H
ZXR0ZXIoRXgKICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7CiAgICAgUmVnaXN0
ZXJGaWxlU3RhY2sqIHN0YWNrID0gJmV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+cmVnaXN0
ZXJGaWxlU3RhY2soKTsKICAgICBzdGFjay0+cHVzaEZ1bmN0aW9uUmVnaXN0ZXJGaWxlKCk7Ci0g
ICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB1c2luZyB0aGUg
Y2FsbERhdGEuCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRs
eSB1c2luZyB0aGUgY2FsbERhdGE/CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8
SlNGdW5jdGlvbio+KHNsb3QubV9kYXRhLmdldHRlckZ1bmMpLT5jYWxsKGV4ZWMsIHNsb3Quc2xv
dEJhc2UoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAgIHN0YWNrLT5wb3BGdW5jdGlvblJlZ2lz
dGVyRmlsZSgpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
aW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5j
cHAJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTYgQEAgVVN0cmluZyBKU1N0cmluZzo6dG9TdHJp
bmcoRXhlY1N0YXRlKikgYwogICAgIHJldHVybiBtX3ZhbHVlOwogfQogCitVU3RyaW5nIEpTU3Ry
aW5nOjp0b1RoaXNTdHJpbmcoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1
ZTsKK30KKworSlNTdHJpbmcqIEpTU3RyaW5nOjp0b1RoaXNKU1N0cmluZyhFeGVjU3RhdGUqKQor
eworICAgIHJldHVybiB0aGlzOworfQorCiBpbmxpbmUgU3RyaW5nT2JqZWN0KiBTdHJpbmdPYmpl
Y3Q6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAgcmV0
dXJuIG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
c3RyaW5nUHJvdG90eXBlKCksIHN0cmluZyk7CkBAIC0xMTQsMjAgKzEyNCwxNiBAQCBib29sIEpT
U3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBz
aG91bGQgb25seSBiZSBjYWxsZWQgYnkgSlNWYWx1ZTo6Z2V0LgogICAgIGlmIChnZXRTdHJpbmdQ
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIHRo
aXMpOwotICAgIHNsb3Quc2V0QmFzZShvYmplY3QpOwotICAgIGlmIChvYmplY3QtPkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgSlNWYWx1ZSogcHJvdG8g
PSBvYmplY3QtPnByb3RvdHlwZSgpOwotICAgICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKSB7
Ci0gICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgb2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihw
cm90byk7CisgICAgc2xvdC5zZXRCYXNlKHRoaXMpOworICAgIEpTT2JqZWN0KiBvYmplY3Q7Cisg
ICAgZm9yIChKU1ZhbHVlKiBwcm90b3R5cGUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnN0cmluZ1Byb3RvdHlwZSgpOyBwcm90b3R5cGUgIT0ganNOdWxsKCk7IHByb3RvdHlwZSA9IG9i
amVjdC0+cHJvdG90eXBlKCkpIHsKKyAgICAgICAgQVNTRVJUKHByb3RvdHlwZS0+aXNPYmplY3Qo
KSk7CisgICAgICAgIG9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlKTsK
ICAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgc2xvdC5zZXRV
bmRlZmluZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBKU1N0cmluZzo6Z2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCkBAIC0xNjgsMTEgKzE3NCwxOCBAQCBkb3VibGUgSlNOdW1iZXJDZWxs
Ojp0b051bWJlcihFeGVjU3RhdGUgCiAgIHJldHVybiB2YWw7CiB9CiAKLVVTdHJpbmcgSlNOdW1i
ZXJDZWxsOjp0b1N0cmluZyhFeGVjU3RhdGUgKikgY29uc3QKK1VTdHJpbmcgSlNOdW1iZXJDZWxs
Ojp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAoreworICAgIGlmICh2YWwgPT0gMC4wKSAvLyAr
MC4wIG9yIC0wLjAKKyAgICAgICAgcmV0dXJuICIwIjsKKyAgICByZXR1cm4gVVN0cmluZzo6ZnJv
bSh2YWwpOworfQorCitVU3RyaW5nIEpTTnVtYmVyQ2VsbDo6dG9UaGlzU3RyaW5nKEV4ZWNTdGF0
ZSopIGNvbnN0CiB7Ci0gIGlmICh2YWwgPT0gMC4wKSAvLyArMC4wIG9yIC0wLjAKLSAgICByZXR1
cm4gIjAiOwotICByZXR1cm4gVVN0cmluZzo6ZnJvbSh2YWwpOworICAgIGlmICh2YWwgPT0gMC4w
KSAvLyArMC4wIG9yIC0wLjAKKyAgICAgICAgcmV0dXJuICIwIjsKKyAgICByZXR1cm4gVVN0cmlu
Zzo6ZnJvbSh2YWwpOwogfQogCiBKU09iamVjdCogSlNOdW1iZXJDZWxsOjp0b09iamVjdChFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC0yMDcsNiArMjIwLDExIEBAIGJvb2wgSlNOdW1iZXJDZWxs
OjpnZXRUcnVuY2F0ZWRVSW50MzIodWkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorSlNWYWx1ZSog
SlNOdW1iZXJDZWxsOjpnZXRKU051bWJlcigpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZXR0ZXJTZXR0ZXIgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgR2V0dGVyU2V0dGVyOjptYXJrKCkKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9sb29rdXAuY3BwCShyZXZpc2lvbiAzNDgwNCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9s
b29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw0ICs0MCwyNyBAQCB2b2lkIEhhc2hUYWJs
ZTo6Y3JlYXRlVGFibGUoSlNHbG9iYWxEYXRhCiAgICAgdGFibGUgPSBlbnRyaWVzOwogfQogCitK
U1ZhbHVlKiBzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIC8v
IExvb2sgZm9yIGNhY2hlZCB2YWx1ZSBpbiBkeW5hbWljIG1hcCBvZiBwcm9wZXJ0aWVzIChpbiBK
U09iamVjdCkKKyAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLT5pc09iamVjdCgpKTsKKyAgICBK
U09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oc2xvdC5zbG90QmFzZSgp
KTsKKyAgICBKU1ZhbHVlKiBjYWNoZWRWYWwgPSB0aGlzT2JqLT5nZXREaXJlY3QocHJvcGVydHlO
YW1lKTsKKyAgICBpZiAoY2FjaGVkVmFsKQorICAgICAgICByZXR1cm4gY2FjaGVkVmFsOworCisg
ICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHNsb3Quc3RhdGljRW50cnkoKTsKKyAgICBKU1Zh
bHVlKiB2YWwgPSBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGVudHJ5LT5sZW5n
dGgsIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uVmFsdWUpOworICAgIHRoaXNPYmotPnB1
dERpcmVjdChwcm9wZXJ0eU5hbWUsIHZhbCwgZW50cnktPmF0dHJpYnV0ZXMpOworICAgIHJldHVy
biB2YWw7Cit9CisKK3ZvaWQgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBIYXNoRW50cnkqIGVudHJ5LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgQVNTRVJUKGVu
dHJ5LT5hdHRyaWJ1dGVzICYgRnVuY3Rpb24pOworICAgIFByb3RvdHlwZUZ1bmN0aW9uKiBmdW5j
dGlvbiA9IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZW50cnktPmxlbmd0aCwg
cHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb25WYWx1ZSk7CisgICAgdGhpc09iai0+cHV0RGly
ZWN0KHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGVudHJ5LT5hdHRyaWJ1dGVzKTsKKyAgICBzbG90
LnNldFZhbHVlU2xvdCh0aGlzT2JqLT5nZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpKTsK
K30KKwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuaAkocmV2aXNpb24gMzQ4MDQpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvbG9va3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDI5ICs5NywxOCBAQCBw
cml2YXRlOgogCiAgIC8qKgogICAgKiBAaW50ZXJuYWwKLSAgICogSGVscGVyIGZvciBnZXRTdGF0
aWNGdW5jdGlvblNsb3QgYW5kIGdldFN0YXRpY1Byb3BlcnR5U2xvdAorICAgKiBIZWxwZXIgZm9y
IGdldFN0YXRpY1Byb3BlcnR5U2xvdAogICAgKi8KLSAgaW5saW5lIEpTVmFsdWUqIHN0YXRpY0Z1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi0gIHsKLSAgICAgIC8vIExvb2sgZm9yIGNh
Y2hlZCB2YWx1ZSBpbiBkeW5hbWljIG1hcCBvZiBwcm9wZXJ0aWVzIChpbiBKU09iamVjdCkKLSAg
ICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCktPmlzT2JqZWN0KCkpOwotICAgICAgSlNPYmplY3Qq
IHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAg
ICBKU1ZhbHVlKiBjYWNoZWRWYWwgPSB0aGlzT2JqLT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsK
LSAgICAgIGlmIChjYWNoZWRWYWwpCi0gICAgICAgIHJldHVybiBjYWNoZWRWYWw7CisgIEpTVmFs
dWUqIHN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgIGNvbnN0IEhhc2hFbnRy
eSogZW50cnkgPSBzbG90LnN0YXRpY0VudHJ5KCk7Ci0gICAgICBKU1ZhbHVlKiB2YWwgPSBuZXcg
KGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGVudHJ5LT5sZW5ndGgsIHByb3BlcnR5TmFt
ZSwgZW50cnktPmZ1bmN0aW9uVmFsdWUpOwotICAgICAgdGhpc09iai0+cHV0RGlyZWN0KHByb3Bl
cnR5TmFtZSwgdmFsLCBlbnRyeS0+YXR0cmlidXRlcyk7Ci0gICAgICByZXR1cm4gdmFsOwotICB9
CisgIHZvaWQgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSGFzaEVu
dHJ5KiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAKICAgLyoqCiAgICAqIEBpbnRlcm5hbAogICAgKiBIZWxwZXIg
Zm9yIGdldFN0YXRpY1ZhbHVlU2xvdCBhbmQgZ2V0U3RhdGljUHJvcGVydHlTbG90CiAgICAqLwog
ICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcD4KLSAgaW5saW5lIEpTVmFsdWUqIHN0YXRpY1ZhbHVl
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKKyAgSlNWYWx1ZSogc3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogICB7CiAgICAg
ICBUaGlzSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8VGhpc0ltcCo+KHNsb3Quc2xvdEJhc2Uo
KSk7CiAgICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gc2xvdC5zdGF0aWNFbnRyeSgpOwpA
QCAtMTcwLDE0ICsxNTksMTQgQEAgcHJpdmF0ZToKICAgdGVtcGxhdGUgPGNsYXNzIFBhcmVudElt
cD4KICAgaW5saW5lIGJvb2wgZ2V0U3RhdGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogICB7Ci0gICAgY29uc3QgSGFz
aEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIGlm
IChzdGF0aWNfY2FzdDxQYXJlbnRJbXAqPih0aGlzT2JqKS0+UGFyZW50SW1wOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgaWYgKCFlbnRyeSkgLy8gbm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVudAotICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFBhcmVudEltcCo+KHRoaXNPYmopLT5QYXJlbnRJbXA6OmdldE93
blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotCi0gICAgQVNTRVJUKGVu
dHJ5LT5hdHRyaWJ1dGVzICYgRnVuY3Rpb24pOworICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkg
PSB0YWJsZS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIWVudHJ5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXNPYmosIGVu
dHJ5LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7CisgICAgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3Qo
ZXhlYywgZW50cnksIHRoaXNPYmosIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgcmV0dXJuIHRy
dWU7CiAgIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkocmV2aXNp
b24gMzQ4MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIG5hbWVzcGFj
ZSBLSlMgewogCiBzdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NoYXJB
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0
aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKQEAgLTEyNywxOCArMTI2LDMzIEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eShFeGVjU3QKIAogdm9pZCBTdHJpbmdPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgaW50IHNp
emUgPSBpbnRlcm5hbFZhbHVlKCktPmdldFN0cmluZygpLnNpemUoKTsKKyAgaW50IHNpemUgPSBp
bnRlcm5hbFZhbHVlKCktPnZhbHVlKCkuc2l6ZSgpOwogICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmc6
OmZyb20oaSkpKTsKICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHBy
b3BlcnR5TmFtZXMpOwogfQogCitVU3RyaW5nIFN0cmluZ09iamVjdDo6dG9TdHJpbmcoRXhlY1N0
YXRlKikgY29uc3QKK3sKKyAgICByZXR1cm4gaW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpOworfQor
CitVU3RyaW5nIFN0cmluZ09iamVjdDo6dG9UaGlzU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0Cit7
CisgICAgcmV0dXJuIGludGVybmFsVmFsdWUoKS0+dmFsdWUoKTsKK30KKworSlNTdHJpbmcqIFN0
cmluZ09iamVjdDo6dG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRlKikKK3sKKyAgICByZXR1cm4gaW50
ZXJuYWxWYWx1ZSgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3Ry
aW5nUHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogY29uc3QgQ2xhc3NJbmZv
IFN0cmluZ1Byb3RvdHlwZTo6aW5mbyA9IHsgIlN0cmluZyIsICZTdHJpbmdPYmplY3Q6OmluZm8s
IDAsIEV4ZWNTdGF0ZTo6c3RyaW5nVGFibGUgfTsKIC8qIFNvdXJjZSBmb3Igc3RyaW5nX29iamVj
dC5sdXQuaAogQGJlZ2luIHN0cmluZ1RhYmxlIDI2CiAgIHRvU3RyaW5nICAgICAgICAgICAgICBz
dHJpbmdQcm90b0Z1bmNUb1N0cmluZyAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAw
Ci0gIHZhbHVlT2YgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNWYWx1ZU9mICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHZhbHVlT2YgICAgICAgICAgICAgICBzdHJp
bmdQcm90b0Z1bmNUb1N0cmluZyAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCiAg
IGNoYXJBdCAgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNDaGFyQXQgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAgICAgICAxCiAgIGNoYXJDb2RlQXQgICAgICAgICAgICBzdHJpbmdQ
cm90b0Z1bmNDaGFyQ29kZUF0ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCiAgIGNv
bmNhdCAgICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNDb25jYXQgICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAxCkBAIC0xODcsODIgKzIwMSwyOSBAQCBib29sIFN0cmluZ1By
b3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIGlu
bGluZSB2b2lkIGV4cGFuZFNvdXJjZVJhbmdlcyhVU3RyaW5nOjpSYW5nZSAqICYgYXJyYXksIGlu
dCYgY291bnQsIGludCYgY2FwYWNpdHkpCi17Ci0gIGludCBuZXdDYXBhY2l0eTsKLSAgaWYgKGNh
cGFjaXR5ID09IDApIHsKLSAgICBuZXdDYXBhY2l0eSA9IDE2OwotICB9IGVsc2UgewotICAgIG5l
d0NhcGFjaXR5ID0gY2FwYWNpdHkgKiAyOwotICB9Ci0KLSAgVVN0cmluZzo6UmFuZ2UgKm5ld0Fy
cmF5ID0gbmV3IFVTdHJpbmc6OlJhbmdlW25ld0NhcGFjaXR5XTsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgbmV3QXJyYXlbaV0gPSBhcnJheVtpXTsKLSAgfQotCi0g
IGRlbGV0ZSBbXSBhcnJheTsKLQotICBjYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotICBhcnJheSA9
IG5ld0FycmF5OwotfQotCi1zdGF0aWMgdm9pZCBwdXNoU291cmNlUmFuZ2UoVVN0cmluZzo6UmFu
Z2UgKiAmIGFycmF5LCBpbnQmIGNvdW50LCBpbnQmIGNhcGFjaXR5LCBVU3RyaW5nOjpSYW5nZSBy
YW5nZSkKK3N0YXRpYyBpbmxpbmUgVVN0cmluZyBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMoY29u
c3QgVVN0cmluZyYgcmVwbGFjZW1lbnQsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZSwgY29uc3QgaW50
KiBvdmVjdG9yLCBSZWdFeHAqIHJlZykKIHsKLSAgaWYgKGNvdW50ICsgMSA+IGNhcGFjaXR5KQot
ICAgIGV4cGFuZFNvdXJjZVJhbmdlcyhhcnJheSwgY291bnQsIGNhcGFjaXR5KTsKLQotICBhcnJh
eVtjb3VudF0gPSByYW5nZTsKLSAgY291bnQrKzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGV4
cGFuZFJlcGxhY2VtZW50cyhVU3RyaW5nICogJiBhcnJheSwgaW50JiBjb3VudCwgaW50JiBjYXBh
Y2l0eSkKLXsKLSAgaW50IG5ld0NhcGFjaXR5OwotICBpZiAoY2FwYWNpdHkgPT0gMCkgewotICAg
IG5ld0NhcGFjaXR5ID0gMTY7Ci0gIH0gZWxzZSB7Ci0gICAgbmV3Q2FwYWNpdHkgPSBjYXBhY2l0
eSAqIDI7Ci0gIH0KLQotICBVU3RyaW5nICpuZXdBcnJheSA9IG5ldyBVU3RyaW5nW25ld0NhcGFj
aXR5XTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgbmV3QXJyYXlb
aV0gPSBhcnJheVtpXTsKLSAgfQotICAKLSAgZGVsZXRlIFtdIGFycmF5OwotCi0gIGNhcGFjaXR5
ID0gbmV3Q2FwYWNpdHk7Ci0gIGFycmF5ID0gbmV3QXJyYXk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1
c2hSZXBsYWNlbWVudChVU3RyaW5nICogJiBhcnJheSwgaW50JiBjb3VudCwgaW50JiBjYXBhY2l0
eSwgVVN0cmluZyByZXBsYWNlbWVudCkKLXsKLSAgaWYgKGNvdW50ICsgMSA+IGNhcGFjaXR5KQot
ICAgIGV4cGFuZFJlcGxhY2VtZW50cyhhcnJheSwgY291bnQsIGNhcGFjaXR5KTsKLQotICBhcnJh
eVtjb3VudF0gPSByZXBsYWNlbWVudDsKLSAgY291bnQrKzsKLX0KLQotc3RhdGljIGlubGluZSBV
U3RyaW5nIHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlcyhjb25zdCBVU3RyaW5nICZyZXBsYWNlbWVu
dCwgY29uc3QgVVN0cmluZyAmc291cmNlLCBpbnQgKm92ZWN0b3IsIFJlZ0V4cCAqcmVnKQotewot
ICBVU3RyaW5nIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKLQorICBVU3Ry
aW5nIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQ7CisgIGludCBvZmZzZXQgPSAwOwogICBpbnQgaSA9
IC0xOwotICB3aGlsZSAoKGkgPSBzdWJzdGl0dXRlZFJlcGxhY2VtZW50LmZpbmQoVVN0cmluZygi
JCIpLCBpICsgMSkpICE9IC0xKSB7Ci0gICAgaWYgKGkrMSA9PSBzdWJzdGl0dXRlZFJlcGxhY2Vt
ZW50LnNpemUoKSkKKyAgd2hpbGUgKChpID0gcmVwbGFjZW1lbnQuZmluZCgnJCcsIGkgKyAxKSkg
IT0gLTEpIHsKKyAgICBpZiAoaSArIDEgPT0gcmVwbGFjZW1lbnQuc2l6ZSgpKQogICAgICAgICBi
cmVhazsKIAotICAgIHVuc2lnbmVkIHNob3J0IHJlZiA9IHN1YnN0aXR1dGVkUmVwbGFjZW1lbnRb
aSsxXTsKLSAgICBpbnQgYmFja3JlZlN0YXJ0ID0gMDsKLSAgICBpbnQgYmFja3JlZkxlbmd0aCA9
IDA7Ci0gICAgaW50IGFkdmFuY2UgPSAwOwotCi0gICAgaWYgKHJlZiA9PSAnJCcpIHsgIC8vICIk
JCIgLT4gIiQiCi0gICAgICAgIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQgPSBzdWJzdGl0dXRlZFJl
cGxhY2VtZW50LnN1YnN0cigwLCBpICsgMSkgKyBzdWJzdGl0dXRlZFJlcGxhY2VtZW50LnN1YnN0
cihpICsgMik7CisgICAgdW5zaWduZWQgc2hvcnQgcmVmID0gcmVwbGFjZW1lbnRbaSArIDFdOwor
ICAgIGlmIChyZWYgPT0gJyQnKSB7CisgICAgICAgIC8vICIkJCIgLT4gIiQiCisgICAgICAgICsr
aTsKKyAgICAgICAgc3Vic3RpdHV0ZWRSZXBsYWNlbWVudC5hcHBlbmQocmVwbGFjZW1lbnQuZGF0
YSgpICsgb2Zmc2V0LCBpIC0gb2Zmc2V0KTsKKyAgICAgICAgb2Zmc2V0ID0gaSArIDE7CisgICAg
ICAgIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQuYXBwZW5kKCckJyk7CiAgICAgICAgIGNvbnRpbnVl
OwotICAgIH0gZWxzZSBpZiAocmVmID09ICcmJykgeworICAgIH0KKworICAgIGludCBiYWNrcmVm
U3RhcnQ7CisgICAgaW50IGJhY2tyZWZMZW5ndGg7CisgICAgaW50IGFkdmFuY2UgPSAwOworICAg
IGlmIChyZWYgPT0gJyYnKSB7CiAgICAgICAgIGJhY2tyZWZTdGFydCA9IG92ZWN0b3JbMF07CiAg
ICAgICAgIGJhY2tyZWZMZW5ndGggPSBvdmVjdG9yWzFdIC0gYmFja3JlZlN0YXJ0OwogICAgIH0g
ZWxzZSBpZiAocmVmID09ICdgJykgewpAQCAtMjc2LDggKzIzNyw4IEBAIHN0YXRpYyBpbmxpbmUg
VVN0cmluZyBzdWJzdGl0dXRlQmFja3JlZmUKICAgICAgICAgdW5zaWduZWQgYmFja3JlZkluZGV4
ID0gcmVmIC0gJzAnOwogICAgICAgICBpZiAoYmFja3JlZkluZGV4ID4gcmVnLT5udW1TdWJwYXR0
ZXJucygpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzdWJzdGl0dXRlZFJl
cGxhY2VtZW50LnNpemUoKSA+IGkgKyAyKSB7Ci0gICAgICAgICAgICByZWYgPSBzdWJzdGl0dXRl
ZFJlcGxhY2VtZW50W2krMl07CisgICAgICAgIGlmIChyZXBsYWNlbWVudC5zaXplKCkgPiBpICsg
MikgeworICAgICAgICAgICAgcmVmID0gcmVwbGFjZW1lbnRbaSArIDJdOwogICAgICAgICAgICAg
aWYgKHJlZiA+PSAnMCcgJiYgcmVmIDw9ICc5JykgewogICAgICAgICAgICAgICAgIGJhY2tyZWZJ
bmRleCA9IDEwICogYmFja3JlZkluZGV4ICsgcmVmIC0gJzAnOwogICAgICAgICAgICAgICAgIGlm
IChiYWNrcmVmSW5kZXggPiByZWctPm51bVN1YnBhdHRlcm5zKCkpCkBAIC0yOTEsMTAgKzI1Miwx
OSBAQCBzdGF0aWMgaW5saW5lIFVTdHJpbmcgc3Vic3RpdHV0ZUJhY2tyZWZlCiAgICAgfSBlbHNl
CiAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgc3Vic3RpdHV0ZWRSZXBsYWNlbWVudCA9IHN1YnN0
aXR1dGVkUmVwbGFjZW1lbnQuc3Vic3RyKDAsIGkpICsgc291cmNlLnN1YnN0cihiYWNrcmVmU3Rh
cnQsIGJhY2tyZWZMZW5ndGgpICsgc3Vic3RpdHV0ZWRSZXBsYWNlbWVudC5zdWJzdHIoaSArIDIg
KyBhZHZhbmNlKTsKLSAgICBpICs9IGJhY2tyZWZMZW5ndGggLSAxOyAvLyAtIDEgb2Zmc2V0cyAn
aSArIDEnCisgICAgaWYgKGkgLSBvZmZzZXQpCisgICAgICAgIHN1YnN0aXR1dGVkUmVwbGFjZW1l
bnQuYXBwZW5kKHJlcGxhY2VtZW50LmRhdGEoKSArIG9mZnNldCwgaSAtIG9mZnNldCk7CisgICAg
aSArPSAxICsgYWR2YW5jZTsKKyAgICBvZmZzZXQgPSBpICsgMTsKKyAgICBzdWJzdGl0dXRlZFJl
cGxhY2VtZW50LmFwcGVuZChzb3VyY2UuZGF0YSgpICsgYmFja3JlZlN0YXJ0LCBiYWNrcmVmTGVu
Z3RoKTsKICAgfQogCisgIGlmICghb2Zmc2V0KQorICAgIHJldHVybiByZXBsYWNlbWVudDsKKwor
ICBpZiAocmVwbGFjZW1lbnQuc2l6ZSgpIC0gb2Zmc2V0KQorICAgIHN1YnN0aXR1dGVkUmVwbGFj
ZW1lbnQuYXBwZW5kKHJlcGxhY2VtZW50LmRhdGEoKSArIG9mZnNldCwgcmVwbGFjZW1lbnQuc2l6
ZSgpIC0gb2Zmc2V0KTsKKwogICByZXR1cm4gc3Vic3RpdHV0ZWRSZXBsYWNlbWVudDsKIH0KIApA
QCAtMzAzLDMxICsyNzMsMzEgQEAgc3RhdGljIGlubGluZSBpbnQgbG9jYWxlQ29tcGFyZShjb25z
dCBVUwogICAgIHJldHVybiBDb2xsYXRvcjo6dXNlckRlZmF1bHQoKS0+Y29sbGF0ZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IDo6VUNoYXIqPihhLmRhdGEoKSksIGEuc2l6ZSgpLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IDo6VUNoYXIqPihiLmRhdGEoKSksIGIuc2l6ZSgpKTsKIH0KIAotc3RhdGlj
IEpTVmFsdWUgKnJlcGxhY2UoRXhlY1N0YXRlICpleGVjLCBKU1N0cmluZyogc291cmNlVmFsLCBK
U1ZhbHVlICpwYXR0ZXJuLCBKU1ZhbHVlICpyZXBsYWNlbWVudCkKK0pTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgVVN0cmluZyBzb3VyY2UgPSBzb3VyY2VW
YWwtPnZhbHVlKCk7Ci0gIENhbGxEYXRhIGNhbGxEYXRhOwotICBVU3RyaW5nIHJlcGxhY2VtZW50
U3RyaW5nOworICBKU1N0cmluZyogc291cmNlVmFsID0gdGhpc1ZhbHVlLT50b1RoaXNKU1N0cmlu
ZyhleGVjKTsKKyAgY29uc3QgVVN0cmluZyYgc291cmNlID0gc291cmNlVmFsLT52YWx1ZSgpOwor
CisgIEpTVmFsdWUqIHBhdHRlcm4gPSBhcmdzWzBdOwogCisgIEpTVmFsdWUqIHJlcGxhY2VtZW50
ID0gYXJnc1sxXTsKKyAgVVN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKKyAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgIENhbGxUeXBlIGNhbGxUeXBlID0gcmVwbGFjZW1lbnQtPmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICByZXBsYWNlbWVu
dFN0cmluZyA9IHJlcGxhY2VtZW50LT50b1N0cmluZyhleGVjKTsKIAotICBpZiAocGF0dGVybi0+
aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihwYXR0ZXJuKS0+aW5oZXJpdHMo
JlJlZ0V4cE9iamVjdDo6aW5mbykpIHsKLSAgICBSZWdFeHAgKnJlZyA9IHN0YXRpY19jYXN0PFJl
Z0V4cE9iamVjdCAqPihwYXR0ZXJuKS0+cmVnRXhwKCk7CisgIGlmIChwYXR0ZXJuLT5pc09iamVj
dCgmUmVnRXhwT2JqZWN0OjppbmZvKSkgeworICAgIFJlZ0V4cCogcmVnID0gc3RhdGljX2Nhc3Q8
UmVnRXhwT2JqZWN0Kj4ocGF0dGVybiktPnJlZ0V4cCgpOwogICAgIGJvb2wgZ2xvYmFsID0gcmVn
LT5nbG9iYWwoKTsKIAotICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBPYmogPSBzdGF0aWNf
Y2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVn
RXhwQ29uc3RydWN0b3IoKSk7CisgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cE9iaiA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKIAogICAgIGlu
dCBsYXN0SW5kZXggPSAwOwogICAgIGludCBzdGFydFBvc2l0aW9uID0gMDsKIAotICAgIFVTdHJp
bmc6OlJhbmdlICpzb3VyY2VSYW5nZXMgPSAwOwotICAgIGludCBzb3VyY2VSYW5nZUNvdW50ID0g
MDsKLSAgICBpbnQgc291cmNlUmFuZ2VDYXBhY2l0eSA9IDA7Ci0gICAgVVN0cmluZyAqcmVwbGFj
ZW1lbnRzID0gMDsKLSAgICBpbnQgcmVwbGFjZW1lbnRDb3VudCA9IDA7Ci0gICAgaW50IHJlcGxh
Y2VtZW50Q2FwYWNpdHkgPSAwOworICAgIFZlY3RvcjxVU3RyaW5nOjpSYW5nZSwgMTY+IHNvdXJj
ZVJhbmdlczsKKyAgICBWZWN0b3I8VVN0cmluZywgMTY+IHJlcGxhY2VtZW50czsKIAogICAgIC8v
IFRoaXMgaXMgZWl0aGVyIGEgbG9vcCAoaWYgZ2xvYmFsIGlzIHNldCkgb3IgYSBvbmUtd2F5IChp
ZiBub3QpLgogICAgIGRvIHsKQEAgLTMzOCw5ICszMDgsOCBAQCBzdGF0aWMgSlNWYWx1ZSAqcmVw
bGFjZShFeGVjU3RhdGUgKmV4ZWMsCiAgICAgICBpZiAobWF0Y2hJbmRleCA8IDApCiAgICAgICAg
IGJyZWFrOwogCi0gICAgICBwdXNoU291cmNlUmFuZ2Uoc291cmNlUmFuZ2VzLCBzb3VyY2VSYW5n
ZUNvdW50LCBzb3VyY2VSYW5nZUNhcGFjaXR5LCBVU3RyaW5nOjpSYW5nZShsYXN0SW5kZXgsIG1h
dGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKKyAgICAgIHNvdXJjZVJhbmdlcy5hcHBlbmQoVVN0cmlu
Zzo6UmFuZ2UobGFzdEluZGV4LCBtYXRjaEluZGV4IC0gbGFzdEluZGV4KSk7CiAKLSAgICAgIFVT
dHJpbmcgc3Vic3RpdHV0ZWRSZXBsYWNlbWVudDsKICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxs
VHlwZU5vbmUpIHsKICAgICAgICAgICBpbnQgY29tcGxldGVNYXRjaFN0YXJ0ID0gb3ZlY3Rvclsw
XTsKICAgICAgICAgICBBcmdMaXN0IGFyZ3M7CkBAIC0zNTgsMTEgKzMyNyw5IEBAIHN0YXRpYyBK
U1ZhbHVlICpyZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywKICAgICAgICAgICBhcmdzLmFwcGVuZChq
c051bWJlcihleGVjLCBjb21wbGV0ZU1hdGNoU3RhcnQpKTsKICAgICAgICAgICBhcmdzLmFwcGVu
ZChzb3VyY2VWYWwpOwogCi0gICAgICAgICAgc3Vic3RpdHV0ZWRSZXBsYWNlbWVudCA9IGNhbGwo
ZXhlYywgcmVwbGFjZW1lbnQsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZXhlYy0+Z2xvYmFsVGhpc1Zh
bHVlKCksIGFyZ3MpLT50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICByZXBsYWNlbWVudHMuYXBw
ZW5kKGNhbGwoZXhlYywgcmVwbGFjZW1lbnQsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZXhlYy0+Z2xv
YmFsVGhpc1ZhbHVlKCksIGFyZ3MpLT50b1N0cmluZyhleGVjKSk7CiAgICAgICB9IGVsc2UKLSAg
ICAgICAgICBzdWJzdGl0dXRlZFJlcGxhY2VtZW50ID0gc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2Vz
KHJlcGxhY2VtZW50U3RyaW5nLCBzb3VyY2UsIG92ZWN0b3IsIHJlZyk7Ci0KLSAgICAgIHB1c2hS
ZXBsYWNlbWVudChyZXBsYWNlbWVudHMsIHJlcGxhY2VtZW50Q291bnQsIHJlcGxhY2VtZW50Q2Fw
YWNpdHksIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQpOworICAgICAgICAgIHJlcGxhY2VtZW50cy5h
cHBlbmQoc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VtZW50U3RyaW5nLCBzb3VyY2Us
IG92ZWN0b3IsIHJlZykpOwogCiAgICAgICBsYXN0SW5kZXggPSBtYXRjaEluZGV4ICsgbWF0Y2hM
ZW47CiAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdEluZGV4OwpAQCAtMzc2LDE1ICszNDMsOSBA
QCBzdGF0aWMgSlNWYWx1ZSAqcmVwbGFjZShFeGVjU3RhdGUgKmV4ZWMsCiAgICAgfSB3aGlsZSAo
Z2xvYmFsKTsKIAogICAgIGlmIChsYXN0SW5kZXggPCBzb3VyY2Uuc2l6ZSgpKQotICAgICAgcHVz
aFNvdXJjZVJhbmdlKHNvdXJjZVJhbmdlcywgc291cmNlUmFuZ2VDb3VudCwgc291cmNlUmFuZ2VD
YXBhY2l0eSwgVVN0cmluZzo6UmFuZ2UobGFzdEluZGV4LCBzb3VyY2Uuc2l6ZSgpIC0gbGFzdElu
ZGV4KSk7Ci0KLSAgICBVU3RyaW5nIHJlc3VsdDsKKyAgICAgIHNvdXJjZVJhbmdlcy5hcHBlbmQo
VVN0cmluZzo6UmFuZ2UobGFzdEluZGV4LCBzb3VyY2Uuc2l6ZSgpIC0gbGFzdEluZGV4KSk7CiAK
LSAgICBpZiAoc291cmNlUmFuZ2VzKQotICAgICAgICByZXN1bHQgPSBzb3VyY2Uuc3BsaWNlU3Vi
c3RyaW5nc1dpdGhTZXBhcmF0b3JzKHNvdXJjZVJhbmdlcywgc291cmNlUmFuZ2VDb3VudCwgcmVw
bGFjZW1lbnRzLCByZXBsYWNlbWVudENvdW50KTsKLQotICAgIGRlbGV0ZSBbXSBzb3VyY2VSYW5n
ZXM7Ci0gICAgZGVsZXRlIFtdIHJlcGxhY2VtZW50czsKKyAgICBVU3RyaW5nIHJlc3VsdCA9IHNv
dXJjZS5zcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoc291cmNlUmFuZ2VzLmRhdGEoKSwg
c291cmNlUmFuZ2VzLnNpemUoKSwgcmVwbGFjZW1lbnRzLmRhdGEoKSwgcmVwbGFjZW1lbnRzLnNp
emUoKSk7CiAKICAgICBpZiAocmVzdWx0ID09IHNvdXJjZSkKICAgICAgIHJldHVybiBzb3VyY2VW
YWw7CkBAIC00MTUsMjQgKzM3NiwyMCBAQCBzdGF0aWMgSlNWYWx1ZSAqcmVwbGFjZShFeGVjU3Rh
dGUgKmV4ZWMsCiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewot
ICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICAvLyBBbHNvIHVzZWQg
Zm9yIHZhbHVlT2YuCiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhp
c1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpOwotfQorICAgIGlmICh0aGlzVmFsdWUtPmlzU3RyaW5n
KCkpCisgICAgICAgIHJldHVybiB0aGlzVmFsdWU7CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCi17Ci0gICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZTdHJpbmdP
YmplY3Q6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OworICAgIGlmICh0aGlzVmFsdWUtPmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJu
YWxWYWx1ZSgpOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNW
YWx1ZSktPmludGVybmFsVmFsdWUoKTsKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwogfQogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKLSAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlz
IGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3Ry
aW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSkt
PmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
LT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmlu
ZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKICAgICBVU3RyaW5nIHU7CkBAIC00
NDcsOCArNDA0LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZQog
CiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
Ly8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmlu
Z09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVj
dDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5h
bFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7
CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgpOwogCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gMDsKQEAg
LTQ2NCw4ICs0MjAsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNT
CiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIC8v
IFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdP
YmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6
OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxW
YWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyktPnRvU3RyaW5n
KGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwog
CiAgICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKICAgICBmb3Ig
KEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKQEAgLTQ3Niw4ICs0MzEsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDb25jYXQo
RXhlY1N0YXRlCiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKLSAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlz
IGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3Ry
aW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSkt
PmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
LT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmlu
ZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKICAgICBKU1ZhbHVlKiBhMCA9IGFy
Z3NbMF07CkBAIC00OTMsOCArNDQ3LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jSW5kZXhP
ZihFeGVjU3RhdAogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNP
YmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2JqZWN0
KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1Zh
bHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmplY3Qo
ZXhlYyktPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlz
U3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAogICAgIEpTVmFsdWUqIGEw
ID0gYXJnc1swXTsKQEAgLTUxMSw4ICs0NjQsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNM
YXN0SW5kZXhPZihFeGVjCiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7Ci0gICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09i
aiBpcyBhIFN0cmluZ09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3Qo
JlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFs
dWUpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChl
eGVjKS0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNT
dHJpbmcoZXhlYyk7CiAKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CiAKQEAgLTUyOSw3ICs0
ODEsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqCiAgICAgICAg
Ki8KICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGEwLT50b1N0cmluZyhleGVjKSk7CiAgICAg
fQotICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBPYmogPSBzdGF0aWNfY2FzdDxSZWdFeHBD
b25zdHJ1Y3Rvcio+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0
b3IoKSk7CisgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cE9iaiA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwogICAgIGlu
dCBtYXRjaExlbmd0aDsKICAgICByZWdFeHBPYmotPnBlcmZvcm1NYXRjaChyZWcuZ2V0KCksIHUs
IDAsIHBvcywgbWF0Y2hMZW5ndGgpOwpAQCAtNTY2LDggKzUxOCw3IEBAIEpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSoKIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2Vh
cmNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNl
IHRoYXQgdGhpc09iaiBpcyBhIFN0cmluZ09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmpl
Y3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzVmFsdWUtPnRv
VGhpc09iamVjdChleGVjKS0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1Zh
bHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CiAK
QEAgLTU4MywzMiArNTM0LDE2IEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVj
U3RhdGUKICAgICAgICAqLwogICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoYTAtPnRvU3RyaW5n
KGV4ZWMpKTsKICAgICB9Ci0gICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cE9iaiA9IHN0YXRp
Y19jYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5y
ZWdFeHBDb25zdHJ1Y3RvcigpKTsKKyAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwT2JqID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIGlu
dCBwb3M7CiAgICAgaW50IG1hdGNoTGVuZ3RoOwogICAgIHJlZ0V4cE9iai0+cGVyZm9ybU1hdGNo
KHJlZy5nZXQoKSwgdSwgMCwgcG9zLCBtYXRjaExlbmd0aCk7CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHBvcyk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKLXsKLSAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlz
T2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVj
dCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNW
YWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0
KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKLQotICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVl
LT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/Ci0gICAgICBzdGF0aWNfY2FzdDxTdHJp
bmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkgOgotICAgICAgc3RhdGljX2Nh
c3Q8SlNTdHJpbmcqPihqc1N0cmluZyhleGVjLCBzKSk7Ci0KLSAgICBKU1ZhbHVlKiBhMCA9IGFy
Z3NbMF07Ci0gICAgSlNWYWx1ZSogYTEgPSBhcmdzWzFdOwotCi0gICAgcmV0dXJuIHJlcGxhY2Uo
ZXhlYywgc1ZhbCwgYTAsIGExKTsKLX0KLQogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2xpY2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKLSAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhh
dCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5p
c09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+
KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlz
T2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUt
PnRvVGhpc1N0cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKICAgICBKU1Zh
bHVlKiBhMCA9IGFyZ3NbMF07CkBAIC02MzIsOCArNTY3LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jU2xpY2UoRXhlY1N0YXRlKgogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTcGxpdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0
IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlz
T2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4o
dGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNP
YmplY3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+
dG9UaGlzU3RyaW5nKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSogYTAgPSBhcmdzWzBdOwogICAgIEpT
VmFsdWUqIGExID0gYXJnc1sxXTsKQEAgLTcwMSw4ICs2MzUsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqCiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N1YnN0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0
aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUt
PmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0
Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1Ro
aXNPYmplY3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAogICAgIEpT
VmFsdWUqIGEwID0gYXJnc1swXTsKQEAgLTcyNiw4ICs2NTksNyBAQCBKU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRlCiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N1YnN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2Fz
ZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUtPmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2Jq
ZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50
b1RoaXNPYmplY3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAogICAg
IEpTVmFsdWUqIGEwID0gYXJnc1swXTsKQEAgLTc1OSwxMiArNjkxLDkgQEAgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdAogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNU
b0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNh
c2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc1Zh
bHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09i
amVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+
dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKKyAgICBKU1N0cmluZyogc1ZhbCA9
IHRoaXNWYWx1ZS0+dG9UaGlzSlNTdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgcyA9
IHNWYWwtPnZhbHVlKCk7CiAgICAgCi0gICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUtPmlz
T2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pCi0gICAgICAgID8gc3RhdGljX2Nhc3Q8U3RyaW5n
T2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpCi0gICAgICAgIDogc3RhdGljX2Nh
c3Q8SlNTdHJpbmcqPihqc1N0cmluZyhleGVjLCBzKSk7CiAgICAgaW50IHNzaXplID0gcy5zaXpl
KCk7CiAgICAgaWYgKCFzc2l6ZSkKICAgICAgICAgcmV0dXJuIHNWYWw7CkBAIC03ODQsMTIgKzcx
Myw5IEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKEV4ZWMKIAogSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgLy8gVGhpcyBvcHRp
bWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmluZ09iamVjdAotICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykgPyBz
dGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCktPnZh
bHVlKCkgOiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJpbmcoZXhlYyk7Ci0K
LSAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6
aW5mbykKLSAgICAgICAgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5p
bnRlcm5hbFZhbHVlKCkKLSAgICAgICAgOiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGpzU3RyaW5n
KGV4ZWMsIHMpKTsKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS0+dG9UaGlzSlNTdHJp
bmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKCk7CisgICAgCiAg
ICAgaW50IHNzaXplID0gcy5zaXplKCk7CiAgICAgaWYgKCFzc2l6ZSkKICAgICAgICAgcmV0dXJu
IHNWYWw7CkBAIC04MDksMTMgKzczNSwxMSBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb1Vw
cGVyQ2FzZShFeGVjCiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlTG93ZXJDYXNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQogewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRo
aXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2Jq
ZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhp
c1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmpl
Y3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOwotICAgIAogICAgIC8vIEZJWE1FOiBTZWUgaHR0cDov
L3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9TcGVjaWFsQ2FzaW5nLnR4dCBmb3IgbG9j
YWxlLXNlbnNpdGl2ZSBtYXBwaW5ncyB0aGF0IGFyZW4ndCBpbXBsZW1lbnRlZC4KLSAgICBKU1N0
cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykKLSAg
ICAgICAgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZh
bHVlKCkKLSAgICAgICAgOiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGpzU3RyaW5nKGV4ZWMsIHMp
KTsKKworICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLT50b1RoaXNKU1N0cmluZyhleGVj
KTsKKyAgICBjb25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoKTsKKyAgICAKICAgICBpbnQg
c3NpemUgPSBzLnNpemUoKTsKICAgICBpZiAoIXNzaXplKQogICAgICAgICByZXR1cm4gc1ZhbDsK
QEAgLTgzNSwxMiArNzU5LDkgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dl
ckNhcwogCiBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZVVwcGVyQ2FzZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
IHsKLSAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlz
IGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3Ry
aW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSkt
PmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
LT50b1N0cmluZyhleGVjKTsKLQotICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLT5pc09i
amVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKQotICAgICAgICA/IHN0YXRpY19jYXN0PFN0cmluZ09i
amVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKQotICAgICAgICA6IHN0YXRpY19jYXN0
PEpTU3RyaW5nKj4oanNTdHJpbmcoZXhlYywgcykpOworICAgIEpTU3RyaW5nKiBzVmFsID0gdGhp
c1ZhbHVlLT50b1RoaXNKU1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBVU3RyaW5nJiBzID0gc1Zh
bC0+dmFsdWUoKTsKKyAgICAKICAgICBpbnQgc3NpemUgPSBzLnNpemUoKTsKICAgICBpZiAoIXNz
aXplKQogICAgICAgICByZXR1cm4gc1ZhbDsKQEAgLTg2MywxMDMgKzc4NCw4OSBAQCBKU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4CiAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwg
MSkKICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCAwKTsKIAotICAgIC8vIFRoaXMgb3B0aW1p
emVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3Rh
dGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1
ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOworICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIEpTVmFsdWUq
IGEwID0gYXJnc1swXTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbG9jYWxlQ29tcGFyZShz
LCBhMC0+dG9TdHJpbmcoZXhlYykpKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQmln
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQogewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRo
aXNPYmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2Jq
ZWN0KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhp
c1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmpl
Y3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9U
aGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGJpZz4iICsgcyAr
ICI8L2JpZz4iKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7
Ci0gICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBh
IFN0cmluZ09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmlu
Z09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5p
bnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+
dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmco
ZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8c21hbGw+IiArIHMgKyAiPC9zbWFs
bD4iKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAg
Ly8gVGhpcyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmlu
Z09iamVjdAotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVj
dDo6aW5mbykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5h
bFZhbHVlKCktPnZhbHVlKCkgOiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8Ymxpbms+IiArIHMgKyAiPC9ibGluaz4iKTsK
IH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICAvLyBUaGlz
IG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0
Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZv
KSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUo
KS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVj
KTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgIjxiPiIgKyBzICsgIjwvYj4iKTsKIH0KIAogSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgLy8gVGhpcyBvcHRpbWl6ZXMgdGhl
IGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmluZ09iamVjdAotICAgIFVTdHJpbmcg
cyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5mbykgPyBzdGF0aWNfY2Fz
dDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkgOiB0
aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmlu
ZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsICI8dHQ+IiArIHMgKyAiPC90dD4iKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9G
dW5jSXRhbGljcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKIHsKLSAgICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNh
c2UgdGhhdCB0aGlzT2JqIGlzIGEgU3RyaW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc1Zh
bHVlLT5pc09iamVjdCgmU3RyaW5nT2JqZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09i
amVjdCo+KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+
dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxp
PiIgKyBzICsgIjwvaT4iKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQogewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNP
YmogaXMgYSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2JqZWN0
KCZTdHJpbmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1Zh
bHVlKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmplY3Qo
ZXhlYyktPnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlz
U3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPHN0cmlrZT4iICsgcyAr
ICI8L3N0cmlrZT4iKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQog
ewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMg
YSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2JqZWN0KCZTdHJp
bmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1ZhbHVlKS0+
aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYykt
PnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5n
KGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPHN1Yj4iICsgcyArICI8L3N1Yj4i
KTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIC8vIFRo
aXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBTdHJpbmdPYmpl
Y3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2JqZWN0KCZTdHJpbmdPYmplY3Q6Omlu
Zm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1
ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyktPnRvU3RyaW5nKGV4
ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCAiPHN1cD4iICsgcyArICI8L3N1cD4iKTsKIH0KIAogSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgLy8gVGhp
cyBvcHRpbWl6ZXMgdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhpc09iaiBpcyBhIFN0cmluZ09iamVj
dAotICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+aXNPYmplY3QoJlN0cmluZ09iamVjdDo6aW5m
bykgPyBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3QqPih0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVl
KCktPnZhbHVlKCkgOiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+dG9TdHJpbmcoZXhl
Yyk7CisgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAg
SlNWYWx1ZSogYTAgPSBhcmdzWzBdOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGZvbnQg
Y29sb3I9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvZm9udD4iKTsK
IH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAg
ICAvLyBUaGlzIG9wdGltaXplcyB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGlzT2JqIGlzIGEgU3Ry
aW5nT2JqZWN0Ci0gICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT5pc09iamVjdCgmU3RyaW5nT2Jq
ZWN0OjppbmZvKSA/IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KHRoaXNWYWx1ZSktPmludGVy
bmFsVmFsdWUoKS0+dmFsdWUoKSA6IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT50b1N0
cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVj
KTsKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
ICI8Zm9udCBzaXplPVwiIiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2Zv
bnQ+Iik7CiB9CiAKIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewotICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMg
YSBTdHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2JqZWN0KCZTdHJp
bmdPYmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1ZhbHVlKS0+
aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYykt
PnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5n
KGV4ZWMpOwogICAgIEpTVmFsdWUqIGEwID0gYXJnc1swXTsKICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgIjxhIG5hbWU9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwv
YT4iKTsKIH0KIAogSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewot
ICAgIC8vIFRoaXMgb3B0aW1pemVzIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoaXNPYmogaXMgYSBT
dHJpbmdPYmplY3QKLSAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPmlzT2JqZWN0KCZTdHJpbmdP
YmplY3Q6OmluZm8pID8gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4odGhpc1ZhbHVlKS0+aW50
ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpIDogdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyktPnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4
ZWMpOwogICAgIEpTVmFsdWUqIGEwID0gYXJnc1swXTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhl
YywgIjxhIGhyZWY9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvYT4i
KTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAkocmV2aXNpb24gMzQ4MDQp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw2ICs1MCwxMSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBwcm90ZWN0ZWQ6CiAgICAgU3Ry
aW5nT2JqZWN0KEpTT2JqZWN0KiBwcm90b3R5cGUsIEpTU3RyaW5nKik7CisKKyAgcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmly
dHVhbCBVU3RyaW5nIHRvVGhpc1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEpTU3RyaW5nKiB0b1RoaXNKU1N0cmluZyhFeGVjU3RhdGUqKTsKICAgfTsKIAogICAvLyBXZWJD
b3JlIHVzZXMgdGhpcyB0byBtYWtlIHN0eWxlLmZpbHRlciB1bmRldGVjdGFibGUKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy91c3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvdXN0cmluZy5jcHAJKHJldmlzaW9uIDM0ODA0KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L3VzdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzQsNiArNzc0LDUwIEBAIFVTdHJpbmcm
IFVTdHJpbmc6OmFwcGVuZChjb25zdCBVU3RyaW5nICYKICAgcmV0dXJuICp0aGlzOwogfQogCitV
U3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVUNoYXIqIHREYXRhLCBpbnQgdFNpemUpCit7
CisgIGludCB0aGlzU2l6ZSA9IHNpemUoKTsKKyAgaW50IHRoaXNPZmZzZXQgPSBtX3JlcC0+b2Zm
c2V0OworICBpbnQgbGVuZ3RoID0gdGhpc1NpemUgKyB0U2l6ZTsKKworICAvLyBwb3NzaWJsZSBj
YXNlczoKKyAgaWYgKHRTaXplID09IDApIHsKKyAgICAvLyB0IGlzIGVtcHR5CisgIH0gZWxzZSBp
ZiAodGhpc1NpemUgPT0gMCkgeworICAgIC8vIHRoaXMgaXMgZW1wdHkKKyAgICBtX3JlcCA9IFJl
cDo6Y3JlYXRlQ29weWluZyh0RGF0YSwgdFNpemUpOworICB9IGVsc2UgaWYgKG1fcmVwLT5iYXNl
SXNTZWxmKCkgJiYgbV9yZXAtPnJjID09IDEpIHsKKyAgICAvLyB0aGlzIGlzIGRpcmVjdCBhbmQg
aGFzIHJlZmNvdW50IG9mIDEgKHNvIHdlIGNhbiBqdXN0IGFsdGVyIGl0IGRpcmVjdGx5KQorICAg
IGV4cGFuZENhcGFjaXR5KHRoaXNPZmZzZXQgKyBsZW5ndGgpOworICAgIGlmIChkYXRhKCkpIHsK
KyAgICAgICAgbWVtY3B5KGNvbnN0X2Nhc3Q8VUNoYXIqPihkYXRhKCkgKyB0aGlzU2l6ZSksIHRE
YXRhLCB0U2l6ZSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtX3JlcC0+bGVuID0gbGVuZ3Ro
OworICAgICAgICBtX3JlcC0+X2hhc2ggPSAwOworICAgIH0KKyAgfSBlbHNlIGlmICh0aGlzT2Zm
c2V0ICsgdGhpc1NpemUgPT0gdXNlZENhcGFjaXR5KCkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVT
aXplKSB7CisgICAgLy8gdGhpcyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAtIGV4dGVu
ZCBpdCBpZiBpdCdzIGxvbmcgZW5vdWdoIHRvIGFwcGVuZCB0bworICAgIGV4cGFuZENhcGFjaXR5
KHRoaXNPZmZzZXQgKyBsZW5ndGgpOworICAgIGlmIChkYXRhKCkpIHsKKyAgICAgICAgbWVtY3B5
KGNvbnN0X2Nhc3Q8VUNoYXIqPihkYXRhKCkgKyB0aGlzU2l6ZSksIHREYXRhLCB0U2l6ZSAqIHNp
emVvZihVQ2hhcikpOworICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKG1fcmVwLCAwLCBsZW5n
dGgpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvLyB0aGlzIGlzIHNoYXJlZCB3aXRoIHNvbWVv
bmUgdXNpbmcgbW9yZSBjYXBhY2l0eSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcKKyAg
ICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUobGVuZ3RoLCAwKTsKKyAgICBVQ2hh
ciogZCA9IGFsbG9jQ2hhcnMobmV3Q2FwYWNpdHkpOworICAgIGlmICghZCkKKyAgICAgICAgbV9y
ZXAgPSAmUmVwOjpudWxsOworICAgIGVsc2UgeworICAgICAgICBtZW1jcHkoZCwgZGF0YSgpLCB0
aGlzU2l6ZSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtZW1jcHkoY29uc3RfY2FzdDxVQ2hh
cio+KGQgKyB0aGlzU2l6ZSksIHREYXRhLCB0U2l6ZSAqIHNpemVvZihVQ2hhcikpOworICAgICAg
ICBtX3JlcCA9IFJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7CisgICAgICAgIG1fcmVwLT5jYXBhY2l0
eSA9IG5ld0NhcGFjaXR5OworICAgIH0KKyAgfQorCisgIHJldHVybiAqdGhpczsKK30KKwogVVN0
cmluZyYgVVN0cmluZzo6YXBwZW5kKGNvbnN0IGNoYXIgKnQpCiB7CiAgIGludCB0aGlzU2l6ZSA9
IHNpemUoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy91c3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuaAkocmV2aXNpb24gMzQ4MDQpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvdXN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiArMjIyLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVVN0cmluZyYgYXBwZW5kKGNvbnN0IGNoYXIqKTsKICAg
ICBVU3RyaW5nJiBhcHBlbmQoVUNoYXIpOwogICAgIFVTdHJpbmcmIGFwcGVuZChjaGFyIGMpIHsg
cmV0dXJuIGFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oYykpKTsgfQorICAgIFVTdHJpbmcmIGFwcGVuZChjb25zdCBVQ2hhciosIGludCBzaXplKTsK
IAogICAgIC8qKgogICAgICAqIEByZXR1cm4gVGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gdGhlIDgt
Yml0IHN0cmluZyB0eXBlIENTdHJpbmcoKS4KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0ODA0
KQorKysgSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTEgQEAKKzIwMDgtMDYtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSlNVdGlscy5jcHA6
IEFkZGVkIGluY2x1ZGUgb2YgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nLmg+IG5vdyB0aGF0IGpz
U3RyaW5nIHJldHVybnMKKyAgICAgICAgYSBKU1N0cmluZyouCisgICAgICAgICogVXNlck9iamVj
dEltcC5jcHA6IERpdHRvLgorCiAyMDA4LTA2LTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZi4KSW5kZXg6IEphdmFTY3JpcHRHbHVl
L0pTVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCShy
ZXZpc2lvbiAzNDgwNCkKKysrIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxMiArMjgsMTMgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkpTVXRpbHMuaCIKKwogI2luY2x1ZGUgIkpTQmFzZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNSdW4uaCIKLSNpbmNsdWRlICJVc2VyT2JqZWN0SW1wLmgiCiAjaW5jbHVk
ZSAiSlNWYWx1ZVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlVz
ZXJPYmplY3RJbXAuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+CiAKIHN0cnVjdCBPYmpl
Y3RJbXBMaXN0IHsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCShyZXZpc2lvbiAzNDgw
NCkKKysrIEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBD
b21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJVc2VyT2JqZWN0SW1wLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmlu
Zy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+CiAKIGNv
bnN0IENsYXNzSW5mbyBVc2VyT2JqZWN0SW1wOjppbmZvID0geyAiVXNlck9iamVjdCIsIDAsIDAs
IDAgfTsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAzNDgwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTAgQEAKKzIwMDgtMDYtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYnJpZGdlL3J1bnRpbWUuaDogQWRkZWQgaW5jbHVkZSBvZiBKU1N0cmluZy5oIG5vdyB0aGF0
IGpzU3RyaW5nIHJldHVybnMgYQorICAgICAgICBKU1N0cmluZyouCisKIDIwMDgtMDYtMjUgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBF
aWRzb24uCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9icmlkZ2UvcnVudGltZS5oCShyZXZpc2lvbiAzNDgwNCkKKysrIFdlYkNvcmUvYnJpZGdl
L3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNyBAQAogI2lmbmRlZiBKQVZB
U0NSSVBUQ09SRV9CSU5ESU5HU19SVU5USU1FX0gKICNkZWZpbmUgSkFWQVNDUklQVENPUkVfQklO
RElOR1NfUlVOVElNRV9ICiAKLSNpbmNsdWRlIDxranMvSlNWYWx1ZS5oPgotCisjaW5jbHVkZSA8
a2pzL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
</data>
<flag name="review"
          id="9642"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>