<?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>27488</bug_id>
          
          <creation_ts>2009-07-21 01:04:00 -0700</creation_ts>
          <short_desc>SVG and XPath memory leaks in V8 bindings</short_desc>
          <delta_ts>2009-07-24 16:46:33 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>0</everconfirmed>
          <reporter name="Mads Ager">ager</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133390</commentid>
    <comment_count>0</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-21 01:04:00 -0700</bug_when>
    <thetext>The V8 bindings for SVGPODTypeWrappers and XPathNSResolvers are not managing ref counts properly which leads to memory leaks.

These leaks are detected by valgrind on multiple layout tests.

For details see:

http://crbug.com/17244
http://crbug.com/17242
http://crbug.com/17237
http://crbug.com/9516</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133393</commentid>
    <comment_count>1</comment_count>
      <attachid>33155</attachid>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-21 01:11:10 -0700</bug_when>
    <thetext>Created attachment 33155
Add &apos;create&apos; methods to SVGPODTypeWrappers and XPathNSResolvers to avoid memory leaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134031</commentid>
    <comment_count>2</comment_count>
      <attachid>33155</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-22 23:05:28 -0700</bug_when>
    <thetext>Comment on attachment 33155
Add &apos;create&apos; methods to SVGPODTypeWrappers and XPathNSResolvers to avoid memory leaks.

In general it&apos;s not safe to use .get() on a RefPtr:

$result .= $indent . &quot;RefPtr&lt;V8SVGPODTypeWrapper&lt;&quot; . $nativeReturnType . &quot;&gt; &gt; wrapper = &quot;;
 1527         $result .= &quot;V8SVGPODTypeWrapperCreatorForList&lt;&quot; . $nativeReturnType . &quot;&gt;::create($return, imp-&gt;associatedAttributeName());\n&quot;;
 1528         $return = &quot;wrapper.get()&quot;;

I guess we can assume that whatever uses $return causes a ref to it?  Otherwise if you return the raw pointer, that pointer will have been deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134032</commentid>
    <comment_count>3</comment_count>
      <attachid>33155</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-22 23:07:08 -0700</bug_when>
    <thetext>Comment on attachment 33155
Add &apos;create&apos; methods to SVGPODTypeWrappers and XPathNSResolvers to avoid memory leaks.

I would encourage you to create a version of convertToV8Object which takes  PassRefPtr&lt;T&gt; instead of a raw pointer.  That makes the calling convention cleaner (that it takes ownership) and makes it easier to not have to do a .get().  you can do .release() instead and cause less ref-churn.

See the toJS PassRefPtr&lt;T&gt; version in JSDOMBinding.h if you&apos;re looking for an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134034</commentid>
    <comment_count>4</comment_count>
      <attachid>33155</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-22 23:09:55 -0700</bug_when>
    <thetext>Comment on attachment 33155
Add &apos;create&apos; methods to SVGPODTypeWrappers and XPathNSResolvers to avoid memory leaks.

Also, I don&apos;t understand why V8 has its own copy of the PODTypeWrapper stuff.  The wrappers have nothing to do with JavaScriptCore (or certainly don&apos;t need to be tied to JSC).  They&apos;re the &quot;impl&quot; layer for types which SVG expects to be ref-counted but that we internally store as POD types.  It seems that JSC and v8 really really should share the PODTypeWrapper code. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134037</commentid>
    <comment_count>5</comment_count>
      <attachid>33155</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-22 23:17:31 -0700</bug_when>
    <thetext>Comment on attachment 33155
Add &apos;create&apos; methods to SVGPODTypeWrappers and XPathNSResolvers to avoid memory leaks.

R- based on Eric&apos;s comments.  I, for one, welcome our PassRefPtr overloads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134087</commentid>
    <comment_count>6</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-23 06:18:53 -0700</bug_when>
    <thetext>Thanks for the good suggestions Eric!

I have introduced the overloads for the convert*ToV8Object methods and cleaned up the use of get() and release() on RefPtrs.  What was in the previous patch should be safe, but the current version is nicer.

Regarding the V8 version of the PODTypeWrapper stuff, I don&apos;t know why it is different, but it is.  You are right that we should see if we can use the same POD type wrappers both for V8 and for JSC.  I think that should be a separate change though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134088</commentid>
    <comment_count>7</comment_count>
      <attachid>33327</attachid>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-23 06:20:31 -0700</bug_when>
    <thetext>Created attachment 33327
Avoid memory leaks and cleanup use of get() and release() on RefPtrs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134121</commentid>
    <comment_count>8</comment_count>
      <attachid>33327</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-23 09:13:05 -0700</bug_when>
    <thetext>Comment on attachment 33327
Avoid memory leaks and cleanup use of get() and release() on RefPtrs.

This is looking good.  A couple questions:

         if ($attrIsPodType) {
-            $resultObject = &quot;wrapper&quot;;
+            $resultObject = &quot;wrapper.get()&quot;;
+        }

You should just just WTF::getPtr unconditionally.  It should be free in the non-RefPtr case.

-    return V8DOMWrapper::convertNodeToV8Object(object.get());
+    return V8DOMWrapper::convertNodeToV8Object(object);
[...]
-    return V8DOMWrapper::convertNodeToV8Object(object.get());
+    return V8DOMWrapper::convertNodeToV8Object(object);

Why no release here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134123</commentid>
    <comment_count>9</comment_count>
      <attachid>33327</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-23 09:16:41 -0700</bug_when>
    <thetext>Comment on attachment 33327
Avoid memory leaks and cleanup use of get() and release() on RefPtrs.

I totally agree.  The PODType unification stuff can be a separate change.  Had I been paying more attention long ago, I would not have let them diverge in the first place. ;)

Should this $wrapper use my?

                 $wrapper = &quot;V8SVGStaticPODTypeWrapperWithPODTypeParent&lt;$nativeType, $implClassName&gt;::create($getterString, imp_wrapper)&quot;;
 589                 push(@implContentDecls, &quot;    RefPtr&lt;V8SVGStaticPODTypeWrapperWithPODTypeParent&lt;$nativeType, $implClassName&gt; &gt; wrapper = $wrapper;\n&quot;);

You certainly don&apos;t want $wrapper used again outside that block, or you&apos;d end up with two calls to create...

I would have probably used a different set of variables to make that whole block use less copy/paste.
Like adding a  my $wrapperType = &quot;V8SVGStaticPODTypeWrapperWithPODTypeParent&quot;
instead of pulling the &quot;push&quot; statement into every else clause.
it&apos;s OK as is, just probably could be less code written slightly differently.

I would have probably written all of the:
 623             $resultObject = $resultObject . &quot;.get()&quot;;
 633         $result = $result . &quot;.release()&quot; if (IsRefPtrType($attrType));
 1556         $return = $return . &quot;.release()&quot; if (IsRefPtrType($returnType));

As:
$return .= &quot;.release()&quot;
Initially I thought you were assigning the refptrs to themselves in the c++ code. ;)


These can all be a template, like the JSC bindings:
  static v8::Handle&lt;v8::Value&gt; convertNodeToV8Object(PassRefPtr&lt;Node&gt; node)
 145         {
 146             return convertNodeToV8Object(node.get());
 147         }
 148 

see toJS PassRefPtr&lt;T&gt;:
http://trac.webkit.org/browser/trunk/WebCore/bindings/js/JSDOMBinding.h#L253

In this case there is no need for the intermediary RefPtr:
RefPtr&lt;HTMLCollection&gt; collection = htmlDocument-&gt;all();
 184     return V8DOMWrapper::convertToV8Object(V8ClassIndex::HTMLCOLLECTION, collection.release());
unless you&apos;re trying to shorten then line...

Same here:
  RefPtr&lt;V8SVGStaticPODTypeWrapper&lt;TransformationMatrix&gt; &gt; wrapper = V8SVGStaticPODTypeWrapper&lt;TransformationMatrix&gt;::create(result);
 62     return V8DOMWrapper::convertToV8Object(V8ClassIndex::SVGMATRIX, wrapper.release());

This change looks fine as is.  There are some nits above which you could fix.

Since you&apos;re not a committer, I&apos;m going to r- this to ask for one more round. If you were, I could r+ this and you could fix any nits you deemed appropriate as you went to commit.

Thannks for this great cleanup!  Eventually I would like to re-write our autogen system to not be so horribly ugly (aka not perl)... but that&apos;s a ways off yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134476</commentid>
    <comment_count>10</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-24 02:30:30 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 33327 [details])
&gt; This is looking good.  A couple questions:
&gt; 
&gt;          if ($attrIsPodType) {
&gt; -            $resultObject = &quot;wrapper&quot;;
&gt; +            $resultObject = &quot;wrapper.get()&quot;;
&gt; +        }
&gt; 
&gt; You should just just WTF::getPtr unconditionally.  It should be free in the
&gt; non-RefPtr case.

Thanks.  I&apos;m now including GetPtr.h and using it WTF::getPtr() unconditionally here.

&gt; -    return V8DOMWrapper::convertNodeToV8Object(object.get());
&gt; +    return V8DOMWrapper::convertNodeToV8Object(object);
&gt; [...]
&gt; -    return V8DOMWrapper::convertNodeToV8Object(object.get());
&gt; +    return V8DOMWrapper::convertNodeToV8Object(object);
&gt; 
&gt; Why no release here?

Because object is a PassRefPtr in these two cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134477</commentid>
    <comment_count>11</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-24 02:37:17 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Should this $wrapper use my?

yes, done.

&gt; I would have probably used a different set of variables to make that whole
&gt; block use less copy/paste.
&gt; Like adding a  my $wrapperType = &quot;V8SVGStaticPODTypeWrapperWithPODTypeParent&quot;
&gt; instead of pulling the &quot;push&quot; statement into every else clause.
&gt; it&apos;s OK as is, just probably could be less code written slightly differently.

I left this alone.  Trying it out I didn&apos;t manage to make it more readable than it is now.
 
&gt; I would have probably written all of the:
&gt;  623             $resultObject = $resultObject . &quot;.get()&quot;;
&gt;  633         $result = $result . &quot;.release()&quot; if (IsRefPtrType($attrType));
&gt;  1556         $return = $return . &quot;.release()&quot; if (IsRefPtrType($returnType));
&gt;
&gt; As:
&gt; $return .= &quot;.release()&quot;
&gt; Initially I thought you were assigning the refptrs to themselves in the c++
&gt; code. ;)

Thanks, done!
 
&gt; These can all be a template, like the JSC bindings:
&gt;   static v8::Handle&lt;v8::Value&gt; convertNodeToV8Object(PassRefPtr&lt;Node&gt; node)
&gt;  145         {
&gt;  146             return convertNodeToV8Object(node.get());
&gt;  147         }
&gt;  148 
&gt; 
&gt; see toJS PassRefPtr&lt;T&gt;:
&gt; http://trac.webkit.org/browser/trunk/WebCore/bindings/js/JSDOMBinding.h#L253

I see what you mean.  That would be a larger cleanup because we use no overloading for this currently and I&apos;m unsure if we could get bitten by changing it.  I&apos;d like to leave that for a separate cleanup.
 
&gt; In this case there is no need for the intermediary RefPtr:
&gt; RefPtr&lt;HTMLCollection&gt; collection = htmlDocument-&gt;all();
&gt;  184     return V8DOMWrapper::convertToV8Object(V8ClassIndex::HTMLCOLLECTION,
&gt; collection.release());
&gt; unless you&apos;re trying to shorten then line...

Thanks. done.

&gt; Same here:
&gt;   RefPtr&lt;V8SVGStaticPODTypeWrapper&lt;TransformationMatrix&gt; &gt; wrapper =
&gt; V8SVGStaticPODTypeWrapper&lt;TransformationMatrix&gt;::create(result);
&gt;  62     return V8DOMWrapper::convertToV8Object(V8ClassIndex::SVGMATRIX,
&gt; wrapper.release());

Thanks, done.

I&apos;m running layout tests now to make sure that there are no issues with my latest patch.  I&apos;ll update the patch later today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134480</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 02:49:03 -0700</bug_when>
    <thetext>&gt; I see what you mean.  That would be a larger cleanup because we use no
&gt; overloading for this currently and I&apos;m unsure if we could get bitten by
&gt; changing it.  I&apos;d like to leave that for a separate cleanup.

In the intermediate term, we&apos;d like to move to making these all overloaded so they can be as similar to toJS() as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134521</commentid>
    <comment_count>13</comment_count>
      <attachid>33430</attachid>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-24 05:34:53 -0700</bug_when>
    <thetext>Created attachment 33430
Avoid memory leaks and cleanup use of get() and release() on RefPtrs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134598</commentid>
    <comment_count>14</comment_count>
      <attachid>33430</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 10:45:53 -0700</bug_when>
    <thetext>Comment on attachment 33430
Avoid memory leaks and cleanup use of get() and release() on RefPtrs.

Yay!  Looks great.  Thanks for incorporating our comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134630</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 12:36:19 -0700</bug_when>
    <thetext>Will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134631</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 12:38:29 -0700</bug_when>
    <thetext>Darn.  The canary died before I could give this a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134681</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 16:44:20 -0700</bug_when>
    <thetext>The canary is alive again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134682</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 16:46:33 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/bindings/scripts/CodeGeneratorV8.pm
	M	WebCore/bindings/v8/V8DOMWrapper.h
	M	WebCore/bindings/v8/V8SVGPODTypeWrapper.h
	M	WebCore/bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp
	M	WebCore/bindings/v8/custom/V8ClientRectListCustom.cpp
	M	WebCore/bindings/v8/custom/V8CustomXPathNSResolver.cpp
	M	WebCore/bindings/v8/custom/V8CustomXPathNSResolver.h
	M	WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
	M	WebCore/bindings/v8/custom/V8DocumentCustom.cpp
	M	WebCore/bindings/v8/custom/V8ElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp
	M	WebCore/bindings/v8/custom/V8InspectorControllerCustom.cpp
	M	WebCore/bindings/v8/custom/V8NamedNodeMapCustom.cpp
	M	WebCore/bindings/v8/custom/V8NodeIteratorCustom.cpp
	M	WebCore/bindings/v8/custom/V8NodeListCustom.cpp
	M	WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp
	M	WebCore/bindings/v8/custom/V8TreeWalkerCustom.cpp
	M	WebCore/bindings/v8/custom/V8XSLTProcessorCustom.cpp
Committed r46383
	M	WebCore/ChangeLog
	M	WebCore/bindings/scripts/CodeGeneratorV8.pm
	M	WebCore/bindings/v8/V8DOMWrapper.h
	M	WebCore/bindings/v8/V8SVGPODTypeWrapper.h
	M	WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
	M	WebCore/bindings/v8/custom/V8CustomXPathNSResolver.cpp
	M	WebCore/bindings/v8/custom/V8DocumentCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp
	M	WebCore/bindings/v8/custom/V8NamedNodeMapCustom.cpp
	M	WebCore/bindings/v8/custom/V8ClientRectListCustom.cpp
	M	WebCore/bindings/v8/custom/V8NodeIteratorCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp
	M	WebCore/bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp
	M	WebCore/bindings/v8/custom/V8InspectorControllerCustom.cpp
	M	WebCore/bindings/v8/custom/V8CustomXPathNSResolver.h
	M	WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp
	M	WebCore/bindings/v8/custom/V8ElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp
	M	WebCore/bindings/v8/custom/V8NodeListCustom.cpp
	M	WebCore/bindings/v8/custom/V8XSLTProcessorCustom.cpp
	M	WebCore/bindings/v8/custom/V8TreeWalkerCustom.cpp
r46383 = e5e82f7bb3bca051b65dc01162d59d266c214e7d (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46383</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33155</attachid>
            <date>2009-07-21 01:11:10 -0700</date>
            <delta_ts>2009-07-23 09:02:29 -0700</delta_ts>
            <desc>Add &apos;create&apos; methods to SVGPODTypeWrappers and XPathNSResolvers to avoid memory leaks.</desc>
            <filename>memleak.txt</filename>
            <type>text/plain</type>
            <size>19702</size>
            <attacher name="Mads Ager">ager</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjE1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMDctMjEgIE1hZHMgQWdlciAgPGFnZXJAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBh
bmQgWFBhdGggbWVtb3J5IGxlYWtzIGluIFY4IGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQ4OAorCisgICAgICAgIEFkZCBwcm9wZXIg
J2NyZWF0ZScgbWV0aG9kcyB0byBTVkdQb2RUeXBlV3JhcHBlcnMgYW5kCisgICAgICAgIFhQYXRo
TlNSZXNvbHZlcnMgaW4gdGhlIFY4IGJpbmRpbmdzIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4KKwor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4U1ZHUE9EVHlwZVdyYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDo6VjhTVkdQT0RUeXBlV3JhcHBl
ckNyZWF0b3JGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4U1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFNWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyOjpWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4U1ZH
U3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudDo6VjhT
VkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQ6OlY4U1ZHU3Rh
dGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4U1ZHRHlu
YW1pY1BPRFR5cGVXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdEeW5h
bWljUE9EVHlwZVdyYXBwZXI6OlY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyQ2FjaGU6Omxvb2t1cE9yQ3JlYXRl
V3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpj
cmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNv
bHZlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNBTExCQUNLX0ZVTkNfREVDTCk6CisKIDIwMDktMDctMjAgIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNp
b24gNDYxNTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CSh3b3JraW5nIGNvcHkpCkBAIC01ODMsMTkgKzU4MywyMiBAQCBFTkQKICAgICAgICAgbXkgJGlt
cGxDbGFzc0lzQW5pbWF0ZWRUeXBlID0gJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBl
KCRpbXBsQ2xhc3NOYW1lKTsKICAgICAgICAgaWYgKG5vdCAkaW1wbENsYXNzSXNBbmltYXRlZFR5
cGUgYW5kICRjb2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGVXaXRoV3JpdGVhYmxlUHJvcGVydGllcygk
YXR0clR5cGUpIGFuZCBub3QgZGVmaW5lZCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJbW11dGFibGUifSkgewogICAgICAgICAgICAgaWYgKElzUG9kVHlwZSgk
aW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAkd3JhcHBlciA9ICJuZXcgVjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENs
YXNzTmFtZT4oJGdldHRlclN0cmluZywgaW1wX3dyYXBwZXIpIjsKKyAgICAgICAgICAgICAgICAk
d3JhcHBlciA9ICJWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQ8JG5h
dGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPjo6Y3JlYXRlKCRnZXR0ZXJTdHJpbmcsIGltcF93cmFw
cGVyKSI7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBSZWZQ
dHI8VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFyZW50PCRuYXRpdmVUeXBl
LCAkaW1wbENsYXNzTmFtZT4gPiB3cmFwcGVyID0gJHdyYXBwZXI7XG4iKTsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgJHdyYXBwZXIgPSAibmV3IFY4U1ZHU3RhdGljUE9E
VHlwZVdyYXBwZXJXaXRoUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT4oaW1wLCAm
JHtpbXBsQ2xhc3NOYW1lfTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFtZX06OiRzZXR0ZXIpIjsK
KyAgICAgICAgICAgICAgICAkd3JhcHBlciA9ICJWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0
aFBhcmVudDwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWU+OjpjcmVhdGUoaW1wLCAmJHtpbXBs
Q2xhc3NOYW1lfTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFtZX06OiRzZXR0ZXIpIjsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFJlZlB0cjxWOFNWR1N0YXRp
Y1BPRFR5cGVXcmFwcGVyV2l0aFBhcmVudDwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWU+ID4g
d3JhcHBlciA9ICR3cmFwcGVyO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBpZiAoJGltcGxDbGFzc0lzQW5pbWF0ZWRUeXBlKSB7CiAgICAgICAgICAg
ICAgICAgJHdyYXBwZXIgPSAiVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXJDYWNoZTwkbmF0aXZl
VHlwZSwgJGltcGxDbGFzc05hbWU+Ojpsb29rdXBPckNyZWF0ZVdyYXBwZXIoaW1wLCAmJHtpbXBs
Q2xhc3NOYW1lfTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFtZX06OiRzZXR0ZXIpIjsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFJlZlB0cjxWOFNWR1BPRFR5
cGVXcmFwcGVyPCIgLiAkbmF0aXZlVHlwZSAuICI+ID4gd3JhcHBlciA9ICR3cmFwcGVyO1xuIik7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICR3cmFwcGVyID0gR2VuZXJh
dGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBlcigkcmV0dXJuVHlwZSwgJGdldHRlclN0cmluZyk7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBSZWZQdHI8VjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcjwiIC4gJG5hdGl2ZVR5cGUgLiAiPiA+IHdyYXBwZXIgPSAkd3Jh
cHBlcjtcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICB2b2lkKiB3cmFwcGVyID0gJHdyYXBwZXI7XG4iKTsKICAgICB9
IGVsc2lmICgkbmF0aXZlVHlwZSBuZSAiUkdCQ29sb3IiKSB7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICIpOwogCkBAIC02MTgsNyArNjIxLDcg
QEAgRU5ECiAgICAgaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRhdHRyVHlw
ZSkgJiYgISRza2lwQ29udGV4dCkgewogICAgICAgICBteSAkcmVzdWx0T2JqZWN0ID0gJHJlc3Vs
dDsKICAgICAgICAgaWYgKCRhdHRySXNQb2RUeXBlKSB7Ci0gICAgICAgICAgICAkcmVzdWx0T2Jq
ZWN0ID0gIndyYXBwZXIiOworICAgICAgICAgICAgJHJlc3VsdE9iamVjdCA9ICJ3cmFwcGVyLmdl
dCgpIjsKICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIEdlbmVy
YXRlU1ZHQ29udGV4dEFzc2lnbm1lbnQoJGltcGxDbGFzc05hbWUsICRyZXN1bHRPYmplY3QsICIg
ICAgIikpOwpAQCAtNjI2LDcgKzYyOSw3IEBAIEVORAogCiAgICAgaWYgKCRhdHRySXNQb2RUeXBl
KSB7CiAgICAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJGF0dHJUeXBlKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyKTtcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIuZ2V0KCkpO1xu
Iik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAi
IC4gUmV0dXJuTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJHJlc3VsdCwg
IiAgICAiKS4iO1xuIik7CiAgICAgfQpAQCAtMTUyMCwxMyArMTUyMywxMyBAQCBzdWIgR2VuZXJh
dGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogCiAgICAgIyBJZiB0aGUgcmV0dXJuIHR5cGUgaXMgYSBQ
T0QgdHlwZSwgc2VwYXJhdGUgb3V0IHRoZSB3cmFwcGVyIGdlbmVyYXRpb24KICAgICBpZiAoJHJl
dHVybnNMaXN0SXRlbVBvZFR5cGUpIHsKLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIlY4
U1ZHUE9EVHlwZVdyYXBwZXI8IiAuICRuYXRpdmVSZXR1cm5UeXBlIC4gIj4qIHdyYXBwZXIgPSBu
ZXcgIjsKLSAgICAgICAgJHJlc3VsdCAuPSAiVjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JM
aXN0PCIgLiAkbmF0aXZlUmV0dXJuVHlwZSAuICI+KCRyZXR1cm4sIGltcC0+YXNzb2NpYXRlZEF0
dHJpYnV0ZU5hbWUoKSk7XG4iOwotICAgICAgICAkcmV0dXJuID0gIndyYXBwZXIiOworICAgICAg
ICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8IiAuICRu
YXRpdmVSZXR1cm5UeXBlIC4gIj4gPiB3cmFwcGVyID0gIjsKKyAgICAgICAgJHJlc3VsdCAuPSAi
VjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PCIgLiAkbmF0aXZlUmV0dXJuVHlwZSAu
ICI+OjpjcmVhdGUoJHJldHVybiwgaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTtcbiI7
CisgICAgICAgICRyZXR1cm4gPSAid3JhcHBlci5nZXQoKSI7CiAgICAgfSBlbHNpZiAoJHJldHVy
bnNQb2RUeXBlKSB7Ci0gICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJWOFNWR1BPRFR5cGVX
cmFwcGVyPCIgLiAkbmF0aXZlUmV0dXJuVHlwZSAuICI+KiB3cmFwcGVyID0gIjsKKyAgICAgICAg
JHJlc3VsdCAuPSAkaW5kZW50IC4gIlJlZlB0cjxWOFNWR1BPRFR5cGVXcmFwcGVyPCIgLiAkbmF0
aXZlUmV0dXJuVHlwZSAuICI+ID4gd3JhcHBlciA9ICI7CiAgICAgICAgICRyZXN1bHQgLj0gR2Vu
ZXJhdGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBlcigkcmV0dXJuVHlwZSwgJHJldHVybikgLiAiO1xu
IjsKLSAgICAgICAgJHJldHVybiA9ICJ3cmFwcGVyIjsKKyAgICAgICAgJHJldHVybiA9ICJ3cmFw
cGVyLmdldCgpIjsKICAgICB9CiAKICAgICBteSAkZ2VuZXJhdGVkU1ZHQ29udGV4dFJldHJpZXZh
bCA9IDA7CkBAIC0xNTU4LDcgKzE1NjEsNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJp
bmcoKQogCiAgICAgaWYgKCRyZXR1cm5zUG9kVHlwZSkgewogICAgICAgICBteSAkY2xhc3NJbmRl
eCA9IHVjKCRyZXR1cm5UeXBlKTsKLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5k
ZXgsIHdyYXBwZXIpO1xuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgs
IHdyYXBwZXIuZ2V0KCkpO1xuIjsKICAgICB9IGVsc2UgewogICAgICAgICAkcmVzdWx0IC49ICRp
bmRlbnQgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1
cm4sICRpbmRlbnQpIC4gIjtcbiI7CiAgICAgfQpAQCAtMjA0MCw4ICsyMDQzLDggQEAgc3ViIFJl
dHVybk5hdGl2ZVRvSlNWYWx1ZQogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiUkdCQ29sb3Ii
KSB7Ci0gICAgICAgIG15ICRjb25zdHJ1Y3QgPSAiUmVmUHRyPFJHQkNvbG9yPiByZ2Jjb2xvciA9
IFJHQkNvbG9yOjpjcmVhdGUoJHZhbHVlKTtcbiI7DQotICAgICAgICBteSAkY29udmVydCA9ICJW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6UkdCQ09MT1IsIFdU
Rjo6Z2V0UHRyKHJnYmNvbG9yKSkiOw0KKyAgICAgICAgbXkgJGNvbnN0cnVjdCA9ICJSZWZQdHI8
UkdCQ29sb3I+IHJnYmNvbG9yID0gUkdCQ29sb3I6OmNyZWF0ZSgkdmFsdWUpO1xuIjsKKyAgICAg
ICAgbXkgJGNvbnZlcnQgPSAiVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlJHQkNPTE9SLCBXVEY6OmdldFB0cihyZ2Jjb2xvcikpIjsKICAgICAgICAgcmV0dXJu
ICRjb25zdHJ1Y3QgLiAkaW5kZW50IC4gInJldHVybiAiIC4gJGNvbnZlcnQ7CiAgICAgfQogCkBA
IC0yMDU4LDcgKzIwNjEsNyBAQCBzdWIgUmV0dXJuTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIG15
ICRjbGFzc0luZGV4ID0gdWMoJHR5cGUpOwogCiAgICAgICAgIGlmIChJc1BvZFR5cGUoJHR5cGUp
KSB7Ci0gICAgICAgICAgICAkdmFsdWUgPSBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVy
KCR0eXBlLCAkdmFsdWUpOworICAgICAgICAgICAgJHZhbHVlID0gR2VuZXJhdGVTVkdTdGF0aWNQ
b2RUeXBlV3JhcHBlcigkdHlwZSwgJHZhbHVlKSAuICIuZ2V0KCkiOwogICAgICAgICB9CiAKICAg
ICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OiRjbGFzc0luZGV4LCAkdmFsdWUpIjsKQEAgLTIwNzMsNyArMjA3Niw3IEBAIHN1
YiBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyIHsKICAgICAkaW1wbEluY2x1ZGVzeyJW
OFNWR1BPRFR5cGVXcmFwcGVyLmgifSA9IDE7CiAKICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5h
dGl2ZVR5cGUoJHR5cGUpOwotICAgIHJldHVybiAibmV3IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBw
ZXI8JG5hdGl2ZVR5cGU+KCR2YWx1ZSkiOworICAgIHJldHVybiAiVjhTVkdTdGF0aWNQT0RUeXBl
V3JhcHBlcjwkbmF0aXZlVHlwZT46OmNyZWF0ZSgkdmFsdWUpIjsKIH0KIAogIyBJbnRlcm5hbCBo
ZWxwZXIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oCShy
ZXZpc2lvbiA0NjE1NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxOCArNTMsMTQgQEAgcHVibGljOgogdGVtcGxhdGU8
dHlwZW5hbWUgUE9EVHlwZT4KIGNsYXNzIFY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlz
dCA6IHB1YmxpYyBWOFNWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+IHsKIHB1YmxpYzoKKyAgICB0
eXBlZGVmIFNWR1BPRExpc3RJdGVtPFBPRFR5cGU+IFBPRExpc3RJdGVtUHRyVHlwZTsKKwogICAg
IHR5cGVkZWYgUE9EVHlwZSAoU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT46OipHZXR0ZXJNZXRob2Qp
KCkgY29uc3Q7CiAgICAgdHlwZWRlZiB2b2lkIChTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6KlNl
dHRlck1ldGhvZCkoUE9EVHlwZSk7CiAKLSAgICBWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZv
ckxpc3QoU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT4qIGNyZWF0b3IsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgIDogbV9jcmVhdG9yKGNyZWF0b3IpCi0gICAgICAg
ICwgbV9nZXR0ZXIoJlNWR1BPRExpc3RJdGVtPFBPRFR5cGU+Ojp2YWx1ZSkKLSAgICAgICAgLCBt
X3NldHRlcigmU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT46OnNldFZhbHVlKQotICAgICAgICAsIG1f
YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRy
PFBPRExpc3RJdGVtUHRyVHlwZT4gY3JlYXRvciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NyZWF0b3IpOwotICAgICAgICBBU1NF
UlQobV9nZXR0ZXIpOwotICAgICAgICBBU1NFUlQobV9zZXR0ZXIpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdChjcmVhdG9yLCBh
dHRyaWJ1dGVOYW1lKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VjhTVkdQT0RUeXBlV3JhcHBl
ckNyZWF0b3JGb3JMaXN0KCkgeyB9CkBAIC04NSw2ICs4MSwxNyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgorICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdChQYXNzUmVm
UHRyPFBPRExpc3RJdGVtUHRyVHlwZT4gY3JlYXRvciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlTmFtZSkKKyAgICAgICAgOiBtX2NyZWF0b3IoY3JlYXRvcikKKyAgICAgICAgLCBtX2dl
dHRlcigmU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT46OnZhbHVlKQorICAgICAgICAsIG1fc2V0dGVy
KCZTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6c2V0VmFsdWUpCisgICAgICAgICwgbV9hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Y3JlYXRvcik7CisgICAgICAgIEFTU0VSVChtX2dldHRlcik7CisgICAgICAgIEFTU0VSVChtX3Nl
dHRlcik7CisgICAgfQorCiAgICAgLy8gVXBkYXRlIGNhbGxiYWNrcwogICAgIFJlZlB0cjxTVkdQ
T0RMaXN0SXRlbTxQT0RUeXBlPiA+IG1fY3JlYXRvcjsKICAgICBHZXR0ZXJNZXRob2QgbV9nZXR0
ZXI7CkBAIC05NSw5ICsxMDIsOSBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlw
ZT4KIGNsYXNzIFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXIgOiBwdWJsaWMgVjhTVkdQT0RUeXBl
V3JhcHBlcjxQT0RUeXBlPiB7CiBwdWJsaWM6Ci0gICAgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cihQT0RUeXBlIHR5cGUpCi0gICAgICAgIDogbV9wb2RUeXBlKHR5cGUpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcj4gY3JlYXRlKFBPRFR5cGUgdHlwZSkK
ICAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3Jh
cHBlcih0eXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VjhTVkdTdGF0aWNQT0RUeXBlV3Jh
cHBlcigpIHsgfQpAQCAtMTExLDcgKzExOCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcG9kVHlw
ZSA9IHR5cGU7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFY4U1ZHU3RhdGlj
UE9EVHlwZVdyYXBwZXIoUE9EVHlwZSB0eXBlKQorICAgICAgICA6IG1fcG9kVHlwZSh0eXBlKQor
ICAgIHsKKyAgICB9CisKICAgICBQT0RUeXBlIG1fcG9kVHlwZTsKIH07CiAKQEAgLTEyMCwxMCAr
MTMyLDkgQEAgY2xhc3MgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeQogcHVibGlj
OgogICAgIHR5cGVkZWYgVjhTVkdQT0RUeXBlV3JhcHBlcjxQYXJlbnRUeXBlQXJnPiBQYXJlbnRU
eXBlOwogCi0gICAgIFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudChQ
T0RUeXBlIHR5cGUsIFBhcmVudFR5cGUqIHBhcmVudCkKLSAgICAgICAgOiBWOFNWR1N0YXRpY1BP
RFR5cGVXcmFwcGVyPFBPRFR5cGU+KHR5cGUpCi0gICAgICAgICwgbV9wYXJlbnRUeXBlKHBhcmVu
dCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBP
RFR5cGVQYXJlbnQ+IGNyZWF0ZShQT0RUeXBlIHR5cGUsIFBhc3NSZWZQdHI8UGFyZW50VHlwZT4g
cGFyZW50KQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOFNWR1N0YXRpY1BP
RFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQodHlwZSwgcGFyZW50KSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIFNWR0VsZW1lbnQqIGNv
bnRleHQpCkBAIC0xMzMsNiArMTQ0LDEyIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Cisg
ICAgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFyZW50KFBPRFR5cGUgdHlw
ZSwgUGFzc1JlZlB0cjxQYXJlbnRUeXBlPiBwYXJlbnQpCisgICAgICAgIDogVjhTVkdTdGF0aWNQ
T0RUeXBlV3JhcHBlcjxQT0RUeXBlPih0eXBlKQorICAgICAgICAsIG1fcGFyZW50VHlwZShwYXJl
bnQpCisgICAgeworICAgIH0KKwogICAgIFJlZlB0cjxQYXJlbnRUeXBlPiBtX3BhcmVudFR5cGU7
CiB9OwogCkBAIC0xNDIsMTQgKzE1OSw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFBPRFR5cGUg
KFBhcmVudFR5cGU6OipHZXR0ZXJNZXRob2QpKCkgY29uc3Q7CiAgICAgdHlwZWRlZiB2b2lkIChQ
YXJlbnRUeXBlOjoqU2V0dGVyTWV0aG9kKShjb25zdCBQT0RUeXBlJik7CiAKLSAgICBWOFNWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBhcmVudChQYXJlbnRUeXBlKiBwYXJlbnQsIEdldHRlck1l
dGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIpCi0gICAgICAgIDogbV9wYXJlbnQocGFy
ZW50KQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQ
YXJlbnQ+IGNyZWF0ZShQYXNzUmVmUHRyPFBhcmVudFR5cGU+IHBhcmVudCwgR2V0dGVyTWV0aG9k
IGdldHRlciwgU2V0dGVyTWV0aG9kIHNldHRlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3Bh
cmVudCk7Ci0gICAgICAgIEFTU0VSVChtX2dldHRlcik7Ci0gICAgICAgIEFTU0VSVChtX3NldHRl
cik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cldpdGhQYXJlbnQocGFyZW50LCBnZXR0ZXIsIHNldHRlcikpOwogICAgIH0KIAogICAgIHZpcnR1
YWwgb3BlcmF0b3IgUE9EVHlwZSgpCkBAIC0xNjMsNiArMTc1LDE2IEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6CisgICAgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQoUGFz
c1JlZlB0cjxQYXJlbnRUeXBlPiBwYXJlbnQsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNldHRlck1l
dGhvZCBzZXR0ZXIpCisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICAgICAsIG1fZ2V0
dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgICAgICBB
U1NFUlQobV9wYXJlbnQpOworICAgICAgICBBU1NFUlQobV9nZXR0ZXIpOworICAgICAgICBBU1NF
UlQobV9zZXR0ZXIpOworICAgIH0KKwogICAgIFJlZlB0cjxQYXJlbnRUeXBlPiBtX3BhcmVudDsK
ICAgICBHZXR0ZXJNZXRob2QgbV9nZXR0ZXI7CiAgICAgU2V0dGVyTWV0aG9kIG1fc2V0dGVyOwpA
QCAtMTc1LDE2ICsxOTcsOSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiB2b2lkIChQT0RUeXBlQ3Jl
YXRvcjo6KlNldHRlck1ldGhvZCkoUE9EVHlwZSk7CiAgICAgdHlwZWRlZiB2b2lkICgqQ2FjaGVS
ZW1vdmFsQ2FsbGJhY2spKFY4U1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4qKTsKIAotICAgIFY4
U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyKFBPRFR5cGVDcmVhdG9yKiBjcmVhdG9yLCBHZXR0ZXJN
ZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVyLCBDYWNoZVJlbW92YWxDYWxsYmFjayBj
YWNoZVJlbW92YWxDYWxsYmFjaykKLSAgICAgICAgOiBtX2NyZWF0b3IoY3JlYXRvcikKLSAgICAg
ICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgICAg
ICAsIG1fY2FjaGVSZW1vdmFsQ2FsbGJhY2soY2FjaGVSZW1vdmFsQ2FsbGJhY2spCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXI+IGNyZWF0ZShQYXNzUmVm
UHRyPFBPRFR5cGVDcmVhdG9yPiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBTZXR0ZXJN
ZXRob2Qgc2V0dGVyLCBDYWNoZVJlbW92YWxDYWxsYmFjayBjYWNoZVJlbW92YWxDYWxsYmFjaykK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChjcmVhdG9yKTsKLSAgICAgICAgQVNTRVJUKGdldHRlcik7
Ci0gICAgICAgIEFTU0VSVChzZXR0ZXIpOwotICAgICAgICBBU1NFUlQoY2FjaGVSZW1vdmFsQ2Fs
bGJhY2spOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4U1ZHRHluYW1pY1BPRFR5cGVX
cmFwcGVyKGNyZWF0b3IsIGdldHRlciwgc2V0dGVyLCBjYWNoZVJlbW92YWxDYWxsYmFjaykpOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgflY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyKCkgewpAQCAt
MjA2LDYgKzIyMSwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIFY4U1ZHRHlu
YW1pY1BPRFR5cGVXcmFwcGVyKFBhc3NSZWZQdHI8UE9EVHlwZUNyZWF0b3I+IGNyZWF0b3IsIEdl
dHRlck1ldGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIsIENhY2hlUmVtb3ZhbENhbGxi
YWNrIGNhY2hlUmVtb3ZhbENhbGxiYWNrKQorICAgICAgICA6IG1fY3JlYXRvcihjcmVhdG9yKQor
ICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgICAgICwgbV9jYWNoZVJlbW92YWxDYWxsYmFjayhjYWNoZVJlbW92YWxDYWxsYmFjaykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChjcmVhdG9yKTsKKyAgICAgICAgQVNTRVJUKGdldHRlcik7Cisg
ICAgICAgIEFTU0VSVChzZXR0ZXIpOworICAgICAgICBBU1NFUlQoY2FjaGVSZW1vdmFsQ2FsbGJh
Y2spOworICAgIH0KKwogICAgIC8vIFVwZGF0ZSBjYWxsYmFja3MKICAgICBSZWZQdHI8UE9EVHlw
ZUNyZWF0b3I+IG1fY3JlYXRvcjsKICAgICBHZXR0ZXJNZXRob2QgbV9nZXR0ZXI7CkBAIC0zMjMs
NyArMzUwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFVzZWQgZm9yIHJlYWR3cml0ZSBh
dHRyaWJ1dGVzIG9ubHkKLSAgICBzdGF0aWMgV3JhcHBlckJhc2UqIGxvb2t1cE9yQ3JlYXRlV3Jh
cHBlcihQT0RUeXBlQ3JlYXRvciogY3JlYXRvciwgR2V0dGVyTWV0aG9kIGdldHRlciwgU2V0dGVy
TWV0aG9kIHNldHRlcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXcmFwcGVyQmFzZT4gbG9va3Vw
T3JDcmVhdGVXcmFwcGVyKFBPRFR5cGVDcmVhdG9yKiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0
dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVyKQogICAgIHsKICAgICAgICAgRHluYW1pY1dyYXBwZXJI
YXNoTWFwJiBtYXAoZHluYW1pY1dyYXBwZXJIYXNoTWFwKCkpOwogICAgICAgICBDYWNoZUluZm8g
aW5mbyhjcmVhdG9yLCBnZXR0ZXIsIHNldHRlcik7CkBAIC0zMzEsOSArMzU4LDkgQEAgcHVibGlj
OgogICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGluZm8pKQogICAgICAgICAgICAgcmV0dXJuIG1h
cC5nZXQoaW5mbyk7CiAKLSAgICAgICAgRHluYW1pY1dyYXBwZXIqIHdyYXBwZXIgPSBuZXcgVjhT
VkdEeW5hbWljUE9EVHlwZVdyYXBwZXI8UE9EVHlwZSwgUE9EVHlwZUNyZWF0b3I+KGNyZWF0b3Is
IGdldHRlciwgc2V0dGVyLCBmb3JnZXRXcmFwcGVyKTsKLSAgICAgICAgbWFwLnNldChpbmZvLCB3
cmFwcGVyKTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIFJlZlB0cjxEeW5hbWlj
V3JhcHBlcj4gd3JhcHBlciA9IFY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyPFBPRFR5cGUsIFBP
RFR5cGVDcmVhdG9yPjo6Y3JlYXRlKGNyZWF0b3IsIGdldHRlciwgc2V0dGVyLCBmb3JnZXRXcmFw
cGVyKTsKKyAgICAgICAgbWFwLnNldChpbmZvLCB3cmFwcGVyLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIHdyYXBwZXIucmVsZWFzZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGZvcmdldFdy
YXBwZXIoVjhTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPiogd3JhcHBlcikKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHAJKHJldmlzaW9uIDQ2MTU2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8VjhDdXN0b21YUGF0aE5TUmVz
b2x2ZXI+IFY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiByZXNvbHZlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4Q3VzdG9tWFBhdGhO
U1Jlc29sdmVyKHJlc29sdmVyKSk7Cit9CisKIFY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpWOEN1
c3RvbVhQYXRoTlNSZXNvbHZlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc29sdmVyKQogICAg
IDogbV9yZXNvbHZlcihyZXNvbHZlcikKIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaAkocmV2aXNpb24gNDYxNTYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogCiAjaWYgRU5BQkxFKFhQQVRIKQog
Ci0jaW5jbHVkZSA8djguaD4KICNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRl
IDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDEzICs0NSwxNCBAQCBjbGFzcyBTdHJp
bmc7CiAKIGNsYXNzIFY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyIDogcHVibGljIFhQYXRoTlNSZXNv
bHZlciB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhDdXN0b21YUGF0aE5TUmVz
b2x2ZXI+IGNyZWF0ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc29sdmVyKTsKIAotICAgIFY4
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzb2x2ZXIpOwog
ICAgIHZpcnR1YWwgflY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyKCk7Ci0KICAgICB2aXJ0dWFsIFN0
cmluZyBsb29rdXBOYW1lc3BhY2VVUkkoY29uc3QgU3RyaW5nJiBwcmVmaXgpOwogCiBwcml2YXRl
OgorICAgIFY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVz
b2x2ZXIpOworCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBtX3Jlc29sdmVyOyAgLy8gSGFu
ZGxlIHRvIHJlc29sdmVyIG9iamVjdC4KIH07CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NjE1NikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MiwyOCArNTIsMjggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50RXZhbHVh
dGUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uRG9jdW1lbnQuZXZhbHVhdGUoKSIpOwogCi0gICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTxEb2N1bWVudD4oYXJncy5Ib2xkZXIoKSk7CisgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVu
dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RG9jdW1lbnQ+KGFyZ3Mu
SG9sZGVyKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFN0cmluZyBleHByZXNz
aW9uID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgIE5vZGUqIGNvbnRleHROb2RlID0g
MDsKKyAgICBSZWZQdHI8Tm9kZT4gY29udGV4dE5vZGU7CiAgICAgaWYgKFY4Tm9kZTo6SGFzSW5z
dGFuY2UoYXJnc1sxXSkpCiAgICAgICAgIGNvbnRleHROb2RlID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFy
Z3NbMV0pKTsKIAotICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIgPSAwOworICAgIFJlZlB0
cjxYUGF0aE5TUmVzb2x2ZXI+IHJlc29sdmVyOwogICAgIGlmIChWOFhQYXRoTlNSZXNvbHZlcjo6
SGFzSW5zdGFuY2UoYXJnc1syXSkpCiAgICAgICAgIHJlc29sdmVyID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhOU1Jlc29sdmVyPihWOENsYXNzSW5kZXg6OlhQQVRI
TlNSRVNPTFZFUiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzJdKSk7CiAgICAg
ZWxzZSBpZiAoYXJnc1syXS0+SXNPYmplY3QoKSkKLSAgICAgICAgcmVzb2x2ZXIgPSBuZXcgVjhD
dXN0b21YUGF0aE5TUmVzb2x2ZXIoYXJnc1syXS0+VG9PYmplY3QoKSk7CisgICAgICAgIHJlc29s
dmVyID0gVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShhcmdzWzJdLT5Ub09iamVjdCgp
KTsKICAgICBlbHNlIGlmICghYXJnc1syXS0+SXNOdWxsKCkgJiYgIWFyZ3NbMl0tPklzVW5kZWZp
bmVkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAog
ICAgIGludCB0eXBlID0gdG9JbnQzMihhcmdzWzNdKTsKLSAgICBYUGF0aFJlc3VsdCogaW5SZXN1
bHQgPSAwOworICAgIFJlZlB0cjxYUGF0aFJlc3VsdD4gaW5SZXN1bHQ7CiAgICAgaWYgKFY4WFBh
dGhSZXN1bHQ6Okhhc0luc3RhbmNlKGFyZ3NbNF0pKQogICAgICAgICBpblJlc3VsdCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoUmVzdWx0PihWOENsYXNzSW5kZXg6
OlhQQVRIUkVTVUxULCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbNF0pKTsKIAog
ICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwotICAgIFJlZlB0cjxYUGF0aFJlc3Vs
dD4gcmVzdWx0ID0gZG9jdW1lbnQtPmV2YWx1YXRlKGV4cHJlc3Npb24sIGNvbnRleHROb2RlLCBy
ZXNvbHZlciwgdHlwZSwgaW5SZXN1bHQsIGVjKTsKKyAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IHJl
c3VsdCA9IGRvY3VtZW50LT5ldmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZS5nZXQoKSwg
cmVzb2x2ZXIuZ2V0KCksIHR5cGUsIGluUmVzdWx0LmdldCgpLCBlYyk7CiAgICAgaWYgKGV4Y2Vw
dGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4Y2Vw
dGlvbkNhdGNoZXIuRXhjZXB0aW9uKCkpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3BwCShyZXZpc2lvbiA0NjE1NikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgsNyArNTgsOCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woU1ZHTWF0cml4SW52ZXJz
ZSkKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogICAgIH0KIAotICAg
IHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1ZH
TUFUUklYLCBuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJp
eD4ocmVzdWx0KSk7CisgICAgUmVmUHRyPFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+ID4gd3JhcHBlciA9IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJh
bnNmb3JtYXRpb25NYXRyaXg+OjpjcmVhdGUocmVzdWx0KTsKKyAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNWR01BVFJJWCwgd3JhcHBlci5n
ZXQoKSk7CiB9CiAKIENBTExCQUNLX0ZVTkNfREVDTChTVkdNYXRyaXhSb3RhdGVGcm9tVmVjdG9y
KQpAQCAtNzgsNyArNzksOCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woU1ZHTWF0cml4Um90YXRlRnJv
bVZlCiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNW
R01BVFJJWCwgbmV3IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRy
aXg+KHJlc3VsdCkpOworICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5z
Zm9ybWF0aW9uTWF0cml4PiA+IHdyYXBwZXIgPSBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRy
YW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKHJlc3VsdCk7CisgICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIHdyYXBwZXIu
Z2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="17477"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33327</attachid>
            <date>2009-07-23 06:20:31 -0700</date>
            <delta_ts>2009-07-24 05:34:53 -0700</delta_ts>
            <desc>Avoid memory leaks and cleanup use of get() and release() on RefPtrs.</desc>
            <filename>memleak.txt</filename>
            <type>text/plain</type>
            <size>37985</size>
            <attacher name="Mads Ager">ager</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjI2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMDktMDctMjMgIE1hZHMgQWdlciAgPGFnZXJAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBh
bmQgWFBhdGggbWVtb3J5IGxlYWtzIGluIFY4IGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQ4OAorCisgICAgICAgIEFkZCBwcm9wZXIg
J2NyZWF0ZScgbWV0aG9kcyB0byBTVkdQb2RUeXBlV3JhcHBlcnMgYW5kCisgICAgICAgIFhQYXRo
TlNSZXNvbHZlcnMgaW4gdGhlIFY4IGJpbmRpbmdzIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4KKwor
ICAgICAgICBJbnRyb2R1Y2UgY29udmVydFRvVjhPYmplY3QgbWV0aG9kcyB0aGF0IGFjY2VwdCBQ
YXNzUmVmUHRycyBhbmQKKyAgICAgICAgY2xlYW4gdXAgdGhlIHVzZSBvZiBnZXQoKSBhbmQgcmVs
ZWFzZSgpIG9uIFJlZlB0cnMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VG9WOE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRv
VjhPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4U1ZHUE9EVHlwZVdyYXBwZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlz
dDo6VjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyOjpWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJX
aXRoUE9EVHlwZVBhcmVudDo6VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFy
ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cldpdGhQYXJlbnQ6OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXI6OlY4U1ZHRHluYW1pY1BPRFR5
cGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVy
Q2FjaGU6Omxvb2t1cE9yQ3JlYXRlV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpZW50UmVjdExpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9Q
RVJUWV9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRo
TlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVhQYXRoTlNSZXNvbHZl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0aE5T
UmVzb2x2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19E
RUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXROYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNv
cmU6OmdldEl0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgor
ICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVS
VFlfR0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0Nv
bGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9H
RVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50
Q29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9H
RVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xs
ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29y
ZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhOb2RlSXRlcmF0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FM
TEJBQ0tfRlVOQ19ERUNMKToKKwogMjAwOS0wNy0yMyAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA0NjI2NCkKKysr
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTU2MCwxMCArNTYwLDYgQEAgRU5ECiAgICAgICAgIH0KICAgICAgICAgJGdldHRlclN0
cmluZyAuPSAiZWMiIGlmICR1c2VFeGNlcHRpb25zOwogICAgICAgICAkZ2V0dGVyU3RyaW5nIC49
ICIpIjsKLSAgICAgICAgaWYgKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkpIHsKLSAgICAgICAg
ICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9HZXRQdHIuaCJ9ID0gMTsKLSAgICAgICAgICAgICRnZXR0
ZXJTdHJpbmcgPSAiV1RGOjpnZXRQdHIoIiAuICRnZXR0ZXJTdHJpbmcgLiAiKSI7Ci0gICAgICAg
IH0KICAgICAgICAgaWYgKCRuYXRpdmVUeXBlIGVxICJpbnQiIGFuZCAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0RnJvbVN0cmluZyJ9KSB7CiAgICAg
ICAgICAgICAkZ2V0dGVyU3RyaW5nIC49ICIudG9JbnQoKSI7CiAgICAgICAgIH0KQEAgLTU4OSwx
OSArNTg1LDIyIEBAIEVORAogICAgICAgICBteSAkaW1wbENsYXNzSXNBbmltYXRlZFR5cGUgPSAk
Y29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGltcGxDbGFzc05hbWUpOwogICAgICAg
ICBpZiAobm90ICRpbXBsQ2xhc3NJc0FuaW1hdGVkVHlwZSBhbmQgJGNvZGVHZW5lcmF0b3ItPklz
UG9kVHlwZVdpdGhXcml0ZWFibGVQcm9wZXJ0aWVzKCRhdHRyVHlwZSkgYW5kIG5vdCBkZWZpbmVk
ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltbXV0YWJsZSJ9
KSB7CiAgICAgICAgICAgICBpZiAoSXNQb2RUeXBlKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAg
ICAgICAgICAgICR3cmFwcGVyID0gIm5ldyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBP
RFR5cGVQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPigkZ2V0dGVyU3RyaW5nLCBp
bXBfd3JhcHBlcikiOworICAgICAgICAgICAgICAgICR3cmFwcGVyID0gIlY4U1ZHU3RhdGljUE9E
VHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudDwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWU+
OjpjcmVhdGUoJGdldHRlclN0cmluZywgaW1wX3dyYXBwZXIpIjsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyV2l0aFBPRFR5cGVQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPiA+IHdyYXBw
ZXIgPSAkd3JhcHBlcjtcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAkd3JhcHBlciA9ICJuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQ8JG5h
dGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPihpbXAsICYke2ltcGxDbGFzc05hbWV9OjokZ2V0dGVy
LCAmJHtpbXBsQ2xhc3NOYW1lfTo6JHNldHRlcikiOworICAgICAgICAgICAgICAgICR3cmFwcGVy
ID0gIlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1w
bENsYXNzTmFtZT46OmNyZWF0ZShpbXAsICYke2ltcGxDbGFzc05hbWV9OjokZ2V0dGVyLCAmJHtp
bXBsQ2xhc3NOYW1lfTo6JHNldHRlcikiOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgUmVmUHRyPFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50
PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT4gPiB3cmFwcGVyID0gJHdyYXBwZXI7XG4iKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICgkaW1wbENs
YXNzSXNBbmltYXRlZFR5cGUpIHsKICAgICAgICAgICAgICAgICAkd3JhcHBlciA9ICJWOFNWR0R5
bmFtaWNQT0RUeXBlV3JhcHBlckNhY2hlPCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT46Omxv
b2t1cE9yQ3JlYXRlV3JhcHBlcihpbXAsICYke2ltcGxDbGFzc05hbWV9OjokZ2V0dGVyLCAmJHtp
bXBsQ2xhc3NOYW1lfTo6JHNldHRlcikiOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8IiAuICRuYXRpdmVUeXBl
IC4gIj4gPiB3cmFwcGVyID0gJHdyYXBwZXI7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgJHdyYXBwZXIgPSBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVy
KCRyZXR1cm5UeXBlLCAkZ2V0dGVyU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPCIgLiAk
bmF0aXZlVHlwZSAuICI+ID4gd3JhcHBlciA9ICR3cmFwcGVyO1xuIik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHZvaWQq
IHdyYXBwZXIgPSAkd3JhcHBlcjtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICIpOwogCkBAIC02MTIsMTUgKzYx
MSwxNiBAQCBFTkQKICAgICAgICAgfQogCiAgICAgICAgICRyZXN1bHQgPSAidiI7Ci0gICAgICAg
IGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpKSB7Ci0gICAgICAgICAgICAkcmVzdWx0ID0g
IldURjo6Z2V0UHRyKCIgLiAkcmVzdWx0IC4gIikiOwotICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRhdHRyVHlwZSkgJiYgISRza2lw
Q29udGV4dCkgewogICAgICAgICBteSAkcmVzdWx0T2JqZWN0ID0gJHJlc3VsdDsKICAgICAgICAg
aWYgKCRhdHRySXNQb2RUeXBlKSB7Ci0gICAgICAgICAgICAkcmVzdWx0T2JqZWN0ID0gIndyYXBw
ZXIiOworICAgICAgICAgICAgJHJlc3VsdE9iamVjdCA9ICJ3cmFwcGVyLmdldCgpIjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChJc1JlZlB0clR5cGUoJGF0dHJUeXBlKSkgeworICAgICAgICAg
ICAgJHJlc3VsdE9iamVjdCA9ICRyZXN1bHRPYmplY3QgLiAiLmdldCgpIjsKICAgICAgICAgfQog
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIEdlbmVyYXRlU1ZHQ29udGV4dEFzc2ln
bm1lbnQoJGltcGxDbGFzc05hbWUsICRyZXN1bHRPYmplY3QsICIgICAgIikpOwpAQCAtNjI4LDgg
KzYyOCw5IEBAIEVORAogCiAgICAgaWYgKCRhdHRySXNQb2RUeXBlKSB7CiAgICAgICAgIG15ICRj
bGFzc0luZGV4ID0gdWMoJGF0dHJUeXBlKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIucmVsZWFzZSgpKTtcbiIpOwogICAgIH0gZWxz
ZSB7CisgICAgICAgICRyZXN1bHQgPSAkcmVzdWx0IC4gIi5yZWxlYXNlKCkiIGlmIChJc1JlZlB0
clR5cGUoJGF0dHJUeXBlKSk7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
IiAuIFJldHVybk5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQs
ICIgICAgIikuIjtcbiIpOwogICAgIH0KIApAQCAtMTQ4MCwxMyArMTQ4MSw2IEBAIHN1YiBHZW5l
cmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiAgICAgfQogICAgICRmdW5jdGlvblN0cmluZyAuPSAi
KSI7CiAKLSAgICBpZiAoKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkgfHwgJHJldHVybnNMaXN0
SXRlbVBvZFR5cGUpICYmICEkbm9kZVRvUmV0dXJuKSB7Ci0gICAgICAgICMgV2UgZG9uJ3QgdXNl
IGdldFB0ciB3aGVuICRub2RlVG9SZXR1cm4gYmVjYXVzZSB0aGF0IHNpdHVhdGlvbiBpcwotICAg
ICAgICAjIHNwZWNpYWwtY2FzZWQgYmVsb3cgdG8gcmV0dXJuIGEgYm9vbC4KLSAgICAgICAgJGlt
cGxJbmNsdWRlc3sid3RmL0dldFB0ci5oIn0gPSAxOwotICAgICAgICAkZnVuY3Rpb25TdHJpbmcg
PSAiV1RGOjpnZXRQdHIoIiAuICRmdW5jdGlvblN0cmluZyAuICIpIjsKLSAgICB9Ci0KICAgICBp
ZiAoJG5vZGVUb1JldHVybikgewogICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgaW5zZXJ0QmVm
b3JlLCByZXBsYWNlQ2hpbGQsIHJlbW92ZUNoaWxkIGFuZAogICAgICAgICAjIGFwcGVuZENoaWxk
IGZ1bmN0aW9ucyBmcm9tIE5vZGUuCkBAIC0xNTE2LDE4ICsxNTEwLDE0IEBAIHN1YiBHZW5lcmF0
ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiAgICAgfQogCiAgICAgbXkgJHJldHVybiA9ICJyZXN1bHQi
OwotICAgIGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpIHx8ICRyZXR1cm5zTGlzdEl0ZW1Q
b2RUeXBlKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9HZXRQdHIuaCJ9ID0gMTsKLSAg
ICAgICAgJHJldHVybiA9ICJXVEY6OmdldFB0cigiIC4gJHJldHVybiAuICIpIjsKLSAgICB9CiAK
ICAgICAjIElmIHRoZSByZXR1cm4gdHlwZSBpcyBhIFBPRCB0eXBlLCBzZXBhcmF0ZSBvdXQgdGhl
IHdyYXBwZXIgZ2VuZXJhdGlvbgogICAgIGlmICgkcmV0dXJuc0xpc3RJdGVtUG9kVHlwZSkgewot
ICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiVjhTVkdQT0RUeXBlV3JhcHBlcjwiIC4gJG5h
dGl2ZVJldHVyblR5cGUgLiAiPiogd3JhcHBlciA9IG5ldyAiOwotICAgICAgICAkcmVzdWx0IC49
ICJWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8IiAuICRuYXRpdmVSZXR1cm5UeXBl
IC4gIj4oJHJldHVybiwgaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTtcbiI7CisgICAg
ICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJSZWZQdHI8VjhTVkdQT0RUeXBlV3JhcHBlcjwiIC4g
JG5hdGl2ZVJldHVyblR5cGUgLiAiPiA+IHdyYXBwZXIgPSAiOworICAgICAgICAkcmVzdWx0IC49
ICJWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8IiAuICRuYXRpdmVSZXR1cm5UeXBl
IC4gIj46OmNyZWF0ZSgkcmV0dXJuLCBpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpO1xu
IjsKICAgICAgICAgJHJldHVybiA9ICJ3cmFwcGVyIjsKICAgICB9IGVsc2lmICgkcmV0dXJuc1Bv
ZFR5cGUpIHsKLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIlY4U1ZHUE9EVHlwZVdyYXBw
ZXI8IiAuICRuYXRpdmVSZXR1cm5UeXBlIC4gIj4qIHdyYXBwZXIgPSAiOworICAgICAgICAkcmVz
dWx0IC49ICRpbmRlbnQgLiAiUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8IiAuICRuYXRpdmVS
ZXR1cm5UeXBlIC4gIj4gPiB3cmFwcGVyID0gIjsKICAgICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0
ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyKCRyZXR1cm5UeXBlLCAkcmV0dXJuKSAuICI7XG4iOwog
ICAgICAgICAkcmV0dXJuID0gIndyYXBwZXIiOwogICAgIH0KQEAgLTE1MzUsNyArMTUyNSw3IEBA
IHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiAgICAgbXkgJGdlbmVyYXRlZFNWR0Nv
bnRleHRSZXRyaWV2YWwgPSAwOwogICAgICMgSWYgdGhlIHJldHVybiB0eXBlIG5lZWRzIGFuIFNW
RyBjb250ZXh0LCBvdXRwdXQgaXQKICAgICBpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJh
bWV0ZXIoJHJldHVyblR5cGUpKSB7Ci0gICAgICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTVkdDb250
ZXh0QXNzaWdubWVudCgkaW1wbENsYXNzTmFtZSwgJHJldHVybiwgJGluZGVudCk7CisgICAgICAg
ICRyZXN1bHQgLj0gR2VuZXJhdGVTVkdDb250ZXh0QXNzaWdubWVudCgkaW1wbENsYXNzTmFtZSwg
JHJldHVybiAuICIuZ2V0KCkiLCAkaW5kZW50KTsKICAgICAgICAgJGdlbmVyYXRlZFNWR0NvbnRl
eHRSZXRyaWV2YWwgPSAxOwogICAgIH0KIApAQCAtMTU2MSw4ICsxNTUxLDkgQEAgc3ViIEdlbmVy
YXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKIAogICAgIGlmICgkcmV0dXJuc1BvZFR5cGUpIHsKICAg
ICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkcmV0dXJuVHlwZSk7Ci0gICAgICAgICRyZXN1bHQg
Lj0gJGluZGVudCAuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyKTtcbiI7CisgICAgICAgICRyZXN1bHQgLj0g
JGluZGVudCAuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyLnJlbGVhc2UoKSk7XG4iOwogICAgIH0gZWxzZSB7
CisgICAgICAgICRyZXR1cm4gPSAkcmV0dXJuIC4gIi5yZWxlYXNlKCkiIGlmIChJc1JlZlB0clR5
cGUoJHJldHVyblR5cGUpKTsKICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gUmV0dXJuTmF0
aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAkaW5kZW50KSAuICI7
XG4iOwogICAgIH0KIApAQCAtMjA2OSw3ICsyMDYwLDcgQEAgc3ViIEdlbmVyYXRlU1ZHU3RhdGlj
UG9kVHlwZVdyYXBwZXIgewogICAgICRpbXBsSW5jbHVkZXN7IlY4U1ZHUE9EVHlwZVdyYXBwZXIu
aCJ9ID0gMTsKIAogICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZSgkdHlwZSk7Ci0g
ICAgcmV0dXJuICJuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjwkbmF0aXZlVHlwZT4oJHZh
bHVlKSI7CisgICAgcmV0dXJuICJWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVUeXBl
Pjo6Y3JlYXRlKCR2YWx1ZSkiOwogfQogCiAjIEludGVybmFsIGhlbHBlcgpAQCAtMjEyOSw3ICsy
MTIwLDcgQEAgc3ViIEdlbmVyYXRlU1ZHQ29udGV4dEFzc2lnbm1lbnQKICAgICBteSAkaW5kZW50
ID0gc2hpZnQ7CiAKICAgICAkcmVzdWx0ID0gR2VuZXJhdGVTVkdDb250ZXh0UmV0cmlldmFsKCRz
cmNUeXBlLCAkaW5kZW50KTsKLSAgICAkcmVzdWx0IC49ICAgJGluZGVudCAuICJWOFByb3h5Ojpz
ZXRTVkdDb250ZXh0KCR2YWx1ZSwgY29udGV4dCk7XG4iOworICAgICRyZXN1bHQgLj0gJGluZGVu
dCAuICJWOFByb3h5OjpzZXRTVkdDb250ZXh0KCR2YWx1ZSwgY29udGV4dCk7XG4iOwogCiAgICAg
cmV0dXJuICRyZXN1bHQ7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHJl
dmlzaW9uIDQ2MjY0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBWOERPTVdyYXBwZXJfaAogI2Rl
ZmluZSBWOERPTVdyYXBwZXJfaAogCisjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
IC8vIGZvciBXZWJDb3JlOjpTdHJpbmcKQEAgLTE0MCw2ICsxNDEsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdm9pZCopOwogCiAgICAgICAgIC8v
IEZhc3QtcGF0aCBmb3IgTm9kZSBvYmplY3RzLgorICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNvbnZlcnROb2RlVG9WOE9iamVjdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0Tm9kZVRvVjhPYmplY3Qobm9kZS5n
ZXQoKSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnZlcnROb2RlVG9WOE9iamVjdChOb2RlKik7CiAKICAgICAgICAgdGVtcGxhdGUgPGNsYXNz
IEM+CkBAIC0xNjgsNiArMTc0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBz
dGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRvbVdyYXBwZXJUeXBlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4pOwogCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29udmVydEV2ZW50VG9WOE9iamVjdChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udmVydEV2ZW50VG9WOE9iamVjdChldmVudC5nZXQoKSk7CisgICAg
ICAgIH0KKwogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVu
dFRvVjhPYmplY3QoRXZlbnQqKTsKIAogICAgICAgICBzdGF0aWMgRXZlbnQqIGNvbnZlcnRUb05h
dGl2ZUV2ZW50KHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50KQpAQCAtMTc3LDggKzE4OCwx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydERPTVdy
YXBwZXJUb05hdGl2ZTxFdmVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChqc0V2ZW50
KSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gZXZlbnRU
YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmpl
Y3QoZXZlbnRUYXJnZXQuZ2V0KCkpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0
Kik7CisKICAgICAgICAgLy8gV3JhcCBhbmQgdW53cmFwIEpTIGV2ZW50IGxpc3RlbmVycy4KKyAg
ICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRMaXN0ZW5lclRv
VjhPYmplY3QoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnRMaXN0ZW5lcikKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KGV2ZW50TGlzdGVuZXIuZ2V0
KCkpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoRXZlbnRMaXN0ZW5lciopOwogCiAgICAgICAg
IC8vIERPTUltcGxlbWVudGF0aW9uIGlzIGEgc2luZ2xldG9uIGFuZCBpdCBpcyBoYW5kbGVkIGlu
IGEgc3BlY2lhbApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFNWR1BPRFR5cGVXcmFwcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFNWR1BPRFR5cGVXcmFwcGVy
LmgJKHJldmlzaW9uIDQ2MjY0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFNWR1BPRFR5cGVX
cmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE4ICs1MywxNCBAQCBwdWJsaWM6CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBQT0RUeXBlPgogY2xhc3MgVjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JG
b3JMaXN0IDogcHVibGljIFY4U1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4gewogcHVibGljOgor
ICAgIHR5cGVkZWYgU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT4gUE9ETGlzdEl0ZW1QdHJUeXBlOwor
CiAgICAgdHlwZWRlZiBQT0RUeXBlIChTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6KkdldHRlck1l
dGhvZCkoKSBjb25zdDsKICAgICB0eXBlZGVmIHZvaWQgKFNWR1BPRExpc3RJdGVtPFBPRFR5cGU+
OjoqU2V0dGVyTWV0aG9kKShQT0RUeXBlKTsKIAotICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVh
dG9yRm9yTGlzdChTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPiogY3JlYXRvciwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKLSAgICAgICAgOiBtX2NyZWF0b3IoY3JlYXRvcikKLSAg
ICAgICAgLCBtX2dldHRlcigmU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT46OnZhbHVlKQotICAgICAg
ICAsIG1fc2V0dGVyKCZTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6c2V0VmFsdWUpCi0gICAgICAg
ICwgbV9hc3NvY2lhdGVkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdD4gY3JlYXRlKFBhc3NS
ZWZQdHI8UE9ETGlzdEl0ZW1QdHJUeXBlPiBjcmVhdG9yLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY3JlYXRvcik7Ci0gICAgICAg
IEFTU0VSVChtX2dldHRlcik7Ci0gICAgICAgIEFTU0VSVChtX3NldHRlcik7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0KGNyZWF0
b3IsIGF0dHJpYnV0ZU5hbWUpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5WOFNWR1BPRFR5cGVX
cmFwcGVyQ3JlYXRvckZvckxpc3QoKSB7IH0KQEAgLTg1LDYgKzgxLDE3IEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6CisgICAgVjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0KFBh
c3NSZWZQdHI8UE9ETGlzdEl0ZW1QdHJUeXBlPiBjcmVhdG9yLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lKQorICAgICAgICA6IG1fY3JlYXRvcihjcmVhdG9yKQorICAgICAgICAs
IG1fZ2V0dGVyKCZTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6dmFsdWUpCisgICAgICAgICwgbV9z
ZXR0ZXIoJlNWR1BPRExpc3RJdGVtPFBPRFR5cGU+OjpzZXRWYWx1ZSkKKyAgICAgICAgLCBtX2Fz
c29jaWF0ZWRBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICBBU1NF
UlQobV9jcmVhdG9yKTsKKyAgICAgICAgQVNTRVJUKG1fZ2V0dGVyKTsKKyAgICAgICAgQVNTRVJU
KG1fc2V0dGVyKTsKKyAgICB9CisKICAgICAvLyBVcGRhdGUgY2FsbGJhY2tzCiAgICAgUmVmUHRy
PFNWR1BPRExpc3RJdGVtPFBPRFR5cGU+ID4gbV9jcmVhdG9yOwogICAgIEdldHRlck1ldGhvZCBt
X2dldHRlcjsKQEAgLTk1LDkgKzEwMiw5IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBlbmFtZSBQ
T0RUeXBlPgogY2xhc3MgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlciA6IHB1YmxpYyBWOFNWR1BP
RFR5cGVXcmFwcGVyPFBPRFR5cGU+IHsKIHB1YmxpYzoKLSAgICBWOFNWR1N0YXRpY1BPRFR5cGVX
cmFwcGVyKFBPRFR5cGUgdHlwZSkKLSAgICAgICAgOiBtX3BvZFR5cGUodHlwZSkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPiBjcmVhdGUoUE9EVHlwZSB0
eXBlKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOFNWR1N0YXRpY1BPRFR5
cGVXcmFwcGVyKHR5cGUpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5WOFNWR1N0YXRpY1BPRFR5
cGVXcmFwcGVyKCkgeyB9CkBAIC0xMTEsNyArMTE4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9w
b2RUeXBlID0gdHlwZTsKICAgICB9CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CisgICAgVjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcihQT0RUeXBlIHR5cGUpCisgICAgICAgIDogbV9wb2RUeXBlKHR5
cGUpCisgICAgeworICAgIH0KKwogICAgIFBPRFR5cGUgbV9wb2RUeXBlOwogfTsKIApAQCAtMTIw
LDEwICsxMzIsOSBAQCBjbGFzcyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBWOFNWR1BPRFR5cGVXcmFwcGVyPFBhcmVudFR5cGVBcmc+IFBh
cmVudFR5cGU7CiAKLSAgICAgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFy
ZW50KFBPRFR5cGUgdHlwZSwgUGFyZW50VHlwZSogcGFyZW50KQotICAgICAgICA6IFY4U1ZHU3Rh
dGljUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4odHlwZSkKLSAgICAgICAgLCBtX3BhcmVudFR5cGUo
cGFyZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJX
aXRoUE9EVHlwZVBhcmVudD4gY3JlYXRlKFBPRFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxQYXJlbnRU
eXBlPiBwYXJlbnQpCiAgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4U1ZHU3Rh
dGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudCh0eXBlLCBwYXJlbnQpKTsKICAgICB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxlbWVu
dCogY29udGV4dCkKQEAgLTEzMyw2ICsxNDQsMTIgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKKyAgICBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQoUE9EVHlw
ZSB0eXBlLCBQYXNzUmVmUHRyPFBhcmVudFR5cGU+IHBhcmVudCkKKyAgICAgICAgOiBWOFNWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+KHR5cGUpCisgICAgICAgICwgbV9wYXJlbnRUeXBl
KHBhcmVudCkKKyAgICB7CisgICAgfQorCiAgICAgUmVmUHRyPFBhcmVudFR5cGU+IG1fcGFyZW50
VHlwZTsKIH07CiAKQEAgLTE0MiwxNCArMTU5LDkgQEAgcHVibGljOgogICAgIHR5cGVkZWYgUE9E
VHlwZSAoUGFyZW50VHlwZTo6KkdldHRlck1ldGhvZCkoKSBjb25zdDsKICAgICB0eXBlZGVmIHZv
aWQgKFBhcmVudFR5cGU6OipTZXR0ZXJNZXRob2QpKGNvbnN0IFBPRFR5cGUmKTsKIAotICAgIFY4
U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50KFBhcmVudFR5cGUqIHBhcmVudCwgR2V0
dGVyTWV0aG9kIGdldHRlciwgU2V0dGVyTWV0aG9kIHNldHRlcikKLSAgICAgICAgOiBtX3BhcmVu
dChwYXJlbnQpCi0gICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVy
KHNldHRlcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVy
V2l0aFBhcmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8UGFyZW50VHlwZT4gcGFyZW50LCBHZXR0ZXJN
ZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVyKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fcGFyZW50KTsKLSAgICAgICAgQVNTRVJUKG1fZ2V0dGVyKTsKLSAgICAgICAgQVNTRVJUKG1f
c2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOFNWR1N0YXRpY1BPRFR5cGVX
cmFwcGVyV2l0aFBhcmVudChwYXJlbnQsIGdldHRlciwgc2V0dGVyKSk7CiAgICAgfQogCiAgICAg
dmlydHVhbCBvcGVyYXRvciBQT0RUeXBlKCkKQEAgLTE2Myw2ICsxNzUsMTYgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKKyAgICBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBhcmVu
dChQYXNzUmVmUHRyPFBhcmVudFR5cGU+IHBhcmVudCwgR2V0dGVyTWV0aG9kIGdldHRlciwgU2V0
dGVyTWV0aG9kIHNldHRlcikKKyAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgICAgICwg
bV9nZXR0ZXIoZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3BhcmVudCk7CisgICAgICAgIEFTU0VSVChtX2dldHRlcik7CisgICAgICAg
IEFTU0VSVChtX3NldHRlcik7CisgICAgfQorCiAgICAgUmVmUHRyPFBhcmVudFR5cGU+IG1fcGFy
ZW50OwogICAgIEdldHRlck1ldGhvZCBtX2dldHRlcjsKICAgICBTZXR0ZXJNZXRob2QgbV9zZXR0
ZXI7CkBAIC0xNzUsMTYgKzE5Nyw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHZvaWQgKFBPRFR5
cGVDcmVhdG9yOjoqU2V0dGVyTWV0aG9kKShQT0RUeXBlKTsKICAgICB0eXBlZGVmIHZvaWQgKCpD
YWNoZVJlbW92YWxDYWxsYmFjaykoVjhTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPiopOwogCi0g
ICAgVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXIoUE9EVHlwZUNyZWF0b3IqIGNyZWF0b3IsIEdl
dHRlck1ldGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIsIENhY2hlUmVtb3ZhbENhbGxi
YWNrIGNhY2hlUmVtb3ZhbENhbGxiYWNrKQotICAgICAgICA6IG1fY3JlYXRvcihjcmVhdG9yKQot
ICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0g
ICAgICAgICwgbV9jYWNoZVJlbW92YWxDYWxsYmFjayhjYWNoZVJlbW92YWxDYWxsYmFjaykKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxWOFNWR0R5bmFtaWNQT0RUeXBlV3JhcHBlcj4gY3JlYXRlKFBh
c3NSZWZQdHI8UE9EVHlwZUNyZWF0b3I+IGNyZWF0b3IsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNl
dHRlck1ldGhvZCBzZXR0ZXIsIENhY2hlUmVtb3ZhbENhbGxiYWNrIGNhY2hlUmVtb3ZhbENhbGxi
YWNrKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGNyZWF0b3IpOwotICAgICAgICBBU1NFUlQoZ2V0
dGVyKTsKLSAgICAgICAgQVNTRVJUKHNldHRlcik7Ci0gICAgICAgIEFTU0VSVChjYWNoZVJlbW92
YWxDYWxsYmFjayk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhTVkdEeW5hbWljUE9E
VHlwZVdyYXBwZXIoY3JlYXRvciwgZ2V0dGVyLCBzZXR0ZXIsIGNhY2hlUmVtb3ZhbENhbGxiYWNr
KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXIoKSB7
CkBAIC0yMDYsNiArMjIxLDE4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgVjhT
VkdEeW5hbWljUE9EVHlwZVdyYXBwZXIoUGFzc1JlZlB0cjxQT0RUeXBlQ3JlYXRvcj4gY3JlYXRv
ciwgR2V0dGVyTWV0aG9kIGdldHRlciwgU2V0dGVyTWV0aG9kIHNldHRlciwgQ2FjaGVSZW1vdmFs
Q2FsbGJhY2sgY2FjaGVSZW1vdmFsQ2FsbGJhY2spCisgICAgICAgIDogbV9jcmVhdG9yKGNyZWF0
b3IpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRl
cikKKyAgICAgICAgLCBtX2NhY2hlUmVtb3ZhbENhbGxiYWNrKGNhY2hlUmVtb3ZhbENhbGxiYWNr
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNyZWF0b3IpOworICAgICAgICBBU1NFUlQoZ2V0dGVy
KTsKKyAgICAgICAgQVNTRVJUKHNldHRlcik7CisgICAgICAgIEFTU0VSVChjYWNoZVJlbW92YWxD
YWxsYmFjayk7CisgICAgfQorCiAgICAgLy8gVXBkYXRlIGNhbGxiYWNrcwogICAgIFJlZlB0cjxQ
T0RUeXBlQ3JlYXRvcj4gbV9jcmVhdG9yOwogICAgIEdldHRlck1ldGhvZCBtX2dldHRlcjsKQEAg
LTMyMyw3ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gVXNlZCBmb3IgcmVhZHdy
aXRlIGF0dHJpYnV0ZXMgb25seQotICAgIHN0YXRpYyBXcmFwcGVyQmFzZSogbG9va3VwT3JDcmVh
dGVXcmFwcGVyKFBPRFR5cGVDcmVhdG9yKiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBT
ZXR0ZXJNZXRob2Qgc2V0dGVyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdyYXBwZXJCYXNlPiBs
b29rdXBPckNyZWF0ZVdyYXBwZXIoUE9EVHlwZUNyZWF0b3IqIGNyZWF0b3IsIEdldHRlck1ldGhv
ZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIpCiAgICAgewogICAgICAgICBEeW5hbWljV3Jh
cHBlckhhc2hNYXAmIG1hcChkeW5hbWljV3JhcHBlckhhc2hNYXAoKSk7CiAgICAgICAgIENhY2hl
SW5mbyBpbmZvKGNyZWF0b3IsIGdldHRlciwgc2V0dGVyKTsKQEAgLTMzMSw5ICszNTgsOSBAQCBw
dWJsaWM6CiAgICAgICAgIGlmIChtYXAuY29udGFpbnMoaW5mbykpCiAgICAgICAgICAgICByZXR1
cm4gbWFwLmdldChpbmZvKTsKIAotICAgICAgICBEeW5hbWljV3JhcHBlciogd3JhcHBlciA9IG5l
dyBWOFNWR0R5bmFtaWNQT0RUeXBlV3JhcHBlcjxQT0RUeXBlLCBQT0RUeXBlQ3JlYXRvcj4oY3Jl
YXRvciwgZ2V0dGVyLCBzZXR0ZXIsIGZvcmdldFdyYXBwZXIpOwotICAgICAgICBtYXAuc2V0KGlu
Zm8sIHdyYXBwZXIpOwotICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgUmVmUHRyPER5
bmFtaWNXcmFwcGVyPiB3cmFwcGVyID0gVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXI8UE9EVHlw
ZSwgUE9EVHlwZUNyZWF0b3I+OjpjcmVhdGUoY3JlYXRvciwgZ2V0dGVyLCBzZXR0ZXIsIGZvcmdl
dFdyYXBwZXIpOworICAgICAgICBtYXAuc2V0KGluZm8sIHdyYXBwZXIuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gd3JhcHBlci5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgZm9y
Z2V0V3JhcHBlcihWOFNWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+KiB3cmFwcGVyKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gNDYyNjQpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0NSw3ICszNDUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4CiAgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOwogICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpDQU5WQVNQQVRURVJOLCBwYXR0ZXJuLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRU
RVJOLCBwYXR0ZXJuLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgaWYgKFY4SFRNTENhbnZhc0Vs
ZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKQEAgLTM1Niw3ICszNTYsNyBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOwogICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRURVJOLCBwYXR0ZXJuLmdldCgpKTsKKyAg
ICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpDQU5WQVNQQVRURVJOLCBwYXR0ZXJuLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKFRZUEVfTUlTTUFUQ0hfRVJSKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiA0NjI2NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVj
dExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIElOREVYRURf
UFJPUEVSVFlfR0VUVEVSKENsaWVudFJlY3RMaXN0KQogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0xJRU5UUkVDVCwgcmVzdWx0
LmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OkNMSUVOVFJFQ1QsIHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiA0NjI2NCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNz
UmVmUHRyPFY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyPiBWOEN1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
Y3JlYXRlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzb2x2ZXIpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBWOEN1c3RvbVhQYXRoTlNSZXNvbHZlcihyZXNvbHZlcikpOworfQorCiBWOEN1
c3RvbVhQYXRoTlNSZXNvbHZlcjo6VjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiByZXNvbHZlcikKICAgICA6IG1fcmVzb2x2ZXIocmVzb2x2ZXIpCiB7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmgJKHJldmlzaW9uIDQ2MjY0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTAg
QEAKIAogI2lmIEVOQUJMRShYUEFUSCkKIAotI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSAiWFBh
dGhOU1Jlc29sdmVyLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
MywxMyArNDUsMTQgQEAgY2xhc3MgU3RyaW5nOwogCiBjbGFzcyBWOEN1c3RvbVhQYXRoTlNSZXNv
bHZlciA6IHB1YmxpYyBYUGF0aE5TUmVzb2x2ZXIgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiByZXNvbHZlcik7CiAKLSAgICBWOEN1c3RvbVhQYXRoTlNSZXNvbHZlcih2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHJlc29sdmVyKTsKICAgICB2aXJ0dWFsIH5WOEN1c3RvbVhQYXRoTlNSZXNv
bHZlcigpOwotCiAgICAgdmlydHVhbCBTdHJpbmcgbG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0
cmluZyYgcHJlZml4KTsKIAogcHJpdmF0ZToKKyAgICBWOEN1c3RvbVhQYXRoTlNSZXNvbHZlcih2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc29sdmVyKTsKKwogICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gbV9yZXNvbHZlcjsgIC8vIEhhbmRsZSB0byByZXNvbHZlciBvYmplY3QuCiB9OwogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20u
Y3BwCShyZXZpc2lvbiA0NjI2NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9N
V2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEyLDcgKzgxMiw3IEBAIE5BTUVE
X1BST1BFUlRZX0dFVFRFUihET01XaW5kb3cpCiAgICAgICAgICAgICBpZiAoaXRlbXMtPmxlbmd0
aCgpID09IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5v
ZGVUb1Y4T2JqZWN0KGl0ZW1zLT5maXJzdEl0ZW0oKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMuZ2V0KCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENP
TExFQ1RJT04sIGl0ZW1zLnJlbGVhc2UoKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiA0NjI2NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwzNSArNTIsMzUgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKERvY3VtZW50RXZhbHVhdGUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uRG9jdW1lbnQuZXZh
bHVhdGUoKSIpOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxEb2N1bWVudD4oYXJncy5Ib2xkZXIoKSk7CisgICAgUmVmUHRy
PERvY3VtZW50PiBkb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05v
ZGU8RG9jdW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIFN0cmluZyBleHByZXNzaW9uID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgIE5v
ZGUqIGNvbnRleHROb2RlID0gMDsKKyAgICBSZWZQdHI8Tm9kZT4gY29udGV4dE5vZGU7CiAgICAg
aWYgKFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkpCiAgICAgICAgIGNvbnRleHROb2RlID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pKTsKIAotICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2
ZXIgPSAwOworICAgIFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHJlc29sdmVyOwogICAgIGlmIChW
OFhQYXRoTlNSZXNvbHZlcjo6SGFzSW5zdGFuY2UoYXJnc1syXSkpCiAgICAgICAgIHJlc29sdmVy
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhOU1Jlc29sdmVyPihW
OENsYXNzSW5kZXg6OlhQQVRITlNSRVNPTFZFUiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzJdKSk7CiAgICAgZWxzZSBpZiAoYXJnc1syXS0+SXNPYmplY3QoKSkKLSAgICAgICAg
cmVzb2x2ZXIgPSBuZXcgVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIoYXJnc1syXS0+VG9PYmplY3Qo
KSk7CisgICAgICAgIHJlc29sdmVyID0gVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShh
cmdzWzJdLT5Ub09iamVjdCgpKTsKICAgICBlbHNlIGlmICghYXJnc1syXS0+SXNOdWxsKCkgJiYg
IWFyZ3NbMl0tPklzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVf
TUlTTUFUQ0hfRVJSKTsKIAogICAgIGludCB0eXBlID0gdG9JbnQzMihhcmdzWzNdKTsKLSAgICBY
UGF0aFJlc3VsdCogaW5SZXN1bHQgPSAwOworICAgIFJlZlB0cjxYUGF0aFJlc3VsdD4gaW5SZXN1
bHQ7CiAgICAgaWYgKFY4WFBhdGhSZXN1bHQ6Okhhc0luc3RhbmNlKGFyZ3NbNF0pKQogICAgICAg
ICBpblJlc3VsdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoUmVz
dWx0PihWOENsYXNzSW5kZXg6OlhQQVRIUkVTVUxULCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGFyZ3NbNF0pKTsKIAogICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwotICAg
IFJlZlB0cjxYUGF0aFJlc3VsdD4gcmVzdWx0ID0gZG9jdW1lbnQtPmV2YWx1YXRlKGV4cHJlc3Np
b24sIGNvbnRleHROb2RlLCByZXNvbHZlciwgdHlwZSwgaW5SZXN1bHQsIGVjKTsKKyAgICBSZWZQ
dHI8WFBhdGhSZXN1bHQ+IHJlc3VsdCA9IGRvY3VtZW50LT5ldmFsdWF0ZShleHByZXNzaW9uLCBj
b250ZXh0Tm9kZS5nZXQoKSwgcmVzb2x2ZXIuZ2V0KCksIHR5cGUsIGluUmVzdWx0LmdldCgpLCBl
Yyk7CiAgICAgaWYgKGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4Y2VwdGlvbkNhdGNoZXIuRXhjZXB0aW9uKCkpOwogCiAgICAgaWYgKGVj
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiAKLSAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlhQQVRIUkVTVUxULCByZXN1bHQu
Z2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6WFBBVEhSRVNVTFQsIHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiBDQUxMQkFDS19G
VU5DX0RFQ0woRG9jdW1lbnRHZXRDU1NDYW52YXNDb250ZXh0KQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NjI2NCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEVsZW1lbnRTZXRB
dHRyaWJ1dGVObwogICAgIGlmIChlYykKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CiAKLSAgICBy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsK
KyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJl
bGVhc2UoKSk7CiB9CiAKIENBTExCQUNLX0ZVTkNfREVDTChFbGVtZW50U2V0QXR0cmlidXRlTlMp
CkBAIC0xMjQsNyArMTI0LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEVsZW1lbnRTZXRBdHRyaWJ1
dGVObwogICAgIGlmIChlYykKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CiAKLSAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKKyAgICBy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2Uo
KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvRXZlbnRUeXBlKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiB2YWx1ZSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENv
bGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NjI2NCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0
TmFtZWRJdGUKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogCiAgICAg
aWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnROb2RlVG9WOE9iamVjdChuYW1lZEl0ZW1zLmF0KDApLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KG5hbWVkSXRlbXMuYXQo
MCkucmVsZWFzZSgpKTsKIAogICAgIE5vZGVMaXN0KiBsaXN0ID0gbmV3IFY4TmFtZWROb2Rlc0Nv
bGxlY3Rpb24obmFtZWRJdGVtcyk7CiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpOT0RFTElTVCwgbGlzdCk7CkBAIC02Niw3ICs2Niw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0SXRlbShIVE0KICAgICB9CiAKICAgICBS
ZWZQdHI8Tm9kZT4gcmVzdWx0ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleC0+VWludDMyVmFsdWUo
KSk7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3Vs
dC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiBOQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTENvbGxl
Y3Rpb24pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NjI2NCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NyArOTcsNyBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTERvY3VtZW50KQogICAgICAgICBy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qobm9kZSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIGl0ZW1zLnJl
bGVhc2UoKSk7CiB9CiAKIC8vIEhUTUxEb2N1bWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODAsOCArMTgwLDgg
QEAgQUNDRVNTT1JfR0VUVEVSKEhUTUxEb2N1bWVudEFsbCkKICAgICB2ODo6SGFuZGxlU2NvcGUg
c2NvcGU7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigp
OwogICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxIVE1MRG9jdW1lbnQ+KGhvbGRlcik7Ci0gICAgUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gV1RGOjpnZXRQdHIoaHRtbERvY3VtZW50LT5hbGwoKSk7
Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpIVE1MQ09MTEVDVElPTiwgV1RGOjpnZXRQdHIoY29sbGVjdGlvbikpOworICAgIFJlZlB0cjxI
VE1MQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IGh0bWxEb2N1bWVudC0+YWxsKCk7CisgICAgcmV0
dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpIVE1MQ09M
TEVDVElPTiwgY29sbGVjdGlvbi5yZWxlYXNlKCkpOwogfQogCiBBQ0NFU1NPUl9TRVRURVIoSFRN
TERvY3VtZW50QWxsKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9y
bUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYyNjQpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDExICs0MywxMSBAQCBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1M
Rm9ybUVsZW1lbnQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEZvcm1FbGVtZW50LkluZGV4
ZWRQcm9wZXJ0eUdldHRlciIpOwogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZvcm1FbGVtZW50PihpbmZvLkhvbGRl
cigpKTsKLSAgICAKKwogICAgIFJlZlB0cjxOb2RlPiBmb3JtRWxlbWVudCA9IGZvcm0tPmVsZW1l
bnRzKCktPml0ZW0oaW5kZXgpOwogICAgIGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnROb2RlVG9WOE9iamVjdChmb3JtRWxlbWVudC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9N
V3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGZvcm1FbGVtZW50LnJlbGVhc2UoKSk7CiB9
CiAKIApAQCAtNzQsMTIgKzc0LDEyIEBAIE5BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MRm9ybUVs
ZW1lbnQpCiAgICAgQVNTRVJUKCFlbGVtZW50cy5pc0VtcHR5KCkpOwogCiAgICAgaWYgKGVsZW1l
bnRzLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9k
ZVRvVjhPYmplY3QoZWxlbWVudHMuYXQoMCkuZ2V0KCkpOworICAgICAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoZWxlbWVudHMuYXQoMCkucmVsZWFzZSgpKTsK
IAogICAgIE5vZGVMaXN0KiBjb2xsZWN0aW9uID0gbmV3IFY4TmFtZWROb2Rlc0NvbGxlY3Rpb24o
ZWxlbWVudHMpOwogICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6Tk9ERUxJU1QsIGNvbGxlY3Rpb24pOwogfQotICAgIAorCiBDQUxMQkFDS19G
VU5DX0RFQ0woSFRNTEZvcm1FbGVtZW50U3VibWl0KSB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRN
TEZvcm1FbGVtZW50LnN1Ym1pdCgpIik7CiAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEhUTUxGb3JtRWxlbWVudD4oYXJn
cy5Ib2xkZXIoKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRp
b25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NjI2
NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9u
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIElOREVYRURfUFJP
UEVSVFlfR0VUVEVSKEhUTUxPcHRpb25zQ29sbGUKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAK
IElOREVYRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbikKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxT
ZWxlY3RFbGVtZW50Q29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDQ2MjY0KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudENvbGxlY3Rpb25DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIE5BTUVEX1BST1BFUlRZX0dF
VFRFUihIVE1MU2VsZWN0RWxlbWVudEMKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7CiAKICAgICBpZiAoaXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChpdGVtcy5hdCgwKS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChpdGVtcy5h
dCgwKS5yZWxlYXNlKCkpOwogCiAgICAgTm9kZUxpc3QqIGxpc3QgPSBuZXcgVjhOYW1lZE5vZGVz
Q29sbGVjdGlvbihpdGVtcyk7CiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpOT0RFTElTVCwgbGlzdCk7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQ29udHJvbGxlckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDQ2MjY0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJ
bnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEy
NCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVyU2UKICAgICAgICAg
aWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNlYXJjaFJhbmdlLmdldCgpLCBE
T1dOU1RSRUFNKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHJlc3VsdC0+U2V0KHY4
OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdDxS
YW5nZT4oVjhDbGFzc0luZGV4OjpSQU5HRSwgcmVzdWx0UmFuZ2UuZ2V0KCkpKTsKKyAgICAgICAg
cmVzdWx0LT5TZXQodjg6Ok51bWJlcjo6TmV3KGluZGV4KyspLCBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6UkFOR0UsIHJlc3VsdFJhbmdlLnJlbGVhc2UoKSkp
OwogCiAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBuZXdTdGFydCk7CiAgICAg
fSB3aGlsZSAodHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVk
Tm9kZU1hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiA0NjI2NCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQCBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihOYW1lZE5vZGVNYXAp
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJl
c3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2Jq
ZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiBOQU1FRF9QUk9QRVJUWV9HRVRURVIoTmFtZWRO
b2RlTWFwKQpAQCAtNjgsNyArNjgsNyBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoTmFtZWROb2Rl
TWFwKQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKIAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVj
dChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9W
OE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9y
Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYyNjQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcg
QEAgc3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOAogICAgIGlmICghb2Jq
ZWN0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAotICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChvYmplY3QuZ2V0KCkpOworICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChvYmplY3QpOwogfQogCiBDQUxMQkFDS19G
VU5DX0RFQ0woTm9kZUl0ZXJhdG9yTmV4dE5vZGUpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYyNjQpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsNyArNTUsNyBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoTm9kZUxpc3QpCiAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3Vs
dC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3BwCShy
ZXZpc2lvbiA0NjI2NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQCBDQUxMQkFDS19GVU5D
X0RFQ0woU1ZHTWF0cml4SW52ZXJzZSkKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOwogICAgIH0KIAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6U1ZHTUFUUklYLCBuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4ocmVzdWx0KSk7CisgICAgUmVmUHRyPFY4U1ZHU3RhdGlj
UE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+ID4gd3JhcHBlciA9IFY4U1ZHU3Rh
dGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpjcmVhdGUocmVzdWx0KTsK
KyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OlNWR01BVFJJWCwgd3JhcHBlci5yZWxlYXNlKCkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0wo
U1ZHTWF0cml4Um90YXRlRnJvbVZlY3RvcikKQEAgLTc4LDcgKzc5LDggQEAgQ0FMTEJBQ0tfRlVO
Q19ERUNMKFNWR01hdHJpeFJvdGF0ZUZyb21WZQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIG5ldyBWOFNWR1N0YXRpY1BPRFR5cGVX
cmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4PihyZXN1bHQpKTsKKyAgICBSZWZQdHI8VjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPiB3cmFwcGVyID0gVjhT
VkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShyZXN1
bHQpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6U1ZHTUFUUklYLCB3cmFwcGVyLnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmVl
V2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gNDYyNjQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1
MSw3IEBAIHN0YXRpYyBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgKICAgICBpZiAo
IW9iamVjdCkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAKLSAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qob2JqZWN0LmdldCgpKTsKKyAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qob2JqZWN0KTsKIH0KIAogQ0FMTEJB
Q0tfRlVOQ19ERUNMKFRyZWVXYWxrZXJQYXJlbnROb2RlKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwCShyZXZpc2lv
biA0NjI2NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKFhTTFRQcm9jZXNzb3JUcmFuc2ZvcgogICAgIE5vZGUqIHNvdXJjZSA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChhcmdzWzBdKSk7CiAgICAgRG9jdW1lbnQqIG93bmVyID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxEb2N1bWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzFdKSk7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHJlc3VsdCA9IGltcC0+
dHJhbnNmb3JtVG9GcmFnbWVudChzb3VyY2UsIG93bmVyKTsKLSAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAK
IApAQCAtOTgsNyArOTgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWFNMVFByb2Nlc3NvclRyYW5z
Zm9yCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAK
LSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0Lmdl
dCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVz
dWx0LnJlbGVhc2UoKSk7CiB9CiAKIAo=
</data>
<flag name="review"
          id="17624"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33430</attachid>
            <date>2009-07-24 05:34:53 -0700</date>
            <delta_ts>2009-07-24 10:45:53 -0700</delta_ts>
            <desc>Avoid memory leaks and cleanup use of get() and release() on RefPtrs.</desc>
            <filename>memleak.txt</filename>
            <type>text/plain</type>
            <size>38176</size>
            <attacher name="Mads Ager">ager</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjM0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMDktMDctMjQgIE1hZHMgQWdlciAgPGFnZXJAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBh
bmQgWFBhdGggbWVtb3J5IGxlYWtzIGluIFY4IGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQ4OAorCisgICAgICAgIEFkZCBwcm9wZXIg
J2NyZWF0ZScgbWV0aG9kcyB0byBTVkdQb2RUeXBlV3JhcHBlcnMgYW5kCisgICAgICAgIFhQYXRo
TlNSZXNvbHZlcnMgaW4gdGhlIFY4IGJpbmRpbmdzIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4KKwor
ICAgICAgICBJbnRyb2R1Y2UgY29udmVydFRvVjhPYmplY3QgbWV0aG9kcyB0aGF0IGFjY2VwdCBQ
YXNzUmVmUHRycyBhbmQKKyAgICAgICAgY2xlYW4gdXAgdGhlIHVzZSBvZiBnZXQoKSBhbmQgcmVs
ZWFzZSgpIG9uIFJlZlB0cnMuCisgICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9W
OE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudExp
c3RlbmVyVG9WOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3Jh
cHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JM
aXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0
b3JGb3JMaXN0OjpWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI6OlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RU
eXBlUGFyZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdTdGF0aWNQT0RUeXBl
V3JhcHBlcldpdGhQT0RUeXBlUGFyZW50OjpWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBP
RFR5cGVQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cldpdGhQYXJlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFNWR1N0YXRpY1BPRFR5
cGVXcmFwcGVyV2l0aFBhcmVudDo6VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOFNWR0R5bmFtaWNQT0RUeXBlV3JhcHBlcjo6VjhTVkdEeW5h
bWljUE9EVHlwZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhTVkdEeW5hbWljUE9EVHlw
ZVdyYXBwZXJDYWNoZTo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhDbGllbnRSZWN0TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJTkRF
WEVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tWFBhdGhO
U1Jlc29sdmVyOjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVhQYXRoTlNSZXNvbHZlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdp
bmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFD
S19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0
aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldE5hbWVkSXRlbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0SXRlbSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dF
VFRFUik6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpOQU1F
RF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxP
cHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVj
dEVsZW1lbnRDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BS
T1BFUlRZX0dFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9y
Q29udHJvbGxlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RF
Q0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAg
IChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
QUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVX
YWxrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorCiAyMDA5LTA3LTI0ICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA0
NjM0MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdv
cmtpbmcgY29weSkKQEAgLTU2MCwxMCArNTYwLDYgQEAgRU5ECiAgICAgICAgIH0KICAgICAgICAg
JGdldHRlclN0cmluZyAuPSAiZWMiIGlmICR1c2VFeGNlcHRpb25zOwogICAgICAgICAkZ2V0dGVy
U3RyaW5nIC49ICIpIjsKLSAgICAgICAgaWYgKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkpIHsK
LSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9HZXRQdHIuaCJ9ID0gMTsKLSAgICAgICAg
ICAgICRnZXR0ZXJTdHJpbmcgPSAiV1RGOjpnZXRQdHIoIiAuICRnZXR0ZXJTdHJpbmcgLiAiKSI7
Ci0gICAgICAgIH0KICAgICAgICAgaWYgKCRuYXRpdmVUeXBlIGVxICJpbnQiIGFuZCAkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0RnJvbVN0cmluZyJ9
KSB7CiAgICAgICAgICAgICAkZ2V0dGVyU3RyaW5nIC49ICIudG9JbnQoKSI7CiAgICAgICAgIH0K
QEAgLTU4OSwxOSArNTg1LDIyIEBAIEVORAogICAgICAgICBteSAkaW1wbENsYXNzSXNBbmltYXRl
ZFR5cGUgPSAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGltcGxDbGFzc05hbWUp
OwogICAgICAgICBpZiAobm90ICRpbXBsQ2xhc3NJc0FuaW1hdGVkVHlwZSBhbmQgJGNvZGVHZW5l
cmF0b3ItPklzUG9kVHlwZVdpdGhXcml0ZWFibGVQcm9wZXJ0aWVzKCRhdHRyVHlwZSkgYW5kIG5v
dCBkZWZpbmVkICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Iklt
bXV0YWJsZSJ9KSB7CiAgICAgICAgICAgICBpZiAoSXNQb2RUeXBlKCRpbXBsQ2xhc3NOYW1lKSkg
ewotICAgICAgICAgICAgICAgICR3cmFwcGVyID0gIm5ldyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyV2l0aFBPRFR5cGVQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPigkZ2V0dGVy
U3RyaW5nLCBpbXBfd3JhcHBlcikiOworICAgICAgICAgICAgICAgIG15ICR3cmFwcGVyID0gIlY4
U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudDwkbmF0aXZlVHlwZSwgJGlt
cGxDbGFzc05hbWU+OjpjcmVhdGUoJGdldHRlclN0cmluZywgaW1wX3dyYXBwZXIpIjsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFJlZlB0cjxWOFNWR1N0YXRp
Y1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NO
YW1lPiA+IHdyYXBwZXIgPSAkd3JhcHBlcjtcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAkd3JhcHBlciA9ICJuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldp
dGhQYXJlbnQ8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lPihpbXAsICYke2ltcGxDbGFzc05h
bWV9OjokZ2V0dGVyLCAmJHtpbXBsQ2xhc3NOYW1lfTo6JHNldHRlcikiOworICAgICAgICAgICAg
ICAgIG15ICR3cmFwcGVyID0gIlY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFyZW50PCRu
YXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT46OmNyZWF0ZShpbXAsICYke2ltcGxDbGFzc05hbWV9
OjokZ2V0dGVyLCAmJHtpbXBsQ2xhc3NOYW1lfTo6JHNldHRlcikiOworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgUmVmUHRyPFY4U1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXJXaXRoUGFyZW50PCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZT4gPiB3cmFwcGVyID0g
JHdyYXBwZXI7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmICgkaW1wbENsYXNzSXNBbmltYXRlZFR5cGUpIHsKLSAgICAgICAgICAgICAgICAkd3Jh
cHBlciA9ICJWOFNWR0R5bmFtaWNQT0RUeXBlV3JhcHBlckNhY2hlPCRuYXRpdmVUeXBlLCAkaW1w
bENsYXNzTmFtZT46Omxvb2t1cE9yQ3JlYXRlV3JhcHBlcihpbXAsICYke2ltcGxDbGFzc05hbWV9
OjokZ2V0dGVyLCAmJHtpbXBsQ2xhc3NOYW1lfTo6JHNldHRlcikiOworICAgICAgICAgICAgICAg
IG15ICR3cmFwcGVyID0gIlY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyQ2FjaGU8JG5hdGl2ZVR5
cGUsICRpbXBsQ2xhc3NOYW1lPjo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKGltcCwgJiR7aW1wbENs
YXNzTmFtZX06OiRnZXR0ZXIsICYke2ltcGxDbGFzc05hbWV9Ojokc2V0dGVyKSI7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBSZWZQdHI8VjhTVkdQT0RUeXBl
V3JhcHBlcjwiIC4gJG5hdGl2ZVR5cGUgLiAiPiA+IHdyYXBwZXIgPSAkd3JhcHBlcjtcbiIpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAkd3JhcHBlciA9IEdlbmVyYXRl
U1ZHU3RhdGljUG9kVHlwZVdyYXBwZXIoJHJldHVyblR5cGUsICRnZXR0ZXJTdHJpbmcpOworICAg
ICAgICAgICAgICAgIG15ICR3cmFwcGVyID0gR2VuZXJhdGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBl
cigkcmV0dXJuVHlwZSwgJGdldHRlclN0cmluZyk7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBSZWZQdHI8VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjwiIC4g
JG5hdGl2ZVR5cGUgLiAiPiA+IHdyYXBwZXIgPSAkd3JhcHBlcjtcbiIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB2b2lk
KiB3cmFwcGVyID0gJHdyYXBwZXI7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVUeXBlIHYgPSAiKTsKIApAQCAtNjEyLDkgKzYx
MSw2IEBAIEVORAogICAgICAgICB9CiAKICAgICAgICAgJHJlc3VsdCA9ICJ2IjsKLSAgICAgICAg
aWYgKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkpIHsKLSAgICAgICAgICAgICRyZXN1bHQgPSAi
V1RGOjpnZXRQdHIoIiAuICRyZXN1bHQgLiAiKSI7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGF0dHJUeXBlKSAmJiAhJHNraXBD
b250ZXh0KSB7CkBAIC02MjIsMTQgKzYxOCwxNSBAQCBFTkQKICAgICAgICAgaWYgKCRhdHRySXNQ
b2RUeXBlKSB7CiAgICAgICAgICAgICAkcmVzdWx0T2JqZWN0ID0gIndyYXBwZXIiOwogICAgICAg
ICB9Ci0KKyAgICAgICAgJHJlc3VsdE9iamVjdCA9ICJXVEY6OmdldFB0cigiIC4gJHJlc3VsdE9i
amVjdCAuICIpIjsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVTVkdD
b250ZXh0QXNzaWdubWVudCgkaW1wbENsYXNzTmFtZSwgJHJlc3VsdE9iamVjdCwgIiAgICAiKSk7
CiAgICAgfQogCiAgICAgaWYgKCRhdHRySXNQb2RUeXBlKSB7CiAgICAgICAgIG15ICRjbGFzc0lu
ZGV4ID0gdWMoJGF0dHJUeXBlKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRj
bGFzc0luZGV4LCB3cmFwcGVyKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIucmVsZWFzZSgpKTtcbiIpOwogICAgIH0gZWxzZSB7Cisg
ICAgICAgICRyZXN1bHQgLj0gIi5yZWxlYXNlKCkiIGlmIChJc1JlZlB0clR5cGUoJGF0dHJUeXBl
KSk7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIFJldHVybk5hdGl2
ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICIgICAgIikuIjtcbiIp
OwogICAgIH0KIApAQCAtMTQ4MCwxMyArMTQ3Nyw2IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2Fs
bFN0cmluZygpCiAgICAgfQogICAgICRmdW5jdGlvblN0cmluZyAuPSAiKSI7CiAKLSAgICBpZiAo
KElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkgfHwgJHJldHVybnNMaXN0SXRlbVBvZFR5cGUpICYm
ICEkbm9kZVRvUmV0dXJuKSB7Ci0gICAgICAgICMgV2UgZG9uJ3QgdXNlIGdldFB0ciB3aGVuICRu
b2RlVG9SZXR1cm4gYmVjYXVzZSB0aGF0IHNpdHVhdGlvbiBpcwotICAgICAgICAjIHNwZWNpYWwt
Y2FzZWQgYmVsb3cgdG8gcmV0dXJuIGEgYm9vbC4KLSAgICAgICAgJGltcGxJbmNsdWRlc3sid3Rm
L0dldFB0ci5oIn0gPSAxOwotICAgICAgICAkZnVuY3Rpb25TdHJpbmcgPSAiV1RGOjpnZXRQdHIo
IiAuICRmdW5jdGlvblN0cmluZyAuICIpIjsKLSAgICB9Ci0KICAgICBpZiAoJG5vZGVUb1JldHVy
bikgewogICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgaW5zZXJ0QmVmb3JlLCByZXBsYWNlQ2hp
bGQsIHJlbW92ZUNoaWxkIGFuZAogICAgICAgICAjIGFwcGVuZENoaWxkIGZ1bmN0aW9ucyBmcm9t
IE5vZGUuCkBAIC0xNTE2LDE4ICsxNTA2LDE0IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0
cmluZygpCiAgICAgfQogCiAgICAgbXkgJHJldHVybiA9ICJyZXN1bHQiOwotICAgIGlmIChJc1Jl
ZlB0clR5cGUoJHJldHVyblR5cGUpIHx8ICRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlKSB7Ci0gICAg
ICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9HZXRQdHIuaCJ9ID0gMTsKLSAgICAgICAgJHJldHVybiA9
ICJXVEY6OmdldFB0cigiIC4gJHJldHVybiAuICIpIjsKLSAgICB9CiAKICAgICAjIElmIHRoZSBy
ZXR1cm4gdHlwZSBpcyBhIFBPRCB0eXBlLCBzZXBhcmF0ZSBvdXQgdGhlIHdyYXBwZXIgZ2VuZXJh
dGlvbgogICAgIGlmICgkcmV0dXJuc0xpc3RJdGVtUG9kVHlwZSkgewotICAgICAgICAkcmVzdWx0
IC49ICRpbmRlbnQgLiAiVjhTVkdQT0RUeXBlV3JhcHBlcjwiIC4gJG5hdGl2ZVJldHVyblR5cGUg
LiAiPiogd3JhcHBlciA9IG5ldyAiOwotICAgICAgICAkcmVzdWx0IC49ICJWOFNWR1BPRFR5cGVX
cmFwcGVyQ3JlYXRvckZvckxpc3Q8IiAuICRuYXRpdmVSZXR1cm5UeXBlIC4gIj4oJHJldHVybiwg
aW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTtcbiI7CisgICAgICAgICRyZXN1bHQgLj0g
JGluZGVudCAuICJSZWZQdHI8VjhTVkdQT0RUeXBlV3JhcHBlcjwiIC4gJG5hdGl2ZVJldHVyblR5
cGUgLiAiPiA+IHdyYXBwZXIgPSAiOworICAgICAgICAkcmVzdWx0IC49ICJWOFNWR1BPRFR5cGVX
cmFwcGVyQ3JlYXRvckZvckxpc3Q8IiAuICRuYXRpdmVSZXR1cm5UeXBlIC4gIj46OmNyZWF0ZSgk
cmV0dXJuLCBpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpO1xuIjsKICAgICAgICAgJHJl
dHVybiA9ICJ3cmFwcGVyIjsKICAgICB9IGVsc2lmICgkcmV0dXJuc1BvZFR5cGUpIHsKLSAgICAg
ICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIlY4U1ZHUE9EVHlwZVdyYXBwZXI8IiAuICRuYXRpdmVS
ZXR1cm5UeXBlIC4gIj4qIHdyYXBwZXIgPSAiOworICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQg
LiAiUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8IiAuICRuYXRpdmVSZXR1cm5UeXBlIC4gIj4g
PiB3cmFwcGVyID0gIjsKICAgICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5
cGVXcmFwcGVyKCRyZXR1cm5UeXBlLCAkcmV0dXJuKSAuICI7XG4iOwogICAgICAgICAkcmV0dXJu
ID0gIndyYXBwZXIiOwogICAgIH0KQEAgLTE1MzUsNyArMTUyMSw3IEBAIHN1YiBHZW5lcmF0ZUZ1
bmN0aW9uQ2FsbFN0cmluZygpCiAgICAgbXkgJGdlbmVyYXRlZFNWR0NvbnRleHRSZXRyaWV2YWwg
PSAwOwogICAgICMgSWYgdGhlIHJldHVybiB0eXBlIG5lZWRzIGFuIFNWRyBjb250ZXh0LCBvdXRw
dXQgaXQKICAgICBpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJHJldHVyblR5
cGUpKSB7Ci0gICAgICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTVkdDb250ZXh0QXNzaWdubWVudCgk
aW1wbENsYXNzTmFtZSwgJHJldHVybiwgJGluZGVudCk7CisgICAgICAgICRyZXN1bHQgLj0gR2Vu
ZXJhdGVTVkdDb250ZXh0QXNzaWdubWVudCgkaW1wbENsYXNzTmFtZSwgJHJldHVybiAuICIuZ2V0
KCkiLCAkaW5kZW50KTsKICAgICAgICAgJGdlbmVyYXRlZFNWR0NvbnRleHRSZXRyaWV2YWwgPSAx
OwogICAgIH0KIApAQCAtMTU2MSw4ICsxNTQ3LDkgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxs
U3RyaW5nKCkKIAogICAgIGlmICgkcmV0dXJuc1BvZFR5cGUpIHsKICAgICAgICAgbXkgJGNsYXNz
SW5kZXggPSB1YygkcmV0dXJuVHlwZSk7Ci0gICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFz
c0luZGV4LCB3cmFwcGVyKTtcbiI7CisgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1
cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0lu
ZGV4LCB3cmFwcGVyLnJlbGVhc2UoKSk7XG4iOwogICAgIH0gZWxzZSB7CisgICAgICAgICRyZXR1
cm4gLj0gIi5yZWxlYXNlKCkiIGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpKTsKICAgICAg
ICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gUmV0dXJuTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+
c2lnbmF0dXJlLCAkcmV0dXJuLCAkaW5kZW50KSAuICI7XG4iOwogICAgIH0KIApAQCAtMjA1MSw2
ICsyMDM4LDcgQEAgc3ViIFJldHVybk5hdGl2ZVRvSlNWYWx1ZQogICAgIGVsc2UgewogICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVmQ291bnRlZC5oIn0gPSAxOwogICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJ3dGYvUmVmUHRyLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9H
ZXRQdHIuaCJ9ID0gMTsKICAgICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkdHlwZSk7CiAKICAg
ICAgICAgaWYgKElzUG9kVHlwZSgkdHlwZSkpIHsKQEAgLTIwNjksNyArMjA1Nyw3IEBAIHN1YiBH
ZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyIHsKICAgICAkaW1wbEluY2x1ZGVzeyJWOFNW
R1BPRFR5cGVXcmFwcGVyLmgifSA9IDE7CiAKICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2
ZVR5cGUoJHR5cGUpOwotICAgIHJldHVybiAibmV3IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8
JG5hdGl2ZVR5cGU+KCR2YWx1ZSkiOworICAgIHJldHVybiAiVjhTVkdTdGF0aWNQT0RUeXBlV3Jh
cHBlcjwkbmF0aXZlVHlwZT46OmNyZWF0ZSgkdmFsdWUpIjsKIH0KIAogIyBJbnRlcm5hbCBoZWxw
ZXIKQEAgLTIxMjksNyArMjExNyw3IEBAIHN1YiBHZW5lcmF0ZVNWR0NvbnRleHRBc3NpZ25tZW50
CiAgICAgbXkgJGluZGVudCA9IHNoaWZ0OwogCiAgICAgJHJlc3VsdCA9IEdlbmVyYXRlU1ZHQ29u
dGV4dFJldHJpZXZhbCgkc3JjVHlwZSwgJGluZGVudCk7Ci0gICAgJHJlc3VsdCAuPSAgICRpbmRl
bnQgLiAiVjhQcm94eTo6c2V0U1ZHQ29udGV4dCgkdmFsdWUsIGNvbnRleHQpO1xuIjsKKyAgICAk
cmVzdWx0IC49ICRpbmRlbnQgLiAiVjhQcm94eTo6c2V0U1ZHQ29udGV4dCgkdmFsdWUsIGNvbnRl
eHQpO1xuIjsKIAogICAgIHJldHVybiAkcmVzdWx0OwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5oCShyZXZpc2lvbiA0NjM0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgVjhE
T01XcmFwcGVyX2gKICNkZWZpbmUgVjhET01XcmFwcGVyX2gKIAorI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIiAvLyBmb3IgV2ViQ29yZTo6U3RyaW5nCkBAIC0xNDAsNiArMTQxLDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHZvaWQq
KTsKIAogICAgICAgICAvLyBGYXN0LXBhdGggZm9yIE5vZGUgb2JqZWN0cy4KKyAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Tm9kZVRvVjhPYmplY3QoUGFzc1JlZlB0
cjxOb2RlPiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29udmVydE5vZGVU
b1Y4T2JqZWN0KG5vZGUuZ2V0KCkpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSopOwogCiAgICAgICAg
IHRlbXBsYXRlIDxjbGFzcyBDPgpAQCAtMTY4LDYgKzE3NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFw
cGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAorICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRvVjhPYmplY3QoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RXZlbnRUb1Y4T2Jq
ZWN0KGV2ZW50LmdldCgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VG9WOE9iamVjdChFdmVudCopOwogCiAgICAgICAgIHN0
YXRpYyBFdmVudCogY29udmVydFRvTmF0aXZlRXZlbnQodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpz
RXZlbnQpCkBAIC0xNzcsOCArMTg4LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50Pih2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGpzRXZlbnQpKTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChQYXNzUmVm
UHRyPEV2ZW50VGFyZ2V0PiBldmVudFRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoZXZlbnRUYXJnZXQuZ2V0KCkpOworICAg
ICAgICB9CisKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZl
bnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0Kik7CisKICAgICAgICAgLy8gV3JhcCBhbmQg
dW53cmFwIEpTIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnRMaXN0ZW5lcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRFdmVu
dExpc3RlbmVyVG9WOE9iamVjdChldmVudExpc3RlbmVyLmdldCgpKTsKKyAgICAgICAgfQorCiAg
ICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50TGlzdGVuZXJU
b1Y4T2JqZWN0KEV2ZW50TGlzdGVuZXIqKTsKIAogICAgICAgICAvLyBET01JbXBsZW1lbnRhdGlv
biBpcyBhIHNpbmdsZXRvbiBhbmQgaXQgaXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oCShyZXZpc2lvbiA0NjM0MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MywxOCArNTMsMTQgQEAgcHVibGljOgogdGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlw
ZT4KIGNsYXNzIFY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdCA6IHB1YmxpYyBWOFNW
R1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFNWR1BPRExp
c3RJdGVtPFBPRFR5cGU+IFBPRExpc3RJdGVtUHRyVHlwZTsKKwogICAgIHR5cGVkZWYgUE9EVHlw
ZSAoU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT46OipHZXR0ZXJNZXRob2QpKCkgY29uc3Q7CiAgICAg
dHlwZWRlZiB2b2lkIChTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6KlNldHRlck1ldGhvZCkoUE9E
VHlwZSk7CiAKLSAgICBWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QoU1ZHUE9ETGlz
dEl0ZW08UE9EVHlwZT4qIGNyZWF0b3IsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpCi0gICAgICAgIDogbV9jcmVhdG9yKGNyZWF0b3IpCi0gICAgICAgICwgbV9nZXR0ZXIoJlNW
R1BPRExpc3RJdGVtPFBPRFR5cGU+Ojp2YWx1ZSkKLSAgICAgICAgLCBtX3NldHRlcigmU1ZHUE9E
TGlzdEl0ZW08UE9EVHlwZT46OnNldFZhbHVlKQotICAgICAgICAsIG1fYXNzb2NpYXRlZEF0dHJp
YnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOFNWR1BPRFR5
cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPFBPRExpc3RJdGVtUHRy
VHlwZT4gY3JlYXRvciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChtX2NyZWF0b3IpOwotICAgICAgICBBU1NFUlQobV9nZXR0ZXIpOwot
ICAgICAgICBBU1NFUlQobV9zZXR0ZXIpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdChjcmVhdG9yLCBhdHRyaWJ1dGVOYW1lKSk7
CiAgICAgfQogCiAgICAgdmlydHVhbCB+VjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0
KCkgeyB9CkBAIC04NSw2ICs4MSwxNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAg
IFY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdChQYXNzUmVmUHRyPFBPRExpc3RJdGVt
UHRyVHlwZT4gY3JlYXRvciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAg
ICAgICAgOiBtX2NyZWF0b3IoY3JlYXRvcikKKyAgICAgICAgLCBtX2dldHRlcigmU1ZHUE9ETGlz
dEl0ZW08UE9EVHlwZT46OnZhbHVlKQorICAgICAgICAsIG1fc2V0dGVyKCZTVkdQT0RMaXN0SXRl
bTxQT0RUeXBlPjo6c2V0VmFsdWUpCisgICAgICAgICwgbV9hc3NvY2lhdGVkQXR0cmlidXRlTmFt
ZShhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY3JlYXRvcik7CisgICAg
ICAgIEFTU0VSVChtX2dldHRlcik7CisgICAgICAgIEFTU0VSVChtX3NldHRlcik7CisgICAgfQor
CiAgICAgLy8gVXBkYXRlIGNhbGxiYWNrcwogICAgIFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxQT0RU
eXBlPiA+IG1fY3JlYXRvcjsKICAgICBHZXR0ZXJNZXRob2QgbV9nZXR0ZXI7CkBAIC05NSw5ICsx
MDIsOSBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlwZT4KIGNsYXNzIFY4U1ZH
U3RhdGljUE9EVHlwZVdyYXBwZXIgOiBwdWJsaWMgVjhTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBl
PiB7CiBwdWJsaWM6Ci0gICAgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcihQT0RUeXBlIHR5cGUp
Ci0gICAgICAgIDogbV9wb2RUeXBlKHR5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcj4gY3JlYXRlKFBPRFR5cGUgdHlwZSkKICAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcih0eXBlKSk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCB+VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcigpIHsgfQpAQCAt
MTExLDcgKzExOCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcG9kVHlwZSA9IHR5cGU7CiAgICAg
fQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXIo
UE9EVHlwZSB0eXBlKQorICAgICAgICA6IG1fcG9kVHlwZSh0eXBlKQorICAgIHsKKyAgICB9CisK
ICAgICBQT0RUeXBlIG1fcG9kVHlwZTsKIH07CiAKQEAgLTEyMCwxMCArMTMyLDkgQEAgY2xhc3Mg
VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeQogcHVibGljOgogICAgIHR5cGVkZWYg
VjhTVkdQT0RUeXBlV3JhcHBlcjxQYXJlbnRUeXBlQXJnPiBQYXJlbnRUeXBlOwogCi0gICAgIFY4
U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudChQT0RUeXBlIHR5cGUsIFBh
cmVudFR5cGUqIHBhcmVudCkKLSAgICAgICAgOiBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFBP
RFR5cGU+KHR5cGUpCi0gICAgICAgICwgbV9wYXJlbnRUeXBlKHBhcmVudCkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQ+IGNy
ZWF0ZShQT0RUeXBlIHR5cGUsIFBhc3NSZWZQdHI8UGFyZW50VHlwZT4gcGFyZW50KQogICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0
aFBPRFR5cGVQYXJlbnQodHlwZSwgcGFyZW50KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpCkBAIC0xMzMs
NiArMTQ0LDEyIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgVjhTVkdTdGF0aWNQ
T0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFyZW50KFBPRFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxQ
YXJlbnRUeXBlPiBwYXJlbnQpCisgICAgICAgIDogVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxQ
T0RUeXBlPih0eXBlKQorICAgICAgICAsIG1fcGFyZW50VHlwZShwYXJlbnQpCisgICAgeworICAg
IH0KKwogICAgIFJlZlB0cjxQYXJlbnRUeXBlPiBtX3BhcmVudFR5cGU7CiB9OwogCkBAIC0xNDIs
MTQgKzE1OSw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFBPRFR5cGUgKFBhcmVudFR5cGU6OipH
ZXR0ZXJNZXRob2QpKCkgY29uc3Q7CiAgICAgdHlwZWRlZiB2b2lkIChQYXJlbnRUeXBlOjoqU2V0
dGVyTWV0aG9kKShjb25zdCBQT0RUeXBlJik7CiAKLSAgICBWOFNWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyV2l0aFBhcmVudChQYXJlbnRUeXBlKiBwYXJlbnQsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNl
dHRlck1ldGhvZCBzZXR0ZXIpCi0gICAgICAgIDogbV9wYXJlbnQocGFyZW50KQotICAgICAgICAs
IG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQ+IGNyZWF0ZShQ
YXNzUmVmUHRyPFBhcmVudFR5cGU+IHBhcmVudCwgR2V0dGVyTWV0aG9kIGdldHRlciwgU2V0dGVy
TWV0aG9kIHNldHRlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3BhcmVudCk7Ci0gICAgICAg
IEFTU0VSVChtX2dldHRlcik7Ci0gICAgICAgIEFTU0VSVChtX3NldHRlcik7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQocGFy
ZW50LCBnZXR0ZXIsIHNldHRlcikpOwogICAgIH0KIAogICAgIHZpcnR1YWwgb3BlcmF0b3IgUE9E
VHlwZSgpCkBAIC0xNjMsNiArMTc1LDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Cisg
ICAgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQoUGFzc1JlZlB0cjxQYXJlbnRU
eXBlPiBwYXJlbnQsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIpCisg
ICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAg
ICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV9wYXJlbnQp
OworICAgICAgICBBU1NFUlQobV9nZXR0ZXIpOworICAgICAgICBBU1NFUlQobV9zZXR0ZXIpOwor
ICAgIH0KKwogICAgIFJlZlB0cjxQYXJlbnRUeXBlPiBtX3BhcmVudDsKICAgICBHZXR0ZXJNZXRo
b2QgbV9nZXR0ZXI7CiAgICAgU2V0dGVyTWV0aG9kIG1fc2V0dGVyOwpAQCAtMTc1LDE2ICsxOTcs
OSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiB2b2lkIChQT0RUeXBlQ3JlYXRvcjo6KlNldHRlck1l
dGhvZCkoUE9EVHlwZSk7CiAgICAgdHlwZWRlZiB2b2lkICgqQ2FjaGVSZW1vdmFsQ2FsbGJhY2sp
KFY4U1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4qKTsKIAotICAgIFY4U1ZHRHluYW1pY1BPRFR5
cGVXcmFwcGVyKFBPRFR5cGVDcmVhdG9yKiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBT
ZXR0ZXJNZXRob2Qgc2V0dGVyLCBDYWNoZVJlbW92YWxDYWxsYmFjayBjYWNoZVJlbW92YWxDYWxs
YmFjaykKLSAgICAgICAgOiBtX2NyZWF0b3IoY3JlYXRvcikKLSAgICAgICAgLCBtX2dldHRlcihn
ZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgICAgICAsIG1fY2FjaGVSZW1v
dmFsQ2FsbGJhY2soY2FjaGVSZW1vdmFsQ2FsbGJhY2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXI+IGNyZWF0ZShQYXNzUmVmUHRyPFBPRFR5cGVDcmVh
dG9yPiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVyLCBD
YWNoZVJlbW92YWxDYWxsYmFjayBjYWNoZVJlbW92YWxDYWxsYmFjaykKICAgICB7Ci0gICAgICAg
IEFTU0VSVChjcmVhdG9yKTsKLSAgICAgICAgQVNTRVJUKGdldHRlcik7Ci0gICAgICAgIEFTU0VS
VChzZXR0ZXIpOwotICAgICAgICBBU1NFUlQoY2FjaGVSZW1vdmFsQ2FsbGJhY2spOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyKGNyZWF0b3Is
IGdldHRlciwgc2V0dGVyLCBjYWNoZVJlbW92YWxDYWxsYmFjaykpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgflY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyKCkgewpAQCAtMjA2LDYgKzIyMSwxOCBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIFY4U1ZHRHluYW1pY1BPRFR5cGVXcmFw
cGVyKFBhc3NSZWZQdHI8UE9EVHlwZUNyZWF0b3I+IGNyZWF0b3IsIEdldHRlck1ldGhvZCBnZXR0
ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIsIENhY2hlUmVtb3ZhbENhbGxiYWNrIGNhY2hlUmVtb3Zh
bENhbGxiYWNrKQorICAgICAgICA6IG1fY3JlYXRvcihjcmVhdG9yKQorICAgICAgICAsIG1fZ2V0
dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgICAgICwgbV9jYWNo
ZVJlbW92YWxDYWxsYmFjayhjYWNoZVJlbW92YWxDYWxsYmFjaykKKyAgICB7CisgICAgICAgIEFT
U0VSVChjcmVhdG9yKTsKKyAgICAgICAgQVNTRVJUKGdldHRlcik7CisgICAgICAgIEFTU0VSVChz
ZXR0ZXIpOworICAgICAgICBBU1NFUlQoY2FjaGVSZW1vdmFsQ2FsbGJhY2spOworICAgIH0KKwog
ICAgIC8vIFVwZGF0ZSBjYWxsYmFja3MKICAgICBSZWZQdHI8UE9EVHlwZUNyZWF0b3I+IG1fY3Jl
YXRvcjsKICAgICBHZXR0ZXJNZXRob2QgbV9nZXR0ZXI7CkBAIC0zMjMsNyArMzUwLDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIC8vIFVzZWQgZm9yIHJlYWR3cml0ZSBhdHRyaWJ1dGVzIG9ubHkK
LSAgICBzdGF0aWMgV3JhcHBlckJhc2UqIGxvb2t1cE9yQ3JlYXRlV3JhcHBlcihQT0RUeXBlQ3Jl
YXRvciogY3JlYXRvciwgR2V0dGVyTWV0aG9kIGdldHRlciwgU2V0dGVyTWV0aG9kIHNldHRlcikK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXcmFwcGVyQmFzZT4gbG9va3VwT3JDcmVhdGVXcmFwcGVy
KFBPRFR5cGVDcmVhdG9yKiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRo
b2Qgc2V0dGVyKQogICAgIHsKICAgICAgICAgRHluYW1pY1dyYXBwZXJIYXNoTWFwJiBtYXAoZHlu
YW1pY1dyYXBwZXJIYXNoTWFwKCkpOwogICAgICAgICBDYWNoZUluZm8gaW5mbyhjcmVhdG9yLCBn
ZXR0ZXIsIHNldHRlcik7CkBAIC0zMzEsOSArMzU4LDkgQEAgcHVibGljOgogICAgICAgICBpZiAo
bWFwLmNvbnRhaW5zKGluZm8pKQogICAgICAgICAgICAgcmV0dXJuIG1hcC5nZXQoaW5mbyk7CiAK
LSAgICAgICAgRHluYW1pY1dyYXBwZXIqIHdyYXBwZXIgPSBuZXcgVjhTVkdEeW5hbWljUE9EVHlw
ZVdyYXBwZXI8UE9EVHlwZSwgUE9EVHlwZUNyZWF0b3I+KGNyZWF0b3IsIGdldHRlciwgc2V0dGVy
LCBmb3JnZXRXcmFwcGVyKTsKLSAgICAgICAgbWFwLnNldChpbmZvLCB3cmFwcGVyKTsKLSAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIFJlZlB0cjxEeW5hbWljV3JhcHBlcj4gd3JhcHBl
ciA9IFY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyPFBPRFR5cGUsIFBPRFR5cGVDcmVhdG9yPjo6
Y3JlYXRlKGNyZWF0b3IsIGdldHRlciwgc2V0dGVyLCBmb3JnZXRXcmFwcGVyKTsKKyAgICAgICAg
bWFwLnNldChpbmZvLCB3cmFwcGVyLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIucmVs
ZWFzZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGZvcmdldFdyYXBwZXIoVjhTVkdQT0RU
eXBlV3JhcHBlcjxQT0RUeXBlPiogd3JhcHBlcikKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAJKHJldmlzaW9uIDQ2MzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDUsNyArMzQ1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAog
ICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgICAgIHJl
dHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUEFU
VEVSTiwgcGF0dGVybi5nZXQoKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUEFUVEVSTiwgcGF0dGVybi5yZWxlYXNl
KCkpOwogICAgIH0KIAogICAgIGlmIChWOEhUTUxDYW52YXNFbGVtZW50OjpIYXNJbnN0YW5jZShh
cmcpKSB7CkBAIC0zNTYsNyArMzU2LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRl
cmluZ0NvbnRleAogICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAg
ICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6Q0FOVkFTUEFUVEVSTiwgcGF0dGVybi5nZXQoKSk7CisgICAgICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUEFUVEVSTiwgcGF0
dGVybi5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihU
WVBFX01JU01BVENIX0VSUik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENs
aWVudFJlY3RMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYzNDMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDbGll
bnRSZWN0TGlzdCkKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OkNMSUVOVFJFQ1QsIHJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDTElFTlRSRUNU
LCByZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmNwcAkocmV2aXNpb24gNDYzNDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFzc1JlZlB0cjxWOEN1c3RvbVhQYXRo
TlNSZXNvbHZlcj4gVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHJlc29sdmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21Y
UGF0aE5TUmVzb2x2ZXIocmVzb2x2ZXIpKTsKK30KKwogVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXI6
OlY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzb2x2ZXIp
CiAgICAgOiBtX3Jlc29sdmVyKHJlc29sdmVyKQogewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiA0
NjM0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29s
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDEwIEBACiAKICNpZiBFTkFCTEUoWFBB
VEgpCiAKLSNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2lu
Y2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsMTMgKzQ1LDE0IEBAIGNsYXNz
IFN0cmluZzsKIAogY2xhc3MgVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIgOiBwdWJsaWMgWFBhdGhO
U1Jlc29sdmVyIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEN1c3RvbVhQYXRo
TlNSZXNvbHZlcj4gY3JlYXRlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzb2x2ZXIpOwogCi0g
ICAgVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZXNvbHZl
cik7CiAgICAgdmlydHVhbCB+VjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIoKTsKLQogICAgIHZpcnR1
YWwgU3RyaW5nIGxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBTdHJpbmcmIHByZWZpeCk7CiAKIHBy
aXZhdGU6CisgICAgVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiByZXNvbHZlcik7CisKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG1fcmVzb2x2ZXI7ICAv
LyBIYW5kbGUgdG8gcmVzb2x2ZXIgb2JqZWN0LgogfTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYzNDMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxMiw3ICs4MTIsNyBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoRE9N
V2luZG93KQogICAgICAgICAgICAgaWYgKGl0ZW1zLT5sZW5ndGgoKSA9PSAxKQogICAgICAgICAg
ICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChpdGVtcy0+
Zmlyc3RJdGVtKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJ
T04sIGl0ZW1zLmdldCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBpdGVtcy5yZWxl
YXNlKCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYzNDMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMzUgKzUyLDM1IEBAIENBTExCQUNLX0ZVTkNfREVDTChEb2N1bWVudEV2YWx1YXRl
KQogewogICAgIElOQ19TVEFUUygiRE9NLkRvY3VtZW50LmV2YWx1YXRlKCkiKTsKIAotICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
RG9jdW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPERvY3VtZW50PihhcmdzLkhv
bGRlcigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgZXhwcmVzc2lv
biA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICBOb2RlKiBjb250ZXh0Tm9kZSA9IDA7
CisgICAgUmVmUHRyPE5vZGU+IGNvbnRleHROb2RlOwogICAgIGlmIChWOE5vZGU6Okhhc0luc3Rh
bmNlKGFyZ3NbMV0pKQogICAgICAgICBjb250ZXh0Tm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdz
WzFdKSk7CiAKLSAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0gMDsKKyAgICBSZWZQdHI8
WFBhdGhOU1Jlc29sdmVyPiByZXNvbHZlcjsKICAgICBpZiAoVjhYUGF0aE5TUmVzb2x2ZXI6Okhh
c0luc3RhbmNlKGFyZ3NbMl0pKQogICAgICAgICByZXNvbHZlciA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0luZGV4OjpYUEFUSE5T
UkVTT0xWRVIsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpOwogICAgIGVs
c2UgaWYgKGFyZ3NbMl0tPklzT2JqZWN0KCkpCi0gICAgICAgIHJlc29sdmVyID0gbmV3IFY4Q3Vz
dG9tWFBhdGhOU1Jlc29sdmVyKGFyZ3NbMl0tPlRvT2JqZWN0KCkpOworICAgICAgICByZXNvbHZl
ciA9IFY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUoYXJnc1syXS0+VG9PYmplY3QoKSk7
CiAgICAgZWxzZSBpZiAoIWFyZ3NbMl0tPklzTnVsbCgpICYmICFhcmdzWzJdLT5Jc1VuZGVmaW5l
ZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKICAg
ICBpbnQgdHlwZSA9IHRvSW50MzIoYXJnc1szXSk7Ci0gICAgWFBhdGhSZXN1bHQqIGluUmVzdWx0
ID0gMDsKKyAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IGluUmVzdWx0OwogICAgIGlmIChWOFhQYXRo
UmVzdWx0OjpIYXNJbnN0YW5jZShhcmdzWzRdKSkKICAgICAgICAgaW5SZXN1bHQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYUGF0aFJlc3VsdD4oVjhDbGFzc0luZGV4OjpY
UEFUSFJFU1VMVCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzRdKSk7CiAKICAg
ICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKLSAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+
IHJlc3VsdCA9IGRvY3VtZW50LT5ldmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZSwgcmVz
b2x2ZXIsIHR5cGUsIGluUmVzdWx0LCBlYyk7CisgICAgUmVmUHRyPFhQYXRoUmVzdWx0PiByZXN1
bHQgPSBkb2N1bWVudC0+ZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4dE5vZGUuZ2V0KCksIHJl
c29sdmVyLmdldCgpLCB0eXBlLCBpblJlc3VsdC5nZXQoKSwgZWMpOwogICAgIGlmIChleGNlcHRp
b25DYXRjaGVyLkhhc0NhdWdodCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGNlcHRp
b25DYXRjaGVyLkV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZWMpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpYUEFUSFJFU1VMVCwgcmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlhQQVRIUkVTVUxU
LCByZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50R2V0
Q1NTQ2FudmFzQ29udGV4dCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxl
bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYzNDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4
NSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChFbGVtZW50U2V0QXR0cmlidXRlTm8KICAgICBpZiAo
ZWMpCiAgICAgICAgIHRocm93RXJyb3IoZWMpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiBDQUxM
QkFDS19GVU5DX0RFQ0woRWxlbWVudFNldEF0dHJpYnV0ZU5TKQpAQCAtMTI0LDcgKzEyNCw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChFbGVtZW50U2V0QXR0cmlidXRlTm8KICAgICBpZiAoZWMpCiAg
ICAgICAgIHRocm93RXJyb3IoZWMpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiBzdGF0aWMgaW5s
aW5lIFN0cmluZyB0b0V2ZW50VHlwZSh2ODo6TG9jYWw8djg6OlN0cmluZz4gdmFsdWUpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYzNDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcs
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVkSXRlCiAgICAgICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUo
KSA9PSAxKQotICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmpl
Y3QobmFtZWRJdGVtcy5hdCgwKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnROb2RlVG9WOE9iamVjdChuYW1lZEl0ZW1zLmF0KDApLnJlbGVhc2UoKSk7CiAKICAg
ICBOb2RlTGlzdCogbGlzdCA9IG5ldyBWOE5hbWVkTm9kZXNDb2xsZWN0aW9uKG5hbWVkSXRlbXMp
OwogICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6Tk9ERUxJU1QsIGxpc3QpOwpAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGdldEl0ZW0oSFRNCiAgICAgfQogCiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9
IGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgtPlVpbnQzMlZhbHVlKCkpOwotICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsK
IH0KIAogTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxDb2xsZWN0aW9uKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gNDYzNDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgTkFNRURfUFJP
UEVSVFlfR0VUVEVSKEhUTUxEb2N1bWVudCkKICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUpOwogICAgIH0KIAotICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIGl0
ZW1zLmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBpdGVtcy5yZWxlYXNlKCkpOwogfQogCiAvLyBI
VE1MRG9jdW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTgwLDggKzE4MCw3IEBAIEFDQ0VTU09SX0dFVFRFUihI
VE1MRG9jdW1lbnRBbGwpCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKICAgICBIVE1MRG9jdW1lbnQq
IGh0bWxEb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRN
TERvY3VtZW50Pihob2xkZXIpOwotICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbGVjdGlv
biA9IFdURjo6Z2V0UHRyKGh0bWxEb2N1bWVudC0+YWxsKCkpOwotICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIFdU
Rjo6Z2V0UHRyKGNvbGxlY3Rpb24pKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBodG1sRG9jdW1lbnQtPmFs
bCgpKTsKIH0KIAogQUNDRVNTT1JfU0VUVEVSKEhUTUxEb2N1bWVudEFsbCkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDQ2MzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTEg
QEAgSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoSFRNTEZvcm1FbGVtZW50KQogewogICAgIElOQ19T
VEFUUygiRE9NLkhUTUxGb3JtRWxlbWVudC5JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKICAgICBI
VE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPEhUTUxGb3JtRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7Ci0gICAgCisKICAgICBSZWZQdHI8
Tm9kZT4gZm9ybUVsZW1lbnQgPSBmb3JtLT5lbGVtZW50cygpLT5pdGVtKGluZGV4KTsKICAgICBp
ZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoZm9ybUVs
ZW1lbnQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9i
amVjdChmb3JtRWxlbWVudC5yZWxlYXNlKCkpOwogfQogCiAKQEAgLTc0LDEyICs3NCwxMiBAQCBO
QU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTEZvcm1FbGVtZW50KQogICAgIEFTU0VSVCghZWxlbWVu
dHMuaXNFbXB0eSgpKTsKIAogICAgIGlmIChlbGVtZW50cy5zaXplKCkgPT0gMSkKLSAgICAgICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGVsZW1lbnRzLmF0KDAp
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2Jq
ZWN0KGVsZW1lbnRzLmF0KDApLnJlbGVhc2UoKSk7CiAKICAgICBOb2RlTGlzdCogY29sbGVjdGlv
biA9IG5ldyBWOE5hbWVkTm9kZXNDb2xsZWN0aW9uKGVsZW1lbnRzKTsKICAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBjb2xs
ZWN0aW9uKTsKIH0KLSAgICAKKwogQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxGb3JtRWxlbWVudFN1
Ym1pdCkgewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxGb3JtRWxlbWVudC5zdWJtaXQoKSIpOwog
ICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxIVE1MRm9ybUVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNDYzNDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiw3ICsxMjIsNyBAQCBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1MT3B0aW9uc0Nv
bGxlCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KHJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4
T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiBJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihI
VE1MT3B0aW9uc0NvbGxlY3Rpb24pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxTZWxlY3RFbGVtZW50Q29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudENvbGxlY3Rpb25DdXN0
b20uY3BwCShyZXZpc2lvbiA0NjM0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNyArNjIsNyBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTFNlbGVjdEVsZW1lbnRDCiAg
ICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCiAgICAgaWYgKGl0ZW1z
LnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRv
VjhPYmplY3QoaXRlbXMuYXQoMCkuZ2V0KCkpOworICAgICAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoaXRlbXMuYXQoMCkucmVsZWFzZSgpKTsKIAogICAgIE5v
ZGVMaXN0KiBsaXN0ID0gbmV3IFY4TmFtZWROb2Rlc0NvbGxlY3Rpb24oaXRlbXMpOwogICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9ERUxJ
U1QsIGxpc3QpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JD
b250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCShyZXZpc2lvbiA0NjM0MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
SW5zcGVjdG9yQ29udHJvbGxlclNlCiAgICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2li
bGVQb3NpdGlvbihzZWFyY2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCiAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICByZXN1bHQtPlNldCh2ODo6TnVtYmVyOjpOZXcoaW5kZXgrKyksIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3Q8UmFuZ2U+KFY4Q2xhc3NJbmRleDo6UkFOR0Us
IHJlc3VsdFJhbmdlLmdldCgpKSk7CisgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5l
dyhpbmRleCsrKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OlJBTkdFLCByZXN1bHRSYW5nZS5yZWxlYXNlKCkpKTsKIAogICAgICAgICBzZXRTdGFydChzZWFy
Y2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOwogICAgIH0gd2hpbGUgKHRydWUpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNw
cAkocmV2aXNpb24gNDYzNDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVk
Tm9kZU1hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgSU5ERVhF
RF9QUk9QRVJUWV9HRVRURVIoTmFtZWROb2RlTWFwKQogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKIH0K
IAogTkFNRURfUFJPUEVSVFlfR0VUVEVSKE5hbWVkTm9kZU1hcCkKQEAgLTY4LDcgKzY4LDcgQEAg
TkFNRURfUFJPUEVSVFlfR0VUVEVSKE5hbWVkTm9kZU1hcCkKICAgICBpZiAoIXJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKKyAgICByZXR1
cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDQ2MzQz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIHY4OjpO
dWxsKCk7CiAKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
b2JqZWN0LmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhP
YmplY3Qob2JqZWN0KTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVJdGVyYXRvck5leHRO
b2RlKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1
c3RvbS5jcHAJKHJldmlzaW9uIDQ2MzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhOb2RlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgTkFN
RURfUFJPUEVSVFlfR0VUVEVSKE5vZGVMaXN0KQogICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTVkdNYXRyaXhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcAkocmV2aXNpb24gNDYzNDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFNWR01hdHJpeEludmVyc2UpCiAg
ICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9CiAKLSAgICByZXR1
cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNWR01BVFJJ
WCwgbmV3IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+KHJl
c3VsdCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6U1ZHTUFUUklYLCBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0
aW9uTWF0cml4Pjo6Y3JlYXRlKHJlc3VsdCkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woU1ZH
TWF0cml4Um90YXRlRnJvbVZlY3RvcikKQEAgLTc4LDcgKzc4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKFNWR01hdHJpeFJvdGF0ZUZyb21WZQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIG5ldyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4PihyZXN1bHQpKTsKKyAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNWR01BVFJJWCwgVjhTVkdTdGF0
aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShyZXN1bHQpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiA0NjM0MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
IAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChvYmplY3Qu
Z2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChv
YmplY3QpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woVHJlZVdhbGtlclBhcmVudE5vZGUpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3Nv
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDQ2MzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcs
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWFNMVFByb2Nlc3NvclRyYW5zZm9yCiAgICAgTm9kZSog
c291cmNlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBEb2N1bWVudCogb3duZXIg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPERvY3VtZW50Pih2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pKTsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gcmVzdWx0ID0gaW1wLT50cmFuc2Zvcm1Ub0ZyYWdtZW50KHNvdXJjZSwgb3duZXIpOwot
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0
KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1
bHQucmVsZWFzZSgpKTsKIH0KIAogCkBAIC05OCw3ICs5OCw3IEBAIENBTExCQUNLX0ZVTkNfREVD
TChYU0xUUHJvY2Vzc29yVHJhbnNmb3IKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2Rl
VG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogCg==
</data>
<flag name="review"
          id="17718"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>